OSSP CVS Repository

ossp - Check-in [2265]
Not logged in
[Honeypot]  [Browse]  [Home]  [Login]  [Reports
[Search]  [Ticket]  [Timeline
  [Patchset]  [Tagging/Branching

Check-in Number: 2265
Date: 2002-Jul-10 10:46:24 (local)
2002-Jul-10 08:46:24 (UTC)
User:rse
Branch:
Comment: add development tools documentation files
Tickets:
Inspections:
Files:
ossp-adm/autotools/README      added-> 1.1
ossp-adm/autotools/autoconf.html      added-> 1.1
ossp-adm/autotools/bison.html      added-> 1.1
ossp-adm/autotools/flex.html      added-> 1.1
ossp-adm/autotools/lex.pdf      added-> 1.1
ossp-adm/autotools/lexyacc-code.zip      added-> 1.1
ossp-adm/autotools/lexyacc.pdf      added-> 1.1
ossp-adm/autotools/lexyacc.ps      added-> 1.1
ossp-adm/autotools/libtool.html      added-> 1.1
ossp-adm/autotools/oper-code.zip      added-> 1.1
ossp-adm/autotools/oper.pdf      added-> 1.1
ossp-adm/autotools/shtool.html      added-> 1.1
ossp-adm/autotools/treecc.html      added-> 1.1
ossp-adm/autotools/treecc.pdf      added-> 1.1
ossp-adm/autotools/yacc.pdf      added-> 1.1

ossp-adm/autotools/README -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:58 2024
***************
*** 0 ****
--- 1,18 ----
+ 
+ Development Tools Documentation
+ ===============================
+ 
+ autoconf.html ....... GNU Autoconf 2.53
+ bison.html .......... GNU Bison 1.30 manual
+ flex.html ........... GNU Flex 2.5.8 manual (beta!)
+ lex.pdf ............. Original Lex manual page
+ lexyacc-code.zip .... corresponding code
+ lexyacc.pdf ......... ePaperPress Compact Guide to Lex & Yacc http://epaperpress.com/lexandyacc/
+ libtool.html ........ GNU Libtool 1.4.2
+ oper-code.zip ....... corresponding code
+ oper.pdf ............ ePaperPress How To Parse Expression http://epaperpress.com/oper/
+ shtool.html ......... GNU Shtool 1.6.0
+ treecc.html ......... TreeCC 0.1.0 manual
+ treecc.pdf .......... FSM, http://www.rons.net.cn/english/FSM/issue02
+ yacc.pdf ............ Original Yacc manual page
+ 


ossp-adm/autotools/autoconf.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:58 2024
***************
*** 0 ****
--- 1,17513 ----
+ <HTML>
+ <HEAD>
+ <!-- Created by texi2html 1.56k from autoconf.texi on 10 July 2002 -->
+ 
+ <TITLE>Autoconf</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>Autoconf</H1>
+ <H2>Creating Automatic Configuration Scripts</H2>
+ <H2>Edition 2.53, for Autoconf version 2.53</H2>
+ <H2>8 March 2002</H2>
+ <ADDRESS>David MacKenzie</ADDRESS>
+ <ADDRESS>Ben Elliston</ADDRESS>
+ <ADDRESS>Akim Demaille</ADDRESS>
+ <P>
+ <P><HR><P>
+ 
+ 
+ <H1><A NAME="SEC1" HREF="autoconf_toc.html#TOC1">Introduction</A></H1>
+ 
+ 
+ <PRE>
+ A physicist, an engineer, and a computer scientist were discussing the
+ nature of God.  ``Surely a Physicist,'' said the physicist, ``because
+ early in the Creation, God made Light; and you know, Maxwell's
+ equations, the dual nature of electromagnetic waves, the relativistic
+ consequences...'' ``An Engineer!,'' said the engineer, ``because
+ before making Light, God split the Chaos into Land and Water; it takes a
+ hell of an engineer to handle that big amount of mud, and orderly
+ separation of solids from liquids...'' The computer scientist
+ shouted: ``And the Chaos, where do you think it was coming from, hmm?''
+ 
+ ---Anonymous
+ </PRE>
+ 
+ <P>
+ Autoconf is a tool for producing shell scripts that automatically
+ configure software source code packages to adapt to many kinds of
+ UNIX-like systems.  The configuration scripts produced by Autoconf
+ are independent of Autoconf when they are run, so their users do not
+ need to have Autoconf.
+ 
+ 
+ <P>
+ The configuration scripts produced by Autoconf require no manual user
+ intervention when run; they do not normally even need an argument
+ specifying the system type.  Instead, they individually test for the
+ presence of each feature that the software package they are for might need.
+ (Before each check, they print a one-line message stating what they are
+ checking for, so the user doesn't get too bored while waiting for the
+ script to finish.)  As a result, they deal well with systems that are
+ hybrids or customized from the more common UNIX variants.  There is
+ no need to maintain files that list the features supported by each
+ release of each variant of UNIX.
+ 
+ 
+ <P>
+ For each software package that Autoconf is used with, it creates a
+ configuration script from a template file that lists the system features
+ that the package needs or can use.  After the shell code to recognize
+ and respond to a system feature has been written, Autoconf allows it to
+ be shared by many software packages that can use (or need) that feature.
+ If it later turns out that the shell code needs adjustment for some
+ reason, it needs to be changed in only one place; all of the
+ configuration scripts can be regenerated automatically to take advantage
+ of the updated code.
+ 
+ 
+ <P>
+ The Metaconfig package is similar in purpose to Autoconf, but the
+ scripts it produces require manual user intervention, which is quite
+ inconvenient when configuring large source trees.  Unlike Metaconfig
+ scripts, Autoconf scripts can support cross-compiling, if some care is
+ taken in writing them.
+ 
+ 
+ <P>
+ Autoconf does not solve all problems related to making portable software
+ packages--for a more complete solution, it should be used in concert
+ with other GNU build tools like Automake and Libtool.  These other tools
+ take on jobs like the creation of a portable, recursive <TT>`Makefile'</TT>
+ with all of the standard targets, linking of shared libraries, and so
+ on.  See section <A HREF="autoconf.html#SEC2">The GNU build system</A>, for more information.
+ 
+ 
+ <P>
+ Autoconf imposes some restrictions on the names of macros used with
+ <CODE>#if</CODE> in C programs (see section <A HREF="autoconf.html#SEC186">Preprocessor Symbol Index</A>).
+ 
+ 
+ <P>
+ Autoconf requires GNU M4 in order to generate the scripts.  It uses
+ features that some UNIX versions of M4, including GNU M4 1.3,
+ do not have.  You must use version 1.4 or later of GNU M4.
+ 
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC151">Upgrading From Version 1</A>, for information about upgrading from version 1.
+ See section <A HREF="autoconf.html#SEC174">History of Autoconf</A>, for the story of Autoconf's development.
+ See section <A HREF="autoconf.html#SEC169">Questions About Autoconf</A>, for answers to some common questions about Autoconf.
+ 
+ 
+ <P>
+ See the @href{http://www.gnu.org/software/autoconf/autoconf.html,
+ Autoconf web page} for up-to-date information, details on the mailing
+ lists, pointers to a list of known bugs, etc.
+ 
+ 
+ <P>
+ Mail suggestions to <A HREF="mailto:autoconf@gnu.org">the Autoconf mailing
+ list</A>.
+ 
+ 
+ <P>
+ Bug reports should be preferably submitted to the
+ @href{http://sources.redhat.com/cgi-bin/gnatsweb.pl?database=autoconf,
+ Autoconf Gnats database}, or sent to <A HREF="mailto:bug-autoconf@gnu.org">the
+ Autoconf Bugs mailing list</A>.  If possible, first check that your bug is
+ not already solved in current development versions, and that it has not
+ been reported yet.  Be sure to include all the needed information and a
+ short <TT>`configure.ac'</TT> that demonstrates the problem.
+ 
+ 
+ <P>
+ Autoconf's development tree is accessible via CVS; see the Autoconf
+ web page for details.  There is also a
+ @href{http://subversions.gnu.org/cgi-bin/cvsweb/autoconf/, CVSweb
+ interface to the Autoconf development tree}.  Patches relative to the
+ current CVS version can be sent for review to the
+ <A HREF="mailto:autoconf-patches@gnu.org">Autoconf Patches mailing list</A>.
+ 
+ 
+ <P>
+ Because of its mission, Autoconf includes only a set of often-used
+ macros that have already demonstrated their usefulness.  Nevertheless,
+ if you wish to share your macros, or find existing ones, see the
+ @href{http://www.gnu.org/software/ac-archive/, Autoconf Macro
+ Archive}, which is kindly run by <A HREF="mailto:simons@computer.org">Peter Simons</A>.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC2" HREF="autoconf_toc.html#TOC2">The GNU build system</A></H1>
+ 
+ <P>
+ Autoconf solves an important problem--reliable discovery of
+ system-specific build and runtime information--but this is only one
+ piece of the puzzle for the development of portable software.  To this
+ end, the GNU project has developed a suite of integrated utilities to
+ finish the job Autoconf started: the GNU build system, whose most
+ important components are Autoconf, Automake, and Libtool.  In this
+ chapter, we introduce you to those tools, point you to sources of more
+ information, and try to convince you to use the entire GNU build system
+ for your software.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC3" HREF="autoconf_toc.html#TOC3">Automake</A></H2>
+ 
+ <P>
+ The ubiquity of <CODE>make</CODE> means that a <CODE>Makefile</CODE> is almost the
+ only viable way to distribute automatic build rules for software, but
+ one quickly runs into <CODE>make</CODE>'s numerous limitations.  Its lack of
+ support for automatic dependency tracking, recursive builds in
+ subdirectories, reliable timestamps (e.g. for network filesystems), and
+ so on, mean that developers must painfully (and often incorrectly)
+ reinvent the wheel for each project.  Portability is non-trivial, thanks
+ to the quirks of <CODE>make</CODE> on many systems.  On top of all this is the
+ manual labor required to implement the many standard targets that users
+ have come to expect (<CODE>make install</CODE>, <CODE>make distclean</CODE>,
+ <CODE>make uninstall</CODE>, etc.).  Since you are, of course, using Autoconf,
+ you also have to insert repetitive code in your <CODE>Makefile.in</CODE> to
+ recognize <CODE>@CC@</CODE>, <CODE>@CFLAGS@</CODE>, and other substitutions
+ provided by @command{configure}.  Into this mess steps <EM>Automake</EM>.
+ <A NAME="IDX1"></A>
+ 
+ 
+ <P>
+ Automake allows you to specify your build needs in a <CODE>Makefile.am</CODE>
+ file with a vastly simpler and more powerful syntax than that of a plain
+ <CODE>Makefile</CODE>, and then generates a portable <CODE>Makefile.in</CODE> for
+ use with Autoconf.  For example, the <CODE>Makefile.am</CODE> to build and
+ install a simple "Hello world" program might look like:
+ 
+ 
+ 
+ <PRE>
+ bin_PROGRAMS = hello
+ hello_SOURCES = hello.c
+ </PRE>
+ 
+ <P>
+ The resulting <CODE>Makefile.in</CODE> (~400 lines) automatically supports all
+ the standard targets, the substitutions provided by Autoconf, automatic
+ dependency tracking, <CODE>VPATH</CODE> building, and so on.  <CODE>make</CODE> will
+ build the <CODE>hello</CODE> program, and <CODE>make install</CODE> will install it
+ in <TT>`/usr/local/bin'</TT> (or whatever prefix was given to
+ @command{configure}, if not <TT>`/usr/local'</TT>).
+ 
+ 
+ <P>
+ Automake may require that additional tools be present on the
+ <EM>developer's</EM> machine.  For example, the <CODE>Makefile.in</CODE> that
+ the developer works with may not be portable (e.g. it might use special
+ features of your compiler to automatically generate dependency
+ information).  Running <CODE>make dist</CODE>, however, produces a
+ <TT>`hello-1.0.tar.gz'</TT> package (or whatever the program/version is)
+ with a <CODE>Makefile.in</CODE> that will work on any system.
+ 
+ 
+ <P>
+ The benefits of Automake increase for larger packages (especially ones
+ with subdirectories), but even for small programs the added convenience
+ and portability can be substantial.  And that's not all...
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC4" HREF="autoconf_toc.html#TOC4">Libtool</A></H2>
+ 
+ <P>
+ Very often, one wants to build not only programs, but libraries, so that
+ other programs can benefit from the fruits of your labor.  Ideally, one
+ would like to produce <EM>shared</EM> (dynamically-linked) libraries,
+ which can be used by multiple programs without duplication on disk or in
+ memory and can be updated independently of the linked programs.
+ Producing shared libraries portably, however, is the stuff of
+ nightmares--each system has its own incompatible tools, compiler flags,
+ and magic incantations.  Fortunately, GNU provides a solution:
+ <EM>Libtool</EM>.
+ <A NAME="IDX2"></A>
+ 
+ 
+ <P>
+ Libtool handles all the requirements of building shared libraries for
+ you, and at this time seems to be the <EM>only</EM> way to do so with any
+ portability.  It also handles many other headaches, such as: the
+ interaction of <CODE>Makefile</CODE> rules with the variable suffixes of
+ shared libraries, linking reliably to shared libraries before they are
+ installed by the superuser, and supplying a consistent versioning system
+ (so that different versions of a library can be installed or upgraded
+ without breaking binary compatibility).  Although Libtool, like
+ Autoconf, can be used on its own, it is most simply utilized in
+ conjunction with Automake--there, Libtool is used automatically
+ whenever shared libraries are needed, and you need not know its syntax.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC5" HREF="autoconf_toc.html#TOC5">Pointers</A></H2>
+ 
+ <P>
+ Developers who are used to the simplicity of <CODE>make</CODE> for small
+ projects on a single system might be daunted at the prospect of learning
+ to use Automake and Autoconf.  As your software is distributed to more
+ and more users, however, you will otherwise quickly find yourself
+ putting lots of effort into reinventing the services that the GNU build
+ tools provide, and making the same mistakes that they once made and
+ overcame.  (Besides, since you're already learning Autoconf, Automake
+ will be a piece of cake.)
+ 
+ 
+ <P>
+ There are a number of places that you can go to for more information on
+ the GNU build tools.
+ 
+ 
+ 
+ <UL>
+ 
+ <LI>Web
+ 
+ The home pages for
+ @href{http://www.gnu.org/software/autoconf/,Autoconf},
+ @href{http://www.gnu.org/software/automake/,Automake}, and
+ @href{http://www.gnu.org/software/libtool/,Libtool}.
+ 
+ <LI>Automake Manual
+ 
+ See section `Automake' in <CITE>GNU Automake</CITE>, for more
+ information on Automake.
+ 
+ <LI>Books
+ 
+ The book <CITE>GNU Autoconf, Automake and Libtool</CITE><A NAME="DOCF1" HREF="autoconf_foot.html#FOOT1">(1)</A>
+ describes the complete GNU build environment.  You can also find the
+ entire book on-line at @href{http://sources.redhat.com/autobook/,"The
+ Goat Book" home page}.
+ 
+ <LI>Tutorials and Examples
+ 
+ The @href{http://sources.redhat.com/autoconf/,Autoconf Developer Page}
+ maintains links to a number of Autoconf/Automake tutorials online, and
+ also links to the @href{http://www.gnu.org/software/ac-archive/,
+ Autoconf Macro Archive}.
+ 
+ </UL>
+ 
+ 
+ 
+ <H1><A NAME="SEC6" HREF="autoconf_toc.html#TOC6">Making @command{configure} Scripts</A></H1>
+ <P>
+ <A NAME="IDX3"></A>
+ <A NAME="IDX4"></A>
+ 
+ 
+ <P>
+ The configuration scripts that Autoconf produces are by convention
+ called @command{configure}.  When run, @command{configure} creates several
+ files, replacing configuration parameters in them with appropriate
+ values.  The files that @command{configure} creates are:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ one or more <TT>`Makefile'</TT> files, one in each subdirectory of the
+ package (see section <A HREF="autoconf.html#SEC22">Substitutions in Makefiles</A>);
+ 
+ <LI>
+ 
+ optionally, a C header file, the name of which is configurable,
+ containing <CODE>#define</CODE> directives (see section <A HREF="autoconf.html#SEC27">Configuration Header Files</A>);
+ 
+ <LI>
+ 
+ a shell script called <TT>`config.status'</TT> that, when run, will recreate
+ the files listed above (see section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>);
+ 
+ <LI>
+ 
+ an optional shell script normally called <TT>`config.cache'</TT>
+ (created when using <SAMP>`configure --config-cache'</SAMP>) that
+ saves the results of running many of the tests (see section <A HREF="autoconf.html#SEC84">Cache Files</A>);
+ 
+ <LI>
+ 
+ a file called <TT>`config.log'</TT> containing any messages produced by
+ compilers, to help debugging if @command{configure} makes a mistake.
+ </UL>
+ 
+ <P>
+ <A NAME="IDX5"></A>
+ <A NAME="IDX6"></A>
+ To create a @command{configure} script with Autoconf, you need to write an
+ Autoconf input file <TT>`configure.ac'</TT> (or <TT>`configure.in'</TT>) and run
+ @command{autoconf} on it.  If you write your own feature tests to
+ supplement those that come with Autoconf, you might also write files
+ called <TT>`aclocal.m4'</TT> and <TT>`acsite.m4'</TT>.  If you use a C header
+ file to contain <CODE>#define</CODE> directives, you might also run
+ @command{autoheader}, and you will distribute the generated file
+ <TT>`config.h.in'</TT> with the package.
+ 
+ 
+ <P>
+ Here is a diagram showing how the files that can be used in
+ configuration are produced.  Programs that are executed are suffixed by
+ <SAMP>`*'</SAMP>.  Optional files are enclosed in square brackets (<SAMP>`[]'</SAMP>).
+ @command{autoconf} and @command{autoheader} also read the installed Autoconf
+ macro files (by reading <TT>`autoconf.m4'</TT>).
+ 
+ 
+ <P>
+ Files used in preparing a software package for distribution:
+ 
+ <PRE>
+ your source files --&#62; [autoscan*] --&#62; [configure.scan] --&#62; configure.ac
+ 
+ configure.ac --.
+                |   .------&#62; autoconf* -----&#62; configure
+ [aclocal.m4] --+---+
+                |   `-----&#62; [autoheader*] --&#62; [config.h.in]
+ [acsite.m4] ---'
+ 
+ Makefile.in -------------------------------&#62; Makefile.in
+ </PRE>
+ 
+ <P>
+ Files used in configuring a software package:
+ 
+ <PRE>
+                        .-------------&#62; [config.cache]
+ configure* ------------+-------------&#62; config.log
+                        |
+ [config.h.in] -.       v            .-&#62; [config.h] -.
+                +--&#62; config.status* -+               +--&#62; make*
+ Makefile.in ---'                    `-&#62; Makefile ---'
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC7" HREF="autoconf_toc.html#TOC7">Writing <TT>`configure.ac'</TT></A></H2>
+ 
+ <P>
+ To produce a @command{configure} script for a software package, create a
+ file called <TT>`configure.ac'</TT> that contains invocations of the
+ Autoconf macros that test the system features your package needs or can
+ use.  Autoconf macros already exist to check for many features; see
+ section <A HREF="autoconf.html#SEC35">Existing Tests</A>, for their descriptions.  For most other features,
+ you can use Autoconf template macros to produce custom checks; see
+ section <A HREF="autoconf.html#SEC68">Writing Tests</A>, for information about them.  For especially tricky
+ or specialized features, <TT>`configure.ac'</TT> might need to contain some
+ hand-crafted shell commands; see section <A HREF="autoconf.html#SEC110">Portable Shell Programming</A>.  The
+ @command{autoscan} program can give you a good start in writing
+ <TT>`configure.ac'</TT> (see section <A HREF="autoconf.html#SEC11">Using @command{autoscan} to Create @file{configure.ac}</A>, for more information).
+ 
+ 
+ <P>
+ Previous versions of Autoconf promoted the name <TT>`configure.in'</TT>,
+ which is somewhat ambiguous (the tool needed to produce this file is not
+ described by its extension), and introduces a slight confusion with
+ <TT>`config.h.in'</TT> and so on (for which <SAMP>`.in'</SAMP> means "to be
+ processed by @command{configure}").  Using <TT>`configure.ac'</TT> is now
+ preferred.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC8" HREF="autoconf_toc.html#TOC8">A Shell Script Compiler</A></H3>
+ 
+ <P>
+ Just as for any other computer language, in order to properly program
+ <TT>`configure.ac'</TT> in Autoconf you must understand <EM>what</EM> problem
+ the language tries to address and <EM>how</EM> it does so.
+ 
+ 
+ <P>
+ The problem Autoconf addresses is that the world is a mess.  After all,
+ you are using Autoconf in order to have your package compile easily on
+ all sorts of different systems, some of them being extremely hostile.
+ Autoconf itself bears the price for these differences: @command{configure}
+ must run on all those systems, and thus @command{configure} must limit itself
+ to their lowest common denominator of features.
+ 
+ 
+ <P>
+ Naturally, you might then think of shell scripts; who needs
+ @command{autoconf}?  A set of properly written shell functions is enough to
+ make it easy to write @command{configure} scripts by hand.  Sigh!
+ Unfortunately, shell functions do not belong to the least common
+ denominator; therefore, where you would like to define a function and
+ use it ten times, you would instead need to copy its body ten times.
+ 
+ 
+ <P>
+ So, what is really needed is some kind of compiler, @command{autoconf},
+ that takes an Autoconf program, <TT>`configure.ac'</TT>, and transforms it
+ into a portable shell script, @command{configure}.
+ 
+ 
+ <P>
+ How does @command{autoconf} perform this task?
+ 
+ 
+ <P>
+ There are two obvious possibilities: creating a brand new language or
+ extending an existing one.  The former option is very attractive: all
+ sorts of optimizations could easily be implemented in the compiler and
+ many rigorous checks could be performed on the Autoconf program
+ (e.g. rejecting any non-portable construct).  Alternatively, you can
+ extend an existing language, such as the <CODE>sh</CODE> (Bourne shell)
+ language.
+ 
+ 
+ <P>
+ Autoconf does the latter: it is a layer on top of <CODE>sh</CODE>.  It was
+ therefore most convenient to implement @command{autoconf} as a macro
+ expander: a program that repeatedly performs <EM>macro expansions</EM> on
+ text input, replacing macro calls with macro bodies and producing a pure
+ <CODE>sh</CODE> script in the end.  Instead of implementing a dedicated
+ Autoconf macro expander, it is natural to use an existing
+ general-purpose macro language, such as M4, and implement the extensions
+ as a set of M4 macros.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC9" HREF="autoconf_toc.html#TOC9">The Autoconf Language</A></H3>
+ <P>
+ <A NAME="IDX7"></A>
+ 
+ 
+ <P>
+ The Autoconf language is very different from many other computer
+ languages because it treats actual code the same as plain text.  Whereas
+ in C, for instance, data and instructions have very different syntactic
+ status, in Autoconf their status is rigorously the same.  Therefore, we
+ need a means to distinguish literal strings from text to be expanded:
+ quotation.
+ 
+ 
+ <P>
+ When calling macros that take arguments, there must not be any blank
+ space between the macro name and the open parenthesis.  Arguments should
+ be enclosed within the M4 quote characters <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>, and be
+ separated by commas.  Any leading spaces in arguments are ignored,
+ unless they are quoted.  You may safely leave out the quotes when the
+ argument is simple text, but <EM>always</EM> quote complex arguments such
+ as other macro calls.  This rule applies recursively for every macro
+ call, including macros called from other macros.
+ 
+ 
+ <P>
+ For instance:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER([stdio.h],
+                 [AC_DEFINE([HAVE_STDIO_H])],
+                 [AC_MSG_ERROR([Sorry, can't do anything for you])])
+ </PRE>
+ 
+ <P>
+ is quoted properly.  You may safely simplify its quotation to:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER(stdio.h,
+                 [AC_DEFINE(HAVE_STDIO_H)],
+                 [AC_MSG_ERROR([Sorry, can't do anything for you])])
+ </PRE>
+ 
+ <P>
+ Notice that the argument of <CODE>AC_MSG_ERROR</CODE> is still quoted;
+ otherwise, its comma would have been interpreted as an argument separator.
+ 
+ 
+ <P>
+ The following example is wrong and dangerous, as it is underquoted:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER(stdio.h,
+                 AC_DEFINE(HAVE_STDIO_H),
+                 AC_MSG_ERROR([Sorry, can't do anything for you]))
+ </PRE>
+ 
+ <P>
+ In other cases, you may have to use text that also resembles a macro
+ call.  You must quote that text even when it is not passed as a macro
+ argument:
+ 
+ 
+ 
+ <PRE>
+ echo "Hard rock was here!  --[AC_DC]"
+ </PRE>
+ 
+ <P>
+ which will result in
+ 
+ 
+ 
+ <PRE>
+ echo "Hard rock was here!  --AC_DC"
+ </PRE>
+ 
+ <P>
+ When you use the same text in a macro argument, you must therefore have
+ an extra quotation level (since one is stripped away by the macro
+ substitution).  In general, then, it is a good idea to <EM>use double
+ quoting for all literal string arguments</EM>:
+ 
+ 
+ 
+ <PRE>
+ AC_MSG_WARN([[AC_DC stinks  --Iron Maiden]])
+ </PRE>
+ 
+ <P>
+ You are now able to understand one of the constructs of Autoconf that
+ has been continually misunderstood...  The rule of thumb is that
+ <EM>whenever you expect macro expansion, expect quote expansion</EM>;
+ i.e., expect one level of quotes to be lost.  For instance:
+ 
+ 
+ 
+ <PRE>
+ AC_COMPILE_IFELSE([char b[10];],, [AC_MSG_ERROR([you lose])])
+ </PRE>
+ 
+ <P>
+ is incorrect: here, the first argument of <CODE>AC_COMPILE_IFELSE</CODE> is
+ <SAMP>`char b[10];'</SAMP> and will be expanded once, which results in
+ <SAMP>`char b10;'</SAMP>.  (There was an idiom common in Autoconf's past to
+ address this issue via the M4 <CODE>changequote</CODE> primitive, but do not
+ use it!)  Let's take a closer look: the author meant the first argument
+ to be understood as a literal, and therefore it must be quoted twice:
+ 
+ 
+ 
+ <PRE>
+ AC_COMPILE_IFELSE([[char b[10];]],, [AC_MSG_ERROR([you lose])])
+ </PRE>
+ 
+ <P>
+ Voil`a, you actually produce <SAMP>`char b[10];'</SAMP> this time!
+ 
+ 
+ <P>
+ The careful reader will notice that, according to these guidelines, the
+ "properly" quoted <CODE>AC_CHECK_HEADER</CODE> example above is actually
+ lacking three pairs of quotes!  Nevertheless, for the sake of readability,
+ double quotation of literals is used only where needed in this manual.
+ 
+ 
+ <P>
+ Some macros take optional arguments, which this documentation represents
+ as @ovar{arg} (not to be confused with the quote characters).  You may
+ just leave them empty, or use <SAMP>`[]'</SAMP> to make the emptiness of the
+ argument explicit, or you may simply omit the trailing commas.  The
+ three lines below are equivalent:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADERS(stdio.h, [], [], [])
+ AC_CHECK_HEADERS(stdio.h,,,)
+ AC_CHECK_HEADERS(stdio.h)
+ </PRE>
+ 
+ <P>
+ It is best to put each macro call on its own line in
+ <TT>`configure.ac'</TT>.  Most of the macros don't add extra newlines; they
+ rely on the newline after the macro call to terminate the commands.
+ This approach makes the generated @command{configure} script a little
+ easier to read by not inserting lots of blank lines.  It is generally
+ safe to set shell variables on the same line as a macro call, because
+ the shell allows assignments without intervening newlines.
+ 
+ 
+ <P>
+ You can include comments in <TT>`configure.ac'</TT> files by starting them
+ with the <SAMP>`#'</SAMP>.  For example, it is helpful to begin
+ <TT>`configure.ac'</TT> files with a line like this:
+ 
+ 
+ 
+ <PRE>
+ # Process this file with autoconf to produce a configure script.
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC10" HREF="autoconf_toc.html#TOC10">Standard <TT>`configure.ac'</TT> Layout</A></H3>
+ 
+ <P>
+ The order in which <TT>`configure.ac'</TT> calls the Autoconf macros is not
+ important, with a few exceptions.  Every <TT>`configure.ac'</TT> must
+ contain a call to <CODE>AC_INIT</CODE> before the checks, and a call to
+ <CODE>AC_OUTPUT</CODE> at the end (see section <A HREF="autoconf.html#SEC19">Outputting Files</A>).  Additionally, some macros
+ rely on other macros having been called first, because they check
+ previously set values of some variables to decide what to do.  These
+ macros are noted in the individual descriptions (see section <A HREF="autoconf.html#SEC35">Existing Tests</A>), and they also warn you when @command{configure} is created if they
+ are called out of order.
+ 
+ 
+ <P>
+ To encourage consistency, here is a suggested order for calling the
+ Autoconf macros.  Generally speaking, the things near the end of this
+ list are those that could depend on things earlier in it.  For example,
+ library functions could be affected by types and libraries.
+ 
+ 
+ 
+ <PRE>
+ Autoconf requirements
+ <CODE>AC_INIT(<VAR>package</VAR>, <VAR>version</VAR>, <VAR>bug-report-address</VAR>)</CODE>
+ information on the package
+ checks for programs
+ checks for libraries
+ checks for header files
+ checks for types
+ checks for structures
+ checks for compiler characteristics
+ checks for library functions
+ checks for system services
+ <CODE>AC_CONFIG_FILES([<VAR>file...</VAR>])</CODE>
+ <CODE>AC_OUTPUT</CODE>
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC11" HREF="autoconf_toc.html#TOC11">Using @command{autoscan} to Create <TT>`configure.ac'</TT></A></H2>
+ <P>
+ <A NAME="IDX8"></A>
+ 
+ 
+ <P>
+ The @command{autoscan} program can help you create and/or maintain a
+ <TT>`configure.ac'</TT> file for a software package.  @command{autoscan}
+ examines source files in the directory tree rooted at a directory given
+ as a command line argument, or the current directory if none is given.
+ It searches the source files for common portability problems and creates
+ a file <TT>`configure.scan'</TT> which is a preliminary <TT>`configure.ac'</TT>
+ for that package, and checks a possibly existing <TT>`configure.ac'</TT> for
+ completeness.
+ 
+ 
+ <P>
+ When using @command{autoscan} to create a <TT>`configure.ac'</TT>, you
+ should manually examine <TT>`configure.scan'</TT> before renaming it to
+ <TT>`configure.ac'</TT>; it will probably need some adjustments.
+ Occasionally, @command{autoscan} outputs a macro in the wrong order
+ relative to another macro, so that @command{autoconf} produces a warning;
+ you need to move such macros manually.  Also, if you want the package to
+ use a configuration header file, you must add a call to
+ <CODE>AC_CONFIG_HEADERS</CODE> (see section <A HREF="autoconf.html#SEC27">Configuration Header Files</A>).  You might
+ also have to change or add some <CODE>#if</CODE> directives to your program in
+ order to make it work with Autoconf (see section <A HREF="autoconf.html#SEC12">Using @command{ifnames} to List Conditionals</A>, for
+ information about a program that can help with that job).
+ 
+ 
+ <P>
+ When using @command{autoscan} to maintain a <TT>`configure.ac'</TT>, simply
+ consider adding its suggestions.  The file <TT>`autoscan.log'</TT> will
+ contain detailed information on why a macro is requested.
+ 
+ 
+ <P>
+ @command{autoscan} uses several data files (installed along with Autoconf)
+ to determine which macros to output when it finds particular symbols in
+ a package's source files.  These data files all have the same format:
+ each line consists of a symbol, whitespace, and the Autoconf macro to
+ output if that symbol is encountered.  Lines starting with <SAMP>`#'</SAMP> are
+ comments.
+ 
+ 
+ <P>
+ @command{autoscan} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ <DT>@option{-v}
+ <DD>
+ Print the names of the files it examines and the potentially interesting
+ symbols it finds in them.  This output can be voluminous.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations
+ accumulate.  Directories are browsed from last to first.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC12" HREF="autoconf_toc.html#TOC12">Using @command{ifnames} to List Conditionals</A></H2>
+ <P>
+ <A NAME="IDX9"></A>
+ 
+ 
+ <P>
+ @command{ifnames} can help you write <TT>`configure.ac'</TT> for a software
+ package.  It prints the identifiers that the package already uses in C
+ preprocessor conditionals.  If a package has already been set up to have
+ some portability, @command{ifnames} can thus help you figure out what its
+ @command{configure} needs to check for.  It may help fill in some gaps in a
+ <TT>`configure.ac'</TT> generated by @command{autoscan} (see section <A HREF="autoconf.html#SEC11">Using @command{autoscan} to Create @file{configure.ac}</A>).
+ 
+ 
+ <P>
+ @command{ifnames} scans all of the C source files named on the command line
+ (or the standard input, if none are given) and writes to the standard
+ output a sorted list of all the identifiers that appear in those files
+ in <CODE>#if</CODE>, <CODE>#elif</CODE>, <CODE>#ifdef</CODE>, or <CODE>#ifndef</CODE>
+ directives.  It prints each identifier on a line, followed by a
+ space-separated list of the files in which that identifier occurs.
+ 
+ 
+ <P>
+ @command{ifnames} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC13" HREF="autoconf_toc.html#TOC13">Using @command{autoconf} to Create @command{configure}</A></H2>
+ <P>
+ <A NAME="IDX10"></A>
+ 
+ 
+ <P>
+ To create @command{configure} from <TT>`configure.ac'</TT>, run the
+ @command{autoconf} program with no arguments.  @command{autoconf} processes
+ <TT>`configure.ac'</TT> with the <CODE>m4</CODE> macro processor, using the
+ Autoconf macros.  If you give @command{autoconf} an argument, it reads that
+ file instead of <TT>`configure.ac'</TT> and writes the configuration script
+ to the standard output instead of to @command{configure}.  If you give
+ @command{autoconf} the argument @option{-}, it reads from the standard
+ input instead of <TT>`configure.ac'</TT> and writes the configuration script
+ to the standard output.
+ 
+ 
+ <P>
+ The Autoconf macros are defined in several files.  Some of the files are
+ distributed with Autoconf; @command{autoconf} reads them first.  Then it
+ looks for the optional file <TT>`acsite.m4'</TT> in the directory that
+ contains the distributed Autoconf macro files, and for the optional file
+ <TT>`aclocal.m4'</TT> in the current directory.  Those files can contain
+ your site's or the package's own Autoconf macro definitions
+ (see section <A HREF="autoconf.html#SEC101">Writing Autoconf Macros</A>, for more information).  If a macro is
+ defined in more than one of the files that @command{autoconf} reads, the
+ last definition it reads overrides the earlier ones.
+ 
+ 
+ <P>
+ @command{autoconf} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ <DT>@option{-v}
+ <DD>
+ Report processing steps.
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files.
+ 
+ <DT>@option{--force}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Remake <TT>`configure'</TT> even if newer than its input files.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations
+ accumulate.  Directories are browsed from last to first.
+ 
+ <DT>@option{--output=<VAR>file</VAR>}
+ <DD>
+ <DT>@option{-o <VAR>file</VAR>}
+ <DD>
+ Save output (script or trace) to <VAR>file</VAR>.  The file @option{-} stands
+ for the standard output.
+ 
+ <DT>@option{--warnings=<VAR>category</VAR>}
+ <DD>
+ <DT>@option{-W <VAR>category</VAR>}
+ <DD>
+ <A NAME="IDX11"></A>
+ Report the warnings related to <VAR>category</VAR> (which can actually be a
+ comma separated list).  See section <A HREF="autoconf.html#SEC104">Reporting Messages</A>, macro
+ <CODE>AC_DIAGNOSE</CODE>, for a comprehensive list of categories.  Special
+ values include:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`all'</SAMP>
+ <DD>
+ report all the warnings
+ 
+ <DT><SAMP>`none'</SAMP>
+ <DD>
+ report none
+ 
+ <DT><SAMP>`error'</SAMP>
+ <DD>
+ treats warnings as errors
+ 
+ <DT><SAMP>`no-<VAR>category</VAR>'</SAMP>
+ <DD>
+ disable warnings falling into <VAR>category</VAR>
+ </DL>
+ 
+ Warnings about <SAMP>`syntax'</SAMP> are enabled by default, and the environment
+ variable <CODE>WARNINGS</CODE>, a comma separated list of categories, is
+ honored. @command{autoconf -W <VAR>category</VAR>} will actually
+ behave as if you had run:
+ 
+ 
+ <PRE>
+ autoconf --warnings=syntax,$WARNINGS,<VAR>category</VAR>
+ </PRE>
+ 
+ If you want to disable @command{autoconf}'s defaults and <CODE>WARNINGS</CODE>,
+ but (for example) enable the warnings about obsolete constructs, you
+ would use @option{-W none,obsolete}.
+ 
+ <A NAME="IDX12"></A>
+ <A NAME="IDX13"></A>
+ @command{autoconf} displays a back trace for errors, but not for
+ warnings; if you want them, just pass @option{-W error}.  For instance,
+ on this <TT>`configure.ac'</TT>:
+ 
+ 
+ <PRE>
+ AC_DEFUN([INNER],
+ [AC_TRY_RUN([exit (0)])])
+ 
+ AC_DEFUN([OUTER],
+ [INNER])
+ 
+ AC_INIT
+ OUTER
+ </PRE>
+ 
+ you get:
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf -Wcross</KBD>
+ configure.ac:8: warning: AC_TRY_RUN called without default \
+ to allow cross compiling
+ $ <KBD>autoconf -Wcross,error</KBD>
+ configure.ac:8: error: AC_TRY_RUN called without default \
+ to allow cross compiling
+ acgeneral.m4:3044: AC_TRY_RUN is expanded from...
+ configure.ac:2: INNER is expanded from...
+ configure.ac:5: OUTER is expanded from...
+ configure.ac:8: the top level
+ </PRE>
+ 
+ <DT>@option{--trace=<VAR>macro</VAR>[:<VAR>format</VAR>]}
+ <DD>
+ <DT>@option{-t <VAR>macro</VAR>[:<VAR>format</VAR>]}
+ <DD>
+ Do not create the @command{configure} script, but list the calls to
+ <VAR>macro</VAR> according to the <VAR>format</VAR>.  Multiple @option{--trace}
+ arguments can be used to list several macros.  Multiple @option{--trace}
+ arguments for a single macro are not cumulative; instead, you should
+ just make <VAR>format</VAR> as long as needed.
+ 
+ The <VAR>format</VAR> is a regular string, with newlines if desired, and
+ several special escape codes.  It defaults to <SAMP>`$f:$l:$n:$%'</SAMP>; see
+ below for details on the <VAR>format</VAR>.
+ 
+ <DT>@option{--initialization}
+ <DD>
+ <DT>@option{-i}
+ <DD>
+ By default, @option{--trace} does not trace the initialization of the
+ Autoconf macros (typically the <CODE>AC_DEFUN</CODE> definitions).  This
+ results in a noticeable speedup, but can be disabled by this option.
+ </DL>
+ 
+ <P>
+ It is often necessary to check the content of a <TT>`configure.ac'</TT>
+ file, but parsing it yourself is extremely fragile and error-prone.  It
+ is suggested that you rely upon @option{--trace} to scan
+ <TT>`configure.ac'</TT>.
+ 
+ 
+ <P>
+ The <VAR>format</VAR> of @option{--trace} can use the following special
+ escapes:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`$$'</SAMP>
+ <DD>
+ The character <SAMP>`$'</SAMP>.
+ 
+ <DT><SAMP>`$f'</SAMP>
+ <DD>
+ The filename from which <VAR>macro</VAR> is called.
+ 
+ <DT><SAMP>`$l'</SAMP>
+ <DD>
+ The line number from which <VAR>macro</VAR> is called.
+ 
+ <DT><SAMP>`$d'</SAMP>
+ <DD>
+ The depth of the <VAR>macro</VAR> call.  This is an M4 technical detail that
+ you probably don't want to know about.
+ 
+ <DT><SAMP>`$n'</SAMP>
+ <DD>
+ The name of the <VAR>macro</VAR>.
+ 
+ <DT><SAMP>`$<VAR>num</VAR>'</SAMP>
+ <DD>
+ The <VAR>num</VAR>th argument of the call to <VAR>macro</VAR>.
+ 
+ <DT><SAMP>`$@'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>@'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}@'</SAMP>
+ <DD>
+ All the arguments passed to <VAR>macro</VAR>, separated by the character
+ <VAR>sep</VAR> or the string <VAR>separator</VAR> (<SAMP>`,'</SAMP> by default).  Each
+ argument is quoted, i.e. enclosed in a pair of square brackets.
+ 
+ <DT><SAMP>`$*'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>*'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}*'</SAMP>
+ <DD>
+ As above, but the arguments are not quoted.
+ 
+ <DT><SAMP>`$%'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>%'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}%'</SAMP>
+ <DD>
+ As above, but the arguments are not quoted, all new line characters in
+ the arguments are smashed, and the default separator is <SAMP>`:'</SAMP>.
+ 
+ The escape <SAMP>`$%'</SAMP> produces single-line trace outputs (unless you put
+ newlines in the <SAMP>`separator'</SAMP>), while <SAMP>`$@'</SAMP> and <SAMP>`$*'</SAMP> do
+ not.
+ </DL>
+ 
+ <P>
+ For instance, to find the list of variables that are substituted, use:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf -t AC_SUBST</KBD>
+ configure.ac:2:AC_SUBST:ECHO_C
+ configure.ac:2:AC_SUBST:ECHO_N
+ configure.ac:2:AC_SUBST:ECHO_T
+ <I>More traces deleted</I>
+ </PRE>
+ 
+ <P>
+ The example below highlights the difference between <SAMP>`$@'</SAMP>,
+ <SAMP>`$*'</SAMP>, and <STRONG>$%</STRONG>.
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat configure.ac</KBD>
+ AC_DEFINE(This, is, [an
+ [example]])
+ $ <KBD>autoconf -t 'AC_DEFINE:@: $@</KBD>
+ *: $*
+ $: $%'
+ @: [This],[is],[an
+ [example]]
+ *: This,is,an
+ [example]
+ $: This:is:an [example]
+ </PRE>
+ 
+ <P>
+ The <VAR>format</VAR> gives you a lot of freedom:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf -t 'AC_SUBST:$$ac_subst{"$1"} = "$f:$l";'</KBD>
+ $ac_subst{"ECHO_C"} = "configure.ac:2";
+ $ac_subst{"ECHO_N"} = "configure.ac:2";
+ $ac_subst{"ECHO_T"} = "configure.ac:2";
+ <I>More traces deleted</I>
+ </PRE>
+ 
+ <P>
+ A long <VAR>separator</VAR> can be used to improve the readability of complex
+ structures, and to ease its parsing (for instance when no single
+ character is suitable as a separator)):
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf -t 'AM_MISSING_PROG:${|:::::|}*'</KBD>
+ ACLOCAL|:::::|aclocal|:::::|$missing_dir
+ AUTOCONF|:::::|autoconf|:::::|$missing_dir
+ AUTOMAKE|:::::|automake|:::::|$missing_dir
+ <I>More traces deleted</I>
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC14" HREF="autoconf_toc.html#TOC14">Using @command{autoreconf} to Update @command{configure} Scripts</A></H2>
+ <P>
+ <A NAME="IDX14"></A>
+ 
+ 
+ <P>
+ Installing the various components of the GNU Build System can be
+ tedious: running @command{gettextize}, @command{automake} etc. in each
+ directory.  It may be needed either because some tools such as
+ @command{automake} have been updated on your system, or because some of
+ the sources such as <TT>`configure.ac'</TT> have been updated, or finally,
+ simply in order to install the GNU Build System in a fresh tree.
+ 
+ 
+ <P>
+ It runs @command{autoconf}, @command{autoheader}, @command{aclocal},
+ @command{automake}, @command{libtoolize}, and @command{gettextize} (when
+ appropriate) repeatedly to update the GNU Build System in specified
+ directories, and their subdirectories (see section <A HREF="autoconf.html#SEC33">Configuring Other Packages in Subdirectories</A>).  By
+ default, it only remakes those files that are older than their sources.
+ 
+ 
+ <P>
+ If you install a new version of some tools, you can make
+ @command{autoreconf} remake <EM>all</EM> of the files by giving it the
+ @option{--force} option.
+ 
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC26">Automatic Remaking</A>, for <TT>`Makefile'</TT> rules to automatically
+ remake @command{configure} scripts when their source files change.  That
+ method handles the timestamps of configuration header templates
+ properly, but does not pass @option{--autoconf-dir=<VAR>dir</VAR>} or
+ @option{--localdir=<VAR>dir</VAR>}.
+ 
+ 
+ <P>
+ @command{autoreconf} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ Print the name of each directory where @command{autoreconf} runs
+ @command{autoconf} (and @command{autoheader}, if appropriate).
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files.
+ 
+ <DT>@option{--force}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Remake even <TT>`configure'</TT> scripts and configuration headers that are
+ newer than their input files (<TT>`configure.ac'</TT> and, if present,
+ <TT>`aclocal.m4'</TT>).
+ 
+ <DT>@option{--install}
+ <DD>
+ <DT>@option{-i}
+ <DD>
+ Copy missing auxiliary files.  This option is similar to the option
+ <CODE>--add-missing</CODE> in @command{automake}.
+ 
+ <DT>@option{--symlink}
+ <DD>
+ <DT>@option{-s}
+ <DD>
+ Instead of copying missing auxiliary files, install symbolic links.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations
+ accumulate.  Directories are browsed from last to first.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC15" HREF="autoconf_toc.html#TOC15">Initialization and Output Files</A></H1>
+ 
+ <P>
+ Autoconf-generated @command{configure} scripts need some information about
+ how to initialize, such as how to find the package's source files; and
+ about the output files to produce.  The following sections describe
+ initialization and the creation of output files.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC16" HREF="autoconf_toc.html#TOC16">Initializing @command{configure}</A></H2>
+ 
+ <P>
+ Every @command{configure} script must call <CODE>AC_INIT</CODE> before doing
+ anything else.  The only other required macro is <CODE>AC_OUTPUT</CODE>
+ (see section <A HREF="autoconf.html#SEC19">Outputting Files</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_INIT</B> <I>(<VAR>package</VAR>, <VAR>version</VAR>, @ovar{bug-report}, @ovar{tarname})</I>
+ <DD><A NAME="IDX15"></A>
+ <A NAME="IDX16"></A>
+ Process any command-line arguments and perform various initializations
+ and verifications.
+ 
+ 
+ <P>
+ Set the name of the <VAR>package</VAR> and its <VAR>version</VAR>.  These are
+ typically used in @option{--version} support, including that of
+ @command{configure}.  The optional argument <VAR>bug-report</VAR> should be
+ the email to which users should send bug reports.  The package
+ <VAR>tarname</VAR> differs from <VAR>package</VAR>: the latter designates the full
+ package name (e.g., <SAMP>`GNU Autoconf'</SAMP>), while the latter is meant for
+ distribution tar ball names (e.g., <SAMP>`autoconf'</SAMP>).  It defaults to
+ <VAR>package</VAR> once <SAMP>`GNU '</SAMP> strip, lower cased, and all non
+ alphanumeric character mapped onto <SAMP>`-'</SAMP>.
+ 
+ 
+ <P>
+ It is preferable that these arguments be static, i.e., there should not
+ be any shell computation, but they can be computed by M4.  The following
+ M4 macros (e.g., <CODE>AC_PACKAGE_NAME</CODE>), output variables (e.g.,
+ <CODE>PACKAGE_NAME</CODE>), and preprocessor symbols (e.g.,
+ <CODE>PACKAGE_NAME</CODE>) are then defined:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>AC_PACKAGE_NAME</CODE>, <CODE>PACKAGE_NAME</CODE>
+ <DD>
+ <A NAME="IDX17"></A>
+ <A NAME="IDX18"></A>
+ <A NAME="IDX19"></A>
+ Exactly <VAR>package</VAR>.
+ 
+ <DT><CODE>AC_PACKAGE_TARNAME</CODE>, <CODE>PACKAGE_TARNAME</CODE>
+ <DD>
+ <A NAME="IDX20"></A>
+ <A NAME="IDX21"></A>
+ <A NAME="IDX22"></A>
+ Exactly <VAR>tarname</VAR>.
+ 
+ <DT><CODE>AC_PACKAGE_VERSION</CODE>, <CODE>PACKAGE_VERSION</CODE>
+ <DD>
+ <A NAME="IDX23"></A>
+ <A NAME="IDX24"></A>
+ <A NAME="IDX25"></A>
+ Exactly <VAR>version</VAR>.
+ 
+ <DT><CODE>AC_PACKAGE_STRING</CODE>, <CODE>PACKAGE_STRING</CODE>
+ <DD>
+ <A NAME="IDX26"></A>
+ <A NAME="IDX27"></A>
+ <A NAME="IDX28"></A>
+ Exactly <SAMP>`<VAR>package</VAR> <VAR>version</VAR>'</SAMP>.
+ 
+ <DT><CODE>AC_PACKAGE_BUGREPORT</CODE>, <CODE>PACKAGE_BUGREPORT</CODE>
+ <DD>
+ <A NAME="IDX29"></A>
+ <A NAME="IDX30"></A>
+ <A NAME="IDX31"></A>
+ Exactly <VAR>bug-report</VAR>.
+ </DL>
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC17" HREF="autoconf_toc.html#TOC17">Notices in @command{configure}</A></H2>
+ 
+ <P>
+ The following macros manage version numbers for @command{configure}
+ scripts.  Using them is optional.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PREREQ</B> <I>(<VAR>version</VAR>)</I>
+ <DD><A NAME="IDX32"></A>
+ <A NAME="IDX33"></A>
+ <A NAME="IDX34"></A>
+ Ensure that a recent enough version of Autoconf is being used.  If the
+ version of Autoconf being used to create @command{configure} is earlier
+ than <VAR>version</VAR>, print an error message to the standard error output
+ and do not create @command{configure}.  For example:
+ 
+ 
+ 
+ <PRE>
+ AC_PREREQ(2.53)
+ </PRE>
+ 
+ <P>
+ This macro is the only macro that may be used before <CODE>AC_INIT</CODE>, but
+ for consistency, you are invited not to do so.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_COPYRIGHT</B> <I>(<VAR>copyright-notice</VAR>)</I>
+ <DD><A NAME="IDX35"></A>
+ <A NAME="IDX36"></A>
+ <A NAME="IDX37"></A>
+ State that, in addition to the Free Software Foundation's copyright on
+ the Autoconf macros, parts of your @command{configure} are covered by the
+ <VAR>copyright-notice</VAR>.
+ 
+ 
+ <P>
+ The <VAR>copyright-notice</VAR> will show up in both the head of
+ @command{configure} and in <SAMP>`configure --version'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_REVISION</B> <I>(<VAR>revision-info</VAR>)</I>
+ <DD><A NAME="IDX38"></A>
+ <A NAME="IDX39"></A>
+ <A NAME="IDX40"></A>
+ Copy revision stamp <VAR>revision-info</VAR> into the @command{configure}
+ script, with any dollar signs or double-quotes removed.  This macro lets
+ you put a revision stamp from <TT>`configure.ac'</TT> into @command{configure}
+ without RCS or <CODE>cvs</CODE> changing it when you check in
+ @command{configure}.  That way, you can determine easily which revision of
+ <TT>`configure.ac'</TT> a particular @command{configure} corresponds to.
+ 
+ 
+ <P>
+ For example, this line in <TT>`configure.ac'</TT>:
+ 
+ 
+ 
+ <PRE>
+ AC_REVISION($Revision: 1.1 $)
+ </PRE>
+ 
+ <P>
+ produces this in @command{configure}:
+ 
+ 
+ 
+ <PRE>
+ #! /bin/sh
+ # From configure.ac Revision: 1.30
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC18" HREF="autoconf_toc.html#TOC18">Finding @command{configure} Input</A></H2>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_SRCDIR</B> <I>(<VAR>unique-file-in-source-dir</VAR>)</I>
+ <DD><A NAME="IDX41"></A>
+ <A NAME="IDX42"></A>
+ <VAR>unique-file-in-source-dir</VAR> is some file that is in the package's
+ source directory; @command{configure} checks for this file's existence to
+ make sure that the directory that it is told contains the source code in
+ fact does.  Occasionally people accidentally specify the wrong directory
+ with @option{--srcdir}; this is a safety check.  See section <A HREF="autoconf.html#SEC144">@command{configure} Invocation</A>, for more information.
+ </DL>
+ 
+ 
+ <P>
+ Packages that do manual configuration or use the <CODE>install</CODE> program
+ might need to tell @command{configure} where to find some other shell
+ scripts by calling <CODE>AC_CONFIG_AUX_DIR</CODE>, though the default places
+ it looks are correct for most cases.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_AUX_DIR</B> <I>(<VAR>dir</VAR>)</I>
+ <DD><A NAME="IDX43"></A>
+ <A NAME="IDX44"></A>
+ Use the auxiliary build tools (e.g., <TT>`install-sh'</TT>,
+ <TT>`config.sub'</TT>, <TT>`config.guess'</TT>, Cygnus @command{configure},
+ Automake and Libtool scripts etc.) that are in directory <VAR>dir</VAR>.
+ These are auxiliary files used in configuration.  <VAR>dir</VAR> can be
+ either absolute or relative to <TT>`<VAR>srcdir</VAR>'</TT>.  The default is
+ <TT>`<VAR>srcdir</VAR>'</TT> or <TT>`<VAR>srcdir</VAR>/..'</TT> or
+ <TT>`<VAR>srcdir</VAR>/../..'</TT>, whichever is the first that contains
+ <TT>`install-sh'</TT>.  The other files are not checked for, so that using
+ <CODE>AC_PROG_INSTALL</CODE> does not automatically require distributing the
+ other auxiliary files.  It checks for <TT>`install.sh'</TT> also, but that
+ name is obsolete because some @command{make} have a rule that creates
+ <TT>`install'</TT> from it if there is no <TT>`Makefile'</TT>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC19" HREF="autoconf_toc.html#TOC19">Outputting Files</A></H2>
+ 
+ <P>
+ Every Autoconf script, e.g., <TT>`configure.ac'</TT>, should finish by
+ calling <CODE>AC_OUTPUT</CODE>.  It is the macro that generates
+ <TT>`config.status'</TT>, which will create the <TT>`Makefile'</TT>s and any
+ other files resulting from configuration.  The only required macro is
+ <CODE>AC_INIT</CODE> (see section <A HREF="autoconf.html#SEC18">Finding @command{configure} Input</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OUTPUT</B>
+ <DD><A NAME="IDX45"></A>
+ <A NAME="IDX46"></A>
+ <A NAME="IDX47"></A>
+ Generate <TT>`config.status'</TT> and launch it.  Call this macro once, at
+ the end of <TT>`configure.ac'</TT>.
+ 
+ 
+ <P>
+ <TT>`config.status'</TT> will take all the configuration actions: all the
+ output files (see section <A HREF="autoconf.html#SEC21">Creating Configuration Files</A>, macro
+ <CODE>AC_CONFIG_FILES</CODE>), header files (see section <A HREF="autoconf.html#SEC27">Configuration Header Files</A>,
+ macro <CODE>AC_CONFIG_HEADERS</CODE>), commands (see section <A HREF="autoconf.html#SEC31">Running Arbitrary Configuration Commands</A>, macro <CODE>AC_CONFIG_COMMANDS</CODE>), links (see
+ section <A HREF="autoconf.html#SEC32">Creating Configuration Links</A>, macro <CODE>AC_CONFIG_LINKS</CODE>), subdirectories
+ to configure (see section <A HREF="autoconf.html#SEC33">Configuring Other Packages in Subdirectories</A>, macro <CODE>AC_CONFIG_SUBDIRS</CODE>)
+ are honored.
+ </DL>
+ 
+ 
+ <P>
+ Historically, the usage of <CODE>AC_OUTPUT</CODE> was somewhat different.
+ See section <A HREF="autoconf.html#SEC150">Obsolete Macros</A>, for a description of the arguments that
+ <CODE>AC_OUTPUT</CODE> used to support.
+ 
+ 
+ <P>
+ If you run <CODE>make</CODE> on subdirectories, you should run it using the
+ <CODE>make</CODE> variable <CODE>MAKE</CODE>.  Most versions of <CODE>make</CODE> set
+ <CODE>MAKE</CODE> to the name of the <CODE>make</CODE> program plus any options it
+ was given.  (But many do not include in it the values of any variables
+ set on the command line, so those are not passed on automatically.)
+ Some old versions of <CODE>make</CODE> do not set this variable.  The
+ following macro allows you to use it even with those versions.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_MAKE_SET</B>
+ <DD><A NAME="IDX48"></A>
+ <A NAME="IDX49"></A>
+ <A NAME="IDX50"></A>
+ If <CODE>make</CODE> predefines the variable <CODE>MAKE</CODE>, define output
+ variable <CODE>SET_MAKE</CODE> to be empty.  Otherwise, define <CODE>SET_MAKE</CODE>
+ to contain <SAMP>`MAKE=make'</SAMP>.  Calls <CODE>AC_SUBST</CODE> for <CODE>SET_MAKE</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ To use this macro, place a line like this in each <TT>`Makefile.in'</TT>
+ that runs <CODE>MAKE</CODE> on other directories:
+ 
+ 
+ 
+ <PRE>
+ @SET_MAKE@
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC20" HREF="autoconf_toc.html#TOC20">Taking Configuration Actions</A></H2>
+ 
+ <P>
+ <TT>`configure'</TT> is designed so that it appears to do everything itself,
+ but there is actually a hidden slave: <TT>`config.status'</TT>.
+ <TT>`configure'</TT> is in charge of examining your system, but it is
+ <TT>`config.status'</TT> that actually takes the proper actions based on the
+ results of <TT>`configure'</TT>.  The most typical task of
+ <TT>`config.status'</TT> is to <EM>instantiate</EM> files.
+ 
+ 
+ <P>
+ This section describes the common behavior of the four standard
+ instantiating macros: <CODE>AC_CONFIG_FILES</CODE>, <CODE>AC_CONFIG_HEADERS</CODE>,
+ <CODE>AC_CONFIG_COMMANDS</CODE> and <CODE>AC_CONFIG_LINKS</CODE>.  They all
+ have this prototype:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_FOOS(<VAR>tag</VAR>..., [<VAR>commands</VAR>], [<VAR>init-cmds</VAR>])
+ </PRE>
+ 
+ <P>
+ where the arguments are:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><VAR><VAR>tag</VAR>...</VAR>
+ <DD>
+ A whitespace-separated list of tags, which are typically the names of
+ the files to instantiate.
+ 
+ You are encouraged to use literals as <VAR>tags</VAR>.  In particular, you
+ should avoid
+ 
+ 
+ <PRE>
+ ... &#38;&#38; my_foos="$my_foos fooo"
+ ... &#38;&#38; my_foos="$my_foos foooo"
+ AC_CONFIG_FOOS($my_foos)
+ </PRE>
+ 
+ and use this instead:
+ 
+ 
+ <PRE>
+ ... &#38;&#38; AC_CONFIG_FOOS(fooo)
+ ... &#38;&#38; AC_CONFIG_FOOS(foooo)
+ </PRE>
+ 
+ The macros <CODE>AC_CONFIG_FILES</CODE> and <CODE>AC_CONFIG_HEADERS</CODE> use
+ special <VAR>tag</VAR>s: they may have the form <SAMP>`<VAR>output</VAR>'</SAMP> or
+ <SAMP>`<VAR>output</VAR>:<VAR>inputs</VAR>'</SAMP>. The file <VAR>output</VAR> is instantiated
+ from its templates, <VAR>inputs</VAR> (defaulting to <SAMP>`<VAR>output</VAR>.in'</SAMP>).
+ 
+ For instance
+ <SAMP>`AC_CONFIG_FILES(Makefile:boiler/top.mk:boiler/bot.mk)'</SAMP> asks for
+ the creation of <TT>`Makefile'</TT> that will be the expansion of the
+ output variables in the concatenation of <TT>`boiler/top.mk'</TT> and
+ <TT>`boiler/bot.mk'</TT>.
+ 
+ The special value <SAMP>`-'</SAMP> might be used to denote the standard output
+ when used in <VAR>output</VAR>, or the standard input when used in the
+ <VAR>inputs</VAR>.  You most probably don't need to use this in
+ <TT>`configure.ac'</TT>, but it is convenient when using the command line
+ interface of <TT>`./config.status'</TT>, see section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>,
+ for more details.
+ 
+ The <VAR>inputs</VAR> may be absolute or relative filenames.  In the latter
+ case they are first looked for in the build tree, and then in the source
+ tree.
+ 
+ <DT><VAR>commands</VAR>
+ <DD>
+ Shell commands output literally into <TT>`config.status'</TT>, and
+ associated with a tag that the user can use to tell <TT>`config.status'</TT>
+ which the commands to run.  The commands are run each time a <VAR>tag</VAR>
+ request is given to <TT>`config.status'</TT>; typically, each time the file
+ <TT>`<VAR>tag</VAR>'</TT> is created.
+ 
+ The variable set during the execution of @command{configure} are
+ <EM>not</EM> available here: you first need to set them via the
+ <VAR>init-cmds</VAR>.  Nonetheless the following variables are precomputed:
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>srcdir</CODE>
+ <DD>
+ The path from the top build directory to the top source directory.  This
+ is what @command{configure}'s option @option{--srcdir} sets.
+ 
+ <DT><CODE>ac_top_srcdir</CODE>
+ <DD>
+ The path from the current build directory to the top source directory.
+ 
+ <DT><CODE>ac_top_builddir</CODE>
+ <DD>
+ The path from the current build directory to the top build directory.
+ It can be empty, or else ends with a slash, so that you may concatenate
+ it.
+ 
+ <DT><CODE>ac_srcdir</CODE>
+ <DD>
+ The path from the current build directory to the corresponding source
+ directory.
+ </DL>
+ 
+ The <EM>current</EM> directory refers to the directory (or
+ pseudo-directory) containing the input part of <VAR>tags</VAR>.  For
+ instance, running
+ 
+ 
+ <PRE>
+ AC_CONFIG_COMMANDS([deep/dir/out:in/in.in], [...], [...])
+ </PRE>
+ 
+  with @option{--srcdir=../package} produces the following values:
+ 
+ 
+ <PRE>
+ # Argument of --srcdir
+ srcdir='../package'
+ # Reversing deep/dir
+ ac_top_builddir='../../'
+ # Concatenation of $ac_top_builddir and srcdir
+ ac_top_srcdir='../../../package'
+ # Concatenation of $ac_top_srcdir and deep/dir
+ ac_srcdir='../../../package/deep/dir'
+ </PRE>
+ 
+ independently of <SAMP>`in/in.in'</SAMP>.
+ 
+ <DT><VAR>init-cmds</VAR>
+ <DD>
+ Shell commands output <EM>unquoted</EM> near the beginning of
+ <TT>`config.status'</TT>, and executed each time <TT>`config.status'</TT> runs
+ (regardless of the tag).  Because they are unquoted, for example,
+ <SAMP>`$var'</SAMP> will be output as the value of <CODE>var</CODE>.  <VAR>init-cmds</VAR>
+ is typically used by <TT>`configure'</TT> to give <TT>`config.status'</TT> some
+ variables it needs to run the <VAR>commands</VAR>.
+ 
+ You should be extremely cautious in your variable names: all the
+ <VAR>init-cmds</VAR> share the same name space and may overwrite each other
+ in unpredictable ways.  Sorry...
+ </DL>
+ 
+ <P>
+ All these macros can be called multiple times, with different
+ <VAR>tag</VAR>s, of course!
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC21" HREF="autoconf_toc.html#TOC21">Creating Configuration Files</A></H2>
+ 
+ <P>
+ Be sure to read the previous section, section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_FILES</B> <I>(<VAR>file</VAR>..., @ovar{cmds}, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX51"></A>
+ <A NAME="IDX52"></A>
+ Make <CODE>AC_OUTPUT</CODE> create each <TT>`<VAR>file</VAR>'</TT> by copying an input
+ file (by default <TT>`<VAR>file</VAR>.in'</TT>), substituting the output variable
+ values.
+ This macro is one of the instantiating macros, see section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>.  See section <A HREF="autoconf.html#SEC22">Substitutions in Makefiles</A>, for more information on using
+ output variables.  See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>, for more information
+ on creating them.  This macro creates the directory that the file is in
+ if it doesn't exist.  Usually, <TT>`Makefile'</TT>s are created this way,
+ but other files, such as <TT>`.gdbinit'</TT>, can be specified as well.
+ 
+ 
+ <P>
+ Typical calls to <CODE>AC_CONFIG_FILES</CODE> look like this:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_FILES([Makefile src/Makefile man/Makefile X/Imakefile])
+ AC_CONFIG_FILES([autoconf], [chmod +x autoconf])
+ </PRE>
+ 
+ <P>
+ You can override an input file name by appending to <VAR>file</VAR> a
+ colon-separated list of input files.  Examples:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_FILES([Makefile:boiler/top.mk:boiler/bot.mk]
+                 [lib/Makefile:boiler/lib.mk])
+ </PRE>
+ 
+ <P>
+ Doing this allows you to keep your file names acceptable to MS-DOS, or
+ to prepend and/or append boilerplate to the file.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC22" HREF="autoconf_toc.html#TOC22">Substitutions in Makefiles</A></H2>
+ 
+ <P>
+ Each subdirectory in a distribution that contains something to be
+ compiled or installed should come with a file <TT>`Makefile.in'</TT>, from
+ which @command{configure} will create a <TT>`Makefile'</TT> in that directory.
+ To create a <TT>`Makefile'</TT>, @command{configure} performs a simple variable
+ substitution, replacing occurrences of <SAMP>`@<VAR>variable</VAR>@'</SAMP> in
+ <TT>`Makefile.in'</TT> with the value that @command{configure} has determined
+ for that variable.  Variables that are substituted into output files in
+ this way are called <EM>output variables</EM>.  They are ordinary shell
+ variables that are set in @command{configure}.  To make @command{configure}
+ substitute a particular variable into the output files, the macro
+ <CODE>AC_SUBST</CODE> must be called with that variable name as an argument.
+ Any occurrences of <SAMP>`@<VAR>variable</VAR>@'</SAMP> for other variables are
+ left unchanged.  See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>, for more information
+ on creating output variables with <CODE>AC_SUBST</CODE>.
+ 
+ 
+ <P>
+ A software package that uses a @command{configure} script should be
+ distributed with a file <TT>`Makefile.in'</TT>, but no <TT>`Makefile'</TT>; that
+ way, the user has to properly configure the package for the local system
+ before compiling it.
+ 
+ 
+ <P>
+ See section `Makefile Conventions' in <CITE>The GNU Coding Standards</CITE>, for more information on what to put in
+ <TT>`Makefile'</TT>s.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC23" HREF="autoconf_toc.html#TOC23">Preset Output Variables</A></H3>
+ 
+ <P>
+ Some output variables are preset by the Autoconf macros.  Some of the
+ Autoconf macros set additional output variables, which are mentioned in
+ the descriptions for those macros.  See section <A HREF="autoconf.html#SEC185">Output Variable Index</A>, for a
+ complete list of output variables.  See section <A HREF="autoconf.html#SEC24">Installation Directory Variables</A>, for the list of the preset ones related to installation
+ directories.  Below are listed the other preset ones.  They all are
+ precious variables (see section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>,
+ <CODE>AC_ARG_VAR</CODE>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CFLAGS</B>
+ <DD><A NAME="IDX53"></A>
+ <A NAME="IDX54"></A>
+ Debugging and optimization options for the C compiler.  If it is not set
+ in the environment when @command{configure} runs, the default value is set
+ when you call <CODE>AC_PROG_CC</CODE> (or empty if you don't).  @command{configure}
+ uses this variable when compiling programs to test for C features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>configure_input</B>
+ <DD><A NAME="IDX55"></A>
+ <A NAME="IDX56"></A>
+ A comment saying that the file was generated automatically by
+ @command{configure} and giving the name of the input file.
+ <CODE>AC_OUTPUT</CODE> adds a comment line containing this variable to the top
+ of every <TT>`Makefile'</TT> it creates.  For other files, you should
+ reference this variable in a comment at the top of each input file.  For
+ example, an input shell script should begin like this:
+ 
+ 
+ 
+ <PRE>
+ #! /bin/sh
+ # @configure_input@
+ </PRE>
+ 
+ <P>
+ The presence of that line also reminds people editing the file that it
+ needs to be processed by @command{configure} in order to be used.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CPPFLAGS</B>
+ <DD><A NAME="IDX57"></A>
+ <A NAME="IDX58"></A>
+ Header file search directory (@option{-I<VAR>dir</VAR>}) and any other
+ miscellaneous options for the C and C++ preprocessors and compilers.  If
+ it is not set in the environment when @command{configure} runs, the default
+ value is empty.  @command{configure} uses this variable when compiling or
+ preprocessing programs to test for C and C++ features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CXXFLAGS</B>
+ <DD><A NAME="IDX59"></A>
+ <A NAME="IDX60"></A>
+ Debugging and optimization options for the C++ compiler.  If it is not
+ set in the environment when @command{configure} runs, the default value is
+ set when you call <CODE>AC_PROG_CXX</CODE> (or empty if you don't).
+ @command{configure} uses this variable when compiling programs to test for
+ C++ features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>DEFS</B>
+ <DD><A NAME="IDX61"></A>
+ <A NAME="IDX62"></A>
+ @option{-D} options to pass to the C compiler.  If <CODE>AC_CONFIG_HEADERS</CODE>
+ is called, @command{configure} replaces <SAMP>`@DEFS@'</SAMP> with
+ @option{-DHAVE_CONFIG_H} instead (see section <A HREF="autoconf.html#SEC27">Configuration Header Files</A>).  This
+ variable is not defined while @command{configure} is performing its tests,
+ only when creating the output files.  See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>, for
+ how to check the results of previous tests.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>ECHO_C</B>
+ <DD><A NAME="IDX63"></A>
+ <DT><U>Variable:</U> <B>ECHO_N</B>
+ <DD><A NAME="IDX64"></A>
+ <DT><U>Variable:</U> <B>ECHO_T</B>
+ <DD><A NAME="IDX65"></A>
+ <A NAME="IDX66"></A>
+ <A NAME="IDX67"></A>
+ <A NAME="IDX68"></A>
+ How does one suppress the trailing newline from <CODE>echo</CODE> for
+ question-answer message pairs?  These variables provide a way:
+ 
+ 
+ 
+ <PRE>
+ echo $ECHO_N "And the winner is... $ECHO_C"
+ sleep 100000000000
+ echo "${ECHO_T}dead."
+ </PRE>
+ 
+ <P>
+ Some old and uncommon <CODE>echo</CODE> implementations offer no means to
+ achieve this, in which case <CODE>ECHO_T</CODE> is set to tab.  You might not
+ want to use it.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>FFLAGS</B>
+ <DD><A NAME="IDX69"></A>
+ <A NAME="IDX70"></A>
+ Debugging and optimization options for the Fortran 77 compiler.  If it
+ is not set in the environment when @command{configure} runs, the default
+ value is set when you call <CODE>AC_PROG_F77</CODE> (or empty if you don't).
+ @command{configure} uses this variable when compiling programs to test for
+ Fortran 77 features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LDFLAGS</B>
+ <DD><A NAME="IDX71"></A>
+ <A NAME="IDX72"></A>
+ Stripping (@option{-s}), path (@option{-L}), and any other miscellaneous
+ options for the linker.  Don't use this variable to pass library names
+ (@option{-l}) to the linker, use <CODE>LIBS</CODE> instead.  If it is not set
+ in the environment when @command{configure} runs, the default value is empty.
+ @command{configure} uses this variable when linking programs to test for
+ C, C++ and Fortran 77 features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LIBS</B>
+ <DD><A NAME="IDX73"></A>
+ <A NAME="IDX74"></A>
+ @option{-l} options to pass to the linker.  The default value is empty,
+ but some Autoconf macros may prepend extra libraries to this variable if
+ those libraries are found and provide necessary functions, see
+ section <A HREF="autoconf.html#SEC43">Library Files</A>.  @command{configure} uses this variable when linking
+ programs to test for C, C++ and Fortran 77 features.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>builddir</B>
+ <DD><A NAME="IDX75"></A>
+ <A NAME="IDX76"></A>
+ Rigorously equal to <SAMP>`.'</SAMP>.  Added for symmetry only.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>abs_builddir</B>
+ <DD><A NAME="IDX77"></A>
+ <A NAME="IDX78"></A>
+ Absolute path of <CODE>builddir</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>top_builddir</B>
+ <DD><A NAME="IDX79"></A>
+ <A NAME="IDX80"></A>
+ The relative path to the top-level of the current build tree.  In the
+ top-level directory, this is the same as <CODE>srcbuild</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>abs_top_builddir</B>
+ <DD><A NAME="IDX81"></A>
+ <A NAME="IDX82"></A>
+ Absolute path of <CODE>top_builddir</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>srcdir</B>
+ <DD><A NAME="IDX83"></A>
+ <A NAME="IDX84"></A>
+ The relative path to the directory that contains the source code for
+ that <TT>`Makefile'</TT>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>abs_srcdir</B>
+ <DD><A NAME="IDX85"></A>
+ <A NAME="IDX86"></A>
+ Absolute path of <CODE>srcdir</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>top_srcdir</B>
+ <DD><A NAME="IDX87"></A>
+ <A NAME="IDX88"></A>
+ The relative path to the top-level source code directory for the
+ package.  In the top-level directory, this is the same as <CODE>srcdir</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>abs_top_srcdir</B>
+ <DD><A NAME="IDX89"></A>
+ <A NAME="IDX90"></A>
+ Absolute path of <CODE>top_srcdir</CODE>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC24" HREF="autoconf_toc.html#TOC24">Installation Directory Variables</A></H3>
+ 
+ <P>
+ The following variables specify the directories where the package will
+ be installed, see section `Variables for Installation Directories' in <CITE>The GNU Coding Standards</CITE>, for more information.
+ See the end of this section for details on when and how to use these
+ variables.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>bindir</B>
+ <DD><A NAME="IDX91"></A>
+ <A NAME="IDX92"></A>
+ The directory for installing executables that users run.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>datadir</B>
+ <DD><A NAME="IDX93"></A>
+ <A NAME="IDX94"></A>
+ The directory for installing read-only architecture-independent data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>exec_prefix</B>
+ <DD><A NAME="IDX95"></A>
+ <A NAME="IDX96"></A>
+ The installation prefix for architecture-dependent files.  By default
+ it's the same as <VAR>prefix</VAR>.  You should avoid installing anything
+ directly to <VAR>exec_prefix</VAR>.  However, the default value for
+ directories containing architecture-dependent files should be relative
+ to <VAR>exec_prefix</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>includedir</B>
+ <DD><A NAME="IDX97"></A>
+ <A NAME="IDX98"></A>
+ The directory for installing C header files.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>infodir</B>
+ <DD><A NAME="IDX99"></A>
+ <A NAME="IDX100"></A>
+ The directory for installing documentation in Info format.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>libdir</B>
+ <DD><A NAME="IDX101"></A>
+ <A NAME="IDX102"></A>
+ The directory for installing object code libraries.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>libexecdir</B>
+ <DD><A NAME="IDX103"></A>
+ <A NAME="IDX104"></A>
+ The directory for installing executables that other programs run.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>localstatedir</B>
+ <DD><A NAME="IDX105"></A>
+ <A NAME="IDX106"></A>
+ The directory for installing modifiable single-machine data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>mandir</B>
+ <DD><A NAME="IDX107"></A>
+ <A NAME="IDX108"></A>
+ The top-level directory for installing documentation in man format.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>oldincludedir</B>
+ <DD><A NAME="IDX109"></A>
+ <A NAME="IDX110"></A>
+ The directory for installing C header files for non-gcc compilers.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>prefix</B>
+ <DD><A NAME="IDX111"></A>
+ <A NAME="IDX112"></A>
+ The common installation prefix for all files. If <VAR>exec_prefix</VAR>
+ is defined to a different value, <VAR>prefix</VAR> is used only for
+ architecture-independent files.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>sbindir</B>
+ <DD><A NAME="IDX113"></A>
+ <A NAME="IDX114"></A>
+ The directory for installing executables that system
+ administrators run.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>sharedstatedir</B>
+ <DD><A NAME="IDX115"></A>
+ <A NAME="IDX116"></A>
+ The directory for installing modifiable architecture-independent data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>sysconfdir</B>
+ <DD><A NAME="IDX117"></A>
+ <A NAME="IDX118"></A>
+ The directory for installing read-only single-machine data.
+ </DL>
+ 
+ 
+ <P>
+ Most of these variables have values that rely on <CODE>prefix</CODE> or
+ <CODE>exec_prefix</CODE>.  It is deliberate that the directory output
+ variables keep them unexpanded: typically <SAMP>`@datadir@'</SAMP> will be
+ replaced by <SAMP>`${prefix}/share'</SAMP>, not <SAMP>`/usr/local/share'</SAMP>.
+ 
+ 
+ <P>
+ This behavior is mandated by the GNU coding standards, so that when
+ the user runs:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`make'</SAMP>
+ <DD>
+ she can still specify a different prefix from the one specified to
+ @command{configure}, in which case, if needed, the package shall hard
+ code dependencies corresponding to the make-specified prefix.
+ 
+ <DT><SAMP>`make install'</SAMP>
+ <DD>
+ she can specify a different installation location, in which case the
+ package <EM>must</EM> still depend on the location which was compiled in
+ (i.e., never recompile when <SAMP>`make install'</SAMP> is run).  This is an
+ extremely important feature, as many people may decide to install all
+ the files of a package grouped together, and then install links from
+ the final locations to there.
+ </DL>
+ 
+ <P>
+ In order to support these features, it is essential that <CODE>datadir</CODE>
+ remains being defined as <SAMP>`${prefix}/share'</SAMP> to depend upon the
+ current value of <CODE>prefix</CODE>.
+ 
+ 
+ <P>
+ A corollary is that you should not use these variables except in
+ Makefiles.  For instance, instead of trying to evaluate <CODE>datadir</CODE>
+ in <TT>`configure'</TT> and hardcoding it in Makefiles using
+ e.g. <SAMP>`AC_DEFINE_UNQUOTED(DATADIR, "$datadir")'</SAMP>, you should add
+ <SAMP>`-DDATADIR="$(datadir)"'</SAMP> to your <CODE>CPPFLAGS</CODE>.
+ 
+ 
+ <P>
+ Similarly you should not rely on <CODE>AC_OUTPUT_FILES</CODE> to replace
+ <CODE>datadir</CODE> and friends in your shell scripts and other files, rather
+ let @command{make} manage their replacement.  For instance Autoconf
+ ships templates of its shell scripts ending with <SAMP>`.sh'</SAMP>, and uses
+ this Makefile snippet:
+ 
+ 
+ 
+ <PRE>
+ .sh:
+         rm -f $@ $@.tmp
+         sed 's,@datadir\@,$(pkgdatadir),g' $&#60; &#62;$@.tmp
+         chmod +x $@.tmp
+         mv $@.tmp $@
+ </PRE>
+ 
+ <P>
+ Three things are noteworthy:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`@datadir\@'</SAMP>
+ <DD>
+ The backslash prevents @command{configure} from replacing
+ <SAMP>`@datadir@'</SAMP> in the sed expression itself.
+ 
+ <DT><SAMP>`$(pkgdatadir)'</SAMP>
+ <DD>
+ Don't use <SAMP>`@pkgdatadir@'</SAMP>!  Use the matching makefile variable
+ instead.
+ 
+ <DT><SAMP>`,'</SAMP>
+ <DD>
+ Don't use <SAMP>`/'</SAMP> in the sed expression(s) since most probably the
+ variables you use, such as <SAMP>`$(pkgdatadir)'</SAMP>, will contain
+ some.
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC25" HREF="autoconf_toc.html#TOC25">Build Directories</A></H3>
+ 
+ <P>
+ You can support compiling a software package for several architectures
+ simultaneously from the same copy of the source code.  The object files
+ for each architecture are kept in their own directory.
+ 
+ 
+ <P>
+ To support doing this, <CODE>make</CODE> uses the <CODE>VPATH</CODE> variable to
+ find the files that are in the source directory.  GNU <CODE>make</CODE>
+ and most other recent <CODE>make</CODE> programs can do this.  Older
+ <CODE>make</CODE> programs do not support <CODE>VPATH</CODE>; when using them, the
+ source code must be in the same directory as the object files.
+ 
+ 
+ <P>
+ To support <CODE>VPATH</CODE>, each <TT>`Makefile.in'</TT> should contain two
+ lines that look like:
+ 
+ 
+ 
+ <PRE>
+ srcdir = @srcdir@
+ VPATH = @srcdir@
+ </PRE>
+ 
+ <P>
+ Do not set <CODE>VPATH</CODE> to the value of another variable, for example
+ <SAMP>`VPATH = $(srcdir)'</SAMP>, because some versions of <CODE>make</CODE> do not do
+ variable substitutions on the value of <CODE>VPATH</CODE>.
+ 
+ 
+ <P>
+ @command{configure} substitutes in the correct value for <CODE>srcdir</CODE> when
+ it produces <TT>`Makefile'</TT>.
+ 
+ 
+ <P>
+ Do not use the <CODE>make</CODE> variable <CODE>$&#60;</CODE>, which expands to the
+ file name of the file in the source directory (found with <CODE>VPATH</CODE>),
+ except in implicit rules.  (An implicit rule is one such as <SAMP>`.c.o'</SAMP>,
+ which tells how to create a <TT>`.o'</TT> file from a <TT>`.c'</TT> file.)  Some
+ versions of <CODE>make</CODE> do not set <CODE>$&#60;</CODE> in explicit rules; they
+ expand it to an empty value.
+ 
+ 
+ <P>
+ Instead, <TT>`Makefile'</TT> command lines should always refer to source
+ files by prefixing them with <SAMP>`$(srcdir)/'</SAMP>.  For example:
+ 
+ 
+ 
+ <PRE>
+ time.info: time.texinfo
+         $(MAKEINFO) $(srcdir)/time.texinfo
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC26" HREF="autoconf_toc.html#TOC26">Automatic Remaking</A></H3>
+ 
+ <P>
+ You can put rules like the following in the top-level <TT>`Makefile.in'</TT>
+ for a package to automatically update the configuration information when
+ you change the configuration files.  This example includes all of the
+ optional files, such as <TT>`aclocal.m4'</TT> and those related to
+ configuration header files.  Omit from the <TT>`Makefile.in'</TT> rules for
+ any of these files that your package does not use.
+ 
+ 
+ <P>
+ The <SAMP>`$(srcdir)/'</SAMP> prefix is included because of limitations in the
+ <CODE>VPATH</CODE> mechanism.
+ 
+ 
+ <P>
+ The <TT>`stamp-'</TT> files are necessary because the timestamps of
+ <TT>`config.h.in'</TT> and <TT>`config.h'</TT> will not be changed if remaking
+ them does not change their contents.  This feature avoids unnecessary
+ recompilation.  You should include the file <TT>`stamp-h.in'</TT> your
+ package's distribution, so @command{make} will consider
+ <TT>`config.h.in'</TT> up to date.  Don't use @command{touch}
+ (see section <A HREF="autoconf.html#SEC119">Limitations of Usual Tools</A>), rather use @command{echo} (using
+ @command{date} would cause needless differences, hence CVS
+ conflicts etc.).
+ 
+ 
+ 
+ <PRE>
+ $(srcdir)/configure: configure.ac aclocal.m4
+         cd $(srcdir) &#38;&#38; autoconf
+ 
+ # autoheader might not change config.h.in, so touch a stamp file.
+ $(srcdir)/config.h.in: stamp-h.in
+ $(srcdir)/stamp-h.in: configure.ac aclocal.m4
+         cd $(srcdir) &#38;&#38; autoheader
+         echo timestamp &#62; $(srcdir)/stamp-h.in
+ 
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+         ./config.status
+ 
+ Makefile: Makefile.in config.status
+         ./config.status
+ 
+ config.status: configure
+         ./config.status --recheck
+ </PRE>
+ 
+ <P>
+ (Be careful if you copy these lines directly into your Makefile, as you
+ will need to convert the indented lines to start with the tab character.)
+ 
+ 
+ <P>
+ In addition, you should use <SAMP>`AC_CONFIG_FILES([stamp-h], [echo
+ timestamp &#62; stamp-h])'</SAMP> so <TT>`config.status'</TT> will ensure that
+ <TT>`config.h'</TT> is considered up to date.  See section <A HREF="autoconf.html#SEC19">Outputting Files</A>, for more
+ information about <CODE>AC_OUTPUT</CODE>.
+ 
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>, for more examples of handling
+ configuration-related dependencies.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC27" HREF="autoconf_toc.html#TOC27">Configuration Header Files</A></H2>
+ <P>
+ <A NAME="IDX119"></A>
+ <A NAME="IDX120"></A>
+ 
+ 
+ <P>
+ When a package tests more than a few C preprocessor symbols, the command
+ lines to pass @option{-D} options to the compiler can get quite long.
+ This causes two problems.  One is that the <CODE>make</CODE> output is hard to
+ visually scan for errors.  More seriously, the command lines can exceed
+ the length limits of some operating systems.  As an alternative to
+ passing @option{-D} options to the compiler, @command{configure} scripts can
+ create a C header file containing <SAMP>`#define'</SAMP> directives.  The
+ <CODE>AC_CONFIG_HEADERS</CODE> macro selects this kind of output.  It should
+ be called right after <CODE>AC_INIT</CODE>.
+ 
+ 
+ <P>
+ The package should <SAMP>`#include'</SAMP> the configuration header file before
+ any other header files, to prevent inconsistencies in declarations (for
+ example, if it redefines <CODE>const</CODE>).  Use <SAMP>`#include &#60;config.h&#62;'</SAMP>
+ instead of <SAMP>`#include "config.h"'</SAMP>, and pass the C compiler a
+ @option{-I.} option (or @option{-I..}; whichever directory contains
+ <TT>`config.h'</TT>).  That way, even if the source directory is configured
+ itself (perhaps to make a distribution), other build directories can
+ also be configured without finding the <TT>`config.h'</TT> from the source
+ directory.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_HEADERS</B> <I>(<VAR>header</VAR> ..., @ovar{cmds}, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX121"></A>
+ <A NAME="IDX122"></A>
+ <A NAME="IDX123"></A>
+ This macro is one of the instantiating macros, see section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>.  Make <CODE>AC_OUTPUT</CODE> create the file(s) in the
+ whitespace-separated list <VAR>header</VAR> containing C preprocessor
+ <CODE>#define</CODE> statements, and replace <SAMP>`@DEFS@'</SAMP> in generated
+ files with @option{-DHAVE_CONFIG_H} instead of the value of <CODE>DEFS</CODE>.
+ The usual name for <VAR>header</VAR> is <TT>`config.h'</TT>.
+ 
+ 
+ <P>
+ If <VAR>header</VAR> already exists and its contents are identical to what
+ <CODE>AC_OUTPUT</CODE> would put in it, it is left alone.  Doing this allows
+ some changes in configuration without needlessly causing object files
+ that depend on the header file to be recompiled.
+ 
+ 
+ <P>
+ Usually the input file is named <TT>`<VAR>header</VAR>.in'</TT>; however, you can
+ override the input file name by appending to <VAR>header</VAR>, a
+ colon-separated list of input files.  Examples:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_HEADERS([config.h:config.hin])
+ AC_CONFIG_HEADERS([defines.h:defs.pre:defines.h.in:defs.post])
+ </PRE>
+ 
+ <P>
+ Doing this allows you to keep your file names acceptable to MS-DOS, or
+ to prepend and/or append boilerplate to the file.
+ </DL>
+ 
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>, for more details on <VAR>header</VAR>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC28" HREF="autoconf_toc.html#TOC28">Configuration Header Templates</A></H3>
+ <P>
+ <A NAME="IDX124"></A>
+ <A NAME="IDX125"></A>
+ 
+ 
+ <P>
+ Your distribution should contain a template file that looks as you want
+ the final header file to look, including comments, with <CODE>#undef</CODE>
+ statements which are used as hooks.  For example, suppose your
+ <TT>`configure.ac'</TT> makes these calls:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_HEADERS([conf.h])
+ AC_CHECK_HEADERS([unistd.h])
+ </PRE>
+ 
+ <P>
+ Then you could have code like the following in <TT>`conf.h.in'</TT>.  On
+ systems that have <TT>`unistd.h'</TT>, @command{configure} will <SAMP>`#define'</SAMP>
+ <SAMP>`HAVE_UNISTD_H'</SAMP> to 1.  On other systems, the whole line will be
+ commented out (in case the system predefines that symbol).
+ 
+ 
+ 
+ <PRE>
+ /* Define as 1 if you have unistd.h.  */
+ #undef HAVE_UNISTD_H
+ </PRE>
+ 
+ <P>
+ You can then decode the configuration header using the preprocessor
+ directives:
+ 
+ 
+ 
+ <PRE>
+ #include &#60;conf.h&#62;
+ 
+ #if HAVE_UNISTD_H
+ # include &#60;unistd.h&#62;
+ #else
+ /* We are in trouble. */
+ #endif
+ </PRE>
+ 
+ <P>
+ The use of old form templates, with <SAMP>`#define'</SAMP> instead of
+ <SAMP>`#undef'</SAMP> is strongly discouraged.
+ 
+ 
+ <P>
+ Since it is a tedious task to keep a template header up to date, you may
+ use @command{autoheader} to generate it, see section <A HREF="autoconf.html#SEC29">Using @command{autoheader} to Create @file{config.h.in}</A>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC29" HREF="autoconf_toc.html#TOC29">Using @command{autoheader} to Create <TT>`config.h.in'</TT></A></H3>
+ <P>
+ <A NAME="IDX126"></A>
+ 
+ 
+ <P>
+ The @command{autoheader} program can create a template file of C
+ <SAMP>`#define'</SAMP> statements for @command{configure} to use.  If
+ <TT>`configure.ac'</TT> invokes <CODE>AC_CONFIG_HEADERS(<VAR>file</VAR>)</CODE>,
+ @command{autoheader} creates <TT>`<VAR>file</VAR>.in'</TT>; if multiple file
+ arguments are given, the first one is used.  Otherwise,
+ @command{autoheader} creates <TT>`config.h.in'</TT>.
+ 
+ 
+ <P>
+ In order to do its job, @command{autoheader} needs you to document all
+ of the symbols that you might use; i.e., there must be at least one
+ <CODE>AC_DEFINE</CODE> or one <CODE>AC_DEFINE_UNQUOTED</CODE> using its third
+ argument for each symbol (see section <A HREF="autoconf.html#SEC80">Defining C Preprocessor Symbols</A>).  An additional
+ constraint is that the first argument of <CODE>AC_DEFINE</CODE> must be a
+ literal.  Note that all symbols defined by Autoconf's built-in tests are
+ already documented properly; you only need to document those that you
+ define yourself.
+ 
+ 
+ <P>
+ You might wonder why @command{autoheader} is needed: after all, why
+ would @command{configure} need to "patch" a <TT>`config.h.in'</TT> to
+ produce a <TT>`config.h'</TT> instead of just creating <TT>`config.h'</TT> from
+ scratch?  Well, when everything rocks, the answer is just that we are
+ wasting our time maintaining @command{autoheader}: generating
+ <TT>`config.h'</TT> directly is all that is needed.  When things go wrong,
+ however, you'll be thankful for the existence of @command{autoheader}.
+ 
+ 
+ <P>
+ The fact that the symbols are documented is important in order to
+ <EM>check</EM> that <TT>`config.h'</TT> makes sense.  The fact that there is a
+ well defined list of symbols that should be <CODE>#define</CODE>'d (or not) is
+ also important for people who are porting packages to environments where
+ @command{configure} cannot be run: they just have to @emph{fill in the
+ blanks}.
+ 
+ 
+ <P>
+ But let's come back to the point: @command{autoheader}'s invocation...
+ 
+ 
+ <P>
+ If you give @command{autoheader} an argument, it uses that file instead
+ of <TT>`configure.ac'</TT> and writes the header file to the standard output
+ instead of to <TT>`config.h.in'</TT>.  If you give @command{autoheader} an
+ argument of @option{-}, it reads the standard input instead of
+ <TT>`configure.ac'</TT> and writes the header file to the standard output.
+ 
+ 
+ <P>
+ @command{autoheader} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ <DT>@option{-v}
+ <DD>
+ Report processing steps.
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files.
+ 
+ <DT>@option{--force}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Remake the template file even if newer than its input files.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations accumulate.
+ Directories are browsed from last to first.
+ 
+ <DT>@option{--warnings=<VAR>category</VAR>}
+ <DD>
+ <DT>@option{-W <VAR>category</VAR>}
+ <DD>
+ <A NAME="IDX127"></A>
+ Report the warnings related to <VAR>category</VAR> (which can actually be a
+ comma separated list). Current categories include:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`obsolete'</SAMP>
+ <DD>
+ report the uses of obsolete constructs
+ 
+ <DT><SAMP>`all'</SAMP>
+ <DD>
+ report all the warnings
+ 
+ <DT><SAMP>`none'</SAMP>
+ <DD>
+ report none
+ 
+ <DT><SAMP>`error'</SAMP>
+ <DD>
+ treats warnings as errors
+ 
+ <DT><SAMP>`no-<VAR>category</VAR>'</SAMP>
+ <DD>
+ disable warnings falling into <VAR>category</VAR>
+ </DL>
+ 
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC30" HREF="autoconf_toc.html#TOC30">Autoheader Macros</A></H3>
+ 
+ <P>
+ @command{autoheader} scans <TT>`configure.ac'</TT> and figures out which C
+ preprocessor symbols it might define.  It knows how to generate
+ templates for symbols defined by <CODE>AC_CHECK_HEADERS</CODE>,
+ <CODE>AC_CHECK_FUNCS</CODE> etc., but if you <CODE>AC_DEFINE</CODE> any additional
+ symbol, you must define a template for it.  If there are missing
+ templates, @command{autoheader} fails with an error message.
+ 
+ 
+ <P>
+ The simplest way to create a template for a <VAR>symbol</VAR> is to supply
+ the <VAR>description</VAR> argument to an <SAMP>`AC_DEFINE(<VAR>symbol</VAR>)'</SAMP>; see
+ section <A HREF="autoconf.html#SEC80">Defining C Preprocessor Symbols</A>.  You may also use one of the following macros.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AH_VERBATIM</B> <I>(<VAR>key</VAR>, <VAR>template</VAR>)</I>
+ <DD><A NAME="IDX128"></A>
+ <A NAME="IDX129"></A>
+ <A NAME="IDX130"></A>
+ Tell @command{autoheader} to include the <VAR>template</VAR> as-is in the header
+ template file.  This <VAR>template</VAR> is associated with the <VAR>key</VAR>,
+ which is used to sort all the different templates and guarantee their
+ uniqueness.  It should be the symbol that can be <CODE>AC_DEFINE</CODE>'d.
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ AH_VERBATIM([_GNU_SOURCE],
+ [/* Enable GNU extensions on systems that have them.  */
+ #ifndef _GNU_SOURCE
+ # define _GNU_SOURCE
+ #endif])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AH_TEMPLATE</B> <I>(<VAR>key</VAR>, <VAR>description</VAR>)</I>
+ <DD><A NAME="IDX131"></A>
+ <A NAME="IDX132"></A>
+ <A NAME="IDX133"></A>
+ Tell @command{autoheader} to generate a template for <VAR>key</VAR>.  This macro
+ generates standard templates just like <CODE>AC_DEFINE</CODE> when a
+ <VAR>description</VAR> is given.
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ AH_TEMPLATE([CRAY_STACKSEG_END],
+             [Define to one of _getb67, GETB67, getb67
+              for Cray-2 and Cray-YMP systems.  This
+              function is required for alloca.c support
+              on those systems.])
+ </PRE>
+ 
+ <P>
+ will generate the following template, with the description properly
+ justified.
+ 
+ 
+ 
+ <PRE>
+ /* Define to one of _getb67, GETB67, getb67 for Cray-2 and
+    Cray-YMP systems. This function is required for alloca.c
+    support on those systems. */
+ #undef CRAY_STACKSEG_END
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AH_TOP</B> <I>(<VAR>text</VAR>)</I>
+ <DD><A NAME="IDX134"></A>
+ <A NAME="IDX135"></A>
+ <A NAME="IDX136"></A>
+ Include <VAR>text</VAR> at the top of the header template file.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AH_BOTTOM</B> <I>(<VAR>text</VAR>)</I>
+ <DD><A NAME="IDX137"></A>
+ <A NAME="IDX138"></A>
+ <A NAME="IDX139"></A>
+ Include <VAR>text</VAR> at the bottom of the header template file.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC31" HREF="autoconf_toc.html#TOC31">Running Arbitrary Configuration Commands</A></H2>
+ 
+ <P>
+ You execute arbitrary commands either before, during and after
+ <TT>`config.status'</TT> is run.  The three following macros accumulate the
+ commands to run when they are called multiple times.
+ <CODE>AC_CONFIG_COMMANDS</CODE> replaces the obsolete macro
+ <CODE>AC_OUTPUT_COMMANDS</CODE>, see section <A HREF="autoconf.html#SEC150">Obsolete Macros</A>, for details.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_COMMANDS</B> <I>(<VAR>tag</VAR>..., @ovar{cmds}, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX140"></A>
+ <A NAME="IDX141"></A>
+ Specify additional shell commands to run at the end of
+ <TT>`config.status'</TT>, and shell commands to initialize any variables
+ from @command{configure}.  Associate the commands to the <VAR>tag</VAR>.  Since
+ typically the <VAR>cmds</VAR> create a file, <VAR>tag</VAR> should naturally be
+ the name of that file.  This macro is one of the instantiating macros,
+ see section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>.
+ 
+ 
+ <P>
+ Here is an unrealistic example:
+ 
+ <PRE>
+ fubar=42
+ AC_CONFIG_COMMANDS([fubar],
+                    [echo this is extra $fubar, and so on.],
+                    [fubar=$fubar])
+ </PRE>
+ 
+ <P>
+ Here is a better one:
+ 
+ <PRE>
+ AC_CONFIG_COMMANDS([time-stamp], [date &#62;time-stamp])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_COMMANDS_PRE</B> <I>(<VAR>cmds</VAR>)</I>
+ <DD><A NAME="IDX142"></A>
+ <A NAME="IDX143"></A>
+ Execute the <VAR>cmds</VAR> right before creating <TT>`config.status'</TT>.  A
+ typical use is computing values derived from variables built during the
+ execution of @command{configure}:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_COMMANDS_PRE(
+ [LTLIBOBJS=`echo $LIBOBJS | sed 's/\.o/\.lo/g'`
+ AC_SUBST(LTLIBOBJS)])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_COMMANDS_POST</B> <I>(<VAR>cmds</VAR>)</I>
+ <DD><A NAME="IDX144"></A>
+ <A NAME="IDX145"></A>
+ Execute the <VAR>cmds</VAR> right after creating <TT>`config.status'</TT>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC32" HREF="autoconf_toc.html#TOC32">Creating Configuration Links</A></H2>
+ 
+ <P>
+ You may find it convenient to create links whose destinations depend upon
+ results of tests.  One can use <CODE>AC_CONFIG_COMMANDS</CODE> but the
+ creation of relative symbolic links can be delicate when the package is
+ built in another directory than its sources.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_LINKS</B> <I>(<VAR>dest</VAR>:<VAR>source</VAR>..., @ovar{cmds}, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX146"></A>
+ <A NAME="IDX147"></A>
+ <A NAME="IDX148"></A>
+ Make <CODE>AC_OUTPUT</CODE> link each of the existing files <VAR>source</VAR> to
+ the corresponding link name <VAR>dest</VAR>.  Makes a symbolic link if
+ possible, otherwise a hard link.  The <VAR>dest</VAR> and <VAR>source</VAR> names
+ should be relative to the top level source or build directory.  This
+ macro is one of the instantiating macros, see section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>.
+ 
+ 
+ <P>
+ For example, this call:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_LINKS(host.h:config/$machine.h
+                 object.h:config/$obj_format.h)
+ </PRE>
+ 
+ <P>
+ creates in the current directory <TT>`host.h'</TT> as a link to
+ <TT>`<VAR>srcdir</VAR>/config/$machine.h'</TT>, and <TT>`object.h'</TT> as a
+ link to <TT>`<VAR>srcdir</VAR>/config/$obj_format.h'</TT>.
+ 
+ 
+ <P>
+ The tempting value <SAMP>`.'</SAMP> for <VAR>dest</VAR> is invalid: it makes it
+ impossible for <SAMP>`config.status'</SAMP> to guess the links to establish.
+ 
+ 
+ <P>
+ One can then run:
+ 
+ <PRE>
+ ./config.status host.h object.h
+ </PRE>
+ 
+ <P>
+ to create the links.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC33" HREF="autoconf_toc.html#TOC33">Configuring Other Packages in Subdirectories</A></H2>
+ 
+ <P>
+ In most situations, calling <CODE>AC_OUTPUT</CODE> is sufficient to produce
+ <TT>`Makefile'</TT>s in subdirectories.  However, @command{configure} scripts
+ that control more than one independent package can use
+ <CODE>AC_CONFIG_SUBDIRS</CODE> to run @command{configure} scripts for other
+ packages in subdirectories.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONFIG_SUBDIRS</B> <I>(<VAR>dir</VAR> ...)</I>
+ <DD><A NAME="IDX149"></A>
+ <A NAME="IDX150"></A>
+ <A NAME="IDX151"></A>
+ Make <CODE>AC_OUTPUT</CODE> run @command{configure} in each subdirectory
+ <VAR>dir</VAR> in the given whitespace-separated list.  Each <VAR>dir</VAR> should
+ be a literal, i.e., please do not use:
+ 
+ 
+ 
+ <PRE>
+ if test "$package_foo_enabled" = yes; then
+   $my_subdirs="$my_subdirs foo"
+ fi
+ AC_CONFIG_SUBDIRS($my_subdirs)
+ </PRE>
+ 
+ <P>
+ because this prevents <SAMP>`./configure --help=recursive'</SAMP> from
+ displaying the options of the package <CODE>foo</CODE>.  Rather, you should
+ write:
+ 
+ 
+ 
+ <PRE>
+ if test "$package_foo_enabled" = yes; then
+   AC_CONFIG_SUBDIRS(foo)
+ fi
+ </PRE>
+ 
+ <P>
+ If a given <VAR>dir</VAR> is not found, an error is reported: if the
+ subdirectory is optional, write:
+ 
+ 
+ 
+ <PRE>
+ if test -d $srcdir/foo; then
+   AC_CONFIG_SUBDIRS(foo)
+ fi
+ </PRE>
+ 
+ <P>
+ If a given <VAR>dir</VAR> contains @command{configure.gnu}, it is run instead
+ of @command{configure}. This is for packages that might use a
+ non-autoconf script @command{Configure}, which can't be called through a
+ wrapper @command{configure} since it would be the same file on
+ case-insensitive filesystems. Likewise, if a <VAR>dir</VAR> contains
+ <TT>`configure.ac'</TT> but no @command{configure}, the Cygnus
+ @command{configure} script found by <CODE>AC_CONFIG_AUX_DIR</CODE> is used.
+ 
+ 
+ <P>
+ The subdirectory @command{configure} scripts are given the same command
+ line options that were given to this @command{configure} script, with minor
+ changes if needed, which include:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ adjusting a relative path for the cache file;
+ 
+ <LI>
+ 
+ adjusting a relative path for the source directory;
+ 
+ <LI>
+ 
+ propagating the current value of <CODE>$prefix</CODE>, including if it was
+ defaulted, and if default values of the top level and of sub directory
+ <TT>`configure'</TT> differ.
+ </UL>
+ 
+ <P>
+ This macro also sets the output variable <CODE>subdirs</CODE> to the list of
+ directories <SAMP>`<VAR>dir</VAR> ...'</SAMP>.  <TT>`Makefile'</TT> rules can use
+ this variable to determine which subdirectories to recurse into.  This
+ macro may be called multiple times.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC34" HREF="autoconf_toc.html#TOC34">Default Prefix</A></H2>
+ 
+ <P>
+ By default, @command{configure} sets the prefix for files it installs to
+ <TT>`/usr/local'</TT>.  The user of @command{configure} can select a different
+ prefix using the @option{--prefix} and @option{--exec-prefix} options.
+ There are two ways to change the default: when creating
+ @command{configure}, and when running it.
+ 
+ 
+ <P>
+ Some software packages might want to install in a directory besides
+ <TT>`/usr/local'</TT> by default.  To accomplish that, use the
+ <CODE>AC_PREFIX_DEFAULT</CODE> macro.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PREFIX_DEFAULT</B> <I>(<VAR>prefix</VAR>)</I>
+ <DD><A NAME="IDX152"></A>
+ <A NAME="IDX153"></A>
+ Set the default installation prefix to <VAR>prefix</VAR> instead of
+ <TT>`/usr/local'</TT>.
+ </DL>
+ 
+ 
+ <P>
+ It may be convenient for users to have @command{configure} guess the
+ installation prefix from the location of a related program that they
+ have already installed.  If you wish to do that, you can call
+ <CODE>AC_PREFIX_PROGRAM</CODE>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PREFIX_PROGRAM</B> <I>(<VAR>program</VAR>)</I>
+ <DD><A NAME="IDX154"></A>
+ <A NAME="IDX155"></A>
+ If the user did not specify an installation prefix (using the
+ @option{--prefix} option), guess a value for it by looking for
+ <VAR>program</VAR> in <CODE>PATH</CODE>, the way the shell does.  If <VAR>program</VAR>
+ is found, set the prefix to the parent of the directory containing
+ <VAR>program</VAR>; otherwise leave the prefix specified in
+ <TT>`Makefile.in'</TT> unchanged.  For example, if <VAR>program</VAR> is
+ <CODE>gcc</CODE> and the <CODE>PATH</CODE> contains <TT>`/usr/local/gnu/bin/gcc'</TT>,
+ set the prefix to <TT>`/usr/local/gnu'</TT>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC35" HREF="autoconf_toc.html#TOC35">Existing Tests</A></H1>
+ 
+ <P>
+ These macros test for particular system features that packages might
+ need or want to use.  If you need to test for a kind of feature that
+ none of these macros check for, you can probably do it by calling
+ primitive test macros with appropriate arguments (see section <A HREF="autoconf.html#SEC68">Writing Tests</A>).
+ 
+ 
+ <P>
+ These tests print messages telling the user which feature they're
+ checking for, and what they find.  They cache their results for future
+ @command{configure} runs (see section <A HREF="autoconf.html#SEC82">Caching Results</A>).
+ 
+ 
+ <P>
+ Some of these macros set output variables.  See section <A HREF="autoconf.html#SEC22">Substitutions in Makefiles</A>, for how to get their values.  The phrase "define
+ <VAR>name</VAR>" is used below as a shorthand to mean "define C
+ preprocessor symbol <VAR>name</VAR> to the value 1".  See section <A HREF="autoconf.html#SEC80">Defining C Preprocessor Symbols</A>, for how to get those symbol definitions into your program.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC36" HREF="autoconf_toc.html#TOC36">Common Behavior</A></H2>
+ 
+ <P>
+ Much effort has been expended to make Autoconf easy to learn.  The most
+ obvious way to reach this goal is simply to enforce standard interfaces
+ and behaviors, avoiding exceptions as much as possible.  Because of
+ history and inertia, unfortunately, there are still too many exceptions
+ in Autoconf; nevertheless, this section describes some of the common
+ rules.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC37" HREF="autoconf_toc.html#TOC37">Standard Symbols</A></H3>
+ 
+ <P>
+ All the generic macros that <CODE>AC_DEFINE</CODE> a symbol as a result of
+ their test transform their <VAR>argument</VAR>s to a standard alphabet.
+ First, <VAR>argument</VAR> is converted to upper case and any asterisks
+ (<SAMP>`*'</SAMP>) are each converted to <SAMP>`P'</SAMP>.  Any remaining characters
+ that are not alphanumeric are converted to underscores.
+ 
+ 
+ <P>
+ For instance,
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_TYPES(struct $Expensive*)
+ </PRE>
+ 
+ <P>
+ will define the symbol <SAMP>`HAVE_STRUCT__EXPENSIVEP'</SAMP> if the check
+ succeeds.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC38" HREF="autoconf_toc.html#TOC38">Default Includes</A></H3>
+ <P>
+ <A NAME="IDX156"></A>
+ 
+ 
+ <P>
+ Several tests depend upon a set of header files.  Since these headers
+ are not universally available, tests actually have to provide a set of
+ protected includes, such as:
+ 
+ 
+ 
+ <PRE>
+ #if TIME_WITH_SYS_TIME
+ # include &#60;sys/time.h&#62;
+ # include &#60;time.h&#62;
+ #else
+ # if HAVE_SYS_TIME_H
+ #  include &#60;sys/time.h&#62;
+ # else
+ #  include &#60;time.h&#62;
+ # endif
+ #endif
+ </PRE>
+ 
+ <P>
+ Unless you know exactly what you are doing, you should avoid using
+ unconditional includes, and check the existence of the headers you
+ include beforehand (see section <A HREF="autoconf.html#SEC48">Header Files</A>).
+ 
+ 
+ <P>
+ Most generic macros provide the following default set of includes:
+ 
+ 
+ 
+ <PRE>
+ #include &#60;stdio.h&#62;
+ #if HAVE_SYS_TYPES_H
+ # include &#60;sys/types.h&#62;
+ #endif
+ #if HAVE_SYS_STAT_H
+ # include &#60;sys/stat.h&#62;
+ #endif
+ #if STDC_HEADERS
+ # include &#60;stdlib.h&#62;
+ # include &#60;stddef.h&#62;
+ #else
+ # if HAVE_STDLIB_H
+ #  include &#60;stdlib.h&#62;
+ # endif
+ #endif
+ #if HAVE_STRING_H
+ # if !STDC_HEADERS &#38;&#38; HAVE_MEMORY_H
+ #  include &#60;memory.h&#62;
+ # endif
+ # include &#60;string.h&#62;
+ #endif
+ #if HAVE_STRINGS_H
+ # include &#60;strings.h&#62;
+ #endif
+ #if HAVE_INTTYPES_H
+ # include &#60;inttypes.h&#62;
+ #else
+ # if HAVE_STDINT_H
+ #  include &#60;stdint.h&#62;
+ # endif
+ #endif
+ #if HAVE_UNISTD_H
+ # include &#60;unistd.h&#62;
+ #endif
+ </PRE>
+ 
+ <P>
+ If the default includes are used, then Autoconf will automatically check
+ for the presence of these headers and their compatibility, i.e., you
+ don't need to run <CODE>AC_HEADERS_STDC</CODE>, nor check for <TT>`stdlib.h'</TT>
+ etc.
+ 
+ 
+ <P>
+ These headers are checked for in the same order as they are included.
+ For instance, on some systems <TT>`string.h'</TT> and <TT>`strings.h'</TT> both
+ exist, but conflict.  Then <CODE>HAVE_STRING_H</CODE> will be defined, but
+ <CODE>HAVE_STRINGS_H</CODE> won't.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC39" HREF="autoconf_toc.html#TOC39">Alternative Programs</A></H2>
+ <P>
+ <A NAME="IDX157"></A>
+ 
+ 
+ <P>
+ These macros check for the presence or behavior of particular programs.
+ They are used to choose between several alternative programs and to
+ decide what to do once one has been chosen.  If there is no macro
+ specifically defined to check for a program you need, and you don't need
+ to check for any special properties of it, then you can use one of the
+ general program-check macros.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC40" HREF="autoconf_toc.html#TOC40">Particular Program Checks</A></H3>
+ 
+ <P>
+ These macros check for particular programs--whether they exist, and
+ in some cases whether they support certain features.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_AWK</B>
+ <DD><A NAME="IDX158"></A>
+ <A NAME="IDX159"></A>
+ <A NAME="IDX160"></A>
+ Check for <CODE>gawk</CODE>, <CODE>mawk</CODE>, <CODE>nawk</CODE>, and <CODE>awk</CODE>, in that
+ order, and set output variable <CODE>AWK</CODE> to the first one that is found.
+ It tries <CODE>gawk</CODE> first because that is reported to be the
+ best implementation.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_INSTALL</B>
+ <DD><A NAME="IDX161"></A>
+ <A NAME="IDX162"></A>
+ <A NAME="IDX163"></A>
+ <A NAME="IDX164"></A>
+ <A NAME="IDX165"></A>
+ <A NAME="IDX166"></A>
+ Set output variable <CODE>INSTALL</CODE> to the path of a BSD compatible
+ <CODE>install</CODE> program, if one is found in the current <CODE>PATH</CODE>.
+ Otherwise, set <CODE>INSTALL</CODE> to <SAMP>`<VAR>dir</VAR>/install-sh -c'</SAMP>,
+ checking the directories specified to <CODE>AC_CONFIG_AUX_DIR</CODE> (or its
+ default directories) to determine <VAR>dir</VAR> (see section <A HREF="autoconf.html#SEC19">Outputting Files</A>).  Also set
+ the variables <CODE>INSTALL_PROGRAM</CODE> and <CODE>INSTALL_SCRIPT</CODE> to
+ <SAMP>`${INSTALL}'</SAMP> and <CODE>INSTALL_DATA</CODE> to <SAMP>`${INSTALL} -m 644'</SAMP>.
+ 
+ 
+ <P>
+ This macro screens out various instances of <CODE>install</CODE> known not to
+ work.  It prefers to find a C program rather than a shell script, for
+ speed.  Instead of <TT>`install-sh'</TT>, it can also use <TT>`install.sh'</TT>,
+ but that name is obsolete because some <CODE>make</CODE> programs have a rule
+ that creates <TT>`install'</TT> from it if there is no <TT>`Makefile'</TT>.
+ 
+ 
+ <P>
+ Autoconf comes with a copy of <TT>`install-sh'</TT> that you can use.  If
+ you use <CODE>AC_PROG_INSTALL</CODE>, you must include either
+ <TT>`install-sh'</TT> or <TT>`install.sh'</TT> in your distribution, or
+ @command{configure} will produce an error message saying it can't find
+ them--even if the system you're on has a good <CODE>install</CODE> program.
+ This check is a safety measure to prevent you from accidentally leaving
+ that file out, which would prevent your package from installing on
+ systems that don't have a BSD-compatible <CODE>install</CODE> program.
+ 
+ 
+ <P>
+ If you need to use your own installation program because it has features
+ not found in standard <CODE>install</CODE> programs, there is no reason to use
+ <CODE>AC_PROG_INSTALL</CODE>; just put the file name of your program into your
+ <TT>`Makefile.in'</TT> files.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_LEX</B>
+ <DD><A NAME="IDX167"></A>
+ <A NAME="IDX168"></A>
+ <A NAME="IDX169"></A>
+ <A NAME="IDX170"></A>
+ <A NAME="IDX171"></A>
+ <A NAME="IDX172"></A>
+ If <CODE>flex</CODE> is found, set output variable <CODE>LEX</CODE> to <SAMP>`flex'</SAMP>
+ and <CODE>LEXLIB</CODE> to @option{-lfl}, if that library is in a standard
+ place.  Otherwise set <CODE>LEX</CODE> to <SAMP>`lex'</SAMP> and <CODE>LEXLIB</CODE> to
+ @option{-ll}.
+ 
+ 
+ <P>
+ Define <CODE>YYTEXT_POINTER</CODE> if <CODE>yytext</CODE> is a <SAMP>`char *'</SAMP> instead
+ of a <SAMP>`char []'</SAMP>.  Also set output variable <CODE>LEX_OUTPUT_ROOT</CODE> to
+ the base of the file name that the lexer generates; usually
+ <TT>`lex.yy'</TT>, but sometimes something else.  These results vary
+ according to whether <CODE>lex</CODE> or <CODE>flex</CODE> is being used.
+ 
+ 
+ <P>
+ You are encouraged to use Flex in your sources, since it is both more
+ pleasant to use than plain Lex and the C source it produces is portable.
+ In order to ensure portability, however, you must either provide a
+ function <CODE>yywrap</CODE> or, if you don't use it (e.g., your scanner has
+ no <SAMP>`#include'</SAMP>-like feature), simply include a <SAMP>`%noyywrap'</SAMP>
+ statement in the scanner's source.  Once this done, the scanner is
+ portable (unless <EM>you</EM> felt free to use nonportable constructs) and
+ does not depend on any library.  In this case, and in this case only, it
+ is suggested that you use this Autoconf snippet:
+ 
+ 
+ 
+ <PRE>
+ AC_PROG_LEX
+ if test "$LEX" != flex; then
+   LEX="$SHELL $missing_dir/missing flex"
+   AC_SUBST(LEX_OUTPUT_ROOT, lex.yy)
+   AC_SUBST(LEXLIB, '')
+ fi
+ </PRE>
+ 
+ <P>
+ The shell script @command{missing} can be found in the Automake
+ distribution.
+ 
+ 
+ <P>
+ To ensure backward compatibility, Automake's <CODE>AM_PROG_LEX</CODE> invokes
+ (indirectly) this macro twice, which will cause an annoying but benign
+ "<CODE>AC_PROG_LEX</CODE> invoked multiple times" warning.  Future versions
+ of Automake will fix this issue, meanwhile, just ignore this message.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_LN_S</B>
+ <DD><A NAME="IDX173"></A>
+ <A NAME="IDX174"></A>
+ <A NAME="IDX175"></A>
+ If <SAMP>`ln -s'</SAMP> works on the current file system (the operating system
+ and file system support symbolic links), set the output variable
+ <CODE>LN_S</CODE> to <SAMP>`ln -s'</SAMP>; otherwise, if <SAMP>`ln'</SAMP> works, set
+ <CODE>LN_S</CODE> to <SAMP>`ln'</SAMP> and otherwise set it to <SAMP>`cp -p'</SAMP>.
+ 
+ 
+ <P>
+ If you make a link a directory other than the current directory, its
+ meaning depends on whether <SAMP>`ln'</SAMP> or <SAMP>`ln -s'</SAMP> is used.  To safely
+ create links using <SAMP>`$(LN_S)'</SAMP>, either find out which form is used
+ and adjust the arguments, or always invoke <CODE>ln</CODE> in the directory
+ where the link is to be created.
+ 
+ 
+ <P>
+ In other words, it does not work to do:
+ 
+ <PRE>
+ $(LN_S) foo /x/bar
+ </PRE>
+ 
+ <P>
+ Instead, do:
+ 
+ 
+ 
+ <PRE>
+ (cd /x &#38;&#38; $(LN_S) foo bar)
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_RANLIB</B>
+ <DD><A NAME="IDX176"></A>
+ <A NAME="IDX177"></A>
+ <A NAME="IDX178"></A>
+ Set output variable <CODE>RANLIB</CODE> to <SAMP>`ranlib'</SAMP> if <CODE>ranlib</CODE>
+ is found, and otherwise to <SAMP>`:'</SAMP> (do nothing).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_YACC</B>
+ <DD><A NAME="IDX179"></A>
+ <A NAME="IDX180"></A>
+ <A NAME="IDX181"></A>
+ If <CODE>bison</CODE> is found, set output variable <CODE>YACC</CODE> to <SAMP>`bison
+ -y'</SAMP>.  Otherwise, if <CODE>byacc</CODE> is found, set <CODE>YACC</CODE> to
+ <SAMP>`byacc'</SAMP>.  Otherwise set <CODE>YACC</CODE> to <SAMP>`yacc'</SAMP>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC41" HREF="autoconf_toc.html#TOC41">Generic Program and File Checks</A></H3>
+ 
+ <P>
+ These macros are used to find programs not covered by the "particular"
+ test macros.  If you need to check the behavior of a program as well as
+ find out whether it is present, you have to write your own test for it
+ (see section <A HREF="autoconf.html#SEC68">Writing Tests</A>).  By default, these macros use the environment
+ variable <CODE>PATH</CODE>.  If you need to check for a program that might not
+ be in the user's <CODE>PATH</CODE>, you can pass a modified path to use
+ instead, like this:
+ 
+ 
+ 
+ <PRE>
+ AC_PATH_PROG([INETD], [inetd], [/usr/libexec/inetd],
+              [$PATH:/usr/libexec:/usr/sbin:/usr/etc:etc])
+ </PRE>
+ 
+ <P>
+ You are strongly encouraged to declare the <VAR>variable</VAR> passed to
+ <CODE>AC_CHECK_PROG</CODE> etc. as precious, See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>,
+ <CODE>AC_ARG_VAR</CODE>, for more details.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_PROG</B> <I>(<VAR>variable</VAR>, <VAR>prog-to-check-for</VAR>, <VAR>value-if-found</VAR>, @ovar{value-if-not-found}, @ovar{path}, @ovar{reject})</I>
+ <DD><A NAME="IDX182"></A>
+ <A NAME="IDX183"></A>
+ Check whether program <VAR>prog-to-check-for</VAR> exists in <CODE>PATH</CODE>.  If
+ it is found, set <VAR>variable</VAR> to <VAR>value-if-found</VAR>, otherwise to
+ <VAR>value-if-not-found</VAR>, if given.  Always pass over <VAR>reject</VAR> (an
+ absolute file name) even if it is the first found in the search path; in
+ that case, set <VAR>variable</VAR> using the absolute file name of the
+ <VAR>prog-to-check-for</VAR> found that is not <VAR>reject</VAR>.  If
+ <VAR>variable</VAR> was already set, do nothing.  Calls <CODE>AC_SUBST</CODE> for
+ <VAR>variable</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_PROGS</B> <I>(<VAR>variable</VAR>, <VAR>progs-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX184"></A>
+ <A NAME="IDX185"></A>
+ Check for each program in the whitespace-separated list
+ <VAR>progs-to-check-for</VAR> exists on the <CODE>PATH</CODE>.  If it is found, set
+ <VAR>variable</VAR> to the name of that program.  Otherwise, continue
+ checking the next program in the list.  If none of the programs in the
+ list are found, set <VAR>variable</VAR> to <VAR>value-if-not-found</VAR>; if
+ <VAR>value-if-not-found</VAR> is not specified, the value of <VAR>variable</VAR>
+ is not changed.  Calls <CODE>AC_SUBST</CODE> for <VAR>variable</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_TOOL</B> <I>(<VAR>variable</VAR>, <VAR>prog-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX186"></A>
+ <A NAME="IDX187"></A>
+ Like <CODE>AC_CHECK_PROG</CODE>, but first looks for <VAR>prog-to-check-for</VAR>
+ with a prefix of the host type as determined by
+ <CODE>AC_CANONICAL_HOST</CODE>, followed by a dash (see section <A HREF="autoconf.html#SEC123">Getting the Canonical System Type</A>).
+ For example, if the user runs <SAMP>`configure --host=i386-gnu'</SAMP>, then
+ this call:
+ 
+ <PRE>
+ AC_CHECK_TOOL(RANLIB, ranlib, :)
+ </PRE>
+ 
+ <P>
+ sets <CODE>RANLIB</CODE> to <TT>`i386-gnu-ranlib'</TT> if that program exists in
+ <CODE>PATH</CODE>, or otherwise to <SAMP>`ranlib'</SAMP> if that program exists in
+ <CODE>PATH</CODE>, or to <SAMP>`:'</SAMP> if neither program exists.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_TOOLS</B> <I>(<VAR>variable</VAR>, <VAR>progs-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX188"></A>
+ <A NAME="IDX189"></A>
+ Like <CODE>AC_CHECK_TOOL</CODE>, each of the tools in the list
+ <VAR>progs-to-check-for</VAR> are checked with a prefix of the host type as
+ determined by <CODE>AC_CANONICAL_HOST</CODE>, followed by a dash
+ (see section <A HREF="autoconf.html#SEC123">Getting the Canonical System Type</A>). If none of the tools can be found with a
+ prefix, then the first one without a prefix is used. If a tool is found,
+ set <VAR>variable</VAR> to the name of that program. If none of the tools in
+ the list are found, set <VAR>variable</VAR> to <VAR>value-if-not-found</VAR>; if
+ <VAR>value-if-not-found</VAR> is not specified, the value of <VAR>variable</VAR>
+ is not changed.  Calls <CODE>AC_SUBST</CODE> for <VAR>variable</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PATH_PROG</B> <I>(<VAR>variable</VAR>, <VAR>prog-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX190"></A>
+ <A NAME="IDX191"></A>
+ Like <CODE>AC_CHECK_PROG</CODE>, but set <VAR>variable</VAR> to the entire
+ path of <VAR>prog-to-check-for</VAR> if found.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PATH_PROGS</B> <I>(<VAR>variable</VAR>, <VAR>progs-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX192"></A>
+ <A NAME="IDX193"></A>
+ Like <CODE>AC_CHECK_PROGS</CODE>, but if any of <VAR>progs-to-check-for</VAR>
+ are found, set <VAR>variable</VAR> to the entire path of the program
+ found.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PATH_TOOL</B> <I>(<VAR>variable</VAR>, <VAR>prog-to-check-for</VAR>, @ovar{value-if-not-found}, @ovar{path})</I>
+ <DD><A NAME="IDX194"></A>
+ <A NAME="IDX195"></A>
+ Like <CODE>AC_CHECK_TOOL</CODE>, but set <VAR>variable</VAR> to the entire
+ path of the program if it is found.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC42" HREF="autoconf_toc.html#TOC42">Files</A></H2>
+ <P>
+ <A NAME="IDX196"></A>
+ 
+ 
+ <P>
+ You might also need to check for the existence of files.  Before using
+ these macros, ask yourself whether a run time test might not be a better
+ solution.  Be aware that, like most Autoconf macros, they test a feature
+ of the host machine, and therefore, they die when cross-compiling.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_FILE</B> <I>(<VAR>file</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX197"></A>
+ <A NAME="IDX198"></A>
+ Check whether file <VAR>file</VAR> exists on the native system.  If it is
+ found, execute <VAR>action-if-found</VAR>, otherwise do
+ <VAR>action-if-not-found</VAR>, if given.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_FILES</B> <I>(<VAR>files</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX199"></A>
+ <A NAME="IDX200"></A>
+ Executes <CODE>AC_CHECK_FILE</CODE> once for each file listed in <VAR>files</VAR>.
+ Additionally, defines <SAMP>`HAVE_<VAR>file</VAR>'</SAMP> (see section <A HREF="autoconf.html#SEC37">Standard Symbols</A>)
+ for each file found.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC43" HREF="autoconf_toc.html#TOC43">Library Files</A></H2>
+ <P>
+ <A NAME="IDX201"></A>
+ 
+ 
+ <P>
+ The following macros check for the presence of certain C, C++ or Fortran
+ 77 library archive files.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_LIB</B> <I>(<VAR>library</VAR>, <VAR>function</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})</I>
+ <DD><A NAME="IDX202"></A>
+ <A NAME="IDX203"></A>
+ Depending on the current language(see section <A HREF="autoconf.html#SEC78">Language Choice</A>), try to
+ ensure that the C, C++, or Fortran 77 function <VAR>function</VAR> is
+ available by checking whether a test program can be linked with the
+ library <VAR>library</VAR> to get the function.  <VAR>library</VAR> is the base
+ name of the library; e.g., to check for @option{-lmp}, use <SAMP>`mp'</SAMP> as
+ the <VAR>library</VAR> argument.
+ 
+ 
+ <P>
+ <VAR>action-if-found</VAR> is a list of shell commands to run if the link
+ with the library succeeds; <VAR>action-if-not-found</VAR> is a list of shell
+ commands to run if the link fails.  If <VAR>action-if-found</VAR> is not
+ specified, the default action will prepend @option{-l<VAR>library</VAR>} to
+ <CODE>LIBS</CODE> and define <SAMP>`HAVE_LIB<VAR>library</VAR>'</SAMP> (in all
+ capitals). This macro is intended to support building of <CODE>LIBS</CODE> in
+ a right-to-left (least-dependent to most-dependent) fashion such that
+ library dependencies are satisfied as a natural side-effect of
+ consecutive tests. Some linkers are very sensitive to library ordering
+ so the order in which <CODE>LIBS</CODE> is generated is important to reliable
+ detection of libraries.
+ 
+ 
+ <P>
+ If linking with <VAR>library</VAR> results in unresolved symbols that would
+ be resolved by linking with additional libraries, give those libraries
+ as the <VAR>other-libraries</VAR> argument, separated by spaces:
+ e.g. @option{-lXt -lX11}.  Otherwise, this macro will fail to detect
+ that <VAR>library</VAR> is present, because linking the test program will
+ always fail with unresolved symbols. The <VAR>other-libraries</VAR> argument
+ should be limited to cases where it is desirable to test for one library
+ in the presence of another that is not already in <CODE>LIBS</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SEARCH_LIBS</B> <I>(<VAR>function</VAR>, <VAR>search-libs</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})</I>
+ <DD><A NAME="IDX204"></A>
+ <A NAME="IDX205"></A>
+ Search for a library defining <VAR>function</VAR> if it's not already
+ available.  This equates to calling <CODE>AC_TRY_LINK_FUNC</CODE> first
+ with no libraries, then for each library listed in <VAR>search-libs</VAR>.
+ 
+ 
+ <P>
+ Add @option{-l<VAR>library</VAR>} to <CODE>LIBS</CODE> for the first library found
+ to contain <VAR>function</VAR>, and run <VAR>action-if-found</VAR>.  If the
+ function is not found, run <VAR>action-if-not-found</VAR>.
+ 
+ 
+ <P>
+ If linking with <VAR>library</VAR> results in unresolved symbols that would
+ be resolved by linking with additional libraries, give those libraries
+ as the <VAR>other-libraries</VAR> argument, separated by spaces:
+ e.g. @option{-lXt -lX11}.  Otherwise, this macro will fail to detect
+ that <VAR>function</VAR> is present, because linking the test program will
+ always fail with unresolved symbols.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC44" HREF="autoconf_toc.html#TOC44">Library Functions</A></H2>
+ 
+ <P>
+ The following macros check for particular C library functions.
+ If there is no macro specifically defined to check for a function you need,
+ and you don't need to check for any special properties of
+ it, then you can use one of the general function-check macros.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC45" HREF="autoconf_toc.html#TOC45">Portability of C Functions</A></H3>
+ 
+ <P>
+ Most usual functions can either be missing, or be buggy, or be limited
+ on some architectures.  This section tries to make an inventory of these
+ portability issues.  By definition, this list will always require
+ additions.  Please help us keeping it as complete as possible.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>snprintf</CODE>
+ <DD>
+ <A NAME="IDX206"></A>
+ <A NAME="IDX207"></A>
+ The ISO C99 standard says that if the output array isn't big enough and
+ if no other errors occur, <CODE>snprintf</CODE> and <CODE>vsnprintf</CODE> truncate
+ the output and return the number of bytes that ought to have been
+ produced.  Some older systems return the truncated length (e.g., GNU C
+ Library 2.0.x or IRIX 6.5), some a negative value (e.g., earlier GNU C
+ Library versions), and some the buffer length without truncation (e.g.,
+ 32-bit Solaris 7).  Also, some buggy older systems ignore the length and
+ overrun the buffer (e.g., 64-bit Solaris 7).
+ 
+ <DT><CODE>sprintf</CODE>
+ <DD>
+ <A NAME="IDX208"></A>
+ <A NAME="IDX209"></A>
+ The ISO C standard says <CODE>sprintf</CODE> and <CODE>vsprintf</CODE> return the
+ number of bytes written, but on some old systems (SunOS 4 for
+ instance) they return the buffer pointer instead.
+ 
+ <DT><CODE>sscanf</CODE>
+ <DD>
+ <A NAME="IDX210"></A>
+ On various old systems, e.g. HP-UX 9, <CODE>sscanf</CODE> requires that its
+ input string is writable (though it doesn't actually change it).  This
+ can be a problem when using @command{gcc} since it normally puts
+ constant strings in read-only memory
+ (see section `Incompatibilities' in <CITE>Using and Porting the GNU Compiler Collection</CITE>).  Apparently in some cases even
+ having format strings read-only can be a problem.
+ 
+ <DT><CODE>strnlen</CODE>
+ <DD>
+ <A NAME="IDX211"></A>
+ AIX 4.3 provides a broken version which produces funny results:
+ 
+ 
+ <PRE>
+ strnlen ("foobar", 0) = 0
+ strnlen ("foobar", 1) = 3
+ strnlen ("foobar", 2) = 2
+ strnlen ("foobar", 3) = 1
+ strnlen ("foobar", 4) = 0
+ strnlen ("foobar", 5) = 6
+ strnlen ("foobar", 6) = 6
+ strnlen ("foobar", 7) = 6
+ strnlen ("foobar", 8) = 6
+ strnlen ("foobar", 9) = 6
+ </PRE>
+ 
+ <DT><CODE>unlink</CODE>
+ <DD>
+ <A NAME="IDX212"></A>
+ The POSIX spec says that <CODE>unlink</CODE> causes the given files to be
+ removed only after there are no more open file handles for it.  Not all
+ OS's support this behaviour though.  So even on systems that provide
+ <CODE>unlink</CODE>, you cannot portably assume it is OK to call it on files
+ that are open.  For example, on Windows 9x and ME, such a call would fail;
+ on DOS it could even lead to file system corruption, as the file might end
+ up being written to after the OS has removed it.
+ 
+ <DT><CODE>va_copy</CODE>
+ <DD>
+ <A NAME="IDX213"></A>
+ The ISO C99 standard provides <CODE>va_copy</CODE> for copying
+ <CODE>va_list</CODE> variables.  It may be available in older environments
+ too, though possibly as <CODE>__va_copy</CODE> (eg. @command{gcc} in strict
+ C89 mode).  These can be tested with <CODE>#ifdef</CODE>.  A fallback to
+ <CODE>memcpy (&#38;dst, &#38;src, sizeof(va_list))</CODE> will give maximum
+ portability.
+ 
+ <DT><CODE>va_list</CODE>
+ <DD>
+ <A NAME="IDX214"></A>
+ <CODE>va_list</CODE> is not necessarily just a pointer.  It can be a
+ <CODE>struct</CODE> (eg. @command{gcc} on Alpha), which means <CODE>NULL</CODE> is
+ not portable.  Or it can be an array (eg. @command{gcc} in some
+ PowerPC configurations), which means as a function parameter it can be
+ effectively call-by-reference and library routines might modify the
+ value back in the caller (eg. <CODE>vsnprintf</CODE> in the GNU C Library
+ 2.1).
+ 
+ <DT>Signed <CODE>&#62;&#62;</CODE>
+ <DD>
+ Normally the C <CODE>&#62;&#62;</CODE> right shift of a signed type replicates the
+ high bit, giving a so-called "arithmetic" shift.  But care should be
+ taken since the ISO C standard doesn't require that behaviour.  On those
+ few processors without a native arithmetic shift (for instance Cray
+ vector systems) zero bits may be shifted in, the same as a shift of an
+ unsigned type.
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC46" HREF="autoconf_toc.html#TOC46">Particular Function Checks</A></H3>
+ <P>
+ <A NAME="IDX215"></A>
+ 
+ 
+ <P>
+ These macros check for particular C functions--whether they exist, and
+ in some cases how they respond when given certain arguments.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_ALLOCA</B>
+ <DD><A NAME="IDX216"></A>
+ <A NAME="IDX217"></A>
+ <A NAME="IDX218"></A>
+ <A NAME="IDX219"></A>
+ <A NAME="IDX220"></A>
+ <A NAME="IDX221"></A>
+ Check how to get <CODE>alloca</CODE>.  Tries to get a builtin version by
+ checking for <TT>`alloca.h'</TT> or the predefined C preprocessor macros
+ <CODE>__GNUC__</CODE> and <CODE>_AIX</CODE>.  If this macro finds <TT>`alloca.h'</TT>,
+ it defines <CODE>HAVE_ALLOCA_H</CODE>.
+ 
+ 
+ <P>
+ If those attempts fail, it looks for the function in the standard C
+ library.  If any of those methods succeed, it defines
+ <CODE>HAVE_ALLOCA</CODE>.  Otherwise, it sets the output variable
+ <CODE>ALLOCA</CODE> to <SAMP>`alloca.o'</SAMP> and defines <CODE>C_ALLOCA</CODE> (so
+ programs can periodically call <SAMP>`alloca(0)'</SAMP> to garbage collect).
+ This variable is separate from <CODE>LIBOBJS</CODE> so multiple programs can
+ share the value of <CODE>ALLOCA</CODE> without needing to create an actual
+ library, in case only some of them use the code in <CODE>LIBOBJS</CODE>.
+ 
+ 
+ <P>
+ This macro does not try to get <CODE>alloca</CODE> from the System V R3
+ <TT>`libPW'</TT> or the System V R4 <TT>`libucb'</TT> because those libraries
+ contain some incompatible functions that cause trouble.  Some versions
+ do not even contain <CODE>alloca</CODE> or contain a buggy version.  If you
+ still want to use their <CODE>alloca</CODE>, use <CODE>ar</CODE> to extract
+ <TT>`alloca.o'</TT> from them instead of compiling <TT>`alloca.c'</TT>.
+ 
+ 
+ <P>
+ Source files that use <CODE>alloca</CODE> should start with a piece of code
+ like the following, to declare it properly.  In some versions of AIX,
+ the declaration of <CODE>alloca</CODE> must precede everything else except for
+ comments and preprocessor directives.  The <CODE>#pragma</CODE> directive is
+ indented so that pre-ANSI C compilers will ignore it, rather than
+ choke on it.
+ 
+ 
+ 
+ <PRE>
+ /* AIX requires this to be the first thing in the file.  */
+ #ifndef __GNUC__
+ # if HAVE_ALLOCA_H
+ #  include &#60;alloca.h&#62;
+ # else
+ #  ifdef _AIX
+  #pragma alloca
+ #  else
+ #   ifndef alloca /* predefined by HP cc +Olibcalls */
+ char *alloca ();
+ #   endif
+ #  endif
+ # endif
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_CHOWN</B>
+ <DD><A NAME="IDX222"></A>
+ <A NAME="IDX223"></A>
+ <A NAME="IDX224"></A>
+ If the <CODE>chown</CODE> function is available and works (in particular, it
+ should accept @option{-1} for <CODE>uid</CODE> and <CODE>gid</CODE>), define
+ <CODE>HAVE_CHOWN</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_CLOSEDIR_VOID</B>
+ <DD><A NAME="IDX225"></A>
+ <A NAME="IDX226"></A>
+ <A NAME="IDX227"></A>
+ <A NAME="IDX228"></A>
+ If the <CODE>closedir</CODE> function does not return a meaningful value,
+ define <CODE>CLOSEDIR_VOID</CODE>.  Otherwise, callers ought to check its
+ return value for an error indicator.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_ERROR_AT_LINE</B>
+ <DD><A NAME="IDX229"></A>
+ <A NAME="IDX230"></A>
+ <A NAME="IDX231"></A>
+ If the <CODE>error_at_line</CODE> function is not found, require an
+ <CODE>AC_LIBOBJ</CODE> replacement of <SAMP>`error'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_FNMATCH</B>
+ <DD><A NAME="IDX232"></A>
+ <A NAME="IDX233"></A>
+ <A NAME="IDX234"></A>
+ If the <CODE>fnmatch</CODE> function is available and works (unlike the one on
+ Solaris 2.4), define <CODE>HAVE_FNMATCH</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_FORK</B>
+ <DD><A NAME="IDX235"></A>
+ <A NAME="IDX236"></A>
+ <A NAME="IDX237"></A>
+ <A NAME="IDX238"></A>
+ <A NAME="IDX239"></A>
+ <A NAME="IDX240"></A>
+ <A NAME="IDX241"></A>
+ <A NAME="IDX242"></A>
+ This macro checks for the <CODE>fork</CODE> and <CODE>vfork</CODE> functions. If a
+ working <CODE>fork</CODE> is found, define <CODE>HAVE_WORKING_FORK</CODE>. This macro
+ checks whether <CODE>fork</CODE> is just a stub by trying to run it.
+ 
+ 
+ <P>
+ If <TT>`vfork.h'</TT> is found, define <CODE>HAVE_VFORK_H</CODE>. If a working
+ <CODE>vfork</CODE> is found, define <CODE>HAVE_WORKING_VFORK</CODE>. Otherwise,
+ define <CODE>vfork</CODE> to be <CODE>fork</CODE> for backward compatibility with
+ previous versions of @command{autoconf}. This macro checks for several known
+ errors in implementations of <CODE>vfork</CODE> and considers the system to not
+ have a working <CODE>vfork</CODE> if it detects any of them. It is not considered
+ to be an implementation error if a child's invocation of <CODE>signal</CODE>
+ modifies the parent's signal handler, since child processes rarely change
+ their signal handlers.
+ 
+ 
+ <P>
+ Since this macro defines <CODE>vfork</CODE> only for backward compatibility with
+ previous versions of @command{autoconf} you're encouraged to define it
+ yourself in new code:
+ 
+ <PRE>
+ #if !HAVE_WORKING_VFORK
+ # define vfork fork
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_FSEEKO</B>
+ <DD><A NAME="IDX243"></A>
+ <A NAME="IDX244"></A>
+ <A NAME="IDX245"></A>
+ <A NAME="IDX246"></A>
+ If the <CODE>fseeko</CODE> function is available, define <CODE>HAVE_FSEEKO</CODE>.
+ Define <CODE>_LARGEFILE_SOURCE</CODE> if necessary.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_GETGROUPS</B>
+ <DD><A NAME="IDX247"></A>
+ <A NAME="IDX248"></A>
+ <A NAME="IDX249"></A>
+ <A NAME="IDX250"></A>
+ If the <CODE>getgroups</CODE> function is available and works (unlike on
+ Ultrix 4.3, where <SAMP>`getgroups (0, 0)'</SAMP> always fails), define
+ <CODE>HAVE_GETGROUPS</CODE>.  Set <CODE>GETGROUPS_LIBS</CODE> to any libraries
+ needed to get that function.  This macro runs <CODE>AC_TYPE_GETGROUPS</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_GETLOADAVG</B>
+ <DD><A NAME="IDX251"></A>
+ <A NAME="IDX252"></A>
+ <A NAME="IDX253"></A>
+ <A NAME="IDX254"></A>
+ <A NAME="IDX255"></A>
+ <A NAME="IDX256"></A>
+ <A NAME="IDX257"></A>
+ <A NAME="IDX258"></A>
+ <A NAME="IDX259"></A>
+ <A NAME="IDX260"></A>
+ <A NAME="IDX261"></A>
+ <A NAME="IDX262"></A>
+ <A NAME="IDX263"></A>
+ <A NAME="IDX264"></A>
+ <A NAME="IDX265"></A>
+ <A NAME="IDX266"></A>
+ Check how to get the system load averages.  If the system has the
+ <CODE>getloadavg</CODE> function, define <CODE>HAVE_GETLOADAVG</CODE>, and set
+ <CODE>GETLOADAVG_LIBS</CODE> to any libraries needed to get that function.
+ Also add <CODE>GETLOADAVG_LIBS</CODE> to <CODE>LIBS</CODE>.
+ 
+ 
+ <P>
+ Otherwise, require an <CODE>AC_LIBOBJ</CODE> replacement (<TT>`getloadavg.c'</TT>)
+ of <SAMP>`getloadavg'</SAMP>, and possibly define several other C preprocessor
+ macros and output variables:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Define <CODE>C_GETLOADAVG</CODE>.
+ 
+ <LI>
+ 
+ Define <CODE>SVR4</CODE>, <CODE>DGUX</CODE>, <CODE>UMAX</CODE>, or <CODE>UMAX4_3</CODE> if on
+ those systems.
+ 
+ <LI>
+ 
+ If <TT>`nlist.h'</TT> is found, define <CODE>NLIST_STRUCT</CODE>.
+ 
+ <LI>
+ 
+ If <SAMP>`struct nlist'</SAMP> has an <SAMP>`n_un.n_name'</SAMP> member, define
+ <CODE>HAVE_STRUCT_NLIST_N_UN_N_NAME</CODE>.  The obsolete symbol
+ <CODE>NLIST_NAME_UNION</CODE> is still defined, but do not depend upon it.
+ 
+ <LI>
+ 
+ Programs may need to be installed setgid (or setuid) for
+ <CODE>getloadavg</CODE> to work.  In this case, define
+ <CODE>GETLOADAVG_PRIVILEGED</CODE>, set the output variable <CODE>NEED_SETGID</CODE>
+ to <SAMP>`true'</SAMP> (and otherwise to <SAMP>`false'</SAMP>), and set
+ <CODE>KMEM_GROUP</CODE> to the name of the group that should own the installed
+ program.
+ </OL>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_GETMNTENT</B>
+ <DD><A NAME="IDX267"></A>
+ <A NAME="IDX268"></A>
+ <A NAME="IDX269"></A>
+ <A NAME="IDX270"></A>
+ Check for <CODE>getmntent</CODE> in the <TT>`sun'</TT>, <TT>`seq'</TT>, and <TT>`gen'</TT>
+ libraries, for Irix 4, PTX, and Unixware, respectively.  Then, if
+ <CODE>getmntent</CODE> is available, define <CODE>HAVE_GETMNTENT</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_GETPGRP</B>
+ <DD><A NAME="IDX271"></A>
+ <A NAME="IDX272"></A>
+ <A NAME="IDX273"></A>
+ <A NAME="IDX274"></A>
+ <A NAME="IDX275"></A>
+ Define <CODE>GETPGRP_VOID</CODE> if it is an error to pass 0 to
+ <CODE>getpgrp</CODE>; this is the POSIX.1 behavior.  On older BSD
+ systems, you must pass 0 to <CODE>getpgrp</CODE>, as it takes an argument and
+ behaves like POSIX.1's <CODE>getpgid</CODE>.
+ 
+ 
+ 
+ <PRE>
+ #if GETPGRP_VOID
+   pid = getpgrp ();
+ #else
+   pid = getpgrp (0);
+ #endif
+ </PRE>
+ 
+ <P>
+ This macro does not check whether
+ <CODE>getpgrp</CODE> exists at all; if you need to work in that situation,
+ first call <CODE>AC_CHECK_FUNC</CODE> for <CODE>getpgrp</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK</B>
+ <DD><A NAME="IDX276"></A>
+ <A NAME="IDX277"></A>
+ <A NAME="IDX278"></A>
+ <A NAME="IDX279"></A>
+ If <TT>`link'</TT> is a symbolic link, then <CODE>lstat</CODE> should treat
+ <TT>`link/'</TT> the same as <TT>`link/.'</TT>.  However, many older
+ <CODE>lstat</CODE> implementations incorrectly ignore trailing slashes.
+ 
+ 
+ <P>
+ It is safe to assume that if <CODE>lstat</CODE> incorrectly ignores
+ trailing slashes, then other symbolic-link-aware functions like
+ <CODE>unlink</CODE> and <CODE>unlink</CODE> also incorrectly ignore trailing slashes.
+ 
+ 
+ <P>
+ If <CODE>lstat</CODE> behaves properly, define
+ <CODE>LSTAT_FOLLOWS_SLASHED_SYMLINK</CODE>, otherwise require an
+ <CODE>AC_LIBOBJ</CODE> replacement of <CODE>lstat</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_MALLOC</B>
+ <DD><A NAME="IDX280"></A>
+ <A NAME="IDX281"></A>
+ <A NAME="IDX282"></A>
+ If the <CODE>malloc</CODE> works correctly (<SAMP>`malloc (0)'</SAMP> returns a valid
+ pointer), define <CODE>HAVE_MALLOC</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_MEMCMP</B>
+ <DD><A NAME="IDX283"></A>
+ <A NAME="IDX284"></A>
+ <A NAME="IDX285"></A>
+ <A NAME="IDX286"></A>
+ If the <CODE>memcmp</CODE> function is not available, or does not work on
+ 8-bit data (like the one on SunOS 4.1.3), or fails when comparing 16
+ bytes or more and with at least one buffer not starting on a 4-byte
+ boundary (such as the one on NeXT x86 OpenStep), require an
+ <CODE>AC_LIBOBJ</CODE> replacement for <SAMP>`memcmp'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_MKTIME</B>
+ <DD><A NAME="IDX287"></A>
+ <A NAME="IDX288"></A>
+ <A NAME="IDX289"></A>
+ <A NAME="IDX290"></A>
+ If the <CODE>mktime</CODE> function is not available, or does not work
+ correctly, require an <CODE>AC_LIBOBJ</CODE> replacement for <SAMP>`mktime'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_MMAP</B>
+ <DD><A NAME="IDX291"></A>
+ <A NAME="IDX292"></A>
+ <A NAME="IDX293"></A>
+ <A NAME="IDX294"></A>
+ If the <CODE>mmap</CODE> function exists and works correctly, define
+ <CODE>HAVE_MMAP</CODE>.  Only checks private fixed mapping of already-mapped
+ memory.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_OBSTACK</B>
+ <DD><A NAME="IDX295"></A>
+ <A NAME="IDX296"></A>
+ <A NAME="IDX297"></A>
+ <A NAME="IDX298"></A>
+ If the obstacks are found, define <CODE>HAVE_OBSTACK</CODE>, else require an
+ <CODE>AC_LIBOBJ</CODE> replacement for <SAMP>`obstack'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_SELECT_ARGTYPES</B>
+ <DD><A NAME="IDX299"></A>
+ <A NAME="IDX300"></A>
+ <A NAME="IDX301"></A>
+ <A NAME="IDX302"></A>
+ <A NAME="IDX303"></A>
+ <A NAME="IDX304"></A>
+ Determines the correct type to be passed for each of the
+ <CODE>select</CODE> function's arguments, and defines those types
+ in <CODE>SELECT_TYPE_ARG1</CODE>, <CODE>SELECT_TYPE_ARG234</CODE>, and
+ <CODE>SELECT_TYPE_ARG5</CODE> respectively.  <CODE>SELECT_TYPE_ARG1</CODE> defaults
+ to <SAMP>`int'</SAMP>, <CODE>SELECT_TYPE_ARG234</CODE> defaults to <SAMP>`int *'</SAMP>,
+ and <CODE>SELECT_TYPE_ARG5</CODE> defaults to <SAMP>`struct timeval *'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_SETPGRP</B>
+ <DD><A NAME="IDX305"></A>
+ <A NAME="IDX306"></A>
+ <A NAME="IDX307"></A>
+ <A NAME="IDX308"></A>
+ If <CODE>setpgrp</CODE> takes no argument (the POSIX.1 version), define
+ <CODE>SETPGRP_VOID</CODE>.  Otherwise, it is the BSD version, which takes
+ two process IDs as arguments.  This macro does not check whether
+ <CODE>setpgrp</CODE> exists at all; if you need to work in that situation,
+ first call <CODE>AC_CHECK_FUNC</CODE> for <CODE>setpgrp</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STAT</B>
+ <DD><A NAME="IDX309"></A>
+ <DT><U>Macro:</U> <B>AC_FUNC_LSTAT</B>
+ <DD><A NAME="IDX310"></A>
+ <A NAME="IDX311"></A>
+ <A NAME="IDX312"></A>
+ <A NAME="IDX313"></A>
+ <A NAME="IDX314"></A>
+ <A NAME="IDX315"></A>
+ <A NAME="IDX316"></A>
+ Determine whether <CODE>stat</CODE> or <CODE>lstat</CODE> have the bug that it
+ succeeds when given the zero-length file name argument.  The <CODE>stat</CODE>
+ and <CODE>lstat</CODE> from SunOS 4.1.4 and the Hurd (as of 1998-11-01) do
+ this.
+ 
+ 
+ <P>
+ If it does, then define <CODE>HAVE_STAT_EMPTY_STRING_BUG</CODE> (or
+ <CODE>HAVE_LSTAT_EMPTY_STRING_BUG</CODE>) and ask for an <CODE>AC_LIBOBJ</CODE>
+ replacement of it.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_SETVBUF_REVERSED</B>
+ <DD><A NAME="IDX317"></A>
+ <A NAME="IDX318"></A>
+ <A NAME="IDX319"></A>
+ <A NAME="IDX320"></A>
+ If <CODE>setvbuf</CODE> takes the buffering type as its second argument and
+ the buffer pointer as the third, instead of the other way around, define
+ <CODE>SETVBUF_REVERSED</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STRCOLL</B>
+ <DD><A NAME="IDX321"></A>
+ <A NAME="IDX322"></A>
+ <A NAME="IDX323"></A>
+ <A NAME="IDX324"></A>
+ If the <CODE>strcoll</CODE> function exists and works correctly, define
+ <CODE>HAVE_STRCOLL</CODE>.  This does a bit more than
+ <SAMP>`AC_CHECK_FUNCS(strcoll)'</SAMP>, because some systems have incorrect
+ definitions of <CODE>strcoll</CODE> that should not be used.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STRTOD</B>
+ <DD><A NAME="IDX325"></A>
+ <A NAME="IDX326"></A>
+ <A NAME="IDX327"></A>
+ <A NAME="IDX328"></A>
+ If the <CODE>strtod</CODE> function does not exist or doesn't work correctly,
+ ask for an <CODE>AC_LIBOBJ</CODE> replacement of <SAMP>`strtod'</SAMP>.  In this case,
+ because <TT>`strtod.c'</TT> is likely to need <SAMP>`pow'</SAMP>, set the output
+ variable <CODE>POW_LIB</CODE> to the extra library needed.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STRERROR_R</B>
+ <DD><A NAME="IDX329"></A>
+ <A NAME="IDX330"></A>
+ <A NAME="IDX331"></A>
+ <A NAME="IDX332"></A>
+ <A NAME="IDX333"></A>
+ <A NAME="IDX334"></A>
+ If <CODE>strerror_r</CODE> is available, define <CODE>HAVE_STRERROR_R</CODE>, and if
+ it is declared, define <CODE>HAVE_DECL_STRERROR_R</CODE>.  If it returns a
+ <CODE>char *</CODE> message, define <CODE>STRERROR_R_CHAR_P</CODE>; otherwise it
+ returns an <CODE>int</CODE> error number.  The Thread-Safe Functions option of
+ POSIX-200X requires <CODE>strerror_r</CODE> to return <CODE>int</CODE>, but
+ many systems (including, for example, version 2.2.4 of the GNU C
+ Library) return a <CODE>char *</CODE> value that is not necessarily equal to
+ the buffer argument.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STRFTIME</B>
+ <DD><A NAME="IDX335"></A>
+ <A NAME="IDX336"></A>
+ <A NAME="IDX337"></A>
+ <A NAME="IDX338"></A>
+ Check for <CODE>strftime</CODE> in the <TT>`intl'</TT> library, for SCO UNIX.
+ Then, if <CODE>strftime</CODE> is available, define <CODE>HAVE_STRFTIME</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_STRNLEN</B>
+ <DD><A NAME="IDX339"></A>
+ <A NAME="IDX340"></A>
+ <A NAME="IDX341"></A>
+ <A NAME="IDX342"></A>
+ Check for a working <CODE>strnlen</CODE>, and ask for its replacement.  Some
+ architectures are know to provide broken versions of <CODE>strnlen</CODE>, such
+ as AIX 4.3.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_UTIME_NULL</B>
+ <DD><A NAME="IDX343"></A>
+ <A NAME="IDX344"></A>
+ <A NAME="IDX345"></A>
+ <A NAME="IDX346"></A>
+ If <SAMP>`utime(<VAR>file</VAR>, NULL)'</SAMP> sets <VAR>file</VAR>'s timestamp to
+ the present, define <CODE>HAVE_UTIME_NULL</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_VPRINTF</B>
+ <DD><A NAME="IDX347"></A>
+ <A NAME="IDX348"></A>
+ <A NAME="IDX349"></A>
+ <A NAME="IDX350"></A>
+ <A NAME="IDX351"></A>
+ If <CODE>vprintf</CODE> is found, define <CODE>HAVE_VPRINTF</CODE>.  Otherwise, if
+ <CODE>_doprnt</CODE> is found, define <CODE>HAVE_DOPRNT</CODE>.  (If <CODE>vprintf</CODE>
+ is available, you may assume that <CODE>vfprintf</CODE> and <CODE>vsprintf</CODE>
+ are also available.)
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC47" HREF="autoconf_toc.html#TOC47">Generic Function Checks</A></H3>
+ 
+ <P>
+ These macros are used to find functions not covered by the "particular"
+ test macros.  If the functions might be in libraries other than the
+ default C library, first call <CODE>AC_CHECK_LIB</CODE> for those libraries.
+ If you need to check the behavior of a function as well as find out
+ whether it is present, you have to write your own test for
+ it (see section <A HREF="autoconf.html#SEC68">Writing Tests</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_FUNC</B> <I>(<VAR>function</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX352"></A>
+ <A NAME="IDX353"></A>
+ If C function <VAR>function</VAR> is available, run shell commands
+ <VAR>action-if-found</VAR>, otherwise <VAR>action-if-not-found</VAR>.  If you just
+ want to define a symbol if the function is available, consider using
+ <CODE>AC_CHECK_FUNCS</CODE> instead.  This macro checks for functions with C
+ linkage even when <CODE>AC_LANG(C++)</CODE> has been called, since C is more
+ standardized than C++.  (see section <A HREF="autoconf.html#SEC78">Language Choice</A>, for more information
+ about selecting the language for checks.)
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_FUNCS</B> <I>(<VAR>function</VAR>..., @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX354"></A>
+ <A NAME="IDX355"></A>
+ <A NAME="IDX356"></A>
+ For each <VAR>function</VAR> in the whitespace-separated argument list,
+ define <CODE>HAVE_<VAR>function</VAR></CODE> (in all capitals) if it is available.
+ If <VAR>action-if-found</VAR> is given, it is additional shell code to
+ execute when one of the functions is found.  You can give it a value of
+ <SAMP>`break'</SAMP> to break out of the loop on the first match.  If
+ <VAR>action-if-not-found</VAR> is given, it is executed when one of the
+ functions is not found.
+ </DL>
+ 
+ 
+ <P>
+ Autoconf follows a philosophy that was formed over the years by those
+ who have struggled for portability: isolate the portability issues in
+ specific files, and then program as if you were in a POSIX
+ environment.  Some functions may be missing or unfixable, and your
+ package must be ready to replace them.
+ 
+ 
+ <P>
+ Use the first three of the following macros to specify a function to be
+ replaced, and the last one (<CODE>AC_REPLACE_FUNCS</CODE>) to check for and
+ replace the function if needed.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LIBOBJ</B> <I>(<VAR>function</VAR>)</I>
+ <DD><A NAME="IDX357"></A>
+ <A NAME="IDX358"></A>
+ <A NAME="IDX359"></A>
+ Specify that <SAMP>`<VAR>function</VAR>.c'</SAMP> must be included in the executables
+ to replace a missing or broken implementation of <VAR>function</VAR>.
+ 
+ 
+ <P>
+ Technically, it adds <SAMP>`<VAR>function</VAR>.$ac_objext'</SAMP> to the output
+ variable <CODE>LIBOBJS</CODE> and calls <CODE>AC_LIBSOURCE</CODE> for
+ <SAMP>`<VAR>function</VAR>.c'</SAMP>.  You should not directly change <CODE>LIBOBJS</CODE>,
+ since this is not traceable.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LIBSOURCE</B> <I>(<VAR>file</VAR>)</I>
+ <DD><A NAME="IDX360"></A>
+ <A NAME="IDX361"></A>
+ Specify that <VAR>file</VAR> might be needed to compile the project.  If you
+ need to know what files might be needed by a <TT>`configure.ac'</TT>, you
+ should trace <CODE>AC_LIBSOURCE</CODE>.  <VAR>file</VAR> must be a literal.
+ 
+ 
+ <P>
+ This macro is called automatically from <CODE>AC_LIBOBJ</CODE>, but you must
+ call it explicitly if you pass a shell variable to <CODE>AC_LIBOBJ</CODE>.  In
+ that case, since shell variables cannot be traced statically, you must
+ pass to <CODE>AC_LIBSOURCE</CODE> any possible files that the shell variable
+ might cause <CODE>AC_LIBOBJ</CODE> to need.  For example, if you want to pass
+ a variable <CODE>$foo_or_bar</CODE> to <CODE>AC_LIBOBJ</CODE> that holds either
+ <CODE>"foo"</CODE> or <CODE>"bar"</CODE>, you should do:
+ 
+ 
+ 
+ <PRE>
+ AC_LIBSOURCE(foo.c)
+ AC_LIBSOURCE(bar.c)
+ AC_LIBOBJ($foo_or_bar)
+ </PRE>
+ 
+ <P>
+ There is usually a way to avoid this, however, and you are encouraged to
+ simply call <CODE>AC_LIBOBJ</CODE> with literal arguments.
+ 
+ 
+ <P>
+ Note that this macro replaces the obsolete <CODE>AC_LIBOBJ_DECL</CODE>, with
+ slightly different semantics: the old macro took the function name,
+ e.g. <CODE>foo</CODE>, as its argument rather than the file name.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LIBSOURCES</B> <I>(<VAR>files</VAR>)</I>
+ <DD><A NAME="IDX362"></A>
+ <A NAME="IDX363"></A>
+ Like <CODE>AC_LIBSOURCE</CODE>, but accepts one or more <VAR>files</VAR> in a
+ comma-separated M4 list.  Thus, the above example might be rewritten:
+ 
+ 
+ 
+ <PRE>
+ AC_LIBSOURCES([foo.c, bar.c])
+ AC_LIBOBJ($foo_or_bar)
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_REPLACE_FUNCS</B> <I>(<VAR>function</VAR>...)</I>
+ <DD><A NAME="IDX364"></A>
+ <A NAME="IDX365"></A>
+ <A NAME="IDX366"></A>
+ Like <CODE>AC_CHECK_FUNCS</CODE>, but uses <SAMP>`AC_LIBOBJ(<VAR>function</VAR>)'</SAMP> as
+ <VAR>action-if-not-found</VAR>.  You can declare your replacement function by
+ enclosing the prototype in <SAMP>`#if !HAVE_<VAR>function</VAR>'</SAMP>.  If the
+ system has the function, it probably declares it in a header file you
+ should be including, so you shouldn't redeclare it lest your declaration
+ conflict.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC48" HREF="autoconf_toc.html#TOC48">Header Files</A></H2>
+ <P>
+ <A NAME="IDX367"></A>
+ 
+ 
+ <P>
+ The following macros check for the presence of certain C header files.
+ If there is no macro specifically defined to check for a header file you need,
+ and you don't need to check for any special properties of
+ it, then you can use one of the general header-file check macros.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC49" HREF="autoconf_toc.html#TOC49">Particular Header Checks</A></H3>
+ 
+ <P>
+ These macros check for particular system header files--whether they
+ exist, and in some cases whether they declare certain symbols.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_DIRENT</B>
+ <DD><A NAME="IDX368"></A>
+ <A NAME="IDX369"></A>
+ <A NAME="IDX370"></A>
+ <A NAME="IDX371"></A>
+ <A NAME="IDX372"></A>
+ <A NAME="IDX373"></A>
+ Check for the following header files.  For the first one that is
+ found and defines <SAMP>`DIR'</SAMP>, define the listed C preprocessor macro:
+ 
+ 
+ <LI><TT>`dirent.h'</TT>   </TD><TD> <CODE>HAVE_DIRENT_H</CODE>
+ 
+ <LI><TT>`sys/ndir.h'</TT> </TD><TD> <CODE>HAVE_SYS_NDIR_H</CODE>
+ 
+ <LI><TT>`sys/dir.h'</TT>  </TD><TD> <CODE>HAVE_SYS_DIR_H</CODE>
+ 
+ <LI><TT>`ndir.h'</TT>     </TD><TD> <CODE>HAVE_NDIR_H</CODE>
+ 
+ The directory-library declarations in your source code should look
+ something like the following:
+ 
+ 
+ <PRE>
+ #if HAVE_DIRENT_H
+ # include &#60;dirent.h&#62;
+ # define NAMLEN(dirent) strlen((dirent)-&#62;d_name)
+ #else
+ # define dirent direct
+ # define NAMLEN(dirent) (dirent)-&#62;d_namlen
+ # if HAVE_SYS_NDIR_H
+ #  include &#60;sys/ndir.h&#62;
+ # endif
+ # if HAVE_SYS_DIR_H
+ #  include &#60;sys/dir.h&#62;
+ # endif
+ # if HAVE_NDIR_H
+ #  include &#60;ndir.h&#62;
+ # endif
+ #endif
+ </PRE>
+ 
+ Using the above declarations, the program would declare variables to be
+ of type <CODE>struct dirent</CODE>, not <CODE>struct direct</CODE>, and would access
+ the length of a directory entry name by passing a pointer to a
+ <CODE>struct dirent</CODE> to the <CODE>NAMLEN</CODE> macro.
+ 
+ This macro also checks for the SCO Xenix <TT>`dir'</TT> and <TT>`x'</TT> libraries.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_MAJOR</B>
+ <DD><A NAME="IDX374"></A>
+ <A NAME="IDX375"></A>
+ <A NAME="IDX376"></A>
+ <A NAME="IDX377"></A>
+ If <TT>`sys/types.h'</TT> does not define <CODE>major</CODE>, <CODE>minor</CODE>, and
+ <CODE>makedev</CODE>, but <TT>`sys/mkdev.h'</TT> does, define
+ <CODE>MAJOR_IN_MKDEV</CODE>; otherwise, if <TT>`sys/sysmacros.h'</TT> does, define
+ <CODE>MAJOR_IN_SYSMACROS</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_STAT</B>
+ <DD><A NAME="IDX378"></A>
+ <A NAME="IDX379"></A>
+ <A NAME="IDX380"></A>
+ If the macros <CODE>S_ISDIR</CODE>, <CODE>S_ISREG</CODE> et al. defined in
+ <TT>`sys/stat.h'</TT> do not work properly (returning false positives),
+ define <CODE>STAT_MACROS_BROKEN</CODE>.  This is the case on Tektronix UTekV,
+ Amdahl UTS and Motorola System V/88.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_STDC</B>
+ <DD><A NAME="IDX381"></A>
+ <A NAME="IDX382"></A>
+ <A NAME="IDX383"></A>
+ Define <CODE>STDC_HEADERS</CODE> if the system has ANSI C header files.
+ Specifically, this macro checks for <TT>`stdlib.h'</TT>, <TT>`stdarg.h'</TT>,
+ <TT>`string.h'</TT>, and <TT>`float.h'</TT>; if the system has those, it
+ probably has the rest of the ANSI C header files.  This macro also
+ checks whether <TT>`string.h'</TT> declares <CODE>memchr</CODE> (and thus
+ presumably the other <CODE>mem</CODE> functions), whether <TT>`stdlib.h'</TT>
+ declare <CODE>free</CODE> (and thus presumably <CODE>malloc</CODE> and other related
+ functions), and whether the <TT>`ctype.h'</TT> macros work on characters
+ with the high bit set, as ANSI C requires.
+ 
+ Use <CODE>STDC_HEADERS</CODE> instead of <CODE>__STDC__</CODE> to determine whether
+ the system has ANSI-compliant header files (and probably C library
+ functions) because many systems that have GCC do not have ANSI C
+ header files.
+ 
+ On systems without ANSI C headers, there is so much variation that
+ it is probably easier to declare the functions you use than to figure
+ out exactly what the system header files declare.  Some systems contain
+ a mix of functions ANSI and BSD; some are mostly ANSI but
+ lack <SAMP>`memmove'</SAMP>; some define the BSD functions as macros in
+ <TT>`string.h'</TT> or <TT>`strings.h'</TT>; some have only the BSD
+ functions but <TT>`string.h'</TT>; some declare the memory functions in
+ <TT>`memory.h'</TT>, some in <TT>`string.h'</TT>; etc.  It is probably
+ sufficient to check for one string function and one memory function; if
+ the library has the ANSI versions of those then it probably has
+ most of the others.  If you put the following in <TT>`configure.ac'</TT>:
+ 
+ 
+ <PRE>
+ AC_HEADER_STDC
+ AC_CHECK_FUNCS(strchr memcpy)
+ </PRE>
+ 
+ then, in your code, you can put declarations like this:
+ 
+ 
+ <PRE>
+ #if STDC_HEADERS
+ # include &#60;string.h&#62;
+ #else
+ # if !HAVE_STRCHR
+ #  define strchr index
+ #  define strrchr rindex
+ # endif
+ char *strchr (), *strrchr ();
+ # if !HAVE_MEMCPY
+ #  define memcpy(d, s, n) bcopy ((s), (d), (n))
+ #  define memmove(d, s, n) bcopy ((s), (d), (n))
+ # endif
+ #endif
+ </PRE>
+ 
+ If you use a function like <CODE>memchr</CODE>, <CODE>memset</CODE>, <CODE>strtok</CODE>,
+ or <CODE>strspn</CODE>, which have no BSD equivalent, then macros won't
+ suffice; you must provide an implementation of each function.  An easy
+ way to incorporate your implementations only when needed (since the ones
+ in system C libraries may be hand optimized) is to, taking <CODE>memchr</CODE>
+ for example, put it in <TT>`memchr.c'</TT> and use
+ <SAMP>`AC_REPLACE_FUNCS(memchr)'</SAMP>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_SYS_WAIT</B>
+ <DD><A NAME="IDX384"></A>
+ <A NAME="IDX385"></A>
+ <A NAME="IDX386"></A>
+ If <TT>`sys/wait.h'</TT> exists and is compatible with POSIX.1, define
+ <CODE>HAVE_SYS_WAIT_H</CODE>.  Incompatibility can occur if <TT>`sys/wait.h'</TT>
+ does not exist, or if it uses the old BSD <CODE>union wait</CODE> instead
+ of <CODE>int</CODE> to store a status value.  If <TT>`sys/wait.h'</TT> is not
+ POSIX.1 compatible, then instead of including it, define the
+ POSIX.1 macros with their usual interpretations.  Here is an
+ example:
+ 
+ 
+ <PRE>
+ #include &#60;sys/types.h&#62;
+ #if HAVE_SYS_WAIT_H
+ # include &#60;sys/wait.h&#62;
+ #endif
+ #ifndef WEXITSTATUS
+ # define WEXITSTATUS(stat_val) ((unsigned)(stat_val) &#62;&#62; 8)
+ #endif
+ #ifndef WIFEXITED
+ # define WIFEXITED(stat_val) (((stat_val) &#38; 255) == 0)
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ <A NAME="IDX387"></A>
+ <CODE>_POSIX_VERSION</CODE> is defined when <TT>`unistd.h'</TT> is included on
+ POSIX.1 systems.  If there is no <TT>`unistd.h'</TT>, it is definitely
+ not a POSIX.1 system.  However, some non-POSIX.1 systems do
+ have <TT>`unistd.h'</TT>.
+ 
+ The way to check if the system supports POSIX.1 is:
+ 
+ 
+ <PRE>
+ #if HAVE_UNISTD_H
+ # include &#60;sys/types.h&#62;
+ # include &#60;unistd.h&#62;
+ #endif
+ 
+ #ifdef _POSIX_VERSION
+ /* Code for POSIX.1 systems.  */
+ #endif
+ </PRE>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_TIME</B>
+ <DD><A NAME="IDX388"></A>
+ <A NAME="IDX389"></A>
+ <A NAME="IDX390"></A>
+ If a program may include both <TT>`time.h'</TT> and <TT>`sys/time.h'</TT>,
+ define <CODE>TIME_WITH_SYS_TIME</CODE>.  On some older systems,
+ <TT>`sys/time.h'</TT> includes <TT>`time.h'</TT>, but <TT>`time.h'</TT> is not
+ protected against multiple inclusion, so programs should not explicitly
+ include both files.  This macro is useful in programs that use, for
+ example, <CODE>struct timeval</CODE> or <CODE>struct timezone</CODE> as well as
+ <CODE>struct tm</CODE>.  It is best used in conjunction with
+ <CODE>HAVE_SYS_TIME_H</CODE>, which can be checked for using
+ <CODE>AC_CHECK_HEADERS(sys/time.h)</CODE>.
+ 
+ 
+ <PRE>
+ #if TIME_WITH_SYS_TIME
+ # include &#60;sys/time.h&#62;
+ # include &#60;time.h&#62;
+ #else
+ # if HAVE_SYS_TIME_H
+ #  include &#60;sys/time.h&#62;
+ # else
+ #  include &#60;time.h&#62;
+ # endif
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_TIOCGWINSZ</B>
+ <DD><A NAME="IDX391"></A>
+ <A NAME="IDX392"></A>
+ <A NAME="IDX393"></A>
+ If the use of <CODE>TIOCGWINSZ</CODE> requires <TT>`&#60;sys/ioctl.h&#62;'</TT>, then
+ define <CODE>GWINSZ_IN_SYS_IOCTL</CODE>.  Otherwise <CODE>TIOCGWINSZ</CODE> can be
+ found in <TT>`&#60;termios.h&#62;'</TT>.
+ 
+ Use:
+ 
+ 
+ <PRE>
+ #if HAVE_TERMIOS_H
+ # include &#60;termios.h&#62;
+ #endif
+ 
+ #if GWINSZ_IN_SYS_IOCTL
+ # include &#60;sys/ioctl.h&#62;
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC50" HREF="autoconf_toc.html#TOC50">Generic Header Checks</A></H3>
+ 
+ <P>
+ These macros are used to find system header files not covered by the
+ "particular" test macros.  If you need to check the contents of a header
+ as well as find out whether it is present, you have to write your own
+ test for it (see section <A HREF="autoconf.html#SEC68">Writing Tests</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_HEADER</B> <I>(<VAR>header-file</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX394"></A>
+ <A NAME="IDX395"></A>
+ If the system header file <VAR>header-file</VAR> is usable, execute shell
+ commands <VAR>action-if-found</VAR>, otherwise execute
+ <VAR>action-if-not-found</VAR>.  If you just want to define a symbol if the
+ header file is available, consider using <CODE>AC_CHECK_HEADERS</CODE>
+ instead.
+ 
+ 
+ <P>
+ The meaning of "usable" depends upon the content of <VAR>includes</VAR>:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>if <VAR>includes</VAR> is empty
+ <DD>
+ check whether
+ 
+ 
+ <PRE>
+ <VAR>header-file</VAR>
+ </PRE>
+ 
+ can be <EM>preprocessed</EM> without error.
+ 
+ <DT>if <VAR>include</VAR> is set
+ <DD>
+ Check whether
+ 
+ 
+ <PRE>
+ <VAR>includes</VAR>
+ #include &#60;<VAR>header-file</VAR>&#62;
+ </PRE>
+ 
+ can be <EM>compiled</EM> without error.  You may use
+ <CODE>AC_CHECK_HEADER</CODE> (and <CODE>AC_CHECK_HEADERS</CODE>) to check whether
+ two headers are compatible.
+ </DL>
+ 
+ <P>
+ You may pass any kind of dummy content for <VAR>includes</VAR>, such as a
+ single space, a comment, to check whether <VAR>header-file</VAR> compiles
+ with success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_HEADERS</B> <I>(<VAR>header-file</VAR>..., @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX396"></A>
+ <A NAME="IDX397"></A>
+ <A NAME="IDX398"></A>
+ For each given system header file <VAR>header-file</VAR> in the
+ whitespace-separated argument list that exists, define
+ <CODE>HAVE_<VAR>header-file</VAR></CODE> (in all capitals).  If <VAR>action-if-found</VAR>
+ is given, it is additional shell code to execute when one of the header
+ files is found.  You can give it a value of <SAMP>`break'</SAMP> to break out of
+ the loop on the first match.  If <VAR>action-if-not-found</VAR> is given, it
+ is executed when one of the header files is not found.
+ 
+ 
+ <P>
+ Be sure to read the documentation of <CODE>AC_CHECK_HEADER</CODE> to
+ understand the influence of <VAR>includes</VAR>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC51" HREF="autoconf_toc.html#TOC51">Declarations</A></H2>
+ <P>
+ <A NAME="IDX399"></A>
+ 
+ 
+ <P>
+ The following macros check for the declaration of variables and
+ functions.  If there is no macro specifically defined to check for a
+ symbol you need, then you can use the general macros (see section <A HREF="autoconf.html#SEC53">Generic Declaration Checks</A>) or, for more complex tests, you may use
+ <CODE>AC_TRY_COMPILE</CODE> (see section <A HREF="autoconf.html#SEC70">Examining Syntax</A>).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC52" HREF="autoconf_toc.html#TOC52">Particular Declaration Checks</A></H3>
+ 
+ <P>
+ The following macros check for certain declarations.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DECL_SYS_SIGLIST</B>
+ <DD><A NAME="IDX400"></A>
+ <A NAME="IDX401"></A>
+ <A NAME="IDX402"></A>
+ Define <CODE>SYS_SIGLIST_DECLARED</CODE> if the variable <CODE>sys_siglist</CODE>
+ is declared in a system header file, either <TT>`signal.h'</TT> or
+ <TT>`unistd.h'</TT>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC53" HREF="autoconf_toc.html#TOC53">Generic Declaration Checks</A></H3>
+ 
+ <P>
+ These macros are used to find declarations not covered by the "particular"
+ test macros.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_DECL</B> <I>(<VAR>symbol</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX403"></A>
+ <A NAME="IDX404"></A>
+ If <VAR>symbol</VAR> (a function or a variable) is not declared in
+ <VAR>includes</VAR> and a declaration is needed, run the shell commands
+ <VAR>action-if-not-found</VAR>, otherwise <VAR>action-if-found</VAR>.  If no
+ <VAR>includes</VAR> are specified, the default includes are used
+ (see section <A HREF="autoconf.html#SEC38">Default Includes</A>).
+ 
+ 
+ <P>
+ This macro actually tests whether it is valid to use <VAR>symbol</VAR> as an
+ r-value, not if it is really declared, because it is much safer to avoid
+ introducing extra declarations when they are not needed.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_DECLS</B> <I>(<VAR>symbols</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX405"></A>
+ <A NAME="IDX406"></A>
+ <A NAME="IDX407"></A>
+ For each of the <VAR>symbols</VAR> (<EM>comma</EM>-separated list), define
+ <CODE>HAVE_DECL_<VAR>symbol</VAR></CODE> (in all capitals) to <SAMP>`1'</SAMP> if
+ <VAR>symbol</VAR> is declared, otherwise to <SAMP>`0'</SAMP>.  If
+ <VAR>action-if-not-found</VAR> is given, it is additional shell code to
+ execute when one of the function declarations is needed, otherwise
+ <VAR>action-if-found</VAR> is executed.
+ 
+ 
+ <P>
+ This macro uses an m4 list as first argument:
+ 
+ <PRE>
+ AC_CHECK_DECLS(strdup)
+ AC_CHECK_DECLS([strlen])
+ AC_CHECK_DECLS([malloc, realloc, calloc, free])
+ </PRE>
+ 
+ <P>
+ Unlike the other <SAMP>`AC_CHECK_*S'</SAMP> macros, when a <VAR>symbol</VAR> is not
+ declared, <CODE>HAVE_DECL_<VAR>symbol</VAR></CODE> is defined to <SAMP>`0'</SAMP> instead
+ of leaving <CODE>HAVE_DECL_<VAR>symbol</VAR></CODE> undeclared.  When you are
+ <EM>sure</EM> that the check was performed, use
+ <CODE>HAVE_DECL_<VAR>symbol</VAR></CODE> just like any other result of Autoconf:
+ 
+ 
+ 
+ <PRE>
+ #if !HAVE_DECL_SYMBOL
+ extern char *symbol;
+ #endif
+ </PRE>
+ 
+ <P>
+ If the test may have not been performed, however, because it is safer
+ <EM>not</EM> to declare a symbol than to use a declaration that conflicts
+ with the system's one, you should use:
+ 
+ 
+ 
+ <PRE>
+ #if defined HAVE_DECL_MALLOC &#38;&#38; !HAVE_DECL_MALLOC
+ char *malloc (size_t *s);
+ #endif
+ </PRE>
+ 
+ <P>
+ You fall into the second category only in extreme situations: either
+ your files may be used without being configured, or they are used during
+ the configuration.  In most cases the traditional approach is enough.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC54" HREF="autoconf_toc.html#TOC54">Structures</A></H2>
+ <P>
+ <A NAME="IDX408"></A>
+ 
+ 
+ <P>
+ The following macros check for the presence of certain members in C
+ structures.  If there is no macro specifically defined to check for a
+ member you need, then you can use the general structure-member macro
+ (see section <A HREF="autoconf.html#SEC56">Generic Structure Checks</A>) or, for more complex tests, you may use
+ <CODE>AC_TRY_COMPILE</CODE> (see section <A HREF="autoconf.html#SEC70">Examining Syntax</A>).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC55" HREF="autoconf_toc.html#TOC55">Particular Structure Checks</A></H3>
+ 
+ <P>
+ The following macros check for certain structures or structure members.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRUCT_ST_BLKSIZE</B>
+ <DD><A NAME="IDX409"></A>
+ <A NAME="IDX410"></A>
+ <A NAME="IDX411"></A>
+ <A NAME="IDX412"></A>
+ If <CODE>struct stat</CODE> contains an <CODE>st_blksize</CODE> member, define
+ <CODE>HAVE_STRUCT_STAT_ST_BLKSIZE</CODE>.  The former name,
+ <CODE>HAVE_ST_BLKSIZE</CODE> is to be avoided, as its support will cease in
+ the future.  This macro is obsoleted, and should be replaced by
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_MEMBERS([struct stat.st_blksize])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRUCT_ST_BLOCKS</B>
+ <DD><A NAME="IDX413"></A>
+ <A NAME="IDX414"></A>
+ <A NAME="IDX415"></A>
+ <A NAME="IDX416"></A>
+ <A NAME="IDX417"></A>
+ If <CODE>struct stat</CODE> contains an <CODE>st_blocks</CODE> member, define
+ <CODE>HAVE_STRUCT STAT_ST_BLOCKS</CODE>.  Otherwise, require an
+ <CODE>AC_LIBOBJ</CODE> replacement of <SAMP>`fileblocks'</SAMP>.  The former name,
+ <CODE>HAVE_ST_BLOCKS</CODE> is to be avoided, as its support will cease in the
+ future.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRUCT_ST_RDEV</B>
+ <DD><A NAME="IDX418"></A>
+ <A NAME="IDX419"></A>
+ <A NAME="IDX420"></A>
+ <A NAME="IDX421"></A>
+ If <CODE>struct stat</CODE> contains an <CODE>st_rdev</CODE> member, define
+ <CODE>HAVE_STRUCT_STAT_ST_RDEV</CODE>.  The former name for this macro,
+ <CODE>HAVE_ST_RDEV</CODE>, is to be avoided as it will cease to be supported
+ in the future.  Actually, even the new macro is obsolete, and should be
+ replaced by:
+ 
+ <PRE>
+ AC_CHECK_MEMBERS([struct stat.st_rdev])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRUCT_TM</B>
+ <DD><A NAME="IDX422"></A>
+ <A NAME="IDX423"></A>
+ <A NAME="IDX424"></A>
+ If <TT>`time.h'</TT> does not define <CODE>struct tm</CODE>, define
+ <CODE>TM_IN_SYS_TIME</CODE>, which means that including <TT>`sys/time.h'</TT>
+ had better define <CODE>struct tm</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRUCT_TIMEZONE</B>
+ <DD><A NAME="IDX425"></A>
+ <A NAME="IDX426"></A>
+ <A NAME="IDX427"></A>
+ <A NAME="IDX428"></A>
+ Figure out how to get the current timezone.  If <CODE>struct tm</CODE> has a
+ <CODE>tm_zone</CODE> member, define <CODE>HAVE_STRUCT_TM_TM_ZONE</CODE> (and the
+ obsoleted <CODE>HAVE_TM_ZONE</CODE>).  Otherwise, if the external array
+ <CODE>tzname</CODE> is found, define <CODE>HAVE_TZNAME</CODE>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC56" HREF="autoconf_toc.html#TOC56">Generic Structure Checks</A></H3>
+ 
+ <P>
+ These macros are used to find structure members not covered by the
+ "particular" test macros.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_MEMBER</B> <I>(<VAR>aggregate</VAR>.<VAR>member</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX429"></A>
+ <A NAME="IDX430"></A>
+ Check whether <VAR>member</VAR> is a member of the aggregate <VAR>aggregate</VAR>.
+ If no <VAR>includes</VAR> are specified, the default includes are used
+ (see section <A HREF="autoconf.html#SEC38">Default Includes</A>).
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_MEMBER(struct passwd.pw_gecos,,
+                 [AC_MSG_ERROR([We need `passwd.pw_gecos'!])],
+                 [#include &#60;pwd.h&#62;])
+ </PRE>
+ 
+ <P>
+ You can use this macro for sub-members:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_MEMBER(struct top.middle.bot)
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_MEMBERS</B> <I>(<VAR>members</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX431"></A>
+ <A NAME="IDX432"></A>
+ Check for the existence of each <SAMP>`<VAR>aggregate</VAR>.<VAR>member</VAR>'</SAMP> of
+ <VAR>members</VAR> using the previous macro.  When <VAR>member</VAR> belongs to
+ <VAR>aggregate</VAR>, define <CODE>HAVE_<VAR>aggregate</VAR>_<VAR>member</VAR></CODE> (in all
+ capitals, with spaces and dots replaced by underscores).
+ 
+ 
+ <P>
+ This macro uses m4 lists:
+ 
+ <PRE>
+ AC_CHECK_MEMBERS([struct stat.st_rdev, struct stat.st_blksize])
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC57" HREF="autoconf_toc.html#TOC57">Types</A></H2>
+ 
+ <P>
+ The following macros check for C types, either builtin or typedefs.  If
+ there is no macro specifically defined to check for a type you need, and
+ you don't need to check for any special properties of it, then you can
+ use a general type-check macro.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC58" HREF="autoconf_toc.html#TOC58">Particular Type Checks</A></H3>
+ 
+ <P>
+ These macros check for particular C types in <TT>`sys/types.h'</TT>,
+ <TT>`stdlib.h'</TT> and others, if they exist.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_GETGROUPS</B>
+ <DD><A NAME="IDX433"></A>
+ <A NAME="IDX434"></A>
+ <A NAME="IDX435"></A>
+ Define <CODE>GETGROUPS_T</CODE> to be whichever of <CODE>gid_t</CODE> or <CODE>int</CODE>
+ is the base type of the array argument to <CODE>getgroups</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_MODE_T</B>
+ <DD><A NAME="IDX436"></A>
+ <A NAME="IDX437"></A>
+ <A NAME="IDX438"></A>
+ Equivalent to <SAMP>`AC_CHECK_TYPE(mode_t, int)'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_OFF_T</B>
+ <DD><A NAME="IDX439"></A>
+ <A NAME="IDX440"></A>
+ <A NAME="IDX441"></A>
+ Equivalent to <SAMP>`AC_CHECK_TYPE(off_t, long)'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_PID_T</B>
+ <DD><A NAME="IDX442"></A>
+ <A NAME="IDX443"></A>
+ <A NAME="IDX444"></A>
+ Equivalent to <SAMP>`AC_CHECK_TYPE(pid_t, int)'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_SIGNAL</B>
+ <DD><A NAME="IDX445"></A>
+ <A NAME="IDX446"></A>
+ <A NAME="IDX447"></A>
+ If <TT>`signal.h'</TT> declares <CODE>signal</CODE> as returning a pointer to a
+ function returning <CODE>void</CODE>, define <CODE>RETSIGTYPE</CODE> to be
+ <CODE>void</CODE>; otherwise, define it to be <CODE>int</CODE>.
+ 
+ 
+ <P>
+ Define signal handlers as returning type <CODE>RETSIGTYPE</CODE>:
+ 
+ 
+ 
+ <PRE>
+ RETSIGTYPE
+ hup_handler ()
+ {
+ ...
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_SIZE_T</B>
+ <DD><A NAME="IDX448"></A>
+ <A NAME="IDX449"></A>
+ <A NAME="IDX450"></A>
+ Equivalent to <SAMP>`AC_CHECK_TYPE(size_t, unsigned)'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TYPE_UID_T</B>
+ <DD><A NAME="IDX451"></A>
+ <A NAME="IDX452"></A>
+ <A NAME="IDX453"></A>
+ <A NAME="IDX454"></A>
+ If <CODE>uid_t</CODE> is not defined, define <CODE>uid_t</CODE> to be <CODE>int</CODE> and
+ <CODE>gid_t</CODE> to be <CODE>int</CODE>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC59" HREF="autoconf_toc.html#TOC59">Generic Type Checks</A></H3>
+ 
+ <P>
+ These macros are used to check for types not covered by the "particular"
+ test macros.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_TYPE</B> <I>(<VAR>type</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX455"></A>
+ <A NAME="IDX456"></A>
+ Check whether <VAR>type</VAR> is defined.  It may be a compiler builtin type
+ or defined by the <VAR>includes</VAR> (see section <A HREF="autoconf.html#SEC38">Default Includes</A>).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_TYPES</B> <I>(<VAR>types</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX457"></A>
+ <A NAME="IDX458"></A>
+ For each <VAR>type</VAR> of the <VAR>types</VAR> that is defined, define
+ <CODE>HAVE_<VAR>type</VAR></CODE> (in all capitals).  If no <VAR>includes</VAR> are
+ specified, the default includes are used (see section <A HREF="autoconf.html#SEC38">Default Includes</A>).  If
+ <VAR>action-if-found</VAR> is given, it is additional shell code to execute
+ when one of the types is found.  If <VAR>action-if-not-found</VAR> is given,
+ it is executed when one of the types is not found.
+ 
+ 
+ <P>
+ This macro uses m4 lists:
+ 
+ <PRE>
+ AC_CHECK_TYPES(ptrdiff_t)
+ AC_CHECK_TYPES([unsigned long long, uintmax_t])
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ Autoconf, up to 2.13, used to provide to another version of
+ <CODE>AC_CHECK_TYPE</CODE>, broken by design.  In order to keep backward
+ compatibility, a simple heuristics, quite safe but not totally, is
+ implemented.  In case of doubt, read the documentation of the former
+ <CODE>AC_CHECK_TYPE</CODE>, see section <A HREF="autoconf.html#SEC150">Obsolete Macros</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC60" HREF="autoconf_toc.html#TOC60">Compilers and Preprocessors</A></H2>
+ 
+ <P>
+ <A NAME="IDX459"></A>
+ All the tests for compilers (<CODE>AC_PROG_CC</CODE>, <CODE>AC_PROG_CXX</CODE>,
+ <CODE>AC_PROG_F77</CODE>) define the output variable <CODE>EXEEXT</CODE> based on
+ the output of the 1compiler, typically to the empty string if Unix and
+ <SAMP>`.exe'</SAMP> if Win32 or OS/2.
+ 
+ 
+ <P>
+ <A NAME="IDX460"></A>
+ They also define the output variable <CODE>OBJEXT</CODE> based on the
+ output of the compiler, after .c files have been excluded, typically
+ to <SAMP>`o'</SAMP> if Unix, <SAMP>`obj'</SAMP> if Win32.
+ 
+ 
+ <P>
+ If the compiler being used does not produce executables, they fail.  If
+ the executables can't be run, and cross-compilation is not enabled, they
+ fail too.  See section <A HREF="autoconf.html#SEC121">Manual Configuration</A>, for more on support for cross
+ compiling.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC61" HREF="autoconf_toc.html#TOC61">Specific Compiler Characteristics</A></H3>
+ 
+ <P>
+ Some compilers exhibit different behaviors.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>Static/Dynamic Expressions
+ <DD>
+ Autoconf relies on a trick to extract one bit of information from the C
+ compiler: using negative array sizes.  For instance the following
+ excerpt of a C source demonstrates how to test whether <SAMP>`int'</SAMP>s are 4
+ bytes long:
+ 
+ 
+ <PRE>
+ int
+ main (void)
+ {
+   static int test_array [sizeof (int) == 4 ? 1 : -1];
+   test_array [0] = 0
+   return 0;
+ }
+ </PRE>
+ 
+ To our knowledge, there is a single compiler that does not support this
+ trick: the HP C compilers (the real one, not only the "bundled") on
+ HP-UX 11.00:
+ 
+ 
+ <PRE>
+ $ <KBD>cc -c -Ae +O2 +Onolimit conftest.c</KBD>
+ cc: "conftest.c": error 1879: Variable-length arrays cannot \
+     have static storage.
+ </PRE>
+ 
+ Autoconf works around this problem by casting <CODE>sizeof (int)</CODE> to
+ <CODE>long</CODE> before comparing it.
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC62" HREF="autoconf_toc.html#TOC62">Generic Compiler Characteristics</A></H3>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_SIZEOF</B> <I>(<VAR>type</VAR>, @ovar{unused}, @dvar{includes, default-includes})</I>
+ <DD><A NAME="IDX461"></A>
+ <A NAME="IDX462"></A>
+ Define <CODE>SIZEOF_<VAR>type</VAR></CODE> (see section <A HREF="autoconf.html#SEC37">Standard Symbols</A>) to be the
+ size in bytes of <VAR>type</VAR>.  If <SAMP>`type'</SAMP> is unknown, it gets a size
+ of 0.  If no <VAR>includes</VAR> are specified, the default includes are used
+ (see section <A HREF="autoconf.html#SEC38">Default Includes</A>).  If you provide <VAR>include</VAR>, make sure to
+ include <TT>`stdio.h'</TT> which is required for this macro to run.
+ 
+ 
+ <P>
+ This macro now works even when cross-compiling.  The <VAR>unused</VAR>
+ argument was used when cross-compiling.
+ 
+ 
+ <P>
+ For example, the call
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_SIZEOF(int *)
+ </PRE>
+ 
+ <P>
+ defines <CODE>SIZEOF_INT_P</CODE> to be 8 on DEC Alpha AXP systems.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC63" HREF="autoconf_toc.html#TOC63">C Compiler Characteristics</A></H3>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CC</B> <I>(@ovar{compiler-search-list})</I>
+ <DD><A NAME="IDX463"></A>
+ <A NAME="IDX464"></A>
+ <A NAME="IDX465"></A>
+ <A NAME="IDX466"></A>
+ Determine a C compiler to use.  If <CODE>CC</CODE> is not already set in the
+ environment, check for <CODE>gcc</CODE> and <CODE>cc</CODE>, then for other C
+ compilers.  Set output variable <CODE>CC</CODE> to the name of the compiler
+ found.
+ 
+ 
+ <P>
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a space separated list of C compilers to
+ search for.  This just gives the user an opportunity to specify an
+ alternative search list for the C compiler.  For example, if you didn't
+ like the default order, then you could invoke <CODE>AC_PROG_CC</CODE> like
+ this:
+ 
+ 
+ 
+ <PRE>
+ AC_PROG_CC(cl egcs gcc cc)
+ </PRE>
+ 
+ <P>
+ If using the GNU C compiler, set shell variable <CODE>GCC</CODE> to
+ <SAMP>`yes'</SAMP>.  If output variable <CODE>CFLAGS</CODE> was not already set, set
+ it to @option{-g -O2} for the GNU C compiler (@option{-O2} on systems
+ where GCC does not accept @option{-g}), or @option{-g} for other compilers.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CC_C_O</B>
+ <DD><A NAME="IDX467"></A>
+ <A NAME="IDX468"></A>
+ <A NAME="IDX469"></A>
+ If the C compiler does not accept the @option{-c} and @option{-o} options
+ simultaneously, define <CODE>NO_MINUS_C_MINUS_O</CODE>.  This macro actually
+ tests both the compiler found by <CODE>AC_PROG_CC</CODE>, and, if different,
+ the first <CODE>cc</CODE> in the path.  The test fails if one fails.  This
+ macro was created for GNU Make to choose the default C compilation
+ rule.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CC_STDC</B>
+ <DD><A NAME="IDX470"></A>
+ <A NAME="IDX471"></A>
+ <A NAME="IDX472"></A>
+ If the C compiler is not in ANSI C mode by default, try to add an
+ option to output variable <CODE>CC</CODE> to make it so.  This macro tries
+ various options that select ANSI C on some system or another.  It
+ considers the compiler to be in ANSI C mode if it handles function
+ prototypes correctly.
+ 
+ 
+ <P>
+ If you use this macro, you should check after calling it whether the C
+ compiler has been set to accept ANSI C; if not, the shell variable
+ <CODE>ac_cv_prog_cc_stdc</CODE> is set to <SAMP>`no'</SAMP>.  If you wrote your source
+ code in ANSI C, you can make an un-ANSIfied copy of it by
+ using the program <CODE>ansi2knr</CODE>, which comes with Automake.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CPP</B>
+ <DD><A NAME="IDX473"></A>
+ <A NAME="IDX474"></A>
+ <A NAME="IDX475"></A>
+ Set output variable <CODE>CPP</CODE> to a command that runs the
+ C preprocessor.  If <SAMP>`$CC -E'</SAMP> doesn't work, <TT>`/lib/cpp'</TT> is used.
+ It is only portable to run <CODE>CPP</CODE> on files with a <TT>`.c'</TT>
+ extension.
+ 
+ 
+ <P>
+ If the current language is C (see section <A HREF="autoconf.html#SEC78">Language Choice</A>), many of the
+ specific test macros use the value of <CODE>CPP</CODE> indirectly by calling
+ <CODE>AC_TRY_CPP</CODE>, <CODE>AC_CHECK_HEADER</CODE>, <CODE>AC_EGREP_HEADER</CODE>, or
+ <CODE>AC_EGREP_CPP</CODE>.
+ 
+ 
+ <P>
+ Some preprocessors don't indicate missing include files by the error
+ status.  For such preprocessors an internal variable is set that causes
+ other macros to check the standard error from the preprocessor and
+ consider the test failed if any warnings have been reported.
+ </DL>
+ 
+ 
+ <P>
+ The following macros check for C compiler or machine architecture
+ features.  To check for characteristics not listed here, use
+ <CODE>AC_TRY_COMPILE</CODE> (see section <A HREF="autoconf.html#SEC70">Examining Syntax</A>) or <CODE>AC_TRY_RUN</CODE>
+ (see section <A HREF="autoconf.html#SEC72">Checking Run Time Behavior</A>)
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_BIGENDIAN</B> <I>(@ovar{action-if-true}, @ovar{action-if-false}, @ovar{action-if-unknown})</I>
+ <DD><A NAME="IDX476"></A>
+ <A NAME="IDX477"></A>
+ <A NAME="IDX478"></A>
+ <A NAME="IDX479"></A>
+ If words are stored with the most significant byte first (like Motorola
+ and SPARC CPUs), execute <VAR>action-if-true</VAR>.  If words are stored with
+ the less significant byte first (like Intel and VAX CPUs), execute
+ <VAR>action-if-false</VAR>.
+ 
+ 
+ <P>
+ This macro runs a test-case if endianness cannot be determined from the
+ system header files.  When cross-compiling the test-case is not run but
+ grep'ed for some magic values.  <VAR>action-if-unknown</VAR> is executed if
+ the latter case fails to determine the byte sex of the host system.
+ 
+ 
+ <P>
+ The default for <VAR>action-if-true</VAR> is to define
+ <SAMP>`WORDS_BIGENDIAN'</SAMP>.  The default for <VAR>action-if-false</VAR> is to do
+ nothing.  And finally, the default for <VAR>action-if-unknown</VAR> is to
+ abort configure and tell the installer which variable he should preset
+ to bypass this test.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_CONST</B>
+ <DD><A NAME="IDX480"></A>
+ <A NAME="IDX481"></A>
+ <A NAME="IDX482"></A>
+ If the C compiler does not fully support the ANSI C qualifier
+ <CODE>const</CODE>, define <CODE>const</CODE> to be empty.  Some C compilers that do
+ not define <CODE>__STDC__</CODE> do support <CODE>const</CODE>; some compilers that
+ define <CODE>__STDC__</CODE> do not completely support <CODE>const</CODE>.  Programs
+ can simply use <CODE>const</CODE> as if every C compiler supported it; for
+ those that don't, the <TT>`Makefile'</TT> or configuration header file will
+ define it as empty.
+ 
+ 
+ <P>
+ Occasionally installers use a C++ compiler to compile C code, typically
+ because they lack a C compiler.  This causes problems with <CODE>const</CODE>,
+ because C and C++ treat <CODE>const</CODE> differently.  For example:
+ 
+ 
+ 
+ <PRE>
+ const int foo;
+ </PRE>
+ 
+ <P>
+ is valid in C but not in C++.  These differences unfortunately cannot be
+ papered over by defining <CODE>const</CODE> to be empty.
+ 
+ 
+ <P>
+ If @command{autoconf} detects this situation, it leaves <CODE>const</CODE> alone,
+ as this generally yields better results in practice.  However, using a
+ C++ compiler to compile C code is not recommended or supported, and
+ installers who run into trouble in this area should get a C compiler
+ like GCC to compile their C code.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_VOLATILE</B>
+ <DD><A NAME="IDX483"></A>
+ <A NAME="IDX484"></A>
+ <A NAME="IDX485"></A>
+ If the C compiler does not understand the keyword <CODE>volatile</CODE>,
+ define <CODE>volatile</CODE> to be empty.  Programs can simply use
+ <CODE>volatile</CODE> as if every C compiler supported it; for those that do
+ not, the <TT>`Makefile'</TT> or configuration header will define it as
+ empty.
+ 
+ 
+ <P>
+ If the correctness of your program depends on the semantics of
+ <CODE>volatile</CODE>, simply defining it to be empty does, in a sense, break
+ your code.  However, given that the compiler does not support
+ <CODE>volatile</CODE>, you are at its mercy anyway.  At least your
+ program will compile, when it wouldn't before.
+ 
+ 
+ <P>
+ In general, the <CODE>volatile</CODE> keyword is a feature of ANSI C, so
+ you might expect that <CODE>volatile</CODE> is available only when
+ <CODE>__STDC__</CODE> is defined.  However, Ultrix 4.3's native compiler does
+ support volatile, but does not defined <CODE>__STDC__</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_INLINE</B>
+ <DD><A NAME="IDX486"></A>
+ <A NAME="IDX487"></A>
+ <A NAME="IDX488"></A>
+ If the C compiler supports the keyword <CODE>inline</CODE>, do nothing.
+ Otherwise define <CODE>inline</CODE> to <CODE>__inline__</CODE> or <CODE>__inline</CODE>
+ if it accepts one of those, otherwise define <CODE>inline</CODE> to be empty.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_CHAR_UNSIGNED</B>
+ <DD><A NAME="IDX489"></A>
+ <A NAME="IDX490"></A>
+ <A NAME="IDX491"></A>
+ If the C type <CODE>char</CODE> is unsigned, define <CODE>__CHAR_UNSIGNED__</CODE>,
+ unless the C compiler predefines it.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_LONG_DOUBLE</B>
+ <DD><A NAME="IDX492"></A>
+ <A NAME="IDX493"></A>
+ <A NAME="IDX494"></A>
+ If the C compiler supports a working <CODE>long double</CODE> type with more
+ range or precision than the <CODE>double</CODE> type, define
+ <CODE>HAVE_LONG_DOUBLE</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_STRINGIZE</B>
+ <DD><A NAME="IDX495"></A>
+ <A NAME="IDX496"></A>
+ <A NAME="IDX497"></A>
+ If the C preprocessor supports the stringizing operator, define
+ <CODE>HAVE_STRINGIZE</CODE>.  The stringizing operator is <SAMP>`#'</SAMP> and is
+ found in macros such as this:
+ 
+ 
+ 
+ <PRE>
+ #define x(y) #y
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_PROTOTYPES</B>
+ <DD><A NAME="IDX498"></A>
+ <A NAME="IDX499"></A>
+ <A NAME="IDX500"></A>
+ <A NAME="IDX501"></A>
+ <A NAME="IDX502"></A>
+ Check to see if function prototypes are understood by the compiler.  If
+ so, define <CODE>PROTOTYPES</CODE> and <CODE>__PROTOTYPES</CODE>.
+ In the case the compiler does not handle
+ prototypes, you should use <CODE>ansi2knr</CODE>, which comes with the
+ Automake distribution, to unprotoize function definitions.  For
+ function prototypes, you should first define <CODE>PARAMS</CODE>:
+ 
+ 
+ 
+ <PRE>
+ #ifndef PARAMS
+ # if PROTOTYPES
+ #  define PARAMS(protos) protos
+ # else /* no PROTOTYPES */
+ #  define PARAMS(protos) ()
+ # endif /* no PROTOTYPES */
+ #endif
+ </PRE>
+ 
+ <P>
+ then use it this way:
+ 
+ 
+ 
+ <PRE>
+ size_t my_strlen PARAMS ((const char *));
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ This macro also defines <CODE>__PROTOTYPES</CODE>; this is for the benefit of
+ header files that cannot use macros that infringe on user name space.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_GCC_TRADITIONAL</B>
+ <DD><A NAME="IDX503"></A>
+ <A NAME="IDX504"></A>
+ <A NAME="IDX505"></A>
+ Add @option{-traditional} to output variable <CODE>CC</CODE> if using the
+ GNU C compiler and <CODE>ioctl</CODE> does not work properly without
+ @option{-traditional}.  That usually happens when the fixed header files
+ have not been installed on an old system.  Since recent versions of the
+ GNU C compiler fix the header files automatically when installed,
+ this is becoming a less prevalent problem.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC64" HREF="autoconf_toc.html#TOC64">C++ Compiler Characteristics</A></H3>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CXX</B> <I>(@ovar{compiler-search-list})</I>
+ <DD><A NAME="IDX506"></A>
+ <A NAME="IDX507"></A>
+ <A NAME="IDX508"></A>
+ <A NAME="IDX509"></A>
+ Determine a C++ compiler to use.  Check if the environment variable
+ <CODE>CXX</CODE> or <CODE>CCC</CODE> (in that order) is set; if so, then set output
+ variable <CODE>CXX</CODE> to its value.
+ 
+ 
+ <P>
+ Otherwise, if the macro is invoked without an argument, then search for
+ a C++ compiler under the likely names (first <CODE>g++</CODE> and <CODE>c++</CODE>
+ then other names).  If none of those checks succeed, then as a last
+ resort set <CODE>CXX</CODE> to <CODE>g++</CODE>.
+ 
+ 
+ <P>
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a space separated list of C++ compilers to
+ search for.  This just gives the user an opportunity to specify an
+ alternative search list for the C++ compiler.  For example, if you
+ didn't like the default order, then you could invoke <CODE>AC_PROG_CXX</CODE>
+ like this:
+ 
+ 
+ 
+ <PRE>
+ AC_PROG_CXX(cl KCC CC cxx cc++ xlC aCC c++ g++ egcs gcc)
+ </PRE>
+ 
+ <P>
+ If using the GNU C++ compiler, set shell variable <CODE>GXX</CODE> to
+ <SAMP>`yes'</SAMP>.  If output variable <CODE>CXXFLAGS</CODE> was not already set, set
+ it to @option{-g -O2} for the GNU C++ compiler (@option{-O2} on
+ systems where G++ does not accept @option{-g}), or @option{-g} for other
+ compilers.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_CXXCPP</B>
+ <DD><A NAME="IDX510"></A>
+ <A NAME="IDX511"></A>
+ <A NAME="IDX512"></A>
+ Set output variable <CODE>CXXCPP</CODE> to a command that runs the C++
+ preprocessor.  If <SAMP>`$CXX -E'</SAMP> doesn't work, <TT>`/lib/cpp'</TT> is used.
+ It is only portable to run <CODE>CXXCPP</CODE> on files with a <TT>`.c'</TT>,
+ <TT>`.C'</TT>, or <TT>`.cc'</TT> extension.
+ 
+ 
+ <P>
+ If the current language is C++ (see section <A HREF="autoconf.html#SEC78">Language Choice</A>), many of the
+ specific test macros use the value of <CODE>CXXCPP</CODE> indirectly by
+ calling <CODE>AC_TRY_CPP</CODE>, <CODE>AC_CHECK_HEADER</CODE>,
+ <CODE>AC_EGREP_HEADER</CODE>, or <CODE>AC_EGREP_CPP</CODE>.
+ 
+ 
+ <P>
+ Some preprocessors don't indicate missing include files by the error
+ status.  For such preprocessors an internal variable is set that causes
+ other macros to check the standard error from the preprocessor and
+ consider the test failed if any warnings have been reported.  However,
+ it is not known whether such broken preprocessors exist for C++.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC65" HREF="autoconf_toc.html#TOC65">Fortran 77 Compiler Characteristics</A></H3>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_F77</B> <I>(@ovar{compiler-search-list})</I>
+ <DD><A NAME="IDX513"></A>
+ <A NAME="IDX514"></A>
+ <A NAME="IDX515"></A>
+ <A NAME="IDX516"></A>
+ Determine a Fortran 77 compiler to use.  If <CODE>F77</CODE> is not already
+ set in the environment, then check for <CODE>g77</CODE> and <CODE>f77</CODE>, and
+ then some other names.  Set the output variable <CODE>F77</CODE> to the name
+ of the compiler found.
+ 
+ 
+ <P>
+ This macro may, however, be invoked with an optional first argument
+ which, if specified, must be a space separated list of Fortran 77
+ compilers to search for.  This just gives the user an opportunity to
+ specify an alternative search list for the Fortran 77 compiler.  For
+ example, if you didn't like the default order, then you could invoke
+ <CODE>AC_PROG_F77</CODE> like this:
+ 
+ 
+ 
+ <PRE>
+ AC_PROG_F77(fl32 f77 fort77 xlf cf77 g77 f90 xlf90)
+ </PRE>
+ 
+ <P>
+ If using <CODE>g77</CODE> (the GNU Fortran 77 compiler), then
+ <CODE>AC_PROG_F77</CODE> will set the shell variable <CODE>G77</CODE> to <SAMP>`yes'</SAMP>.
+ If the output variable <CODE>FFLAGS</CODE> was not already set in the
+ environment, then set it to @option{-g -02} for <CODE>g77</CODE> (or @option{-O2}
+ where <CODE>g77</CODE> does not accept @option{-g}).  Otherwise, set
+ <CODE>FFLAGS</CODE> to @option{-g} for all other Fortran 77 compilers.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_F77_C_O</B>
+ <DD><A NAME="IDX517"></A>
+ <A NAME="IDX518"></A>
+ <A NAME="IDX519"></A>
+ Test if the Fortran 77 compiler accepts the options @option{-c} and
+ @option{-o} simultaneously, and define <CODE>F77_NO_MINUS_C_MINUS_O</CODE> if it
+ does not.
+ </DL>
+ 
+ 
+ <P>
+ The following macros check for Fortran 77 compiler characteristics.  To
+ check for characteristics not listed here, use <CODE>AC_TRY_COMPILE</CODE>
+ (see section <A HREF="autoconf.html#SEC70">Examining Syntax</A>) or <CODE>AC_TRY_RUN</CODE> (see section <A HREF="autoconf.html#SEC72">Checking Run Time Behavior</A>),
+ making sure to first set the current language to Fortran 77
+ <CODE>AC_LANG(Fortran 77)</CODE> (see section <A HREF="autoconf.html#SEC78">Language Choice</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_F77_LIBRARY_LDFLAGS</B>
+ <DD><A NAME="IDX520"></A>
+ <A NAME="IDX521"></A>
+ <A NAME="IDX522"></A>
+ Determine the linker flags (e.g. @option{-L} and @option{-l}) for the
+ <EM>Fortran 77 intrinsic and run-time libraries</EM> that are required to
+ successfully link a Fortran 77 program or shared library.  The output
+ variable <CODE>FLIBS</CODE> is set to these flags.
+ 
+ 
+ <P>
+ This macro is intended to be used in those situations when it is
+ necessary to mix, e.g. C++ and Fortran 77 source code into a single
+ program or shared library (see section `Mixing Fortran 77 With C and C++' in <CITE>GNU Automake</CITE>).
+ 
+ 
+ <P>
+ For example, if object files from a C++ and Fortran 77 compiler must be
+ linked together, then the C++ compiler/linker must be used for linking
+ (since special C++-ish things need to happen at link time like calling
+ global constructors, instantiating templates, enabling exception
+ support, etc.).
+ 
+ 
+ <P>
+ However, the Fortran 77 intrinsic and run-time libraries must be linked
+ in as well, but the C++ compiler/linker doesn't know by default how to
+ add these Fortran 77 libraries.  Hence, the macro
+ <CODE>AC_F77_LIBRARY_LDFLAGS</CODE> was created to determine these Fortran 77
+ libraries.
+ 
+ 
+ <P>
+ The macro <CODE>AC_F77_DUMMY_MAIN</CODE> or <CODE>AC_F77_MAIN</CODE> will probably
+ also be necessary to link C/C++ with Fortran; see below.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_F77_DUMMY_MAIN</B> <I>(@ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX523"></A>
+ <A NAME="IDX524"></A>
+ <A NAME="IDX525"></A>
+ With many compilers, the Fortran libraries detected by
+ <CODE>AC_F77_LIBRARY_LDFLAGS</CODE> provide their own <CODE>main</CODE> entry
+ function that initializes things like Fortran I/O, and which then calls
+ a user-provided entry function named e.g. <CODE>MAIN__</CODE> to run the
+ user's program.  The <CODE>AC_F77_DUMMY_MAIN</CODE> or <CODE>AC_F77_MAIN</CODE>
+ macro figures out how to deal with this interaction.
+ 
+ 
+ <P>
+ When using Fortran for purely numerical functions (no I/O, etcetera),
+ users often prefer to provide their own <CODE>main</CODE> and skip the Fortran
+ library initializations.  In this case, however, one may still need to
+ provide a dummy <CODE>MAIN__</CODE> routine in order to prevent linking errors
+ on some systems.  <CODE>AC_F77_DUMMY_MAIN</CODE> detects whether any such
+ routine is <EM>required</EM> for linking, and what its name is; the shell
+ variable <CODE>F77_DUMMY_MAIN</CODE> holds this name, <CODE>unknown</CODE> when no
+ solution was found, and <CODE>none</CODE> when no such dummy main is needed.
+ 
+ 
+ <P>
+ By default, <VAR>action-if-found</VAR> defines <CODE>F77_DUMMY_MAIN</CODE> to the
+ name of this routine (e.g. <CODE>MAIN__</CODE>) <EM>if</EM> it is required.
+ @ovar{action-if-not-found} defaults to exiting with an error.
+ 
+ 
+ <P>
+ In order to link with Fortran routines, the user's C/C++ program should
+ then include the following code to define the dummy main if it is
+ needed:
+ 
+ 
+ 
+ <PRE>
+ #ifdef F77_DUMMY_MAIN
+ #  ifdef __cplusplus
+      extern "C"
+ #  endif
+    int F77_DUMMY_MAIN() { return 1; }
+ #endif
+ </PRE>
+ 
+ <P>
+ Note that <CODE>AC_F77_DUMMY_MAIN</CODE> is called automatically from
+ <CODE>AC_F77_WRAPPERS</CODE>; there is generally no need to call it explicitly
+ unless one wants to change the default actions.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_F77_MAIN</B>
+ <DD><A NAME="IDX526"></A>
+ <A NAME="IDX527"></A>
+ <A NAME="IDX528"></A>
+ As discussed above for <CODE>AC_F77_DUMMY_MAIN</CODE>, many Fortran libraries
+ allow you to provide an entry point called e.g. <CODE>MAIN__</CODE> instead of
+ the usual <CODE>main</CODE>, which is then called by a <CODE>main</CODE> function in
+ the Fortran libraries that initializes things like Fortran I/O.  The
+ <CODE>AC_F77_MAIN</CODE> macro detects whether it is <EM>possible</EM> to
+ utilize such an alternate main function, and defines <CODE>F77_MAIN</CODE> to
+ the name of the function.  (If no alternate main function name is found,
+ <CODE>F77_MAIN</CODE> is simply defined to <CODE>main</CODE>.)
+ 
+ 
+ <P>
+ Thus, when calling Fortran routines from C that perform things like I/O,
+ one should use this macro and name the "main" function <CODE>F77_MAIN</CODE>
+ instead of <CODE>main</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_F77_WRAPPERS</B>
+ <DD><A NAME="IDX529"></A>
+ <A NAME="IDX530"></A>
+ <A NAME="IDX531"></A>
+ <A NAME="IDX532"></A>
+ Defines C macros <CODE>F77_FUNC(name,NAME)</CODE> and
+ <CODE>F77_FUNC_(name,NAME)</CODE> to properly mangle the names of C/C++
+ identifiers, and identifiers with underscores, respectively, so that
+ they match the name-mangling scheme used by the Fortran 77 compiler.
+ 
+ 
+ <P>
+ Fortran 77 is case-insensitive, and in order to achieve this the Fortran
+ 77 compiler converts all identifiers into a canonical case and format.
+ To call a Fortran 77 subroutine from C or to write a C function that is
+ callable from Fortran 77, the C program must explicitly use identifiers
+ in the format expected by the Fortran 77 compiler.  In order to do this,
+ one simply wraps all C identifiers in one of the macros provided by
+ <CODE>AC_F77_WRAPPERS</CODE>.  For example, suppose you have the following
+ Fortran 77 subroutine:
+ 
+ 
+ 
+ <PRE>
+       subroutine foobar(x,y)
+       double precision x, y
+       y = 3.14159 * x
+       return
+       end
+ </PRE>
+ 
+ <P>
+ You would then declare its prototype in C or C++ as:
+ 
+ 
+ 
+ <PRE>
+ #define FOOBAR_F77 F77_FUNC(foobar,FOOBAR)
+ #ifdef __cplusplus
+ extern "C"  /* prevent C++ name mangling */
+ #endif
+ void FOOBAR_F77(double *x, double *y);
+ </PRE>
+ 
+ <P>
+ Note that we pass both the lowercase and uppercase versions of the
+ function name to <CODE>F77_FUNC</CODE> so that it can select the right one.
+ Note also that all parameters to Fortran 77 routines are passed as
+ pointers (see section `Mixing Fortran 77 With C and C++' in <CITE>GNU Automake</CITE>).
+ 
+ 
+ <P>
+ Although Autoconf tries to be intelligent about detecting the
+ name-mangling scheme of the Fortran 77 compiler, there may be Fortran 77
+ compilers that it doesn't support yet.  In this case, the above code
+ will generate a compile-time error, but some other behavior
+ (e.g. disabling Fortran-related features) can be induced by checking
+ whether the <CODE>F77_FUNC</CODE> macro is defined.
+ 
+ 
+ <P>
+ Now, to call that routine from a C program, we would do something like:
+ 
+ 
+ 
+ <PRE>
+ {
+     double x = 2.7183, y;
+     FOOBAR_F77(&#38;x, &#38;y);
+ }
+ </PRE>
+ 
+ <P>
+ If the Fortran 77 identifier contains an underscore
+ (e.g. <CODE>foo_bar</CODE>), you should use <CODE>F77_FUNC_</CODE> instead of
+ <CODE>F77_FUNC</CODE> (with the same arguments).  This is because some Fortran
+ 77 compilers mangle names differently if they contain an underscore.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_F77_FUNC</B> <I>(<VAR>name</VAR>, @ovar{shellvar})</I>
+ <DD><A NAME="IDX533"></A>
+ <A NAME="IDX534"></A>
+ Given an identifier <VAR>name</VAR>, set the shell variable <VAR>shellvar</VAR> to
+ hold the mangled version <VAR>name</VAR> according to the rules of the
+ Fortran 77 linker (see also <CODE>AC_F77_WRAPPERS</CODE>).  <VAR>shellvar</VAR> is
+ optional; if it is not supplied, the shell variable will be simply
+ <VAR>name</VAR>.  The purpose of this macro is to give the caller a way to
+ access the name-mangling information other than through the C
+ preprocessor as above; for example, to call Fortran routines from some
+ language other than C/C++.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC66" HREF="autoconf_toc.html#TOC66">System Services</A></H2>
+ 
+ <P>
+ The following macros check for operating system services or capabilities.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PATH_X</B>
+ <DD><A NAME="IDX535"></A>
+ <A NAME="IDX536"></A>
+ Try to locate the X Window System include files and libraries.  If the
+ user gave the command line options @option{--x-includes=<VAR>dir</VAR>} and
+ @option{--x-libraries=<VAR>dir</VAR>}, use those directories.  If either or
+ both were not given, get the missing values by running <CODE>xmkmf</CODE> on a
+ trivial <TT>`Imakefile'</TT> and examining the <TT>`Makefile'</TT> that it
+ produces.  If that fails (such as if <CODE>xmkmf</CODE> is not present), look
+ for them in several directories where they often reside.  If either
+ method is successful, set the shell variables <CODE>x_includes</CODE> and
+ <CODE>x_libraries</CODE> to their locations, unless they are in directories
+ the compiler searches by default.
+ 
+ 
+ <P>
+ If both methods fail, or the user gave the command line option
+ @option{--without-x}, set the shell variable <CODE>no_x</CODE> to <SAMP>`yes'</SAMP>;
+ otherwise set it to the empty string.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PATH_XTRA</B>
+ <DD><A NAME="IDX537"></A>
+ <A NAME="IDX538"></A>
+ <A NAME="IDX539"></A>
+ <A NAME="IDX540"></A>
+ <A NAME="IDX541"></A>
+ <A NAME="IDX542"></A>
+ <A NAME="IDX543"></A>
+ An enhanced version of <CODE>AC_PATH_X</CODE>.  It adds the C compiler flags
+ that X needs to output variable <CODE>X_CFLAGS</CODE>, and the X linker flags
+ to <CODE>X_LIBS</CODE>.  Define <CODE>X_DISPLAY_MISSING</CODE> if X is not
+ available.
+ 
+ 
+ <P>
+ This macro also checks for special libraries that some systems need in
+ order to compile X programs.  It adds any that the system needs to
+ output variable <CODE>X_EXTRA_LIBS</CODE>.  And it checks for special X11R6
+ libraries that need to be linked with before @option{-lX11}, and adds
+ any found to the output variable <CODE>X_PRE_LIBS</CODE>.
+ 
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_INTERPRETER</B>
+ <DD><A NAME="IDX544"></A>
+ <A NAME="IDX545"></A>
+ Check whether the system supports starting scripts with a line of the
+ form <SAMP>`#! /bin/csh'</SAMP> to select the interpreter to use for the script.
+ After running this macro, shell code in @command{configure.ac} can check
+ the shell variable <CODE>interpval</CODE>; it will be set to <SAMP>`yes'</SAMP>
+ if the system supports <SAMP>`#!'</SAMP>, <SAMP>`no'</SAMP> if not.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_LARGEFILE</B>
+ <DD><A NAME="IDX546"></A>
+ <A NAME="IDX547"></A>
+ <A NAME="IDX548"></A>
+ <A NAME="IDX549"></A>
+ <A NAME="IDX550"></A>
+ Arrange for
+ @href{http://www.sas.com/standards/large.file/x_open.20Mar96.html,
+ large-file support}.  On some hosts, one must use special compiler
+ options to build programs that can access large files.  Append any such
+ options to the output variable <CODE>CC</CODE>.  Define
+ <CODE>_FILE_OFFSET_BITS</CODE> and <CODE>_LARGE_FILES</CODE> if necessary.
+ 
+ 
+ <P>
+ Large-file support can be disabled by configuring with the
+ @option{--disable-largefile} option.
+ 
+ 
+ <P>
+ If you use this macro, check that your program works even when
+ <CODE>off_t</CODE> is longer than <CODE>long</CODE>, since this is common when
+ large-file support is enabled.  For example, it is not correct to print
+ an arbitrary <CODE>off_t</CODE> value <CODE>X</CODE> with <CODE>printf ("%ld",
+ (long) X)</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_LONG_FILE_NAMES</B>
+ <DD><A NAME="IDX551"></A>
+ <A NAME="IDX552"></A>
+ <A NAME="IDX553"></A>
+ If the system supports file names longer than 14 characters, define
+ <CODE>HAVE_LONG_FILE_NAMES</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_POSIX_TERMIOS</B>
+ <DD><A NAME="IDX554"></A>
+ <A NAME="IDX555"></A>
+ <A NAME="IDX556"></A>
+ <A NAME="IDX557"></A>
+ Check to see if POSIX termios headers and functions are available on the
+ system.  If so, set the shell variable <CODE>am_cv_sys_posix_termios</CODE> to
+ <SAMP>`yes'</SAMP>.  If not, set the variable to <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC67" HREF="autoconf_toc.html#TOC67">UNIX Variants</A></H2>
+ 
+ <P>
+ The following macros check for certain operating systems that need
+ special treatment for some programs, due to exceptional oddities in
+ their header files or libraries.  These macros are warts; they will be
+ replaced by a more systematic approach, based on the functions they make
+ available or the environments they provide.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_AIX</B>
+ <DD><A NAME="IDX558"></A>
+ <A NAME="IDX559"></A>
+ <A NAME="IDX560"></A>
+ If on AIX, define <CODE>_ALL_SOURCE</CODE>.  Allows the use of some BSD
+ functions.  Should be called before any macros that run the C compiler.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ISC_POSIX</B>
+ <DD><A NAME="IDX561"></A>
+ <A NAME="IDX562"></A>
+ <A NAME="IDX563"></A>
+ For INTERACTIVE UNIX (ISC), add @option{-lcposix} to output
+ variable <CODE>LIBS</CODE> if necessary for POSIX facilities.  Call this
+ after <CODE>AC_PROG_CC</CODE> and before any other macros that use POSIX
+ interfaces.  INTERACTIVE UNIX is no longer sold, and Sun says that
+ they will drop support for it on 2006-07-23, so this macro is becoming
+ obsolescent.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MINIX</B>
+ <DD><A NAME="IDX564"></A>
+ <A NAME="IDX565"></A>
+ <A NAME="IDX566"></A>
+ <A NAME="IDX567"></A>
+ <A NAME="IDX568"></A>
+ If on Minix, define <CODE>_MINIX</CODE> and <CODE>_POSIX_SOURCE</CODE> and define
+ <CODE>_POSIX_1_SOURCE</CODE> to be 2.  This allows the use of POSIX
+ facilities.  Should be called before any macros that run the C compiler.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC68" HREF="autoconf_toc.html#TOC68">Writing Tests</A></H1>
+ 
+ <P>
+ If the existing feature tests don't do something you need, you have to
+ write new ones.  These macros are the building blocks.  They provide
+ ways for other macros to check whether various kinds of features are
+ available and report the results.
+ 
+ 
+ <P>
+ This chapter contains some suggestions and some of the reasons why the
+ existing tests are written the way they are.  You can also learn a lot
+ about how to write Autoconf tests by looking at the existing ones.  If
+ something goes wrong in one or more of the Autoconf tests, this
+ information can help you understand the assumptions behind them, which
+ might help you figure out how to best solve the problem.
+ 
+ 
+ <P>
+ These macros check the output of the C compiler system.  They do
+ not cache the results of their tests for future use (see section <A HREF="autoconf.html#SEC82">Caching Results</A>), because they don't know enough about the information they are
+ checking for to generate a cache variable name.  They also do not print
+ any messages, for the same reason.  The checks for particular kinds of C
+ features call these macros and do cache their results and print messages
+ about what they're checking for.
+ 
+ 
+ <P>
+ When you write a feature test that could be applicable to more than one
+ software package, the best thing to do is encapsulate it in a new macro.
+ See section <A HREF="autoconf.html#SEC101">Writing Autoconf Macros</A>, for how to do that.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC69" HREF="autoconf_toc.html#TOC69">Examining Declarations</A></H2>
+ 
+ <P>
+ The macro <CODE>AC_TRY_CPP</CODE> is used to check whether particular header
+ files exist.  You can check for one at a time, or more than one if you
+ need several header files to all exist for some purpose.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TRY_CPP</B> <I>(<VAR>input</VAR>, @ovar{action-if-true}, @ovar{action-if-false})</I>
+ <DD><A NAME="IDX569"></A>
+ <A NAME="IDX570"></A>
+ If the preprocessor produces no error messages while processing the
+ <VAR>input</VAR> (typically includes), run shell commands
+ <VAR>action-if-true</VAR>.  Otherwise run shell commands
+ <VAR>action-if-false</VAR>.  Beware that <VAR>input</VAR> is double quoted.  Shell
+ variable, back quote, and backslash substitutions are performed on
+ <VAR>input</VAR>.
+ 
+ 
+ <P>
+ This macro uses <CODE>CPPFLAGS</CODE>, but not <CODE>CFLAGS</CODE>, because
+ @option{-g}, @option{-O}, etc. are not valid options to many C
+ preprocessors.
+ </DL>
+ 
+ 
+ <P>
+ Here is how to find out whether a header file contains a particular
+ declaration, such as a typedef, a structure, a structure member, or a
+ function.  Use <CODE>AC_EGREP_HEADER</CODE> instead of running <CODE>grep</CODE>
+ directly on the header file; on some systems the symbol might be defined
+ in another header file that the file you are checking <SAMP>`#include'</SAMP>s.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_EGREP_HEADER</B> <I>(<VAR>pattern</VAR>, <VAR>header-file</VAR>, <VAR>action-if-found</VAR>, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX571"></A>
+ <A NAME="IDX572"></A>
+ If the output of running the preprocessor on the system header file
+ <VAR>header-file</VAR> matches the <CODE>egrep</CODE> regular expression
+ <VAR>pattern</VAR>, execute shell commands <VAR>action-if-found</VAR>, otherwise
+ execute <VAR>action-if-not-found</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ To check for C preprocessor symbols, either defined by header files or
+ predefined by the C preprocessor, use <CODE>AC_EGREP_CPP</CODE>.  Here is an
+ example of the latter:
+ 
+ 
+ 
+ <PRE>
+ AC_EGREP_CPP(yes,
+ [#ifdef _AIX
+   yes
+ #endif
+ ], is_aix=yes, is_aix=no)
+ </PRE>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_EGREP_CPP</B> <I>(<VAR>pattern</VAR>, <VAR>program</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX573"></A>
+ <A NAME="IDX574"></A>
+ <VAR>program</VAR> is the text of a C or C++ program, on which shell
+ variable, back quote, and backslash substitutions are performed.  If the
+ output of running the preprocessor on <VAR>program</VAR> matches the
+ <CODE>egrep</CODE> regular expression <VAR>pattern</VAR>, execute shell commands
+ <VAR>action-if-found</VAR>, otherwise execute <VAR>action-if-not-found</VAR>.
+ 
+ 
+ <P>
+ This macro calls <CODE>AC_PROG_CPP</CODE> or <CODE>AC_PROG_CXXCPP</CODE> (depending
+ on which language is current, see section <A HREF="autoconf.html#SEC78">Language Choice</A>), if it hasn't
+ been called already.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC70" HREF="autoconf_toc.html#TOC70">Examining Syntax</A></H2>
+ 
+ <P>
+ To check for a syntax feature of the C, C++ or Fortran 77 compiler, such
+ as whether it recognizes a certain keyword, use <CODE>AC_TRY_COMPILE</CODE> to
+ try to compile a small program that uses that feature.  You can also use
+ it to check for structures and structure members that are not present on
+ all systems.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TRY_COMPILE</B> <I>(<VAR>includes</VAR>, <VAR>function-body</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX575"></A>
+ <A NAME="IDX576"></A>
+ Create a test program in the current language (see section <A HREF="autoconf.html#SEC78">Language Choice</A>)
+ to see whether a function whose body consists of <VAR>function-body</VAR> can
+ be compiled.  If the file compiles successfully, run shell commands
+ <VAR>action-if-found</VAR>, otherwise run <VAR>action-if-not-found</VAR>.
+ 
+ 
+ <P>
+ This macro double quotes both <VAR>includes</VAR> and <VAR>function-body</VAR>.
+ 
+ 
+ <P>
+ For C and C++, <VAR>includes</VAR> is any <CODE>#include</CODE> statements needed
+ by the code in <VAR>function-body</VAR> (<VAR>includes</VAR> will be ignored if
+ the currently selected language is Fortran 77).  This macro also uses
+ <CODE>CFLAGS</CODE> or <CODE>CXXFLAGS</CODE> if either C or C++ is the currently
+ selected language, as well as <CODE>CPPFLAGS</CODE>, when compiling.  If
+ Fortran 77 is the currently selected language then <CODE>FFLAGS</CODE> will be
+ used when compiling.
+ 
+ 
+ <P>
+ This macro does not try to link; use <CODE>AC_TRY_LINK</CODE> if you need to
+ do that (see section <A HREF="autoconf.html#SEC71">Examining Libraries</A>).
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC71" HREF="autoconf_toc.html#TOC71">Examining Libraries</A></H2>
+ 
+ <P>
+ To check for a library, a function, or a global variable, Autoconf
+ @command{configure} scripts try to compile and link a small program that
+ uses it.  This is unlike Metaconfig, which by default uses <CODE>nm</CODE>
+ or <CODE>ar</CODE> on the C library to try to figure out which functions are
+ available.  Trying to link with the function is usually a more reliable
+ approach because it avoids dealing with the variations in the options
+ and output formats of <CODE>nm</CODE> and <CODE>ar</CODE> and in the location of the
+ standard libraries.  It also allows configuring for cross-compilation or
+ checking a function's runtime behavior if needed.  On the other hand, it
+ can be slower than scanning the libraries once.
+ 
+ 
+ <P>
+ A few systems have linkers that do not return a failure exit status when
+ there are unresolved functions in the link.  This bug makes the
+ configuration scripts produced by Autoconf unusable on those systems.
+ However, some of them can be given options that make the exit status
+ correct.  This is a problem that Autoconf does not currently handle
+ automatically.  If users encounter this problem, they might be able to
+ solve it by setting <CODE>LDFLAGS</CODE> in the environment to pass whatever
+ options the linker needs (for example, @option{-Wl,-dn} on @sc{mips
+ risc/os}).
+ 
+ 
+ <P>
+ <CODE>AC_TRY_LINK</CODE> is used to compile test programs to test for
+ functions and global variables.  It is also used by <CODE>AC_CHECK_LIB</CODE>
+ to check for libraries (see section <A HREF="autoconf.html#SEC43">Library Files</A>), by adding the library being
+ checked for to <CODE>LIBS</CODE> temporarily and trying to link a small
+ program.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TRY_LINK</B> <I>(<VAR>includes</VAR>, <VAR>function-body</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX577"></A>
+ <A NAME="IDX578"></A>
+ Depending on the current language (see section <A HREF="autoconf.html#SEC78">Language Choice</A>), create a
+ test program to see whether a function whose body consists of
+ <VAR>function-body</VAR> can be compiled and linked.  If the file compiles
+ and links successfully, run shell commands <VAR>action-if-found</VAR>,
+ otherwise run <VAR>action-if-not-found</VAR>.
+ 
+ 
+ <P>
+ This macro double quotes both <VAR>includes</VAR> and <VAR>function-body</VAR>.
+ 
+ 
+ <P>
+ For C and C++, <VAR>includes</VAR> is any <CODE>#include</CODE> statements needed
+ by the code in <VAR>function-body</VAR> (<VAR>includes</VAR> will be ignored if
+ the currently selected language is Fortran 77).  This macro also uses
+ <CODE>CFLAGS</CODE> or <CODE>CXXFLAGS</CODE> if either C or C++ is the currently
+ selected language, as well as <CODE>CPPFLAGS</CODE>, when compiling.  If
+ Fortran 77 is the currently selected language then <CODE>FFLAGS</CODE> will be
+ used when compiling.  However, both <CODE>LDFLAGS</CODE> and <CODE>LIBS</CODE> will
+ be used during linking in all cases.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TRY_LINK_FUNC</B> <I>(<VAR>function</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX579"></A>
+ <A NAME="IDX580"></A>
+ Depending on the current language (see section <A HREF="autoconf.html#SEC78">Language Choice</A>), create a
+ test program to see whether a program whose body consists of
+ a prototype of and a call to <VAR>function</VAR> can be compiled and linked.
+ 
+ 
+ <P>
+ If the file compiles and links successfully, run shell commands
+ <VAR>action-if-found</VAR>, otherwise run <VAR>action-if-not-found</VAR>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC72" HREF="autoconf_toc.html#TOC72">Checking Run Time Behavior</A></H2>
+ 
+ <P>
+ Sometimes you need to find out how a system performs at run time, such
+ as whether a given function has a certain capability or bug.  If you
+ can, make such checks when your program runs instead of when it is
+ configured.  You can check for things like the machine's endianness when
+ your program initializes itself.
+ 
+ 
+ <P>
+ If you really need to test for a run-time behavior while configuring,
+ you can write a test program to determine the result, and compile and
+ run it using <CODE>AC_TRY_RUN</CODE>.  Avoid running test programs if
+ possible, because this prevents people from configuring your package for
+ cross-compiling.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC73" HREF="autoconf_toc.html#TOC73">Running Test Programs</A></H3>
+ 
+ <P>
+ Use the following macro if you need to test run-time behavior of the
+ system while configuring.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TRY_RUN</B> <I>(<VAR>program</VAR>, @ovar{action-if-true}, @ovar{action-if-false}, @ovar{action-if-cross-compiling})</I>
+ <DD><A NAME="IDX581"></A>
+ <A NAME="IDX582"></A>
+ If <VAR>program</VAR> compiles and links successfully and returns an exit
+ status of 0 when executed, run shell commands <VAR>action-if-true</VAR>.
+ Otherwise, run shell commands <VAR>action-if-false</VAR>.
+ 
+ 
+ <P>
+ This macro double quotes <VAR>program</VAR>, the text of a program in the
+ current language (see section <A HREF="autoconf.html#SEC78">Language Choice</A>), on which shell variable and
+ back quote substitutions are performed.  This macro uses <CODE>CFLAGS</CODE>
+ or <CODE>CXXFLAGS</CODE>, <CODE>CPPFLAGS</CODE>, <CODE>LDFLAGS</CODE>, and <CODE>LIBS</CODE>
+ when compiling.
+ 
+ 
+ <P>
+ If the C compiler being used does not produce executables that run on
+ the system where @command{configure} is being run, then the test program is
+ not run.  If the optional shell commands <VAR>action-if-cross-compiling</VAR>
+ are given, they are run instead.  Otherwise, @command{configure} prints
+ an error message and exits.
+ 
+ 
+ <P>
+ In the <VAR>action-if-false</VAR> section, the exit status of the program is
+ available in the shell variable <SAMP>`$?'</SAMP>, but be very careful to limit
+ yourself to positive values smaller than 127; bigger values shall be
+ saved into a file by the <VAR>program</VAR>.  Note also that you have simply
+ no guarantee that this exit status is issued by the <VAR>program</VAR>, or by
+ the failure of its compilation.  In other words, use this feature if
+ sadist only, it was reestablished because the Autoconf maintainers grew
+ tired of receiving "bug reports".
+ </DL>
+ 
+ 
+ <P>
+ Try to provide a pessimistic default value to use when cross-compiling
+ makes run-time tests impossible.  You do this by passing the optional
+ last argument to <CODE>AC_TRY_RUN</CODE>.  @command{autoconf} prints a warning
+ message when creating @command{configure} each time it encounters a call to
+ <CODE>AC_TRY_RUN</CODE> with no <VAR>action-if-cross-compiling</VAR> argument
+ given.  You may ignore the warning, though users will not be able to
+ configure your package for cross-compiling.  A few of the macros
+ distributed with Autoconf produce this warning message.
+ 
+ 
+ <P>
+ To configure for cross-compiling you can also choose a value for those
+ parameters based on the canonical system name (see section <A HREF="autoconf.html#SEC121">Manual Configuration</A>).  Alternatively, set up a test results cache file with
+ the correct values for the host system (see section <A HREF="autoconf.html#SEC82">Caching Results</A>).
+ 
+ 
+ <P>
+ To provide a default for calls of <CODE>AC_TRY_RUN</CODE> that are embedded in
+ other macros, including a few of the ones that come with Autoconf, you
+ can call <CODE>AC_PROG_CC</CODE> before running them.  Then, if the shell
+ variable <CODE>cross_compiling</CODE> is set to <SAMP>`yes'</SAMP>, use an alternate
+ method to get the results instead of calling the macros.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC74" HREF="autoconf_toc.html#TOC74">Guidelines for Test Programs</A></H3>
+ 
+ <P>
+ Test programs should not write anything to the standard output.  They
+ should return 0 if the test succeeds, nonzero otherwise, so that success
+ can be distinguished easily from a core dump or other failure;
+ segmentation violations and other failures produce a nonzero exit
+ status.  Test programs should <CODE>exit</CODE>, not <CODE>return</CODE>, from
+ <CODE>main</CODE>, because on some systems (old Suns, at least) the argument
+ to <CODE>return</CODE> in <CODE>main</CODE> is ignored.
+ 
+ 
+ <P>
+ Test programs can use <CODE>#if</CODE> or <CODE>#ifdef</CODE> to check the values of
+ preprocessor macros defined by tests that have already run.  For
+ example, if you call <CODE>AC_HEADER_STDC</CODE>, then later on in
+ <TT>`configure.ac'</TT> you can have a test program that includes an
+ ANSI C header file conditionally:
+ 
+ 
+ 
+ <PRE>
+ #if STDC_HEADERS
+ # include &#60;stdlib.h&#62;
+ #endif
+ </PRE>
+ 
+ <P>
+ If a test program needs to use or create a data file, give it a name
+ that starts with <TT>`conftest'</TT>, such as <TT>`conftest.data'</TT>.  The
+ @command{configure} script cleans up by running <SAMP>`rm -rf conftest*'</SAMP>
+ after running test programs and if the script is interrupted.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC75" HREF="autoconf_toc.html#TOC75">Test Functions</A></H3>
+ 
+ <P>
+ Function declarations in test programs should have a prototype
+ conditionalized for C++.  In practice, though, test programs rarely need
+ functions that take arguments.
+ 
+ 
+ 
+ <PRE>
+ #ifdef __cplusplus
+ foo (int i)
+ #else
+ foo (i) int i;
+ #endif
+ </PRE>
+ 
+ <P>
+ Functions that test programs declare should also be conditionalized for
+ C++, which requires <SAMP>`extern "C"'</SAMP> prototypes.  Make sure to not
+ include any header files containing clashing prototypes.
+ 
+ 
+ 
+ <PRE>
+ #ifdef __cplusplus
+ extern "C" void *malloc (size_t);
+ #else
+ char *malloc ();
+ #endif
+ </PRE>
+ 
+ <P>
+ If a test program calls a function with invalid parameters (just to see
+ whether it exists), organize the program to ensure that it never invokes
+ that function.  You can do this by calling it in another function that is
+ never invoked.  You can't do it by putting it after a call to
+ <CODE>exit</CODE>, because GCC version 2 knows that <CODE>exit</CODE> never returns
+ and optimizes out any code that follows it in the same block.
+ 
+ 
+ <P>
+ If you include any header files, make sure to call the functions
+ relevant to them with the correct number of arguments, even if they are
+ just 0, to avoid compilation errors due to prototypes.  GCC version 2
+ has internal prototypes for several functions that it automatically
+ inlines; for example, <CODE>memcpy</CODE>.  To avoid errors when checking for
+ them, either pass them the correct number of arguments or redeclare them
+ with a different return type (such as <CODE>char</CODE>).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC76" HREF="autoconf_toc.html#TOC76">Systemology</A></H2>
+ 
+ <P>
+ This section aims at presenting some systems and pointers to
+ documentation.  It may help you addressing particular problems reported
+ by users.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>QNX 4.25
+ <DD>
+ <A NAME="IDX583"></A>
+ QNX is a realtime operating system running on Intel architecture
+ meant to be scalable from the small embedded systems to hundred
+ processor super-computer.  It claims to be POSIX certified. More
+ information is available on the @href{www.qnx.com, QNX home page},
+ including the @href{http://support.qnx.com/support/docs/qnx4/, QNX
+ man pages}.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC77" HREF="autoconf_toc.html#TOC77">Multiple Cases</A></H2>
+ 
+ <P>
+ Some operations are accomplished in several possible ways, depending on
+ the UNIX variant.  Checking for them essentially requires a "case
+ statement".  Autoconf does not directly provide one; however, it is
+ easy to simulate by using a shell variable to keep track of whether a
+ way to perform the operation has been found yet.
+ 
+ 
+ <P>
+ Here is an example that uses the shell variable <CODE>fstype</CODE> to keep
+ track of whether the remaining cases need to be checked.
+ 
+ 
+ 
+ <PRE>
+ AC_MSG_CHECKING([how to get file system type])
+ fstype=no
+ # The order of these tests is important.
+ AC_TRY_CPP([#include &#60;sys/statvfs.h&#62;
+ #include &#60;sys/fstyp.h&#62;],
+            [AC_DEFINE(FSTYPE_STATVFS) fstype=SVR4])
+ if test $fstype = no; then
+   AC_TRY_CPP([#include &#60;sys/statfs.h&#62;
+ #include &#60;sys/fstyp.h&#62;],
+              [AC_DEFINE(FSTYPE_USG_STATFS) fstype=SVR3])
+ fi
+ if test $fstype = no; then
+   AC_TRY_CPP([#include &#60;sys/statfs.h&#62;
+ #include &#60;sys/vmount.h&#62;],
+              [AC_DEFINE(FSTYPE_AIX_STATFS) fstype=AIX])
+ fi
+ # (more cases omitted here)
+ AC_MSG_RESULT([$fstype])
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC78" HREF="autoconf_toc.html#TOC78">Language Choice</A></H2>
+ <P>
+ <A NAME="IDX584"></A>
+ 
+ 
+ <P>
+ Autoconf-generated @command{configure} scripts check for the C compiler and
+ its features by default.  Packages that use other programming languages
+ (maybe more than one, e.g. C and C++) need to test features of the
+ compilers for the respective languages.  The following macros determine
+ which programming language is used in the subsequent tests in
+ <TT>`configure.ac'</TT>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG</B> <I>(<VAR>language</VAR>)</I>
+ <DD><A NAME="IDX585"></A>
+ Do compilation tests using the compiler, preprocessor and file
+ extensions for the specified <VAR>language</VAR>.
+ 
+ 
+ <P>
+ Supported languages are:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`C'</SAMP>
+ <DD>
+ Do compilation tests using <CODE>CC</CODE> and <CODE>CPP</CODE> and use extension
+ <TT>`.c'</TT> for test programs.
+ 
+ <DT><SAMP>`C++'</SAMP>
+ <DD>
+ Do compilation tests using <CODE>CXX</CODE> and <CODE>CXXCPP</CODE> and use
+ extension <TT>`.C'</TT> for test programs.
+ 
+ <DT><SAMP>`Fortran 77'</SAMP>
+ <DD>
+ Do compilation tests using <CODE>F77</CODE> and use extension <TT>`.f'</TT> for
+ test programs.
+ </DL>
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_PUSH</B> <I>(<VAR>language</VAR>)</I>
+ <DD><A NAME="IDX586"></A>
+ <A NAME="IDX587"></A>
+ Remember the current language (as set by <CODE>AC_LANG</CODE>) on a stack, and
+ then select the <VAR>language</VAR>.  Use this macro and <CODE>AC_LANG_POP</CODE>
+ in macros that need to temporarily switch to a particular language.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_POP</B> <I>(@ovar{language})</I>
+ <DD><A NAME="IDX588"></A>
+ <A NAME="IDX589"></A>
+ Select the language that is saved on the top of the stack, as set by
+ <CODE>AC_LANG_PUSH</CODE>, and remove it from the stack.
+ 
+ 
+ <P>
+ If given, <VAR>language</VAR> specifies the language we just <EM>quit</EM>.  It
+ is a good idea to specify it when it's known (which should be the
+ case...), since Autoconf will detect inconsistencies.
+ 
+ 
+ 
+ <PRE>
+ AC_LANG_PUSH(Fortran 77)
+ # Perform some tests on Fortran 77.
+ # ...
+ AC_LANG_POP(Fortran 77)
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_REQUIRE_CPP</B>
+ <DD><A NAME="IDX590"></A>
+ <A NAME="IDX591"></A>
+ Ensure that whichever preprocessor would currently be used for tests has
+ been found.  Calls <CODE>AC_REQUIRE</CODE> (see section <A HREF="autoconf.html#SEC106">Prerequisite Macros</A>) with an
+ argument of either <CODE>AC_PROG_CPP</CODE> or <CODE>AC_PROG_CXXCPP</CODE>,
+ depending on which language is current.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC79" HREF="autoconf_toc.html#TOC79">Results of Tests</A></H1>
+ 
+ <P>
+ Once @command{configure} has determined whether a feature exists, what can
+ it do to record that information?  There are four sorts of things it can
+ do: define a C preprocessor symbol, set a variable in the output files,
+ save the result in a cache file for future @command{configure} runs, and
+ print a message letting the user know the result of the test.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC80" HREF="autoconf_toc.html#TOC80">Defining C Preprocessor Symbols</A></H2>
+ 
+ <P>
+ A common action to take in response to a feature test is to define a C
+ preprocessor symbol indicating the results of the test.  That is done by
+ calling <CODE>AC_DEFINE</CODE> or <CODE>AC_DEFINE_UNQUOTED</CODE>.
+ 
+ 
+ <P>
+ By default, <CODE>AC_OUTPUT</CODE> places the symbols defined by these macros
+ into the output variable <CODE>DEFS</CODE>, which contains an option
+ @option{-D<VAR>symbol</VAR>=<VAR>value</VAR>} for each symbol defined.  Unlike in
+ Autoconf version 1, there is no variable <CODE>DEFS</CODE> defined while
+ @command{configure} is running.  To check whether Autoconf macros have
+ already defined a certain C preprocessor symbol, test the value of the
+ appropriate cache variable, as in this example:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_FUNC(vprintf, [AC_DEFINE(HAVE_VPRINTF)])
+ if test "$ac_cv_func_vprintf" != yes; then
+   AC_CHECK_FUNC(_doprnt, [AC_DEFINE(HAVE_DOPRNT)])
+ fi
+ </PRE>
+ 
+ <P>
+ If <CODE>AC_CONFIG_HEADERS</CODE> has been called, then instead of creating
+ <CODE>DEFS</CODE>, <CODE>AC_OUTPUT</CODE> creates a header file by substituting the
+ correct values into <CODE>#define</CODE> statements in a template file.
+ See section <A HREF="autoconf.html#SEC27">Configuration Header Files</A>, for more information about this kind of
+ output.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DEFINE</B> <I>(<VAR>variable</VAR>, @ovar{value}, @ovar{description})</I>
+ <DD><A NAME="IDX592"></A>
+ <A NAME="IDX593"></A>
+ Define C preprocessor variable <VAR>variable</VAR>.  If <VAR>value</VAR> is given,
+ set <VAR>variable</VAR> to that value (verbatim), otherwise set it to 1.
+ <VAR>value</VAR> should not contain literal newlines, and if you are not
+ using <CODE>AC_CONFIG_HEADERS</CODE> it should not contain any <SAMP>`#'</SAMP>
+ characters, as <CODE>make</CODE> tends to eat them.  To use a shell variable
+ (which you need to do in order to define a value containing the M4 quote
+ characters <SAMP>`['</SAMP> or <SAMP>`]'</SAMP>), use <CODE>AC_DEFINE_UNQUOTED</CODE> instead.
+ <VAR>description</VAR> is only useful if you are using
+ <CODE>AC_CONFIG_HEADERS</CODE>.  In this case, <VAR>description</VAR> is put into
+ the generated <TT>`config.h.in'</TT> as the comment before the macro define.
+ The following example defines the C preprocessor variable
+ <CODE>EQUATION</CODE> to be the string constant <SAMP>`"$a &#62; $b"'</SAMP>:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFINE(EQUATION, "$a &#62; $b")
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DEFINE_UNQUOTED</B> <I>(<VAR>variable</VAR>, @ovar{value}, @ovar{description})</I>
+ <DD><A NAME="IDX594"></A>
+ <A NAME="IDX595"></A>
+ Like <CODE>AC_DEFINE</CODE>, but three shell expansions are
+ performed--once--on <VAR>variable</VAR> and <VAR>value</VAR>: variable expansion
+ (<SAMP>`$'</SAMP>), command substitution (<SAMP>``'</SAMP>), and backslash escaping
+ (<SAMP>`\'</SAMP>).  Single and double quote characters in the value have no
+ special meaning.  Use this macro instead of <CODE>AC_DEFINE</CODE> when
+ <VAR>variable</VAR> or <VAR>value</VAR> is a shell variable.  Examples:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFINE_UNQUOTED(config_machfile, "$machfile")
+ AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups)
+ AC_DEFINE_UNQUOTED($ac_tr_hdr)
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ Due to the syntactical bizarreness of the Bourne shell, do not use
+ semicolons to separate <CODE>AC_DEFINE</CODE> or <CODE>AC_DEFINE_UNQUOTED</CODE>
+ calls from other macro calls or shell code; that can cause syntax errors
+ in the resulting @command{configure} script.  Use either spaces or
+ newlines.  That is, do this:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4) LIBS="$LIBS -lelf"])
+ </PRE>
+ 
+ <P>
+ or this:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER(elf.h,
+  [AC_DEFINE(SVR4)
+   LIBS="$LIBS -lelf"])
+ </PRE>
+ 
+ <P>
+ instead of this:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_HEADER(elf.h, [AC_DEFINE(SVR4); LIBS="$LIBS -lelf"])
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC81" HREF="autoconf_toc.html#TOC81">Setting Output Variables</A></H2>
+ 
+ <P>
+ Another way to record the results of tests is to set <EM>output
+ variables</EM>, which are shell variables whose values are substituted into
+ files that @command{configure} outputs.  The two macros below create new
+ output variables.  See section <A HREF="autoconf.html#SEC23">Preset Output Variables</A>, for a list of output
+ variables that are always available.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SUBST</B> <I>(<VAR>variable</VAR>, @ovar{value})</I>
+ <DD><A NAME="IDX596"></A>
+ <A NAME="IDX597"></A>
+ Create an output variable from a shell variable.  Make <CODE>AC_OUTPUT</CODE>
+ substitute the variable <VAR>variable</VAR> into output files (typically one
+ or more <TT>`Makefile'</TT>s).  This means that <CODE>AC_OUTPUT</CODE> will
+ replace instances of <SAMP>`@<VAR>variable</VAR>@'</SAMP> in input files with the
+ value that the shell variable <VAR>variable</VAR> has when <CODE>AC_OUTPUT</CODE>
+ is called.  This value of <VAR>variable</VAR> should not contain literal
+ newlines.
+ 
+ 
+ <P>
+ If <VAR>value</VAR> is given, in addition assign it to <SAMP>`variable'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SUBST_FILE</B> <I>(<VAR>variable</VAR>)</I>
+ <DD><A NAME="IDX598"></A>
+ <A NAME="IDX599"></A>
+ Another way to create an output variable from a shell variable.  Make
+ <CODE>AC_OUTPUT</CODE> insert (without substitutions) the contents of the file
+ named by shell variable <VAR>variable</VAR> into output files.  This means
+ that <CODE>AC_OUTPUT</CODE> will replace instances of
+ <SAMP>`@<VAR>variable</VAR>@'</SAMP> in output files (such as <TT>`Makefile.in'</TT>)
+ with the contents of the file that the shell variable <VAR>variable</VAR>
+ names when <CODE>AC_OUTPUT</CODE> is called.  Set the variable to
+ <TT>`/dev/null'</TT> for cases that do not have a file to insert.
+ 
+ 
+ <P>
+ This macro is useful for inserting <TT>`Makefile'</TT> fragments containing
+ special dependencies or other <CODE>make</CODE> directives for particular host
+ or target types into <TT>`Makefile'</TT>s.  For example, <TT>`configure.ac'</TT>
+ could contain:
+ 
+ 
+ 
+ <PRE>
+ AC_SUBST_FILE(host_frag)
+ host_frag=$srcdir/conf/sun4.mh
+ </PRE>
+ 
+ <P>
+ and then a <TT>`Makefile.in'</TT> could contain:
+ 
+ 
+ 
+ <PRE>
+ @host_frag@
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <A NAME="IDX600"></A>
+ <A NAME="IDX601"></A>
+ Running @command{configure} in different environments can be extremely
+ dangerous.  If for instance the user runs <SAMP>`CC=bizarre-cc
+ ./configure'</SAMP>, then the cache, <TT>`config.h'</TT> and many other output
+ files will depend upon @command{bizarre-cc} being the C compiler.  If
+ for some reason the user runs @command{/configure} again, or if it is
+ run via <SAMP>`./config.status --recheck'</SAMP>, (See section <A HREF="autoconf.html#SEC26">Automatic Remaking</A>,
+ and see section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>), then the configuration can be
+ inconsistent, composed of results depending upon two different
+ compilers.
+ 
+ 
+ <P>
+ Such variables are named <EM>precious variables</EM>, and can be declared
+ as such by <CODE>AC_ARG_VAR</CODE>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ARG_VAR</B> <I>(<VAR>variable</VAR>, <VAR>description</VAR>)</I>
+ <DD><A NAME="IDX602"></A>
+ <A NAME="IDX603"></A>
+ Declare <VAR>variable</VAR> is a precious variable, and include its
+ <VAR>description</VAR> in the variable section of <SAMP>`./configure --help'</SAMP>.
+ 
+ 
+ <P>
+ Being precious means that
+ 
+ <UL>
+ <LI>
+ 
+ <VAR>variable</VAR> is <CODE>AC_SUBST</CODE>'d.
+ 
+ <LI>
+ 
+ <VAR>variable</VAR> is kept in the cache including if it was not specified on
+ the <SAMP>`./configure'</SAMP> command line.  Indeed, while @command{configure}
+ can notice the definition of <CODE>CC</CODE> in <SAMP>`./configure
+ CC=bizarre-cc'</SAMP>, it is impossible to notice it in <SAMP>`CC=bizarre-cc
+ ./configure'</SAMP>, which, unfortunately, is what most users do.
+ 
+ <LI>
+ 
+ <VAR>variable</VAR> is checked for consistency between two
+ @command{configure} runs.  For instance:
+ 
+ 
+ <PRE>
+ $ <KBD>./configure --silent --config-cache</KBD>
+ $ <KBD>CC=cc ./configure --silent --config-cache</KBD>
+ configure: error: `CC' was not set in the previous run
+ configure: error: changes in the environment can compromise \
+ the build
+ configure: error: run `make distclean' and/or \
+ `rm config.cache' and start over
+ </PRE>
+ 
+ and similarly if the variable is unset, or if its content is changed.
+ 
+ <LI>
+ 
+ <VAR>variable</VAR> is kept during automatic reconfiguration
+ (see section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>) as if it had been passed as a command
+ line argument, including when no cache is used:
+ 
+ 
+ <PRE>
+ $ <KBD>CC=/usr/bin/cc ./configure undeclared_var=raboof --silent</KBD>
+ $ <KBD>./config.status --recheck</KBD>
+ running /bin/sh ./configure undeclared_var=raboof --silent \
+   CC=/usr/bin/cc  --no-create --no-recursion
+ </PRE>
+ 
+ </UL>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC82" HREF="autoconf_toc.html#TOC82">Caching Results</A></H2>
+ <P>
+ <A NAME="IDX604"></A>
+ 
+ 
+ <P>
+ To avoid checking for the same features repeatedly in various
+ @command{configure} scripts (or in repeated runs of one script),
+ @command{configure} can optionally save the results of many checks in a
+ <EM>cache file</EM> (see section <A HREF="autoconf.html#SEC84">Cache Files</A>).  If a @command{configure} script
+ runs with caching enabled and finds a cache file, it reads the results
+ of previous runs from the cache and avoids rerunning those checks.  As a
+ result, @command{configure} can then run much faster than if it had to
+ perform all of the checks every time.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CACHE_VAL</B> <I>(<VAR>cache-id</VAR>, <VAR>commands-to-set-it</VAR>)</I>
+ <DD><A NAME="IDX605"></A>
+ <A NAME="IDX606"></A>
+ Ensure that the results of the check identified by <VAR>cache-id</VAR> are
+ available.  If the results of the check were in the cache file that was
+ read, and @command{configure} was not given the @option{--quiet} or
+ @option{--silent} option, print a message saying that the result was
+ cached; otherwise, run the shell commands <VAR>commands-to-set-it</VAR>.  If
+ the shell commands are run to determine the value, the value will be
+ saved in the cache file just before @command{configure} creates its output
+ files.  See section <A HREF="autoconf.html#SEC83">Cache Variable Names</A>, for how to choose the name of the
+ <VAR>cache-id</VAR> variable.
+ 
+ 
+ <P>
+ The <VAR>commands-to-set-it</VAR> <EM>must have no side effects</EM> except for
+ setting the variable <VAR>cache-id</VAR>, see below.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CACHE_CHECK</B> <I>(<VAR>message</VAR>, <VAR>cache-id</VAR>, <VAR>commands-to-set-it</VAR>)</I>
+ <DD><A NAME="IDX607"></A>
+ <A NAME="IDX608"></A>
+ A wrapper for <CODE>AC_CACHE_VAL</CODE> that takes care of printing the
+ messages.  This macro provides a convenient shorthand for the most
+ common way to use these macros.  It calls <CODE>AC_MSG_CHECKING</CODE> for
+ <VAR>message</VAR>, then <CODE>AC_CACHE_VAL</CODE> with the <VAR>cache-id</VAR> and
+ <VAR>commands</VAR> arguments, and <CODE>AC_MSG_RESULT</CODE> with <VAR>cache-id</VAR>.
+ 
+ 
+ <P>
+ The <VAR>commands-to-set-it</VAR> <EM>must have no side effects</EM> except for
+ setting the variable <VAR>cache-id</VAR>, see below.
+ </DL>
+ 
+ 
+ <P>
+ It is very common to find buggy macros using <CODE>AC_CACHE_VAL</CODE> or
+ <CODE>AC_CACHE_CHECK</CODE>, because people are tempted to call
+ <CODE>AC_DEFINE</CODE> in the <VAR>commands-to-set-it</VAR>. Instead, the code that
+ <EM>follows</EM> the call to <CODE>AC_CACHE_VAL</CODE> should call
+ <CODE>AC_DEFINE</CODE>, by examining the value of the cache variable.  For
+ instance, the following macro is broken:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN([AC_SHELL_TRUE],
+ [AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
+                 [ac_cv_shell_true_works=no
+                  true &#38;&#38; ac_cv_shell_true_works=yes
+                  if test $ac_cv_shell_true_works = yes; then
+                    AC_DEFINE([TRUE_WORKS], 1
+                              [Define if `true(1)' works properly.])
+                  fi])
+ ])
+ </PRE>
+ 
+ <P>
+ This fails if the cache is enabled: the second time this macro is run,
+ <CODE>TRUE_WORKS</CODE> <EM>will not be defined</EM>.  The proper implementation
+ is:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN([AC_SHELL_TRUE],
+ [AC_CACHE_CHECK([whether true(1) works], [ac_cv_shell_true_works],
+                 [ac_cv_shell_true_works=no
+                  true &#38;&#38; ac_cv_shell_true_works=yes])
+  if test $ac_cv_shell_true_works = yes; then
+    AC_DEFINE([TRUE_WORKS], 1
+              [Define if `true(1)' works properly.])
+  fi
+ ])
+ </PRE>
+ 
+ <P>
+ Also, <VAR>commands-to-set-it</VAR> should not print any messages, for
+ example with <CODE>AC_MSG_CHECKING</CODE>; do that before calling
+ <CODE>AC_CACHE_VAL</CODE>, so the messages are printed regardless of whether
+ the results of the check are retrieved from the cache or determined by
+ running the shell commands.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC83" HREF="autoconf_toc.html#TOC83">Cache Variable Names</A></H3>
+ <P>
+ <A NAME="IDX609"></A>
+ 
+ 
+ <P>
+ The names of cache variables should have the following format:
+ 
+ 
+ 
+ <PRE>
+ <VAR>package-prefix</VAR>_cv_<VAR>value-type</VAR>_<VAR>specific-value</VAR>_@ovar{additional-options}
+ </PRE>
+ 
+ <P>
+ for example, <SAMP>`ac_cv_header_stat_broken'</SAMP> or
+ <SAMP>`ac_cv_prog_gcc_traditional'</SAMP>.  The parts of the variable name are:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><VAR>package-prefix</VAR>
+ <DD>
+ An abbreviation for your package or organization; the same prefix you
+ begin local Autoconf macros with, except lowercase by convention.
+ For cache values used by the distributed Autoconf macros, this value is
+ <SAMP>`ac'</SAMP>.
+ 
+ <DT><CODE>_cv_</CODE>
+ <DD>
+ Indicates that this shell variable is a cache value. This string
+ <EM>must</EM> be present in the variable name, including the leading
+ underscore.
+ 
+ <DT><VAR>value-type</VAR>
+ <DD>
+ A convention for classifying cache values, to produce a rational naming
+ system.  The values used in Autoconf are listed in section <A HREF="autoconf.html#SEC103">Macro Names</A>.
+ 
+ <DT><VAR>specific-value</VAR>
+ <DD>
+ Which member of the class of cache values this test applies to.
+ For example, which function (<SAMP>`alloca'</SAMP>), program (<SAMP>`gcc'</SAMP>), or
+ output variable (<SAMP>`INSTALL'</SAMP>).
+ 
+ <DT><VAR>additional-options</VAR>
+ <DD>
+ Any particular behavior of the specific member that this test applies to.
+ For example, <SAMP>`broken'</SAMP> or <SAMP>`set'</SAMP>.  This part of the name may
+ be omitted if it does not apply.
+ </DL>
+ 
+ <P>
+ The values assigned to cache variables may not contain newlines.
+ Usually, their values will be boolean (<SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>) or the
+ names of files or functions; so this is not an important restriction.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC84" HREF="autoconf_toc.html#TOC84">Cache Files</A></H3>
+ 
+ <P>
+ A cache file is a shell script that caches the results of configure
+ tests run on one system so they can be shared between configure scripts
+ and configure runs.  It is not useful on other systems.  If its contents
+ are invalid for some reason, the user may delete or edit it.
+ 
+ 
+ <P>
+ By default, @command{configure} uses no cache file (technically, it uses
+ @option{--cache-file=/dev/null}), to avoid problems caused by accidental
+ use of stale cache files.
+ 
+ 
+ <P>
+ To enable caching, @command{configure} accepts @option{--config-cache} (or
+ @option{-C}) to cache results in the file <TT>`config.cache'</TT>.
+ Alternatively, @option{--cache-file=<VAR>file</VAR>} specifies that
+ <VAR>file</VAR> be the cache file.  The cache file is created if it does not
+ exist already.  When @command{configure} calls @command{configure} scripts in
+ subdirectories, it uses the @option{--cache-file} argument so that they
+ share the same cache.  See section <A HREF="autoconf.html#SEC33">Configuring Other Packages in Subdirectories</A>, for information on
+ configuring subdirectories with the <CODE>AC_CONFIG_SUBDIRS</CODE> macro.
+ 
+ 
+ <P>
+ <TT>`config.status'</TT> only pays attention to the cache file if it is
+ given the @option{--recheck} option, which makes it rerun
+ @command{configure}.
+ 
+ 
+ <P>
+ It is wrong to try to distribute cache files for particular system types.
+ There is too much room for error in doing that, and too much
+ administrative overhead in maintaining them.  For any features that
+ can't be guessed automatically, use the standard method of the canonical
+ system type and linking files (see section <A HREF="autoconf.html#SEC121">Manual Configuration</A>).
+ 
+ 
+ <P>
+ The site initialization script can specify a site-wide cache file to
+ use, instead of the usual per-program cache.  In this case, the cache
+ file will gradually accumulate information whenever someone runs a new
+ @command{configure} script.  (Running @command{configure} merges the new cache
+ results with the existing cache file.)  This may cause problems,
+ however, if the system configuration (e.g. the installed libraries or
+ compilers) changes and the stale cache file is not deleted.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC85" HREF="autoconf_toc.html#TOC85">Cache Checkpointing</A></H3>
+ 
+ <P>
+ If your configure script, or a macro called from configure.ac, happens
+ to abort the configure process, it may be useful to checkpoint the cache
+ a few times at key points using <CODE>AC_CACHE_SAVE</CODE>.  Doing so will
+ reduce the amount of time it takes to re-run the configure script with
+ (hopefully) the error that caused the previous abort corrected.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CACHE_LOAD</B>
+ <DD><A NAME="IDX610"></A>
+ <A NAME="IDX611"></A>
+ Loads values from existing cache file, or creates a new cache file if a
+ cache file is not found.  Called automatically from <CODE>AC_INIT</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CACHE_SAVE</B>
+ <DD><A NAME="IDX612"></A>
+ <A NAME="IDX613"></A>
+ Flushes all cached values to the cache file.  Called automatically from
+ <CODE>AC_OUTPUT</CODE>, but it can be quite useful to call
+ <CODE>AC_CACHE_SAVE</CODE> at key points in configure.ac.
+ </DL>
+ 
+ 
+ <P>
+ For instance:
+ 
+ 
+ 
+ <PRE>
+  ... AC_INIT, etc. ...
+ # Checks for programs.
+ AC_PROG_CC
+ AC_PROG_GCC_TRADITIONAL
+  ... more program checks ...
+ AC_CACHE_SAVE
+ 
+ # Checks for libraries.
+ AC_CHECK_LIB(nsl, gethostbyname)
+ AC_CHECK_LIB(socket, connect)
+  ... more lib checks ...
+ AC_CACHE_SAVE
+ 
+ # Might abort...
+ AM_PATH_GTK(1.0.2,, [AC_MSG_ERROR([GTK not in path])])
+ AM_PATH_GTKMM(0.9.5,, [AC_MSG_ERROR([GTK not in path])])
+  ... AC_OUTPUT, etc. ...
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC86" HREF="autoconf_toc.html#TOC86">Printing Messages</A></H2>
+ <P>
+ <A NAME="IDX614"></A>
+ 
+ 
+ <P>
+ @command{configure} scripts need to give users running them several kinds
+ of information.  The following macros print messages in ways appropriate
+ for each kind.  The arguments to all of them get enclosed in shell
+ double quotes, so the shell performs variable and back-quote
+ substitution on them.
+ 
+ 
+ <P>
+ These macros are all wrappers around the <CODE>echo</CODE> shell command.
+ @command{configure} scripts should rarely need to run <CODE>echo</CODE> directly
+ to print messages for the user.  Using these macros makes it easy to
+ change how and when each kind of message is printed; such changes need
+ only be made to the macro definitions and all of the callers will change
+ automatically.
+ 
+ 
+ <P>
+ To diagnose static issues, i.e., when @command{autoconf} is run, see
+ section <A HREF="autoconf.html#SEC104">Reporting Messages</A>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MSG_CHECKING</B> <I>(<VAR>feature-description</VAR>)</I>
+ <DD><A NAME="IDX615"></A>
+ <A NAME="IDX616"></A>
+ Notify the user that @command{configure} is checking for a particular
+ feature.  This macro prints a message that starts with <SAMP>`checking '</SAMP>
+ and ends with <SAMP>`...'</SAMP> and no newline.  It must be followed by a call
+ to <CODE>AC_MSG_RESULT</CODE> to print the result of the check and the
+ newline.  The <VAR>feature-description</VAR> should be something like
+ <SAMP>`whether the Fortran compiler accepts C++ comments'</SAMP> or <SAMP>`for
+ c89'</SAMP>.
+ 
+ 
+ <P>
+ This macro prints nothing if @command{configure} is run with the
+ @option{--quiet} or @option{--silent} option.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MSG_RESULT</B> <I>(<VAR>result-description</VAR>)</I>
+ <DD><A NAME="IDX617"></A>
+ <A NAME="IDX618"></A>
+ Notify the user of the results of a check.  <VAR>result-description</VAR> is
+ almost always the value of the cache variable for the check, typically
+ <SAMP>`yes'</SAMP>, <SAMP>`no'</SAMP>, or a file name.  This macro should follow a call
+ to <CODE>AC_MSG_CHECKING</CODE>, and the <VAR>result-description</VAR> should be
+ the completion of the message printed by the call to
+ <CODE>AC_MSG_CHECKING</CODE>.
+ 
+ 
+ <P>
+ This macro prints nothing if @command{configure} is run with the
+ @option{--quiet} or @option{--silent} option.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MSG_NOTICE</B> <I>(<VAR>message</VAR>)</I>
+ <DD><A NAME="IDX619"></A>
+ <A NAME="IDX620"></A>
+ Deliver the <VAR>message</VAR> to the user. It is useful mainly to print a
+ general description of the overall purpose of a group of feature checks,
+ e.g.,
+ 
+ 
+ 
+ <PRE>
+ AC_MSG_NOTICE([checking if stack overflow is detectable])
+ </PRE>
+ 
+ <P>
+ This macro prints nothing if @command{configure} is run with the
+ @option{--quiet} or @option{--silent} option.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MSG_ERROR</B> <I>(<VAR>error-description</VAR>, @ovar{exit-status})</I>
+ <DD><A NAME="IDX621"></A>
+ <A NAME="IDX622"></A>
+ Notify the user of an error that prevents @command{configure} from
+ completing.  This macro prints an error message to the standard error
+ output and exits @command{configure} with <VAR>exit-status</VAR> (1 by default).
+ <VAR>error-description</VAR> should be something like <SAMP>`invalid value
+ $HOME for \$HOME'</SAMP>.
+ 
+ 
+ <P>
+ The <VAR>error-description</VAR> should start with a lower-case letter, and
+ "cannot" is preferred to "can't".
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MSG_WARN</B> <I>(<VAR>problem-description</VAR>)</I>
+ <DD><A NAME="IDX623"></A>
+ <A NAME="IDX624"></A>
+ Notify the @command{configure} user of a possible problem.  This macro
+ prints the message to the standard error output; @command{configure}
+ continues running afterward, so macros that call <CODE>AC_MSG_WARN</CODE> should
+ provide a default (back-up) behavior for the situations they warn about.
+ <VAR>problem-description</VAR> should be something like <SAMP>`ln -s seems to
+ make hard links'</SAMP>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC87" HREF="autoconf_toc.html#TOC87">Programming in M4</A></H1>
+ 
+ <P>
+ Autoconf is written on top of two layers: <EM>M4sugar</EM>, which provides
+ convenient macros for pure M4 programming, and <EM>M4sh</EM>, which
+ provides macros dedicated to shell script generation.
+ 
+ 
+ <P>
+ As of this version of Autoconf, these two layers are still experimental,
+ and their interface might change in the future.  As a matter of fact,
+ <EM>anything that is not documented must not be used</EM>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC88" HREF="autoconf_toc.html#TOC88">M4 Quotation</A></H2>
+ <P>
+ <A NAME="IDX625"></A>
+ 
+ 
+ <P>
+ The most common brokenness of existing macros is an improper quotation.
+ This section, which users of Autoconf can skip, but which macro writers
+ <EM>must</EM> read, first justifies the quotation scheme that was chosen
+ for Autoconf and then ends with a rule of thumb.  Understanding the
+ former helps one to follow the latter.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC89" HREF="autoconf_toc.html#TOC89">Active Characters</A></H3>
+ 
+ <P>
+ To fully understand where proper quotation is important, you first need
+ to know what are the special characters in Autoconf: <SAMP>`#'</SAMP> introduces
+ a comment inside which no macro expansion is performed, <SAMP>`,'</SAMP>
+ separates arguments, <SAMP>`['</SAMP> and <SAMP>`]'</SAMP> are the quotes themselves,
+ and finally <SAMP>`('</SAMP> and <SAMP>`)'</SAMP> (which <CODE>m4</CODE> tries to match by
+ pairs).
+ 
+ 
+ <P>
+ In order to understand the delicate case of macro calls, we first have
+ to present some obvious failures.  Below they are "obvious-ified",
+ although you find them in real life, they are usually in disguise.
+ 
+ 
+ <P>
+ Comments, introduced by a hash and running up to the newline, are opaque
+ tokens to the top level: active characters are turned off, and there is
+ no macro expansion:
+ 
+ 
+ 
+ <PRE>
+ # define([def], ine)
+ =># define([def], ine)
+ </PRE>
+ 
+ <P>
+ Each time there can be a macro expansion, there is a quotation
+ expansion; i.e., one level of quotes is stripped:
+ 
+ 
+ 
+ <PRE>
+ int tab[10];
+ =>int tab10;
+ [int tab[10];]
+ =>int tab[10];
+ </PRE>
+ 
+ <P>
+ Without this in mind, the reader will try hopelessly to use her macro
+ <CODE>array</CODE>:
+ 
+ 
+ 
+ <PRE>
+ define([array], [int tab[10];])
+ array
+ =>int tab10;
+ [array]
+ =>array
+ </PRE>
+ 
+ <P>
+ How can you correctly output the intended results<A NAME="DOCF2" HREF="autoconf_foot.html#FOOT2">(2)</A>?
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC90" HREF="autoconf_toc.html#TOC90">One Macro Call</A></H3>
+ 
+ <P>
+ Let's proceed on the interaction between active characters and macros
+ with this small macro, which just returns its first argument:
+ 
+ 
+ 
+ <PRE>
+ define([car], [$1])
+ </PRE>
+ 
+ <P>
+ The two pairs of quotes above are not part of the arguments of
+ <CODE>define</CODE>; rather, they are understood by the top level when it
+ tries to find the arguments of <CODE>define</CODE>.  Therefore, it is
+ equivalent to write:
+ 
+ 
+ 
+ <PRE>
+ define(car, $1)
+ </PRE>
+ 
+ <P>
+ But, while it is acceptable for a <TT>`configure.ac'</TT> to avoid unneeded
+ quotes, it is bad practice for Autoconf macros which must both be more
+ robust and also advocate perfect style.
+ 
+ 
+ <P>
+ At the top level, there are only two possible quotings: either you
+ quote or you don't:
+ 
+ 
+ 
+ <PRE>
+ car(foo, bar, baz)
+ =>foo
+ [car(foo, bar, baz)]
+ =>car(foo, bar, baz)
+ </PRE>
+ 
+ <P>
+ Let's pay attention to the special characters:
+ 
+ 
+ 
+ <PRE>
+ car(#)
+ error-->EOF in argument list
+ </PRE>
+ 
+ <P>
+ The closing parenthesis is hidden in the comment; with a hypothetical
+ quoting, the top level understood it this way:
+ 
+ 
+ 
+ <PRE>
+ car([#)]
+ </PRE>
+ 
+ <P>
+ Proper quotation, of course, fixes the problem:
+ 
+ 
+ 
+ <PRE>
+ car([#])
+ =>#
+ </PRE>
+ 
+ <P>
+ The reader will easily understand the following examples:
+ 
+ 
+ 
+ <PRE>
+ car(foo, bar)
+ =>foo
+ car([foo, bar])
+ =>foo, bar
+ car((foo, bar))
+ =>(foo, bar)
+ car([(foo], [bar)])
+ =>(foo
+ car([], [])
+ =>
+ car([[]], [[]])
+ =>[]
+ </PRE>
+ 
+ <P>
+ With this in mind, we can explore the cases where macros invoke
+ macros...
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC91" HREF="autoconf_toc.html#TOC91">Quotation and Nested Macros</A></H3>
+ 
+ <P>
+ The examples below use the following macros:
+ 
+ 
+ 
+ <PRE>
+ define([car], [$1])
+ define([active], [ACT, IVE])
+ define([array], [int tab[10]])
+ </PRE>
+ 
+ <P>
+ Each additional embedded macro call introduces other possible
+ interesting quotations:
+ 
+ 
+ 
+ <PRE>
+ car(active)
+ =>ACT
+ car([active])
+ =>ACT, IVE
+ car([[active]])
+ =>active
+ </PRE>
+ 
+ <P>
+ In the first case, the top level looks for the arguments of <CODE>car</CODE>,
+ and finds <SAMP>`active'</SAMP>.  Because <CODE>m4</CODE> evaluates its arguments
+ before applying the macro, <SAMP>`active'</SAMP> is expanded, which results in:
+ 
+ 
+ 
+ <PRE>
+ car(ACT, IVE)
+ =>ACT
+ </PRE>
+ 
+ <P>
+ In the second case, the top level gives <SAMP>`active'</SAMP> as first and only
+ argument of <CODE>car</CODE>, which results in:
+ 
+ 
+ 
+ <PRE>
+ active
+ =>ACT, IVE
+ </PRE>
+ 
+ <P>
+ i.e., the argument is evaluated <EM>after</EM> the macro that invokes it.
+ In the third case, <CODE>car</CODE> receives <SAMP>`[active]'</SAMP>, which results in:
+ 
+ 
+ 
+ <PRE>
+ [active]
+ =>active
+ </PRE>
+ 
+ <P>
+ exactly as we already saw above.
+ 
+ 
+ <P>
+ The example above, applied to a more realistic example, gives:
+ 
+ 
+ 
+ <PRE>
+ car(int tab[10];)
+ =>int tab10;
+ car([int tab[10];])
+ =>int tab10;
+ car([[int tab[10];]])
+ =>int tab[10];
+ </PRE>
+ 
+ <P>
+ Huh?  The first case is easily understood, but why is the second wrong,
+ and the third right?  To understand that, you must know that after
+ <CODE>m4</CODE> expands a macro, the resulting text is immediately subjected
+ to macro expansion and quote removal.  This means that the quote removal
+ occurs twice--first before the argument is passed to the <CODE>car</CODE>
+ macro, and second after the <CODE>car</CODE> macro expands to the first
+ argument.
+ 
+ 
+ <P>
+ As the author of the Autoconf macro <CODE>car</CODE>, you then consider it to
+ be incorrect that your users have to double-quote the arguments of
+ <CODE>car</CODE>, so you "fix" your macro.  Let's call it <CODE>qar</CODE> for
+ quoted car:
+ 
+ 
+ 
+ <PRE>
+ define([qar], [[$1]])
+ </PRE>
+ 
+ <P>
+ and check that <CODE>qar</CODE> is properly fixed:
+ 
+ 
+ 
+ <PRE>
+ qar([int tab[10];])
+ =>int tab[10];
+ </PRE>
+ 
+ <P>
+ Ahhh!  That's much better.
+ 
+ 
+ <P>
+ But note what you've done: now that the arguments are literal strings,
+ if the user wants to use the results of expansions as arguments, she has
+ to use an <EM>unquoted</EM> macro call:
+ 
+ 
+ 
+ <PRE>
+ qar(active)
+ =>ACT
+ </PRE>
+ 
+ <P>
+ where she wanted to reproduce what she used to do with <CODE>car</CODE>:
+ 
+ 
+ 
+ <PRE>
+ car([active])
+ =>ACT, IVE
+ </PRE>
+ 
+ <P>
+ Worse yet: she wants to use a macro that produces a set of <CODE>cpp</CODE>
+ macros:
+ 
+ 
+ 
+ <PRE>
+ define([my_includes], [#include &#60;stdio.h&#62;])
+ car([my_includes])
+ =>#include &#60;stdio.h&#62;
+ qar(my_includes)
+ error-->EOF in argument list
+ </PRE>
+ 
+ <P>
+ This macro, <CODE>qar</CODE>, because it double quotes its arguments, forces
+ its users to leave their macro calls unquoted, which is dangerous.
+ Commas and other active symbols are interpreted by <CODE>m4</CODE> before
+ they are given to the macro, often not in the way the users expect.
+ Also, because <CODE>qar</CODE> behaves differently from the other macros,
+ it's an exception that should be avoided in Autoconf.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC92" HREF="autoconf_toc.html#TOC92"><CODE>changequote</CODE> is Evil</A></H3>
+ 
+ <P>
+ The temptation is often high to bypass proper quotation, in particular
+ when it's late at night.  Then, many experienced Autoconf hackers
+ finally surrender to the dark side of the force and use the ultimate
+ weapon: <CODE>changequote</CODE>.
+ 
+ 
+ <P>
+ The M4 builtin <CODE>changequote</CODE> belongs to a set of primitives that
+ allow one to adjust the syntax of the language to adjust it to her
+ needs.  For instance, by default M4 uses <SAMP>``'</SAMP> and <SAMP>`''</SAMP> as
+ quotes, but in the context of shell programming (and actually of most
+ programming languages), it's about the worst choice one can make:
+ because of strings and back quoted expression in shell (such as
+ <SAMP>`'this''</SAMP> and <SAMP>``that`'</SAMP>), because of literal characters in usual
+ programming language (as in <SAMP>`'0''</SAMP>), there are many unbalanced
+ <SAMP>``'</SAMP> and <SAMP>`''</SAMP>.  Proper M4 quotation then becomes a nightmare, if
+ not impossible.  In order to make M4 useful in such a context, its
+ designers have equipped it with <CODE>changequote</CODE>, which makes it
+ possible to chose another pair of quotes.  M4sugar, M4sh, Autoconf, and
+ Autotest all have chosen to use <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>.  Not especially
+ because they are unlikely characters, but <EM>because they are
+ characters unlikely to be unbalanced</EM>.
+ 
+ 
+ <P>
+ There are other magic primitives, such as <CODE>changecom</CODE> to specify
+ what syntactic forms are comments (it is common to see
+ <SAMP>`changecom(&#60;!--, --&#62;)'</SAMP> when M4 is used to produce HTML pages),
+ <CODE>changeword</CODE> and <CODE>changesyntax</CODE> to change other syntactic
+ details (such as the character to denote the n-th argument, <SAMP>`$'</SAMP> by
+ default, the parenthesis around arguments etc.).
+ 
+ 
+ <P>
+ These primitives are really meant to make M4 more useful for specific
+ domains: they should be considered like command line options:
+ @option{--quotes}, @option{--comments}, @option{--words}, and
+ <CODE>--syntax</CODE>.  Nevertheless, they are implemented as M4 builtins, as
+ it makes M4 libraries self contained (no need for additional options).
+ 
+ 
+ <P>
+ There lies the problem...
+ 
+ 
+ <P>
+ The problem is that it is then tempting to use them in the middle of an
+ M4 script, as opposed to its initialization.  This, if not carefully
+ thought, can lead to disastrous effects: <EM>you are changing the
+ language in the middle of the execution</EM>.  Changing and restoring the
+ syntax is often not enough: if you happened to invoke macros in between,
+ these macros will be lost, as the current syntax will probably not be
+ the one they were implemented with.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC93" HREF="autoconf_toc.html#TOC93">Quadrigraphs</A></H3>
+ <P>
+ <A NAME="IDX626"></A>
+ <A NAME="IDX627"></A>
+ <A NAME="IDX628"></A>
+ <A NAME="IDX629"></A>
+ <A NAME="IDX630"></A>
+ <A NAME="IDX631"></A>
+ 
+ 
+ <P>
+ When writing an autoconf macro you may occasionally need to generate
+ special characters that are difficult to express with the standard
+ autoconf quoting rules.  For example, you may need to output the regular
+ expression <SAMP>`[^[]'</SAMP>, which matches any character other than <SAMP>`['</SAMP>.
+ This expression contains unbalanced brackets so it cannot be put easily
+ into an M4 macro.
+ 
+ 
+ <P>
+ You can work around this problem by using one of the following
+ <EM>quadrigraphs</EM>:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`@&#60;:@'</SAMP>
+ <DD>
+ <SAMP>`['</SAMP>
+ <DT><SAMP>`@:&#62;@'</SAMP>
+ <DD>
+ <SAMP>`]'</SAMP>
+ <DT><SAMP>`@S|@'</SAMP>
+ <DD>
+ <SAMP>`$'</SAMP>
+ <DT><SAMP>`@%:@'</SAMP>
+ <DD>
+ <SAMP>`#'</SAMP>
+ <DT><SAMP>`@&#38;t@'</SAMP>
+ <DD>
+ Expands to nothing.
+ </DL>
+ 
+ <P>
+ Quadrigraphs are replaced at a late stage of the translation process,
+ after @command{m4} is run, so they do not get in the way of M4 quoting.
+ For example, the string <SAMP>`^@&#60;:@'</SAMP>, independently of its quotation,
+ will appear as <SAMP>`^['</SAMP> in the output.
+ 
+ 
+ <P>
+ The empty quadrigraph can be used:
+ 
+ 
+ 
+ <UL>
+ <LI>to mark explicitly trailing spaces
+ 
+ Trailing spaces are smashed by @command{autom4te}.  This is a feature.
+ 
+ <LI>to produce other quadrigraphs
+ 
+ For instance <SAMP>`@&#60;@&#38;t@:@'</SAMP> produces <SAMP>`@&#60;:@'</SAMP>.
+ 
+ <LI>to escape <EM>occurrences</EM> of forbidden patterns
+ 
+ For instance you might want to mention <CODE>AC_FOO</CODE> is a comment, while
+ still being sure that @command{autom4te} will still catch unexpanded
+ <SAMP>`AC_*'</SAMP>.  Then write <SAMP>`AC@&#38;t@_FOO'</SAMP>.
+ </UL>
+ 
+ <P>
+ The name <SAMP>`@&#38;t@'</SAMP> was suggested by Paul Eggert:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ I should give some credit to the <SAMP>`@&#38;t@'</SAMP> pun.  The <SAMP>`&#38;'</SAMP> is my
+ own invention, but the <SAMP>`t'</SAMP> came from the source code of the
+ ALGOL68C compiler, written by Steve Bourne (of Bourne shell fame),
+ and which used <SAMP>`mt'</SAMP> to denote the empty string.  In C, it would
+ have looked like something like:
+ 
+ 
+ 
+ <PRE>
+ char const mt[] = "";
+ </PRE>
+ 
+ <P>
+ but of course the source code was written in Algol 68.
+ 
+ 
+ <P>
+ I don't know where he got <SAMP>`mt'</SAMP> from: it could have been his own
+ invention, and I suppose it could have been a common pun around the
+ Cambridge University computer lab at the time.
+ </BLOCKQUOTE>
+ 
+ 
+ 
+ <H3><A NAME="SEC94" HREF="autoconf_toc.html#TOC94">Quotation Rule Of Thumb</A></H3>
+ 
+ <P>
+ To conclude, the quotation rule of thumb is:
+ 
+ 
+ <P>
+ <EM>One pair of quotes per pair of parentheses.</EM>
+ 
+ 
+ <P>
+ Never over-quote, never under-quote, in particular in the definition of
+ macros.  In the few places where the macros need to use brackets
+ (usually in C program text or regular expressions), properly quote
+ <EM>the arguments</EM>!
+ 
+ 
+ <P>
+ It is common to read Autoconf programs with snippets like:
+ 
+ 
+ 
+ <PRE>
+ AC_TRY_LINK(
+ changequote(&#60;&#60;, &#62;&#62;)dnl
+ &#60;&#60;#include &#60;time.h&#62;
+ #ifndef tzname /* For SGI.  */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
+ #endif&#62;&#62;,
+ changequote([, ])dnl
+ [atoi (*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)
+ </PRE>
+ 
+ <P>
+ which is incredibly useless since <CODE>AC_TRY_LINK</CODE> is <EM>already</EM>
+ double quoting, so you just need:
+ 
+ 
+ 
+ <PRE>
+ AC_TRY_LINK(
+ [#include &#60;time.h&#62;
+ #ifndef tzname /* For SGI.  */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
+ #endif],
+             [atoi (*tzname);],
+             [ac_cv_var_tzname=yes],
+             [ac_cv_var_tzname=no])
+ </PRE>
+ 
+ <P>
+ The M4-fluent reader will note that these two examples are rigorously
+ equivalent, since <CODE>m4</CODE> swallows both the <SAMP>`changequote(&#60;&#60;, &#62;&#62;)'</SAMP>
+ and <SAMP>`&#60;&#60;'</SAMP> <SAMP>`&#62;&#62;'</SAMP> when it <EM>collects</EM> the arguments: these
+ quotes are not part of the arguments!
+ 
+ 
+ <P>
+ Simplified, the example above is just doing this:
+ 
+ 
+ 
+ <PRE>
+ changequote(&#60;&#60;, &#62;&#62;)dnl
+ &#60;&#60;[]&#62;&#62;
+ changequote([, ])dnl
+ </PRE>
+ 
+ <P>
+ instead of simply:
+ 
+ 
+ 
+ <PRE>
+ [[]]
+ </PRE>
+ 
+ <P>
+ With macros that do not double quote their arguments (which is the
+ rule), double-quote the (risky) literals:
+ 
+ 
+ 
+ <PRE>
+ AC_LINK_IFELSE([AC_LANG_PROGRAM(
+ [[#include &#60;time.h&#62;
+ #ifndef tzname /* For SGI.  */
+ extern char *tzname[]; /* RS6000 and others reject char **tzname.  */
+ #endif]],
+                                 [atoi (*tzname);])],
+                [ac_cv_var_tzname=yes],
+                [ac_cv_var_tzname=no])
+ </PRE>
+ 
+ <P>
+ See See section <A HREF="autoconf.html#SEC93">Quadrigraphs</A>, for what to do if you run into a hopeless case
+ where quoting does not suffice.
+ 
+ 
+ <P>
+ When you create a @command{configure} script using newly written macros,
+ examine it carefully to check whether you need to add more quotes in
+ your macros.  If one or more words have disappeared in the <CODE>m4</CODE>
+ output, you need more quotes.  When in doubt, quote.
+ 
+ 
+ <P>
+ However, it's also possible to put on too many layers of quotes.  If
+ this happens, the resulting @command{configure} script will contain
+ unexpanded macros.  The @command{autoconf} program checks for this problem
+ by doing <SAMP>`grep AC_ configure'</SAMP>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC95" HREF="autoconf_toc.html#TOC95">Invoking @command{autom4te}</A></H2>
+ 
+ <P>
+ The Autoconf suite, including M4sugar, M4sh, and Autotest in addition to
+ Autoconf per se, heavily rely on M4.  All these different uses revealed
+ common needs factored into a layer over @command{m4}:
+ @command{autom4te}<A NAME="DOCF3" HREF="autoconf_foot.html#FOOT3">(3)</A>.
+ 
+ 
+ <P>
+ @command{autom4te} should basically considered as a replacement of
+ @command{m4} itself.  In particular, its handling of command line
+ arguments is modeled after M4's:
+ 
+ 
+ 
+ <PRE>
+ autom4te <VAR>options</VAR> <VAR>files</VAR>
+ </PRE>
+ 
+ <P>
+ where the <VAR>files</VAR> are directly passed to @command{m4}.  In addition
+ to the regular expansion, it handles the replacement of the quadrigraphs
+ (see section <A HREF="autoconf.html#SEC93">Quadrigraphs</A>), and of <SAMP>`__oline__'</SAMP>, the current line in the
+ output.  It supports an extended syntax for the <VAR>files</VAR>:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><TT>`<VAR>file</VAR>.m4f'</TT>
+ <DD>
+ This file is an M4 frozen file.  Note that <EM>all the previous files
+ are ignored</EM>.  See the option @option{--melt} for the rationale.
+ 
+ <DT><TT>`<VAR>file</VAR>?'</TT>
+ <DD>
+ If found in the library path, the <VAR>file</VAR> is included for expansion,
+ otherwise it is ignored instead of triggering a failure.
+ </DL>
+ 
+ <P>
+ Of course, it supports the Autoconf common subset of options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ <DT>@option{-v}
+ <DD>
+ Report processing steps.
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files and be even more verbose.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations
+ accumulate.  Contrary to M4 but in agreement with common sense,
+ directories are browsed from last to first.
+ 
+ <DT>@option{--output=<VAR>file</VAR>}
+ <DD>
+ <DT>@option{-o <VAR>file</VAR>}
+ <DD>
+ Save output (script or trace) to <VAR>file</VAR>.  The file @option{-} stands
+ for the standard output.
+ </DL>
+ 
+ <P>
+ As an extension of @command{m4}, it includes the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--warnings=<VAR>category</VAR>}
+ <DD>
+ <DT>@option{-W <VAR>category</VAR>}
+ <DD>
+ <A NAME="IDX632"></A>
+ Report the warnings related to <VAR>category</VAR> (which can actually be a
+ comma separated list).  See section <A HREF="autoconf.html#SEC104">Reporting Messages</A>, macro
+ <CODE>AC_DIAGNOSE</CODE>, for a comprehensive list of categories.  Special
+ values include:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`all'</SAMP>
+ <DD>
+ report all the warnings
+ 
+ <DT><SAMP>`none'</SAMP>
+ <DD>
+ report none
+ 
+ <DT><SAMP>`error'</SAMP>
+ <DD>
+ treats warnings as errors
+ 
+ <DT><SAMP>`no-<VAR>category</VAR>'</SAMP>
+ <DD>
+ disable warnings falling into <VAR>category</VAR>
+ </DL>
+ 
+ Warnings about <SAMP>`syntax'</SAMP> are enabled by default, and the environment
+ variable <CODE>WARNINGS</CODE>, a comma separated list of categories, is
+ honored. @command{autom4te -W <VAR>category</VAR>} will actually
+ behave as if you had run:
+ 
+ 
+ <PRE>
+ autom4te --warnings=syntax,$WARNINGS,<VAR>category</VAR>
+ </PRE>
+ 
+ If you want to disable @command{autom4te}'s defaults and
+ <CODE>WARNINGS</CODE>, but (for example) enable the warnings about obsolete
+ constructs, you would use @option{-W none,obsolete}.
+ 
+ <A NAME="IDX633"></A>
+ <A NAME="IDX634"></A>
+ @command{autom4te} displays a back trace for errors, but not for
+ warnings; if you want them, just pass @option{-W error}.  For instance,
+ on this <TT>`configure.ac'</TT>:
+ 
+ 
+ <PRE>
+ AC_DEFUN([INNER],
+ [AC_TRY_RUN([exit (0)])])
+ 
+ AC_DEFUN([OUTER],
+ [INNER])
+ 
+ AC_INIT
+ OUTER
+ </PRE>
+ 
+ you get:
+ 
+ 
+ <PRE>
+ $ <KBD>autom4te -l autoconf -Wcross</KBD>
+ configure.ac:8: warning: AC_TRY_RUN called without default \
+ to allow cross compiling
+ $ <KBD>autom4te -l autoconf -Wcross,error</KBD>
+ configure.ac:8: error: AC_TRY_RUN called without default \
+ to allow cross compiling
+ acgeneral.m4:3044: AC_TRY_RUN is expanded from...
+ configure.ac:2: INNER is expanded from...
+ configure.ac:5: OUTER is expanded from...
+ configure.ac:8: the top level
+ </PRE>
+ 
+ <DT>@option{--melt}
+ <DD>
+ <DT>@option{-m}
+ <DD>
+ Do not use frozen files.  Any argument <CODE><VAR>file</VAR>.m4f</CODE> will be
+ replaced with <CODE><VAR>file</VAR>.m4</CODE>.  This helps tracing the macros which
+ are executed only when the files are frozen, typically
+ <CODE>m4_define</CODE>.  For instance, running:
+ 
+ 
+ <PRE>
+ autom4te --melt 1.m4 2.m4f 3.m4 4.m4f input.m4
+ </PRE>
+ 
+ is roughly equivalent to running:
+ 
+ 
+ <PRE>
+ m4 1.m4 2.m4 3.m4 4.m4 input.m4
+ </PRE>
+ 
+ while
+ 
+ 
+ <PRE>
+ autom4te 1.m4 2.m4f 3.m4 4.m4f input.m4
+ </PRE>
+ 
+ is equivalent to:
+ 
+ 
+ <PRE>
+ m4 --reload-state=4.m4f input.m4
+ </PRE>
+ 
+ <DT>@option{--freeze}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Produce a frozen state file.  @command{autom4te} freezing is stricter
+ than M4's: it must produce no warnings, and no output other than empty
+ lines (a line with white spaces is <EM>not</EM> empty) and comments
+ (starting with <SAMP>`#'</SAMP>).  Please, note that contrary to @command{m4},
+ this options takes no argument:
+ 
+ 
+ <PRE>
+ autom4te 1.m4 2.m4 3.m4 --freeze --output=3.m4f
+ </PRE>
+ 
+ corresponds to
+ 
+ 
+ <PRE>
+ m4 1.m4 2.m4 3.m4 --freeze-state=3.m4f
+ </PRE>
+ 
+ <DT>@option{--mode=<VAR>octal-mode</VAR>}
+ <DD>
+ <DT>@option{-m <VAR>octal-mode</VAR>}
+ <DD>
+ Set the mode of the non traces output to <VAR>octal-mode</VAR>.  By default,
+ <SAMP>`0666'</SAMP>.
+ </DL>
+ 
+ <P>
+ <A NAME="IDX635"></A>
+ As another additional feature over @command{m4}, @command{autom4te}
+ caches its results.  GNU M4 is able to produce a regular output and
+ traces at the same time.  Traces are heavily used in the GNU Build
+ System: @command{autoheader} uses them to build <TT>`config.h.in'</TT>,
+ @command{autoreconf} to determine what GNU Build System components are
+ used, @command{automake} to "parse" <TT>`configure.ac'</TT> etc.  To save
+ the long runs of @command{m4}, traces are cached while performing
+ regular expansion, and conversely.  This cache is (actually, the caches
+ are) stored in the directory <TT>`autom4te.cache'</TT>.  <EM>It can safely
+ be removed</EM> at any moment (especially if for some reason
+ @command{autom4te} considers it is trashed).
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--force}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Do not consider the cache (but update it anyway).
+ </DL>
+ 
+ <P>
+ Because traces are so important to the GNU Build System,
+ @command{autom4te} provides high level tracing features as compared to
+ M4, and helps exploiting the cache:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--trace=<VAR>macro</VAR>[:<VAR>format</VAR>]}
+ <DD>
+ <DT>@option{-t <VAR>macro</VAR>[:<VAR>format</VAR>]}
+ <DD>
+ Trace the invocations to <VAR>macro</VAR> according to the <VAR>format</VAR>.
+ Multiple @option{--trace} arguments can be used to list several macros.
+ Multiple @option{--trace} arguments for a single macro are not
+ cumulative; instead, you should just make <VAR>format</VAR> as long as
+ needed.
+ 
+ The <VAR>format</VAR> is a regular string, with newlines if desired, and
+ several special escape codes.  It defaults to <SAMP>`$f:$l:$n:$%'</SAMP>. It can
+ use the following special escapes:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`$$'</SAMP>
+ <DD>
+ The character <SAMP>`$'</SAMP>.
+ 
+ <DT><SAMP>`$f'</SAMP>
+ <DD>
+ The filename from which <VAR>macro</VAR> is called.
+ 
+ <DT><SAMP>`$l'</SAMP>
+ <DD>
+ The line number from which <VAR>macro</VAR> is called.
+ 
+ <DT><SAMP>`$d'</SAMP>
+ <DD>
+ The depth of the <VAR>macro</VAR> call.  This is an M4 technical detail that
+ you probably don't want to know about.
+ 
+ <DT><SAMP>`$n'</SAMP>
+ <DD>
+ The name of the <VAR>macro</VAR>.
+ 
+ <DT><SAMP>`$<VAR>num</VAR>'</SAMP>
+ <DD>
+ The <VAR>num</VAR>th argument of the call to <VAR>macro</VAR>.
+ 
+ <DT><SAMP>`$@'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>@'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}@'</SAMP>
+ <DD>
+ All the arguments passed to <VAR>macro</VAR>, separated by the character
+ <VAR>sep</VAR> or the string <VAR>separator</VAR> (<SAMP>`,'</SAMP> by default).  Each
+ argument is quoted, i.e. enclosed in a pair of square brackets.
+ 
+ <DT><SAMP>`$*'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>*'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}*'</SAMP>
+ <DD>
+ As above, but the arguments are not quoted.
+ 
+ <DT><SAMP>`$%'</SAMP>
+ <DD>
+ <DT><SAMP>`$<VAR>sep</VAR>%'</SAMP>
+ <DD>
+ <DT><SAMP>`${<VAR>separator</VAR>}%'</SAMP>
+ <DD>
+ As above, but the arguments are not quoted, all new line characters in
+ the arguments are smashed, and the default separator is <SAMP>`:'</SAMP>.
+ 
+ The escape <SAMP>`$%'</SAMP> produces single-line trace outputs (unless you put
+ newlines in the <SAMP>`separator'</SAMP>), while <SAMP>`$@'</SAMP> and <SAMP>`$*'</SAMP> do
+ not.
+ </DL>
+ 
+ See section <A HREF="autoconf.html#SEC13">Using @command{autoconf} to Create @command{configure}</A>, for examples of trace uses.
+ 
+ <DT>@option{--preselect=<VAR>macro</VAR>}
+ <DD>
+ <DT>@option{-p <VAR>macro</VAR>}
+ <DD>
+ Cache the traces of <VAR>macro</VAR>, but do not enable traces.  This is
+ especially important to save cpu cycles in the future.  For instance,
+ when invoked, @command{autoconf} preselects all the macros that
+ @command{autoheader}, <CODE>automake</CODE>, <CODE>autoreconf</CODE> etc. will
+ trace, so that running @command{m4} is not needed to trace them: the
+ cache suffices.  This results in a huge speed-up.
+ </DL>
+ 
+ <P>
+ <A NAME="IDX636"></A>
+ Finally, @command{autom4te} introduces the concept of @dfn{Autom4te
+ libraries}.  They consists in a powerful yet extremely simple feature:
+ sets of combined command line arguments:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--language=<VAR>language</VAR>}
+ <DD>
+ <DT>@option{-l =<VAR>language</VAR>}
+ <DD>
+ Use the <VAR>language</VAR> Autom4te library.  Current languages include:
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>M4sugar</CODE>
+ <DD>
+ create M4sugar output.
+ 
+ <DT><CODE>M4sh</CODE>
+ <DD>
+ create M4sh executable shell scripts.
+ 
+ <DT><CODE>Autotest</CODE>
+ <DD>
+ create Autotest executable test suites.
+ 
+ <DT><CODE>Autoconf</CODE>
+ <DD>
+ create Autoconf executable configure scripts.
+ </DL>
+ </DL>
+ 
+ <P>
+ <A NAME="IDX637"></A>
+ As an example, if Autoconf is installed in its default location,
+ <TT>`/usr/local'</TT>, running <SAMP>`autom4te -l m4sugar foo.m4'</SAMP> is strictly
+ equivalent to running <SAMP>`autom4te --include /usr/local/share/autoconf
+ m4sugar/m4sugar.m4f --warning syntax foo.m4'</SAMP>.  Recursive expansion
+ applies: running <SAMP>`autom4te -l m4sh foo.m4'</SAMP>, is the same as
+ <SAMP>`autom4te --language M4sugar m4sugar/m4sh.m4f foo.m4'</SAMP>, i.e.,
+ <SAMP>`autom4te --include /usr/local/share/autoconf m4sugar/m4sugar.m4f
+ m4sugar/m4sh.m4f --mode 777 foo.m4'</SAMP>.  The definition of the languages is
+ stored in <TT>`autom4te.cfg'</TT>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC96" HREF="autoconf_toc.html#TOC96">Programming in M4sugar</A></H2>
+ 
+ <P>
+ <A NAME="IDX638"></A>
+ M4 by itself provides only a small, but sufficient, set of all-purpose
+ macros.  M4sugar introduces additional generic macros.  Its name was
+ coined by Lars J. Aas: "Readability And Greater Understanding Stands 4
+ M4sugar".
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC97" HREF="autoconf_toc.html#TOC97">Redefined M4 Macros</A></H3>
+ 
+ <P>
+ With a few exceptions, all the M4 native macros are moved in the
+ <SAMP>`m4_'</SAMP> pseudo-namespace, e.g., M4sugar renames <CODE>define</CODE> as
+ <CODE>m4_define</CODE> etc.
+ 
+ 
+ <P>
+ Some M4 macros are redefined, and are slightly incompatible with their
+ native equivalent.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>dnl</B>
+ <DD><A NAME="IDX639"></A>
+ <A NAME="IDX640"></A>
+ This macro kept its original name: no <CODE>m4_dnl</CODE> is defined.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_defn</B> <I>(<VAR>macro</VAR>)</I>
+ <DD><A NAME="IDX641"></A>
+ <A NAME="IDX642"></A>
+ Contrary to the M4 builtin, this macro fails if <VAR>macro</VAR> is not
+ defined.  See <CODE>m4_undefine</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_exit</B> <I>(<VAR>exit-status</VAR>)</I>
+ <DD><A NAME="IDX643"></A>
+ <A NAME="IDX644"></A>
+ This macro corresponds to <CODE>m4exit</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_if</B> <I>(<VAR>comment</VAR>)</I>
+ <DD><A NAME="IDX645"></A>
+ <DT><U>Macro:</U> <B>m4_if</B> <I>(<VAR>string-1</VAR>, <VAR>string-2</VAR>, <VAR>equal</VAR>, @ovar{not-equal})</I>
+ <DD><A NAME="IDX646"></A>
+ <DT><U>Macro:</U> <B>m4_if</B> <I>(<VAR>string-1</VAR>, <VAR>string-2</VAR>, <VAR>equal</VAR>, ...)</I>
+ <DD><A NAME="IDX647"></A>
+ <A NAME="IDX648"></A>
+ This macro corresponds to <CODE>ifelse</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_undefine</B> <I>(<VAR>macro</VAR>)</I>
+ <DD><A NAME="IDX649"></A>
+ <A NAME="IDX650"></A>
+ Contrary to the M4 builtin, this macro fails if <VAR>macro</VAR> is not
+ defined.  Use
+ 
+ 
+ 
+ <PRE>
+ m4_ifdef([<VAR>macro</VAR>], [m4_undefine([<VAR>macro</VAR>])])
+ </PRE>
+ 
+ <P>
+ to recover the behavior of the builtin.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_bpatsubst</B> <I>(<VAR>string</VAR>, <VAR>regexp</VAR>, @ovar{replacement})</I>
+ <DD><A NAME="IDX651"></A>
+ <A NAME="IDX652"></A>
+ This macro corresponds to <CODE>patsubst</CODE>.  The name <CODE>m4_patsubst</CODE>
+ is kept for future versions of M4sh, on top of GNU M4 which will
+ provide extended regular expression syntax via <CODE>epatsubst</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_popdef</B> <I>(<VAR>macro</VAR>)</I>
+ <DD><A NAME="IDX653"></A>
+ <A NAME="IDX654"></A>
+ Contrary to the M4 builtin, this macro fails if <VAR>macro</VAR> is not
+ defined.  See <CODE>m4_undefine</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_bregexp</B> <I>(<VAR>string</VAR>, <VAR>regexp</VAR>, @ovar{replacement})</I>
+ <DD><A NAME="IDX655"></A>
+ <A NAME="IDX656"></A>
+ This macro corresponds to <CODE>regexp</CODE>.  The name <CODE>m4_regexp</CODE>
+ is kept for future versions of M4sh, on top of GNU M4 which will
+ provide extended regular expression syntax via <CODE>eregexp</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_wrap</B> <I>(<VAR>text</VAR>)</I>
+ <DD><A NAME="IDX657"></A>
+ <A NAME="IDX658"></A>
+ This macro corresponds to <CODE>m4wrap</CODE>.
+ 
+ 
+ <P>
+ You are encouraged to end <VAR>text</VAR> with <SAMP>`[]'</SAMP>, so that there are
+ no risks that two consecutive invocations of <CODE>m4_wrap</CODE> result in an
+ unexpected pasting of tokens, as in
+ 
+ 
+ 
+ <PRE>
+ m4_define([foo], [Foo])
+ m4_define([bar], [Bar])
+ m4_define([foobar], [FOOBAR])
+ m4_wrap([bar])
+ m4_wrap([foo])
+ =>FOOBAR
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC98" HREF="autoconf_toc.html#TOC98">Evaluation Macros</A></H3>
+ 
+ <P>
+ The following macros give some control over the order of the evaluation
+ by adding or removing levels of quotes.  They are meant for hard core M4
+ programmers.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_dquote</B> <I>(<VAR>arg1</VAR>, ...)</I>
+ <DD><A NAME="IDX659"></A>
+ <A NAME="IDX660"></A>
+ Return the arguments as a quoted list of quoted arguments.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_quote</B> <I>(<VAR>arg1</VAR>, ...)</I>
+ <DD><A NAME="IDX661"></A>
+ <A NAME="IDX662"></A>
+ Return the arguments as a single entity, i.e., wrap them into a pair of
+ quotes.
+ </DL>
+ 
+ 
+ <P>
+ The following example aims at emphasing the difference between (i), not
+ using these macros, (ii), using <CODE>m4_quote</CODE>, and (iii), using
+ <CODE>m4_dquote</CODE>.
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat example.m4</KBD>
+ # Over quote, so that quotes are visible.
+ m4_define([show], [$[]1 = [$1], $[]@ = [$@]])
+ m4_divert(0)dnl
+ show(a, b)
+ show(m4_quote(a, b))
+ show(m4_dquote(a, b))
+ $ <KBD>autom4te -l m4sugar example.m4</KBD>
+ $1 = a, $@ = [a],[b]
+ $1 = a,b, $@ = [a,b]
+ $1 = [a],[b], $@ = [[a],[b]]
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC99" HREF="autoconf_toc.html#TOC99">Forbidden Patterns</A></H3>
+ 
+ <P>
+ M4sugar provides a means to define suspicious patterns, patterns
+ describing tokens which should not be found in the output.  For
+ instance, if an Autoconf <TT>`configure'</TT> script includes tokens such as
+ <SAMP>`AC_DEFINE'</SAMP>, or <SAMP>`dnl'</SAMP>, then most probably something went
+ wrong (typically a macro was not evaluated because of over quotation).
+ 
+ 
+ <P>
+ M4sugar forbids all the tokens matching <SAMP>`^m4_'</SAMP> and <SAMP>`^dnl$'</SAMP>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_pattern_forbid</B> <I>(<VAR>pattern</VAR>)</I>
+ <DD><A NAME="IDX663"></A>
+ <A NAME="IDX664"></A>
+ Declare no token matching <VAR>pattern</VAR> must be found in the output.
+ Comments are not checked; this can be a problem if, for instance, you
+ have some macro left unexpanded after an <SAMP>`#include'</SAMP>.  No consensus
+ is currently found in the Autoconf community, as some people consider it
+ should be valid to name macros in comments (which doesn't makes sense to
+ the author of this documentation, as <SAMP>`#'</SAMP>-comments should document
+ the output, not the input, documented vy <SAMP>`dnl'</SAMP>-comments).
+ </DL>
+ 
+ 
+ <P>
+ Of course, you might encounter exceptions to these generic rules, for
+ instance you might have to refer to <SAMP>`$m4_flags'</SAMP>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>m4_pattern_allow</B> <I>(<VAR>pattern</VAR>)</I>
+ <DD><A NAME="IDX665"></A>
+ <A NAME="IDX666"></A>
+ Any token matching <VAR>pattern</VAR> is allowed, including if it matches an
+ <CODE>m4_pattern_forbid</CODE> pattern.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC100" HREF="autoconf_toc.html#TOC100">Programming in M4sh</A></H2>
+ 
+ <P>
+ M4sh provides portable alternatives for some common shell constructs
+ that unfortunately are not portable in practice.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AS_DIRNAME</B> <I>(<VAR>pathname</VAR>)</I>
+ <DD><A NAME="IDX667"></A>
+ <A NAME="IDX668"></A>
+ Return the directory portion of <VAR>pathname</VAR>, using the algorithm
+ required by POSIX.  See section <A HREF="autoconf.html#SEC119">Limitations of Usual Tools</A>, for more
+ details about what this returns and why it is more portable than the
+ @command{dirname} command.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC101" HREF="autoconf_toc.html#TOC101">Writing Autoconf Macros</A></H1>
+ 
+ <P>
+ When you write a feature test that could be applicable to more than one
+ software package, the best thing to do is encapsulate it in a new macro.
+ Here are some instructions and guidelines for writing Autoconf macros.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC102" HREF="autoconf_toc.html#TOC102">Macro Definitions</A></H2>
+ 
+ <P>
+ <A NAME="IDX669"></A>
+ Autoconf macros are defined using the <CODE>AC_DEFUN</CODE> macro, which is
+ similar to the M4 builtin <CODE>m4_define</CODE> macro.  In addition to
+ defining a macro, <CODE>AC_DEFUN</CODE> adds to it some code that is used to
+ constrain the order in which macros are called (see section <A HREF="autoconf.html#SEC106">Prerequisite Macros</A>).
+ 
+ 
+ <P>
+ An Autoconf macro definition looks like this:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN(<VAR>macro-name</VAR>, <VAR>macro-body</VAR>)
+ </PRE>
+ 
+ <P>
+ You can refer to any arguments passed to the macro as <SAMP>`$1'</SAMP>,
+ <SAMP>`$2'</SAMP>, etc.  See section `How to define new macros' in <CITE>GNU m4</CITE>, for more complete information on writing M4 macros.
+ 
+ 
+ <P>
+ Be sure to properly quote both the <VAR>macro-body</VAR> <EM>and</EM> the
+ <VAR>macro-name</VAR> to avoid any problems if the macro happens to have
+ been previously defined.
+ 
+ 
+ <P>
+ Each macro should have a header comment that gives its prototype, and a
+ brief description.  When arguments have default values, display them in
+ the prototype.  For example:
+ 
+ 
+ 
+ <PRE>
+ # AC_MSG_ERROR(ERROR, [EXIT-STATUS = 1])
+ # --------------------------------------
+ m4_define([AC_MSG_ERROR],
+ [{ _AC_ECHO([configure: error: $1], 2); exit m4_default([$2], 1); }])
+ </PRE>
+ 
+ <P>
+ Comments about the macro should be left in the header comment.  Most
+ other comments will make their way into <TT>`configure'</TT>, so just keep
+ using <SAMP>`#'</SAMP> to introduce comments.
+ 
+ 
+ <P>
+ <A NAME="IDX670"></A>
+ If you have some very special comments about pure M4 code, comments
+ that make no sense in <TT>`configure'</TT> and in the header comment, then
+ use the builtin <CODE>dnl</CODE>: it causes <CODE>m4</CODE> to discard the text
+ through the next newline.
+ 
+ 
+ <P>
+ Keep in mind that <CODE>dnl</CODE> is rarely needed to introduce comments;
+ <CODE>dnl</CODE> is more useful to get rid of the newlines following macros
+ that produce no output, such as <CODE>AC_REQUIRE</CODE>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC103" HREF="autoconf_toc.html#TOC103">Macro Names</A></H2>
+ 
+ <P>
+ All of the Autoconf macros have all-uppercase names starting with
+ <SAMP>`AC_'</SAMP> to prevent them from accidentally conflicting with other
+ text.  All shell variables that they use for internal purposes have
+ mostly-lowercase names starting with <SAMP>`ac_'</SAMP>.  To ensure that your
+ macros don't conflict with present or future Autoconf macros, you should
+ prefix your own macro names and any shell variables they use with some
+ other sequence.  Possibilities include your initials, or an abbreviation
+ for the name of your organization or software package.
+ 
+ 
+ <P>
+ Most of the Autoconf macros' names follow a structured naming convention
+ that indicates the kind of feature check by the name.  The macro names
+ consist of several words, separated by underscores, going from most
+ general to most specific.  The names of their cache variables use the
+ same convention (see section <A HREF="autoconf.html#SEC83">Cache Variable Names</A>, for more information on
+ them).
+ 
+ 
+ <P>
+ The first word of the name after <SAMP>`AC_'</SAMP> usually tells the category
+ of feature being tested.  Here are the categories used in Autoconf for
+ specific test macros, the kind of macro that you are more likely to
+ write.  They are also used for cache variables, in all-lowercase.  Use
+ them where applicable; where they're not, invent your own categories.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>C</CODE>
+ <DD>
+ C language builtin features.
+ <DT><CODE>DECL</CODE>
+ <DD>
+ Declarations of C variables in header files.
+ <DT><CODE>FUNC</CODE>
+ <DD>
+ Functions in libraries.
+ <DT><CODE>GROUP</CODE>
+ <DD>
+ UNIX group owners of files.
+ <DT><CODE>HEADER</CODE>
+ <DD>
+ Header files.
+ <DT><CODE>LIB</CODE>
+ <DD>
+ C libraries.
+ <DT><CODE>PATH</CODE>
+ <DD>
+ The full path names to files, including programs.
+ <DT><CODE>PROG</CODE>
+ <DD>
+ The base names of programs.
+ <DT><CODE>MEMBER</CODE>
+ <DD>
+ Members of aggregates.
+ <DT><CODE>SYS</CODE>
+ <DD>
+ Operating system features.
+ <DT><CODE>TYPE</CODE>
+ <DD>
+ C builtin or declared types.
+ <DT><CODE>VAR</CODE>
+ <DD>
+ C variables in libraries.
+ </DL>
+ 
+ <P>
+ After the category comes the name of the particular feature being
+ tested.  Any further words in the macro name indicate particular aspects
+ of the feature.  For example, <CODE>AC_FUNC_UTIME_NULL</CODE> checks the
+ behavior of the <CODE>utime</CODE> function when called with a <CODE>NULL</CODE>
+ pointer.
+ 
+ 
+ <P>
+ An internal macro should have a name that starts with an underscore;
+ Autoconf internals should therefore start with <SAMP>`_AC_'</SAMP>.
+ Additionally, a macro that is an internal subroutine of another macro
+ should have a name that starts with an underscore and the name of that
+ other macro, followed by one or more words saying what the internal
+ macro does.  For example, <CODE>AC_PATH_X</CODE> has internal macros
+ <CODE>_AC_PATH_X_XMKMF</CODE> and <CODE>_AC_PATH_X_DIRECT</CODE>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC104" HREF="autoconf_toc.html#TOC104">Reporting Messages</A></H2>
+ <P>
+ <A NAME="IDX671"></A>
+ 
+ 
+ <P>
+ When macros statically diagnose abnormal situations, benign or fatal,
+ they should report them using these macros.  For dynamic issues, i.e.,
+ when @command{configure} is run, see section <A HREF="autoconf.html#SEC86">Printing Messages</A>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DIAGNOSE</B> <I>(<VAR>category</VAR>, <VAR>message</VAR>)</I>
+ <DD><A NAME="IDX672"></A>
+ <A NAME="IDX673"></A>
+ Report <VAR>message</VAR> as a warning (or as an error if requested by the
+ user) if it falls into the <VAR>category</VAR>.  You are encouraged to use
+ standard categories, which currently include:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`all'</SAMP>
+ <DD>
+ messages that don't fall into one of the following category.  Use of an
+ empty <VAR>category</VAR> is equivalent.
+ 
+ <DT><SAMP>`cross'</SAMP>
+ <DD>
+ related to cross compilation issues.
+ 
+ <DT><SAMP>`obsolete'</SAMP>
+ <DD>
+ use of an obsolete construct.
+ 
+ <DT><SAMP>`syntax'</SAMP>
+ <DD>
+ dubious syntactic constructs, incorrectly ordered macro calls.
+ </DL>
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_WARNING</B> <I>(<VAR>message</VAR>)</I>
+ <DD><A NAME="IDX674"></A>
+ <A NAME="IDX675"></A>
+ Equivalent to <SAMP>`AC_DIAGNOSE([syntax], <VAR>message</VAR>)'</SAMP>, but you are
+ strongly encouraged to use a finer grained category.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FATAL</B> <I>(<VAR>message</VAR>)</I>
+ <DD><A NAME="IDX676"></A>
+ <A NAME="IDX677"></A>
+ Report a severe error <VAR>message</VAR>, and have @command{autoconf} die.
+ </DL>
+ 
+ 
+ <P>
+ When the user runs <SAMP>`autoconf -W error'</SAMP>, warnings from
+ <CODE>AC_DIAGNOSE</CODE> and <CODE>AC_WARNING</CODE> are reported as error, see
+ section <A HREF="autoconf.html#SEC13">Using @command{autoconf} to Create @command{configure}</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC105" HREF="autoconf_toc.html#TOC105">Dependencies Between Macros</A></H2>
+ 
+ <P>
+ Some Autoconf macros depend on other macros having been called first in
+ order to work correctly.  Autoconf provides a way to ensure that certain
+ macros are called if needed and a way to warn the user if macros are
+ called in an order that might cause incorrect operation.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC106" HREF="autoconf_toc.html#TOC106">Prerequisite Macros</A></H3>
+ 
+ <P>
+ A macro that you write might need to use values that have previously
+ been computed by other macros.  For example, <CODE>AC_DECL_YYTEXT</CODE>
+ examines the output of <CODE>flex</CODE> or <CODE>lex</CODE>, so it depends on
+ <CODE>AC_PROG_LEX</CODE> having been called first to set the shell variable
+ <CODE>LEX</CODE>.
+ 
+ 
+ <P>
+ Rather than forcing the user of the macros to keep track of the
+ dependencies between them, you can use the <CODE>AC_REQUIRE</CODE> macro to do
+ it automatically.  <CODE>AC_REQUIRE</CODE> can ensure that a macro is only
+ called if it is needed, and only called once.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_REQUIRE</B> <I>(<VAR>macro-name</VAR>)</I>
+ <DD><A NAME="IDX678"></A>
+ <A NAME="IDX679"></A>
+ If the M4 macro <VAR>macro-name</VAR> has not already been called, call it
+ (without any arguments).  Make sure to quote <VAR>macro-name</VAR> with
+ square brackets.  <VAR>macro-name</VAR> must have been defined using
+ <CODE>AC_DEFUN</CODE> or else contain a call to <CODE>AC_PROVIDE</CODE> to indicate
+ that it has been called.
+ 
+ 
+ <P>
+ <CODE>AC_REQUIRE</CODE> must be used inside an <CODE>AC_DEFUN</CODE>'d macro; it
+ must not be called from the top level.
+ </DL>
+ 
+ 
+ <P>
+ <CODE>AC_REQUIRE</CODE> is often misunderstood.  It really implements
+ dependencies between macros in the sense that if one macro depends upon
+ another, the latter will be expanded <EM>before</EM> the body of the
+ former.  In particular, <SAMP>`AC_REQUIRE(FOO)'</SAMP> is not replaced with the
+ body of <CODE>FOO</CODE>.  For instance, this definition of macros:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN([TRAVOLTA],
+ [test "$body_temparature_in_celsius" -gt "38" &#38;&#38;
+   dance_floor=occupied])
+ AC_DEFUN([NEWTON_JOHN],
+ [test "$hair_style" = "curly" &#38;&#38;
+   dance_floor=occupied])
+ 
+ AC_DEFUN([RESERVE_DANCE_FLOOR],
+ [if date | grep '^Sat.*pm' &#62;/dev/null 2&#62;&#38;1; then
+   AC_REQUIRE([TRAVOLTA])
+   AC_REQUIRE([NEWTON_JOHN])
+ fi])
+ </PRE>
+ 
+ <P>
+ with this <TT>`configure.ac'</TT>
+ 
+ 
+ 
+ <PRE>
+ AC_INIT
+ RESERVE_DANCE_FLOOR
+ if test "$dance_floor" = occupied; then
+   AC_MSG_ERROR([cannot pick up here, let's move])
+ fi
+ </PRE>
+ 
+ <P>
+ will not leave you with a better chance to meet a kindred soul at
+ other times than Saturday night since it expands into:
+ 
+ 
+ 
+ <PRE>
+ test "$body_temperature_in_Celsius" -gt "38" &#38;&#38;
+   dance_floor=occupied
+ test "$hair_style" = "curly" &#38;&#38;
+   dance_floor=occupied
+ fi
+ if date | grep '^Sat.*pm' &#62;/dev/null 2&#62;&#38;1; then
+ 
+ fi
+ </PRE>
+ 
+ <P>
+ This behavior was chosen on purpose: (i) it prevents messages in
+ required macros from interrupting the messages in the requiring macros;
+ (ii) it avoids bad surprises when shell conditionals are used, as in:
+ 
+ 
+ 
+ <PRE>
+ if ...; then
+   AC_REQUIRE([SOME_CHECK])
+ fi
+ ...
+ SOME_CHECK
+ </PRE>
+ 
+ <P>
+ You are encouraged to put all <CODE>AC_REQUIRE</CODE>s at the beginning of a
+ macro.  You can use <CODE>dnl</CODE> to avoid the empty lines they leave.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC107" HREF="autoconf_toc.html#TOC107">Suggested Ordering</A></H3>
+ 
+ <P>
+ Some macros should be run before another macro if both are called, but
+ neither <EM>requires</EM> that the other be called.  For example, a macro
+ that changes the behavior of the C compiler should be called before any
+ macros that run the C compiler.  Many of these dependencies are noted in
+ the documentation.
+ 
+ 
+ <P>
+ Autoconf provides the <CODE>AC_BEFORE</CODE> macro to warn users when macros
+ with this kind of dependency appear out of order in a
+ <TT>`configure.ac'</TT> file.  The warning occurs when creating
+ @command{configure} from <TT>`configure.ac'</TT>, not when running
+ @command{configure}.
+ 
+ 
+ <P>
+ For example, <CODE>AC_PROG_CPP</CODE> checks whether the C compiler
+ can run the C preprocessor when given the @option{-E} option.  It should
+ therefore be called after any macros that change which C compiler is
+ being used, such as <CODE>AC_PROG_CC</CODE>.  So <CODE>AC_PROG_CC</CODE> contains:
+ 
+ 
+ 
+ <PRE>
+ AC_BEFORE([$0], [AC_PROG_CPP])dnl
+ </PRE>
+ 
+ <P>
+ This warns the user if a call to <CODE>AC_PROG_CPP</CODE> has already occurred
+ when <CODE>AC_PROG_CC</CODE> is called.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_BEFORE</B> <I>(<VAR>this-macro-name</VAR>, <VAR>called-macro-name</VAR>)</I>
+ <DD><A NAME="IDX680"></A>
+ <A NAME="IDX681"></A>
+ Make <CODE>m4</CODE> print a warning message to the standard error output if
+ <VAR>called-macro-name</VAR> has already been called.  <VAR>this-macro-name</VAR>
+ should be the name of the macro that is calling <CODE>AC_BEFORE</CODE>.  The
+ macro <VAR>called-macro-name</VAR> must have been defined using
+ <CODE>AC_DEFUN</CODE> or else contain a call to <CODE>AC_PROVIDE</CODE> to indicate
+ that it has been called.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC108" HREF="autoconf_toc.html#TOC108">Obsoleting Macros</A></H2>
+ 
+ <P>
+ Configuration and portability technology has evolved over the years.
+ Often better ways of solving a particular problem are developed, or
+ ad-hoc approaches are systematized.  This process has occurred in many
+ parts of Autoconf.  One result is that some of the macros are now
+ considered <EM>obsolete</EM>; they still work, but are no longer considered
+ the best thing to do, hence they should be replaced with more modern
+ macros.  Ideally, @command{autoupdate} should substitute the old macro calls
+ with their modern implementation.
+ 
+ 
+ <P>
+ Autoconf provides a simple means to obsolete a macro.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AU_DEFUN</B> <I>(<VAR>old-macro</VAR>, <VAR>implementation</VAR>, @ovar{message})</I>
+ <DD><A NAME="IDX682"></A>
+ <A NAME="IDX683"></A>
+ <A NAME="IDX684"></A>
+ Define <VAR>old-macro</VAR> as <VAR>implementation</VAR>.  The only difference
+ with <CODE>AC_DEFUN</CODE> is that the user will be warned that
+ <VAR>old-macro</VAR> is now obsolete.
+ 
+ 
+ <P>
+ If she then uses @command{autoupdate}, the call to <VAR>old-macro</VAR> will be
+ replaced by the modern <VAR>implementation</VAR>.  The additional
+ <VAR>message</VAR> is then printed.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC109" HREF="autoconf_toc.html#TOC109">Coding Style</A></H2>
+ 
+ <P>
+ The Autoconf macros follow a strict coding style.  You are encouraged to
+ follow this style, especially if you intend to distribute your macro,
+ either by contributing it to Autoconf itself, or via other means.
+ 
+ 
+ <P>
+ The first requirement is to pay great attention to the quotation, for
+ more details, see section <A HREF="autoconf.html#SEC9">The Autoconf Language</A>, and section <A HREF="autoconf.html#SEC88">M4 Quotation</A>.
+ 
+ 
+ <P>
+ Do not try to invent new interfaces.  It is likely that there is a macro
+ in Autoconf that resembles the macro you are defining: try to stick to
+ this existing interface (order of arguments, default values, etc.).  We
+ <EM>are</EM> conscious that some of these interfaces are not perfect;
+ nevertheless, when harmless, homogeneity should be preferred over
+ creativity.
+ 
+ 
+ <P>
+ Be careful about clashes both between M4 symbols and between shell
+ variables.
+ 
+ 
+ <P>
+ If you stick to the suggested M4 naming scheme (see section <A HREF="autoconf.html#SEC103">Macro Names</A>),
+ you are unlikely to generate conflicts.  Nevertheless, when you need to
+ set a special value, <EM>avoid using a regular macro name</EM>; rather,
+ use an "impossible" name.  For instance, up to version 2.13, the macro
+ <CODE>AC_SUBST</CODE> used to remember what <VAR>symbol</VAR>s were already defined
+ by setting <CODE>AC_SUBST_<VAR>symbol</VAR></CODE>, which is a regular macro name.
+ But since there is a macro named <CODE>AC_SUBST_FILE</CODE>, it was just
+ impossible to <SAMP>`AC_SUBST(FILE)'</SAMP>!  In this case,
+ <CODE>AC_SUBST(<VAR>symbol</VAR>)</CODE> or <CODE>_AC_SUBST(<VAR>symbol</VAR>)</CODE> should
+ have been used (yes, with the parentheses)...or better yet, high-level
+ macros such as <CODE>AC_EXPAND_ONCE</CODE>.
+ 
+ 
+ <P>
+ No Autoconf macro should ever enter the user-variable name space; i.e.,
+ except for the variables that are the actual result of running the
+ macro, all shell variables should start with <CODE>ac_</CODE>.  In
+ addition, small macros or any macro that is likely to be embedded in
+ other macros should be careful not to use obvious names.
+ 
+ 
+ <P>
+ <A NAME="IDX685"></A>
+ Do not use <CODE>dnl</CODE> to introduce comments: most of the comments you
+ are likely to write are either header comments which are not output
+ anyway, or comments that should make their way into <TT>`configure'</TT>.
+ There are exceptional cases where you do want to comment special M4
+ constructs, in which case <CODE>dnl</CODE> is right, but keep in mind that it
+ is unlikely.
+ 
+ 
+ <P>
+ M4 ignores the leading spaces before each argument, use this feature to
+ indent in such a way that arguments are (more or less) aligned with the
+ opening parenthesis of the macro being called.  For instance, instead of
+ 
+ 
+ 
+ <PRE>
+ AC_CACHE_CHECK(for EMX OS/2 environment,
+ ac_cv_emxos2,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, [return __EMX__;])],
+ [ac_cv_emxos2=yes], [ac_cv_emxos2=no])])
+ </PRE>
+ 
+ <P>
+ write
+ 
+ 
+ 
+ <PRE>
+ AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+                    [ac_cv_emxos2=yes],
+                    [ac_cv_emxos2=no])])
+ </PRE>
+ 
+ <P>
+ or even
+ 
+ 
+ 
+ <PRE>
+ AC_CACHE_CHECK([for EMX OS/2 environment],
+                [ac_cv_emxos2],
+                [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],
+                                                    [return __EMX__;])],
+                                   [ac_cv_emxos2=yes],
+                                   [ac_cv_emxos2=no])])
+ </PRE>
+ 
+ <P>
+ When using <CODE>AC_TRY_RUN</CODE> or any macro that cannot work when
+ cross-compiling, provide a pessimistic value (typically <SAMP>`no'</SAMP>).
+ 
+ 
+ <P>
+ Feel free to use various tricks to prevent auxiliary tools, such as
+ syntax-highlighting editors, from behaving improperly.  For instance,
+ instead of:
+ 
+ 
+ 
+ <PRE>
+ m4_bpatsubst([$1], [$"])
+ </PRE>
+ 
+ <P>
+ use
+ 
+ 
+ 
+ <PRE>
+ m4_bpatsubst([$1], [$""])
+ </PRE>
+ 
+ <P>
+ so that Emacsen do not open a endless "string" at the first quote.
+ For the same reasons, avoid:
+ 
+ 
+ 
+ <PRE>
+ test $[#] != 0
+ </PRE>
+ 
+ <P>
+ and use:
+ 
+ 
+ 
+ <PRE>
+ test $[@%:@] != 0
+ </PRE>
+ 
+ <P>
+ Otherwise, the closing bracket would be hidden inside a <SAMP>`#'</SAMP>-comment,
+ breaking the bracket-matching highlighting from Emacsen.  Note the
+ preferred style to escape from M4: <SAMP>`$[1]'</SAMP>, <SAMP>`$[@]'</SAMP>, etc.  Do
+ not escape when it is unneeded.  Common examples of useless quotation
+ are <SAMP>`[$]$1'</SAMP> (write <SAMP>`$$1'</SAMP>), <SAMP>`[$]var'</SAMP> (use <SAMP>`$var'</SAMP>),
+ etc.  If you add portability issues to the picture, you'll prefer
+ <SAMP>`${1+"$[@]"}'</SAMP> to <SAMP>`"[$]@"'</SAMP>, and you'll prefer do something
+ better than hacking Autoconf <CODE>:-)</CODE>.
+ 
+ 
+ <P>
+ When using @command{sed}, don't use @option{-e} except for indenting
+ purpose.  With the <CODE>s</CODE> command, the preferred separator is <SAMP>`/'</SAMP>
+ unless <SAMP>`/'</SAMP> itself is used in the command, in which case you should
+ use <SAMP>`,'</SAMP>.
+ 
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC102">Macro Definitions</A>, for details on how to define a macro.  If a
+ macro doesn't use <CODE>AC_REQUIRE</CODE> and it is expected to never be the
+ object of an <CODE>AC_REQUIRE</CODE> directive, then use <CODE>define</CODE>.  In
+ case of doubt, use <CODE>AC_DEFUN</CODE>.  All the <CODE>AC_REQUIRE</CODE>
+ statements should be at the beginning of the macro, <CODE>dnl</CODE>'ed.
+ 
+ 
+ <P>
+ You should not rely on the number of arguments: instead of checking
+ whether an argument is missing, test that it is not empty.  It provides
+ both a simpler and a more predictable interface to the user, and saves
+ room for further arguments.
+ 
+ 
+ <P>
+ Unless the macro is short, try to leave the closing <SAMP>`])'</SAMP> at the
+ beginning of a line, followed by a comment that repeats the name of the
+ macro being defined.  This introduces an additional newline in
+ @command{configure}; normally, that is not a problem, but if you want to
+ remove it you can use <SAMP>`[]dnl'</SAMP> on the last line.  You can similarly
+ use <SAMP>`[]dnl'</SAMP> after a macro call to remove its newline.  <SAMP>`[]dnl'</SAMP>
+ is recommended instead of <SAMP>`dnl'</SAMP> to ensure that M4 does not
+ interpret the <SAMP>`dnl'</SAMP> as being attached to the preceding text or
+ macro output.  For example, instead of:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN([AC_PATH_X],
+ [AC_MSG_CHECKING([for X])
+ AC_REQUIRE_CPP()
+ # ...omitted...
+   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+ fi])
+ </PRE>
+ 
+ <P>
+ you would write:
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN([AC_PATH_X],
+ [AC_REQUIRE_CPP()[]dnl
+ AC_MSG_CHECKING([for X])
+ # ...omitted...
+   AC_MSG_RESULT([libraries $x_libraries, headers $x_includes])
+ fi[]dnl
+ ])# AC_PATH_X
+ </PRE>
+ 
+ <P>
+ If the macro is long, try to split it into logical chunks.  Typically,
+ macros that check for a bug in a function and prepare its
+ <CODE>AC_LIBOBJ</CODE> replacement should have an auxiliary macro to perform
+ this setup.  Do not hesitate to introduce auxiliary macros to factor
+ your code.
+ 
+ 
+ <P>
+ In order to highlight the recommended coding style, here is a macro
+ written the old way:
+ 
+ 
+ 
+ <PRE>
+ dnl Check for EMX on OS/2.
+ dnl _AC_EMXOS2
+ AC_DEFUN(_AC_EMXOS2,
+ [AC_CACHE_CHECK(for EMX OS/2 environment, ac_cv_emxos2,
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM(, return __EMX__;)],
+ ac_cv_emxos2=yes, ac_cv_emxos2=no)])
+ test "$ac_cv_emxos2" = yes &#38;&#38; EMXOS2=yes])
+ </PRE>
+ 
+ <P>
+ and the new way:
+ 
+ 
+ 
+ <PRE>
+ # _AC_EMXOS2
+ # ----------
+ # Check for EMX on OS/2.
+ define([_AC_EMXOS2],
+ [AC_CACHE_CHECK([for EMX OS/2 environment], [ac_cv_emxos2],
+ [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [return __EMX__;])],
+                    [ac_cv_emxos2=yes],
+                    [ac_cv_emxos2=no])])
+ test "$ac_cv_emxos2" = yes &#38;&#38; EMXOS2=yes[]dnl
+ ])# _AC_EMXOS2
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC110" HREF="autoconf_toc.html#TOC110">Portable Shell Programming</A></H1>
+ 
+ <P>
+ When writing your own checks, there are some shell-script programming
+ techniques you should avoid in order to make your code portable.  The
+ Bourne shell and upward-compatible shells like the Korn shell and Bash
+ have evolved over the years, but to prevent trouble, do not take
+ advantage of features that were added after UNIX version 7, circa
+ 1977.  You should not use shell functions, aliases, negated character
+ classes, or other features that are not found in all Bourne-compatible
+ shells; restrict yourself to the lowest common denominator.  Even
+ <CODE>unset</CODE> is not supported by all shells!  Also, include a space
+ after the exclamation point in interpreter specifications, like this:
+ 
+ 
+ 
+ <PRE>
+ #! /usr/bin/perl
+ </PRE>
+ 
+ <P>
+ If you omit the space before the path, then 4.2BSD based systems
+ (such as Sequent DYNIX) will ignore the line, because they interpret
+ <SAMP>`#! /'</SAMP> as a 4-byte magic number.  Some old systems have quite
+ small limits on the length of the <SAMP>`#!'</SAMP> line too, for instance 32
+ bytes (not including the newline) on SunOS 4.
+ 
+ 
+ <P>
+ The set of external programs you should run in a @command{configure} script
+ is fairly small.  See section `Utilities in Makefiles' in <CITE>GNU Coding Standards</CITE>, for the list.  This
+ restriction allows users to start out with a fairly small set of
+ programs and build the rest, avoiding too many interdependencies between
+ packages.
+ 
+ 
+ <P>
+ Some of these external utilities have a portable subset of features; see
+ section <A HREF="autoconf.html#SEC119">Limitations of Usual Tools</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC111" HREF="autoconf_toc.html#TOC111">Shellology</A></H2>
+ 
+ <P>
+ There are several families of shells, most prominently the Bourne
+ family and the C shell family which are deeply incompatible.  If you
+ want to write portable shell scripts, avoid members of the C shell
+ family.
+ 
+ 
+ <P>
+ Below we describe some of the members of the Bourne shell family.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>Ash
+ <DD>
+ <A NAME="IDX686"></A>
+ @command{ash} is often used on GNU/Linux and BSD systems as a
+ light-weight Bourne-compatible shell.  Ash 0.2 has some bugs that are
+ fixed in the 0.3.x series, but portable shell scripts should workaround
+ them, since version 0.2 is still shipped with many GNU/Linux
+ distributions.
+ 
+ To be compatible with Ash 0.2:
+ 
+ 
+ <UL>
+ <LI>
+ 
+ don't use <SAMP>`$?'</SAMP> after expanding empty or unset variables:
+ 
+ 
+ <PRE>
+ foo=
+ false
+ $foo
+ echo "Don't use it: $?"
+ </PRE>
+ 
+ <LI>
+ 
+ don't use command substitution within variable expansion:
+ 
+ 
+ <PRE>
+ cat ${FOO=`bar`}
+ </PRE>
+ 
+ <LI>
+ 
+ beware that single builtin substitutions are not performed by a sub
+ shell, hence their effect applies to the current shell!  See section <A HREF="autoconf.html#SEC115">Shell Substitutions</A>, item "Command Substitution".
+ </UL>
+ 
+ <DT>Bash
+ <DD>
+ <A NAME="IDX687"></A>
+ To detect whether you are running @command{bash}, test if
+ <CODE>BASH_VERSION</CODE> is set.  To disable its extensions and require
+ POSIX compatibility, run <SAMP>`set -o posix'</SAMP>. See section `Bash POSIX Mode' in <CITE>The GNU Bash Reference Manual</CITE>, for
+ details.
+ 
+ <DT>Bash 2.05 and later
+ <DD>
+ <A NAME="IDX688"></A>
+ Versions 2.05 and later of @command{bash} use a different format for the
+ output of the @command{set} builtin, designed to make evaluating this
+ output easier.  However, this output is not compatible with earlier
+ versions of @command{bash} (or with many other shells, probably).  So if
+ you use @command{bash} 2.05 or higher to execute @command{configure},
+ you'll need to use @command{bash} 2.05 for all other build tasks as well.
+ 
+ <DT>@command{/usr/xpg4/bin/sh on Solaris}
+ <DD>
+ <A NAME="IDX689"></A>
+ The POSIX-compliant Bourne shell on a Solaris system is
+ @command{/usr/xpg4/bin/sh} and is part of an extra optional package.
+ There is no extra charge for this package, but it is also not part of a
+ minimal OS install and therefore some folks may not have it.
+ 
+ <DT>Zsh
+ <DD>
+ <A NAME="IDX690"></A>
+ To detect whether you are running @command{zsh}, test if
+ <CODE>ZSH_VERSION</CODE> is set.  By default @command{zsh} is <EM>not</EM>
+ compatible with the Bourne shell: you have to run <SAMP>`emulate sh'</SAMP> and
+ set <CODE>NULLCMD</CODE> to <SAMP>`:'</SAMP>. See section `Compatibility' in <CITE>The Z Shell Manual</CITE>, for details.
+ 
+ Zsh 3.0.8 is the native @command{/bin/sh} on Mac OS X 10.0.3.
+ </DL>
+ 
+ <P>
+ The following discussion between Russ Allbery and Robert Lipe is worth
+ reading:
+ 
+ 
+ <P>
+ Russ Allbery:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ The GNU assumption that @command{/bin/sh} is the one and only shell
+ leads to a permanent deadlock.  Vendors don't want to break user's
+ existant shell scripts, and there are some corner cases in the Bourne
+ shell that are not completely compatible with a POSIX shell.  Thus,
+ vendors who have taken this route will <EM>never</EM> (OK..."never say
+ never") replace the Bourne shell (as @command{/bin/sh}) with a
+ POSIX shell.
+ </BLOCKQUOTE>
+ 
+ <P>
+ Robert Lipe:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ This is exactly the problem.  While most (at least most System V's) do
+ have a Bourne shell that accepts shell functions most vendor
+ @command{/bin/sh} programs are not the POSIX shell.
+ 
+ 
+ <P>
+ So while most modern systems do have a shell _somewhere_ that meets the
+ POSIX standard, the challenge is to find it.
+ </BLOCKQUOTE>
+ 
+ 
+ 
+ <H2><A NAME="SEC112" HREF="autoconf_toc.html#TOC112">Here-Documents</A></H2>
+ 
+ <P>
+ Don't rely on <SAMP>`\'</SAMP> being preserved just because it has no special
+ meaning together with the next symbol.  in the native @command{/bin/sh}
+ on OpenBSD 2.7 <SAMP>`\"'</SAMP> expands to <SAMP>`"'</SAMP> in here-documents with
+ unquoted delimiter.  As a general rule, if <SAMP>`\\'</SAMP> expands to <SAMP>`\'</SAMP>
+ use <SAMP>`\\'</SAMP> to get <SAMP>`\'</SAMP>.
+ 
+ 
+ <P>
+ With OpenBSD 2.7's @command{/bin/sh}
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat &#60;&#60;EOF
+ &#62; \" \\
+ &#62; EOF</KBD>
+ " \
+ </PRE>
+ 
+ <P>
+ and with Bash:
+ 
+ 
+ 
+ <PRE>
+ bash-2.04$ <KBD>cat &#60;&#60;EOF
+ &#62; \" \\
+ &#62; EOF</KBD>
+ \" \
+ </PRE>
+ 
+ <P>
+ Many older shells (including the Bourne shell) implement here-documents
+ inefficiently.  Users can generally speed things up by using a faster
+ shell, e.g., by using the command <SAMP>`bash ./configure'</SAMP> rather than
+ plain <SAMP>`./configure'</SAMP>.
+ 
+ 
+ <P>
+ Some shells can be extremely inefficient when there are a lot of
+ here-documents inside a single statement.  For instance if your
+ <TT>`configure.ac'</TT> includes something like:
+ 
+ 
+ 
+ <PRE>
+ if &#60;cross_compiling&#62;; then
+   assume this and that
+ else
+   check this
+   check that
+   check something else
+   ...
+   on and on forever
+   ...
+ fi
+ </PRE>
+ 
+ <P>
+ A shell parses the whole <CODE>if</CODE>/<CODE>fi</CODE> construct, creating
+ temporary files for each here document in it.  Some shells create links
+ for such here-documents on every <CODE>fork</CODE>, so that the clean-up code
+ they had installed correctly removes them.  It is creating the links
+ that the shell can take forever.
+ 
+ 
+ <P>
+ Moving the tests out of the <CODE>if</CODE>/<CODE>fi</CODE>, or creating multiple
+ <CODE>if</CODE>/<CODE>fi</CODE> constructs, would improve the performance
+ significantly.  Anyway, this kind of construct is not exactly the
+ typical use of Autoconf.  In fact, it's even not recommended, because M4
+ macros can't look into shell conditionals, so we may fail to expand a
+ macro when it was expanded before in a conditional path, and the
+ condition turned out to be false at run-time, and we end up not
+ executing the macro at all.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC113" HREF="autoconf_toc.html#TOC113">File Descriptors</A></H2>
+ 
+ <P>
+ Some file descriptors shall not be used, since some systems, admittedly
+ arcane, use them for special purpose:
+ 
+ 
+ 
+ <PRE>
+ 3 --- some systems may open it to <SAMP>`/dev/tty'</SAMP>.
+ 4 --- used on the Kubota Titan.
+ </PRE>
+ 
+ <P>
+ Don't redirect several times the same file descriptor, as you are doomed
+ to failure under Ultrix.
+ 
+ 
+ 
+ <PRE>
+ ULTRIX V4.4 (Rev. 69) System #31: Thu Aug 10 19:42:23 GMT 1995
+ UWS V4.4 (Rev. 11)
+ $ <KBD>eval 'echo matter &#62;fullness' &#62;void</KBD>
+ illegal io
+ $ <KBD>eval '(echo matter &#62;fullness)' &#62;void</KBD>
+ illegal io
+ $ <KBD>(eval '(echo matter &#62;fullness)') &#62;void</KBD>
+ Ambiguous output redirect.
+ </PRE>
+ 
+ <P>
+ In each case the expected result is of course <TT>`fullness'</TT> containing
+ <SAMP>`matter'</SAMP> and <TT>`void'</TT> being empty.
+ 
+ 
+ <P>
+ Don't try to redirect the standard error of a command substitution: it
+ must be done <EM>inside</EM> the command substitution: when running
+ <SAMP>`: `cd /zorglub` 2&#62;/dev/null'</SAMP> expect the error message to
+ escape, while <SAMP>`: `cd /zorglub 2&#62;/dev/null`'</SAMP> works properly.
+ 
+ 
+ <P>
+ It is worth noting that Zsh (but not Ash nor Bash) makes it possible
+ in assignments though: <SAMP>`foo=`cd /zorglub` 2&#62;/dev/null'</SAMP>.
+ 
+ 
+ <P>
+ Most shells, if not all (including Bash, Zsh, Ash), output traces on
+ stderr, even for sub-shells.  This might result in undesired content
+ if you meant to capture the standard-error output of the inner command:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>ash -x -c '(eval "echo foo &#62;&#38;2") 2&#62;stderr'</KBD>
+ $ <KBD>cat stderr</KBD>
+ + eval echo foo &#62;&#38;2
+ + echo foo
+ foo
+ $ <KBD>bash -x -c '(eval "echo foo &#62;&#38;2") 2&#62;stderr'</KBD>
+ $ <KBD>cat stderr</KBD>
+ + eval 'echo foo &#62;&#38;2'
+ ++ echo foo
+ foo
+ $ <KBD>zsh -x -c '(eval "echo foo &#62;&#38;2") 2&#62;stderr'</KBD>
+ <I># Traces on startup files deleted here.</I>
+ $ <KBD>cat stderr</KBD>
+ +zsh:1&#62; eval echo foo &#62;&#38;2
+ +zsh:1&#62; echo foo
+ foo
+ </PRE>
+ 
+ <P>
+ You'll appreciate the various levels of detail...
+ 
+ 
+ <P>
+ One workaround is to grep out uninteresting lines, hoping not to remove
+ good ones...
+ 
+ 
+ <P>
+ Don't try to move/delete open files, such as in <SAMP>`exec &#62;foo; mv foo
+ bar'</SAMP>, see See section <A HREF="autoconf.html#SEC118">Limitations of Shell Builtins</A>, @command{mv} for more details.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC114" HREF="autoconf_toc.html#TOC114">File System Conventions</A></H2>
+ 
+ <P>
+ While @command{autoconf} and friends will usually be run on some Unix
+ variety, it can and will be used on other systems, most notably DOS
+ variants.  This impacts several assumptions regarding file and
+ path names.
+ 
+ 
+ <P>
+ For example, the following code:
+ 
+ 
+ 
+ <PRE>
+ case $foo_dir in
+   /*) # Absolute
+      ;;
+   *)
+      foo_dir=$dots$foo_dir ;;
+ esac
+ </PRE>
+ 
+ <P>
+ will fail to properly detect absolute paths on those systems, because
+ they can use a drivespec, and will usually use a backslash as directory
+ separator.  The canonical way to check for absolute paths is:
+ 
+ 
+ 
+ <PRE>
+ case $foo_dir in
+   [\\/]* | ?:[\\/]* ) # Absolute
+      ;;
+   *)
+      foo_dir=$dots$foo_dir ;;
+ esac
+ </PRE>
+ 
+ <P>
+ Make sure you quote the brackets if appropriate and keep the backslash as
+ first character (see section <A HREF="autoconf.html#SEC118">Limitations of Shell Builtins</A>).
+ 
+ 
+ <P>
+ Also, because the colon is used as part of a drivespec, these systems don't
+ use it as path separator.  When creating or accessing paths, use the
+ <CODE>PATH_SEPARATOR</CODE> output variable instead.  @command{configure} sets this
+ to the appropriate value (<SAMP>`:'</SAMP> or <SAMP>`;'</SAMP>) when it starts up.
+ 
+ 
+ <P>
+ File names need extra care as well.  While DOS-based environments
+ that are Unixy enough to run @command{autoconf} (such as DJGPP) will
+ usually be able to handle long file names properly, there are still
+ limitations that can seriously break packages.  Several of these issues
+ can be easily detected by the
+ @href{ftp://ftp.gnu.org/gnu/non-gnu/doschk/doschk-1.1.tar.gz, doschk}
+ package.
+ 
+ 
+ <P>
+ A short overview follows; problems are marked with SFN/LFN to
+ indicate where they apply: SFN means the issues are only relevant to
+ plain DOS, not to DOS boxes under Windows, while LFN
+ identifies problems that exist even under Windows.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>No multiple dots (SFN)
+ <DD>
+ DOS cannot handle multiple dots in filenames.  This is an especially
+ important thing to remember when building a portable configure script,
+ as @command{autoconf} uses a .in suffix for template files.
+ 
+ This is perfectly OK on Unices:
+ 
+ 
+ <PRE>
+ AC_CONFIG_HEADER(config.h)
+ AC_CONFIG_FILES([source.c foo.bar])
+ AC_OUTPUT
+ </PRE>
+ 
+ but it causes problems on DOS, as it requires <SAMP>`config.h.in'</SAMP>,
+ <SAMP>`source.c.in'</SAMP> and <SAMP>`foo.bar.in'</SAMP>.  To make your package more portable
+ to DOS-based environments, you should use this instead:
+ 
+ 
+ <PRE>
+ AC_CONFIG_HEADER(config.h:config.hin)
+ AC_CONFIG_FILES([source.c:source.cin foo.bar:foobar.in])
+ AC_OUTPUT
+ </PRE>
+ 
+ <DT>No leading dot (SFN)
+ <DD>
+ DOS cannot handle filenames that start with a dot.  This is usually
+ not a very important issue for @command{autoconf}.
+ 
+ <DT>Case insensitivity (LFN)
+ <DD>
+ DOS is case insensitive, so you cannot, for example, have both a
+ file called <SAMP>`INSTALL'</SAMP> and a directory called <SAMP>`install'</SAMP>.  This
+ also affects @command{make}; if there's a file called <SAMP>`INSTALL'</SAMP> in
+ the directory, @command{make install} will do nothing (unless the
+ <SAMP>`install'</SAMP> target is marked as PHONY).
+ 
+ <DT>The 8+3 limit (SFN)
+ <DD>
+ Because the DOS file system only stores the first 8 characters of
+ the filename and the first 3 of the extension, those must be unique.
+ That means that <TT>`foobar-part1.c'</TT>, <TT>`foobar-part2.c'</TT> and
+ <TT>`foobar-prettybird.c'</TT> all resolve to the same filename
+ (<TT>`FOOBAR-P.C'</TT>).  The same goes for <TT>`foo.bar'</TT> and
+ <TT>`foo.bartender'</TT>.
+ 
+ Note: This is not usually a problem under Windows, as it uses numeric
+ tails in the short version of filenames to make them unique.  However, a
+ registry setting can turn this behaviour off.  While this makes it
+ possible to share file trees containing long file names between SFN
+ and LFN environments, it also means the above problem applies there
+ as well.
+ 
+ <DT>Invalid characters
+ <DD>
+ Some characters are invalid in DOS filenames, and should therefore
+ be avoided. In a LFN environment, these are <SAMP>`/'</SAMP>, <SAMP>`\'</SAMP>,
+ <SAMP>`?'</SAMP>, <SAMP>`*'</SAMP>, <SAMP>`:'</SAMP>, <SAMP>`&#60;'</SAMP>, <SAMP>`&#62;'</SAMP>, <SAMP>`|'</SAMP> and <SAMP>`"'</SAMP>.
+ In a SFN environment, other characters are also invalid.  These
+ include <SAMP>`+'</SAMP>, <SAMP>`,'</SAMP>, <SAMP>`['</SAMP> and <SAMP>`]'</SAMP>.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC115" HREF="autoconf_toc.html#TOC115">Shell Substitutions</A></H2>
+ 
+ <P>
+ Contrary to a persistent urban legend, the Bourne shell does not
+ systematically split variables and backquoted expressions, in particular
+ on the right-hand side of assignments and in the argument of <CODE>case</CODE>.
+ For instance, the following code:
+ 
+ 
+ 
+ <PRE>
+ case "$given_srcdir" in
+ .)  top_srcdir="`echo "$dots" | sed 's,/$,,'`"
+ *)  top_srcdir="$dots$given_srcdir" ;;
+ esac
+ </PRE>
+ 
+ <P>
+ is more readable when written as:
+ 
+ 
+ 
+ <PRE>
+ case $given_srcdir in
+ .)  top_srcdir=`echo "$dots" | sed 's,/$,,'`
+ *)  top_srcdir=$dots$given_srcdir ;;
+ esac
+ </PRE>
+ 
+ <P>
+ and in fact it is even <EM>more</EM> portable: in the first case of the
+ first attempt, the computation of <CODE>top_srcdir</CODE> is not portable,
+ since not all shells properly understand <CODE>"`..."..."...`"</CODE>.
+ Worse yet, not all shells understand <CODE>"`...\"...\"...`"</CODE>
+ the same way.  There is just no portable way to use double-quoted
+ strings inside double-quoted backquoted expressions (pfew!).
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>$@</CODE>
+ <DD>
+ <A NAME="IDX691"></A>
+ One of the most famous shell-portability issues is related to
+ <SAMP>`"$@"'</SAMP>: when there are no positional arguments, it is supposed to
+ be equivalent to nothing.  But some shells, for instance under Digital
+ Unix 4.0 and 5.0, will then replace it with an empty argument.  To be
+ portable, use <SAMP>`${1+"$@"}'</SAMP>.
+ 
+ <DT><CODE>${<VAR>var</VAR>:-<VAR>value</VAR>}</CODE>
+ <DD>
+ <A NAME="IDX692"></A>
+ Old BSD shells, including the Ultrix <CODE>sh</CODE>, don't accept the
+ colon for any shell substitution, and complain and die.
+ 
+ <DT><CODE>${<VAR>var</VAR>=<VAR>literal</VAR>}</CODE>
+ <DD>
+ <A NAME="IDX693"></A>
+ Be sure to quote:
+ 
+ 
+ <PRE>
+ : ${var='Some words'}
+ </PRE>
+ 
+ otherwise some shells, such as on Digital Unix V 5.0, will die because
+ of a "bad substitution".
+ 
+ Solaris' @command{/bin/sh} has a frightening bug in its interpretation
+ of this.  Imagine you need set a variable to a string containing
+ <SAMP>`}'</SAMP>.  This <SAMP>`}'</SAMP> character confuses Solaris' @command{/bin/sh}
+ when the affected variable was already set.  This bug can be exercised
+ by running:
+ 
+ 
+ <PRE>
+ $ <KBD>unset foo</KBD>
+ $ <KBD>foo=${foo='}'}</KBD>
+ $ <KBD>echo $foo</KBD>
+ }
+ $ <KBD>foo=${foo='}'   # no error; this hints to what the bug is</KBD>
+ $ <KBD>echo $foo</KBD>
+ }
+ $ <KBD>foo=${foo='}'}</KBD>
+ $ <KBD>echo $foo</KBD>
+ }}
+  ^ ugh!
+ </PRE>
+ 
+ It seems that <SAMP>`}'</SAMP> is interpreted as matching <SAMP>`${'</SAMP>, even
+ though it is enclosed in single quotes.  The problem doesn't happen
+ using double quotes.
+ 
+ <DT><CODE>${<VAR>var</VAR>=<VAR>expanded-value</VAR>}</CODE>
+ <DD>
+ <A NAME="IDX694"></A>
+ On Ultrix,
+ running
+ 
+ 
+ <PRE>
+ default="yu,yaa"
+ : ${var="$default"}
+ </PRE>
+ 
+ will set <VAR>var</VAR> to <SAMP>`M-yM-uM-,M-yM-aM-a'</SAMP>, i.e., the 8th bit of
+ each char will be set. You won't observe the phenomenon using a simple
+ <SAMP>`echo $var'</SAMP> since apparently the shell resets the 8th bit when it
+ expands $var.  Here are two means to make this shell confess its sins:
+ 
+ 
+ <PRE>
+ $ <KBD>cat -v &#60;&#60;EOF
+ $var
+ EOF</KBD>
+ </PRE>
+ 
+ and
+ 
+ 
+ <PRE>
+ $ <KBD>set | grep '^var=' | cat -v</KBD>
+ </PRE>
+ 
+ One classic incarnation of this bug is:
+ 
+ 
+ <PRE>
+ default="a b c"
+ : ${list="$default"}
+ for c in $list; do
+   echo $c
+ done
+ </PRE>
+ 
+ You'll get <SAMP>`a b c'</SAMP> on a single line.  Why?  Because there are no
+ spaces in <SAMP>`$list'</SAMP>: there are <SAMP>`M- '</SAMP>, i.e., spaces with the 8th
+ bit set, hence no IFS splitting is performed!!!
+ 
+ One piece of good news is that Ultrix works fine with <SAMP>`:
+ ${list=$default}'</SAMP>; i.e., if you <EM>don't</EM> quote.  The bad news is
+ then that QNX 4.25 then sets <VAR>list</VAR> to the <EM>last</EM> item of
+ <VAR>default</VAR>!
+ 
+ The portable way out consists in using a double assignment, to switch
+ the 8th bit twice on Ultrix:
+ 
+ 
+ <PRE>
+ list=${list="$default"}
+ </PRE>
+ 
+ ...but beware of the <SAMP>`}'</SAMP> bug from Solaris (see above).  For safety,
+ use:
+ 
+ 
+ <PRE>
+ test "${var+set}" = set || var=<VAR>{value}</VAR>
+ </PRE>
+ 
+ <DT><CODE>`<VAR>commands</VAR>`</CODE>
+ <DD>
+ <A NAME="IDX695"></A>
+ <A NAME="IDX696"></A>
+ While in general it makes no sense, do not substitute a single builtin
+ with side effects as Ash 0.2, trying to optimize, does not fork a
+ sub-shell to perform the command.
+ 
+ For instance, if you wanted to check that @command{cd} is silent, do not
+ use <SAMP>`test -z "`cd /`"'</SAMP> because the following can happen:
+ 
+ 
+ <PRE>
+ $ <KBD>pwd</KBD>
+ /tmp
+ $ <KBD>test -n "`cd /`" &#38;&#38; pwd</KBD>
+ /
+ </PRE>
+ 
+ The result of <SAMP>`foo=`exit 1`'</SAMP> is left as an exercise to the reader.
+ 
+ <DT><CODE>$(<VAR>commands</VAR>)</CODE>
+ <DD>
+ <A NAME="IDX697"></A>
+ This construct is meant to replace <SAMP>``<VAR>commands</VAR>`'</SAMP>; they can be
+ nested while this is impossible to do portably with back quotes.
+ Unfortunately it is not yet widely supported.  Most notably, even recent
+ releases of Solaris don't support it:
+ 
+ 
+ <PRE>
+ $ <KBD>showrev -c /bin/sh | grep version</KBD>
+ Command version: SunOS 5.8 Generic 109324-02 February 2001
+ $ <KBD>echo $(echo blah)</KBD>
+ syntax error: `(' unexpected
+ </PRE>
+ 
+ nor does IRIX 6.5's Bourne shell:
+ 
+ <PRE>
+ $ <KBD>uname -a</KBD>
+ IRIX firebird-image 6.5 07151432 IP22
+ $ <KBD>echo $(echo blah)</KBD>
+ $(echo blah)
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC116" HREF="autoconf_toc.html#TOC116">Assignments</A></H2>
+ 
+ <P>
+ When setting several variables in a row, be aware that the order of the
+ evaluation is undefined.  For instance <SAMP>`foo=1 foo=2; echo $foo'</SAMP>
+ gives <SAMP>`1'</SAMP> with sh on Solaris, but <SAMP>`2'</SAMP> with Bash.  You must use
+ <SAMP>`;'</SAMP> to enforce the order: <SAMP>`foo=1; foo=2; echo $foo'</SAMP>.
+ 
+ 
+ <P>
+ Don't rely on the exit status of an assignment: Ash 0.2 does not change
+ the status and propagates that of the last statement:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>false || foo=bar; echo $?</KBD>
+ 1
+ $ <KBD>false || foo=`:`; echo $?</KBD>
+ 0
+ </PRE>
+ 
+ <P>
+ and to make things even worse, QNX 4.25 just sets the exit status
+ to 0 in any case:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>foo=`exit 1`; echo $?</KBD>
+ 0
+ </PRE>
+ 
+ <P>
+ To assign default values, follow this algorithm:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ If the default value is a literal and does not contain any closing
+ brace, use:
+ 
+ 
+ <PRE>
+ : ${var='my literal'}
+ </PRE>
+ 
+ <LI>
+ 
+ If the default value contains no closing brace, has to be expanded, and
+ the variable being initialized will never be IFS-split (i.e., it's not a
+ list), then use:
+ 
+ 
+ <PRE>
+ : ${var="$default"}
+ </PRE>
+ 
+ <LI>
+ 
+ If the default value contains no closing brace, has to be expanded, and
+ the variable being initialized will be IFS-split (i.e., it's a list),
+ then use:
+ 
+ 
+ <PRE>
+ var=${var="$default"}
+ </PRE>
+ 
+ <LI>
+ 
+ If the default value contains a closing brace, then use:
+ 
+ 
+ <PRE>
+ test "${var+set}" = set || var='${indirection}'
+ </PRE>
+ 
+ </OL>
+ 
+ <P>
+ In most cases <SAMP>`var=${var="$default"}'</SAMP> is fine, but in case of
+ doubt, just use the latter.  See section <A HREF="autoconf.html#SEC115">Shell Substitutions</A>, items
+ <SAMP>`${<VAR>var</VAR>:-<VAR>value</VAR>}'</SAMP> and <SAMP>`${<VAR>var</VAR>=<VAR>value</VAR>}'</SAMP>
+ for the rationale.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC117" HREF="autoconf_toc.html#TOC117">Special Shell Variables</A></H2>
+ 
+ <P>
+ Some shell variables should not be used, since they can have a deep
+ influence on the behavior of the shell.  In order to recover a sane
+ behavior from the shell, some variables should be unset, but
+ @command{unset} is not portable (see section <A HREF="autoconf.html#SEC118">Limitations of Shell Builtins</A>) and a
+ fallback value is needed.  We list these values below.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>CDPATH</CODE>
+ <DD>
+ <A NAME="IDX698"></A>
+ When this variable is set <CODE>cd</CODE> is verbose, so idioms such as
+ <SAMP>`abs=`cd $rel &#38;&#38; pwd`'</SAMP> break because <CODE>abs</CODE> receives the path
+ twice.
+ 
+ Setting <CODE>CDPATH</CODE> to the empty value is not enough for most shells.
+ A simple path separator is enough except for <CODE>zsh</CODE>, which prefers a
+ leading dot:
+ 
+ 
+ <PRE>
+ zsh-3.1.6$ <KBD>mkdir foo &#38;&#38; (CDPATH=: cd foo)</KBD>
+ /tmp/foo
+ zsh-3.1.6$ <KBD>(CDPATH=:. cd foo)</KBD>
+ /tmp/foo
+ zsh-3.1.6$ <KBD>(CDPATH=.: cd foo)</KBD>
+ zsh-3.1.6$
+ </PRE>
+ 
+ (of course we could just @command{unset} <CODE>CDPATH</CODE>, since it also
+ behaves properly if set to the empty string).
+ 
+ Life wouldn't be so much fun if @command{bash} and @command{zsh} had the
+ same behavior:
+ 
+ 
+ <PRE>
+ bash-2.02$ <KBD>mkdir foo &#38;&#38; (CDPATH=: cd foo)</KBD>
+ bash-2.02$ <KBD>(CDPATH=:. cd foo)</KBD>
+ bash-2.02$ <KBD>(CDPATH=.: cd foo)</KBD>
+ /tmp/foo
+ </PRE>
+ 
+ Of course, even better style would be to use <CODE>PATH_SEPARATOR</CODE> instead
+ of a <SAMP>`:'</SAMP>.
+ Therefore, a portable solution to neutralize <CODE>CDPATH</CODE> is
+ 
+ 
+ <PRE>
+ CDPATH=${ZSH_VERSION+.}$PATH_SEPARATOR
+ </PRE>
+ 
+ Note that since @command{zsh} supports @command{unset}, you may unset
+ <CODE>CDPATH</CODE> using <CODE>PATH_SEPARATOR</CODE> as a fallback, see
+ section <A HREF="autoconf.html#SEC118">Limitations of Shell Builtins</A>.
+ 
+ <DT><CODE>IFS</CODE>
+ <DD>
+ <A NAME="IDX699"></A>
+ Don't set the first character of <CODE>IFS</CODE> to backslash.  Indeed,
+ Bourne shells use the first character (backslash) when joining the
+ components in <SAMP>`"$@"'</SAMP> and some shells then re-interpret (!) the
+ backslash escapes, so you can end up with backspace and other strange
+ characters.
+ 
+ <DT><CODE>LANG</CODE>
+ <DD>
+ <DT><CODE>LC_ALL</CODE>
+ <DD>
+ <DT><CODE>LC_COLLATE</CODE>
+ <DD>
+ <DT><CODE>LC_CTYPE</CODE>
+ <DD>
+ <DT><CODE>LC_MESSAGES</CODE>
+ <DD>
+ <DT><CODE>LC_NUMERIC</CODE>
+ <DD>
+ <DT><CODE>LC_TIME</CODE>
+ <DD>
+ <A NAME="IDX700"></A>
+ <A NAME="IDX701"></A>
+ <A NAME="IDX702"></A>
+ <A NAME="IDX703"></A>
+ <A NAME="IDX704"></A>
+ <A NAME="IDX705"></A>
+ <A NAME="IDX706"></A>
+ 
+ Autoconf-generated scripts normally set all these variables to
+ <SAMP>`C'</SAMP> because so much configuration code assumes the C locale and
+ POSIX requires that @env{LC_ALL} be set to <SAMP>`C'</SAMP> if the C
+ locale is desired.  However, some older, nonstandard systems (notably
+ SCO) break if @env{LC_ALL} is set to <SAMP>`C'</SAMP>, so when running on
+ these systems Autoconf-generated scripts first try to unset the
+ variables instead.
+ 
+ <DT><CODE>LANGUAGE</CODE>
+ <DD>
+ <A NAME="IDX707"></A>
+ 
+ @env{LANGUAGE} is not specified by POSIX, but it is a GNU
+ extension that overrides @env{LC_ALL} in some cases, so
+ Autoconf-generated scripts set it too.
+ 
+ <DT><CODE>LINENO</CODE>
+ <DD>
+ <A NAME="IDX708"></A>
+ Most modern shells provide the current line number in <CODE>LINENO</CODE>.
+ Its value is the line number of the beginning of the current command.
+ Autoconf attempts to execute @command{configure} with a modern shell.
+ If no such shell is available, it attempts to implement <CODE>LINENO</CODE>
+ with a Sed prepass that replaces the each instance of the string
+ <CODE>$LINENO</CODE> (not followed by an alphanumeric character) with the
+ line's number.
+ 
+ You should not rely on <CODE>LINENO</CODE> within @command{eval}, as the
+ behavior differs in practice.  Also, the possibility of the Sed
+ prepass means that you should not rely on <CODE>$LINENO</CODE> when quoted,
+ when in here-documents, or when in long commands that cross line
+ boundaries.  Subshells should be OK, though.  In the following
+ example, lines 1, 6, and 9 are portable, but the other instances of
+ <CODE>LINENO</CODE> are not:
+ 
+ 
+ <PRE>
+ $ <KBD>cat lineno</KBD>
+ echo 1. $LINENO
+ cat &#60;&#60;EOF
+ 3. $LINENO
+ 4. $LINENO
+ EOF
+ ( echo 6. $LINENO )
+ eval 'echo 7. $LINENO'
+ echo 8. '$LINENO'
+ echo 9. $LINENO '
+ 10.' $LINENO
+ $ <KBD>bash-2.05 lineno</KBD>
+ 1. 1
+ 3. 2
+ 4. 2
+ 6. 6
+ 7. 1
+ 8. $LINENO
+ 9. 9
+ 10. 9
+ $ <KBD>zsh-3.0.6 lineno</KBD>
+ 1. 1
+ 3. 2
+ 4. 2
+ 6. 6
+ 7. 7
+ 8. $LINENO
+ 9. 9
+ 10. 9
+ $ <KBD>pdksh-5.2.14 lineno</KBD>
+ 1. 1
+ 3. 2
+ 4. 2
+ 6. 6
+ 7. 0
+ 8. $LINENO
+ 9. 9
+ 10. 9
+ $ <KBD>sed '=' &#60;lineno |</KBD>
+ &#62; <KBD>  sed '</KBD>
+ &#62; <KBD>    N</KBD>
+ &#62; <KBD>    s,$,-,</KBD>
+ &#62; <KBD>    : loop</KBD>
+ &#62; <KBD>    s,^\([0-9]*\)\(.*\)[$]LINENO\([^a-zA-Z0-9_]\),\1\2\1\3,</KBD>
+ &#62; <KBD>    t loop</KBD>
+ &#62; <KBD>    s,-$,,</KBD>
+ &#62; <KBD>    s,^[0-9]*\n,,</KBD>
+ &#62; <KBD>  ' |</KBD>
+ &#62; <KBD>  sh</KBD>
+ 1. 1
+ 3. 3
+ 4. 4
+ 6. 6
+ 7. 7
+ 8. 8
+ 9. 9
+ 10. 10
+ </PRE>
+ 
+ <DT><CODE>NULLCMD</CODE>
+ <DD>
+ <A NAME="IDX709"></A>
+ When executing the command <SAMP>`&#62;foo'</SAMP>, @command{zsh} executes
+ <SAMP>`$NULLCMD &#62;foo'</SAMP>.  The Bourne shell considers <CODE>NULLCMD</CODE> is
+ <SAMP>`:'</SAMP>, while @command{zsh}, even in Bourne shell compatibility mode,
+ sets <CODE>NULLCMD</CODE> to <SAMP>`cat'</SAMP>.  If you forgot to set <CODE>NULLCMD</CODE>,
+ your script might be suspended waiting for data on its standard input.
+ 
+ <DT><CODE>status</CODE>
+ <DD>
+ <A NAME="IDX710"></A>
+ This variable is an alias to <SAMP>`$?'</SAMP> for <CODE>zsh</CODE> (at least 3.1.6),
+ hence read-only.  Do not use it.
+ 
+ <DT><CODE>PATH_SEPARATOR</CODE>
+ <DD>
+ <A NAME="IDX711"></A>
+ If it is not set, @command{configure} will detect the appropriate path
+ separator for the build system and set the <CODE>PATH_SEPARATOR</CODE> output
+ variable accordingly.
+ 
+ On DJGPP systems, the <CODE>PATH_SEPARATOR</CODE> environment variable can be
+ set to either <SAMP>`:'</SAMP> or <SAMP>`;'</SAMP> to control the path separator
+ @command{bash} uses to set up certain environment variables (such as
+ <CODE>PATH</CODE>).  Since this only works inside @command{bash}, you want
+ @command{configure} to detect the regular DOS path separator
+ (<SAMP>`;'</SAMP>), so it can be safely substituted in files that may not support
+ <SAMP>`;'</SAMP> as path separator.  So it is recommended to either unset this
+ variable or set it to <SAMP>`;'</SAMP>.
+ 
+ <DT><CODE>RANDOM</CODE>
+ <DD>
+ <A NAME="IDX712"></A>
+ Many shells provide <CODE>RANDOM</CODE>, a variable that returns a different
+ integer when used.  Most of the time, its value does not change when it
+ is not used, but on IRIX 6.5 the value changes all the time.  This
+ can be observed by using @command{set}.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC118" HREF="autoconf_toc.html#TOC118">Limitations of Shell Builtins</A></H2>
+ 
+ <P>
+ No, no, we are serious: some shells do have limitations! :)
+ 
+ 
+ <P>
+ You should always keep in mind that any built-in or command may support
+ options, and therefore have a very different behavior with arguments
+ starting with a dash.  For instance, the innocent <SAMP>`echo "$word"'</SAMP>
+ can give unexpected results when <CODE>word</CODE> starts with a dash.  It is
+ often possible to avoid this problem using <SAMP>`echo "x$word"'</SAMP>, taking
+ the <SAMP>`x'</SAMP> into account later in the pipe.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@command{.}
+ <DD>
+ <A NAME="IDX713"></A>
+ Use @command{.} only with regular files (use <SAMP>`test -f'</SAMP>).  Bash
+ 2.03, for instance, chokes on <SAMP>`. /dev/null'</SAMP>.  Also, remember that
+ @command{.} uses @env{PATH} if its argument contains no slashes, so if
+ you want to use @command{.} on a file <TT>`foo'</TT> in the current
+ directory, you must use <SAMP>`. ./foo'</SAMP>.
+ 
+ <DT>@command{!}
+ <DD>
+ <A NAME="IDX714"></A>
+ You can't use @command{!}, you'll have to rewrite your code.
+ 
+ <DT>@command{break}
+ <DD>
+ <A NAME="IDX715"></A>
+ The use of <SAMP>`break 2'</SAMP>, etcetera, is safe.
+ 
+ <DT>@command{case}
+ <DD>
+ <A NAME="IDX716"></A>
+ You don't need to quote the argument; no splitting is performed.
+ 
+ You don't need the final <SAMP>`;;'</SAMP>, but you should use it.
+ 
+ Because of a bug in its <CODE>fnmatch</CODE>, @command{bash} fails to properly
+ handle backslashes in character classes:
+ 
+ 
+ <PRE>
+ bash-2.02$ <KBD>case /tmp in [/\\]*) echo OK;; esac</KBD>
+ bash-2.02$
+ </PRE>
+ 
+ This is extremely unfortunate, since you are likely to use this code to
+ handle UNIX or MS-DOS absolute paths.  To work around this
+ bug, always put the backslash first:
+ 
+ 
+ <PRE>
+ bash-2.02$ <KBD>case '\TMP' in [\\/]*) echo OK;; esac</KBD>
+ OK
+ bash-2.02$ <KBD>case /tmp in [\\/]*) echo OK;; esac</KBD>
+ OK
+ </PRE>
+ 
+ Some shells, such as Ash 0.3.8, are confused by empty
+ <CODE>case</CODE>/<CODE>esac</CODE>:
+ 
+ 
+ <PRE>
+ ash-0.3.8 $ <KBD>case foo in esac;</KBD>
+ error-->Syntax error: ";" unexpected (expecting ")")
+ </PRE>
+ 
+ Many shells still do not support parenthesized cases, which is a pity
+ for those of us using tools that rely on balanced parentheses.  For
+ instance, Solaris 2.8's Bourne shell:
+ 
+ 
+ <PRE>
+ $ <KBD>case foo in (foo) echo foo;; esac</KBD>
+ error-->syntax error: `(' unexpected
+ </PRE>
+ 
+ <DT>@command{echo}
+ <DD>
+ <A NAME="IDX717"></A>
+ The simple <CODE>echo</CODE> is probably the most surprising source of
+ portability troubles.  It is not possible to use <SAMP>`echo'</SAMP> portably
+ unless both options and escape sequences are omitted.  New applications
+ which are not aiming at portability should use <SAMP>`printf'</SAMP> instead of
+ <SAMP>`echo'</SAMP>.
+ 
+ Don't expect any option.  See section <A HREF="autoconf.html#SEC23">Preset Output Variables</A>, <CODE>ECHO_N</CODE>
+ etc. for a means to simulate @option{-c}.
+ 
+ Do not use backslashes in the arguments, as there is no consensus on
+ their handling.  On <SAMP>`echo '\n' | wc -l'</SAMP>, the @command{sh} of
+ Digital Unix 4.0, MIPS RISC/OS 4.52, answer 2, but the Solaris'
+ @command{sh}, Bash and Zsh (in @command{sh} emulation mode) report 1.
+ Please note that the problem is truly @command{echo}: all the shells
+ understand <SAMP>`'\n''</SAMP> as the string composed of a backslash and an
+ <SAMP>`n'</SAMP>.
+ 
+ Because of these problems, do not pass a string containing arbitrary
+ characters to @command{echo}.  For example, <SAMP>`echo "$foo"'</SAMP> is safe
+ if you know that <VAR>foo</VAR>'s value cannot contain backslashes and cannot
+ start with <SAMP>`-'</SAMP>, but otherwise you should use a here-document like
+ this:
+ 
+ 
+ <PRE>
+ cat &#60;&#60;EOF
+ $foo
+ EOF
+ </PRE>
+ 
+ <DT>@command{exit}
+ <DD>
+ <A NAME="IDX718"></A>
+ The default value of @command{exit} is supposed to be <CODE>$?</CODE>;
+ unfortunately, some shells, such as the DJGPP port of Bash 2.04, just
+ perform <SAMP>`exit 0'</SAMP>.
+ 
+ 
+ <PRE>
+ bash-2.04$ <KBD>foo=`exit 1` || echo fail</KBD>
+ fail
+ bash-2.04$ <KBD>foo=`(exit 1)` || echo fail</KBD>
+ fail
+ bash-2.04$ <KBD>foo=`(exit 1); exit` || echo fail</KBD>
+ bash-2.04$
+ </PRE>
+ 
+ Using <SAMP>`exit $?'</SAMP> restores the expected behavior.
+ 
+ Some shell scripts, such as those generated by @command{autoconf}, use a
+ trap to clean up before exiting.  If the last shell command exited with
+ nonzero status, the trap also exits with nonzero status so that the
+ invoker can tell that an error occurred.
+ 
+ Unfortunately, in some shells, such as Solaris 8 @command{sh}, an exit
+ trap ignores the <CODE>exit</CODE> command's status.  In these shells, a trap
+ cannot determine whether it was invoked by plain <CODE>exit</CODE> or by
+ <CODE>exit 1</CODE>.  Instead of calling <CODE>exit</CODE> directly, use the
+ <CODE>AC_MSG_ERROR</CODE> macro that has a workaround for this problem.
+ 
+ <DT>@command{export}
+ <DD>
+ <A NAME="IDX719"></A>
+ The builtin @command{export} dubs <EM>environment variable</EM> a shell
+ variable.  Each update of exported variables corresponds to an update of
+ the environment variables.  Conversely, each environment variable
+ received by the shell when it is launched should be imported as a shell
+ variable marked as exported.
+ 
+ Alas, many shells, such as Solaris 2.5, IRIX 6.3, IRIX 5.2, AIX 4.1.5
+ and DU 4.0, forget to @command{export} the environment variables they
+ receive.  As a result, two variables are coexisting: the environment
+ variable and the shell variable.  The following code demonstrates this
+ failure:
+ 
+ 
+ <PRE>
+ #! /bin/sh
+ echo $FOO
+ FOO=bar
+ echo $FOO
+ exec /bin/sh $0
+ </PRE>
+ 
+ when run with <SAMP>`FOO=foo'</SAMP> in the environment, these shells will print
+ alternately <SAMP>`foo'</SAMP> and <SAMP>`bar'</SAMP>, although it should only print
+ <SAMP>`foo'</SAMP> and then a sequence of <SAMP>`bar'</SAMP>s.
+ 
+ Therefore you should @command{export} again each environment variable
+ that you update.
+ 
+ <DT>@command{false}
+ <DD>
+ <A NAME="IDX720"></A>
+ Don't expect @command{false} to exit with status 1: in the native Bourne
+ shell of Solaris 8, it exits with status 255.
+ 
+ <DT>@command{for}
+ <DD>
+ <A NAME="IDX721"></A>
+ To loop over positional arguments, use:
+ 
+ 
+ <PRE>
+ for arg
+ do
+   echo "$arg"
+ done
+ </PRE>
+ 
+ You may <EM>not</EM> leave the <CODE>do</CODE> on the same line as <CODE>for</CODE>,
+ since some shells improperly grok:
+ 
+ 
+ <PRE>
+ for arg; do
+   echo "$arg"
+ done
+ </PRE>
+ 
+ If you want to explicitly refer to the positional arguments, given the
+ <SAMP>`$@'</SAMP> bug (see section <A HREF="autoconf.html#SEC115">Shell Substitutions</A>), use:
+ 
+ 
+ <PRE>
+ for arg in ${1+"$@"}; do
+   echo "$arg"
+ done
+ </PRE>
+ 
+ <DT>@command{if}
+ <DD>
+ <A NAME="IDX722"></A>
+ Using <SAMP>`!'</SAMP> is not portable.  Instead of:
+ 
+ 
+ <PRE>
+ if ! cmp -s file file.new; then
+   mv file.new file
+ fi
+ </PRE>
+ 
+ use:
+ 
+ 
+ <PRE>
+ if cmp -s file file.new; then :; else
+   mv file.new file
+ fi
+ </PRE>
+ 
+ There are shells that do not reset the exit status from an @command{if}:
+ 
+ 
+ <PRE>
+ $ <KBD>if (exit 42); then true; fi; echo $?</KBD>
+ 42
+ </PRE>
+ 
+ whereas a proper shell should have printed <SAMP>`0'</SAMP>.  This is especially
+ bad in Makefiles since it produces false failures.  This is why properly
+ written Makefiles, such as Automake's, have such hairy constructs:
+ 
+ 
+ <PRE>
+ if test -f "$file"; then
+   install "$file" "$dest"
+ else
+   :
+ fi
+ </PRE>
+ 
+ <DT>@command{set}
+ <DD>
+ <A NAME="IDX723"></A>
+ This builtin faces the usual problem with arguments starting with a
+ dash.  Modern shells such as Bash or Zsh understand @option{--} to specify
+ the end of the options (any argument after @option{--} is a parameters,
+ even <SAMP>`-x'</SAMP> for instance), but most shells simply stop the option
+ processing as soon as a non-option argument is found.  Therefore, use
+ <SAMP>`dummy'</SAMP> or simply <SAMP>`x'</SAMP> to end the option processing, and use
+ @command{shift} to pop it out:
+ 
+ 
+ <PRE>
+ set x $my_list; shift
+ </PRE>
+ 
+ <DT>@command{shift}
+ <DD>
+ <A NAME="IDX724"></A>
+ Not only is @command{shift}ing a bad idea when there is nothing left to
+ shift, but in addition it is not portable: the shell of MIPS
+ RISC/OS 4.52 refuses to do it.
+ 
+ <DT>@command{source}
+ <DD>
+ <A NAME="IDX725"></A>
+ This command is not portable, as POSIX does not require it; use
+ @command{.} instead.
+ 
+ <DT>@command{test}
+ <DD>
+ <A NAME="IDX726"></A>
+ The <CODE>test</CODE> program is the way to perform many file and string
+ tests.  It is often invoked by the alternate name <SAMP>`['</SAMP>, but using
+ that name in Autoconf code is asking for trouble since it is an M4 quote
+ character.
+ 
+ If you need to make multiple checks using <CODE>test</CODE>, combine them with
+ the shell operators <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP> instead of using the
+ <CODE>test</CODE> operators @option{-a} and @option{-o}.  On System V, the
+ precedence of @option{-a} and @option{-o} is wrong relative to the unary
+ operators; consequently, POSIX does not specify them, so using them
+ is nonportable.  If you combine <SAMP>`&#38;&#38;'</SAMP> and <SAMP>`||'</SAMP> in the same
+ statement, keep in mind that they have equal precedence.
+ 
+ You may use <SAMP>`!'</SAMP> with @command{test}, but not with @command{if}:
+ <SAMP>`test ! -r foo || exit 1'</SAMP>.
+ 
+ <DT>@command{test (files)}
+ <DD>
+ To enable @command{configure} scripts to support cross-compilation, they
+ shouldn't do anything that tests features of the build system instead of
+ the host system.  But occasionally you may find it necessary to check
+ whether some arbitrary file exists.  To do so, use <SAMP>`test -f'</SAMP> or
+ <SAMP>`test -r'</SAMP>.  Do not use <SAMP>`test -x'</SAMP>, because 4.3BSD does not
+ have it.  Do not use <SAMP>`test -e'</SAMP> either, because Solaris 2.5 does not
+ have it.
+ 
+ <DT>@command{test (strings)}
+ <DD>
+ Avoid <SAMP>`test "<VAR>string</VAR>"'</SAMP>, in particular if <VAR>string</VAR> might
+ start with a dash, since <CODE>test</CODE> might interpret its argument as an
+ option (e.g., <SAMP>`<VAR>string</VAR> = "-n"'</SAMP>).
+ 
+ Contrary to a common belief, <SAMP>`test -n <VAR>string</VAR>'</SAMP> and <SAMP>`test
+ -z <VAR>string</VAR>'</SAMP> <STRONG>are</STRONG> portable, nevertheless many shells (such
+ as Solaris 2.5, AIX 3.2, UNICOS 10.0.0.6, Digital Unix 4 etc.) have
+ bizarre precedence and may be confused if <VAR>string</VAR> looks like an
+ operator:
+ 
+ 
+ <PRE>
+ $ <KBD>test -n =</KBD>
+ test: argument expected
+ </PRE>
+ 
+ If there are risks, use <SAMP>`test "x<VAR>string</VAR>" = x'</SAMP> or <SAMP>`test
+ "x<VAR>string</VAR>" != x'</SAMP> instead.
+ 
+ It is frequent to find variations of the following idiom:
+ 
+ 
+ <PRE>
+ test -n "`echo $ac_feature | sed 's/[-a-zA-Z0-9_]//g'`" &#38;&#38;
+   <VAR>action</VAR>
+ </PRE>
+ 
+ to take an action when a token matches a given pattern.  Such constructs
+ should always be avoided by using:
+ 
+ 
+ <PRE>
+ echo "$ac_feature" | grep '[^-a-zA-Z0-9_]' &#62;/dev/null 2&#62;&#38;1 &#38;&#38;
+   <VAR>action</VAR>
+ </PRE>
+ 
+ Use <CODE>case</CODE> where possible since it is faster, being a shell builtin:
+ 
+ 
+ <PRE>
+ case $ac_feature in
+   *[!-a-zA-Z0-9_]*) <VAR>action</VAR>;;
+ esac
+ </PRE>
+ 
+ Alas, negated character classes are probably not portable, although no
+ shell is known to not support the POSIX.2 syntax <SAMP>`[!...]'</SAMP>
+ (when in interactive mode, @command{zsh} is confused by the
+ <SAMP>`[!...]'</SAMP> syntax and looks for an event in its history because of
+ <SAMP>`!'</SAMP>).  Many shells do not support the alternative syntax
+ <SAMP>`[^...]'</SAMP> (Solaris, Digital Unix, etc.).
+ 
+ One solution can be:
+ 
+ 
+ <PRE>
+ expr "$ac_feature" : '.*[^-a-zA-Z0-9_]' &#62;/dev/null &#38;&#38;
+   <VAR>action</VAR>
+ </PRE>
+ 
+ or better yet
+ 
+ 
+ <PRE>
+ expr "x$ac_feature" : '.*[^-a-zA-Z0-9_]' &#62;/dev/null &#38;&#38;
+   <VAR>action</VAR>
+ </PRE>
+ 
+ <SAMP>`expr "X<VAR>foo</VAR>" : "X<VAR>bar</VAR>"'</SAMP> is more robust than <SAMP>`echo
+ "X<VAR>foo</VAR>" | grep "^X<VAR>bar</VAR>"'</SAMP>, because it avoids problems when
+ <SAMP>`<VAR>foo</VAR>'</SAMP> contains backslashes.
+ 
+ <DT>@command{trap}
+ <DD>
+ <A NAME="IDX727"></A>
+ It is safe to trap at least the signals 1, 2, 13 and 15.  You can also
+ trap 0, i.e., have the @command{trap} run when the script ends (either via an
+ explicit @command{exit}, or the end of the script).
+ 
+ Although POSIX is not absolutely clear on this point, it is widely
+ admitted that when entering the trap <SAMP>`$?'</SAMP> should be set to the exit
+ status of the last command run before the trap.  The ambiguity can be
+ summarized as: "when the trap is launched by an @command{exit}, what is
+ the <EM>last</EM> command run: that before @command{exit}, or
+ @command{exit} itself?"
+ 
+ Bash considers @command{exit} to be the last command, while Zsh and
+ Solaris 8 @command{sh} consider that when the trap is run it is
+ <EM>still</EM> in the @command{exit}, hence it is the previous exit status
+ that the trap receives:
+ 
+ 
+ <PRE>
+ $ <KBD>cat trap.sh</KBD>
+ trap 'echo $?' 0
+ (exit 42); exit 0
+ $ <KBD>zsh trap.sh</KBD>
+ 42
+ $ <KBD>bash trap.sh</KBD>
+ 0
+ </PRE>
+ 
+ The portable solution is then simple: when you want to <SAMP>`exit 42'</SAMP>,
+ run <SAMP>`(exit 42); exit 42'</SAMP>, the first @command{exit} being used to
+ set the exit status to 42 for Zsh, and the second to trigger the trap
+ and pass 42 as exit status for Bash.
+ 
+ The shell in FreeBSD 4.0 has the following bug: <SAMP>`$?'</SAMP> is reset to 0
+ by empty lines if the code is inside @command{trap}.
+ 
+ 
+ <PRE>
+ $ <KBD>trap 'false</KBD>
+ 
+ echo $?' 0
+ $ <KBD>exit</KBD>
+ 0
+ </PRE>
+ 
+ Fortunately, this bug only affects @command{trap}.
+ 
+ <DT>@command{true}
+ <DD>
+ <A NAME="IDX728"></A>
+ <A NAME="IDX729"></A>
+ Don't worry: as far as we know @command{true} is portable.
+ Nevertheless, it's not always a builtin (e.g., Bash 1.x), and the
+ portable shell community tends to prefer using @command{:}.  This has a
+ funny side effect: when asked whether @command{false} is more portable
+ than @command{true} Alexandre Oliva answered:
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ In a sense, yes, because if it doesn't exist, the shell will produce an
+ exit status of failure, which is correct for @command{false}, but not
+ for @command{true}.
+ </BLOCKQUOTE>
+ 
+ <DT>@command{unset}
+ <DD>
+ <A NAME="IDX730"></A>
+ You cannot assume the support of @command{unset}, nevertheless, because
+ it is extremely useful to disable embarrassing variables such as
+ <CODE>CDPATH</CODE>, you can test for its existence and use
+ it <EM>provided</EM> you give a neutralizing value when @command{unset} is
+ not supported:
+ 
+ 
+ <PRE>
+ if (unset FOO) &#62;/dev/null 2&#62;&#38;1; then
+   unset=unset
+ else
+   unset=false
+ fi
+ $unset CDPATH || CDPATH=:
+ </PRE>
+ 
+ See section <A HREF="autoconf.html#SEC117">Special Shell Variables</A>, for some neutralizing values. Also, see
+ section <A HREF="autoconf.html#SEC118">Limitations of Shell Builtins</A>, documentation of @command{export}, for
+ the case of environment variables.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC119" HREF="autoconf_toc.html#TOC119">Limitations of Usual Tools</A></H2>
+ 
+ <P>
+ The small set of tools you can expect to find on any machine can still
+ include some limitations you should be aware of.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@command{awk}
+ <DD>
+ <A NAME="IDX731"></A>
+ Don't leave white spaces before the parentheses in user functions calls,
+ GNU awk will reject it:
+ 
+ 
+ <PRE>
+ $ <KBD>gawk 'function die () { print "Aaaaarg!"  }
+         BEGIN { die () }'</KBD>
+ gawk: cmd. line:2:         BEGIN { die () }
+ gawk: cmd. line:2:                      ^ parse error
+ $ <KBD>gawk 'function die () { print "Aaaaarg!"  }
+         BEGIN { die() }'</KBD>
+ Aaaaarg!
+ </PRE>
+ 
+ If you want your program to be deterministic, don't depend on <CODE>for</CODE>
+ on arrays:
+ 
+ 
+ <PRE>
+ $ <KBD>cat for.awk</KBD>
+ END {
+   arr["foo"] = 1
+   arr["bar"] = 1
+   for (i in arr)
+     print i
+ }
+ $ <KBD>gawk -f for.awk &#60;/dev/null</KBD>
+ foo
+ bar
+ $ <KBD>nawk -f for.awk &#60;/dev/null</KBD>
+ bar
+ foo
+ </PRE>
+ 
+ Some AWK, such as HPUX 11.0's native one, have regex engines fragile to
+ inner anchors:
+ 
+ 
+ <PRE>
+ $ <KBD>echo xfoo | $AWK '/foo|^bar/ { print }'</KBD>
+ $ <KBD>echo bar | $AWK '/foo|^bar/ { print }'</KBD>
+ bar
+ $ <KBD>echo xfoo | $AWK '/^bar|foo/ { print }'</KBD>
+ xfoo
+ $ <KBD>echo bar | $AWK '/^bar|foo/ { print }'</KBD>
+ bar
+ </PRE>
+ 
+ Either do not depend on such patterns (i.e., use <SAMP>`/^(.*foo|bar)/'</SAMP>,
+ or use a simple test to reject such AWK.
+ 
+ <DT>@command{cat}
+ <DD>
+ <A NAME="IDX732"></A>
+ Don't rely on any option.  The option @option{-v}, which displays
+ non-printing characters, <EM>seems</EM> portable, though.
+ 
+ <DT>@command{cc}
+ <DD>
+ When a compilation such as <SAMP>`cc foo.c -o foo'</SAMP> fails, some compilers
+ (such as CDS on Reliant UNIX) leave a <TT>`foo.o'</TT>.
+ 
+ HP-UX @command{cc} doesn't accept <TT>`.S'</TT> files to preprocess and
+ assemble.  <SAMP>`cc -c foo.S'</SAMP> will appear to succeed, but in fact does
+ nothing.
+ 
+ <DT>@command{cmp}
+ <DD>
+ <A NAME="IDX733"></A>
+ @command{cmp} performs a raw data comparison of two files, while
+ @command{diff} compares two text files.  Therefore, if you might compare
+ DOS files, even if only checking whether two files are different, use
+ @command{diff} to avoid spurious differences due to differences of
+ newline encoding.
+ 
+ <DT>@command{cp}
+ <DD>
+ <A NAME="IDX734"></A>
+ SunOS @command{cp} does not support @option{-f}, although its
+ @command{mv} does.  It's possible to deduce why @command{mv} and
+ @command{cp} are different with respect to @option{-f}.  @command{mv}
+ prompts by default before overwriting a read-only file.  @command{cp}
+ does not.  Therefore, @command{mv} requires a @option{-f} option, but
+ @command{cp} does not.  @command{mv} and @command{cp} behave differently
+ with respect to read-only files because the simplest form of
+ @command{cp} cannot overwrite a read-only file, but the simplest form of
+ @command{mv} can.  This is because @command{cp} opens the target for
+ write access, whereas @command{mv} simply calls <CODE>link</CODE> (or, in
+ newer systems, <CODE>rename</CODE>).
+ 
+ <DT>@command{date}
+ <DD>
+ <A NAME="IDX735"></A>
+ Some versions of @command{date} do not recognize special % directives,
+ and unfortunately, instead of complaining, they just pass them through,
+ and exit with success:
+ 
+ 
+ <PRE>
+ $ <KBD>uname -a</KBD>
+ OSF1 medusa.sis.pasteur.fr V5.1 732 alpha
+ $ <KBD>date "+%s"</KBD>
+ %s
+ </PRE>
+ 
+ <DT>@command{diff}
+ <DD>
+ <A NAME="IDX736"></A>
+ Option @option{-u} is nonportable.
+ 
+ Some implementations, such as Tru64's, fail when comparing to
+ <TT>`/dev/null'</TT>.  Use an empty file instead.
+ 
+ <DT>@command{dirname}
+ <DD>
+ <A NAME="IDX737"></A>
+ Not all hosts have a working @command{dirname}, and you should instead
+ use <CODE>AS_DIRNAME</CODE> (see section <A HREF="autoconf.html#SEC100">Programming in M4sh</A>).  For example:
+ 
+ 
+ <PRE>
+ dir=`dirname "$file"`       # This is not portable.
+ dir=`AS_DIRNAME(["$file"])` # This is more portable.
+ </PRE>
+ 
+ This handles a few subtleties in the standard way required by
+ POSIX.  For example, under UN*X, should <SAMP>`dirname //1'</SAMP> give
+ <SAMP>`/'</SAMP>?  Paul Eggert answers:
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ No, under some older flavors of Unix, leading <SAMP>`//'</SAMP> is a special
+ path name: it refers to a "super-root" and is used to access other
+ machines' files.  Leading <SAMP>`///'</SAMP>, <SAMP>`////'</SAMP>, etc. are equivalent
+ to <SAMP>`/'</SAMP>; but leading <SAMP>`//'</SAMP> is special.  I think this tradition
+ started with Apollo Domain/OS, an OS that is still in use on some older
+ hosts.
+ 
+ 
+ <P>
+ POSIX allows but does not require the special treatment for <SAMP>`//'</SAMP>.
+ It says that the behavior of dirname on path names of the form
+ <SAMP>`//([^/]+/*)?'</SAMP>  is implementation defined.  In these cases, GNU
+ @command{dirname} returns <SAMP>`/'</SAMP>, but it's more portable to return
+ <SAMP>`//'</SAMP> as this works even on those older flavors of Unix.
+ </BLOCKQUOTE>
+ 
+ <DT>@command{egrep}
+ <DD>
+ <A NAME="IDX738"></A>
+ The empty alternative is not portable, use <SAMP>`?'</SAMP> instead. For
+ instance with Digital Unix v5.0:
+ 
+ 
+ <PRE>
+ &#62; printf "foo\n|foo\n" | egrep '^(|foo|bar)$'
+ |foo
+ &#62; printf "bar\nbar|\n" | egrep '^(foo|bar|)$'
+ bar|
+ &#62; printf "foo\nfoo|\n|bar\nbar\n" | egrep '^(foo||bar)$'
+ foo
+ |bar
+ </PRE>
+ 
+ @command{egrep} also suffers the limitations of @command{grep}.
+ 
+ <DT>@command{expr}
+ <DD>
+ <A NAME="IDX739"></A>
+ No @command{expr} keyword starts with <SAMP>`x'</SAMP>, so use @samp{expr
+ x"<VAR>word</VAR>" : 'x<VAR>regex</VAR>'} to keep @command{expr} from
+ misinterpreting <VAR>word</VAR>.
+ 
+ Don't use <CODE>length</CODE>, <CODE>substr</CODE>, <CODE>match</CODE> and <CODE>index</CODE>.
+ 
+ <DT>@command{expr (<SAMP>`|'</SAMP>)}
+ <DD>
+ <A NAME="IDX740"></A>
+ You can use <SAMP>`|'</SAMP>.  Although POSIX does require that <SAMP>`expr
+ "'</SAMP> return the empty string, it does not specify the result when you
+ <SAMP>`|'</SAMP> together the empty string (or zero) with the empty string.  For
+ example:
+ 
+ 
+ <PRE>
+ expr '' \| ''
+ </PRE>
+ 
+ GNU/Linux and POSIX.2-1992 return the empty string for this
+ case, but traditional Unix returns <SAMP>`0'</SAMP> (Solaris is one such
+ example).  In the latest POSIX draft, the specification has been
+ changed to match traditional Unix's behavior (which is bizarre, but it's
+ too late to fix this).  Please note that the same problem does arise
+ when the empty string results from a computation, as in:
+ 
+ 
+ <PRE>
+ expr bar : foo \| foo : bar
+ </PRE>
+ 
+ Avoid this portability problem by avoiding the empty string.
+ 
+ <DT>@command{expr (<SAMP>`:'</SAMP>)}
+ <DD>
+ <A NAME="IDX741"></A>
+ Don't use <SAMP>`\?'</SAMP>, <SAMP>`\+'</SAMP> and <SAMP>`\|'</SAMP> in patterns, they are
+ not supported on Solaris.
+ 
+ The POSIX.2-1992 standard is ambiguous as to whether <SAMP>`expr a :
+ b'</SAMP> (and <SAMP>`expr 'a' : '\(b\)''</SAMP>) output <SAMP>`0'</SAMP> or the empty string.
+ In practice, it outputs the empty string on most platforms, but portable
+ scripts should not assume this.  For instance, the QNX 4.25 native
+ @command{expr} returns <SAMP>`0'</SAMP>.
+ 
+ You may believe that one means to get a uniform behavior would be to use
+ the empty string as a default value:
+ 
+ 
+ <PRE>
+ expr a : b \| ''
+ </PRE>
+ 
+ unfortunately this behaves exactly as the original expression, see the
+ <SAMP>`@command{expr'</SAMP> (<SAMP>`:'</SAMP>)} entry for more information.
+ 
+ Older @command{expr} implementations (e.g. SunOS 4 @command{expr} and
+ Solaris 8 @command{/usr/ucb/expr}) have a silly length limit that causes
+ @command{expr} to fail if the matched substring is longer than 120
+ bytes.  In this case, you might want to fall back on <SAMP>`echo|sed'</SAMP> if
+ @command{expr} fails.
+ 
+ Don't leave, there is some more!
+ 
+ The QNX 4.25 @command{expr}, in addition of preferring <SAMP>`0'</SAMP> to
+ the empty string, has a funny behavior in its exit status: it's always 1
+ when parentheses are used!
+ 
+ 
+ <PRE>
+ $ <KBD>val=`expr 'a' : 'a'`; echo "$?: $val"</KBD>
+ 0: 1
+ $ <KBD>val=`expr 'a' : 'b'`; echo "$?: $val"</KBD>
+ 1: 0
+ 
+ $ <KBD>val=`expr 'a' : '\(a\)'`; echo "?: $val"</KBD>
+ 1: a
+ $ <KBD>val=`expr 'a' : '\(b\)'`; echo "?: $val"</KBD>
+ 1: 0
+ </PRE>
+ 
+ In practice this can be a big problem if you are ready to catch failures
+ of @command{expr} programs with some other method (such as using
+ @command{sed}), since you may get twice the result.  For instance
+ 
+ 
+ <PRE>
+ $ <KBD>expr 'a' : '\(a\)' || echo 'a' | sed 's/^\(a\)$/\1/'</KBD>
+ </PRE>
+ 
+ will output <SAMP>`a'</SAMP> on most hosts, but <SAMP>`aa'</SAMP> on QNX 4.25.  A
+ simple work around consists in testing @command{expr} and use a variable
+ set to @command{expr} or to @command{false} according to the result.
+ 
+ <DT>@command{find}
+ <DD>
+ The option @option{-maxdepth} seems to be GNU specific. Tru64 v5.1,
+ NetBSD 1.5 and Solaris 2.5 @command{find} commands do not understand it.
+ 
+ The replacement of <SAMP>`{}'</SAMP> is guaranteed only if the argument is
+ exactly <EM>{}</EM>, not if it's only a part of an argument.  For
+ instance on DU, and HP-UX 10.20 and HP-UX 11:
+ 
+ 
+ <PRE>
+ $ <KBD>touch foo</KBD>
+ $ <KBD>find . -name foo -exec echo "{}-{}" \;</KBD>
+ {}-{}
+ </PRE>
+ 
+ while GNU @command{find} reports <SAMP>`./foo-./foo'</SAMP>.
+ 
+ <DT>@command{grep}
+ <DD>
+ <A NAME="IDX742"></A>
+ Don't use <SAMP>`grep -s'</SAMP> to suppress output, because <SAMP>`grep -s'</SAMP> on
+ System V does not suppress output, only error messages.  Instead,
+ redirect the standard output and standard error (in case the file
+ doesn't exist) of <CODE>grep</CODE> to <TT>`/dev/null'</TT>.  Check the exit
+ status of <CODE>grep</CODE> to determine whether it found a match.
+ 
+ Don't use multiple regexps with @option{-e}, as some <CODE>grep</CODE> will only
+ honor the last pattern (eg., IRIX 6.5 and Solaris 2.5.1).  Anyway,
+ Stardent Vistra SVR4 <CODE>grep</CODE> lacks @option{-e}...  Instead, use
+ alternation and <CODE>egrep</CODE>.
+ 
+ <DT>@command{ln}
+ <DD>
+ <A NAME="IDX743"></A>
+ <A NAME="IDX744"></A>
+ Don't rely on @command{ln} having a @option{-f} option.  Symbolic links
+ are not available on old systems, use <SAMP>`ln'</SAMP> as a fall back.
+ 
+ For versions of the DJGPP before 2.04, @command{ln} emulates soft links
+ for executables by generating a stub that in turn calls the real
+ program.  This feature also works with nonexistent files like in the
+ Unix spec. So <SAMP>`ln -s file link'</SAMP> will generate <TT>`link.exe'</TT>,
+ which will attempt to call <TT>`file.exe'</TT> if run. But this feature only
+ works for executables, so <SAMP>`cp -p'</SAMP> is used instead for these
+ systems.  DJGPP versions 2.04 and later have full symlink support.
+ 
+ <DT>@command{mv}
+ <DD>
+ <A NAME="IDX745"></A>
+ <A NAME="IDX746"></A>
+ The only portable options are @option{-f} and @option{-i}.
+ 
+ Moving individual files between file systems is portable (it was in V6),
+ but it is not always atomic: when doing <SAMP>`mv new existing'</SAMP>, there's
+ a critical section where neither the old nor the new version of
+ <TT>`existing'</TT> actually exists.
+ 
+ Moving directories across mount points is not portable, use @command{cp}
+ and @command{rm}.
+ 
+ Moving/Deleting open files isn't portable. The following can't be done
+ on DOS/WIN32:
+ 
+ 
+ <PRE>
+ exec &#62; foo
+ mv foo bar
+ </PRE>
+ 
+ nor can
+ 
+ 
+ <PRE>
+ exec &#62; foo
+ rm -f foo
+ </PRE>
+ 
+ <DT>@command{sed}
+ <DD>
+ <A NAME="IDX747"></A>
+ Patterns should not include the separator (unless escaped), even as part
+ of a character class.  In conformance with POSIX, the Cray
+ @command{sed} will reject <SAMP>`s/[^/]*$//'</SAMP>: use <SAMP>`s,[^/]*$,,'</SAMP>.
+ 
+ Sed scripts should not use branch labels longer than 8 characters and
+ should not contain comments.
+ 
+ Don't include extra <SAMP>`;'</SAMP>, as some @command{sed}, such as NetBSD
+ 1.4.2's, try to interpret the second as a command:
+ 
+ 
+ <PRE>
+ $ <KBD>echo a | sed 's/x/x/;;s/x/x/'</KBD>
+ sed: 1: "s/x/x/;;s/x/x/": invalid command code ;
+ </PRE>
+ 
+ Input should have reasonably long lines, since some @command{sed} have
+ an input buffer limited to 4000 bytes.
+ 
+ Alternation, <SAMP>`\|'</SAMP>, is common but POSIX.2 does not require its
+ support, so it should be avoided in portable scripts.  Solaris 8
+ @command{sed} does not support alternation; e.g. <SAMP>`sed '/a\|b/d''</SAMP>
+ deletes only lines that contain the literal string <SAMP>`a|b'</SAMP>.
+ 
+ Anchors (<SAMP>`^'</SAMP> and <SAMP>`$'</SAMP>) inside groups are not portable.
+ 
+ Nested parenthesization in patterns (e.g., <SAMP>`\(\(a*\)b*)\)'</SAMP>) is
+ quite portable to modern hosts, but is not supported by some older
+ @command{sed} implementations like SVR3.
+ 
+ Of course the option @option{-e} is portable, but it is not needed.  No
+ valid Sed program can start with a dash, so it does not help
+ disambiguating.  Its sole usefulness is helping enforcing indenting as
+ in:
+ 
+ 
+ <PRE>
+ sed -e <VAR>instruction-1</VAR> \
+     -e <VAR>instruction-2</VAR>
+ </PRE>
+ 
+ as opposed to
+ 
+ 
+ <PRE>
+ sed <VAR>instruction-1</VAR>;<VAR>instruction-2</VAR>
+ </PRE>
+ 
+ Contrary to yet another urban legend, you may portably use <SAMP>`&#38;'</SAMP> in
+ the replacement part of the <CODE>s</CODE> command to mean "what was
+ matched".  All descendents of Bell Lab's V7 @command{sed} (at least; we
+ don't have first hand experience with older @command{sed}s) have
+ supported it.
+ 
+ <DT>@command{sed (<SAMP>`t'</SAMP>)}
+ <DD>
+ <A NAME="IDX748"></A>
+ Some old systems have @command{sed} that "forget" to reset their
+ <SAMP>`t'</SAMP> flag when starting a new cycle.  For instance on MIPS
+ RISC/OS, and on IRIX 5.3, if you run the following @command{sed}
+ script (the line numbers are not actual part of the texts):
+ 
+ 
+ <PRE>
+ s/keep me/kept/g  # a
+ t end             # b
+ s/.*/deleted/g    # c
+ : end             # d
+ </PRE>
+ 
+ on
+ 
+ 
+ <PRE>
+ delete me         # 1
+ delete me         # 2
+ keep me           # 3
+ delete me         # 4
+ </PRE>
+ 
+ you get
+ 
+ 
+ <PRE>
+ deleted
+ delete me
+ kept
+ deleted
+ </PRE>
+ 
+ instead of
+ 
+ 
+ <PRE>
+ deleted
+ deleted
+ kept
+ deleted
+ </PRE>
+ 
+ Why? When processing 1, a matches, therefore sets the t flag, b jumps to
+ d, and the output is produced.  When processing line 2, the t flag is
+ still set (this is the bug).  Line a fails to match, but @command{sed}
+ is not supposed to clear the t flag when a substitution fails.  Line b
+ sees that the flag is set, therefore it clears it, and jumps to d, hence
+ you get <SAMP>`delete me'</SAMP> instead of <SAMP>`deleted'</SAMP>.  When processing 3 t
+ is clear, a matches, so the flag is set, hence b clears the flags and
+ jumps.  Finally, since the flag is clear, 4 is processed properly.
+ 
+ There are two things one should remind about <SAMP>`t'</SAMP> in @command{sed}.
+ Firstly, always remember that <SAMP>`t'</SAMP> jumps if <EM>some</EM> substitution
+ succeeded, not only the immediately preceding substitution, therefore,
+ always use a fake <SAMP>`t clear; : clear'</SAMP> to reset the t flag where
+ indeed.
+ 
+ Secondly, you cannot rely on @command{sed} to clear the flag at each new
+ cycle.
+ 
+ One portable implementation of the script above is:
+ 
+ 
+ <PRE>
+ t clear
+ : clear
+ s/keep me/kept/g
+ t end
+ s/.*/deleted/g
+ : end
+ </PRE>
+ 
+ <DT>@command{touch}
+ <DD>
+ <A NAME="IDX749"></A>
+ On some old BSD systems, @command{touch} or any command that
+ results in an empty file does not update the timestamps, so use a
+ command like <CODE>echo</CODE> as a workaround.
+ 
+ GNU @command{touch} 3.16r (and presumably all before that) fails to work
+ on SunOS 4.1.3 when the empty file is on an NFS-mounted 4.2 volume.
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC120" HREF="autoconf_toc.html#TOC120">Limitations of Make</A></H2>
+ 
+ <P>
+ Make itself suffers a great number of limitations, only a few of which
+ being listed here.  First of all, remember that since commands are
+ executed by the shell, all its weaknesses are inherited...
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>$&#60;</CODE>
+ <DD>
+ POSIX says that the <SAMP>`$&#60;'</SAMP> construct in makefiles can be used
+ only in inference rules and in the <SAMP>`.DEFAULT'</SAMP> rule; its meaning in
+ ordinary rules is unspecified.  Solaris 8's @command{make} for instance
+ will replace it with the argument.
+ 
+ <DT>Leading underscore in macro names
+ <DD>
+ Some Make don't support leading underscores in macro names, such as on
+ NEWS-OS 4.2R.
+ 
+ 
+ <PRE>
+ $ <KBD>cat Makefile</KBD>
+ _am_include = #
+ _am_quote =
+ all:; @echo this is test
+ $ <KBD>make</KBD>
+ Make: Must be a separator on rules line 2.  Stop.
+ $ <KBD>cat Makefile2</KBD>
+ am_include = #
+ am_quote =
+ all:; @echo this is test
+ $ <KBD>make -f Makefile2</KBD>
+ this is test
+ </PRE>
+ 
+ <DT><CODE>VPATH</CODE>
+ <DD>
+ <A NAME="IDX750"></A>
+ Don't use it!  For instance any assignment to <CODE>VPATH</CODE> causes Sun
+ @command{make} to only execute the first set of double-colon rules.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC121" HREF="autoconf_toc.html#TOC121">Manual Configuration</A></H1>
+ 
+ <P>
+ A few kinds of features can't be guessed automatically by running test
+ programs.  For example, the details of the object-file format, or
+ special options that need to be passed to the compiler or linker.  You
+ can check for such features using ad-hoc means, such as having
+ @command{configure} check the output of the <CODE>uname</CODE> program, or
+ looking for libraries that are unique to particular systems.  However,
+ Autoconf provides a uniform method for handling unguessable features.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC122" HREF="autoconf_toc.html#TOC122">Specifying the System Type</A></H2>
+ 
+ <P>
+ Like other GNU @command{configure} scripts, Autoconf-generated
+ @command{configure} scripts can make decisions based on a canonical name
+ for the system type, which has the form:
+ <SAMP>`<VAR>cpu</VAR>-<VAR>vendor</VAR>-<VAR>os</VAR>'</SAMP>, where <VAR>os</VAR> can be
+ <SAMP>`<VAR>system</VAR>'</SAMP> or <SAMP>`<VAR>kernel</VAR>-<VAR>system</VAR>'</SAMP>
+ 
+ 
+ <P>
+ @command{configure} can usually guess the canonical name for the type of
+ system it's running on.  To do so it runs a script called
+ @command{config.guess}, which infers the name using the <CODE>uname</CODE>
+ command or symbols predefined by the C preprocessor.
+ 
+ 
+ <P>
+ Alternately, the user can specify the system type with command line
+ arguments to @command{configure}.  Doing so is necessary when
+ cross-compiling.  In the most complex case of cross-compiling, three
+ system types are involved.  The options to specify them are:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--build=<VAR>build-type</VAR>}
+ <DD>
+ the type of system on which the package is being configured and
+ compiled.  It defaults to the result of running @command{config.guess}.
+ 
+ <DT>@option{--host=<VAR>host-type</VAR>}
+ <DD>
+ <A NAME="IDX751"></A>
+ the type of system on which the package will run.  By default it is the
+ same as the build machine.  Specifying it enables the cross-compilation
+ mode.
+ 
+ <DT>@option{--target=<VAR>target-type</VAR>}
+ <DD>
+ the type of system for which any compiler tools in the package will
+ produce code (rarely needed).  By default, it is the same as host.
+ </DL>
+ 
+ <P>
+ If you mean to override the result of @command{config.guess}, use
+ @option{--build}, not @option{--host}, since the latter enables
+ cross-compilation.  For historical reasons, passing @option{--host} also
+ changes the build type.  Therefore, whenever you specify <CODE>--host</CODE>,
+ be sure to specify <CODE>--build</CODE> too.  This will be fixed in the
+ future.
+ 
+ 
+ 
+ <PRE>
+ ./configure --build=i686-pc-linux-gnu --host=m68k-coff
+ </PRE>
+ 
+ <P>
+ will enter cross-compilation mode, but @command{configure} will fail if it
+ can't run the code generated by the specified compiler if you configure
+ as follows:
+ 
+ 
+ 
+ <PRE>
+ ./configure CC=m68k-coff-gcc
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX752"></A>
+ @command{configure} recognizes short aliases for many system types; for
+ example, <SAMP>`decstation'</SAMP> can be used instead of
+ <SAMP>`mips-dec-ultrix4.2'</SAMP>.  @command{configure} runs a script called
+ @command{config.sub} to canonicalize system type aliases.
+ 
+ 
+ <P>
+ This section deliberately omits the description of the obsolete
+ interface, see section <A HREF="autoconf.html#SEC160">Hosts and Cross-Compilation</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC123" HREF="autoconf_toc.html#TOC123">Getting the Canonical System Type</A></H2>
+ 
+ <P>
+ The following macros make the system type available to @command{configure}
+ scripts.
+ 
+ 
+ <P>
+ <A NAME="IDX753"></A>
+ <A NAME="IDX754"></A>
+ <A NAME="IDX755"></A>
+ 
+ 
+ <P>
+ The variables <SAMP>`build_alias'</SAMP>, <SAMP>`host_alias'</SAMP>, and
+ <SAMP>`target_alias'</SAMP> are always exactly the arguments of @option{--build},
+ @option{--host}, and @option{--target}; in particular, they are left empty
+ if the user did not use them, even if the corresponding
+ <CODE>AC_CANONICAL</CODE> macro was run.  Any configure script may use these
+ variables anywhere.  These are the variables that should be used when in
+ interaction with the user.
+ 
+ 
+ <P>
+ If you need to recognize some special environments based on their system
+ type, run the following macros to get canonical system names.  These
+ variables are not set before the macro call.
+ 
+ 
+ <P>
+ If you use these macros, you must distribute @command{config.guess} and
+ @command{config.sub} along with your source code.  See section <A HREF="autoconf.html#SEC19">Outputting Files</A>, for
+ information about the <CODE>AC_CONFIG_AUX_DIR</CODE> macro which you can use
+ to control in which directory @command{configure} looks for those scripts.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CANONICAL_BUILD</B>
+ <DD><A NAME="IDX756"></A>
+ <A NAME="IDX757"></A>
+ <A NAME="IDX758"></A>
+ <A NAME="IDX759"></A>
+ <A NAME="IDX760"></A>
+ <A NAME="IDX761"></A>
+ Compute the canonical build-system type variable, <CODE>build</CODE>, and its
+ three individual parts <CODE>build_cpu</CODE>, <CODE>build_vendor</CODE>, and
+ <CODE>build_os</CODE>.
+ 
+ 
+ <P>
+ If @option{--build} was specified, then <CODE>build</CODE> is the
+ canonicalization of <CODE>build_alias</CODE> by @command{config.sub},
+ otherwise it is determined by the shell script @command{config.guess}.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CANONICAL_HOST</B>
+ <DD><A NAME="IDX762"></A>
+ <A NAME="IDX763"></A>
+ <A NAME="IDX764"></A>
+ <A NAME="IDX765"></A>
+ <A NAME="IDX766"></A>
+ <A NAME="IDX767"></A>
+ Compute the canonical host-system type variable, <CODE>host</CODE>, and its
+ three individual parts <CODE>host_cpu</CODE>, <CODE>host_vendor</CODE>, and
+ <CODE>host_os</CODE>.
+ 
+ 
+ <P>
+ If @option{--host} was specified, then <CODE>host</CODE> is the
+ canonicalization of <CODE>host_alias</CODE> by @command{config.sub},
+ otherwise it defaults to <CODE>build</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CANONICAL_TARGET</B>
+ <DD><A NAME="IDX768"></A>
+ <A NAME="IDX769"></A>
+ <A NAME="IDX770"></A>
+ <A NAME="IDX771"></A>
+ <A NAME="IDX772"></A>
+ <A NAME="IDX773"></A>
+ Compute the canonical target-system type variable, <CODE>target</CODE>, and its
+ three individual parts <CODE>target_cpu</CODE>, <CODE>target_vendor</CODE>, and
+ <CODE>target_os</CODE>.
+ 
+ 
+ <P>
+ If @option{--target} was specified, then <CODE>target</CODE> is the
+ canonicalization of <CODE>target_alias</CODE> by @command{config.sub},
+ otherwise it defaults to <CODE>host</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ Note that there can be artifacts due to the backward compatibility
+ code.  See section <A HREF="autoconf.html#SEC160">Hosts and Cross-Compilation</A>, for more.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC124" HREF="autoconf_toc.html#TOC124">Using the System Type</A></H2>
+ 
+ <P>
+ How do you use a canonical system type?  Usually, you use it in one or
+ more <CODE>case</CODE> statements in <TT>`configure.ac'</TT> to select
+ system-specific C files.  Then, using <CODE>AC_CONFIG_LINKS</CODE>, link those
+ files which have names based on the system name, to generic names, such
+ as <TT>`host.h'</TT> or <TT>`target.c'</TT> (see section <A HREF="autoconf.html#SEC32">Creating Configuration Links</A>).  The
+ <CODE>case</CODE> statement patterns can use shell wild cards to group several
+ cases together, like in this fragment:
+ 
+ 
+ 
+ <PRE>
+ case $target in
+ i386-*-mach* | i386-*-gnu*)
+              obj_format=aout emulation=mach bfd_gas=yes ;;
+ i960-*-bout) obj_format=bout ;;
+ esac
+ </PRE>
+ 
+ <P>
+ and later in <TT>`configure.ac'</TT>, use:
+ 
+ 
+ 
+ <PRE>
+ AC_CONFIG_LINKS(host.h:config/$machine.h
+                 object.h:config/$obj_format.h)
+ </PRE>
+ 
+ <P>
+ Note that the above example uses <CODE>$target</CODE> because it's taken from
+ a tool which can be built on some architecture (<CODE>$build</CODE>), run on
+ another (<CODE>$host</CODE>), but yet handle data for a third architecture
+ (<CODE>$target</CODE>).  Such tools are usually part of a compiler suite, they
+ generate code for a specific <CODE>$target</CODE>.
+ 
+ 
+ <P>
+ However <CODE>$target</CODE> should be meaningless for most packages.  If you
+ want to base a decision on the system where your program will be run,
+ make sure you use the <CODE>$host</CODE> variable, as in the following
+ excerpt:
+ 
+ 
+ 
+ <PRE>
+ case $host in
+   *-*-msdos* | *-*-go32* | *-*-mingw32* | *-*-cygwin* | *-*-windows*)
+     MUMBLE_INIT="mumble.ini"
+     ;;
+   *)
+     MUMBLE_INIT=".mumbleinit"
+     ;;
+ esac
+ AC_SUBST([MUMBLE_INIT])
+ </PRE>
+ 
+ <P>
+ You can also use the host system type to find cross-compilation tools.
+ See section <A HREF="autoconf.html#SEC41">Generic Program and File Checks</A>, for information about the <CODE>AC_CHECK_TOOL</CODE>
+ macro which does that.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC125" HREF="autoconf_toc.html#TOC125">Site Configuration</A></H1>
+ 
+ <P>
+ @command{configure} scripts support several kinds of local configuration
+ decisions.  There are ways for users to specify where external software
+ packages are, include or exclude optional features, install programs
+ under modified names, and set default values for @command{configure}
+ options.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC126" HREF="autoconf_toc.html#TOC126">Working With External Software</A></H2>
+ 
+ <P>
+ Some packages require, or can optionally use, other software packages
+ that are already installed.  The user can give @command{configure}
+ command line options to specify which such external software to use.
+ The options have one of these forms:
+ 
+ 
+ 
+ <PRE>
+ --with-<VAR>package</VAR>[=<VAR>arg</VAR>]
+ --without-<VAR>package</VAR>
+ </PRE>
+ 
+ <P>
+ For example, @option{--with-gnu-ld} means work with the GNU linker
+ instead of some other linker.  @option{--with-x} means work with The X
+ Window System.
+ 
+ 
+ <P>
+ The user can give an argument by following the package name with
+ <SAMP>`='</SAMP> and the argument.  Giving an argument of <SAMP>`no'</SAMP> is for
+ packages that are used by default; it says to <EM>not</EM> use the
+ package.  An argument that is neither <SAMP>`yes'</SAMP> nor <SAMP>`no'</SAMP> could
+ include a name or number of a version of the other package, to specify
+ more precisely which other package this program is supposed to work
+ with.  If no argument is given, it defaults to <SAMP>`yes'</SAMP>.
+ @option{--without-<VAR>package</VAR>} is equivalent to
+ @option{--with-<VAR>package</VAR>=no}.
+ 
+ 
+ <P>
+ @command{configure} scripts do not complain about
+ @option{--with-<VAR>package</VAR>} options that they do not support.  This
+ behavior permits configuring a source tree containing multiple packages
+ with a top-level @command{configure} script when the packages support
+ different options, without spurious error messages about options that
+ some of the packages support.  An unfortunate side effect is that option
+ spelling errors are not diagnosed.  No better approach to this problem
+ has been suggested so far.
+ 
+ 
+ <P>
+ For each external software package that may be used, <TT>`configure.ac'</TT>
+ should call <CODE>AC_ARG_WITH</CODE> to detect whether the @command{configure}
+ user asked to use it.  Whether each package is used or not by default,
+ and which arguments are valid, is up to you.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ARG_WITH</B> <I>(<VAR>package</VAR>, <VAR>help-string</VAR>, @ovar{action-if-given}, @ovar{action-if-not-given})</I>
+ <DD><A NAME="IDX774"></A>
+ <A NAME="IDX775"></A>
+ If the user gave @command{configure} the option @option{--with-<VAR>package</VAR>}
+ or @option{--without-<VAR>package</VAR>}, run shell commands
+ <VAR>action-if-given</VAR>.  If neither option was given, run shell commands
+ <VAR>action-if-not-given</VAR>.  The name <VAR>package</VAR> indicates another
+ software package that this program should work with.  It should consist
+ only of alphanumeric characters and dashes.
+ 
+ 
+ <P>
+ The option's argument is available to the shell commands
+ <VAR>action-if-given</VAR> in the shell variable <CODE>withval</CODE>, which is
+ actually just the value of the shell variable <CODE>with_<VAR>package</VAR></CODE>,
+ with any @option{-} characters changed into <SAMP>`_'</SAMP>.  You may use that
+ variable instead, if you wish.
+ 
+ 
+ <P>
+ The argument <VAR>help-string</VAR> is a description of the option that
+ looks like this:
+ 
+ <PRE>
+   --with-readline         support fancy command line editing
+ </PRE>
+ 
+ <P>
+ <VAR>help-string</VAR> may be more than one line long, if more detail is
+ needed.  Just make sure the columns line up in <SAMP>`configure --help'</SAMP>.
+ Avoid tabs in the help string.  You'll need to enclose it in <SAMP>`['</SAMP>
+ and <SAMP>`]'</SAMP> in order to produce the leading spaces.
+ 
+ 
+ <P>
+ You should format your <VAR>help-string</VAR> with the macro
+ <CODE>AC_HELP_STRING</CODE> (see section <A HREF="autoconf.html#SEC128">Making Your Help Strings Look Pretty</A>).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_WITH</B> <I>(<VAR>package</VAR>, <VAR>action-if-given</VAR>, @ovar{action-if-not-given})</I>
+ <DD><A NAME="IDX776"></A>
+ <A NAME="IDX777"></A>
+ This is an obsolete version of <CODE>AC_ARG_WITH</CODE> that does not
+ support providing a help string.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC127" HREF="autoconf_toc.html#TOC127">Choosing Package Options</A></H2>
+ 
+ <P>
+ If a software package has optional compile-time features, the user can
+ give @command{configure} command line options to specify whether to
+ compile them.  The options have one of these forms:
+ 
+ 
+ 
+ <PRE>
+ --enable-<VAR>feature</VAR>[=<VAR>arg</VAR>]
+ --disable-<VAR>feature</VAR>
+ </PRE>
+ 
+ <P>
+ These options allow users to choose which optional features to build and
+ install.  @option{--enable-<VAR>feature</VAR>} options should never make a
+ feature behave differently or cause one feature to replace another.
+ They should only cause parts of the program to be built rather than left
+ out.
+ 
+ 
+ <P>
+ The user can give an argument by following the feature name with
+ <SAMP>`='</SAMP> and the argument.  Giving an argument of <SAMP>`no'</SAMP> requests
+ that the feature <EM>not</EM> be made available.  A feature with an
+ argument looks like @option{--enable-debug=stabs}.  If no argument is
+ given, it defaults to <SAMP>`yes'</SAMP>.  @option{--disable-<VAR>feature</VAR>} is
+ equivalent to @option{--enable-<VAR>feature</VAR>=no}.
+ 
+ 
+ <P>
+ @command{configure} scripts do not complain about
+ @option{--enable-<VAR>feature</VAR>} options that they do not support.
+ This behavior permits configuring a source tree containing multiple
+ packages with a top-level @command{configure} script when the packages
+ support different options, without spurious error messages about options
+ that some of the packages support.
+ An unfortunate side effect is that option spelling errors are not diagnosed.
+ No better approach to this problem has been suggested so far.
+ 
+ 
+ <P>
+ For each optional feature, <TT>`configure.ac'</TT> should call
+ <CODE>AC_ARG_ENABLE</CODE> to detect whether the @command{configure} user asked
+ to include it.  Whether each feature is included or not by default, and
+ which arguments are valid, is up to you.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ARG_ENABLE</B> <I>(<VAR>feature</VAR>, <VAR>help-string</VAR>, @ovar{action-if-given}, @ovar{action-if-not-given})</I>
+ <DD><A NAME="IDX778"></A>
+ <A NAME="IDX779"></A>
+ If the user gave @command{configure} the option
+ @option{--enable-<VAR>feature</VAR>} or @option{--disable-<VAR>feature</VAR>}, run
+ shell commands <VAR>action-if-given</VAR>.  If neither option was given, run
+ shell commands <VAR>action-if-not-given</VAR>.  The name <VAR>feature</VAR>
+ indicates an optional user-level facility.  It should consist only of
+ alphanumeric characters and dashes.
+ 
+ 
+ <P>
+ The option's argument is available to the shell commands
+ <VAR>action-if-given</VAR> in the shell variable <CODE>enableval</CODE>, which is
+ actually just the value of the shell variable
+ <CODE>enable_<VAR>feature</VAR></CODE>, with any @option{-} characters changed into
+ <SAMP>`_'</SAMP>.  You may use that variable instead, if you wish.  The
+ <VAR>help-string</VAR> argument is like that of <CODE>AC_ARG_WITH</CODE>
+ (see section <A HREF="autoconf.html#SEC126">Working With External Software</A>).
+ 
+ 
+ <P>
+ You should format your <VAR>help-string</VAR> with the macro
+ <CODE>AC_HELP_STRING</CODE> (see section <A HREF="autoconf.html#SEC128">Making Your Help Strings Look Pretty</A>).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ENABLE</B> <I>(<VAR>feature</VAR>, <VAR>action-if-given</VAR>, @ovar{action-if-not-given})</I>
+ <DD><A NAME="IDX780"></A>
+ <A NAME="IDX781"></A>
+ This is an obsolete version of <CODE>AC_ARG_ENABLE</CODE> that does not
+ support providing a help string.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC128" HREF="autoconf_toc.html#TOC128">Making Your Help Strings Look Pretty</A></H2>
+ 
+ <P>
+ Properly formatting the <SAMP>`help strings'</SAMP> which are used in
+ <CODE>AC_ARG_WITH</CODE> (see section <A HREF="autoconf.html#SEC126">Working With External Software</A>) and <CODE>AC_ARG_ENABLE</CODE>
+ (see section <A HREF="autoconf.html#SEC127">Choosing Package Options</A>) can be challenging.  Specifically, you want
+ your own <SAMP>`help strings'</SAMP> to line up in the appropriate columns of
+ <SAMP>`configure --help'</SAMP> just like the standard Autoconf <SAMP>`help
+ strings'</SAMP> do.  This is the purpose of the <CODE>AC_HELP_STRING</CODE> macro.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HELP_STRING</B> <I>(<VAR>left-hand-side</VAR>, <VAR>right-hand-side</VAR>)</I>
+ <DD><A NAME="IDX782"></A>
+ <A NAME="IDX783"></A>
+ 
+ 
+ <P>
+ Expands into an help string that looks pretty when the user executes
+ <SAMP>`configure --help'</SAMP>.  It is typically used in <CODE>AC_ARG_WITH</CODE>
+ (see section <A HREF="autoconf.html#SEC126">Working With External Software</A>) or <CODE>AC_ARG_ENABLE</CODE> (see section <A HREF="autoconf.html#SEC127">Choosing Package Options</A>).  The following example will make this clearer.
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN(TEST_MACRO,
+ [AC_ARG_WITH(foo,
+              AC_HELP_STRING([--with-foo],
+                             [use foo (default is NO)]),
+              ac_cv_use_foo=$withval, ac_cv_use_foo=no),
+ AC_CACHE_CHECK(whether to use foo,
+                ac_cv_use_foo, ac_cv_use_foo=no)])
+ </PRE>
+ 
+ <P>
+ Please note that the call to <CODE>AC_HELP_STRING</CODE> is <STRONG>unquoted</STRONG>.
+ Then the last few lines of <SAMP>`configure --help'</SAMP> will appear like
+ this:
+ 
+ 
+ 
+ <PRE>
+ --enable and --with options recognized:
+   --with-foo              use foo (default is NO)
+ </PRE>
+ 
+ <P>
+ The <CODE>AC_HELP_STRING</CODE> macro is particularly helpful when the
+ <VAR>left-hand-side</VAR> and/or <VAR>right-hand-side</VAR> are composed of macro
+ arguments, as shown in the following example.
+ 
+ 
+ 
+ <PRE>
+ AC_DEFUN(MY_ARG_WITH,
+ [AC_ARG_WITH([$1],
+              AC_HELP_STRING([--with-$1], [use $1 (default is $2)]),
+              ac_cv_use_$1=$withval, ac_cv_use_$1=no),
+ AC_CACHE_CHECK(whether to use $1, ac_cv_use_$1, ac_cv_use_$1=$2)])
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC129" HREF="autoconf_toc.html#TOC129">Configuring Site Details</A></H2>
+ 
+ <P>
+ Some software packages require complex site-specific information.  Some
+ examples are host names to use for certain services, company names, and
+ email addresses to contact.  Since some configuration scripts generated
+ by Metaconfig ask for such information interactively, people sometimes
+ wonder how to get that information in Autoconf-generated configuration
+ scripts, which aren't interactive.
+ 
+ 
+ <P>
+ Such site configuration information should be put in a file that is
+ edited <EM>only by users</EM>, not by programs.  The location of the file
+ can either be based on the <CODE>prefix</CODE> variable, or be a standard
+ location such as the user's home directory.  It could even be specified
+ by an environment variable.  The programs should examine that file at
+ run time, rather than at compile time.  Run time configuration is more
+ convenient for users and makes the configuration process simpler than
+ getting the information while configuring.  See section `Variables for Installation Directories' in <CITE>GNU Coding Standards</CITE>, for more information on where to put data files.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC130" HREF="autoconf_toc.html#TOC130">Transforming Program Names When Installing</A></H2>
+ 
+ <P>
+ Autoconf supports changing the names of programs when installing them.
+ In order to use these transformations, <TT>`configure.ac'</TT> must call the
+ macro <CODE>AC_ARG_PROGRAM</CODE>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ARG_PROGRAM</B>
+ <DD><A NAME="IDX784"></A>
+ <A NAME="IDX785"></A>
+ <A NAME="IDX786"></A>
+ Place in output variable <CODE>program_transform_name</CODE> a sequence of
+ <CODE>sed</CODE> commands for changing the names of installed programs.
+ 
+ 
+ <P>
+ If any of the options described below are given to @command{configure},
+ program names are transformed accordingly.  Otherwise, if
+ <CODE>AC_CANONICAL_TARGET</CODE> has been called and a @option{--target} value
+ is given, the target type followed by a dash is used as a prefix.
+ Otherwise, no program name transformation is done.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC131" HREF="autoconf_toc.html#TOC131">Transformation Options</A></H3>
+ 
+ <P>
+ You can specify name transformations by giving @command{configure} these
+ command line options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--program-prefix=<VAR>prefix</VAR>}
+ <DD>
+ prepend <VAR>prefix</VAR> to the names;
+ 
+ <DT>@option{--program-suffix=<VAR>suffix</VAR>}
+ <DD>
+ append <VAR>suffix</VAR> to the names;
+ 
+ <DT>@option{--program-transform-name=<VAR>expression</VAR>}
+ <DD>
+ perform <CODE>sed</CODE> substitution <VAR>expression</VAR> on the names.
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC132" HREF="autoconf_toc.html#TOC132">Transformation Examples</A></H3>
+ 
+ <P>
+ These transformations are useful with programs that can be part of a
+ cross-compilation development environment.  For example, a
+ cross-assembler running on a Sun 4 configured with
+ @option{--target=i960-vxworks} is normally installed as
+ <TT>`i960-vxworks-as'</TT>, rather than <TT>`as'</TT>, which could be confused
+ with a native Sun 4 assembler.
+ 
+ 
+ <P>
+ You can force a program name to begin with <TT>`g'</TT>, if you don't want
+ GNU programs installed on your system to shadow other programs with
+ the same name.  For example, if you configure GNU <CODE>diff</CODE> with
+ @option{--program-prefix=g}, then when you run <SAMP>`make install'</SAMP> it is
+ installed as <TT>`/usr/local/bin/gdiff'</TT>.
+ 
+ 
+ <P>
+ As a more sophisticated example, you could use
+ 
+ 
+ 
+ <PRE>
+ --program-transform-name='s/^/g/; s/^gg/g/; s/^gless/less/'
+ </PRE>
+ 
+ <P>
+ 
+ 
+ <P>
+ to prepend <SAMP>`g'</SAMP> to most of the program names in a source tree,
+ excepting those like <CODE>gdb</CODE> that already have one and those like
+ <CODE>less</CODE> and <CODE>lesskey</CODE> that aren't GNU programs.  (That is
+ assuming that you have a source tree containing those programs that is
+ set up to use this feature.)
+ 
+ 
+ <P>
+ One way to install multiple versions of some programs simultaneously is
+ to append a version number to the name of one or both.  For example, if
+ you want to keep Autoconf version 1 around for awhile, you can configure
+ Autoconf version 2 using @option{--program-suffix=2} to install the
+ programs as <TT>`/usr/local/bin/autoconf2'</TT>,
+ <TT>`/usr/local/bin/autoheader2'</TT>, etc.  Nevertheless, pay attention
+ that only the binaries are renamed, therefore you'd have problems with
+ the library files which might overlap.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC133" HREF="autoconf_toc.html#TOC133">Transformation Rules</A></H3>
+ 
+ <P>
+ Here is how to use the variable <CODE>program_transform_name</CODE> in a
+ <TT>`Makefile.in'</TT>:
+ 
+ 
+ 
+ <PRE>
+ PROGRAMS = cp ls rm
+ transform = @program_transform_name@
+ install:
+         for p in $(PROGRAMS); do \
+           $(INSTALL_PROGRAM) $$p $(DESTDIR)$(bindir)/`echo $$p | \
+                                               sed '$(transform)'`; \
+         done
+ 
+ uninstall:
+         for p in $(PROGRAMS); do \
+           rm -f $(DESTDIR)$(bindir)/`echo $$p | sed '$(transform)'`; \
+         done
+ </PRE>
+ 
+ <P>
+ It is guaranteed that <CODE>program_transform_name</CODE> is never empty, and
+ that there are no useless separators.  Therefore you may safely embed
+ <CODE>program_transform_name</CODE> within a sed program using <SAMP>`;'</SAMP>:
+ 
+ 
+ 
+ <PRE>
+ transform = @program_transform_name@
+ transform_exe = s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/
+ </PRE>
+ 
+ <P>
+ Whether to do the transformations on documentation files (Texinfo or
+ <CODE>man</CODE>) is a tricky question; there seems to be no perfect answer,
+ due to the several reasons for name transforming.  Documentation is not
+ usually particular to a specific architecture, and Texinfo files do not
+ conflict with system documentation.  But they might conflict with
+ earlier versions of the same files, and <CODE>man</CODE> pages sometimes do
+ conflict with system documentation.  As a compromise, it is probably
+ best to do name transformations on <CODE>man</CODE> pages but not on Texinfo
+ manuals.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC134" HREF="autoconf_toc.html#TOC134">Setting Site Defaults</A></H2>
+ 
+ <P>
+ Autoconf-generated @command{configure} scripts allow your site to provide
+ default values for some configuration values.  You do this by creating
+ site- and system-wide initialization files.
+ 
+ 
+ <P>
+ <A NAME="IDX787"></A>
+ If the environment variable @command{CONFIG_SITE} is set, @command{configure}
+ uses its value as the name of a shell script to read.  Otherwise, it
+ reads the shell script <TT>`<VAR>prefix</VAR>/share/config.site'</TT> if it exists,
+ then <TT>`<VAR>prefix</VAR>/etc/config.site'</TT> if it exists.  Thus,
+ settings in machine-specific files override those in machine-independent
+ ones in case of conflict.
+ 
+ 
+ <P>
+ Site files can be arbitrary shell scripts, but only certain kinds of
+ code are really appropriate to be in them.  Because @command{configure}
+ reads any cache file after it has read any site files, a site file can
+ define a default cache file to be shared between all Autoconf-generated
+ @command{configure} scripts run on that system (see section <A HREF="autoconf.html#SEC84">Cache Files</A>).  If
+ you set a default cache file in a site file, it is a good idea to also
+ set the output variable <CODE>CC</CODE> in that site file, because the cache
+ file is only valid for a particular compiler, but many systems have
+ several available.
+ 
+ 
+ <P>
+ You can examine or override the value set by a command line option to
+ @command{configure} in a site file; options set shell variables that have
+ the same names as the options, with any dashes turned into underscores.
+ The exceptions are that @option{--without-} and @option{--disable-} options
+ are like giving the corresponding @option{--with-} or @option{--enable-}
+ option and the value <SAMP>`no'</SAMP>.  Thus, @option{--cache-file=localcache}
+ sets the variable <CODE>cache_file</CODE> to the value <SAMP>`localcache'</SAMP>;
+ @option{--enable-warnings=no} or @option{--disable-warnings} sets the variable
+ <CODE>enable_warnings</CODE> to the value <SAMP>`no'</SAMP>; @option{--prefix=/usr} sets the
+ variable <CODE>prefix</CODE> to the value <SAMP>`/usr'</SAMP>; etc.
+ 
+ 
+ <P>
+ Site files are also good places to set default values for other output
+ variables, such as <CODE>CFLAGS</CODE>, if you need to give them non-default
+ values: anything you would normally do, repetitively, on the command
+ line.  If you use non-default values for <VAR>prefix</VAR> or
+ <VAR>exec_prefix</VAR> (wherever you locate the site file), you can set them
+ in the site file if you specify it with the @command{CONFIG_SITE}
+ environment variable.
+ 
+ 
+ <P>
+ You can set some cache values in the site file itself.  Doing this is
+ useful if you are cross-compiling, so it is impossible to check features
+ that require running a test program.  You could "prime the cache" by
+ setting those values correctly for that system in
+ <TT>`<VAR>prefix</VAR>/etc/config.site'</TT>.  To find out the names of the cache
+ variables you need to set, look for shell variables with <SAMP>`_cv_'</SAMP> in
+ their names in the affected @command{configure} scripts, or in the Autoconf
+ M4 source code for those macros.
+ 
+ 
+ <P>
+ The cache file is careful to not override any variables set in the site
+ files.  Similarly, you should not override command-line options in the
+ site files.  Your code should check that variables such as <CODE>prefix</CODE>
+ and <CODE>cache_file</CODE> have their default values (as set near the top of
+ @command{configure}) before changing them.
+ 
+ 
+ <P>
+ Here is a sample file <TT>`/usr/share/local/gnu/share/config.site'</TT>.  The
+ command <SAMP>`configure --prefix=/usr/share/local/gnu'</SAMP> would read this
+ file (if @command{CONFIG_SITE} is not set to a different file).
+ 
+ 
+ 
+ <PRE>
+ # config.site for configure
+ #
+ # Change some defaults.
+ test "$prefix" = NONE &#38;&#38; prefix=/usr/share/local/gnu
+ test "$exec_prefix" = NONE &#38;&#38; exec_prefix=/usr/local/gnu
+ test "$sharedstatedir" = '$prefix/com' &#38;&#38; sharedstatedir=/var
+ test "$localstatedir" = '$prefix/var' &#38;&#38; localstatedir=/var
+ 
+ # Give Autoconf 2.x generated configure scripts a shared default
+ # cache file for feature test results, architecture-specific.
+ if test "$cache_file" = /dev/null; then
+   cache_file="$prefix/var/config.cache"
+   # A cache file is only valid for one C compiler.
+   CC=gcc
+ fi
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC135" HREF="autoconf_toc.html#TOC135">Running @command{configure} Scripts</A></H1>
+ <P>
+ <A NAME="IDX788"></A>
+ 
+ 
+ <P>
+ Below are instructions on how to configure a package that uses a
+ @command{configure} script, suitable for inclusion as an <TT>`INSTALL'</TT>
+ file in the package.  A plain-text version of <TT>`INSTALL'</TT> which you
+ may use comes with Autoconf.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC136" HREF="autoconf_toc.html#TOC136">Basic Installation</A></H2>
+ 
+ <P>
+ These are generic installation instructions.
+ 
+ 
+ <P>
+ The @command{configure} shell script attempts to guess correct values
+ for various system-dependent variables used during compilation.  It uses
+ those values to create a <TT>`Makefile'</TT> in each directory of the
+ package.  It may also create one or more <TT>`.h'</TT> files containing
+ system-dependent definitions.  Finally, it creates a shell script
+ <TT>`config.status'</TT> that you can run in the future to recreate the
+ current configuration, and a file <TT>`config.log'</TT> containing compiler
+ output (useful mainly for debugging @command{configure}).
+ 
+ 
+ <P>
+ It can also use an optional file (typically called <TT>`config.cache'</TT>
+ and enabled with @option{--cache-file=config.cache} or simply
+ @option{-C}) that saves the results of its tests to speed up
+ reconfiguring.  (Caching is disabled by default to prevent problems with
+ accidental use of stale cache files.)
+ 
+ 
+ <P>
+ If you need to do unusual things to compile the package, please try to
+ figure out how @command{configure} could check whether to do them, and
+ mail diffs or instructions to the address given in the <TT>`README'</TT> so
+ they can be considered for the next release.  If you are using the
+ cache, and at some point <TT>`config.cache'</TT> contains results you don't
+ want to keep, you may remove or edit it.
+ 
+ 
+ <P>
+ The file <TT>`configure.ac'</TT> (or <TT>`configure.in'</TT>) is used to create
+ <TT>`configure'</TT> by a program called <CODE>autoconf</CODE>.  You only need
+ <TT>`configure.ac'</TT> if you want to change it or regenerate
+ <TT>`configure'</TT> using a newer version of <CODE>autoconf</CODE>.
+ 
+ 
+ <P>
+ The simplest way to compile this package is:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ <CODE>cd</CODE> to the directory containing the package's source code and type
+ <SAMP>`./configure'</SAMP> to configure the package for your system.  If you're
+ using <CODE>csh</CODE> on an old version of System V, you might need to type
+ <SAMP>`sh ./configure'</SAMP> instead to prevent <CODE>csh</CODE> from trying to
+ execute @command{configure} itself.
+ 
+ Running @command{configure} takes awhile.  While running, it prints some
+ messages telling which features it is checking for.
+ 
+ <LI>
+ 
+ Type <SAMP>`make'</SAMP> to compile the package.
+ 
+ <LI>
+ 
+ Optionally, type <SAMP>`make check'</SAMP> to run any self-tests that come with
+ the package.
+ 
+ <LI>
+ 
+ Type <SAMP>`make install'</SAMP> to install the programs and any data files and
+ documentation.
+ 
+ <LI>
+ 
+ You can remove the program binaries and object files from the source
+ code directory by typing <SAMP>`make clean'</SAMP>.  To also remove the files
+ that @command{configure} created (so you can compile the package for a
+ different kind of computer), type <SAMP>`make distclean'</SAMP>.  There is also
+ a <SAMP>`make maintainer-clean'</SAMP> target, but that is intended mainly for
+ the package's developers.  If you use it, you may have to get all sorts
+ of other programs in order to regenerate files that came with the
+ distribution.
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC137" HREF="autoconf_toc.html#TOC137">Compilers and Options</A></H2>
+ 
+ <P>
+ Some systems require unusual options for compilation or linking that the
+ @command{configure} script does not know about.  Run @samp{./configure
+ --help} for details on some of the pertinent environment variables.
+ 
+ 
+ <P>
+ You can give @command{configure} initial values for variables by setting
+ them in the environment.  You can do that on the command line like this:
+ 
+ 
+ 
+ <PRE>
+ ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+ </PRE>
+ 
+ <P>
+ See section <A HREF="autoconf.html#SEC143">Defining Variables</A>, for more details.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC138" HREF="autoconf_toc.html#TOC138">Compiling For Multiple Architectures</A></H2>
+ 
+ <P>
+ You can compile the package for more than one kind of computer at the
+ same time, by placing the object files for each architecture in their
+ own directory.  To do this, you must use a version of @command{make}
+ that supports the <CODE>VPATH</CODE> variable, such as GNU @command{make}.
+ @command{cd} to the directory where you want the object files and
+ executables to go and run the @command{configure} script.
+ @command{configure} automatically checks for the source code in the
+ directory that @command{configure} is in and in <TT>`..'</TT>.
+ 
+ 
+ <P>
+ If you have to use a @command{make} that does not support the
+ <CODE>VPATH</CODE> variable, you have to compile the package for one
+ architecture at a time in the source code directory.  After you have
+ installed the package for one architecture, use <SAMP>`make distclean'</SAMP>
+ before reconfiguring for another architecture.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC139" HREF="autoconf_toc.html#TOC139">Installation Names</A></H2>
+ 
+ <P>
+ By default, <SAMP>`make install'</SAMP> will install the package's files in
+ <TT>`/usr/local/bin'</TT>, <TT>`/usr/local/man'</TT>, etc.  You can specify an
+ installation prefix other than <TT>`/usr/local'</TT> by giving
+ @command{configure} the option @option{--prefix=<VAR>path</VAR>}.
+ 
+ 
+ <P>
+ You can specify separate installation prefixes for architecture-specific
+ files and architecture-independent files.  If you give
+ @command{configure} the option @option{--exec-prefix=<VAR>path</VAR>}, the
+ package will use <VAR>path</VAR> as the prefix for installing programs and
+ libraries.  Documentation and other data files will still use the
+ regular prefix.
+ 
+ 
+ <P>
+ In addition, if you use an unusual directory layout you can give options
+ like @option{--bindir=<VAR>path</VAR>} to specify different values for
+ particular kinds of files.  Run <SAMP>`configure --help'</SAMP> for a list of
+ the directories you can set and what kinds of files go in them.
+ 
+ 
+ <P>
+ If the package supports it, you can cause programs to be installed with
+ an extra prefix or suffix on their names by giving @command{configure}
+ the option @option{--program-prefix=<VAR>PREFIX</VAR>} or
+ @option{--program-suffix=<VAR>SUFFIX</VAR>}.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC140" HREF="autoconf_toc.html#TOC140">Optional Features</A></H2>
+ 
+ <P>
+ Some packages pay attention to @option{--enable-<VAR>feature</VAR>} options
+ to @command{configure}, where <VAR>feature</VAR> indicates an optional part
+ of the package.  They may also pay attention to
+ @option{--with-<VAR>package</VAR>} options, where <VAR>package</VAR> is something
+ like <SAMP>`gnu-as'</SAMP> or <SAMP>`x'</SAMP> (for the X Window System).  The
+ <TT>`README'</TT> should mention any @option{--enable-} and @option{--with-}
+ options that the package recognizes.
+ 
+ 
+ <P>
+ For packages that use the X Window System, @command{configure} can
+ usually find the X include and library files automatically, but if it
+ doesn't, you can use the @command{configure} options
+ @option{--x-includes=<VAR>dir</VAR>} and @option{--x-libraries=<VAR>dir</VAR>} to
+ specify their locations.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC141" HREF="autoconf_toc.html#TOC141">Specifying the System Type</A></H2>
+ 
+ <P>
+ There may be some features @command{configure} cannot figure out
+ automatically, but needs to determine by the type of machine the package
+ will run on.  Usually, assuming the package is built to be run on the
+ <EM>same</EM> architectures, @command{configure} can figure that out, but
+ if it prints a message saying it cannot guess the machine type, give it
+ the @option{--build=<VAR>type</VAR>} option.  <VAR>type</VAR> can either be a
+ short name for the system type, such as <SAMP>`sun4'</SAMP>, or a canonical name
+ which has the form:
+ 
+ 
+ 
+ <PRE>
+ <VAR>cpu</VAR>-<VAR>company</VAR>-<VAR>system</VAR>
+ </PRE>
+ 
+ <P>
+ where <VAR>system</VAR> can have one of these forms:
+ 
+ 
+ 
+ <PRE>
+ <VAR>os</VAR> <VAR>kernel</VAR>-<VAR>os</VAR>
+ </PRE>
+ 
+ <P>
+ See the file <TT>`config.sub'</TT> for the possible values of each field.
+ If <TT>`config.sub'</TT> isn't included in this package, then this package
+ doesn't need to know the machine type.
+ 
+ 
+ <P>
+ If you are <EM>building</EM> compiler tools for cross-compiling, you
+ should use the @option{--target=<VAR>type</VAR>} option to select the type of
+ system they will produce code for.
+ 
+ 
+ <P>
+ If you want to <EM>use</EM> a cross compiler, that generates code for a
+ platform different from the build platform, you should specify the
+ <EM>host</EM> platform (i.e., that on which the generated programs will
+ eventually be run) with @option{--host=<VAR>type</VAR>}.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC142" HREF="autoconf_toc.html#TOC142">Sharing Defaults</A></H2>
+ 
+ <P>
+ If you want to set default values for @command{configure} scripts to
+ share, you can create a site shell script called <TT>`config.site'</TT> that
+ gives default values for variables like <CODE>CC</CODE>, <CODE>cache_file</CODE>,
+ and <CODE>prefix</CODE>.  @command{configure} looks for
+ <TT>`<VAR>prefix</VAR>/share/config.site'</TT> if it exists, then
+ <TT>`<VAR>prefix</VAR>/etc/config.site'</TT> if it exists.  Or, you can set the
+ <CODE>CONFIG_SITE</CODE> environment variable to the location of the site
+ script.  A warning: not all @command{configure} scripts look for a site
+ script.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC143" HREF="autoconf_toc.html#TOC143">Defining Variables</A></H2>
+ 
+ <P>
+ Variables not defined in a site shell script can be set in the
+ environment passed to @command{configure}.  However, some packages may
+ run configure again during the build, and the customized values of these
+ variables may be lost.  In order to avoid this problem, you should set
+ them in the @command{configure} command line, using <SAMP>`VAR=value'</SAMP>.
+ For example:
+ 
+ 
+ 
+ <PRE>
+ ./configure CC=/usr/local2/bin/gcc
+ </PRE>
+ 
+ <P>
+ will cause the specified gcc to be used as the C compiler (unless it is
+ overridden in the site shell script).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC144" HREF="autoconf_toc.html#TOC144">@command{configure} Invocation</A></H2>
+ 
+ <P>
+ @command{configure} recognizes the following options to control how it
+ operates.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the options to @command{configure}, and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version of Autoconf used to generate the @command{configure}
+ script, and exit.
+ 
+ <DT>@option{--cache-file=<VAR>file</VAR>}
+ <DD>
+ <A NAME="IDX789"></A>
+ Enable the cache: use and save the results of the tests in <VAR>file</VAR>,
+ traditionally <TT>`config.cache'</TT>.  <VAR>file</VAR> defaults to
+ <TT>`/dev/null'</TT> to disable caching.
+ 
+ <DT>@option{--config-cache}
+ <DD>
+ <DT>@option{-C}
+ <DD>
+ Alias for @option{--cache-file=config.cache}.
+ 
+ <DT>@option{--quiet}
+ <DD>
+ <DT>@option{--silent}
+ <DD>
+ <DT>@option{-q}
+ <DD>
+ Do not print messages saying which checks are being made.  To suppress
+ all normal output, redirect it to <TT>`/dev/null'</TT> (any error messages
+ will still be shown).
+ 
+ <DT>@option{--srcdir=<VAR>dir</VAR>}
+ <DD>
+ Look for the package's source code in directory <VAR>dir</VAR>.  Usually
+ @command{configure} can determine that directory automatically.
+ </DL>
+ 
+ <P>
+ @command{configure} also accepts some other, not widely useful, options.
+ Run <SAMP>`configure --help'</SAMP> for more details.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC145" HREF="autoconf_toc.html#TOC145">Recreating a Configuration</A></H1>
+ <P>
+ <A NAME="IDX790"></A>
+ 
+ 
+ <P>
+ The @command{configure} script creates a file named <TT>`config.status'</TT>,
+ which actually configures, <EM>instantiates</EM>, the template files.  It
+ also records the configuration options that were specified when the
+ package was last configured in case reconfiguring is needed.
+ 
+ 
+ <P>
+ Synopsis:
+ 
+ <PRE>
+ ./config.status <VAR>option</VAR>... [<VAR>file</VAR>...]
+ </PRE>
+ 
+ <P>
+ It configures the <VAR>files</VAR>, if none are specified, all the templates
+ are instantiated.  The files must be specified without their
+ dependencies, as in
+ 
+ 
+ 
+ <PRE>
+ ./config.status foobar
+ </PRE>
+ 
+ <P>
+ not
+ 
+ 
+ 
+ <PRE>
+ ./config.status foobar:foo.in:bar.in
+ </PRE>
+ 
+ <P>
+ The supported <VAR>option</VAR>s are:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options, the list of the template
+ files and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files.
+ 
+ <DT>@option{--file=<VAR>file</VAR>[:<VAR>template</VAR>]}
+ <DD>
+ Require that <VAR>file</VAR> be instantiated as if
+ <SAMP>`AC_CONFIG_FILES(<VAR>file</VAR>:<VAR>template</VAR>)'</SAMP> was used.  Both
+ <VAR>file</VAR> and <VAR>template</VAR> may be <SAMP>`-'</SAMP> in which case the standard
+ output and/or standard input, respectively, is used.  If a
+ <VAR>template</VAR> filename is relative, it is first looked for in the build
+ tree, and then in the source tree. See section <A HREF="autoconf.html#SEC20">Taking Configuration Actions</A>, for
+ more details.
+ 
+ This option and the following ones provide one way for separately
+ distributed packages to share the values computed by @command{configure}.
+ Doing so can be useful if some of the packages need a superset of the
+ features that one of them, perhaps a common library, does.  These
+ options allow a <TT>`config.status'</TT> file to create files other than the
+ ones that its <TT>`configure.ac'</TT> specifies, so it can be used for a
+ different package.
+ 
+ <DT>@option{--header=<VAR>file</VAR>[:<VAR>template</VAR>]}
+ <DD>
+ Same as @option{--file} above, but with <SAMP>`AC_CONFIG_HEADERS'</SAMP>.
+ 
+ <DT>@option{--recheck}
+ <DD>
+ Ask <TT>`config.status'</TT> to update itself and exit (no instantiation).
+ This option is useful if you change @command{configure}, so that the
+ results of some tests might be different from the previous run.  The
+ @option{--recheck} option re-runs @command{configure} with the same arguments
+ you used before, plus the @option{--no-create} option, which prevents
+ @command{configure} from running <TT>`config.status'</TT> and creating
+ <TT>`Makefile'</TT> and other files, and the @option{--no-recursion} option,
+ which prevents @command{configure} from running other @command{configure}
+ scripts in subdirectories.  (This is so other <TT>`Makefile'</TT> rules can
+ run <TT>`config.status'</TT> when it changes; see section <A HREF="autoconf.html#SEC26">Automatic Remaking</A>,
+ for an example).
+ </DL>
+ 
+ <P>
+ <TT>`config.status'</TT> checks several optional environment variables that
+ can alter its behavior:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_SHELL</B>
+ <DD><A NAME="IDX791"></A>
+ <A NAME="IDX792"></A>
+ The shell with which to run @command{configure} for the @option{--recheck}
+ option.  It must be Bourne-compatible.  The default is a shell that
+ supports @env{LINENO} if available, and <TT>`/bin/sh'</TT> otherwise.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_STATUS</B>
+ <DD><A NAME="IDX793"></A>
+ <A NAME="IDX794"></A>
+ The file name to use for the shell script that records the
+ configuration.  The default is <TT>`./config.status'</TT>.  This variable is
+ useful when one package uses parts of another and the @command{configure}
+ scripts shouldn't be merged because they are maintained separately.
+ </DL>
+ 
+ 
+ <P>
+ You can use <TT>`./config.status'</TT> in your Makefiles.  For example, in
+ the dependencies given above (see section <A HREF="autoconf.html#SEC26">Automatic Remaking</A>),
+ <TT>`config.status'</TT> is run twice when <TT>`configure.ac'</TT> has changed.
+ If that bothers you, you can make each run only regenerate the files for
+ that rule:
+ 
+ <PRE>
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+         ./config.status config.h
+         echo &#62; stamp-h
+ 
+ Makefile: Makefile.in config.status
+         ./config.status Makefile
+ </PRE>
+ 
+ <P>
+ The calling convention of <TT>`config.status'</TT> has changed, see
+ section <A HREF="autoconf.html#SEC147">Obsolete <TT>`config.status'</TT> Invocation</A>, for details.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC146" HREF="autoconf_toc.html#TOC146">Obsolete Constructs</A></H1>
+ 
+ <P>
+ Autoconf changes, and throughout the years some constructs are obsoleted.
+ Most of the changes involve the macros, but the tools themselves, or
+ even some concepts, are now considered obsolete.
+ 
+ 
+ <P>
+ You may completely skip this chapter if you are new to Autoconf, its
+ intention is mainly to help maintainers updating their packages by
+ understanding how to move to more modern constructs.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC147" HREF="autoconf_toc.html#TOC147">Obsolete <TT>`config.status'</TT> Invocation</A></H2>
+ 
+ <P>
+ <TT>`config.status'</TT> now supports arguments to specify the files to
+ instantiate, see section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>, for more details.
+ Before, environment variables had to be used.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_COMMANDS</B>
+ <DD><A NAME="IDX795"></A>
+ <A NAME="IDX796"></A>
+ The tags of the commands to execute.  The default is the arguments given
+ to <CODE>AC_OUTPUT</CODE> and <CODE>AC_CONFIG_COMMANDS</CODE> in
+ <TT>`configure.ac'</TT>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_FILES</B>
+ <DD><A NAME="IDX797"></A>
+ <A NAME="IDX798"></A>
+ The files in which to perform <SAMP>`@<VAR>variable</VAR>@'</SAMP> substitutions.
+ The default is the arguments given to <CODE>AC_OUTPUT</CODE> and
+ <CODE>AC_CONFIG_FILES</CODE> in <TT>`configure.ac'</TT>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_HEADERS</B>
+ <DD><A NAME="IDX799"></A>
+ <A NAME="IDX800"></A>
+ The files in which to substitute C <CODE>#define</CODE> statements.  The
+ default is the arguments given to <CODE>AC_CONFIG_HEADERS</CODE>; if that
+ macro was not called, <TT>`config.status'</TT> ignores this variable.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CONFIG_LINKS</B>
+ <DD><A NAME="IDX801"></A>
+ <A NAME="IDX802"></A>
+ The symbolic links to establish.  The default is the arguments given to
+ <CODE>AC_CONFIG_LINKS</CODE>; if that macro was not called,
+ <TT>`config.status'</TT> ignores this variable.
+ </DL>
+ 
+ 
+ <P>
+ In section <A HREF="autoconf.html#SEC145">Recreating a Configuration</A>, using this old interface, the example
+ would be:
+ 
+ 
+ 
+ <PRE>
+ config.h: stamp-h
+ stamp-h: config.h.in config.status
+         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_FILES= \
+           CONFIG_HEADERS=config.h ./config.status
+         echo &#62; stamp-h
+ 
+ Makefile: Makefile.in config.status
+         CONFIG_COMMANDS= CONFIG_LINKS= CONFIG_HEADERS= \
+           CONFIG_FILES=Makefile ./config.status
+ </PRE>
+ 
+ <P>
+ (If <TT>`configure.ac'</TT> does not call <CODE>AC_CONFIG_HEADERS</CODE>, there is
+ no need to set @command{CONFIG_HEADERS} in the <CODE>make</CODE> rules, equally
+ for @command{CONFIG_COMMANDS} etc.)
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC148" HREF="autoconf_toc.html#TOC148"><TT>`acconfig.h'</TT></A></H2>
+ 
+ <P>
+ <A NAME="IDX803"></A>
+ <A NAME="IDX804"></A>
+ <A NAME="IDX805"></A>
+ 
+ 
+ <P>
+ In order to produce <TT>`config.h.in'</TT>, @command{autoheader} needs to
+ build or to find templates for each symbol.  Modern releases of Autoconf
+ use <CODE>AH_VERBATIM</CODE> and <CODE>AH_TEMPLATE</CODE> (see section <A HREF="autoconf.html#SEC30">Autoheader Macros</A>), but in older releases a file, <TT>`acconfig.h'</TT>, contained the
+ list of needed templates.  @command{autoheader} copies comments and
+ <CODE>#define</CODE> and <CODE>#undef</CODE> statements from <TT>`acconfig.h'</TT> in
+ the current directory, if present.  This file used to be mandatory if
+ you <CODE>AC_DEFINE</CODE> any additional symbols.
+ 
+ 
+ <P>
+ Modern releases of Autoconf also provide <CODE>AH_TOP</CODE> and
+ <CODE>AH_BOTTOM</CODE> if you need to prepend/append some information to
+ <TT>`config.h.in'</TT>.  Ancient versions of Autoconf had a similar feature:
+ if <TT>`./acconfig.h'</TT> contains the string <SAMP>`@TOP@'</SAMP>,
+ @command{autoheader} copies the lines before the line containing
+ <SAMP>`@TOP@'</SAMP> into the top of the file that it generates.  Similarly,
+ if <TT>`./acconfig.h'</TT> contains the string <SAMP>`@BOTTOM@'</SAMP>,
+ @command{autoheader} copies the lines after that line to the end of the
+ file it generates.  Either or both of those strings may be omitted.  An
+ even older alternate way to produce the same effect in jurasik versions
+ of Autoconf is to create the files <TT>`<VAR>file</VAR>.top'</TT> (typically
+ <TT>`config.h.top'</TT>) and/or <TT>`<VAR>file</VAR>.bot'</TT> in the current
+ directory.  If they exist, @command{autoheader} copies them to the
+ beginning and end, respectively, of its output.
+ 
+ 
+ <P>
+ In former versions of Autoconf, the files used in preparing a software
+ package for distribution were:
+ 
+ <PRE>
+ configure.ac --.   .------&#62; autoconf* -----&#62; configure
+                +---+
+ [aclocal.m4] --+   `---.
+ [acsite.m4] ---'       |
+                        +--&#62; [autoheader*] -&#62; [config.h.in]
+ [acconfig.h] ----.     |
+                  +-----'
+ [config.h.top] --+
+ [config.h.bot] --'
+ </PRE>
+ 
+ <P>
+ Use only the <CODE>AH_</CODE> macros, <TT>`configure.ac'</TT> should be
+ self-contained, and should not depend upon <TT>`acconfig.h'</TT> etc.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC149" HREF="autoconf_toc.html#TOC149">Using @command{autoupdate} to Modernize <TT>`configure.ac'</TT></A></H2>
+ <P>
+ <A NAME="IDX806"></A>
+ 
+ 
+ <P>
+ The @command{autoupdate} program updates a <TT>`configure.ac'</TT> file that
+ calls Autoconf macros by their old names to use the current macro names.
+ In version 2 of Autoconf, most of the macros were renamed to use a more
+ uniform and descriptive naming scheme.  See section <A HREF="autoconf.html#SEC103">Macro Names</A>, for a
+ description of the new scheme.  Although the old names still work
+ (see section <A HREF="autoconf.html#SEC150">Obsolete Macros</A>, for a list of the old macros and the corresponding
+ new names), you can make your <TT>`configure.ac'</TT> files more readable
+ and make it easier to use the current Autoconf documentation if you
+ update them to use the new macro names.
+ 
+ 
+ <P>
+ <A NAME="IDX807"></A>
+ If given no arguments, @command{autoupdate} updates <TT>`configure.ac'</TT>,
+ backing up the original version with the suffix <TT>`~'</TT> (or the value
+ of the environment variable <CODE>SIMPLE_BACKUP_SUFFIX</CODE>, if that is
+ set).  If you give @command{autoupdate} an argument, it reads that file
+ instead of <TT>`configure.ac'</TT> and writes the updated file to the
+ standard output.
+ 
+ 
+ <P>
+ @command{autoupdate} accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{--help}
+ <DD>
+ <DT>@option{-h}
+ <DD>
+ Print a summary of the command line options and exit.
+ 
+ <DT>@option{--version}
+ <DD>
+ <DT>@option{-V}
+ <DD>
+ Print the version number of Autoconf and exit.
+ 
+ <DT>@option{--verbose}
+ <DD>
+ <DT>@option{-v}
+ <DD>
+ Report processing steps.
+ 
+ <DT>@option{--debug}
+ <DD>
+ <DT>@option{-d}
+ <DD>
+ Don't remove the temporary files.
+ 
+ <DT>@option{--force}
+ <DD>
+ <DT>@option{-f}
+ <DD>
+ Force the update even if the file has not changed.  Disregard the cache.
+ 
+ <DT>@option{--include=<VAR>dir</VAR>}
+ <DD>
+ <DT>@option{-I <VAR>dir</VAR>}
+ <DD>
+ Also look for input files in <VAR>dir</VAR>.  Multiple invocations accumulate.
+ Directories are browsed from last to first.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC150" HREF="autoconf_toc.html#TOC150">Obsolete Macros</A></H2>
+ 
+ <P>
+ Several macros are obsoleted in Autoconf, for various reasons (typically
+ they failed to quote properly, couldn't be extended for more recent
+ issues etc.).  They are still supported, but deprecated: their use
+ should be avoided.
+ 
+ 
+ <P>
+ During the jump from Autoconf version 1 to version 2, most of the
+ macros were renamed to use a more uniform and descriptive naming scheme,
+ but their signature did not change.  See section <A HREF="autoconf.html#SEC103">Macro Names</A>, for a
+ description of the new naming scheme.  Below, there is just the mapping
+ from old names to new names for these macros, the reader is invited to
+ refer to the definition of the new macro for the signature and the
+ description.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ALLOCA</B>
+ <DD><A NAME="IDX808"></A>
+ <A NAME="IDX809"></A>
+ <CODE>AC_FUNC_ALLOCA</CODE>
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ARG_ARRAY</B>
+ <DD><A NAME="IDX810"></A>
+ <A NAME="IDX811"></A>
+ removed because of limited usefulness
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_C_CROSS</B>
+ <DD><A NAME="IDX812"></A>
+ <A NAME="IDX813"></A>
+ This macro is obsolete; it does nothing.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CANONICAL_SYSTEM</B>
+ <DD><A NAME="IDX814"></A>
+ <A NAME="IDX815"></A>
+ Determine the system type and set output variables to the names of the
+ canonical system types.  See section <A HREF="autoconf.html#SEC123">Getting the Canonical System Type</A>, for details about the
+ variables this macro sets.
+ 
+ 
+ <P>
+ The user is encouraged to use either <CODE>AC_CANONICAL_BUILD</CODE>, or
+ <CODE>AC_CANONICAL_HOST</CODE>, or <CODE>AC_CANONICAL_TARGET</CODE>, depending on
+ the needs.  Using <CODE>AC_CANONICAL_TARGET</CODE> is enough to run the two
+ other macros.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHAR_UNSIGNED</B>
+ <DD><A NAME="IDX816"></A>
+ <A NAME="IDX817"></A>
+ <CODE>AC_C_CHAR_UNSIGNED</CODE>
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECK_TYPE</B> <I>(<VAR>type</VAR>, <VAR>default</VAR>)</I>
+ <DD><A NAME="IDX818"></A>
+ <A NAME="IDX819"></A>
+ Autoconf, up to 2.13, used to provide this version of
+ <CODE>AC_CHECK_TYPE</CODE>, deprecated because of its flaws.  Firstly, although
+ it is a member of the <CODE>CHECK</CODE> clan, singular sub-family, it does
+ more than just checking.  Second, missing types are not
+ <CODE>typedef</CODE>'d, they are <CODE>#define</CODE>'d, which can lead to
+ incompatible code in the case of pointer types.
+ 
+ 
+ <P>
+ This use of <CODE>AC_CHECK_TYPE</CODE> is obsolete and discouraged, see
+ section <A HREF="autoconf.html#SEC59">Generic Type Checks</A>, for the description of the current macro.
+ 
+ 
+ <P>
+ If the type <VAR>type</VAR> is not defined, define it to be the C (or C++)
+ builtin type <VAR>default</VAR>; e.g., <SAMP>`short'</SAMP> or <SAMP>`unsigned'</SAMP>.
+ 
+ 
+ <P>
+ This macro is equivalent to:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_TYPE([<VAR>type</VAR>],
+               [AC_DEFINE([<VAR>type</VAR>], [<VAR>default</VAR>],
+                          [Define to `<VAR>default</VAR>' if &#60;sys/types.h&#62;
+                           does not define.])])
+ </PRE>
+ 
+ <P>
+ In order to keep backward compatibility, the two versions of
+ <CODE>AC_CHECK_TYPE</CODE> are implemented, selected by a simple heuristics:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ If there are three or four arguments, the modern version is used.
+ 
+ <LI>
+ 
+ If the second argument appears to be a C or C++ type, then the
+ obsolete version is used.  This happens if the argument is a C or C++
+ <EM>builtin</EM> type or a C identifier ending in <SAMP>`_t'</SAMP>, optionally
+ followed by one of <SAMP>`[(* '</SAMP> and then by a string of zero or more
+ characters taken from the set <SAMP>`[]()* _a-zA-Z0-9'</SAMP>.
+ 
+ <LI>
+ 
+ If the second argument is spelled with the alphabet of valid C and C++
+ types, the user is warned and the modern version is used.
+ 
+ <LI>
+ 
+ Otherwise, the modern version is used.
+ </OL>
+ 
+ <P>
+ You are encouraged either to use a valid builtin type, or to use the
+ equivalent modern code (see above), or better yet, to use
+ <CODE>AC_CHECK_TYPES</CODE> together with
+ 
+ 
+ 
+ <PRE>
+ #if !HAVE_LOFF_T
+ typedef loff_t off_t;
+ #endif
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CHECKING</B> <I>(<VAR>feature-description</VAR>)</I>
+ <DD><A NAME="IDX820"></A>
+ <A NAME="IDX821"></A>
+ Same as <SAMP>`AC_MSG_NOTICE([checking <VAR>feature-description</VAR>...]'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_COMPILE_CHECK</B> <I>(<VAR>echo-text</VAR>, <VAR>includes</VAR>, <VAR>function-body</VAR>, <VAR>action-if-found</VAR>, @ovar{action-if-not-found})</I>
+ <DD><A NAME="IDX822"></A>
+ <A NAME="IDX823"></A>
+ This is an obsolete version of <CODE>AC_TRY_LINK</CODE> (see section <A HREF="autoconf.html#SEC71">Examining Libraries</A>), with the addition that it prints <SAMP>`checking for
+ <VAR>echo-text</VAR>'</SAMP> to the standard output first, if <VAR>echo-text</VAR> is
+ non-empty.  Use <CODE>AC_MSG_CHECKING</CODE> and <CODE>AC_MSG_RESULT</CODE> instead
+ to print messages (see section <A HREF="autoconf.html#SEC86">Printing Messages</A>).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CONST</B>
+ <DD><A NAME="IDX824"></A>
+ <A NAME="IDX825"></A>
+ <CODE>AC_C_CONST</CODE>
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CROSS_CHECK</B>
+ <DD><A NAME="IDX826"></A>
+ <A NAME="IDX827"></A>
+ Same as <CODE>AC_C_CROSS</CODE>, which is obsolete too, and does nothing
+ <CODE>:-)</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_CYGWIN</B>
+ <DD><A NAME="IDX828"></A>
+ <A NAME="IDX829"></A>
+ Check for the Cygwin environment in which case the shell variable
+ <CODE>CYGWIN</CODE> is set to <SAMP>`yes'</SAMP>.  Don't use this macro, the dignified
+ means to check the nature of the host is using
+ <CODE>AC_CANONICAL_HOST</CODE>.  As a matter of fact this macro is defined as:
+ 
+ 
+ 
+ <PRE>
+ AC_REQUIRE([AC_CANONICAL_HOST])[]dnl
+ case $host_os in
+   *cygwin* ) CYGWIN=yes;;
+          * ) CYGWIN=no;;
+ esac
+ </PRE>
+ 
+ <P>
+ Beware that the variable <CODE>CYGWIN</CODE> has a very special meaning when
+ running CygWin32, and should not be changed.  That's yet another reason
+ not to use this macro.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DECL_YYTEXT</B>
+ <DD><A NAME="IDX830"></A>
+ <A NAME="IDX831"></A>
+ Does nothing, now integrated in <CODE>AC_PROG_LEX</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DIR_HEADER</B>
+ <DD><A NAME="IDX832"></A>
+ <A NAME="IDX833"></A>
+ <A NAME="IDX834"></A>
+ <A NAME="IDX835"></A>
+ <A NAME="IDX836"></A>
+ <A NAME="IDX837"></A>
+ Like calling <CODE>AC_FUNC_CLOSEDIR_VOID</CODE> and<CODE>AC_HEADER_DIRENT</CODE>,
+ but defines a different set of C preprocessor macros to indicate which
+ header file is found:
+ 
+ 
+ <LI>Header            </TD><TD> Old Symbol     </TD><TD> New Symbol
+ 
+ <LI><TT>`dirent.h'</TT>   </TD><TD> <CODE>DIRENT</CODE>  </TD><TD> <CODE>HAVE_DIRENT_H</CODE>
+ 
+ <LI><TT>`sys/ndir.h'</TT> </TD><TD> <CODE>SYSNDIR</CODE> </TD><TD> <CODE>HAVE_SYS_NDIR_H</CODE>
+ 
+ <LI><TT>`sys/dir.h'</TT>  </TD><TD> <CODE>SYSDIR</CODE>  </TD><TD> <CODE>HAVE_SYS_DIR_H</CODE>
+ 
+ <LI><TT>`ndir.h'</TT>     </TD><TD> <CODE>NDIR</CODE>    </TD><TD> <CODE>HAVE_NDIR_H</CODE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DYNIX_SEQ</B>
+ <DD><A NAME="IDX838"></A>
+ <A NAME="IDX839"></A>
+ If on Dynix/PTX (Sequent UNIX), add @option{-lseq} to output variable
+ <CODE>LIBS</CODE>.  This macro used to be defined as
+ 
+ 
+ <PRE>
+ AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS")
+ </PRE>
+ 
+ now it is just <CODE>AC_FUNC_GETMNTENT</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_EXEEXT</B>
+ <DD><A NAME="IDX840"></A>
+ <A NAME="IDX841"></A>
+ <A NAME="IDX842"></A>
+ Defined the output variable <CODE>EXEEXT</CODE> based on the output of the
+ compiler, which is now done automatically.  Typically set to empty
+ string if Unix and <SAMP>`.exe'</SAMP> if Win32 or OS/2.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_EMXOS2</B>
+ <DD><A NAME="IDX843"></A>
+ <A NAME="IDX844"></A>
+ Similar to <CODE>AC_CYGWIN</CODE> but checks for the EMX environment on OS/2
+ and sets <CODE>EMXOS2</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ERROR</B>
+ <DD><A NAME="IDX845"></A>
+ <A NAME="IDX846"></A>
+ <CODE>AC_MSG_ERROR</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FIND_X</B>
+ <DD><A NAME="IDX847"></A>
+ <A NAME="IDX848"></A>
+ <CODE>AC_PATH_X</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FIND_XTRA</B>
+ <DD><A NAME="IDX849"></A>
+ <A NAME="IDX850"></A>
+ <CODE>AC_PATH_XTRA</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_CHECK</B>
+ <DD><A NAME="IDX851"></A>
+ <A NAME="IDX852"></A>
+ <CODE>AC_CHECK_FUNC</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_FUNC_WAIT3</B>
+ <DD><A NAME="IDX853"></A>
+ <A NAME="IDX854"></A>
+ <A NAME="IDX855"></A>
+ If <CODE>wait3</CODE> is found and fills in the contents of its third argument
+ (a <SAMP>`struct rusage *'</SAMP>), which HP-UX does not do, define
+ <CODE>HAVE_WAIT3</CODE>.
+ 
+ These days portable programs should use <CODE>waitpid</CODE>, not
+ <CODE>wait3</CODE>, as <CODE>wait3</CODE> is being removed from the Open Group
+ standards, and will not appear in the next revision of POSIX.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_GCC_TRADITIONAL</B>
+ <DD><A NAME="IDX856"></A>
+ <A NAME="IDX857"></A>
+ <CODE>AC_PROG_GCC_TRADITIONAL</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_GETGROUPS_T</B>
+ <DD><A NAME="IDX858"></A>
+ <A NAME="IDX859"></A>
+ <CODE>AC_TYPE_GETGROUPS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_GETLOADAVG</B>
+ <DD><A NAME="IDX860"></A>
+ <A NAME="IDX861"></A>
+ <CODE>AC_FUNC_GETLOADAVG</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HAVE_FUNCS</B>
+ <DD><A NAME="IDX862"></A>
+ <A NAME="IDX863"></A>
+ <CODE>AC_CHECK_FUNCS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HAVE_HEADERS</B>
+ <DD><A NAME="IDX864"></A>
+ <A NAME="IDX865"></A>
+ <CODE>AC_CHECK_HEADERS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HAVE_LIBRARY</B> <I>(<VAR>library</VAR>, @ovar{action-if-found}, @ovar{action-if-not-found}, @ovar{other-libraries})</I>
+ <DD><A NAME="IDX866"></A>
+ <A NAME="IDX867"></A>
+ This macro is equivalent to calling <CODE>AC_CHECK_LIB</CODE> with a
+ <VAR>function</VAR> argument of <CODE>main</CODE>.  In addition, <VAR>library</VAR> can
+ be written as any of <SAMP>`foo'</SAMP>, @option{-lfoo}, or <SAMP>`libfoo.a'</SAMP>.  In
+ all of those cases, the compiler is passed @option{-lfoo}.  However,
+ <VAR>library</VAR> cannot be a shell variable; it must be a literal name.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HAVE_POUNDBANG</B>
+ <DD><A NAME="IDX868"></A>
+ <A NAME="IDX869"></A>
+ <CODE>AC_SYS_INTERPRETER</CODE> (different calling convention)
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_CHECK</B>
+ <DD><A NAME="IDX870"></A>
+ <A NAME="IDX871"></A>
+ <CODE>AC_CHECK_HEADER</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_HEADER_EGREP</B>
+ <DD><A NAME="IDX872"></A>
+ <A NAME="IDX873"></A>
+ <CODE>AC_EGREP_HEADER</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_INIT</B> <I>(<VAR>unique-file-in-source-dir</VAR>)</I>
+ <DD><A NAME="IDX874"></A>
+ <A NAME="IDX875"></A>
+ Formerly <CODE>AC_INIT</CODE> used to have a single argument, and was
+ equivalent to:
+ 
+ 
+ <PRE>
+ AC_INIT
+ AC_CONFIG_SRCDIR(<VAR>unique-file-in-source-dir</VAR>)
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_INLINE</B>
+ <DD><A NAME="IDX876"></A>
+ <A NAME="IDX877"></A>
+ <CODE>AC_C_INLINE</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_INT_16_BITS</B>
+ <DD><A NAME="IDX878"></A>
+ <A NAME="IDX879"></A>
+ <A NAME="IDX880"></A>
+ If the C type <CODE>int</CODE> is 16 bits wide, define <CODE>INT_16_BITS</CODE>.
+ Use <SAMP>`AC_CHECK_SIZEOF(int)'</SAMP> instead.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_IRIX_SUN</B>
+ <DD><A NAME="IDX881"></A>
+ <A NAME="IDX882"></A>
+ If on IRIX (Silicon Graphics UNIX), add @option{-lsun} to output
+ <CODE>LIBS</CODE>.  If you were using it to get <CODE>getmntent</CODE>, use
+ <CODE>AC_FUNC_GETMNTENT</CODE> instead.  If you used it for the NIS versions
+ of the password and group functions, use <SAMP>`AC_CHECK_LIB(sun,
+ getpwnam)'</SAMP>.  Up to Autoconf 2.13, it used to be
+ 
+ 
+ <PRE>
+ AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS")
+ </PRE>
+ 
+ now it is defined as
+ 
+ 
+ <PRE>
+ AC_FUNC_GETMNTENT
+ AC_CHECK_LIB(sun, getpwnam)
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_C</B>
+ <DD><A NAME="IDX883"></A>
+ <A NAME="IDX884"></A>
+ Same as <SAMP>`AC_LANG(C)'</SAMP>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_CPLUSPLUS</B>
+ <DD><A NAME="IDX885"></A>
+ <A NAME="IDX886"></A>
+ Same as <SAMP>`AC_LANG(C++)'</SAMP>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_FORTRAN77</B>
+ <DD><A NAME="IDX887"></A>
+ <A NAME="IDX888"></A>
+ Same as <SAMP>`AC_LANG(Fortran 77)'</SAMP>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_RESTORE</B>
+ <DD><A NAME="IDX889"></A>
+ <A NAME="IDX890"></A>
+ Select the <VAR>language</VAR> that is saved on the top of the stack, as set
+ by <CODE>AC_LANG_SAVE</CODE>, remove it from the stack, and call
+ <CODE>AC_LANG(<VAR>language</VAR>)</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LANG_SAVE</B>
+ <DD><A NAME="IDX891"></A>
+ <A NAME="IDX892"></A>
+ Remember the current language (as set by <CODE>AC_LANG</CODE>) on a stack.
+ The current language does not change.  <CODE>AC_LANG_PUSH</CODE> is preferred.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LINK_FILES</B> <I>(<VAR>source</VAR>..., <VAR>dest</VAR>...)</I>
+ <DD><A NAME="IDX893"></A>
+ <A NAME="IDX894"></A>
+ This is an obsolete version of <CODE>AC_CONFIG_LINKS</CODE>.  An updated
+ version of:
+ 
+ 
+ <PRE>
+ AC_LINK_FILES(config/$machine.h config/$obj_format.h,
+               host.h            object.h)
+ </PRE>
+ 
+ is:
+ 
+ 
+ <PRE>
+ AC_CONFIG_LINKS(host.h:config/$machine.h
+                 object.h:config/$obj_format.h)
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LN_S</B>
+ <DD><A NAME="IDX895"></A>
+ <A NAME="IDX896"></A>
+ <CODE>AC_PROG_LN_S</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LONG_64_BITS</B>
+ <DD><A NAME="IDX897"></A>
+ <A NAME="IDX898"></A>
+ <A NAME="IDX899"></A>
+ Define <CODE>LONG_64_BITS</CODE> if the C type <CODE>long int</CODE> is 64 bits wide.
+ Use the generic macro <SAMP>`AC_CHECK_SIZEOF([long int])'</SAMP> instead.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LONG_DOUBLE</B>
+ <DD><A NAME="IDX900"></A>
+ <A NAME="IDX901"></A>
+ <CODE>AC_C_LONG_DOUBLE</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LONG_FILE_NAMES</B>
+ <DD><A NAME="IDX902"></A>
+ <A NAME="IDX903"></A>
+ <CODE>AC_SYS_LONG_FILE_NAMES</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MAJOR_HEADER</B>
+ <DD><A NAME="IDX904"></A>
+ <A NAME="IDX905"></A>
+ <CODE>AC_HEADER_MAJOR</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MEMORY_H</B>
+ <DD><A NAME="IDX906"></A>
+ <A NAME="IDX907"></A>
+ <A NAME="IDX908"></A>
+ Used to define <CODE>NEED_MEMORY_H</CODE> if the <CODE>mem</CODE> functions were
+ defined in <TT>`memory.h'</TT>.  Today it is equivalent to
+ <SAMP>`AC_CHECK_HEADERS(memory.h)'</SAMP>.  Adjust your code to depend upon
+ <CODE>HAVE_MEMORY_H</CODE>, not <CODE>NEED_MEMORY_H</CODE>, see See section <A HREF="autoconf.html#SEC37">Standard Symbols</A>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MINGW32</B>
+ <DD><A NAME="IDX909"></A>
+ <A NAME="IDX910"></A>
+ Similar to <CODE>AC_CYGWIN</CODE> but checks for the MingW32 compiler
+ environment and sets <CODE>MINGW32</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MINUS_C_MINUS_O</B>
+ <DD><A NAME="IDX911"></A>
+ <A NAME="IDX912"></A>
+ <CODE>AC_PROG_CC_C_O</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MMAP</B>
+ <DD><A NAME="IDX913"></A>
+ <A NAME="IDX914"></A>
+ <CODE>AC_FUNC_MMAP</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_MODE_T</B>
+ <DD><A NAME="IDX915"></A>
+ <A NAME="IDX916"></A>
+ <CODE>AC_TYPE_MODE_T</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OBJEXT</B>
+ <DD><A NAME="IDX917"></A>
+ <A NAME="IDX918"></A>
+ <A NAME="IDX919"></A>
+ Defined the output variable <CODE>OBJEXT</CODE> based on the output of the
+ compiler, after .c files have been excluded.  Typically set to <SAMP>`o'</SAMP>
+ if Unix, <SAMP>`obj'</SAMP> if Win32.  Now the compiler checking macros handle
+ this automatically.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OBSOLETE</B> <I>(<VAR>this-macro-name</VAR>, @ovar{suggestion})</I>
+ <DD><A NAME="IDX920"></A>
+ <A NAME="IDX921"></A>
+ Make <CODE>m4</CODE> print a message to the standard error output warning that
+ <VAR>this-macro-name</VAR> is obsolete, and giving the file and line number
+ where it was called.  <VAR>this-macro-name</VAR> should be the name of the
+ macro that is calling <CODE>AC_OBSOLETE</CODE>.  If <VAR>suggestion</VAR> is given,
+ it is printed at the end of the warning message; for example, it can be
+ a suggestion for what to use instead of <VAR>this-macro-name</VAR>.
+ 
+ For instance
+ 
+ 
+ <PRE>
+ AC_OBSOLETE([$0], [; use AC_CHECK_HEADERS(unistd.h) instead])dnl
+ </PRE>
+ 
+ You are encouraged to use <CODE>AU_DEFUN</CODE> instead, since it gives better
+ services to the user.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OFF_T</B>
+ <DD><A NAME="IDX922"></A>
+ <A NAME="IDX923"></A>
+ <CODE>AC_TYPE_OFF_T</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OUTPUT</B> <I>(@ovar{file}..., @ovar{extra-cmds}, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX924"></A>
+ <A NAME="IDX925"></A>
+ The use of <CODE>AC_OUTPUT</CODE> with argument is deprecated, this obsoleted
+ interface is equivalent to:
+ 
+ 
+ <PRE>
+ AC_CONFIG_FILES(<VAR>file</VAR>...)
+ AC_CONFIG_COMMANDS([default],
+                    <VAR>extra-cmds</VAR>, <VAR>init-cmds</VAR>)
+ AC_OUTPUT
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_OUTPUT_COMMANDS</B> <I>(<VAR>extra-cmds</VAR>, @ovar{init-cmds})</I>
+ <DD><A NAME="IDX926"></A>
+ <A NAME="IDX927"></A>
+ Specify additional shell commands to run at the end of
+ <TT>`config.status'</TT>, and shell commands to initialize any variables
+ from @command{configure}.  This macro may be called multiple times.  It is
+ obsolete, replaced by <CODE>AC_CONFIG_COMMANDS</CODE>.
+ 
+ Here is an unrealistic example:
+ 
+ 
+ <PRE>
+ fubar=27
+ AC_OUTPUT_COMMANDS([echo this is extra $fubar, and so on.],
+                    [fubar=$fubar])
+ AC_OUTPUT_COMMANDS([echo this is another, extra, bit],
+                    [echo init bit])
+ </PRE>
+ 
+ Aside from the fact that <CODE>AC_CONFIG_COMMANDS</CODE> requires an
+ additional key, an important difference is that
+ <CODE>AC_OUTPUT_COMMANDS</CODE> is quoting its arguments twice, while
+ <CODE>AC_CONFIG_COMMANDS</CODE>.  This means that <CODE>AC_CONFIG_COMMANDS</CODE>
+ can safely be given macro calls as arguments:
+ 
+ 
+ <PRE>
+ AC_CONFIG_COMMANDS(foo, [my_FOO()])
+ </PRE>
+ 
+ conversely, where one level of quoting was enough for literal strings
+ with <CODE>AC_OUTPUT_COMMANDS</CODE>, you need two with
+ <CODE>AC_CONFIG_COMMANDS</CODE>.  The following lines are equivalent:
+ 
+ 
+ <PRE>
+ AC_OUTPUT_COMMANDS([echo "Square brackets: []"])
+ AC_CONFIG_COMMANDS([default], [[echo "Square brackets: []"]])
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PID_T</B>
+ <DD><A NAME="IDX928"></A>
+ <A NAME="IDX929"></A>
+ <CODE>AC_TYPE_PID_T</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PREFIX</B>
+ <DD><A NAME="IDX930"></A>
+ <A NAME="IDX931"></A>
+ <CODE>AC_PREFIX_PROGRAM</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROGRAMS_CHECK</B>
+ <DD><A NAME="IDX932"></A>
+ <A NAME="IDX933"></A>
+ <CODE>AC_CHECK_PROGS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROGRAMS_PATH</B>
+ <DD><A NAME="IDX934"></A>
+ <A NAME="IDX935"></A>
+ <CODE>AC_PATH_PROGS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROGRAM_CHECK</B>
+ <DD><A NAME="IDX936"></A>
+ <A NAME="IDX937"></A>
+ <CODE>AC_CHECK_PROG</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROGRAM_EGREP</B>
+ <DD><A NAME="IDX938"></A>
+ <A NAME="IDX939"></A>
+ <CODE>AC_EGREP_CPP</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROGRAM_PATH</B>
+ <DD><A NAME="IDX940"></A>
+ <A NAME="IDX941"></A>
+ <CODE>AC_PATH_PROG</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_REMOTE_TAPE</B>
+ <DD><A NAME="IDX942"></A>
+ <A NAME="IDX943"></A>
+ removed because of limited usefulness
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_RESTARTABLE_SYSCALLS</B>
+ <DD><A NAME="IDX944"></A>
+ <A NAME="IDX945"></A>
+ <CODE>AC_SYS_RESTARTABLE_SYSCALLS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_RETSIGTYPE</B>
+ <DD><A NAME="IDX946"></A>
+ <A NAME="IDX947"></A>
+ <CODE>AC_TYPE_SIGNAL</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_RSH</B>
+ <DD><A NAME="IDX948"></A>
+ <A NAME="IDX949"></A>
+ Removed because of limited usefulness.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SCO_INTL</B>
+ <DD><A NAME="IDX950"></A>
+ <A NAME="IDX951"></A>
+ <A NAME="IDX952"></A>
+ If on SCO UNIX, add @option{-lintl} to output variable <CODE>LIBS</CODE>.  This
+ macro used to
+ 
+ 
+ <PRE>
+ AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS")
+ </PRE>
+ 
+ now it just calls <CODE>AC_FUNC_STRFTIME</CODE> instead.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SETVBUF_REVERSED</B>
+ <DD><A NAME="IDX953"></A>
+ <A NAME="IDX954"></A>
+ <CODE>AC_FUNC_SETVBUF_REVERSED</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SET_MAKE</B>
+ <DD><A NAME="IDX955"></A>
+ <A NAME="IDX956"></A>
+ <CODE>AC_PROG_MAKE_SET</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SIZEOF_TYPE</B>
+ <DD><A NAME="IDX957"></A>
+ <A NAME="IDX958"></A>
+ <CODE>AC_CHECK_SIZEOF</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SIZE_T</B>
+ <DD><A NAME="IDX959"></A>
+ <A NAME="IDX960"></A>
+ <CODE>AC_TYPE_SIZE_T</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STAT_MACROS_BROKEN</B>
+ <DD><A NAME="IDX961"></A>
+ <A NAME="IDX962"></A>
+ <CODE>AC_HEADER_STAT</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STDC_HEADERS</B>
+ <DD><A NAME="IDX963"></A>
+ <A NAME="IDX964"></A>
+ <CODE>AC_HEADER_STDC</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_STRCOLL</B>
+ <DD><A NAME="IDX965"></A>
+ <A NAME="IDX966"></A>
+ <CODE>AC_FUNC_STRCOLL</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ST_BLKSIZE</B>
+ <DD><A NAME="IDX967"></A>
+ <A NAME="IDX968"></A>
+ <CODE>AC_STRUCT_ST_BLKSIZE</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ST_BLOCKS</B>
+ <DD><A NAME="IDX969"></A>
+ <A NAME="IDX970"></A>
+ <CODE>AC_STRUCT_ST_BLOCKS</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_ST_RDEV</B>
+ <DD><A NAME="IDX971"></A>
+ <A NAME="IDX972"></A>
+ <CODE>AC_STRUCT_ST_RDEV</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_RESTARTABLE_SYSCALLS</B>
+ <DD><A NAME="IDX973"></A>
+ <A NAME="IDX974"></A>
+ <A NAME="IDX975"></A>
+ If the system automatically restarts a system call that is interrupted
+ by a signal, define <CODE>HAVE_RESTARTABLE_SYSCALLS</CODE>. This macro does
+ not check if system calls are restarted in general--it tests whether a
+ signal handler installed with <CODE>signal</CODE> (but not <CODE>sigaction</CODE>)
+ causes system calls to be restarted. It does not test if system calls
+ can be restarted when interrupted by signals that have no handler.
+ 
+ These days portable programs should use <CODE>sigaction</CODE> with
+ <CODE>SA_RESTART</CODE> if they want restartable system calls.  They should
+ not rely on <CODE>HAVE_RESTARTABLE_SYSCALLS</CODE>, since nowadays whether a
+ system call is restartable is a dynamic issue, not a configuration-time
+ issue.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_SYS_SIGLIST_DECLARED</B>
+ <DD><A NAME="IDX976"></A>
+ <A NAME="IDX977"></A>
+ <CODE>AC_DECL_SYS_SIGLIST</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TEST_CPP</B>
+ <DD><A NAME="IDX978"></A>
+ <A NAME="IDX979"></A>
+ <CODE>AC_TRY_CPP</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TEST_PROGRAM</B>
+ <DD><A NAME="IDX980"></A>
+ <A NAME="IDX981"></A>
+ <CODE>AC_TRY_RUN</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TIMEZONE</B>
+ <DD><A NAME="IDX982"></A>
+ <A NAME="IDX983"></A>
+ <CODE>AC_STRUCT_TIMEZONE</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_TIME_WITH_SYS_TIME</B>
+ <DD><A NAME="IDX984"></A>
+ <A NAME="IDX985"></A>
+ <CODE>AC_HEADER_TIME</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_UID_T</B>
+ <DD><A NAME="IDX986"></A>
+ <A NAME="IDX987"></A>
+ <CODE>AC_TYPE_UID_T</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_UNISTD_H</B>
+ <DD><A NAME="IDX988"></A>
+ <A NAME="IDX989"></A>
+ Same as <SAMP>`AC_CHECK_HEADERS(unistd.h)'</SAMP>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_USG</B>
+ <DD><A NAME="IDX990"></A>
+ <A NAME="IDX991"></A>
+ <A NAME="IDX992"></A>
+ Define <CODE>USG</CODE> if the BSD string functions are defined in
+ <TT>`strings.h'</TT>.  You should no longer depend upon <CODE>USG</CODE>, but on
+ <CODE>HAVE_STRING_H</CODE>, see See section <A HREF="autoconf.html#SEC37">Standard Symbols</A>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_UTIME_NULL</B>
+ <DD><A NAME="IDX993"></A>
+ <A NAME="IDX994"></A>
+ <CODE>AC_FUNC_UTIME_NULL</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_VALIDATE_CACHED_SYSTEM_TUPLE</B> <I>(@ovar{cmd})</I>
+ <DD><A NAME="IDX995"></A>
+ <A NAME="IDX996"></A>
+ If the cache file is inconsistent with the current host, target and
+ build system types, it used to execute <VAR>cmd</VAR> or print a default
+ error message.
+ 
+ This is now handled by default.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_VERBOSE</B> <I>(<VAR>result-description</VAR>)</I>
+ <DD><A NAME="IDX997"></A>
+ <A NAME="IDX998"></A>
+ <CODE>AC_MSG_RESULT</CODE>.
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_VFORK</B>
+ <DD><A NAME="IDX999"></A>
+ <A NAME="IDX1000"></A>
+ <CODE>AC_FUNC_VFORK</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_VPRINTF</B>
+ <DD><A NAME="IDX1001"></A>
+ <A NAME="IDX1002"></A>
+ <CODE>AC_FUNC_VPRINTF</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_WAIT3</B>
+ <DD><A NAME="IDX1003"></A>
+ <A NAME="IDX1004"></A>
+ <CODE>AC_FUNC_WAIT3</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_WARN</B>
+ <DD><A NAME="IDX1005"></A>
+ <A NAME="IDX1006"></A>
+ <CODE>AC_MSG_WARN</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_WORDS_BIGENDIAN</B>
+ <DD><A NAME="IDX1007"></A>
+ <A NAME="IDX1008"></A>
+ <CODE>AC_C_BIGENDIAN</CODE>
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_XENIX_DIR</B>
+ <DD><A NAME="IDX1009"></A>
+ <A NAME="IDX1010"></A>
+ <A NAME="IDX1011"></A>
+ This macro used to add @option{-lx} to output variable <CODE>LIBS</CODE> if on
+ Xenix.  Also, if <TT>`dirent.h'</TT> is being checked for, added
+ @option{-ldir} to <CODE>LIBS</CODE>.  Now it is merely an alias of
+ <CODE>AC_HEADER_DIRENT</CODE> instead, plus some code to detect whether
+ running XENIX on which you should not depend:
+ 
+ 
+ <PRE>
+ AC_MSG_CHECKING([for Xenix])
+ AC_EGREP_CPP(yes,
+ [#if defined M_XENIX &#38;&#38; !defined M_UNIX
+   yes
+ #endif],
+              [AC_MSG_RESULT([yes]); XENIX=yes],
+              [AC_MSG_RESULT([no]); XENIX=])
+ </PRE>
+ 
+ </DL>
+ 
+ <DL>
+ <DT><U>Macro:</U> <B>AC_YYTEXT_POINTER</B>
+ <DD><A NAME="IDX1012"></A>
+ <A NAME="IDX1013"></A>
+ <CODE>AC_DECL_YYTEXT</CODE>
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC151" HREF="autoconf_toc.html#TOC151">Upgrading From Version 1</A></H2>
+ 
+ <P>
+ Autoconf version 2 is mostly backward compatible with version 1.
+ However, it introduces better ways to do some things, and doesn't
+ support some of the ugly things in version 1.  So, depending on how
+ sophisticated your <TT>`configure.ac'</TT> files are, you might have to do
+ some manual work in order to upgrade to version 2.  This chapter points
+ out some problems to watch for when upgrading.  Also, perhaps your
+ @command{configure} scripts could benefit from some of the new features in
+ version 2; the changes are summarized in the file <TT>`NEWS'</TT> in the
+ Autoconf distribution.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC152" HREF="autoconf_toc.html#TOC152">Changed File Names</A></H3>
+ 
+ <P>
+ If you have an <TT>`aclocal.m4'</TT> installed with Autoconf (as opposed to
+ in a particular package's source directory), you must rename it to
+ <TT>`acsite.m4'</TT>.  See section <A HREF="autoconf.html#SEC13">Using @command{autoconf} to Create @command{configure}</A>.
+ 
+ 
+ <P>
+ If you distribute <TT>`install.sh'</TT> with your package, rename it to
+ <TT>`install-sh'</TT> so <CODE>make</CODE> builtin rules won't inadvertently
+ create a file called <TT>`install'</TT> from it.  <CODE>AC_PROG_INSTALL</CODE>
+ looks for the script under both names, but it is best to use the new name.
+ 
+ 
+ <P>
+ If you were using <TT>`config.h.top'</TT>, <TT>`config.h.bot'</TT>, or
+ <TT>`acconfig.h'</TT>, you still can, but you will have less clutter if you
+ use the <CODE>AH_</CODE> macros.  See section <A HREF="autoconf.html#SEC30">Autoheader Macros</A>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC153" HREF="autoconf_toc.html#TOC153">Changed Makefiles</A></H3>
+ 
+ <P>
+ Add <SAMP>`@CFLAGS@'</SAMP>, <SAMP>`@CPPFLAGS@'</SAMP>, and <SAMP>`@LDFLAGS@'</SAMP> in
+ your <TT>`Makefile.in'</TT> files, so they can take advantage of the values
+ of those variables in the environment when @command{configure} is run.
+ Doing this isn't necessary, but it's a convenience for users.
+ 
+ 
+ <P>
+ Also add <SAMP>`@configure_input@'</SAMP> in a comment to each input file for
+ <CODE>AC_OUTPUT</CODE>, so that the output files will contain a comment saying
+ they were produced by @command{configure}.  Automatically selecting the
+ right comment syntax for all the kinds of files that people call
+ <CODE>AC_OUTPUT</CODE> on became too much work.
+ 
+ 
+ <P>
+ Add <TT>`config.log'</TT> and <TT>`config.cache'</TT> to the list of files you
+ remove in <CODE>distclean</CODE> targets.
+ 
+ 
+ <P>
+ If you have the following in <TT>`Makefile.in'</TT>:
+ 
+ 
+ 
+ <PRE>
+ prefix = /usr/local
+ exec_prefix = $(prefix)
+ </PRE>
+ 
+ <P>
+ you must change it to:
+ 
+ 
+ 
+ <PRE>
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ </PRE>
+ 
+ <P>
+ The old behavior of replacing those variables without <SAMP>`@'</SAMP>
+ characters around them has been removed.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC154" HREF="autoconf_toc.html#TOC154">Changed Macros</A></H3>
+ 
+ <P>
+ Many of the macros were renamed in Autoconf version 2.  You can still
+ use the old names, but the new ones are clearer, and it's easier to find
+ the documentation for them.  See section <A HREF="autoconf.html#SEC150">Obsolete Macros</A>, for a table showing the
+ new names for the old macros.  Use the @command{autoupdate} program to
+ convert your <TT>`configure.ac'</TT> to using the new macro names.
+ See section <A HREF="autoconf.html#SEC149">Using @command{autoupdate} to Modernize @file{configure.ac}</A>.
+ 
+ 
+ <P>
+ Some macros have been superseded by similar ones that do the job better,
+ but are not call-compatible.  If you get warnings about calling obsolete
+ macros while running @command{autoconf}, you may safely ignore them, but
+ your @command{configure} script will generally work better if you follow
+ the advice it prints about what to replace the obsolete macros with.  In
+ particular, the mechanism for reporting the results of tests has
+ changed.  If you were using <CODE>echo</CODE> or <CODE>AC_VERBOSE</CODE> (perhaps
+ via <CODE>AC_COMPILE_CHECK</CODE>), your @command{configure} script's output will
+ look better if you switch to <CODE>AC_MSG_CHECKING</CODE> and
+ <CODE>AC_MSG_RESULT</CODE>.  See section <A HREF="autoconf.html#SEC86">Printing Messages</A>.  Those macros work best
+ in conjunction with cache variables.  See section <A HREF="autoconf.html#SEC82">Caching Results</A>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC155" HREF="autoconf_toc.html#TOC155">Changed Results</A></H3>
+ 
+ <P>
+ If you were checking the results of previous tests by examining the
+ shell variable <CODE>DEFS</CODE>, you need to switch to checking the values of
+ the cache variables for those tests.  <CODE>DEFS</CODE> no longer exists while
+ @command{configure} is running; it is only created when generating output
+ files.  This difference from version 1 is because properly quoting the
+ contents of that variable turned out to be too cumbersome and
+ inefficient to do every time <CODE>AC_DEFINE</CODE> is called.  See section <A HREF="autoconf.html#SEC83">Cache Variable Names</A>.
+ 
+ 
+ <P>
+ For example, here is a <TT>`configure.ac'</TT> fragment written for Autoconf
+ version 1:
+ 
+ 
+ 
+ <PRE>
+ AC_HAVE_FUNCS(syslog)
+ case "$DEFS" in
+ *-DHAVE_SYSLOG*) ;;
+ *) # syslog is not in the default libraries.  See if it's in some other.
+   saved_LIBS="$LIBS"
+   for lib in bsd socket inet; do
+     AC_CHECKING(for syslog in -l$lib)
+     LIBS="$saved_LIBS -l$lib"
+     AC_HAVE_FUNCS(syslog)
+     case "$DEFS" in
+     *-DHAVE_SYSLOG*) break ;;
+     *) ;;
+     esac
+     LIBS="$saved_LIBS"
+   done ;;
+ esac
+ </PRE>
+ 
+ <P>
+ Here is a way to write it for version 2:
+ 
+ 
+ 
+ <PRE>
+ AC_CHECK_FUNCS(syslog)
+ if test $ac_cv_func_syslog = no; then
+   # syslog is not in the default libraries.  See if it's in some other.
+   for lib in bsd socket inet; do
+     AC_CHECK_LIB($lib, syslog, [AC_DEFINE(HAVE_SYSLOG)
+       LIBS="$LIBS -l$lib"; break])
+   done
+ fi
+ </PRE>
+ 
+ <P>
+ If you were working around bugs in <CODE>AC_DEFINE_UNQUOTED</CODE> by adding
+ backslashes before quotes, you need to remove them.  It now works
+ predictably, and does not treat quotes (except back quotes) specially.
+ See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>.
+ 
+ 
+ <P>
+ All of the boolean shell variables set by Autoconf macros now use
+ <SAMP>`yes'</SAMP> for the true value.  Most of them use <SAMP>`no'</SAMP> for false,
+ though for backward compatibility some use the empty string instead.  If
+ you were relying on a shell variable being set to something like 1 or
+ <SAMP>`t'</SAMP> for true, you need to change your tests.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC156" HREF="autoconf_toc.html#TOC156">Changed Macro Writing</A></H3>
+ 
+ <P>
+ When defining your own macros, you should now use <CODE>AC_DEFUN</CODE>
+ instead of <CODE>define</CODE>.  <CODE>AC_DEFUN</CODE> automatically calls
+ <CODE>AC_PROVIDE</CODE> and ensures that macros called via <CODE>AC_REQUIRE</CODE>
+ do not interrupt other macros, to prevent nested <SAMP>`checking...'</SAMP>
+ messages on the screen.  There's no actual harm in continuing to use the
+ older way, but it's less convenient and attractive.  See section <A HREF="autoconf.html#SEC102">Macro Definitions</A>.
+ 
+ 
+ <P>
+ You probably looked at the macros that came with Autoconf as a guide for
+ how to do things.  It would be a good idea to take a look at the new
+ versions of them, as the style is somewhat improved and they take
+ advantage of some new features.
+ 
+ 
+ <P>
+ If you were doing tricky things with undocumented Autoconf internals
+ (macros, variables, diversions), check whether you need to change
+ anything to account for changes that have been made.  Perhaps you can
+ even use an officially supported technique in version 2 instead of
+ kludging.  Or perhaps not.
+ 
+ 
+ <P>
+ To speed up your locally written feature tests, add caching to them.
+ See whether any of your tests are of general enough usefulness to
+ encapsulate into macros that you can share.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC157" HREF="autoconf_toc.html#TOC157">Upgrading From Version 2.13</A></H2>
+ 
+ <P>
+ The introduction of the previous section (see section <A HREF="autoconf.html#SEC151">Upgrading From Version 1</A>) perfectly
+ suits this section...
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ Autoconf version 2.50 is mostly backward compatible with version 2.13.
+ However, it introduces better ways to do some things, and doesn't
+ support some of the ugly things in version 2.13.  So, depending on how
+ sophisticated your <TT>`configure.ac'</TT> files are, you might have to do
+ some manual work in order to upgrade to version 2.50.  This chapter
+ points out some problems to watch for when upgrading.  Also, perhaps
+ your @command{configure} scripts could benefit from some of the new
+ features in version 2.50; the changes are summarized in the file
+ <TT>`NEWS'</TT> in the Autoconf distribution.
+ </BLOCKQUOTE>
+ 
+ 
+ 
+ <H3><A NAME="SEC158" HREF="autoconf_toc.html#TOC158">Changed Quotation</A></H3>
+ 
+ <P>
+ The most important changes are invisible to you: the implementation of
+ most macros have completely changed.  This allowed more factorization of
+ the code, better error messages, a higher uniformity of the user's
+ interface etc.  Unfortunately, as a side effect, some construct which
+ used to (miraculously) work might break starting with Autoconf 2.50.
+ The most common culprit is bad quotation.
+ 
+ 
+ <P>
+ For instance, in the following example, the message is not properly
+ quoted:
+ 
+ 
+ 
+ <PRE>
+ AC_INIT
+ AC_CHECK_HEADERS(foo.h,,
+ AC_MSG_ERROR(cannot find foo.h, bailing out))
+ AC_OUTPUT
+ </PRE>
+ 
+ <P>
+ Autoconf 2.13 simply ignores it:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf-2.13; ./configure --silent</KBD>
+ creating cache ./config.cache
+ configure: error: cannot find foo.h
+ $
+ </PRE>
+ 
+ <P>
+ while Autoconf 2.50 will produce a broken <TT>`configure'</TT>:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>autoconf-2.50; ./configure --silent</KBD>
+ configure: error: cannot find foo.h
+ ./configure: exit: bad non-numeric arg `bailing'
+ ./configure: exit: bad non-numeric arg `bailing'
+ $
+ </PRE>
+ 
+ <P>
+ The message needs to be quoted, and the <CODE>AC_MSG_ERROR</CODE> invocation
+ too!
+ 
+ 
+ 
+ <PRE>
+ AC_INIT
+ AC_CHECK_HEADERS(foo.h,,
+                  [AC_MSG_ERROR([cannot find foo.h, bailing out])])
+ AC_OUTPUT
+ </PRE>
+ 
+ <P>
+ Many many (and many more) Autoconf macros were lacking proper quotation,
+ including no less than... <CODE>AC_DEFUN</CODE> itself!
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat configure.in</KBD>
+ AC_DEFUN([AC_PROG_INSTALL],
+ [# My own much better version
+ ])
+ AC_INIT
+ AC_PROG_INSTALL
+ AC_OUTPUT
+ $ <KBD>autoconf-2.13</KBD>
+ autoconf: Undefined macros:
+ ***BUG in Autoconf--please report*** AC_FD_MSG
+ ***BUG in Autoconf--please report*** AC_EPI
+ configure.in:1:AC_DEFUN([AC_PROG_INSTALL],
+ configure.in:5:AC_PROG_INSTALL
+ $ <KBD>autoconf-2.50</KBD>
+ $
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC159" HREF="autoconf_toc.html#TOC159">New Macros</A></H3>
+ 
+ <P>
+ <A NAME="IDX1014"></A>
+ 
+ 
+ <P>
+ Because Autoconf has been dormant for years, Automake provided
+ Autoconf-like macros for a while.  Autoconf 2.50 now provides better
+ versions of these macros, integrated in the <CODE>AC_</CODE> namespace,
+ instead of <CODE>AM_</CODE>.  But in order to ease the upgrading via
+ @command{autoupdate}, bindings to such <CODE>AM_</CODE> macros are provided.
+ 
+ 
+ <P>
+ Unfortunately Automake did not quote the name of these macros!
+ Therefore, when @command{m4} finds something like
+ <SAMP>`AC_DEFUN(AM_TYPE_PTRDIFF_T, ...)'</SAMP> in <TT>`aclocal.m4'</TT>,
+ <CODE>AM_TYPE_PTRDIFF_T</CODE> is
+ expanded, replaced with its Autoconf definition.
+ 
+ 
+ <P>
+ Fortunately Autoconf catches pre-<CODE>AC_INIT</CODE> expansions, and will
+ complain, in its own words:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat configure.in</KBD>
+ AC_INIT
+ AM_TYPE_PTRDIFF_T
+ $ <KBD>aclocal-1.4</KBD>
+ $ <KBD>autoconf</KBD>
+ ./aclocal.m4:17: error: m4_defn: undefined macro: _m4_divert_diversion
+ actypes.m4:289: AM_TYPE_PTRDIFF_T is expanded from...
+ ./aclocal.m4:17: the top level
+ $
+ </PRE>
+ 
+ <P>
+ Future versions of Automake will simply no longer define most of these
+ macros, and will properly quote the names of the remaining macros.
+ But you don't have to wait for it to happen to do the right thing right
+ now: do not depend upon macros from Automake as it is simply not its job
+ to provide macros (but the one it requires by itself):
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>cat configure.in</KBD>
+ AC_INIT
+ AM_TYPE_PTRDIFF_T
+ $ <KBD>rm aclocal.m4</KBD>
+ $ <KBD>autoupdate</KBD>
+ autoupdate: `configure.in' is updated
+ $ <KBD>cat configure.in</KBD>
+ AC_INIT
+ AC_CHECK_TYPES([ptrdiff_t])
+ $ <KBD>aclocal-1.4</KBD>
+ $ <KBD>autoconf</KBD>
+ $
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC160" HREF="autoconf_toc.html#TOC160">Hosts and Cross-Compilation</A></H3>
+ 
+ <P>
+ Based on the experience of compiler writers, and after long public
+ debates, many aspects of the cross-compilation chain have changed:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ the relationship between the build, host, and target architecture types,
+ 
+ <LI>
+ 
+ the command line interface for specifying them to @command{configure},
+ 
+ <LI>
+ 
+ the variables defined in @command{configure},
+ 
+ <LI>
+ 
+ the enabling of cross-compilation mode.
+ </UL>
+ 
+ <P>
+ The relationship between build, host, and target have been cleaned up:
+ the chain of default is now simply: target defaults to host, host to
+ build, and build to the result of @command{config.guess}.  Nevertheless,
+ in order to ease the transition from 2.13 to 2.50, the following
+ transition scheme is implemented.  <EM>Do not rely on it</EM>, as it will
+ be completely disabled in a couple of releases (we cannot keep it, as it
+ proves to cause more problems than to cure).
+ 
+ 
+ <P>
+ They all default to the result of running @command{config.guess}, unless
+ you specify either @option{--build} or @option{--host}.  In this case,
+ the default becomes the system type you specified.  If you specify both,
+ and they're different, @command{configure} will enter cross compilation
+ mode, so it won't run any tests that require execution.
+ 
+ 
+ <P>
+ Hint: if you mean to override the result of @command{config.guess},
+ prefer @option{--build} over @option{--host}.  In the future,
+ @option{--host} will not override the name of the build system type.
+ Whenever you specify <CODE>--host</CODE>, be sure to specify <CODE>--build</CODE>
+ too.
+ 
+ 
+ <P>
+ For backward compatibility, @command{configure} will accept a system
+ type as an option by itself.  Such an option will override the defaults
+ for build, host and target system types.  The following configure
+ statement will configure a cross toolchain that will run on NetBSD/alpha
+ but generate code for GNU Hurd/sparc, which is also the build platform.
+ 
+ 
+ 
+ <PRE>
+ ./configure --host=alpha-netbsd sparc-gnu
+ </PRE>
+ 
+ <P>
+ In Autoconf, the variables <CODE>build</CODE>, <CODE>host</CODE>, and <CODE>target</CODE>
+ had a different semantics before and after the invocation of
+ <CODE>AC_CANONICAL_BUILD</CODE> etc.  Now, the argument of @option{--build} is
+ strictly copied into <CODE>build_alias</CODE>, and is left empty otherwise.
+ After the <CODE>AC_CANONICAL_BUILD</CODE>, <CODE>build</CODE> is set to the
+ canonicalized build type.  To ease the transition, before, its contents
+ is the same as that of <CODE>build_alias</CODE>.  Do <EM>not</EM> rely on this
+ broken feature.
+ 
+ 
+ <P>
+ For consistency with the backward compatibility scheme exposed above,
+ when @option{--host} is specified by @option{--build} isn't, the build
+ system will be assumed to be the same as @option{--host}, and
+ <SAMP>`build_alias'</SAMP> will be set to that value.  Eventually, this
+ historically incorrect behavior will go away.
+ 
+ 
+ <P>
+ The former scheme to enable cross-compilation proved to cause more harm
+ than good, in particular, it used to be triggered too easily, leaving
+ regular end users puzzled in front of cryptic error messages.
+ @command{configure} could even enter cross-compilation mode, only
+ because the compiler was not functional.  This is mainly because
+ @command{configure} used to try to detect cross-compilation, instead of
+ waiting for an explicit flag from the user.
+ 
+ 
+ <P>
+ Now, @command{configure} enters cross-compilation mode iff
+ @option{--host} is passed.
+ 
+ 
+ <P>
+ That's the short documentation.  To ease the transition between 2.13 and
+ its successors, a more complicated scheme is implemented.  <EM>Do not
+ rely on the following</EM>, as it will be removed in a near future.
+ 
+ 
+ <P>
+ If you specify @option{--host}, but not @option{--build}, when
+ @command{configure} performs the first compiler test it will try to run
+ an executable produced by the compiler.  If the execution fails, it will
+ enter cross-compilation mode.  This is fragile.  Moreover, by the time
+ the compiler test is performed, it may be too late to modify the
+ build-system type: other tests may have already been performed.
+ Therefore, whenever you specify <CODE>--host</CODE>, be sure to specify
+ <CODE>--build</CODE> too.
+ 
+ 
+ 
+ <PRE>
+ ./configure --build=i686-pc-linux-gnu --host=m68k-coff
+ </PRE>
+ 
+ <P>
+ will enter cross-compilation mode.  The former interface, which
+ consisted in setting the compiler to a cross-compiler without informing
+ @command{configure} is obsolete.  For instance, @command{configure} will
+ fail if it can't run the code generated by the specified compiler if you
+ configure as follows:
+ 
+ 
+ 
+ <PRE>
+ ./configure CC=m68k-coff-gcc
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC161" HREF="autoconf_toc.html#TOC161"><CODE>AC_LIBOBJ</CODE> vs. <CODE>LIBOBJS</CODE></A></H3>
+ 
+ <P>
+ Up to Autoconf 2.13, the replacement of functions was triggered via the
+ variable <CODE>LIBOBJS</CODE>.  Since Autoconf 2.50, the macro
+ <CODE>AC_LIBOBJ</CODE> should be used instead (see section <A HREF="autoconf.html#SEC47">Generic Function Checks</A>).
+ Starting at Autoconf 2.53, the use of <CODE>LIBOBJS</CODE> is an error.
+ 
+ 
+ <P>
+ This change is mandated by the unification of the GNU Build System
+ components.  In particular, the various fragile techniques used to parse
+ a <TT>`configure.ac'</TT> are all replaced with the use of traces.  As a
+ consequence, any action must be traceable, which obsoletes critical
+ variable assignments.  Fortunately, <CODE>LIBOBJS</CODE> was the only problem.
+ 
+ 
+ <P>
+ At the time this documentation is written, Automake does not rely on
+ traces yet, but this is planed for a near future.  Nevertheless, to
+ ease the transition, and to guarantee this future Automake release will
+ be able to use Autoconf 2.53, using <CODE>LIBOBJS</CODE> directly will make
+ @command{autoconf} fail.  But note that the output, @command{configure},
+ is correct and fully functional: you have some delay to adjust your
+ source.
+ 
+ 
+ <P>
+ There are two typical uses of <CODE>LIBOBJS</CODE>: asking for a replacement
+ function, and adjusting <CODE>LIBOBJS</CODE> for Automake and/or Libtool.
+ 
+ 
+ <P>
+ As for function replacement, the fix is immediate: use
+ <CODE>AC_LIBOBJ</CODE>.  For instance:
+ 
+ 
+ 
+ <PRE>
+ LIBOBJS="$LIBOBJS fnmatch.o"
+ LIBOBJS="$LIBOBJS malloc.$ac_objext"
+ </PRE>
+ 
+ <P>
+ should be replaced with:
+ 
+ 
+ 
+ <PRE>
+ AC_LIBOBJ([fnmatch])
+ AC_LIBOBJ([malloc])
+ </PRE>
+ 
+ <P>
+ When asked for automatic de-ANSI-fication, Automake needs
+ <CODE>LIBOBJS</CODE>'ed filenames to have <SAMP>`$U'</SAMP> appended to the
+ base names.   Libtool requires the definition of <CODE>LTLIBOBJS</CODE>, which
+ suffixes are mapped to <SAMP>`.lo'</SAMP>.  Although Autoconf provides them with
+ means to free the user to do that by herself, by the time of this
+ writing, none do.  Therefore, it is common to see <TT>`configure.ac'</TT>
+ end with:
+ 
+ 
+ 
+ <PRE>
+ # This is necessary so that .o files in LIBOBJS are also built via
+ # the ANSI2KNR-filtering rules.
+ LIBOBJS=`echo "$LIBOBJS" | sed 's/\.o /\$U.o /g;s/\.o$/\$U.o/'`
+ LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.o/\.lo/g'`
+ AC_SUBST(LTLIBOBJS)
+ </PRE>
+ 
+ <P>
+ First, note that this code is <EM>wrong</EM>, because <SAMP>`.o'</SAMP> is not the
+ only possible extension<A NAME="DOCF4" HREF="autoconf_foot.html#FOOT4">(4)</A>!  Because the token <CODE>LIBOBJS</CODE> is now
+ forbidden, you will have to replace this snippet with:
+ 
+ 
+ 
+ <PRE>
+ # This is necessary so that .o files in LIBOBJS are also built via
+ # the ANSI2KNR-filtering rules.
+ LIB@&#38;t@OBJS=`echo "$LIB@&#38;t@OBJS" |
+              sed 's,\.[[^.]]* ,$U&#38;,g;s,\.[[^.]]*$,$U&#38;,'`
+ LTLIBOBJS=`echo "$LIB@&#38;t@OBJS" |
+            sed 's,\.[[^.]]* ,.lo ,g;s,\.[[^.]]*$,.lo,'`
+ AC_SUBST(LTLIBOBJS)
+ </PRE>
+ 
+ <P>
+ Unfortunately, @command{autoupdate} cannot help here, since... this is
+ not a macro!  Of course, first make sure your release of Automake and/or
+ Libtool still requires these.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC162" HREF="autoconf_toc.html#TOC162">Generating Test Suites with Autotest</A></H1>
+ 
+ <P>
+ <A NAME="IDX1015"></A>
+ 
+ 
+ 
+ <PRE>
+ <STRONG>Note: This section describes an experimental feature which will
+ be part of Autoconf in a forthcoming release.  Although we believe
+ Autotest is stabilizing, this documentation describes an interface which
+ might change in the future: do not depend upon Autotest without
+ subscribing to the Autoconf mailing lists.</STRONG>
+ </PRE>
+ 
+ <P>
+ It is paradoxical that portable projects depend on nonportable tools to
+ run their test suite.  Autoconf by itself is the paragon of this
+ problem: although it aims at perfectly portability, up to 2.13, its test
+ suite was using DejaGNU, a rich and complex testing framework, but which
+ is far from being standard on Unix systems.  Worse yet, it was likely to
+ be missing on the most fragile platforms, the very platforms that are
+ most likely to torture Autoconf and exhibit deficiencies.
+ 
+ 
+ <P>
+ To circumvent this problem many package maintainers have developed their
+ own testing framework, based on simple shell scripts whose sole output
+ are their exit status: the test succeeded, or failed.  In addition, most
+ of these tests share some common patterns, what results in lots of
+ duplicated code, tedious maintenance etc.
+ 
+ 
+ <P>
+ Following exactly the same reasoning that yielded to the inception of
+ Autoconf, Autotest provides a test suite generation frame work, based on
+ M4 macros, building a portable shell script.  The suite itself is
+ equipped with automatic logging and tracing facilities which greatly
+ diminish the interaction with bug reporters, and simple timing reports.
+ 
+ 
+ <P>
+ Autoconf itself has been using Autotest for years, and we do attest that
+ it has considerably improved the strength of the test suite, and the
+ quality of bug reports.  Other projects are known to use some generation
+ of Autotest, such as Bison, Free Recode, Free Wdiff, GNU Tar, each of
+ them having different needs, what slowly polishes Autotest as a general
+ testing framework.
+ 
+ 
+ <P>
+ Nonetheless, compared to DejaGNU, Autotest is inadequate for interactive
+ tool testing, which is probably its main limitation.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC163" HREF="autoconf_toc.html#TOC163">Using an Autotest Test Suite</A></H2>
+ 
+ 
+ 
+ <H3><A NAME="SEC164" HREF="autoconf_toc.html#TOC164">@command{testsuite} Scripts</A></H3>
+ 
+ <P>
+ <A NAME="IDX1016"></A>
+ 
+ 
+ <P>
+ Generating testing or validation suites using Autotest is rather easy.
+ The whole validation suite is held in a file to be processed through
+ @command{autom4te}, itself using GNU <CODE>m4</CODE> under the scene, to
+ produce a stand-alone Bourne shell script which then gets distributed.
+ Neither @command{autom4te} nor GNU <CODE>m4</CODE> are not needed anymore at
+ the installer end.
+ 
+ 
+ <P>
+ <A NAME="IDX1017"></A>
+ Each test of the validation suite should be part of some test group.  A
+ <EM>test group</EM> is a sequence of interwoven tests that ought to be
+ executed together, usually because one test in the group creates data
+ files than a later test in the same group needs to read.  Complex test
+ groups make later debugging more tedious.  It is much better keeping
+ keep only a few tests per test group, and if you can put only one test
+ per test group, this is just ideal.
+ 
+ 
+ <P>
+ For all but the simplest packages, some file such as <TT>`testsuite.at'</TT>
+ does not fully hold all test sources, as these are often easier to
+ maintain in separate files.  Each of these separate files holds a single
+ test group, or a sequence of test groups all addressing some common
+ functionality in the package.  In such cases, file <TT>`testsuite.at'</TT>
+ only initializes the whole validation suite, and sometimes do elementary
+ health checking, before listing include statements for all other test
+ files.  The special file <TT>`package.m4'</TT>, containing the
+ identification of the package, is automatically included if found.
+ 
+ 
+ <P>
+ The validation scripts that Autotest produces are by convention called
+ @command{testsuite}.  When run, @command{testsuite} executes each test
+ group in turn, producing only one summary line per test to say if that
+ particular test succeeded or failed.  At end of all tests, summarizing
+ counters get printed.  If any test failed, one debugging script gets
+ automatically generated for each test group which failed.  These
+ debugging scripts are named <TT>`testsuite.<VAR>nn</VAR>'</TT>, where <VAR>nn</VAR> is
+ the sequence number of the test group.  In the ideal situation, none of
+ the tests fail, and consequently, no debugging script is generated out
+ of validation.
+ 
+ 
+ <P>
+ The automatic generation of debugging scripts for failed test has the
+ purpose of easing the chase for bugs.
+ 
+ 
+ <P>
+ It often happens in practice that individual tests in the validation
+ suite need to get information coming out of the configuration process.
+ Some of this information, common for all validation suites, is provided
+ through the file <TT>`atconfig'</TT>, automatically created by
+ <CODE>AC_CONFIG_TESTDIR</CODE>.  For configuration informations which your
+ testing environment specifically needs, you might prepare an optional
+ file named <TT>`atlocal.in'</TT>, instantiated by <CODE>AC_CONFIG_FILES</CODE>.
+ The configuration process produces <TT>`atconfig'</TT> and <TT>`atlocal'</TT>
+ out of these two input files, and these two produced files are
+ automatically read by the <TT>`testsuite'</TT> script.
+ 
+ 
+ <P>
+ Here is a diagram showing the relationship between files.
+ 
+ 
+ <P>
+ Files used in preparing a software package for distribution:
+ 
+ 
+ 
+ <PRE>
+ subfile-1.at -&#62;.
+     ...         \
+ subfile-i.at ----&#62;-- testsuite.at --&#62;.
+     ...         /                     \
+ subfile-n.at -&#62;'                       &#62;-- autom4te* --&#62;testsuite
+                                       /
+                       [package.m4] -&#62;'
+ </PRE>
+ 
+ <P>
+ Files used in configuring a software package:
+ 
+ 
+ 
+ <PRE>
+                                      .--&#62; atconfig
+                                     /
+ [atlocal.in] --&#62;  config.status* --&#60;
+                                     \
+                                      `--&#62; [atlocal]
+ </PRE>
+ 
+ <P>
+ Files created during the test suite execution:
+ 
+ 
+ 
+ <PRE>
+ atconfig --&#62;.                    .--&#62; testsuite.log
+              \                  /
+               &#62;-- testsuite* --&#60;
+              /                  \
+ [atlocal] -&#62;'                    `--&#62; [testsuite.<VAR>nn</VAR>*]
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC165" HREF="autoconf_toc.html#TOC165">Autotest Logs</A></H3>
+ 
+ <P>
+ When run, the test suite creates a log file named after itself, e.g., a
+ test suite named @command{testsuite} creates <TT>`testsuite.log'</TT>.  It
+ contains a lot of information, usually more than maintainers actually
+ need, but therefore most of the time it contains all that is needed:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>command line arguments
+ <DD>
+ A very bad Unix habit which is unfortunately wide spread consists of
+ setting environment variables before the command, such as in
+ <SAMP>`CC=my-home-grown-cc ./testsuite'</SAMP>.  This results in the test suite
+ not knowing this change, hence (i) it can't report it to you, and (ii)
+ it cannot preserve the value of <CODE>CC</CODE> for subsequent runs<A NAME="DOCF5" HREF="autoconf_foot.html#FOOT5">(5)</A>.  Autoconf faced exactly the same problem, and solved it by asking
+ users to pass the variable definitions as command line arguments.
+ Autotest requires this rule too, but has no means to enforce it; the log
+ then contains a trace of the variables the user changed.
+ 
+ <DT><TT>`ChangeLog'</TT> excerpts
+ <DD>
+ The topmost lines of all the <TT>`ChangeLog'</TT>s found in the source
+ hierarchy.  This is especially useful when bugs are reported against
+ development versions of the package, since the version string does not
+ provide sufficient information to know the exact state of the sources
+ the user compiled.  Of course this relies on the use of a
+ <TT>`ChangeLog'</TT>.
+ 
+ <DT>build machine
+ <DD>
+ Running a test suite in a cross-compile environment is not an easy task,
+ since it would mean having the test suite run on a machine <VAR>build</VAR>,
+ while running programs on a machine <VAR>host</VAR>.  It is much simpler to
+ run both the test suite and the programs on <VAR>host</VAR>, but then, from
+ the point of view of the test suite, there remains a single environment,
+ <VAR>host</VAR> = <VAR>build</VAR>.  The log contains relevant information on the
+ state of the build machine, including some important environment
+ variables.
+ 
+ <DT>tested programs
+ <DD>
+ The absolute path and answers to @option{--version} of the tested
+ programs (see section <A HREF="autoconf.html#SEC166">Writing <TT>`testsuite.at'</TT></A>, <CODE>AT_TESTED</CODE>).
+ 
+ <DT>configuration log
+ <DD>
+ The contents of <TT>`config.log'</TT>, as created by @command{configure},
+ are appended.  It contains the configuration flags and a detailed report
+ on the configuration itself.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC166" HREF="autoconf_toc.html#TOC166">Writing <TT>`testsuite.at'</TT></A></H2>
+ 
+ <P>
+ The <TT>`testsuite.at'</TT> is a Bourne shell script making use of special
+ Autotest M4 macros.  It often contains a call to <CODE>AT_INIT</CODE> nears
+ its beginning followed by one call to <CODE>m4_include</CODE> per source file
+ for tests.  Each such included file, or the remainder of
+ <TT>`testsuite.at'</TT> if include files are not used, contain a sequence of
+ test groups.  Each test group begins with one call to <CODE>AT_SETUP</CODE>,
+ it contains an arbitrary number of shell commands or calls to
+ <CODE>AT_CHECK</CODE>, and it completes with one call to <CODE>AT_CLEANUP</CODE>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_INIT</B> <I>(@ovar{name})</I>
+ <DD><A NAME="IDX1018"></A>
+ <A NAME="IDX1019"></A>
+ Initialize Autotest.  Giving a <VAR>name</VAR> to the test suite is
+ encouraged if your package includes several test suites.  In any case,
+ the test suite always displays the package name and version.  It also
+ inherits the package bug report address.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_TESTED</B> <I>(<VAR>executables</VAR>)</I>
+ <DD><A NAME="IDX1020"></A>
+ <A NAME="IDX1021"></A>
+ Log the path and answer to @option{--version} of each program in
+ space-separated list <VAR>executables</VAR>.  Several invocations register
+ new executables, in other words, don't fear registering one program
+ several times.
+ </DL>
+ 
+ 
+ <P>
+ Autotest test suites rely on the <CODE>PATH</CODE> to find the tested program.
+ This saves from generating the absolute paths to the various tools, and
+ makes it possible to test installed programs.  Therefore, knowing what
+ programs are being exercised is crucial to understand some problems in
+ the test suite itself, or its occasional misuses.  It is a good idea to
+ also subscribe foreign programs you depend upon, to ease incompatibility
+ diagnostics.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_SETUP</B> <I>(<VAR>test-group-name</VAR>)</I>
+ <DD><A NAME="IDX1022"></A>
+ <A NAME="IDX1023"></A>
+ This macro starts a group of related tests, all to be executed in the
+ same subshell.  It accepts a single argument, which holds a few words
+ (no more than about 30 or 40 characters) quickly describing the purpose
+ of the test group being started.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_KEYWORDS</B> <I>(<VAR>keywords</VAR>)</I>
+ <DD><A NAME="IDX1024"></A>
+ <A NAME="IDX1025"></A>
+ Associate the space-separated list of <VAR>keywords</VAR> to the enclosing
+ test group.  This makes it possible to run "slices" of the test suite.
+ For instance if some of your test groups exercise some <SAMP>`foo'</SAMP>
+ feature, then using <SAMP>`AT_KEYWORDS(foo)'</SAMP> lets you run
+ <SAMP>`./testsuite -k foo'</SAMP> to run exclusively these test groups.  The
+ <VAR>title</VAR> of the test group is automatically recorded to
+ <CODE>AT_KEYWORDS</CODE>.
+ 
+ 
+ <P>
+ Several invocations within a test group accumulate new keywords.  In
+ other words, don't fear registering several times the same keyword in a
+ test group.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_CLEANUP</B>
+ <DD><A NAME="IDX1026"></A>
+ <A NAME="IDX1027"></A>
+ End the current test group.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_DATA</B> <I>(<VAR>file</VAR>, <VAR>contents</VAR>)</I>
+ <DD><A NAME="IDX1028"></A>
+ <A NAME="IDX1029"></A>
+ Initialize an input data <VAR>file</VAR> with given <VAR>contents</VAR>.  Of
+ course, the <VAR>contents</VAR> have to be properly quoted between square
+ brackets to protect against included commas or spurious <CODE>m4</CODE>
+ expansion.  The contents ought to end with an end of line.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AT_CHECK</B> <I>(<VAR>commands</VAR>, @dvar{status, <SAMP>`0'</SAMP>}, @ovar{stdout}, @ovar{stderr})</I>
+ <DD><A NAME="IDX1030"></A>
+ <A NAME="IDX1031"></A>
+ Execute a test by performing given shell <VAR>commands</VAR>.  These commands
+ should normally exit with <VAR>status</VAR>, while producing expected
+ <VAR>stdout</VAR> and <VAR>stderr</VAR> contents.  If <VAR>commands</VAR> exit with
+ status 77, then the whole test group is skipped.
+ 
+ 
+ <P>
+ The <VAR>commands</VAR> <EM>must not</EM> redirect the standard output, nor the
+ standard error.
+ 
+ 
+ <P>
+ If <VAR>status</VAR>, or <VAR>stdout</VAR>, or <VAR>stderr</VAR> is <SAMP>`ignore'</SAMP>, then
+ the corresponding value is not checked.
+ 
+ 
+ <P>
+ The special value <SAMP>`expout'</SAMP> for <VAR>stdout</VAR> means the expected
+ output of the <VAR>commands</VAR> is the content of the file <TT>`expout'</TT>.
+ If <VAR>stdout</VAR> is <SAMP>`stdout'</SAMP>, then the standard output of the
+ <VAR>commands</VAR> is available for further tests in the file <TT>`stdout'</TT>.
+ Similarly for <VAR>stderr</VAR> with <SAMP>`expout'</SAMP> and <SAMP>`stderr'</SAMP>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC167" HREF="autoconf_toc.html#TOC167">Running @command{testsuite} Scripts</A></H2>
+ <P>
+ <A NAME="IDX1032"></A>
+ 
+ 
+ <P>
+ Autotest test suites support the following arguments:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`--help'</SAMP>
+ <DD>
+ <DT><SAMP>`-h'</SAMP>
+ <DD>
+ Display the list of options and exit successfully.
+ 
+ <DT><SAMP>`--version'</SAMP>
+ <DD>
+ <DT><SAMP>`-V'</SAMP>
+ <DD>
+ Display the version of the test suite and exit successfully.
+ 
+ <DT><SAMP>`--clean'</SAMP>
+ <DD>
+ <DT><SAMP>`-c'</SAMP>
+ <DD>
+ Remove all the files the test suite might have created and exit.  Meant
+ for <CODE>clean</CODE> Makefile targets.
+ 
+ <DT><SAMP>`--list'</SAMP>
+ <DD>
+ <DT><SAMP>`-l'</SAMP>
+ <DD>
+ List all the tests (or only the selection), including their possible
+ keywords.
+ </DL>
+ 
+ <P>
+ By default all the tests are performed (or described with
+ @option{--list}) in the default environment first silently, then
+ verbosely, but the environment, set of tests, and verbosity level can be
+ tuned:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`<VAR>variable</VAR>=<VAR>value</VAR>'</SAMP>
+ <DD>
+ Set the environment <VAR>variable</VAR> to <VAR>value</VAR>.  Do not run
+ <SAMP>`FOO=foo ./testsuite'</SAMP> as debugging scripts would then run in a
+ different environment.
+ 
+ <A NAME="IDX1033"></A>
+ The variable <CODE>AUTOTEST_PATH</CODE> specifies the testing path to prepend
+ to <CODE>PATH</CODE>.  It handles specially relative paths (not starting with
+ <SAMP>`/'</SAMP>): they are considered to be relative to the top level of the
+ package being built.  All the directories are made absolute, first
+ starting from the top level <EM>build</EM> tree, then from the
+ <EM>source</EM> tree.  For instance <SAMP>`./testsuite
+ AUTOTEST_PATH=tests:bin'</SAMP> for a <TT>`/src/foo-1.0'</TT> source package built
+ in <TT>`/tmp/foo'</TT> results in <SAMP>`/tmp/foo/tests:/tmp/foo/bin'</SAMP> and
+ then <SAMP>`/src/foo-1.0/tests:/src/foo-1.0/bin'</SAMP> being prepended to
+ <CODE>PATH</CODE>.
+ 
+ <DT><SAMP>`<VAR>number</VAR>'</SAMP>
+ <DD>
+ <DT><SAMP>`<VAR>number</VAR>-<VAR>number</VAR>'</SAMP>
+ <DD>
+ <DT><SAMP>`<VAR>number</VAR>-'</SAMP>
+ <DD>
+ <DT><SAMP>`-<VAR>number</VAR>'</SAMP>
+ <DD>
+ Add the corresponding test groups, with obvious semantics, to the
+ selection.
+ 
+ <DT><SAMP>`--keywords=<VAR>keywords</VAR>'</SAMP>
+ <DD>
+ <DT><SAMP>`-k <VAR>keywords</VAR>'</SAMP>
+ <DD>
+ Add to the selection the test groups which title or keywords (arguments
+ to <CODE>AT_SETUP</CODE> or <CODE>AT_KEYWORDS</CODE>) match <EM>all</EM> the keywords
+ of the comma separated list <VAR>keywords</VAR>.
+ 
+ Running <SAMP>`./testsuite -k autoupdate,FUNC'</SAMP> will select all the tests
+ tagged with <SAMP>`autoupdate'</SAMP> <EM>and</EM> <SAMP>`FUNC'</SAMP> (as in
+ <SAMP>`AC_CHECK_FUNC'</SAMP>, <SAMP>`AC_FUNC_FNMATCH'</SAMP> etc.) while
+ <SAMP>`./testsuite -k autoupdate -k FUNC'</SAMP> runs all the tests tagged with
+ <SAMP>`autoupdate'</SAMP> <EM>or</EM> <SAMP>`FUNC'</SAMP>.
+ 
+ <DT><SAMP>`--errexit'</SAMP>
+ <DD>
+ <DT><SAMP>`-e'</SAMP>
+ <DD>
+ If any test fails, immediately abort testing.  It implies
+ @option{--debug}: post test group clean up, debugging script generation,
+ and logging are inhibited.  This option is meant for the full test
+ suite, it is not really useful for generated debugging scripts.
+ 
+ <DT><SAMP>`--verbose'</SAMP>
+ <DD>
+ <DT><SAMP>`-v'</SAMP>
+ <DD>
+ Force more verbosity in the detailed output of what is being done.  This
+ is the default for debugging scripts.
+ 
+ <DT><SAMP>`--debug'</SAMP>
+ <DD>
+ <DT><SAMP>`-d'</SAMP>
+ <DD>
+ Do not remove the files after a test group was performed --but they are
+ still removed <EM>before</EM>, therefore using this option is sane when
+ running several test groups.  Do not create debugging scripts.  Do not
+ log (in order to preserve supposedly existing full log file).  This is
+ the default for debugging scripts.
+ 
+ <DT><SAMP>`--trace'</SAMP>
+ <DD>
+ <DT><SAMP>`-x'</SAMP>
+ <DD>
+ Trigger shell tracing of the test groups.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC168" HREF="autoconf_toc.html#TOC168">Making @command{testsuite} Scripts</A></H2>
+ 
+ <P>
+ For putting Autotest into movement, you need some configuration and
+ Makefile machinery.  We recommend, at least if your package uses deep or
+ shallow hierarchies, that you use <TT>`tests/'</TT> as the name of the
+ directory holding all your tests and their <TT>`Makefile'</TT>.  Here is a
+ check list of things to do.
+ 
+ 
+ 
+ <UL>
+ 
+ <LI>
+ 
+ <A NAME="IDX1034"></A>
+ Make sure to create the file <TT>`package.m4'</TT>, which defines the
+ identity of the package.  It must define <CODE>AT_PACKAGE_STRING</CODE>, the
+ full signature of the package, and <CODE>AT_PACKAGE_BUGREPORT</CODE>, the
+ address to which bug reports should be sent.  For sake of completeness,
+ we suggest that you also define <CODE>AT_PACKAGE_NAME</CODE>,
+ <CODE>AT_PACKAGE_TARNAME</CODE>, and <CODE>AT_PACKAGE_VERSION</CODE>.
+ See section <A HREF="autoconf.html#SEC16">Initializing @command{configure}</A>, for a description of these variables.  We
+ suggest the following Makefile excerpt:
+ 
+ 
+ <PRE>
+ $(srcdir)/package.m4: $(top_srcdir)/configure.ac
+         {                                      \
+           echo '# Signature of the current package.'; \
+           echo 'm4_define([AT_PACKAGE_NAME],      [@PACKAGE_NAME@])'; \
+           echo 'm4_define([AT_PACKAGE_TARNAME],   [@PACKAGE_TARNAME@])'; \
+           echo 'm4_define([AT_PACKAGE_VERSION],   [@PACKAGE_VERSION@])'; \
+           echo 'm4_define([AT_PACKAGE_STRING],    [@PACKAGE_STRING@])'; \
+           echo 'm4_define([AT_PACKAGE_BUGREPORT], [@PACKAGE_BUGREPORT@])'; \
+         } &#62;$(srcdir)/package.m4
+ </PRE>
+ 
+ Be sure to distribute <TT>`package.m4'</TT> and to put it into the source
+ hierarchy: the test suite ought to be shipped!
+ 
+ <LI>
+ 
+ Use the <CODE>AT_CONFIG</CODE> macro from within file <TT>`configure.ac'</TT>.
+ This macro accepts one argument, which is the directory, relative to the
+ test directory, where the executables are prepared.
+ 
+ <LI>
+ 
+ Still within <TT>`configure.ac'</TT>, ensure that some
+ <CODE>AC_CONFIG_FILES</CODE> command includes substitution for
+ <TT>`tests/atconfig'</TT> and also, as appropriate, <TT>`tests/atlocal'</TT>.
+ 
+ <LI>
+ 
+ The <TT>`tests/Makefile.in'</TT> should be modified so the validation in
+ your package is triggered by <SAMP>`make check'</SAMP>.  An example is provided
+ below.
+ 
+ </UL>
+ 
+ <P>
+ With Automake, here is a minimal example about how to link <SAMP>`make
+ check'</SAMP> with a validation suite.
+ 
+ 
+ 
+ <PRE>
+ EXTRA_DIST = testsuite.at testsuite
+ TESTSUITE = $(srcdir)/testsuite
+ check-local: atconfig atlocal $(TESTSUITE)
+         $(SHELL) $(TESTSUITE)
+ 
+ AUTOTEST = $(AUTOM4TE) --language=autotest
+ $(TESTSUITE): $(srcdir)/testsuite.at
+         $(AUTOTEST) -I $(srcdir) $.at -o $.tmp
+         mv $.tmp $
+ </PRE>
+ 
+ <P>
+ You might want to list explicitly the dependencies, i.e., the list of
+ the files <TT>`testsuite.at'</TT> includes.
+ 
+ 
+ <P>
+ With strict Autoconf, you might need to add lines inspired from the
+ following:
+ 
+ 
+ 
+ <PRE>
+ subdir = tests
+ 
+ atconfig: $(top_builddir)/config.status
+        cd $(top_builddir) &#38;&#38; \
+            $(SHELL) ./config.status $(subdir)/$
+ 
+ atlocal: $(srcdir)/atlocal.in $(top_builddir)/config.status
+        cd $(top_builddir) &#38;&#38; \
+            $(SHELL) ./config.status $(subdir)/$
+ </PRE>
+ 
+ <P>
+ and manage to have <TT>`atconfig.in'</TT> and <CODE>$(EXTRA_DIST)</CODE>
+ distributed.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC169" HREF="autoconf_toc.html#TOC169">Questions About Autoconf</A></H1>
+ 
+ <P>
+ Several questions about Autoconf come up occasionally.  Here some of them
+ are addressed.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC170" HREF="autoconf_toc.html#TOC170">Distributing @command{configure} Scripts</A></H2>
+ 
+ 
+ <PRE>
+ What are the restrictions on distributing @command{configure}
+ scripts that Autoconf generates?  How does that affect my
+ programs that use them?
+ </PRE>
+ 
+ <P>
+ There are no restrictions on how the configuration scripts that Autoconf
+ produces may be distributed or used.  In Autoconf version 1, they were
+ covered by the GNU General Public License.  We still encourage
+ software authors to distribute their work under terms like those of the
+ GPL, but doing so is not required to use Autoconf.
+ 
+ 
+ <P>
+ Of the other files that might be used with @command{configure},
+ <TT>`config.h.in'</TT> is under whatever copyright you use for your
+ <TT>`configure.ac'</TT>.  <TT>`config.sub'</TT> and <TT>`config.guess'</TT> have an
+ exception to the GPL when they are used with an Autoconf-generated
+ @command{configure} script, which permits you to distribute them under the
+ same terms as the rest of your package.  <TT>`install-sh'</TT> is from the X
+ Consortium and is not copyrighted.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC171" HREF="autoconf_toc.html#TOC171">Why Require GNU M4?</A></H2>
+ 
+ 
+ <PRE>
+ Why does Autoconf require GNU M4?
+ </PRE>
+ 
+ <P>
+ Many M4 implementations have hard-coded limitations on the size and
+ number of macros that Autoconf exceeds.  They also lack several
+ builtin macros that it would be difficult to get along without in a
+ sophisticated application like Autoconf, including:
+ 
+ 
+ 
+ <PRE>
+ m4_builtin
+ m4_indir
+ m4_bpatsubst
+ __file__
+ __line__
+ </PRE>
+ 
+ <P>
+ Autoconf requires version 1.4 or above of GNU M4 because it uses
+ frozen state files.
+ 
+ 
+ <P>
+ Since only software maintainers need to use Autoconf, and since GNU
+ M4 is simple to configure and install, it seems reasonable to require
+ GNU M4 to be installed also.  Many maintainers of GNU and
+ other free software already have most of the GNU utilities
+ installed, since they prefer them.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC172" HREF="autoconf_toc.html#TOC172">How Can I Bootstrap?</A></H2>
+ 
+ 
+ <PRE>
+ If Autoconf requires GNU M4 and GNU M4 has an Autoconf
+ @command{configure} script, how do I bootstrap?  It seems like a chicken
+ and egg problem!
+ </PRE>
+ 
+ <P>
+ This is a misunderstanding.  Although GNU M4 does come with a
+ @command{configure} script produced by Autoconf, Autoconf is not required
+ in order to run the script and install GNU M4.  Autoconf is only
+ required if you want to change the M4 @command{configure} script, which few
+ people have to do (mainly its maintainer).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC173" HREF="autoconf_toc.html#TOC173">Why Not Imake?</A></H2>
+ 
+ 
+ <PRE>
+ Why not use Imake instead of @command{configure} scripts?
+ </PRE>
+ 
+ <P>
+ Several people have written addressing this question, so I include
+ adaptations of their explanations here.
+ 
+ 
+ <P>
+ The following answer is based on one written by Richard Pixley:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ Autoconf generated scripts frequently work on machines that it has
+ never been set up to handle before.  That is, it does a good job of
+ inferring a configuration for a new system.  Imake cannot do this.
+ 
+ 
+ <P>
+ Imake uses a common database of host specific data.  For X11, this makes
+ sense because the distribution is made as a collection of tools, by one
+ central authority who has control over the database.
+ 
+ 
+ <P>
+ GNU tools are not released this way.  Each GNU tool has a
+ maintainer; these maintainers are scattered across the world.  Using a
+ common database would be a maintenance nightmare.  Autoconf may appear
+ to be this kind of database, but in fact it is not.  Instead of listing
+ host dependencies, it lists program requirements.
+ 
+ 
+ <P>
+ If you view the GNU suite as a collection of native tools, then the
+ problems are similar.  But the GNU development tools can be
+ configured as cross tools in almost any host+target permutation.  All of
+ these configurations can be installed concurrently.  They can even be
+ configured to share host independent files across hosts.  Imake doesn't
+ address these issues.
+ 
+ 
+ <P>
+ Imake templates are a form of standardization.  The GNU coding
+ standards address the same issues without necessarily imposing the same
+ restrictions.
+ </BLOCKQUOTE>
+ 
+ <P>
+ Here is some further explanation, written by Per Bothner:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ One of the advantages of Imake is that it easy to generate large
+ Makefiles using <CODE>cpp</CODE>'s <SAMP>`#include'</SAMP> and macro mechanisms.
+ However, <CODE>cpp</CODE> is not programmable: it has limited conditional
+ facilities, and no looping.  And <CODE>cpp</CODE> cannot inspect its
+ environment.
+ 
+ 
+ <P>
+ All of these problems are solved by using <CODE>sh</CODE> instead of
+ <CODE>cpp</CODE>.  The shell is fully programmable, has macro substitution,
+ can execute (or source) other shell scripts, and can inspect its
+ environment.
+ </BLOCKQUOTE>
+ 
+ <P>
+ Paul Eggert elaborates more:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ With Autoconf, installers need not assume that Imake itself is already
+ installed and working well.  This may not seem like much of an advantage
+ to people who are accustomed to Imake.  But on many hosts Imake is not
+ installed or the default installation is not working well, and requiring
+ Imake to install a package hinders the acceptance of that package on
+ those hosts.  For example, the Imake template and configuration files
+ might not be installed properly on a host, or the Imake build procedure
+ might wrongly assume that all source files are in one big directory
+ tree, or the Imake configuration might assume one compiler whereas the
+ package or the installer needs to use another, or there might be a
+ version mismatch between the Imake expected by the package and the Imake
+ supported by the host.  These problems are much rarer with Autoconf,
+ where each package comes with its own independent configuration
+ processor.
+ 
+ 
+ <P>
+ Also, Imake often suffers from unexpected interactions between
+ <CODE>make</CODE> and the installer's C preprocessor.  The fundamental problem
+ here is that the C preprocessor was designed to preprocess C programs,
+ not <TT>`Makefile'</TT>s.  This is much less of a problem with Autoconf,
+ which uses the general-purpose preprocessor <CODE>m4</CODE>, and where the
+ package's author (rather than the installer) does the preprocessing in a
+ standard way.
+ </BLOCKQUOTE>
+ 
+ <P>
+ Finally, Mark Eichin notes:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ Imake isn't all that extensible, either.  In order to add new features to
+ Imake, you need to provide your own project template, and duplicate most
+ of the features of the existing one.  This means that for a sophisticated
+ project, using the vendor-provided Imake templates fails to provide any
+ leverage--since they don't cover anything that your own project needs
+ (unless it is an X11 program).
+ 
+ 
+ <P>
+ On the other side, though:
+ 
+ 
+ <P>
+ The one advantage that Imake has over @command{configure}:
+ <TT>`Imakefile'</TT>s tend to be much shorter (likewise, less redundant)
+ than <TT>`Makefile.in'</TT>s.  There is a fix to this, however--at least
+ for the Kerberos V5 tree, we've modified things to call in common
+ <TT>`post.in'</TT> and <TT>`pre.in'</TT> <TT>`Makefile'</TT> fragments for the
+ entire tree.  This means that a lot of common things don't have to be
+ duplicated, even though they normally are in @command{configure} setups.
+ </BLOCKQUOTE>
+ 
+ 
+ 
+ <H1><A NAME="SEC174" HREF="autoconf_toc.html#TOC174">History of Autoconf</A></H1>
+ 
+ <P>
+ You may be wondering, Why was Autoconf originally written?  How did it
+ get into its present form?  (Why does it look like gorilla spit?)  If
+ you're not wondering, then this chapter contains no information useful
+ to you, and you might as well skip it.  If you <EM>are</EM> wondering,
+ then let there be light...
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC175" HREF="autoconf_toc.html#TOC175">Genesis</A></H2>
+ 
+ <P>
+ In June 1991 I was maintaining many of the GNU utilities for the
+ Free Software Foundation.  As they were ported to more platforms and
+ more programs were added, the number of @option{-D} options that users
+ had to select in the <TT>`Makefile'</TT> (around 20) became burdensome.
+ Especially for me--I had to test each new release on a bunch of
+ different systems.  So I wrote a little shell script to guess some of
+ the correct settings for the fileutils package, and released it as part
+ of fileutils 2.0.  That @command{configure} script worked well enough that
+ the next month I adapted it (by hand) to create similar @command{configure}
+ scripts for several other GNU utilities packages.  Brian Berliner
+ also adapted one of my scripts for his CVS revision control system.
+ 
+ 
+ <P>
+ Later that summer, I learned that Richard Stallman and Richard Pixley
+ were developing similar scripts to use in the GNU compiler tools;
+ so I adapted my @command{configure} scripts to support their evolving
+ interface: using the file name <TT>`Makefile.in'</TT> as the templates;
+ adding <SAMP>`+srcdir'</SAMP>, the first option (of many); and creating
+ <TT>`config.status'</TT> files.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC176" HREF="autoconf_toc.html#TOC176">Exodus</A></H2>
+ 
+ <P>
+ As I got feedback from users, I incorporated many improvements, using
+ Emacs to search and replace, cut and paste, similar changes in each of
+ the scripts.  As I adapted more GNU utilities packages to use
+ @command{configure} scripts, updating them all by hand became impractical.
+ Rich Murphey, the maintainer of the GNU graphics utilities, sent me
+ mail saying that the @command{configure} scripts were great, and asking if
+ I had a tool for generating them that I could send him.  No, I thought,
+ but I should!  So I started to work out how to generate them.  And the
+ journey from the slavery of hand-written @command{configure} scripts to the
+ abundance and ease of Autoconf began.
+ 
+ 
+ <P>
+ Cygnus @command{configure}, which was being developed at around that time,
+ is table driven; it is meant to deal mainly with a discrete number of
+ system types with a small number of mainly unguessable features (such as
+ details of the object file format).  The automatic configuration system
+ that Brian Fox had developed for Bash takes a similar approach.  For
+ general use, it seems to me a hopeless cause to try to maintain an
+ up-to-date database of which features each variant of each operating
+ system has.  It's easier and more reliable to check for most features on
+ the fly--especially on hybrid systems that people have hacked on
+ locally or that have patches from vendors installed.
+ 
+ 
+ <P>
+ I considered using an architecture similar to that of Cygnus
+ @command{configure}, where there is a single @command{configure} script that
+ reads pieces of <TT>`configure.in'</TT> when run.  But I didn't want to have
+ to distribute all of the feature tests with every package, so I settled
+ on having a different @command{configure} made from each
+ <TT>`configure.in'</TT> by a preprocessor.  That approach also offered more
+ control and flexibility.
+ 
+ 
+ <P>
+ I looked briefly into using the Metaconfig package, by Larry Wall,
+ Harlan Stenn, and Raphael Manfredi, but I decided not to for several
+ reasons.  The @command{Configure} scripts it produces are interactive,
+ which I find quite inconvenient; I didn't like the ways it checked for
+ some features (such as library functions); I didn't know that it was
+ still being maintained, and the @command{Configure} scripts I had
+ seen didn't work on many modern systems (such as System V R4 and NeXT);
+ it wasn't very flexible in what it could do in response to a feature's
+ presence or absence; I found it confusing to learn; and it was too big
+ and complex for my needs (I didn't realize then how much Autoconf would
+ eventually have to grow).
+ 
+ 
+ <P>
+ I considered using Perl to generate my style of @command{configure}
+ scripts, but decided that M4 was better suited to the job of simple
+ textual substitutions: it gets in the way less, because output is
+ implicit.  Plus, everyone already has it.  (Initially I didn't rely on
+ the GNU extensions to M4.)  Also, some of my friends at the
+ University of Maryland had recently been putting M4 front ends on
+ several programs, including <CODE>tvtwm</CODE>, and I was interested in trying
+ out a new language.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC177" HREF="autoconf_toc.html#TOC177">Leviticus</A></H2>
+ 
+ <P>
+ Since my @command{configure} scripts determine the system's capabilities
+ automatically, with no interactive user intervention, I decided to call
+ the program that generates them Autoconfig.  But with a version number
+ tacked on, that name would be too long for old UNIX file systems,
+ so I shortened it to Autoconf.
+ 
+ 
+ <P>
+ In the fall of 1991 I called together a group of fellow questers after
+ the Holy Grail of portability (er, that is, alpha testers) to give me
+ feedback as I encapsulated pieces of my handwritten scripts in M4 macros
+ and continued to add features and improve the techniques used in the
+ checks.  Prominent among the testers were Fran@,cois Pinard, who came up
+ with the idea of making an <TT>`autoconf'</TT> shell script to run <CODE>m4</CODE>
+ and check for unresolved macro calls; Richard Pixley, who suggested
+ running the compiler instead of searching the file system to find
+ include files and symbols, for more accurate results; Karl Berry, who
+ got Autoconf to configure TeX and added the macro index to the
+ documentation; and Ian Lance Taylor, who added support for creating a C
+ header file as an alternative to putting @option{-D} options in a
+ <TT>`Makefile'</TT>, so he could use Autoconf for his UUCP package.
+ The alpha testers cheerfully adjusted their files again and again as the
+ names and calling conventions of the Autoconf macros changed from
+ release to release.  They all contributed many specific checks, great
+ ideas, and bug fixes.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC178" HREF="autoconf_toc.html#TOC178">Numbers</A></H2>
+ 
+ <P>
+ In July 1992, after months of alpha testing, I released Autoconf 1.0,
+ and converted many GNU packages to use it.  I was surprised by how
+ positive the reaction to it was.  More people started using it than I
+ could keep track of, including people working on software that wasn't
+ part of the GNU Project (such as TCL, FSP, and Kerberos V5).
+ Autoconf continued to improve rapidly, as many people using the
+ @command{configure} scripts reported problems they encountered.
+ 
+ 
+ <P>
+ Autoconf turned out to be a good torture test for M4 implementations.
+ UNIX <CODE>m4</CODE> started to dump core because of the length of the
+ macros that Autoconf defined, and several bugs showed up in GNU
+ <CODE>m4</CODE> as well.  Eventually, we realized that we needed to use some
+ features that only GNU M4 has.  4.3BSD <CODE>m4</CODE>, in
+ particular, has an impoverished set of builtin macros; the System V
+ version is better, but still doesn't provide everything we need.
+ 
+ 
+ <P>
+ More development occurred as people put Autoconf under more stresses
+ (and to uses I hadn't anticipated).  Karl Berry added checks for X11.
+ david zuhn contributed C++ support.  Fran@,cois Pinard made it diagnose
+ invalid arguments.  Jim Blandy bravely coerced it into configuring
+ GNU Emacs, laying the groundwork for several later improvements.
+ Roland McGrath got it to configure the GNU C Library, wrote the
+ @command{autoheader} script to automate the creation of C header file
+ templates, and added a @option{--verbose} option to @command{configure}.
+ Noah Friedman added the @option{--autoconf-dir} option and
+ <CODE>AC_MACRODIR</CODE> environment variable.  (He also coined the term
+ <EM>autoconfiscate</EM> to mean "adapt a software package to use
+ Autoconf".)  Roland and Noah improved the quoting protection in
+ <CODE>AC_DEFINE</CODE> and fixed many bugs, especially when I got sick of
+ dealing with portability problems from February through June, 1993.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC179" HREF="autoconf_toc.html#TOC179">Deuteronomy</A></H2>
+ 
+ <P>
+ A long wish list for major features had accumulated, and the effect of
+ several years of patching by various people had left some residual
+ cruft.  In April 1994, while working for Cygnus Support, I began a major
+ revision of Autoconf.  I added most of the features of the Cygnus
+ @command{configure} that Autoconf had lacked, largely by adapting the
+ relevant parts of Cygnus @command{configure} with the help of david zuhn
+ and Ken Raeburn.  These features include support for using
+ <TT>`config.sub'</TT>, <TT>`config.guess'</TT>, @option{--host}, and
+ @option{--target}; making links to files; and running @command{configure}
+ scripts in subdirectories.  Adding these features enabled Ken to convert
+ GNU <CODE>as</CODE>, and Rob Savoye to convert DejaGNU, to using
+ Autoconf.
+ 
+ 
+ <P>
+ I added more features in response to other peoples' requests.  Many
+ people had asked for @command{configure} scripts to share the results of
+ the checks between runs, because (particularly when configuring a large
+ source tree, like Cygnus does) they were frustratingly slow.  Mike
+ Haertel suggested adding site-specific initialization scripts.  People
+ distributing software that had to unpack on MS-DOS asked for a way to
+ override the <TT>`.in'</TT> extension on the file names, which produced file
+ names like <TT>`config.h.in'</TT> containing two dots.  Jim Avera did an
+ extensive examination of the problems with quoting in <CODE>AC_DEFINE</CODE>
+ and <CODE>AC_SUBST</CODE>; his insights led to significant improvements.
+ Richard Stallman asked that compiler output be sent to <TT>`config.log'</TT>
+ instead of <TT>`/dev/null'</TT>, to help people debug the Emacs
+ @command{configure} script.
+ 
+ 
+ <P>
+ I made some other changes because of my dissatisfaction with the quality
+ of the program.  I made the messages showing results of the checks less
+ ambiguous, always printing a result.  I regularized the names of the
+ macros and cleaned up coding style inconsistencies.  I added some
+ auxiliary utilities that I had developed to help convert source code
+ packages to use Autoconf.  With the help of Fran@,cois Pinard, I made
+ the macros not interrupt each others' messages.  (That feature revealed
+ some performance bottlenecks in GNU <CODE>m4</CODE>, which he hastily
+ corrected!)  I reorganized the documentation around problems people want
+ to solve.  And I began a test suite, because experience had shown that
+ Autoconf has a pronounced tendency to regress when we change it.
+ 
+ 
+ <P>
+ Again, several alpha testers gave invaluable feedback, especially
+ Fran@,cois Pinard, Jim Meyering, Karl Berry, Rob Savoye, Ken Raeburn,
+ and Mark Eichin.
+ 
+ 
+ <P>
+ Finally, version 2.0 was ready.  And there was much rejoicing.  (And I
+ have free time again.  I think.  Yeah, right.)
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC180" HREF="autoconf_toc.html#TOC180">Copying This Manual</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC181" HREF="autoconf_toc.html#TOC181">GNU Free Documentation License</A></H2>
+ 
+ <P>
+ <A NAME="IDX1035"></A>
+ Version 1.1, March 2000
+ 
+ 
+ 
+ <PRE>
+ Copyright (C) 2000 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.
+ </PRE>
+ 
+ 
+ <OL>
+ <LI>
+ 
+ PREAMBLE
+ 
+ The purpose of this License is to make a manual, textbook, or other
+ written document <EM>free</EM> in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially.  Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+ 
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free
+ program should come with manuals providing the same freedoms that the
+ software does.  But this License is not limited to software manuals;
+ it can be used for any textual work, regardless of subject matter or
+ whether it is published as a printed book.  We recommend this License
+ principally for works whose purpose is instruction or reference.
+ 
+ <LI>
+ 
+ APPLICABILITY AND DEFINITIONS
+ 
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License.  The "Document", below, refers to any
+ such manual or work.  Any member of the public is a licensee, and is
+ addressed as "you".
+ 
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ A "Secondary Section" is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (For example, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding
+ them.
+ 
+ The "Invariant Sections" are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License.
+ 
+ The "Cover Texts" are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.
+ 
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly and
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or
+ for automatic translation to a variety of formats suitable for input
+ to text formatters.  A copy made in an otherwise Transparent file
+ format whose markup has been designed to thwart or discourage
+ subsequent modification by readers is not Transparent.  A copy that is
+ not "Transparent" is called "Opaque".
+ 
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ @acronym{SGML} or @acronym{XML} using a publicly available
+ @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed
+ for human modification.  Opaque formats include PostScript,
+ @acronym{PDF}, proprietary formats that can be read and edited only by
+ proprietary word processors, @acronym{SGML} or @acronym{XML} for which
+ the @acronym{DTD} and/or processing tools are not generally available,
+ and the machine-generated @acronym{HTML} produced by some word
+ processors for output purposes only.
+ 
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in
+ formats which do not have any title page as such, "Title Page" means
+ the text near the most prominent appearance of the work's title,
+ preceding the beginning of the body of the text.
+ 
+ <LI>
+ 
+ VERBATIM COPYING
+ 
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies
+ to the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further
+ copying of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ <LI>
+ 
+ COPYING IN QUANTITY
+ 
+ If you publish printed copies of the Document numbering more than 100,
+ and the Document's license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+ the back cover.  Both covers must also clearly and legibly identify
+ you as the publisher of these copies.  The front cover must present
+ the full title with all words of the title equally prominent and
+ visible.  You may add other material on the covers in addition.
+ Copying with changes limited to the covers, as long as they preserve
+ the title of the Document and satisfy these conditions, can be treated
+ as verbatim copying in other respects.
+ 
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy
+ a publicly-accessible computer-network location containing a complete
+ Transparent copy of the Document, free of added material, which the
+ general network-using public has access to download anonymously at no
+ charge using public-standard network protocols.  If you use the latter
+ option, you must take reasonably prudent steps, when you begin
+ distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ <LI>
+ 
+ MODIFICATIONS
+ 
+ You may copy and distribute a Modified Version of the Document under
+ the conditions of sections 2 and 3 above, provided that you release
+ the Modified Version under precisely this License, with the Modified
+ Version filling the role of the Document, thus licensing distribution
+ and modification of the Modified Version to whoever possesses a copy
+ of it.  In addition, you must do these things in the Modified Version:
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document).  You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+ 
+ <LI>
+ 
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+ 
+ <LI>
+ 
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ 
+ <LI>
+ 
+ Preserve all the copyright notices of the Document.
+ 
+ <LI>
+ 
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ 
+ <LI>
+ 
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ 
+ <LI>
+ 
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+ 
+ <LI>
+ 
+ Include an unaltered copy of this License.
+ 
+ <LI>
+ 
+ Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.  If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+ 
+ <LI>
+ 
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on.  These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ 
+ <LI>
+ 
+ In any section entitled "Acknowledgments" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgments
+ and/or dedications given therein.
+ 
+ <LI>
+ 
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles.  Section numbers
+ or the equivalent are not considered part of the section titles.
+ 
+ <LI>
+ 
+ Delete any section entitled "Endorsements".  Such a section
+ may not be included in the Modified Version.
+ 
+ <LI>
+ 
+ Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+ </OL>
+ 
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no material
+ copied from the Document, you may at your option designate some or all
+ of these sections as invariant.  To do this, add their titles to the
+ list of Invariant Sections in the Modified Version's license notice.
+ These titles must be distinct from any other section titles.
+ 
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of a
+ standard.
+ 
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of
+ Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity.  If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.
+ 
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ <LI>
+ 
+ COMBINING DOCUMENTS
+ 
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its
+ license notice.
+ 
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by
+ adding at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique number.
+ Make the same adjustment to the section titles in the list of
+ Invariant Sections in the license notice of the combined work.
+ 
+ In the combination, you must combine any sections entitled "History"
+ in the various original documents, forming one section entitled
+ "History"; likewise combine any sections entitled "Acknowledgments",
+ and any sections entitled "Dedications".  You must delete all sections
+ entitled "Endorsements."
+ 
+ <LI>
+ 
+ COLLECTIONS OF DOCUMENTS
+ 
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ <LI>
+ 
+ AGGREGATION WITH INDEPENDENT WORKS
+ 
+ A compilation of the Document or its derivatives with other separate
+ and independent documents or works, in or on a volume of a storage or
+ distribution medium, does not as a whole count as a Modified Version
+ of the Document, provided no compilation copyright is claimed for the
+ compilation.  Such a compilation is called an "aggregate", and this
+ License does not apply to the other self-contained works thus compiled
+ with the Document, on account of their being thus compiled, if they
+ are not themselves derivative works of the Document.
+ 
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one quarter
+ of the entire aggregate, the Document's Cover Texts may be placed on
+ covers that surround only the Document within the aggregate.
+ Otherwise they must appear on covers around the whole aggregate.
+ 
+ <LI>
+ 
+ TRANSLATION
+ 
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections.  You may include a
+ translation of this License provided that you also include the
+ original English version of this License.  In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.
+ 
+ <LI>
+ 
+ TERMINATION
+ 
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided for under this License.  Any other attempt to
+ copy, modify, sublicense or distribute the Document 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.
+ 
+ <LI>
+ 
+ FUTURE REVISIONS OF THIS LICENSE
+ 
+ The Free Software Foundation may publish new, revised versions
+ of the GNU Free Documentation 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.  See
+ <A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License "or any later version" applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.
+ </OL>
+ 
+ 
+ 
+ <H3><A NAME="SEC182" HREF="autoconf_toc.html#TOC182">ADDENDUM: How to use this License for your documents</A></H3>
+ 
+ <P>
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ 
+ 
+ 
+ <PRE>
+   Copyright (C)  <VAR>year</VAR>  <VAR>your name</VAR>.
+   Permission is granted to copy, distribute and/or modify this document
+   under the terms of the GNU Free Documentation License, Version 1.1
+   or any later version published by the Free Software Foundation;
+   with the Invariant Sections being <VAR>list their titles</VAR>, with the
+   Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts being <VAR>list</VAR>.
+   A copy of the license is included in the section entitled ``GNU
+   Free Documentation License''.
+ </PRE>
+ 
+ <P>
+ If you have no Invariant Sections, write "with no Invariant Sections"
+ instead of saying which ones are invariant.  If you have no
+ Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being <VAR>list</VAR>"; likewise for Back-Cover Texts.
+ 
+ 
+ <P>
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License,
+ to permit their use in free software.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC183" HREF="autoconf_toc.html#TOC183">Indices</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC184" HREF="autoconf_toc.html#TOC184">Environment Variable Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the environment variables that Autoconf
+ checks.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#evindex_c">c</A>
+ -
+ <A HREF="#evindex_i">i</A>
+ -
+ <A HREF="#evindex_l">l</A>
+ -
+ <A HREF="#evindex_n">n</A>
+ -
+ <A HREF="#evindex_p">p</A>
+ -
+ <A HREF="#evindex_r">r</A>
+ -
+ <A HREF="#evindex_s">s</A>
+ -
+ <A HREF="#evindex_w">w</A>
+ <P>
+ <H2><A NAME="evindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX698">CDPATH</A>
+ <LI><A HREF="autoconf.html#IDX796">CONFIG_COMMANDS</A>
+ <LI><A HREF="autoconf.html#IDX798">CONFIG_FILES</A>
+ <LI><A HREF="autoconf.html#IDX800">CONFIG_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX802">CONFIG_LINKS</A>
+ <LI><A HREF="autoconf.html#IDX792">CONFIG_SHELL</A>
+ <LI><A HREF="autoconf.html#IDX787">CONFIG_SITE</A>
+ <LI><A HREF="autoconf.html#IDX794">CONFIG_STATUS</A>
+ </DIR>
+ <H2><A NAME="evindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX699">IFS</A>
+ </DIR>
+ <H2><A NAME="evindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX700">LANG</A>
+ <LI><A HREF="autoconf.html#IDX707">LANGUAGE</A>
+ <LI><A HREF="autoconf.html#IDX701">LC_ALL</A>
+ <LI><A HREF="autoconf.html#IDX702">LC_COLLATE</A>
+ <LI><A HREF="autoconf.html#IDX703">LC_CTYPE</A>
+ <LI><A HREF="autoconf.html#IDX704">LC_MESSAGES</A>
+ <LI><A HREF="autoconf.html#IDX705">LC_NUMERIC</A>
+ <LI><A HREF="autoconf.html#IDX706">LC_TIME</A>
+ <LI><A HREF="autoconf.html#IDX708">LINENO</A>
+ </DIR>
+ <H2><A NAME="evindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX709">NULLCMD</A>
+ </DIR>
+ <H2><A NAME="evindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX711">PATH_SEPARATOR</A>
+ </DIR>
+ <H2><A NAME="evindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX712">RANDOM</A>
+ </DIR>
+ <H2><A NAME="evindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX807">SIMPLE_BACKUP_SUFFIX</A>
+ <LI><A HREF="autoconf.html#IDX710">status</A>
+ </DIR>
+ <H2><A NAME="evindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX11">WARNINGS</A>, <A HREF="autoconf.html#IDX127">WARNINGS</A>, <A HREF="autoconf.html#IDX632">WARNINGS</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC185" HREF="autoconf_toc.html#TOC185">Output Variable Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the variables that Autoconf can
+ substitute into files that it creates, typically one or more
+ <TT>`Makefile'</TT>s.  See section <A HREF="autoconf.html#SEC81">Setting Output Variables</A>, for more information
+ on how this is done.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#ovindex_a">a</A>
+ -
+ <A HREF="#ovindex_b">b</A>
+ -
+ <A HREF="#ovindex_c">c</A>
+ -
+ <A HREF="#ovindex_d">d</A>
+ -
+ <A HREF="#ovindex_e">e</A>
+ -
+ <A HREF="#ovindex_f">f</A>
+ -
+ <A HREF="#ovindex_g">g</A>
+ -
+ <A HREF="#ovindex_h">h</A>
+ -
+ <A HREF="#ovindex_i">i</A>
+ -
+ <A HREF="#ovindex_k">k</A>
+ -
+ <A HREF="#ovindex_l">l</A>
+ -
+ <A HREF="#ovindex_m">m</A>
+ -
+ <A HREF="#ovindex_n">n</A>
+ -
+ <A HREF="#ovindex_o">o</A>
+ -
+ <A HREF="#ovindex_p">p</A>
+ -
+ <A HREF="#ovindex_r">r</A>
+ -
+ <A HREF="#ovindex_s">s</A>
+ -
+ <A HREF="#ovindex_t">t</A>
+ -
+ <A HREF="#ovindex_x">x</A>
+ -
+ <A HREF="#ovindex_y">y</A>
+ <P>
+ <H2><A NAME="ovindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX78">abs_builddir</A>
+ <LI><A HREF="autoconf.html#IDX86">abs_srcdir</A>
+ <LI><A HREF="autoconf.html#IDX82">abs_top_builddir</A>
+ <LI><A HREF="autoconf.html#IDX90">abs_top_srcdir</A>
+ <LI><A HREF="autoconf.html#IDX220">ALLOCA</A>
+ <LI><A HREF="autoconf.html#IDX160">AWK</A>
+ </DIR>
+ <H2><A NAME="ovindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX92">bindir</A>
+ <LI><A HREF="autoconf.html#IDX758">build</A>
+ <LI><A HREF="autoconf.html#IDX753">build_alias</A>
+ <LI><A HREF="autoconf.html#IDX759">build_cpu</A>
+ <LI><A HREF="autoconf.html#IDX761">build_os</A>
+ <LI><A HREF="autoconf.html#IDX760">build_vendor</A>
+ <LI><A HREF="autoconf.html#IDX76">builddir</A>
+ </DIR>
+ <H2><A NAME="ovindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX465">CC</A>, <A HREF="autoconf.html#IDX472">CC</A>, <A HREF="autoconf.html#IDX505">CC</A>, <A HREF="autoconf.html#IDX550">CC</A>
+ <LI><A HREF="autoconf.html#IDX54">CFLAGS</A>, <A HREF="autoconf.html#IDX466">CFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX56">configure_input</A>
+ <LI><A HREF="autoconf.html#IDX475">CPP</A>
+ <LI><A HREF="autoconf.html#IDX58">CPPFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX751">cross_compiling</A>
+ <LI><A HREF="autoconf.html#IDX508">CXX</A>
+ <LI><A HREF="autoconf.html#IDX512">CXXCPP</A>
+ <LI><A HREF="autoconf.html#IDX60">CXXFLAGS</A>, <A HREF="autoconf.html#IDX509">CXXFLAGS</A>
+ </DIR>
+ <H2><A NAME="ovindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX94">datadir</A>
+ <LI><A HREF="autoconf.html#IDX62">DEFS</A>
+ </DIR>
+ <H2><A NAME="ovindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX66">ECHO_C</A>
+ <LI><A HREF="autoconf.html#IDX67">ECHO_N</A>
+ <LI><A HREF="autoconf.html#IDX68">ECHO_T</A>
+ <LI><A HREF="autoconf.html#IDX96">exec_prefix</A>
+ <LI><A HREF="autoconf.html#IDX459">EXEEXT</A>, <A HREF="autoconf.html#IDX842">EXEEXT</A>
+ </DIR>
+ <H2><A NAME="ovindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX515">F77</A>
+ <LI><A HREF="autoconf.html#IDX70">FFLAGS</A>, <A HREF="autoconf.html#IDX516">FFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX522">FLIBS</A>
+ </DIR>
+ <H2><A NAME="ovindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX249">GETGROUPS_LIBS</A>
+ <LI><A HREF="autoconf.html#IDX265">GETLOADAVG_LIBS</A>
+ </DIR>
+ <H2><A NAME="ovindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX764">host</A>
+ <LI><A HREF="autoconf.html#IDX754">host_alias</A>
+ <LI><A HREF="autoconf.html#IDX765">host_cpu</A>
+ <LI><A HREF="autoconf.html#IDX767">host_os</A>
+ <LI><A HREF="autoconf.html#IDX766">host_vendor</A>
+ </DIR>
+ <H2><A NAME="ovindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX98">includedir</A>
+ <LI><A HREF="autoconf.html#IDX100">infodir</A>
+ <LI><A HREF="autoconf.html#IDX163">INSTALL</A>
+ <LI><A HREF="autoconf.html#IDX165">INSTALL_DATA</A>
+ <LI><A HREF="autoconf.html#IDX164">INSTALL_PROGRAM</A>
+ <LI><A HREF="autoconf.html#IDX166">INSTALL_SCRIPT</A>
+ </DIR>
+ <H2><A NAME="ovindex_k">k</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX264">KMEM_GROUP</A>
+ </DIR>
+ <H2><A NAME="ovindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX72">LDFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX169">LEX</A>
+ <LI><A HREF="autoconf.html#IDX172">LEX_OUTPUT_ROOT</A>
+ <LI><A HREF="autoconf.html#IDX170">LEXLIB</A>
+ <LI><A HREF="autoconf.html#IDX102">libdir</A>
+ <LI><A HREF="autoconf.html#IDX104">libexecdir</A>
+ <LI><A HREF="autoconf.html#IDX262">LIBOBJS</A>, <A HREF="autoconf.html#IDX285">LIBOBJS</A>, <A HREF="autoconf.html#IDX289">LIBOBJS</A>, <A HREF="autoconf.html#IDX359">LIBOBJS</A>, <A HREF="autoconf.html#IDX366">LIBOBJS</A>, <A HREF="autoconf.html#IDX417">LIBOBJS</A>
+ <LI><A HREF="autoconf.html#IDX74">LIBS</A>, <A HREF="autoconf.html#IDX563">LIBS</A>, <A HREF="autoconf.html#IDX952">LIBS</A>, <A HREF="autoconf.html#IDX1011">LIBS</A>
+ <LI><A HREF="autoconf.html#IDX175">LN_S</A>
+ <LI><A HREF="autoconf.html#IDX106">localstatedir</A>
+ </DIR>
+ <H2><A NAME="ovindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX108">mandir</A>
+ </DIR>
+ <H2><A NAME="ovindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX263">NEED_SETGID</A>
+ </DIR>
+ <H2><A NAME="ovindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX460">OBJEXT</A>, <A HREF="autoconf.html#IDX919">OBJEXT</A>
+ <LI><A HREF="autoconf.html#IDX110">oldincludedir</A>
+ </DIR>
+ <H2><A NAME="ovindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX30">PACKAGE_BUGREPORT</A>
+ <LI><A HREF="autoconf.html#IDX18">PACKAGE_NAME</A>
+ <LI><A HREF="autoconf.html#IDX27">PACKAGE_STRING</A>
+ <LI><A HREF="autoconf.html#IDX21">PACKAGE_TARNAME</A>
+ <LI><A HREF="autoconf.html#IDX24">PACKAGE_VERSION</A>
+ <LI><A HREF="autoconf.html#IDX327">POW_LIB</A>
+ <LI><A HREF="autoconf.html#IDX112">prefix</A>
+ <LI><A HREF="autoconf.html#IDX786">program_transform_name</A>
+ </DIR>
+ <H2><A NAME="ovindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX178">RANLIB</A>
+ </DIR>
+ <H2><A NAME="ovindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX114">sbindir</A>
+ <LI><A HREF="autoconf.html#IDX50">SET_MAKE</A>
+ <LI><A HREF="autoconf.html#IDX116">sharedstatedir</A>
+ <LI><A HREF="autoconf.html#IDX84">srcdir</A>
+ <LI><A HREF="autoconf.html#IDX151">subdirs</A>
+ <LI><A HREF="autoconf.html#IDX118">sysconfdir</A>
+ </DIR>
+ <H2><A NAME="ovindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX770">target</A>
+ <LI><A HREF="autoconf.html#IDX755">target_alias</A>
+ <LI><A HREF="autoconf.html#IDX771">target_cpu</A>
+ <LI><A HREF="autoconf.html#IDX773">target_os</A>
+ <LI><A HREF="autoconf.html#IDX772">target_vendor</A>
+ <LI><A HREF="autoconf.html#IDX80">top_builddir</A>
+ <LI><A HREF="autoconf.html#IDX88">top_srcdir</A>
+ </DIR>
+ <H2><A NAME="ovindex_x">x</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX539">X_CFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX541">X_EXTRA_LIBS</A>
+ <LI><A HREF="autoconf.html#IDX540">X_LIBS</A>
+ <LI><A HREF="autoconf.html#IDX542">X_PRE_LIBS</A>
+ </DIR>
+ <H2><A NAME="ovindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX181">YACC</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC186" HREF="autoconf_toc.html#TOC186">Preprocessor Symbol Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the C preprocessor symbols that the
+ Autoconf macros define.  To work with Autoconf, C source code needs to
+ use these names in <CODE>#if</CODE> directives.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#cvindex__">_</A>
+ -
+ <A HREF="#cvindex_c">c</A>
+ -
+ <A HREF="#cvindex_d">d</A>
+ -
+ <A HREF="#cvindex_f">f</A>
+ -
+ <A HREF="#cvindex_g">g</A>
+ -
+ <A HREF="#cvindex_h">h</A>
+ -
+ <A HREF="#cvindex_i">i</A>
+ -
+ <A HREF="#cvindex_l">l</A>
+ -
+ <A HREF="#cvindex_m">m</A>
+ -
+ <A HREF="#cvindex_n">n</A>
+ -
+ <A HREF="#cvindex_o">o</A>
+ -
+ <A HREF="#cvindex_p">p</A>
+ -
+ <A HREF="#cvindex_r">r</A>
+ -
+ <A HREF="#cvindex_s">s</A>
+ -
+ <A HREF="#cvindex_t">t</A>
+ -
+ <A HREF="#cvindex_u">u</A>
+ -
+ <A HREF="#cvindex_v">v</A>
+ -
+ <A HREF="#cvindex_w">w</A>
+ -
+ <A HREF="#cvindex_x">x</A>
+ -
+ <A HREF="#cvindex_y">y</A>
+ <P>
+ <H2><A NAME="cvindex__">_</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX491">__CHAR_UNSIGNED__</A>
+ <LI><A HREF="autoconf.html#IDX501">__PROTOTYPES</A>
+ <LI><A HREF="autoconf.html#IDX560">_ALL_SOURCE</A>
+ <LI><A HREF="autoconf.html#IDX548">_FILE_OFFSET_BITS</A>
+ <LI><A HREF="autoconf.html#IDX549">_LARGE_FILES</A>
+ <LI><A HREF="autoconf.html#IDX245">_LARGEFILE_SOURCE</A>
+ <LI><A HREF="autoconf.html#IDX566">_MINIX</A>
+ <LI><A HREF="autoconf.html#IDX568">_POSIX_1_SOURCE</A>
+ <LI><A HREF="autoconf.html#IDX567">_POSIX_SOURCE</A>
+ <LI><A HREF="autoconf.html#IDX387">_POSIX_VERSION</A>
+ </DIR>
+ <H2><A NAME="cvindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX218">C_ALLOCA</A>
+ <LI><A HREF="autoconf.html#IDX261">C_GETLOADAVG</A>
+ <LI><A HREF="autoconf.html#IDX227">CLOSEDIR_VOID</A>
+ <LI><A HREF="autoconf.html#IDX482">const</A>
+ </DIR>
+ <H2><A NAME="cvindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX254">DGUX</A>
+ <LI><A HREF="autoconf.html#IDX834">DIRENT</A>
+ </DIR>
+ <H2><A NAME="cvindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX525">F77_DUMMY_MAIN</A>
+ <LI><A HREF="autoconf.html#IDX531">F77_FUNC</A>
+ <LI><A HREF="autoconf.html#IDX532">F77_FUNC_</A>
+ <LI><A HREF="autoconf.html#IDX528">F77_MAIN</A>
+ <LI><A HREF="autoconf.html#IDX519">F77_NO_MINUS_C_MINUS_O</A>
+ </DIR>
+ <H2><A NAME="cvindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX435">GETGROUPS_T</A>
+ <LI><A HREF="autoconf.html#IDX259">GETLODAVG_PRIVILEGED</A>
+ <LI><A HREF="autoconf.html#IDX273">GETPGRP_VOID</A>
+ <LI><A HREF="autoconf.html#IDX454">gid_t</A>
+ <LI><A HREF="autoconf.html#IDX393">GWINSZ_IN_SYS_IOCTL</A>
+ </DIR>
+ <H2><A NAME="cvindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX219">HAVE_ALLOCA_H</A>
+ <LI><A HREF="autoconf.html#IDX123">HAVE_CONFIG_H</A>
+ <LI><A HREF="autoconf.html#IDX332">HAVE_DECL_STRERROR_R</A>
+ <LI><A HREF="autoconf.html#IDX407">HAVE_DECL_<VAR>symbol</VAR></A>
+ <LI><A HREF="autoconf.html#IDX370">HAVE_DIRENT_H</A>
+ <LI><A HREF="autoconf.html#IDX350">HAVE_DOPRNT</A>
+ <LI><A HREF="autoconf.html#IDX356">HAVE_<VAR>function</VAR></A>
+ <LI><A HREF="autoconf.html#IDX269">HAVE_GETMNTENT</A>
+ <LI><A HREF="autoconf.html#IDX398">HAVE_<VAR>header</VAR></A>
+ <LI><A HREF="autoconf.html#IDX494">HAVE_LONG_DOUBLE</A>
+ <LI><A HREF="autoconf.html#IDX553">HAVE_LONG_FILE_NAMES</A>
+ <LI><A HREF="autoconf.html#IDX314">HAVE_LSTAT_EMPTY_STRING_BUG</A>
+ <LI><A HREF="autoconf.html#IDX293">HAVE_MMAP</A>
+ <LI><A HREF="autoconf.html#IDX371">HAVE_NDIR_H</A>
+ <LI><A HREF="autoconf.html#IDX297">HAVE_OBSTACK</A>
+ <LI><A HREF="autoconf.html#IDX975">HAVE_RESTARTABLE_SYSCALLS</A>
+ <LI><A HREF="autoconf.html#IDX412">HAVE_ST_BLKSIZE</A>
+ <LI><A HREF="autoconf.html#IDX416">HAVE_ST_BLOCKS</A>
+ <LI><A HREF="autoconf.html#IDX420">HAVE_ST_RDEV</A>
+ <LI><A HREF="autoconf.html#IDX313">HAVE_STAT_EMPTY_STRING_BUG</A>
+ <LI><A HREF="autoconf.html#IDX323">HAVE_STRCOLL</A>
+ <LI><A HREF="autoconf.html#IDX331">HAVE_STRERROR_R</A>
+ <LI><A HREF="autoconf.html#IDX337">HAVE_STRFTIME</A>
+ <LI><A HREF="autoconf.html#IDX497">HAVE_STRINGIZE</A>
+ <LI><A HREF="autoconf.html#IDX341">HAVE_STRNLEN</A>
+ <LI><A HREF="autoconf.html#IDX411">HAVE_STRUCT_STAT_ST_BLKSIZE</A>
+ <LI><A HREF="autoconf.html#IDX415">HAVE_STRUCT_STAT_ST_BLOCKS</A>
+ <LI><A HREF="autoconf.html#IDX421">HAVE_STRUCT_STAT_ST_RDEV</A>
+ <LI><A HREF="autoconf.html#IDX372">HAVE_SYS_DIR_H</A>
+ <LI><A HREF="autoconf.html#IDX373">HAVE_SYS_NDIR_H</A>
+ <LI><A HREF="autoconf.html#IDX386">HAVE_SYS_WAIT_H</A>
+ <LI><A HREF="autoconf.html#IDX427">HAVE_TM_ZONE</A>
+ <LI><A HREF="autoconf.html#IDX428">HAVE_TZNAME</A>
+ <LI><A HREF="autoconf.html#IDX345">HAVE_UTIME_NULL</A>
+ <LI><A HREF="autoconf.html#IDX237">HAVE_VFORK_H</A>
+ <LI><A HREF="autoconf.html#IDX349">HAVE_VPRINTF</A>
+ <LI><A HREF="autoconf.html#IDX855">HAVE_WAIT3</A>
+ <LI><A HREF="autoconf.html#IDX238">HAVE_WORKING_FORK</A>
+ <LI><A HREF="autoconf.html#IDX239">HAVE_WORKING_VFORK</A>
+ </DIR>
+ <H2><A NAME="cvindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX488">inline</A>
+ <LI><A HREF="autoconf.html#IDX880">INT_16_BITS</A>
+ </DIR>
+ <H2><A NAME="cvindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX899">LONG_64_BITS</A>
+ <LI><A HREF="autoconf.html#IDX278">LSTAT_FOLLOWS_SLASHED_SYMLINK</A>
+ </DIR>
+ <H2><A NAME="cvindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX376">MAJOR_IN_MKDEV</A>
+ <LI><A HREF="autoconf.html#IDX377">MAJOR_IN_SYSMACROS</A>
+ <LI><A HREF="autoconf.html#IDX438">mode_t</A>
+ </DIR>
+ <H2><A NAME="cvindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX837">NDIR</A>
+ <LI><A HREF="autoconf.html#IDX908">NEED_MEMORY_H</A>
+ <LI><A HREF="autoconf.html#IDX260">NEED_SETGID</A>
+ <LI><A HREF="autoconf.html#IDX258">NLIST_NAME_UNION</A>
+ <LI><A HREF="autoconf.html#IDX257">NLIST_STRUCT</A>
+ <LI><A HREF="autoconf.html#IDX469">NO_MINUS_C_MINUS_O</A>
+ </DIR>
+ <H2><A NAME="cvindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX441">off_t</A>
+ </DIR>
+ <H2><A NAME="cvindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX31">PACKAGE_BUGREPORT</A>
+ <LI><A HREF="autoconf.html#IDX19">PACKAGE_NAME</A>
+ <LI><A HREF="autoconf.html#IDX28">PACKAGE_STRING</A>
+ <LI><A HREF="autoconf.html#IDX22">PACKAGE_TARNAME</A>
+ <LI><A HREF="autoconf.html#IDX25">PACKAGE_VERSION</A>
+ <LI><A HREF="autoconf.html#IDX502">PARAMS</A>
+ <LI><A HREF="autoconf.html#IDX444">pid_t</A>
+ <LI><A HREF="autoconf.html#IDX500">PROTOTYPES</A>
+ </DIR>
+ <H2><A NAME="cvindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX447">RETSIGTYPE</A>
+ </DIR>
+ <H2><A NAME="cvindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX301">SELECT_TYPE_ARG1</A>
+ <LI><A HREF="autoconf.html#IDX302">SELECT_TYPE_ARG234</A>
+ <LI><A HREF="autoconf.html#IDX303">SELECT_TYPE_ARG5</A>
+ <LI><A HREF="autoconf.html#IDX307">SETPGRP_VOID</A>
+ <LI><A HREF="autoconf.html#IDX319">SETVBUF_REVERSED</A>
+ <LI><A HREF="autoconf.html#IDX450">size_t</A>
+ <LI><A HREF="autoconf.html#IDX383">STDC_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX333">STRERROR_R_CHAR_P</A>
+ <LI><A HREF="autoconf.html#IDX253">SVR4</A>
+ <LI><A HREF="autoconf.html#IDX402">SYS_SIGLIST_DECLARED</A>
+ <LI><A HREF="autoconf.html#IDX836">SYSDIR</A>
+ <LI><A HREF="autoconf.html#IDX835">SYSNDIR</A>
+ </DIR>
+ <H2><A NAME="cvindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX390">TIME_WITH_SYS_TIME</A>
+ <LI><A HREF="autoconf.html#IDX424">TM_IN_SYS_TIME</A>
+ </DIR>
+ <H2><A NAME="cvindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX453">uid_t</A>
+ <LI><A HREF="autoconf.html#IDX255">UMAX</A>
+ <LI><A HREF="autoconf.html#IDX256">UMAX4_3</A>
+ <LI><A HREF="autoconf.html#IDX992">USG</A>
+ </DIR>
+ <H2><A NAME="cvindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX240">vfork</A>
+ <LI><A HREF="autoconf.html#IDX485">volatile</A>
+ </DIR>
+ <H2><A NAME="cvindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX478">WORDS_BIGENDIAN</A>
+ </DIR>
+ <H2><A NAME="cvindex_x">x</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX543">X_DISPLAY_MISSING</A>
+ </DIR>
+ <H2><A NAME="cvindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX171">YYTEXT_POINTER</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC187" HREF="autoconf_toc.html#TOC187">Autoconf Macro Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the Autoconf macros.  To make the list
+ easier to use, the macros are listed without their preceding <SAMP>`AC_'</SAMP>.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#acindex_a">a</A>
+ -
+ <A HREF="#acindex_b">b</A>
+ -
+ <A HREF="#acindex_c">c</A>
+ -
+ <A HREF="#acindex_d">d</A>
+ -
+ <A HREF="#acindex_e">e</A>
+ -
+ <A HREF="#acindex_f">f</A>
+ -
+ <A HREF="#acindex_g">g</A>
+ -
+ <A HREF="#acindex_h">h</A>
+ -
+ <A HREF="#acindex_i">i</A>
+ -
+ <A HREF="#acindex_l">l</A>
+ -
+ <A HREF="#acindex_m">m</A>
+ -
+ <A HREF="#acindex_o">o</A>
+ -
+ <A HREF="#acindex_p">p</A>
+ -
+ <A HREF="#acindex_r">r</A>
+ -
+ <A HREF="#acindex_s">s</A>
+ -
+ <A HREF="#acindex_t">t</A>
+ -
+ <A HREF="#acindex_u">u</A>
+ -
+ <A HREF="#acindex_v">v</A>
+ -
+ <A HREF="#acindex_w">w</A>
+ -
+ <A HREF="#acindex_x">x</A>
+ -
+ <A HREF="#acindex_y">y</A>
+ <P>
+ <H2><A NAME="acindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX138">AH_BOTTOM</A>
+ <LI><A HREF="autoconf.html#IDX132">AH_TEMPLATE</A>
+ <LI><A HREF="autoconf.html#IDX135">AH_TOP</A>
+ <LI><A HREF="autoconf.html#IDX129">AH_VERBATIM</A>
+ <LI><A HREF="autoconf.html#IDX559">AIX</A>
+ <LI><A HREF="autoconf.html#IDX809">ALLOCA</A>
+ <LI><A HREF="autoconf.html#IDX811">ARG_ARRAY</A>
+ <LI><A HREF="autoconf.html#IDX779">ARG_ENABLE</A>
+ <LI><A HREF="autoconf.html#IDX785">ARG_PROGRAM</A>
+ <LI><A HREF="autoconf.html#IDX603">ARG_VAR</A>
+ <LI><A HREF="autoconf.html#IDX775">ARG_WITH</A>
+ <LI><A HREF="autoconf.html#IDX684">AU_DEFUN</A>
+ </DIR>
+ <H2><A NAME="acindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX681">BEFORE</A>
+ <LI><A HREF="autoconf.html#IDX139">BOTTOM</A>
+ </DIR>
+ <H2><A NAME="acindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX477">C_BIGENDIAN</A>
+ <LI><A HREF="autoconf.html#IDX490">C_CHAR_UNSIGNED</A>
+ <LI><A HREF="autoconf.html#IDX481">C_CONST</A>
+ <LI><A HREF="autoconf.html#IDX813">C_CROSS</A>
+ <LI><A HREF="autoconf.html#IDX487">C_INLINE</A>
+ <LI><A HREF="autoconf.html#IDX493">C_LONG_DOUBLE</A>
+ <LI><A HREF="autoconf.html#IDX499">C_PROTOTYPES</A>
+ <LI><A HREF="autoconf.html#IDX496">C_STRINGIZE</A>
+ <LI><A HREF="autoconf.html#IDX484">C_VOLATILE</A>
+ <LI><A HREF="autoconf.html#IDX608">CACHE_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX611">CACHE_LOAD</A>
+ <LI><A HREF="autoconf.html#IDX613">CACHE_SAVE</A>
+ <LI><A HREF="autoconf.html#IDX606">CACHE_VAL</A>
+ <LI><A HREF="autoconf.html#IDX757">CANONICAL_BUILD</A>
+ <LI><A HREF="autoconf.html#IDX763">CANONICAL_HOST</A>
+ <LI><A HREF="autoconf.html#IDX815">CANONICAL_SYSTEM</A>
+ <LI><A HREF="autoconf.html#IDX769">CANONICAL_TARGET</A>
+ <LI><A HREF="autoconf.html#IDX817">CHAR_UNSIGNED</A>
+ <LI><A HREF="autoconf.html#IDX404">CHECK_DECL</A>
+ <LI><A HREF="autoconf.html#IDX406">CHECK_DECLS</A>
+ <LI><A HREF="autoconf.html#IDX198">CHECK_FILE</A>
+ <LI><A HREF="autoconf.html#IDX200">CHECK_FILES</A>
+ <LI><A HREF="autoconf.html#IDX353">CHECK_FUNC</A>
+ <LI><A HREF="autoconf.html#IDX355">CHECK_FUNCS</A>
+ <LI><A HREF="autoconf.html#IDX395">CHECK_HEADER</A>
+ <LI><A HREF="autoconf.html#IDX397">CHECK_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX203">CHECK_LIB</A>
+ <LI><A HREF="autoconf.html#IDX430">CHECK_MEMBER</A>
+ <LI><A HREF="autoconf.html#IDX432">CHECK_MEMBERS</A>
+ <LI><A HREF="autoconf.html#IDX183">CHECK_PROG</A>
+ <LI><A HREF="autoconf.html#IDX185">CHECK_PROGS</A>
+ <LI><A HREF="autoconf.html#IDX462">CHECK_SIZEOF</A>
+ <LI><A HREF="autoconf.html#IDX187">CHECK_TOOL</A>
+ <LI><A HREF="autoconf.html#IDX189">CHECK_TOOLS</A>
+ <LI><A HREF="autoconf.html#IDX456">CHECK_TYPE</A>, <A HREF="autoconf.html#IDX819">CHECK_TYPE</A>
+ <LI><A HREF="autoconf.html#IDX458">CHECK_TYPES</A>
+ <LI><A HREF="autoconf.html#IDX821">CHECKING</A>
+ <LI><A HREF="autoconf.html#IDX823">COMPILE_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX44">CONFIG_AUX_DIR</A>
+ <LI><A HREF="autoconf.html#IDX141">CONFIG_COMMANDS</A>
+ <LI><A HREF="autoconf.html#IDX52">CONFIG_FILES</A>
+ <LI><A HREF="autoconf.html#IDX122">CONFIG_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX147">CONFIG_LINKS</A>
+ <LI><A HREF="autoconf.html#IDX42">CONFIG_SRCDIR</A>
+ <LI><A HREF="autoconf.html#IDX150">CONFIG_SUBDIRS</A>
+ <LI><A HREF="autoconf.html#IDX825">CONST</A>
+ <LI><A HREF="autoconf.html#IDX36">COPYRIGHT</A>
+ <LI><A HREF="autoconf.html#IDX827">CROSS_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX829">CYGWIN</A>
+ </DIR>
+ <H2><A NAME="acindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX401">DECL_SYS_SIGLIST</A>
+ <LI><A HREF="autoconf.html#IDX831">DECL_YYTEXT</A>
+ <LI><A HREF="autoconf.html#IDX593">DEFINE</A>
+ <LI><A HREF="autoconf.html#IDX595">DEFINE_UNQUOTED</A>
+ <LI><A HREF="autoconf.html#IDX669">DEFUN</A>, <A HREF="autoconf.html#IDX683">DEFUN</A>
+ <LI><A HREF="autoconf.html#IDX673">DIAGNOSE</A>
+ <LI><A HREF="autoconf.html#IDX833">DIR_HEADER</A>
+ <LI><A HREF="autoconf.html#IDX839">DYNIX_SEQ</A>
+ </DIR>
+ <H2><A NAME="acindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX574">EGREP_CPP</A>
+ <LI><A HREF="autoconf.html#IDX572">EGREP_HEADER</A>
+ <LI><A HREF="autoconf.html#IDX844">EMXOS2</A>
+ <LI><A HREF="autoconf.html#IDX781">ENABLE</A>
+ <LI><A HREF="autoconf.html#IDX846">ERROR</A>
+ <LI><A HREF="autoconf.html#IDX841">EXEEXT</A>
+ </DIR>
+ <H2><A NAME="acindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX524">F77_DUMMY_MAIN</A>
+ <LI><A HREF="autoconf.html#IDX534">F77_FUNC</A>
+ <LI><A HREF="autoconf.html#IDX521">F77_LIBRARY_LDFLAGS</A>
+ <LI><A HREF="autoconf.html#IDX527">F77_MAIN</A>
+ <LI><A HREF="autoconf.html#IDX530">F77_WRAPPERS</A>
+ <LI><A HREF="autoconf.html#IDX677">FATAL</A>
+ <LI><A HREF="autoconf.html#IDX848">FIND_X</A>
+ <LI><A HREF="autoconf.html#IDX850">FIND_XTRA</A>
+ <LI><A HREF="autoconf.html#IDX217">FUNC_ALLOCA</A>
+ <LI><A HREF="autoconf.html#IDX852">FUNC_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX223">FUNC_CHOWN</A>
+ <LI><A HREF="autoconf.html#IDX226">FUNC_CLOSEDIR_VOID</A>
+ <LI><A HREF="autoconf.html#IDX230">FUNC_ERROR_AT_LINE</A>
+ <LI><A HREF="autoconf.html#IDX233">FUNC_FNMATCH</A>
+ <LI><A HREF="autoconf.html#IDX236">FUNC_FORK</A>
+ <LI><A HREF="autoconf.html#IDX244">FUNC_FSEEKO</A>
+ <LI><A HREF="autoconf.html#IDX248">FUNC_GETGROUPS</A>
+ <LI><A HREF="autoconf.html#IDX252">FUNC_GETLOADAVG</A>
+ <LI><A HREF="autoconf.html#IDX268">FUNC_GETMNTENT</A>
+ <LI><A HREF="autoconf.html#IDX272">FUNC_GETPGRP</A>
+ <LI><A HREF="autoconf.html#IDX312">FUNC_LSTAT</A>
+ <LI><A HREF="autoconf.html#IDX277">FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK</A>
+ <LI><A HREF="autoconf.html#IDX281">FUNC_MALLOC</A>
+ <LI><A HREF="autoconf.html#IDX284">FUNC_MEMCMP</A>
+ <LI><A HREF="autoconf.html#IDX288">FUNC_MKTIME</A>
+ <LI><A HREF="autoconf.html#IDX292">FUNC_MMAP</A>
+ <LI><A HREF="autoconf.html#IDX296">FUNC_OBSTACK</A>
+ <LI><A HREF="autoconf.html#IDX300">FUNC_SELECT_ARGTYPES</A>
+ <LI><A HREF="autoconf.html#IDX306">FUNC_SETPGRP</A>
+ <LI><A HREF="autoconf.html#IDX318">FUNC_SETVBUF_REVERSED</A>
+ <LI><A HREF="autoconf.html#IDX311">FUNC_STAT</A>
+ <LI><A HREF="autoconf.html#IDX322">FUNC_STRCOLL</A>
+ <LI><A HREF="autoconf.html#IDX330">FUNC_STRERROR_R</A>
+ <LI><A HREF="autoconf.html#IDX336">FUNC_STRFTIME</A>
+ <LI><A HREF="autoconf.html#IDX340">FUNC_STRNLEN</A>
+ <LI><A HREF="autoconf.html#IDX326">FUNC_STRTOD</A>
+ <LI><A HREF="autoconf.html#IDX344">FUNC_UTIME_NULL</A>
+ <LI><A HREF="autoconf.html#IDX348">FUNC_VPRINTF</A>
+ <LI><A HREF="autoconf.html#IDX854">FUNC_WAIT3</A>
+ </DIR>
+ <H2><A NAME="acindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX857">GCC_TRADITIONAL</A>
+ <LI><A HREF="autoconf.html#IDX859">GETGROUPS_T</A>
+ <LI><A HREF="autoconf.html#IDX861">GETLOADAVG</A>
+ </DIR>
+ <H2><A NAME="acindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX863">HAVE_FUNCS</A>
+ <LI><A HREF="autoconf.html#IDX865">HAVE_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX867">HAVE_LIBRARY</A>
+ <LI><A HREF="autoconf.html#IDX869">HAVE_POUNDBANG</A>
+ <LI><A HREF="autoconf.html#IDX871">HEADER_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX369">HEADER_DIRENT</A>
+ <LI><A HREF="autoconf.html#IDX873">HEADER_EGREP</A>
+ <LI><A HREF="autoconf.html#IDX375">HEADER_MAJOR</A>
+ <LI><A HREF="autoconf.html#IDX379">HEADER_STAT</A>
+ <LI><A HREF="autoconf.html#IDX382">HEADER_STDC</A>
+ <LI><A HREF="autoconf.html#IDX385">HEADER_SYS_WAIT</A>
+ <LI><A HREF="autoconf.html#IDX389">HEADER_TIME</A>
+ <LI><A HREF="autoconf.html#IDX392">HEADER_TIOCGWINSZ</A>
+ <LI><A HREF="autoconf.html#IDX783">HELP_STRING</A>
+ </DIR>
+ <H2><A NAME="acindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX16">INIT</A>, <A HREF="autoconf.html#IDX875">INIT</A>
+ <LI><A HREF="autoconf.html#IDX877">INLINE</A>
+ <LI><A HREF="autoconf.html#IDX879">INT_16_BITS</A>
+ <LI><A HREF="autoconf.html#IDX882">IRIX_SUN</A>
+ <LI><A HREF="autoconf.html#IDX562">ISC_POSIX</A>
+ </DIR>
+ <H2><A NAME="acindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX884">LANG_C</A>
+ <LI><A HREF="autoconf.html#IDX886">LANG_CPLUSPLUS</A>
+ <LI><A HREF="autoconf.html#IDX888">LANG_FORTRAN77</A>
+ <LI><A HREF="autoconf.html#IDX589">LANG_POP</A>
+ <LI><A HREF="autoconf.html#IDX587">LANG_PUSH</A>
+ <LI><A HREF="autoconf.html#IDX890">LANG_RESTORE</A>
+ <LI><A HREF="autoconf.html#IDX892">LANG_SAVE</A>
+ <LI><A HREF="autoconf.html#IDX358">LIBOBJ</A>
+ <LI><A HREF="autoconf.html#IDX361">LIBSOURCE</A>
+ <LI><A HREF="autoconf.html#IDX363">LIBSOURCES</A>
+ <LI><A HREF="autoconf.html#IDX894">LINK_FILES</A>
+ <LI><A HREF="autoconf.html#IDX896">LN_S</A>
+ <LI><A HREF="autoconf.html#IDX898">LONG_64_BITS</A>
+ <LI><A HREF="autoconf.html#IDX901">LONG_DOUBLE</A>
+ <LI><A HREF="autoconf.html#IDX903">LONG_FILE_NAMES</A>
+ </DIR>
+ <H2><A NAME="acindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX905">MAJOR_HEADER</A>
+ <LI><A HREF="autoconf.html#IDX907">MEMORY_H</A>
+ <LI><A HREF="autoconf.html#IDX910">MINGW32</A>
+ <LI><A HREF="autoconf.html#IDX565">MINIX</A>
+ <LI><A HREF="autoconf.html#IDX912">MINUS_C_MINUS_O</A>
+ <LI><A HREF="autoconf.html#IDX914">MMAP</A>
+ <LI><A HREF="autoconf.html#IDX916">MODE_T</A>
+ <LI><A HREF="autoconf.html#IDX616">MSG_CHECKING</A>
+ <LI><A HREF="autoconf.html#IDX622">MSG_ERROR</A>
+ <LI><A HREF="autoconf.html#IDX620">MSG_NOTICE</A>
+ <LI><A HREF="autoconf.html#IDX618">MSG_RESULT</A>
+ <LI><A HREF="autoconf.html#IDX624">MSG_WARN</A>
+ </DIR>
+ <H2><A NAME="acindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX918">OBJEXT</A>
+ <LI><A HREF="autoconf.html#IDX921">OBSOLETE</A>
+ <LI><A HREF="autoconf.html#IDX923">OFF_T</A>
+ <LI><A HREF="autoconf.html#IDX46">OUTPUT</A>, <A HREF="autoconf.html#IDX925">OUTPUT</A>
+ <LI><A HREF="autoconf.html#IDX927">OUTPUT_COMMANDS</A>
+ <LI><A HREF="autoconf.html#IDX145">OUTPUT_COMMANDS_POST</A>
+ <LI><A HREF="autoconf.html#IDX143">OUTPUT_COMMANDS_PRE</A>
+ </DIR>
+ <H2><A NAME="acindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX29">PACKAGE_BUGREPORT</A>
+ <LI><A HREF="autoconf.html#IDX17">PACKAGE_NAME</A>
+ <LI><A HREF="autoconf.html#IDX26">PACKAGE_STRING</A>
+ <LI><A HREF="autoconf.html#IDX20">PACKAGE_TARNAME</A>
+ <LI><A HREF="autoconf.html#IDX23">PACKAGE_VERSION</A>
+ <LI><A HREF="autoconf.html#IDX191">PATH_PROG</A>
+ <LI><A HREF="autoconf.html#IDX193">PATH_PROGS</A>
+ <LI><A HREF="autoconf.html#IDX195">PATH_TOOL</A>
+ <LI><A HREF="autoconf.html#IDX536">PATH_X</A>
+ <LI><A HREF="autoconf.html#IDX538">PATH_XTRA</A>
+ <LI><A HREF="autoconf.html#IDX929">PID_T</A>
+ <LI><A HREF="autoconf.html#IDX931">PREFIX</A>
+ <LI><A HREF="autoconf.html#IDX153">PREFIX_DEFAULT</A>
+ <LI><A HREF="autoconf.html#IDX155">PREFIX_PROGRAM</A>
+ <LI><A HREF="autoconf.html#IDX33">PREREQ</A>
+ <LI><A HREF="autoconf.html#IDX159">PROG_AWK</A>
+ <LI><A HREF="autoconf.html#IDX464">PROG_CC</A>
+ <LI><A HREF="autoconf.html#IDX468">PROG_CC_C_O</A>
+ <LI><A HREF="autoconf.html#IDX471">PROG_CC_STDC</A>
+ <LI><A HREF="autoconf.html#IDX474">PROG_CPP</A>
+ <LI><A HREF="autoconf.html#IDX507">PROG_CXX</A>
+ <LI><A HREF="autoconf.html#IDX511">PROG_CXXCPP</A>
+ <LI><A HREF="autoconf.html#IDX518">PROG_F77_C_O</A>
+ <LI><A HREF="autoconf.html#IDX514">PROG_FORTRAN</A>
+ <LI><A HREF="autoconf.html#IDX504">PROG_GCC_TRADITIONAL</A>
+ <LI><A HREF="autoconf.html#IDX162">PROG_INSTALL</A>
+ <LI><A HREF="autoconf.html#IDX168">PROG_LEX</A>
+ <LI><A HREF="autoconf.html#IDX174">PROG_LN_S</A>
+ <LI><A HREF="autoconf.html#IDX49">PROG_MAKE_SET</A>
+ <LI><A HREF="autoconf.html#IDX177">PROG_RANLIB</A>
+ <LI><A HREF="autoconf.html#IDX180">PROG_YACC</A>
+ <LI><A HREF="autoconf.html#IDX937">PROGRAM_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX939">PROGRAM_EGREP</A>
+ <LI><A HREF="autoconf.html#IDX941">PROGRAM_PATH</A>
+ <LI><A HREF="autoconf.html#IDX933">PROGRAMS_CHECK</A>
+ <LI><A HREF="autoconf.html#IDX935">PROGRAMS_PATH</A>
+ </DIR>
+ <H2><A NAME="acindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX943">REMOTE_TAPE</A>
+ <LI><A HREF="autoconf.html#IDX365">REPLACE_FUNCS</A>
+ <LI><A HREF="autoconf.html#IDX679">REQUIRE</A>
+ <LI><A HREF="autoconf.html#IDX591">REQUIRE_CPP</A>
+ <LI><A HREF="autoconf.html#IDX945">RESTARTABLE_SYSCALLS</A>
+ <LI><A HREF="autoconf.html#IDX947">RETSIGTYPE</A>
+ <LI><A HREF="autoconf.html#IDX39">REVISION</A>
+ <LI><A HREF="autoconf.html#IDX949">RSH</A>
+ </DIR>
+ <H2><A NAME="acindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX951">SCO_INTL</A>
+ <LI><A HREF="autoconf.html#IDX205">SEARCH_LIBS</A>
+ <LI><A HREF="autoconf.html#IDX956">SET_MAKE</A>
+ <LI><A HREF="autoconf.html#IDX954">SETVBUF_REVERSED</A>
+ <LI><A HREF="autoconf.html#IDX960">SIZE_T</A>
+ <LI><A HREF="autoconf.html#IDX958">SIZEOF_TYPE</A>
+ <LI><A HREF="autoconf.html#IDX968">ST_BLKSIZE</A>
+ <LI><A HREF="autoconf.html#IDX970">ST_BLOCKS</A>
+ <LI><A HREF="autoconf.html#IDX972">ST_RDEV</A>
+ <LI><A HREF="autoconf.html#IDX380">STAT_MACROS_BROKEN</A>, <A HREF="autoconf.html#IDX962">STAT_MACROS_BROKEN</A>
+ <LI><A HREF="autoconf.html#IDX964">STDC_HEADERS</A>
+ <LI><A HREF="autoconf.html#IDX966">STRCOLL</A>
+ <LI><A HREF="autoconf.html#IDX410">STRUCT_ST_BLKSIZE</A>
+ <LI><A HREF="autoconf.html#IDX414">STRUCT_ST_BLOCKS</A>
+ <LI><A HREF="autoconf.html#IDX419">STRUCT_ST_RDEV</A>
+ <LI><A HREF="autoconf.html#IDX426">STRUCT_TIMEZONE</A>
+ <LI><A HREF="autoconf.html#IDX423">STRUCT_TM</A>
+ <LI><A HREF="autoconf.html#IDX597">SUBST</A>
+ <LI><A HREF="autoconf.html#IDX599">SUBST_FILE</A>
+ <LI><A HREF="autoconf.html#IDX545">SYS_INTERPRETER</A>
+ <LI><A HREF="autoconf.html#IDX547">SYS_LARGEFILE</A>
+ <LI><A HREF="autoconf.html#IDX552">SYS_LONG_FILE_NAMES</A>
+ <LI><A HREF="autoconf.html#IDX555">SYS_POSIX_TERMIOS</A>
+ <LI><A HREF="autoconf.html#IDX974">SYS_RESTARTABLE_SYSCALLS</A>
+ <LI><A HREF="autoconf.html#IDX977">SYS_SIGLIST_DECLARED</A>
+ </DIR>
+ <H2><A NAME="acindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX133">TEMPLATE</A>
+ <LI><A HREF="autoconf.html#IDX979">TEST_CPP</A>
+ <LI><A HREF="autoconf.html#IDX981">TEST_PROGRAM</A>
+ <LI><A HREF="autoconf.html#IDX985">TIME_WITH_SYS_TIME</A>
+ <LI><A HREF="autoconf.html#IDX983">TIMEZONE</A>
+ <LI><A HREF="autoconf.html#IDX136">TOP</A>
+ <LI><A HREF="autoconf.html#IDX576">TRY_COMPILE</A>
+ <LI><A HREF="autoconf.html#IDX570">TRY_CPP</A>
+ <LI><A HREF="autoconf.html#IDX578">TRY_LINK</A>
+ <LI><A HREF="autoconf.html#IDX580">TRY_LINK_FUNC</A>
+ <LI><A HREF="autoconf.html#IDX582">TRY_RUN</A>
+ <LI><A HREF="autoconf.html#IDX434">TYPE_GETGROUPS</A>
+ <LI><A HREF="autoconf.html#IDX437">TYPE_MODE_T</A>
+ <LI><A HREF="autoconf.html#IDX440">TYPE_OFF_T</A>
+ <LI><A HREF="autoconf.html#IDX443">TYPE_PID_T</A>
+ <LI><A HREF="autoconf.html#IDX446">TYPE_SIGNAL</A>
+ <LI><A HREF="autoconf.html#IDX449">TYPE_SIZE_T</A>
+ <LI><A HREF="autoconf.html#IDX452">TYPE_UID_T</A>
+ </DIR>
+ <H2><A NAME="acindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX987">UID_T</A>
+ <LI><A HREF="autoconf.html#IDX989">UNISTD_H</A>
+ <LI><A HREF="autoconf.html#IDX991">USG</A>
+ <LI><A HREF="autoconf.html#IDX994">UTIME_NULL</A>
+ </DIR>
+ <H2><A NAME="acindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX996">VALIDATE_CACHED_SYSTEM_TUPLE</A>
+ <LI><A HREF="autoconf.html#IDX130">VERBATIM</A>
+ <LI><A HREF="autoconf.html#IDX998">VERBOSE</A>
+ <LI><A HREF="autoconf.html#IDX1000">VFORK</A>
+ <LI><A HREF="autoconf.html#IDX1002">VPRINTF</A>
+ </DIR>
+ <H2><A NAME="acindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1004">WAIT3</A>
+ <LI><A HREF="autoconf.html#IDX1006">WARN</A>
+ <LI><A HREF="autoconf.html#IDX675">WARNING</A>
+ <LI><A HREF="autoconf.html#IDX777">WITH</A>
+ <LI><A HREF="autoconf.html#IDX1008">WORDS_BIGENDIAN</A>
+ </DIR>
+ <H2><A NAME="acindex_x">x</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1010">XENIX_DIR</A>
+ </DIR>
+ <H2><A NAME="acindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1013">YYTEXT_POINTER</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC188" HREF="autoconf_toc.html#TOC188">M4 Macro Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the M4, M4sugar, and M4sh macros.  To
+ make the list easier to use, the macros are listed without their
+ preceding <SAMP>`m4_'</SAMP> or <SAMP>`AS_'</SAMP>.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#msindex_b">b</A>
+ -
+ <A HREF="#msindex_d">d</A>
+ -
+ <A HREF="#msindex_m">m</A>
+ -
+ <A HREF="#msindex_p">p</A>
+ -
+ <A HREF="#msindex_q">q</A>
+ -
+ <A HREF="#msindex_u">u</A>
+ <P>
+ <H2><A NAME="msindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX652">bpatsubst</A>
+ <LI><A HREF="autoconf.html#IDX656">bregexp</A>
+ </DIR>
+ <H2><A NAME="msindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX642">defn</A>, <A HREF="autoconf.html#IDX654">defn</A>
+ <LI><A HREF="autoconf.html#IDX668">DIRNAME</A>
+ <LI><A HREF="autoconf.html#IDX640">dnl</A>
+ <LI><A HREF="autoconf.html#IDX660">dquote</A>
+ </DIR>
+ <H2><A NAME="msindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX644">m4_exit</A>
+ <LI><A HREF="autoconf.html#IDX648">m4_if</A>
+ <LI><A HREF="autoconf.html#IDX658">m4_wrap</A>
+ </DIR>
+ <H2><A NAME="msindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX666">pattern_allow</A>
+ <LI><A HREF="autoconf.html#IDX664">pattern_forbid</A>
+ </DIR>
+ <H2><A NAME="msindex_q">q</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX662">quote</A>
+ </DIR>
+ <H2><A NAME="msindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX650">undefine</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC189" HREF="autoconf_toc.html#TOC189">Autotest Macro Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the Autotest macros.  To make the list
+ easier to use, the macros are listed without their preceding <SAMP>`AT_'</SAMP>.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#atindex_c">c</A>
+ -
+ <A HREF="#atindex_d">d</A>
+ -
+ <A HREF="#atindex_i">i</A>
+ -
+ <A HREF="#atindex_k">k</A>
+ -
+ <A HREF="#atindex_s">s</A>
+ -
+ <A HREF="#atindex_t">t</A>
+ <P>
+ <H2><A NAME="atindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1031">CHECK</A>
+ <LI><A HREF="autoconf.html#IDX1027">CLEANUP</A>
+ </DIR>
+ <H2><A NAME="atindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1029">DATA</A>
+ </DIR>
+ <H2><A NAME="atindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1019">INIT</A>
+ </DIR>
+ <H2><A NAME="atindex_k">k</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1025">KEYWORDS</A>
+ </DIR>
+ <H2><A NAME="atindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1023">SETUP</A>
+ </DIR>
+ <H2><A NAME="atindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1021">TESTED</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC190" HREF="autoconf_toc.html#TOC190">Program and Function Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the programs and functions which
+ portability is discussed in this document.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#prindex_@">@</A>
+ -
+ <A HREF="#prindex_a">a</A>
+ -
+ <A HREF="#prindex_c">c</A>
+ -
+ <A HREF="#prindex_e">e</A>
+ -
+ <A HREF="#prindex_f">f</A>
+ -
+ <A HREF="#prindex_g">g</A>
+ -
+ <A HREF="#prindex_l">l</A>
+ -
+ <A HREF="#prindex_m">m</A>
+ -
+ <A HREF="#prindex_s">s</A>
+ -
+ <A HREF="#prindex_u">u</A>
+ -
+ <A HREF="#prindex_v">v</A>
+ <P>
+ <H2><A NAME="prindex_@">@</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX714">@command{!}</A>
+ <LI><A HREF="autoconf.html#IDX713">@command{.}</A>
+ <LI><A HREF="autoconf.html#IDX689">@command{/usr/xpg4/bin/sh} on Solaris</A>
+ <LI><A HREF="autoconf.html#IDX729">@command{:}</A>
+ <LI><A HREF="autoconf.html#IDX731">@command{awk}</A>
+ <LI><A HREF="autoconf.html#IDX715">@command{break}</A>
+ <LI><A HREF="autoconf.html#IDX716">@command{case}</A>
+ <LI><A HREF="autoconf.html#IDX732">@command{cat}</A>
+ <LI><A HREF="autoconf.html#IDX733">@command{cmp}</A>
+ <LI><A HREF="autoconf.html#IDX734">@command{cp}</A>
+ <LI><A HREF="autoconf.html#IDX735">@command{date}</A>
+ <LI><A HREF="autoconf.html#IDX736">@command{diff}</A>
+ <LI><A HREF="autoconf.html#IDX737">@command{dirname}</A>
+ <LI><A HREF="autoconf.html#IDX717">@command{echo}</A>
+ <LI><A HREF="autoconf.html#IDX738">@command{egrep}</A>
+ <LI><A HREF="autoconf.html#IDX718">@command{exit}</A>
+ <LI><A HREF="autoconf.html#IDX719">@command{export}</A>
+ <LI><A HREF="autoconf.html#IDX739">@command{expr}</A>, <A HREF="autoconf.html#IDX741">@command{expr}</A>
+ <LI><A HREF="autoconf.html#IDX740">@command{expr} (<SAMP>`|'</SAMP>)</A>
+ <LI><A HREF="autoconf.html#IDX720">@command{false}</A>
+ <LI><A HREF="autoconf.html#IDX721">@command{for}</A>
+ <LI><A HREF="autoconf.html#IDX742">@command{grep}</A>
+ <LI><A HREF="autoconf.html#IDX722">@command{if}</A>
+ <LI><A HREF="autoconf.html#IDX743">@command{ln}</A>
+ <LI><A HREF="autoconf.html#IDX745">@command{mv}</A>
+ <LI><A HREF="autoconf.html#IDX747">@command{sed}</A>
+ <LI><A HREF="autoconf.html#IDX748">@command{sed} (<SAMP>`t'</SAMP>)</A>
+ <LI><A HREF="autoconf.html#IDX723">@command{set}</A>
+ <LI><A HREF="autoconf.html#IDX724">@command{shift}</A>
+ <LI><A HREF="autoconf.html#IDX725">@command{source}</A>
+ <LI><A HREF="autoconf.html#IDX726">@command{test}</A>
+ <LI><A HREF="autoconf.html#IDX749">@command{touch}</A>
+ <LI><A HREF="autoconf.html#IDX727">@command{trap}</A>
+ <LI><A HREF="autoconf.html#IDX728">@command{true}</A>
+ <LI><A HREF="autoconf.html#IDX730">@command{unset}</A>
+ </DIR>
+ <H2><A NAME="prindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX221"><CODE>alloca</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX224"><CODE>chown</CODE></A>
+ <LI><A HREF="autoconf.html#IDX228"><CODE>closedir</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX231"><CODE>error_at_line</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX234"><CODE>fnmatch</CODE></A>
+ <LI><A HREF="autoconf.html#IDX241"><CODE>fork</CODE></A>
+ <LI><A HREF="autoconf.html#IDX246"><CODE>fseeko</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX250"><CODE>getgroups</CODE></A>
+ <LI><A HREF="autoconf.html#IDX266"><CODE>getloadavg</CODE></A>
+ <LI><A HREF="autoconf.html#IDX270"><CODE>getmntent</CODE></A>
+ <LI><A HREF="autoconf.html#IDX274"><CODE>getpgid</CODE></A>
+ <LI><A HREF="autoconf.html#IDX275"><CODE>getpgrp</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX279"><CODE>lstat</CODE></A>, <A HREF="autoconf.html#IDX316"><CODE>lstat</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX282"><CODE>malloc</CODE></A>
+ <LI><A HREF="autoconf.html#IDX286"><CODE>memcmp</CODE></A>
+ <LI><A HREF="autoconf.html#IDX290"><CODE>mktime</CODE></A>
+ <LI><A HREF="autoconf.html#IDX294"><CODE>mmap</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX304"><CODE>select</CODE></A>
+ <LI><A HREF="autoconf.html#IDX308"><CODE>setpgrp</CODE></A>
+ <LI><A HREF="autoconf.html#IDX320"><CODE>setvbuf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX206"><CODE>snprintf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX208"><CODE>sprintf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX210"><CODE>sscanf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX315"><CODE>stat</CODE></A>
+ <LI><A HREF="autoconf.html#IDX324"><CODE>strcoll</CODE></A>
+ <LI><A HREF="autoconf.html#IDX334"><CODE>strerror_r</CODE></A>
+ <LI><A HREF="autoconf.html#IDX338"><CODE>strftime</CODE></A>
+ <LI><A HREF="autoconf.html#IDX211"><CODE>strnlen</CODE></A>, <A HREF="autoconf.html#IDX342"><CODE>strnlen</CODE></A>
+ <LI><A HREF="autoconf.html#IDX328"><CODE>strtod</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX212"><CODE>unlink</CODE></A>
+ <LI><A HREF="autoconf.html#IDX346"><CODE>utime</CODE></A>
+ </DIR>
+ <H2><A NAME="prindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX213"><CODE>va_copy</CODE></A>
+ <LI><A HREF="autoconf.html#IDX214"><CODE>va_list</CODE></A>
+ <LI><A HREF="autoconf.html#IDX242"><CODE>vfork</CODE></A>
+ <LI><A HREF="autoconf.html#IDX351"><CODE>vprintf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX207"><CODE>vsnprintf</CODE></A>
+ <LI><A HREF="autoconf.html#IDX209"><CODE>vsprintf</CODE></A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC191" HREF="autoconf_toc.html#TOC191">Concept Index</A></H2>
+ 
+ <P>
+ This is an alphabetical list of the files, tools, and concepts
+ introduced in this document.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#cindex_"">"</A>
+ -
+ <A HREF="#cindex_$">$</A>
+ -
+ <A HREF="#cindex_@">@</A>
+ -
+ <A HREF="#cindex_`">`</A>
+ -
+ <A HREF="#cindex_a">a</A>
+ -
+ <A HREF="#cindex_b">b</A>
+ -
+ <A HREF="#cindex_c">c</A>
+ -
+ <A HREF="#cindex_d">d</A>
+ -
+ <A HREF="#cindex_e">e</A>
+ -
+ <A HREF="#cindex_f">f</A>
+ -
+ <A HREF="#cindex_h">h</A>
+ -
+ <A HREF="#cindex_i">i</A>
+ -
+ <A HREF="#cindex_l">l</A>
+ -
+ <A HREF="#cindex_m">m</A>
+ -
+ <A HREF="#cindex_o">o</A>
+ -
+ <A HREF="#cindex_p">p</A>
+ -
+ <A HREF="#cindex_q">q</A>
+ -
+ <A HREF="#cindex_r">r</A>
+ -
+ <A HREF="#cindex_s">s</A>
+ -
+ <A HREF="#cindex_t">t</A>
+ -
+ <A HREF="#cindex_u">u</A>
+ -
+ <A HREF="#cindex_v">v</A>
+ -
+ <A HREF="#cindex_z">z</A>
+ <P>
+ <H2><A NAME="cindex_"">"</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX691"><SAMP>`"$@"'</SAMP></A>
+ </DIR>
+ <H2><A NAME="cindex_$">$</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX697">$(<VAR>commands</VAR>)</A>
+ <LI><A HREF="autoconf.html#IDX692">${<VAR>var</VAR>:-<VAR>value</VAR>}</A>
+ <LI><A HREF="autoconf.html#IDX694">${<VAR>var</VAR>=<VAR>expanded-value</VAR>}</A>
+ <LI><A HREF="autoconf.html#IDX693">${<VAR>var</VAR>=<VAR>literal</VAR>}</A>
+ </DIR>
+ <H2><A NAME="cindex_@">@</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX630"><SAMP>`@%:@'</SAMP></A>
+ <LI><A HREF="autoconf.html#IDX631"><SAMP>`@&#38;t@'</SAMP></A>
+ <LI><A HREF="autoconf.html#IDX628"><SAMP>`@:&#62;@'</SAMP></A>
+ <LI><A HREF="autoconf.html#IDX627"><SAMP>`@&#60;:@'</SAMP></A>
+ <LI><A HREF="autoconf.html#IDX10">@command{autoconf}</A>
+ <LI><A HREF="autoconf.html#IDX126">@command{autoheader}</A>
+ <LI><A HREF="autoconf.html#IDX14">@command{autoreconf}</A>
+ <LI><A HREF="autoconf.html#IDX8">@command{autoscan}</A>
+ <LI><A HREF="autoconf.html#IDX806">@command{autoupdate}</A>
+ <LI><A HREF="autoconf.html#IDX790">@command{config.status}</A>
+ <LI><A HREF="autoconf.html#IDX752">@command{config.sub}</A>
+ <LI><A HREF="autoconf.html#IDX4">@command{configure}</A>, <A HREF="autoconf.html#IDX788">@command{configure}</A>
+ <LI><A HREF="autoconf.html#IDX9">@command{ifnames}</A>
+ <LI><A HREF="autoconf.html#IDX1016">@command{testsuite}</A>, <A HREF="autoconf.html#IDX1032">@command{testsuite}</A>
+ <LI><A HREF="autoconf.html#IDX629"><SAMP>`@S|@'</SAMP></A>
+ </DIR>
+ <H2><A NAME="cindex_`">`</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX695">`<VAR>commands</VAR>`</A>
+ </DIR>
+ <H2><A NAME="cindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX803"><TT>`acconfig.h'</TT></A>
+ <LI><A HREF="autoconf.html#IDX3"><TT>`aclocal.m4'</TT></A>
+ <LI><A HREF="autoconf.html#IDX686">Ash</A>
+ <LI><A HREF="autoconf.html#IDX636">Autom4te Library</A>
+ <LI><A HREF="autoconf.html#IDX635"><TT>`autom4te.cache'</TT></A>
+ <LI><A HREF="autoconf.html#IDX637"><TT>`autom4te.cfg'</TT></A>
+ <LI><A HREF="autoconf.html#IDX1">Automake</A>
+ <LI><A HREF="autoconf.html#IDX1015">Autotest</A>
+ <LI><A HREF="autoconf.html#IDX1033"><CODE>AUTOTEST_PATH</CODE></A>
+ </DIR>
+ <H2><A NAME="cindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX12">Back trace</A>, <A HREF="autoconf.html#IDX633">Back trace</A>
+ <LI><A HREF="autoconf.html#IDX687">Bash</A>
+ <LI><A HREF="autoconf.html#IDX688">Bash 2.05 and later</A>
+ </DIR>
+ <H2><A NAME="cindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX604">Cache</A>
+ <LI><A HREF="autoconf.html#IDX609">Cache variable</A>
+ <LI><A HREF="autoconf.html#IDX789">Cache, enabling</A>
+ <LI><A HREF="autoconf.html#IDX696">Command Substitution</A>
+ <LI><A HREF="autoconf.html#IDX120"><TT>`config.h'</TT></A>
+ <LI><A HREF="autoconf.html#IDX805"><TT>`config.h.bot'</TT></A>
+ <LI><A HREF="autoconf.html#IDX125"><TT>`config.h.in'</TT></A>
+ <LI><A HREF="autoconf.html#IDX804"><TT>`config.h.top'</TT></A>
+ <LI><A HREF="autoconf.html#IDX119">Configuration Header</A>
+ <LI><A HREF="autoconf.html#IDX124">Configuration Header Template</A>
+ <LI><A HREF="autoconf.html#IDX6"><TT>`configure.ac'</TT></A>
+ <LI><A HREF="autoconf.html#IDX5"><TT>`configure.in'</TT></A>
+ <LI><A HREF="autoconf.html#IDX37">Copyright Notice</A>
+ </DIR>
+ <H2><A NAME="cindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX399">Declaration, checking</A>
+ <LI><A HREF="autoconf.html#IDX670"><CODE>dnl</CODE></A>, <A HREF="autoconf.html#IDX685"><CODE>dnl</CODE></A>
+ </DIR>
+ <H2><A NAME="cindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX479">Endianness</A>
+ </DIR>
+ <H2><A NAME="cindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1035">FDL, GNU Free Documentation License</A>
+ <LI><A HREF="autoconf.html#IDX196">File, checking</A>
+ <LI><A HREF="autoconf.html#IDX215">Function, checking</A>
+ </DIR>
+ <H2><A NAME="cindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX367">Header, checking</A>
+ </DIR>
+ <H2><A NAME="cindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX156">Includes, default</A>
+ <LI><A HREF="autoconf.html#IDX47">Instantiation</A>
+ </DIR>
+ <H2><A NAME="cindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX584">Language</A>
+ <LI><A HREF="autoconf.html#IDX201">Library, checking</A>
+ <LI><A HREF="autoconf.html#IDX2">Libtool</A>
+ <LI><A HREF="autoconf.html#IDX148">Links</A>
+ </DIR>
+ <H2><A NAME="cindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX638">M4sugar</A>
+ <LI><A HREF="autoconf.html#IDX13">Macro invocation stack</A>, <A HREF="autoconf.html#IDX634">Macro invocation stack</A>
+ <LI><A HREF="autoconf.html#IDX671">Messages, from @command{autoconf}</A>
+ <LI><A HREF="autoconf.html#IDX614">Messages, from @command{configure}</A>
+ <LI><A HREF="autoconf.html#IDX746">Moving open files</A>
+ </DIR>
+ <H2><A NAME="cindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX298">obstack</A>
+ </DIR>
+ <H2><A NAME="cindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1034"><TT>`package.m4'</TT></A>
+ <LI><A HREF="autoconf.html#IDX556">POSIX termios headers</A>
+ <LI><A HREF="autoconf.html#IDX600">Previous Variable</A>
+ <LI><A HREF="autoconf.html#IDX157">Programs, checking</A>
+ </DIR>
+ <H2><A NAME="cindex_q">q</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX583">QNX 4.25</A>
+ <LI><A HREF="autoconf.html#IDX626">quadrigraphs</A>
+ <LI><A HREF="autoconf.html#IDX7">quotation</A>, <A HREF="autoconf.html#IDX625">quotation</A>
+ </DIR>
+ <H2><A NAME="cindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX40">Revision</A>
+ </DIR>
+ <H2><A NAME="cindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX408">Structure, checking</A>
+ <LI><A HREF="autoconf.html#IDX744">Symbolic links</A>
+ </DIR>
+ <H2><A NAME="cindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX557">termios POSIX headers</A>
+ <LI><A HREF="autoconf.html#IDX1017">test group</A>
+ </DIR>
+ <H2><A NAME="cindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX1014"><CODE>undefined macro: _m4_divert_diversion</CODE></A>
+ </DIR>
+ <H2><A NAME="cindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX601">Variable, Precious</A>
+ <LI><A HREF="autoconf.html#IDX34">Version</A>
+ <LI><A HREF="autoconf.html#IDX750"><CODE>VPATH</CODE></A>
+ </DIR>
+ <H2><A NAME="cindex_z">z</A></H2>
+ <DIR>
+ <LI><A HREF="autoconf.html#IDX690">Zsh</A>
+ </DIR>
+ 
+ 
+ <P><HR><P>
+ This document was generated on 10 July 2002 using
+ <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+ </BODY>
+ </HTML>


ossp-adm/autotools/bison.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,7449 ----
+ <HTML>
+ <HEAD>
+ <!-- Created by texi2html 1.56k from bison.texinfo on 4 November 2001 -->
+ 
+ <TITLE>Bison 1.30</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>Bison</H1>
+ <H2>The YACC-compatible Parser Generator</H2>
+ <H2>20 September 2001, Bison Version 1.30</H2>
+ <ADDRESS>by Charles Donnelly and Richard Stallman</ADDRESS>
+ <P>
+ <P><HR><P>
+ 
+ 
+ <H1><A NAME="SEC1" HREF="bison_toc.html#TOC1">Introduction</A></H1>
+ <P>
+ <A NAME="IDX1"></A>
+ 
+ 
+ <P>
+ <EM>Bison</EM> is a general-purpose parser generator that converts a
+ grammar description for an LALR(1) context-free grammar into a C
+ program to parse that grammar.  Once you are proficient with Bison,
+ you may use it to develop a wide range of language parsers, from those
+ used in simple desk calculators to complex programming languages.
+ 
+ 
+ <P>
+ Bison is upward compatible with Yacc: all properly-written Yacc grammars
+ ought to work with Bison with no change.  Anyone familiar with Yacc
+ should be able to use Bison with little trouble.  You need to be fluent in
+ C programming in order to use Bison or to understand this manual.
+ 
+ 
+ <P>
+ We begin with tutorial chapters that explain the basic concepts of using
+ Bison and show three explained examples, each building on the last.  If you
+ don't know Bison or Yacc, start by reading these chapters.  Reference
+ chapters follow which describe specific aspects of Bison in detail.
+ 
+ 
+ <P>
+ Bison was written primarily by Robert Corbett; Richard Stallman made it
+ Yacc-compatible.  Wilfred Hansen of Carnegie Mellon University added
+ multi-character string literals and other features.
+ 
+ 
+ <P>
+ This edition corresponds to version 1.30 of Bison.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC2" HREF="bison_toc.html#TOC2">Conditions for Using Bison</A></H1>
+ 
+ <P>
+ As of Bison version 1.24, we have changed the distribution terms for
+ <CODE>yyparse</CODE> to permit using Bison's output in nonfree programs.
+ Formerly, Bison parsers could be used only in programs that were free
+ software.
+ 
+ 
+ <P>
+ The other GNU programming tools, such as the GNU C compiler, have never
+ had such a requirement.  They could always be used for nonfree
+ software.  The reason Bison was different was not due to a special
+ policy decision; it resulted from applying the usual General Public
+ License to all of the Bison source code.
+ 
+ 
+ <P>
+ The output of the Bison utility--the Bison parser file--contains a
+ verbatim copy of a sizable piece of Bison, which is the code for the
+ <CODE>yyparse</CODE> function.  (The actions from your grammar are inserted
+ into this function at one point, but the rest of the function is not
+ changed.)  When we applied the GPL terms to the code for <CODE>yyparse</CODE>,
+ the effect was to restrict the use of Bison output to free software.
+ 
+ 
+ <P>
+ We didn't change the terms because of sympathy for people who want to
+ make software proprietary.  <STRONG>Software should be free.</STRONG>  But we
+ concluded that limiting Bison's use to free software was doing little to
+ encourage people to make other software free.  So we decided to make the
+ practical conditions for using Bison match the practical conditions for
+ using the other GNU tools.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC3" HREF="bison_toc.html#TOC3">GNU GENERAL PUBLIC LICENSE</A></H1>
+ <P>
+ Version 2, June 1991
+ 
+ 
+ 
+ <PRE>
+ 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.
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC4" HREF="bison_toc.html#TOC4">Preamble</A></H2>
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   The precise terms and conditions for copying, distribution and
+ modification follow.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC5" HREF="bison_toc.html#TOC5">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2>
+ 
+ 
+ <OL>
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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:
+ 
+ 
+ <OL>
+ <LI>
+ 
+ You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.)
+ </OL>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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:
+ 
+ 
+ <OL>
+ <LI>
+ 
+ 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,
+ 
+ <LI>
+ 
+ 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,
+ 
+ <LI>
+ 
+ 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.)
+ </OL>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ 
+ 
+ 
+ <P><STRONG>NO WARRANTY</STRONG>
+ 
+ <LI>
+ 
+ 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.
+ 
+ <LI>
+ 
+ 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.
+ </OL>
+ 
+ 
+ <H2>END OF TERMS AND CONDITIONS</H2>
+ 
+ 
+ 
+ <H2><A NAME="SEC6" HREF="bison_toc.html#TOC6">Appendix: How to Apply These Terms to Your New Programs</A></H2>
+ 
+ <P>
+   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.
+ 
+ 
+ <P>
+   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.
+ 
+ 
+ 
+ <PRE>
+ <VAR>one line to give the program's name and a brief idea of what it does.</VAR>
+ Copyright (C) <VAR>yyyy</VAR>  <VAR>name of author</VAR>
+ 
+ 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.
+ </PRE>
+ 
+ <P>
+ Also add information on how to contact you by electronic and paper mail.
+ 
+ 
+ <P>
+ If the program is interactive, make it output a short notice like this
+ when it starts in an interactive mode:
+ 
+ 
+ 
+ <PRE>
+ Gnomovision version 69, Copyright (C) 19<VAR>yy</VAR> <VAR>name of author</VAR>
+ 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.
+ </PRE>
+ 
+ <P>
+ The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show
+ the appropriate parts of the General Public License.  Of course, the
+ commands you use may be called something other than <SAMP>`show w'</SAMP> and
+ <SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever
+ suits your program.
+ 
+ 
+ <P>
+ 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:
+ 
+ 
+ 
+ <PRE>
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+ 
+ <VAR>signature of Ty Coon</VAR>, 1 April 1989
+ Ty Coon, President of Vice
+ </PRE>
+ 
+ <P>
+ 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.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC7" HREF="bison_toc.html#TOC7">The Concepts of Bison</A></H1>
+ 
+ <P>
+ This chapter introduces many of the basic concepts without which the
+ details of Bison will not make sense.  If you do not already know how to
+ use Bison or Yacc, we suggest you start by reading this chapter carefully.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC8" HREF="bison_toc.html#TOC8">Languages and Context-Free Grammars</A></H2>
+ 
+ <P>
+ <A NAME="IDX2"></A>
+ <A NAME="IDX3"></A>
+ In order for Bison to parse a language, it must be described by a
+ <EM>context-free grammar</EM>.  This means that you specify one or more
+ <EM>syntactic groupings</EM> and give rules for constructing them from their
+ parts.  For example, in the C language, one kind of grouping is called an
+ `expression'.  One rule for making an expression might be, "An expression
+ can be made of a minus sign and another expression".  Another would be,
+ "An expression can be an integer".  As you can see, rules are often
+ recursive, but there must be at least one rule which leads out of the
+ recursion.
+ 
+ 
+ <P>
+ <A NAME="IDX4"></A>
+ <A NAME="IDX5"></A>
+ The most common formal system for presenting such rules for humans to read
+ is <EM>Backus-Naur Form</EM> or "BNF", which was developed in order to
+ specify the language Algol 60.  Any grammar expressed in BNF is a
+ context-free grammar.  The input to Bison is essentially machine-readable
+ BNF.
+ 
+ 
+ <P>
+ Not all context-free languages can be handled by Bison, only those
+ that are LALR(1).  In brief, this means that it must be possible to
+ tell how to parse any portion of an input string with just a single
+ token of look-ahead.  Strictly speaking, that is a description of an
+ LR(1) grammar, and LALR(1) involves additional restrictions that are
+ hard to explain simply; but it is rare in actual practice to find an
+ LR(1) grammar that fails to be LALR(1).  See section <A HREF="bison.html#SEC88">Mysterious Reduce/Reduce Conflicts</A>, for more information on this.
+ 
+ 
+ <P>
+ <A NAME="IDX6"></A>
+ <A NAME="IDX7"></A>
+ <A NAME="IDX8"></A>
+ <A NAME="IDX9"></A>
+ In the formal grammatical rules for a language, each kind of syntactic unit
+ or grouping is named by a <EM>symbol</EM>.  Those which are built by grouping
+ smaller constructs according to grammatical rules are called
+ <EM>nonterminal symbols</EM>; those which can't be subdivided are called
+ <EM>terminal symbols</EM> or <EM>token types</EM>.  We call a piece of input
+ corresponding to a single terminal symbol a <EM>token</EM>, and a piece
+ corresponding to a single nonterminal symbol a <EM>grouping</EM>.
+ 
+ <P>
+ We can use the C language as an example of what symbols, terminal and
+ nonterminal, mean.  The tokens of C are identifiers, constants (numeric and
+ string), and the various keywords, arithmetic operators and punctuation
+ marks.  So the terminal symbols of a grammar for C include `identifier',
+ `number', `string', plus one symbol for each keyword, operator or
+ punctuation mark: `if', `return', `const', `static', `int', `char',
+ `plus-sign', `open-brace', `close-brace', `comma' and many more.  (These
+ tokens can be subdivided into characters, but that is a matter of
+ lexicography, not grammar.)
+ 
+ 
+ <P>
+ Here is a simple C function subdivided into tokens:
+ 
+ 
+ 
+ <PRE>
+ int             /* keyword `int' */
+ square (x)      /* identifier, open-paren, */
+                 /* identifier, close-paren */
+      int x;     /* keyword `int', identifier, semicolon */
+ {               /* open-brace */
+   return x * x; /* keyword `return', identifier, */
+                 /* asterisk, identifier, semicolon */
+ }               /* close-brace */
+ </PRE>
+ 
+ <P>
+ The syntactic groupings of C include the expression, the statement, the
+ declaration, and the function definition.  These are represented in the
+ grammar of C by nonterminal symbols `expression', `statement',
+ `declaration' and `function definition'.  The full grammar uses dozens of
+ additional language constructs, each with its own nonterminal symbol, in
+ order to express the meanings of these four.  The example above is a
+ function definition; it contains one declaration, and one statement.  In
+ the statement, each <SAMP>`x'</SAMP> is an expression and so is <SAMP>`x * x'</SAMP>.
+ 
+ 
+ <P>
+ Each nonterminal symbol must have grammatical rules showing how it is made
+ out of simpler constructs.  For example, one kind of C statement is the
+ <CODE>return</CODE> statement; this would be described with a grammar rule which
+ reads informally as follows:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ A `statement' can be made of a `return' keyword, an `expression' and a
+ `semicolon'.
+ </BLOCKQUOTE>
+ 
+ <P>
+ There would be many other rules for `statement', one for each kind of
+ statement in C.
+ 
+ 
+ <P>
+ <A NAME="IDX10"></A>
+ One nonterminal symbol must be distinguished as the special one which
+ defines a complete utterance in the language.  It is called the <EM>start
+ symbol</EM>.  In a compiler, this means a complete input program.  In the C
+ language, the nonterminal symbol `sequence of definitions and declarations'
+ plays this role.
+ 
+ 
+ <P>
+ For example, <SAMP>`1 + 2'</SAMP> is a valid C expression--a valid part of a C
+ program--but it is not valid as an <EM>entire</EM> C program.  In the
+ context-free grammar of C, this follows from the fact that `expression' is
+ not the start symbol.
+ 
+ 
+ <P>
+ The Bison parser reads a sequence of tokens as its input, and groups the
+ tokens using the grammar rules.  If the input is valid, the end result is
+ that the entire token sequence reduces to a single grouping whose symbol is
+ the grammar's start symbol.  If we use a grammar for C, the entire input
+ must be a `sequence of definitions and declarations'.  If not, the parser
+ reports a syntax error.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC9" HREF="bison_toc.html#TOC9">From Formal Rules to Bison Input</A></H2>
+ <P>
+ <A NAME="IDX11"></A>
+ <A NAME="IDX12"></A>
+ <A NAME="IDX13"></A>
+ 
+ 
+ <P>
+ A formal grammar is a mathematical construct.  To define the language
+ for Bison, you must write a file expressing the grammar in Bison syntax:
+ a <EM>Bison grammar</EM> file.  See section <A HREF="bison.html#SEC39">Bison Grammar Files</A>.
+ 
+ 
+ <P>
+ A nonterminal symbol in the formal grammar is represented in Bison input
+ as an identifier, like an identifier in C.  By convention, it should be
+ in lower case, such as <CODE>expr</CODE>, <CODE>stmt</CODE> or <CODE>declaration</CODE>.
+ 
+ 
+ <P>
+ The Bison representation for a terminal symbol is also called a <EM>token
+ type</EM>.  Token types as well can be represented as C-like identifiers.  By
+ convention, these identifiers should be upper case to distinguish them from
+ nonterminals: for example, <CODE>INTEGER</CODE>, <CODE>IDENTIFIER</CODE>, <CODE>IF</CODE> or
+ <CODE>RETURN</CODE>.  A terminal symbol that stands for a particular keyword in
+ the language should be named after that keyword converted to upper case.
+ The terminal symbol <CODE>error</CODE> is reserved for error recovery.
+ See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ 
+ <P>
+ A terminal symbol can also be represented as a character literal, just like
+ a C character constant.  You should do this whenever a token is just a
+ single character (parenthesis, plus-sign, etc.): use that same character in
+ a literal as the terminal symbol for that token.
+ 
+ 
+ <P>
+ A third way to represent a terminal symbol is with a C string constant
+ containing several characters.  See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>, for more information.
+ 
+ 
+ <P>
+ The grammar rules also have an expression in Bison syntax.  For example,
+ here is the Bison rule for a C <CODE>return</CODE> statement.  The semicolon in
+ quotes is a literal character token, representing part of the C syntax for
+ the statement; the naked semicolon, and the colon, are Bison punctuation
+ used in every rule.
+ 
+ 
+ 
+ <PRE>
+ stmt:   RETURN expr ';'
+         ;
+ </PRE>
+ 
+ <P>
+ See section <A HREF="bison.html#SEC46">Syntax of Grammar Rules</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC10" HREF="bison_toc.html#TOC10">Semantic Values</A></H2>
+ <P>
+ <A NAME="IDX14"></A>
+ <A NAME="IDX15"></A>
+ 
+ 
+ <P>
+ A formal grammar selects tokens only by their classifications: for example,
+ if a rule mentions the terminal symbol `integer constant', it means that
+ <EM>any</EM> integer constant is grammatically valid in that position.  The
+ precise value of the constant is irrelevant to how to parse the input: if
+ <SAMP>`x+4'</SAMP> is grammatical then <SAMP>`x+1'</SAMP> or <SAMP>`x+3989'</SAMP> is equally
+ grammatical.
+ 
+ <P>
+ But the precise value is very important for what the input means once it is
+ parsed.  A compiler is useless if it fails to distinguish between 4, 1 and
+ 3989 as constants in the program!  Therefore, each token in a Bison grammar
+ has both a token type and a <EM>semantic value</EM>.  See section <A HREF="bison.html#SEC48">Defining Language Semantics</A>,
+ for details.
+ 
+ 
+ <P>
+ The token type is a terminal symbol defined in the grammar, such as
+ <CODE>INTEGER</CODE>, <CODE>IDENTIFIER</CODE> or <CODE>','</CODE>.  It tells everything
+ you need to know to decide where the token may validly appear and how to
+ group it with other tokens.  The grammar rules know nothing about tokens
+ except their types.
+ 
+ <P>
+ The semantic value has all the rest of the information about the
+ meaning of the token, such as the value of an integer, or the name of an
+ identifier.  (A token such as <CODE>','</CODE> which is just punctuation doesn't
+ need to have any semantic value.)
+ 
+ 
+ <P>
+ For example, an input token might be classified as token type
+ <CODE>INTEGER</CODE> and have the semantic value 4.  Another input token might
+ have the same token type <CODE>INTEGER</CODE> but value 3989.  When a grammar
+ rule says that <CODE>INTEGER</CODE> is allowed, either of these tokens is
+ acceptable because each is an <CODE>INTEGER</CODE>.  When the parser accepts the
+ token, it keeps track of the token's semantic value.
+ 
+ 
+ <P>
+ Each grouping can also have a semantic value as well as its nonterminal
+ symbol.  For example, in a calculator, an expression typically has a
+ semantic value that is a number.  In a compiler for a programming
+ language, an expression typically has a semantic value that is a tree
+ structure describing the meaning of the expression.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC11" HREF="bison_toc.html#TOC11">Semantic Actions</A></H2>
+ <P>
+ <A NAME="IDX16"></A>
+ <A NAME="IDX17"></A>
+ 
+ 
+ <P>
+ In order to be useful, a program must do more than parse input; it must
+ also produce some output based on the input.  In a Bison grammar, a grammar
+ rule can have an <EM>action</EM> made up of C statements.  Each time the
+ parser recognizes a match for that rule, the action is executed.
+ See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ 
+ <P>
+ Most of the time, the purpose of an action is to compute the semantic value
+ of the whole construct from the semantic values of its parts.  For example,
+ suppose we have a rule which says an expression can be the sum of two
+ expressions.  When the parser recognizes such a sum, each of the
+ subexpressions has a semantic value which describes how it was built up.
+ The action for this rule should create a similar sort of value for the
+ newly recognized larger expression.
+ 
+ 
+ <P>
+ For example, here is a rule that says an expression can be the sum of
+ two subexpressions:
+ 
+ 
+ 
+ <PRE>
+ expr: expr '+' expr   { $$ = $1 + $3; }
+         ;
+ </PRE>
+ 
+ <P>
+ The action says how to produce the semantic value of the sum expression
+ from the values of the two subexpressions.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC12" HREF="bison_toc.html#TOC12">Locations</A></H2>
+ <P>
+ <A NAME="IDX18"></A>
+ <A NAME="IDX19"></A>
+ <A NAME="IDX20"></A>
+ 
+ 
+ <P>
+ Many applications, like interpreters or compilers, have to produce verbose
+ and useful error messages. To achieve this, one must be able to keep track of
+ the <EM>textual position</EM>, or <EM>location</EM>, of each syntactic construct.
+ Bison provides a mechanism for handling these locations.
+ 
+ 
+ <P>
+ Each token has a semantic value. In a similar fashion, each token has an
+ associated location, but the type of locations is the same for all tokens and
+ groupings. Moreover, the output parser is equipped with a default data
+ structure for storing locations (see section <A HREF="bison.html#SEC54">Tracking Locations</A>, for more details).
+ 
+ 
+ <P>
+ Like semantic values, locations can be reached in actions using a dedicated
+ set of constructs. In the example above, the location of the whole grouping
+ is <CODE>@$</CODE>, while the locations of the subexpressions are <CODE>@1</CODE> and
+ <CODE>@3</CODE>.
+ 
+ 
+ <P>
+ When a rule is matched, a default action is used to compute the semantic value
+ of its left hand side (see section <A HREF="bison.html#SEC51">Actions</A>). In the same way, another default
+ action is used for locations. However, the action for locations is general
+ enough for most cases, meaning there is usually no need to describe for each
+ rule how <CODE>@$</CODE> should be formed. When building a new location for a given
+ grouping, the default behavior of the output parser is to take the beginning
+ of the first symbol, and the end of the last symbol.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC13" HREF="bison_toc.html#TOC13">Bison Output: the Parser File</A></H2>
+ <P>
+ <A NAME="IDX21"></A>
+ <A NAME="IDX22"></A>
+ <A NAME="IDX23"></A>
+ <A NAME="IDX24"></A>
+ 
+ 
+ <P>
+ When you run Bison, you give it a Bison grammar file as input.  The output
+ is a C source file that parses the language described by the grammar.
+ This file is called a <EM>Bison parser</EM>.  Keep in mind that the Bison
+ utility and the Bison parser are two distinct programs: the Bison utility
+ is a program whose output is the Bison parser that becomes part of your
+ program.
+ 
+ 
+ <P>
+ The job of the Bison parser is to group tokens into groupings according to
+ the grammar rules--for example, to build identifiers and operators into
+ expressions.  As it does this, it runs the actions for the grammar rules it
+ uses.
+ 
+ 
+ <P>
+ The tokens come from a function called the <EM>lexical analyzer</EM> that you
+ must supply in some fashion (such as by writing it in C).  The Bison parser
+ calls the lexical analyzer each time it wants a new token.  It doesn't know
+ what is "inside" the tokens (though their semantic values may reflect
+ this).  Typically the lexical analyzer makes the tokens by parsing
+ characters of text, but Bison does not depend on this.  See section <A HREF="bison.html#SEC70">The Lexical Analyzer Function <CODE>yylex</CODE></A>.
+ 
+ 
+ <P>
+ The Bison parser file is C code which defines a function named
+ <CODE>yyparse</CODE> which implements that grammar.  This function does not make
+ a complete C program: you must supply some additional functions.  One is
+ the lexical analyzer.  Another is an error-reporting function which the
+ parser calls to report an error.  In addition, a complete C program must
+ start with a function called <CODE>main</CODE>; you have to provide this, and
+ arrange for it to call <CODE>yyparse</CODE> or the parser will never run.
+ See section <A HREF="bison.html#SEC68">Parser C-Language Interface</A>.
+ 
+ 
+ <P>
+ Aside from the token type names and the symbols in the actions you
+ write, all variable and function names used in the Bison parser file
+ begin with <SAMP>`yy'</SAMP> or <SAMP>`YY'</SAMP>.  This includes interface functions
+ such as the lexical analyzer function <CODE>yylex</CODE>, the error reporting
+ function <CODE>yyerror</CODE> and the parser function <CODE>yyparse</CODE> itself.
+ This also includes numerous identifiers used for internal purposes.
+ Therefore, you should avoid using C identifiers starting with <SAMP>`yy'</SAMP>
+ or <SAMP>`YY'</SAMP> in the Bison grammar file except for the ones defined in
+ this manual.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC14" HREF="bison_toc.html#TOC14">Stages in Using Bison</A></H2>
+ <P>
+ <A NAME="IDX25"></A>
+ <A NAME="IDX26"></A>
+ 
+ 
+ <P>
+ The actual language-design process using Bison, from grammar specification
+ to a working compiler or interpreter, has these parts:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Formally specify the grammar in a form recognized by Bison
+ (see section <A HREF="bison.html#SEC39">Bison Grammar Files</A>).  For each grammatical rule in the language,
+ describe the action that is to be taken when an instance of that rule
+ is recognized.  The action is described by a sequence of C statements.
+ 
+ <LI>
+ 
+ Write a lexical analyzer to process input and pass tokens to the
+ parser.  The lexical analyzer may be written by hand in C
+ (see section <A HREF="bison.html#SEC70">The Lexical Analyzer Function <CODE>yylex</CODE></A>).  It could also be produced using Lex, but the use
+ of Lex is not discussed in this manual.
+ 
+ <LI>
+ 
+ Write a controlling function that calls the Bison-produced parser.
+ 
+ <LI>
+ 
+ Write error-reporting routines.
+ </OL>
+ 
+ <P>
+ To turn this source code as written into a runnable program, you
+ must follow these steps:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Run Bison on the grammar to produce the parser.
+ 
+ <LI>
+ 
+ Compile the code output by Bison, as well as any other source files.
+ 
+ <LI>
+ 
+ Link the object files to produce the finished product.
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC15" HREF="bison_toc.html#TOC15">The Overall Layout of a Bison Grammar</A></H2>
+ <P>
+ <A NAME="IDX27"></A>
+ <A NAME="IDX28"></A>
+ <A NAME="IDX29"></A>
+ <A NAME="IDX30"></A>
+ 
+ 
+ <P>
+ The input file for the Bison utility is a <EM>Bison grammar file</EM>.  The
+ general form of a Bison grammar file is as follows:
+ 
+ 
+ 
+ <PRE>
+ %{
+ <VAR>C declarations</VAR>
+ %}
+ 
+ <VAR>Bison declarations</VAR>
+ 
+ %%
+ <VAR>Grammar rules</VAR>
+ %%
+ <VAR>Additional C code</VAR>
+ </PRE>
+ 
+ <P>
+ The <SAMP>`%%'</SAMP>, <SAMP>`%{'</SAMP> and <SAMP>`%}'</SAMP> are punctuation that appears
+ in every Bison grammar file to separate the sections.
+ 
+ 
+ <P>
+ The C declarations may define types and variables used in the actions.
+ You can also use preprocessor commands to define macros used there, and use
+ <CODE>#include</CODE> to include header files that do any of these things.
+ 
+ 
+ <P>
+ The Bison declarations declare the names of the terminal and nonterminal
+ symbols, and may also describe operator precedence and the data types of
+ semantic values of various symbols.
+ 
+ 
+ <P>
+ The grammar rules define how to construct each nonterminal symbol from its
+ parts.
+ 
+ 
+ <P>
+ The additional C code can contain any C code you want to use.  Often the
+ definition of the lexical analyzer <CODE>yylex</CODE> goes here, plus subroutines
+ called by the actions in the grammar rules.  In a simple program, all the
+ rest of the program can go here.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC16" HREF="bison_toc.html#TOC16">Examples</A></H1>
+ <P>
+ <A NAME="IDX31"></A>
+ <A NAME="IDX32"></A>
+ 
+ 
+ <P>
+ Now we show and explain three sample programs written using Bison: a
+ reverse polish notation calculator, an algebraic (infix) notation
+ calculator, and a multi-function calculator.  All three have been tested
+ under BSD Unix 4.3; each produces a usable, though limited, interactive
+ desk-top calculator.
+ 
+ 
+ <P>
+ These examples are simple, but Bison grammars for real programming
+ languages are written the same way.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC17" HREF="bison_toc.html#TOC17">Reverse Polish Notation Calculator</A></H2>
+ <P>
+ <A NAME="IDX33"></A>
+ <A NAME="IDX34"></A>
+ <A NAME="IDX35"></A>
+ <A NAME="IDX36"></A>
+ 
+ 
+ <P>
+ The first example is that of a simple double-precision <EM>reverse polish
+ notation</EM> calculator (a calculator using postfix operators).  This example
+ provides a good starting point, since operator precedence is not an issue.
+ The second example will illustrate how operator precedence is handled.
+ 
+ 
+ <P>
+ The source code for this calculator is named <TT>`rpcalc.y'</TT>.  The
+ <SAMP>`.y'</SAMP> extension is a convention used for Bison input files.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC18" HREF="bison_toc.html#TOC18">Declarations for <CODE>rpcalc</CODE></A></H3>
+ 
+ <P>
+ Here are the C and Bison declarations for the reverse polish notation
+ calculator.  As in C, comments are placed between <SAMP>`/*...*/'</SAMP>.
+ 
+ 
+ 
+ <PRE>
+ /* Reverse polish notation calculator. */
+ 
+ %{
+ #define YYSTYPE double
+ #include &#60;math.h&#62;
+ %}
+ 
+ %token NUM
+ 
+ %% /* Grammar rules and actions follow */
+ </PRE>
+ 
+ <P>
+ The C declarations section (see section <A HREF="bison.html#SEC41">The C Declarations Section</A>) contains two
+ preprocessor directives.
+ 
+ 
+ <P>
+ The <CODE>#define</CODE> directive defines the macro <CODE>YYSTYPE</CODE>, thus
+ specifying the C data type for semantic values of both tokens and groupings
+ (see section <A HREF="bison.html#SEC49">Data Types of Semantic Values</A>).  The Bison parser will use whatever type
+ <CODE>YYSTYPE</CODE> is defined as; if you don't define it, <CODE>int</CODE> is the
+ default.  Because we specify <CODE>double</CODE>, each token and each expression
+ has an associated value, which is a floating point number.
+ 
+ 
+ <P>
+ The <CODE>#include</CODE> directive is used to declare the exponentiation
+ function <CODE>pow</CODE>.
+ 
+ 
+ <P>
+ The second section, Bison declarations, provides information to Bison about
+ the token types (see section <A HREF="bison.html#SEC42">The Bison Declarations Section</A>).  Each terminal symbol that is
+ not a single-character literal must be declared here.  (Single-character
+ literals normally don't need to be declared.)  In this example, all the
+ arithmetic operators are designated by single-character literals, so the
+ only terminal symbol that needs to be declared is <CODE>NUM</CODE>, the token
+ type for numeric constants.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC19" HREF="bison_toc.html#TOC19">Grammar Rules for <CODE>rpcalc</CODE></A></H3>
+ 
+ <P>
+ Here are the grammar rules for the reverse polish notation calculator.
+ 
+ 
+ 
+ <PRE>
+ input:    /* empty */
+         | input line
+ ;
+ 
+ line:     '\n'
+         | exp '\n'  { printf ("\t%.10g\n", $1); }
+ ;
+ 
+ exp:      NUM             { $$ = $1;         }
+         | exp exp '+'     { $$ = $1 + $2;    }
+         | exp exp '-'     { $$ = $1 - $2;    }
+         | exp exp '*'     { $$ = $1 * $2;    }
+         | exp exp '/'     { $$ = $1 / $2;    }
+       /* Exponentiation */
+         | exp exp '^'     { $$ = pow ($1, $2); }
+       /* Unary minus    */
+         | exp 'n'         { $$ = -$1;        }
+ ;
+ %%
+ </PRE>
+ 
+ <P>
+ The groupings of the rpcalc "language" defined here are the expression
+ (given the name <CODE>exp</CODE>), the line of input (<CODE>line</CODE>), and the
+ complete input transcript (<CODE>input</CODE>).  Each of these nonterminal
+ symbols has several alternate rules, joined by the <SAMP>`|'</SAMP> punctuator
+ which is read as "or".  The following sections explain what these rules
+ mean.
+ 
+ 
+ <P>
+ The semantics of the language is determined by the actions taken when a
+ grouping is recognized.  The actions are the C code that appears inside
+ braces.  See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ 
+ <P>
+ You must specify these actions in C, but Bison provides the means for
+ passing semantic values between the rules.  In each action, the
+ pseudo-variable <CODE>$$</CODE> stands for the semantic value for the grouping
+ that the rule is going to construct.  Assigning a value to <CODE>$$</CODE> is the
+ main job of most actions.  The semantic values of the components of the
+ rule are referred to as <CODE>$1</CODE>, <CODE>$2</CODE>, and so on.
+ 
+ 
+ 
+ 
+ <H4><A NAME="SEC20" HREF="bison_toc.html#TOC20">Explanation of <CODE>input</CODE></A></H4>
+ 
+ <P>
+ Consider the definition of <CODE>input</CODE>:
+ 
+ 
+ 
+ <PRE>
+ input:    /* empty */
+         | input line
+ ;
+ </PRE>
+ 
+ <P>
+ This definition reads as follows: "A complete input is either an empty
+ string, or a complete input followed by an input line".  Notice that
+ "complete input" is defined in terms of itself.  This definition is said
+ to be <EM>left recursive</EM> since <CODE>input</CODE> appears always as the
+ leftmost symbol in the sequence.  See section <A HREF="bison.html#SEC47">Recursive Rules</A>.
+ 
+ 
+ <P>
+ The first alternative is empty because there are no symbols between the
+ colon and the first <SAMP>`|'</SAMP>; this means that <CODE>input</CODE> can match an
+ empty string of input (no tokens).  We write the rules this way because it
+ is legitimate to type <KBD>Ctrl-d</KBD> right after you start the calculator.
+ It's conventional to put an empty alternative first and write the comment
+ <SAMP>`/* empty */'</SAMP> in it.
+ 
+ 
+ <P>
+ The second alternate rule (<CODE>input line</CODE>) handles all nontrivial input.
+ It means, "After reading any number of lines, read one more line if
+ possible."  The left recursion makes this rule into a loop.  Since the
+ first alternative matches empty input, the loop can be executed zero or
+ more times.
+ 
+ 
+ <P>
+ The parser function <CODE>yyparse</CODE> continues to process input until a
+ grammatical error is seen or the lexical analyzer says there are no more
+ input tokens; we will arrange for the latter to happen at end of file.
+ 
+ 
+ 
+ 
+ <H4><A NAME="SEC21" HREF="bison_toc.html#TOC21">Explanation of <CODE>line</CODE></A></H4>
+ 
+ <P>
+ Now consider the definition of <CODE>line</CODE>:
+ 
+ 
+ 
+ <PRE>
+ line:     '\n'
+         | exp '\n'  { printf ("\t%.10g\n", $1); }
+ ;
+ </PRE>
+ 
+ <P>
+ The first alternative is a token which is a newline character; this means
+ that rpcalc accepts a blank line (and ignores it, since there is no
+ action).  The second alternative is an expression followed by a newline.
+ This is the alternative that makes rpcalc useful.  The semantic value of
+ the <CODE>exp</CODE> grouping is the value of <CODE>$1</CODE> because the <CODE>exp</CODE> in
+ question is the first symbol in the alternative.  The action prints this
+ value, which is the result of the computation the user asked for.
+ 
+ 
+ <P>
+ This action is unusual because it does not assign a value to <CODE>$$</CODE>.  As
+ a consequence, the semantic value associated with the <CODE>line</CODE> is
+ uninitialized (its value will be unpredictable).  This would be a bug if
+ that value were ever used, but we don't use it: once rpcalc has printed the
+ value of the user's input line, that value is no longer needed.
+ 
+ 
+ 
+ 
+ <H4><A NAME="SEC22" HREF="bison_toc.html#TOC22">Explanation of <CODE>expr</CODE></A></H4>
+ 
+ <P>
+ The <CODE>exp</CODE> grouping has several rules, one for each kind of expression.
+ The first rule handles the simplest expressions: those that are just numbers.
+ The second handles an addition-expression, which looks like two expressions
+ followed by a plus-sign.  The third handles subtraction, and so on.
+ 
+ 
+ 
+ <PRE>
+ exp:      NUM
+         | exp exp '+'     { $$ = $1 + $2;    }
+         | exp exp '-'     { $$ = $1 - $2;    }
+         ...
+         ;
+ </PRE>
+ 
+ <P>
+ We have used <SAMP>`|'</SAMP> to join all the rules for <CODE>exp</CODE>, but we could
+ equally well have written them separately:
+ 
+ 
+ 
+ <PRE>
+ exp:      NUM ;
+ exp:      exp exp '+'     { $$ = $1 + $2;    } ;
+ exp:      exp exp '-'     { $$ = $1 - $2;    } ;
+         ...
+ </PRE>
+ 
+ <P>
+ Most of the rules have actions that compute the value of the expression in
+ terms of the value of its parts.  For example, in the rule for addition,
+ <CODE>$1</CODE> refers to the first component <CODE>exp</CODE> and <CODE>$2</CODE> refers to
+ the second one.  The third component, <CODE>'+'</CODE>, has no meaningful
+ associated semantic value, but if it had one you could refer to it as
+ <CODE>$3</CODE>.  When <CODE>yyparse</CODE> recognizes a sum expression using this
+ rule, the sum of the two subexpressions' values is produced as the value of
+ the entire expression.  See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ 
+ <P>
+ You don't have to give an action for every rule.  When a rule has no
+ action, Bison by default copies the value of <CODE>$1</CODE> into <CODE>$$</CODE>.
+ This is what happens in the first rule (the one that uses <CODE>NUM</CODE>).
+ 
+ 
+ <P>
+ The formatting shown here is the recommended convention, but Bison does
+ not require it.  You can add or change whitespace as much as you wish.
+ For example, this:
+ 
+ 
+ 
+ <PRE>
+ exp   : NUM | exp exp '+' {$$ = $1 + $2; } | ...
+ </PRE>
+ 
+ <P>
+ means the same thing as this:
+ 
+ 
+ 
+ <PRE>
+ exp:      NUM
+         | exp exp '+'    { $$ = $1 + $2; }
+         | ...
+ </PRE>
+ 
+ <P>
+ The latter, however, is much more readable.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC23" HREF="bison_toc.html#TOC23">The <CODE>rpcalc</CODE> Lexical Analyzer</A></H3>
+ <P>
+ <A NAME="IDX37"></A>
+ <A NAME="IDX38"></A>
+ 
+ 
+ <P>
+ The lexical analyzer's job is low-level parsing: converting characters or
+ sequences of characters into tokens.  The Bison parser gets its tokens by
+ calling the lexical analyzer.  See section <A HREF="bison.html#SEC70">The Lexical Analyzer Function <CODE>yylex</CODE></A>.
+ 
+ 
+ <P>
+ Only a simple lexical analyzer is needed for the RPN calculator.  This
+ lexical analyzer skips blanks and tabs, then reads in numbers as
+ <CODE>double</CODE> and returns them as <CODE>NUM</CODE> tokens.  Any other character
+ that isn't part of a number is a separate token.  Note that the token-code
+ for such a single-character token is the character itself.
+ 
+ 
+ <P>
+ The return value of the lexical analyzer function is a numeric code which
+ represents a token type.  The same text used in Bison rules to stand for
+ this token type is also a C expression for the numeric code for the type.
+ This works in two ways.  If the token type is a character literal, then its
+ numeric code is the ASCII code for that character; you can use the same
+ character literal in the lexical analyzer to express the number.  If the
+ token type is an identifier, that identifier is defined by Bison as a C
+ macro whose definition is the appropriate number.  In this example,
+ therefore, <CODE>NUM</CODE> becomes a macro for <CODE>yylex</CODE> to use.
+ 
+ 
+ <P>
+ The semantic value of the token (if it has one) is stored into the global
+ variable <CODE>yylval</CODE>, which is where the Bison parser will look for it.
+ (The C data type of <CODE>yylval</CODE> is <CODE>YYSTYPE</CODE>, which was defined
+ at the beginning of the grammar; see section <A HREF="bison.html#SEC18">Declarations for <CODE>rpcalc</CODE></A>.)
+ 
+ 
+ <P>
+ A token type code of zero is returned if the end-of-file is encountered.
+ (Bison recognizes any nonpositive value as indicating the end of the
+ input.)
+ 
+ 
+ <P>
+ Here is the code for the lexical analyzer:
+ 
+ 
+ 
+ <PRE>
+ /* Lexical analyzer returns a double floating point
+    number on the stack and the token NUM, or the ASCII
+    character read if not a number.  Skips all blanks
+    and tabs, returns 0 for EOF. */
+ 
+ #include &#60;ctype.h&#62;
+ 
+ int
+ yylex (void)
+ {
+   int c;
+ 
+   /* skip white space  */
+   while ((c = getchar ()) == ' ' || c == '\t')
+     ;
+   /* process numbers   */
+   if (c == '.' || isdigit (c))
+     {
+       ungetc (c, stdin);
+       scanf ("%lf", &#38;yylval);
+       return NUM;
+     }
+   /* return end-of-file  */
+   if (c == EOF)
+     return 0;
+   /* return single chars */
+   return c;
+ }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC24" HREF="bison_toc.html#TOC24">The Controlling Function</A></H3>
+ <P>
+ <A NAME="IDX39"></A>
+ <A NAME="IDX40"></A>
+ 
+ 
+ <P>
+ In keeping with the spirit of this example, the controlling function is
+ kept to the bare minimum.  The only requirement is that it call
+ <CODE>yyparse</CODE> to start the process of parsing.
+ 
+ 
+ 
+ <PRE>
+ int
+ main (void)
+ {
+   return yyparse ();
+ }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC25" HREF="bison_toc.html#TOC25">The Error Reporting Routine</A></H3>
+ <P>
+ <A NAME="IDX41"></A>
+ 
+ 
+ <P>
+ When <CODE>yyparse</CODE> detects a syntax error, it calls the error reporting
+ function <CODE>yyerror</CODE> to print an error message (usually but not
+ always <CODE>"parse error"</CODE>).  It is up to the programmer to supply
+ <CODE>yyerror</CODE> (see section <A HREF="bison.html#SEC68">Parser C-Language Interface</A>), so
+ here is the definition we will use:
+ 
+ 
+ 
+ <PRE>
+ #include &#60;stdio.h&#62;
+ 
+ void
+ yyerror (const char *s)  /* Called by yyparse on error */
+ {
+   printf ("%s\n", s);
+ }
+ </PRE>
+ 
+ <P>
+ After <CODE>yyerror</CODE> returns, the Bison parser may recover from the error
+ and continue parsing if the grammar contains a suitable error rule
+ (see section <A HREF="bison.html#SEC90">Error Recovery</A>).  Otherwise, <CODE>yyparse</CODE> returns nonzero.  We
+ have not written any error rules in this example, so any invalid input will
+ cause the calculator program to exit.  This is not clean behavior for a
+ real calculator, but it is adequate for the first example.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC26" HREF="bison_toc.html#TOC26">Running Bison to Make the Parser</A></H3>
+ <P>
+ <A NAME="IDX42"></A>
+ 
+ 
+ <P>
+ Before running Bison to produce a parser, we need to decide how to
+ arrange all the source code in one or more source files.  For such a
+ simple example, the easiest thing is to put everything in one file.  The
+ definitions of <CODE>yylex</CODE>, <CODE>yyerror</CODE> and <CODE>main</CODE> go at the
+ end, in the "additional C code" section of the file (see section <A HREF="bison.html#SEC15">The Overall Layout of a Bison Grammar</A>).
+ 
+ 
+ <P>
+ For a large project, you would probably have several source files, and use
+ <CODE>make</CODE> to arrange to recompile them.
+ 
+ 
+ <P>
+ With all the source in a single file, you use the following command to
+ convert it into a parser file:
+ 
+ 
+ 
+ <PRE>
+ bison <VAR>file_name</VAR>.y
+ </PRE>
+ 
+ <P>
+ In this example the file was called <TT>`rpcalc.y'</TT> (for "Reverse Polish
+ CALCulator").  Bison produces a file named <TT>`<VAR>file_name</VAR>.tab.c'</TT>,
+ removing the <SAMP>`.y'</SAMP> from the original file name. The file output by
+ Bison contains the source code for <CODE>yyparse</CODE>.  The additional
+ functions in the input file (<CODE>yylex</CODE>, <CODE>yyerror</CODE> and <CODE>main</CODE>)
+ are copied verbatim to the output.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC27" HREF="bison_toc.html#TOC27">Compiling the Parser File</A></H3>
+ <P>
+ <A NAME="IDX43"></A>
+ 
+ 
+ <P>
+ Here is how to compile and run the parser file:
+ 
+ 
+ 
+ <PRE>
+ # List files in current directory.
+ % ls
+ rpcalc.tab.c  rpcalc.y
+ 
+ # Compile the Bison parser.
+ # <SAMP>`-lm'</SAMP> tells compiler to search math library for <CODE>pow</CODE>.
+ % cc rpcalc.tab.c -lm -o rpcalc
+ 
+ # List files again.
+ % ls
+ rpcalc  rpcalc.tab.c  rpcalc.y
+ </PRE>
+ 
+ <P>
+ The file <TT>`rpcalc'</TT> now contains the executable code.  Here is an
+ example session using <CODE>rpcalc</CODE>.
+ 
+ 
+ 
+ <PRE>
+ % rpcalc
+ 4 9 +
+ 13
+ 3 7 + 3 4 5 *+-
+ -13
+ 3 7 + 3 4 5 * + - n              Note the unary minus, <SAMP>`n'</SAMP>
+ 13
+ 5 6 / 4 n +
+ -3.166666667
+ 3 4 ^                            Exponentiation
+ 81
+ ^D                               End-of-file indicator
+ %
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC28" HREF="bison_toc.html#TOC28">Infix Notation Calculator: <CODE>calc</CODE></A></H2>
+ <P>
+ <A NAME="IDX44"></A>
+ <A NAME="IDX45"></A>
+ <A NAME="IDX46"></A>
+ 
+ 
+ <P>
+ We now modify rpcalc to handle infix operators instead of postfix.  Infix
+ notation involves the concept of operator precedence and the need for
+ parentheses nested to arbitrary depth.  Here is the Bison code for
+ <TT>`calc.y'</TT>, an infix desk-top calculator.
+ 
+ 
+ 
+ <PRE>
+ /* Infix notation calculator--calc */
+ 
+ %{
+ #define YYSTYPE double
+ #include &#60;math.h&#62;
+ %}
+ 
+ /* BISON Declarations */
+ %token NUM
+ %left '-' '+'
+ %left '*' '/'
+ %left NEG     /* negation--unary minus */
+ %right '^'    /* exponentiation        */
+ 
+ /* Grammar follows */
+ %%
+ input:    /* empty string */
+         | input line
+ ;
+ 
+ line:     '\n'
+         | exp '\n'  { printf ("\t%.10g\n", $1); }
+ ;
+ 
+ exp:      NUM                { $$ = $1;         }
+         | exp '+' exp        { $$ = $1 + $3;    }
+         | exp '-' exp        { $$ = $1 - $3;    }
+         | exp '*' exp        { $$ = $1 * $3;    }
+         | exp '/' exp        { $$ = $1 / $3;    }
+         | '-' exp  %prec NEG { $$ = -$2;        }
+         | exp '^' exp        { $$ = pow ($1, $3); }
+         | '(' exp ')'        { $$ = $2;         }
+ ;
+ %%
+ </PRE>
+ 
+ <P>
+ The functions <CODE>yylex</CODE>, <CODE>yyerror</CODE> and <CODE>main</CODE> can be the
+ same as before.
+ 
+ 
+ <P>
+ There are two important new features shown in this code.
+ 
+ 
+ <P>
+ In the second section (Bison declarations), <CODE>%left</CODE> declares token
+ types and says they are left-associative operators.  The declarations
+ <CODE>%left</CODE> and <CODE>%right</CODE> (right associativity) take the place of
+ <CODE>%token</CODE> which is used to declare a token type name without
+ associativity.  (These tokens are single-character literals, which
+ ordinarily don't need to be declared.  We declare them here to specify
+ the associativity.)
+ 
+ 
+ <P>
+ Operator precedence is determined by the line ordering of the
+ declarations; the higher the line number of the declaration (lower on
+ the page or screen), the higher the precedence.  Hence, exponentiation
+ has the highest precedence, unary minus (<CODE>NEG</CODE>) is next, followed
+ by <SAMP>`*'</SAMP> and <SAMP>`/'</SAMP>, and so on.  See section <A HREF="bison.html#SEC80">Operator Precedence</A>.
+ 
+ 
+ <P>
+ The other important new feature is the <CODE>%prec</CODE> in the grammar section
+ for the unary minus operator.  The <CODE>%prec</CODE> simply instructs Bison that
+ the rule <SAMP>`| '-' exp'</SAMP> has the same precedence as <CODE>NEG</CODE>---in this
+ case the next-to-highest.  See section <A HREF="bison.html#SEC85">Context-Dependent Precedence</A>.
+ 
+ 
+ <P>
+ Here is a sample run of <TT>`calc.y'</TT>:
+ 
+ 
+ 
+ <PRE>
+ % calc
+ 4 + 4.5 - (34/(8*3+-3))
+ 6.880952381
+ -56 + 2
+ -54
+ 3 ^ 2
+ 9
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC29" HREF="bison_toc.html#TOC29">Simple Error Recovery</A></H2>
+ <P>
+ <A NAME="IDX47"></A>
+ 
+ 
+ <P>
+ Up to this point, this manual has not addressed the issue of <EM>error
+ recovery</EM>---how to continue parsing after the parser detects a syntax
+ error.  All we have handled is error reporting with <CODE>yyerror</CODE>.
+ Recall that by default <CODE>yyparse</CODE> returns after calling
+ <CODE>yyerror</CODE>.  This means that an erroneous input line causes the
+ calculator program to exit.  Now we show how to rectify this deficiency.
+ 
+ 
+ <P>
+ The Bison language itself includes the reserved word <CODE>error</CODE>, which
+ may be included in the grammar rules.  In the example below it has
+ been added to one of the alternatives for <CODE>line</CODE>:
+ 
+ 
+ 
+ <PRE>
+ line:     '\n'
+         | exp '\n'   { printf ("\t%.10g\n", $1); }
+         | error '\n' { yyerrok;                  }
+ ;
+ </PRE>
+ 
+ <P>
+ This addition to the grammar allows for simple error recovery in the
+ event of a parse error.  If an expression that cannot be evaluated is
+ read, the error will be recognized by the third rule for <CODE>line</CODE>,
+ and parsing will continue.  (The <CODE>yyerror</CODE> function is still called
+ upon to print its message as well.)  The action executes the statement
+ <CODE>yyerrok</CODE>, a macro defined automatically by Bison; its meaning is
+ that error recovery is complete (see section <A HREF="bison.html#SEC90">Error Recovery</A>).  Note the
+ difference between <CODE>yyerrok</CODE> and <CODE>yyerror</CODE>; neither one is a
+ misprint.
+ 
+ <P>
+ This form of error recovery deals with syntax errors.  There are other
+ kinds of errors; for example, division by zero, which raises an exception
+ signal that is normally fatal.  A real calculator program must handle this
+ signal and use <CODE>longjmp</CODE> to return to <CODE>main</CODE> and resume parsing
+ input lines; it would also have to discard the rest of the current line of
+ input.  We won't discuss this issue further because it is not specific to
+ Bison programs.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC30" HREF="bison_toc.html#TOC30">Location Tracking Calculator: <CODE>ltcalc</CODE></A></H2>
+ <P>
+ <A NAME="IDX48"></A>
+ <A NAME="IDX49"></A>
+ <A NAME="IDX50"></A>
+ 
+ 
+ <P>
+ This example extends the infix notation calculator with location tracking.
+ This feature will be used to improve error reporting, and provide better
+ error messages.
+ 
+ 
+ <P>
+ For the sake of clarity, we will switch for this example to an integer
+ calculator, since most of the work needed to use locations will be done
+ in the lexical analyser.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC31" HREF="bison_toc.html#TOC31">Declarations for <CODE>ltcalc</CODE></A></H3>
+ 
+ <P>
+ The C and Bison declarations for the location tracking calculator are the same
+ as the declarations for the infix notation calculator.
+ 
+ 
+ 
+ <PRE>
+ /* Location tracking calculator.  */
+ 
+ %{
+ #define YYSTYPE int
+ #include &#60;math.h&#62;
+ %}
+ 
+ /* Bison declarations.  */
+ %token NUM
+ 
+ %left '-' '+'
+ %left '*' '/'
+ %left NEG
+ %right '^'
+ 
+ %% /* Grammar follows */
+ </PRE>
+ 
+ <P>
+ In the code above, there are no declarations specific to locations.  Defining
+ a data type for storing locations is not needed: we will use the type provided
+ by default (see section <A HREF="bison.html#SEC55">Data Type of Locations</A>), which is a four
+ member structure with the following integer fields: <CODE>first_line</CODE>,
+ <CODE>first_column</CODE>, <CODE>last_line</CODE> and <CODE>last_column</CODE>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC32" HREF="bison_toc.html#TOC32">Grammar Rules for <CODE>ltcalc</CODE></A></H3>
+ 
+ <P>
+ Whether you choose to handle locations or not has no effect on the syntax of
+ your language.  Therefore, grammar rules for this example will be very close to
+ those of the previous example: we will only modify them to benefit from the new
+ informations we will have.
+ 
+ 
+ <P>
+ Here, we will use locations to report divisions by zero, and locate the wrong
+ expressions or subexpressions.
+ 
+ 
+ 
+ <PRE>
+ input   : /* empty */
+         | input line
+ ;
+ 
+ line    : '\n'
+         | exp '\n' { printf ("%d\n", $1); }
+ ;
+ 
+ exp     : NUM           { $$ = $1; }
+         | exp '+' exp   { $$ = $1 + $3; }
+         | exp '-' exp   { $$ = $1 - $3; }
+         | exp '*' exp   { $$ = $1 * $3; }
+         | exp '/' exp
+             {
+               if ($3)
+                 $$ = $1 / $3;
+               else
+                 {
+                   $$ = 1;
+                   printf("Division by zero, l%d,c%d-l%d,c%d",
+                          @3.first_line, @3.first_column,
+                          @3.last_line, @3.last_column);
+                 }
+             }
+         | '-' exp %preg NEG     { $$ = -$2; }
+         | exp '^' exp           { $$ = pow ($1, $3); }
+         | '(' exp ')'           { $$ = $2; }
+ </PRE>
+ 
+ <P>
+ This code shows how to reach locations inside of semantic actions, by
+ using the pseudo-variables <CODE>@<VAR>n</VAR></CODE> for rule components, and the
+ pseudo-variable <CODE>@$</CODE> for groupings.
+ 
+ 
+ <P>
+ In this example, we never assign a value to <CODE>@$</CODE>, because the
+ output parser can do this automatically.  By default, before executing
+ the C code of each action, <CODE>@$</CODE> is set to range from the beginning
+ of <CODE>@1</CODE> to the end of <CODE>@<VAR>n</VAR></CODE>, for a rule with <VAR>n</VAR>
+ components.
+ 
+ 
+ <P>
+ Of course, this behavior can be redefined (see section <A HREF="bison.html#SEC57">Default Action for Locations</A>), and for very specific rules,
+ <CODE>@$</CODE> can be computed by hand.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC33" HREF="bison_toc.html#TOC33">The <CODE>ltcalc</CODE> Lexical Analyzer.</A></H3>
+ 
+ <P>
+ Until now, we relied on Bison's defaults to enable location tracking. The next
+ step is to rewrite the lexical analyser, and make it able to feed the parser
+ with locations of tokens, as he already does for semantic values.
+ 
+ 
+ <P>
+ To do so, we must take into account every single character of the input text,
+ to avoid the computed locations of being fuzzy or wrong:
+ 
+ 
+ 
+ <PRE>
+ int
+ yylex (void)
+ {
+   int c;
+ 
+   /* skip white space */
+   while ((c = getchar ()) == ' ' || c == '\t')
+     ++yylloc.last_column;
+ 
+   /* step */
+   yylloc.first_line = yylloc.last_line;
+   yylloc.first_column = yylloc.last_column;
+ 
+   /* process numbers */
+   if (isdigit (c))
+     {
+       yylval = c - '0';
+       ++yylloc.last_column;
+       while (isdigit (c = getchar ()))
+         {
+           ++yylloc.last_column;
+           yylval = yylval * 10 + c - '0';
+         }
+       ungetc (c, stdin);
+       return NUM;
+     }
+ 
+   /* return end-of-file */
+   if (c == EOF)
+     return 0;
+ 
+   /* return single chars and update location */
+   if (c == '\n')
+     {
+       ++yylloc.last_line;
+       yylloc.last_column = 0;
+     }
+   else
+     ++yylloc.last_column;
+   return c;
+ }
+ </PRE>
+ 
+ <P>
+ Basically, the lexical analyzer does the same processing as before: it skips
+ blanks and tabs, and reads numbers or single-character tokens.  In addition
+ to this, it updates the <CODE>yylloc</CODE> global variable (of type <CODE>YYLTYPE</CODE>),
+ where the location of tokens is stored.
+ 
+ 
+ <P>
+ Now, each time this function returns a token, the parser has it's number as
+ well as it's semantic value, and it's position in the text. The last needed
+ change is to initialize <CODE>yylloc</CODE>, for example in the controlling
+ function:
+ 
+ 
+ 
+ <PRE>
+ int
+ main (void)
+ {
+   yylloc.first_line = yylloc.last_line = 1;
+   yylloc.first_column = yylloc.last_column = 0;
+   return yyparse ();
+ }
+ </PRE>
+ 
+ <P>
+ Remember that computing locations is not a matter of syntax.  Every character
+ must be associated to a location update, whether it is in valid input, in
+ comments, in literal strings, and so on...
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC34" HREF="bison_toc.html#TOC34">Multi-Function Calculator: <CODE>mfcalc</CODE></A></H2>
+ <P>
+ <A NAME="IDX51"></A>
+ <A NAME="IDX52"></A>
+ <A NAME="IDX53"></A>
+ 
+ 
+ <P>
+ Now that the basics of Bison have been discussed, it is time to move on to
+ a more advanced problem.  The above calculators provided only five
+ functions, <SAMP>`+'</SAMP>, <SAMP>`-'</SAMP>, <SAMP>`*'</SAMP>, <SAMP>`/'</SAMP> and <SAMP>`^'</SAMP>.  It would
+ be nice to have a calculator that provides other mathematical functions such
+ as <CODE>sin</CODE>, <CODE>cos</CODE>, etc.
+ 
+ 
+ <P>
+ It is easy to add new operators to the infix calculator as long as they are
+ only single-character literals.  The lexical analyzer <CODE>yylex</CODE> passes
+ back all nonnumber characters as tokens, so new grammar rules suffice for
+ adding a new operator.  But we want something more flexible: built-in
+ functions whose syntax has this form:
+ 
+ 
+ 
+ <PRE>
+ <VAR>function_name</VAR> (<VAR>argument</VAR>)
+ </PRE>
+ 
+ <P>
+ At the same time, we will add memory to the calculator, by allowing you
+ to create named variables, store values in them, and use them later.
+ Here is a sample session with the multi-function calculator:
+ 
+ 
+ 
+ <PRE>
+ % mfcalc
+ pi = 3.141592653589
+ 3.1415926536
+ sin(pi)
+ 0.0000000000
+ alpha = beta1 = 2.3
+ 2.3000000000
+ alpha
+ 2.3000000000
+ ln(alpha)
+ 0.8329091229
+ exp(ln(beta1))
+ 2.3000000000
+ %
+ </PRE>
+ 
+ <P>
+ Note that multiple assignment and nested function calls are permitted.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC35" HREF="bison_toc.html#TOC35">Declarations for <CODE>mfcalc</CODE></A></H3>
+ 
+ <P>
+ Here are the C and Bison declarations for the multi-function calculator.
+ 
+ 
+ 
+ <PRE>
+ %{
+ #include &#60;math.h&#62;  /* For math functions, cos(), sin(), etc. */
+ #include "calc.h"  /* Contains definition of `symrec'        */
+ %}
+ %union {
+ double     val;  /* For returning numbers.                   */
+ symrec  *tptr;   /* For returning symbol-table pointers      */
+ }
+ 
+ %token &#60;val&#62;  NUM        /* Simple double precision number   */
+ %token &#60;tptr&#62; VAR FNCT   /* Variable and Function            */
+ %type  &#60;val&#62;  exp
+ 
+ %right '='
+ %left '-' '+'
+ %left '*' '/'
+ %left NEG     /* Negation--unary minus */
+ %right '^'    /* Exponentiation        */
+ 
+ /* Grammar follows */
+ 
+ %%
+ </PRE>
+ 
+ <P>
+ The above grammar introduces only two new features of the Bison language.
+ These features allow semantic values to have various data types
+ (see section <A HREF="bison.html#SEC50">More Than One Value Type</A>).
+ 
+ 
+ <P>
+ The <CODE>%union</CODE> declaration specifies the entire list of possible types;
+ this is instead of defining <CODE>YYSTYPE</CODE>.  The allowable types are now
+ double-floats (for <CODE>exp</CODE> and <CODE>NUM</CODE>) and pointers to entries in
+ the symbol table.  See section <A HREF="bison.html#SEC61">The Collection of Value Types</A>.
+ 
+ 
+ <P>
+ Since values can now have various types, it is necessary to associate a
+ type with each grammar symbol whose semantic value is used.  These symbols
+ are <CODE>NUM</CODE>, <CODE>VAR</CODE>, <CODE>FNCT</CODE>, and <CODE>exp</CODE>.  Their
+ declarations are augmented with information about their data type (placed
+ between angle brackets).
+ 
+ 
+ <P>
+ The Bison construct <CODE>%type</CODE> is used for declaring nonterminal symbols,
+ just as <CODE>%token</CODE> is used for declaring token types.  We have not used
+ <CODE>%type</CODE> before because nonterminal symbols are normally declared
+ implicitly by the rules that define them.  But <CODE>exp</CODE> must be declared
+ explicitly so we can specify its value type.  See section <A HREF="bison.html#SEC62">Nonterminal Symbols</A>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC36" HREF="bison_toc.html#TOC36">Grammar Rules for <CODE>mfcalc</CODE></A></H3>
+ 
+ <P>
+ Here are the grammar rules for the multi-function calculator.
+ Most of them are copied directly from <CODE>calc</CODE>; three rules,
+ those which mention <CODE>VAR</CODE> or <CODE>FNCT</CODE>, are new.
+ 
+ 
+ 
+ <PRE>
+ input:   /* empty */
+         | input line
+ ;
+ 
+ line:
+           '\n'
+         | exp '\n'   { printf ("\t%.10g\n", $1); }
+         | error '\n' { yyerrok;                  }
+ ;
+ 
+ exp:      NUM                { $$ = $1;                         }
+         | VAR                { $$ = $1-&#62;value.var;              }
+         | VAR '=' exp        { $$ = $3; $1-&#62;value.var = $3;     }
+         | FNCT '(' exp ')'   { $$ = (*($1-&#62;value.fnctptr))($3); }
+         | exp '+' exp        { $$ = $1 + $3;                    }
+         | exp '-' exp        { $$ = $1 - $3;                    }
+         | exp '*' exp        { $$ = $1 * $3;                    }
+         | exp '/' exp        { $$ = $1 / $3;                    }
+         | '-' exp  %prec NEG { $$ = -$2;                        }
+         | exp '^' exp        { $$ = pow ($1, $3);               }
+         | '(' exp ')'        { $$ = $2;                         }
+ ;
+ /* End of grammar */
+ %%
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC37" HREF="bison_toc.html#TOC37">The <CODE>mfcalc</CODE> Symbol Table</A></H3>
+ <P>
+ <A NAME="IDX54"></A>
+ 
+ 
+ <P>
+ The multi-function calculator requires a symbol table to keep track of the
+ names and meanings of variables and functions.  This doesn't affect the
+ grammar rules (except for the actions) or the Bison declarations, but it
+ requires some additional C functions for support.
+ 
+ 
+ <P>
+ The symbol table itself consists of a linked list of records.  Its
+ definition, which is kept in the header <TT>`calc.h'</TT>, is as follows.  It
+ provides for either functions or variables to be placed in the table.
+ 
+ 
+ 
+ <PRE>
+ /* Fonctions type.                                   */
+ typedef double (*func_t) (double);
+ 
+ /* Data type for links in the chain of symbols.      */
+ struct symrec
+ {
+   char *name;  /* name of symbol                     */
+   int type;    /* type of symbol: either VAR or FNCT */
+   union
+   {
+     double var;                  /* value of a VAR   */
+     func_t fnctptr;              /* value of a FNCT  */
+   } value;
+   struct symrec *next;    /* link field              */
+ };
+ 
+ typedef struct symrec symrec;
+ 
+ /* The symbol table: a chain of `struct symrec'.     */
+ extern symrec *sym_table;
+ 
+ symrec *putsym (const char *, func_t);
+ symrec *getsym (const char *);
+ </PRE>
+ 
+ <P>
+ The new version of <CODE>main</CODE> includes a call to <CODE>init_table</CODE>, a
+ function that initializes the symbol table.  Here it is, and
+ <CODE>init_table</CODE> as well:
+ 
+ 
+ 
+ <PRE>
+ #include &#60;stdio.h&#62;
+ 
+ int
+ main (void)
+ {
+   init_table ();
+   return yyparse ();
+ }
+ 
+ void
+ yyerror (const char *s)  /* Called by yyparse on error */
+ {
+   printf ("%s\n", s);
+ }
+ 
+ struct init
+ {
+   char *fname;
+   double (*fnct)(double);
+ };
+ 
+ struct init arith_fncts[] =
+ {
+   "sin",  sin,
+   "cos",  cos,
+   "atan", atan,
+   "ln",   log,
+   "exp",  exp,
+   "sqrt", sqrt,
+   0, 0
+ };
+ 
+ /* The symbol table: a chain of `struct symrec'.  */
+ symrec *sym_table = (symrec *) 0;
+ 
+ /* Put arithmetic functions in table. */
+ void
+ init_table (void)
+ {
+   int i;
+   symrec *ptr;
+   for (i = 0; arith_fncts[i].fname != 0; i++)
+     {
+       ptr = putsym (arith_fncts[i].fname, FNCT);
+       ptr-&#62;value.fnctptr = arith_fncts[i].fnct;
+     }
+ }
+ </PRE>
+ 
+ <P>
+ By simply editing the initialization list and adding the necessary include
+ files, you can add additional functions to the calculator.
+ 
+ 
+ <P>
+ Two important functions allow look-up and installation of symbols in the
+ symbol table.  The function <CODE>putsym</CODE> is passed a name and the type
+ (<CODE>VAR</CODE> or <CODE>FNCT</CODE>) of the object to be installed.  The object is
+ linked to the front of the list, and a pointer to the object is returned.
+ The function <CODE>getsym</CODE> is passed the name of the symbol to look up.  If
+ found, a pointer to that symbol is returned; otherwise zero is returned.
+ 
+ 
+ 
+ <PRE>
+ symrec *
+ putsym (char *sym_name, int sym_type)
+ {
+   symrec *ptr;
+   ptr = (symrec *) malloc (sizeof (symrec));
+   ptr-&#62;name = (char *) malloc (strlen (sym_name) + 1);
+   strcpy (ptr-&#62;name,sym_name);
+   ptr-&#62;type = sym_type;
+   ptr-&#62;value.var = 0; /* set value to 0 even if fctn.  */
+   ptr-&#62;next = (struct symrec *)sym_table;
+   sym_table = ptr;
+   return ptr;
+ }
+ 
+ symrec *
+ getsym (const char *sym_name)
+ {
+   symrec *ptr;
+   for (ptr = sym_table; ptr != (symrec *) 0;
+        ptr = (symrec *)ptr-&#62;next)
+     if (strcmp (ptr-&#62;name,sym_name) == 0)
+       return ptr;
+   return 0;
+ }
+ </PRE>
+ 
+ <P>
+ The function <CODE>yylex</CODE> must now recognize variables, numeric values, and
+ the single-character arithmetic operators.  Strings of alphanumeric
+ characters with a leading non-digit are recognized as either variables or
+ functions depending on what the symbol table says about them.
+ 
+ 
+ <P>
+ The string is passed to <CODE>getsym</CODE> for look up in the symbol table.  If
+ the name appears in the table, a pointer to its location and its type
+ (<CODE>VAR</CODE> or <CODE>FNCT</CODE>) is returned to <CODE>yyparse</CODE>.  If it is not
+ already in the table, then it is installed as a <CODE>VAR</CODE> using
+ <CODE>putsym</CODE>.  Again, a pointer and its type (which must be <CODE>VAR</CODE>) is
+ returned to <CODE>yyparse</CODE>.
+ 
+ <P>
+ No change is needed in the handling of numeric values and arithmetic
+ operators in <CODE>yylex</CODE>.
+ 
+ 
+ 
+ <PRE>
+ #include &#60;ctype.h&#62;
+ 
+ int
+ yylex (void)
+ {
+   int c;
+ 
+   /* Ignore whitespace, get first nonwhite character.  */
+   while ((c = getchar ()) == ' ' || c == '\t');
+ 
+   if (c == EOF)
+     return 0;
+ 
+   /* Char starts a number =&#62; parse the number.         */
+   if (c == '.' || isdigit (c))
+     {
+       ungetc (c, stdin);
+       scanf ("%lf", &#38;yylval.val);
+       return NUM;
+     }
+ 
+   /* Char starts an identifier =&#62; read the name.       */
+   if (isalpha (c))
+     {
+       symrec *s;
+       static char *symbuf = 0;
+       static int length = 0;
+       int i;
+ 
+       /* Initially make the buffer long enough
+          for a 40-character symbol name.  */
+       if (length == 0)
+         length = 40, symbuf = (char *)malloc (length + 1);
+ 
+       i = 0;
+       do
+         {
+           /* If buffer is full, make it bigger.        */
+           if (i == length)
+             {
+               length *= 2;
+               symbuf = (char *)realloc (symbuf, length + 1);
+             }
+           /* Add this character to the buffer.         */
+           symbuf[i++] = c;
+           /* Get another character.                    */
+           c = getchar ();
+         }
+       while (c != EOF &#38;&#38; isalnum (c));
+ 
+       ungetc (c, stdin);
+       symbuf[i] = '\0';
+ 
+       s = getsym (symbuf);
+       if (s == 0)
+         s = putsym (symbuf, VAR);
+       yylval.tptr = s;
+       return s-&#62;type;
+     }
+ 
+   /* Any other character is a token by itself.        */
+   return c;
+ }
+ </PRE>
+ 
+ <P>
+ This program is both powerful and flexible. You may easily add new
+ functions, and it is a simple job to modify this code to install predefined
+ variables such as <CODE>pi</CODE> or <CODE>e</CODE> as well.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC38" HREF="bison_toc.html#TOC38">Exercises</A></H2>
+ <P>
+ <A NAME="IDX55"></A>
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Add some new functions from <TT>`math.h'</TT> to the initialization list.
+ 
+ <LI>
+ 
+ Add another array that contains constants and their values.  Then
+ modify <CODE>init_table</CODE> to add these constants to the symbol table.
+ It will be easiest to give the constants type <CODE>VAR</CODE>.
+ 
+ <LI>
+ 
+ Make the program report an error if the user refers to an
+ uninitialized variable in any way except to store a value in it.
+ </OL>
+ 
+ 
+ 
+ <H1><A NAME="SEC39" HREF="bison_toc.html#TOC39">Bison Grammar Files</A></H1>
+ 
+ <P>
+ Bison takes as input a context-free grammar specification and produces a
+ C-language function that recognizes correct instances of the grammar.
+ 
+ 
+ <P>
+ The Bison grammar input file conventionally has a name ending in <SAMP>`.y'</SAMP>.
+ See section <A HREF="bison.html#SEC96">Invoking Bison</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC40" HREF="bison_toc.html#TOC40">Outline of a Bison Grammar</A></H2>
+ 
+ <P>
+ A Bison grammar file has four main sections, shown here with the
+ appropriate delimiters:
+ 
+ 
+ 
+ <PRE>
+ %{
+ <VAR>C declarations</VAR>
+ %}
+ 
+ <VAR>Bison declarations</VAR>
+ 
+ %%
+ <VAR>Grammar rules</VAR>
+ %%
+ 
+ <VAR>Additional C code</VAR>
+ </PRE>
+ 
+ <P>
+ Comments enclosed in <SAMP>`/* ... */'</SAMP> may appear in any of the sections.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC41" HREF="bison_toc.html#TOC41">The C Declarations Section</A></H3>
+ <P>
+ <A NAME="IDX56"></A>
+ <A NAME="IDX57"></A>
+ 
+ 
+ <P>
+ The <VAR>C declarations</VAR> section contains macro definitions and
+ declarations of functions and variables that are used in the actions in the
+ grammar rules.  These are copied to the beginning of the parser file so
+ that they precede the definition of <CODE>yyparse</CODE>.  You can use
+ <SAMP>`#include'</SAMP> to get the declarations from a header file.  If you don't
+ need any C declarations, you may omit the <SAMP>`%{'</SAMP> and <SAMP>`%}'</SAMP>
+ delimiters that bracket this section.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC42" HREF="bison_toc.html#TOC42">The Bison Declarations Section</A></H3>
+ <P>
+ <A NAME="IDX58"></A>
+ <A NAME="IDX59"></A>
+ 
+ 
+ <P>
+ The <VAR>Bison declarations</VAR> section contains declarations that define
+ terminal and nonterminal symbols, specify precedence, and so on.
+ In some simple grammars you may not need any declarations.
+ See section <A HREF="bison.html#SEC58">Bison Declarations</A>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC43" HREF="bison_toc.html#TOC43">The Grammar Rules Section</A></H3>
+ <P>
+ <A NAME="IDX60"></A>
+ <A NAME="IDX61"></A>
+ 
+ 
+ <P>
+ The <EM>grammar rules</EM> section contains one or more Bison grammar
+ rules, and nothing else.  See section <A HREF="bison.html#SEC46">Syntax of Grammar Rules</A>.
+ 
+ 
+ <P>
+ There must always be at least one grammar rule, and the first
+ <SAMP>`%%'</SAMP> (which precedes the grammar rules) may never be omitted even
+ if it is the first thing in the file.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC44" HREF="bison_toc.html#TOC44">The Additional C Code Section</A></H3>
+ <P>
+ <A NAME="IDX62"></A>
+ <A NAME="IDX63"></A>
+ 
+ 
+ <P>
+ The <VAR>additional C code</VAR> section is copied verbatim to the end of the
+ parser file, just as the <VAR>C declarations</VAR> section is copied to the
+ beginning.  This is the most convenient place to put anything that you
+ want to have in the parser file but which need not come before the
+ definition of <CODE>yyparse</CODE>.  For example, the definitions of
+ <CODE>yylex</CODE> and <CODE>yyerror</CODE> often go here.  See section <A HREF="bison.html#SEC68">Parser C-Language Interface</A>.
+ 
+ 
+ <P>
+ If the last section is empty, you may omit the <SAMP>`%%'</SAMP> that separates it
+ from the grammar rules.
+ 
+ 
+ <P>
+ The Bison parser itself contains many static variables whose names start
+ with <SAMP>`yy'</SAMP> and many macros whose names start with <SAMP>`YY'</SAMP>.  It is a
+ good idea to avoid using any such names (except those documented in this
+ manual) in the additional C code section of the grammar file.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC45" HREF="bison_toc.html#TOC45">Symbols, Terminal and Nonterminal</A></H2>
+ <P>
+ <A NAME="IDX64"></A>
+ <A NAME="IDX65"></A>
+ <A NAME="IDX66"></A>
+ <A NAME="IDX67"></A>
+ 
+ 
+ <P>
+ <EM>Symbols</EM> in Bison grammars represent the grammatical classifications
+ of the language.
+ 
+ 
+ <P>
+ A <EM>terminal symbol</EM> (also known as a <EM>token type</EM>) represents a
+ class of syntactically equivalent tokens.  You use the symbol in grammar
+ rules to mean that a token in that class is allowed.  The symbol is
+ represented in the Bison parser by a numeric code, and the <CODE>yylex</CODE>
+ function returns a token type code to indicate what kind of token has been
+ read.  You don't need to know what the code value is; you can use the
+ symbol to stand for it.
+ 
+ 
+ <P>
+ A <EM>nonterminal symbol</EM> stands for a class of syntactically equivalent
+ groupings.  The symbol name is used in writing grammar rules.  By convention,
+ it should be all lower case.
+ 
+ 
+ <P>
+ Symbol names can contain letters, digits (not at the beginning),
+ underscores and periods.  Periods make sense only in nonterminals.
+ 
+ 
+ <P>
+ There are three ways of writing terminal symbols in the grammar:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ A <EM>named token type</EM> is written with an identifier, like an
+ identifier in C.  By convention, it should be all upper case.  Each
+ such name must be defined with a Bison declaration such as
+ <CODE>%token</CODE>.  See section <A HREF="bison.html#SEC59">Token Type Names</A>.
+ 
+ <LI>
+ 
+ <A NAME="IDX68"></A>
+ <A NAME="IDX69"></A>
+ <A NAME="IDX70"></A>
+ A <EM>character token type</EM> (or <EM>literal character token</EM>) is
+ written in the grammar using the same syntax used in C for character
+ constants; for example, <CODE>'+'</CODE> is a character token type.  A
+ character token type doesn't need to be declared unless you need to
+ specify its semantic value data type (see section <A HREF="bison.html#SEC49">Data Types of Semantic Values</A>), associativity, or precedence (see section <A HREF="bison.html#SEC80">Operator Precedence</A>).
+ 
+ By convention, a character token type is used only to represent a
+ token that consists of that particular character.  Thus, the token
+ type <CODE>'+'</CODE> is used to represent the character <SAMP>`+'</SAMP> as a
+ token.  Nothing enforces this convention, but if you depart from it,
+ your program will confuse other readers.
+ 
+ All the usual escape sequences used in character literals in C can be
+ used in Bison as well, but you must not use the null character as a
+ character literal because its ASCII code, zero, is the code <CODE>yylex</CODE>
+ returns for end-of-input (see section <A HREF="bison.html#SEC71">Calling Convention for <CODE>yylex</CODE></A>).
+ 
+ <LI>
+ 
+ <A NAME="IDX71"></A>
+ <A NAME="IDX72"></A>
+ <A NAME="IDX73"></A>
+ A <EM>literal string token</EM> is written like a C string constant; for
+ example, <CODE>"&#60;="</CODE> is a literal string token.  A literal string token
+ doesn't need to be declared unless you need to specify its semantic
+ value data type (see section <A HREF="bison.html#SEC49">Data Types of Semantic Values</A>), associativity, or precedence
+ (see section <A HREF="bison.html#SEC80">Operator Precedence</A>).
+ 
+ You can associate the literal string token with a symbolic name as an
+ alias, using the <CODE>%token</CODE> declaration (see section <A HREF="bison.html#SEC59">Token Type Names</A>).  If you don't do that, the lexical analyzer has to
+ retrieve the token number for the literal string token from the
+ <CODE>yytname</CODE> table (see section <A HREF="bison.html#SEC71">Calling Convention for <CODE>yylex</CODE></A>).
+ 
+ <STRONG>WARNING</STRONG>: literal string tokens do not work in Yacc.
+ 
+ By convention, a literal string token is used only to represent a token
+ that consists of that particular string.  Thus, you should use the token
+ type <CODE>"&#60;="</CODE> to represent the string <SAMP>`&#60;='</SAMP> as a token.  Bison
+ does not enforce this convention, but if you depart from it, people who
+ read your program will be confused.
+ 
+ All the escape sequences used in string literals in C can be used in
+ Bison as well.  A literal string token must contain two or more
+ characters; for a token containing just one character, use a character
+ token (see above).
+ </UL>
+ 
+ <P>
+ How you choose to write a terminal symbol has no effect on its
+ grammatical meaning.  That depends only on where it appears in rules and
+ on when the parser function returns that symbol.
+ 
+ 
+ <P>
+ The value returned by <CODE>yylex</CODE> is always one of the terminal symbols
+ (or 0 for end-of-input).  Whichever way you write the token type in the
+ grammar rules, you write it the same way in the definition of <CODE>yylex</CODE>.
+ The numeric code for a character token type is simply the ASCII code for
+ the character, so <CODE>yylex</CODE> can use the identical character constant to
+ generate the requisite code.  Each named token type becomes a C macro in
+ the parser file, so <CODE>yylex</CODE> can use the name to stand for the code.
+ (This is why periods don't make sense in terminal symbols.)
+ See section <A HREF="bison.html#SEC71">Calling Convention for <CODE>yylex</CODE></A>.
+ 
+ 
+ <P>
+ If <CODE>yylex</CODE> is defined in a separate file, you need to arrange for the
+ token-type macro definitions to be available there.  Use the <SAMP>`-d'</SAMP>
+ option when you run Bison, so that it will write these macro definitions
+ into a separate header file <TT>`<VAR>name</VAR>.tab.h'</TT> which you can include
+ in the other source files that need it.  See section <A HREF="bison.html#SEC96">Invoking Bison</A>.
+ 
+ 
+ <P>
+ The symbol <CODE>error</CODE> is a terminal symbol reserved for error recovery
+ (see section <A HREF="bison.html#SEC90">Error Recovery</A>); you shouldn't use it for any other purpose.
+ In particular, <CODE>yylex</CODE> should never return this value.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC46" HREF="bison_toc.html#TOC46">Syntax of Grammar Rules</A></H2>
+ <P>
+ <A NAME="IDX74"></A>
+ <A NAME="IDX75"></A>
+ <A NAME="IDX76"></A>
+ 
+ 
+ <P>
+ A Bison grammar rule has the following general form:
+ 
+ 
+ 
+ <PRE>
+ <VAR>result</VAR>: <VAR>components</VAR>...
+         ;
+ </PRE>
+ 
+ <P>
+ where <VAR>result</VAR> is the nonterminal symbol that this rule describes,
+ and <VAR>components</VAR> are various terminal and nonterminal symbols that
+ are put together by this rule (see section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>).
+ 
+ 
+ <P>
+ For example,
+ 
+ 
+ 
+ <PRE>
+ exp:      exp '+' exp
+         ;
+ </PRE>
+ 
+ <P>
+ says that two groupings of type <CODE>exp</CODE>, with a <SAMP>`+'</SAMP> token in between,
+ can be combined into a larger grouping of type <CODE>exp</CODE>.
+ 
+ 
+ <P>
+ Whitespace in rules is significant only to separate symbols.  You can add
+ extra whitespace as you wish.
+ 
+ 
+ <P>
+ Scattered among the components can be <VAR>actions</VAR> that determine
+ the semantics of the rule.  An action looks like this:
+ 
+ 
+ 
+ <PRE>
+ {<VAR>C statements</VAR>}
+ </PRE>
+ 
+ <P>
+ Usually there is only one action and it follows the components.
+ See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ 
+ <P>
+ <A NAME="IDX77"></A>
+ Multiple rules for the same <VAR>result</VAR> can be written separately or can
+ be joined with the vertical-bar character <SAMP>`|'</SAMP> as follows:
+ 
+ 
+ 
+ <PRE>
+ <VAR>result</VAR>:    <VAR>rule1-components</VAR>...
+         | <VAR>rule2-components</VAR>...
+         ...
+         ;
+ </PRE>
+ 
+ <P>
+ They are still considered distinct rules even when joined in this way.
+ 
+ 
+ <P>
+ If <VAR>components</VAR> in a rule is empty, it means that <VAR>result</VAR> can
+ match the empty string.  For example, here is how to define a
+ comma-separated sequence of zero or more <CODE>exp</CODE> groupings:
+ 
+ 
+ 
+ <PRE>
+ expseq:   /* empty */
+         | expseq1
+         ;
+ 
+ expseq1:  exp
+         | expseq1 ',' exp
+         ;
+ </PRE>
+ 
+ <P>
+ It is customary to write a comment <SAMP>`/* empty */'</SAMP> in each rule
+ with no components.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC47" HREF="bison_toc.html#TOC47">Recursive Rules</A></H2>
+ <P>
+ <A NAME="IDX78"></A>
+ 
+ 
+ <P>
+ A rule is called <EM>recursive</EM> when its <VAR>result</VAR> nonterminal appears
+ also on its right hand side.  Nearly all Bison grammars need to use
+ recursion, because that is the only way to define a sequence of any number
+ of a particular thing.  Consider this recursive definition of a
+ comma-separated sequence of one or more expressions:
+ 
+ 
+ 
+ <PRE>
+ expseq1:  exp
+         | expseq1 ',' exp
+         ;
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX79"></A>
+ <A NAME="IDX80"></A>
+ Since the recursive use of <CODE>expseq1</CODE> is the leftmost symbol in the
+ right hand side, we call this <EM>left recursion</EM>.  By contrast, here
+ the same construct is defined using <EM>right recursion</EM>:
+ 
+ 
+ 
+ <PRE>
+ expseq1:  exp
+         | exp ',' expseq1
+         ;
+ </PRE>
+ 
+ <P>
+ Any kind of sequence can be defined using either left recursion or
+ right recursion, but you should always use left recursion, because it
+ can parse a sequence of any number of elements with bounded stack
+ space.  Right recursion uses up space on the Bison stack in proportion
+ to the number of elements in the sequence, because all the elements
+ must be shifted onto the stack before the rule can be applied even
+ once.  See section <A HREF="bison.html#SEC77">The Bison Parser Algorithm</A>, for
+ further explanation of this.
+ 
+ 
+ <P>
+ <A NAME="IDX81"></A>
+ <EM>Indirect</EM> or <EM>mutual</EM> recursion occurs when the result of the
+ rule does not appear directly on its right hand side, but does appear
+ in rules for other nonterminals which do appear on its right hand
+ side.
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ expr:     primary
+         | primary '+' primary
+         ;
+ 
+ primary:  constant
+         | '(' expr ')'
+         ;
+ </PRE>
+ 
+ <P>
+ defines two mutually-recursive nonterminals, since each refers to the
+ other.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC48" HREF="bison_toc.html#TOC48">Defining Language Semantics</A></H2>
+ <P>
+ <A NAME="IDX82"></A>
+ <A NAME="IDX83"></A>
+ 
+ 
+ <P>
+ The grammar rules for a language determine only the syntax.  The semantics
+ are determined by the semantic values associated with various tokens and
+ groupings, and by the actions taken when various groupings are recognized.
+ 
+ 
+ <P>
+ For example, the calculator calculates properly because the value
+ associated with each expression is the proper number; it adds properly
+ because the action for the grouping <SAMP>`<VAR>x</VAR> + <VAR>y</VAR>'</SAMP> is to add
+ the numbers associated with <VAR>x</VAR> and <VAR>y</VAR>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC49" HREF="bison_toc.html#TOC49">Data Types of Semantic Values</A></H3>
+ <P>
+ <A NAME="IDX84"></A>
+ <A NAME="IDX85"></A>
+ <A NAME="IDX86"></A>
+ <A NAME="IDX87"></A>
+ 
+ 
+ <P>
+ In a simple program it may be sufficient to use the same data type for
+ the semantic values of all language constructs.  This was true in the
+ RPN and infix calculator examples (see section <A HREF="bison.html#SEC17">Reverse Polish Notation Calculator</A>).
+ 
+ 
+ <P>
+ Bison's default is to use type <CODE>int</CODE> for all semantic values.  To
+ specify some other type, define <CODE>YYSTYPE</CODE> as a macro, like this:
+ 
+ 
+ 
+ <PRE>
+ #define YYSTYPE double
+ </PRE>
+ 
+ <P>
+ This macro definition must go in the C declarations section of the grammar
+ file (see section <A HREF="bison.html#SEC40">Outline of a Bison Grammar</A>).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC50" HREF="bison_toc.html#TOC50">More Than One Value Type</A></H3>
+ 
+ <P>
+ In most programs, you will need different data types for different kinds
+ of tokens and groupings.  For example, a numeric constant may need type
+ <CODE>int</CODE> or <CODE>long</CODE>, while a string constant needs type <CODE>char *</CODE>,
+ and an identifier might need a pointer to an entry in the symbol table.
+ 
+ 
+ <P>
+ To use more than one data type for semantic values in one parser, Bison
+ requires you to do two things:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ Specify the entire collection of possible data types, with the
+ <CODE>%union</CODE> Bison declaration (see section <A HREF="bison.html#SEC61">The Collection of Value Types</A>).
+ 
+ <LI>
+ 
+ Choose one of those types for each symbol (terminal or nonterminal) for
+ which semantic values are used.  This is done for tokens with the
+ <CODE>%token</CODE> Bison declaration (see section <A HREF="bison.html#SEC59">Token Type Names</A>)
+ and for groupings with the <CODE>%type</CODE> Bison declaration (see section <A HREF="bison.html#SEC62">Nonterminal Symbols</A>).
+ </UL>
+ 
+ 
+ 
+ <H3><A NAME="SEC51" HREF="bison_toc.html#TOC51">Actions</A></H3>
+ <P>
+ <A NAME="IDX88"></A>
+ <A NAME="IDX89"></A>
+ <A NAME="IDX90"></A>
+ 
+ 
+ <P>
+ An action accompanies a syntactic rule and contains C code to be executed
+ each time an instance of that rule is recognized.  The task of most actions
+ is to compute a semantic value for the grouping built by the rule from the
+ semantic values associated with tokens or smaller groupings.
+ 
+ 
+ <P>
+ An action consists of C statements surrounded by braces, much like a
+ compound statement in C.  It can be placed at any position in the rule; it
+ is executed at that position.  Most rules have just one action at the end
+ of the rule, following all the components.  Actions in the middle of a rule
+ are tricky and used only for special purposes (see section <A HREF="bison.html#SEC53">Actions in Mid-Rule</A>).
+ 
+ 
+ <P>
+ The C code in an action can refer to the semantic values of the components
+ matched by the rule with the construct <CODE>$<VAR>n</VAR></CODE>, which stands for
+ the value of the <VAR>n</VAR>th component.  The semantic value for the grouping
+ being constructed is <CODE>$$</CODE>.  (Bison translates both of these constructs
+ into array element references when it copies the actions into the parser
+ file.)
+ 
+ 
+ <P>
+ Here is a typical example:
+ 
+ 
+ 
+ <PRE>
+ exp:    ...
+         | exp '+' exp
+             { $$ = $1 + $3; }
+ </PRE>
+ 
+ <P>
+ This rule constructs an <CODE>exp</CODE> from two smaller <CODE>exp</CODE> groupings
+ connected by a plus-sign token.  In the action, <CODE>$1</CODE> and <CODE>$3</CODE>
+ refer to the semantic values of the two component <CODE>exp</CODE> groupings,
+ which are the first and third symbols on the right hand side of the rule.
+ The sum is stored into <CODE>$$</CODE> so that it becomes the semantic value of
+ the addition-expression just recognized by the rule.  If there were a
+ useful semantic value associated with the <SAMP>`+'</SAMP> token, it could be
+ referred to as <CODE>$2</CODE>.
+ 
+ <P>
+ <A NAME="IDX91"></A>
+ If you don't specify an action for a rule, Bison supplies a default:
+ <CODE>$$ = $1</CODE>.  Thus, the value of the first symbol in the rule becomes
+ the value of the whole rule.  Of course, the default rule is valid only
+ if the two data types match.  There is no meaningful default action for
+ an empty rule; every empty rule must have an explicit action unless the
+ rule's value does not matter.
+ 
+ 
+ <P>
+ <CODE>$<VAR>n</VAR></CODE> with <VAR>n</VAR> zero or negative is allowed for reference
+ to tokens and groupings on the stack <EM>before</EM> those that match the
+ current rule.  This is a very risky practice, and to use it reliably
+ you must be certain of the context in which the rule is applied.  Here
+ is a case in which you can use this reliably:
+ 
+ 
+ 
+ <PRE>
+ foo:      expr bar '+' expr  { ... }
+         | expr bar '-' expr  { ... }
+         ;
+ 
+ bar:      /* empty */
+         { previous_expr = $0; }
+         ;
+ </PRE>
+ 
+ <P>
+ As long as <CODE>bar</CODE> is used only in the fashion shown here, <CODE>$0</CODE>
+ always refers to the <CODE>expr</CODE> which precedes <CODE>bar</CODE> in the
+ definition of <CODE>foo</CODE>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC52" HREF="bison_toc.html#TOC52">Data Types of Values in Actions</A></H3>
+ <P>
+ <A NAME="IDX92"></A>
+ <A NAME="IDX93"></A>
+ 
+ 
+ <P>
+ If you have chosen a single data type for semantic values, the <CODE>$$</CODE>
+ and <CODE>$<VAR>n</VAR></CODE> constructs always have that data type.
+ 
+ 
+ <P>
+ If you have used <CODE>%union</CODE> to specify a variety of data types, then you
+ must declare a choice among these types for each terminal or nonterminal
+ symbol that can have a semantic value.  Then each time you use <CODE>$$</CODE> or
+ <CODE>$<VAR>n</VAR></CODE>, its data type is determined by which symbol it refers to
+ in the rule.  In this example,
+ 
+ 
+ <PRE>
+ exp:    ...
+         | exp '+' exp
+             { $$ = $1 + $3; }
+ </PRE>
+ 
+ <P>
+ <CODE>$1</CODE> and <CODE>$3</CODE> refer to instances of <CODE>exp</CODE>, so they all
+ have the data type declared for the nonterminal symbol <CODE>exp</CODE>.  If
+ <CODE>$2</CODE> were used, it would have the data type declared for the
+ terminal symbol <CODE>'+'</CODE>, whatever that might be.
+ 
+ <P>
+ Alternatively, you can specify the data type when you refer to the value,
+ by inserting <SAMP>`&#60;<VAR>type</VAR>&#62;'</SAMP> after the <SAMP>`$'</SAMP> at the beginning of the
+ reference.  For example, if you have defined types as shown here:
+ 
+ 
+ 
+ <PRE>
+ %union {
+   int itype;
+   double dtype;
+ }
+ </PRE>
+ 
+ <P>
+ then you can write <CODE>$&#60;itype&#62;1</CODE> to refer to the first subunit of the
+ rule as an integer, or <CODE>$&#60;dtype&#62;1</CODE> to refer to it as a double.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC53" HREF="bison_toc.html#TOC53">Actions in Mid-Rule</A></H3>
+ <P>
+ <A NAME="IDX94"></A>
+ <A NAME="IDX95"></A>
+ 
+ 
+ <P>
+ Occasionally it is useful to put an action in the middle of a rule.
+ These actions are written just like usual end-of-rule actions, but they
+ are executed before the parser even recognizes the following components.
+ 
+ 
+ <P>
+ A mid-rule action may refer to the components preceding it using
+ <CODE>$<VAR>n</VAR></CODE>, but it may not refer to subsequent components because
+ it is run before they are parsed.
+ 
+ 
+ <P>
+ The mid-rule action itself counts as one of the components of the rule.
+ This makes a difference when there is another action later in the same rule
+ (and usually there is another at the end): you have to count the actions
+ along with the symbols when working out which number <VAR>n</VAR> to use in
+ <CODE>$<VAR>n</VAR></CODE>.
+ 
+ 
+ <P>
+ The mid-rule action can also have a semantic value.  The action can set
+ its value with an assignment to <CODE>$$</CODE>, and actions later in the rule
+ can refer to the value using <CODE>$<VAR>n</VAR></CODE>.  Since there is no symbol
+ to name the action, there is no way to declare a data type for the value
+ in advance, so you must use the <SAMP>`$&#60;...&#62;<VAR>n</VAR>'</SAMP> construct to
+ specify a data type each time you refer to this value.
+ 
+ 
+ <P>
+ There is no way to set the value of the entire rule with a mid-rule
+ action, because assignments to <CODE>$$</CODE> do not have that effect.  The
+ only way to set the value for the entire rule is with an ordinary action
+ at the end of the rule.
+ 
+ 
+ <P>
+ Here is an example from a hypothetical compiler, handling a <CODE>let</CODE>
+ statement that looks like <SAMP>`let (<VAR>variable</VAR>) <VAR>statement</VAR>'</SAMP> and
+ serves to create a variable named <VAR>variable</VAR> temporarily for the
+ duration of <VAR>statement</VAR>.  To parse this construct, we must put
+ <VAR>variable</VAR> into the symbol table while <VAR>statement</VAR> is parsed, then
+ remove it afterward.  Here is how it is done:
+ 
+ 
+ 
+ <PRE>
+ stmt:   LET '(' var ')'
+                 { $&#60;context&#62;$ = push_context ();
+                   declare_variable ($3); }
+         stmt    { $$ = $6;
+                   pop_context ($&#60;context&#62;5); }
+ </PRE>
+ 
+ <P>
+ As soon as <SAMP>`let (<VAR>variable</VAR>)'</SAMP> has been recognized, the first
+ action is run.  It saves a copy of the current semantic context (the
+ list of accessible variables) as its semantic value, using alternative
+ <CODE>context</CODE> in the data-type union.  Then it calls
+ <CODE>declare_variable</CODE> to add the new variable to that list.  Once the
+ first action is finished, the embedded statement <CODE>stmt</CODE> can be
+ parsed.  Note that the mid-rule action is component number 5, so the
+ <SAMP>`stmt'</SAMP> is component number 6.
+ 
+ 
+ <P>
+ After the embedded statement is parsed, its semantic value becomes the
+ value of the entire <CODE>let</CODE>-statement.  Then the semantic value from the
+ earlier action is used to restore the prior list of variables.  This
+ removes the temporary <CODE>let</CODE>-variable from the list so that it won't
+ appear to exist while the rest of the program is parsed.
+ 
+ 
+ <P>
+ Taking action before a rule is completely recognized often leads to
+ conflicts since the parser must commit to a parse in order to execute the
+ action.  For example, the following two rules, without mid-rule actions,
+ can coexist in a working parser because the parser can shift the open-brace
+ token and look at what follows before deciding whether there is a
+ declaration or not:
+ 
+ 
+ 
+ <PRE>
+ compound: '{' declarations statements '}'
+         | '{' statements '}'
+         ;
+ </PRE>
+ 
+ <P>
+ But when we add a mid-rule action as follows, the rules become nonfunctional:
+ 
+ 
+ 
+ <PRE>
+ compound: { prepare_for_local_variables (); }
+           '{' declarations statements '}'
+         | '{' statements '}'
+         ;
+ </PRE>
+ 
+ <P>
+ Now the parser is forced to decide whether to run the mid-rule action
+ when it has read no farther than the open-brace.  In other words, it
+ must commit to using one rule or the other, without sufficient
+ information to do it correctly.  (The open-brace token is what is called
+ the <EM>look-ahead</EM> token at this time, since the parser is still
+ deciding what to do about it.  See section <A HREF="bison.html#SEC78">Look-Ahead Tokens</A>.)
+ 
+ 
+ <P>
+ You might think that you could correct the problem by putting identical
+ actions into the two rules, like this:
+ 
+ 
+ 
+ <PRE>
+ compound: { prepare_for_local_variables (); }
+           '{' declarations statements '}'
+         | { prepare_for_local_variables (); }
+           '{' statements '}'
+         ;
+ </PRE>
+ 
+ <P>
+ But this does not help, because Bison does not realize that the two actions
+ are identical.  (Bison never tries to understand the C code in an action.)
+ 
+ 
+ <P>
+ If the grammar is such that a declaration can be distinguished from a
+ statement by the first token (which is true in C), then one solution which
+ does work is to put the action after the open-brace, like this:
+ 
+ 
+ 
+ <PRE>
+ compound: '{' { prepare_for_local_variables (); }
+           declarations statements '}'
+         | '{' statements '}'
+         ;
+ </PRE>
+ 
+ <P>
+ Now the first token of the following declaration or statement,
+ which would in any case tell Bison which rule to use, can still do so.
+ 
+ 
+ <P>
+ Another solution is to bury the action inside a nonterminal symbol which
+ serves as a subroutine:
+ 
+ 
+ 
+ <PRE>
+ subroutine: /* empty */
+           { prepare_for_local_variables (); }
+         ;
+ 
+ compound: subroutine
+           '{' declarations statements '}'
+         | subroutine
+           '{' statements '}'
+         ;
+ </PRE>
+ 
+ <P>
+ Now Bison can execute the action in the rule for <CODE>subroutine</CODE> without
+ deciding which rule for <CODE>compound</CODE> it will eventually use.  Note that
+ the action is now at the end of its rule.  Any mid-rule action can be
+ converted to an end-of-rule action in this way, and this is what Bison
+ actually does to implement mid-rule actions.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC54" HREF="bison_toc.html#TOC54">Tracking Locations</A></H2>
+ <P>
+ <A NAME="IDX96"></A>
+ <A NAME="IDX97"></A>
+ <A NAME="IDX98"></A>
+ 
+ 
+ <P>
+ Though grammar rules and semantic actions are enough to write a fully
+ functional parser, it can be useful to process some additionnal informations,
+ especially symbol locations.
+ 
+ 
+ <P>
+ The way locations are handled is defined by providing a data type, and actions
+ to take when rules are matched.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC55" HREF="bison_toc.html#TOC55">Data Type of Locations</A></H3>
+ <P>
+ <A NAME="IDX99"></A>
+ <A NAME="IDX100"></A>
+ 
+ 
+ <P>
+ Defining a data type for locations is much simpler than for semantic values,
+ since all tokens and groupings always use the same type.
+ 
+ 
+ <P>
+ The type of locations is specified by defining a macro called <CODE>YYLTYPE</CODE>.
+ When <CODE>YYLTYPE</CODE> is not defined, Bison uses a default structure type with
+ four members:
+ 
+ 
+ 
+ <PRE>
+ struct
+ {
+   int first_line;
+   int first_column;
+   int last_line;
+   int last_column;
+ }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC56" HREF="bison_toc.html#TOC56">Actions and Locations</A></H3>
+ <P>
+ <A NAME="IDX101"></A>
+ <A NAME="IDX102"></A>
+ <A NAME="IDX103"></A>
+ <A NAME="IDX104"></A>
+ 
+ 
+ <P>
+ Actions are not only useful for defining language semantics, but also for
+ describing the behavior of the output parser with locations.
+ 
+ 
+ <P>
+ The most obvious way for building locations of syntactic groupings is very
+ similar to the way semantic values are computed. In a given rule, several
+ constructs can be used to access the locations of the elements being matched.
+ The location of the <VAR>n</VAR>th component of the right hand side is
+ <CODE>@<VAR>n</VAR></CODE>, while the location of the left hand side grouping is
+ <CODE>@$</CODE>.
+ 
+ 
+ <P>
+ Here is a basic example using the default data type for locations:
+ 
+ 
+ 
+ <PRE>
+ exp:    ...
+         | exp '/' exp
+             {
+               @$.first_column = @1.first_column;
+               @$.first_line = @1.first_line;
+               @$.last_column = @3.last_column;
+               @$.last_line = @3.last_line;
+               if ($3)
+                 $$ = $1 / $3;
+               else
+                 {
+                   $$ = 1;
+                   printf("Division by zero, l%d,c%d-l%d,c%d",
+                          @3.first_line, @3.first_column,
+                          @3.last_line, @3.last_column);
+                 }
+             }
+ </PRE>
+ 
+ <P>
+ As for semantic values, there is a default action for locations that is
+ run each time a rule is matched. It sets the beginning of <CODE>@$</CODE> to the
+ beginning of the first symbol, and the end of <CODE>@$</CODE> to the end of the
+ last symbol.
+ 
+ 
+ <P>
+ With this default action, the location tracking can be fully automatic. The
+ example above simply rewrites this way:
+ 
+ 
+ 
+ <PRE>
+ exp:    ...
+         | exp '/' exp
+             {
+               if ($3)
+                 $$ = $1 / $3;
+               else
+                 {
+                   $$ = 1;
+                   printf("Division by zero, l%d,c%d-l%d,c%d",
+                          @3.first_line, @3.first_column,
+                          @3.last_line, @3.last_column);
+                 }
+             }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC57" HREF="bison_toc.html#TOC57">Default Action for Locations</A></H3>
+ <P>
+ <A NAME="IDX105"></A>
+ 
+ 
+ <P>
+ Actually, actions are not the best place to compute locations. Since locations
+ are much more general than semantic values, there is room in the output parser
+ to redefine the default action to take for each rule. The
+ <CODE>YYLLOC_DEFAULT</CODE> macro is called each time a rule is matched, before the
+ associated action is run.
+ 
+ 
+ <P>
+ Most of the time, this macro is general enough to suppress location
+ dedicated code from semantic actions.
+ 
+ 
+ <P>
+ The <CODE>YYLLOC_DEFAULT</CODE> macro takes three parameters. The first one is
+ the location of the grouping (the result of the computation). The second one
+ is an array holding locations of all right hand side elements of the rule
+ being matched. The last one is the size of the right hand side rule.
+ 
+ 
+ <P>
+ By default, it is defined this way:
+ 
+ 
+ 
+ <PRE>
+ #define YYLLOC_DEFAULT(Current, Rhs, N)         \
+   Current.last_line   = Rhs[N].last_line;       \
+   Current.last_column = Rhs[N].last_column;
+ </PRE>
+ 
+ <P>
+ When defining <CODE>YYLLOC_DEFAULT</CODE>, you should consider that:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ All arguments are free of side-effects. However, only the first one (the
+ result) should be modified by <CODE>YYLLOC_DEFAULT</CODE>.
+ 
+ <LI>
+ 
+ Before <CODE>YYLLOC_DEFAULT</CODE> is executed, the output parser sets <CODE>@$</CODE>
+ to <CODE>@1</CODE>.
+ 
+ <LI>
+ 
+ For consistency with semantic actions, valid indexes for the location array
+ range from 1 to <VAR>n</VAR>.
+ </UL>
+ 
+ 
+ 
+ <H2><A NAME="SEC58" HREF="bison_toc.html#TOC58">Bison Declarations</A></H2>
+ <P>
+ <A NAME="IDX106"></A>
+ <A NAME="IDX107"></A>
+ 
+ 
+ <P>
+ The <EM>Bison declarations</EM> section of a Bison grammar defines the symbols
+ used in formulating the grammar and the data types of semantic values.
+ See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ 
+ <P>
+ All token type names (but not single-character literal tokens such as
+ <CODE>'+'</CODE> and <CODE>'*'</CODE>) must be declared.  Nonterminal symbols must be
+ declared if you need to specify which data type to use for the semantic
+ value (see section <A HREF="bison.html#SEC50">More Than One Value Type</A>).
+ 
+ 
+ <P>
+ The first rule in the file also specifies the start symbol, by default.
+ If you want some other symbol to be the start symbol, you must declare
+ it explicitly (see section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC59" HREF="bison_toc.html#TOC59">Token Type Names</A></H3>
+ <P>
+ <A NAME="IDX108"></A>
+ <A NAME="IDX109"></A>
+ <A NAME="IDX110"></A>
+ <A NAME="IDX111"></A>
+ 
+ 
+ <P>
+ The basic way to declare a token type name (terminal symbol) is as follows:
+ 
+ 
+ 
+ <PRE>
+ %token <VAR>name</VAR>
+ </PRE>
+ 
+ <P>
+ Bison will convert this into a <CODE>#define</CODE> directive in
+ the parser, so that the function <CODE>yylex</CODE> (if it is in this file)
+ can use the name <VAR>name</VAR> to stand for this token type's code.
+ 
+ 
+ <P>
+ Alternatively, you can use <CODE>%left</CODE>, <CODE>%right</CODE>, or
+ <CODE>%nonassoc</CODE> instead of <CODE>%token</CODE>, if you wish to specify
+ associativity and precedence.  See section <A HREF="bison.html#SEC60">Operator Precedence</A>.
+ 
+ 
+ <P>
+ You can explicitly specify the numeric code for a token type by appending
+ an integer value in the field immediately following the token name:
+ 
+ 
+ 
+ <PRE>
+ %token NUM 300
+ </PRE>
+ 
+ <P>
+ It is generally best, however, to let Bison choose the numeric codes for
+ all token types.  Bison will automatically select codes that don't conflict
+ with each other or with ASCII characters.
+ 
+ 
+ <P>
+ In the event that the stack type is a union, you must augment the
+ <CODE>%token</CODE> or other token declaration to include the data type
+ alternative delimited by angle-brackets (see section <A HREF="bison.html#SEC50">More Than One Value Type</A>).
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ %union {              /* define stack type */
+   double val;
+   symrec *tptr;
+ }
+ %token &#60;val&#62; NUM      /* define token NUM and its type */
+ </PRE>
+ 
+ <P>
+ You can associate a literal string token with a token type name by
+ writing the literal string at the end of a <CODE>%token</CODE>
+ declaration which declares the name.  For example:
+ 
+ 
+ 
+ <PRE>
+ %token arrow "=&#62;"
+ </PRE>
+ 
+ <P>
+ For example, a grammar for the C language might specify these names with
+ equivalent literal string tokens:
+ 
+ 
+ 
+ <PRE>
+ %token  &#60;operator&#62;  OR      "||"
+ %token  &#60;operator&#62;  LE 134  "&#60;="
+ %left  OR  "&#60;="
+ </PRE>
+ 
+ <P>
+ Once you equate the literal string and the token name, you can use them
+ interchangeably in further declarations or the grammar rules.  The
+ <CODE>yylex</CODE> function can use the token name or the literal string to
+ obtain the token type code number (see section <A HREF="bison.html#SEC71">Calling Convention for <CODE>yylex</CODE></A>).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC60" HREF="bison_toc.html#TOC60">Operator Precedence</A></H3>
+ <P>
+ <A NAME="IDX112"></A>
+ <A NAME="IDX113"></A>
+ <A NAME="IDX114"></A>
+ 
+ 
+ <P>
+ Use the <CODE>%left</CODE>, <CODE>%right</CODE> or <CODE>%nonassoc</CODE> declaration to
+ declare a token and specify its precedence and associativity, all at
+ once.  These are called <EM>precedence declarations</EM>.
+ See section <A HREF="bison.html#SEC80">Operator Precedence</A>, for general information on operator precedence.
+ 
+ 
+ <P>
+ The syntax of a precedence declaration is the same as that of
+ <CODE>%token</CODE>: either
+ 
+ 
+ 
+ <PRE>
+ %left <VAR>symbols</VAR>...
+ </PRE>
+ 
+ <P>
+ or
+ 
+ 
+ 
+ <PRE>
+ %left &#60;<VAR>type</VAR>&#62; <VAR>symbols</VAR>...
+ </PRE>
+ 
+ <P>
+ And indeed any of these declarations serves the purposes of <CODE>%token</CODE>.
+ But in addition, they specify the associativity and relative precedence for
+ all the <VAR>symbols</VAR>:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ The associativity of an operator <VAR>op</VAR> determines how repeated uses
+ of the operator nest: whether <SAMP>`<VAR>x</VAR> <VAR>op</VAR> <VAR>y</VAR> <VAR>op</VAR>
+ <VAR>z</VAR>'</SAMP> is parsed by grouping <VAR>x</VAR> with <VAR>y</VAR> first or by
+ grouping <VAR>y</VAR> with <VAR>z</VAR> first.  <CODE>%left</CODE> specifies
+ left-associativity (grouping <VAR>x</VAR> with <VAR>y</VAR> first) and
+ <CODE>%right</CODE> specifies right-associativity (grouping <VAR>y</VAR> with
+ <VAR>z</VAR> first).  <CODE>%nonassoc</CODE> specifies no associativity, which
+ means that <SAMP>`<VAR>x</VAR> <VAR>op</VAR> <VAR>y</VAR> <VAR>op</VAR> <VAR>z</VAR>'</SAMP> is
+ considered a syntax error.
+ 
+ <LI>
+ 
+ The precedence of an operator determines how it nests with other operators.
+ All the tokens declared in a single precedence declaration have equal
+ precedence and nest together according to their associativity.
+ When two tokens declared in different precedence declarations associate,
+ the one declared later has the higher precedence and is grouped first.
+ </UL>
+ 
+ 
+ 
+ <H3><A NAME="SEC61" HREF="bison_toc.html#TOC61">The Collection of Value Types</A></H3>
+ <P>
+ <A NAME="IDX115"></A>
+ <A NAME="IDX116"></A>
+ <A NAME="IDX117"></A>
+ 
+ 
+ <P>
+ The <CODE>%union</CODE> declaration specifies the entire collection of possible
+ data types for semantic values.  The keyword <CODE>%union</CODE> is followed by a
+ pair of braces containing the same thing that goes inside a <CODE>union</CODE> in
+ C.
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ %union {
+   double val;
+   symrec *tptr;
+ }
+ </PRE>
+ 
+ <P>
+ This says that the two alternative types are <CODE>double</CODE> and <CODE>symrec
+ *</CODE>.  They are given names <CODE>val</CODE> and <CODE>tptr</CODE>; these names are used
+ in the <CODE>%token</CODE> and <CODE>%type</CODE> declarations to pick one of the types
+ for a terminal or nonterminal symbol (see section <A HREF="bison.html#SEC62">Nonterminal Symbols</A>).
+ 
+ 
+ <P>
+ Note that, unlike making a <CODE>union</CODE> declaration in C, you do not write
+ a semicolon after the closing brace.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC62" HREF="bison_toc.html#TOC62">Nonterminal Symbols</A></H3>
+ <P>
+ <A NAME="IDX118"></A>
+ <A NAME="IDX119"></A>
+ <A NAME="IDX120"></A>
+ 
+ 
+ <P>
+ When you use <CODE>%union</CODE> to specify multiple value types, you must
+ declare the value type of each nonterminal symbol for which values are
+ used.  This is done with a <CODE>%type</CODE> declaration, like this:
+ 
+ 
+ 
+ <PRE>
+ %type &#60;<VAR>type</VAR>&#62; <VAR>nonterminal</VAR>...
+ </PRE>
+ 
+ <P>
+ Here <VAR>nonterminal</VAR> is the name of a nonterminal symbol, and <VAR>type</VAR>
+ is the name given in the <CODE>%union</CODE> to the alternative that you want
+ (see section <A HREF="bison.html#SEC61">The Collection of Value Types</A>).  You can give any number of nonterminal symbols in
+ the same <CODE>%type</CODE> declaration, if they have the same value type.  Use
+ spaces to separate the symbol names.
+ 
+ 
+ <P>
+ You can also declare the value type of a terminal symbol.  To do this,
+ use the same <CODE>&#60;<VAR>type</VAR>&#62;</CODE> construction in a declaration for the
+ terminal symbol.  All kinds of token declarations allow
+ <CODE>&#60;<VAR>type</VAR>&#62;</CODE>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC63" HREF="bison_toc.html#TOC63">Suppressing Conflict Warnings</A></H3>
+ <P>
+ <A NAME="IDX121"></A>
+ <A NAME="IDX122"></A>
+ <A NAME="IDX123"></A>
+ <A NAME="IDX124"></A>
+ <A NAME="IDX125"></A>
+ 
+ 
+ <P>
+ Bison normally warns if there are any conflicts in the grammar
+ (see section <A HREF="bison.html#SEC79">Shift/Reduce Conflicts</A>), but most real grammars have harmless shift/reduce
+ conflicts which are resolved in a predictable way and would be difficult to
+ eliminate.  It is desirable to suppress the warning about these conflicts
+ unless the number of conflicts changes.  You can do this with the
+ <CODE>%expect</CODE> declaration.
+ 
+ 
+ <P>
+ The declaration looks like this:
+ 
+ 
+ 
+ <PRE>
+ %expect <VAR>n</VAR>
+ </PRE>
+ 
+ <P>
+ Here <VAR>n</VAR> is a decimal integer.  The declaration says there should be no
+ warning if there are <VAR>n</VAR> shift/reduce conflicts and no reduce/reduce
+ conflicts.  The usual warning is given if there are either more or fewer
+ conflicts, or if there are any reduce/reduce conflicts.
+ 
+ 
+ <P>
+ In general, using <CODE>%expect</CODE> involves these steps:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ Compile your grammar without <CODE>%expect</CODE>.  Use the <SAMP>`-v'</SAMP> option
+ to get a verbose list of where the conflicts occur.  Bison will also
+ print the number of conflicts.
+ 
+ <LI>
+ 
+ Check each of the conflicts to make sure that Bison's default
+ resolution is what you really want.  If not, rewrite the grammar and
+ go back to the beginning.
+ 
+ <LI>
+ 
+ Add an <CODE>%expect</CODE> declaration, copying the number <VAR>n</VAR> from the
+ number which Bison printed.
+ </UL>
+ 
+ <P>
+ Now Bison will stop annoying you about the conflicts you have checked, but
+ it will warn you again if changes in the grammar result in additional
+ conflicts.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC64" HREF="bison_toc.html#TOC64">The Start-Symbol</A></H3>
+ <P>
+ <A NAME="IDX126"></A>
+ <A NAME="IDX127"></A>
+ <A NAME="IDX128"></A>
+ <A NAME="IDX129"></A>
+ 
+ 
+ <P>
+ Bison assumes by default that the start symbol for the grammar is the first
+ nonterminal specified in the grammar specification section.  The programmer
+ may override this restriction with the <CODE>%start</CODE> declaration as follows:
+ 
+ 
+ 
+ <PRE>
+ %start <VAR>symbol</VAR>
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC65" HREF="bison_toc.html#TOC65">A Pure (Reentrant) Parser</A></H3>
+ <P>
+ <A NAME="IDX130"></A>
+ <A NAME="IDX131"></A>
+ <A NAME="IDX132"></A>
+ 
+ 
+ <P>
+ A <EM>reentrant</EM> program is one which does not alter in the course of
+ execution; in other words, it consists entirely of <EM>pure</EM> (read-only)
+ code.  Reentrancy is important whenever asynchronous execution is possible;
+ for example, a non-reentrant program may not be safe to call from a signal
+ handler.  In systems with multiple threads of control, a non-reentrant
+ program must be called only within interlocks.
+ 
+ 
+ <P>
+ Normally, Bison generates a parser which is not reentrant.  This is
+ suitable for most uses, and it permits compatibility with YACC.  (The
+ standard YACC interfaces are inherently nonreentrant, because they use
+ statically allocated variables for communication with <CODE>yylex</CODE>,
+ including <CODE>yylval</CODE> and <CODE>yylloc</CODE>.)
+ 
+ 
+ <P>
+ Alternatively, you can generate a pure, reentrant parser.  The Bison
+ declaration <CODE>%pure_parser</CODE> says that you want the parser to be
+ reentrant.  It looks like this:
+ 
+ 
+ 
+ <PRE>
+ %pure_parser
+ </PRE>
+ 
+ <P>
+ The result is that the communication variables <CODE>yylval</CODE> and
+ <CODE>yylloc</CODE> become local variables in <CODE>yyparse</CODE>, and a different
+ calling convention is used for the lexical analyzer function
+ <CODE>yylex</CODE>.  See section <A HREF="bison.html#SEC74">Calling Conventions for Pure Parsers</A>, for the details of this.  The variable <CODE>yynerrs</CODE> also
+ becomes local in <CODE>yyparse</CODE> (see section <A HREF="bison.html#SEC75">The Error Reporting Function <CODE>yyerror</CODE></A>).  The convention for calling
+ <CODE>yyparse</CODE> itself is unchanged.
+ 
+ 
+ <P>
+ Whether the parser is pure has nothing to do with the grammar rules.
+ You can generate either a pure parser or a nonreentrant parser from any
+ valid grammar.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC66" HREF="bison_toc.html#TOC66">Bison Declaration Summary</A></H3>
+ <P>
+ <A NAME="IDX133"></A>
+ <A NAME="IDX134"></A>
+ <A NAME="IDX135"></A>
+ 
+ 
+ <P>
+ Here is a summary of all Bison declarations:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>%union</CODE>
+ <DD>
+ Declare the collection of data types that semantic values may have
+ (see section <A HREF="bison.html#SEC61">The Collection of Value Types</A>).
+ 
+ <DT><CODE>%token</CODE>
+ <DD>
+ Declare a terminal symbol (token type name) with no precedence
+ or associativity specified (see section <A HREF="bison.html#SEC59">Token Type Names</A>).
+ 
+ <DT><CODE>%right</CODE>
+ <DD>
+ Declare a terminal symbol (token type name) that is right-associative
+ (see section <A HREF="bison.html#SEC60">Operator Precedence</A>).
+ 
+ <DT><CODE>%left</CODE>
+ <DD>
+ Declare a terminal symbol (token type name) that is left-associative
+ (see section <A HREF="bison.html#SEC60">Operator Precedence</A>).
+ 
+ <DT><CODE>%nonassoc</CODE>
+ <DD>
+ Declare a terminal symbol (token type name) that is nonassociative
+ (using it in a way that would be associative is a syntax error)
+ (see section <A HREF="bison.html#SEC60">Operator Precedence</A>).
+ 
+ <DT><CODE>%type</CODE>
+ <DD>
+ Declare the type of semantic values for a nonterminal symbol
+ (see section <A HREF="bison.html#SEC62">Nonterminal Symbols</A>).
+ 
+ <DT><CODE>%start</CODE>
+ <DD>
+ Specify the grammar's start symbol (see section <A HREF="bison.html#SEC64">The Start-Symbol</A>).
+ 
+ <DT><CODE>%expect</CODE>
+ <DD>
+ Declare the expected number of shift-reduce conflicts
+ (see section <A HREF="bison.html#SEC63">Suppressing Conflict Warnings</A>).
+ 
+ <DT><CODE>%yacc</CODE>
+ <DD>
+ <DT><CODE>%fixed_output_files</CODE>
+ <DD>
+ Pretend the option @option{--yacc} was given, i.e., imitate Yacc,
+ including its naming conventions.  See section <A HREF="bison.html#SEC97">Bison Options</A>, for more.
+ 
+ <DT><CODE>%locations</CODE>
+ <DD>
+ Generate the code processing the locations (see section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>).  This mode is enabled as soon as
+ the grammar uses the special <SAMP>`@<VAR>n</VAR>'</SAMP> tokens, but if your
+ grammar does not use it, using <SAMP>`%locations'</SAMP> allows for more
+ accurate parse error messages.
+ 
+ <DT><CODE>%pure_parser</CODE>
+ <DD>
+ Request a pure (reentrant) parser program (see section <A HREF="bison.html#SEC65">A Pure (Reentrant) Parser</A>).
+ 
+ <DT><CODE>%no_parser</CODE>
+ <DD>
+ Do not include any C code in the parser file; generate tables only.  The
+ parser file contains just <CODE>#define</CODE> directives and static variable
+ declarations.
+ 
+ This option also tells Bison to write the C code for the grammar actions
+ into a file named <TT>`<VAR>filename</VAR>.act'</TT>, in the form of a
+ brace-surrounded body fit for a <CODE>switch</CODE> statement.
+ 
+ <DT><CODE>%no_lines</CODE>
+ <DD>
+ Don't generate any <CODE>#line</CODE> preprocessor commands in the parser
+ file.  Ordinarily Bison writes these commands in the parser file so that
+ the C compiler and debuggers will associate errors and object code with
+ your source file (the grammar file).  This directive causes them to
+ associate errors with the parser file, treating it an independent source
+ file in its own right.
+ 
+ <DT><CODE>%debug</CODE>
+ <DD>
+ Output a definition of the macro <CODE>YYDEBUG</CODE> into the parser file, so
+ that the debugging facilities are compiled.  See section <A HREF="bison.html#SEC95">Debugging Your Parser</A>.
+ 
+ <DT><CODE>%defines</CODE>
+ <DD>
+ Write an extra output file containing macro definitions for the token
+ type names defined in the grammar and the semantic value type
+ <CODE>YYSTYPE</CODE>, as well as a few <CODE>extern</CODE> variable declarations.
+ 
+ If the parser output file is named <TT>`<VAR>name</VAR>.c'</TT> then this file
+ is named <TT>`<VAR>name</VAR>.h'</TT>.
+ This output file is essential if you wish to put the definition of
+ <CODE>yylex</CODE> in a separate source file, because <CODE>yylex</CODE> needs to
+ be able to refer to token type codes and the variable
+ <CODE>yylval</CODE>.  See section <A HREF="bison.html#SEC72">Semantic Values of Tokens</A>.
+ <DT><CODE>%verbose</CODE>
+ <DD>
+ Write an extra output file containing verbose descriptions of the
+ parser states and what is done for each type of look-ahead token in
+ that state.
+ 
+ This file also describes all the conflicts, both those resolved by
+ operator precedence and the unresolved ones.
+ 
+ The file's name is made by removing <SAMP>`.tab.c'</SAMP> or <SAMP>`.c'</SAMP> from
+ the parser output file name, and adding <SAMP>`.output'</SAMP> instead.
+ Therefore, if the input file is <TT>`foo.y'</TT>, then the parser file is
+ called <TT>`foo.tab.c'</TT> by default.  As a consequence, the verbose
+ output file is called <TT>`foo.output'</TT>.
+ <DT><CODE>%token_table</CODE>
+ <DD>
+ Generate an array of token names in the parser file.  The name of the
+ array is <CODE>yytname</CODE>; <CODE>yytname[<VAR>i</VAR>]</CODE> is the name of the
+ token whose internal Bison token code number is <VAR>i</VAR>.  The first three
+ elements of <CODE>yytname</CODE> are always <CODE>"$"</CODE>, <CODE>"error"</CODE>, and
+ <CODE>"$illegal"</CODE>; after these come the symbols defined in the grammar
+ file.
+ 
+ For single-character literal tokens and literal string tokens, the name
+ in the table includes the single-quote or double-quote characters: for
+ example, <CODE>"'+'"</CODE> is a single-character literal and <CODE>"\"&#60;=\""</CODE>
+ is a literal string token.  All the characters of the literal string
+ token appear verbatim in the string found in the table; even
+ double-quote characters are not escaped.  For example, if the token
+ consists of three characters <SAMP>`*"*'</SAMP>, its string in <CODE>yytname</CODE>
+ contains <SAMP>`"*"*"'</SAMP>.  (In C, that would be written as
+ <CODE>"\"*\"*\""</CODE>).
+ 
+ When you specify <CODE>%token_table</CODE>, Bison also generates macro
+ definitions for macros <CODE>YYNTOKENS</CODE>, <CODE>YYNNTS</CODE>, and
+ <CODE>YYNRULES</CODE>, and <CODE>YYNSTATES</CODE>:
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>YYNTOKENS</CODE>
+ <DD>
+ The highest token number, plus one.
+ <DT><CODE>YYNNTS</CODE>
+ <DD>
+ The number of nonterminal symbols.
+ <DT><CODE>YYNRULES</CODE>
+ <DD>
+ The number of grammar rules,
+ <DT><CODE>YYNSTATES</CODE>
+ <DD>
+ The number of parser states (see section <A HREF="bison.html#SEC86">Parser States</A>).
+ </DL>
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC67" HREF="bison_toc.html#TOC67">Multiple Parsers in the Same Program</A></H2>
+ 
+ <P>
+ Most programs that use Bison parse only one language and therefore contain
+ only one Bison parser.  But what if you want to parse more than one
+ language with the same program?  Then you need to avoid a name conflict
+ between different definitions of <CODE>yyparse</CODE>, <CODE>yylval</CODE>, and so on.
+ 
+ 
+ <P>
+ The easy way to do this is to use the option <SAMP>`-p <VAR>prefix</VAR>'</SAMP>
+ (see section <A HREF="bison.html#SEC96">Invoking Bison</A>).  This renames the interface functions and
+ variables of the Bison parser to start with <VAR>prefix</VAR> instead of
+ <SAMP>`yy'</SAMP>.  You can use this to give each parser distinct names that do
+ not conflict.
+ 
+ 
+ <P>
+ The precise list of symbols renamed is <CODE>yyparse</CODE>, <CODE>yylex</CODE>,
+ <CODE>yyerror</CODE>, <CODE>yynerrs</CODE>, <CODE>yylval</CODE>, <CODE>yychar</CODE> and
+ <CODE>yydebug</CODE>.  For example, if you use <SAMP>`-p c'</SAMP>, the names become
+ <CODE>cparse</CODE>, <CODE>clex</CODE>, and so on.
+ 
+ 
+ <P>
+ <STRONG>All the other variables and macros associated with Bison are not
+ renamed.</STRONG> These others are not global; there is no conflict if the same
+ name is used in different parsers.  For example, <CODE>YYSTYPE</CODE> is not
+ renamed, but defining this in different ways in different parsers causes
+ no trouble (see section <A HREF="bison.html#SEC49">Data Types of Semantic Values</A>).
+ 
+ 
+ <P>
+ The <SAMP>`-p'</SAMP> option works by adding macro definitions to the beginning
+ of the parser source file, defining <CODE>yyparse</CODE> as
+ <CODE><VAR>prefix</VAR>parse</CODE>, and so on.  This effectively substitutes one
+ name for the other in the entire parser file.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC68" HREF="bison_toc.html#TOC68">Parser C-Language Interface</A></H1>
+ <P>
+ <A NAME="IDX136"></A>
+ <A NAME="IDX137"></A>
+ 
+ 
+ <P>
+ The Bison parser is actually a C function named <CODE>yyparse</CODE>.  Here we
+ describe the interface conventions of <CODE>yyparse</CODE> and the other
+ functions that it needs to use.
+ 
+ 
+ <P>
+ Keep in mind that the parser uses many C identifiers starting with
+ <SAMP>`yy'</SAMP> and <SAMP>`YY'</SAMP> for internal purposes.  If you use such an
+ identifier (aside from those in this manual) in an action or in additional
+ C code in the grammar file, you are likely to run into trouble.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC69" HREF="bison_toc.html#TOC69">The Parser Function <CODE>yyparse</CODE></A></H2>
+ <P>
+ <A NAME="IDX138"></A>
+ 
+ 
+ <P>
+ You call the function <CODE>yyparse</CODE> to cause parsing to occur.  This
+ function reads tokens, executes actions, and ultimately returns when it
+ encounters end-of-input or an unrecoverable syntax error.  You can also
+ write an action which directs <CODE>yyparse</CODE> to return immediately
+ without reading further.
+ 
+ 
+ <P>
+ The value returned by <CODE>yyparse</CODE> is 0 if parsing was successful (return
+ is due to end-of-input).
+ 
+ 
+ <P>
+ The value is 1 if parsing failed (return is due to a syntax error).
+ 
+ 
+ <P>
+ In an action, you can cause immediate return from <CODE>yyparse</CODE> by using
+ these macros:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>YYACCEPT</CODE>
+ <DD>
+ <A NAME="IDX139"></A>
+ Return immediately with value 0 (to report success).
+ 
+ <DT><CODE>YYABORT</CODE>
+ <DD>
+ <A NAME="IDX140"></A>
+ Return immediately with value 1 (to report failure).
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC70" HREF="bison_toc.html#TOC70">The Lexical Analyzer Function <CODE>yylex</CODE></A></H2>
+ <P>
+ <A NAME="IDX141"></A>
+ <A NAME="IDX142"></A>
+ 
+ 
+ <P>
+ The <EM>lexical analyzer</EM> function, <CODE>yylex</CODE>, recognizes tokens from
+ the input stream and returns them to the parser.  Bison does not create
+ this function automatically; you must write it so that <CODE>yyparse</CODE> can
+ call it.  The function is sometimes referred to as a lexical scanner.
+ 
+ 
+ <P>
+ In simple programs, <CODE>yylex</CODE> is often defined at the end of the Bison
+ grammar file.  If <CODE>yylex</CODE> is defined in a separate source file, you
+ need to arrange for the token-type macro definitions to be available there.
+ To do this, use the <SAMP>`-d'</SAMP> option when you run Bison, so that it will
+ write these macro definitions into a separate header file
+ <TT>`<VAR>name</VAR>.tab.h'</TT> which you can include in the other source files
+ that need it.  See section <A HREF="bison.html#SEC96">Invoking Bison</A>.
+ 
+ 
+ 
+ <H3><A NAME="SEC71" HREF="bison_toc.html#TOC71">Calling Convention for <CODE>yylex</CODE></A></H3>
+ 
+ <P>
+ The value that <CODE>yylex</CODE> returns must be the numeric code for the type
+ of token it has just found, or 0 for end-of-input.
+ 
+ 
+ <P>
+ When a token is referred to in the grammar rules by a name, that name
+ in the parser file becomes a C macro whose definition is the proper
+ numeric code for that token type.  So <CODE>yylex</CODE> can use the name
+ to indicate that type.  See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ 
+ <P>
+ When a token is referred to in the grammar rules by a character literal,
+ the numeric code for that character is also the code for the token type.
+ So <CODE>yylex</CODE> can simply return that character code.  The null character
+ must not be used this way, because its code is zero and that is what
+ signifies end-of-input.
+ 
+ 
+ <P>
+ Here is an example showing these things:
+ 
+ 
+ 
+ <PRE>
+ int
+ yylex (void)
+ {
+   ...
+   if (c == EOF)     /* Detect end of file. */
+     return 0;
+   ...
+   if (c == '+' || c == '-')
+     return c;      /* Assume token type for `+' is '+'. */
+   ...
+   return INT;      /* Return the type of the token. */
+   ...
+ }
+ </PRE>
+ 
+ <P>
+ This interface has been designed so that the output from the <CODE>lex</CODE>
+ utility can be used without change as the definition of <CODE>yylex</CODE>.
+ 
+ 
+ <P>
+ If the grammar uses literal string tokens, there are two ways that
+ <CODE>yylex</CODE> can determine the token type codes for them:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ If the grammar defines symbolic token names as aliases for the
+ literal string tokens, <CODE>yylex</CODE> can use these symbolic names like
+ all others.  In this case, the use of the literal string tokens in
+ the grammar file has no effect on <CODE>yylex</CODE>.
+ 
+ <LI>
+ 
+ <CODE>yylex</CODE> can find the multicharacter token in the <CODE>yytname</CODE>
+ table.  The index of the token in the table is the token type's code.
+ The name of a multicharacter token is recorded in <CODE>yytname</CODE> with a
+ double-quote, the token's characters, and another double-quote.  The
+ token's characters are not escaped in any way; they appear verbatim in
+ the contents of the string in the table.
+ 
+ Here's code for looking up a token in <CODE>yytname</CODE>, assuming that the
+ characters of the token are stored in <CODE>token_buffer</CODE>.
+ 
+ 
+ <PRE>
+ for (i = 0; i &#60; YYNTOKENS; i++)
+   {
+     if (yytname[i] != 0
+         &#38;&#38; yytname[i][0] == '"'
+         &#38;&#38; strncmp (yytname[i] + 1, token_buffer,
+                     strlen (token_buffer))
+         &#38;&#38; yytname[i][strlen (token_buffer) + 1] == '"'
+         &#38;&#38; yytname[i][strlen (token_buffer) + 2] == 0)
+       break;
+   }
+ </PRE>
+ 
+ The <CODE>yytname</CODE> table is generated only if you use the
+ <CODE>%token_table</CODE> declaration.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ </UL>
+ 
+ 
+ 
+ <H3><A NAME="SEC72" HREF="bison_toc.html#TOC72">Semantic Values of Tokens</A></H3>
+ 
+ <P>
+ <A NAME="IDX143"></A>
+ In an ordinary (non-reentrant) parser, the semantic value of the token must
+ be stored into the global variable <CODE>yylval</CODE>.  When you are using
+ just one data type for semantic values, <CODE>yylval</CODE> has that type.
+ Thus, if the type is <CODE>int</CODE> (the default), you might write this in
+ <CODE>yylex</CODE>:
+ 
+ 
+ 
+ <PRE>
+   ...
+   yylval = value;  /* Put value onto Bison stack. */
+   return INT;      /* Return the type of the token. */
+   ...
+ </PRE>
+ 
+ <P>
+ When you are using multiple data types, <CODE>yylval</CODE>'s type is a union
+ made from the <CODE>%union</CODE> declaration (see section <A HREF="bison.html#SEC61">The Collection of Value Types</A>).  So when
+ you store a token's value, you must use the proper member of the union.
+ If the <CODE>%union</CODE> declaration looks like this:
+ 
+ 
+ 
+ <PRE>
+ %union {
+   int intval;
+   double val;
+   symrec *tptr;
+ }
+ </PRE>
+ 
+ <P>
+ then the code in <CODE>yylex</CODE> might look like this:
+ 
+ 
+ 
+ <PRE>
+   ...
+   yylval.intval = value; /* Put value onto Bison stack. */
+   return INT;          /* Return the type of the token. */
+   ...
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC73" HREF="bison_toc.html#TOC73">Textual Positions of Tokens</A></H3>
+ 
+ <P>
+ <A NAME="IDX144"></A>
+ If you are using the <SAMP>`@<VAR>n</VAR>'</SAMP>-feature (see section <A HREF="bison.html#SEC54">Tracking Locations</A>) in actions to keep track of the
+ textual locations of tokens and groupings, then you must provide this
+ information in <CODE>yylex</CODE>.  The function <CODE>yyparse</CODE> expects to
+ find the textual location of a token just parsed in the global variable
+ <CODE>yylloc</CODE>.  So <CODE>yylex</CODE> must store the proper data in that
+ variable.
+ 
+ 
+ <P>
+ By default, the value of <CODE>yylloc</CODE> is a structure and you need only
+ initialize the members that are going to be used by the actions.  The
+ four members are called <CODE>first_line</CODE>, <CODE>first_column</CODE>,
+ <CODE>last_line</CODE> and <CODE>last_column</CODE>.  Note that the use of this
+ feature makes the parser noticeably slower.
+ 
+ 
+ <P>
+ <A NAME="IDX145"></A>
+ The data type of <CODE>yylloc</CODE> has the name <CODE>YYLTYPE</CODE>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC74" HREF="bison_toc.html#TOC74">Calling Conventions for Pure Parsers</A></H3>
+ 
+ <P>
+ When you use the Bison declaration <CODE>%pure_parser</CODE> to request a
+ pure, reentrant parser, the global communication variables <CODE>yylval</CODE>
+ and <CODE>yylloc</CODE> cannot be used.  (See section <A HREF="bison.html#SEC65">A Pure (Reentrant) Parser</A>.)  In such parsers the two global variables are replaced by
+ pointers passed as arguments to <CODE>yylex</CODE>.  You must declare them as
+ shown here, and pass the information back by storing it through those
+ pointers.
+ 
+ 
+ 
+ <PRE>
+ int
+ yylex (YYSTYPE *lvalp, YYLTYPE *llocp)
+ {
+   ...
+   *lvalp = value;  /* Put value onto Bison stack.  */
+   return INT;      /* Return the type of the token.  */
+   ...
+ }
+ </PRE>
+ 
+ <P>
+ If the grammar file does not use the <SAMP>`@'</SAMP> constructs to refer to
+ textual positions, then the type <CODE>YYLTYPE</CODE> will not be defined.  In
+ this case, omit the second argument; <CODE>yylex</CODE> will be called with
+ only one argument.
+ 
+ 
+ <P>
+ <A NAME="IDX146"></A>
+ If you use a reentrant parser, you can optionally pass additional
+ parameter information to it in a reentrant way.  To do so, define the
+ macro <CODE>YYPARSE_PARAM</CODE> as a variable name.  This modifies the
+ <CODE>yyparse</CODE> function to accept one argument, of type <CODE>void *</CODE>,
+ with that name.
+ 
+ 
+ <P>
+ When you call <CODE>yyparse</CODE>, pass the address of an object, casting the
+ address to <CODE>void *</CODE>.  The grammar actions can refer to the contents
+ of the object by casting the pointer value back to its proper type and
+ then dereferencing it.  Here's an example.  Write this in the parser:
+ 
+ 
+ 
+ <PRE>
+ %{
+ struct parser_control
+ {
+   int nastiness;
+   int randomness;
+ };
+ 
+ #define YYPARSE_PARAM parm
+ %}
+ </PRE>
+ 
+ <P>
+ Then call the parser like this:
+ 
+ 
+ 
+ <PRE>
+ struct parser_control
+ {
+   int nastiness;
+   int randomness;
+ };
+ 
+ ...
+ 
+ {
+   struct parser_control foo;
+   ...  /* Store proper data in <CODE>foo</CODE>.  */
+   value = yyparse ((void *) &#38;foo);
+   ...
+ }
+ </PRE>
+ 
+ <P>
+ In the grammar actions, use expressions like this to refer to the data:
+ 
+ 
+ 
+ <PRE>
+ ((struct parser_control *) parm)-&#62;randomness
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX147"></A>
+ If you wish to pass the additional parameter data to <CODE>yylex</CODE>,
+ define the macro <CODE>YYLEX_PARAM</CODE> just like <CODE>YYPARSE_PARAM</CODE>, as
+ shown here:
+ 
+ 
+ 
+ <PRE>
+ %{
+ struct parser_control
+ {
+   int nastiness;
+   int randomness;
+ };
+ 
+ #define YYPARSE_PARAM parm
+ #define YYLEX_PARAM parm
+ %}
+ </PRE>
+ 
+ <P>
+ You should then define <CODE>yylex</CODE> to accept one additional
+ argument--the value of <CODE>parm</CODE>.  (This makes either two or three
+ arguments in total, depending on whether an argument of type
+ <CODE>YYLTYPE</CODE> is passed.)  You can declare the argument as a pointer to
+ the proper object type, or you can declare it as <CODE>void *</CODE> and
+ access the contents as shown above.
+ 
+ 
+ <P>
+ You can use <SAMP>`%pure_parser'</SAMP> to request a reentrant parser without
+ also using <CODE>YYPARSE_PARAM</CODE>.  Then you should call <CODE>yyparse</CODE>
+ with no arguments, as usual.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC75" HREF="bison_toc.html#TOC75">The Error Reporting Function <CODE>yyerror</CODE></A></H2>
+ <P>
+ <A NAME="IDX148"></A>
+ <A NAME="IDX149"></A>
+ <A NAME="IDX150"></A>
+ <A NAME="IDX151"></A>
+ 
+ 
+ <P>
+ The Bison parser detects a <EM>parse error</EM> or <EM>syntax error</EM>
+ whenever it reads a token which cannot satisfy any syntax rule.  An
+ action in the grammar can also explicitly proclaim an error, using the
+ macro <CODE>YYERROR</CODE> (see section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>).
+ 
+ 
+ <P>
+ The Bison parser expects to report the error by calling an error
+ reporting function named <CODE>yyerror</CODE>, which you must supply.  It is
+ called by <CODE>yyparse</CODE> whenever a syntax error is found, and it
+ receives one argument.  For a parse error, the string is normally
+ <CODE>"parse error"</CODE>.
+ 
+ 
+ <P>
+ <A NAME="IDX152"></A>
+ If you define the macro <CODE>YYERROR_VERBOSE</CODE> in the Bison declarations
+ section (see section <A HREF="bison.html#SEC42">The Bison Declarations Section</A>),
+ then Bison provides a more verbose and specific error message string
+ instead of just plain <CODE>"parse error"</CODE>.  It doesn't matter what
+ definition you use for <CODE>YYERROR_VERBOSE</CODE>, just whether you define
+ it.
+ 
+ 
+ <P>
+ The parser can detect one other kind of error: stack overflow.  This
+ happens when the input contains constructions that are very deeply
+ nested.  It isn't likely you will encounter this, since the Bison
+ parser extends its stack automatically up to a very large limit.  But
+ if overflow happens, <CODE>yyparse</CODE> calls <CODE>yyerror</CODE> in the usual
+ fashion, except that the argument string is <CODE>"parser stack
+ overflow"</CODE>.
+ 
+ 
+ <P>
+ The following definition suffices in simple programs:
+ 
+ 
+ 
+ <PRE>
+ void
+ yyerror (char *s)
+ {
+   fprintf (stderr, "%s\n", s);
+ }
+ </PRE>
+ 
+ <P>
+ After <CODE>yyerror</CODE> returns to <CODE>yyparse</CODE>, the latter will attempt
+ error recovery if you have written suitable error recovery grammar rules
+ (see section <A HREF="bison.html#SEC90">Error Recovery</A>).  If recovery is impossible, <CODE>yyparse</CODE> will
+ immediately return 1.
+ 
+ 
+ <P>
+ <A NAME="IDX153"></A>
+ The variable <CODE>yynerrs</CODE> contains the number of syntax errors
+ encountered so far.  Normally this variable is global; but if you
+ request a pure parser (see section <A HREF="bison.html#SEC65">A Pure (Reentrant) Parser</A>) then it is a local variable
+ which only the actions can access.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC76" HREF="bison_toc.html#TOC76">Special Features for Use in Actions</A></H2>
+ <P>
+ <A NAME="IDX154"></A>
+ <A NAME="IDX155"></A>
+ 
+ 
+ <P>
+ Here is a table of Bison constructs, variables and macros that
+ are useful in actions.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`$$'</SAMP>
+ <DD>
+ Acts like a variable that contains the semantic value for the
+ grouping made by the current rule.  See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ <DT><SAMP>`$<VAR>n</VAR>'</SAMP>
+ <DD>
+ Acts like a variable that contains the semantic value for the
+ <VAR>n</VAR>th component of the current rule.  See section <A HREF="bison.html#SEC51">Actions</A>.
+ 
+ <DT><SAMP>`$&#60;<VAR>typealt</VAR>&#62;$'</SAMP>
+ <DD>
+ Like <CODE>$$</CODE> but specifies alternative <VAR>typealt</VAR> in the union
+ specified by the <CODE>%union</CODE> declaration.  See section <A HREF="bison.html#SEC52">Data Types of Values in Actions</A>.
+ 
+ <DT><SAMP>`$&#60;<VAR>typealt</VAR>&#62;<VAR>n</VAR>'</SAMP>
+ <DD>
+ Like <CODE>$<VAR>n</VAR></CODE> but specifies alternative <VAR>typealt</VAR> in the
+ union specified by the <CODE>%union</CODE> declaration.
+ See section <A HREF="bison.html#SEC52">Data Types of Values in Actions</A>.
+ <DT><SAMP>`YYABORT;'</SAMP>
+ <DD>
+ Return immediately from <CODE>yyparse</CODE>, indicating failure.
+ See section <A HREF="bison.html#SEC69">The Parser Function <CODE>yyparse</CODE></A>.
+ 
+ <DT><SAMP>`YYACCEPT;'</SAMP>
+ <DD>
+ Return immediately from <CODE>yyparse</CODE>, indicating success.
+ See section <A HREF="bison.html#SEC69">The Parser Function <CODE>yyparse</CODE></A>.
+ 
+ <DT><SAMP>`YYBACKUP (<VAR>token</VAR>, <VAR>value</VAR>);'</SAMP>
+ <DD>
+ <A NAME="IDX156"></A>
+ Unshift a token.  This macro is allowed only for rules that reduce
+ a single value, and only when there is no look-ahead token.
+ It installs a look-ahead token with token type <VAR>token</VAR> and
+ semantic value <VAR>value</VAR>; then it discards the value that was
+ going to be reduced by this rule.
+ 
+ If the macro is used when it is not valid, such as when there is
+ a look-ahead token already, then it reports a syntax error with
+ a message <SAMP>`cannot back up'</SAMP> and performs ordinary error
+ recovery.
+ 
+ In either case, the rest of the action is not executed.
+ 
+ <DT><SAMP>`YYEMPTY'</SAMP>
+ <DD>
+ <A NAME="IDX157"></A>
+ Value stored in <CODE>yychar</CODE> when there is no look-ahead token.
+ 
+ <DT><SAMP>`YYERROR;'</SAMP>
+ <DD>
+ <A NAME="IDX158"></A>
+ Cause an immediate syntax error.  This statement initiates error
+ recovery just as if the parser itself had detected an error; however, it
+ does not call <CODE>yyerror</CODE>, and does not print any message.  If you
+ want to print an error message, call <CODE>yyerror</CODE> explicitly before
+ the <SAMP>`YYERROR;'</SAMP> statement.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><SAMP>`YYRECOVERING'</SAMP>
+ <DD>
+ This macro stands for an expression that has the value 1 when the parser
+ is recovering from a syntax error, and 0 the rest of the time.
+ See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><SAMP>`yychar'</SAMP>
+ <DD>
+ Variable containing the current look-ahead token.  (In a pure parser,
+ this is actually a local variable within <CODE>yyparse</CODE>.)  When there is
+ no look-ahead token, the value <CODE>YYEMPTY</CODE> is stored in the variable.
+ See section <A HREF="bison.html#SEC78">Look-Ahead Tokens</A>.
+ 
+ <DT><SAMP>`yyclearin;'</SAMP>
+ <DD>
+ Discard the current look-ahead token.  This is useful primarily in
+ error rules.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><SAMP>`yyerrok;'</SAMP>
+ <DD>
+ Resume generating error messages immediately for subsequent syntax
+ errors.  This is useful primarily in error rules.
+ See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><SAMP>`@$'</SAMP>
+ <DD>
+ <A NAME="IDX159"></A>
+ Acts like a structure variable containing information on the textual position
+ of the grouping made by the current rule.  See section <A HREF="bison.html#SEC54">Tracking Locations</A>.
+ 
+ <DT><SAMP>`@<VAR>n</VAR>'</SAMP>
+ <DD>
+ <A NAME="IDX160"></A>
+ Acts like a structure variable containing information on the textual position
+ of the <VAR>n</VAR>th component of the current rule.  See section <A HREF="bison.html#SEC54">Tracking Locations</A>.
+ 
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC77" HREF="bison_toc.html#TOC77">The Bison Parser Algorithm</A></H1>
+ <P>
+ <A NAME="IDX161"></A>
+ <A NAME="IDX162"></A>
+ <A NAME="IDX163"></A>
+ <A NAME="IDX164"></A>
+ <A NAME="IDX165"></A>
+ <A NAME="IDX166"></A>
+ 
+ 
+ <P>
+ As Bison reads tokens, it pushes them onto a stack along with their
+ semantic values.  The stack is called the <EM>parser stack</EM>.  Pushing a
+ token is traditionally called <EM>shifting</EM>.
+ 
+ 
+ <P>
+ For example, suppose the infix calculator has read <SAMP>`1 + 5 *'</SAMP>, with a
+ <SAMP>`3'</SAMP> to come.  The stack will have four elements, one for each token
+ that was shifted.
+ 
+ 
+ <P>
+ But the stack does not always have an element for each token read.  When
+ the last <VAR>n</VAR> tokens and groupings shifted match the components of a
+ grammar rule, they can be combined according to that rule.  This is called
+ <EM>reduction</EM>.  Those tokens and groupings are replaced on the stack by a
+ single grouping whose symbol is the result (left hand side) of that rule.
+ Running the rule's action is part of the process of reduction, because this
+ is what computes the semantic value of the resulting grouping.
+ 
+ 
+ <P>
+ For example, if the infix calculator's parser stack contains this:
+ 
+ 
+ 
+ <PRE>
+ 1 + 5 * 3
+ </PRE>
+ 
+ <P>
+ and the next input token is a newline character, then the last three
+ elements can be reduced to 15 via the rule:
+ 
+ 
+ 
+ <PRE>
+ expr: expr '*' expr;
+ </PRE>
+ 
+ <P>
+ Then the stack contains just these three elements:
+ 
+ 
+ 
+ <PRE>
+ 1 + 15
+ </PRE>
+ 
+ <P>
+ At this point, another reduction can be made, resulting in the single value
+ 16.  Then the newline token can be shifted.
+ 
+ 
+ <P>
+ The parser tries, by shifts and reductions, to reduce the entire input down
+ to a single grouping whose symbol is the grammar's start-symbol
+ (see section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>).
+ 
+ 
+ <P>
+ This kind of parser is known in the literature as a bottom-up parser.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC78" HREF="bison_toc.html#TOC78">Look-Ahead Tokens</A></H2>
+ <P>
+ <A NAME="IDX167"></A>
+ 
+ 
+ <P>
+ The Bison parser does <EM>not</EM> always reduce immediately as soon as the
+ last <VAR>n</VAR> tokens and groupings match a rule.  This is because such a
+ simple strategy is inadequate to handle most languages.  Instead, when a
+ reduction is possible, the parser sometimes "looks ahead" at the next
+ token in order to decide what to do.
+ 
+ 
+ <P>
+ When a token is read, it is not immediately shifted; first it becomes the
+ <EM>look-ahead token</EM>, which is not on the stack.  Now the parser can
+ perform one or more reductions of tokens and groupings on the stack, while
+ the look-ahead token remains off to the side.  When no more reductions
+ should take place, the look-ahead token is shifted onto the stack.  This
+ does not mean that all possible reductions have been done; depending on the
+ token type of the look-ahead token, some rules may choose to delay their
+ application.
+ 
+ 
+ <P>
+ Here is a simple case where look-ahead is needed.  These three rules define
+ expressions which contain binary addition operators and postfix unary
+ factorial operators (<SAMP>`!'</SAMP>), and allow parentheses for grouping.
+ 
+ 
+ 
+ <PRE>
+ expr:     term '+' expr
+         | term
+         ;
+ 
+ term:     '(' expr ')'
+         | term '!'
+         | NUMBER
+         ;
+ </PRE>
+ 
+ <P>
+ Suppose that the tokens <SAMP>`1 + 2'</SAMP> have been read and shifted; what
+ should be done?  If the following token is <SAMP>`)'</SAMP>, then the first three
+ tokens must be reduced to form an <CODE>expr</CODE>.  This is the only valid
+ course, because shifting the <SAMP>`)'</SAMP> would produce a sequence of symbols
+ <CODE>term ')'</CODE>, and no rule allows this.
+ 
+ 
+ <P>
+ If the following token is <SAMP>`!'</SAMP>, then it must be shifted immediately so
+ that <SAMP>`2 !'</SAMP> can be reduced to make a <CODE>term</CODE>.  If instead the
+ parser were to reduce before shifting, <SAMP>`1 + 2'</SAMP> would become an
+ <CODE>expr</CODE>.  It would then be impossible to shift the <SAMP>`!'</SAMP> because
+ doing so would produce on the stack the sequence of symbols <CODE>expr
+ '!'</CODE>.  No rule allows that sequence.
+ 
+ 
+ <P>
+ <A NAME="IDX168"></A>
+ The current look-ahead token is stored in the variable <CODE>yychar</CODE>.
+ See section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC79" HREF="bison_toc.html#TOC79">Shift/Reduce Conflicts</A></H2>
+ <P>
+ <A NAME="IDX169"></A>
+ <A NAME="IDX170"></A>
+ <A NAME="IDX171"></A>
+ <A NAME="IDX172"></A>
+ 
+ 
+ <P>
+ Suppose we are parsing a language which has if-then and if-then-else
+ statements, with a pair of rules like this:
+ 
+ 
+ 
+ <PRE>
+ if_stmt:
+           IF expr THEN stmt
+         | IF expr THEN stmt ELSE stmt
+         ;
+ </PRE>
+ 
+ <P>
+ Here we assume that <CODE>IF</CODE>, <CODE>THEN</CODE> and <CODE>ELSE</CODE> are
+ terminal symbols for specific keyword tokens.
+ 
+ 
+ <P>
+ When the <CODE>ELSE</CODE> token is read and becomes the look-ahead token, the
+ contents of the stack (assuming the input is valid) are just right for
+ reduction by the first rule.  But it is also legitimate to shift the
+ <CODE>ELSE</CODE>, because that would lead to eventual reduction by the second
+ rule.
+ 
+ 
+ <P>
+ This situation, where either a shift or a reduction would be valid, is
+ called a <EM>shift/reduce conflict</EM>.  Bison is designed to resolve
+ these conflicts by choosing to shift, unless otherwise directed by
+ operator precedence declarations.  To see the reason for this, let's
+ contrast it with the other alternative.
+ 
+ 
+ <P>
+ Since the parser prefers to shift the <CODE>ELSE</CODE>, the result is to attach
+ the else-clause to the innermost if-statement, making these two inputs
+ equivalent:
+ 
+ 
+ 
+ <PRE>
+ if x then if y then win (); else lose;
+ 
+ if x then do; if y then win (); else lose; end;
+ </PRE>
+ 
+ <P>
+ But if the parser chose to reduce when possible rather than shift, the
+ result would be to attach the else-clause to the outermost if-statement,
+ making these two inputs equivalent:
+ 
+ 
+ 
+ <PRE>
+ if x then if y then win (); else lose;
+ 
+ if x then do; if y then win (); end; else lose;
+ </PRE>
+ 
+ <P>
+ The conflict exists because the grammar as written is ambiguous: either
+ parsing of the simple nested if-statement is legitimate.  The established
+ convention is that these ambiguities are resolved by attaching the
+ else-clause to the innermost if-statement; this is what Bison accomplishes
+ by choosing to shift rather than reduce.  (It would ideally be cleaner to
+ write an unambiguous grammar, but that is very hard to do in this case.)
+ This particular ambiguity was first encountered in the specifications of
+ Algol 60 and is called the "dangling <CODE>else</CODE>" ambiguity.
+ 
+ 
+ <P>
+ To avoid warnings from Bison about predictable, legitimate shift/reduce
+ conflicts, use the <CODE>%expect <VAR>n</VAR></CODE> declaration.  There will be no
+ warning as long as the number of shift/reduce conflicts is exactly <VAR>n</VAR>.
+ See section <A HREF="bison.html#SEC63">Suppressing Conflict Warnings</A>.
+ 
+ 
+ <P>
+ The definition of <CODE>if_stmt</CODE> above is solely to blame for the
+ conflict, but the conflict does not actually appear without additional
+ rules.  Here is a complete Bison input file that actually manifests the
+ conflict:
+ 
+ 
+ 
+ <PRE>
+ %token IF THEN ELSE variable
+ %%
+ stmt:     expr
+         | if_stmt
+         ;
+ 
+ if_stmt:
+           IF expr THEN stmt
+         | IF expr THEN stmt ELSE stmt
+         ;
+ 
+ expr:     variable
+         ;
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC80" HREF="bison_toc.html#TOC80">Operator Precedence</A></H2>
+ <P>
+ <A NAME="IDX173"></A>
+ <A NAME="IDX174"></A>
+ 
+ 
+ <P>
+ Another situation where shift/reduce conflicts appear is in arithmetic
+ expressions.  Here shifting is not always the preferred resolution; the
+ Bison declarations for operator precedence allow you to specify when to
+ shift and when to reduce.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC81" HREF="bison_toc.html#TOC81">When Precedence is Needed</A></H3>
+ 
+ <P>
+ Consider the following ambiguous grammar fragment (ambiguous because the
+ input <SAMP>`1 - 2 * 3'</SAMP> can be parsed in two different ways):
+ 
+ 
+ 
+ <PRE>
+ expr:     expr '-' expr
+         | expr '*' expr
+         | expr '&#60;' expr
+         | '(' expr ')'
+         ...
+         ;
+ </PRE>
+ 
+ <P>
+ Suppose the parser has seen the tokens <SAMP>`1'</SAMP>, <SAMP>`-'</SAMP> and <SAMP>`2'</SAMP>;
+ should it reduce them via the rule for the subtraction operator?  It
+ depends on the next token.  Of course, if the next token is <SAMP>`)'</SAMP>, we
+ must reduce; shifting is invalid because no single rule can reduce the
+ token sequence <SAMP>`- 2 )'</SAMP> or anything starting with that.  But if
+ the next token is <SAMP>`*'</SAMP> or <SAMP>`&#60;'</SAMP>, we have a choice: either
+ shifting or reduction would allow the parse to complete, but with
+ different results.
+ 
+ 
+ <P>
+ To decide which one Bison should do, we must consider the results.  If
+ the next operator token <VAR>op</VAR> is shifted, then it must be reduced
+ first in order to permit another opportunity to reduce the difference.
+ The result is (in effect) <SAMP>`1 - (2 <VAR>op</VAR> 3)'</SAMP>.  On the other
+ hand, if the subtraction is reduced before shifting <VAR>op</VAR>, the result
+ is <SAMP>`(1 - 2) <VAR>op</VAR> 3'</SAMP>.  Clearly, then, the choice of shift or
+ reduce should depend on the relative precedence of the operators
+ <SAMP>`-'</SAMP> and <VAR>op</VAR>: <SAMP>`*'</SAMP> should be shifted first, but not
+ <SAMP>`&#60;'</SAMP>.
+ 
+ 
+ <P>
+ <A NAME="IDX175"></A>
+ What about input such as <SAMP>`1 - 2 - 5'</SAMP>; should this be
+ <SAMP>`(1 - 2) - 5'</SAMP> or should it be <SAMP>`1 - (2 - 5)'</SAMP>?  For most
+ operators we prefer the former, which is called <EM>left association</EM>.
+ The latter alternative, <EM>right association</EM>, is desirable for
+ assignment operators.  The choice of left or right association is a
+ matter of whether the parser chooses to shift or reduce when the stack
+ contains <SAMP>`1 - 2'</SAMP> and the look-ahead token is <SAMP>`-'</SAMP>: shifting
+ makes right-associativity.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC82" HREF="bison_toc.html#TOC82">Specifying Operator Precedence</A></H3>
+ <P>
+ <A NAME="IDX176"></A>
+ <A NAME="IDX177"></A>
+ <A NAME="IDX178"></A>
+ 
+ 
+ <P>
+ Bison allows you to specify these choices with the operator precedence
+ declarations <CODE>%left</CODE> and <CODE>%right</CODE>.  Each such declaration
+ contains a list of tokens, which are operators whose precedence and
+ associativity is being declared.  The <CODE>%left</CODE> declaration makes all
+ those operators left-associative and the <CODE>%right</CODE> declaration makes
+ them right-associative.  A third alternative is <CODE>%nonassoc</CODE>, which
+ declares that it is a syntax error to find the same operator twice "in a
+ row".
+ 
+ 
+ <P>
+ The relative precedence of different operators is controlled by the
+ order in which they are declared.  The first <CODE>%left</CODE> or
+ <CODE>%right</CODE> declaration in the file declares the operators whose
+ precedence is lowest, the next such declaration declares the operators
+ whose precedence is a little higher, and so on.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC83" HREF="bison_toc.html#TOC83">Precedence Examples</A></H3>
+ 
+ <P>
+ In our example, we would want the following declarations:
+ 
+ 
+ 
+ <PRE>
+ %left '&#60;'
+ %left '-'
+ %left '*'
+ </PRE>
+ 
+ <P>
+ In a more complete example, which supports other operators as well, we
+ would declare them in groups of equal precedence.  For example, <CODE>'+'</CODE> is
+ declared with <CODE>'-'</CODE>:
+ 
+ 
+ 
+ <PRE>
+ %left '&#60;' '&#62;' '=' NE LE GE
+ %left '+' '-'
+ %left '*' '/'
+ </PRE>
+ 
+ <P>
+ (Here <CODE>NE</CODE> and so on stand for the operators for "not equal"
+ and so on.  We assume that these tokens are more than one character long
+ and therefore are represented by names, not character literals.)
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC84" HREF="bison_toc.html#TOC84">How Precedence Works</A></H3>
+ 
+ <P>
+ The first effect of the precedence declarations is to assign precedence
+ levels to the terminal symbols declared.  The second effect is to assign
+ precedence levels to certain rules: each rule gets its precedence from the
+ last terminal symbol mentioned in the components.  (You can also specify
+ explicitly the precedence of a rule.  See section <A HREF="bison.html#SEC85">Context-Dependent Precedence</A>.)
+ 
+ 
+ <P>
+ Finally, the resolution of conflicts works by comparing the
+ precedence of the rule being considered with that of the
+ look-ahead token.  If the token's precedence is higher, the
+ choice is to shift.  If the rule's precedence is higher, the
+ choice is to reduce.  If they have equal precedence, the choice
+ is made based on the associativity of that precedence level.  The
+ verbose output file made by <SAMP>`-v'</SAMP> (see section <A HREF="bison.html#SEC96">Invoking Bison</A>) says
+ how each conflict was resolved.
+ 
+ 
+ <P>
+ Not all rules and not all tokens have precedence.  If either the rule or
+ the look-ahead token has no precedence, then the default is to shift.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC85" HREF="bison_toc.html#TOC85">Context-Dependent Precedence</A></H2>
+ <P>
+ <A NAME="IDX179"></A>
+ <A NAME="IDX180"></A>
+ <A NAME="IDX181"></A>
+ <A NAME="IDX182"></A>
+ <A NAME="IDX183"></A>
+ 
+ 
+ <P>
+ Often the precedence of an operator depends on the context.  This sounds
+ outlandish at first, but it is really very common.  For example, a minus
+ sign typically has a very high precedence as a unary operator, and a
+ somewhat lower precedence (lower than multiplication) as a binary operator.
+ 
+ 
+ <P>
+ The Bison precedence declarations, <CODE>%left</CODE>, <CODE>%right</CODE> and
+ <CODE>%nonassoc</CODE>, can only be used once for a given token; so a token has
+ only one precedence declared in this way.  For context-dependent
+ precedence, you need to use an additional mechanism: the <CODE>%prec</CODE>
+ modifier for rules.
+ 
+ <P>
+ The <CODE>%prec</CODE> modifier declares the precedence of a particular rule by
+ specifying a terminal symbol whose precedence should be used for that rule.
+ It's not necessary for that symbol to appear otherwise in the rule.  The
+ modifier's syntax is:
+ 
+ 
+ 
+ <PRE>
+ %prec <VAR>terminal-symbol</VAR>
+ </PRE>
+ 
+ <P>
+ and it is written after the components of the rule.  Its effect is to
+ assign the rule the precedence of <VAR>terminal-symbol</VAR>, overriding
+ the precedence that would be deduced for it in the ordinary way.  The
+ altered rule precedence then affects how conflicts involving that rule
+ are resolved (see section <A HREF="bison.html#SEC80">Operator Precedence</A>).
+ 
+ 
+ <P>
+ Here is how <CODE>%prec</CODE> solves the problem of unary minus.  First, declare
+ a precedence for a fictitious terminal symbol named <CODE>UMINUS</CODE>.  There
+ are no tokens of this type, but the symbol serves to stand for its
+ precedence:
+ 
+ 
+ 
+ <PRE>
+ ...
+ %left '+' '-'
+ %left '*'
+ %left UMINUS
+ </PRE>
+ 
+ <P>
+ Now the precedence of <CODE>UMINUS</CODE> can be used in specific rules:
+ 
+ 
+ 
+ <PRE>
+ exp:    ...
+         | exp '-' exp
+         ...
+         | '-' exp %prec UMINUS
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC86" HREF="bison_toc.html#TOC86">Parser States</A></H2>
+ <P>
+ <A NAME="IDX184"></A>
+ <A NAME="IDX185"></A>
+ <A NAME="IDX186"></A>
+ 
+ 
+ <P>
+ The function <CODE>yyparse</CODE> is implemented using a finite-state machine.
+ The values pushed on the parser stack are not simply token type codes; they
+ represent the entire sequence of terminal and nonterminal symbols at or
+ near the top of the stack.  The current state collects all the information
+ about previous input which is relevant to deciding what to do next.
+ 
+ 
+ <P>
+ Each time a look-ahead token is read, the current parser state together
+ with the type of look-ahead token are looked up in a table.  This table
+ entry can say, "Shift the look-ahead token."  In this case, it also
+ specifies the new parser state, which is pushed onto the top of the
+ parser stack.  Or it can say, "Reduce using rule number <VAR>n</VAR>."
+ This means that a certain number of tokens or groupings are taken off
+ the top of the stack, and replaced by one grouping.  In other words,
+ that number of states are popped from the stack, and one new state is
+ pushed.
+ 
+ 
+ <P>
+ There is one other alternative: the table can say that the look-ahead token
+ is erroneous in the current state.  This causes error processing to begin
+ (see section <A HREF="bison.html#SEC90">Error Recovery</A>).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC87" HREF="bison_toc.html#TOC87">Reduce/Reduce Conflicts</A></H2>
+ <P>
+ <A NAME="IDX187"></A>
+ <A NAME="IDX188"></A>
+ 
+ 
+ <P>
+ A reduce/reduce conflict occurs if there are two or more rules that apply
+ to the same sequence of input.  This usually indicates a serious error
+ in the grammar.
+ 
+ 
+ <P>
+ For example, here is an erroneous attempt to define a sequence
+ of zero or more <CODE>word</CODE> groupings.
+ 
+ 
+ 
+ <PRE>
+ sequence: /* empty */
+                 { printf ("empty sequence\n"); }
+         | maybeword
+         | sequence word
+                 { printf ("added word %s\n", $2); }
+         ;
+ 
+ maybeword: /* empty */
+                 { printf ("empty maybeword\n"); }
+         | word
+                 { printf ("single word %s\n", $1); }
+         ;
+ </PRE>
+ 
+ <P>
+ The error is an ambiguity: there is more than one way to parse a single
+ <CODE>word</CODE> into a <CODE>sequence</CODE>.  It could be reduced to a
+ <CODE>maybeword</CODE> and then into a <CODE>sequence</CODE> via the second rule.
+ Alternatively, nothing-at-all could be reduced into a <CODE>sequence</CODE>
+ via the first rule, and this could be combined with the <CODE>word</CODE>
+ using the third rule for <CODE>sequence</CODE>.
+ 
+ 
+ <P>
+ There is also more than one way to reduce nothing-at-all into a
+ <CODE>sequence</CODE>.  This can be done directly via the first rule,
+ or indirectly via <CODE>maybeword</CODE> and then the second rule.
+ 
+ 
+ <P>
+ You might think that this is a distinction without a difference, because it
+ does not change whether any particular input is valid or not.  But it does
+ affect which actions are run.  One parsing order runs the second rule's
+ action; the other runs the first rule's action and the third rule's action.
+ In this example, the output of the program changes.
+ 
+ 
+ <P>
+ Bison resolves a reduce/reduce conflict by choosing to use the rule that
+ appears first in the grammar, but it is very risky to rely on this.  Every
+ reduce/reduce conflict must be studied and usually eliminated.  Here is the
+ proper way to define <CODE>sequence</CODE>:
+ 
+ 
+ 
+ <PRE>
+ sequence: /* empty */
+                 { printf ("empty sequence\n"); }
+         | sequence word
+                 { printf ("added word %s\n", $2); }
+         ;
+ </PRE>
+ 
+ <P>
+ Here is another common error that yields a reduce/reduce conflict:
+ 
+ 
+ 
+ <PRE>
+ sequence: /* empty */
+         | sequence words
+         | sequence redirects
+         ;
+ 
+ words:    /* empty */
+         | words word
+         ;
+ 
+ redirects:/* empty */
+         | redirects redirect
+         ;
+ </PRE>
+ 
+ <P>
+ The intention here is to define a sequence which can contain either
+ <CODE>word</CODE> or <CODE>redirect</CODE> groupings.  The individual definitions of
+ <CODE>sequence</CODE>, <CODE>words</CODE> and <CODE>redirects</CODE> are error-free, but the
+ three together make a subtle ambiguity: even an empty input can be parsed
+ in infinitely many ways!
+ 
+ 
+ <P>
+ Consider: nothing-at-all could be a <CODE>words</CODE>.  Or it could be two
+ <CODE>words</CODE> in a row, or three, or any number.  It could equally well be a
+ <CODE>redirects</CODE>, or two, or any number.  Or it could be a <CODE>words</CODE>
+ followed by three <CODE>redirects</CODE> and another <CODE>words</CODE>.  And so on.
+ 
+ 
+ <P>
+ Here are two ways to correct these rules.  First, to make it a single level
+ of sequence:
+ 
+ 
+ 
+ <PRE>
+ sequence: /* empty */
+         | sequence word
+         | sequence redirect
+         ;
+ </PRE>
+ 
+ <P>
+ Second, to prevent either a <CODE>words</CODE> or a <CODE>redirects</CODE>
+ from being empty:
+ 
+ 
+ 
+ <PRE>
+ sequence: /* empty */
+         | sequence words
+         | sequence redirects
+         ;
+ 
+ words:    word
+         | words word
+         ;
+ 
+ redirects:redirect
+         | redirects redirect
+         ;
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC88" HREF="bison_toc.html#TOC88">Mysterious Reduce/Reduce Conflicts</A></H2>
+ 
+ <P>
+ Sometimes reduce/reduce conflicts can occur that don't look warranted.
+ Here is an example:
+ 
+ 
+ 
+ <PRE>
+ %token ID
+ 
+ %%
+ def:    param_spec return_spec ','
+         ;
+ param_spec:
+              type
+         |    name_list ':' type
+         ;
+ return_spec:
+              type
+         |    name ':' type
+         ;
+ type:        ID
+         ;
+ name:        ID
+         ;
+ name_list:
+              name
+         |    name ',' name_list
+         ;
+ </PRE>
+ 
+ <P>
+ It would seem that this grammar can be parsed with only a single token
+ of look-ahead: when a <CODE>param_spec</CODE> is being read, an <CODE>ID</CODE> is
+ a <CODE>name</CODE> if a comma or colon follows, or a <CODE>type</CODE> if another
+ <CODE>ID</CODE> follows.  In other words, this grammar is LR(1).
+ 
+ 
+ <P>
+ <A NAME="IDX189"></A>
+ <A NAME="IDX190"></A>
+ However, Bison, like most parser generators, cannot actually handle all
+ LR(1) grammars.  In this grammar, two contexts, that after an <CODE>ID</CODE>
+ at the beginning of a <CODE>param_spec</CODE> and likewise at the beginning of
+ a <CODE>return_spec</CODE>, are similar enough that Bison assumes they are the
+ same.  They appear similar because the same set of rules would be
+ active--the rule for reducing to a <CODE>name</CODE> and that for reducing to
+ a <CODE>type</CODE>.  Bison is unable to determine at that stage of processing
+ that the rules would require different look-ahead tokens in the two
+ contexts, so it makes a single parser state for them both.  Combining
+ the two contexts causes a conflict later.  In parser terminology, this
+ occurrence means that the grammar is not LALR(1).
+ 
+ 
+ <P>
+ In general, it is better to fix deficiencies than to document them.  But
+ this particular deficiency is intrinsically hard to fix; parser
+ generators that can handle LR(1) grammars are hard to write and tend to
+ produce parsers that are very large.  In practice, Bison is more useful
+ as it is now.
+ 
+ 
+ <P>
+ When the problem arises, you can often fix it by identifying the two
+ parser states that are being confused, and adding something to make them
+ look distinct.  In the above example, adding one rule to
+ <CODE>return_spec</CODE> as follows makes the problem go away:
+ 
+ 
+ 
+ <PRE>
+ %token BOGUS
+ ...
+ %%
+ ...
+ return_spec:
+              type
+         |    name ':' type
+         /* This rule is never used.  */
+         |    ID BOGUS
+         ;
+ </PRE>
+ 
+ <P>
+ This corrects the problem because it introduces the possibility of an
+ additional active rule in the context after the <CODE>ID</CODE> at the beginning of
+ <CODE>return_spec</CODE>.  This rule is not active in the corresponding context
+ in a <CODE>param_spec</CODE>, so the two contexts receive distinct parser states.
+ As long as the token <CODE>BOGUS</CODE> is never generated by <CODE>yylex</CODE>,
+ the added rule cannot alter the way actual input is parsed.
+ 
+ 
+ <P>
+ In this particular example, there is another way to solve the problem:
+ rewrite the rule for <CODE>return_spec</CODE> to use <CODE>ID</CODE> directly
+ instead of via <CODE>name</CODE>.  This also causes the two confusing
+ contexts to have different sets of active rules, because the one for
+ <CODE>return_spec</CODE> activates the altered rule for <CODE>return_spec</CODE>
+ rather than the one for <CODE>name</CODE>.
+ 
+ 
+ 
+ <PRE>
+ param_spec:
+              type
+         |    name_list ':' type
+         ;
+ return_spec:
+              type
+         |    ID ':' type
+         ;
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC89" HREF="bison_toc.html#TOC89">Stack Overflow, and How to Avoid It</A></H2>
+ <P>
+ <A NAME="IDX191"></A>
+ <A NAME="IDX192"></A>
+ <A NAME="IDX193"></A>
+ 
+ 
+ <P>
+ The Bison parser stack can overflow if too many tokens are shifted and
+ not reduced.  When this happens, the parser function <CODE>yyparse</CODE>
+ returns a nonzero value, pausing only to call <CODE>yyerror</CODE> to report
+ the overflow.
+ 
+ 
+ <P>
+ <A NAME="IDX194"></A>
+ By defining the macro <CODE>YYMAXDEPTH</CODE>, you can control how deep the
+ parser stack can become before a stack overflow occurs.  Define the
+ macro with a value that is an integer.  This value is the maximum number
+ of tokens that can be shifted (and not reduced) before overflow.
+ It must be a constant expression whose value is known at compile time.
+ 
+ 
+ <P>
+ The stack space allowed is not necessarily allocated.  If you specify a
+ large value for <CODE>YYMAXDEPTH</CODE>, the parser actually allocates a small
+ stack at first, and then makes it bigger by stages as needed.  This
+ increasing allocation happens automatically and silently.  Therefore,
+ you do not need to make <CODE>YYMAXDEPTH</CODE> painfully small merely to save
+ space for ordinary inputs that do not need much stack.
+ 
+ 
+ <P>
+ <A NAME="IDX195"></A>
+ The default value of <CODE>YYMAXDEPTH</CODE>, if you do not define it, is
+ 10000.
+ 
+ 
+ <P>
+ <A NAME="IDX196"></A>
+ You can control how much stack is allocated initially by defining the
+ macro <CODE>YYINITDEPTH</CODE>.  This value too must be a compile-time
+ constant integer.  The default is 200.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC90" HREF="bison_toc.html#TOC90">Error Recovery</A></H1>
+ <P>
+ <A NAME="IDX197"></A>
+ <A NAME="IDX198"></A>
+ 
+ 
+ <P>
+ It is not usually acceptable to have a program terminate on a parse
+ error.  For example, a compiler should recover sufficiently to parse the
+ rest of the input file and check it for errors; a calculator should accept
+ another expression.
+ 
+ 
+ <P>
+ In a simple interactive command parser where each input is one line, it may
+ be sufficient to allow <CODE>yyparse</CODE> to return 1 on error and have the
+ caller ignore the rest of the input line when that happens (and then call
+ <CODE>yyparse</CODE> again).  But this is inadequate for a compiler, because it
+ forgets all the syntactic context leading up to the error.  A syntax error
+ deep within a function in the compiler input should not cause the compiler
+ to treat the following line like the beginning of a source file.
+ 
+ 
+ <P>
+ <A NAME="IDX199"></A>
+ You can define how to recover from a syntax error by writing rules to
+ recognize the special token <CODE>error</CODE>.  This is a terminal symbol that
+ is always defined (you need not declare it) and reserved for error
+ handling.  The Bison parser generates an <CODE>error</CODE> token whenever a
+ syntax error happens; if you have provided a rule to recognize this token
+ in the current context, the parse can continue.
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ stmnts:  /* empty string */
+         | stmnts '\n'
+         | stmnts exp '\n'
+         | stmnts error '\n'
+ </PRE>
+ 
+ <P>
+ The fourth rule in this example says that an error followed by a newline
+ makes a valid addition to any <CODE>stmnts</CODE>.
+ 
+ 
+ <P>
+ What happens if a syntax error occurs in the middle of an <CODE>exp</CODE>?  The
+ error recovery rule, interpreted strictly, applies to the precise sequence
+ of a <CODE>stmnts</CODE>, an <CODE>error</CODE> and a newline.  If an error occurs in
+ the middle of an <CODE>exp</CODE>, there will probably be some additional tokens
+ and subexpressions on the stack after the last <CODE>stmnts</CODE>, and there
+ will be tokens to read before the next newline.  So the rule is not
+ applicable in the ordinary way.
+ 
+ 
+ <P>
+ But Bison can force the situation to fit the rule, by discarding part of
+ the semantic context and part of the input.  First it discards states and
+ objects from the stack until it gets back to a state in which the
+ <CODE>error</CODE> token is acceptable.  (This means that the subexpressions
+ already parsed are discarded, back to the last complete <CODE>stmnts</CODE>.)  At
+ this point the <CODE>error</CODE> token can be shifted.  Then, if the old
+ look-ahead token is not acceptable to be shifted next, the parser reads
+ tokens and discards them until it finds a token which is acceptable.  In
+ this example, Bison reads and discards input until the next newline
+ so that the fourth rule can apply.
+ 
+ 
+ <P>
+ The choice of error rules in the grammar is a choice of strategies for
+ error recovery.  A simple and useful strategy is simply to skip the rest of
+ the current input line or current statement if an error is detected:
+ 
+ 
+ 
+ <PRE>
+ stmnt: error ';'  /* on error, skip until ';' is read */
+ </PRE>
+ 
+ <P>
+ It is also useful to recover to the matching close-delimiter of an
+ opening-delimiter that has already been parsed.  Otherwise the
+ close-delimiter will probably appear to be unmatched, and generate another,
+ spurious error message:
+ 
+ 
+ 
+ <PRE>
+ primary:  '(' expr ')'
+         | '(' error ')'
+         ...
+         ;
+ </PRE>
+ 
+ <P>
+ Error recovery strategies are necessarily guesses.  When they guess wrong,
+ one syntax error often leads to another.  In the above example, the error
+ recovery rule guesses that an error is due to bad input within one
+ <CODE>stmnt</CODE>.  Suppose that instead a spurious semicolon is inserted in the
+ middle of a valid <CODE>stmnt</CODE>.  After the error recovery rule recovers
+ from the first error, another syntax error will be found straightaway,
+ since the text following the spurious semicolon is also an invalid
+ <CODE>stmnt</CODE>.
+ 
+ 
+ <P>
+ To prevent an outpouring of error messages, the parser will output no error
+ message for another syntax error that happens shortly after the first; only
+ after three consecutive input tokens have been successfully shifted will
+ error messages resume.
+ 
+ 
+ <P>
+ Note that rules which accept the <CODE>error</CODE> token may have actions, just
+ as any other rules can.
+ 
+ 
+ <P>
+ <A NAME="IDX200"></A>
+ You can make error messages resume immediately by using the macro
+ <CODE>yyerrok</CODE> in an action.  If you do this in the error rule's action, no
+ error messages will be suppressed.  This macro requires no arguments;
+ <SAMP>`yyerrok;'</SAMP> is a valid C statement.
+ 
+ 
+ <P>
+ <A NAME="IDX201"></A>
+ The previous look-ahead token is reanalyzed immediately after an error.  If
+ this is unacceptable, then the macro <CODE>yyclearin</CODE> may be used to clear
+ this token.  Write the statement <SAMP>`yyclearin;'</SAMP> in the error rule's
+ action.
+ 
+ 
+ <P>
+ For example, suppose that on a parse error, an error handling routine is
+ called that advances the input stream to some point where parsing should
+ once again commence.  The next symbol returned by the lexical scanner is
+ probably correct.  The previous look-ahead token ought to be discarded
+ with <SAMP>`yyclearin;'</SAMP>.
+ 
+ 
+ <P>
+ <A NAME="IDX202"></A>
+ The macro <CODE>YYRECOVERING</CODE> stands for an expression that has the
+ value 1 when the parser is recovering from a syntax error, and 0 the
+ rest of the time.  A value of 1 indicates that error messages are
+ currently suppressed for new syntax errors.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC91" HREF="bison_toc.html#TOC91">Handling Context Dependencies</A></H1>
+ 
+ <P>
+ The Bison paradigm is to parse tokens first, then group them into larger
+ syntactic units.  In many languages, the meaning of a token is affected by
+ its context.  Although this violates the Bison paradigm, certain techniques
+ (known as <EM>kludges</EM>) may enable you to write Bison parsers for such
+ languages.
+ 
+ 
+ <P>
+ (Actually, "kludge" means any technique that gets its job done but is
+ neither clean nor robust.)
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC92" HREF="bison_toc.html#TOC92">Semantic Info in Token Types</A></H2>
+ 
+ <P>
+ The C language has a context dependency: the way an identifier is used
+ depends on what its current meaning is.  For example, consider this:
+ 
+ 
+ 
+ <PRE>
+ foo (x);
+ </PRE>
+ 
+ <P>
+ This looks like a function call statement, but if <CODE>foo</CODE> is a typedef
+ name, then this is actually a declaration of <CODE>x</CODE>.  How can a Bison
+ parser for C decide how to parse this input?
+ 
+ 
+ <P>
+ The method used in GNU C is to have two different token types,
+ <CODE>IDENTIFIER</CODE> and <CODE>TYPENAME</CODE>.  When <CODE>yylex</CODE> finds an
+ identifier, it looks up the current declaration of the identifier in order
+ to decide which token type to return: <CODE>TYPENAME</CODE> if the identifier is
+ declared as a typedef, <CODE>IDENTIFIER</CODE> otherwise.
+ 
+ 
+ <P>
+ The grammar rules can then express the context dependency by the choice of
+ token type to recognize.  <CODE>IDENTIFIER</CODE> is accepted as an expression,
+ but <CODE>TYPENAME</CODE> is not.  <CODE>TYPENAME</CODE> can start a declaration, but
+ <CODE>IDENTIFIER</CODE> cannot.  In contexts where the meaning of the identifier
+ is <EM>not</EM> significant, such as in declarations that can shadow a
+ typedef name, either <CODE>TYPENAME</CODE> or <CODE>IDENTIFIER</CODE> is
+ accepted--there is one rule for each of the two token types.
+ 
+ 
+ <P>
+ This technique is simple to use if the decision of which kinds of
+ identifiers to allow is made at a place close to where the identifier is
+ parsed.  But in C this is not always so: C allows a declaration to
+ redeclare a typedef name provided an explicit type has been specified
+ earlier:
+ 
+ 
+ 
+ <PRE>
+ typedef int foo, bar, lose;
+ static foo (bar);        /* redeclare <CODE>bar</CODE> as static variable */
+ static int foo (lose);   /* redeclare <CODE>foo</CODE> as function */
+ </PRE>
+ 
+ <P>
+ Unfortunately, the name being declared is separated from the declaration
+ construct itself by a complicated syntactic structure--the "declarator".
+ 
+ 
+ <P>
+ As a result, part of the Bison parser for C needs to be duplicated, with
+ all the nonterminal names changed: once for parsing a declaration in
+ which a typedef name can be redefined, and once for parsing a
+ declaration in which that can't be done.  Here is a part of the
+ duplication, with actions omitted for brevity:
+ 
+ 
+ 
+ <PRE>
+ initdcl:
+           declarator maybeasm '='
+           init
+         | declarator maybeasm
+         ;
+ 
+ notype_initdcl:
+           notype_declarator maybeasm '='
+           init
+         | notype_declarator maybeasm
+         ;
+ </PRE>
+ 
+ <P>
+ Here <CODE>initdcl</CODE> can redeclare a typedef name, but <CODE>notype_initdcl</CODE>
+ cannot.  The distinction between <CODE>declarator</CODE> and
+ <CODE>notype_declarator</CODE> is the same sort of thing.
+ 
+ 
+ <P>
+ There is some similarity between this technique and a lexical tie-in
+ (described next), in that information which alters the lexical analysis is
+ changed during parsing by other parts of the program.  The difference is
+ here the information is global, and is used for other purposes in the
+ program.  A true lexical tie-in has a special-purpose flag controlled by
+ the syntactic context.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC93" HREF="bison_toc.html#TOC93">Lexical Tie-ins</A></H2>
+ <P>
+ <A NAME="IDX203"></A>
+ 
+ 
+ <P>
+ One way to handle context-dependency is the <EM>lexical tie-in</EM>: a flag
+ which is set by Bison actions, whose purpose is to alter the way tokens are
+ parsed.
+ 
+ 
+ <P>
+ For example, suppose we have a language vaguely like C, but with a special
+ construct <SAMP>`hex (<VAR>hex-expr</VAR>)'</SAMP>.  After the keyword <CODE>hex</CODE> comes
+ an expression in parentheses in which all integers are hexadecimal.  In
+ particular, the token <SAMP>`a1b'</SAMP> must be treated as an integer rather than
+ as an identifier if it appears in that context.  Here is how you can do it:
+ 
+ 
+ 
+ <PRE>
+ %{
+ int hexflag;
+ %}
+ %%
+ ...
+ expr:   IDENTIFIER
+         | constant
+         | HEX '('
+                 { hexflag = 1; }
+           expr ')'
+                 { hexflag = 0;
+                    $$ = $4; }
+         | expr '+' expr
+                 { $$ = make_sum ($1, $3); }
+         ...
+         ;
+ 
+ constant:
+           INTEGER
+         | STRING
+         ;
+ </PRE>
+ 
+ <P>
+ Here we assume that <CODE>yylex</CODE> looks at the value of <CODE>hexflag</CODE>; when
+ it is nonzero, all integers are parsed in hexadecimal, and tokens starting
+ with letters are parsed as integers if possible.
+ 
+ 
+ <P>
+ The declaration of <CODE>hexflag</CODE> shown in the C declarations section of
+ the parser file is needed to make it accessible to the actions
+ (see section <A HREF="bison.html#SEC41">The C Declarations Section</A>).  You must also write the code in <CODE>yylex</CODE>
+ to obey the flag.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC94" HREF="bison_toc.html#TOC94">Lexical Tie-ins and Error Recovery</A></H2>
+ 
+ <P>
+ Lexical tie-ins make strict demands on any error recovery rules you have.
+ See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ 
+ <P>
+ The reason for this is that the purpose of an error recovery rule is to
+ abort the parsing of one construct and resume in some larger construct.
+ For example, in C-like languages, a typical error recovery rule is to skip
+ tokens until the next semicolon, and then start a new statement, like this:
+ 
+ 
+ 
+ <PRE>
+ stmt:   expr ';'
+         | IF '(' expr ')' stmt { ... }
+         ...
+         error ';'
+                 { hexflag = 0; }
+         ;
+ </PRE>
+ 
+ <P>
+ If there is a syntax error in the middle of a <SAMP>`hex (<VAR>expr</VAR>)'</SAMP>
+ construct, this error rule will apply, and then the action for the
+ completed <SAMP>`hex (<VAR>expr</VAR>)'</SAMP> will never run.  So <CODE>hexflag</CODE> would
+ remain set for the entire rest of the input, or until the next <CODE>hex</CODE>
+ keyword, causing identifiers to be misinterpreted as integers.
+ 
+ 
+ <P>
+ To avoid this problem the error recovery rule itself clears <CODE>hexflag</CODE>.
+ 
+ 
+ <P>
+ There may also be an error recovery rule that works within expressions.
+ For example, there could be a rule which applies within parentheses
+ and skips to the close-parenthesis:
+ 
+ 
+ 
+ <PRE>
+ expr:   ...
+         | '(' expr ')'
+                 { $$ = $2; }
+         | '(' error ')'
+         ...
+ </PRE>
+ 
+ <P>
+ If this rule acts within the <CODE>hex</CODE> construct, it is not going to abort
+ that construct (since it applies to an inner level of parentheses within
+ the construct).  Therefore, it should not clear the flag: the rest of
+ the <CODE>hex</CODE> construct should be parsed with the flag still in effect.
+ 
+ 
+ <P>
+ What if there is an error recovery rule which might abort out of the
+ <CODE>hex</CODE> construct or might not, depending on circumstances?  There is no
+ way you can write the action to determine whether a <CODE>hex</CODE> construct is
+ being aborted or not.  So if you are using a lexical tie-in, you had better
+ make sure your error recovery rules are not of this kind.  Each rule must
+ be such that you can be sure that it always will, or always won't, have to
+ clear the flag.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC95" HREF="bison_toc.html#TOC95">Debugging Your Parser</A></H1>
+ <P>
+ <A NAME="IDX204"></A>
+ <A NAME="IDX205"></A>
+ <A NAME="IDX206"></A>
+ <A NAME="IDX207"></A>
+ 
+ 
+ <P>
+ If a Bison grammar compiles properly but doesn't do what you want when it
+ runs, the <CODE>yydebug</CODE> parser-trace feature can help you figure out why.
+ 
+ 
+ <P>
+ To enable compilation of trace facilities, you must define the macro
+ <CODE>YYDEBUG</CODE> when you compile the parser.  You could use
+ <SAMP>`-DYYDEBUG=1'</SAMP> as a compiler option or you could put <SAMP>`#define
+ YYDEBUG 1'</SAMP> in the C declarations section of the grammar file
+ (see section <A HREF="bison.html#SEC41">The C Declarations Section</A>).  Alternatively, use the <SAMP>`-t'</SAMP> option when
+ you run Bison (see section <A HREF="bison.html#SEC96">Invoking Bison</A>).  We always define <CODE>YYDEBUG</CODE> so that
+ debugging is always possible.
+ 
+ 
+ <P>
+ The trace facility uses <CODE>stderr</CODE>, so you must add <CODE>#include
+ &#60;stdio.h&#62;</CODE> to the C declarations section unless it is already there.
+ 
+ 
+ <P>
+ Once you have compiled the program with trace facilities, the way to
+ request a trace is to store a nonzero value in the variable <CODE>yydebug</CODE>.
+ You can do this by making the C code do it (in <CODE>main</CODE>, perhaps), or
+ you can alter the value with a C debugger.
+ 
+ 
+ <P>
+ Each step taken by the parser when <CODE>yydebug</CODE> is nonzero produces a
+ line or two of trace information, written on <CODE>stderr</CODE>.  The trace
+ messages tell you these things:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ Each time the parser calls <CODE>yylex</CODE>, what kind of token was read.
+ 
+ <LI>
+ 
+ Each time a token is shifted, the depth and complete contents of the
+ state stack (see section <A HREF="bison.html#SEC86">Parser States</A>).
+ 
+ <LI>
+ 
+ Each time a rule is reduced, which rule it is, and the complete contents
+ of the state stack afterward.
+ </UL>
+ 
+ <P>
+ To make sense of this information, it helps to refer to the listing file
+ produced by the Bison <SAMP>`-v'</SAMP> option (see section <A HREF="bison.html#SEC96">Invoking Bison</A>).  This file
+ shows the meaning of each state in terms of positions in various rules, and
+ also what each state will do with each possible input token.  As you read
+ the successive trace messages, you can see that the parser is functioning
+ according to its specification in the listing file.  Eventually you will
+ arrive at the place where something undesirable happens, and you will see
+ which parts of the grammar are to blame.
+ 
+ 
+ <P>
+ The parser file is a C program and you can use C debuggers on it, but it's
+ not easy to interpret what it is doing.  The parser function is a
+ finite-state machine interpreter, and aside from the actions it executes
+ the same code over and over.  Only the values of variables show where in
+ the grammar it is working.
+ 
+ 
+ <P>
+ <A NAME="IDX208"></A>
+ The debugging information normally gives the token type of each token
+ read, but not its semantic value.  You can optionally define a macro
+ named <CODE>YYPRINT</CODE> to provide a way to print the value.  If you define
+ <CODE>YYPRINT</CODE>, it should take three arguments.  The parser will pass a
+ standard I/O stream, the numeric code for the token type, and the token
+ value (from <CODE>yylval</CODE>).
+ 
+ 
+ <P>
+ Here is an example of <CODE>YYPRINT</CODE> suitable for the multi-function
+ calculator (see section <A HREF="bison.html#SEC35">Declarations for <CODE>mfcalc</CODE></A>):
+ 
+ 
+ 
+ <PRE>
+ #define YYPRINT(file, type, value)   yyprint (file, type, value)
+ 
+ static void
+ yyprint (FILE *file, int type, YYSTYPE value)
+ {
+   if (type == VAR)
+     fprintf (file, " %s", value.tptr-&#62;name);
+   else if (type == NUM)
+     fprintf (file, " %d", value.val);
+ }
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC96" HREF="bison_toc.html#TOC96">Invoking Bison</A></H1>
+ <P>
+ <A NAME="IDX209"></A>
+ <A NAME="IDX210"></A>
+ <A NAME="IDX211"></A>
+ 
+ 
+ <P>
+ The usual way to invoke Bison is as follows:
+ 
+ 
+ 
+ <PRE>
+ bison <VAR>infile</VAR>
+ </PRE>
+ 
+ <P>
+ Here <VAR>infile</VAR> is the grammar file name, which usually ends in
+ <SAMP>`.y'</SAMP>.  The parser file's name is made by replacing the <SAMP>`.y'</SAMP>
+ with <SAMP>`.tab.c'</SAMP>.  Thus, the <SAMP>`bison foo.y'</SAMP> filename yields
+ <TT>`foo.tab.c'</TT>, and the <SAMP>`bison hack/foo.y'</SAMP> filename yields
+ <TT>`hack/foo.tab.c'</TT>. It's is also possible, in case you are writting
+ C++ code instead of C in your grammar file, to name it <TT>`foo.ypp'</TT>
+ or <TT>`foo.y++'</TT>. Then, the output files will take an extention like
+ the given one as input (repectively <TT>`foo.tab.cpp'</TT> and <TT>`foo.tab.c++'</TT>).
+ This feature takes effect with all options that manipulate filenames like
+ <SAMP>`-o'</SAMP> or <SAMP>`-d'</SAMP>.
+ 
+ 
+ <P>
+ For example :
+ 
+ 
+ 
+ <PRE>
+ bison -d <VAR>infile.yxx</VAR>
+ </PRE>
+ 
+ <P>
+ will produce <TT>`infile.tab.cxx'</TT> and <TT>`infile.tab.hxx'</TT>. and
+ 
+ 
+ 
+ <PRE>
+ bison -d <VAR>infile.y</VAR> -o <VAR>output.c++</VAR>
+ </PRE>
+ 
+ <P>
+ will produce <TT>`output.c++'</TT> and <TT>`outfile.h++'</TT>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC97" HREF="bison_toc.html#TOC97">Bison Options</A></H2>
+ 
+ <P>
+ Bison supports both traditional single-letter options and mnemonic long
+ option names.  Long option names are indicated with <SAMP>`--'</SAMP> instead of
+ <SAMP>`-'</SAMP>.  Abbreviations for option names are allowed as long as they
+ are unique.  When a long option takes an argument, like
+ <SAMP>`--file-prefix'</SAMP>, connect the option name and the argument with
+ <SAMP>`='</SAMP>.
+ 
+ 
+ <P>
+ Here is a list of options that can be used with Bison, alphabetized by
+ short option.  It is followed by a cross key alphabetized by long
+ option.
+ 
+ 
+ <P>
+ Operations modes:
+ <DL COMPACT>
+ 
+ <DT>@option{-h}
+ <DD>
+ <DT>@option{--help}
+ <DD>
+ Print a summary of the command-line options to Bison and exit.
+ 
+ <DT>@option{-V}
+ <DD>
+ <DT>@option{--version}
+ <DD>
+ Print the version number of Bison and exit.
+ 
+ <DT>@option{-y}
+ <DD>
+ <DT>@option{--yacc}
+ <DD>
+ <DT>@option{--fixed-output-files}
+ <DD>
+ Equivalent to <SAMP>`-o y.tab.c'</SAMP>; the parser output file is called
+ <TT>`y.tab.c'</TT>, and the other outputs are called <TT>`y.output'</TT> and
+ <TT>`y.tab.h'</TT>.  The purpose of this option is to imitate Yacc's output
+ file name conventions.  Thus, the following shell script can substitute
+ for Yacc:
+ 
+ <PRE>
+ bison -y $*
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ Tuning the parser:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{-S <VAR>file</VAR>}
+ <DD>
+ <DT>@option{--skeleton=<VAR>file</VAR>}
+ <DD>
+ Specify the skeleton to use.  You probably don't need this option unless
+ you are developing Bison.
+ 
+ <DT>@option{-t}
+ <DD>
+ <DT>@option{--debug}
+ <DD>
+ Output a definition of the macro <CODE>YYDEBUG</CODE> into the parser file, so
+ that the debugging facilities are compiled.  See section <A HREF="bison.html#SEC95">Debugging Your Parser</A>.
+ 
+ <DT>@option{--locations}
+ <DD>
+ Pretend that <CODE>%locactions</CODE> was specified.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT>@option{-p <VAR>prefix</VAR>}
+ <DD>
+ <DT>@option{--name-prefix=<VAR>prefix</VAR>}
+ <DD>
+ Rename the external symbols used in the parser so that they start with
+ <VAR>prefix</VAR> instead of <SAMP>`yy'</SAMP>.  The precise list of symbols renamed
+ is <CODE>yyparse</CODE>, <CODE>yylex</CODE>, <CODE>yyerror</CODE>, <CODE>yynerrs</CODE>,
+ <CODE>yylval</CODE>, <CODE>yychar</CODE> and <CODE>yydebug</CODE>.
+ 
+ For example, if you use <SAMP>`-p c'</SAMP>, the names become <CODE>cparse</CODE>,
+ <CODE>clex</CODE>, and so on.
+ 
+ See section <A HREF="bison.html#SEC67">Multiple Parsers in the Same Program</A>.
+ 
+ <DT>@option{-l}
+ <DD>
+ <DT>@option{--no-lines}
+ <DD>
+ Don't put any <CODE>#line</CODE> preprocessor commands in the parser file.
+ Ordinarily Bison puts them in the parser file so that the C compiler
+ and debuggers will associate errors with your source file, the
+ grammar file.  This option causes them to associate errors with the
+ parser file, treating it as an independent source file in its own right.
+ 
+ <DT>@option{-n}
+ <DD>
+ <DT>@option{--no-parser}
+ <DD>
+ Pretend that <CODE>%no_parser</CODE> was specified.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT>@option{-k}
+ <DD>
+ <DT>@option{--token-table}
+ <DD>
+ Pretend that <CODE>%token_table</CODE> was specified.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ </DL>
+ 
+ <P>
+ Adjust the output:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>@option{-d}
+ <DD>
+ Pretend that <CODE>%verbose</CODE> was specified, i.e., write an extra output
+ file containing macro definitions for the token type names defined in
+ the grammar and the semantic value type <CODE>YYSTYPE</CODE>, as well as a few
+ <CODE>extern</CODE> variable declarations.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT>@option{--defines=<VAR>defines-file</VAR>}
+ <DD>
+ The behaviour of <VAR>--defines</VAR> is the same than <SAMP>`-d'</SAMP>. The only 
+ difference is that it has an optionnal argument which is the name of
+ the output filename.
+ 
+ <DT>@option{-b <VAR>file-prefix</VAR>}
+ <DD>
+ <DT>@option{--file-prefix=<VAR>prefix</VAR>}
+ <DD>
+ Specify a prefix to use for all Bison output file names.  The names are
+ chosen as if the input file were named <TT>`<VAR>prefix</VAR>.c'</TT>.
+ 
+ <DT>@option{-v}
+ <DD>
+ <DT>@option{--verbose}
+ <DD>
+ Pretend that <CODE>%verbose</CODE> was specified, i.e, write an extra output
+ file containing verbose descriptions of the grammar and
+ parser. See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>, for more.
+ 
+ <DT>@option{-o <VAR>outfile</VAR>}
+ <DD>
+ <DT>@option{--output-file=<VAR>outfile</VAR>}
+ <DD>
+ Specify the name <VAR>outfile</VAR> for the parser file.
+ 
+ The other output files' names are constructed from <VAR>outfile</VAR>
+ as described under the <SAMP>`-v'</SAMP> and <SAMP>`-d'</SAMP> options.
+ 
+ <DT>@option{-g}
+ <DD>
+ Output a VCG definition of the LALR(1) grammar automaton computed by
+ Bison. If the grammar file is <TT>`foo.y'</TT>, the VCG output file will
+ be <TT>`foo.vcg'</TT>.
+ 
+ <DT>@option{--graph=<VAR>graph-file</VAR>}
+ <DD>
+ The behaviour of <VAR>--graph</VAR> is the same than <SAMP>`-g'</SAMP>. The only 
+ difference is that it has an optionnal argument which is the name of
+ the output graph filename.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC98" HREF="bison_toc.html#TOC98">Environment Variables</A></H2>
+ <P>
+ <A NAME="IDX212"></A>
+ <A NAME="IDX213"></A>
+ <A NAME="IDX214"></A>
+ 
+ 
+ <P>
+ Here is a list of environment variables which affect the way Bison
+ runs.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`BISON_SIMPLE'</SAMP>
+ <DD>
+ <DT><SAMP>`BISON_HAIRY'</SAMP>
+ <DD>
+ Much of the parser generated by Bison is copied verbatim from a file
+ called <TT>`bison.simple'</TT>.  If Bison cannot find that file, or if you
+ would like to direct Bison to use a different copy, setting the
+ environment variable <CODE>BISON_SIMPLE</CODE> to the path of the file will
+ cause Bison to use that copy instead.
+ 
+ When the <SAMP>`%semantic_parser'</SAMP> declaration is used, Bison copies from
+ a file called <TT>`bison.hairy'</TT> instead.  The location of this file can
+ also be specified or overridden in a similar fashion, with the
+ <CODE>BISON_HAIRY</CODE> environment variable.
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC99" HREF="bison_toc.html#TOC99">Option Cross Key</A></H2>
+ 
+ <P>
+ Here is a list of options, alphabetized by long option, to help you find
+ the corresponding short option.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC100" HREF="bison_toc.html#TOC100">Invoking Bison under VMS</A></H2>
+ <P>
+ <A NAME="IDX215"></A>
+ <A NAME="IDX216"></A>
+ 
+ 
+ <P>
+ The command line syntax for Bison on VMS is a variant of the usual
+ Bison command syntax--adapted to fit VMS conventions.
+ 
+ 
+ <P>
+ To find the VMS equivalent for any Bison option, start with the long
+ option, and substitute a <SAMP>`/'</SAMP> for the leading <SAMP>`--'</SAMP>, and
+ substitute a <SAMP>`_'</SAMP> for each <SAMP>`-'</SAMP> in the name of the long option.
+ For example, the following invocation under VMS:
+ 
+ 
+ 
+ <PRE>
+ bison /debug/name_prefix=bar foo.y
+ </PRE>
+ 
+ <P>
+ is equivalent to the following command under POSIX.
+ 
+ 
+ 
+ <PRE>
+ bison --debug --name-prefix=bar foo.y
+ </PRE>
+ 
+ <P>
+ The VMS file system does not permit filenames such as
+ <TT>`foo.tab.c'</TT>.  In the above example, the output file
+ would instead be named <TT>`foo_tab.c'</TT>.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC101" HREF="bison_toc.html#TOC101">Bison Symbols</A></H1>
+ <P>
+ <A NAME="IDX217"></A>
+ <A NAME="IDX218"></A>
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>error</CODE>
+ <DD>
+ A token name reserved for error recovery.  This token may be used in
+ grammar rules so as to allow the Bison parser to recognize an error in
+ the grammar without halting the process.  In effect, a sentence
+ containing an error may be recognized as valid.  On a parse error, the
+ token <CODE>error</CODE> becomes the current look-ahead token.  Actions
+ corresponding to <CODE>error</CODE> are then executed, and the look-ahead
+ token is reset to the token that originally caused the violation.
+ See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><CODE>YYABORT</CODE>
+ <DD>
+ Macro to pretend that an unrecoverable syntax error has occurred, by
+ making <CODE>yyparse</CODE> return 1 immediately.  The error reporting
+ function <CODE>yyerror</CODE> is not called.  See section <A HREF="bison.html#SEC69">The Parser Function <CODE>yyparse</CODE></A>.
+ 
+ <DT><CODE>YYACCEPT</CODE>
+ <DD>
+ Macro to pretend that a complete utterance of the language has been
+ read, by making <CODE>yyparse</CODE> return 0 immediately.
+ See section <A HREF="bison.html#SEC69">The Parser Function <CODE>yyparse</CODE></A>.
+ 
+ <DT><CODE>YYBACKUP</CODE>
+ <DD>
+ Macro to discard a value from the parser stack and fake a look-ahead
+ token.  See section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>.
+ 
+ <DT><CODE>YYERROR</CODE>
+ <DD>
+ Macro to pretend that a syntax error has just been detected: call
+ <CODE>yyerror</CODE> and then perform normal error recovery if possible
+ (see section <A HREF="bison.html#SEC90">Error Recovery</A>), or (if recovery is impossible) make
+ <CODE>yyparse</CODE> return 1.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><CODE>YYERROR_VERBOSE</CODE>
+ <DD>
+ Macro that you define with <CODE>#define</CODE> in the Bison declarations
+ section to request verbose, specific error message strings when
+ <CODE>yyerror</CODE> is called.
+ 
+ <DT><CODE>YYINITDEPTH</CODE>
+ <DD>
+ Macro for specifying the initial size of the parser stack.
+ See section <A HREF="bison.html#SEC89">Stack Overflow, and How to Avoid It</A>.
+ 
+ <DT><CODE>YYLEX_PARAM</CODE>
+ <DD>
+ Macro for specifying an extra argument (or list of extra arguments) for
+ <CODE>yyparse</CODE> to pass to <CODE>yylex</CODE>.  See section <A HREF="bison.html#SEC74">Calling Conventions for Pure Parsers</A>.
+ 
+ <DT><CODE>YYLTYPE</CODE>
+ <DD>
+ Macro for the data type of <CODE>yylloc</CODE>; a structure with four
+ members.  See section <A HREF="bison.html#SEC55">Data Type of Locations</A>.
+ 
+ <DT><CODE>yyltype</CODE>
+ <DD>
+ Default value for YYLTYPE.
+ 
+ <DT><CODE>YYMAXDEPTH</CODE>
+ <DD>
+ Macro for specifying the maximum size of the parser stack.
+ See section <A HREF="bison.html#SEC89">Stack Overflow, and How to Avoid It</A>.
+ 
+ <DT><CODE>YYPARSE_PARAM</CODE>
+ <DD>
+ Macro for specifying the name of a parameter that <CODE>yyparse</CODE> should
+ accept.  See section <A HREF="bison.html#SEC74">Calling Conventions for Pure Parsers</A>.
+ 
+ <DT><CODE>YYRECOVERING</CODE>
+ <DD>
+ Macro whose value indicates whether the parser is recovering from a
+ syntax error.  See section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>.
+ 
+ <DT><CODE>YYSTACK_USE_ALLOCA</CODE>
+ <DD>
+ Macro used to control the use of <CODE>alloca</CODE>. If defined to <SAMP>`0'</SAMP>,
+ the parser will not use <CODE>alloca</CODE> but <CODE>malloc</CODE> when trying to
+ grow its internal stacks. Do <EM>not</EM> define <CODE>YYSTACK_USE_ALLOCA</CODE>
+ to anything else.
+ 
+ <DT><CODE>YYSTYPE</CODE>
+ <DD>
+ Macro for the data type of semantic values; <CODE>int</CODE> by default.
+ See section <A HREF="bison.html#SEC49">Data Types of Semantic Values</A>.
+ 
+ <DT><CODE>yychar</CODE>
+ <DD>
+ External integer variable that contains the integer value of the current
+ look-ahead token.  (In a pure parser, it is a local variable within
+ <CODE>yyparse</CODE>.)  Error-recovery rule actions may examine this variable.
+ See section <A HREF="bison.html#SEC76">Special Features for Use in Actions</A>.
+ 
+ <DT><CODE>yyclearin</CODE>
+ <DD>
+ Macro used in error-recovery rule actions.  It clears the previous
+ look-ahead token.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><CODE>yydebug</CODE>
+ <DD>
+ External integer variable set to zero by default.  If <CODE>yydebug</CODE>
+ is given a nonzero value, the parser will output information on input
+ symbols and parser action.  See section <A HREF="bison.html#SEC95">Debugging Your Parser</A>.
+ 
+ <DT><CODE>yyerrok</CODE>
+ <DD>
+ Macro to cause parser to recover immediately to its normal mode
+ after a parse error.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT><CODE>yyerror</CODE>
+ <DD>
+ User-supplied function to be called by <CODE>yyparse</CODE> on error.  The
+ function receives one argument, a pointer to a character string
+ containing an error message.  See section <A HREF="bison.html#SEC75">The Error Reporting Function <CODE>yyerror</CODE></A>.
+ 
+ <DT><CODE>yylex</CODE>
+ <DD>
+ User-supplied lexical analyzer function, called with no arguments
+ to get the next token.  See section <A HREF="bison.html#SEC70">The Lexical Analyzer Function <CODE>yylex</CODE></A>.
+ 
+ <DT><CODE>yylval</CODE>
+ <DD>
+ External variable in which <CODE>yylex</CODE> should place the semantic
+ value associated with a token.  (In a pure parser, it is a local
+ variable within <CODE>yyparse</CODE>, and its address is passed to
+ <CODE>yylex</CODE>.)  See section <A HREF="bison.html#SEC72">Semantic Values of Tokens</A>.
+ 
+ <DT><CODE>yylloc</CODE>
+ <DD>
+ External variable in which <CODE>yylex</CODE> should place the line and column
+ numbers associated with a token.  (In a pure parser, it is a local
+ variable within <CODE>yyparse</CODE>, and its address is passed to
+ <CODE>yylex</CODE>.)  You can ignore this variable if you don't use the
+ <SAMP>`@'</SAMP> feature in the grammar actions.  See section <A HREF="bison.html#SEC73">Textual Positions of Tokens</A>.
+ 
+ <DT><CODE>yynerrs</CODE>
+ <DD>
+ Global variable which Bison increments each time there is a parse error.
+ (In a pure parser, it is a local variable within <CODE>yyparse</CODE>.)
+ See section <A HREF="bison.html#SEC75">The Error Reporting Function <CODE>yyerror</CODE></A>.
+ 
+ <DT><CODE>yyparse</CODE>
+ <DD>
+ The parser function produced by Bison; call this function to start
+ parsing.  See section <A HREF="bison.html#SEC69">The Parser Function <CODE>yyparse</CODE></A>.
+ 
+ <DT><CODE>%debug</CODE>
+ <DD>
+ Equip the parser for debugging.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT><CODE>%defines</CODE>
+ <DD>
+ Bison declaration to create a header file meant for the scanner.
+ See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT><CODE>%left</CODE>
+ <DD>
+ Bison declaration to assign left associativity to token(s).
+ See section <A HREF="bison.html#SEC60">Operator Precedence</A>.
+ 
+ <DT><CODE>%no_lines</CODE>
+ <DD>
+ Bison declaration to avoid generating <CODE>#line</CODE> directives in the
+ parser file.  See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT><CODE>%nonassoc</CODE>
+ <DD>
+ Bison declaration to assign non-associativity to token(s).
+ See section <A HREF="bison.html#SEC60">Operator Precedence</A>.
+ 
+ <DT><CODE>%prec</CODE>
+ <DD>
+ Bison declaration to assign a precedence to a specific rule.
+ See section <A HREF="bison.html#SEC85">Context-Dependent Precedence</A>.
+ 
+ <DT><CODE>%pure_parser</CODE>
+ <DD>
+ Bison declaration to request a pure (reentrant) parser.
+ See section <A HREF="bison.html#SEC65">A Pure (Reentrant) Parser</A>.
+ 
+ <DT><CODE>%right</CODE>
+ <DD>
+ Bison declaration to assign right associativity to token(s).
+ See section <A HREF="bison.html#SEC60">Operator Precedence</A>.
+ 
+ <DT><CODE>%start</CODE>
+ <DD>
+ Bison declaration to specify the start symbol.  See section <A HREF="bison.html#SEC64">The Start-Symbol</A>.
+ 
+ <DT><CODE>%token</CODE>
+ <DD>
+ Bison declaration to declare token(s) without specifying precedence.
+ See section <A HREF="bison.html#SEC59">Token Type Names</A>.
+ 
+ <DT><CODE>%token_table</CODE>
+ <DD>
+ Bison declaration to include a token name table in the parser file.
+ See section <A HREF="bison.html#SEC66">Bison Declaration Summary</A>.
+ 
+ <DT><CODE>%type</CODE>
+ <DD>
+ Bison declaration to declare nonterminals.  See section <A HREF="bison.html#SEC62">Nonterminal Symbols</A>.
+ 
+ <DT><CODE>%union</CODE>
+ <DD>
+ Bison declaration to specify several possible data types for semantic
+ values.  See section <A HREF="bison.html#SEC61">The Collection of Value Types</A>.
+ </DL>
+ 
+ <P>
+ These are the punctuation and delimiters used in Bison input:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%%'</SAMP>
+ <DD>
+ Delimiter used to separate the grammar rule section from the
+ Bison declarations section or the additional C code section.
+ See section <A HREF="bison.html#SEC15">The Overall Layout of a Bison Grammar</A>.
+ 
+ <DT><SAMP>`%{ %}'</SAMP>
+ <DD>
+ All code listed between <SAMP>`%{'</SAMP> and <SAMP>`%}'</SAMP> is copied directly to
+ the output file uninterpreted.  Such code forms the "C declarations"
+ section of the input file.  See section <A HREF="bison.html#SEC40">Outline of a Bison Grammar</A>.
+ 
+ <DT><SAMP>`/*...*/'</SAMP>
+ <DD>
+ Comment delimiters, as in C.
+ 
+ <DT><SAMP>`:'</SAMP>
+ <DD>
+ Separates a rule's result from its components.  See section <A HREF="bison.html#SEC46">Syntax of Grammar Rules</A>.
+ 
+ <DT><SAMP>`;'</SAMP>
+ <DD>
+ Terminates a rule.  See section <A HREF="bison.html#SEC46">Syntax of Grammar Rules</A>.
+ 
+ <DT><SAMP>`|'</SAMP>
+ <DD>
+ Separates alternate rules for the same result nonterminal.
+ See section <A HREF="bison.html#SEC46">Syntax of Grammar Rules</A>.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC102" HREF="bison_toc.html#TOC102">Glossary</A></H1>
+ <P>
+ <A NAME="IDX219"></A>
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>Backus-Naur Form (BNF)
+ <DD>
+ Formal method of specifying context-free grammars.  BNF was first used
+ in the <CITE>ALGOL-60</CITE> report, 1963.  See section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>.
+ 
+ <DT>Context-free grammars
+ <DD>
+ Grammars specified as rules that can be applied regardless of context.
+ Thus, if there is a rule which says that an integer can be used as an
+ expression, integers are allowed <EM>anywhere</EM> an expression is
+ permitted.  See section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>.
+ 
+ <DT>Dynamic allocation
+ <DD>
+ Allocation of memory that occurs during execution, rather than at
+ compile time or on entry to a function.
+ 
+ <DT>Empty string
+ <DD>
+ Analogous to the empty set in set theory, the empty string is a
+ character string of length zero.
+ 
+ <DT>Finite-state stack machine
+ <DD>
+ A "machine" that has discrete states in which it is said to exist at
+ each instant in time.  As input to the machine is processed, the
+ machine moves from state to state as specified by the logic of the
+ machine.  In the case of the parser, the input is the language being
+ parsed, and the states correspond to various stages in the grammar
+ rules.  See section <A HREF="bison.html#SEC77">The Bison Parser Algorithm</A>.
+ 
+ <DT>Grouping
+ <DD>
+ A language construct that is (in general) grammatically divisible;
+ for example, `expression' or `declaration' in C.
+ See section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>.
+ 
+ <DT>Infix operator
+ <DD>
+ An arithmetic operator that is placed between the operands on which it
+ performs some operation.
+ 
+ <DT>Input stream
+ <DD>
+ A continuous flow of data between devices or programs.
+ 
+ <DT>Language construct
+ <DD>
+ One of the typical usage schemas of the language.  For example, one of
+ the constructs of the C language is the <CODE>if</CODE> statement.
+ See section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>.
+ 
+ <DT>Left associativity
+ <DD>
+ Operators having left associativity are analyzed from left to right:
+ <SAMP>`a+b+c'</SAMP> first computes <SAMP>`a+b'</SAMP> and then combines with
+ <SAMP>`c'</SAMP>.  See section <A HREF="bison.html#SEC80">Operator Precedence</A>.
+ 
+ <DT>Left recursion
+ <DD>
+ A rule whose result symbol is also its first component symbol; for
+ example, <SAMP>`expseq1 : expseq1 ',' exp;'</SAMP>.  See section <A HREF="bison.html#SEC47">Recursive Rules</A>.
+ 
+ <DT>Left-to-right parsing
+ <DD>
+ Parsing a sentence of a language by analyzing it token by token from
+ left to right.  See section <A HREF="bison.html#SEC77">The Bison Parser Algorithm</A>.
+ 
+ <DT>Lexical analyzer (scanner)
+ <DD>
+ A function that reads an input stream and returns tokens one by one.
+ See section <A HREF="bison.html#SEC70">The Lexical Analyzer Function <CODE>yylex</CODE></A>.
+ 
+ <DT>Lexical tie-in
+ <DD>
+ A flag, set by actions in the grammar rules, which alters the way
+ tokens are parsed.  See section <A HREF="bison.html#SEC93">Lexical Tie-ins</A>.
+ 
+ <DT>Literal string token
+ <DD>
+ A token which consists of two or more fixed characters.  See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ <DT>Look-ahead token
+ <DD>
+ A token already read but not yet shifted.  See section <A HREF="bison.html#SEC78">Look-Ahead Tokens</A>.
+ 
+ <DT>LALR(1)
+ <DD>
+ The class of context-free grammars that Bison (like most other parser
+ generators) can handle; a subset of LR(1).  See section <A HREF="bison.html#SEC88">Mysterious Reduce/Reduce Conflicts</A>.
+ 
+ <DT>LR(1)
+ <DD>
+ The class of context-free grammars in which at most one token of
+ look-ahead is needed to disambiguate the parsing of any piece of input.
+ 
+ <DT>Nonterminal symbol
+ <DD>
+ A grammar symbol standing for a grammatical construct that can
+ be expressed through rules in terms of smaller constructs; in other
+ words, a construct that is not a token.  See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ <DT>Parse error
+ <DD>
+ An error encountered during parsing of an input stream due to invalid
+ syntax.  See section <A HREF="bison.html#SEC90">Error Recovery</A>.
+ 
+ <DT>Parser
+ <DD>
+ A function that recognizes valid sentences of a language by analyzing
+ the syntax structure of a set of tokens passed to it from a lexical
+ analyzer.
+ 
+ <DT>Postfix operator
+ <DD>
+ An arithmetic operator that is placed after the operands upon which it
+ performs some operation.
+ 
+ <DT>Reduction
+ <DD>
+ Replacing a string of nonterminals and/or terminals with a single
+ nonterminal, according to a grammar rule.  See section <A HREF="bison.html#SEC77">The Bison Parser Algorithm</A>.
+ 
+ <DT>Reentrant
+ <DD>
+ A reentrant subprogram is a subprogram which can be in invoked any
+ number of times in parallel, without interference between the various
+ invocations.  See section <A HREF="bison.html#SEC65">A Pure (Reentrant) Parser</A>.
+ 
+ <DT>Reverse polish notation
+ <DD>
+ A language in which all operators are postfix operators.
+ 
+ <DT>Right recursion
+ <DD>
+ A rule whose result symbol is also its last component symbol; for
+ example, <SAMP>`expseq1: exp ',' expseq1;'</SAMP>.  See section <A HREF="bison.html#SEC47">Recursive Rules</A>.
+ 
+ <DT>Semantics
+ <DD>
+ In computer languages, the semantics are specified by the actions
+ taken for each instance of the language, i.e., the meaning of
+ each statement.  See section <A HREF="bison.html#SEC48">Defining Language Semantics</A>.
+ 
+ <DT>Shift
+ <DD>
+ A parser is said to shift when it makes the choice of analyzing
+ further input from the stream rather than reducing immediately some
+ already-recognized rule.  See section <A HREF="bison.html#SEC77">The Bison Parser Algorithm</A>.
+ 
+ <DT>Single-character literal
+ <DD>
+ A single character that is recognized and interpreted as is.
+ See section <A HREF="bison.html#SEC9">From Formal Rules to Bison Input</A>.
+ 
+ <DT>Start symbol
+ <DD>
+ The nonterminal symbol that stands for a complete valid utterance in
+ the language being parsed.  The start symbol is usually listed as the
+ first nonterminal symbol in a language specification.
+ See section <A HREF="bison.html#SEC64">The Start-Symbol</A>.
+ 
+ <DT>Symbol table
+ <DD>
+ A data structure where symbol names and associated data are stored
+ during parsing to allow for recognition and use of existing
+ information in repeated uses of a symbol.  See section <A HREF="bison.html#SEC34">Multi-Function Calculator: <CODE>mfcalc</CODE></A>.
+ 
+ <DT>Token
+ <DD>
+ A basic, grammatically indivisible unit of a language.  The symbol
+ that describes a token in the grammar is a terminal symbol.
+ The input of the Bison parser is a stream of tokens which comes from
+ the lexical analyzer.  See section <A HREF="bison.html#SEC45">Symbols, Terminal and Nonterminal</A>.
+ 
+ <DT>Terminal symbol
+ <DD>
+ A grammar symbol that has no rules in the grammar and therefore is
+ grammatically indivisible.  The piece of text it represents is a token.
+ See section <A HREF="bison.html#SEC8">Languages and Context-Free Grammars</A>.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC103" HREF="bison_toc.html#TOC103">Copying This Manual</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC104" HREF="bison_toc.html#TOC104">GNU Free Documentation License</A></H2>
+ 
+ <P>
+ <A NAME="IDX220"></A>
+ Version 1.1, March 2000
+ 
+ 
+ 
+ <PRE>
+ Copyright (C) 2000 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.
+ </PRE>
+ 
+ 
+ <OL>
+ <LI>
+ 
+ PREAMBLE
+ 
+ The purpose of this License is to make a manual, textbook, or other
+ written document <EM>free</EM> in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially.  Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+ 
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free
+ program should come with manuals providing the same freedoms that the
+ software does.  But this License is not limited to software manuals;
+ it can be used for any textual work, regardless of subject matter or
+ whether it is published as a printed book.  We recommend this License
+ principally for works whose purpose is instruction or reference.
+ 
+ <LI>
+ 
+ APPLICABILITY AND DEFINITIONS
+ 
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License.  The "Document", below, refers to any
+ such manual or work.  Any member of the public is a licensee, and is
+ addressed as "you".
+ 
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ A "Secondary Section" is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (For example, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding
+ them.
+ 
+ The "Invariant Sections" are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License.
+ 
+ The "Cover Texts" are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.
+ 
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly and
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or
+ for automatic translation to a variety of formats suitable for input
+ to text formatters.  A copy made in an otherwise Transparent file
+ format whose markup has been designed to thwart or discourage
+ subsequent modification by readers is not Transparent.  A copy that is
+ not "Transparent" is called "Opaque".
+ 
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ @acronym{SGML} or @acronym{XML} using a publicly available
+ @acronym{DTD}, and standard-conforming simple @acronym{HTML} designed
+ for human modification.  Opaque formats include PostScript,
+ @acronym{PDF}, proprietary formats that can be read and edited only by
+ proprietary word processors, @acronym{SGML} or @acronym{XML} for which
+ the @acronym{DTD} and/or processing tools are not generally available,
+ and the machine-generated @acronym{HTML} produced by some word
+ processors for output purposes only.
+ 
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in
+ formats which do not have any title page as such, "Title Page" means
+ the text near the most prominent appearance of the work's title,
+ preceding the beginning of the body of the text.
+ 
+ <LI>
+ 
+ VERBATIM COPYING
+ 
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies
+ to the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further
+ copying of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ <LI>
+ 
+ COPYING IN QUANTITY
+ 
+ If you publish printed copies of the Document numbering more than 100,
+ and the Document's license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+ the back cover.  Both covers must also clearly and legibly identify
+ you as the publisher of these copies.  The front cover must present
+ the full title with all words of the title equally prominent and
+ visible.  You may add other material on the covers in addition.
+ Copying with changes limited to the covers, as long as they preserve
+ the title of the Document and satisfy these conditions, can be treated
+ as verbatim copying in other respects.
+ 
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy
+ a publicly-accessible computer-network location containing a complete
+ Transparent copy of the Document, free of added material, which the
+ general network-using public has access to download anonymously at no
+ charge using public-standard network protocols.  If you use the latter
+ option, you must take reasonably prudent steps, when you begin
+ distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ <LI>
+ 
+ MODIFICATIONS
+ 
+ You may copy and distribute a Modified Version of the Document under
+ the conditions of sections 2 and 3 above, provided that you release
+ the Modified Version under precisely this License, with the Modified
+ Version filling the role of the Document, thus licensing distribution
+ and modification of the Modified Version to whoever possesses a copy
+ of it.  In addition, you must do these things in the Modified Version:
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document).  You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+ 
+ <LI>
+ 
+ List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+ 
+ <LI>
+ 
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ 
+ <LI>
+ 
+ Preserve all the copyright notices of the Document.
+ 
+ <LI>
+ 
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ 
+ <LI>
+ 
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ 
+ <LI>
+ 
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+ 
+ <LI>
+ 
+ Include an unaltered copy of this License.
+ 
+ <LI>
+ 
+ Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.  If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+ 
+ <LI>
+ 
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on.  These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ 
+ <LI>
+ 
+ In any section entitled "Acknowledgments" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgments
+ and/or dedications given therein.
+ 
+ <LI>
+ 
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles.  Section numbers
+ or the equivalent are not considered part of the section titles.
+ 
+ <LI>
+ 
+ Delete any section entitled "Endorsements".  Such a section
+ may not be included in the Modified Version.
+ 
+ <LI>
+ 
+ Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+ </OL>
+ 
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no material
+ copied from the Document, you may at your option designate some or all
+ of these sections as invariant.  To do this, add their titles to the
+ list of Invariant Sections in the Modified Version's license notice.
+ These titles must be distinct from any other section titles.
+ 
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of a
+ standard.
+ 
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of
+ Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity.  If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.
+ 
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ <LI>
+ 
+ COMBINING DOCUMENTS
+ 
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its
+ license notice.
+ 
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by
+ adding at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique number.
+ Make the same adjustment to the section titles in the list of
+ Invariant Sections in the license notice of the combined work.
+ 
+ In the combination, you must combine any sections entitled "History"
+ in the various original documents, forming one section entitled
+ "History"; likewise combine any sections entitled "Acknowledgments",
+ and any sections entitled "Dedications".  You must delete all sections
+ entitled "Endorsements."
+ 
+ <LI>
+ 
+ COLLECTIONS OF DOCUMENTS
+ 
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ <LI>
+ 
+ AGGREGATION WITH INDEPENDENT WORKS
+ 
+ A compilation of the Document or its derivatives with other separate
+ and independent documents or works, in or on a volume of a storage or
+ distribution medium, does not as a whole count as a Modified Version
+ of the Document, provided no compilation copyright is claimed for the
+ compilation.  Such a compilation is called an "aggregate", and this
+ License does not apply to the other self-contained works thus compiled
+ with the Document, on account of their being thus compiled, if they
+ are not themselves derivative works of the Document.
+ 
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one quarter
+ of the entire aggregate, the Document's Cover Texts may be placed on
+ covers that surround only the Document within the aggregate.
+ Otherwise they must appear on covers around the whole aggregate.
+ 
+ <LI>
+ 
+ TRANSLATION
+ 
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections.  You may include a
+ translation of this License provided that you also include the
+ original English version of this License.  In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.
+ 
+ <LI>
+ 
+ TERMINATION
+ 
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided for under this License.  Any other attempt to
+ copy, modify, sublicense or distribute the Document 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.
+ 
+ <LI>
+ 
+ FUTURE REVISIONS OF THIS LICENSE
+ 
+ The Free Software Foundation may publish new, revised versions
+ of the GNU Free Documentation 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.  See
+ <A HREF="http://www.gnu.org/copyleft/">http://www.gnu.org/copyleft/</A>.
+ 
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License "or any later version" applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.
+ </OL>
+ 
+ 
+ 
+ <H3><A NAME="SEC105" HREF="bison_toc.html#TOC105">ADDENDUM: How to use this License for your documents</A></H3>
+ 
+ <P>
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ 
+ 
+ 
+ <PRE>
+   Copyright (C)  <VAR>year</VAR>  <VAR>your name</VAR>.
+   Permission is granted to copy, distribute and/or modify this document
+   under the terms of the GNU Free Documentation License, Version 1.1
+   or any later version published by the Free Software Foundation;
+   with the Invariant Sections being <VAR>list their titles</VAR>, with the
+   Front-Cover Texts being <VAR>list</VAR>, and with the Back-Cover Texts being <VAR>list</VAR>.
+   A copy of the license is included in the section entitled ``GNU
+   Free Documentation License''.
+ </PRE>
+ 
+ <P>
+ If you have no Invariant Sections, write "with no Invariant Sections"
+ instead of saying which ones are invariant.  If you have no
+ Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being <VAR>list</VAR>"; likewise for Back-Cover Texts.
+ 
+ 
+ <P>
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License,
+ to permit their use in free software.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC106" HREF="bison_toc.html#TOC106">Index</A></H1>
+ 
+ <P>
+ Jump to:
+ <A HREF="#cindex_$">$</A>
+ -
+ <A HREF="#cindex_%">%</A>
+ -
+ <A HREF="#cindex_@">@</A>
+ -
+ <A HREF="#cindex_a">a</A>
+ -
+ <A HREF="#cindex_b">b</A>
+ -
+ <A HREF="#cindex_c">c</A>
+ -
+ <A HREF="#cindex_d">d</A>
+ -
+ <A HREF="#cindex_e">e</A>
+ -
+ <A HREF="#cindex_f">f</A>
+ -
+ <A HREF="#cindex_g">g</A>
+ -
+ <A HREF="#cindex_i">i</A>
+ -
+ <A HREF="#cindex_l">l</A>
+ -
+ <A HREF="#cindex_m">m</A>
+ -
+ <A HREF="#cindex_n">n</A>
+ -
+ <A HREF="#cindex_o">o</A>
+ -
+ <A HREF="#cindex_p">p</A>
+ -
+ <A HREF="#cindex_r">r</A>
+ -
+ <A HREF="#cindex_s">s</A>
+ -
+ <A HREF="#cindex_t">t</A>
+ -
+ <A HREF="#cindex_u">u</A>
+ -
+ <A HREF="#cindex_v">v</A>
+ -
+ <A HREF="#cindex_w">w</A>
+ -
+ <A HREF="#cindex_y">y</A>
+ -
+ <A HREF="#cindex_|">|</A>
+ <P>
+ <H2><A NAME="cindex_$">$</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX89">$$</A>
+ <LI><A HREF="bison.html#IDX90">$<VAR>n</VAR></A>
+ </DIR>
+ <H2><A NAME="cindex_%">%</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX125">%expect</A>
+ <LI><A HREF="bison.html#IDX176">%left</A>
+ <LI><A HREF="bison.html#IDX178">%nonassoc</A>
+ <LI><A HREF="bison.html#IDX183">%prec</A>
+ <LI><A HREF="bison.html#IDX132">%pure_parser</A>
+ <LI><A HREF="bison.html#IDX177">%right</A>
+ <LI><A HREF="bison.html#IDX129">%start</A>
+ <LI><A HREF="bison.html#IDX111">%token</A>
+ <LI><A HREF="bison.html#IDX120">%type</A>
+ <LI><A HREF="bison.html#IDX117">%union</A>
+ </DIR>
+ <H2><A NAME="cindex_@">@</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX103">@$</A>, <A HREF="bison.html#IDX159">@$</A>
+ <LI><A HREF="bison.html#IDX104">@<VAR>n</VAR></A>, <A HREF="bison.html#IDX160">@<VAR>n</VAR></A>
+ </DIR>
+ <H2><A NAME="cindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX88">action</A>
+ <LI><A HREF="bison.html#IDX92">action data types</A>
+ <LI><A HREF="bison.html#IDX155">action features summary</A>
+ <LI><A HREF="bison.html#IDX94">actions in mid-rule</A>
+ <LI><A HREF="bison.html#IDX102">actions, location</A>
+ <LI><A HREF="bison.html#IDX17">actions, semantic</A>
+ <LI><A HREF="bison.html#IDX62">additional C code section</A>
+ <LI><A HREF="bison.html#IDX162">algorithm of parser</A>
+ <LI><A HREF="bison.html#IDX175">associativity</A>
+ </DIR>
+ <H2><A NAME="cindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX5">Backus-Naur form</A>
+ <LI><A HREF="bison.html#IDX133">Bison declaration summary</A>
+ <LI><A HREF="bison.html#IDX107">Bison declarations</A>
+ <LI><A HREF="bison.html#IDX58">Bison declarations (introduction)</A>
+ <LI><A HREF="bison.html#IDX11">Bison grammar</A>
+ <LI><A HREF="bison.html#IDX210">Bison invocation</A>
+ <LI><A HREF="bison.html#IDX21">Bison parser</A>
+ <LI><A HREF="bison.html#IDX161">Bison parser algorithm</A>
+ <LI><A HREF="bison.html#IDX217">Bison symbols, table of</A>
+ <LI><A HREF="bison.html#IDX22">Bison utility</A>
+ <LI><A HREF="bison.html#IDX213">BISON_HAIRY</A>
+ <LI><A HREF="bison.html#IDX214">BISON_SIMPLE</A>
+ <LI><A HREF="bison.html#IDX4">BNF</A>
+ </DIR>
+ <H2><A NAME="cindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX63">C code, section for additional</A>
+ <LI><A HREF="bison.html#IDX56">C declarations section</A>
+ <LI><A HREF="bison.html#IDX136">C-language interface</A>
+ <LI><A HREF="bison.html#IDX45"><CODE>calc</CODE></A>
+ <LI><A HREF="bison.html#IDX46">calculator, infix notation</A>
+ <LI><A HREF="bison.html#IDX50">calculator, location tracking</A>
+ <LI><A HREF="bison.html#IDX53">calculator, multi-function</A>
+ <LI><A HREF="bison.html#IDX36">calculator, simple</A>
+ <LI><A HREF="bison.html#IDX68">character token</A>
+ <LI><A HREF="bison.html#IDX43">compiling the parser</A>
+ <LI><A HREF="bison.html#IDX169">conflicts</A>
+ <LI><A HREF="bison.html#IDX188">conflicts, reduce/reduce</A>
+ <LI><A HREF="bison.html#IDX124">conflicts, suppressing warnings of</A>
+ <LI><A HREF="bison.html#IDX179">context-dependent precedence</A>
+ <LI><A HREF="bison.html#IDX2">context-free grammar</A>
+ <LI><A HREF="bison.html#IDX39">controlling function</A>
+ </DIR>
+ <H2><A NAME="cindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX171">dangling <CODE>else</CODE></A>
+ <LI><A HREF="bison.html#IDX99">data type of locations</A>
+ <LI><A HREF="bison.html#IDX93">data types in actions</A>
+ <LI><A HREF="bison.html#IDX86">data types of semantic values</A>
+ <LI><A HREF="bison.html#IDX206">debugging</A>
+ <LI><A HREF="bison.html#IDX134">declaration summary</A>
+ <LI><A HREF="bison.html#IDX106">declarations, Bison</A>
+ <LI><A HREF="bison.html#IDX59">declarations, Bison (introduction)</A>
+ <LI><A HREF="bison.html#IDX57">declarations, C</A>
+ <LI><A HREF="bison.html#IDX110">declaring literal string tokens</A>
+ <LI><A HREF="bison.html#IDX113">declaring operator precedence</A>
+ <LI><A HREF="bison.html#IDX126">declaring the start symbol</A>
+ <LI><A HREF="bison.html#IDX108">declaring token type names</A>
+ <LI><A HREF="bison.html#IDX115">declaring value types</A>
+ <LI><A HREF="bison.html#IDX118">declaring value types, nonterminals</A>
+ <LI><A HREF="bison.html#IDX91">default action</A>
+ <LI><A HREF="bison.html#IDX87">default data type</A>
+ <LI><A HREF="bison.html#IDX100">default location type</A>
+ <LI><A HREF="bison.html#IDX195">default stack limit</A>
+ <LI><A HREF="bison.html#IDX128">default start symbol</A>
+ <LI><A HREF="bison.html#IDX82">defining language semantics</A>
+ </DIR>
+ <H2><A NAME="cindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX172"><CODE>else</CODE>, dangling</A>
+ <LI><A HREF="bison.html#IDX212">environment variables</A>
+ <LI><A HREF="bison.html#IDX199">error</A>
+ <LI><A HREF="bison.html#IDX197">error recovery</A>
+ <LI><A HREF="bison.html#IDX47">error recovery, simple</A>
+ <LI><A HREF="bison.html#IDX148">error reporting function</A>
+ <LI><A HREF="bison.html#IDX41">error reporting routine</A>
+ <LI><A HREF="bison.html#IDX32">examples, simple</A>
+ <LI><A HREF="bison.html#IDX55">exercises</A>
+ </DIR>
+ <H2><A NAME="cindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX220">FDL, GNU Free Documentation License</A>
+ <LI><A HREF="bison.html#IDX28">file format</A>
+ <LI><A HREF="bison.html#IDX184">finite-state machine</A>
+ <LI><A HREF="bison.html#IDX13">formal grammar</A>
+ <LI><A HREF="bison.html#IDX29">format of grammar file</A>
+ </DIR>
+ <H2><A NAME="cindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX219">glossary</A>
+ <LI><A HREF="bison.html#IDX27">grammar file</A>
+ <LI><A HREF="bison.html#IDX75">grammar rule syntax</A>
+ <LI><A HREF="bison.html#IDX60">grammar rules section</A>
+ <LI><A HREF="bison.html#IDX12">grammar, Bison</A>
+ <LI><A HREF="bison.html#IDX3">grammar, context-free</A>
+ <LI><A HREF="bison.html#IDX9">grouping, syntactic</A>
+ </DIR>
+ <H2><A NAME="cindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX44">infix notation calculator</A>
+ <LI><A HREF="bison.html#IDX137">interface</A>
+ <LI><A HREF="bison.html#IDX1">introduction</A>
+ <LI><A HREF="bison.html#IDX209">invoking Bison</A>
+ <LI><A HREF="bison.html#IDX215">invoking Bison under VMS</A>
+ </DIR>
+ <H2><A NAME="cindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX190">LALR(1)</A>
+ <LI><A HREF="bison.html#IDX83">language semantics, defining</A>
+ <LI><A HREF="bison.html#IDX30">layout of Bison grammar</A>
+ <LI><A HREF="bison.html#IDX79">left recursion</A>
+ <LI><A HREF="bison.html#IDX142">lexical analyzer</A>
+ <LI><A HREF="bison.html#IDX23">lexical analyzer, purpose</A>
+ <LI><A HREF="bison.html#IDX38">lexical analyzer, writing</A>
+ <LI><A HREF="bison.html#IDX203">lexical tie-in</A>
+ <LI><A HREF="bison.html#IDX72">literal string token</A>
+ <LI><A HREF="bison.html#IDX69">literal token</A>
+ <LI><A HREF="bison.html#IDX18">location</A>, <A HREF="bison.html#IDX96">location</A>
+ <LI><A HREF="bison.html#IDX101">location actions</A>
+ <LI><A HREF="bison.html#IDX48">location tracking calculator</A>
+ <LI><A HREF="bison.html#IDX167">look-ahead token</A>
+ <LI><A HREF="bison.html#IDX189">LR(1)</A>
+ <LI><A HREF="bison.html#IDX49"><CODE>ltcalc</CODE></A>
+ </DIR>
+ <H2><A NAME="cindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX40">main function in simple example</A>
+ <LI><A HREF="bison.html#IDX52"><CODE>mfcalc</CODE></A>
+ <LI><A HREF="bison.html#IDX95">mid-rule actions</A>
+ <LI><A HREF="bison.html#IDX51">multi-function calculator</A>
+ <LI><A HREF="bison.html#IDX73">multicharacter literal</A>
+ <LI><A HREF="bison.html#IDX81">mutual recursion</A>
+ </DIR>
+ <H2><A NAME="cindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX64">nonterminal symbol</A>
+ </DIR>
+ <H2><A NAME="cindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX173">operator precedence</A>
+ <LI><A HREF="bison.html#IDX114">operator precedence, declaring</A>
+ <LI><A HREF="bison.html#IDX211">options for invoking Bison</A>
+ <LI><A HREF="bison.html#IDX193">overflow of parser stack</A>
+ </DIR>
+ <H2><A NAME="cindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX150">parse error</A>
+ <LI><A HREF="bison.html#IDX24">parser</A>
+ <LI><A HREF="bison.html#IDX165">parser stack</A>
+ <LI><A HREF="bison.html#IDX192">parser stack overflow</A>
+ <LI><A HREF="bison.html#IDX185">parser state</A>
+ <LI><A HREF="bison.html#IDX34">polish notation calculator</A>
+ <LI><A HREF="bison.html#IDX20">position, textual</A>, <A HREF="bison.html#IDX98">position, textual</A>
+ <LI><A HREF="bison.html#IDX112">precedence declarations</A>
+ <LI><A HREF="bison.html#IDX174">precedence of operators</A>
+ <LI><A HREF="bison.html#IDX181">precedence, context-dependent</A>
+ <LI><A HREF="bison.html#IDX182">precedence, unary operator</A>
+ <LI><A HREF="bison.html#IDX122">preventing warnings about conflicts</A>
+ <LI><A HREF="bison.html#IDX131">pure parser</A>
+ </DIR>
+ <H2><A NAME="cindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX198">recovery from errors</A>
+ <LI><A HREF="bison.html#IDX78">recursive rule</A>
+ <LI><A HREF="bison.html#IDX187">reduce/reduce conflict</A>
+ <LI><A HREF="bison.html#IDX164">reduction</A>
+ <LI><A HREF="bison.html#IDX130">reentrant parser</A>
+ <LI><A HREF="bison.html#IDX33">reverse polish notation</A>
+ <LI><A HREF="bison.html#IDX80">right recursion</A>
+ <LI><A HREF="bison.html#IDX35"><CODE>rpcalc</CODE></A>
+ <LI><A HREF="bison.html#IDX74">rule syntax</A>
+ <LI><A HREF="bison.html#IDX61">rules section for grammar</A>
+ <LI><A HREF="bison.html#IDX42">running Bison (introduction)</A>
+ </DIR>
+ <H2><A NAME="cindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX16">semantic actions</A>
+ <LI><A HREF="bison.html#IDX14">semantic value</A>
+ <LI><A HREF="bison.html#IDX84">semantic value type</A>
+ <LI><A HREF="bison.html#IDX170">shift/reduce conflicts</A>
+ <LI><A HREF="bison.html#IDX163">shifting</A>
+ <LI><A HREF="bison.html#IDX31">simple examples</A>
+ <LI><A HREF="bison.html#IDX70">single-character literal</A>
+ <LI><A HREF="bison.html#IDX191">stack overflow</A>
+ <LI><A HREF="bison.html#IDX166">stack, parser</A>
+ <LI><A HREF="bison.html#IDX25">stages in using Bison</A>
+ <LI><A HREF="bison.html#IDX10">start symbol</A>
+ <LI><A HREF="bison.html#IDX127">start symbol, declaring</A>
+ <LI><A HREF="bison.html#IDX186">state (of parser)</A>
+ <LI><A HREF="bison.html#IDX71">string token</A>
+ <LI><A HREF="bison.html#IDX154">summary, action features</A>
+ <LI><A HREF="bison.html#IDX135">summary, Bison declaration</A>
+ <LI><A HREF="bison.html#IDX121">suppressing conflict warnings</A>
+ <LI><A HREF="bison.html#IDX67">symbol</A>
+ <LI><A HREF="bison.html#IDX54">symbol table example</A>
+ <LI><A HREF="bison.html#IDX6">symbols (abstract)</A>
+ <LI><A HREF="bison.html#IDX218">symbols in Bison, table of</A>
+ <LI><A HREF="bison.html#IDX8">syntactic grouping</A>
+ <LI><A HREF="bison.html#IDX151">syntax error</A>
+ <LI><A HREF="bison.html#IDX76">syntax of grammar rules</A>
+ </DIR>
+ <H2><A NAME="cindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX65">terminal symbol</A>
+ <LI><A HREF="bison.html#IDX19">textual position</A>, <A HREF="bison.html#IDX97">textual position</A>
+ <LI><A HREF="bison.html#IDX7">token</A>
+ <LI><A HREF="bison.html#IDX66">token type</A>
+ <LI><A HREF="bison.html#IDX109">token type names, declaring</A>
+ <LI><A HREF="bison.html#IDX207">tracing the parser</A>
+ </DIR>
+ <H2><A NAME="cindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX180">unary operator precedence</A>
+ <LI><A HREF="bison.html#IDX26">using Bison</A>
+ </DIR>
+ <H2><A NAME="cindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX85">value type, semantic</A>
+ <LI><A HREF="bison.html#IDX116">value types, declaring</A>
+ <LI><A HREF="bison.html#IDX119">value types, nonterminals, declaring</A>
+ <LI><A HREF="bison.html#IDX15">value, semantic</A>
+ <LI><A HREF="bison.html#IDX216">VMS</A>
+ </DIR>
+ <H2><A NAME="cindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX123">warnings, preventing</A>
+ <LI><A HREF="bison.html#IDX37">writing a lexical analyzer</A>
+ </DIR>
+ <H2><A NAME="cindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX140">YYABORT</A>
+ <LI><A HREF="bison.html#IDX139">YYACCEPT</A>
+ <LI><A HREF="bison.html#IDX156">YYBACKUP</A>
+ <LI><A HREF="bison.html#IDX168">yychar</A>
+ <LI><A HREF="bison.html#IDX201">yyclearin</A>
+ <LI><A HREF="bison.html#IDX204">YYDEBUG</A>
+ <LI><A HREF="bison.html#IDX205">yydebug</A>
+ <LI><A HREF="bison.html#IDX157">YYEMPTY</A>
+ <LI><A HREF="bison.html#IDX200">yyerrok</A>
+ <LI><A HREF="bison.html#IDX158">YYERROR</A>
+ <LI><A HREF="bison.html#IDX149">yyerror</A>
+ <LI><A HREF="bison.html#IDX152">YYERROR_VERBOSE</A>
+ <LI><A HREF="bison.html#IDX196">YYINITDEPTH</A>
+ <LI><A HREF="bison.html#IDX141">yylex</A>
+ <LI><A HREF="bison.html#IDX147">YYLEX_PARAM</A>
+ <LI><A HREF="bison.html#IDX144">yylloc</A>
+ <LI><A HREF="bison.html#IDX105">YYLLOC_DEFAULT</A>
+ <LI><A HREF="bison.html#IDX145">YYLTYPE</A>
+ <LI><A HREF="bison.html#IDX143">yylval</A>
+ <LI><A HREF="bison.html#IDX194">YYMAXDEPTH</A>
+ <LI><A HREF="bison.html#IDX153">yynerrs</A>
+ <LI><A HREF="bison.html#IDX138">yyparse</A>
+ <LI><A HREF="bison.html#IDX146">YYPARSE_PARAM</A>
+ <LI><A HREF="bison.html#IDX208">YYPRINT</A>
+ <LI><A HREF="bison.html#IDX202">YYRECOVERING</A>
+ </DIR>
+ <H2><A NAME="cindex_|">|</A></H2>
+ <DIR>
+ <LI><A HREF="bison.html#IDX77">|</A>
+ </DIR>
+ 
+ 
+ <P><HR><P>
+ This document was generated on 4 November 2001 using
+ <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+ </BODY>
+ </HTML>


ossp-adm/autotools/flex.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,6798 ----
+ <HTML>
+ <HEAD>
+ <!-- Created by texi2html 1.56k from flex.texi on 2 July 2002 -->
+ 
+ <TITLE>The Flex Manual</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>The Flex Manual</H1>
+ <P>
+ <P><HR><P>
+ 
+ 
+ <H1><A NAME="SEC1" HREF="flex_toc.html#TOC1">Introduction</A></H1>
+ 
+ <P>
+ <A NAME="IDX1"></A>
+ <CODE>flex</CODE>
+ is a tool for generating
+ <EM>scanners</EM>.
+ A scanner is a program which recognizes lexical patterns in text.
+ The
+ <CODE>flex</CODE>
+ program
+ reads
+ the given input files, or its standard input if no file names are given,
+ for a description of a scanner to generate.  The description is in
+ the form of pairs
+ of regular expressions and C code, called
+ <EM>rules</EM>. <CODE>flex</CODE>
+ generates as output a C source file,
+ <TT>`lex.yy.c'</TT> by default,
+ which defines a routine
+ <B>yylex()</B>.
+ This file is compiled and linked with the
+ flex runtime library
+ library to produce an executable.  When the executable is run,
+ it analyzes its input for occurrences
+ of the regular expressions.  Whenever it finds one, it executes
+ the corresponding C code.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC2" HREF="flex_toc.html#TOC2">Some Simple Examples</A></H1>
+ 
+ <P>
+ First some simple examples to get the flavor of how one uses
+ <CODE>flex</CODE>.
+ The following
+ <CODE>flex</CODE>
+ input specifies a scanner which whenever it encounters the string
+ <SAMP>`username'</SAMP> will replace it with the user's login name:
+ 
+ 
+ <P>
+ @verbatim
+     %%
+     username    printf( "%s", getlogin() );
+ 
+ 
+ <P>
+ <A NAME="IDX2"></A>
+ By default, any text not matched by a
+ <CODE>flex</CODE>
+ scanner
+ is copied to the output, so the net effect of this scanner is
+ to copy its input file to its output with each occurrence
+ of <SAMP>`username'</SAMP> expanded.
+ In this input, there is just one rule.  <SAMP>`username'</SAMP> is the
+ <EM>pattern</EM>
+ and the <SAMP>`printf'</SAMP> is the
+ <EM>action</EM>.
+ The <SAMP>`%%'</SAMP> symbol marks the beginning of the rules.
+ 
+ 
+ <P>
+ Here's another simple example:
+ 
+ 
+ <P>
+ <A NAME="IDX3"></A>
+ 
+ <PRE>
+ @verbatim
+             int num_lines = 0, num_chars = 0;
+ 
+     %%
+     \n      ++num_lines; ++num_chars;
+     .       ++num_chars;
+ 
+     %%
+     main()
+             {
+             yylex();
+             printf( "# of lines = %d, # of chars = %d\n",
+                     num_lines, num_chars );
+             }
+ </PRE>
+ 
+ <P>
+ This scanner counts the number of characters and the number
+ of lines in its input (it produces no output other than the
+ final report on the counts).  The first line
+ declares two globals, <CODE>num_lines</CODE> and <CODE>num_chars</CODE>, which are accessible
+ both inside
+ <CODE>yylex()</CODE>
+ and in the
+ <CODE>main()</CODE>
+ routine declared after the second <SAMP>`%%'</SAMP>.  There are two rules, one
+ which matches a newline (<SAMP>`\n'</SAMP>) and increments both the line count and
+ the character count, and one which matches any character other than
+ a newline (indicated by the <SAMP>`.'</SAMP> regular expression).
+ 
+ 
+ <P>
+ A somewhat more complicated example:
+ 
+ 
+ <P>
+ <A NAME="IDX4"></A>
+ 
+ <PRE>
+ @verbatim
+     /* scanner for a toy Pascal-like language */
+ 
+     %{
+     /* need this for the call to atof() below */
+     #include math.h&#62;
+     %}
+ 
+     DIGIT    [0-9]
+     ID       [a-z][a-z0-9]*
+ 
+     %%
+ 
+     {DIGIT}+    {
+                 printf( "An integer: %s (%d)\n", yytext,
+                         atoi( yytext ) );
+                 }
+ 
+     {DIGIT}+"."{DIGIT}*        {
+                 printf( "A float: %s (%g)\n", yytext,
+                         atof( yytext ) );
+                 }
+ 
+     if|then|begin|end|procedure|function        {
+                 printf( "A keyword: %s\n", yytext );
+                 }
+ 
+     {ID}        printf( "An identifier: %s\n", yytext );
+ 
+     "+"|"-"|"*"|"/"   printf( "An operator: %s\n", yytext );
+ 
+     "{"[\^{}}\n]*"}"     /* eat up one-line comments */
+ 
+     [ \t\n]+          /* eat up whitespace */
+ 
+     .           printf( "Unrecognized character: %s\n", yytext );
+ 
+     %%
+ 
+     main( argc, argv )
+     int argc;
+     char **argv;
+         {
+         ++argv, --argc;  /* skip over program name */
+         if ( argc &#62; 0 )
+                 yyin = fopen( argv[0], "r" );
+         else
+                 yyin = stdin;
+         
+         yylex();
+         }
+ </PRE>
+ 
+ <P>
+ This is the beginnings of a simple scanner for a language like
+ Pascal.  It identifies different types of
+ <EM>tokens</EM>
+ and reports on what it has seen.
+ 
+ 
+ <P>
+ The details of this example will be explained in the following
+ sections.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC3" HREF="flex_toc.html#TOC3">Format of the Input File</A></H1>
+ 
+ <P>
+ <A NAME="IDX5"></A>
+ <A NAME="IDX6"></A>
+ <A NAME="IDX7"></A>
+ 
+ 
+ <P>
+ The
+ <CODE>flex</CODE>
+ input file consists of three sections, separated by a line with just
+ <SAMP>`%%'</SAMP>
+ in it:
+ 
+ 
+ <P>
+ <A NAME="IDX8"></A>
+ 
+ <PRE>
+ @verbatim
+     definitions
+     %%
+     rules
+     %%
+     user code
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC4" HREF="flex_toc.html#TOC4">Format of the Definitions Section</A></H2>
+ <P>
+ <A NAME="IDX9"></A>
+ <A NAME="IDX10"></A>
+ <A NAME="IDX11"></A>
+ 
+ 
+ <P>
+ The
+ <I>definitions</I>
+ section contains declarations of simple
+ <I>name</I>
+ definitions to simplify the scanner specification, and declarations of
+ <I>start conditions</I>,
+ which are explained in a later section.
+ 
+ 
+ <P>
+ <A NAME="IDX12"></A>
+ Name definitions have the form:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     name definition
+ </PRE>
+ 
+ <P>
+ The <SAMP>`name'</SAMP> is a word beginning with a letter or an underscore (<SAMP>`_'</SAMP>)
+ followed by zero or more letters, digits, <SAMP>`_'</SAMP>, or <SAMP>`-'</SAMP> (dash).
+ The definition is taken to begin at the first non-whitespace character
+ following the name and continuing to the end of the line.
+ The definition can subsequently be referred to using <SAMP>`{name}'</SAMP>, which
+ will expand to <SAMP>`(definition)'</SAMP>.  For example,
+ 
+ 
+ <P>
+ <A NAME="IDX13"></A>
+ 
+ <PRE>
+ @verbatim
+     DIGIT    [0-9]
+     ID       [a-z][a-z0-9]*
+ </PRE>
+ 
+ <P>
+ Defines <SAMP>`DIGIT'</SAMP> to be a regular expression which matches a
+ single digit, and
+ <SAMP>`ID'</SAMP> to be a regular expression which matches a letter
+ followed by zero-or-more letters-or-digits.
+ A subsequent reference to
+ 
+ 
+ <P>
+ <A NAME="IDX14"></A>
+ 
+ <PRE>
+ @verbatim
+     {DIGIT}+"."{DIGIT}*
+ </PRE>
+ 
+ <P>
+ is identical to
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     ([0-9])+"."([0-9])*
+ </PRE>
+ 
+ <P>
+ and matches one-or-more digits followed by a '.' followed
+ by zero-or-more digits.
+ 
+ 
+ <P>
+ An unindented comment (i.e., a line
+ beginning with <SAMP>`/*'</SAMP>) is copied verbatim to the output up
+ to the next <SAMP>`*/'</SAMP>.
+ 
+ 
+ <P>
+ <A NAME="IDX15"></A>
+ <A NAME="IDX16"></A>
+ <A NAME="IDX17"></A>
+  
+ Any
+ <EM>indented</EM>
+ text or text enclosed in
+ <SAMP>`%{'</SAMP>
+ and
+ <SAMP>`%}'</SAMP>
+ is also copied verbatim to the output (with the %{ and %} symbols removed).
+ The %{ and %} symbols must appear unindented on lines by themselves.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC5" HREF="flex_toc.html#TOC5">Format of the Rules Section</A></H2>
+ <P>
+ <A NAME="IDX18"></A>
+ <A NAME="IDX19"></A>
+ <A NAME="IDX20"></A>
+ 
+ 
+ <P>
+ The
+ <I>rules</I>
+ section of the
+ <CODE>flex</CODE>
+ input contains a series of rules of the form:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     pattern   action
+ </PRE>
+ 
+ <P>
+ where the pattern must be unindented and the action must begin
+ on the same line.
+ 
+ 
+ <P>
+ See section <A HREF="flex.html#SEC8">Patterns</A>, for a further description of patterns and actions.
+ 
+ 
+ <P>
+ In the rules section,
+ any indented or %{ %} enclosed text appearing before the
+ first rule may be used to declare variables
+ which are local to the scanning routine and (after the declarations)
+ code which is to be executed whenever the scanning routine is entered.
+ Other indented or %{ %} text in the rule section is still copied to the output,
+ but its meaning is not well-defined and it may well cause compile-time
+ errors (this feature is present for
+ <I>POSIX</I>
+ compliance. See section <A HREF="flex.html#SEC36">Incompatibilities with Lex and Posix</A>, for other such features).
+ 
+ 
+ <P>
+ Any
+ <EM>indented</EM>
+ text or text enclosed in
+ <SAMP>`%{'</SAMP>
+ and
+ <SAMP>`%}'</SAMP>
+ is copied verbatim to the output (with the %{ and %} symbols removed).
+ The %{ and %} symbols must appear unindented on lines by themselves.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC6" HREF="flex_toc.html#TOC6">Format of the User Code Section</A></H2>
+ <P>
+ <A NAME="IDX21"></A>
+ <A NAME="IDX22"></A>
+ <A NAME="IDX23"></A>
+ 
+ 
+ <P>
+ The user code section is simply copied to
+ <TT>`lex.yy.c'</TT>
+ verbatim.
+ It is used for companion routines which call or are called
+ by the scanner.  The presence of this section is optional;
+ if it is missing, the second
+ <SAMP>`%%'</SAMP>
+ in the input file may be skipped, too.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC7" HREF="flex_toc.html#TOC7">Comments in the Input</A></H2>
+ <P>
+ <A NAME="IDX24"></A>
+ 
+ 
+ <P>
+ Flex supports C-style comments, that is, anything between /* and */ is
+ considered a comment. Whenever flex encounters a comment, it copies
+ the entire comment verbatim to the generated source code. Comments
+ may appear just about anywhere, but with the following exceptions:
+ 
+ 
+ 
+ <UL>
+ <LI>Comments may not appear in the Rules Section wherever flex is expecting
+ 
+ a regular expression. This means comments may not appear at the beginning of
+ a line, or immediately following a list of scanner states.
+ <LI>Comments may not appear on an <SAMP>`%option'</SAMP> line in the Definitions Section.
+ 
+ </UL>
+ 
+ <P>
+ If you want to follow a simple rule, then always begin a comment on a new line,
+ with one or more whitespace characters before the initial <SAMP>`/*'</SAMP>).
+ This rule will work anywhere in the input file.
+ 
+ 
+ <P>
+ All the comments in the following example are OK:
+ 
+ 
+ <P>
+ <A NAME="IDX25"></A>
+ <A NAME="IDX26"></A>
+ 
+ <PRE>
+ @verbatim
+ %{
+ /* code block */
+ %}
+ 
+ /* Definitions Section */
+ %x STATE_X
+ 
+ %%
+     /* Rules Section */
+ ruleA   /* after regex */ { /* code block */ } /* after code block */
+         /* Rules Section (indented) */
+ &#60;STATE_X&#62;{
+ ruleC   ECHO;
+ ruleD   ECHO;
+ %{
+ /* code block */
+ %}
+ }
+ %%
+ /* User Code Section */
+ 
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC8" HREF="flex_toc.html#TOC8">Patterns</A></H1>
+ <P>
+ <A NAME="IDX27"></A>
+ 
+ 
+ <P>
+ The patterns in the input are written using an extended set of regular
+ expressions.  These are:
+ 
+ 
+ <P>
+ <A NAME="IDX28"></A>
+ <A NAME="IDX29"></A>
+ <DL COMPACT>
+ 
+ <DT><SAMP>`x'</SAMP>
+ <DD>
+ match the character 'x'
+ 
+ <DT><SAMP>`.'</SAMP>
+ <DD>
+ any character (byte) except newline
+ 
+ <A NAME="IDX30"></A>
+ <A NAME="IDX31"></A>
+ <DT><SAMP>`[xyz]'</SAMP>
+ <DD>
+ a <EM>character class</EM>; in this case, the pattern
+ matches either an 'x', a 'y', or a 'z'
+ 
+ <A NAME="IDX32"></A>
+ <A NAME="IDX33"></A>
+ <DT><SAMP>`[abj-oZ]'</SAMP>
+ <DD>
+ a "character class" with a range in it; matches
+ an 'a', a 'b', any letter from 'j' through 'o',
+ or a 'Z'
+ 
+ <A NAME="IDX34"></A>
+ <A NAME="IDX35"></A>
+ <DT><SAMP>`[^A-Z]'</SAMP>
+ <DD>
+ a "negated character class", i.e., any character
+ but those in the class.  In this case, any
+ character EXCEPT an uppercase letter.
+ 
+ <DT><SAMP>`[^A-Z\n]'</SAMP>
+ <DD>
+ any character EXCEPT an uppercase letter or
+ a newline
+ 
+ <DT><SAMP>`r*'</SAMP>
+ <DD>
+ zero or more r's, where r is any regular expression
+ 
+ <DT><SAMP>`r+'</SAMP>
+ <DD>
+ one or more r's
+ 
+ <DT><SAMP>`r?'</SAMP>
+ <DD>
+ zero or one r's (that is, "an optional r")
+ 
+ <DT><SAMP>`r{2,5}'</SAMP>
+ <DD>
+ anywhere from two to five r's
+ 
+ <DT><SAMP>`r{2,}'</SAMP>
+ <DD>
+ two or more r's
+ 
+ <DT><SAMP>`r{4}'</SAMP>
+ <DD>
+ exactly 4 r's
+ 
+ <A NAME="IDX36"></A>
+ <DT><SAMP>`{name}'</SAMP>
+ <DD>
+ the expansion of the <SAMP>`name'</SAMP> definition
+ (see section <A HREF="flex.html#SEC3">Format of the Input File</A>).
+ 
+ <A NAME="IDX37"></A>
+ <A NAME="IDX38"></A>
+ <DT><SAMP>`"[xyz]\"foo"'</SAMP>
+ <DD>
+ the literal string: <SAMP>`[xyz]"foo'</SAMP>
+ 
+ <A NAME="IDX39"></A>
+ <DT><SAMP>`\X'</SAMP>
+ <DD>
+ if X is <SAMP>`a'</SAMP>, <SAMP>`b'</SAMP>, <SAMP>`f'</SAMP>, <SAMP>`n'</SAMP>, <SAMP>`r'</SAMP>, <SAMP>`t'</SAMP>, or <SAMP>`v'</SAMP>,
+ then the ANSI-C interpretation of <SAMP>`\x'</SAMP>.
+ Otherwise, a literal <SAMP>`X'</SAMP> (used to escape
+ operators such as <SAMP>`*'</SAMP>)
+ 
+ <A NAME="IDX40"></A>
+ <DT><SAMP>`\0'</SAMP>
+ <DD>
+ a NUL character (ASCII code 0)
+ 
+ <DT><SAMP>`\123'</SAMP>
+ <DD>
+ the character with octal value 123
+ 
+ <DT><SAMP>`\x2a'</SAMP>
+ <DD>
+ the character with hexadecimal value 2a
+ 
+ <DT><SAMP>`(r)'</SAMP>
+ <DD>
+ match an r; parentheses are used to override
+                  precedence (see below)
+ 
+ <DT><SAMP>`rs'</SAMP>
+ <DD>
+ the regular expression r followed by the
+ regular expression s; called <EM>concatenation</EM>
+ 
+ <DT><SAMP>`r|s'</SAMP>
+ <DD>
+ either an r or an s
+ 
+ <A NAME="IDX41"></A>
+ <DT><SAMP>`r/s'</SAMP>
+ <DD>
+ an r but only if it is followed by an s.  The
+ text matched by s is included when determining
+ whether this rule is the longest match,
+ but is then returned to the input before
+ the action is executed.  So the action only
+ sees the text matched by r.  This type
+ of pattern is called <EM>trailing context</EM>.
+ (There are some combinations of r/s that flex
+ cannot match correctly. See section <A HREF="flex.html#SEC38">Limitations</A>,
+ regarding
+ dangerous trailing context.)
+ 
+ <A NAME="IDX42"></A>
+ <DT><SAMP>`^r'</SAMP>
+ <DD>
+ an r, but only at the beginning of a line (i.e.,
+ when just starting to scan, or right after a
+ newline has been scanned).
+ 
+ <A NAME="IDX43"></A>
+ <DT><SAMP>`r$'</SAMP>
+ <DD>
+ an r, but only at the end of a line (i.e., just
+ before a newline).  Equivalent to <SAMP>`r/\n'</SAMP>.
+ 
+ Note that <CODE>flex</CODE>'s notion of "newline" is exactly
+ whatever the C compiler used to compile <CODE>flex</CODE>
+ interprets <SAMP>`\n'</SAMP> as; in particular, on some DOS
+ systems you must either filter out <SAMP>`\r'</SAMP>s in the
+ input yourself, or explicitly use <SAMP>`r/\r\n'</SAMP> for <SAMP>`r$'</SAMP>.
+ 
+ <A NAME="IDX44"></A>
+ <DT><SAMP>`&#60;s&#62;r'</SAMP>
+ <DD>
+ an r, but only in start condition s (see
+ section <A HREF="flex.html#SEC12">Start Conditions</A> for discussion of start conditions).
+ 
+ <DT><SAMP>`&#60;s1,s2,s3&#62;r'</SAMP>
+ <DD>
+ same, but in any of start conditions s1,
+ s2, or s3.
+ 
+ <DT><SAMP>`&#60;*&#62;r'</SAMP>
+ <DD>
+ an r in any start condition, even an exclusive one.
+ 
+ <A NAME="IDX45"></A>
+ <DT><SAMP>`&#60;&#60;EOF&#62;&#62;'</SAMP>
+ <DD>
+ an end-of-file.
+ 
+ <DT><SAMP>`&#60;s1,s2&#62;&#60;&#60;EOF&#62;&#62;'</SAMP>
+ <DD>
+ an end-of-file when in start condition s1 or s2
+ </DL>
+ 
+ <P>
+ Note that inside of a character class, all regular expression operators
+ lose their special meaning except escape (<SAMP>`\'</SAMP>) and the character class
+ operators, <SAMP>`-'</SAMP>, <SAMP>`]]'</SAMP>, and, at the beginning of the class, <SAMP>`^'</SAMP>.
+ 
+ 
+ <P>
+ <A NAME="IDX46"></A>
+ The regular expressions listed above are grouped according to
+ precedence, from highest precedence at the top to lowest at the bottom.
+ Those grouped together have equal precedence (see special note on the
+ precedence of the repeat operator, <SAMP>`{}'</SAMP>, under the documentation
+ for the <SAMP>`--posix'</SAMP> POSIX compliance option).  For example,
+ 
+ 
+ <P>
+ <A NAME="IDX47"></A>
+ 
+ <PRE>
+ @verbatim
+     foo|bar*
+ </PRE>
+ 
+ <P>
+ is the same as
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     (foo)|(ba(r*))
+ </PRE>
+ 
+ <P>
+ since the '*' operator has higher precedence than concatenation, and
+ concatenation higher than alternation ('|').  This pattern therefore
+ matches <EM>either</EM> the string <SAMP>`foo'</SAMP> <EM>or</EM> the string
+ <SAMP>`ba'</SAMP> followed by zero-or-more r's.  To match <SAMP>`foo'</SAMP> or
+ zero-or-more repetitions of the string <SAMP>`bar'</SAMP>, use:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     foo|(bar)*
+ </PRE>
+ 
+ <P>
+ And to match a sequence of zero or more repetitions of <SAMP>`foo'</SAMP> and
+ <SAMP>`bar'</SAMP>:
+ 
+ 
+ <P>
+ <A NAME="IDX48"></A>
+ 
+ <PRE>
+ @verbatim
+     (foo|bar)*
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX49"></A>
+ In addition to characters and ranges of characters, character classes
+ can also contain <EM>character class expressions</EM>.  These are
+ expressions enclosed inside <SAMP>`['</SAMP>: and <SAMP>`:]'</SAMP> delimiters (which
+ themselves must appear between the <SAMP>`['</SAMP> and <SAMP>`]'</SAMP> of the
+ character class. Other elements may occur inside the character class,
+ too).  The valid expressions are:
+ 
+ 
+ <P>
+ <A NAME="IDX50"></A>
+ 
+ <PRE>
+ @verbatim
+     [:alnum:] [:alpha:] [:blank:]
+     [:cntrl:] [:digit:] [:graph:]
+     [:lower:] [:print:] [:punct:]
+     [:space:] [:upper:] [:xdigit:]
+ </PRE>
+ 
+ <P>
+ These expressions all designate a set of characters equivalent to
+ the corresponding standard C
+ <CODE>isXXX</CODE>
+ function.  For example,
+ <SAMP>`[:alnum:]'</SAMP>
+ designates those characters for which
+ <CODE>isalnum()</CODE>
+ returns true - i.e., any alphabetic or numeric character.
+ Some systems don't provide
+ <CODE>isblank()</CODE>,
+ so flex defines
+ <SAMP>`[:blank:]'</SAMP>
+ as a blank or a tab.
+ 
+ 
+ <P>
+ For example, the following character classes are all equivalent:
+ 
+ 
+ <P>
+ <A NAME="IDX51"></A>
+ <A NAME="IDX52"></A>
+ 
+ <PRE>
+ @verbatim
+     [[:alnum:]]
+     [[:alpha:][:digit:]]
+     [[:alpha:][0-9]]
+     [a-zA-Z0-9]
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX53"></A>
+ If your scanner is case-insensitive (the <SAMP>`-i'</SAMP> flag), then
+ <SAMP>`[:upper:]'</SAMP> and <SAMP>`[:lower:]'</SAMP> are equivalent to
+ <SAMP>`[:alpha:]'</SAMP>.
+ 
+ 
+ <P>
+ Some notes on patterns:
+ <A NAME="IDX54"></A>
+ <A NAME="IDX55"></A>
+ <A NAME="IDX56"></A>
+ <A NAME="IDX57"></A>
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ A negated character class such as the example <SAMP>`[^A-Z]'</SAMP>
+ above
+ <EM>will match a newline</EM>
+ unless <SAMP>`\n'</SAMP> (or an equivalent escape sequence) is one of the
+ characters explicitly present in the negated character class
+ (e.g., <SAMP>`[^A-Z\n]'</SAMP>).  This is unlike how many other regular
+ expression tools treat negated character classes, but unfortunately
+ the inconsistency is historically entrenched.
+ Matching newlines means that a pattern like <SAMP>`[^"]*'</SAMP> can match the entire
+ input unless there's another quote in the input.
+ 
+ <LI>
+ 
+ A rule can have at most one instance of trailing context (the <SAMP>`/'</SAMP> operator
+ or the <SAMP>`$'</SAMP> operator).  The start condition, <SAMP>`^'</SAMP>, and <SAMP>`&#60;&#60;EOF&#62;&#62;'</SAMP> patterns
+ can only occur at the beginning of a pattern, and, as well as with <SAMP>`/'</SAMP> and <SAMP>`$'</SAMP>,
+ cannot be grouped inside parentheses.  A <SAMP>`^'</SAMP> which does not occur at
+ the beginning of a rule or a <SAMP>`$'</SAMP> which does not occur at the end of
+ a rule loses its special properties and is treated as a normal character.
+ 
+ <LI>
+ 
+ The following are invalid:
+ 
+ <A NAME="IDX58"></A>
+ 
+ <PRE>
+ @verbatim
+     foo/bar$
+     &#60;sc1&#62;foo&#60;sc2&#62;bar
+ </PRE>
+ 
+ Note that the first of these can be written <SAMP>`foo/bar\n'</SAMP>.
+ 
+ <LI>
+ 
+ The following will result in <SAMP>`$'</SAMP> or <SAMP>`^'</SAMP> being treated as a normal character:
+ 
+ <A NAME="IDX59"></A>
+ 
+ <PRE>
+ @verbatim
+     foo|(bar$)
+     foo|^bar
+ </PRE>
+ 
+ If the desired meaning is a <SAMP>`foo'</SAMP> or a
+ <SAMP>`bar'</SAMP>-followed-by-a-newline, the following could be used (the
+ special <CODE>|</CODE> action is explained below, see section <A HREF="flex.html#SEC10">Actions</A>):
+ 
+ <A NAME="IDX60"></A>
+ 
+ <PRE>
+ @verbatim
+     foo      |
+     bar$     /* action goes here */
+ </PRE>
+ 
+ A similar trick will work for matching a foo or a
+ bar-at-the-beginning-of-a-line.
+ </UL>
+ 
+ 
+ 
+ <H1><A NAME="SEC9" HREF="flex_toc.html#TOC9">How the Input Is Matched</A></H1>
+ <P>
+ <A NAME="IDX61"></A>
+ 
+ 
+ <P>
+ When the generated scanner is run, it analyzes its input looking for
+ strings which match any of its patterns.  If it finds more than one
+ match, it takes the one matching the most text (for trailing context
+ rules, this includes the length of the trailing part, even though it
+ will then be returned to the input).  If it finds two or more matches of
+ the same length, the rule listed first in the <CODE>flex</CODE> input file is
+ chosen.
+ 
+ 
+ <P>
+ Once the match is determined, the text corresponding to the match
+ (called the <EM>token</EM>) is made available in the global character
+ pointer <CODE>yytext</CODE>, and its length in the global integer <CODE>yyleng</CODE>.
+ The <EM>action</EM> corresponding to the matched pattern is then executed
+ (see section <A HREF="flex.html#SEC10">Actions</A>), and then the remaining input is scanned for another
+ match.
+ 
+ 
+ <P>
+ <A NAME="IDX62"></A>
+ If no match is found, then the
+ <EM>default rule</EM>
+ is executed: the next character in the input is considered matched and
+ copied to the standard output.  Thus, the simplest valid
+ <CODE>flex</CODE>
+ input is:
+ 
+ 
+ <P>
+ <A NAME="IDX63"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+ </PRE>
+ 
+ <P>
+ which generates a scanner that simply copies its input (one character
+ at a time) to its output.
+ 
+ 
+ <P>
+ <A NAME="IDX64"></A>
+ <A NAME="IDX65"></A>
+ <A NAME="IDX66"></A>
+ 
+ 
+ <P>
+ <A NAME="IDX67"></A>
+ Note that <CODE>yytext</CODE> can be defined in two different ways: either as a
+ character <EM>pointer</EM> or as a character <EM>array</EM>. You can
+ control which definition <CODE>flex</CODE> uses by including one of the
+ special directives <CODE>%pointer</CODE> or <CODE>%array</CODE> in the first
+ (definitions) section of your flex input.  The default is
+ <CODE>%pointer</CODE>, unless you use the <SAMP>`-l'</SAMP> lex compatibility option,
+ in which case <CODE>yytext</CODE> will be an array.  The advantage of using
+ <CODE>%pointer</CODE> is substantially faster scanning and no buffer overflow
+ when matching very large tokens (unless you run out of dynamic memory).
+ The disadvantage is that you are restricted in how your actions can
+ modify <CODE>yytext</CODE> (see section <A HREF="flex.html#SEC10">Actions</A>), and calls to the <CODE>unput()</CODE>
+ function destroys the present contents of <CODE>yytext</CODE>, which can be a
+ considerable porting headache when moving between different <CODE>lex</CODE>
+ versions.
+ 
+ 
+ <P>
+ The advantage of
+ <CODE>%array</CODE>
+ is that you can then modify
+ <CODE>yytext</CODE>
+ to your heart's content, and calls to
+ <CODE>unput()</CODE>
+ do not destroy
+ <CODE>yytext</CODE>
+ (see section <A HREF="flex.html#SEC10">Actions</A>).  Furthermore, existing
+ <CODE>lex</CODE>
+ programs sometimes access
+ <CODE>yytext</CODE>
+ externally using declarations of the form:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     extern char yytext[];
+ </PRE>
+ 
+ <P>
+ This definition is erroneous when used with <CODE>%pointer</CODE>, but correct
+ for <CODE>%array</CODE>.
+ 
+ 
+ <P>
+ The <CODE>%array</CODE> declaration defines <CODE>yytext</CODE> to be an array of
+ <CODE>YYLMAX</CODE> characters, which defaults to a fairly large value.  You
+ can change the size by simply #define'ing <CODE>YYLMAX</CODE> to a different
+ value in the first section of your <CODE>flex</CODE> input.  As mentioned
+ above, with <CODE>%pointer</CODE> yytext grows dynamically to accommodate
+ large tokens.  While this means your <CODE>%pointer</CODE> scanner can
+ accommodate very large tokens (such as matching entire blocks of
+ comments), bear in mind that each time the scanner must resize
+ <CODE>yytext</CODE> it also must rescan the entire token from the beginning, so
+ matching such tokens can prove slow.  <CODE>yytext</CODE> presently does
+ <EM>not</EM> dynamically grow if a call to <CODE>unput()</CODE> results in too
+ much text being pushed back; instead, a run-time error results.
+ 
+ 
+ <P>
+ <A NAME="IDX68"></A>
+ Also note that you cannot use <CODE>%array</CODE> with C++ scanner classes
+ (see section <A HREF="flex.html#SEC21">Generating C++ Scanners</A>).
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC10" HREF="flex_toc.html#TOC10">Actions</A></H1>
+ <P>
+ <A NAME="IDX69"></A>
+ 
+ 
+ <P>
+ Each pattern in a rule has a corresponding action, which can be any
+ arbitrary C statement.  The pattern ends at the first non-escaped
+ whitespace character; the remainder of the line is its action.  If the
+ action is empty, then when the pattern is matched the input token
+ is simply discarded.  For example, here is the specification for a program
+ which deletes all occurrences of <SAMP>`zap me'</SAMP> from its input:
+ 
+ 
+ <P>
+ <A NAME="IDX70"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     "zap me"
+ </PRE>
+ 
+ <P>
+ (It will copy all other characters in the input to the output since
+ they will be matched by the default rule.)
+ 
+ 
+ <P>
+ Here is a program which compresses multiple blanks and tabs down to a
+ single blank, and throws away whitespace found at the end of a line:
+ 
+ 
+ <P>
+ <A NAME="IDX71"></A>
+ <A NAME="IDX72"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     [ \t]+        putchar( ' ' );
+     [ \t]+$       /* ignore this token */
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX73"></A>
+ <A NAME="IDX74"></A>
+ <A NAME="IDX75"></A>
+ <A NAME="IDX76"></A>
+ <A NAME="IDX77"></A>
+ 
+ 
+ <P>
+ If the action contains a <SAMP>`}'</SAMP>, then the action spans till the balancing <SAMP>`}'</SAMP>
+ is found, and the action may cross multiple lines.
+ <CODE>flex</CODE>
+ knows about C strings and comments and won't be fooled by braces found
+ within them, but also allows actions to begin with
+ <SAMP>`%{'</SAMP>
+ and will consider the action to be all the text up to the next
+ <SAMP>`%}'</SAMP>
+ (regardless of ordinary braces inside the action).
+ 
+ 
+ <P>
+ An action consisting solely of a vertical bar ('|') means "same as the
+ action for the next rule".  See below for an illustration.
+ 
+ 
+ <P>
+ Actions can include arbitrary C code, including <CODE>return</CODE> statements
+ to return a value to whatever routine called <CODE>yylex()</CODE>.  Each time
+ <CODE>yylex()</CODE> is called it continues processing tokens from where it
+ last left off until it either reaches the end of the file or executes a
+ return.
+ 
+ 
+ <P>
+ <A NAME="IDX78"></A>
+ Actions are free to modify <CODE>yytext</CODE> except for lengthening it
+ (adding characters to its end--these will overwrite later characters in
+ the input stream).  This however does not apply when using <CODE>%array</CODE>
+ (see section <A HREF="flex.html#SEC9">How the Input Is Matched</A>). In that case, <CODE>yytext</CODE> may be freely modified in
+ any way.
+ 
+ 
+ <P>
+ <A NAME="IDX79"></A>
+ <A NAME="IDX80"></A>
+ Actions are free to modify
+ <CODE>yyleng</CODE>
+ except they should not do so if the action also includes use of
+ <CODE>yymore()</CODE>
+ (see below).
+ 
+ 
+ <P>
+ <A NAME="IDX81"></A>
+ 
+ 
+ <P>
+ There are a number of special directives which can be included within
+ an action:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>ECHO</CODE>
+ <DD>
+ <A NAME="IDX82"></A>
+  
+ copies yytext to the scanner's output.
+ 
+ <A NAME="IDX83"></A>
+ <DT><CODE>BEGIN</CODE>
+ <DD>
+ followed by the name of a start condition places the scanner in the
+ corresponding start condition (see below).
+ 
+ <A NAME="IDX84"></A>
+ <DT><CODE>REJECT</CODE>
+ <DD>
+ directs the scanner to proceed on to the "second best" rule which
+ matched the input (or a prefix of the input).  The rule is chosen as
+ described above in section <A HREF="flex.html#SEC9">How the Input Is Matched</A>, and <CODE>yytext</CODE> and <CODE>yyleng</CODE> set
+ up appropriately.  It may either be one which matched as much text as
+ the originally chosen rule but came later in the <CODE>flex</CODE> input file,
+ or one which matched less text.  For example, the following will both
+ count the words in the input and call the routine <CODE>special()</CODE>
+ whenever <SAMP>`frob'</SAMP> is seen:
+ 
+ <A NAME="IDX85"></A>
+ <A NAME="IDX86"></A>
+ 
+ <PRE>
+ @verbatim
+             int word_count = 0;
+     %%
+ 
+     frob        special(); REJECT;
+     [^ \t\n]+   ++word_count;
+ </PRE>
+ 
+ Without the <CODE>REJECT</CODE>, any occurences of <SAMP>`frob'</SAMP> in the input
+ would not be counted as words, since the scanner normally executes only
+ one action per token.  Multiple uses of <CODE>REJECT</CODE> are allowed, each
+ one finding the next best choice to the currently active rule.  For
+ example, when the following scanner scans the token <SAMP>`abcd'</SAMP>, it will
+ write <SAMP>`abcdabcaba'</SAMP> to the output:
+ 
+ <A NAME="IDX87"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     a        |
+     ab       |
+     abc      |
+     abcd     ECHO; REJECT;
+     .|\n     /* eat up any unmatched character */
+ </PRE>
+ 
+ (The first three rules share the fourth's action since they use
+ the special '|' action.)
+ <CODE>REJECT</CODE>
+ is a particularly expensive feature in terms of scanner performance;
+ if it is used in
+ <EM>any</EM>
+ of the scanner's actions it will slow down
+ <EM>all</EM>
+ of the scanner's matching.  Furthermore,
+ <CODE>REJECT</CODE>
+ cannot be used with the
+ <SAMP>`-Cf'</SAMP>
+ or
+ <SAMP>`-CF'</SAMP>
+ options (see section <A HREF="flex.html#SEC18">Invoking Flex</A>).
+ 
+ Note also that unlike the other special actions, <CODE>REJECT</CODE> is a
+ <EM>branch</EM>.  code immediately following it in the action will
+ <EM>not</EM> be executed.
+ 
+ <A NAME="IDX88"></A>
+ <DT><CODE>yymore()</CODE>
+ <DD>
+ tells the scanner that the next time it matches a rule, the
+ corresponding token should be <EM>appended</EM> onto the current value of
+ <CODE>yytext</CODE> rather than replacing it.  For example, given the input
+ <SAMP>`mega-kludge'</SAMP> the following will write <SAMP>`mega-mega-kludge'</SAMP> to
+ the output:
+ 
+ <A NAME="IDX89"></A>
+ <A NAME="IDX90"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     mega-    ECHO; yymore();
+     kludge   ECHO;
+ </PRE>
+ 
+ First <SAMP>`mega-'</SAMP> is matched and echoed to the output.  Then <SAMP>`kludge'</SAMP>
+ is matched, but the previous <SAMP>`mega-'</SAMP> is still hanging around at the
+ beginning of
+ <CODE>yytext</CODE>
+ so the
+ <CODE>ECHO</CODE>
+ for the <SAMP>`kludge'</SAMP> rule will actually write <SAMP>`mega-kludge'</SAMP>.
+ </DL>
+ 
+ <P>
+ Two notes regarding use of <CODE>yymore()</CODE>.  First, <CODE>yymore()</CODE>
+ depends on the value of <CODE>yyleng</CODE> correctly reflecting the size of
+ the current token, so you must not modify <CODE>yyleng</CODE> if you are using
+ <CODE>yymore()</CODE>.  Second, the presence of <CODE>yymore()</CODE> in the
+ scanner's action entails a minor performance penalty in the scanner's
+ matching speed.
+ 
+ 
+ <P>
+ <A NAME="IDX91"></A>
+ <CODE>yyless(n)</CODE> returns all but the first <CODE>n</CODE> characters of the
+ current token back to the input stream, where they will be rescanned
+ when the scanner looks for the next match.  <CODE>yytext</CODE> and
+ <CODE>yyleng</CODE> are adjusted appropriately (e.g., <CODE>yyleng</CODE> will now be
+ equal to <CODE>n</CODE>).  For example, on the input <SAMP>`foobar'</SAMP> the
+ following will write out <SAMP>`foobarbar'</SAMP>:
+ 
+ 
+ <P>
+ <A NAME="IDX92"></A>
+ <A NAME="IDX93"></A>
+ <A NAME="IDX94"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     foobar    ECHO; yyless(3);
+     [a-z]+    ECHO;
+ </PRE>
+ 
+ <P>
+ An argument of 0 to
+ <CODE>yyless()</CODE>
+ will cause the entire current input string to be scanned again.  Unless you've
+ changed how the scanner will subsequently process its input (using
+ <CODE>BEGIN</CODE>,
+ for example), this will result in an endless loop.
+ 
+ 
+ <P>
+ Note that
+ <CODE>yyless()</CODE>
+ is a macro and can only be used in the flex input file, not from
+ other source files.
+ 
+ 
+ <P>
+ <A NAME="IDX95"></A>
+ <A NAME="IDX96"></A>
+ <CODE>unput(c)</CODE>
+ puts the character
+ <CODE>c</CODE>
+ back onto the input stream.  It will be the next character scanned.
+ The following action will take the current token and cause it
+ to be rescanned enclosed in parentheses.
+ 
+ 
+ <P>
+ <A NAME="IDX97"></A>
+ 
+ <PRE>
+ @verbatim
+     {
+     int i;
+     /* Copy yytext because unput() trashes yytext */
+     char *yycopy = strdup( yytext );
+     unput( ')' );
+     for ( i = yyleng - 1; i &#62;= 0; --i )
+         unput( yycopy[i] );
+     unput( '(' );
+     free( yycopy );
+     }
+ </PRE>
+ 
+ <P>
+ Note that since each <CODE>unput()</CODE> puts the given character back at the
+ <EM>beginning</EM> of the input stream, pushing back strings must be done
+ back-to-front.
+ 
+ 
+ <P>
+ <A NAME="IDX98"></A>
+ <A NAME="IDX99"></A>
+ 
+ 
+ <P>
+ An important potential problem when using
+ <CODE>unput()</CODE>
+ is that if you are using
+ <CODE>%pointer</CODE>
+ (the default), a call to
+ <CODE>unput()</CODE>
+ <EM>destroys</EM>
+ the contents of
+ <CODE>yytext</CODE>,
+ starting with its rightmost character and devouring one character to
+ the left with each call.  If you need the value of yytext preserved
+ after a call to
+ <CODE>unput()</CODE>
+ (as in the above example),
+ you must either first copy it elsewhere, or build your scanner using
+ <CODE>%array</CODE>
+ instead (see section <A HREF="flex.html#SEC9">How the Input Is Matched</A>).
+ 
+ 
+ <P>
+ <A NAME="IDX100"></A>
+ <A NAME="IDX101"></A>
+ Finally, note that you cannot put back <SAMP>`EOF'</SAMP> to attempt to mark the
+ input stream with an end-of-file.
+ 
+ 
+ <P>
+ <A NAME="IDX102"></A>
+ <CODE>input()</CODE> reads the next character from the input stream.  For
+ example, the following is one way to eat up C comments:
+ 
+ 
+ <P>
+ <A NAME="IDX103"></A>
+ <A NAME="IDX104"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     "/*"        {
+                 register int c;
+ 
+                 for ( ; ; )
+                     {
+                     while ( (c = input()) != '*' &#38;&#38;
+                             c != EOF )
+                         ;    /* eat up text of comment */
+ 
+                     if ( c == '*' )
+                         {
+                         while ( (c = input()) == '*' )
+                             ;
+                         if ( c == '/' )
+                             break;    /* found the end */
+                         }
+ 
+                     if ( c == EOF )
+                         {
+                         error( "EOF in comment" );
+                         break;
+                         }
+                     }
+                 }
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX105"></A>
+ (Note that if the scanner is compiled using <CODE>C++</CODE>, then
+ <CODE>input()</CODE> is instead referred to as <B>yyinput()</B>, in order to
+ avoid a name clash with the <CODE>C++</CODE> stream by the name of
+ <CODE>input</CODE>.)
+ 
+ 
+ <P>
+ <A NAME="IDX106"></A>
+ <CODE>YY_FLUSH_BUFFER()</CODE>
+ flushes the scanner's internal buffer
+ so that the next time the scanner attempts to match a token, it will
+ first refill the buffer using
+ <CODE>YY_INPUT()</CODE>
+ (see section <A HREF="flex.html#SEC11">The Generated Scanner</A>).  This action is a special case
+ of the more general
+ <CODE>yy_flush_buffer()</CODE>
+ function, described below (see section <A HREF="flex.html#SEC13">Multiple Input Buffers</A>)
+ 
+ 
+ <P>
+ <A NAME="IDX107"></A>
+ <A NAME="IDX108"></A>
+ <A NAME="IDX109"></A>
+ <A NAME="IDX110"></A>
+ <A NAME="IDX111"></A>
+ 
+ 
+ <P>
+ <CODE>yyterminate()</CODE>
+ can be used in lieu of a return statement in an action.  It terminates
+ the scanner and returns a 0 to the scanner's caller, indicating "all done".
+ By default,
+ <CODE>yyterminate()</CODE>
+ is also called when an end-of-file is encountered.  It is a macro and
+ may be redefined.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC11" HREF="flex_toc.html#TOC11">The Generated Scanner</A></H1>
+ 
+ <P>
+ <A NAME="IDX112"></A>
+ The output of <CODE>flex</CODE> is the file <TT>`lex.yy.c'</TT>, which contains
+ the scanning routine <CODE>yylex()</CODE>, a number of tables used by it for
+ matching tokens, and a number of auxiliary routines and macros.  By
+ default, <CODE>yylex()</CODE> is declared as follows:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     int yylex()
+         {
+         ... various definitions and the actions in here ...
+         }
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX113"></A>
+ (If your environment supports function prototypes, then it will
+ be
+  <CODE>int yylex( void )</CODE>.)  This definition may be changed by defining
+ the <CODE>YY_DECL</CODE> macro.  For example, you could use:
+ 
+ 
+ <P>
+ <A NAME="IDX114"></A>
+ 
+ <PRE>
+ @verbatim
+     #define YY_DECL float lexscan( a, b ) float a, b;
+ </PRE>
+ 
+ <P>
+ to give the scanning routine the name <CODE>lexscan</CODE>, returning a float,
+ and taking two floats as arguments.  Note that if you give arguments to
+ the scanning routine using a K&#38;R-style/non-prototyped function
+ declaration, you must terminate the definition with a semi-colon (;).
+ 
+ 
+ <P>
+ <A NAME="IDX115"></A>
+ Whenever <CODE>yylex()</CODE> is called, it scans tokens from the global input
+ file <TT>`yyin'</TT> (which defaults to stdin).  It continues until it
+ either reaches an end-of-file (at which point it returns the value 0) or
+ one of its actions executes a <CODE>return</CODE> statement.
+ 
+ 
+ <P>
+ <A NAME="IDX116"></A>
+ If the scanner reaches an end-of-file, subsequent calls are undefined
+ unless either <TT>`yyin'</TT> is pointed at a new input file (in which case
+ scanning continues from that file), or <CODE>yyrestart()</CODE> is called.
+ <CODE>yyrestart()</CODE> takes one argument, a <CODE>FILE *</CODE> pointer (which
+ can be nil, if you've set up <CODE>YY_INPUT</CODE> to scan from a source other
+ than <CODE>yyin</CODE>), and initializes <TT>`yyin'</TT> for scanning from that
+ file.  Essentially there is no difference between just assigning
+ <TT>`yyin'</TT> to a new input file or using <CODE>yyrestart()</CODE> to do so;
+ the latter is available for compatibility with previous versions of
+ <CODE>flex</CODE>, and because it can be used to switch input files in the
+ middle of scanning.  It can also be used to throw away the current input
+ buffer, by calling it with an argument of <TT>`yyin'</TT>; but it would be
+ better to use <CODE>YY_FLUSH_BUFFER</CODE> (see section <A HREF="flex.html#SEC10">Actions</A>).  Note that
+ <CODE>yyrestart()</CODE> does <EM>not</EM> reset the start condition to
+ <CODE>INITIAL</CODE> (see section <A HREF="flex.html#SEC12">Start Conditions</A>).
+ 
+ 
+ <P>
+ <A NAME="IDX117"></A>
+ If
+ <CODE>yylex()</CODE>
+ stops scanning due to executing a
+ <CODE>return</CODE>
+ statement in one of the actions, the scanner may then be called again and it
+ will resume scanning where it left off.
+ 
+ 
+ <P>
+ By default (and for purposes of efficiency), the scanner uses
+ block-reads rather than simple <CODE>getc()</CODE> calls to read characters
+ from <TT>`yyin'</TT>.  The nature of how it gets its input can be controlled
+ by defining the <CODE>YY_INPUT</CODE> macro.  The calling sequence for
+ <CODE>YY_INPUT()</CODE> is <CODE>YY_INPUT(buf,result,max_size)</CODE>.  Its action
+ is to place up to <CODE>max_size</CODE> characters in the character array
+ <CODE>buf</CODE> and return in the integer variable <CODE>result</CODE> either the
+ number of characters read or the constant <CODE>YY_NULL</CODE> (0 on Unix
+ systems) to indicate <SAMP>`EOF'</SAMP>.  The default <CODE>YY_INPUT</CODE> reads from
+ the global file-pointer <TT>`yyin'</TT>.
+ 
+ 
+ <P>
+ <A NAME="IDX118"></A>
+ Here is a sample definition of <CODE>YY_INPUT</CODE> (in the definitions
+ section of the input file):
+ 
+ 
+ <P>
+ <A NAME="IDX119"></A>
+ 
+ <PRE>
+ @verbatim
+     %{
+     #define YY_INPUT(buf,result,max_size) \
+         { \
+         int c = getchar(); \
+         result = (c == EOF) ? YY_NULL : (buf[0] = c, 1); \
+         }
+     %}
+ </PRE>
+ 
+ <P>
+ This definition will change the input processing to occur
+ one character at a time.
+ 
+ 
+ <P>
+ <A NAME="IDX120"></A>
+ When the scanner receives an end-of-file indication from YY_INPUT, it
+ then checks the <CODE>yywrap()</CODE> function.  If <CODE>yywrap()</CODE> returns
+ false (zero), then it is assumed that the function has gone ahead and
+ set up <TT>`yyin'</TT> to point to another input file, and scanning
+ continues.  If it returns true (non-zero), then the scanner terminates,
+ returning 0 to its caller.  Note that in either case, the start
+ condition remains unchanged; it does <EM>not</EM> revert to
+ <CODE>INITIAL</CODE>.
+ 
+ 
+ <P>
+ If you do not supply your own version of <CODE>yywrap()</CODE>, then you must
+ either use <CODE>%option noyywrap</CODE> (in which case the scanner behaves as
+ though <CODE>yywrap()</CODE> returned 1), or you must link with <SAMP>`-lfl'</SAMP> to
+ obtain the default version of the routine, which always returns 1.
+ 
+ 
+ <P>
+ For scanning from in-memory buffers (e.g., scanning strings), see
+ @xref{Scanning Strings}
+ See section <A HREF="flex.html#SEC13">Multiple Input Buffers</A>.
+ 
+ 
+ <P>
+ The scanner writes its
+ <CODE>ECHO</CODE>
+ output to the
+ <TT>`yyout'</TT>
+ global (default, <TT>`stdout'</TT>), which may be redefined by the user simply
+ by assigning it to some other
+ <CODE>FILE</CODE>
+ pointer.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC12" HREF="flex_toc.html#TOC12">Start Conditions</A></H1>
+ 
+ <P>
+ <A NAME="IDX121"></A>
+ <CODE>flex</CODE>
+ provides a mechanism for conditionally activating rules.  Any rule
+ whose pattern is prefixed with <SAMP>`&#60;sc&#62;'</SAMP> will only be active when
+ the scanner is in the start condition named <CODE>sc</CODE>.  For example,
+ 
+ 
+ <P>
+ <A NAME="IDX122"></A>
+ 
+ <PRE>
+ @verbatim
+     &#60;STRING&#62;[^"]*        { /* eat up the string body ... */
+                 ...
+                 }
+ </PRE>
+ 
+ <P>
+ will be active only when the scanner is in the <CODE>STRING</CODE> start
+ condition, and
+ 
+ 
+ <P>
+ <A NAME="IDX123"></A>
+ 
+ <PRE>
+ @verbatim
+     &#60;INITIAL,STRING,QUOTE&#62;\.        { /* handle an escape ... */
+                 ...
+                 }
+ </PRE>
+ 
+ <P>
+ will be active only when the current start condition is either
+ <CODE>INITIAL</CODE>, <CODE>STRING</CODE>, or <CODE>QUOTE</CODE>.
+ 
+ 
+ <P>
+ <A NAME="IDX124"></A>
+ Start conditions are declared in the definitions (first) section of the
+ input using unindented lines beginning with either <SAMP>`%s'</SAMP> or
+ <SAMP>`%x'</SAMP> followed by a list of names.  The former declares
+ <EM>inclusive</EM> start conditions, the latter <EM>exclusive</EM> start
+ conditions.  A start condition is activated using the <CODE>BEGIN</CODE>
+ action.  Until the next <CODE>BEGIN</CODE> action is executed, rules with the
+ given start condition will be active and rules with other start
+ conditions will be inactive.  If the start condition is inclusive, then
+ rules with no start conditions at all will also be active.  If it is
+ exclusive, then <EM>only</EM> rules qualified with the start condition
+ will be active.  A set of rules contingent on the same exclusive start
+ condition describe a scanner which is independent of any of the other
+ rules in the <CODE>flex</CODE> input.  Because of this, exclusive start
+ conditions make it easy to specify "mini-scanners" which scan portions
+ of the input that are syntactically different from the rest (e.g.,
+ comments).
+ 
+ 
+ <P>
+ If the distinction between inclusive and exclusive start conditions
+ is still a little vague, here's a simple example illustrating the
+ connection between the two.  The set of rules:
+ 
+ 
+ <P>
+ <A NAME="IDX125"></A>
+ 
+ <PRE>
+ @verbatim
+     %s example
+     %%
+ 
+     &#60;example&#62;foo   do_something();
+ 
+     bar            something_else();
+ </PRE>
+ 
+ <P>
+ is equivalent to
+ 
+ 
+ <P>
+ <A NAME="IDX126"></A>
+ 
+ <PRE>
+ @verbatim
+     %x example
+     %%
+ 
+     &#60;example&#62;foo   do_something();
+ 
+     &#60;INITIAL,example&#62;bar    something_else();
+ </PRE>
+ 
+ <P>
+ Without the <CODE>&#60;INITIAL,example&#62;</CODE> qualifier, the <CODE>bar</CODE> pattern in
+ the second example wouldn't be active (i.e., couldn't match) when in
+ start condition <CODE>example</CODE>.  If we just used <CODE>example&#62;</CODE> to
+ qualify <CODE>bar</CODE>, though, then it would only be active in
+ <CODE>example</CODE> and not in <CODE>INITIAL</CODE>, while in the first example
+ it's active in both, because in the first example the <CODE>example</CODE>
+ start condition is an inclusive <CODE>(%s)</CODE> start condition.
+ 
+ 
+ <P>
+ <A NAME="IDX127"></A>
+ Also note that the special start-condition specifier
+ <CODE>&#60;*&#62;</CODE>
+ matches every start condition.  Thus, the above example could also
+ have been written:
+ 
+ 
+ <P>
+ <A NAME="IDX128"></A>
+ 
+ <PRE>
+ @verbatim
+     %x example
+     %%
+ 
+     &#60;example&#62;foo   do_something();
+ 
+     &#60;*&#62;bar    something_else();
+ </PRE>
+ 
+ <P>
+ The default rule (to <CODE>ECHO</CODE> any unmatched character) remains active
+ in start conditions.  It is equivalent to:
+ 
+ 
+ <P>
+ <A NAME="IDX129"></A>
+ 
+ <PRE>
+ @verbatim
+     &#60;*&#62;.|\n     ECHO;
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX130"></A>
+ <A NAME="IDX131"></A>
+ <A NAME="IDX132"></A>
+ <CODE>BEGIN(0)</CODE> returns to the original state where only the rules with
+ no start conditions are active.  This state can also be referred to as
+ the start-condition <CODE>INITIAL</CODE>, so <CODE>BEGIN(INITIAL)</CODE> is
+ equivalent to <CODE>BEGIN(0)</CODE>.  (The parentheses around the start
+ condition name are not required but are considered good style.)
+ 
+ 
+ <P>
+ <CODE>BEGIN</CODE> actions can also be given as indented code at the beginning
+ of the rules section.  For example, the following will cause the scanner
+ to enter the <CODE>SPECIAL</CODE> start condition whenever <CODE>yylex()</CODE> is
+ called and the global variable <CODE>enter_special</CODE> is true:
+ 
+ 
+ <P>
+ <A NAME="IDX133"></A>
+ 
+ <PRE>
+ @verbatim
+             int enter_special;
+ 
+     %x SPECIAL
+     %%
+             if ( enter_special )
+                 BEGIN(SPECIAL);
+ 
+     &#60;SPECIAL&#62;blahblahblah
+     ...more rules follow...
+ </PRE>
+ 
+ <P>
+ To illustrate the uses of start conditions, here is a scanner which
+ provides two different interpretations of a string like <SAMP>`123.456'</SAMP>.
+ By default it will treat it as three tokens, the integer <SAMP>`123'</SAMP>, a
+ dot (<SAMP>`.'</SAMP>), and the integer <SAMP>`456'</SAMP>.  But if the string is
+ preceded earlier in the line by the string <SAMP>`expect-floats'</SAMP> it will
+ treat it as a single token, the floating-point number <SAMP>`123.456'</SAMP>:
+ 
+ 
+ <P>
+ <A NAME="IDX134"></A>
+ 
+ <PRE>
+ @verbatim
+     %{
+     #include &#60;math.h&#62;
+     %}
+     %s expect
+ 
+     %%
+     expect-floats        BEGIN(expect);
+ 
+     &#60;expect&#62;[0-9]+<SAMP>`.'</SAMP>[0-9]+      {
+                 printf( "found a float, = %f\n",
+                         atof( yytext ) );
+                 }
+     &#60;expect&#62;\n           {
+                 /* that's the end of the line, so
+                  * we need another "expect-number"
+                  * before we'll recognize any more
+                  * numbers
+                  */
+                 BEGIN(INITIAL);
+                 }
+ 
+     [0-9]+      {
+                 printf( "found an integer, = %d\n",
+                         atoi( yytext ) );
+                 }
+ 
+     "."         printf( "found a dot\n" );
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX135"></A>
+ Here is a scanner which recognizes (and discards) C comments while
+ maintaining a count of the current input line.
+ 
+ 
+ <P>
+ <A NAME="IDX136"></A>
+ 
+ <PRE>
+ @verbatim
+     %x comment
+     %%
+             int line_num = 1;
+ 
+     "/*"         BEGIN(comment);
+ 
+     &#60;comment&#62;[^*\n]*        /* eat anything that's not a '*' */
+     &#60;comment&#62;"*"+[^*/\n]*   /* eat up '*'s not followed by '/'s */
+     &#60;comment&#62;\n             ++line_num;
+     &#60;comment&#62;"*"+"/"        BEGIN(INITIAL);
+ </PRE>
+ 
+ <P>
+ This scanner goes to a bit of trouble to match as much
+ text as possible with each rule.  In general, when attempting to write
+ a high-speed scanner try to match as much possible in each rule, as
+ it's a big win.
+ 
+ 
+ <P>
+ Note that start-conditions names are really integer values and
+ can be stored as such.  Thus, the above could be extended in the
+ following fashion:
+ 
+ 
+ <P>
+ <A NAME="IDX137"></A>
+ <A NAME="IDX138"></A>
+ 
+ <PRE>
+ @verbatim
+     %x comment foo
+     %%
+             int line_num = 1;
+             int comment_caller;
+ 
+     "/*"         {
+                  comment_caller = INITIAL;
+                  BEGIN(comment);
+                  }
+ 
+     ...
+ 
+     &#60;foo&#62;"/*"    {
+                  comment_caller = foo;
+                  BEGIN(comment);
+                  }
+ 
+     &#60;comment&#62;[^*\n]*        /* eat anything that's not a '*' */
+     &#60;comment&#62;"*"+[^*/\n]*   /* eat up '*'s not followed by '/'s */
+     &#60;comment&#62;\n             ++line_num;
+     &#60;comment&#62;"*"+"/"        BEGIN(comment_caller);
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX139"></A>
+ Furthermore, you can access the current start condition using the
+ integer-valued <CODE>YY_START</CODE> macro.  For example, the above
+ assignments to <CODE>comment_caller</CODE> could instead be written
+ 
+ 
+ <P>
+ <A NAME="IDX140"></A>
+ 
+ <PRE>
+ @verbatim
+     comment_caller = YY_START;
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX141"></A>
+ Flex provides <CODE>YYSTATE</CODE> as an alias for <CODE>YY_START</CODE> (since that
+ is what's used by AT&#38;T <CODE>lex</CODE>).
+ 
+ 
+ <P>
+ Note that start conditions do not have their own name-space; %s's and %x's
+ declare names in the same fashion as #define's.
+ 
+ 
+ <P>
+ Finally, here's an example of how to match C-style quoted strings using
+ exclusive start conditions, including expanded escape sequences (but
+ not including checking for a string that's too long):
+ 
+ 
+ <P>
+ <A NAME="IDX142"></A>
+ 
+ <PRE>
+ @verbatim
+     %x str
+ 
+     %%
+             char string_buf[MAX_STR_CONST];
+             char *string_buf_ptr;
+ 
+     \"      string_buf_ptr = string_buf; BEGIN(str);
+ 
+     &#60;str&#62;\"        { /* saw closing quote - all done */
+             BEGIN(INITIAL);
+             *string_buf_ptr = '\0';
+             /* return string constant token type and
+              * value to parser
+              */
+             }
+ 
+     &#60;str&#62;\n        {
+             /* error - unterminated string constant */
+             /* generate error message */
+             }
+ 
+     &#60;str&#62;\\[0-7]{1,3} {
+             /* octal escape sequence */
+             int result;
+ 
+             (void) sscanf( yytext + 1, "%o", &#38;result );
+ 
+             if ( result &#62; 0xff )
+                     /* error, constant is out-of-bounds */
+ 
+             *string_buf_ptr++ = result;
+             }
+ 
+     &#60;str&#62;\\[0-9]+ {
+             /* generate error - bad escape sequence; something
+              * like '\48' or '\0777777'
+              */
+             }
+ 
+     &#60;str&#62;\\n  *string_buf_ptr++ = '\n';
+     &#60;str&#62;\\t  *string_buf_ptr++ = '\t';
+     &#60;str&#62;\\r  *string_buf_ptr++ = '\r';
+     &#60;str&#62;\\b  *string_buf_ptr++ = '\b';
+     &#60;str&#62;\\f  *string_buf_ptr++ = '\f';
+ 
+     &#60;str&#62;\\(.|\n)  *string_buf_ptr++ = yytext[1];
+ 
+     &#60;str&#62;[^\\\n\"]+        {
+             char *yptr = yytext;
+ 
+             while ( *yptr )
+                     *string_buf_ptr++ = *yptr++;
+             }
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX143"></A>
+ Often, such as in some of the examples above, you wind up writing a
+ whole bunch of rules all preceded by the same start condition(s).  Flex
+ makes this a little easier and cleaner by introducing a notion of start
+ condition <EM>scope</EM>.  A start condition scope is begun with:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     &#60;SCs&#62;{
+ </PRE>
+ 
+ <P>
+ where <CODE>SCs</CODE> is a list of one or more start conditions.  Inside the
+ start condition scope, every rule automatically has the prefix
+ <CODE>SCs&#62;</CODE> applied to it, until a <SAMP>`}'</SAMP> which matches the initial
+ <SAMP>`{'</SAMP>.  So, for example,
+ 
+ 
+ <P>
+ <A NAME="IDX144"></A>
+ 
+ <PRE>
+ @verbatim
+     &#60;ESC&#62;{
+         "\\n"   return '\n';
+         "\\r"   return '\r';
+         "\\f"   return '\f';
+         "\\0"   return '\0';
+     }
+ </PRE>
+ 
+ <P>
+ is equivalent to:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     &#60;ESC&#62;"\\n"  return '\n';
+     &#60;ESC&#62;"\\r"  return '\r';
+     &#60;ESC&#62;"\\f"  return '\f';
+     &#60;ESC&#62;"\\0"  return '\0';
+ </PRE>
+ 
+ <P>
+ Start condition scopes may be nested.
+ 
+ 
+ <P>
+ <A NAME="IDX145"></A>
+ <A NAME="IDX146"></A>
+ 
+ 
+ <P>
+ The following routines are available for manipulating stacks of start conditions:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> void <B>yy_push_state</B> <I>( int <CODE>new_state</CODE> )</I>
+ <DD><A NAME="IDX147"></A>
+ pushes the current start condition onto the top of the start condition
+ stack and switches to
+ <CODE>new_state</CODE>
+ as though you had used
+ <CODE>BEGIN new_state</CODE>
+ (recall that start condition names are also integers).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> void <B>yy_pop_state</B> <I>()</I>
+ <DD><A NAME="IDX148"></A>
+ pops the top of the stack and switches to it via
+ <CODE>BEGIN</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>yy_top_state</B> <I>()</I>
+ <DD><A NAME="IDX149"></A>
+ returns the top of the stack without altering the stack's contents.
+ </DL>
+ 
+ 
+ <P>
+ <A NAME="IDX150"></A>
+ The start condition stack grows dynamically and so has no built-in size
+ limitation.  If memory is exhausted, program execution aborts.
+ 
+ 
+ <P>
+ To use start condition stacks, your scanner must include a <CODE>%option
+ stack</CODE> directive (see section <A HREF="flex.html#SEC18">Invoking Flex</A>).
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC13" HREF="flex_toc.html#TOC13">Multiple Input Buffers</A></H1>
+ 
+ <P>
+ <A NAME="IDX151"></A>
+ Some scanners (such as those which support "include" files) require
+ reading from several input streams.  As <CODE>flex</CODE> scanners do a large
+ amount of buffering, one cannot control where the next input will be
+ read from by simply writing a <CODE>YY_INPUT()</CODE> which is sensitive to
+ the scanning context.  <CODE>YY_INPUT()</CODE> is only called when the scanner
+ reaches the end of its buffer, which may be a long time after scanning a
+ statement such as an <CODE>include</CODE> statement which requires switching
+ the input source.
+ 
+ 
+ <P>
+ To negotiate these sorts of problems, <CODE>flex</CODE> provides a mechanism
+ for creating and switching between multiple input buffers.  An input
+ buffer is created by using:
+ 
+ 
+ <P>
+ <A NAME="IDX152"></A>
+ <DL>
+ <DT><U>Function:</U> YY_BUFFER_STATE <B>yy_create_buffer</B> <I>( FILE *file, int size )</I>
+ <DD><A NAME="IDX153"></A>
+ </DL>
+ 
+ 
+ <P>
+ which takes a <CODE>FILE</CODE> pointer and a size and creates a buffer
+ associated with the given file and large enough to hold <CODE>size</CODE>
+ characters (when in doubt, use <CODE>YY_BUF_SIZE</CODE> for the size).  It
+ returns a <CODE>YY_BUFFER_STATE</CODE> handle, which may then be passed to
+ other routines (see below).  
+ <A NAME="IDX154"></A>
+ The <CODE>YY_BUFFER_STATE</CODE> type is a
+ pointer to an opaque <CODE>struct yy_buffer_state</CODE> structure, so you may
+ safely initialize <CODE>YY_BUFFER_STATE</CODE> variables to <CODE>((YY_BUFFER_STATE)
+ 0)</CODE> if you wish, and also refer to the opaque structure in order to
+ correctly declare input buffers in source files other than that of your
+ scanner.  Note that the <CODE>FILE</CODE> pointer in the call to
+ <CODE>yy_create_buffer</CODE> is only used as the value of <TT>`yyin'</TT> seen by
+ <CODE>YY_INPUT</CODE>.  If you redefine <CODE>YY_INPUT()</CODE> so it no longer uses
+ <TT>`yyin'</TT>, then you can safely pass a nil <CODE>FILE</CODE> pointer to
+ <CODE>yy_create_buffer</CODE>.  You select a particular buffer to scan from
+ using:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> void <B>yy_switch_to_buffer</B> <I>( YY_BUFFER_STATE new_buffer )</I>
+ <DD><A NAME="IDX155"></A>
+ </DL>
+ 
+ 
+ <P>
+ The above switches the scanner's input buffer so subsequent tokens will
+ come from <CODE>new_buffer</CODE>.  Note that <CODE>yy_switch_to_buffer()</CODE> may
+ be used by <CODE>yywrap()</CODE> to set things up for continued scanning,
+ instead of opening a new file and pointing <TT>`yyin'</TT> at it.  Note also
+ that switching input sources via either <CODE>yy_switch_to_buffer()</CODE> or
+ <CODE>yywrap()</CODE> does <EM>not</EM> change the start condition.
+ 
+ 
+ <P>
+ <A NAME="IDX156"></A>
+ <DL>
+ <DT><U>Function:</U> void <B>yy_delete_buffer</B> <I>( YY_BUFFER_STATE buffer )</I>
+ <DD><A NAME="IDX157"></A>
+ </DL>
+ 
+ 
+ <P>
+ is used to reclaim the storage associated with a buffer.  (<CODE>buffer</CODE>
+ can be nil, in which case the routine does nothing.)  You can also clear
+ the current contents of a buffer using:
+ 
+ 
+ <P>
+ <A NAME="IDX158"></A>
+ <A NAME="IDX159"></A>
+ <DL>
+ <DT><U>Function:</U> void <B>yy_flush_buffer</B> <I>( YY_BUFFER_STATE buffer )</I>
+ <DD><A NAME="IDX160"></A>
+ </DL>
+ 
+ 
+ <P>
+ This function discards the buffer's contents,
+ so the next time the scanner attempts to match a token from the
+ buffer, it will first fill the buffer anew using
+ <CODE>YY_INPUT()</CODE>.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> YY_BUFFER_STATE <B>yy_new_buffer</B> <I>( FILE *file, int size )</I>
+ <DD><A NAME="IDX161"></A>
+ </DL>
+ 
+ 
+ <P>
+ is an alias for <CODE>yy_create_buffer()</CODE>,
+ provided for compatibility with the C++ use of <CODE>new</CODE> and
+ <CODE>delete</CODE> for creating and destroying dynamic objects.
+ 
+ 
+ <P>
+ <A NAME="IDX162"></A>
+ Finally, the macro <CODE>YY_CURRENT_BUFFER</CODE> macro returns a
+ <CODE>YY_BUFFER_STATE</CODE> handle to the current buffer.
+ 
+ 
+ <P>
+ <A NAME="IDX163"></A>
+ Here is an example of using these features for writing a scanner
+ which expands include files (the
+ <CODE>&#60;&#60;EOF&#62;&#62;</CODE>
+ feature is discussed below):
+ 
+ 
+ <P>
+ <A NAME="IDX164"></A>
+ 
+ <PRE>
+ @verbatim
+     /* the "incl" state is used for picking up the name
+      * of an include file
+      */
+     %x incl
+ 
+     %{
+     #define MAX_INCLUDE_DEPTH 10
+     YY_BUFFER_STATE include_stack[MAX_INCLUDE_DEPTH];
+     int include_stack_ptr = 0;
+     %}
+ 
+     %%
+     include             BEGIN(incl);
+ 
+     [a-z]+              ECHO;
+     [^a-z\n]*\n?        ECHO;
+ 
+     &#60;incl&#62;[ \t]*      /* eat the whitespace */
+     &#60;incl&#62;[^ \t\n]+   { /* got the include file name */
+             if ( include_stack_ptr &#62;= MAX_INCLUDE_DEPTH )
+                 {
+                 fprintf( stderr, "Includes nested too deeply" );
+                 exit( 1 );
+                 }
+ 
+             include_stack[include_stack_ptr++] =
+                 YY_CURRENT_BUFFER;
+ 
+             yyin = fopen( yytext, "r" );
+ 
+             if ( ! yyin )
+                 error( ... );
+ 
+             yy_switch_to_buffer(
+                 yy_create_buffer( yyin, YY_BUF_SIZE ) );
+ 
+             BEGIN(INITIAL);
+             }
+ 
+     &#60;&#60;EOF&#62;&#62; {
+             if ( --include_stack_ptr  0 )
+                 {
+                 yyterminate();
+                 }
+ 
+             else
+                 {
+                 yy_delete_buffer( YY_CURRENT_BUFFER );
+                 yy_switch_to_buffer(
+                      include_stack[include_stack_ptr] );
+                 }
+             }
+ </PRE>
+ 
+ <P>
+ @anchor{Scanning Strings}
+ <A NAME="IDX165"></A>
+ The following routines are available for setting up input buffers for
+ scanning in-memory strings instead of files.  All of them create a new
+ input buffer for scanning the string, and return a corresponding
+ <CODE>YY_BUFFER_STATE</CODE> handle (which you should delete with
+ <CODE>yy_delete_buffer()</CODE> when done with it).  They also switch to the
+ new buffer using <CODE>yy_switch_to_buffer()</CODE>, so the next call to
+ <CODE>yylex()</CODE> will start scanning the string.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> YY_BUFFER_STATE <B>yy_scan_string</B> <I>( const char *str )</I>
+ <DD><A NAME="IDX166"></A>
+ scans a NUL-terminated string.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> YY_BUFFER_STATE <B>yy_scan_bytes</B> <I>( const char *bytes, int len )</I>
+ <DD><A NAME="IDX167"></A>
+ scans <CODE>len</CODE> bytes (including possibly <CODE>NUL</CODE>s) starting at location
+ <CODE>bytes</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ Note that both of these functions create and scan a <EM>copy</EM> of the
+ string or bytes.  (This may be desirable, since <CODE>yylex()</CODE> modifies
+ the contents of the buffer it is scanning.)  You can avoid the copy by
+ using:
+ 
+ 
+ <P>
+ <A NAME="IDX168"></A>
+ <DL>
+ <DT><U>Function:</U> YY_BUFFER_STATE <B>yy_scan_buffer</B> <I>(char *base, yy_size_t size)</I>
+ <DD><A NAME="IDX169"></A>
+ which scans in place the buffer starting at <CODE>base</CODE>, consisting of
+ <CODE>size</CODE> bytes, the last two bytes of which <EM>must</EM> be
+ <CODE>YY_END_OF_BUFFER_CHAR</CODE> (ASCII NUL).  These last two bytes are not
+ scanned; thus, scanning consists of <CODE>base[0]</CODE> through
+ <CODE>base[size-2]</CODE>, inclusive.
+ </DL>
+ 
+ 
+ <P>
+ If you fail to set up <CODE>base</CODE> in this manner (i.e., forget the final
+ two <CODE>YY_END_OF_BUFFER_CHAR</CODE> bytes), then <CODE>yy_scan_buffer()</CODE>
+ returns a nil pointer instead of creating a new input buffer.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Data type:</U> <B>yy_size_t</B>
+ <DD><A NAME="IDX170"></A>
+ is an integral type to which you can cast an integer expression
+ reflecting the size of the buffer.
+ </DL>
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC14" HREF="flex_toc.html#TOC14">End-of-File Rules</A></H1>
+ 
+ <P>
+ <A NAME="IDX171"></A>
+ The special rule <CODE>&#60;&#60;EOF&#62;&#62;</CODE> indicates
+ actions which are to be taken when an end-of-file is
+ encountered and <CODE>yywrap()</CODE> returns non-zero (i.e., indicates
+ no further files to process).  The action must finish
+ by doing one of the following things:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ <A NAME="IDX172"></A>
+ assigning <TT>`yyin'</TT> to a new input file (in previous versions of
+ <CODE>flex</CODE>, after doing the assignment you had to call the special
+ action <CODE>YY_NEW_FILE</CODE>.  This is no longer necessary.)
+ 
+ <LI>
+ 
+ executing a <CODE>return</CODE> statement;
+ 
+ <LI>
+ 
+ executing the special <CODE>yyterminate()</CODE> action.
+ 
+ <LI>
+ 
+ or, switching to a new buffer using <CODE>yy_switch_to_buffer()</CODE> as
+ shown in the example above.
+ </UL>
+ 
+ <P>
+ &#60;&#60;EOF&#62;&#62; rules may not be used with other patterns; they may only be
+ qualified with a list of start conditions.  If an unqualified &#60;&#60;EOF&#62;&#62;
+ rule is given, it applies to <EM>all</EM> start conditions which do not
+ already have &#60;&#60;EOF&#62;&#62; actions.  To specify an &#60;&#60;EOF&#62;&#62; rule for only the
+ initial start condition, use:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     &#60;INITIAL&#62;&#60;&#60;EOF&#62;&#62;
+ </PRE>
+ 
+ <P>
+ These rules are useful for catching things like unclosed comments.  An
+ example:
+ 
+ 
+ <P>
+ <A NAME="IDX173"></A>
+ 
+ <PRE>
+ @verbatim
+     %x quote
+     %%
+ 
+     ...other rules for dealing with quotes...
+ 
+     &#60;quote&#62;&#60;&#60;EOF&#62;&#62;   {
+              error( "unterminated quote" );
+              yyterminate();
+              }
+    &#60;&#60;EOF&#62;&#62;  {
+              if ( *++filelist )
+                  yyin = fopen( *filelist, "r" );
+              else
+                 yyterminate();
+              }
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC15" HREF="flex_toc.html#TOC15">Miscellaneous Macros</A></H1>
+ 
+ <P>
+ <A NAME="IDX174"></A>
+ The macro <CODE>YY_USER_ACTION</CODE> can be defined to provide an action
+ which is always executed prior to the matched rule's action.  For
+ example, it could be #define'd to call a routine to convert yytext to
+ lower-case.  When <CODE>YY_USER_ACTION</CODE> is invoked, the variable
+ <CODE>yy_act</CODE> gives the number of the matched rule (rules are numbered
+ starting with 1).  Suppose you want to profile how often each of your
+ rules is matched.  The following would do the trick:
+ 
+ 
+ <P>
+ <A NAME="IDX175"></A>
+ 
+ <PRE>
+ @verbatim
+     #define YY_USER_ACTION ++ctr[yy_act]
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX176"></A>
+ where <CODE>ctr</CODE> is an array to hold the counts for the different rules.
+ Note that the macro <CODE>YY_NUM_RULES</CODE> gives the total number of rules
+ (including the default rule), even if you use <SAMP>`-s)'</SAMP>, so a correct
+ declaration for <CODE>ctr</CODE> is:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     int ctr[YY_NUM_RULES];
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX177"></A>
+ The macro <CODE>YY_USER_INIT</CODE> may be defined to provide an action which
+ is always executed before the first scan (and before the scanner's
+ internal initializations are done).  For example, it could be used to
+ call a routine to read in a data table or open a logging file.
+ 
+ 
+ <P>
+ <A NAME="IDX178"></A>
+ The macro <CODE>yy_set_interactive(is_interactive)</CODE> can be used to
+ control whether the current buffer is considered <EM>interactive</EM>.  An
+ interactive buffer is processed more slowly, but must be used when the
+ scanner's input source is indeed interactive to avoid problems due to
+ waiting to fill buffers (see the discussion of the <SAMP>`-I'</SAMP> flag in
+ section <A HREF="flex.html#SEC18">Invoking Flex</A>).  A non-zero value in the macro invocation marks
+ the buffer as interactive, a zero value as non-interactive.  Note that
+ use of this macro overrides <CODE>%option always-interactive</CODE> or
+ <CODE>%option never-interactive</CODE> (see section <A HREF="flex.html#SEC18">Invoking Flex</A>).
+ <CODE>yy_set_interactive()</CODE> must be invoked prior to beginning to scan
+ the buffer that is (or is not) to be considered interactive.
+ 
+ 
+ <P>
+ <A NAME="IDX179"></A>
+ <A NAME="IDX180"></A>
+ The macro <CODE>yy_set_bol(at_bol)</CODE> can be used to control whether the
+ current buffer's scanning context for the next token match is done as
+ though at the beginning of a line.  A non-zero macro argument makes
+ rules anchored with <SAMP>`^'</SAMP> active, while a zero argument makes
+ <SAMP>`^'</SAMP> rules inactive.
+ 
+ 
+ <P>
+ <A NAME="IDX181"></A>
+ <A NAME="IDX182"></A>
+ The macro <CODE>YY_AT_BOL()</CODE> returns true if the next token scanned from
+ the current buffer will have <SAMP>`^'</SAMP> rules active, false otherwise.
+ 
+ 
+ <P>
+ <A NAME="IDX183"></A>
+ <A NAME="IDX184"></A>
+ In the generated scanner, the actions are all gathered in one large
+ switch statement and separated using <CODE>YY_BREAK</CODE>, which may be
+ redefined.  By default, it is simply a <CODE>break</CODE>, to separate each
+ rule's action from the following rule's.  Redefining <CODE>YY_BREAK</CODE>
+ allows, for example, C++ users to #define YY_BREAK to do nothing (while
+ being very careful that every rule ends with a <CODE>break</CODE>" or a
+ <CODE>return</CODE>!) to avoid suffering from unreachable statement warnings
+ where because a rule's action ends with <CODE>return</CODE>, the
+ <CODE>YY_BREAK</CODE> is inaccessible.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC16" HREF="flex_toc.html#TOC16">Values Available To the User</A></H1>
+ 
+ <P>
+ This chapter summarizes the various values available to the user in the
+ rule actions.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>char *yytext</CODE>
+ <DD>
+ <A NAME="IDX185"></A>
+  
+ holds the text of the current token.  It may be modified but not
+ lengthened (you cannot append characters to the end).
+ 
+ <A NAME="IDX186"></A>
+ <A NAME="IDX187"></A>
+ <A NAME="IDX188"></A>
+ If the special directive <CODE>%array</CODE> appears in the first section of
+ the scanner description, then <CODE>yytext</CODE> is instead declared
+ <CODE>char yytext[YYLMAX]</CODE>, where <CODE>YYLMAX</CODE> is a macro definition
+ that you can redefine in the first section if you don't like the default
+ value (generally 8KB).  Using <CODE>%array</CODE> results in somewhat slower
+ scanners, but the value of <CODE>yytext</CODE> becomes immune to calls to
+ <CODE>unput()</CODE>, which potentially destroy its value when <CODE>yytext</CODE> is
+ a character pointer.  The opposite of <CODE>%array</CODE> is <CODE>%pointer</CODE>,
+ which is the default.
+ 
+ <A NAME="IDX189"></A>
+ You cannot use <CODE>%array</CODE> when generating C++ scanner classes (the
+ <SAMP>`-+'</SAMP> flag).
+ 
+ <A NAME="IDX190"></A>
+ <DT><CODE>int yyleng</CODE>
+ <DD>
+ holds the length of the current token.
+ 
+ <A NAME="IDX191"></A>
+ <DT><CODE>FILE *yyin</CODE>
+ <DD>
+ is the file which by default <CODE>flex</CODE> reads from.  It may be
+ redefined but doing so only makes sense before scanning begins or after
+ an EOF has been encountered.  Changing it in the midst of scanning will
+ have unexpected results since <CODE>flex</CODE> buffers its input; use
+ <CODE>yyrestart()</CODE> instead.  Once scanning terminates because an
+ end-of-file has been seen, you can assign <TT>`yyin'</TT> at the new input
+ file and then call the scanner again to continue scanning.
+ 
+ <A NAME="IDX192"></A>
+ <DT><CODE>void yyrestart( FILE *new_file )</CODE>
+ <DD>
+ may be called to point <TT>`yyin'</TT> at the new input file.  The
+ switch-over to the new file is immediate (any previously buffered-up
+ input is lost).  Note that calling <CODE>yyrestart()</CODE> with <TT>`yyin'</TT>
+ as an argument thus throws away the current input buffer and continues
+ scanning the same input file.
+ 
+ <A NAME="IDX193"></A>
+ <DT><CODE>FILE *yyout</CODE>
+ <DD>
+ is the file to which <CODE>ECHO</CODE> actions are done.  It can be reassigned
+ by the user.
+ 
+ <A NAME="IDX194"></A>
+ <DT><CODE>YY_CURRENT_BUFFER</CODE>
+ <DD>
+ returns a <CODE>YY_BUFFER_STATE</CODE> handle to the current buffer.
+ 
+ <A NAME="IDX195"></A>
+ <DT><CODE>YY_START</CODE>
+ <DD>
+ returns an integer value corresponding to the current start condition.
+ You can subsequently use this value with <CODE>BEGIN</CODE> to return to that
+ start condition.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC17" HREF="flex_toc.html#TOC17">Interfacing with Yacc</A></H1>
+ 
+ <P>
+ <A NAME="IDX196"></A>
+ 
+ 
+ <P>
+ <A NAME="IDX197"></A>
+ One of the main uses of <CODE>flex</CODE> is as a companion to the <CODE>yacc</CODE>
+ parser-generator.  <CODE>yacc</CODE> parsers expect to call a routine named
+ <CODE>yylex()</CODE> to find the next input token.  The routine is supposed to
+ return the type of the next token as well as putting any associated
+ value in the global <CODE>yylval</CODE>.  To use <CODE>flex</CODE> with <CODE>yacc</CODE>,
+ one specifies the <SAMP>`-d'</SAMP> option to <CODE>yacc</CODE> to instruct it to
+ generate the file <TT>`y.tab.h'</TT> containing definitions of all the
+ <CODE>%tokens</CODE> appearing in the <CODE>yacc</CODE> input.  This file is then
+ included in the <CODE>flex</CODE> scanner.  For example, if one of the tokens
+ is <CODE>TOK_NUMBER</CODE>, part of the scanner might look like:
+ 
+ 
+ <P>
+ <A NAME="IDX198"></A>
+ 
+ <PRE>
+ @verbatim
+     %{
+     #include "y.tab.h"
+     %}
+ 
+     %%
+ 
+     [0-9]+        yylval = atoi( yytext ); return TOK_NUMBER;
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC18" HREF="flex_toc.html#TOC18">Invoking Flex</A></H1>
+ 
+ <P>
+ <A NAME="IDX199"></A>
+ <A NAME="IDX200"></A>
+ <A NAME="IDX201"></A>
+ 
+ 
+ <P>
+ <CODE>flex</CODE>
+ has the following options.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`-b, --backup'</SAMP>
+ <DD>
+ Generate backing-up information to <TT>`lex.backup'</TT>.  This is a list of
+ scanner states which require backing up and the input characters on
+ which they do so.  By adding rules one can remove backing-up states.  If
+ <EM>all</EM> backing-up states are eliminated and <SAMP>`-Cf'</SAMP> or <CODE>-CF</CODE>
+ is used, the generated scanner will run faster (see the <SAMP>`--perf-report'</SAMP> flag).
+ Only users who wish to squeeze every last cycle out of their scanners
+ need worry about this option.  (see section <A HREF="flex.html#SEC20">Performance Considerations</A>).
+ 
+ <DT><SAMP>`-c'</SAMP>
+ <DD>
+ is a do-nothing option included for POSIX compliance.
+ 
+ <DT><SAMP>`-d, --debug'</SAMP>
+ <DD>
+ makes the generated scanner run in <EM>debug</EM> mode.  Whenever a pattern
+ is recognized and the global variable <CODE>yy_flex_debug</CODE> is non-zero
+ (which is the default), the scanner will write to <TT>`stderr'</TT> a line
+ of the form:
+ 
+ 
+ <PRE>
+ @verbatim
+     -accepting rule at line 53 ("the matched text")
+ </PRE>
+ 
+ The line number refers to the location of the rule in the file defining
+ the scanner (i.e., the file that was fed to flex).  Messages are also
+ generated when the scanner backs up, accepts the default rule, reaches
+ the end of its input buffer (or encounters a NUL; at this point, the two
+ look the same as far as the scanner's concerned), or reaches an
+ end-of-file.
+ 
+ <DT><SAMP>`-f, --full'</SAMP>
+ <DD>
+ specifies
+ <EM>fast scanner</EM>.
+ No table compression is done and <CODE>stdio</CODE> is bypassed.
+ The result is large but fast.  This option is equivalent to
+ <SAMP>`--Cfr'</SAMP>
+ 
+ <DT><SAMP>`-h, -?, --help'</SAMP>
+ <DD>
+ generates a "help" summary of <CODE>flex</CODE>'s options to <TT>`stdout'</TT>
+ and then exits.
+ 
+ <DT><SAMP>`--header=FILE'</SAMP>
+ <DD>
+ instructs flex to write a C header to <TT>`FILE'</TT>. This file contains
+ function prototypes, extern variables, and macros used by the scanner.
+ It is meant to be included in other C files to avoid compiler warnings.
+ The <SAMP>`--header'</SAMP> option is not compatible with the <SAMP>`--c++'</SAMP> option,
+ since the C++ scanner provides its own header in <TT>`yyFlexLexer.h'</TT>.
+ 
+ <DT><SAMP>`-i, --case-insensitive'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to generate a <EM>case-insensitive</EM> scanner.  The
+ case of letters given in the <CODE>flex</CODE> input patterns will be ignored,
+ and tokens in the input will be matched regardless of case.  The matched
+ text given in <CODE>yytext</CODE> will have the preserved case (i.e., it will
+ not be folded).
+ 
+ <DT><SAMP>`-l, --lex-compat'</SAMP>
+ <DD>
+ turns on maximum compatibility with the original AT&#38;T <CODE>lex</CODE>
+ implementation.  Note that this does not mean <EM>full</EM> compatibility.
+ Use of this option costs a considerable amount of performance, and it
+ cannot be used with the <SAMP>`--c++'</SAMP>, <SAMP>`--full'</SAMP>, <SAMP>`--fast'</SAMP>, <SAMP>`-Cf'</SAMP>, or
+ <SAMP>`-CF'</SAMP> options.  For details on the compatibilities it provides, see
+ section <A HREF="flex.html#SEC36">Incompatibilities with Lex and Posix</A>.  This option also results in the name
+ <CODE>YY_FLEX_LEX_COMPAT</CODE> being <CODE>#define</CODE>'d in the generated scanner.
+ 
+ <DT><SAMP>`-n'</SAMP>
+ <DD>
+ is another do-nothing option included only for
+ POSIX compliance.
+ 
+ <DT><SAMP>`-p, --perf-report'</SAMP>
+ <DD>
+ generates a performance report to <TT>`stderr'</TT>.  The report consists of
+ comments regarding features of the <CODE>flex</CODE> input file which will
+ cause a serious loss of performance in the resulting scanner.  If you
+ give the flag twice, you will also get comments regarding features that
+ lead to minor performance losses.
+ 
+ Note that the use of <CODE>REJECT</CODE>, <CODE>%option yylineno</CODE>, and
+ variable trailing context (see section <A HREF="flex.html#SEC38">Limitations</A>) entails a substantial
+ performance penalty; use of <CODE>yymore()</CODE>, the <SAMP>`^'</SAMP> operator, and
+ the <SAMP>`--interactive'</SAMP> flag entail minor performance penalties.
+ 
+ <DT><SAMP>`-s, --nodefault'</SAMP>
+ <DD>
+ causes the <EM>default rule</EM> (that unmatched scanner input is echoed
+ to <TT>`stdout)'</TT> to be suppressed.  If the scanner encounters input
+ that does not match any of its rules, it aborts with an error.  This
+ option is useful for finding holes in a scanner's rule set.
+ 
+ <DT><SAMP>`-t, --stdout'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to write the scanner it generates to standard
+ output instead of <TT>`lex.yy.c'</TT>.
+ 
+ <DT><SAMP>`-v, --verbose'</SAMP>
+ <DD>
+ specifies that <CODE>flex</CODE> should write to <TT>`stderr'</TT> a summary of
+ statistics regarding the scanner it generates.  Most of the statistics
+ are meaningless to the casual <CODE>flex</CODE> user, but the first line
+ identifies the version of <CODE>flex</CODE> (same as reported by <SAMP>`--version'</SAMP>),
+ and the next line the flags used when generating the scanner, including
+ those that are on by default.
+ 
+ <DT><SAMP>`-w, --nowarn'</SAMP>
+ <DD>
+ suppresses warning messages.
+ 
+ <DT><SAMP>`-B, --batch'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to generate a <EM>batch</EM> scanner, the opposite of
+ <EM>interactive</EM> scanners generated by <SAMP>`--interactive'</SAMP> (see below).  In
+ general, you use <SAMP>`-B'</SAMP> when you are <EM>certain</EM> that your scanner
+ will never be used interactively, and you want to squeeze a
+ <EM>little</EM> more performance out of it.  If your goal is instead to
+ squeeze out a <EM>lot</EM> more performance, you should be using the
+ <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP> options, which turn on <SAMP>`--batch'</SAMP> automatically
+ anyway.
+ 
+ <DT><SAMP>`-F, --fast'</SAMP>
+ <DD>
+ specifies that the <EM>fast</EM> scanner table representation should be
+ used (and <CODE>stdio</CODE> bypassed).  This representation is about as fast
+ as the full table representation <SAMP>`--full'</SAMP>, and for some sets of
+ patterns will be considerably smaller (and for others, larger).  In
+ general, if the pattern set contains both <EM>keywords</EM> and a
+ catch-all, <EM>identifier</EM> rule, such as in the set:
+ 
+ 
+ <PRE>
+ @verbatim
+     "case"    return TOK_CASE;
+     "switch"  return TOK_SWITCH;
+     ...
+     "default" return TOK_DEFAULT;
+     [a-z]+    return TOK_ID;
+ </PRE>
+ 
+ then you're better off using the full table representation.  If only
+ the <EM>identifier</EM> rule is present and you then use a hash table or some such
+ to detect the keywords, you're better off using
+ <SAMP>`--fast'</SAMP>.
+ 
+ This option is equivalent to <SAMP>`-CFr'</SAMP> (see below).  It cannot be used
+ with <SAMP>`--c++'</SAMP>.
+ 
+ <DT><SAMP>`-I, --interactive'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to generate an <I>interactive</I> scanner.  An
+ interactive scanner is one that only looks ahead to decide what token
+ has been matched if it absolutely must.  It turns out that always
+ looking one extra character ahead, even if the scanner has already seen
+ enough text to disambiguate the current token, is a bit faster than only
+ looking ahead when necessary.  But scanners that always look ahead give
+ dreadful interactive performance; for example, when a user types a
+ newline, it is not recognized as a newline token until they enter
+ <EM>another</EM> token, which often means typing in another whole line.
+ 
+ <CODE>flex</CODE> scanners default to <CODE>interactive</CODE> unless you use the
+ <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP> table-compression options
+ (see section <A HREF="flex.html#SEC20">Performance Considerations</A>).  That's because if you're looking for
+ high-performance you should be using one of these options, so if you
+ didn't, <CODE>flex</CODE> assumes you'd rather trade off a bit of run-time
+ performance for intuitive interactive behavior.  Note also that you
+ <EM>cannot</EM> use <SAMP>`--interactive'</SAMP> in conjunction with <SAMP>`-Cf'</SAMP> or
+ <SAMP>`-CF'</SAMP>.  Thus, this option is not really needed; it is on by default
+ for all those cases in which it is allowed.
+ 
+ You can force a scanner to
+ <EM>not</EM>
+ be interactive by using
+ <SAMP>`--batch'</SAMP>
+ 
+ <DT><SAMP>`-L, --noline'</SAMP>
+ <DD>
+ instructs
+ <CODE>flex</CODE>
+ not to generate
+ <CODE>#line</CODE>
+ directives.  Without this option,
+ <CODE>flex</CODE>
+ peppers the generated scanner
+ with <CODE>#line</CODE> directives so error messages in the actions will be correctly
+ located with respect to either the original
+ <CODE>flex</CODE>
+ input file (if the errors are due to code in the input file), or
+ <TT>`lex.yy.c'</TT>
+ (if the errors are
+ <CODE>flex</CODE>'s
+ fault -- you should report these sorts of errors to the email address
+ given in section <A HREF="flex.html#SEC41">Reporting Bugs</A>).
+ 
+ <DT><SAMP>`-R, --reentrant'</SAMP>
+ <DD>
+ instructs flex to generate a reentrant C scanner.  The generated scanner
+ may safely be used in a multi-threaded environment. The API for a
+ reentrant scanner is different than for a non-reentrant scanner
+ see section <A HREF="flex.html#SEC22">Reentrant C Scanners</A>).  Because of the API difference between
+ reentrant and non-reentrant <CODE>flex</CODE> scanners, non-reentrant flex
+ code must be modified before it is suitable for use with this option.
+ This option is not compatible with the <SAMP>`--c++'</SAMP> option.
+ 
+ <DT><SAMP>`-Rb, --reentrant-bison'</SAMP>
+ <DD>
+ instructs flex to generate a reentrant C scanner that is
+ meant to be called by a
+ <CODE>GNU bison</CODE>
+ pure parser. The scanner is the same as the scanner generated by the
+ <SAMP>`--reentrant'</SAMP>
+ option, but with minor API changes for
+ <CODE>bison</CODE>
+ compatibility. In particular, the declaration of
+ <CODE>yylex</CODE>
+ is modified, and support for
+ <CODE>yylval</CODE>
+ and
+ <CODE>yylloc</CODE>
+ is incorporated. See section <A HREF="flex.html#SEC34">Reentrant C Scanners with Bison Pure Parsers</A>.
+ 
+ The options <SAMP>`--reentrant'</SAMP> and <SAMP>`--reentrant-bison'</SAMP> do not affect the performance of
+ the scanner.
+ 
+ <DT><SAMP>`-T, --trace'</SAMP>
+ <DD>
+ makes <CODE>flex</CODE> run in <EM>trace</EM> mode.  It will generate a lot of
+ messages to <TT>`stderr'</TT> concerning the form of the input and the
+ resultant non-deterministic and deterministic finite automata.  This
+ option is mostly for use in maintaining <CODE>flex</CODE>.
+ 
+ <DT><SAMP>`-V, --version'</SAMP>
+ <DD>
+ prints the version number to <TT>`stdout'</TT> and exits. 
+ 
+ <DT><SAMP>`-X, --posix'</SAMP>
+ <DD>
+ turns on maximum compatibility with the POSIX 1003.2-1992 definition of
+ <CODE>lex</CODE>.  Since <CODE>flex</CODE> was originally designed to implement the
+ POSIX definition of <CODE>lex</CODE> this generally involves very few changes
+ in behavior.  At the current writing the known differences between
+ <CODE>flex</CODE> and the POSIX standard are:
+ 
+ 
+ <UL>
+ <LI>
+ 
+ In POSIX and AT&#38;T <CODE>lex</CODE>, the repeat operator, <SAMP>`{}'</SAMP>, has lower
+ precedence than concatenation (thus <SAMP>`ab{3}'</SAMP> yields <SAMP>`ababab'</SAMP>).
+ Most POSIX utilities use an Extended Regular Expression (ERE) precedence
+ that has the precedence of the repeat operator higher than concatenation
+ (which causes <SAMP>`ab{3}'</SAMP> to yield <SAMP>`abbb'</SAMP>).  By default, <CODE>flex</CODE>
+ places the precedence of the repeat operator higher than concatenation
+ which matches the ERE processing of other POSIX utilities.  When either
+ <SAMP>`--posix'</SAMP> or <SAMP>`-l'</SAMP> are specified, <CODE>flex</CODE> will use the
+ traditional AT&#38;T and POSIX-compliant precedence for the repeat operator
+ where concatenation has higher precedence than the repeat operator.
+ </UL>
+ 
+ <DT><SAMP>`-7, --7bit'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to generate a 7-bit scanner, i.e., one which can
+ only recognize 7-bit characters in its input.  The advantage of using
+ <SAMP>`--7bit'</SAMP> is that the scanner's tables can be up to half the size of
+ those generated using the <SAMP>`--8bit'</SAMP>.  The disadvantage is that such
+ scanners often hang or crash if their input contains an 8-bit character.
+ 
+ Note, however, that unless you generate your scanner using the
+ <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP> table compression options, use of <SAMP>`--7bit'</SAMP>
+ will save only a small amount of table space, and make your scanner
+ considerably less portable.  <CODE>Flex</CODE>'s default behavior is to
+ generate an 8-bit scanner unless you use the <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP>,
+ in which case <CODE>flex</CODE> defaults to generating 7-bit scanners unless
+ your site was always configured to generate 8-bit scanners (as will
+ often be the case with non-USA sites).  You can tell whether flex
+ generated a 7-bit or an 8-bit scanner by inspecting the flag summary in
+ the <SAMP>`--verbose'</SAMP> output as described above.
+ 
+ Note that if you use <SAMP>`-Cfe'</SAMP> or <SAMP>`-CFe'</SAMP> <CODE>flex</CODE> still
+ defaults to generating an 8-bit scanner, since usually with these
+ compression options full 8-bit tables are not much more expensive than
+ 7-bit tables.
+ 
+ <DT><SAMP>`-8, --8bit'</SAMP>
+ <DD>
+ instructs <CODE>flex</CODE> to generate an 8-bit scanner, i.e., one which can
+ recognize 8-bit characters.  This flag is only needed for scanners
+ generated using <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP>, as otherwise flex defaults to
+ generating an 8-bit scanner anyway.
+ 
+ See the discussion of
+ <SAMP>`--7bit'</SAMP>
+ above for <CODE>flex</CODE>'s default behavior and the tradeoffs between 7-bit
+ and 8-bit scanners.
+ 
+ <DT><SAMP>`-+, --c++'</SAMP>
+ <DD>
+ specifies that you want flex to generate a C++
+ scanner class.  See section <A HREF="flex.html#SEC21">Generating C++ Scanners</A>, for
+ details.
+ 
+ <DT><SAMP>`-C[aefFmr]'</SAMP>
+ <DD>
+ controls the degree of table compression and, more generally, trade-offs
+ between small scanners and fast scanners.
+ 
+ <DT><SAMP>`-Ca, --align'</SAMP>
+ <DD>
+ ("align") instructs flex to trade off larger tables in the
+ generated scanner for faster performance because the elements of
+ the tables are better aligned for memory access and computation.  On some
+ RISC architectures, fetching and manipulating longwords is more efficient
+ than with smaller-sized units such as shortwords.  This option can
+ quadruple the size of the tables used by your scanner.
+ 
+ <DT><SAMP>`-Ce, --ecs'</SAMP>
+ <DD>
+ directs <CODE>flex</CODE> to construct <EM>equivalence classes</EM>, i.e., sets
+ of characters which have identical lexical properties (for example, if
+ the only appearance of digits in the <CODE>flex</CODE> input is in the
+ character class "[0-9]" then the digits '0', '1', ..., '9' will all be
+ put in the same equivalence class).  Equivalence classes usually give
+ dramatic reductions in the final table/object file sizes (typically a
+ factor of 2-5) and are pretty cheap performance-wise (one array look-up
+ per character scanned).
+ 
+ <DT><SAMP>`-Cf'</SAMP>
+ <DD>
+ specifies that the <EM>full</EM> scanner tables should be generated -
+ <CODE>flex</CODE> should not compress the tables by taking advantages of
+ similar transition functions for different states.
+ 
+ <DT><SAMP>`-CF'</SAMP>
+ <DD>
+ specifies that the alternate fast scanner representation (described
+ above under the <SAMP>`--fast'</SAMP> flag) should be used.  This option cannot be
+ used with <SAMP>`--c++'</SAMP>.
+ 
+ <DT><SAMP>`-Cm, --meta-ecs'</SAMP>
+ <DD>
+ directs
+ <CODE>flex</CODE>
+ to construct
+ <EM>meta-equivalence classes</EM>,
+ which are sets of equivalence classes (or characters, if equivalence
+ classes are not being used) that are commonly used together.  Meta-equivalence
+ classes are often a big win when using compressed tables, but they
+ have a moderate performance impact (one or two <CODE>if</CODE> tests and one
+ array look-up per character scanned).
+ 
+ @anchor{Option-Read}
+ <DT><SAMP>`-Cr, --read'</SAMP>
+ <DD>
+ causes the generated scanner to <EM>bypass</EM> use of the standard I/O
+ library (<CODE>stdio</CODE>) for input.  Instead of calling <CODE>fread()</CODE> or
+ <CODE>getc()</CODE>, the scanner will use the <CODE>read()</CODE> system call,
+ resulting in a performance gain which varies from system to system, but
+ in general is probably negligible unless you are also using <SAMP>`-Cf'</SAMP>
+ or <SAMP>`-CF'</SAMP>.  Using <SAMP>`-Cr'</SAMP> can cause strange behavior if, for
+ example, you read from <TT>`yyin'</TT> using <CODE>stdio</CODE> prior to calling
+ the scanner (because the scanner will miss whatever text your previous
+ reads left in the <CODE>stdio</CODE> input buffer).  <SAMP>`-Cr'</SAMP> has no effect
+ if you define <CODE>YY_INPUT()</CODE> (see section <A HREF="flex.html#SEC11">The Generated Scanner</A>).
+ 
+ <DT><SAMP>`-C'</SAMP>
+ <DD>
+ A lone <SAMP>`-C'</SAMP> specifies that the scanner tables should be compressed
+ but neither equivalence classes nor meta-equivalence classes should be
+ used.
+ 
+ The options <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP> and <SAMP>`-Cm'</SAMP> do not make sense
+ together - there is no opportunity for meta-equivalence classes if the
+ table is not being compressed.  Otherwise the options may be freely
+ mixed, and are cumulative.
+ 
+ The default setting is <SAMP>`-Cem'</SAMP>, which specifies that <CODE>flex</CODE>
+ should generate equivalence classes and meta-equivalence classes.  This
+ setting provides the highest degree of table compression.  You can trade
+ off faster-executing scanners at the cost of larger tables with the
+ following generally being true:
+ 
+ 
+ <PRE>
+ @verbatim
+     slowest &#38; smallest
+           -Cem
+           -Cm
+           -Ce
+           -C
+           -C{f,F}e
+           -C{f,F}
+           -C{f,F}a
+     fastest &#38; largest
+ </PRE>
+ 
+ Note that scanners with the smallest tables are usually generated and
+ compiled the quickest, so during development you will usually want to
+ use the default, maximal compression.
+ 
+ <SAMP>`-Cfe'</SAMP> is often a good compromise between speed and size for
+ production scanners.
+ 
+ <DT><SAMP>`-oFILE, --outfile=FILE'</SAMP>
+ <DD>
+ directs flex to write the scanner to the file <TT>`FILE'</TT> instead of
+ <TT>`lex.yy.c'</TT>.  If you combine <SAMP>`--outfile'</SAMP> with the <SAMP>`--stdout'</SAMP> option,
+ then the scanner is written to <TT>`stdout'</TT> but its <CODE>#line</CODE>
+ directives (see the <SAMP>`-l'</SAMP> option above) refer to the file
+ <TT>`FILE'</TT>.
+ 
+ <DT><SAMP>`-PPREFIX, --prefix=PREFIX'</SAMP>
+ <DD>
+ changes the default <SAMP>`yy'</SAMP> prefix used by <CODE>flex</CODE> for all
+ globally-visible variable and function names to instead be
+ <SAMP>`PREFIX'</SAMP>.  For example, <SAMP>`--prefix=foo'</SAMP> changes the name of
+ <CODE>yytext</CODE> to <CODE>footext</CODE>.  It also changes the name of the default
+ output file from <TT>`lex.yy.c'</TT> to <TT>`lex.foo.c'</TT>.  Here are all of
+ the names affected:
+ 
+ 
+ <PRE>
+ @verbatim
+     yy_create_buffer
+     yy_delete_buffer
+     yy_flex_debug
+     yy_init_buffer
+     yy_flush_buffer
+     yy_load_buffer_state
+     yy_switch_to_buffer
+     yyin
+     yyleng
+     yylex
+     yylineno
+     yyout
+     yyrestart
+     yytext
+     yywrap
+ </PRE>
+ 
+ (If you are using a C++ scanner, then only <CODE>yywrap</CODE> and
+ <CODE>yyFlexLexer</CODE> are affected.)  Within your scanner itself, you can
+ still refer to the global variables and functions using either version
+ of their name; but externally, they have the modified name.
+ 
+ This option lets you easily link together multiple
+ <CODE>flex</CODE>
+ programs into the same executable.  Note, though, that using this
+ option also renames
+ <CODE>yywrap()</CODE>,
+ so you now
+ <EM>must</EM>
+ either
+ provide your own (appropriately-named) version of the routine for your
+ scanner, or use
+ <CODE>%option noyywrap</CODE>,
+ as linking with
+ <SAMP>`-lfl'</SAMP>
+ no longer provides one for you by default.
+ 
+ <DT><SAMP>`-SFILE, --skel=FILE'</SAMP>
+ <DD>
+ overrides the default skeleton file from which
+ <CODE>flex</CODE>
+ constructs its scanners.  You'll never need this option unless you are doing
+ <CODE>flex</CODE>
+ maintenance or development.
+ 
+ @anchor{Option-Always-Interactive}
+ <DT><SAMP>`--always-interactive'</SAMP>
+ <DD>
+ instructs flex to generate a scanner which always considers its input
+ <EM>interactive</EM>.  Normally, on each new input file the scanner calls
+ <CODE>isatty()</CODE> in an attempt to determine whether the scanner's input
+ source is interactive and thus should be read a character at a time.
+ When this option is used, however, then no such call is made.
+ 
+ <DT><SAMP>`--main'</SAMP>
+ <DD>
+  directs flex to provide a default <CODE>main()</CODE> program for the
+ scanner, which simply calls <CODE>yylex()</CODE>.  This option implies
+ <CODE>noyywrap</CODE> (see below).
+ 
+ <DT><SAMP>`--never-interactive'</SAMP>
+ <DD>
+ instructs flex to generate a scanner which never considers its input
+ interactive.  This is the opposite of <CODE>always-interactive</CODE>.
+ 
+ <DT><SAMP>`--nounistd'</SAMP>
+ <DD>
+ suppresses inclusion of the non-ANSI header file <TT>`unistd.h'</TT>. This option
+ is meant to target environments in which <TT>`unistd.h'</TT> does not exist. Be aware
+ that certain options may cause flex to generate code that relies on functions
+ normally found in <TT>`unistd.h'</TT>, (e.g. <CODE>isatty()</CODE>, <CODE>read()</CODE>.)
+ If you wish to use these functions, you will have to inform your compiler where
+ to find them.
+ @xref{Option-Always-Interactive}. @xref{Option-Read}.
+ 
+ <DT><SAMP>`--stack'</SAMP>
+ <DD>
+ enables the use of
+ start condition stacks (see section <A HREF="flex.html#SEC12">Start Conditions</A>).  
+ 
+ <DT><SAMP>`--stdinit'</SAMP>
+ <DD>
+ if set (i.e., <B>%option stdinit)</B> initializes <CODE>yyin</CODE> and
+ <CODE>yyout</CODE> to <TT>`stdin'</TT> and <TT>`stdout'</TT>, instead of the default of
+ <TT>`nil'</TT>.  Some existing <CODE>lex</CODE> programs depend on this behavior,
+ even though it is not compliant with ANSI C, which does not require
+ <TT>`stdin'</TT> and <TT>`stdout'</TT> to be compile-time constant. In a
+ reentrant scanner, however, this is not a problem since initialization
+ is performed in <CODE>yylex_init</CODE> at runtime.
+ 
+ <DT><SAMP>`--yylineno'</SAMP>
+ <DD>
+ directs <CODE>flex</CODE> to generate a scanner
+ that maintains the number of the current line read from its input in the
+ global variable <CODE>yylineno</CODE>.  This option is implied by <CODE>%option
+ lex-compat</CODE>.  In a reentrant C scanner, the macro <CODE>yylineno</CODE> is
+ accessible regardless of the value of <CODE>%option yylineno</CODE>, however, its
+ value is not modified by <CODE>flex</CODE> unless <CODE>%option yylineno</CODE> is enabled.
+ 
+ <DT><SAMP>`--yywrap'</SAMP>
+ <DD>
+ if unset (i.e., <CODE>--noyywrap)</CODE>, makes the scanner not call
+ <CODE>yywrap()</CODE> upon an end-of-file, but simply assume that there are no
+ more files to scan (until the user points <TT>`yyin'</TT> at a new file and
+ calls <CODE>yylex()</CODE> again).
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC19" HREF="flex_toc.html#TOC19">Option Directives Within Scanners</A></H1>
+ 
+ <P>
+ <CODE>flex</CODE> also provides a mechanism for controlling options within the
+ scanner specification itself, rather than from the flex command-line.
+ This is done by including <CODE>%option</CODE> directives in the first section
+ of the scanner specification.  You can specify multiple options with a
+ single <CODE>%option</CODE> directive, and multiple directives in the first
+ section of your flex input file.
+ 
+ 
+ <P>
+ Most options are given simply as names, optionally preceded by the
+ word <SAMP>`no'</SAMP> (with no intervening whitespace) to negate their meaning.
+ The names are the same as their long-option equivalents (but without the
+ leading <SAMP>`--'</SAMP> ).
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     7bit            -7   --7bit
+     8bit            -8   --8bit
+     align           -Ca  --align
+     array                --array   equivalent to "%array"
+     backup          -b   --backup
+     batch           -B   --batch
+     c++             -+   --c++
+ 
+     caseful or
+     case-sensitive  (default)
+ 
+     case-insensitive or
+     caseless        -i   --case-insensitive
+ 
+     debug           -d   --debug
+     default              --default
+     ecs             -Ce  --ecs
+     fast            -F   --fast
+     full            -f   --full
+     header="FILE"        --header=FILE
+     interactive     -I   --interactive
+     lex-compat      -l   --lex-compat
+     meta-ecs        -Cm  --meta-ecs
+     nounistd             --nounistd
+     perf-report     -p   --perf-report
+     pointer              --pointer equivalent to "%pointer" (default)
+     prefix="PREFIX" -P   --prefix
+     outfile="FILE"  -o   --outfile=FILE
+     read            -Cr  --read
+     reentrant       -R   --reentrant
+     reentrant-bison -Rb  --reentrant-bison
+     stdout          -t   --stdout
+     verbose         -v   --verbose
+     warn                 --warn (use "%option nowarn" for -w)
+     yyclass="NAME"       --yyclass=NAME
+ 
+ </PRE>
+ 
+ <P>
+ <CODE>flex</CODE> scans your rule actions to determine whether you use the
+ <CODE>REJECT</CODE> or <CODE>yymore()</CODE> features.  The <CODE>REJECT</CODE> and
+ <CODE>yymore</CODE> options are available to override its decision as to
+ whether you use the options, either by setting them (e.g., <CODE>%option
+ reject)</CODE> to indicate the feature is indeed used, or unsetting them to
+ indicate it actually is not used (e.g., <CODE>%option noyymore)</CODE>.
+ 
+ 
+ <P>
+ <CODE>%option yyclass</CODE>
+ only applies when generating a C++ scanner (the <SAMP>`--c++'</SAMP> option).  It
+ informs <CODE>flex</CODE> that you have derived <CODE>foo</CODE> as a subclass of
+ <CODE>yyFlexLexer</CODE>, so <CODE>flex</CODE> will place your actions in the member
+ function <CODE>foo::yylex()</CODE> instead of <CODE>yyFlexLexer::yylex()</CODE>.  It
+ also generates a <CODE>yyFlexLexer::yylex()</CODE> member function that emits
+ a run-time error (by invoking <CODE>yyFlexLexer::LexerError())</CODE> if
+ called.  See section <A HREF="flex.html#SEC21">Generating C++ Scanners</A>.
+ 
+ 
+ <P>
+ A number of options are available for lint purists who want to suppress
+ the appearance of unneeded routines in the generated scanner.  Each of
+ the following, if unset (e.g., <CODE>%option nounput</CODE>), results in the
+ corresponding routine not appearing in the generated scanner:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     input, unput
+     yy_push_state, yy_pop_state, yy_top_state
+     yy_scan_buffer, yy_scan_bytes, yy_scan_string
+ 
+     yyget_extra, yyset_extra, yyget_leng, yyget_text, 
+     yyget_lineno, yyset_lineno, yyget_in, yyset_in,
+     yyget_out, yyset_out, yyget_lval, yyset_lval,
+     yyget_lloc, yyset_lloc,
+ </PRE>
+ 
+ <P>
+ (though <CODE>yy_push_state()</CODE> and friends won't appear anyway unless
+ you use <CODE>%option stack)</CODE>.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC20" HREF="flex_toc.html#TOC20">Performance Considerations</A></H1>
+ 
+ <P>
+ <A NAME="IDX202"></A>
+ The main design goal of <CODE>flex</CODE> is that it generate high-performance
+ scanners.  It has been optimized for dealing well with large sets of
+ rules.  Aside from the effects on scanner speed of the table compression
+ <SAMP>`-C'</SAMP> options outlined above, there are a number of options/actions
+ which degrade performance.  These are, from most expensive to least:
+ 
+ 
+ <P>
+ <A NAME="IDX203"></A>
+ <A NAME="IDX204"></A>
+ <A NAME="IDX205"></A>
+ 
+ <PRE>
+ @verbatim
+     REJECT
+     %option yylineno
+     arbitrary trailing context
+ 
+     pattern sets that require backing up
+     %array
+     %option interactive
+     %option always-interactive
+ 
+     <SAMP>`^'</SAMP> beginning-of-line operator
+     yymore()
+ </PRE>
+ 
+ <P>
+ with the first three all being quite expensive and the last two being
+ quite cheap.  Note also that <CODE>unput()</CODE> is implemented as a routine
+ call that potentially does quite a bit of work, while <CODE>yyless()</CODE> is
+ a quite-cheap macro. So if you are just putting back some excess text
+ you scanned, use <CODE>ss()</CODE>.
+ 
+ 
+ <P>
+ <CODE>REJECT</CODE> should be avoided at all costs when performance is
+ important.  It is a particularly expensive option.
+ 
+ 
+ <P>
+ <A NAME="IDX206"></A>
+ <A NAME="IDX207"></A>
+ <A NAME="IDX208"></A>
+ Getting rid of backing up is messy and often may be an enormous amount
+ of work for a complicated scanner.  In principal, one begins by using
+ the <SAMP>`-b'</SAMP> flag to generate a <TT>`lex.backup'</TT> file.  For example,
+ on the input:
+ 
+ 
+ <P>
+ <A NAME="IDX209"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     foo        return TOK_KEYWORD;
+     foobar     return TOK_KEYWORD;
+ </PRE>
+ 
+ <P>
+ the file looks like:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     State #6 is non-accepting -
+      associated rule line numbers:
+            2       3
+      out-transitions: [ o ]
+      jam-transitions: EOF [ \001-n  p-\177 ]
+ 
+     State #8 is non-accepting -
+      associated rule line numbers:
+            3
+      out-transitions: [ a ]
+      jam-transitions: EOF [ \001-`  b-\177 ]
+ 
+     State #9 is non-accepting -
+      associated rule line numbers:
+            3
+      out-transitions: [ r ]
+      jam-transitions: EOF [ \001-q  s-\177 ]
+ 
+     Compressed tables always back up.
+ </PRE>
+ 
+ <P>
+ The first few lines tell us that there's a scanner state in which it can
+ make a transition on an 'o' but not on any other character, and that in
+ that state the currently scanned text does not match any rule.  The
+ state occurs when trying to match the rules found at lines 2 and 3 in
+ the input file.  If the scanner is in that state and then reads
+ something other than an 'o', it will have to back up to find a rule
+ which is matched.  With a bit of headscratching one can see that this
+ must be the state it's in when it has seen <SAMP>`fo'</SAMP>.  When this has
+ happened, if anything other than another <SAMP>`o'</SAMP> is seen, the scanner
+ will have to back up to simply match the <SAMP>`f'</SAMP> (by the default rule).
+ 
+ 
+ <P>
+ The comment regarding State #8 indicates there's a problem when
+ <SAMP>`foob'</SAMP> has been scanned.  Indeed, on any character other than an
+ <SAMP>`a'</SAMP>, the scanner will have to back up to accept "foo".  Similarly,
+ the comment for State #9 concerns when <SAMP>`fooba'</SAMP> has been scanned and
+ an <SAMP>`r'</SAMP> does not follow.
+ 
+ 
+ <P>
+ The final comment reminds us that there's no point going to all the
+ trouble of removing backing up from the rules unless we're using
+ <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP>, since there's no performance gain doing so
+ with compressed scanners.
+ 
+ 
+ <P>
+ <A NAME="IDX210"></A>
+ The way to remove the backing up is to add "error" rules:
+ 
+ 
+ <P>
+ <A NAME="IDX211"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     foo         return TOK_KEYWORD;
+     foobar      return TOK_KEYWORD;
+ 
+     fooba       |
+     foob        |
+     fo          {
+                 /* false alarm, not really a keyword */
+                 return TOK_ID;
+                 }
+ </PRE>
+ 
+ <P>
+ Eliminating backing up among a list of keywords can also be done using a
+ "catch-all" rule:
+ 
+ 
+ <P>
+ <A NAME="IDX212"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     foo         return TOK_KEYWORD;
+     foobar      return TOK_KEYWORD;
+ 
+     [a-z]+      return TOK_ID;
+ </PRE>
+ 
+ <P>
+ This is usually the best solution when appropriate.
+ 
+ 
+ <P>
+ Backing up messages tend to cascade.  With a complicated set of rules
+ it's not uncommon to get hundreds of messages.  If one can decipher
+ them, though, it often only takes a dozen or so rules to eliminate the
+ backing up (though it's easy to make a mistake and have an error rule
+ accidentally match a valid token.  A possible future <CODE>flex</CODE> feature
+ will be to automatically add rules to eliminate backing up).
+ 
+ 
+ <P>
+ It's important to keep in mind that you gain the benefits of eliminating
+ backing up only if you eliminate <EM>every</EM> instance of backing up.
+ Leaving just one means you gain nothing.
+ 
+ 
+ <P>
+ <EM>Variable</EM> trailing context (where both the leading and trailing
+ parts do not have a fixed length) entails almost the same performance
+ loss as <CODE>REJECT</CODE> (i.e., substantial).  So when possible a rule
+ like:
+ 
+ 
+ <P>
+ <A NAME="IDX213"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     mouse|rat/(cat|dog)   run();
+ </PRE>
+ 
+ <P>
+ is better written:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     mouse/cat|dog         run();
+     rat/cat|dog           run();
+ </PRE>
+ 
+ <P>
+ or as
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     mouse|rat/cat         run();
+     mouse|rat/dog         run();
+ </PRE>
+ 
+ <P>
+ Note that here the special '|' action does <EM>not</EM> provide any
+ savings, and can even make things worse (see section <A HREF="flex.html#SEC38">Limitations</A>).
+ 
+ 
+ <P>
+ Another area where the user can increase a scanner's performance (and
+ one that's easier to implement) arises from the fact that the longer the
+ tokens matched, the faster the scanner will run.  This is because with
+ long tokens the processing of most input characters takes place in the
+ (short) inner scanning loop, and does not often have to go through the
+ additional work of setting up the scanning environment (e.g.,
+ <CODE>yytext</CODE>) for the action.  Recall the scanner for C comments:
+ 
+ 
+ <P>
+ <A NAME="IDX214"></A>
+ 
+ <PRE>
+ @verbatim
+     %x comment
+     %%
+             int line_num = 1;
+ 
+     "/*"         BEGIN(comment);
+ 
+     &#60;comment&#62;[^*\n]*
+     &#60;comment&#62;"*"+[^*/\n]*
+     &#60;comment&#62;\n             ++line_num;
+     &#60;comment&#62;"*"+"/"        BEGIN(INITIAL);
+ </PRE>
+ 
+ <P>
+ This could be sped up by writing it as:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %x comment
+     %%
+             int line_num = 1;
+ 
+     "/*"         BEGIN(comment);
+ 
+     &#60;comment&#62;[^*\n]*
+     &#60;comment&#62;[^*\n]*\n      ++line_num;
+     &#60;comment&#62;"*"+[^*/\n]*
+     &#60;comment&#62;"*"+[^*/\n]*\n ++line_num;
+     &#60;comment&#62;"*"+"/"        BEGIN(INITIAL);
+ </PRE>
+ 
+ <P>
+ Now instead of each newline requiring the processing of another action,
+ recognizing the newlines is distributed over the other rules to keep the
+ matched text as long as possible.  Note that <EM>adding</EM> rules does
+ <EM>not</EM> slow down the scanner!  The speed of the scanner is
+ independent of the number of rules or (modulo the considerations given
+ at the beginning of this section) how complicated the rules are with
+ regard to operators such as <SAMP>`*'</SAMP> and <SAMP>`|'</SAMP>.
+ 
+ 
+ <P>
+ <A NAME="IDX215"></A>
+ <A NAME="IDX216"></A>
+ A final example in speeding up a scanner: suppose you want to scan
+ through a file containing identifiers and keywords, one per line
+ and with no other extraneous characters, and recognize all the
+ keywords.  A natural first approach is:
+ 
+ 
+ <P>
+ <A NAME="IDX217"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     asm      |
+     auto     |
+     break    |
+     ... etc ...
+     volatile |
+     while    /* it's a keyword */
+ 
+     .|\n     /* it's not a keyword */
+ </PRE>
+ 
+ <P>
+ To eliminate the back-tracking, introduce a catch-all rule:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     asm      |
+     auto     |
+     break    |
+     ... etc ...
+     volatile |
+     while    /* it's a keyword */
+ 
+     [a-z]+   |
+     .|\n     /* it's not a keyword */
+ </PRE>
+ 
+ <P>
+ Now, if it's guaranteed that there's exactly one word per line, then we
+ can reduce the total number of matches by a half by merging in the
+ recognition of newlines with that of the other tokens:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     asm\n    |
+     auto\n   |
+     break\n  |
+     ... etc ...
+     volatile\n |
+     while\n  /* it's a keyword */
+ 
+     [a-z]+\n |
+     .|\n     /* it's not a keyword */
+ </PRE>
+ 
+ <P>
+ One has to be careful here, as we have now reintroduced backing up
+ into the scanner.  In particular, while
+ <EM>we</EM>
+ know that there will never be any characters in the input stream
+ other than letters or newlines,
+ <CODE>flex</CODE>
+ can't figure this out, and it will plan for possibly needing to back up
+ when it has scanned a token like <SAMP>`auto'</SAMP> and then the next character
+ is something other than a newline or a letter.  Previously it would
+ then just match the <SAMP>`auto'</SAMP> rule and be done, but now it has no <SAMP>`auto'</SAMP>
+ rule, only a <SAMP>`auto\n'</SAMP> rule.  To eliminate the possibility of backing up,
+ we could either duplicate all rules but without final newlines, or,
+ since we never expect to encounter such an input and therefore don't
+ how it's classified, we can introduce one more catch-all rule, this
+ one which doesn't include a newline:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     asm\n    |
+     auto\n   |
+     break\n  |
+     ... etc ...
+     volatile\n |
+     while\n  /* it's a keyword */
+ 
+     [a-z]+\n |
+     [a-z]+   |
+     .|\n     /* it's not a keyword */
+ </PRE>
+ 
+ <P>
+ Compiled with <SAMP>`-Cf'</SAMP>, this is about as fast as one can get a
+ <CODE>flex</CODE> scanner to go for this particular problem.
+ 
+ 
+ <P>
+ A final note: <CODE>flex</CODE> is slow when matching <CODE>NUL</CODE>s,
+ particularly when a token contains multiple <CODE>NUL</CODE>s.  It's best to
+ write rules which match <EM>short</EM> amounts of text if it's anticipated
+ that the text will often include <CODE>NUL</CODE>s.
+ 
+ 
+ <P>
+ Another final note regarding performance: as mentioned in
+ section <A HREF="flex.html#SEC9">How the Input Is Matched</A>, dynamically resizing <CODE>yytext</CODE> to accommodate huge
+ tokens is a slow process because it presently requires that the (huge)
+ token be rescanned from the beginning.  Thus if performance is vital,
+ you should attempt to match "large" quantities of text but not
+ "huge" quantities, where the cutoff between the two is at about 8K
+ characters per token.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC21" HREF="flex_toc.html#TOC21">Generating C++ Scanners</A></H1>
+ 
+ <P>
+ <A NAME="IDX218"></A>
+ <A NAME="IDX219"></A>
+ <A NAME="IDX220"></A>
+ <CODE>flex</CODE> provides two different ways to generate scanners for use
+ with C++.  The first way is to simply compile a scanner generated by
+ <CODE>flex</CODE> using a C++ compiler instead of a C compiler.  You should
+ not encounter any compilation errors (see section <A HREF="flex.html#SEC41">Reporting Bugs</A>).  You can
+ then use C++ code in your rule actions instead of C code.  Note that the
+ default input source for your scanner remains <TT>`yyin'</TT>, and default
+ echoing is still done to <TT>`yyout'</TT>.  Both of these remain <CODE>FILE
+ *</CODE> variables and not C++ <EM>streams</EM>.
+ 
+ 
+ <P>
+ You can also use <CODE>flex</CODE> to generate a C++ scanner class, using the
+ <SAMP>`-+'</SAMP> option (or, equivalently, <CODE>%option c++)</CODE>, which is
+ automatically specified if the name of the <CODE>flex</CODE> executable ends
+ in a '+', such as <CODE>flex++</CODE>.  When using this option, <CODE>flex</CODE>
+ defaults to generating the scanner to the file <TT>`lex.yy.cc'</TT> instead
+ of <TT>`lex.yy.c'</TT>.  The generated scanner includes the header file
+ <TT>`FlexLexer.h'</TT>, which defines the interface to two C++ classes.
+ 
+ 
+ <P>
+ The first class,
+ <CODE>FlexLexer</CODE>,
+ provides an abstract base class defining the general scanner class
+ interface.  It provides the following member functions:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>const char* YYText()</CODE>
+ <DD>
+ <A NAME="IDX221"></A>
+  
+ returns the text of the most recently matched token, the equivalent of
+ <CODE>yytext</CODE>.
+ 
+ <A NAME="IDX222"></A>
+ <DT><CODE>int YYLeng()</CODE>
+ <DD>
+ returns the length of the most recently matched token, the equivalent of
+ <CODE>yyleng</CODE>.
+ 
+ <A NAME="IDX223"></A>
+ <DT><CODE>int lineno() const</CODE>
+ <DD>
+ returns the current input line number (see <CODE>%option yylineno)</CODE>, or
+ <CODE>1</CODE> if <CODE>%option yylineno</CODE> was not used.
+ 
+ <A NAME="IDX224"></A>
+ <DT><CODE>void set_debug( int flag )</CODE>
+ <DD>
+ sets the debugging flag for the scanner, equivalent to assigning to
+ <CODE>yy_flex_debug</CODE> (see section <A HREF="flex.html#SEC18">Invoking Flex</A>).  Note that you must build
+ the scannerusing <CODE>%option debug</CODE> to include debugging information
+ in it.
+ 
+ <A NAME="IDX225"></A>
+ <DT><CODE>int debug() const</CODE>
+ <DD>
+ returns the current setting of the debugging flag.
+ </DL>
+ 
+ <P>
+ Also provided are member functions equivalent to
+ <CODE>yy_switch_to_buffer()</CODE>, <CODE>yy_create_buffer()</CODE> (though the
+ first argument is an <CODE>istream*</CODE> object pointer and not a
+ <CODE>FILE*)</CODE>, <CODE>yy_flush_buffer()</CODE>, <CODE>yy_delete_buffer()</CODE>, and
+ <CODE>yyrestart()</CODE> (again, the first argument is a <CODE>istream*</CODE>
+ object pointer).
+ 
+ 
+ <P>
+ <A NAME="IDX226"></A>
+ <A NAME="IDX227"></A>
+ The second class defined in <TT>`FlexLexer.h'</TT> is <CODE>yyFlexLexer</CODE>,
+ which is derived from <CODE>FlexLexer</CODE>.  It defines the following
+ additional member functions:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>yyFlexLexer( istream* arg_yyin = 0, ostream* arg_yyout = 0 )</CODE>
+ <DD>
+ <A NAME="IDX228"></A>
+  
+ constructs a <CODE>yyFlexLexer</CODE> object using the given streams for input
+ and output.  If not specified, the streams default to <CODE>cin</CODE> and
+ <CODE>cout</CODE>, respectively.
+ 
+ <A NAME="IDX229"></A>
+ <DT><CODE>virtual int yylex()</CODE>
+ <DD>
+ performs the same role is <CODE>yylex()</CODE> does for ordinary <CODE>flex</CODE>
+ scanners: it scans the input stream, consuming tokens, until a rule's
+ action returns a value.  If you derive a subclass <CODE>S</CODE> from
+ <CODE>yyFlexLexer</CODE> and want to access the member functions and variables
+ of <CODE>S</CODE> inside <CODE>yylex()</CODE>, then you need to use <CODE>%option
+ yyclass="S"</CODE> to inform <CODE>flex</CODE> that you will be using that subclass
+ instead of <CODE>yyFlexLexer</CODE>.  In this case, rather than generating
+ <CODE>yyFlexLexer::yylex()</CODE>, <CODE>flex</CODE> generates <CODE>S::yylex()</CODE>
+ (and also generates a dummy <CODE>yyFlexLexer::yylex()</CODE> that calls
+ <CODE>yyFlexLexer::LexerError()</CODE> if called).
+ 
+ <A NAME="IDX230"></A>
+ <DT><CODE>virtual void switch_streams(istream* new_in = 0, ostream* new_out = 0)</CODE>
+ <DD>
+ reassigns <CODE>yyin</CODE> to <CODE>new_in</CODE> (if non-nil) and <CODE>yyout</CODE> to
+ <CODE>new_out</CODE> (if non-nil), deleting the previous input buffer if
+ <CODE>yyin</CODE> is reassigned.
+ 
+ <DT><CODE>int yylex( istream* new_in, ostream* new_out = 0 )</CODE>
+ <DD>
+ first switches the input streams via <CODE>switch_streams( new_in,
+ new_out )</CODE> and then returns the value of <CODE>yylex()</CODE>.
+ </DL>
+ 
+ <P>
+ In addition, <CODE>yyFlexLexer</CODE> defines the following protected virtual
+ functions which you can redefine in derived classes to tailor the
+ scanner:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>virtual int LexerInput( char* buf, int max_size )</CODE>
+ <DD>
+ <A NAME="IDX231"></A>
+  
+ reads up to <CODE>max_size</CODE> characters into <CODE>buf</CODE> and returns the
+ number of characters read.  To indicate end-of-input, return 0
+ characters.  Note that <CODE>interactive</CODE> scanners (see the <SAMP>`-B'</SAMP>
+ and <SAMP>`-I'</SAMP> flags in section <A HREF="flex.html#SEC18">Invoking Flex</A>) define the macro
+ <CODE>YY_INTERACTIVE</CODE>.  If you redefine <CODE>LexerInput()</CODE> and need to
+ take different actions depending on whether or not the scanner might be
+ scanning an interactive input source, you can test for the presence of
+ this name via <CODE>#ifdef</CODE> statements.
+ 
+ <A NAME="IDX232"></A>
+ <DT><CODE>virtual void LexerOutput( const char* buf, int size )</CODE>
+ <DD>
+ writes out <CODE>size</CODE> characters from the buffer <CODE>buf</CODE>, which, while
+ <CODE>NUL</CODE>-terminated, may also contain internal <CODE>NUL</CODE>s if the
+ scanner's rules can match text with <CODE>NUL</CODE>s in them.
+ 
+ <A NAME="IDX233"></A>
+ <A NAME="IDX234"></A>
+ <DT><CODE>virtual void LexerError( const char* msg )</CODE>
+ <DD>
+ reports a fatal error message.  The default version of this function
+ writes the message to the stream <CODE>cerr</CODE> and exits.
+ </DL>
+ 
+ <P>
+ Note that a <CODE>yyFlexLexer</CODE> object contains its <EM>entire</EM>
+ scanning state.  Thus you can use such objects to create reentrant
+ scanners.  You can instantiate multiple instances of the same
+ <CODE>yyFlexLexer</CODE> class, and you can also combine multiple C++ scanner
+ classes together in the same program using the <SAMP>`-P'</SAMP> option
+ discussed above.
+ 
+ 
+ <P>
+ Finally, note that the <CODE>%array</CODE> feature is not available to C++
+ scanner classes; you must use <CODE>%pointer</CODE> (the default).
+ 
+ 
+ <P>
+ Here is an example of a simple C++ scanner:
+ 
+ 
+ <P>
+ <A NAME="IDX235"></A>
+ 
+ <PRE>
+ @verbatim
+         // An example of using the flex C++ scanner class.
+ 
+     %{
+     int mylineno = 0;
+     %}
+ 
+     string  \"[^\n"]+\"
+ 
+     ws      [ \t]+
+ 
+     alpha   [A-Za-z]
+     dig     [0-9]
+     name    ({alpha}|{dig}|\$)({alpha}|{dig}|[_.\-/$])*
+     num1    [-+]?{dig}+\.?([eE][-+]?{dig}+)?
+     num2    [-+]?{dig}*\.{dig}+([eE][-+]?{dig}+)?
+     number  {num1}|{num2}
+ 
+     %%
+ 
+     {ws}    /* skip blanks and tabs */
+ 
+     "/*"    {
+             int c;
+ 
+             while((c = yyinput()) != 0)
+                 {
+                 if(c == '\n')
+                     ++mylineno;
+ 
+                 else if(c == <SAMP>`*'</SAMP>)
+                     {
+                     if((c = yyinput()) == '/')
+                         break;
+                     else
+                         unput(c);
+                     }
+                 }
+             }
+ 
+     {number}  cout  "number "  YYText()  '\n';
+ 
+     \n        mylineno++;
+ 
+     {name}    cout  "name "  YYText()  '\n';
+ 
+     {string}  cout  "string "  YYText()  '\n';
+ 
+     %%
+ 
+     int main( int /* argc */, char** /* argv */ )
+         {
+         <CODE>flex</CODE>Lexer* lexer = new yyFlexLexer;
+         while(lexer-&#62;yylex() != 0)
+             ;
+         return 0;
+         }
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX236"></A>
+ If you want to create multiple (different) lexer classes, you use the
+ <SAMP>`-P'</SAMP> flag (or the <CODE>prefix=</CODE> option) to rename each
+ <CODE>yyFlexLexer</CODE> to some other <SAMP>`xxFlexLexer'</SAMP>.  You then can
+ include <TT>`FlexLexer.h&#62;'</TT> in your other sources once per lexer class,
+ first renaming <CODE>yyFlexLexer</CODE> as follows:
+ 
+ 
+ <P>
+ <A NAME="IDX237"></A>
+ <A NAME="IDX238"></A>
+ <A NAME="IDX239"></A>
+ 
+ <PRE>
+ @verbatim
+     #undef yyFlexLexer
+     #define yyFlexLexer xxFlexLexer
+     #include &#60;FflexLexer.h&#62;
+ 
+     #undef yyFlexLexer
+     #define yyFlexLexer zzFlexLexer
+     #include FlexLexer.h&#62;
+ </PRE>
+ 
+ <P>
+ if, for example, you used <CODE>%option prefix="xx"</CODE> for one of your
+ scanners and <CODE>%option prefix="zz"</CODE> for the other.
+ 
+ 
+ <P>
+ IMPORTANT: the present form of the scanning class is <EM>experimental</EM>
+ and may change considerably between major releases.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC22" HREF="flex_toc.html#TOC22">Reentrant C Scanners</A></H1>
+ 
+ <P>
+ <A NAME="IDX240"></A>
+ <CODE>flex</CODE> has the ability to generate a reentrant C scanner. This is
+ accomplished by specifying <CODE>%option reentrant</CODE> (<SAMP>`-R'</SAMP>) or
+ <CODE>%option reentrant-bison</CODE> (<SAMP>`-Rb'</SAMP>).  The generated scanner is
+ both portable, and safe to use in one or more separate threads of
+ control.  The most common use for reentrant scanners is from within
+ multi-threaded applications.  Any thread may create and execute a
+ reentrant <CODE>flex</CODE> scanner without the need for synchronization with
+ other threads.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC23" HREF="flex_toc.html#TOC23">Uses for Reentrant Scanners</A></H2>
+ 
+ <P>
+ However, there are other uses for a reentrant scanner.  For example, you
+ could scan two or more files simultaneously to implement a <CODE>diff</CODE> at
+ the token level (i.e., instead of at the character level):
+ 
+ 
+ <P>
+ <A NAME="IDX241"></A>
+ 
+ <PRE>
+ @verbatim
+     /* Example of maintaining more than one active scanner. */
+ 
+     do {
+         int tok1, tok2;
+ 
+         tok1 = yylex( scanner_1 );
+         tok2 = yylex( scanner_2 );
+ 
+         if( tok1 != tok2 )
+             printf("Files are different.");
+ 
+    } while ( tok1 &#38;&#38; tok2 );
+ </PRE>
+ 
+ <P>
+ Another use for a reentrant scanner is recursion.
+ (Note that a recursive scanner can also be created using a non-reentrant scanner and
+ buffer states. See section <A HREF="flex.html#SEC13">Multiple Input Buffers</A>.)
+ 
+ 
+ <P>
+ The following crude scanner supports the <SAMP>`eval'</SAMP> command by invoking
+ another instance of itself.
+ 
+ 
+ <P>
+ <A NAME="IDX242"></A>
+ 
+ <PRE>
+ @verbatim
+     /* Example of recursive invocation. */
+ 
+     %option reentrant
+ 
+     %%
+     "eval(".+")"  {  
+                       yyscan_t scanner;
+                       YY_BUFFER_STATE buf;
+ 
+                       yylex_init( &#38;scanner );
+                       yytext[yyleng-1] = ' '; 
+ 
+                       buf = yy_scan_string( yytext + 5, scanner );
+                       yylex( scanner );
+ 
+                       yy_delete_buffer(buf,scanner);
+                       yylex_destroy( scanner );
+                  }
+     ...
+     %%
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC24" HREF="flex_toc.html#TOC24">An Overview of the Reentrant API</A></H2>
+ 
+ <P>
+ <A NAME="IDX243"></A>
+ The API for reentrant scanners is different than for non-reentrant
+ scanners. Here is a quick overview of the API:
+ 
+ 
+ 
+ <UL>
+ <CODE>%option reentrant</CODE> must be specified.
+ 
+ <LI>
+ 
+ All functions take one additional argument: <CODE>yy_globals</CODE>
+ 
+ <LI>
+ 
+ All global variables are replaced by their macro equivalents.
+ (We tell you this because it may be important to you during debugging.)
+ 
+ <LI>
+ 
+ <CODE>yylex_init</CODE> and <CODE>yylex_destroy</CODE> must be called before and
+ after <CODE>yylex</CODE>, respectively.
+ 
+ <LI>
+ 
+ Accessor methods (get/set functions) provide access to common
+ <CODE>flex</CODE> variables.
+ 
+ <LI>
+ 
+ User-specific data can be stored in <CODE>yyextra</CODE>.
+ </UL>
+ 
+ 
+ 
+ <H2><A NAME="SEC25" HREF="flex_toc.html#TOC25">Reentrant Example</A></H2>
+ 
+ <P>
+ First, an example of a reentrant scanner:
+ <A NAME="IDX244"></A>
+ 
+ <PRE>
+ @verbatim
+     /* This scanner prints "//" comments. */
+     %option reentrant stack
+     %x COMMENT
+     %%
+     "//"                 yy_push_state( COMMENT, yy_globals);
+     .|\n
+     &#60;COMMENT&#62;\n          yy_pop_state( yy_globals );
+     &#60;COMMENT&#62;[^\n]+      fprintf( yyout, "%s\n", yytext);
+     %%
+     int main ( int argc, char * argv[] ) 
+     {
+         yyscan_t scanner;
+         
+         yylex_init ( &#38;scanner );
+         yylex ( scanner );
+         yylex_destroy ( scanner );
+     return 0;
+    }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC26" HREF="flex_toc.html#TOC26">The Reentrant API in Detail</A></H2>
+ 
+ <P>
+ Here are the things you need to do or know to use the reentrant C API of
+ <CODE>flex</CODE>.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC27" HREF="flex_toc.html#TOC27">Declaring a Scanner As Reentrant</A></H3>
+ 
+ <P>
+  %option reentrant (--reentrant) must be specified.
+ 
+ 
+ <P>
+ Notice that <CODE>%option reentrant</CODE> is specified in the above example
+ (see section <A HREF="flex.html#SEC25">Reentrant Example</A>. Had this option not been specified,
+ <CODE>flex</CODE> would have happily generated a non-reentrant scanner without
+ complaining. You may explicitly specify <CODE>%option noreentrant</CODE>, if
+ you do <EM>not</EM> want a reentrant scanner, although it is not
+ necessary. The default is to generate a non-reentrant scanner.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC28" HREF="flex_toc.html#TOC28">The Extra Argument</A></H3>
+ 
+ <P>
+ <A NAME="IDX245"></A>
+ <A NAME="IDX246"></A>
+ All functions take one additional argument: <CODE>yy_globals</CODE>.
+ 
+ 
+ <P>
+ Notice that the calls to <CODE>yy_push_state</CODE> and <CODE>yy_pop_state</CODE>
+ both have an argument, <CODE>yy_globals</CODE> , that is not present in a
+ non-reentrant scanner.  Here are the declarations of
+ <CODE>yy_push_state</CODE> and <CODE>yy_pop_state</CODE> in the generated scanner:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     static void yy_push_state  ( int new_state , yyscan_t yy_globals ) ;
+     static void yy_pop_state  ( yyscan_t yy_globals  ) ;
+ </PRE>
+ 
+ <P>
+ Notice that the argument <CODE>yy_globals</CODE> appears in the declaration of
+ both functions.  In fact, all <CODE>flex</CODE> functions in a reentrant
+ scanner have this additional argument.  It is always the last argument
+ in the argument list, it is always of type <CODE>yyscan_t</CODE> (which is
+ typedef'd to <CODE>void *</CODE>) and it is
+ always named <CODE>yy_globals</CODE>.  As you may have guessed,
+ <CODE>yy_globals</CODE> is a pointer to an opaque data structure encapsulating
+ the current state of the scanner.  For a list of function declarations,
+ see section <A HREF="flex.html#SEC35">Functions and Macros Available in Reentrant C Scanners</A>. Note that preprocessor macros, such as
+ <CODE>BEGIN</CODE>, <CODE>ECHO</CODE>, and <CODE>REJECT</CODE>, do not take this
+ additional argument.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC29" HREF="flex_toc.html#TOC29">Global Variables Replaced By Macros</A></H3>
+ 
+ <P>
+ <A NAME="IDX247"></A>
+ All global variables in traditional flex have been replaced by macro equivalents.
+ 
+ 
+ <P>
+ Note that in the above example, <CODE>yyout</CODE> and <CODE>yytext</CODE> are
+ not plain variables. These are macros that will expand to their equivalent lvalue.
+ All of the familiar <CODE>flex</CODE> globals have been replaced by their macro
+ equivalents. In particular, <CODE>yytext</CODE>, <CODE>yyleng</CODE>, <CODE>yylineno</CODE>,
+ <CODE>yyin</CODE>, <CODE>yyout</CODE>, <CODE>yyextra</CODE>, <CODE>yylval</CODE>, and <CODE>yylloc</CODE>
+ are macros. You may safely use these macros in actions as if they were plain
+ variables. We only tell you this so you don't expect to link to these variables
+ externally. Currently, each macro expands to a member of an internal struct, e.g.,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ #define yytext (((struct yy_globals_t*)yy_globals)-&#62;yytext_r)
+ </PRE>
+ 
+ <P>
+ One important thing to remember about
+ <CODE>yytext</CODE>
+ and friends is that
+ <CODE>yytext</CODE>
+ is not a global variable in a reentrant
+ scanner, you can not access it directly from outside an action or from
+ other functions. You must use an accessor method, e.g., 
+ <CODE>yyget_text</CODE>, 
+ to accomplish this. (See below).
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC30" HREF="flex_toc.html#TOC30">Init and Destroy Functions</A></H3>
+ 
+ <P>
+ <A NAME="IDX248"></A>
+ <A NAME="IDX249"></A>
+ <A NAME="IDX250"></A>
+ <A NAME="IDX251"></A>
+ 
+ 
+ <P>
+ <CODE>yylex_init</CODE> and <CODE>yylex_destroy</CODE> must be called before and
+ after <CODE>yylex</CODE>, respectively.
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     int yylex_init ( yyscan_t * ptr_yy_globals ) ;
+     int yylex ( yyscan_t yy_globals ) ;
+     int yylex_destroy ( yyscan_t yy_globals ) ;
+ </PRE>
+ 
+ <P>
+ The function <CODE>yylex_init</CODE> must be called before calling any other
+ function. The argument to <CODE>yylex_init</CODE> is the address of an
+ uninitialized pointer to be filled in by <CODE>flex</CODE>. The contents of
+ <CODE>ptr_yy_globals</CODE> need not be initialized, since <CODE>flex</CODE> will
+ overwrite it anyway. The value stored in <CODE>ptr_yy_globals</CODE> should
+ thereafter be passed to <CODE>yylex()</CODE> and <B>yylex_destroy()</B>.  Flex
+ does not save the argument passed to <CODE>yylex_init</CODE>, so it is safe to
+ pass the address of a local pointer to <CODE>yylex_init</CODE>.  The function
+ <CODE>yylex</CODE> should be familiar to you by now. The reentrant version
+ takes one argument, which is the value returned (via an argument) by
+ <CODE>yylex_init</CODE>.  Otherwise, it behaves the same as the non-reentrant
+ version of <CODE>yylex</CODE>. 
+ 
+ 
+ <P>
+ The function <CODE>yylex_destroy</CODE> should be
+ called to free resources used by the scanner. After <CODE>yylex_destroy</CODE>
+ is called, the contents of <CODE>yy_globals</CODE> should not be used.  Of
+ course, there is no need to destroy a scanner if you plan to reuse it.
+ A <CODE>flex</CODE> scanner (both reentrant and non-reentrant) may be
+ restarted by calling <CODE>yyrestart</CODE>.
+ 
+ 
+ <P>
+ Below is an example of a program that creates a scanner, uses it, then destroys
+ it when done:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     int main ()
+     {
+         yyscan_t scanner;
+         int tok;
+ 
+         yylex_init(&#38;scanner);
+ 
+         while ((tok=yylex()) &#62; 0)
+             printf("tok=%d  yytext=%s\n", tok, yyget_text(scanner));
+ 
+         yylex_destroy(scanner);
+         return 0;
+     }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC31" HREF="flex_toc.html#TOC31">Accessing Variables with Reentrant Scanners</A></H3>
+ 
+ <P>
+ <A NAME="IDX252"></A>
+ Accessor methods (get/set functions) provide access to common
+ <CODE>flex</CODE> variables.
+ 
+ 
+ <P>
+ Many scanners that you build will be part of a larger project. Portions
+ of your project will need access to <CODE>flex</CODE> values, such as
+ <CODE>yytext</CODE>.  In a non-reentrant scanner, these values are global, so
+ there is no problem accessing them. However, in a reentrant scanner, there are no
+ global <CODE>flex</CODE> values. You can not access them directly.  Instead,
+ you must access <CODE>flex</CODE> values using accessor methods (get/set
+ functions). Each accessor method is named <CODE>yyget_NAME</CODE> or
+ <CODE>yyset_NAME</CODE>, where <CODE>NAME</CODE> is the name of the <CODE>flex</CODE>
+ variable you want. For example:
+ 
+ 
+ <P>
+ <A NAME="IDX253"></A>
+ 
+ <PRE>
+ @verbatim
+     /* Set the last character of yytext to NULL. */
+     void chop ( yyscan_t scanner )
+     {
+         int len = yyget_leng( scanner );        
+         yyget_text( scanner )[len - 1] = '\0';        
+     }
+ </PRE>
+ 
+ <P>
+ The above code may be called from within an action like this:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     %%
+     .+\n    { chop( yy_globals );}
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC32" HREF="flex_toc.html#TOC32">Extra Data</A></H3>
+ 
+ <P>
+ <A NAME="IDX254"></A>
+ <A NAME="IDX255"></A>
+ User-specific data can be stored in <CODE>yyextra</CODE>.
+ 
+ 
+ <P>
+ In a reentrant scanner, it is unwise to use global variables to
+ communicate with or maintain state between different pieces of your program.
+ However, you may need access to external data or invoke external functions
+ from within the scanner actions.
+ Likewise, you may need to pass information to your scanner
+ (e.g., open file descriptors, or database connections).
+ In a non-reentrant scanner, the only way to do this would be through the
+ use of global variables.
+ <CODE>Flex</CODE> allows you to store arbitrary, "extra" data in a scanner.
+ This data is accessible through the accessor methods
+ <CODE>yyget_extra</CODE>
+ and
+ <CODE>yyset_extra</CODE>
+ from outside the scanner, and through the shortcut macro
+ <CODE>yyextra</CODE>
+ from within the scanner itself. They are defined as follows:
+ 
+ 
+ <P>
+ <A NAME="IDX256"></A>
+ <A NAME="IDX257"></A>
+ <A NAME="IDX258"></A>
+ 
+ <PRE>
+ @verbatim
+     #define YY_EXTRA_TYPE  void*
+     YY_EXTRA_TYPE  yyget_extra ( yyscan_t scanner );
+     void           yyset_extra ( YY_EXTRA_TYPE arbitrary_data , yyscan_t scanner);
+ </PRE>
+ 
+ <P>
+ By default, <CODE>YY_EXTRA_TYPE</CODE> is defined as type <CODE>void *</CODE>.  You
+ will have to cast <CODE>yyextra</CODE> and the return value from
+ <CODE>yyget_extra</CODE> to the appropriate value each time you access the
+ extra data.  To avoid casting, you may override the default type by
+ defining <CODE>YY_EXTRA_TYPE</CODE> in section 1 of your scanner:
+ 
+ 
+ <P>
+ <A NAME="IDX259"></A>
+ 
+ <PRE>
+ @verbatim
+     /* An example of overriding YY_EXTRA_TYPE. */
+     %{    
+     #include &#60;sys/stat.h&#62;
+     #include &#60;unistd.h&#62;
+     #define YY_EXTRA_TYPE  struct stat*
+     %}
+     %option reentrant
+     %%
+           
+     __filesize__     printf( "%ld", yyextra-&#62;st_size  );
+     __lastmod__      printf( "%ld", yyextra-&#62;st_mtime );
+     %%
+     void scan_file( char* filename )
+     {
+         yyscan_t scanner;
+         struct stat buf;
+         
+         yylex_init ( &#38;scanner );
+         yyset_in( fopen(filename,"r"), scanner );
+         
+         stat( filename, &#38;buf);
+         yyset_extra( &#38;buf, scanner );
+         yylex ( scanner );
+         yylex_destroy( scanner );
+    }
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC33" HREF="flex_toc.html#TOC33">About yyscan_t</A></H3>
+ 
+ <P>
+ <A NAME="IDX260"></A>
+ <CODE>yyscan_t</CODE> is defined as:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+      typedef void* yyscan_t;
+ </PRE>
+ 
+ <P>
+ It is initialized by <CODE>yylex_init()</CODE> to point to
+ an internal structure. You should never access this value
+ directly. In particular, you should never attempt to free it
+ (use <CODE>yylex_destroy()</CODE> instead.)
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC34" HREF="flex_toc.html#TOC34">Reentrant C Scanners with Bison Pure Parsers</A></H2>
+ 
+ <P>
+ <A NAME="IDX261"></A>
+ <A NAME="IDX262"></A>
+ <A NAME="IDX263"></A>
+ <A NAME="IDX264"></A>
+ <A NAME="IDX265"></A>
+ 
+ 
+ <P>
+ This section describes the <CODE>flex</CODE> features useful when integrating
+ <CODE>flex</CODE> with <CODE>GNU bison</CODE><A NAME="DOCF1" HREF="flex_foot.html#FOOT1">(1)</A>.
+ Skip this section if you are not using
+ <CODE>bison</CODE> with your scanner.  Here we discuss only the <CODE>flex</CODE>
+ half of the <CODE>flex</CODE> and <CODE>bison</CODE> pair.  We do not discuss
+ <CODE>bison</CODE> in any detail.  For more information about generating pure
+ <CODE>bison</CODE> parsers, see section `Top' in <CITE>the GNU Bison Manual</CITE>.
+ 
+ 
+ <P>
+ A <CODE>bison</CODE>-compatible scanner is generated by declaring <SAMP>`%option
+ reentrant-bison'</SAMP> or by supplying <SAMP>`--reentrant-bison'</SAMP> when invoking <CODE>flex</CODE>
+ from the command line.  This instructs <CODE>flex</CODE> that the macros
+ <CODE>yylval</CODE> and <CODE>yylloc</CODE> may be used. The data types for
+ <CODE>yylval</CODE> and <CODE>yylloc</CODE>, (<CODE>YYSTYPE</CODE> and <CODE>YYLTYPE</CODE>,
+ are typically defined in a header file, included in section 1 of the
+ <CODE>flex</CODE> input file.  <CODE>%option reentrant-bison</CODE> implies
+ <CODE>%option reentrant</CODE>.  If <CODE>%option reentrant-bison</CODE> is
+ specified, <CODE>flex</CODE> provides support for the functions
+ <CODE>yyget_lval</CODE>, <CODE>yyset_lval</CODE>, <CODE>yyget_lloc</CODE>, and
+ <CODE>yyset_lloc</CODE>, defined below, and the corresponding macros
+ <CODE>yylval</CODE> and <CODE>yylloc</CODE>, for use within actions.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> YYSTYPE* <B>yyget_lval</B> <I>( yyscan_t scanner )</I>
+ <DD><A NAME="IDX266"></A>
+ </DL>
+ <DL>
+ <DT><U>Function:</U> YYLTYPE* <B>yyget_lloc</B> <I>( yyscan_t scanner )</I>
+ <DD><A NAME="IDX267"></A>
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> void <B>yyset_lval</B> <I>( YYSTYPE* lvalp, yyscan_t scanner )</I>
+ <DD><A NAME="IDX268"></A>
+ </DL>
+ <DL>
+ <DT><U>Function:</U> void <B>yyset_lloc</B> <I>( YYLTYPE* llocp, yyscan_t scanner )</I>
+ <DD><A NAME="IDX269"></A>
+ </DL>
+ 
+ 
+ <P>
+ Accordingly, the declaration of yylex becomes one of the following:
+ 
+ 
+ <P>
+ <A NAME="IDX270"></A>
+ 
+ <PRE>
+ @verbatim
+       int yylex ( YYSTYPE * lvalp, yyscan_t scanner );
+       int yylex ( YYSTYPE * lvalp, YYLTYPE * llocp, yyscan_t scanner );
+ </PRE>
+ 
+ <P>
+ Note that the macros <CODE>yylval</CODE> and <CODE>yylloc</CODE> evaluate to
+ pointers.  Support for <CODE>yylloc</CODE> is optional in <CODE>bison</CODE>, so it
+ is optional in <CODE>flex</CODE> as well. This support is automatically
+ handled by <CODE>flex</CODE>.  Specifically, support for <CODE>yyloc</CODE> is only
+ present in a <CODE>flex</CODE> scanner if the preprocessor symbol
+ <CODE>YYLTYPE</CODE> is defined.  The following is an example of a <CODE>flex</CODE>
+ scanner that is <CODE>bison</CODE>-compatible.
+ 
+ 
+ <P>
+ <A NAME="IDX271"></A>
+ 
+ <PRE>
+ @verbatim
+     /* Scanner for "C" assignment statements... sort of. */
+     %{
+     #include "y.tab.h"  /* Generated by bison. */
+     %}
+   
+     %option reentrant-bison
+     %
+    
+     [[:digit:]]+  { yylval-&#62;num = atoi(yytext);   return NUMBER;}
+     [[:alnum:]]+  { yylval-&#62;str = strdup(yytext); return STRING;}
+     "="|";"       { return yytext[0];}
+     .  {}
+     %
+ </PRE>
+ 
+ <P>
+ As you can see, there really is no magic here. We just use
+ <CODE>yylval</CODE> as we would any other variable. The data type of
+ <CODE>yylval</CODE> is generated by <CODE>bison</CODE>, and included in the file
+ <TT>`y.tab.h'</TT>. Here is the corresponding <CODE>bison</CODE> parser:
+ 
+ 
+ <P>
+ <A NAME="IDX272"></A>
+ 
+ <PRE>
+ @verbatim
+     /* Parser to convert "C" assignments to lisp. */
+     %{
+     /* Pass the argument to yyparse through to yylex. */
+     #define YYPARSE_PARAM scanner
+     #define YYLEX_PARAM   scanner
+     %}
+     %pure_parser
+     %union {
+         int num;
+         char* str;
+     }
+     %token &#60;str&#62; STRING
+     %token &#60;num&#62; NUMBER 
+     %%
+     assignment:
+         STRING '=' NUMBER ';' {
+             printf( "(setf %s %d)", $1, $3 );
+        }
+     ;
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC35" HREF="flex_toc.html#TOC35">Functions and Macros Available in Reentrant C Scanners</A></H2>
+ 
+ <P>
+ The following Functions are available in a reentrant scanner:
+ 
+ 
+ <P>
+ <A NAME="IDX273"></A>
+ <A NAME="IDX274"></A>
+ <A NAME="IDX275"></A>
+ <A NAME="IDX276"></A>
+ <A NAME="IDX277"></A>
+ <A NAME="IDX278"></A>
+ <A NAME="IDX279"></A>
+ <A NAME="IDX280"></A>
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     char *yyget_text ( yyscan_t scanner );
+     int yyget_leng ( yyscan_t scanner );
+     FILE *yyget_in ( yyscan_t scanner );
+     FILE *yyget_out ( yyscan_t scanner );
+     int yyget_lineno ( yyscan_t scanner );
+     YY_EXTRA_TYPE yyget_extra ( yyscan_t scanner );
+ 
+     void yyset_in  ( FILE * in_str , yyscan_t scanner );
+     void yyset_out  ( FILE * out_str , yyscan_t scanner );
+     void yyset_lineno ( int line_number , yyscan_t scanner );
+     void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t scanner );
+ </PRE>
+ 
+ <P>
+ There are no "set" functions for yytext and yyleng. This is intentional.
+ 
+ 
+ <P>
+ The following Macro shortcuts are available in actions in a reentrant
+ scanner:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     yytext
+     yyleng
+     yyin
+     yyout
+     yylineno
+     yyextra
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX281"></A>
+ In a reentrant C scanner, support for yylineno is always present
+ (i.e., you may access yylineno), but the value is never modified by
+ <CODE>flex</CODE> unless <CODE>%option yylineno</CODE> is enabled. This is to allow
+ the user to maintain the line count independently of <CODE>flex</CODE>.
+ 
+ 
+ <P>
+ The following functions and macros are made available when <CODE>%option
+ reentrant-bison</CODE> (<SAMP>`--reentrant-bison'</SAMP>) is specified:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     YYSTYPE * yyget_lval ( yyscan_t scanner );
+     YYLTYPE *yyget_lloc ( yyscan_t scanner );
+     void yyset_lval ( YYSTYPE * yylvalp , yyscan_t scanner );
+     void yyset_lloc ( YYLTYPE * yyllocp , yyscan_t scanner );
+     yylval
+     yylloc
+ </PRE>
+ 
+ <P>
+ Support for yylloc is dependent upon the presence of the preprocessor
+ symbol <CODE>YYLTYPE</CODE>.  Support for yylval relies on the type
+ <CODE>YYSTYPE</CODE> to be defined. Typically, these definitions are generated
+ by <CODE>bison</CODE>, in a .h file, and are included in section 1 of the
+ <CODE>flex</CODE> input.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC36" HREF="flex_toc.html#TOC36">Incompatibilities with Lex and Posix</A></H1>
+ 
+ <P>
+ <A NAME="IDX282"></A>
+ <A NAME="IDX283"></A>
+ 
+ 
+ <P>
+ <CODE>flex</CODE> is a rewrite of the AT&#38;T Unix <EM>lex</EM> tool (the two
+ implementations do not share any code, though), with some extensions and
+ incompatibilities, both of which are of concern to those who wish to
+ write scanners acceptable to both implementations.  <CODE>flex</CODE> is fully
+ compliant with the POSIX <CODE>lex</CODE> specification, except that when
+ using <CODE>%pointer</CODE> (the default), a call to <CODE>unput()</CODE> destroys
+ the contents of <CODE>yytext</CODE>, which is counter to the POSIX
+ specification.  In this section we discuss all of the known areas of
+ incompatibility between <CODE>flex</CODE>, AT&#38;T <CODE>lex</CODE>, and the POSIX
+ specification.  <CODE>flex</CODE>'s <SAMP>`-l'</SAMP> option turns on maximum
+ compatibility with the original AT&#38;T <CODE>lex</CODE> implementation, at the
+ cost of a major loss in the generated scanner's performance.  We note
+ below which incompatibilities can be overcome using the <SAMP>`-l'</SAMP>
+ option.  <CODE>flex</CODE> is fully compatible with <CODE>lex</CODE> with the
+ following exceptions:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ The undocumented <CODE>lex</CODE> scanner internal variable <CODE>yylineno</CODE> is
+ not supported unless <SAMP>`-l'</SAMP> or <CODE>%option yylineno</CODE> is used.
+ 
+ <LI>
+ 
+ <CODE>yylineno</CODE> should be maintained on a per-buffer basis, rather than
+ a per-scanner (single global variable) basis.
+ 
+ <LI>
+ 
+ <CODE>yylineno</CODE> is not part of the POSIX specification.
+ 
+ <LI>
+ 
+ The <CODE>input()</CODE> routine is not redefinable, though it may be called
+ to read characters following whatever has been matched by a rule.  If
+ <CODE>input()</CODE> encounters an end-of-file the normal <CODE>yywrap()</CODE>
+ processing is done.  A "real" end-of-file is returned by
+ <CODE>input()</CODE> as <CODE>EOF</CODE>.
+ 
+ <LI>
+ 
+ Input is instead controlled by defining the <CODE>YY_INPUT()</CODE> macro.
+ 
+ <LI>
+ 
+ The <CODE>flex</CODE> restriction that <CODE>input()</CODE> cannot be redefined is
+ in accordance with the POSIX specification, which simply does not
+ specify any way of controlling the scanner's input other than by making
+ an initial assignment to <TT>`yyin'</TT>.
+ 
+ <LI>
+ 
+ The <CODE>unput()</CODE> routine is not redefinable.  This restriction is in
+ accordance with POSIX.
+ 
+ <LI>
+ 
+ <CODE>flex</CODE> scanners are not as reentrant as <CODE>lex</CODE> scanners.  In
+ particular, if you have an interactive scanner and an interrupt handler
+ which long-jumps out of the scanner, and the scanner is subsequently
+ called again, you may get the following message:
+ 
+ <A NAME="IDX284"></A>
+ 
+ <PRE>
+ @verbatim
+     fatal <CODE>flex</CODE> scanner internal error--end of buffer missed
+ </PRE>
+ 
+ To reenter the scanner, first use:
+ 
+ <A NAME="IDX285"></A>
+ 
+ <PRE>
+ @verbatim
+     yyrestart( yyin );
+ </PRE>
+ 
+ Note that this call will throw away any buffered input; usually this
+ isn't a problem with an interactive scanner. See section <A HREF="flex.html#SEC22">Reentrant C Scanners</A>, for
+ <CODE>flex</CODE>'s reentrant API.
+ 
+ <LI>
+ 
+ Also note that <CODE>flex</CODE> C++ scanner classes
+ <EM>are</EM>
+ reentrant, so if using C++ is an option for you, you should use
+ them instead.  See section <A HREF="flex.html#SEC21">Generating C++ Scanners</A>, and section <A HREF="flex.html#SEC22">Reentrant C Scanners</A>  for details.
+ 
+ <LI>
+ 
+ <CODE>output()</CODE> is not supported.  Output from the <B>ECHO</B> macro is
+ done to the file-pointer <CODE>yyout</CODE> (default <TT>`stdout)'</TT>.
+ 
+ <LI>
+ 
+ <CODE>output()</CODE> is not part of the POSIX specification.
+ 
+ <LI>
+ 
+ <CODE>lex</CODE> does not support exclusive start conditions (%x), though they
+ are in the POSIX specification.
+ 
+ <LI>
+ 
+ When definitions are expanded, <CODE>flex</CODE> encloses them in parentheses.
+ With <CODE>lex</CODE>, the following:
+ 
+ <A NAME="IDX286"></A>
+ 
+ <PRE>
+ @verbatim
+     NAME    [A-Z][A-Z0-9]*
+     %%
+     foo{NAME}?      printf( "Found it\n" );
+     %%
+ </PRE>
+ 
+ will not match the string <SAMP>`foo'</SAMP> because when the macro is expanded
+ the rule is equivalent to <SAMP>`foo[A-Z][A-Z0-9]*?'</SAMP>  and the precedence
+ is such that the <SAMP>`?'</SAMP> is associated with <SAMP>`[A-Z0-9]*'</SAMP>.  With
+ <CODE>flex</CODE>, the rule will be expanded to <SAMP>`foo([A-Z][A-Z0-9]*)?'</SAMP>
+ and so the string <SAMP>`foo'</SAMP> will match.
+ 
+ <LI>
+ 
+ Note that if the definition begins with <SAMP>`^'</SAMP> or ends with <SAMP>`$'</SAMP>
+ then it is <EM>not</EM> expanded with parentheses, to allow these
+ operators to appear in definitions without losing their special
+ meanings.  But the <SAMP>`&#60;s&#62;'</SAMP>, <SAMP>`/'</SAMP>, and <CODE>&#60;&#60;EOF&#62;&#62;</CODE> operators
+ cannot be used in a <CODE>flex</CODE> definition.
+ 
+ <LI>
+ 
+ Using <SAMP>`-l'</SAMP> results in the <CODE>lex</CODE> behavior of no parentheses
+ around the definition.
+ 
+ <LI>
+ 
+ The POSIX specification is that the definition be enclosed in parentheses.
+ 
+ <LI>
+ 
+ Some implementations of <CODE>lex</CODE> allow a rule's action to begin on a
+ separate line, if the rule's pattern has trailing whitespace:
+ 
+ <A NAME="IDX287"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     foo|bar&#60;space here&#62;
+       { foobar_action();}
+ </PRE>
+ 
+ <CODE>flex</CODE> does not support this feature.
+ 
+ <LI>
+ 
+ The <CODE>lex</CODE> <CODE>%r</CODE> (generate a Ratfor scanner) option is not
+ supported.  It is not part of the POSIX specification.
+ 
+ <LI>
+ 
+ After a call to <CODE>unput()</CODE>, <EM>yytext</EM> is undefined until the
+ next token is matched, unless the scanner was built using <CODE>%array</CODE>.
+ This is not the case with <CODE>lex</CODE> or the POSIX specification.  The
+ <SAMP>`-l'</SAMP> option does away with this incompatibility.
+ 
+ <LI>
+ 
+ The precedence of the <SAMP>`{,}'</SAMP> (numeric range) operator is
+ different.  The AT&#38;T and POSIX specifications of <CODE>lex</CODE>
+ interpret <SAMP>`abc{1,3}'</SAMP> as match one, two,
+ or three occurrences of <SAMP>`abc'</SAMP>", whereas <CODE>flex</CODE> interprets it
+ as "match <SAMP>`ab'</SAMP> followed by one, two, or three occurrences of
+ <SAMP>`c'</SAMP>".  The <SAMP>`-l'</SAMP> and <SAMP>`--posix'</SAMP> options do away with this
+ incompatibility.
+ 
+ <LI>
+ 
+ The precedence of the <SAMP>`^'</SAMP> operator is different.  <CODE>lex</CODE>
+ interprets <SAMP>`^foo|bar'</SAMP> as "match either 'foo' at the beginning of a
+ line, or 'bar' anywhere", whereas <CODE>flex</CODE> interprets it as "match
+ either <SAMP>`foo'</SAMP> or <SAMP>`bar'</SAMP> if they come at the beginning of a
+ line".  The latter is in agreement with the POSIX specification.
+ 
+ <LI>
+ 
+ The special table-size declarations such as <CODE>%a</CODE> supported by
+ <CODE>lex</CODE> are not required by <CODE>flex</CODE> scanners..  <CODE>flex</CODE>
+ ignores them.
+ <LI>
+ 
+ The name <CODE>FLEX_SCANNER</CODE> is <CODE>#define</CODE>'d so scanners may be
+ written for use with either <CODE>flex</CODE> or <CODE>lex</CODE>.  Scanners also
+ include <CODE>YY_FLEX_MAJOR_VERSION</CODE> and <CODE>YY_FLEX_MINOR_VERSION</CODE>
+ indicating which version of <CODE>flex</CODE> generated the scanner (for
+ example, for the 2.5 release, these defines would be 2 and 5
+ respectively).
+ </UL>
+ 
+ <P>
+ <A NAME="IDX288"></A>
+ 
+ 
+ <P>
+ The following <CODE>flex</CODE> features are not included in <CODE>lex</CODE> or the
+ POSIX specification:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     C++ scanners
+     %option
+     start condition scopes
+     start condition stacks
+     interactive/non-interactive scanners
+     yy_scan_string() and friends
+     yyterminate()
+     yy_set_interactive()
+     yy_set_bol()
+     YY_AT_BOL()
+    &#60;&#60;EOF&#62;&#62;
+     &#60;*&#62;
+     YY_DECL
+     YY_START
+     YY_USER_ACTION
+     YY_USER_INIT
+     #line directives
+     %{}'s around actions
+     reentrant C API
+     multiple actions on a line
+ </PRE>
+ 
+ <P>
+ plus almost all of the <CODE>flex</CODE> flags.  The last feature in the list
+ refers to the fact that with <CODE>flex</CODE> you can put multiple actions on
+ the same line, separated with semi-colons, while with <CODE>lex</CODE>, the
+ following:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     foo    handle_foo(); ++num_foos_seen;
+ </PRE>
+ 
+ <P>
+ is (rather surprisingly) truncated to
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     foo    handle_foo();
+ </PRE>
+ 
+ <P>
+ <CODE>flex</CODE> does not truncate the action.  Actions that are not enclosed
+ in braces are simply terminated at the end of the line.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC37" HREF="flex_toc.html#TOC37">Diagnostics</A></H1>
+ 
+ <P>
+ <A NAME="IDX289"></A>
+ <A NAME="IDX290"></A>
+ 
+ 
+ <P>
+ The following is a list of <CODE>flex</CODE> diagnostic messages:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ <SAMP>`warning, rule cannot be matched'</SAMP> indicates that the given rule
+ cannot be matched because it follows other rules that will always match
+ the same text as it.  For example, in the following <SAMP>`foo'</SAMP> cannot be
+ matched because it comes after an identifier "catch-all" rule:
+ 
+ <A NAME="IDX291"></A>
+ 
+ <PRE>
+ @verbatim
+     [a-z]+    got_identifier();
+     foo       got_foo();
+ </PRE>
+ 
+ Using <CODE>REJECT</CODE> in a scanner suppresses this warning.
+ 
+ <LI>
+ 
+ <SAMP>`warning, -s option given but default rule can be matched'</SAMP> means
+ that it is possible (perhaps only in a particular start condition) that
+ the default rule (match any single character) is the only one that will
+ match a particular input.  Since <SAMP>`-s'</SAMP> was given, presumably this is
+ not intended.  
+ 
+ <LI>
+ 
+ <CODE>reject_used_but_not_detected undefined</CODE> or
+ <CODE>yymore_used_but_not_detected undefined</CODE>. These errors can occur
+ at compile time.  They indicate that the scanner uses <CODE>REJECT</CODE> or
+ <CODE>yymore()</CODE> but that <CODE>flex</CODE> failed to notice the fact, meaning
+ that <CODE>flex</CODE> scanned the first two sections looking for occurrences
+ of these actions and failed to find any, but somehow you snuck some in
+ (via a #include file, for example).  Use <CODE>%option reject</CODE> or
+ <CODE>%option yymore</CODE> to indicate to <CODE>flex</CODE> that you really do use
+ these features.
+ 
+ <LI>
+ 
+ <SAMP>`flex scanner jammed'</SAMP>. a scanner compiled with
+ <SAMP>`-s'</SAMP> has encountered an input string which wasn't matched by any of
+ its rules.  This error can also occur due to internal problems.
+ 
+ <LI>
+ 
+ <SAMP>`token too large, exceeds YYLMAX'</SAMP>. your scanner uses <CODE>%array</CODE>
+ and one of its rules matched a string longer than the <CODE>YYLMAX</CODE>
+ constant (8K bytes by default).  You can increase the value by
+ #define'ing <CODE>YYLMAX</CODE> in the definitions section of your <CODE>flex</CODE>
+ input.
+ 
+ <LI>
+ 
+ <SAMP>`scanner requires -8 flag to use the character 'x''</SAMP>. Your scanner
+ specification includes recognizing the 8-bit character <SAMP>`'x''</SAMP> and
+ you did not specify the -8 flag, and your scanner defaulted to 7-bit
+ because you used the <SAMP>`-Cf'</SAMP> or <SAMP>`-CF'</SAMP> table compression options.
+ See the discussion of the <SAMP>`-7'</SAMP> flag, section <A HREF="flex.html#SEC18">Invoking Flex</A>, for
+ details.
+ 
+ <LI>
+ 
+ <SAMP>`flex scanner push-back overflow'</SAMP>. you used <CODE>unput()</CODE> to push
+ back so much text that the scanner's buffer could not hold both the
+ pushed-back text and the current token in <CODE>yytext</CODE>.  Ideally the
+ scanner should dynamically resize the buffer in this case, but at
+ present it does not.
+ 
+ <LI>
+ 
+ <SAMP>`input buffer overflow, can't enlarge buffer because scanner uses
+ REJECT'</SAMP>.  the scanner was working on matching an extremely large token
+ and needed to expand the input buffer.  This doesn't work with scanners
+ that use <CODE>REJECT</CODE>.
+ 
+ <LI>
+ 
+ <SAMP>`fatal flex scanner internal error--end of buffer missed'</SAMP>. This can
+ occur in a scanner which is reentered after a long-jump has jumped out
+ (or over) the scanner's activation frame.  Before reentering the
+ scanner, use:
+ 
+ <PRE>
+ @verbatim
+     yyrestart( yyin );
+ </PRE>
+ 
+ or, as noted above, switch to using the C++ scanner class.
+ 
+ <LI>
+ 
+ <SAMP>`too many start conditions in &#60;&#62; construct!'</SAMP>  you listed more start
+ conditions in a &#60;&#62; construct than exist (so you must have listed at
+ least one of them twice).
+ </UL>
+ 
+ 
+ 
+ <H1><A NAME="SEC38" HREF="flex_toc.html#TOC38">Limitations</A></H1>
+ 
+ <P>
+ <A NAME="IDX292"></A>
+ 
+ 
+ <P>
+ Some trailing context patterns cannot be properly matched and generate
+ warning messages (<SAMP>`dangerous trailing context'</SAMP>).  These are
+ patterns where the ending of the first part of the rule matches the
+ beginning of the second part, such as <SAMP>`zx*/xy*'</SAMP>, where the 'x*'
+ matches the 'x' at the beginning of the trailing context.  (Note that
+ the POSIX draft states that the text matched by such patterns is
+ undefined.)  For some trailing context rules, parts which are actually
+ fixed-length are not recognized as such, leading to the abovementioned
+ performance loss.  In particular, parts using <SAMP>`|'</SAMP> or <SAMP>`{n}'</SAMP>
+ (such as <SAMP>`foo{3}'</SAMP>) are always considered variable-length.
+ Combining trailing context with the special <SAMP>`|'</SAMP> action can result
+ in <EM>fixed</EM> trailing context being turned into the more expensive
+ <EM>variable</EM> trailing context.  For example, in the following:
+ 
+ 
+ <P>
+ <A NAME="IDX293"></A>
+ 
+ <PRE>
+ @verbatim
+     %%
+     abc      |
+     xyz/def
+ </PRE>
+ 
+ <P>
+ Use of <CODE>unput()</CODE> invalidates yytext and yyleng, unless the
+ <CODE>%array</CODE> directive or the <SAMP>`-l'</SAMP> option has been used.
+ Pattern-matching of <CODE>NUL</CODE>s is substantially slower than matching
+ other characters.  Dynamic resizing of the input buffer is slow, as it
+ entails rescanning all the text matched so far by the current (generally
+ huge) token.  Due to both buffering of input and read-ahead, you cannot
+ intermix calls to <TT>`&#60;stdio.h&#62;'</TT> routines, such as, <B>getchar()</B>,
+ with <CODE>flex</CODE> rules and expect it to work.  Call <CODE>input()</CODE>
+ instead.  The total table entries listed by the <SAMP>`-v'</SAMP> flag excludes
+ the number of table entries needed to determine what rule has been
+ matched.  The number of entries is equal to the number of DFA states if
+ the scanner does not use <CODE>REJECT</CODE>, and somewhat greater than the
+ number of states if it does.  <CODE>REJECT</CODE> cannot be used with the
+ <SAMP>`-f'</SAMP> or <SAMP>`-F'</SAMP> options.
+ 
+ 
+ <P>
+ The <CODE>flex</CODE> internal algorithms need documentation.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC39" HREF="flex_toc.html#TOC39">Additional Reading</A></H1>
+ 
+ <P>
+ You may wish to read more about the following programs:
+ 
+ <UL>
+ <LI>lex
+ 
+ <LI>yacc
+ 
+ <LI>sed
+ 
+ <LI>awk
+ 
+ </UL>
+ 
+ <P>
+ The following books may contain material of interest:
+ 
+ 
+ <P>
+ John Levine, Tony Mason, and Doug Brown,
+ <EM>Lex &#38; Yacc</EM>,
+ O'Reilly and Associates.  Be sure to get the 2nd edition.
+ 
+ 
+ <P>
+ M. E. Lesk and E. Schmidt,
+ <EM>LEX -- Lexical Analyzer Generator</EM>
+ 
+ 
+ <P>
+ Alfred Aho, Ravi Sethi and Jeffrey Ullman, <EM>Compilers: Principles,
+ Techniques and Tools</EM>, Addison-Wesley (1986).  Describes the
+ pattern-matching techniques used by <CODE>flex</CODE> (deterministic finite
+ automata).
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC40" HREF="flex_toc.html#TOC40">Copyright</A></H1>
+ 
+ <P>
+ <A NAME="IDX294"></A>
+ <A NAME="IDX295"></A>
+ 
+ 
+ <P>
+ The flex manual is placed under the same licensing conditions as the
+ rest of flex:
+ 
+ 
+ <P>
+ Copyright (C) 1990, 1997 The Regents of the University of California.
+ All rights reserved.
+ 
+ 
+ <P>
+ This code is derived from software contributed to Berkeley by
+ Vern Paxson.
+ 
+ 
+ <P>
+ The United States Government has rights in this work pursuant
+ to contract no. DE-AC03-76SF00098 between the United States
+ Department of Energy and the University of California.
+ 
+ 
+ <P>
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ 
+ <LI>
+ 
+ Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ </OL>
+ 
+ <P>
+ Neither the name of the University nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+ 
+ 
+ <P>
+ THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+ IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ PURPOSE.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC41" HREF="flex_toc.html#TOC41">Reporting Bugs</A></H1>
+ 
+ <P>
+ <A NAME="IDX296"></A>
+ 
+ 
+ <P>
+ If you have problems with <CODE>flex</CODE> or think you have found a bug,
+ please send mail detailing your problem to
+ <A HREF="mailto:help-flex@gnu.org">help-flex@gnu.org</A>. Patches are always welcome.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC42" HREF="flex_toc.html#TOC42">FAQ</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC43" HREF="flex_toc.html#TOC43">When was flex born?</A></H2>
+ 
+ <P>
+ When was flex born?
+ 
+ 
+ <P>
+ Vern Paxson took over
+ the Software Tools lex project from Jef Poskanzer in 1982.  At that point it
+ was written in Ratfor.  Around 1987 or so, Paxson translated it into C, and
+ a legend was born :-).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC44" HREF="flex_toc.html#TOC44">How do I expand \ escape sequences in C-style quoted strings?</A></H2>
+ 
+ <P>
+ How do I expand \ escape sequences in C-style quoted strings?
+ 
+ 
+ <P>
+ A key point when scanning quoted strings is that you cannot (easily) write
+ a single rule that will precisely match the string if you allow things
+ like embedded escape sequences and newlines.  If you try to match strings
+ with a single rule then you'll wind up having to rescan the string anyway
+ to find any escape sequences.
+ 
+ 
+ <P>
+ Instead you use exclusive start conditions and a set of rules, one for
+ matching non-escaped text, one for matching a single escape, one for
+ matching an embedded newline, and one for recognizing the end of the
+ string.  Each of these rules is then faced with the question of where to
+ put its intermediary results.  The best solution is for the rules to
+ append their local value of yytext to the end of a "string literal"
+ buffer.  A rule like the escape-matcher will append to the buffer the
+ meaning of the escape sequence rather than the literal text in yytext.
+ In this way, yytext does not need to be modified at all.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC45" HREF="flex_toc.html#TOC45">Why do flex scanners call fileno if it is not ANSI compatible?</A></H2>
+ 
+ <P>
+ Why do flex scanners call fileno if it is not ANSI compatible?
+ 
+ 
+ <P>
+ Flex scanners call fileno() in order to get the file descriptor
+ corresponding to yyin. The file descriptor may be passed to
+ isatty() or read(), depending upon which %options you specified.
+ If your system does not have fileno() support. To get rid of the
+ read() call, do not specify %option read. To get rid of the isatty()
+ call, you must specify one of %option always-interactive or 
+ %option never-interactive.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC46" HREF="flex_toc.html#TOC46">Does flex support recursive pattern definitions?</A></H2>
+ 
+ <P>
+ Does flex support recursive pattern definitions?
+ e.g.,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %%
+ block   "{"({block}|{statement})*"}"
+ </PRE>
+ 
+ <P>
+ No. You cannot have recursive definitions.  The pattern-matching power of 
+ regular expressions in general (and therefore flex scanners, too) is
+ limited.  In particular, regular expressions cannot "balance" parentheses
+ to an arbitrary degree.  For example, it's impossible to write a regular
+ expression that matches all strings containing the same number of '{'s
+ as '}'s.  For more powerful pattern matching, you need a parser, such
+ as GNU bison. 
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC47" HREF="flex_toc.html#TOC47">How do skip huge chunks of input (tens of megabytes) while using flex?</A></H2>
+ 
+ <P>
+ How do skip huge chunks of input (tens of megabytes) while using flex?
+ 
+ 
+ <P>
+ Use fseek (or lseek) to position yyin, then call yyrestart().
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC48" HREF="flex_toc.html#TOC48">Flex is not matching my patterns in the same order that I defined them.</A></H2>
+ 
+ <P>
+ Flex is not matching my patterns in the same order that I defined them.
+ 
+ 
+ <P>
+ This is indeed the natural way to expect it to work, however, flex picks the
+ rule that matches the most text (i.e., the longest possible input string).
+ This is because flex uses an entirely different matching technique
+ ("deterministic finite automata") that actually does all of the matching
+ simultaneously, in parallel.  (Seems impossible, but it's actually a fairly
+ simple technique once you understand the principles.)
+ 
+ 
+ <P>
+ A side-effect of this parallel matching is that when the input matches more
+ than one rule, flex scanners pick the rule that matched the *most* text. This
+ is explained further in the manual, in the section "How the input
+ is Matched".
+ 
+ 
+ <P>
+ If you want flex to choose a shorter match, then you can work around this
+ behavior by expanding your short
+ rule to match more text, then put back the extra:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ data_.*        yyless( 5 ); BEGIN BLOCKIDSTATE;
+ </PRE>
+ 
+ <P>
+ Another fix would be to make the second rule active only during the
+ &#60;BLOCKIDSTATE&#62; start condition, and make that start condition exclusive
+ by declaring it with %x instead of %s.
+ 
+ 
+ <P>
+ A final fix is to change the input language so that the ambiguity for
+ data_ is removed, by adding characters to it that don't match the
+ identifier rule, or by removing characters (such as '_') from the
+ identifier rule so it no longer matches "data_".  (Of course, you might
+ also not have the option of changing the input language ...)
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC49" HREF="flex_toc.html#TOC49">My actions are executing out of order or sometimes not at all.</A></H2>
+ 
+ <P>
+ My actions are executing out of order or sometimes not at all. What's
+ happening?
+ 
+ 
+ <P>
+ Most likely, you have (in error) placed the opening <SAMP>`{'</SAMP> of the action
+ block on a different line than the rule, e.g.,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ ^(foo|bar)
+    {  &#60;&#60;&#60;--- WRONG!
+ 
+    }
+ </PRE>
+ 
+ <P>
+ flex requires that the opening <SAMP>`{'</SAMP> of an action associated with a rule
+ begin on the same line as does the rule.  You need instead to write your rules
+ as follows:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ ^(foo|bar)   {  // CORRECT!
+ 
+     }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC50" HREF="flex_toc.html#TOC50">How can I have multiple input sources feed into the same scanner at the same time?</A></H2>
+ 
+ <P>
+ How can I have multiple input sources feed into the same scanner at
+ the same time?
+ 
+ 
+ <P>
+ If...
+ 
+ <UL>
+ <LI>
+ 
+ your scanner is free of backtracking (verified using flex's -b flag),
+ <LI>
+ 
+ AND you run it interactively (-I option; default unless using special table
+ compression options),
+ <LI>
+ 
+ AND you feed it one character at a time by redefining YY_INPUT to do so,
+ </UL>
+ 
+ <P>
+ then every time it matches a token, it will have exhausted its input
+ buffer (because the scanner is free of backtracking).  This means you
+ can safely use select() at the point and only call yylex() for another
+ token if select() indicates there's data available.
+ 
+ 
+ <P>
+ That is, move the select() out from the input function to a point where
+ it determines whether yylex() gets called for the next token.
+ 
+ 
+ <P>
+ With this approach, you will still have problems if your input can arrive
+ piecemeal; select() could inform you that the beginning of a token is
+ available, you call yylex() to get it, but it winds up blocking waiting
+ for the later characters in the token.
+ 
+ 
+ <P>
+ Here's another way:  Move your input multiplexing inside of YY_INPUT.  That
+ is, whenever YY_INPUT is called, it select()'s to see where input is
+ available.  If input is available for the scanner, it reads and returns the
+ next byte.  If input is available from another source, it calls whatever
+ function is responsible for reading from that source.  (If no input is
+ available, it blocks until some is.)  I've used this technique in an
+ interpreter I wrote that both reads keyboard input using a flex scanner and
+ IPC traffic from sockets, and it works fine.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC51" HREF="flex_toc.html#TOC51">Can I build nested parsers that work with the same input file?</A></H2>
+ 
+ <P>
+ Can I build nested parsers that work with the same input file?
+ 
+ 
+ <P>
+ This is not going to work without some additional effort.  The reason is
+ that flex block-buffers the input it reads from yyin.  This means that the
+ "outermost" yylex(), when called, will automatically slurp up the first 8K
+ of input available on yyin, and subsequent calls to other yylex()'s won't
+ see that input.  You might be tempted to work around this problem by
+ redefining YY_INPUT to only return a small amount of text, but it turns out
+ that that approach is quite difficult.  Instead, the best solution is to
+ combine all of your scanners into one large scanner, using a different
+ exclusive start condition for each.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC52" HREF="flex_toc.html#TOC52">How can I match text only at the end of a file?</A></H2>
+ 
+ <P>
+ How can I match text only at the end of a file?
+ 
+ 
+ <P>
+ There is no way to write a rule which is "match this text, but only if
+ it comes at the end of the file".  You can fake it, though, if you happen
+ to have a character lying around that you don't allow in your input.
+ Then you redefine YY_INPUT to call your own routine which, if it sees
+ an EOF, returns the magic character first (and remembers to return a
+ real EOF next time it's called).  Then you could write:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ &#60;COMMENT&#62;(.|\n)*{EOF_CHAR}    /* saw comment at EOF */
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC53" HREF="flex_toc.html#TOC53">How can I make REJECT cascade across start condition boundaries?</A></H2>
+ 
+ <P>
+ How can I make REJECT cascade across start condition boundaries?
+ 
+ 
+ <P>
+ You can do this as follows.  Suppose you have a start condition A, and
+ after exhausting all of the possible matches in &#60;A&#62;, you want to try
+ matches in &#60;INITIAL&#62;.  Then you could use the following:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %x A
+ %%
+ &#60;A&#62;rule_that_is_long    ...; REJECT;
+ &#60;A&#62;rule                 ...; REJECT; /* shorter rule */
+ &#60;A&#62;etc.
+ ...
+ &#60;A&#62;.|\n  {
+             /* Shortest and last rule in &#60;A&#62;, so
+              * cascaded REJECT's will eventually
+              * wind up matching this rule.  We want
+              * to now switch to the initial state
+              * and try matching from there instead.
+              */
+             yyless(0);    /* put back matched text */
+             BEGIN(INITIAL);
+          }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC54" HREF="flex_toc.html#TOC54">Why can't I use fast or full tables with interactive mode?</A></H2>
+ 
+ <P>
+ Why can't I use fast or full tables with interactive mode?
+ 
+ 
+ <P>
+ One of the assumptions
+ flex makes is that interactive applications are inherently slow (for just
+ that reason, they're waiting on a human).  
+ It has to do with how the scanner detects that it must be finished scanning
+ a token.  For interactive scanners, after scanning each character the current
+ state is looked up in a table (essentially) to see whether there's a chance
+ of another input character possibly extending the length of the match.  If
+ not, the scanner halts.  For non-interactive scanners, the end-of-token test
+ is much simpler, basically a compare with 0, so no memory bus cycles.  Since
+ the test occurs in the innermost scanning loop, one would like to make it go
+ as fast as possible.
+ 
+ 
+ <P>
+ Still, it seems reasonable to allow the user to choose to trade off a bit
+ of performance in this area to gain the corresponding flexibility.  There
+ might be another reason, though, why fast scanners don't support the
+ interactive option 
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC55" HREF="flex_toc.html#TOC55">How much faster is -F or -f than -C?</A></H2>
+ 
+ <P>
+ How much faster is -F or -f than -C?
+ 
+ 
+ <P>
+ Much faster (factor of 2-3).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC56" HREF="flex_toc.html#TOC56">If I have a simple grammar can't I just parse it with flex?</A></H2>
+ 
+ <P>
+ If I have a simple grammar, can't I just parse it with flex?
+ 
+ 
+ <P>
+ Is your grammar recursive? That's almost always a sign that you're
+ better off using a parser/scanner rather than just trying to use a scanner
+ alone.
+ 
+ 
+ <H2><A NAME="SEC57" HREF="flex_toc.html#TOC57">Why doesn't yyrestart() set the start state back to INITIAL?</A></H2>
+ 
+ <P>
+ Why doesn't yyrestart() set the start state back to INITIAL?
+ 
+ 
+ <P>
+ There are two reasons.  The first is that there might
+ be programs that rely on the start state not changing across file changes.
+ The second is that with flex 2.4, use of yyrestart() is no longer required,
+ so fixing the problem there doesn't solve the more general problem.  
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC58" HREF="flex_toc.html#TOC58">How can I match C-style comments?</A></H2>
+ 
+ <P>
+ How can I match C-style comments?
+ 
+ 
+ <P>
+ You might be tempted to try something like this:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ "/*".*"*/"       // WRONG!
+ </PRE>
+ 
+ <P>
+ or, worse, this:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ "/*"(.|\n)"*/"   // WRONG!
+ </PRE>
+ 
+ <P>
+ The above rules will eat too much input, and blow up on things like:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     /* a comment */ do_my_thing( "oops */" );
+ </PRE>
+ 
+ <P>
+ Here is one way which allows you to track line information:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ &#60;INITIAL&#62;{
+     "/*"              BEGIN(IN_COMMENT);
+ }
+ &#60;IN_COMMENT&#62;{
+     "*/"      BEGIN(INITIAL);
+     [^*\n]+   // eat comment in chunks
+     "*"       // eat the lone star
+     \n        yylineno++;
+ }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC59" HREF="flex_toc.html#TOC59">The '.' isn't working the way I expected.</A></H2>
+ 
+ <P>
+ The '.' (dot) isn't working the way I expected.
+ 
+ 
+ <P>
+ Here are some tips for using <SAMP>`.'</SAMP>:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ A common mistake is to place the grouping parenthesis AFTER an operator, when
+ you really meant to place the parenthesis BEFORE the operator, e.g., you
+ probably want this <CODE>(foo|bar)+</CODE> and NOT this <CODE>(foo|bar+)</CODE>.
+ 
+ The first pattern matches the words <CODE>foo</CODE> or <CODE>bar</CODE> any number of
+ times, e.g., it matches the text <CODE>barfoofoobarfoo</CODE>. The
+ second pattern matches a single instance of <CODE>foo</CODE> or a single instance of
+ <CODE>ba</CODE> followed by one or more <SAMP>`r'</SAMP>s, e.g., it matches the text <CODE>barrrr</CODE> .
+ <LI>
+ 
+ A <SAMP>`.'</SAMP> inside []'s just means a literal<SAMP>`.'</SAMP> (period),
+ and NOT "any character except newline".
+ <LI>
+ 
+ Remember that <SAMP>`.'</SAMP> matches any character EXCEPT <SAMP>`\n'</SAMP> (and EOF).
+ If you really want to match ANY character, including newlines, then use <CODE>(.|\n)</CODE>
+ --- Beware that the regex <CODE>(.|\n)+</CODE> will match your entire input!
+ <LI>
+ 
+ Finally, if you want to match a literal <SAMP>`.'</SAMP> (a period), then use [.] or "."
+ </UL>
+ 
+ 
+ 
+ <H2><A NAME="SEC60" HREF="flex_toc.html#TOC60">Can I get the flex manual in another format?</A></H2>
+ 
+ <P>
+ Can I get the flex manual in another format?
+ 
+ 
+ <P>
+ As of flex 2.5, the manual is distributed in texinfo format.
+ You can use the "texi2*" tools to convert the manual to any format
+ you desire (e.g., <SAMP>`texi2html'</SAMP>).
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC61" HREF="flex_toc.html#TOC61">Does there exist a "faster" NDFA-&#62;DFA algorithm?</A></H2>
+ 
+ <P>
+ Does there exist a "faster" NDFA-&#62;DFA algorithm? Most standard texts (e.g.,
+ Aho), imply that NDFA-&#62;DFA can take exponential time, since there are
+ exponential number of potential states in NDFA.
+ 
+ 
+ <P>
+ There's no way around the potential exponential running time - it
+ can take you exponential time just to enumerate all of the DFA states.
+ In practice, though, the running time is closer to linear, or sometimes
+ quadratic.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC62" HREF="flex_toc.html#TOC62">How does flex compile the DFA so quickly?</A></H2>
+ 
+ <P>
+ How does flex compile the DFA so quickly?
+ 
+ 
+ <P>
+ There are two big speed wins that flex uses:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ It analyzes the input rules to construct equivalence classes for those
+ characters that always make the same transitions.  It then rewrites the NFA
+ using equivalence classes for transitions instead of characters.  This cuts
+ down the NFA-&#62;DFA computation time dramatically, to the point where, for
+ uncompressed DFA tables, the DFA generation is often I/O bound in writing out
+ the tables.
+ <LI>
+ 
+ It maintains hash values for previously computed DFA states, so testing
+ whether a newly constructed DFA state is equivalent to a previously constructed
+ state can be done very quickly, by first comparing hash values.
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC63" HREF="flex_toc.html#TOC63">How can I use more than 8192 rules?</A></H2>
+ 
+ <P>
+ How can I use more than 8192 rules?
+ 
+ 
+ <P>
+ Flex is compiled with an upper limit of 8192 rules per scanner. 
+ If you need more than 8192 rules in your scanner, you'll have to recompile flex
+ with the following changes in flexdef.h:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ &#60;    #define YY_TRAILING_MASK 0x2000
+ &#60;    #define YY_TRAILING_HEAD_MASK 0x4000
+ --
+ &#62;    #define YY_TRAILING_MASK 0x20000000
+ &#62;    #define YY_TRAILING_HEAD_MASK 0x40000000
+ </PRE>
+ 
+ <P>
+ This should work okay as long as your C compiler uses 32 bit integers.
+ But you might want to think about whether using such a huge number of rules
+ is the best way to solve your problem.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC64" HREF="flex_toc.html#TOC64">How do I abandon a file in the middle of a scan and switch to a new file?</A></H2>
+ 
+ <P>
+ How do I abandon a file in the middle of a scan and switch to a new file?
+ 
+ 
+ <P>
+ Just all yyrestart(newfile). Be sure to reset the start state if you want a
+ "fresh" start, since yyrestart does NOT reset the start state back to INITIAL.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC65" HREF="flex_toc.html#TOC65">How do I execute code only during initialization (only before the first scan)?</A></H2>
+ 
+ <P>
+ How do I execute code only during initialization (only before the first scan)?
+ 
+ 
+ <P>
+ You can specify an initial action by defining the macro YY_USER_INIT (though
+ note that yyout may not be available at the time this macro is executed).  Or you
+ can add to the beginning of your rules section:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %%
+     /* Must be indented! */
+     static int did_init = 0;
+ 
+     if ( ! did_init ){
+         do_my_init();
+         did_init = 1;
+     }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC66" HREF="flex_toc.html#TOC66">How do I execute code at termination?</A></H2>
+ 
+ <P>
+ How do I execute code at termination (i.e., only after the last scan?)
+ 
+ 
+ <P>
+ You can specifiy an action for the &#60;&#60;EOF&#62;&#62; rule.
+ 
+ 
+ <H2><A NAME="SEC67" HREF="flex_toc.html#TOC67">Where else can I find help?</A></H2>
+ 
+ <P>
+ Where else can I find help?
+ 
+ 
+ <P>
+ The <CODE>help-flex</CODE> email list is served by GNU. See http://www.gnu.org/ for
+ details how to subscribe or search the archives.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC68" HREF="flex_toc.html#TOC68">Can I include comments in the "rules" section of the file file?</A></H2>
+ 
+ <P>
+ Can I include comments in the "rules" section of the file file?
+ 
+ 
+ <P>
+ Yes, just about anywhere you want to. See the manual for the specific syntax.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC69" HREF="flex_toc.html#TOC69">I get an error about undefined yywrap().</A></H2>
+ 
+ <P>
+ I get an error about undefined yywrap().
+ 
+ 
+ <P>
+ You must supply a yywrap() function of your own, or link to libfl.a
+ (which provides one), or use
+ 
+ 
+ <P>
+     %option noyywrap
+ 
+ 
+ <P>
+ in your source to say you don't want a yywrap() function.
+ See the manual page for more details concerning yywrap().
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC70" HREF="flex_toc.html#TOC70">How can I change the matching pattern at run time?</A></H2>
+ 
+ <P>
+ How can I change the matching pattern at run time?
+ 
+ 
+ <P>
+ You can't, it's compiled into a static table when flex builds the scanner.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC71" HREF="flex_toc.html#TOC71">Is there a way to increase the rules (NFA states to a bigger number?)</A></H2>
+ 
+ <P>
+ Is there a way to increase the rules (NFA states to a bigger number?)
+ 
+ 
+ <P>
+ With luck, you should be able to increase the definitions in flexdef.h for:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ #define JAMSTATE -32766 /* marks a reference to the state that always jams */
+ #define MAXIMUM_MNS 31999
+ #define BAD_SUBSCRIPT -32767
+ </PRE>
+ 
+ <P>
+ recompile everything, and it'll all work.  Flex only has these 16-bit-like
+ values built into it because a long time ago it was developed on a machine
+ with 16-bit ints.  I've given this advice to others in the past but haven't
+ heard back from them whether it worked okay or not...
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC72" HREF="flex_toc.html#TOC72">How can I expand macros in the input?</A></H2>
+ 
+ <P>
+ How can I expand macros in the input?
+ 
+ 
+ <P>
+ The best way to approach this problem is at a higher level, e.g., in the parser.
+ 
+ 
+ <P>
+ However, you can do this using multiple input buffers.
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %%
+ macro/[a-z]+   {
+     /* Saw the macro "macro" followed by extra stuff. */
+     main_buffer = YY_CURRENT_BUFFER;
+     expansion_buffer = yy_scan_string(expand(yytext));
+     yy_switch_to_buffer(expansion_buffer);
+     }
+ 
+ &#60;&#60;EOF&#62;&#62;        {
+     if ( expansion_buffer )
+         {
+         // We were doing an expansion, return to where
+         // we were.
+         yy_switch_to_buffer(main_buffer);
+         yy_delete_buffer(expansion_buffer);
+         expansion_buffer = 0;
+         }
+     else
+         yyterminate();
+     }
+ </PRE>
+ 
+ <P>
+ You probably will want a stack of expansion buffers to allow nested macros.
+ From the above though hopefully the idea is clear.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC73" HREF="flex_toc.html#TOC73">How can I build a two-pass scanner?</A></H2>
+ 
+ <P>
+ How can I build a two-pass scanner?
+ 
+ 
+ <P>
+ One way to do it is to filter the first pass to a temporary file,
+ then process the temporary file on the second pass. You will probably see a
+ performance hit, do to all the disk I/O.
+ 
+ 
+ <P>
+ When you need to look ahead far forward like this, it almost always means
+ that the right solution is to build a parse tree of the entire input, then
+ walk it after the parse in order to generate the output.  In a sense, this
+ is a two-pass approach, once through the text and once through the parse
+ tree, but the performance hit for the latter is usually an order of magnitude
+ smaller, since everything is already classified, in binary format, and
+ residing in memory.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC74" HREF="flex_toc.html#TOC74">How do I match any string not matched in the preceding rules?</A></H2>
+ 
+ <P>
+ How do I match any string not matched in the preceding rules?
+ 
+ 
+ <P>
+ One way to assign precedence, is to place the more specific rules first. If
+ two rules would match the same input (same sequence of characters) then the
+ first rule listed in the flex input wins. e.g.,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %%
+ foo[a-zA-Z_]+    return FOO_ID;
+ bar[a-zA-Z_]+    return BAR_ID;
+ [a-zA-Z_]+       return GENERIC_ID;
+ </PRE>
+ 
+ <P>
+ Note that the rule <CODE>[a-zA-Z_]+</CODE> must come *after* the others.  It will match the
+ same amount of text as the more specific rules, and in that case the
+ flex scanner will pick the first rule listed in your scanner as the
+ one to match.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC75" HREF="flex_toc.html#TOC75">I am trying to port code from AT&#38;T lex that uses yysptr and yysbuf.</A></H2>
+ 
+ <P>
+ I am trying to port code from AT&#38;T lex that uses yysptr and yysbuf.
+ 
+ 
+ <P>
+ Those are internal variables pointing into the AT&#38;T scanner's input buffer.  I
+ imagine they're being manipulated in user versions of the input() and unput()
+ functions.  If so, what you need to do is analyze those functions to figure out
+ what they're doing, and then replace input() with an appropriate definition of
+ YY_INPUT (see the flex man page).  You shouldn't need to (and must not) replace
+ flex's unput() function.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC76" HREF="flex_toc.html#TOC76">Is there a way to make flex treat NULL like a regular character?</A></H2>
+ 
+ <P>
+ Is there a way to make flex treat NULL like a regular character?
+ 
+ 
+ <P>
+ Yes, \0 and \x00 should both do the trick.  Perhaps you have an ancient
+ version of flex.  The latest release is version 2.5.8.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC77" HREF="flex_toc.html#TOC77">Whenever flex can not match the input it says "flex scanner jammed".</A></H2>
+ 
+ <P>
+ Whenever flex can not match the input it says "flex scanner jammed".
+ 
+ 
+ <P>
+ You need to add a rule that matches the otherwise-unmatched text.
+ e.g.,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+ %option yylineno
+ %%
+ [[a bunch of rules here]]
+ 
+ .      printf("bad input character '%s' at line %d\n", yytext, yylineno);
+ </PRE>
+ 
+ <P>
+ See %option default for more information.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC78" HREF="flex_toc.html#TOC78">Why doesn't flex have non-greedy operators like perl does?</A></H2>
+ 
+ <P>
+ Why doesn't flex have non-greedy operators like perl does?
+ 
+ 
+ <P>
+ A DFA can do a non-greedy match by stopping
+ the first time it enters an accepting state, instead of consuming input until
+ it determines that no further matching is possible (a "jam" state).  This
+ is actually easier to implement than longest leftmost match (which flex does).
+ 
+ 
+ <P>
+ But it's also much less useful than longest leftmost match.  In general,
+ when you find yourself wishing for non-greedy matching, that's usually a
+ sign that you're trying to make the scanner do some parsing.  That's
+ generally the wrong approach, since it lacks the power to do a decent job.
+ Better is to either introduce a separate parser, or to split the scanner
+ into multiple scanners using (exclusive) start conditions.  
+ 
+ 
+ <P>
+ You might have
+ a separate start state once you've seen the BEGIN. In that state, you
+ might then have a regex that will match END (to kick you out of the
+ state), and perhaps (.|\n) to get a single character within the chunk ...
+ 
+ 
+ <P>
+ This approach also has much better error-reporting properties.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC79" HREF="flex_toc.html#TOC79">Appendices</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC80" HREF="flex_toc.html#TOC80">Makefiles and Flex</A></H2>
+ 
+ <P>
+ <A NAME="IDX297"></A>
+ 
+ 
+ <P>
+ In this appendix, we provide tips for writing Makefiles to build your scanners.
+ 
+ 
+ <P>
+ In a traditional build environment, we say that the <TT>`.c'</TT> files are the
+ sources, and the <TT>`.o'</TT> files are the intermediate files. When using
+ <CODE>flex</CODE>, however, the <TT>`.l'</TT> files are the sources, and the generated
+ <TT>`.c'</TT> files (along with the <TT>`.o'</TT> files) are the intermediate files.
+ This requires you to carefully plan your Makefile.
+ 
+ 
+ <P>
+ Modern @command{make} programs understand that <TT>`foo.l'</TT> is intended to
+ generate <TT>`lex.yy.c'</TT> or <TT>`foo.c'</TT>, and will behave
+ accordingly<A NAME="DOCF2" HREF="flex_foot.html#FOOT2">(2)</A> and GNU @command{automake} are two such
+ programs that provide implicit rules for flex-generated scanners.}.  The
+ following Makefile does not explicitly instruct @command{make} how to build
+ <TT>`foo.c'</TT> from <TT>`foo.l'</TT>. Instead, it relies on the implicit rules of the
+ @command{make} program to build the intermediate file, <TT>`scan.c'</TT>:
+ 
+ 
+ <P>
+ <A NAME="IDX298"></A>
+ 
+ <PRE>
+ @verbatim
+     # Basic Makefile -- relies on implicit rules
+     # Creates "myprogram" from "scan.l" and "myprogram.c"
+     #
+     LEX=flex
+     myprogram: scan.o myprogram.o
+     scan.o: scan.l
+ 
+ </PRE>
+ 
+ <P>
+ For simple cases, the above may be sufficient. For other cases,
+ you may have to explicitly instruct @command{make} how to build your scanner.
+ The following is an example of a Makefile containing explicit rules:
+ 
+ 
+ <P>
+ <A NAME="IDX299"></A>
+ 
+ <PRE>
+ @verbatim
+     # Basic Makefile -- provides explicit rules
+     # Creates "myprogram" from "scan.l" and "myprogram.c"
+     #
+     LEX=flex
+     myprogram: scan.o myprogram.o
+             $(CC) -o $  $(LDFLAGS) $^
+ 
+     myprogram.o: myprogram.c
+             $(CC) $(CPPFLAGS) $(CFLAGS) -o $ -c $^
+ 
+     scan.o: scan.c
+             $(CC) $(CPPFLAGS) $(CFLAGS) -o $ -c $^
+ 
+     scan.c: scan.l
+             $(LEX) $(LFLAGS) -o $ $^
+ 
+     clean:
+             $(RM) *.o scan.c
+ 
+ </PRE>
+ 
+ <P>
+ Notice in the above example that <TT>`scan.c'</TT> is in the <CODE>clean</CODE> target.
+ This is because we consider the file <TT>`scan.c'</TT> to be an intermediate file.
+ 
+ 
+ <P>
+ Finally, we provide a realistic example of a <CODE>flex</CODE> scanner used with a
+ <CODE>bison</CODE> parser<A NAME="DOCF3" HREF="flex_foot.html#FOOT3">(3)</A>.
+ There is a tricky problem we have to deal with. Since a <CODE>flex</CODE> scanner
+ will typically include a header file (e.g., <TT>`y.tab.h'</TT>) generated by the
+ parser, we need to be sure that the header file is generated BEFORE the scanner
+ is compiled. We handle this case in the following example:
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     # Makefile example -- scanner and parser.
+     # Creates "myprogram" from "scan.l", "parse.y", and "myprogram.c"
+     #
+     LEX     = flex
+     YACC    = bison -y
+     YFLAGS  = -d
+     objects = scan.o parse.o myprogram.o
+ 
+     myprogram: $(objects)
+     scan.o: scan.l parse.c
+     parse.o: parse.y
+     myprogram.o: myprogram.c
+ 
+ </PRE>
+ 
+ <P>
+ In the above example, notice the line,
+ 
+ 
+ 
+ <PRE>
+ @verbatim
+     scan.o: scan.l parse.c
+ </PRE>
+ 
+ <P>
+ , which lists the file <TT>`parse.c'</TT> (the generated parser) as a dependency of
+ <TT>`scan.o'</TT>. We want to ensure that the parser is created before the scanner
+ is compiled, and the above line seems to do the trick. Feel free to experiment
+ with your specific implementation of @command{make}.
+ 
+ 
+ <P>
+ For more details on writing Makefiles, see section `Top' in <CITE>The GNU Make Manual</CITE>.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC81" HREF="flex_toc.html#TOC81">Indices</A></H1>
+ 
+ 
+ 
+ <H2><A NAME="SEC82" HREF="flex_toc.html#TOC82">Concept Index</A></H2>
+ <P>
+ <A NAME="IDX300"></A>
+ <A NAME="IDX301"></A>
+ <A NAME="IDX302"></A>
+ <A NAME="IDX303"></A>
+ <A NAME="IDX304"></A>
+ <A NAME="IDX305"></A>
+ <A NAME="IDX306"></A>
+ <A NAME="IDX307"></A>
+ <A NAME="IDX308"></A>
+ <A NAME="IDX309"></A>
+ <A NAME="IDX310"></A>
+ Jump to:
+ <A HREF="#cindex_$">$</A>
+ -
+ <A HREF="#cindex_%">%</A>
+ -
+ <A HREF="#cindex_[">[</A>
+ -
+ <A HREF="#cindex_^">^</A>
+ -
+ <A HREF="#cindex_a">a</A>
+ -
+ <A HREF="#cindex_b">b</A>
+ -
+ <A HREF="#cindex_c">c</A>
+ -
+ <A HREF="#cindex_d">d</A>
+ -
+ <A HREF="#cindex_e">e</A>
+ -
+ <A HREF="#cindex_f">f</A>
+ -
+ <A HREF="#cindex_h">h</A>
+ -
+ <A HREF="#cindex_i">i</A>
+ -
+ <A HREF="#cindex_k">k</A>
+ -
+ <A HREF="#cindex_l">l</A>
+ -
+ <A HREF="#cindex_m">m</A>
+ -
+ <A HREF="#cindex_n">n</A>
+ -
+ <A HREF="#cindex_o">o</A>
+ -
+ <A HREF="#cindex_p">p</A>
+ -
+ <A HREF="#cindex_r">r</A>
+ -
+ <A HREF="#cindex_s">s</A>
+ -
+ <A HREF="#cindex_t">t</A>
+ -
+ <A HREF="#cindex_u">u</A>
+ -
+ <A HREF="#cindex_v">v</A>
+ -
+ <A HREF="#cindex_w">w</A>
+ -
+ <A HREF="#cindex_y">y</A>
+ <P>
+ <H2><A NAME="cindex_$">$</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX303">$ -- see EOL</A>
+ </DIR>
+ <H2><A NAME="cindex_%">%</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX65">%array, use of</A>
+ <LI><A HREF="flex.html#IDX68">%array, with C++</A>
+ <LI><A HREF="flex.html#IDX98">%pointer, caveat with unput()</A>
+ <LI><A HREF="flex.html#IDX66">%pointer, use of</A>
+ <LI><A HREF="flex.html#IDX15">%{ and %}, in Definitions Section</A>
+ <LI><A HREF="flex.html#IDX73">%{ and %}, in Rules Section</A>
+ </DIR>
+ <H2><A NAME="cindex_[">[</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX33">[] in patterns</A>
+ </DIR>
+ <H2><A NAME="cindex_^">^</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX301">^ -- see BOL</A>
+ </DIR>
+ <H2><A NAME="cindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX75">actions, embedded C strings</A>
+ <LI><A HREF="flex.html#IDX69">actions, explanation</A>
+ <LI><A HREF="flex.html#IDX183">actions, redefining YY_BREAK</A>
+ <LI><A HREF="flex.html#IDX74">actions, use of { and }</A>
+ <LI><A HREF="flex.html#IDX308">allocating memory see memory</A>
+ <LI><A HREF="flex.html#IDX201">arguments, command-line</A>
+ <LI><A HREF="flex.html#IDX187">array, default size for yytext</A>
+ </DIR>
+ <H2><A NAME="cindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX208">backing up, example of eliminating</A>
+ <LI><A HREF="flex.html#IDX83">BEGIN</A>
+ <LI><A HREF="flex.html#IDX130">BEGIN, explanation</A>
+ <LI><A HREF="flex.html#IDX300">beginning of line -- see BOL</A>
+ <LI><A HREF="flex.html#IDX310">bison, see also yacc</A>
+ <LI><A HREF="flex.html#IDX261">bison, with reentrant</A>
+ <LI><A HREF="flex.html#IDX56">BOL, ^ as normal character</A>
+ <LI><A HREF="flex.html#IDX181">BOL, checking the BOL flag</A>
+ <LI><A HREF="flex.html#IDX179">BOL, setting it</A>
+ <LI><A HREF="flex.html#IDX42">BOL, syntax of</A>
+ <LI><A HREF="flex.html#IDX296">bugs, reporting</A>
+ </DIR>
+ <H2><A NAME="cindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX218">C++</A>
+ <LI><A HREF="flex.html#IDX189">C++ and %array</A>
+ <LI><A HREF="flex.html#IDX236">C++, multiple different scanners</A>
+ <LI><A HREF="flex.html#IDX53">case-insensitive, effect on character classes</A>
+ <LI><A HREF="flex.html#IDX49">character classes in patterns</A>
+ <LI><A HREF="flex.html#IDX30">character classes in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX51">character classes, equivalence of</A>
+ <LI><A HREF="flex.html#IDX158">clearing an input buffer</A>
+ <LI><A HREF="flex.html#IDX199">command-line options</A>
+ <LI><A HREF="flex.html#IDX103">comments, example of discarding</A>
+ <LI><A HREF="flex.html#IDX135">comments, example of scanning C comments</A>
+ <LI><A HREF="flex.html#IDX24">comments, syntax</A>
+ <LI><A HREF="flex.html#IDX25">comments, valid uses of</A>
+ <LI><A HREF="flex.html#IDX77">commments, in actions</A>
+ <LI><A HREF="flex.html#IDX294">copyright of flex</A>
+ </DIR>
+ <H2><A NAME="cindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX2">default rule</A>
+ <LI><A HREF="flex.html#IDX62">default rule, explanation</A>
+ <LI><A HREF="flex.html#IDX11">Definitions Sections</A>
+ <LI><A HREF="flex.html#IDX295">distributing flex</A>
+ </DIR>
+ <H2><A NAME="cindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX82">ECHO, explanation</A>
+ <LI><A HREF="flex.html#IDX16">embedding C code with %{ and %}</A>
+ <LI><A HREF="flex.html#IDX304">end of file -- see EOF</A>
+ <LI><A HREF="flex.html#IDX302">end of line -- see EOL</A>
+ <LI><A HREF="flex.html#IDX116">EOF and yyrestart()</A>
+ <LI><A HREF="flex.html#IDX45">EOF in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX163">EOF, example using multiple input buffers</A>
+ <LI><A HREF="flex.html#IDX171">EOF, explanation</A>
+ <LI><A HREF="flex.html#IDX101">EOF, pushing back</A>
+ <LI><A HREF="flex.html#IDX43">EOL in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX57">EOL, $ as normal character</A>
+ <LI><A HREF="flex.html#IDX54">EOL, in negated character classes</A>
+ <LI><A HREF="flex.html#IDX289">error reporting, diagnostic messages</A>
+ <LI><A HREF="flex.html#IDX233">error reporting, in C++</A>
+ <LI><A HREF="flex.html#IDX210">error rules, to eliminate backing up</A>
+ <LI><A HREF="flex.html#IDX39">escape sequences in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX109">exiting with yyterminate()</A>
+ </DIR>
+ <H2><A NAME="cindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX6">file format</A>
+ <LI><A HREF="flex.html#IDX1">flex, introduction</A>
+ <LI><A HREF="flex.html#IDX159">flushing an input buffer</A>
+ <LI><A HREF="flex.html#IDX106">flushing the internal buffer</A>
+ <LI><A HREF="flex.html#IDX5">format of the input</A>
+ <LI><A HREF="flex.html#IDX9">format, Definitions Section</A>
+ <LI><A HREF="flex.html#IDX18">format, Rules Section</A>
+ <LI><A HREF="flex.html#IDX21">format, User Code Section</A>
+ <LI><A HREF="flex.html#IDX307">freeing memory -- see memory</A>
+ </DIR>
+ <H2><A NAME="cindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX110">halting with yyterminate()</A>
+ <LI><A HREF="flex.html#IDX238">header files, with C++</A>
+ </DIR>
+ <H2><A NAME="cindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX237">include files, with C++</A>
+ <LI><A HREF="flex.html#IDX17">including C code with %{ and %}</A>
+ <LI><A HREF="flex.html#IDX105">input(), and C++</A>
+ <LI><A HREF="flex.html#IDX102">input(), explanation</A>
+ </DIR>
+ <H2><A NAME="cindex_k">k</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX215">keywords, for performance</A>
+ </DIR>
+ <H2><A NAME="cindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX283">lex (traditional) and POSIX</A>
+ <LI><A HREF="flex.html#IDX292">limitations of flex</A>
+ <LI><A HREF="flex.html#IDX37">literal text in patterns, syntax of</A>
+ </DIR>
+ <H2><A NAME="cindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX306">macros, see preprocessor macros</A>
+ <LI><A HREF="flex.html#IDX297">Makefile, syntax</A>
+ <LI><A HREF="flex.html#IDX309">malloc -- see memory</A>
+ <LI><A HREF="flex.html#IDX219">member functions in C++</A>
+ <LI><A HREF="flex.html#IDX152">memory, allocating input buffers</A>
+ <LI><A HREF="flex.html#IDX248">memory, considerations for reentrant scanners</A>
+ <LI><A HREF="flex.html#IDX156">memory, deleting input buffers</A>
+ <LI><A HREF="flex.html#IDX150">memory, for start condition stacks</A>
+ <LI><A HREF="flex.html#IDX220">methods</A>
+ <LI><A HREF="flex.html#IDX151">multiple input streams</A>
+ </DIR>
+ <H2><A NAME="cindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX35">negating ranges in patterns</A>
+ <LI><A HREF="flex.html#IDX40">NULL character in patterns, syntax of</A>
+ </DIR>
+ <H2><A NAME="cindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX200">options, command-line</A>
+ </DIR>
+ <H2><A NAME="cindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX36">pattern aliases, expansion of</A>
+ <LI><A HREF="flex.html#IDX27">Patterns</A>
+ <LI><A HREF="flex.html#IDX12">patterns aliases, how to define</A>
+ <LI><A HREF="flex.html#IDX61">patterns, how the input is matched</A>
+ <LI><A HREF="flex.html#IDX46">patterns, precedence of operators</A>
+ <LI><A HREF="flex.html#IDX28">patterns, syntax</A>
+ <LI><A HREF="flex.html#IDX206">patterns, tuning for performance</A>
+ <LI><A HREF="flex.html#IDX207">performance, backing up</A>
+ <LI><A HREF="flex.html#IDX202">performance, considerations</A>
+ <LI><A HREF="flex.html#IDX216">performance, using keywords</A>
+ <LI><A HREF="flex.html#IDX282">POSIX and lex</A>
+ <LI><A HREF="flex.html#IDX31">POSIX, character classes in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX288">POSIX, non-POSIX features of flex</A>
+ <LI><A HREF="flex.html#IDX81">preprocessor macros, for use in actions</A>
+ <LI><A HREF="flex.html#IDX96">pushing back characters with unput</A>
+ <LI><A HREF="flex.html#IDX93">pushing back characters with yyless</A>
+ <LI><A HREF="flex.html#IDX100">pushing back EOF</A>
+ </DIR>
+ <H2><A NAME="cindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX32">ranges in patterns</A>
+ <LI><A HREF="flex.html#IDX34">ranges in patterns, negating</A>
+ <LI><A HREF="flex.html#IDX247">reentrant, accessing flex variables</A>
+ <LI><A HREF="flex.html#IDX252">reentrant, accessor functions</A>
+ <LI><A HREF="flex.html#IDX243">reentrant, API explanation</A>
+ <LI><A HREF="flex.html#IDX245">reentrant, calling functions</A>
+ <LI><A HREF="flex.html#IDX244">reentrant, example of</A>
+ <LI><A HREF="flex.html#IDX240">reentrant, explanation</A>
+ <LI><A HREF="flex.html#IDX254">reentrant, extra data</A>
+ <LI><A HREF="flex.html#IDX249">reentrant, initialization</A>
+ <LI><A HREF="flex.html#IDX305">regular expressions -- see Patterns</A>
+ <LI><A HREF="flex.html#IDX85">REJECT, example</A>
+ <LI><A HREF="flex.html#IDX84">REJECT, explanation</A>
+ <LI><A HREF="flex.html#IDX203">REJECT, performance costs</A>
+ <LI><A HREF="flex.html#IDX117">returning from within an action</A>
+ <LI><A HREF="flex.html#IDX20">Rules Section</A>
+ </DIR>
+ <H2><A NAME="cindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX7">sections of the input</A>
+ <LI><A HREF="flex.html#IDX10">sections, Definitions Section</A>
+ <LI><A HREF="flex.html#IDX19">sections, format of Rules Section</A>
+ <LI><A HREF="flex.html#IDX22">sections, User Code Section</A>
+ <LI><A HREF="flex.html#IDX145">stacks, routines for manipulating</A>
+ <LI><A HREF="flex.html#IDX143">start condition, applying to multiple patterns</A>
+ <LI><A HREF="flex.html#IDX44">start conditions in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX121">start conditions, explanation</A>
+ <LI><A HREF="flex.html#IDX124">start conditions, inclusive v.s. exclusive</A>
+ <LI><A HREF="flex.html#IDX137">start conditions, integer values</A>
+ <LI><A HREF="flex.html#IDX127">start conditions, special wildcard condition</A>
+ <LI><A HREF="flex.html#IDX146">start conditions, use of a stack</A>
+ <LI><A HREF="flex.html#IDX115">stdin, default for yyin</A>
+ <LI><A HREF="flex.html#IDX76">strings, in actions</A>
+ <LI><A HREF="flex.html#IDX165">strings, scanning strings instead of files</A>
+ </DIR>
+ <H2><A NAME="cindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX108">terminating with yyterminate()</A>
+ <LI><A HREF="flex.html#IDX41">trailing context in patterns, syntax of</A>
+ <LI><A HREF="flex.html#IDX55">trailing context, limits of</A>
+ <LI><A HREF="flex.html#IDX205">trailing context, performance costs</A>
+ </DIR>
+ <H2><A NAME="cindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX99">unput(), caveat with %pointer</A>
+ <LI><A HREF="flex.html#IDX95">unput(), explanation</A>
+ <LI><A HREF="flex.html#IDX23">User Code Section</A>
+ </DIR>
+ <H2><A NAME="cindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX38">verbatim text in patterns, syntax of</A>
+ </DIR>
+ <H2><A NAME="cindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX290">warnings, diagnostic messages</A>
+ <LI><A HREF="flex.html#IDX71">whitespace, compressing, example</A>
+ </DIR>
+ <H2><A NAME="cindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX196">yacc, interface</A>
+ <LI><A HREF="flex.html#IDX162">YY_CURRENT_BUFFER, and multiple buffers</A>
+ <LI><A HREF="flex.html#IDX118">YY_INPUT, overriding</A>
+ <LI><A HREF="flex.html#IDX139">YY_START, example</A>
+ <LI><A HREF="flex.html#IDX79">yyleng, modification of</A>
+ <LI><A HREF="flex.html#IDX92">yyless(), example</A>
+ <LI><A HREF="flex.html#IDX91">yyless(), explanation</A>
+ <LI><A HREF="flex.html#IDX112">yylex(), in generated scanner</A>
+ <LI><A HREF="flex.html#IDX113">yylex(), overriding</A>
+ <LI><A HREF="flex.html#IDX281">yylineno, in a reentrant scanner</A>
+ <LI><A HREF="flex.html#IDX204">yylineno, performance costs</A>
+ <LI><A HREF="flex.html#IDX89">yymore(), example</A>
+ <LI><A HREF="flex.html#IDX88">yymore(), explanation</A>
+ <LI><A HREF="flex.html#IDX80">yymore, caveat</A>
+ <LI><A HREF="flex.html#IDX107">yyterminate(), explanation</A>
+ <LI><A HREF="flex.html#IDX186">yytext, default array size</A>
+ <LI><A HREF="flex.html#IDX64">yytext, definition of</A>
+ <LI><A HREF="flex.html#IDX78">yytext, modification of</A>
+ <LI><A HREF="flex.html#IDX120">yywrap(), explanation</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC83" HREF="flex_toc.html#TOC83">Index of Functions and Macros</A></H2>
+ 
+ <P>
+ This is an index of functions and preprocessor macros that look like functions.
+ For macros that expand to variables or constants, see section <A HREF="flex.html#SEC84">Index of Variables</A>.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#findex_b">b</A>
+ -
+ <A HREF="#findex_d">d</A>
+ -
+ <A HREF="#findex_l">l</A>
+ -
+ <A HREF="#findex_s">s</A>
+ -
+ <A HREF="#findex_y">y</A>
+ <P>
+ <H2><A NAME="findex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX131">BEGIN</A>
+ </DIR>
+ <H2><A NAME="findex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX225">debug (C++ only)</A>
+ </DIR>
+ <H2><A NAME="findex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX234">LexerError (C++ only)</A>
+ <LI><A HREF="flex.html#IDX231">LexerInput (C++ only)</A>
+ <LI><A HREF="flex.html#IDX232">LexerOutput (C++ only)</A>
+ <LI><A HREF="flex.html#IDX223">lineno (C++ only)</A>
+ </DIR>
+ <H2><A NAME="findex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX224">set_debug (C++ only)</A>
+ <LI><A HREF="flex.html#IDX230">switch_streams (C++ only)</A>
+ </DIR>
+ <H2><A NAME="findex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX182">YY_AT_BOL</A>
+ <LI><A HREF="flex.html#IDX153">yy_create_buffer</A>
+ <LI><A HREF="flex.html#IDX157">yy_delete_buffer</A>
+ <LI><A HREF="flex.html#IDX160">yy_flush_buffer</A>
+ <LI><A HREF="flex.html#IDX161">yy_new_buffer</A>
+ <LI><A HREF="flex.html#IDX172">YY_NEW_FILE  (now obsolete)</A>
+ <LI><A HREF="flex.html#IDX148">yy_pop_state</A>
+ <LI><A HREF="flex.html#IDX147">yy_push_state</A>
+ <LI><A HREF="flex.html#IDX169">yy_scan_buffer</A>
+ <LI><A HREF="flex.html#IDX167">yy_scan_bytes</A>
+ <LI><A HREF="flex.html#IDX166">yy_scan_string</A>
+ <LI><A HREF="flex.html#IDX180">yy_set_bol</A>
+ <LI><A HREF="flex.html#IDX178">yy_set_interactive</A>
+ <LI><A HREF="flex.html#IDX155">yy_switch_to_buffer</A>
+ <LI><A HREF="flex.html#IDX149">yy_top_state</A>
+ <LI><A HREF="flex.html#IDX228">yyFlexLexer constructor (C++ only)</A>
+ <LI><A HREF="flex.html#IDX257">yyget_extra</A>
+ <LI><A HREF="flex.html#IDX275">yyget_in</A>
+ <LI><A HREF="flex.html#IDX274">yyget_leng</A>
+ <LI><A HREF="flex.html#IDX277">yyget_lineno</A>
+ <LI><A HREF="flex.html#IDX267">yyget_lloc</A>
+ <LI><A HREF="flex.html#IDX266">yyget_lval</A>
+ <LI><A HREF="flex.html#IDX276">yyget_out</A>
+ <LI><A HREF="flex.html#IDX273">yyget_text</A>
+ <LI><A HREF="flex.html#IDX222">YYLeng (C++ only)</A>
+ <LI><A HREF="flex.html#IDX229">yylex (C++ version)</A>
+ <LI><A HREF="flex.html#IDX270">yylex (reentrant version)</A>
+ <LI><A HREF="flex.html#IDX251">yylex_destroy</A>
+ <LI><A HREF="flex.html#IDX250">yylex_init</A>
+ <LI><A HREF="flex.html#IDX192">yyrestart</A>
+ <LI><A HREF="flex.html#IDX258">yyset_extra</A>
+ <LI><A HREF="flex.html#IDX278">yyset_in</A>
+ <LI><A HREF="flex.html#IDX280">yyset_lineno</A>
+ <LI><A HREF="flex.html#IDX269">yyset_lloc</A>
+ <LI><A HREF="flex.html#IDX268">yyset_lval</A>
+ <LI><A HREF="flex.html#IDX279">yyset_out</A>
+ <LI><A HREF="flex.html#IDX111">yyterminate</A>
+ <LI><A HREF="flex.html#IDX221">YYText (C++ only)</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC84" HREF="flex_toc.html#TOC84">Index of Variables</A></H2>
+ 
+ <P>
+ This is an index of variables, constants, and preprocessor macros
+ that expand to variables or constants.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#vindex_i">i</A>
+ -
+ <A HREF="#vindex_y">y</A>
+ <P>
+ <H2><A NAME="vindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX132">INITIAL</A>
+ </DIR>
+ <H2><A NAME="vindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX194">YY_CURRENT_BUFFER</A>
+ <LI><A HREF="flex.html#IDX168">YY_END_OF_BUFFER_CHAR</A>
+ <LI><A HREF="flex.html#IDX246">yy_globals (reentrant only)</A>
+ <LI><A HREF="flex.html#IDX176">YY_NUM_RULES</A>
+ <LI><A HREF="flex.html#IDX141">YY_START</A>, <A HREF="flex.html#IDX195">YY_START</A>
+ <LI><A HREF="flex.html#IDX255">yyextra</A>
+ <LI><A HREF="flex.html#IDX191">yyin</A>
+ <LI><A HREF="flex.html#IDX190">yyleng</A>
+ <LI><A HREF="flex.html#IDX263">yylloc</A>
+ <LI><A HREF="flex.html#IDX188">YYLMAX</A>
+ <LI><A HREF="flex.html#IDX262">yylval</A>
+ <LI><A HREF="flex.html#IDX197">yylval, with yacc</A>
+ <LI><A HREF="flex.html#IDX193">yyout</A>
+ <LI><A HREF="flex.html#IDX67">yytext</A>, <A HREF="flex.html#IDX185">yytext</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC85" HREF="flex_toc.html#TOC85">Index of Data Types</A></H2>
+ <P>
+ Jump to:
+ <A HREF="#tindex_f">f</A>
+ -
+ <A HREF="#tindex_y">y</A>
+ <P>
+ <H2><A NAME="tindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX227">FlexLexer (C++ only)</A>
+ </DIR>
+ <H2><A NAME="tindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX154">YY_BUFFER_STATE</A>
+ <LI><A HREF="flex.html#IDX256">YY_EXTRA_TYPE (reentrant only)</A>
+ <LI><A HREF="flex.html#IDX170">yy_size_t</A>
+ <LI><A HREF="flex.html#IDX226">yyFlexLexer (C++ only)</A>
+ <LI><A HREF="flex.html#IDX264">YYLTYPE</A>
+ <LI><A HREF="flex.html#IDX260">yyscan_t (reentrant only)</A>
+ <LI><A HREF="flex.html#IDX265">YYSTYPE</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC86" HREF="flex_toc.html#TOC86">Index of Hooks</A></H2>
+ 
+ <P>
+ This is an index of "hooks" that the user may define. These hooks typically  correspond
+ to specific locations in the generated scanner, and may be used to insert arbitrary code.
+ 
+ 
+ <P>
+ Jump to:
+ <A HREF="#hkindex_y">y</A>
+ <P>
+ <H2><A NAME="hkindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX184">YY_BREAK</A>
+ <LI><A HREF="flex.html#IDX174">YY_USER_ACTION</A>
+ <LI><A HREF="flex.html#IDX177">YY_USER_INIT</A>
+ </DIR>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC87" HREF="flex_toc.html#TOC87">Index of Examples</A></H2>
+ <P>
+ Jump to:
+ <A HREF="#exindex_<">&#60;</A>
+ -
+ <A HREF="#exindex_a">a</A>
+ -
+ <A HREF="#exindex_b">b</A>
+ -
+ <A HREF="#exindex_c">c</A>
+ -
+ <A HREF="#exindex_d">d</A>
+ -
+ <A HREF="#exindex_e">e</A>
+ -
+ <A HREF="#exindex_f">f</A>
+ -
+ <A HREF="#exindex_g">g</A>
+ -
+ <A HREF="#exindex_h">h</A>
+ -
+ <A HREF="#exindex_m">m</A>
+ -
+ <A HREF="#exindex_n">n</A>
+ -
+ <A HREF="#exindex_p">p</A>
+ -
+ <A HREF="#exindex_r">r</A>
+ -
+ <A HREF="#exindex_s">s</A>
+ -
+ <A HREF="#exindex_t">t</A>
+ -
+ <A HREF="#exindex_u">u</A>
+ -
+ <A HREF="#exindex_w">w</A>
+ -
+ <A HREF="#exindex_y">y</A>
+ <P>
+ <H2><A NAME="exindex_<">&#60;</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX173">&#60;&#60;EOF&#62;&#62;, use of</A>
+ </DIR>
+ <H2><A NAME="exindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX253">accessor functions, use of</A>
+ </DIR>
+ <H2><A NAME="exindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX209">backing up, eliminating</A>
+ <LI><A HREF="flex.html#IDX211">backing up, eliminating by adding error rules</A>
+ <LI><A HREF="flex.html#IDX212">backing up, eliminating with catch-all rule</A>
+ <LI><A HREF="flex.html#IDX272">bison, parser</A>
+ <LI><A HREF="flex.html#IDX271">bison, scanner to be called from bison</A>
+ </DIR>
+ <H2><A NAME="exindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX239">C++ scanners, including multiple scanners</A>
+ <LI><A HREF="flex.html#IDX235">C++ scanners, use of</A>
+ <LI><A HREF="flex.html#IDX26">comments in the input</A>
+ <LI><A HREF="flex.html#IDX72">compressing whitespace</A>
+ <LI><A HREF="flex.html#IDX3">counting characters and lines</A>
+ </DIR>
+ <H2><A NAME="exindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX70">deleting lines from input</A>
+ <LI><A HREF="flex.html#IDX104">discarding C comments</A>
+ </DIR>
+ <H2><A NAME="exindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX284">error messages, end of buffer missed</A>
+ <LI><A HREF="flex.html#IDX144">extended scope of start conditions</A>
+ </DIR>
+ <H2><A NAME="exindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX8">format of input file</A>
+ </DIR>
+ <H2><A NAME="exindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX140">getting current start state with YY_START</A>
+ </DIR>
+ <H2><A NAME="exindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX164">handling include files with multiple input buffers</A>
+ </DIR>
+ <H2><A NAME="exindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX298">Makefile, example of implicit rules</A>
+ <LI><A HREF="flex.html#IDX299">Makefile, explicit example</A>
+ <LI><A HREF="flex.html#IDX142">matching C-style double-quoted strings</A>
+ <LI><A HREF="flex.html#IDX63">minimal scanner</A>
+ </DIR>
+ <H2><A NAME="exindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX286">name definitions, not POSIX</A>
+ </DIR>
+ <H2><A NAME="exindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX4">Pascal-like language</A>
+ <LI><A HREF="flex.html#IDX13">pattern aliases, defining</A>
+ <LI><A HREF="flex.html#IDX14">pattern aliases, use of</A>
+ <LI><A HREF="flex.html#IDX287">patterns and actions on different lines</A>
+ <LI><A HREF="flex.html#IDX52">patterns, character class equivalence</A>
+ <LI><A HREF="flex.html#IDX60">patterns, end of line</A>
+ <LI><A HREF="flex.html#IDX47">patterns, grouping and precedence</A>
+ <LI><A HREF="flex.html#IDX58">patterns, invalid trailing context</A>
+ <LI><A HREF="flex.html#IDX48">patterns, repetitions with grouping</A>
+ <LI><A HREF="flex.html#IDX59">patterns, special characters treated as normal</A>
+ <LI><A HREF="flex.html#IDX29">patterns, syntax</A>
+ <LI><A HREF="flex.html#IDX50">patterns, valid character classes</A>
+ <LI><A HREF="flex.html#IDX214">performance optimization, matching longer tokens</A>
+ <LI><A HREF="flex.html#IDX217">performance optimization, recognizing keywords</A>
+ </DIR>
+ <H2><A NAME="exindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX136">recognizing C comments</A>
+ <LI><A HREF="flex.html#IDX241">reentrant scanners, multiple interleaved scanners</A>
+ <LI><A HREF="flex.html#IDX242">reentrant scanners, recursive invocation</A>
+ <LI><A HREF="flex.html#IDX86">REJECT</A>
+ <LI><A HREF="flex.html#IDX87">REJECT, calling multiple times</A>
+ <LI><A HREF="flex.html#IDX285">restarting the scanner</A>
+ </DIR>
+ <H2><A NAME="exindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX122">start conditions, basic</A>
+ <LI><A HREF="flex.html#IDX129">start conditions, behavior of default rule</A>
+ <LI><A HREF="flex.html#IDX126">start conditions, exclusive</A>
+ <LI><A HREF="flex.html#IDX134">start conditions, for different interpretations of same input</A>
+ <LI><A HREF="flex.html#IDX125">start conditions, inclusive</A>
+ <LI><A HREF="flex.html#IDX123">start conditions, multiple</A>
+ <LI><A HREF="flex.html#IDX128">start conditions, use of wildcard condition (&#60;*&#62;)</A>
+ <LI><A HREF="flex.html#IDX133">start conditions, using BEGIN</A>
+ </DIR>
+ <H2><A NAME="exindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX213">trailing context, variable length</A>
+ </DIR>
+ <H2><A NAME="exindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX97">unput() to push back characters</A>
+ <LI><A HREF="flex.html#IDX138">using integer values of start condition names</A>
+ </DIR>
+ <H2><A NAME="exindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX293">warning, dangerous trailing context</A>
+ <LI><A HREF="flex.html#IDX291">warning, rule cannot be matched</A>
+ </DIR>
+ <H2><A NAME="exindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="flex.html#IDX198">yacc interface</A>
+ <LI><A HREF="flex.html#IDX259">YY_EXTRA_TYPE, defining your own type</A>
+ <LI><A HREF="flex.html#IDX119">YY_INPUT, overriding the input mechanism</A>
+ <LI><A HREF="flex.html#IDX175">YY_USER_ACTION to track each time a rule is matched</A>
+ <LI><A HREF="flex.html#IDX94">yyless() to push back characters</A>
+ <LI><A HREF="flex.html#IDX114">yylex, overriding the prototype</A>
+ <LI><A HREF="flex.html#IDX90">yymore() to append token to previous token</A>
+ </DIR>
+ 
+ 
+ <P><HR><P>
+ This document was generated on 2 July 2002 using
+ <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+ </BODY>
+ </HTML>


ossp-adm/autotools/lex.pdf is a binary file


ossp-adm/autotools/lexyacc-code.zip is a binary file


ossp-adm/autotools/lexyacc.pdf is a binary file


ossp-adm/autotools/lexyacc.ps -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,18618 ----
+ %!PS-Adobe-3.0
+ %%Title: (A Guide to Lex & Yacc)
+ %%Version: 1 2
+ %%Creator: (Microsoft Word 9.0)
+ %%CreationDate: (D:20010722204043)
+ %%For: (Thomas Niemann)
+ %%DocumentData: Clean7Bit
+ %%LanguageLevel: 2
+ %%BoundingBox: 0 0 612 792
+ %%Pages: 39
+ %%DocumentProcessColors: (atend)
+ %%DocumentNeededResources: (atend)
+ %%DocumentSuppliedResources: (atend)
+ %%EndComments
+ %%BeginDefaults
+ %%EndDefaults
+ % Removing the following five lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 297cf25e88dd30ad0d765f74ea031713dd819da0977424e8dc1394394c20
+ 3357dbf038e41b397af0906ddfc7b441ac04d35b3c5bf8b072a6fdc7285d
+ eb12fc6fa5645278f23b97f6fa3437451e375019c2291d0363be33411e8f
+ 6b8d6a20a5234de67e2061763b5ddcbf22f063da2a8302c832aa41
+ %%BeginProlog
+ %%EndProlog
+ %%BeginSetup
+ %%BeginResource: l2check
+ %%Copyright: Copyright 1993 Adobe Systems Incorporated. All Rights Reserved.
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 1 eq }
+ { true }
+ ifelse
+ {
+ initgraphics /Helvetica findfont 18 scalefont setfont
+ 72 600 moveto (Error: Your printer driver needs to be configured) dup show
+ 72 580 moveto (for printing to a PostScript Language Level 1 printer.) dup show
+ exch = =
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 520 moveto (Windows and Unix) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 500 moveto (Select ªLanguage Level 1º in the PostScript options section) show
+ 72 480 moveto (of the Acrobat print dialog.) show
+ /Helvetica-Bold findfont 16 scalefont setfont
+ 72 440 moveto (Macintosh) show
+ /Times-Roman findfont 16 scalefont setfont
+ 72 420 moveto (In the Chooser, select your printer driver.) show
+ 72 400 moveto (Then select your printer and click the Setup button.) show
+ 72 380 moveto (Follow any on-screen dialogs that may appear.) show
+ showpage
+ quit
+ }
+ if
+ %%EndResource
+ /currentpacking where{pop currentpacking true setpacking}if
+ %%BeginResource: procset pdfvars
+ %%Copyright: Copyright 1987-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 4.0 2
+ %%Title: definition of dictionary of variables used by PDF & PDFText procsets
+ userdict /PDF 160 dict put
+ userdict /PDFVars 86 dict dup begin put
+ /_save 0 def
+ /_cshow 0 def
+ /InitAll 0 def
+ /TermAll 0 def
+ /DocInitAll 0 def
+ /DocTermAll 0 def
+ /_lp /none def
+ /_doClip 0 def
+ /sfc 0 def
+ /_sfcs 0 def
+ /_sfc 0 def
+ /ssc 0 def
+ /_sscs 0 def
+ /_ssc 0 def
+ /_fcs 0 def
+ /_scs 0 def
+ /_fp 0 def
+ /_sp 0 def
+ /AGM_MAX_CS_COMPONENTS 10 def
+ /_fillColors [ 0 1 AGM_MAX_CS_COMPONENTS { array } for ] def
+ /_strokeColors [ 0 1 AGM_MAX_CS_COMPONENTS { array } for ] def
+ /_fc null def
+ /_sc null def
+ /DefaultGray [/DeviceGray] def
+ /DefaultRGB [/DeviceRGB] def
+ /DefaultCMYK [/DeviceCMYK] def
+ /_inT false def
+ /_tr -1 def
+ /_rise 0 def
+ /_ax 0 def
+ /_cx 0 def
+ /_ld 0 def
+ /_tm matrix def
+ /_ctm matrix def
+ /_mtx matrix def
+ /_hy (-) def
+ /_fScl 0 def
+ /_hs 1 def
+ /_pdfEncodings 2 array def
+ /_baselineadj 0 def
+ /_fTzero false def
+ /_Tj 0 def
+ /_italMtx [1 0 .212557 1 0 0] def
+ /_italMtx_WMode1 [1 -.212557 0 1 0 0] def
+ /_italMtxType0 [1 0 .1062785 1 0 0] def
+ /_italMtx_WMode1Type0 [1 -.1062785 0 1 0 0] def
+ /_basefont 0 def
+ /_basefonto 0 def
+ /_pdf_oldCIDInit null def
+ /_pdf_FontDirectory 30 dict def
+ /_categories 10 dict def
+ /_sa? true def
+ /_op? false def
+ /_OP? false def
+ /_opmode 0 def
+ /_ColorSep5044? false def
+ /_tmpcolr? [] def
+ /_tmpop? {} def
+ /_processColors 0 def
+ /_defaulttransfer currenttransfer def
+ /_defaultflatness currentflat def
+ /_defaulthalftone null def
+ /_defaultcolortransfer null def
+ /_defaultblackgeneration null def
+ /_defaultundercolorremoval null def
+ /_defaultcolortransfer null def
+ end
+ %%EndResource
+ PDFVars begin PDF begin
+ %%BeginResource: procset pdfutil
+ %%Copyright: Copyright 1993-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Version: 4.0 2
+ %%Title: Basic utilities used by other PDF procsets
+ /bd {bind def} bind def
+ /ld {load def} bd
+ /bld {
+ dup length dict begin
+ { null def } forall
+ bind
+ end
+ def
+ } bd
+ /dd { PDFVars 3 1 roll put } bd
+ /xdd { exch dd } bd
+ /Level2?
+ systemdict /languagelevel known
+ { systemdict /languagelevel get 2 ge } { false } ifelse
+ def
+ /Level3?
+ systemdict /languagelevel known
+ {systemdict /languagelevel get 3 eq } { false } ifelse
+ def
+ /getifknown {
+ 2 copy known { get true } { pop pop false } ifelse
+ } bd
+ /here {
+ currentdict exch getifknown
+ } bd
+ /isdefined? { where { pop true } { false } ifelse } bd
+ /StartLoad { dup dup not { /_save save dd } if } bd
+ /EndLoad { if not { _save restore } if } bd
+ %%EndResource
+ %%BeginResource: procset pdf
+ %%Version: 4.0 3
+ %%Copyright: Copyright 1998-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: General operators for PDF, common to all Language Levels.
+ [/b/B/b*/B*/BDC/BI/BMC/BT/BX/c/cm/cs/CS/d/d0/d1/Do/DP/EI/EMC/ET/EX/f/f*/g/G/gs
+ /h/i/j/J/k/K/l/m/M/MP/n/q/Q/re/rg/RG/ri/s/S/sc/SC/scn/SCN/sg/Tc/Td/TD/Tf/Tj/TJ
+ /TL/Tm/Tr/Ts/Tw/Tz/T*/v/w/W/W*/y/'/"
+ /applyInterpFunc/applystitchFunc/domainClip/EF/encodeInput/gsDI/ilp/icl
+ /initgs/int/limit/PS/rangeClip/RC/rf/makePat/csfamily 
+ /? /! /| /: /+ /GetGlyphDirectory
+ ] {null def} bind forall
+ /v { currentpoint 6 2 roll c } bd
+ /y { 2 copy c } bd
+ /h/closepath ld
+ /d/setdash ld
+ /j/setlinejoin ld
+ /J/setlinecap ld
+ /M/setmiterlimit ld
+ /w/setlinewidth ld
+ /i {
+ dup 0 eq { pop _defaultflatness } if
+ setflat
+ } bd
+ /gsDI {
+ begin
+ /OP here { /_OP? xdd } if
+ /op here { /_op? xdd }
+ { /OP here { /_op? xdd } if }
+ ifelse
+ /OPM here { /_opmode xdd } if
+ /Font here { aload pop Tf } if
+ /LW here { w } if
+ /LC here { J } if
+ /LJ here { j } if
+ /ML here { M } if
+ /D here { aload pop d } if
+ end
+ } bd
+ /ilp { /_lp /none dd } bd
+ /icl { /_doClip 0 dd } bd
+ /W { /_doClip 1 dd } bd
+ /W* { /_doClip 2 dd } bd
+ /n {
+ {{} {clip} {eoclip}} _doClip get exec
+ icl
+ newpath
+ } bd
+ /s { h S } bd
+ /B { q f Q S } bd
+ /B* { q f* Q S } bd
+ /b { h B } bd
+ /b* { h B* } bd
+ /q/save ld
+ /Q { restore ilp } bd
+ /GetCSFamily {
+ dup type /arraytype eq {0 get} if
+ } bd
+ /GetCompsDict
+ 11 dict begin
+ /DeviceGray { pop 1 } bd
+ /DeviceRGB { pop 3 } bd
+ /DeviceCMYK { pop 4 } bd
+ /CIEBasedA { pop 1 } bd
+ /CIEBasedABC { pop 3 } bd
+ /CIEBasedDEF { pop 3 } bd
+ /CIEBasedDEFG { pop 4 } bd
+ /DeviceN { 1 get length } bd
+ /Separation { pop 1 } bd
+ /Indexed { pop 1 } bd
+ /Pattern { pop 0 } bd
+ currentdict
+ end
+ def
+ /GetComps {
+ GetCompsDict
+ 1 index GetCSFamily
+ get exec
+ } bd
+ /cs
+ {
+ dup _fcs eq
+ { pop }
+ { dup /_fcs xdd
+ GetComps
+ _fillColors exch get
+ /_fc xdd
+ /_fp null dd
+ } ifelse
+ } bd
+ /CS
+ {
+ dup _scs eq
+ { pop }
+ { dup /_scs xdd GetComps _strokeColors exch get /_sc xdd /_sp null dd }
+ ifelse
+ } bd
+ /sc {
+ _fc astore pop
+ ilp
+ } bd
+ /SC {
+ _sc astore pop
+ ilp
+ } bd
+ /g { DefaultGray cs sc } bd
+ /rg { DefaultRGB cs sc } bd
+ /k { DefaultCMYK cs sc } bd
+ /G { DefaultGray CS SC } bd
+ /RG { DefaultRGB CS SC } bd
+ /K { DefaultCMYK CS SC } bd
+ /cm { _mtx astore concat } bd
+ /re {
+ 4 2 roll m
+ 1 index 0 rlineto
+ 0 exch rlineto
+ neg 0 rlineto
+ h
+ } bd
+ /RC/rectclip ld
+ /EF/execform ld
+ /PS { cvx exec } bd
+ /initgs {
+ /DefaultGray [/DeviceGray] dd
+ /DefaultRGB [/DeviceRGB] dd
+ /DefaultCMYK [/DeviceCMYK] dd
+ 0 g 0 G
+ [] 0 d
+ 0 j
+ 0 J
+ 10 M
+ 1 w
+ true setSA
+ /_op? false dd
+ /_OP? false dd
+ /_opmode 0 dd
+ /_defaulttransfer load settransfer
+ 0 i
+ /RelativeColorimetric ri
+ newpath
+ } bd
+ /int {
+ dup 2 index sub 3 index 5 index sub div 6 -2 roll sub mul
+ exch pop add exch pop
+ } bd
+ /limit {
+ dup 2 index le { exch } if pop
+ dup 2 index ge { exch } if pop
+ } bd
+ /domainClip {
+ Domain aload pop 3 2 roll
+ limit
+ } [/Domain] bld
+ /applyInterpFunc {
+ 0 1 DimOut 1 sub
+ {
+ dup C0 exch get exch
+ dup C1 exch get exch
+ 3 1 roll
+ 1 index sub
+ 3 index
+ N exp mul add
+ exch
+ currentdict /Range_lo known
+ {
+ dup Range_lo exch get exch
+ Range_hi exch get
+ 3 2 roll limit
+ }
+ {
+ pop
+ }
+ ifelse
+ exch
+ } for
+ pop
+ } [/DimOut /C0 /C1 /N /Range_lo /Range_hi] bld
+ /encodeInput {
+ NumParts 1 sub
+ 0 1 2 index
+ {
+ dup Bounds exch get
+ 2 index gt
+ { exit }
+ { dup
+ 3 index eq
+ { exit }
+ { pop } ifelse
+ } ifelse
+ } for
+ 3 2 roll pop
+ dup Bounds exch get exch
+ dup 1 add Bounds exch get exch
+ 2 mul
+ dup Encode exch get exch
+ 1 add Encode exch get
+ int
+ } [/NumParts /Bounds /Encode] bld
+ /rangeClip {
+ exch dup Range_lo exch get
+ exch Range_hi exch get
+ 3 2 roll
+ limit
+ } [/Range_lo /Range_hi] bld
+ /applyStitchFunc {
+ Functions exch get exec
+ currentdict /Range_lo known {
+ 0 1 DimOut 1 sub {
+ DimOut 1 add -1 roll
+ rangeClip
+ } for
+ } if
+ } [/Functions /Range_lo /DimOut] bld
+ %%EndResource
+ %%BeginResource: procset pdflev2
+ %%Version: 4.0 5
+ %%Copyright: Copyright 1987-1999 Adobe Systems Incorporated. All Rights Reserved.
+ %%LanguageLevel: 2
+ %%Title: PDF operators, with code specific for Level 2
+ /_defaulthalftone currenthalftone dd
+ /_defaultblackgeneration currentblackgeneration dd
+ /_defaultundercolorremoval currentundercolorremoval dd
+ /_defaultcolortransfer [currentcolortransfer] dd
+ /initialize {
+ _defaulthalftone sethalftone
+ /_defaultblackgeneration load setblackgeneration
+ /_defaultundercolorremoval load setundercolorremoval
+ _defaultcolortransfer aload pop setcolortransfer
+ false setoverprint
+ <</MaxFormItem 0>> setuserparams
+ } bd
+ /terminate { } bd
+ /m/moveto ld
+ /l/lineto ld
+ /c/curveto ld
+ /setSA/setstrokeadjust ld
+ /defineRes/defineresource ld
+ /findRes/findresource ld
+ currentglobal
+ true systemdict /setglobal get exec
+ [/Function /ExtGState /Form /Shading /FunctionDictionary /MadePattern /PatternPrototype /DataSource]
+ { /Generic /Category findresource dup length dict copy /Category defineresource pop }
+ forall
+ systemdict /setglobal get exec
+ /ri
+ {
+ /findcolorrendering isdefined?
+ {
+ mark exch
+ findcolorrendering
+ counttomark 2 eq
+ { type /booleantype eq
+ { dup type /nametype eq
+ { dup /ColorRendering resourcestatus
+ { pop pop
+ dup /DefaultColorRendering ne
+ {
+ /ColorRendering findresource
+ setcolorrendering
+ } if
+ } if
+ } if
+ } if
+ } if
+ cleartomark
+ }
+ { pop
+ } ifelse
+ } bd
+ /_sfcs {_fcs setcolorspace} bind dd
+ /_sscs {_scs setcolorspace} bind dd
+ /_sfc
+ {
+ _fc aload pop
+ _fp null eq
+ { setcolor }
+ { _fp setpattern }
+ ifelse
+ } bind dd
+ /_ssc
+ {
+ _sc aload pop
+ _sp null eq { setcolor} { _sp setpattern } ifelse
+ } bind dd
+ /scn {
+ dup type /dicttype eq
+ { dup /_fp xdd
+ /PaintType get 1 eq
+ { /_fc _fillColors 0 get dd ilp }
+ { /_fc _fillColors
+ _fcs 1 get
+ GetComps get dd
+ sc
+ }
+ ifelse
+ }
+ { sc }
+ ifelse
+ } bd
+ /SCN {
+ dup type /dicttype eq
+ { dup /_sp xdd
+ /PaintType get 1 eq
+ { /_sc _strokeColors 0 get dd ilp }
+ { /_sc _strokeColors _scs 1 get GetComps get dd
+ SC
+ }
+ ifelse
+ }
+ { SC }
+ ifelse
+ } bd
+ /gs
+ {
+ begin
+ /SA here { setstrokeadjust } if
+ /BG here { setblackgeneration } if
+ /UCR here { setundercolorremoval } if
+ /FL here { i } if
+ /RI here { ri } if
+ /TR here
+ {
+ dup xcheck
+ { settransfer }
+ { aload pop setcolortransfer }
+ ifelse
+ } if
+ /sethalftonephase isdefined? { /HTP here { sethalftonephase } if } if
+ /HT here { sethalftone } if
+ currentdict gsDI
+ end
+ } bd
+ /sfc {
+ _op? setoverprint
+ _lp /fill ne {
+ _sfcs
+ _sfc
+ /_lp /fill dd
+ } if
+ } dd
+ /ssc {
+ _OP? setoverprint
+ _lp /stroke ne {
+ _sscs
+ _ssc
+ /_lp /stroke dd
+ } if
+ } dd
+ /f {
+ { { sfc fill }
+ {gsave sfc fill grestore clip newpath icl ilp}
+ {gsave sfc fill grestore eoclip newpath icl ilp}
+ } _doClip get exec
+ } bd
+ /f* {
+ { { sfc eofill }
+ {gsave sfc eofill grestore clip newpath icl ilp}
+ {gsave sfc eofill grestore eoclip newpath icl ilp}
+ } _doClip get exec
+ } bd
+ /S {
+ { { ssc stroke }
+ {gsave ssc stroke grestore clip newpath icl ilp}
+ {gsave ssc stroke grestore eoclip newpath icl ilp}
+ } _doClip get exec
+ } bd
+ /rf {
+ { { sfc rectfill }
+ {gsave sfc rectfill grestore clip newpath icl ilp}
+ {gsave sfc rectfill grestore eoclip newpath icl ilp}
+ } _doClip get exec
+ } bd
+ /knownColorants? {
+ pop false
+ } bd
+ /makePat {
+ gsave
+ dup /Matrix get concat
+ matrix makepattern
+ grestore
+ /MadePattern defineRes pop
+ } bd
+ %%EndResource
+ %%BeginResource: procset pdftext
+ %%Version: 4.0 2
+ %%Copyright: Copyright 1987-1998 Adobe Systems Incorporated. All Rights Reserved.
+ %%Title: Text operators for PDF
+ PDF /PDFText 75 dict dup begin put
+ /docinitialize
+ {
+ /resourcestatus where {
+ pop
+ /CIDParams /ProcSet resourcestatus {
+ pop pop
+ false /CIDParams /ProcSet findresource /SetBuildCompatible get exec
+ } if
+ } if
+ PDF begin
+ PDFText /_pdfDefineIdentity-H known
+ { PDFText /_pdfDefineIdentity-H get exec}
+ if
+ end
+ } bd
+ /initialize {
+ PDFText begin
+ /_intT false dd
+ 0 Tr
+ } bd
+ /terminate { end } bd
+ /_safeput
+ {
+ Level2? not
+ {
+ 2 index load dup dup length exch maxlength ge
+ { dup length 5 add dict copy
+ 3 index xdd
+ }
+ { pop }
+ ifelse
+ }
+ if
+ 3 -1 roll load 3 1 roll put
+ }
+ bd
+ /pdf_has_composefont? systemdict /composefont known def
+ /CopyFont {
+ {
+ 1 index /FID ne 2 index /UniqueID ne and
+ { def } { pop pop } ifelse
+ } forall
+ } bd
+ /Type0CopyFont
+ {
+ exch
+ dup length dict
+ begin
+ CopyFont
+ [
+ exch
+ FDepVector
+ {
+ dup /FontType get 0 eq
+ {
+ 1 index Type0CopyFont
+ /_pdfType0 exch definefont
+ }
+ {
+ /_pdfBaseFont exch
+ 2 index exec
+ }
+ ifelse
+ exch
+ }
+ forall
+ pop
+ ]
+ /FDepVector exch def
+ currentdict
+ end
+ } bd
+ /cHexEncoding
+ [/c00/c01/c02/c03/c04/c05/c06/c07/c08/c09/c0A/c0B/c0C/c0D/c0E/c0F/c10/c11/c12
+ /c13/c14/c15/c16/c17/c18/c19/c1A/c1B/c1C/c1D/c1E/c1F/c20/c21/c22/c23/c24/c25
+ /c26/c27/c28/c29/c2A/c2B/c2C/c2D/c2E/c2F/c30/c31/c32/c33/c34/c35/c36/c37/c38
+ /c39/c3A/c3B/c3C/c3D/c3E/c3F/c40/c41/c42/c43/c44/c45/c46/c47/c48/c49/c4A/c4B
+ /c4C/c4D/c4E/c4F/c50/c51/c52/c53/c54/c55/c56/c57/c58/c59/c5A/c5B/c5C/c5D/c5E
+ /c5F/c60/c61/c62/c63/c64/c65/c66/c67/c68/c69/c6A/c6B/c6C/c6D/c6E/c6F/c70/c71
+ /c72/c73/c74/c75/c76/c77/c78/c79/c7A/c7B/c7C/c7D/c7E/c7F/c80/c81/c82/c83/c84
+ /c85/c86/c87/c88/c89/c8A/c8B/c8C/c8D/c8E/c8F/c90/c91/c92/c93/c94/c95/c96/c97
+ /c98/c99/c9A/c9B/c9C/c9D/c9E/c9F/cA0/cA1/cA2/cA3/cA4/cA5/cA6/cA7/cA8/cA9/cAA
+ /cAB/cAC/cAD/cAE/cAF/cB0/cB1/cB2/cB3/cB4/cB5/cB6/cB7/cB8/cB9/cBA/cBB/cBC/cBD
+ /cBE/cBF/cC0/cC1/cC2/cC3/cC4/cC5/cC6/cC7/cC8/cC9/cCA/cCB/cCC/cCD/cCE/cCF/cD0
+ /cD1/cD2/cD3/cD4/cD5/cD6/cD7/cD8/cD9/cDA/cDB/cDC/cDD/cDE/cDF/cE0/cE1/cE2/cE3
+ /cE4/cE5/cE6/cE7/cE8/cE9/cEA/cEB/cEC/cED/cEE/cEF/cF0/cF1/cF2/cF3/cF4/cF5/cF6
+ /cF7/cF8/cF9/cFA/cFB/cFC/cFD/cFE/cFF] def
+ /modEnc {
+ /_enc xdd
+ /_icode 0 dd
+ counttomark 1 sub -1 0
+ {
+ index
+ dup type /nametype eq
+ {
+ _enc _icode 3 -1 roll put
+ _icode 1 add
+ }
+ if
+ /_icode xdd
+ } for
+ cleartomark
+ _enc
+ } bd
+ /trEnc {
+ /_enc xdd
+ 255 -1 0 {
+ exch dup -1 eq
+ { pop /.notdef }
+ { Encoding exch get }
+ ifelse
+ _enc 3 1 roll put
+ } for
+ pop
+ _enc
+ } bd
+ /TE {
+ /_i xdd
+ StandardEncoding 256 array copy modEnc
+ _pdfEncodings exch _i exch put
+ } bd
+ /TZ
+ {
+ /_usePDFEncoding xdd
+ findfont
+ dup length 6 add dict
+ begin
+ {
+ 1 index /FID ne { def } { pop pop } ifelse
+ } forall
+ /pdf_origFontName FontName def
+ /FontName exch def
+ _usePDFEncoding 0 ge
+ {
+ /Encoding _pdfEncodings _usePDFEncoding get def
+ pop
+ }
+ {
+ _usePDFEncoding -1 eq
+ {
+ counttomark 0 eq
+ { pop }
+ {
+ Encoding 256 array copy
+ modEnc /Encoding exch def
+ }
+ ifelse
+ }
+ {
+ 256 array
+ trEnc /Encoding exch def
+ }
+ ifelse
+ }
+ ifelse
+ pdf_EuroProcSet pdf_origFontName known
+ {
+ pdf_origFontName pdf_AddEuroGlyphProc
+ } if
+ FontName currentdict
+ end
+ definefont pop
+ }
+ bd
+ /Level2?
+ systemdict /languagelevel known
+ {systemdict /languagelevel get 2 ge}
+ {false}
+ ifelse
+ def
+ Level2?
+ {
+ /_pdfFontStatus
+ {
+ currentglobal exch
+ /Font resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ exch setglobal
+ } bd
+ }
+ {
+ /_pdfFontStatusString 50 string def
+ _pdfFontStatusString 0 (fonts/) putinterval
+ /_pdfFontStatus
+ {
+ FontDirectory 1 index known
+ { pop true }
+ {
+ _pdfFontStatusString 6 42 getinterval
+ cvs length 6 add
+ _pdfFontStatusString exch 0 exch getinterval
+ { status } stopped
+ {pop false}
+ {
+ { pop pop pop pop true}
+ { false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ Level2?
+ {
+ /_pdfCIDFontStatus
+ {
+ /CIDFont /Category resourcestatus
+ {
+ pop pop
+ /CIDFont resourcestatus
+ {pop pop true}
+ {false}
+ ifelse
+ }
+ { pop false }
+ ifelse
+ } bd
+ }
+ if
+ /_pdfString100 100 string def
+ /_pdfComposeFontName
+ {
+ dup length 1 eq
+ {
+ 0 get
+ 1 index
+ type /nametype eq
+ {
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 2 index exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ exch pop
+ true
+ }
+ {
+ pop pop
+ false
+ }
+ ifelse
+ }
+ {
+ false
+ }
+ ifelse
+ dup {exch cvn exch} if
+ } bd
+ /_pdfConcatNames
+ {
+ exch
+ _pdfString100 cvs
+ length dup dup _pdfString100 exch (-) putinterval
+ _pdfString100 exch 1 add dup _pdfString100 length exch sub getinterval
+ 3 -1 roll exch cvs length
+ add 1 add _pdfString100 exch 0 exch getinterval
+ cvn
+ } bind def
+ /_pdfTextTempString 50 string def
+ /_pdfRegOrderingArray [(Adobe-Japan1) (Adobe-CNS1) (Adobe-Korea1) (Adobe-GB1)] def
+ /_pdf_CheckSupplements
+ {
+ 1 index _pdfTextTempString cvs
+ false
+ _pdfRegOrderingArray
+ {
+ 2 index exch
+ anchorsearch
+ { pop pop pop true exit}
+ { pop }
+ ifelse
+ }
+ forall
+ exch pop
+ {
+ /CIDFont findresource
+ /CIDSystemInfo get /Supplement get
+ exch /CMap findresource
+ /CIDSystemInfo get
+ dup type /dicttype eq
+ {/Supplement get}
+ {pop 0 }
+ ifelse
+ ge
+ }
+ { pop pop true }
+ ifelse
+ } bind def
+ pdf_has_composefont?
+ {
+ /_pdfComposeFont
+ {
+ 2 copy _pdfComposeFontName not
+ {
+ 2 index
+ }
+ if
+ (pdf) exch _pdfConcatNames
+ dup _pdfFontStatus
+ { dup findfont 5 2 roll pop pop pop true}
+ {
+ 4 1 roll
+ 1 index /CMap resourcestatus
+ {
+ pop pop
+ true
+ }
+ {false}
+ ifelse
+ 1 index true exch
+ {
+ _pdfCIDFontStatus not
+ {pop false exit}
+ if
+ }
+ forall
+ and
+ {
+ 1 index 1 index 0 get _pdf_CheckSupplements
+ {
+ 3 -1 roll pop
+ 2 index 3 1 roll
+ composefont true
+ }
+ {
+ pop pop exch pop false
+ }
+ ifelse
+ }
+ {
+ _pdfComposeFontName
+ {
+ dup _pdfFontStatus
+ {
+ exch pop
+ 1 index exch
+ findfont definefont true
+ }
+ {
+ pop exch pop
+ false
+ }
+ ifelse
+ }
+ {
+ exch pop
+ false
+ }
+ ifelse
+ }
+ ifelse
+ { true }
+ {
+ dup _pdfFontStatus
+ { dup findfont true }
+ { pop false }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ {
+ /_pdfComposeFont
+ {
+ _pdfComposeFontName not
+ {
+ dup
+ }
+ if
+ dup
+ _pdfFontStatus
+ {exch pop dup findfont true}
+ {
+ 1 index
+ dup type /nametype eq
+ {pop}
+ {cvn}
+ ifelse
+ eq
+ {pop false}
+ {
+ dup _pdfFontStatus
+ {dup findfont true}
+ {pop false}
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ }
+ ifelse
+ /_pdfStyleDicts 4 dict dup begin
+ /Adobe-Japan1 4 dict dup begin
+ Level2?
+ {
+ /Serif
+ /HeiseiMin-W3-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMin-W3}
+ {
+ /HeiseiMin-W3 _pdfCIDFontStatus
+ {/HeiseiMin-W3}
+ {/Ryumin-Light}
+ ifelse
+ }
+ ifelse
+ def
+ /SansSerif
+ /HeiseiKakuGo-W5-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiKakuGo-W5}
+ {
+ /HeiseiKakuGo-W5 _pdfCIDFontStatus
+ {/HeiseiKakuGo-W5}
+ {/GothicBBB-Medium}
+ ifelse
+ }
+ ifelse
+ def
+ /HeiseiMaruGo-W4-83pv-RKSJ-H _pdfFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /HeiseiMaruGo-W4 _pdfCIDFontStatus
+ {/HeiseiMaruGo-W4}
+ {
+ /Jun101-Light-RKSJ-H _pdfFontStatus
+ { /Jun101-Light }
+ { SansSerif }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ /RoundSansSerif exch def
+ /Default Serif def
+ }
+ {
+ /Serif /Ryumin-Light def
+ /SansSerif /GothicBBB-Medium def
+ {
+ (fonts/Jun101-Light-83pv-RKSJ-H) status
+ }stopped
+ {pop}{
+ { pop pop pop pop /Jun101-Light }
+ { SansSerif }
+ ifelse
+ /RoundSansSerif exch def
+ }ifelse
+ /Default Serif def
+ }
+ ifelse
+ end
+ def
+ /Adobe-Korea1 4 dict dup begin
+ /Serif /HYSMyeongJo-Medium def
+ /SansSerif /HYGoThic-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-GB1 4 dict dup begin
+ /Serif /STSong-Light def
+ /SansSerif /STHeiti-Regular def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ /Adobe-CNS1 4 dict dup begin
+ /Serif /MKai-Medium def
+ /SansSerif /MHei-Medium def
+ /RoundSansSerif SansSerif def
+ /Default Serif def
+ end
+ def
+ end
+ def
+ /TZzero
+ {
+ /_fyAdj xdd
+ /_wmode xdd
+ /_styleArr xdd
+ /_regOrdering xdd
+ 3 copy
+ _pdfComposeFont
+ {
+ 5 2 roll pop pop pop
+ }
+ {
+ [
+ 0 1 _styleArr length 1 sub
+ {
+ _styleArr exch get
+ _pdfStyleDicts _regOrdering 2 copy known
+ {
+ get
+ exch 2 copy known not
+ { pop /Default }
+ if
+ get
+ }
+ {
+ pop pop pop /Unknown
+ }
+ ifelse
+ }
+ for
+ ]
+ exch pop
+ 2 index 3 1 roll
+ _pdfComposeFont
+ {3 -1 roll pop}
+ {
+ findfont dup /FontName get exch
+ }
+ ifelse
+ }
+ ifelse
+ dup /WMode 2 copy known
+ { get _wmode ne }
+ { pop pop _wmode 1 eq}
+ ifelse
+ _fyAdj 0 ne or
+ {
+ exch _wmode _pdfConcatNames _fyAdj _pdfConcatNames
+ dup _pdfFontStatus
+ { exch pop dup findfont false}
+ { exch true }
+ ifelse
+ }
+ {
+ dup /FontType get 0 ne
+ }
+ ifelse
+ {
+ dup /FontType get 3 eq _wmode 1 eq and
+ {
+ _pdfVerticalRomanT3Font dup length 10 add dict copy
+ begin
+ /_basefont exch
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put dup 16#a5 /yen put dup 16#b4 /yen put}
+ if
+ def
+ FontName
+ currentdict
+ end
+ definefont
+ def
+ /Encoding _basefont /Encoding get def
+ /_fauxfont true def
+ }
+ {
+ dup length 3 add dict
+ begin
+ {1 index /FID ne {def}{pop pop} ifelse }
+ forall
+ FontType 0 ne
+ {
+ /Encoding Encoding dup length array copy
+ dup 16#27 /quotesingle put
+ dup 16#60 /grave put
+ _regOrdering /Adobe-Japan1 eq
+ {dup 16#5c /yen put}
+ if
+ def
+ /_fauxfont true def
+ } if
+ } ifelse
+ /WMode _wmode def
+ /BaseLineAdj _fyAdj def
+ dup dup /FontName exch def
+ currentdict
+ end
+ definefont pop
+ }
+ {
+ pop
+ }
+ ifelse
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ bd
+ /swj {
+ dup 4 1 roll
+ dup length exch stringwidth
+ exch 5 -1 roll 3 index mul add
+ 4 1 roll 3 1 roll mul add
+ 6 2 roll /_cnt 0 dd
+ {1 index eq {/_cnt _cnt 1 add dd} if} forall pop
+ exch _cnt mul exch _cnt mul 2 index add 4 1 roll 2 index add 4 1 roll pop pop
+ } bd
+ /jss {
+ 4 1 roll
+ {
+ pop pop
+ (0) exch 2 copy 0 exch put
+ gsave
+ exch false charpath currentpoint
+ 5 index setmatrix stroke
+ 3 -1 roll
+ 32 eq
+ {
+ moveto
+ 5 index 5 index rmoveto currentpoint
+ }
+ if
+ grestore
+ moveto
+ 2 copy rmoveto
+ } exch cshow
+ 6 {pop} repeat
+ } def
+ /jsfTzero {
+ {
+ pop pop
+ (0) exch 2 copy 0 exch put
+ exch show
+ 32 eq
+ {
+ 4 index 4 index rmoveto
+ }
+ if
+ 2 copy rmoveto
+ } exch cshow
+ 5 {pop} repeat
+ } def
+ /jsp
+ {
+ {
+ pop pop
+ (0) exch 2 copy 0 exch put
+ 32 eq
+ dup {currentfont /Encoding get dup length 33 ge 
+ {32 get /space eq and}{pop}ifelse
+ }if
+ { exch 5 index 5 index 5 index 5 -1 roll widthshow }
+ { false charpath }
+ ifelse
+ 2 copy rmoveto
+ } exch cshow
+ 5 {pop} repeat
+ } bd
+ /trj { _cx 0 fWModeProc 32 _ax 0 fWModeProc 6 5 roll } bd
+ /pjsf { trj sfc fawidthshowProc } bd
+ /pjss { trj _ctm ssc jss } bd
+ /pjsc { trj jsp } bd
+ /_Tjdef [
+ /pjsf load
+ /pjss load
+ {
+ dup
+ currentpoint 3 2 roll
+ pjsf
+ newpath moveto
+ pjss
+ } bind
+ {
+ trj swj rmoveto
+ } bind
+ {
+ dup currentpoint 4 2 roll gsave
+ pjsf
+ grestore 3 1 roll moveto
+ pjsc
+ } bind
+ {
+ dup currentpoint 4 2 roll
+ currentpoint gsave newpath moveto
+ pjss
+ grestore 3 1 roll moveto
+ pjsc
+ } bind
+ {
+ dup currentpoint 4 2 roll gsave
+ dup currentpoint 3 2 roll
+ pjsf
+ newpath moveto
+ pjss
+ grestore 3 1 roll moveto
+ pjsc
+ } bind
+ /pjsc load
+ ] def
+ /BT
+ {
+ /_inT true dd
+ _ctm currentmatrix pop matrix _tm copy pop
+ 0 _rise _baselineadj add translate _hs 1 scale
+ 0 0 moveto
+ } bd
+ /ET
+ {
+ /_inT false dd
+ _tr 3 gt {clip} if
+ _ctm setmatrix newpath
+ } bd
+ /Tr {
+ _inT { _tr 3 le {currentpoint newpath moveto} if } if
+ dup /_tr xdd
+ _Tjdef exch get /_Tj xdd
+ } bd
+ /Tj {
+ userdict /$$copystring 2 index put
+ _Tj
+ } bd
+ /iTm { _ctm setmatrix _tm concat 0 _rise _baselineadj add translate _hs 1 scale } bd
+ /Tm { _tm astore pop iTm 0 0 moveto } bd
+ /Td { _mtx translate _tm _tm concatmatrix pop iTm 0 0 moveto } bd
+ /TD { dup /_ld xdd Td } bd
+ /_nullProc {} bd
+ /Tf {
+ dup 1000 div /_fScl xdd
+ _pdf_FontDirectory 2 index 2 copy known
+ {get exch 3 -1 roll pop}
+ {pop pop}
+ ifelse
+ Level2?
+ { selectfont }
+ { exch findfont exch scalefont setfont}
+ ifelse
+ currentfont dup
+ /_nullProc exch
+ /WMode known
+ {
+ 1 index /WMode get 1 eq
+ {pop /exch}
+ if
+ }
+ if
+ load /fWModeProc xdd
+ dup
+ /FontType get 0 eq dup _cx 0 ne and
+ { /jsfTzero }
+ { /awidthshow }
+ ifelse
+ load /fawidthshowProc xdd
+ /_fTzero xdd
+ dup /BaseLineAdj known
+ { dup /BaseLineAdj get _fScl mul }
+ { 0 }
+ ifelse
+ /_baselineadj xdd
+ dup /_pdfT3Font known
+ { 0 }
+ {_tr}
+ ifelse
+ _Tjdef exch get /_Tj xdd
+ _intT
+ {currentpoint iTm moveto}
+ if
+ pop
+ } bd
+ /TL { neg /_ld xdd } bd
+ /Tw {
+ /_cx xdd
+ _cx 0 ne _fTzero and
+ { /jsfTzero }
+ { /awidthshow }
+ ifelse
+ load /fawidthshowProc xdd
+ } bd
+ /Tc { /_ax xdd } bd
+ /Ts { /_rise xdd currentpoint iTm moveto } bd
+ /Tz { 100 div /_hs xdd iTm } bd
+ /Tk { exch pop _fScl mul neg 0 fWModeProc rmoveto } bd
+ /T* { 0 _ld Td } bd
+ /' { T* Tj } bd
+ /" { exch Tc exch Tw ' } bd
+ /TJ {
+ {
+ dup type /stringtype eq
+ { Tj }
+ { 0 exch Tk }
+ ifelse
+ } forall
+ } bd
+ /T- { _hy Tj } bd
+ /d0/setcharwidth ld
+ /d1 { setcachedevice /sfc{}dd /ssc{}dd } bd
+ /nND {{/.notdef} repeat} bd
+ /T3Defs {
+ /BuildChar
+ {
+ 1 index /Encoding get exch get
+ 1 index /BuildGlyph get exec
+ }
+ def
+ /BuildGlyph {
+ exch begin
+ GlyphProcs exch get exec
+ end
+ } def
+ /_pdfT3Font true def
+ } bd
+ /_pdfBoldRomanWidthProc
+ {
+ stringwidth 1 index 0 ne { exch .03 add exch }if setcharwidth
+ 0 0
+ } bd
+ /_pdfType0WidthProc
+ {
+ dup stringwidth 0 0 moveto
+ 2 index true charpath pathbbox
+ 0 -1
+ 7 index 2 div .88
+ setcachedevice2
+ pop
+ 0 0
+ } bd
+ /_pdfType0WMode1WidthProc
+ {
+ dup stringwidth
+ pop 2 div neg -0.88
+ 2 copy
+ moveto
+ 0 -1
+ 5 -1 roll true charpath pathbbox
+ setcachedevice
+ } bd
+ /_pdfBoldBaseFont
+ 11 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /Encoding cHexEncoding def
+ /_setwidthProc /_pdfBoldRomanWidthProc load def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ pdf_has_composefont?
+ {
+ /_pdfBoldBaseCIDFont
+ 11 dict begin
+ /CIDFontType 1 def
+ /CIDFontName /_pdfBoldBaseCIDFont def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_setwidthProc /_pdfType0WidthProc load def
+ /_bcstr2 2 string def
+ /BuildGlyph
+ {
+ exch begin
+ _basefont setfont
+ _bcstr2 1 2 index 256 mod put
+ _bcstr2 0 3 -1 roll 256 idiv put
+ _bcstr2 dup _setwidthProc
+ 3 copy
+ moveto
+ show
+ _basefonto setfont
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ /_pdfDefineIdentity-H
+ {
+ /Identity-H /CMap resourcestatus
+ {
+ pop pop
+ }
+ {
+ /CIDInit/ProcSet findresource begin 12 dict begin
+ begincmap
+ /CIDSystemInfo
+ 3 dict begin
+ /Registry (Adobe) def
+ /Ordering (Identity) def
+ /Supplement 0 def
+ currentdict
+ end
+ def
+ /CMapName /Identity-H def
+ /CMapVersion 1 def
+ /CMapType 1 def
+ 1 begincodespacerange
+ <0000> <ffff>
+ endcodespacerange
+ 1 begincidrange
+ <0000> <ffff> 0
+ endcidrange
+ endcmap
+ CMapName currentdict/CMap defineresource pop
+ end
+ end
+ } ifelse
+ } def
+ } if
+ /_pdfVerticalRomanT3Font
+ 10 dict begin
+ /FontType 3 def
+ /FontMatrix[1 0 0 1 0 0]def
+ /FontBBox[0 0 1 1]def
+ /_bcstr1 1 string def
+ /BuildChar
+ {
+ exch begin
+ _basefont setfont
+ _bcstr1 dup 0 4 -1 roll put
+ dup
+ _pdfType0WidthProc
+ moveto
+ show
+ end
+ }bd
+ currentdict
+ end
+ def
+ /MakeBoldFont
+ {
+ dup /ct_SyntheticBold known
+ {
+ dup length 3 add dict begin
+ CopyFont
+ /ct_StrokeWidth .03 0 FontMatrix idtransform pop def
+ /ct_SyntheticBold true def
+ currentdict
+ end
+ definefont
+ }
+ {
+ dup dup length 3 add dict
+ begin
+ CopyFont
+ /PaintType 2 def
+ /StrokeWidth .03 0 FontMatrix idtransform pop def
+ /dummybold currentdict
+ end
+ definefont
+ dup /FontType get dup 9 ge exch 11 le and
+ {
+ _pdfBoldBaseCIDFont
+ dup length 3 add dict copy begin
+ dup /CIDSystemInfo get /CIDSystemInfo exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefont exch def
+ /_Type0Identity /Identity-H 3 -1 roll [ exch ] composefont
+ /_basefonto exch def
+ currentdict
+ end
+ /CIDFont defineresource
+ }
+ {
+ _pdfBoldBaseFont
+ dup length 3 add dict copy begin
+ /_basefont exch def
+ /_basefonto exch def
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ } bd
+ /MakeBold {
+ 1 index
+ _pdf_FontDirectory 2 index 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ findfont
+ dup
+ /FontType get 0 eq
+ {
+ dup /WMode known {dup /WMode get 1 eq }{false} ifelse
+ version length 4 ge
+ and
+ {version 0 4 getinterval cvi 2015 ge }
+ {true}
+ ifelse
+ {/_pdfType0WidthProc}
+ {/_pdfType0WMode1WidthProc}
+ ifelse
+ _pdfBoldBaseFont /_setwidthProc 3 -1 roll load put
+ {MakeBoldFont} Type0CopyFont definefont
+ }
+ {
+ dup /_fauxfont known not 1 index /SubstMaster known not and
+ {
+ _pdfBoldBaseFont /_setwidthProc /_pdfBoldRomanWidthProc load put
+ MakeBoldFont
+ }
+ {
+ 2 index 2 index eq
+ { exch pop }
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ definefont
+ }
+ ifelse
+ }
+ ifelse
+ }
+ ifelse
+ pop pop
+ dup /dummybold ne
+ {/_pdf_FontDirectory exch dup _safeput }
+ { pop }
+ ifelse
+ }bd
+ /MakeItalic {
+ _pdf_FontDirectory exch 2 copy known
+ {get}
+ {exch pop}
+ ifelse
+ dup findfont
+ dup /FontInfo 2 copy known
+ {
+ get
+ /ItalicAngle 2 copy known
+ {get 0 eq }
+ { pop pop true}
+ ifelse
+ }
+ { pop pop true}
+ ifelse
+ {
+ exch pop
+ dup /FontType get 0 eq Level2? not and
+ { dup /FMapType get 6 eq }
+ { false }
+ ifelse
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1Type0 }
+ { _italMtxType0 }
+ ifelse
+ }
+ { pop pop _italMtxType0 }
+ ifelse
+ }
+ {
+ dup /WMode 2 copy known
+ {
+ get 1 eq
+ { _italMtx_WMode1 }
+ { _italMtx }
+ ifelse
+ }
+ { pop pop _italMtx }
+ ifelse
+ }
+ ifelse
+ makefont
+ dup /FontType get 42 eq Level2? not or
+ {
+ dup length dict begin
+ CopyFont
+ currentdict
+ end
+ }
+ if
+ 1 index exch
+ definefont pop
+ /_pdf_FontDirectory exch dup _safeput
+ }
+ {
+ pop
+ 2 copy ne
+ {
+ /_pdf_FontDirectory 3 1 roll _safeput
+ }
+ { pop pop }
+ ifelse
+ }
+ ifelse
+ }bd
+ /MakeBoldItalic {
+ /dummybold exch
+ MakeBold
+ /dummybold
+ MakeItalic
+ }bd
+ Level2?
+ {
+ /pdf_CopyDict
+ {1 index length add dict copy}
+ def
+ }
+ {
+ /pdf_CopyDict
+ {
+ 1 index length add dict
+ 1 index wcheck
+ { copy }
+ { begin
+ {def} forall
+ currentdict
+ end
+ }
+ ifelse
+ }
+ def
+ }
+ ifelse
+ /pdf_AddEuroGlyphProc
+ {
+ currentdict /CharStrings known
+ {
+ CharStrings /Euro known not
+ {
+ dup
+ /CharStrings
+ CharStrings 1 pdf_CopyDict
+ begin
+ /Euro pdf_EuroProcSet 4 -1 roll get def
+ currentdict
+ end
+ def
+ /pdf_PSBuildGlyph /pdf_PSBuildGlyph load def
+ /pdf_PathOps /pdf_PathOps load def
+ /Symbol eq
+ {
+ /Encoding Encoding dup length array copy
+ dup 160 /Euro put def
+ }
+ if
+ }
+ { pop
+ }
+ ifelse
+ }
+ { pop
+ }
+ ifelse
+ }
+ def
+ /pdf_PathOps 4 dict dup begin
+ /m {moveto} def
+ /l {lineto} def
+ /c {curveto} def
+ /cp {closepath} def
+ end
+ def
+ /pdf_PSBuildGlyph
+ {
+ gsave
+ 8 -1 roll pop
+ 7 1 roll
+ currentdict /PaintType 2 copy known {get 2 eq}{pop pop false} ifelse
+ dup 9 1 roll
+ {
+ currentdict /StrokeWidth 2 copy known
+ {
+ get 2 div
+ 5 1 roll
+ 4 -1 roll 4 index sub
+ 4 1 roll
+ 3 -1 roll 4 index sub
+ 3 1 roll
+ exch 4 index add exch
+ 4 index add
+ 5 -1 roll pop
+ }
+ {
+ pop pop
+ }
+ ifelse
+ }
+ if
+ setcachedevice
+ pdf_PathOps begin
+ exec
+ end
+ {
+ currentdict /StrokeWidth 2 copy known
+ { get }
+ { pop pop 0 }
+ ifelse
+ setlinewidth stroke
+ }
+ {
+ fill
+ }
+ ifelse
+ grestore
+ } def
+ /pdf_EuroProcSet 13 dict def
+ pdf_EuroProcSet
+ begin
+ /Courier-Bold
+ {
+ 600 0 6 -12 585 612
+ {
+ 385 274 m
+ 180 274 l
+ 179 283 179 293 179 303 c
+ 179 310 179 316 180 323 c
+ 398 323 l
+ 423 404 l
+ 197 404 l
+ 219 477 273 520 357 520 c
+ 409 520 466 490 487 454 c
+ 487 389 l
+ 579 389 l
+ 579 612 l
+ 487 612 l
+ 487 560 l
+ 449 595 394 612 349 612 c
+ 222 612 130 529 98 404 c
+ 31 404 l
+ 6 323 l
+ 86 323 l
+ 86 304 l
+ 86 294 86 284 87 274 c
+ 31 274 l
+ 6 193 l
+ 99 193 l
+ 129 77 211 -12 359 -12 c
+ 398 -12 509 8 585 77 c
+ 529 145 l
+ 497 123 436 80 356 80 c
+ 285 80 227 122 198 193 c
+ 360 193 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-BoldOblique /Courier-Bold load def
+ /Courier
+ {
+ 600 0 17 -12 578 584
+ {
+ 17 204 m
+ 97 204 l
+ 126 81 214 -12 361 -12 c
+ 440 -12 517 17 578 62 c
+ 554 109 l
+ 501 70 434 43 366 43 c
+ 266 43 184 101 154 204 c
+ 380 204 l
+ 400 259 l
+ 144 259 l
+ 144 270 143 281 143 292 c
+ 143 299 143 307 144 314 c
+ 418 314 l
+ 438 369 l
+ 153 369 l
+ 177 464 249 529 345 529 c
+ 415 529 484 503 522 463 c
+ 522 391 l
+ 576 391 l
+ 576 584 l
+ 522 584 l
+ 522 531 l
+ 473 566 420 584 348 584 c
+ 216 584 122 490 95 369 c
+ 37 369 l
+ 17 314 l
+ 87 314 l
+ 87 297 l
+ 87 284 88 272 89 259 c
+ 37 259 l
+ cp
+ 600 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Courier-Oblique /Courier load def
+ /Helvetica
+ {
+ 556 0 24 -19 541 703
+ {
+ 541 628 m
+ 510 669 442 703 354 703 c
+ 201 703 117 607 101 444 c
+ 50 444 l
+ 25 372 l
+ 97 372 l
+ 97 301 l
+ 49 301 l
+ 24 229 l
+ 103 229 l
+ 124 67 209 -19 350 -19 c
+ 435 -19 501 25 509 32 c
+ 509 131 l
+ 492 105 417 60 343 60 c
+ 267 60 204 127 197 229 c
+ 406 229 l
+ 430 301 l
+ 191 301 l
+ 191 372 l
+ 455 372 l
+ 479 444 l
+ 194 444 l
+ 201 531 245 624 348 624 c
+ 433 624 484 583 509 534 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-Oblique /Helvetica load def
+ /Helvetica-Bold
+ {
+ 556 0 12 -19 563 710
+ {
+ 563 621 m
+ 537 659 463 710 363 710 c
+ 216 710 125 620 101 462 c
+ 51 462 l
+ 12 367 l
+ 92 367 l
+ 92 346 l
+ 92 337 93 328 93 319 c
+ 52 319 l
+ 12 224 l
+ 102 224 l
+ 131 58 228 -19 363 -19 c
+ 417 -19 471 -12 517 18 c
+ 517 146 l
+ 481 115 426 93 363 93 c
+ 283 93 254 166 246 224 c
+ 398 224 l
+ 438 319 l
+ 236 319 l
+ 236 367 l
+ 457 367 l
+ 497 462 l
+ 244 462 l
+ 259 552 298 598 363 598 c
+ 425 598 464 570 486 547 c
+ 507 526 513 517 517 509 c
+ cp
+ 556 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Helvetica-BoldOblique /Helvetica-Bold load def
+ /Symbol
+ {
+ 750 0 20 -12 714 685
+ {
+ 714 581 m
+ 650 645 560 685 465 685 c
+ 304 685 165 580 128 432 c
+ 50 432 l
+ 20 369 l
+ 116 369 l
+ 115 356 115 347 115 337 c
+ 115 328 115 319 116 306 c
+ 50 306 l
+ 20 243 l
+ 128 243 l
+ 165 97 300 -12 465 -12 c
+ 560 -12 635 25 685 65 c
+ 685 155 l
+ 633 91 551 51 465 51 c
+ 340 51 238 131 199 243 c
+ 555 243 l
+ 585 306 l
+ 184 306 l
+ 183 317 182 326 182 336 c
+ 182 346 183 356 184 369 c
+ 614 369 l 644 432 l
+ 199 432 l
+ 233 540 340 622 465 622 c
+ 555 622 636 580 685 520 c
+ cp
+ 750 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Bold
+ {
+ 500 0 16 -14 478 700
+ {
+ 367 308 m
+ 224 308 l
+ 224 368 l
+ 375 368 l
+ 380 414 l
+ 225 414 l
+ 230 589 257 653 315 653 c
+ 402 653 431 521 444 457 c
+ 473 457 l
+ 473 698 l
+ 444 697 l
+ 441 679 437 662 418 662 c
+ 393 662 365 700 310 700 c
+ 211 700 97 597 73 414 c
+ 21 414 l
+ 16 368 l
+ 69 368 l
+ 69 359 68 350 68 341 c
+ 68 330 68 319 69 308 c
+ 21 308 l
+ 16 262 l
+ 73 262 l
+ 91 119 161 -14 301 -14 c
+ 380 -14 443 50 478 116 c
+ 448 136 l
+ 415 84 382 40 323 40 c
+ 262 40 231 77 225 262 c
+ 362 262 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-BoldItalic
+ {
+ 500 0 9 -20 542 686
+ {
+ 542 686 m
+ 518 686 l
+ 513 673 507 660 495 660 c
+ 475 660 457 683 384 683 c
+ 285 683 170 584 122 430 c
+ 58 430 l
+ 34 369 l
+ 105 369 l
+ 101 354 92 328 90 312 c
+ 34 312 l
+ 9 251 l
+ 86 251 l
+ 85 238 84 223 84 207 c
+ 84 112 117 -14 272 -14 c
+ 326 -14 349 9 381 9 c
+ 393 9 393 -10 394 -20 c
+ 420 -20 l
+ 461 148 l
+ 429 148 l
+ 416 109 362 15 292 15 c
+ 227 15 197 55 197 128 c
+ 197 162 204 203 216 251 c
+ 378 251 l
+ 402 312 l
+ 227 312 l
+ 229 325 236 356 241 369 c
+ 425 369 l
+ 450 430 l
+ 255 430 l
+ 257 435 264 458 274 488 c
+ 298 561 337 654 394 654 c
+ 437 654 484 621 484 530 c
+ 484 516 l
+ 516 516 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Italic
+ {
+ 500 0 23 -10 595 692
+ {
+ 399 317 m
+ 196 317 l
+ 199 340 203 363 209 386 c
+ 429 386 l
+ 444 424 l
+ 219 424 l
+ 246 514 307 648 418 648 c
+ 448 648 471 638 492 616 c
+ 529 576 524 529 527 479 c
+ 549 475 l
+ 595 687 l
+ 570 687 l
+ 562 674 558 664 542 664 c
+ 518 664 474 692 423 692 c
+ 275 692 162 551 116 424 c
+ 67 424 l
+ 53 386 l
+ 104 386 l
+ 98 363 93 340 90 317 c
+ 37 317 l
+ 23 279 l
+ 86 279 l
+ 85 266 85 253 85 240 c
+ 85 118 137 -10 277 -10 c
+ 370 -10 436 58 488 128 c
+ 466 149 l
+ 424 101 375 48 307 48 c
+ 212 48 190 160 190 234 c
+ 190 249 191 264 192 279 c
+ 384 279 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ /Times-Roman
+ {
+ 500 0 10 -12 484 692
+ {
+ 347 298 m
+ 171 298 l
+ 170 310 170 322 170 335 c
+ 170 362 l
+ 362 362 l
+ 374 403 l
+ 172 403 l
+ 184 580 244 642 308 642 c
+ 380 642 434 574 457 457 c
+ 481 462 l
+ 474 691 l
+ 449 691 l
+ 433 670 429 657 410 657 c
+ 394 657 360 692 299 692 c
+ 204 692 94 604 73 403 c
+ 22 403 l
+ 10 362 l
+ 70 362 l
+ 69 352 69 341 69 330 c
+ 69 319 69 308 70 298 c
+ 22 298 l
+ 10 257 l
+ 73 257 l
+ 97 57 216 -12 295 -12 c
+ 364 -12 427 25 484 123 c
+ 458 142 l
+ 425 101 384 37 316 37 c
+ 256 37 189 84 173 257 c
+ 335 257 l
+ cp
+ 500 0 m
+ }
+ pdf_PSBuildGlyph
+ } def
+ end
+ currentdict readonly pop end
+ %%EndResource
+ PDFText begin
+ [39/quotesingle 96/grave 128/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis
+ /Udieresis/aacute/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute
+ /egrave/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde
+ /oacute/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex
+ /udieresis/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
+ /registered/copyright/trademark/acute/dieresis/.notdef/AE/Oslash
+ /.notdef/plusminus/.notdef/.notdef/yen/mu/.notdef/.notdef
+ /.notdef/.notdef/.notdef/ordfeminine/ordmasculine/.notdef/ae/oslash
+ /questiondown/exclamdown/logicalnot/.notdef/florin/.notdef/.notdef
+ /guillemotleft/guillemotright/ellipsis/space/Agrave/Atilde/Otilde/OE/oe
+ /endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
+ /.notdef/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright
+ /fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
+ /Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
+ /Idieresis/Igrave/Oacute/Ocircumflex/.notdef/Ograve/Uacute/Ucircumflex
+ /Ugrave/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla
+ /hungarumlaut/ogonek/caron
+ 0 TE
+ [1/dotlessi/caron 39/quotesingle 96/grave 
+ 127/bullet/Euro/bullet/quotesinglbase/florin/quotedblbase/ellipsis
+ /dagger/daggerdbl/circumflex/perthousand/Scaron/guilsinglleft/OE
+ /bullet/Zcaron/bullet/bullet/quoteleft/quoteright/quotedblleft
+ /quotedblright/bullet/endash/emdash/tilde/trademark/scaron
+ /guilsinglright/oe/bullet/zcaron/Ydieresis/space/exclamdown/cent/sterling
+ /currency/yen/brokenbar/section/dieresis/copyright/ordfeminine
+ /guillemotleft/logicalnot/hyphen/registered/macron/degree/plusminus
+ /twosuperior/threesuperior/acute/mu/paragraph/periodcentered/cedilla
+ /onesuperior/ordmasculine/guillemotright/onequarter/onehalf/threequarters
+ /questiondown/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
+ /Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
+ /Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply/Oslash
+ /Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls/agrave
+ /aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla/egrave/eacute
+ /ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis/eth/ntilde
+ /ograve/oacute/ocircumflex/otilde/odieresis/divide/oslash/ugrave/uacute
+ /ucircumflex/udieresis/yacute/thorn/ydieresis
+ 1 TE
+ end
+ %%BeginResource: pdfimage.prc
+ %%Copyright: Copyright 1987-1993 Adobe Systems Incorporated. All Rights Reserved.
+ PDF /PDFImage 38 dict put
+ PDF /PDFIVars 20 dict put
+ PDF /PDFImage get begin
+ /initialize { PDFImage begin } bd
+ /terminate { end } bd
+ /nulldict 0 dict def
+ /gv { PDFIVars exch get } bd
+ /pv { PDFIVars 3 1 roll put } bd
+ /BI { save /savelevel exch pv mark } bd
+ /EI { /savelevel gv restore } bd
+ end
+ %%EndResource
+ %%BeginResource: pdfimg2.prc
+ %%Version: 4.0 4
+ %%Copyright: Copyright 1987-1993 Adobe Systems Incorporated. All Rights Reserved.
+ PDF /PDFImage get begin
+ Level2? StartLoad {
+ /ID {
+ 5 counttomark 2 idiv
+ dup 3 1 roll add
+ dict begin
+ { def } repeat
+ cleartomark
+ currentdict
+ end
+ begin
+ /ImageType here { pop } { /ImageType 1 def } ifelse
+ /ImageMatrix [ Width 0 0 Height neg 0 Height ] def
+ /ImageMask here { not } { true } ifelse
+ { /ImageMask false def } if
+ ImageMask not { ColorSpace setcolorspace } if
+ /Intent here { ri } if
+ SLBApplies?
+ { ApplySLB }
+ {
+ mark
+ /DataSource here { } { currentfile } ifelse
+ /Filter here {
+ dup type /arraytype eq { length } { pop 1 } ifelse
+ 1 sub 0 1 3 -1 roll {
+ /DecodeParms here {
+ dup type /arraytype eq {
+ 1 index get
+ } if
+ dup null eq { pop } { exch } ifelse
+ } if
+ Filter dup type /arraytype eq
+ { exch get } { exch pop } ifelse
+ filter
+ dup
+ } for
+ } if
+ /DataSource exch def
+ currentdict /ImageMask here not {false} if
+ { sfc imagemask } { image } ifelse
+ counttomark
+ { dup status
+ dup currentfile ne and
+ { dup flushfile closefile }
+ { pop }
+ ifelse
+ }
+ repeat
+ pop
+ }ifelse
+ end
+ } [/Width /Height /ImageMask /ColorSpace /Filter] bld
+ /SLBApplies?
+ {
+ {
+ languagelevel 3 lt {stop} if
+ currentsystemparams /SourceListBypass known not {stop} if
+ currentsystemparams /SourceListBypass get not {stop} if
+ currentdict /Filter known not {stop} if
+ Filter /CCITTFaxDecode ne {stop} if
+ currentdict /DecodeParms known not {stop} if
+ DecodeParms /K known not {stop} if
+ DecodeParms /K get -1 ne {stop} if
+ } stopped not
+ } [/DecodeParms] bld
+ /ApplySLB
+ {
+ {
+ /UncompressedLength
+ Width
+ DecodeParms /EncodedByteAlign getifknown
+ { { 7 add 3 bitshift } if } if
+ Height mul def
+ /DataSource dup here { } {currentfile} ifelse
+ 5 dict begin
+ /Filter Filter def
+ /DecodeParms DecodeParms def
+ /Intent 3 def
+ /AsyncRead false def
+ /CloseSource false def
+ currentdict end /ReusableStreamDecode filter def
+ currentdict /ImageMask here not {false} if
+ { sfc imagemask } { image } ifelse
+ } exec
+ } [/Width /DecodeParms /Height] bld
+ currentdict readonly pop
+ } EndLoad
+ end
+ %%EndResource
+ %%BeginResource: pdfasc.prc
+ %%Version: 4.0 2
+ %%Copyright: Copyright 1992-1997 Adobe Systems Incorporated. All Rights Reserved.
+ /AS {
+ 9 dict begin
+ /shrink? xdd
+ /Pury xdd
+ /Purx xdd
+ /Plly xdd
+ /Pllx xdd
+ gsave newpath clippath pathbbox newpath grestore
+ /Dury xdd
+ /Durx xdd
+ /Dlly xdd
+ /Dllx xdd
+ Durx Dllx sub Dury Dlly sub
+ Pury Plly sub div exch Purx Pllx sub div
+ 2 copy gt { exch } if pop
+ Durx Dllx add 2 div Dury Dlly add 2 div translate
+ shrink? { dup scale } { pop } ifelse
+ Purx Pllx add -2 div Pury Plly add -2 div translate
+ end
+ } [/shrink? /Pury /Purx /Plly /Pllx /Durx /Dury /Dllx /Dlly]
+ bld
+ %%EndResource
+ currentdict readonly pop
+ end end
+ /currentpacking where {pop setpacking}if
+ PDFVars/DocInitAll{[ PDFText]{/docinitialize get exec}forall }put
+ PDFVars/InitAll{[PDF PDFText PDFImage]{/initialize get exec}forall initgs}put
+ PDFVars/TermAll{[PDFImage PDFText PDF]{/terminate get exec}forall}put
+ PDFVars begin PDF begin
+ PDFVars/DocInitAll get exec PDFVars/InitAll get exec
+ /N224 [/CIEBasedABC <<
+ /MatrixLMN [0.412399 0.212585 0.0192871 0.35759 0.715118 
+ 0.119186 0.180496 0.0721893 0.950485 ]
+ /DecodeLMN [{2.22218 exp}bind dup dup]
+ /WhitePoint [0.950485 1 1.08899]
+ >>]/ColorSpace defineRes pop
+ /N232 <<
+ /SA false 
+ >> /ExtGState defineRes pop
+ userdict begin
+ %%BeginResource: file Pscript_CFF PSVER
+ userdict/ct_CffDict 6 dict put ct_CffDict begin/F0Subr{systemdict/internaldict
+ known{1183615869 systemdict/internaldict get exec/FlxProc known{save true}{
+ false}ifelse}{userdict/internaldict known not{userdict/internaldict{count 0 eq
+ {/internaldict errordict/invalidaccess get exec}if dup type/integertype ne{
+ /internaldict errordict/invalidaccess get exec}if dup 1183615869 eq{pop 0}{
+ /internaldict errordict/invalidaccess get exec}ifelse}dup 14 get 1 25 dict put
+ bind executeonly put}if 1183615869 userdict/internaldict get exec/FlxProc
+ known{save true}{false}ifelse}ifelse[systemdict/internaldict known not{100
+ dict/begin cvx/mtx matrix/def cvx}if systemdict/currentpacking known{
+ currentpacking true setpacking}if{systemdict/internaldict known{1183615869
+ systemdict/internaldict get exec dup/$FlxDict known not{dup dup length exch
+ maxlength eq{pop userdict dup/$FlxDict known not{100 dict begin/mtx matrix def
+ dup/$FlxDict currentdict put end}if}{100 dict begin/mtx matrix def dup
+ /$FlxDict currentdict put end}ifelse}if/$FlxDict get begin}if grestore/exdef{
+ exch def}def/dmin exch abs 100 div def/epX exdef/epY exdef/c4y2 exdef/c4x2
+ exdef/c4y1 exdef/c4x1 exdef/c4y0 exdef/c4x0 exdef/c3y2 exdef/c3x2 exdef/c3y1
+ exdef/c3x1 exdef/c3y0 exdef/c3x0 exdef/c1y2 exdef/c1x2 exdef/c2x2 c4x2 def
+ /c2y2 c4y2 def/yflag c1y2 c3y2 sub abs c1x2 c3x2 sub abs gt def/PickCoords{{
+ c1x0 c1y0 c1x1 c1y1 c1x2 c1y2 c2x0 c2y0 c2x1 c2y1 c2x2 c2y2}{c3x0 c3y0 c3x1
+ c3y1 c3x2 c3y2 c4x0 c4y0 c4x1 c4y1 c4x2 c4y2}ifelse/y5 exdef/x5 exdef/y4 exdef
+ /x4 exdef/y3 exdef/x3 exdef/y2 exdef/x2 exdef/y1 exdef/x1 exdef/y0 exdef/x0
+ exdef}def mtx currentmatrix pop mtx 0 get abs 1e-05 lt mtx 3 get abs 1e-05 lt
+ or{/flipXY -1 def}{mtx 1 get abs 1e-05 lt mtx 2 get abs 1e-05 lt or{/flipXY 1
+ def}{/flipXY 0 def}ifelse}ifelse/erosion 1 def systemdict/internaldict known{
+ 1183615869 systemdict/internaldict get exec dup/erosion known{/erosion get
+ /erosion exch def}{pop}ifelse}if yflag{flipXY 0 eq c3y2 c4y2 eq or{false
+ PickCoords}{/shrink c3y2 c4y2 eq{0}{c1y2 c4y2 sub c3y2 c4y2 sub div abs}ifelse
+ def/yshrink{c4y2 sub shrink mul c4y2 add}def/c1y0 c3y0 yshrink def/c1y1 c3y1
+ yshrink def/c2y0 c4y0 yshrink def/c2y1 c4y1 yshrink def/c1x0 c3x0 def/c1x1
+ c3x1 def/c2x0 c4x0 def/c2x1 c4x1 def/dY 0 c3y2 c1y2 sub round dtransform
+ flipXY 1 eq{exch}if pop abs def dY dmin lt PickCoords y2 c1y2 sub abs .001 gt{
+ c1x2 c1y2 transform flipXY 1 eq{exch}if/cx exch def/cy exch def/dY 0 y2 c1y2
+ sub round dtransform flipXY 1 eq{exch}if pop def dY round dup 0 ne{/dY exdef}{
+ pop dY 0 lt{-1}{1}ifelse/dY exdef}ifelse/erode PaintType 2 ne erosion .5 ge
+ and def erode{/cy cy .5 sub def}if/ey cy dY add def/ey ey ceiling ey sub ey
+ floor add def erode{/ey ey .5 add def}if ey cx flipXY 1 eq{exch}if itransform
+ exch pop y2 sub/eShift exch def/y1 y1 eShift add def/y2 y2 eShift add def/y3
+ y3 eShift add def}if}ifelse}{flipXY 0 eq c3x2 c4x2 eq or{false PickCoords}{
+ /shrink c3x2 c4x2 eq{0}{c1x2 c4x2 sub c3x2 c4x2 sub div abs}ifelse def/xshrink
+ {c4x2 sub shrink mul c4x2 add}def/c1x0 c3x0 xshrink def/c1x1 c3x1 xshrink def
+ /c2x0 c4x0 xshrink def/c2x1 c4x1 xshrink def/c1y0 c3y0 def/c1y1 c3y1 def/c2y0
+ c4y0 def/c2y1 c4y1 def/dX c3x2 c1x2 sub round 0 dtransform flipXY -1 eq{exch}
+ if pop abs def dX dmin lt PickCoords x2 c1x2 sub abs .001 gt{c1x2 c1y2
+ transform flipXY -1 eq{exch}if/cy exch def/cx exch def/dX x2 c1x2 sub round 0
+ dtransform flipXY -1 eq{exch}if pop def dX round dup 0 ne{/dX exdef}{pop dX 0
+ lt{-1}{1}ifelse/dX exdef}ifelse/erode PaintType 2 ne erosion .5 ge and def
+ erode{/cx cx .5 sub def}if/ex cx dX add def/ex ex ceiling ex sub ex floor add
+ def erode{/ex ex .5 add def}if ex cy flipXY -1 eq{exch}if itransform pop x2
+ sub/eShift exch def/x1 x1 eShift add def/x2 x2 eShift add def/x3 x3 eShift add
+ def}if}ifelse}ifelse x2 x5 eq y2 y5 eq or{x5 y5 lineto}{x0 y0 x1 y1 x2 y2
+ curveto x3 y3 x4 y4 x5 y5 curveto}ifelse epY epX}systemdict/currentpacking
+ known{exch setpacking}if/exec cvx/end cvx]cvx executeonly exch{pop true exch
+ restore}{systemdict/internaldict known not{1183615869 userdict/internaldict
+ get exec exch/FlxProc exch put true}{1183615869 systemdict/internaldict get
+ exec dup length exch maxlength eq{false}{1183615869 systemdict/internaldict
+ get exec exch/FlxProc exch put true}ifelse}ifelse}ifelse{systemdict
+ /internaldict known{1183615869 systemdict/internaldict get exec/FlxProc get
+ exec}{1183615869 userdict/internaldict get exec/FlxProc get exec}ifelse}if}
+ executeonly def/F1Subr{gsave currentpoint newpath moveto}bind def/F2Subr{
+ currentpoint grestore gsave currentpoint newpath moveto}bind def/HSSubr{
+ systemdict/internaldict known not{pop 3}{1183615869 systemdict/internaldict
+ get exec dup/startlock known{/startlock get exec}{dup/strtlck known{/strtlck
+ get exec}{pop 3}ifelse}ifelse}ifelse}bind def end
+ %%EndResource
+ %%BeginResource: font TimesNewRomanPS-BoldMT
+ %!PS-AdobeFont-1.0: TimesNewRomanPS-BoldMT 001.002
+ %%CreationDate: Thu Feb  4 15:35:30 1999
+ %%VMusage: 31834 38770
+ %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype 
+ %% Corporation. All Rights Reserved.  
+ %% Times New Roman is a trademark of the Monotype Corporation, registered in the 
+ %% US Patent and Trademark Office and may be registered in certain other 
+ %% jurisdictions.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.002) readonly def
+ /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def
+ /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved.  ) readonly def
+ /FullName (Times New Roman PS Bold) readonly def
+ /FamilyName (Times New Roman PS) readonly def
+ /Weight (Bold) readonly def
+ /isFixedPitch false def
+ /ItalicAngle 0 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /TimesNewRomanPS-BoldMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44337 def
+ /FontBBox{-180 -250 1008 889}readonly def
+ currentdict end
+ currentfile eexec
+ 8498736888c9d6cc5b4c34be0b812a72e387d6e7a561a27d82a1e8bb2179a3d4
+ ebf2dcf85bd71552495700e1212202b5f11ba07f809932611743273abd00f836
+ 0adec6401ec43597154d4fc22af8b245b76c111ea2286e621eee2d34428f4390
+ 8f4045d7750ffbdd5b7a1d8c9440dffa463c35f749c5e8a5bc7af5a0a9b9012e
+ 211693f4c8e3dab725ecfe8388f7722b495812e985e15e86f2dc76cbf00c6ff2
+ d3e0b1683f9cfcff220dbe4cdeb2bac0aef019c331410cfe43db94b7332d5d14
+ c2bfa5d6d559d541b9b03be8cd8c82839f13f7e72ae862e006b7f18887b55dc1
+ 7faff9da5b0916c5a183157190972e3a520433511952e0bea08dacf7dfbfd5d9
+ 482add2fbd715a844158ee7f0f8de171c8a4d2b56139cb3fbad6cb83e7bfefd8
+ cabb28255a2da8e69a33120e4c14a187a52bfe7f719316508235e41cd7af3d03
+ 52742ebd3899f772b273d3dc4bf7266bc37caa62fcf8eb0c51a9a17924dec803
+ f081413e2970d2086bfd77412fa87db0889ca4ea7ea98c0138aeacc9f102aa56
+ 2b4bb15ed28a7b1d392034b9be447b18f81025006f125a96caf5ca2cfaae9cd8
+ e7ffcf50ce4cbf3b609fe742063f5fde2027bd340f8649319239b5bf5589706c
+ 18ef7c166856d6a73ec891ff7e47b535b0ae59ac97d8207055d97b9231d0a465
+ 7884e5aeca0c7775cac7e15eec30c8a7feea9b4c330e17736644dd463e090272
+ 426169ac46dc4289323c0638b8347efa103cdb018c6ca1c12dd2bae6ac7243a9
+ 7cbed2ad3fe8695070393f393463c26368e8f733c376f451b905260dff6dc803
+ 27f8eb292e51088c7190b38c7bf995763b181f111067e9d453b295913c8031ad
+ 6cfd37e4bb3776232c07c2207e9ee0e0a892e7cc44d6a017c56beb61f67af99c
+ da584f50e0922b18e90850f67977a528ce0f63060ca0b3ea350982007dc6f50e
+ c751b5b72a4095a9683b54f22b1e0e967c39cd7cdae529af8fa825bf1f27e3bf
+ 65a50b90b15d1b849c38c42fa4bc6d173a9bc6db8aadc094a5b1cf478397e101
+ b36f22acf9089a403aa28a067966582929bfd26c1a5b9c7aac8fd0809998f130
+ 7330a0ee82ea761b830d9c6e76723b04a5d19fc89ea0d4382ab584e4b5440b4b
+ 85f6a451b2d2da5c98cad8be9fb5eea3003f3bb7203d5c36d7a8d7c0f555f3a7
+ 0120b9f8daf4a7480a43f81b7a28e4bbf2c226e0c2464d031f958aa354d63f6d
+ b0e2e678c913addf205d5507ab268516251e81f43c9fa8899e41f8381ed57aff
+ 9d4dcec6ba34f9d0c2f61a648bf0a3afb0434e78eb81477149ad143b960d5e28
+ df2072bb0fb5f4dd67dd780af5b885b39c1a283b59e8103e7ef921a6e4a0ecf3
+ 81e68f3f35a911c92ef6a233adb4f02dd4b3d364b719550bb2f1c59357f228f6
+ 922da150a5941ec234fed7b74437b866db74f5794bc875c70f94fc44a8402723
+ f521766a4cb1507c15debe8f590610d4d00b1883de17d60582441b4d45aa206d
+ 27c06741f0f64be15246a87ce64d7791e8590d6156cb69f2275626b583d97f99
+ 884161186079c5c293aa07b130ec6923b5d5f048f5c59511cf2795eb72f29dc7
+ 46138def0fc6068392e9ec194ae565d9d679840193d1120108542400e57aa4aa
+ 968fee982e7801b7acd39634aae8b6eb70c636c3f940381f3689494916bf8f26
+ 41c8c35d175af369c3c10d6f8bc2fb1bb307bf0047ad1108af73b5b065453cb6
+ 0820e713865e8a862ca525499af6b7cd92b41392be016092443d34b5844003d3
+ 3fb293cb467559e1328bc2e950c95a5bb5057ec2cd3c66ef213c93278b612a84
+ f26043bd6d04cbce34186a892080e70efb9e401a32437cc18e98db490003f8e5
+ 5aab2b889313fcc511eb6d88a50938653265177cc4fed8c1f114343790ae2ba9
+ 8949cd589443b56e2c13b8748e1243084ecd3cfbbdf80573aeea661e6b0e8019
+ 5f8d2be0179501b39b158b16f566bc7746dea19a9b455d627da25c1035714f64
+ ce91aa02e70b88f70bba8431798498b0ba60ab022b3cb3fdff874fc17e7a955c
+ 5840e7cf312c97875188609f89b6dc5362c7cb4331d4956cdc713e8d3640e5c7
+ 398b391e14e86eac9398bee03b58f686a3efe57576e8c20b4d7a27ab2ad4c346
+ 7f571578dd3cf4433b7863bb9788edec3e25395a27a376a6f8610f427de651de
+ 14ab0ac4fc8aa7bc73bd75c26b38d2cde4936685509a4ace454764993256a8ed
+ ef3865b7e7c25bb431908c8a08fe989fe50d82436d5f844dd9a9aa772d5919f0
+ 98791963b0303c3197223c98a24786f7bd3366ff7196328470984520cdf2b6eb
+ 477337ab36eed0657cf10bc269c751ab2c5b612a47674bf56ca4ecf102ab4885
+ f1db8a2656ac46f2c94fc1f7ca0a8f1e998f6f6fdb1f430de257265b4e4d8a42
+ 8a4764fed742cb94e3a6f915f12abd9d7ce361f9b9ac3945eb79a8c7b09af484
+ 85eb415370d8eb09f2c094b05da672dc30d7185617ec5971cf65746f061dac56
+ 7f9fa42fb5169624ee6ef4a8b5f994f477bbb538bf10f10642da6729c80312cf
+ 0f83bbba6f0ee721cbd3a02b3a83a30baa2cdf57b9fc6f4c49e9f92714cd5f89
+ de9d56f323b19ef8e6d76ad884e1de0ee5398871ac3436fbcab30ec2b8dcd15a
+ 8a22dcad60e4cf59deb5eefccc075e9007fe96299f7bbc7ecefbf2016de21f38
+ d12f83b780ff7dc51c8c74a31ffc7334b096dd6e8adfaccb3198dea5223a9170
+ c48232190cdf024b66bc3ee0eec914222889ec539edfd6862e65b9161a207215
+ 794e6b9f63db75fb0ae3ebdecf49797520257379a304c5ad091e01326352fae6
+ 0f9c129a39f1b040eeb56f63ae76bacec7094e9ffc29a4ba5dc25260868a71bd
+ 2068ecbfb87259ebb878b85f2e4060509f0154b3205fcf30f5415767ede2bffb
+ 61ad2db3368015fc73fdb1dcc3ad452e1a796f2d71d4f4aff84307919c0b9f34
+ b31a0e3f7e45f0312a4f25f108f58bbed84da0aeea8a2a5847871394536bd5dd
+ 07e640f4fea069dbd88a303ba4e09fdc013d5c11b14741371f1f8fb67c9aef7f
+ 464fbdd8dc429b4544512024b0399e97c6125b445af8fd1ead445c0ca503dce4
+ 85328ecefe8aa9e2f63200cc289ed207a01bfaccf653cdadd2d9dac28f0a90cd
+ 433008fbeb298cc3c4dd02730f14e93590ff20a2b4d938510e1d32c76fc9d8f4
+ 3115f4a0808ff4c3b5101801a47fd0376026749a1436feb100c80bd310b357d5
+ 9080007962df6350284311d0e418330e42fc1390edca459a72c09f9d892ab294
+ b09b3884cfd6ca61de597819125df6607ef5acb392b01042c87afed112b8fe4d
+ fdcc98e0d1c4d50478477436cece90801d097c44c4bfd2ce7618f9e20f8e814c
+ 7f9c66fd03384defd764d21779354d59f518f813c5fc7b99f47d1d216785e9fc
+ a6174b6881e5fc8f2e3f711f9bc7569f4c88020529141c81ba84f3a01a9f4ec1
+ aca49fe842bfcb52ac9258341b2f2bc7db1cc3c18bdd51cc738b222d5a2bf687
+ 975f04a6cb5ede81945580291e728896b4124073be62f2847c941df825e20a5a
+ b8a16663ee2ebac4741ee47a907fc2dad2d33384c43ab78f3b9f392e4cb6ab5c
+ 7947b779d3b6755cf2ad36b7f2139bb1d1143e333c0df26c319cb0bfdc3d163c
+ a0cdcda3898675feacd03e16c3a3b5e5c6190a4935721f03894e5c0f9c9081d8
+ 5141bb5a9d776cc72bb65b0fffe3f91c8275c369b7b7f73ca69d25c1160fd9df
+ 8903b5acdcc931a58e150e388ab16bb66982297c4d484aa3284d540068128734
+ 31f61821a9c97ebf31a8cf2df50d7868216322ca2c511e0821efc05539c901b0
+ 3e6f4a74d922c6bf6e93d370543e8720b7482f4494d2854e5a85642534a58d7f
+ c14f2851e027968f73593cb71adcd68289c637201cc3385869df7783c71e3281
+ 7482025ecbc5ca7b9d0e150a2d7e9fc7e42d27251866ecc50946e358d0cb25c9
+ b1816005acd9dd1defdf0c3542ccdc94672ee33773aeb31e6707e05e37676aa8
+ abad394aacd42bd0bb4fefd29e6343150083892671b14b30438a812bfd134124
+ f7c9334d3296d66dfae659b9006a458f3779c80577eab9cf6061d69a6cb6f106
+ d4a9162e7c68179d2efd2936c1b2e3aad9dd8b7962c75b4bb0f8f51ac06c88c2
+ 03bbfe7abdeda08d947f87f0e9932ffaa39719ab32b45eb8e601c1f3ff989c1e
+ 21581f439dffc6f3cd4ae7e76da236737e6eb57d050dcb631721946558b6aae4
+ 67b264117720f9c844bd1b20d97c81a4f37c75d26d3b41d33e37b1779f2fc2e9
+ a7d1c6651f2db9d8fbcadcce3d2272f5bae46318406754740f7c3e28cce0ff1b
+ a0416870f3958bd358d545c8133da84f255ea9bba40de9bb3f1e9f3f5783db2a
+ a4f86cd5dc8b62d11896db064a837b4fbd8c1202674888bbbe5b3d64638b6d95
+ 24e1f8f4ae17ce3dab6f9f194f10eec65c84f82286a9faccae9e3bd57c512c2c
+ 654cd6f21c6eb9bb16368d12bffba078cc90864515b48fdc2f85a7a09c1f1896
+ 3f357905595785cc17f7be498ed9297dbddbb71c55c2d1ebb798a44c4788c9bf
+ 0fe0025905e4adc0af8fdb89cdeb838dd2d9b46e1c7a2f9deda25c48ed53c1fc
+ 7b67928412463c0affef74369c88f1aad052694ea21ebc3a7bbe4e9eb0b06c36
+ 82fefc78667c50bb8c4053082a71db4ae9a484e9e56aded3aae0ac338c5aca7d
+ 15c9fb904731dcfe01680420887692dbf9a6792632710189e1087ff7c5b6cc2c
+ f2fe7f11aa7060780588f6028deea7d6370b4232be79beeb87557786a79cb288
+ 231e14f797e337a781c133a8eb3ffcf5b4a509698e15612e58eecaf5f27108d8
+ 5baa981f7c54b10aaa07d73a5bb78111f5c789dec1a9ddb50e3bf74f0146b6a7
+ 31a371a521fff0efe67123e6b1cb47fc643ebcfe0413e9689f4029d2b75e7fb3
+ d96d090eade7f07cb04b3f03e5f20292004a81c058de24fe03015177870f603f
+ 2267173c7ad36b62df174ab2c8d948684e8b7aad972d5fe998d65aaba91af4cb
+ 1a21ce90bbd562230a005dc1d288d64f2176a145111322b44db16c7147b64cbf
+ 0fe39ea689257774af7078877e0203de11efef9c6eb7b2740b7e461def5629bc
+ 1af161a0a24d418bf6ea5e5912a89a7d49642c2eba4d2942ca8ce511975d6cc1
+ becdaaac9dfe1d8153bfbc31a891cb337a3207ec31f8d1dbca8cced4ef40a73c
+ 5b5e9148eb782f4119a79929861d12e02178868bfd14a1388fc1b2376221f5e6
+ 44688e59f32fd793e57e48d600045b1eac4033ef111a3bdcaf1ccbd275e30422
+ 04db61386b5931c6c747fd5a5a0cd1fff3b40492b6ec8cdbbbbcc9840642b46d
+ dd17bc5ba7e86ac4896406aa6ebd67efa76f1dc1ec9a9a34c478a520b0dfd97c
+ c30304f267b5e6f33199aec1cd033966fe22f73b34e38a94b06e62245de1a71b
+ cdbf528be36a30c245deba1eeab1a32218578fa41e08d0a9b252aa77cdddaea2
+ 864b3f543dbfb7f84c66435e918957f0e1bc82c3159dece241790bf7959b37bb
+ e2bf1b245ba1c95829feb852449fc547b0e91ac28607affc834085d94cdbc4a9
+ 1ef9bac22ceb1f69cf2938d19580d6e9ef0c8688ac576231f96cb9f55b2d6ab7
+ 5c33fb7480791354096285ae88fb0d6d79f779b9d040144b3b182804eeabf413
+ 5423925a50e3c5529d649491f26a141a57ad5cee8dc83065196f0f7f385219d1
+ 4436eb36cca894f8cf28fd6ae3ce2b8f384619f03342d254b98bc8bb08d8d608
+ 9eeb98fa8a5068d500d999031ef081fc6f0fa21b250f0e717affa92680b4d415
+ 4a5f71bb73f83c6841070dfd1cafd205ced0f203d4db63d841c46e8fc8b6ce99
+ db144553b387f5c9adbc7775190529d96ff5c8702ef1ea8ea05429ea733780e5
+ 9bbcdd74ff23ef84d498d3de82cade349c7df965707c430d0790f0f8564141a5
+ ec9b7cfec5f0d14df6a47084b32a1bced03abe4ea4bd6e3051099da188378c99
+ ce2b7d1d81e1f6a49f68caa7eebfc5e6c19601957fee797b6634035c95040a4f
+ 3e7ffe9cc49238786b670432a1f36b398db7295eab9a6869a19f0b28ee1d6d1f
+ 994ce3ce864fced9c0cce664d75f2395632f1413b4c6bf84650f579a7906ec26
+ 6cb81a7d8e5e58167b00d1d7d807164ddc9a3b24e4e4c360d2dd7533901e1872
+ 1d235ab850c9631d47192079f6b487f4e304cf61456e34fef5fd969b19499554
+ 4fd6a79466d6c2ce79b372633b0f8b1d0c319a4662e6ed6a085bb605392302a9
+ b8960c103e7c0f2e55c0ba52aaa6df8ba6a5b9accb301c736b54199a33a2ed6a
+ 1822c51c9aabe3610db5bc89e59b929f3922652149992bba89943590a34cea2d
+ 5d2f2940ed5cf9659436dd467139dfac14086a5ca7fe3a8e2330e16a11fa9e6b
+ 32c6f6cd9009c7ad190cb950d0e91ed2b23dead3aab829ffb4c22ea5e45f4135
+ 59289943270c1a9148425b16ab013bcd5b69ea89644d7209313f0cbe5c454d11
+ 8b73786dae0c6d71dec07c6a7c308aeb31a173edda16ad59958c34cda8289ea7
+ c866f27686d0fbe38bc3a172b1ec42db52c635386eaccae3a07c1da3eb452f92
+ 98b5eb837730e10c103c9b0424a155f3d65da926c6657dec64b684cf290b8c8b
+ f8445aca65da7e4040915b6e4534aa25d2262f8d43249acbbfeb6a3590c4c052
+ 16aa6da6742ca27883612bacb2f0a92c008159f4c2a7c1acbeb0919114c6dfa7
+ 86f351bb615f14c511c7ed52c0e32f1859eb26a99337c499f5eb0f20740bbe78
+ ef0cf615d4ab16b2a52addf6ea9e468bb7ba2593c2a98b1e9531785c4d9e4ab4
+ dd167b58163fe917eeff1aaec036756e857a8e25f0b7030ef7c5fc0c095beee6
+ 698c8e09ee3a3a0d7b0529c40ca812c85e6b45639f0b425012b16c0b401c6c03
+ ff681af19cb35af31b35833ce8f91735758ea5fbddc95c0b5bcd65869d14b882
+ 9f73515b6051d123bcba268445fbf2240a54ed594f2d1cf1180f9d8238764f61
+ 6d3087c780d1dc6d150874657d53fedd64e415c58dba4d2ec1f642e491a0bed6
+ 3b6e43e1878f8b605dcd10e7b0f593e34858b730ff8e59f373c5d0242353f422
+ 30259908d52b5d64da3f8e69f19a45aa4b31afa07033008657d249e3972c9959
+ b6867a153db92846b0ad9e0829f8b04cd4c610c2905a0b7422801df96add663f
+ a22ac2cd8cacd5f916f9153952d7fb245f7afb1c4532eb69735260831d7baab8
+ 6fd622d5fa90357a2c19fa01b48c7e6deaea665c5d0eaee4b22909034b6d0587
+ fada8426b1b2cfd57efd25eef6792b50027042ae2820264893653c86207eb1a7
+ 07a23f0e8094320afce07c7212bdb3f8d035e5a8d4ac43165e8853c5548697e5
+ 0b8b1a931baba3c3f4cdd5dc43e81a12a5f12748d6f99e475fa4b93d1112a654
+ b8c35bb87da2b1190f876f9f52fc0f5f2979b247e1741510b68135c04eb67547
+ cf01c143a04f8a95f165320e2c362683604fed7b4c4b9e43655409df721ea862
+ 9e2d995694dd525dafeba8b06f7c69451721656144956b6089b8fb4488225454
+ d01c027fde7921000a2e3faad29c8adea2b0638a1de7017ee3a220c140254fa9
+ 7fddc17827786fa059a39a55f88a3042e4ae47ea0700a73932b2e4db74638391
+ 033bd132d630249988330ae734389e632713642768b17c2aafa28e979e221032
+ 4f7da2df825e9921556e6f6b43cb56c20b604d822d4b47fe5d96855511f7bbad
+ be92a36f159b747b2869749d5e1c69a9c8fab11a7525d16d3b9bce6711e6e03d
+ aa9e88bbb9ba333b7d1b3347f1ef3825f28a3cb8b2aceac35accdd50e3272e9b
+ b4e4ac561ee22f6837eae67c54ae6d857bd0c68b26ce2525e992d5514509c980
+ 58b68c3895de08172701572777a3b800b9d13a7644601052ad76137f25ebbee1
+ 7ee8da67d9bc646e46bbe1cb954a9abf550b55ecd4c0044fa5af26feede555ab
+ fb6fb0beecf8dddabdfff56823bf8236f0e6b94298d352bd68743a17a3670605
+ 31edda540f4d2f18e1b0fa4b4162c6df84849eb56b488d0d6467169b337146e2
+ 4ae21f9638467f8c464c376194f75b53af07e1695edff4ab2acf7c2cf64b77e4
+ 52d0971ea0cf8958f1bb0acf4e882618ae4df0e6710945126320abe475843fc6
+ 3b17f5970648f7f994d0139d37eea3af1feee8f9f487bee609f668901069010c
+ 25b691d8aee42c9175a7bb5b2affc61736736ea98644bb11b2f7ce616dc9c21c
+ 4da7434929cd4897cf75aed0b34bbf13e3dedb7b853645c40418a819cff73c6c
+ dc65425f181b92089dc703b0712fc01241438a3d600dd3ba4932a165aac962d2
+ 6847b85bf547f42f7d0a8ca112a26a9c2da065b3adf9e6f4cb14e7c7f0130166
+ 34a0abf8098ebdbdb30bcb757b5c7524054b63f68c016d3bb38878d15371e05b
+ 1f51270dc45f72024c6bb4b78bdf1d8375ac2e27eb23323e35d3600cfe96c904
+ 385634f5e7704f391ed477f4e4506d45bf1b2726132b949ad230c3327e58c9fd
+ c6fdec48042add7ec4b22836d4249298ed65231bfdc81b5f6434c9dfec5427af
+ 1446f0a452eaaa0b86cffb7073ec6c49069fdd779a457c3acd32e026f0ce3d4c
+ e14cd486300929bf6f48addf7cdf13c4cbffb415b76216dceafdc43fad6cae3a
+ 1d6bab805c677889f42bc03d1ca181b2ea2d5baf3d60ede4f5c78e76b3c1c83a
+ 64e9fe67d47f275fd55396b2dc490cd3cc898c6dae246f183d980217674bbcd6
+ e46051a3237b28c5ea5a3d9772fdf7209cf1a646daf4c24e8d663a1116613984
+ f438e68f65423030353d2c4c7e1f02661d59dea875e87f87045b88f44fe21705
+ 62366286540ebf2f3d88a44235d4883014df2bb00a6d13d6c40c7dbce2a6d79a
+ 9e6d721284df66c119187fb4523ab488742e94406792d7faa8667bd655f75298
+ 9d787ee009e0e1af6987d356ce308ed4c9b94547d5ca807ccdf3bc416806a8e8
+ 75a69cba441b66f21aaa5ded1f9c4f86bad5def2c0ebba69dcde83c7d9d12c63
+ 9ff48514c15b75007c191cb7b11f32952dfc803f02c0495d5881111266e0125d
+ 437ea8ba0258aded84163e3d26245e7d7a145e2f1eb9b3b59b56c06861dc81e5
+ 3dde7dc2367523a13544ee9927806aeb62530828fa194cb673cde49aa155106a
+ aed7b9e54c407656ee331f48b500babca64abe2ef3ef24c50a65f51ca9e8613e
+ 91996fe8b583d858c97ef1379bf18e74024289dbb7bc16471cb9fa4902067e33
+ f57c53b0aa8be49672d8862b31031957018202ee00eca8555f10efada7d74865
+ e29ac60771faa7550cba79c877ed8b54d4de7d685a797db75e45e69345a26456
+ 6be5ad0618170d74866877ef9b10101521ed42e38112070077e0e26f3a52d0ef
+ 58ea91ecacf64e2f1f7489f7c222b33c739352f7453fbabdc61a40401a62ba38
+ 92abcfa93e4c44850f66a89977662f5e713d55e9083115f081a2567d6fb6fd48
+ 6bf6fe523fc8e7962850a039b0995b3035f3dafd9959fcf33022188ca9ef962c
+ 1c2f7f82738239a210e6c82298292c4d34527991678cb824db172979c29fa195
+ 127587eafdd1a5618a57424c915824a9d63efe7e2cf86ca0d0dc3c6610054495
+ dd132f138f0d4905cd07cfe3117875e5a510092565976cc3d93aa6c5fbe023f8
+ 579a79b85d09b16ff8118ad9662778f3b6861bc85ceec040eec75e388a18d160
+ df445613db4ab144fccd8dfff7fed6bf08133d969478504a44f08c3ce4ea6b6a
+ 7b87eb337f5358145835542b76b5d2b30f18d552be3cdaa111c48ce48ebb5394
+ 7b668785831c3d94c745a87cca6a67cbf2292583ba26ab7bce976680af59d3aa
+ 772629d0585d5a1b0099923974e60fe5648d0df2c7935409069d5450f4b2f3fc
+ a01b277fc53686c121c63feb9c11d73ad9edf123e97c48d4dbf0129e938a6bea
+ 37c4f0281409332b95df40bf08021fc70fff3ce4178fe3f826c797f8a90e3cb4
+ cb4af9ef01460480f9e2a1e1eb98e2e54003d174a42c50b6a717e3525b59597f
+ 2cbfba559492cf946b714a1b68e9275908f99f19caae0b28c6d18deb07b91cb2
+ 074fcf85414e905c7c264a4dfd6463ac60686f8698024a28b47264aec2e412ee
+ 5e6ca5300ca542b802417be88850b7e078b9f779bb26310b6ac7a9740574f9b9
+ 1a7707e3862551a53b901d017e0a3e27fade7cd5f72ea091a78bf027ac1784d7
+ cdd53acaaab8ea963ef7368c40dc39a24fd0f31ae5285bd714976aec2abcf1d7
+ 9f47c577a9537b22d16e6616d6206bf002948406a8e7a9e2158ba01bbb8f168a
+ be4493f2d44b23d517e6c4ad36d99ade05253059c878e0e91241967c06aa39fb
+ c383ee58c19637072eec047cc23b80c7ad383bd69a57402a370d1cbde24c4f86
+ 2cb6ccdf291b7e403ad0125da428e60d50395aad5f002363255e7227ec018a7c
+ 5bd8228e3dc0114d3bfdf3827df4e4a9e8b79ea6f97218414d7c4adb63547611
+ 20b293ae54f2cce01943d8a75e5e98e65ee3d70352bfe2fa03cbf1d76026efe2
+ b98c560783f7b9fc4e859da28479e27eb36898300299419b9b19f0e14787efae
+ 994de5e657135eaf1749b7c4e5b67c46ae752a259bc950c87a754ec7cee98cb2
+ 85163ee68ccfc718631a1bba7b75ec965c33391277704d324189edb38ebeb02d
+ 0fcbf79b11f4b35fcf229b81456201953ae7d54e2d7345f01b64d1a9c5472b4a
+ 79d522fbe1fa2fbb25845eaa8bfe9f953bf0c2ea0d901b8a8b640e3a1aa67f44
+ 695848104df6d7569afffbbc97bdb69c4d836978dd801524d6f6adaf5a4d328a
+ 672aaf4d3f4094e569d52ebdce196ddf97617b5487f0ee44a71f11bc2ffb6afc
+ b5708f2729852b3a2f266aca2c0edb2882ce71529c375d086d9b22ba82b6e73f
+ 21e8a2076fee28f62a874b3bab94d897a6e85e2166bf8661c34d384c317619dc
+ 5c6cdbf3c439877d6fa5c151efeb0f3796d05f00c91d076075599c2850e138f4
+ f19d0e6c7e03fea4c240c8942dbf466e372b925bb630371cbd11cf127740b175
+ e534db41756020a921bf46336d8aeb195f99f5cc3aa031d79c7b70c5aabd348b
+ 758777e5d8bb4ce8f9c088666fb04c83fb8ef288d2c0306bc59c6f10f2ba3c54
+ ad73ce30e281aaea55bbd19229ac326e37b94667884de768c869e61d6d5d494c
+ 0a36505c7900ab735fc84b268e3b33d9b1be0c96da06cfea993f7cdba0ed52df
+ 0c92b7562548e0cd99dc59740daf84aea8c227375cb6dd27ec3db7f57aec5007
+ 931f68e7d6c7bd4e822660d0df20dc7a6c18d0f3a783c5206db4434cf43102f0
+ f06d4e333fcd69d40ffceadd41ff95ed889c437e0df67334fd2809db12b319fb
+ ab43f49a938f522ccea4eca0dcacbeebe23cad5c2ce651d23ef39f2a7bd5ac0b
+ d56fec22c8cce9001b61f51c9ca0172db724600c74b899703b03e22f7a4fe5b3
+ e116cf2d85b8f4a7b94c7e31b69dba387909fd47d7b7f1a1a23defc2e42c457f
+ 8dde4d3032f6b70d4b93a7c3374bb4e9041bbcc99f9ea3e2d2c6ae2d71ba9d2b
+ e3ea01353a2e3eb67c8a93f00a551bb6d7ebcaa8c7e2a66f9167e3632c83af21
+ e4fd6137e7bdba837b8189845ee9cfc6806100e78309079cde319c9cc8852fbd
+ b81d9851831799d3d2d2f620f8862b9c39282d632366044dbb0b65e56cd26f92
+ 5edd09c34d517c84e0c3e7dac264e1f6faa1ea9bd934d46e6953f47f0b813643
+ 8b361d01e081037dedeaa08f63bb448d036e617b5dbd11fbdc0645dbf8386c20
+ 0092b11996f291011635f8e9d63c197e5c269081e9a434f1d67b51430bcc6634
+ de71f20fcd193c095f6714c81d64940a4dfeaf73f8424f1797ab3ec58966980d
+ 4a5965abbf9f73c55d366c944ef0e8f6d526df7d8c4b065feb75d43cb6defb66
+ 3d035cbe8ba3e7f6a595641b8b6776482ac161996c860ee688231a911f59c8b5
+ d33ef4263f953e9434cc5e30d632fce69b4fcd03dbf86066ca99776b105bec95
+ 214a19bfb35fcf116c1ae05eaa457f6c6d2f4afc2022b1a6ca9dc9e2eeed5b4b
+ 6b37fb588cb70d49108b447b2f208ad3f30e78b462f87aa1327a11ebc3b8e824
+ 7982e951e3d53df59b9d3d33a49e955840d6424b2060ad1d040ce26b9807513f
+ de401bc2d9d258f997ea2e2d51502ea57717ccb9ed7174434332deb3b4c2a951
+ 3d1ae68453c3f408d1424ae02222ad54d635c8d5442e3bc03c28aae1e105f03e
+ ceff2c890341ffad79c58f62534603d41860d80813bd2541558e2ce20b2bfd8a
+ 858985365f7d8b006e1fe8785a3f8edd32b60a6824bd9ad1e86f5ef7f6411aba
+ 41f768a554e9839ef9fbaf90cbaeeaba0ea48edd6fd9a96d5a8c8ddac3e33b3f
+ 38c2813eb823ad5fe40e960d1295e11a87c5bf3cf717c8f4b3f2392410b9e138
+ 6ce464b54236a87f099499cd5e2a9da5396dcb48d50f621895dc8eaca0660fb9
+ ba7e0b51992f138c4f58e22e2f87af00a979deb234cb79437fc3b53601fd8a81
+ a03088252bc035a72e8e560883023874e2356b189074774d54d17a5d730557f2
+ 89a018aeb84bfa4f24f708be48980ffd22e85db7859870fb28b2c050b3bc3492
+ 1fd978d54414121b47fd4d292e5edf0e8b24d0e2cdcfa1485e734c2a1e0755fe
+ b64c9a5bb8ddbf643062787cd44a4ec9c3c6439741768ab205cb60fd359d9207
+ f2496a308467d38dd2a55bd02387a9e7f48370f7ca135d456c07f390f9f91933
+ f89c8c9b62a58903c084d55ebad0f5bcb090de112145cb2ad14c151764df574f
+ 98e26cc60eb64e687e934d7d0a8158cb77531fc65b85c8834e5f47d8cf4c9472
+ 1fc7f6b996497061f3122039392e35e65bfa89aad08cf8c9aa73d124bde81f04
+ 0e013d3595b75a2ec515edc70b7d4574e94680176176d76bc66400bdc7ffa687
+ c06de3c41402e7b247f58c8ade87aa055aabdd59af271fb1182b48e759b68112
+ cc1d0318bf70048984d4977fdba099a7e65fd767e061fb752049b55f2f768cc3
+ e5928ca9cfa04302f7bad802011c5f85154204636493fed798322d610c638003
+ 1d4b70af84ca4057174857efc5b4df89fb3f970c34505ca64cbe183bf19aa6ff
+ 4ec184a400d89babd91569a4c6286085083fb179e8143c3f676d486536dd6e64
+ 90afbb0c079fbeaf1277b1407fdd7718fa863b1677f18c5c24089cc8c3ff389c
+ 15266e6d82ab8ed2c893e24139a52556c0cc121dbab4b341f41bf04748cb4a7b
+ 402b38247a6ac464c36160e66acb648ef7b72d9f0a4c553c7b7f2db52a1d77a2
+ 105938392cadd8ed3ca806fd7ca41852ef12dc0a0f3190e684fa591690f24eb3
+ 08c16b6f79c2dc4887dd4c394af1a6ce79481b79ce028d52d12240ff7af1cd62
+ 4c5df3a24c7e1a6e0522987e2f7eba7cca30fddfb75e15eff0ea9bdfaac60fd3
+ 84c53e461e1ebf0fdf60d981eeef2f9846e2e227beb1409547abe19650494a7d
+ e9a13c36615a782b38593223f7e4331ab97a26bbac1754538ce52f24952698ad
+ ce04836522b69a826bc690d2190ed239474ee13aed347c57bb4f69d0954fade2
+ e3bcf549ae4b81095615715729d7e7110420ba14de537b56747d48bdb1f53ffb
+ 6a81ef117206ec93bba6fa10a6b647f8062dadffb7040a799b87bd97116e3407
+ f3ed21bf76aaf148bc23f957ac80650f0a902838f818e37299eed9237f903e5a
+ f8da3dfa6ed41779187dc95b99f6f81f25c099e62333a3d811a88917b11e2b02
+ 387ce84784896e8fff40762389958d9ab3e673aa5ac538508c65e156ed4a8372
+ 4e9496fc24ab91dd754ae35e6865c194d086a01d0e28af6a12515358d5418a8e
+ 9034db39ffa1be40768376629c5ebcd045feb693667bdd055fc9d6c764a9d7c5
+ 1307915ea0190cb417a3f2b40f4072fd8c2a2c70a19aaf9010514b6a1ad94e61
+ b8ceb5d95daa4324f87f4a8097e4860ed5a583efd9fbd7eb45c304bf84cc8725
+ ef3f8d6e782acfbf5f923c59a9f3d0966d7f1b074e38b59ab4e73de45be3b5b9
+ 22dfde966b032baaa695f8ec52d78c03f974affc8101ad626d740f8a7daa4e37
+ 6caa36a628f8204e3ccfba82770450e7cde0c9d1ab2dce37930f0bd812759848
+ 311d46618368566e66f790702163df9b5024bb500feeac508eeced26acdf5493
+ cfc78cce98f523304f72227e92f33b5e5028caa7dd2f118dbf24193abe5caf80
+ 9c69c8ef24f9dc55cc0b50c34d9bcc04d250ecb904561a92377387e3dc0dd2f3
+ ff5c4e1484d1c151dfb5301194d9b22a8ee4aa53554deda61ba4320248a1f513
+ f0b001e22dfe49bf22f7b88702d55939202825b06cd001fb4e2cf90417d4cdef
+ edad2070bed3698251bc1f119ba6b483e9e7855593d9e274261737e0cdb24140
+ 33e5edebd97c48146b5f31ecc3f64f0a8b4fa38a3ef6898816937e1c12b12077
+ 3f4320244094e8515252dbfcd3f37a7506b111642486700e3dc3d70a01527da3
+ 85973fa0125e71357666762e230c204f8344e4c5a39b5edcb9470fcdccaaa75f
+ e2e5f4c1d30be8712c9c187ae05e5c7aad608d67325e4edfb6b123d7e5d4b9e1
+ c0736eb30932af995fec4066e77662b38514c20ba9d57fbbf4c9d3173a5e9baf
+ a63b7721902cf750db33aaffc593d0bb02591d00df63dde5c3869755da6aa230
+ b4593c76fd547fd937ea5aae8458669836d5325682add7cdad1f54ff9a04b11e
+ e9a22d453864e11b7564ad8021bfb2db4f01baf56eee9e5e9516ec8efc9ccdea
+ 5caf3f25060025df0b27680cd77378be50972818bf8c8418fa71191b91d24f87
+ b282596c944dd9df959f94501299639b3b6bc2750a0f2f18aa935bf4829cfb02
+ 6cd2aae18922e3634198315e31bd864a8b6bde4adcfb1662d327effa6607a0d7
+ dc3d5bbb4456b2cb4c6ddd9b08e97a6e96ef1030ca90b8261ea076d567f556bf
+ 4a2bbba95564fd3fd20dc1ef35784dc3a5a331ffbb8799dce8884b30d71f6326
+ f63b2abfa3e8112b67c5d1d1fbcb3d58eb8a30adfa0d593081ef7e7d3f4a29c7
+ 7cec4f56cb930bf7e42dbbe8d848bbb8a8494bb5b9b52621f3141883c5b7abf8
+ 0d8f8693448dd59ed13b93f92739fa55c87494838895f952231660c418059e7c
+ 21c29da9d8b84e3acece7c909caa8bf78ba63b09ac7862e4e4d07e3f278fbd4e
+ 4981dd90eaf2dff80d033de6a47ec9f9af3c0ab51e8a856d787c9351a2c32844
+ cae1aea54dd98bb7caa277ac8b76f1fb9502d3732cdc21346ddb6050b2c22461
+ 201adafb84c80754816fd3a34dce8efad165745855fc0ff29bfa12af40f11de1
+ 29786a3025fe0b206326c7e700e7cacacd2fba1fcec3a5d6bdacc52d43301b23
+ a9a8ff21f36251b821d421e3b1d4ab472d80ee02733b077c44fbc489bbafa62f
+ 57f834b292c7e10a5b934a0857ae96559e3f19ae40071d2618c7249f87367faa
+ dcf04c07e2374a134aa5fc65c99b8641b435c57126c34a4266a8f02a347dd9f7
+ 2108e93702b4d88cd788486c4c89c99522cca731c27af4c8c93d939d8ec2306a
+ 4ca94b46fac5d71aad4f9a505caf6af9b8cdb370f629019cbba26006fd4ab8ca
+ 757b8ca3fe7805c6d99980ac37bfff4786cd82a33195f189082ded8040aade82
+ 4dd62b03079d614580c287418295cfe86e80377f68ee251a5a8ded6ca31f1a08
+ 45a3d569323c5f0c68adb4370fe36d559e4fad3a30a6bae9b0f144c4305a4144
+ 7fdccdfa868ff8eeac6bd86db9ae7a777a8b7c36a30ab2b022985e4eea220310
+ 0f0f92aa1cb436e0a4ae1bd514de820906b278a8099e2a47f60ffd939d4d4ad7
+ 4356b32039715c38aaff583af35387756bf4aa7046c03495647044f1a9d53c86
+ 344f00034af1ba0f7c002f59ac8def3f25534afd87769999aea06c7a31ce1f8c
+ ef2f7cb61d6aca0993ce33fc4f4efc2c82e391a71a88057d06143e8e0e714a32
+ 803f1fd91f12ac7241065e17744839eae74e761729fdc6c9c21b1c56198f605b
+ b82242ad03158a7b1f1cf7a9b70598f7d30201f2dbf0da690fde5593f35ed5ea
+ 10b254ee771afac1155db152326d4f087bd65b3e818bb8d447a5ddd8c82031e0
+ 6c0865bc58adeb95f6dc0a3e346862e2dfe591ccb5eed2358bcd81cbd1f553f7
+ f98b016866879ee6a700181e718d08fcb93a7c2559c8b24be22245b3a1462c5c
+ 26ed141e72e44f30169dc1463523ba5ebabf8c4f0d045a0d161daa99231e4591
+ e0f9cedf12bf72e518a2a749d3d4cdaab27290f5be07a1c3640eaf5fa50af65f
+ 2ecd76de150cea6855f59c4d5e4cc16d71f61d3d56c1b1b248909561ab7a654e
+ 4c914a12e2f35685604ef214712f001556a06b483812fb7b55aa1202fb3d35ed
+ de38d4d2e5c029fd0ddc423bb98c5998f9e151307d32aa325de8ce822d2f407d
+ f5c75a2b4326fffb8f58beb7cdb7dead2208391faf994c6a1b97fa57554f49f7
+ 56ec67821174811f7d4e2360baee2a9b48d1520493608d2036cec9038b3f7408
+ f555bd053752a4d236014624de0816577dea26f95b2fcc0ff8a3576e509693b4
+ 029f84306c9425e3f705c756de7eedf796390ea1a30d0347ea158dd7e9282d71
+ dd2122d8ec7352eeed9de3bf1726cb5f05ec5c2eae43c6e6ada089249c050607
+ 8e09c548fce1aa4852b84bc1897d7f09b73ea5e7fc4323355d3bbd5f1bc45fdd
+ b8fa679aedfd56df18ca3446240ab49a520a8871151f8cafeeeeed0955a4c932
+ 0d9c9e3f6564eebf60801815b34a05ec13d278fb1546fdf7605c07ceda409afd
+ 506ab0d8358a978c08979407171c4f9825100063f258580d553c41fdf60050af
+ 41f87445f8cdb3e8e108e42b5450cda53b438d14f2825bb07ee4f2b6d341a5b1
+ a1e75dfef4c760888f7a613b106a0dea5b7408df84d5e914a332631319a63d30
+ 1819f54b93d50a3e4e01743d37680193927ae3938b2ee70dbc9cb6f237c115fe
+ 8c8e6e0348f0e07c40e511ec5ce5f4ef8e6e21a6bd5cf8df4c654f62b35a4013
+ 4ba74eea31cf85c30f417434c7226d0fd66f94d539672a29272830af6205c521
+ 254904e719694e24c146a1bcd4aa98f4a3faa5bc2430b57f0548944d7b269405
+ a516d7fda0178a76f2054dd4d6c8324ac2621ff03110bc3aa6cb9dbc77c22b26
+ 47b42286360c270404fe67f0466f23f90dd94fdb154f000a19dca55423c4a66e
+ e3ee48e79225d3669dac6d6040c54d47dfe423e3569e331cfa2ede0f6fc397fe
+ fb2c5b4a8224a76cd4d1449b363db636ddd8b50b07718f7008c85264a5b323b6
+ 028e5970c6a55b378fb21983ebb93670d06d4a61972f8979a2b96489b62e2c65
+ cf1eace5642500063a80ff4815cf4fe4fab544433ee977fa4c1bc87e4ec3fe91
+ 50b8aeffa23adc9ecf467f051215cf89db5167ecdc0b9877a29010851da1292e
+ 80b71c6ccb447938c9208ad5e2952c3407b7262658f0f3494d0f2f1a4d03b20e
+ 1e0ab7650c9ecf8e62bdc96519f81301211286e2db6287bb73d775ae1b0f5057
+ 7e580983e305899c9e72a1c6048aa264055c22677dcca13c39a60c5042e14ae5
+ e8b93dd4374b4855b90c90db1bc33e4c7112f09c13fe3a273faac4ddbc9f7e83
+ fa75dc01e879c42049041bb9e139455399ab7a3670d967a08a9c887ce859c02f
+ 786302460d597108827c3128dad98ff21bb738612661a8d4ddc7ed8f550e9659
+ 338638670a4b3f2c7cb835864a193fe4e4b7eeeb4c38ac498ce6b528f4213358
+ 485ff3e17d21f49c704c9ef60355a2bbb485142a6428863cf0fdbf5c0c8b4aa7
+ d07dc68d87c3768961b245093fbaff895fe4e2bdd456d3afea1415d3dfc86495
+ 81012c24e65e0c2b62f182a7a027b64cf4ee869626ac37532e3b39b81c452875
+ c0ec6ae0c3768b95408f1c56b693d08f97ccfbf00189dd508979d38141a485bc
+ 0f16177a787b5698e7d85147b0d20a243f74676db6c2f7c606fd2400852a06b9
+ 96c5e600d56645fb712c1363b7dffbdc340dcf7baa7cf826699986b443c0c47f
+ f87a801c11e53bb673e0091de70d15a4d8568db86671e256b548f107955ea288
+ 8014fccedee67923fce6a1f4baeb23d7d43bf1299b49b5a65638bf4389d476f5
+ bbb64cc73d82861d81055fb12b9c6314f69f5ae54c798a27db6fbe589423b942
+ d8257912c7c625179a197c2e20cb4bb84f1d8cb7b7708704e0a49691738822ba
+ fa30cbc7c3a13abc3e73de418d50f0a442ec31a5d37024b1d708e52146a5fe08
+ a093448ccde61fa8d3d4001db36c6ab90c63d60b55e8b23b993228cb117fc1f6
+ d500e92371f2d1402c5e0f7a8403e407a00a23ecc5c4b36c6aef22c5fa99daf4
+ 4c46e7629cf4945def3f2efbc0b7348076419a2f00d073aebe5853a54e1f219b
+ 933608e9404473b77a416c29d0d1f8296cd8a5f488835f6bb7657cf2a3c6bb6c
+ 0b93d1b145b3d2a3758c004af75167c0b08eeda348639fc3a0b47f417f1353e7
+ 130f6e5a35f45a1d9c74649e207fa24ebc8f2fc9babdfd5e82cd09a2c9e5be5d
+ b87ac5d3bf1a7081bced48297b2e9b8ec2648e86ac3ffc5283bce621bf4703e0
+ 5c73313978f2d3714934a5e72797084c99e3056473c1fdb610283aa72cc43697
+ f3ab6a7d3215edb54aa42d21c1a8f68ab880d617969048f4ea9983ddf5573ef7
+ 3be5b8e1be085592606884bf18e18dd496fedbbbdbcc79f901df8946b638aa1a
+ 45b5e03a6d5c330d3ab5f23fe0443fb973f283ee33dde48c97a387ba13eacc82
+ 07ff258a228b5c97dafdc5739014f23e464eea52bac2e576e01bce831a87e05d
+ b7d851f0381861298773cf5837465d4872f6b02b8a857a9a0adcf942b78ea110
+ 5afa83ab622d4dd7108439bb7e23fdef871f3bd4c83521a3811d5a442f9e1144
+ 439a32cc3c4fc10b7846b7d1dc7bd3dffd9ab59f91be8903701e6341cb31cf95
+ 9b81115620d144e644001cd83c3df33282b3daa937e22472d20a4c60942acf0e
+ 31417147aaf3ac3b011e746edc54e9d254d5edd887110beadb59314ae0f956bb
+ 4e53ec25ce4d4a7fe5d32213ec9128cd3f5cfe1cf8d876dc1e45fa44474a7f5e
+ d2dbecd5b070828524f9511e52f957c886e128da71588e51cdd2f6d98c53b0ec
+ a1a3dda7382a3cae7958a1268caba384475daec9880891fc91ebf40b860d4741
+ 43f93d6e82ada1cedc3c9632ddc37c6bf4cf0f0f45f27d4fa1e65d565033f549
+ d3055a103c2f73fd8aa861fcaa7ca1ea9fc9457b8626a05deb5859002c3f2f5f
+ 259fccf5fc84e9c189f8c5f421c8ab1c0e3e4ed355ddf1d3e077319964639cab
+ 6eeb814ef141898c64115a6d0ac3a7b500261cf5a9476d1ef4bbc6367c9451c5
+ 7cdd58e4ca8738f65c347e47ee354a2f4211814fc86e82fe7d54e0fc80a981af
+ dd8cd945f208df317ebb820bb8897eeb582ce3720449e215ced897f1304a2f90
+ ce91c559daf1b3a93d5b7f986c84eec5ba8752a2b432501d3b74666237f0558a
+ 20487bea29d88c2e52645c230a497e6622efa798069c01dde8c0977aff55c806
+ c334f3c18fd16d5ba6bc87b8e5e649da29dd1f2d5be23c401a13c4f032a74d53
+ 10fe8282ca4ea4d63589f604a2ad81d98c97ebc160399427f12309af61c5934f
+ 53f2ff4ab5c4d75ebfaa40ccd3bcdd96727206a391aac93dd18d7f7331ae341b
+ 558100d7cdbc75391e8eecd6533c70c6789009caf0938f90ba91ba35a6a7f98b
+ 9e3077309e64a5c36f6c65dcd60cb7b2357f82bdf7a3a865bf53b5972b5baa67
+ 57a3dd8bd69849f59a7aea980c2f5363892c75d49c04ccc65d2b4e1aff679f78
+ 0e444e91c6db630c84973f8b64893c508079e60c89d7d14755438c796160fa3d
+ 43b73de3057c0c1dd41bcabc2dc4c3f325dcb1dff8b7b83a70aa730e2c777474
+ 77aa86483d4400804c627fec734fa946a9bc5ba75863fa9d8a3b24aa15b2d6f0
+ b0a04a6be9e09e8084e7944fdd335a45af12ba4acf3eeab62fb3c28c8424998b
+ 80aab78864663f8521bd26c1d44422b3cf5c2ea83558bff92f6b59b25d88f0f6
+ 601c079048e92fc0b23412a4975b55e94d4c27bf66138c946518801dd23ca426
+ 49f23046ec1b00df5b0d0fb1e38754909ad7f7ee53aa43471df0e859463ac055
+ 22a9c2a0c00eadec76f1fe98e023d97c71ada33d27014d4b8061f8296ec7bb04
+ 1391d96830a1447e54df0c0f65a00a4c29b069599550b37af18f1f03995b7df2
+ eeb770d4d0fe8525177e984a4b97bdc189dd4b54ece7accbd9cb9bc74e4c2c69
+ e9f655c0b6762061574adc858759fa3b3a6d9801f647b7812bf007e04d4fc71e
+ f484f7854227c0ac910a31b417f29363a5467a7677c8fae77c7151596cd815a2
+ 7cc7965555e76b6ac4c5cdfa751c7b51e34842cb712ec0d2392aad88c4ff9a63
+ cf72e6d3a7da979d67fa76f5a58a41c567069a42797e6deb6e605aaaec56c41f
+ d881b0f5ffcffecb333e9b1c6eaf2c8cd16972a17450f175c348a63b16d50277
+ ee47ca33acb0e0cf2e941084e286cbaa47b4ec91a0d9401a960cd0d1427f7d30
+ 57519d72ea365c0d23b0f8d8c22056e5e07dde2e2949f6876022c7cebb5d123f
+ 50b774a25d655e55ad5c5ee6678fd42e97ca734f3ecf8a3adfa467cd7d2d36ff
+ e0332789f18260e5393c0151634775026a63bd5d1a8113eae9bb40315f378823
+ 13cc12c64193af10d29202e2336a0427f93cec717c404765fbc273b107998119
+ b39f2d81e28e23f4fd2bd7d24fea9ca9674ffb76da29ff80649c7c9c003cdd8d
+ f8f8e0232b0442b82f05b7adb6b6e8b99243503c2168736afdaa109818fbeb46
+ 4dd2ec06733f36e4b3a5fc4e23777d7b797c46d01389edac2c04b755bd8eb1b5
+ 36b252a27c4ee6ea9d244c1788beac18c1e08fad670c763e00225da3ac545dbb
+ e359a690893e1cddf32149e3a3b5b47ff47014cca7c2411b780c4241b07bdba5
+ 9486ac235935b6e7f65d4740d33351a08a034fa0044371581fda5b2fbc57f860
+ 4b7fb3c7fa7febf6f38afdc9e78993a6d381c3741d72a6f8e1653d04e1dd66fd
+ 39da14b516105f57f380bae66659b9b1376554e1d090402eb104c75198571f34
+ 7fe00f0af7918456b32f7733cb3c22dad52b520c4dc30e08a1d69b464d96beda
+ 6479759a6d3b0042ac809ed2a66836a6ddf8c66940558b236b318429d67c4cb6
+ fe37df64ec0cbbf259fe1c21e7cd941e0b9b73993c537da9bb6d2da4f6170c32
+ 9a3ccb373a0308e172de1a397c73c86b2e52c34f3b26811ebce832ecab4e37f7
+ 8a57df2a94358cced9f027f9f6aadb80ec56223aaddbca89266ab57f0366489c
+ 31758dac832d6bf33ede942b3b709dfc2df30043c58b691405ee0af178bdce9a
+ bb61eb0ca01b697d572a2e3411e5c37731695f3df7c61603291688037a71243e
+ 5b68f48e4fdf4b18ea149579ab08588aacc90026d5b5b6db74a7bb413e7c6564
+ 932fadd101dd6b2d9c9848431a23bc10fe0d5249fd2698828470459e7ea01c9a
+ a571ec6b5d4aa8a16caf16dc5316ecb149bf32105289643986bd10a8daeb53ff
+ 9d745304e60745393b5d033eb0cfff54f6b4cf0a2d93f2037daeeb52a2a565ae
+ 0dcf97af14488167f2d3f4a5f7b6f24227fab3b4439c6e2a8f1fda86af5a1017
+ 09010d77e003eaf4a35069c35a1a61bac73ff648280488a5be65e751929f8a27
+ f5a9f5e848f8dea2a6046a8f2b388ec38033125204b96d4339d38359cae9debc
+ 29106eaf89feaaeeac1d402f11a780f088a1e86223a56dbe2eaaded213e91b53
+ 088205d9ccf752c92b80c65c2b3469a3e00fbd90bcdecdb6390e35d58a5e90f2
+ d977ca1c7987c83bf72a92fdfe0c86c887a81bcc33147587e77b5bd7cdd3522d
+ 64240c75479ec66baeb5f4816d3a4487b340407c6a74cbd61ef958714207efee
+ 6903650f086e03ba8b5f130be1e3804e475b2e55d409951affaf39d5e88ca91b
+ e7521a990f67f03b4df406905cbf260d3a323f7f89af3184055529ad8cdc03c8
+ 7dfa8b458d480f3d0bd608d0fb3385335fa57297c02500712dd534ce3ca5381a
+ 9e472a099c984080abdc39361dc3a6d8a1c043eac03c60a7cc9320162fefe049
+ 59243cf57f4a0c76891431555245d3ef69280ecf11d2a9739ab4f7e0ff9816b3
+ ad5ed62f66d5093f29b145ec6e00d3e485acab9dc22fc801dbcbddfaa248e218
+ d83271bc53d25ca3639367b246f625c15988e0643a8659df4615621f97f5cd20
+ 2111cf2bf7b98a27e9c9e6e046e45a573acf6b3b7749688e50a6304b2504183f
+ 1593ab43397f5695ecdad683430271851cdf48018c74ac3d44399e867c337d48
+ be1310cd621dc72ef8061dc9f59a6d74601ae1f702614019adf427d700f79fd6
+ c174487121437e65c945a7993ab95465cbd5e4fd2688c57047c1a588edc525c3
+ c8059a95d7fde40f3fc1b6ae901b3afcdabc83c78ea383b673ada5834f43c252
+ c9e5c4ef706d2b2373bcd83b734a6477b4dec8bfa9741945eef11c335170111e
+ 901e30b2b56f902d200a29eb4f9e50aeb51070ef8f8135923ed83f0469bf8424
+ beac3442e8ca795868e16c46aee4758cb295865c87976b868e1cbbc442392b03
+ 3a584796b4694ebed884c7389c456966364ad1529f189045ae12bda20c3882ca
+ 5b294d3c45a4761155d802fb9767b45e7df9e9fb2187061580f0892e32ad3535
+ a482c1dd7176a7bd3d7956cb08ecaa15171b04b6e42812d1740d21aad8a4f02b
+ 9a754f65d55dc9e224018f7a4db6fca4afeaa2bebcf43df94b43207335e56ea1
+ 0aa72e066f9ef82cce0fa6bcaaad0d73ab418c61b81822b20571c16d4c483e6f
+ 0a5316270797753ed67a72b2a33d9a28a737e463c878c12e923033ddfeb65cec
+ a869c62c3a7debf6d25dfbe0fe5e429424113163eabe415bdc5a2ad33c912fb0
+ 9f04f10453e33fb03d8bb17d80e73b995c57c7f5dc380f13bf1718788421c577
+ 3232b462dbe307d030ef950438bd6f7d49a625bbd713975b86a2de685aa9efc4
+ 416748d6ba8d96fc8d6f5cbe2e223a64c2f7e3e56c4b46a1735108d8cd1682e9
+ 35133dea6762375afe9871fbd829008beddc0f7a520a302f8e4cd7f749c9ffe8
+ d99fe0465d684139f327dc4af4a5498f9cb7587af1cf48736145873849e2762c
+ 15a3576201ee3b862c30d8e467d0793fd3ec16ac2b606fd7f096d016214ab55b
+ e10f9261c5a977da013ce3aef37a811ca02dcec67e3b2fe85e671b73738886bd
+ 58f82a9514db2f1714d8a61b1993dcd40163be25fb5ae11012621963063e0834
+ 6a012fa6205feeeed0a2e7ab9bae25217b94fc15e0ab3bec8d0246c0ea39d91c
+ 27310313df9a6a8cbc2c21cba8dba11d0867325433aa066cd7f70ac2322de211
+ d07432dafb0cda9623f24dfcee745483b5b487f7f3807c61a333db414ef5cd2f
+ 71f699caa2aa8b115a501cf7f847bbb693b9ddc2873d2d777f0d5967d813258d
+ 1ba011fa0b1769e05dd58a26672d643966c3fc3735ce54c34c7d8a6bc22d66ac
+ fbb7f3e8b0973ee4ec09335512ad5e3be89528d9030f570bc455e8c9ec862ed6
+ c663147653904f98bdd4db271e8c3dc15b88afaaf8022e6a0c034d13805057cf
+ 1d3fbc6ae03d18d146805fe30e93ed5a95f5222e71c210e355c23322c8f2156a
+ 2dadeecc441f7eec675f5915fd2d18df02e5d81620850c2dff41fc7ca0e6e22b
+ 4a02199f54beeb940c788922b33a64c2e3076ff82e320e77e745f7647bb12f45
+ bfac0c91dd3e9dcbe3b02f98154563f9e0356cd899db95738c135741ec047ef5
+ 7cd8b931e585c5dd9571e2c04ef50e4ef27336428ecc608589e679c61f76ca64
+ be45585c17ea5348cc2895679ea9a34d770c1a64ae5b16b312e6b5a8dcdb942a
+ 2ae12a994ba3a46a3cb87b37c60c1f5616e0761968e6d946fa74642e251b22c6
+ 5228c676d802d5bc14b086ee7ab6ac05a9633c6be860413e3f11ed951a00e946
+ db4ea439cfe92a5f96b3c540d6b1c79c9059f4740e2bccb7bea143bfd662bb7f
+ 3f8f7e3301c9974cb1f8ede6d0f37f3be97c3d3988f219aaa57e5a59416713bf
+ a51f39eaa6c9dd8061545f8f4d5166ae049ba2002ab57544ed3d1cc35dc5b1cd
+ e1c2747ddb0528cb899c71568b09efc95dc50cb5e7776a1effbbaeaeb8d2f852
+ fc38334d53b8b593d3dc2ff8569da123a0d2c4bd62e48aa56ecd814db488a669
+ af1a51b0da500c1c528541e7a50034f85c2e54f2c0c6dc77fed88a50b634d4c7
+ 34f392d459e6ce87fd02b513b4145eb71e41d1737a1eec267df3f031027cf2f3
+ 0de91a8757124097cb6c7a94d3faf93e477196a30cc8f4fe96256afa293d6b0c
+ 6f8621f8ea4df835912d38d6acb82469da3b3736cf981c94a01ebd7a770cfeb5
+ 1ee589f07c5c5a4be5a156ec265e4b28d1f44669e1d5690ebf2f3d88a44235e6
+ 62a029e0620fdc0ff0fa1e0dffa79bab83733780db56169182b8bc1443f33b9a
+ 96d7c15dffa25dd1e74c6fd65aa8c427fb5378e8af98094d5efa5c4de356ccd8
+ 5a4a93417604daddd4a30e1be6156df7ccded63b4fc317efb846c807d46e3406
+ ad405f0f358edb8db86a95b6aa5f369975030d34b7ee5fd8f9ef0fa8c6162c47
+ 3358bac69333993cca212457bd52c7f478f23459c37a1026c9dd9d9d21a07a46
+ 1cf7d1762d1fad87567b71525110708b7cd853a8deb39047fa46717c86784fce
+ 53d7024bbd26b8babb0871ba6ec0d1eff561e948dbeb2f72f4ca55c9c452ad88
+ bdd28acaa0eed54c6e654007ffab077ee769d9ed80a3b21cba436a649d97500c
+ d2468edab5b23a70ee244eb9a684b1ed0e1cfc9a6537c9c2b0999d5db07eb8b2
+ 951251cd19c6378a009d81a5ca61dda17c12dad94007a12ef33e8807c6bae45b
+ 1af312426234bd5f28cbbbc96de0fa88955d8b1f2f2b2b12504e7e8d63c3d0b8
+ 888681b700bdbf7241550a55a8099214ebbca3e46d68dfe6b66784ec031b41ff
+ 2906c8bde06f0a0a6098e5d3625f6930b99a3fd8815fedba31eb3fb8d40d29b0
+ cee92124f274e14633efccd22ce7f4bd476fc073f0ac35b810b114836f7eb319
+ d3812c7c2491519d6846d0e0b4de693702edd1a702fc6183011d0c31cc5655cc
+ e08923490220507a17d9fff7f097ebb6fb63bf518ee7a1c57115f352c077adce
+ 6e84ece85c34c0f24829f23f956291fc1572ee35242f8235427fbad99cbcdb91
+ 8b84b327222535cb95b53417da9ffaa4af85ded3eaacaf995059d2cd4787708e
+ 60dff44e075227a69968c9b0a3d756c2ca4e3f36460dae430002277c37aae61f
+ f5e5dad055a00c847464145bbf05e21b0fe2bed8738629d95f3175fa21df38f1
+ 38b0d947b3d65777d24af2da33ff467fb12a9d00afb474cc7334178619a8cc91
+ ecc601c98b2b8dca7fa88b48c4b7f6430aa751ff995db878026a6e91db78bbb2
+ a98924c770307a9b991dcec113fe5a48c0396ac324a5059823ecdb788da4bd9e
+ 60e8194e12ecbb3532fb86fe8e9ef3459b259c3dd5e8098754c8c3d87e9e5fc1
+ bad0f7f63163c0e68fc80bea3696c7ca8b33def5ce23717b047aea770b0c6be6
+ fcf88a5b0a95c3337277b515652622d6ba186a80d34cf1e02b33435cd7a2e1c8
+ d82217538dbf366e181cafd300dfb089d27f736246ced011b53b7ceae2fb314d
+ 06ff73b11256e3c86dd7f923a13d63746047bb9b45bc1dca58bd0288def2f236
+ 355aea24f0a1d0e1c5f5cad3318465a8de2124864923d281fb684d9e7f0e1768
+ fea6d759af5be03bb744f290fb4a5fa60b7fc9722220ca8465e6abfed70a4fae
+ 36084e461862c280e59a8ccb3f66303f572e9afc81e9287a2d6e68a5504cf692
+ 9ac1e6a385efba81ad2c2757c96d59db527b19446b383810295e6be6e2f22eb3
+ 656857b7973e69efd0268278081b6b806362d465576208a70f25ed14c218f329
+ f4490aab46ab1bbf458112bb3cfb650f14ead2d08dc8214492e9fb06b5596bb5
+ 282e1bdccdf3d4200671ac4e13c7ef8870fe8ddec3bfa067a8976844bab6094c
+ 28a1d7fb7fa127531d1227029baea93bbc898fac105a622f28932f16e2e0cd64
+ 64c9ff461f11c71253cc2c6124011bbef368b8abf801cfca85ea9915febb9506
+ 987a2ca7bb4b368989adcb4ace9e1d51b98b6c4dba9cf602ce0af71c3a80bfac
+ 2db2b06ce3d07f58f565ab214d3a6e4ea363f673546a7748f2c2763e94aa27e1
+ 5f4f90ee7dcebe52b9a32afd3eb7c9db9cadfbb73a8703267d3756183c46d568
+ b3a39706c6aa261b149f2804253f204c188d5c1df062e60a8bc5b54edf88fea3
+ fc6de60b465f8881381169d72a4c9efe1bd835d132bc0fc05563146f69b28703
+ e49e817be954da45f54270b359506fad0aff7a12652221accdd77acf79a3a57a
+ d1014f83f1a7be91f3f45912dda19b25cb49a7e4174d74055c49a77c49862797
+ fdccef3fc82a2e6537cba82fe74e96971cd6dddb3a1008988d6966c19729df5c
+ c345f214812ea50e8ef7ee339d3e8097c8ae9eb8edd09f970dcfbbdc0516eab1
+ 29a4b72c2cca455bccd77e8d30ead4c93f4d7b3cdc17b0622818415d761c6a70
+ 8ef0a3541d85682b878320441f75b9371c2544cf019734695efe3d3e909df69d
+ a3f50247e77a7059b1bfe48cff42ad33e1a6f2e67e8b0f4405699112ca83fc3e
+ d933a4915398bdb74af2955548f67182a2bf97475a1f98540014fa2672941121
+ f1ad75f2b07cefde404bc7912ee07602e5e1d977dc7d24fcb598c320cdcd6f7f
+ f9299f19728cb6e545a42fcec71847efe4fb5b942f9e0406e6813345748059f1
+ 1de87b5ed8c72358d739b92202572ed175be1f5314c8f77633fa146f799e010a
+ a6c0d71f3cc686a97932dc952d585ce38962621f3aaf4bf97d14fd662013f814
+ 3a5ab8e72ff21ecc1a1f28944179427d14dfbc32f15c4848fb596eae16d8c4d0
+ 72b32e926f0cd2c014239ee3de6fbc15e71bd4db8550446af38192d5427633aa
+ 2a3e96713b46bec7d7d49466823dcaf68cf8f6d8b5c30e06a75dd626d71f60c6
+ b0cec9b06a53fef5aedccc0144f6a0890533adddc967510b8e41ec5b5f8ee7f6
+ a7cd5409581938ea34b0713ad534cf3ce62d9a6067ce112591eeb7ee165ba5f1
+ 3e35ef9737ee628beb8627df2a69ac5d7ff3b920c204fefa38ff826b22d11b03
+ 0fddb64f58d06a39addd9ac9d5e6def205785c7593e4167f09ff34c7239df87f
+ 6b2a93d7c05987061d05e375eff1e5b87c87e721d6b2df3b0b6d8d7c00700893
+ 6aca3b5a59bc7d6e0ccb1e6442dec296580dd4ff8e29fe95a6dc94e222e3c0a1
+ f2db321b2b5d82881b4c6a03053cd36b733540b66e8864b81c6c469a8007386f
+ be1f15239aea0e16b64b07099c666c3c3561bff5b798109c1afcd1e277b16879
+ 908b26ca93081f673d5bb0e57a98129f2823f84ca5389d1724c4908e63ab8a01
+ b1a31137a628e6edd143093f20658cb271064d02a0e57d2194500969a46e170e
+ a74a013a30a5cfb3f85fe0ff118a1df33cbecbe762a735375587f8aac2414221
+ fb4c562f65beeb6e3478d19dc8c54ba9ea5dded5b2435cf47aa6e9d8449d61b0
+ 5bcdd34a8c0ed9c68a46afbb1210d1ee584c31beef3bd0e19fc7e7e53e6e5144
+ 68f9396026550444a7f2a1d9861ff363ac752884660f6e3a27639976e04603a3
+ 187cfe164b2fdef737d7812c72a42cc26734256b3c6384e7a9e5188e5b258126
+ 1cea92ab518a591e3c17402b8d6ac6e8ba8a616fe2f3cd85aa1d947c7d004eff
+ ec84f19f648a0986687a02757f747f736b8e44835ecf944fce94e5d5b6d22c23
+ 55108cf69b28a5677d66647af9fb512e1dbddd263cbac4766759eb17ad2705ec
+ 316ec43818198949c6347b6df11505866590dd1e7c6e9364c8f5be7bc68c5d99
+ b6ec3a14988677e026718519c26fb09d3fe37c44b46037d2cfafaa69250a1552
+ f90c990cd9a5890387e2105ddda8547a9ad5fd9bbb473025476b3e9058381786
+ efb351d4449691c04126b03cc4fb1080b8d59ccc6e3813739fc156972c8f1d95
+ 8dcb1df8b1486d95b00e83bd5542b6e177270cc0abaea5a787454ed7c0c756bb
+ 74e63ca9a29b2a900a43d646ac91dbda711c5dfdf8bc32204dd4d01bb1c0e047
+ 90f0432ec15f498a0af0eb8cf597a6c5ba1b49acda534f8a33a630e50bc7a01e
+ 55372d5fb7451d77d09f2045ec3d97d3dff73801291ee733911a96e09c90fde3
+ 8c68a541668591411eeadf77dc7f99dba8cbd972fdcbbd01d89637f803c60df0
+ e2f6a98bfffed349fcaca1d113e264c1ffbed892ed168c3db19f796da3c3d643
+ fde51886b89f647346708ef34b9c8565ecb1c6bfcf60addd119ebbbc1ba78600
+ 3a894076fc258b1d0c1f4d4793f16d2a5e23e15e212fc1279be67e3daca4045f
+ 4fa45604a900ccaef41beb9ca12e2aa6fdecb50f10eb19e52548d8b473d0d315
+ 560e7b33896fadd827505519cf94e552c6dfd3ee2f5c56116da426ec96324e6d
+ 9f23304f2fdb2442150af2507b99031da28e89ca5c8707925c3f7df71524c8ff
+ bd025de6396f4877615d66c42e5d87cab1bbb720524c32a14d0b3fc018bccdba
+ 38a543e997b430707d3e79e6f3bc467254cec9af101efd29b6e4ac9654a9e471
+ 1265da42e4f5fc3c58ce163a53e8383b18e6f23c2b622bd3d7ffaff76733c004
+ a49859885c544803a2cecfdfd3d0df5c7019d4cc333257b61cebf93c39876cc7
+ e4555fee5e03b042023ae1ac59b0616342218dabe3af133c4913848d9b24a2e9
+ 2b3bd166fc38a530d1e353460cf30d982bfa5ab2f09e30de2bb667b4afa7fb51
+ 2aba5d41b2bc26dc6a888459c131bda1ade6a0722b8fd693d625dde45a23fbe9
+ fdac2f0cceee811137f601eea46564b93f36b61d9c105dd7dfcddea0ac0ec713
+ 5d3344a51b8658163c1bd5a80ff0770ccd912f1f707047e6dbdc2d2579c9801a
+ fab26f5be43d8a03cace57e5c4f0f63c4f03bf3198f6dfa833f41e7e2db11d8e
+ 9a3739ec70f4204d3c04db4164e33c0926840979d60194c136f39ed9f5554532
+ 7479e29ec15e62c47338c5bb70faded6405977317bbafe5f5ecb7544f8e884d4
+ ea7f93e41492d3d692b1a5f3a932af6094f07024ddb7a405b1b441b85c65c2bb
+ d3687351e3c6e5cdfeca24e7ea2e1c17624013eb219b2d1c11e1af21eff5106b
+ f9a5d8f1d86ab853001cda2402e6db1e21ffdad72bdf4138b6fcefc5ee443699
+ aae77201f3e7f8455df5c6bda280d0913d8716fd80e2815def984e7de3ac2804
+ 60498493d82d0c4be267c7627d9fde3e6c0299c226c28f3b841c123596ffdea0
+ 670b7bcd270868cae6bc24736e95d36d5ad98176c1e75b1b6754f10a00a62130
+ f3d4bbd607f906a60f14089f4745646601dbd6c055c628a09b652ff0bf6f86a3
+ 8c48fa8e16cdcb942b3bf905f778006be282aeba4f540dd3d65945ad14d54a01
+ 386fc28ab2ce4fe01b1d8f5c27df51f363342e4364e9865e45c02d229f490174
+ 4ee8f29e27a3fc873ff1312830d5e4d91ad9efe80802cac0c807688eed3c0aa2
+ 3699f9a9aae755d406d9144b527954709e17b860be68ed2912179eb8744ce833
+ 4751ef79d5486949a835aaf4dc24173ef52a230528123ef039a650842f6dfb5b
+ 35755ccedb387d40162093ea6e546534d0ea396377abc3a22fc3f35c6f1447fe
+ 2c576815e2a86c9e0afabd0459f74a13f8b0ff2cb534e2ed69ecdd5944d1cbe0
+ 206048c00770329552fd1a24110bc557612dcfd62a383f4d588b93a4c9d1193e
+ b60f17b27a22ccd2bad12f3bc0a5117aa59b4e47aa6bf9f63904f2ec9fc780f8
+ 74e0d9442070ce8efa2efc41ae269fdcd31e7756f7063e8fed63244ccd384163
+ cdaae16b120dbc73296eb7bfc14863928001f8e7a697ccb21fa15b0655acee5e
+ 0fc529497d3bb33b4080a753121817a9c260e49860fa70d591b34a89a0fe0dd3
+ 1bfb3c722bfcb209d2a711de80d436b384918fd47234d94b2fcf51d938d91da7
+ 1669342932144dcc27189c85388f1711584e910e88f050f43989e110af6af70f
+ ce9ee223e12f15834e34415d2d5566c6ac0a7efa11631e6afb4cd753bb8b8452
+ dae2d3811cd752d9b5a3b4d0d601229c975701d225ae2336f6630752371f4820
+ 071adf79a34af35b86a3c2fe2515c56c18d080138f35fbb390d3fdc5d2dfa2ca
+ 992c5831c5bda4645d7fdc8bd41c5d4a6c3a41e4cc79a0a62bd0e8e78cbc9d0e
+ fbe51fc28a1b441599eca62bc4e0dfd0921a7d5cae3f27ff2f8b1d17afd81709
+ d87339c9be7c57cdf4d6e157e4e6f1e316574f8a61c64613223b5f78ce73095b
+ 684f38a0447cb1633e000ec05e9f33070d7d71c3dcc97f5dd9cfb77cfa466702
+ 39a2a07f0969adf2233432f4951f9fd484e3cd04e944fbcb8f6c5c2999a20ace
+ eb0dd09cb4c2625769b07e8a79167f204b028b8bae23d2dee75fab58faadae91
+ 6edb1cef05056ff6010b09582e6bc229a6d6d2a30f5a6e7842df8c86f0feba1a
+ 019fb2e4965c5d430d35fe30802e9aae19570852ed00bb22776a808c86080e05
+ f83a38942da3a78171e1f166d4af2487878b89a76d5c0d3a72cb3c00c8e1cf52
+ 27ffd4d6e851891613417e63e8608adbf208e59c5ffd18c2d84efb5ce92d85d6
+ 63e98ac33b26e6a4cc4d6115174a8695e6c83e288a867260df462fc48dc9a7bf
+ 21e96c680f3dd3cf1c69dce24f8ea70604ecd23df1b655bfdbfdd7bbedc26f97
+ 3589ca33a7f3256ac1dbcb72f4068c585d83c5b631c770aeb10af936e01c353b
+ ee6aaca99edda0ed9bfa1530e1bed37dcdedbfa10b9f4baff8079dcc61c0a4ee
+ 0a8390b8ee52433486fec50f22facef032500af1db0d976f6df11e8a6b7860e2
+ 2592c73ff63f15a5ce45be37b03b9e14d7222b03260f18680dc6657c776137b8
+ ea98f498e520d15dff885feedfe8983164b5664eacdc8203dfdcb97503205a94
+ ebd7d1d92c738872271af3d167b4d8327a0ca571d22cc048d6becd24c7ec52ec
+ 6983551d9441b73a17bd37db89d7b5fdf6c53f73ca987f63ede9aa0693a40e3d
+ faaddfb21a2564cff84410ae093ef5e382061297c53aefd7e9a5f4fd19052574
+ c3a5fa0af8ac059f3b980d670c53e8f40a5f14b3f6bcf2cc9ba95c572489a34d
+ ddc43f1712f23a4ffd158a4ffbf07a8190ab6feefc687851aac2a2ebd100f171
+ 51bbcc4bc67c3e17e020545bcbb70414baa4507d6d62ae43a67e246af16aec3a
+ 344932fd31ae2808957f41c9711e62bae1ef4629f31940de87d0515e94dca2cb
+ f3994d12d317015f1c28d8e49c6c29bfd899d0a489320cd242f20192739c93a5
+ 8b951f09479556a43a3fe5f53d70007e8541b534292ab1ec8cf3b627ab78074d
+ de81e2eb14966f6a5ba59fc61831cc56ce084e1bdd57dd55e8020301492bac80
+ 441d41ea8f1d7e12d45e21c0a6c1b0144774785a579839bc51eb282cd06d5e33
+ 4d9e6d8a75c77a4f7fcb659ecad5eec190c09af2ecabf64b8f1d1427601b0769
+ c000c249fba2ae62440bfb401180df017636b485637162320fb6b0e1571d100a
+ 33accfcc4bd30eaf4ffb7b6a6055596b0b8915155628f014ef12e5497b9811a7
+ 2cbacdb8a67e0f28e83e4a54b41a697f97d1f57990969b747e42333596fecd70
+ fe72e9033b2f438e853c46bb9e9e1dec64698dd311058214fd2914c3aeb72c37
+ e24dc3c88e03b41c8b4c14d1fc21ae1543d2388cd9968c99b0f2ef0b37c07373
+ b2271ed4c33a8987116d8ccba89a92bbf075fc01ee1ba1fc60b7173f824572bc
+ 08ed62031023a863323b887ea742d1a3fcbeec4795c3680c093da059173a0f86
+ b3cef52133cec4c2f0b639789c4c69237ae08bd02845ce364e30c28b95de35a6
+ 176dcc317bd180afe89b4a02079311dffea21edc192e601de53856f0c328ef80
+ 7cc4c9df1a9cb11986891de4a9e824297efe588c7456b70b4151c68cc7c48422
+ be15578cb2c90f54b25c78e64ccfd9cc476d7dbce7b5ed95429178206b9d6b4f
+ 08fe0f66795f4279c9eff84a0620cdc044cb84285911a2a87903a4f86f71d61a
+ 6c0c066595fa0497f6fb30105296aaf4c38b729a410f563c19b1f349db8f68d1
+ cc5cd9ea5375253b6278f163cd43b4cbd6357d8b7ebf03c6a51bbbc874333e68
+ d885a466d3bea70dd9b74d89dd39694d7a96b39fb743e450a7bd1b3a73fdec7e
+ aaaa096b73be6eca1e3e1f8a407efab54227079b1d51abcbfbe034af69db5a44
+ c4e07d0a971224573f75a4f557daf7639f6b7ac1156d7de01a690c05dda535b8
+ 5b30cbf32c03b4c40bce719c53b6550d1342cb0f286dcfd611a4ea5c08f7b29c
+ 2a0e9dab6e47fccb716748e9aa42d6045d67ebf5dcaffd9388e78778255c420c
+ b286e3f77b0782bbc2246567101d9ca6320ba202f731baf12b9241cbac2901d8
+ daa65df864aeb18c6ae8d56cd538f4b8a859d4d309fb174817bd980c54bb06ef
+ 46c15e7eb7d51b0ecc6ed1a8da19e2b03a9ae244a9af3933952800764c4ed8a4
+ a3d61b4858713dfb5c5d9c2c4ca0c89ae486982033fa94fb7caaa9aa17836296
+ 4f4bd5548b78129e8ddf60f0178e09493c38a30e5944f4f608297c23e6ac1077
+ cefb010ffa6d4493ec5c2c36c2dff1e2678757f7854013439b6d93bdcb3c28db
+ b7d763958fef13de8a541b28f801a7dc81d59b8b33b7624e3d2b40d11bca7390
+ 19618e30bf215dbaeb4931df7909d745102a97b0e25d5434e34be7f68cbadc58
+ 589baee0181d6209d97b6eb2bfdbb1655e56b22c56ed7602d7c4bfef6dd783ac
+ 8118e705c6e433de198a16d94d8b63c18ee31bc05f7c2c7da4b8707ceff59305
+ 7ab5d34417372d247b35bc8d1703d0cf3ec469f8db0f386c303459ac9fe564f6
+ 0a9d400c110282c900fc0f2ed22a9c9b3c8c6bcca5102d532ad59b13f689a11c
+ f6f9e88883183e7d3b1b03916658e2eb6a471563ce90ee524387d5d732c3e473
+ cfa1c6b5678fc9fd1dc543f9692c680598793192d38c5ba07aa75e55fdc6ae87
+ 60eae4d0f1e7e84e1e3563127b4cf4798275ac892f64e2b5019fb3f9d63d82c1
+ 8f6f83044b0514d70571aa9dd6a3c3d75c2ec0915babec40ea2b430f8e72ffc5
+ a35aa5af1d578802614ab502fbe14c9868b727cb578b7af9dc59f4bf58163eab
+ 28c7007db4f59fb6ead68cdbb54be56683d84ae18de924e05c24cd2e6ede8c70
+ 4533fb9385d5416e1bfc1dbc6fce36de77a535c5d463df1c253c9457d7dc7652
+ 8522cfc84bd9ec3a813c0bd008817ce1ad40109752bd990508d0699507c2988f
+ e65696a950fd0440dc975e3cd52c69840c0f5fa19df83e1775051c1311213eb1
+ 0eab31d0319eaa2496f49fe79a16ff0a3f322a5dca0146725445cb191e1f74c1
+ ec47dbcffd1a0ad33f5480faf36f67744a4834107d03018b7f19b7c9f9f49b03
+ 616dcb50c24148ba55118080e47201f439f099421d6a4340dff4cbcb4538ea4a
+ a229d228d1e3bc42466db739900616d99e7f6452303aaf98c6d150c131507272
+ 3ae1646232328891467321742af86d65555c759a477dabbcc4ac50268034e1c3
+ 3f9923a21f5b5f774c83453e54026effde61c808ce8f13727291e7c29c6a1732
+ 471d20e3131f4473e11a20594575d0c4fc2b446baacab399990c551ecb91f410
+ 4c4790bd071902805d25d2136a96928471c805c79d84a4ee085dbc863fa27116
+ f1b7d3b86bb0b94b41d94abc348a3befc3e2bffa78d6bd017c8e21470590a712
+ 5d3cb57f7d414367177fdc687282d56adb1c5662238b2abf7453f48051553d72
+ 906cdb6d0e8f84061dd77c440120b0ca084813f9c20a44e91158c3254ae7b8e0
+ d40a5feb3563d9c6a02eb5b4e09d5a4a21cfca067258f3ad84b79b245d2fb010
+ 66b9bca633311594664c7e1e43f67691f6964d19a37390d7bce97648fa9aa0f8
+ 9b90b5601115dd9a05f30eb80e9002dfc370fb25186922a1422a7a8739c99e98
+ 696367884468fd5b2f924a98c35749e8a7be46f39d801fdbb987c2fcab9914ea
+ e87e3a066027a327c910ca591144cbbee11fcd76a1f01a7c83678bb39e7a54af
+ bbfd30f590606e69f9d4155de25d0cd1113e6cc27d4af69064233cd8831f0f10
+ e47739137db5aa9c422d77ea2d6844b7a080eac56803bc408681603819beaf3a
+ 2827d33e96bd6934172b0fa2742342a3f69fe62f2fb389cc4f408b6fa6469e30
+ 66b21dc64b18d9ded429c850be147f0c8c750f65fcbb4564ef9e865cfe80d017
+ 83d2711db42b1d7a1de945605b983e0ca09fdcdfed96307644a16b60f425126d
+ 681265ed5ba75182f5428420ddff62e83b6d57b92aac1d765c74ae095775e784
+ 18557812357c966abb2474bff88f59f6ff8af8411d37e5c0d02f725055705f84
+ 1bdaaba61728c340a60313f0ae42ddeecc1565caaaf54a80af0a75eaf421bccc
+ e9d476f23df35c1bcd89a22e7661c1a7f56abcfaacf765141cb3c5da04cf108a
+ 8f76ceba0172d366684bb71f51caa1e135606d38b4f4a71630a7abd2ef877f38
+ b8e75649abec0dc275d43db59c4aaaf87cf9a20ecebca4b1a7a7ece1f9e42491
+ e5fe7762a96bc5d3d18acff99ade3ec62a13663effcc72e0576283de2b45741c
+ 3e0e14567315bb9d2a09d6dd5dafc49f99ab3c250ee71bf4f9f06d42534194c1
+ b825b4c16fad32bd5b13d1ab6285c163ab948ded26924b0308e9f02b05b84a25
+ ebceb1f214095b77501067d6ed6f0a10257fadde20ac0eb79048fdbda22bb3c3
+ bd4575eabe2926aa2e2edd749e6d9525afd7ef9035fa65a6ad6520b3a7d2da35
+ 71438a2640815a618bead83da31a789edcede2e5d1c3517609927afa97454cb8
+ c2f56b33e3ce24b3de50edd5ae2c1f3574f3b42855af5f3aeb13e427900bbc71
+ 403dc6c496ce594ac50d0f4cc6a16e9f617a48acaf167ec4f7140c33fff90e42
+ 647d46de8fb58b9e873fdf223c327f1b9339d24a162f9bb255a3effc2d868618
+ bfab67025f76f2015eead7819b1f57bf6b7d2e9bcbc62189cb800ead7976cfd5
+ 95b2b13385f7d39413ddb8667a52ec847a753fd1e59e68ab973810164667aab7
+ 8fd30556cf2a88216d529ea625a79a01bd2274f26ea9c865429c68621dc6001e
+ 6ed17dc0f8b5fb21f89757e44295a286379eb8e228a8408de8094c09f58057f0
+ 3229b1ed791cb5de6e25cbc7e029870c7300644511a259edf9ebe82b08c6d01e
+ fdec094b29536be4ee024dade73a39ad514f88b49a5f70aa28a8737e7b665ca8
+ 51561914f5c917e9f0b69022b3274657d0da1cae16a164f7285424f32a1ee0e0
+ fce179fdf9bb6863a959ebf3128204b071f7233fde28fa1b8feaef4d26fb2a71
+ 2eb5860387f30284717c4388338919c658d203a2d6c203bb64dd4343c22164be
+ 3307322d9a2ccccf0cab9815e0c2b2e06a84c1253652b5b5b471aefc5b8bb49e
+ 3879bf02059377f16f8b739b6255b2727ed46ce82317c4c88309a21ac0b95bf8
+ 51bd2eb32da4ee583b26b12c6157477254bb6b71c0d37bbf34e218d5db70188e
+ 719cd9497226339b60e6a1d6cd51ab707a41220bad9492531b5fb0318cd3c06a
+ 961f64ddc3efc0fb26adc45658f73e4662ea92121b71220c7a87cacba25d2670
+ 8a33db999e1b36fc6380658ca1518c972a12148a101230dfe9f5a992bc24709c
+ 873a73b86cc4ec478c3ddb14c68ba9e8a9edb4a5f35e6ebfd19821c09d75d0c0
+ 209806d6e2726597c11d36129b1f8304e578d554f3a1969a48f5095e759238e1
+ 0fdc3b52a9b560f7af9ee7997179a10671ca25efa6497065e5511f3d71e17fd8
+ cf5105d16dfe46114b6c070b7ee6cdfc121ef9c2301a44c4d0957c6841cc120e
+ 4766a51229c665bf60e401d8bd79971e0bbc0b3c13a14062cfc0dfd41bab5a61
+ 2c2e1b5a5a1f3a4b0c6d4e40b07a3a2e6c674a5d8ccba872887b85ec0bb4ad0a
+ 669bd729b06a9de82e06803be5e6c06b81f43df6528cd41a9f08f60be991077b
+ babcc3ed85112ffff92d8d010f36276a0bd60bac888165ca09553c323d4c6969
+ f4acf1765dbc74913e8cc3ec387474df3cf784dabf1c770b848d54e0d0f2daeb
+ 99158c4a288147301aedb4d05325a0dc9b4dc6651b1cc9f8ee54da01ef421f2d
+ bc4dc4468b9d5136b535a703844b670341f313b36e449e00f7b832332b9ac019
+ 489874596c8a4392a55c63505f96440eba1ee31e276f3cdc534b399459223775
+ 2b95d0cc8ef6277df7fd17df182adc8e3aa34c787d4c8e5c3b1efa640ce25a4b
+ 39a669be2f72870a5acf7744f198cfb1dc9015df53488f0b371fbbe54df7a675
+ e869f3830a96b49f7dee4a35ac5cd259cb30659d1bb8877b05f68560c94efba2
+ 653620691753d8dfe80403dc9e25ac59be251f1c278976eef940be45cd3f42e2
+ dfd443299d781a6839427a74d7e3e0e955ec43ebf8522cb7d12234f00e722325
+ 6d2c48d320c73ae1702c800394235ebcbde727b09e30d4fff8c9cbb5f33fa88c
+ ac3a23cf3c1d4b1dbcad53bdffd2d97704991bf095e5e9d191444ea80d3f6e19
+ 1a39f2c3f46e160b93b0d6bc03a56012189a2b8593ca132065b951966dab689d
+ 5f007a2f700c0c0fba65ce3814dea47ebb8b1ee1c5381da4015b57612a8af3bc
+ fd46f56591e53302feb467efb5633af715e099ce8df0ada14095467879e4f82f
+ 07cbdb7a16dc1ac05db4b1971c30b2d0377b9a4baf698a633499f4327d416d8e
+ 0245ff281806dfe5ada865d1a225a85e89074711647fe07a7d380d60c5349591
+ 253a98db44bd969cef00ff7dd236a4efef27e1b61f8913f1e826f9e73d536243
+ 67103a0a35fe45a1a2babe78aab73ec848b55174b7129c195dac367a17ae4d9a
+ c4e9c7876006b067b6006270fd078db6bb47b413d089abe8ce531ac0a8a00ae2
+ 5a392378ecd5a4abab3e57a0b9e0862a0a1500adda6a4625dddc26b39171b002
+ 9544990fcec65847413e69f3c1739afa919d2f6b90bb4b56940a88b715eae942
+ 7a5ebc9556a4d0e730bd1579d8f11a26e48a7fea58981d40accf1df09327b791
+ 8330674752a6761bc7a5ec5f31690137db6f9deb681bdff16b125bbf1646784b
+ c9f41964b1ed64b3d894f29bf32104191bc347037147ea4c0a96040e48446ea3
+ 799ac90ffad5136a560c077ddf8c984006afa293e3c8e6399e16ba31bfeffbd0
+ d9380755a6c7459ab0072ee11dcfb62428912b19dc459c316a2ebac60838bdfa
+ 6c0c38ee5bcfbc17fee37c5684ae478674ee7aa91b05a8b92492f7aedfb52dc9
+ aa2d9e68b83d461f44dfde0cc1a433dd7b589a48a1afb5e135e884267e68f1c4
+ e167316f8812e9e1559e2714a2313618f116991cb69c56cc02db76a2436c3852
+ 23c4058c79b33565e52b112951070a8a39b8ab5844558f871b68bc17cc68b6ed
+ abed7e42470d0f41fd1f193678d255a2fba3bbd0f3ddae252dcb473cd18e6a9f
+ 96f09d74a4982cc98b7196d99744305aa665277845bcb4b006525340fc79a54b
+ 87e3e353efe9dd4bc1653338302c41b58a11d628bc6579009542b7baca20ec0b
+ c0458bf2bfaa40e6f7015b0de112b7dd54ad8154ee89fb05702fb5bdbbd0caf8
+ 59f3d343c1a917970d5cd79379815a61cd1b1cb5f94959a0b263db6fabbbead2
+ 10cae44a73dbbfb9a2a5af35144b2e4b647ed376790d7aef50a75113e3a90c5b
+ d40c51a48a5354e2445f58c038bee61d647c58558c1d69a49b2b468efa66ce79
+ 636761570e5bfef800b6ceee7238838c71d3c5c28408dd89acb1e728b64f2adb
+ ca3fe8e25c5a98d5a49a30c994785b7ccaa07a2689a705b55b3c83ed68bc2ebc
+ c9b433baf146f792545188374f294c7df0d64983827795642bf07cc5030b5d6d
+ a13343bdb8fec0039c275c883451f59941ab3c6be0501fe97fe44c9285b8eb2c
+ 940c0165aea7366f3812d6529f341eaa6b7c1138e9ac03410be3836224f11bb7
+ 70d1a59a5dca76f4995aaea315c758ec847c8c450ee5b2c32816329f7a1cf85b
+ ac69add76b9ed4d8697ccc76f48cd1334f4a9a286a00c2d72c5ddc1204c8c95c
+ 4108bfc410909a1c3ea9385bf2e8551d9267a2245590540ead98f4f1b9b36534
+ 2ccc0de73c502a0af0d462468677143124c41d1dd4aef38ca60f9b275fc79afe
+ a09e48934274567e8cb70b61866edba8dc0db9ae6d41f93d350609ec138d3c57
+ 722af790018aef77ff1088b10a2fdcb84d4d2ea475dcd304ae2fee146baff366
+ 137bf5b02a71a0c298a578aa0d3f901a87d83a012c9993c615df923d6154f0ec
+ 022409a17aa03b5dec6742b4e3058752123a4f58c5ce99df4678055ae5988202
+ dac324e9792a6ea99d65bc6efd4fb6bac1b6a073723bae6a8c6c7da730743d12
+ 57bc4c738f2f6b67a20956a8695f0d79476c7ae76b5222bba47d87f88ffc5510
+ 50af88ec2244de25171204883d8cd636aeaaa20109a69d3169d6f51091d134c4
+ bc9705dc47c9f3f00085edcc3e9df50e306a2454d77c56825f626deeab5eb388
+ cfddb946052b676f354daeafc795c949b0a309d37e693ce3842b896067f98a7b
+ 196289629ac99d263f78a2c80c0498e8d04776e2fc1c16cb0a8b5c73bff0fafc
+ 8427431ac637b5ab30b1ba074fb8d53361ca62b056a95ce9ecd8c008864bb48f
+ 184b28db9c458ebc1584468b756edb2a34f51279147af186a728aa7c2bd87c11
+ fe980ed3ecd0686feb8badf3859ab318e996bb031d13583aef80d442fe74417d
+ 9f0732a78530aa6a8208f9415e23b7a34c0c9d29a1c17dbee47af50618543f8b
+ f1660b91e6fdbdb641f0ec0e0a80afbaced5e6383f0279b7a1434da672470a4e
+ 617871a7b604101001208eeb3f2b6828f6d5b09bd994cd7af5935041cca399dd
+ 36f8eb10bad58cba1d671c101b4b0e445935ca3b692ce35b384dea0bb2afeab0
+ 8b7b8cbff433859188c099b8f5d0829bee0cdc709fc3592e7c699976b9cc8a94
+ c21be8df72d68ed8fa66c0f15d61b8381bc538903b412f94d4d69b6fb6172711
+ 98b48d0f8f3ec2f4f874247dc8f018bea20ed272488aa221fe7ae39e02f3e660
+ 9124e4f25a2cb0a5b0f4afa077b78c338b0c786eda15369aa62ca48bc1b4522e
+ 06aebafcc369925592f0f9d16a3033206cb729d6e701ba2a78958ae5daa2eae6
+ 624ea310f14b7789c00ba685517e8171002c6d21be55af191757094ba46a7dac
+ 47ebb906af239619aee06583dc600515f923b40241aa9c91fd67135b3983d87e
+ 47d1721098244c520cdb85cf659d630d3c6f393db002db7231e2c63ad55785d3
+ db9037caf37d03c50b60ad943c295b275b6de5cc5c208074b5b1ab7906a482a0
+ dc6932239c09a93b17b8e899c9c630215579b263b62acb5868655ab3967c69b5
+ 7f5a557a98b8e90a4c8615359dd673bb7159a168c30d3abb2384bace70c4cb3b
+ f4551f1f25592729ffdd086d149d8eee5262f86704a18512943e0a08a939b0c4
+ d1256072b5307a1a690818cee0fa1d876dc322743ffcc0205bd314229f16909e
+ 8e203c980c51c8238a6a5fff859583d9036b474eba1cb24d80838812fbe6f80a
+ 2f949b6b6a88597e171130b3220605eff576c5e5b3ec641d67422720bd33fc88
+ 60a31ad8754b82e8903a2c9a105baa0f01c60206144405be860194505dda1f83
+ edfba361cdff818e9dec9524eaa254051fa1f1dcaff869d3476250f9ac8daa5e
+ 8e934d99761eec112a1c7a63e896237948807cdd7718fa863b1677a293b9d52f
+ 180f9875b45a4e59eaa0dc652ae0c73376e8fb92ca5b01bc4c32509d9df7b1e0
+ 54b011270d68ba7b9849a4105c1047e88870db5358469d7627615bf0197f59f0
+ abaede9d2d5686ca4e9bf9ed8a1af123fd572af1ea5a1eb0f776d7095e7eedc9
+ 9145a06f907f23d27315cff3478def1ba1d90fd9dc36eda386f1f2d5687428af
+ b522f21a95ab86d108057dccfee7ed14a4ee6465cf4a438ab838de119a273389
+ 4fd859b19e23f23e74504d3d94211e4d2548899a4a759f194b0b5e65cb0f0e27
+ b26c4b2bced04fd757d623d0e4486b5a230834cc719f115c8d6a3c79737c95bd
+ b07c55d85d1984902023ca837c52fabedfa3b0f867c8dd182a93457232ae0e2c
+ 169693d1b2f84d06a5b6cc718620cb9addd4398e5ce8459c042cef7e320b484d
+ 366d26499ce5cbdf89f517cd90b2f4ec83ffa94b5e6408f8c230a1c743a3faa4
+ 59b26c10c215722bf6323cbd63fa190af6da683bea8011849c43d1b6264762f8
+ 5fd7498ab1aafcb9bbe9fd1a81e213a1dad90d7946dddff0c71f53496ca7856e
+ a169da59ae746298736459c40117d1423fc29f387b2f5eee8a58f3395580b457
+ 73455305743f1dfd1892ee781ee58bc1c7bfeedc002db5a6853711675f1525de
+ 4e05e0d98875112f349bdb1b60701b4650a2015147b8f49994a02bfd1561c8ea
+ 937d81e2d819a34ebd2ce63cb1e76826b2190e67e850645055e7c1be3fa8f42f
+ 7b90817fba14287d5f3f27e2c9444f7fe2f46d48d2543b4943362d663600d9ba
+ 7111b252d171091fa0283cb53ad4766142deecdd04f5c5e01ddb9fee287d3d3b
+ cd2aea4b44d26941f5d605a39c2f9385671bfcd8d99c9b651e4c83efcbf47cb0
+ 7f9e6f1e8f22c7680fa396de5eada2ea24a148df9bb7ab6b8c0f10a44f3b2bae
+ 27fbb8622601b26bb8e988a32ffee9c6366bfe4dd45d00a2982731a7613cde18
+ 7df7e1b53b894eb4175854025e00bdb9d3abd87357059037690695911e24a976
+ e842a17b471cef8af23ed726810b2f5dafa5c45282fffa81197addb829265037
+ e6624c78ab6b2e1b420f2e7c081415c40cfebcfff9ded542ade15b30387d074f
+ d49b146669815cf7a7e3f2f2b1200df853bddbbc723e83e9a6f6a9e48a9a7fe4
+ 63797e31e517cfa4d62e95780ebf6723ce0ef0df918478402c4ec18b2ef31b16
+ 9d1948a37b1f5104cccc0d7078fe9f99a0ee49087628ae0976a7034c01beee08
+ 57a11c7f3418a3dfa94a6ecd457985edd820ede2409fc85496a2c99e1d40c580
+ b9100d3249996ae768ca1dcaf30bb73923c854de63372b3907031f3c8f560861
+ 6cb2742cbc36dac52e4a9b30d8d2ece2cdbea66e4859f48317705ce6dd31c746
+ 425def64c94d41c5b5cbdd15071c1d0902730e74ecc00dec7144661c16441369
+ 9eb4adcb9d7f0694ab50454dfcb1f37376bda3fa8121de9969901580091e2549
+ a1a6449d725d5f00ff6c08d491d4f9827eb7c448a797c4587486e52dce0026cb
+ 8d27c20b5dfc4199a4d1804e5a6119ff8b31d344effa4526ea92ce977a7b9214
+ 47a2627517e5199e7ca8ebfd64353bb2df770be24763eb249ca31271f81bd9b4
+ 8da98f3824081d9cbf0786890707741224c85d2f026dfc3d704b1ef3fc5159e1
+ 7cda95fc0f9fca39adb3818220c6e70cf9a8e0e6a45a8329754b1155b13ef667
+ 7c86cdf5adf29b6f66b9ef7ee5b3e5a2caa5c521654315ee8f3c7a22ae275b8d
+ 9ad4097c8912f473cd2288ccb1de14bffb182f912cdfc4607632bcf72a68472c
+ a3f73de61b8b394a58c0c0e52b8a3da52364aa462f8e60152ee89e1d7d808600
+ 88fe204abb99f8ab3dc162365d0fbd2ab2361bd2543b9b2a758c73b1ffafa248
+ d452b5a6c2cfb32427bdc5dc15e50f89b641eed24457d91ee1603d34caa40196
+ 809e0d8666e0a193e981e3ad9c7d69948951ebdabe3188691bc1a98c57b37155
+ 917e977babecb60db4267e019ccd4371b4801564442e49cfd94a027370b8f11a
+ aa0a21d0907bc37bcb4ead45a9f86babaf59748cf1bff59835a4eace1a34ff54
+ 7c0bd028a05ac937dcdf0a6ab614fcff03c4f33ce73d13d39f25b30b92774940
+ a0a3c15fa3c8acc1fd085fdcde10910da72c8c08074cf784629acb12ac7d717a
+ 4960714d62dde17964c26c89b5aaa8feca8398b5635381ab0043ee7dee4ab3ad
+ 6701e18de05b2668ccafd75f0db086da302816c0379b2e7793443ee1a23df2c3
+ 7a2c2847fcd45b656e1f41334e6d815790129958be71eee3fffe94ebe8003316
+ 3e46b85d98640b155d7e8d908da655deaf5cf8f251f6291ab69a5f6694f58aa1
+ baabc9bcb4688ec44423d90e38f5e30a9e8082332d7e9c50799b5a1a4f4952cb
+ e5d11e2bb7503ce9e724bfa8082971aeb37565bda258be47ca28e415d5e04062
+ ec3a2e4522739f528826221b893d1517c3c8de8ef30f8c4a020d6f2619aea149
+ eb81b34b683f007dfd5ffd5dfe42cfaa691dd1309615a3be2ba68a5ca58d8cfe
+ 38a5f6bcb225dd6583f593e44b456de9234b2ae9ae5c248894945022a6137ecf
+ acdb185dab1883d804b7d7674db1f461ef6074b4321a952f60d3f706957a1e9d
+ 4e8663e76d4e48028f52713d41f6cae0c11d81c3c1e04d1bed5fd1fcffd18df7
+ 50795e4a370772aae4de369b9ff39f44d342d5e0f57e89f13656c84951bc7a96
+ 4437a2d0af4f4301597fc29aae8d1f7e857ffc64b8923e4b478d90f7a66c5ccb
+ 0384bfe956f2458ebcda09654723d06f8732ab7718277ca23896cbb42db207c0
+ 1b87be28a819298de3345c9689de7a49e05af7cbf05004a139ddf582cbcfde68
+ 357f645c3d039f08b1ca3de537fb65d670afd27ce6dbb05d6d7b7e5de4a23c80
+ 2bbf1af5aac241be2b50c6bfef665ef7fda1dd2803c14f4e7fdef97f7b9e05db
+ 600563c561353a2be5ba4acf2fbfd5a34e0707311861a56afd96874aa67228a0
+ 796b860a9bcbba872e33d921f70f7cfb053e4969e5fa491a86afaede9e94e0e2
+ cff77e4498b657d6a6080b2f3a113566ae9164122a47c1a7cd9d4dd06f88ae48
+ b541004ca24713881bc345e0a4c0632869e7c10c409ae9b89d18d34e5b6cb202
+ c0185ae366e3790d0c8ca01a645c8c5bee6892dbf7edb9de9c49583e4152d760
+ bfd8adc5d0a6d012532094a69fc9c8f22bc79406f55f9e070a432f30f0953c11
+ df193b41b857effc9cc9c6339aafb527041dde7a5ef5d833a0b9d7378ff1bfbd
+ 22c129b448aca2f40b0f6a2b6c727989bebe513a3ece99a85c5742c13937ef75
+ 2c2e2c48cfd95ab1d5121081f5adcc00920e7cf45fe6380fdb680e9c160fb9f1
+ 17dd911f3d68d63313d31c758dc5127b62ce809585dff9feb1c84ae685aa53d4
+ a0d773a70123ebc8344eb4412e5d4e7a1634574d33c7a540aa5d6888bd9ce53d
+ f9d4084403a09c92d1e219c252c6f2f2f8204f1bce6dfd59768c129a6c13a12e
+ 0f872c89f158b441a0fe6eebc8c6a6ec953210134825b88793da2224dc74b42d
+ 730c760e9cc2ddf251eae24ab26de86e02eaf70bc7cca7f5df06b25fcc88dff3
+ 4f2b1fb4005bab3e0e02ac3b9363325f507dfce0b90550ef10f7606fce11f663
+ 0439939d4e0d85650d06b9674a571bffa97e45df14a274b04dc15ba175a66b20
+ 60d79321f9307eedc7f2c5e8c12cb1751170d233485a608051500b853974744d
+ 5fec52f5abf645dffa4202d6a8ee2e550023b1ba3dfb55dca82541b98ff6d7c4
+ d1610704ad98ea8a0d2f01c42cc7bd7a35a5f4da6115f9be15f3267b3d9da283
+ 3c2fdfd549ca4f11e4ad0b4ba4ce23c425ea33667b3429a89911a1e5c31a7b32
+ 12f1adc6f3a85f4cf417cbae988f3f9146563503baebaa4bb27400a643d9f72b
+ d4b72369f2bcdc7f8b55e1a7e3f35a7cc63a8bcf3b27eb30c32815c2c3aa6c4d
+ 191420dad55fb70c0c90daa8c95aa80e0b524f5f7190ba2fb2d6a9f32f2c1975
+ c04aa40724ad75dcbcf6e968d49033a5c84b6b0dbe995f057350c379be6cf9c1
+ 556dd0905e3c7d0dc1c1c02890c1958912b2fc096fb0a3f6e2c83bfd1ae0c48e
+ 6ad4ac16d632be6fbd8f1020de4a9a676646765eaecc4434f4fa6754a5bf69ad
+ 7fdf4505f82cb3643dc9602e88b4baa1226cd172db1023030e24557ed14f834e
+ c17d30cf054d9a7fe422a33658aae82ca4e4decfeb1cd249f87be85eedcce016
+ 9d368c8c6646f65c6b0e86bb160150a97cf5cc5ed02a4b66d97302bb9baa7557
+ 5aae2825892201674d665595c6433b241029270206275e5168d801cb61161803
+ 9eb81c5374084aae957813063aa8e99a9a6cc8bc7b12ecb5aae01b2649995fad
+ eca6559bc45f18a7ffa65081c891190ca4d23feab45ffc86497eb2cf6721297f
+ 533bc50b03f6aaae79d70ddf5366629bae20ea39ea9c96da9b2a759df4eea26b
+ 9b8b42c2bea8b1c1dbcbdaff51d76fe6aa6e8c08fa6362913c4aa19373129b77
+ b7b8b4c4879aa07b8fcefb3dbb588052c927e7b84b1197e7e6ea5a15144c614a
+ 5c02f94a10206710465143aed29007e58615270b73baa639e98b626716c51645
+ 2d200384dfa58fc4f51210f22c67e218cb779c2496216d66589781b07a347db4
+ 076070bf7ed0e70dacdda6ca88029c0c032fb523878903c1e795679c41d29e32
+ 5f5dece443f5aa97b7506f2594af6e8e15628203a2f74e3e703088919dde71cb
+ a2d563a43ab5ce41a84d3bc491ac9d3fe7a3c0a63a7a34b8bb4df1628b1e09a6
+ ccace891b1c1d22e50d8856041982716e56c70f9858653c73d82861de515a821
+ dda4dcc53d96c2847268de92bcdf50217d5dde3c4a7e1a6da8f7b0388354dde9
+ f98eeafecaf0738d654cb599e4baaa68e051f0160cc7428b96dd1447fc9b7bcf
+ c22f860b2b108618bf376f0312d7442aa88231cc72886a2af61ac97d6385ebe8
+ b96c25205cea2208cc1fce5710df07803b2c60ca4aeba8531100913e02ad5a70
+ f527ecfac6898a091b2082ebcea88c76855661c2ebd88f2e45805f4d00703b6a
+ bfe8df89ef6a41a8170fc5098bed8b51f16fbb4d70d78135c474427d9d3d35bb
+ dea30d64d73de31b44da120e131ad75e0f8bf243bc06e34e25ac7fdc4d3d5721
+ 4966c4c778a9fa87b7ac67cecac40c109bccb771c98d98225b1f7d681690faa5
+ 9b89b7b364fa651f6c52cd64ac4e32f584e73ec09ff4de7283dd5ffbcdcd0580
+ 86e0cbfe336217d97e917ddc757eb727a249a8fd9024eed6829b1daaa47e10cb
+ acf296b52ce19308876feb20d4259d7220a062878334db342cc4e546d8af39d3
+ a395d99ae8e5fdc5e02d66f5d2a3ac78a333839910995a682ce355f46a492321
+ c35e30952dae667c4844bd492f592ea61bc9441d8cfde8cd07a48716fc5f4df9
+ 260a904b0a800e5404ffb88fdaecd25d95590e484313e3f63386f3069df0d8a3
+ 2058c2e5543170a4b76e2dea577205e8795874764f7e72ddbc394703f262b64a
+ ad5d2f1342a48c0d0364316c23709c65ecc0a66e3f9eed92c5ddedc001356f21
+ 34091f07794463090c82f419bb33b74bd577dda2eb41184f0f14150f80f0971a
+ 3438fb9c97f5a37739c0658a1df59828df06a3324299066a042a3b87ef61c08c
+ 984afc459c53d2387b59c6beb649774f6424605e4925a228c70f4a1ee69f86d9
+ 8c2d1078ba0ec0191038632f34f07a70b5bcbee4187d443888a3ff81cec64a4e
+ dc845762357fc030777ae09117ea87e2d637a717b66f5a986c4ad5796df2209d
+ b3ebfdc9e917e9891f8fb8319ec1875c4fe2e87a20164f784a604fd4612b50d4
+ 582e4b45126383792500d18fced9e33582a627b30fe3be54bb557c4948d5ddb6
+ 81641592de540922e5d3d5849819bae0bbc0b0943267872cfbb2cb6ee0a97dff
+ 6ef9d6eabc6e7529293c57eb27be7449fc7e8128850eee6b63f4533ac7da79b7
+ 986b23eefaa395f6fb7ab59596c56870cb6eae2fe177ac15f5a5afd45d4098a0
+ 578d42b204fbda6180b1ae63df709c2e723462b1debd2d423e6371dba37ea587
+ fae0ed09616415a055b19f39f64f30b4a82cc1544475d30dff84c1aaaa539cd9
+ b07379b977af5cabaec242eeba8e8289f168c6820ab4bd3920d09299ef7420b2
+ 101649446f993dd6f321c3a0beaf95f05fefdbbf1ef50c3ed7d00e02626a5eb5
+ dd540d0a60c8efe3a0a01150af8ef705fb20bb8cc5be7c0675442009364308f0
+ 47d8fa7a4b18f2c8a5f5c29b7ada09217cedf13026df1d6a74a25ff1d46de278
+ f11d5f0ae951a592a23082031649979f12697af46be553680ce4226de0daca52
+ cf1dd13e1d12aed25e5fcd2904a25b2c9649dad897d9d3e9f3c79ec2b307426c
+ 276dd4f32d92245c7767155ed5c7288712335d8f8f992afad4dc3cece0fbdf50
+ 8212a8550655aa897b3873dbff7ff54be068430f91a2825b737f26ae4e29fa12
+ 7c1aa1ff2090475ae422a80cae3446cc1efa480122eba85c42d142facc621e9e
+ b416ced9b606c41bd71e04171bb76b36bdc3269a5942b9000726d2c18c636e4e
+ 9dfb61994e35c1b24c3c15ff13d9a6825a48576d7f69d63a08ef0b967369c58c
+ a8deb7531f4ec4d4331fb89c49e2f3fc397df20067f8dece059e3fd74c61126e
+ 71ccd9a26dcc0d7a867a52c73e894735f9f4288186323827a635084f3c685496
+ 936b211b0e19edeb0cf141ecbf2083ae654c32aa7d46f82824807d94f05f66f6
+ b31505b7d38d3fbae7a60cc305953e81c57362b9d19b74f95cac45d1e02eb53b
+ 6cbac79ab5141b81f154cd79a36a894b5655c2a81eb7e051c03a3f3a48c6e5b1
+ 1af8f943926e6005bc2215a8145c33854d78cae43c481bf4c1a807e6383c1d10
+ 9aab88041dc8800d18de737456014219aac65da11673d66c9e9dd6138aba485b
+ 35c08ccf0882b130b11857e6ffe1393707b305b57ef8d4be49629ab54b47a240
+ a2ec3257c0703ec4907d211ce053e1f414c2b5b1cc0b3d40dbf3507740bf1fc0
+ 96369d74e7018d0ae0778303690061646dc4eab7f6ba825d184669f6b3cc864c
+ 470e5246a487f3d23ff328cc0d377df5fa689c0b98d46b5a1983401cefeb65dd
+ 90dc8d7cdb5320b56ffcfe98213ead81fa180b703cde5d0e68e8092fa502a352
+ 6fd9afcc8d75849bebea765c86c700aefc86654166eaf811e44f942f0e9a774d
+ 67c94e862e5906be4ad7e88fd70d8f04069868733f13173578e4b1ca4b582bc8
+ 6b9241bde7d2a34925d6b481774505b4184b4d084f43e5ea4f9788e71ccdc95a
+ 400db5f1b1370d595db2381941a16558b92ee8e7578188b5643e5dd673606152
+ 6b8e2140290ed148a9f92c5b545b874d70c049b8355bc103a3d328b3e8841c8e
+ 3dba2b658587aafc3109c5a2bdfde2ffe3850a502e4de17802beaddbf4ce542b
+ f4097ed98c64f80fe71ec216fb951601c367509b02fdac83a29b15273182bf3e
+ 95cb99263924cb615456ee0e5ae4c7aa6f1ec6a948efb734c49073ed8823e552
+ 386351ffc1ccebee82632b49f51277035274e76b05c28cb5987ecc96ee815eaa
+ 21c6d26f70fcbc7c7b867a5237fead73c30c0ceedc417514191fef7aff960abc
+ 5c162dccd3bfeb1bbb3049393f9bc0802fe10c61f73a6d4592d16bcc45af8201
+ f5cac42d78a974c55e124ddae9d8eb1b6015fb2588cb27e118190b315cd5e0d3
+ 2db1576890d0d406441082cb85d301fb8b600eae783b8842efa4f1b0b6195946
+ 99066b34cdb18f219756f200807e740fc003c39ed4dc14131eb283fbe5944fad
+ f93da0205d0d2f1190869e9df546f9fb77071c01b829c2be4d2eba149efe200d
+ 3d1806e061c5073ac4c4ebcc06b3e6b908cd801fbcdf45c1af6c0d5a6fbb18a8
+ 2a482d5d81947b38ecaf5abf60a029ed7ddb12855a1ba11f629b9790d9c3e8d1
+ 21951f6a7810f5290008457b5c05bcdd26555c346b7d2a43833599e5ce94c8e4
+ fc121012ab5d9c0b019f3df52d371b89fdfdc3f9203da2efd0ba467b3c2137ff
+ 878bce3e96c9ccb7ab8f7c24be27623e4865d7e3e6807902268033921977c73e
+ 6615292a86963683013b35650df01f8012bde85382550255155b47d40e8be11d
+ d982ef4ad4dcb7587693eb563a785c
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N170/TimesNewRomanPS-BoldMT 1 TZ
+ userdict begin
+ %%BeginResource: font TimesNewRomanPSMT
+ %!PS-AdobeFont-1.0: TimesNewRomanPSMT 001.002
+ %%CreationDate: Wed Feb  3 17:58:35 1999
+ %%VMusage: 31909 38845
+ %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype 
+ %% Corporation. All Rights Reserved. 
+ %% Times New Roman is a trademark of the Monotype Corporation, registered in the 
+ %% US Patent and Trademark Office and may be registered in certain other 
+ %% jurisdictions.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.002) readonly def
+ /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def
+ /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def
+ /FullName (Times New Roman PS) readonly def
+ /FamilyName (Times New Roman PS) readonly def
+ /Weight (Roman) readonly def
+ /isFixedPitch false def
+ /ItalicAngle 0 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /TimesNewRomanPSMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44335 def
+ /FontBBox{-167 -250 1009 878}readonly def
+ currentdict end
+ currentfile eexec
+ f6abb3c4a9e98add6bc26730a9ffdf20be50bcf6a1c5637622935fe077cdbea8
+ f6323cd20fc451ab06edc1b1bd58ba9b9a7a2aaef053f6417b8b06a9be76fb0f
+ 72a917e7eca5721ead2adff9028755e2eafb35c6076ff9b8413882132021da99
+ 2df81fc44b9db8dcf5dd9b9600cd0b7fc0b4858bc9d808b2014ccd52584b7cb6
+ ac5984d86608786a95d7baa1fe5066f3c0860c74a5a39137d7316b3a734684fc
+ 4744160cb0cdc44bc7bcd4c09d103401acd593ffa19d3182231598686dbcfbb9
+ 547b7006b778e07937882e23ef5ce04a8ceb5b649599ea7ad9b1d42e4ab3052d
+ affa1f481c418fb9f2fef0365a1d783c19b0d481896e4db2dbf81c8828df8a56
+ dd04d98a01d3032af8deb856eea90335c8e1267a07005a470adf1e3db998f342
+ f499fad7e323b00e4aab610d6e6a5ba06a3d77d722c07618416dbfd805cd9ee1
+ ef80d47567003d2c012a4820d817f3352827c5321f65e9642e21efbfe30dcb52
+ 2074ca047c20fa9a6ce5b812947accab19a5bf8471c2f677c2b3d1c2e4c3d469
+ 959923ae73436f69afbea1b4bdec295361258731d99cb153972a7020450812dd
+ 11dc48abd71c472392234b64dbdad62d30795ee0862ff2557ddc8f26e5c6fbbe
+ efd5d895d167e677c98fdf9ac79a79d0de6e7a0359281cff958092060cac12b0
+ adb73fb28afe6f263cf621f3ac87532ceff5a89773ddfb033f9c1d9820acb670
+ c60f64ceca281adf959ceb1336c3784d73b7277d34522745beb64bbf53bcf87b
+ 7ed201188547b2c10ca9ba0a3d45d86203dd3bde394dcd39df57d9d823a5aef6
+ 49b88cd21aa4e9c0aff5fed7ed6503a3bb8731b65066d87561843fc8d1053527
+ f67ab7308acac63485a36e2ee410db74f4b40047fae14502627d1cc7cd1aa96e
+ 3ec74cec95846bbb6a6b561dfe512fc9e08eb319224a63b3edf68ccced96c977
+ 3b00e3dce561e2eab3e0be7924c49d8616c1fb025e267dc4d9b97b28a8b47666
+ 292f055f5c611633a72276212185b2b691d272460e4b84797053a4c68ef08e4d
+ 335192a22e85aecaf0450d068e92d3d655e043750804fed4b206a3a6ec6dbb6f
+ cfb146668509329d6f32a636c3120dd0982374925fedec446eab19eb6d756fa7
+ 23c5f23530cc740bb7a800946652ae0f2f79e43ef8308b558ce9fea559f0d8e0
+ 78a2424103d41bb8690083a71071a37b787dd86f99b5b457637fab68e74f048f
+ e5fc975bc673dca66ff4b8bcd3fd37fba7ef83a0b6b128a3b894a953cb8b4e1b
+ 144cc1ebc168a74187e8c92ca9f8dab0635336205b46c8188c97046a1a09940b
+ 8efbcfc6acad7458f4334a5f8ada324176a97f0b0c846be9a39a15d71bbc661d
+ 8dfe852b945b17a9ae0e7c50f3c036869e479882afbe4824a1bab8ec451a3faf
+ 3545f6469bd7469e70c16e9b21c62f2b7e8a9849c529026dd7db949225b9e1de
+ e08e523028f6493a6a242f6f6a9155abf5433c21916e5d0333554fc512603563
+ 81a17599b364dfb521fd1536addcda537621925c4323c428be5242a948cfbc7c
+ 66057ebd295e1dae16cb509d409f13e41d18e575bd365a76d9a9b66ef91c223a
+ fe014849f2a0589cb8815bba87f687d0152af615d292c2d3622b93785497251b
+ 9d3487e36dade8678e6952e32ca9b82e4c730461b460c87345ced26933d2a40d
+ 7cda7f22b684f8b1444056fcfe5b319de2507612aa30264ec5f2f57994965326
+ 92a2acf19961957096c5329c35fad642f8cb6381252db48967ec8195a1c65eff
+ f5477791f7e5844144bd310813f6987ad76e03957e00b667ecd977a3a4e5e22c
+ 92c21ee1c8a5cd079917c97bdd1906f85812c19d4342456c89696163df16bd89
+ 88d595e216a4dff03c799b732d44830f7b5fd7c4b1d57993b3f295de9734d670
+ 399e206faec928e6a921dc501a066790b23599364c4dacacf61dbe4da5d2a333
+ 972193dba868b79992de264786d40969b5fdb92152559d3ec8dba0cf86ef34a2
+ 78baac6e02937f01c890a931d407a316bd19605599c886ac430a37040b6f8cef
+ 3803fdbd23cdeb165bce1063da271c473eaf710034cb04d7edc330f68205e265
+ 0b92d285f880fe76848c0236cc32bb73f13a60890e1405e3cd4e8acf47ae02ee
+ b1ded8408f856b5bfacc2e32b3eaef2add12046471c48a396533b417926ee7e2
+ e21c4190d7f0a9a9bf52839ce4b7517703740b61eb91d190249fe5d5ee58176b
+ dbcefa0d7229f1150094b8c649066c1b1a759a7a5df8ab8893d92f53ce8ac5c6
+ 50c13a327c0f2ed6e40e2089fdeff33c862923f5a2d88b39aae0069e8807f400
+ bd3bc340616fa2482f19c4596399bddfb564f843cd535ae124cd1b027b7fab3b
+ 74d617a8ef6c979283b83b7d2605bf8fcf5b15d7ee6c18646be9a9fdecea74ca
+ f3acc4b3bd9937561865299ecc89484b9dd63429cc2a0eeb55e299649b3cdb9e
+ 58700139005ad609c29290665e70946a2af3787c952ad30243ba31eecbd50bac
+ 3842ec204cc8b32205e51c059b68289bc51616bf3569e2ae3fa64fed308ab6a3
+ 1bc2415d4983b4f3216a9a060a1f0e9b3e3af15efc69991a4b876deeef55b8fa
+ 7f54797779a4c42d9f3fd2a3b86422a1d2f3038b305de2b56f0a037249d37d29
+ b589a6d7dacd1ecf1767e0460dbd319bc6067d30ebd41972bfe93614ace01429
+ 43cadc5eb0c03df892bc05f058933e8be8564988780a915dd56e819c261e249d
+ ff2442f3ba0481c2ba39ddd7875e98df24dc5789972500c2d82dc1358da0cde2
+ 72723d8e8fcd5f8c6f2b456dacb343dce13113fbd3e3c03aa4609513b9484231
+ c9dcdf0b89fc2c69fca39c28e632569b7e12c43ac1ac7353154c2dbf592b0f3b
+ b5f64d2c309d3c5c92c6ccad216af314dc3cefe42c3236cbfe8a0c3ce9dc831b
+ 9e39bff15b37ca3c070a0f64b1342c3be9808c5c8fe3f3755eb27404ef0ecc5f
+ 2e491a2c5ca01f9da22e64b467a554364c7e9fdbb5d22c219a9f3442e2531640
+ 084d4330c30bf97fafcdec9fbfe366a813e8e502afd1c6148450f356e25eaedb
+ fdfc663fa484052b6abd9763bc2785bfef9fd51e9849c552dfad165b61a1020f
+ 0f99d3fe7a4f7f8541478a6a10bcb91f157ab0283fbf4832a51de050e76bfc2a
+ 6adc1619554443aa485d6a574b04d8ea1a97dcae958ae6596ea4652bb1798cec
+ 723a1857fcbbd6e139ab8b019cae0dd740199c6f9949d8d599a7194206c2c154
+ b92c82b677a62afe4ea019a1f5aa1fd7c26aac0bf0b0802016ef05b723fe48bd
+ 6c0057725973bc10f3d4b174bfbb4202ed2dcbbcecc4a903270659e53f139e11
+ 61e94a2243d1a3c3b604df7e7200be9fc88efbfbce4f7e61725fcb8452daa59e
+ 2ce841f42051d3d44f0c9ef6c9b3f7c71aabe267695157ae80387733ed4e3565
+ 8468eb67ce14e89b27774e917c17486110daf77a3e4546f9784542cede6c400b
+ 41f28f26c0f2c2250bdfd90121739430584a3b903a5b45743b78d2058302e67f
+ 416154e503f9fa79e4436c6564c21b1d6496f12fd3cdfa95d7c4a1e12623c14b
+ 59ebcfd7bfabc3dcf9103c30a8a9959f35e956af6047dbc2684c479f3670b4a2
+ 8fd43d805c994bef1f4829858c2f2e0762a9360a701cc53d687a7c935213a96b
+ e243dbd06ff93bd4b56dd8f2e609e4ffc998d19ac35d7fa920735f0e13eeb40c
+ 17d9e85d21ec383c824fd9c2504aa9c15eb94ba1ad3a9e818a195b02247d2670
+ dfc417fb6736ffb3622d34aca0d55c859a0d7a0db9382fe62f00849670a5d8c7
+ 788d81e5d1ada92658b6abaff5b0e3183921136949bc11bf2db8bc8dc3989a4b
+ c260301329898ff3b5cfacd779005178754f96c4c40cc25f108bd056877e0a66
+ 6ee9ae02a62c14aaaa06379cf132b453c9969637e5c88fbc352ff12368529994
+ a69627090eef23227c64497e2bec8c4946b6ac966153b7ed5cdb59cd166fb67f
+ 7ff876502e1082da14acaed323da50ee782fdfad6620b830937a55446a73aa84
+ a0b72a7e5ef7b2f80a6da25142b175c958223981902848649e2cbe83b11d3652
+ 6a4ecab1a90791d6ab9041087d89af8f821bfba0f5e79c09e1b5a315b7966a65
+ b28d3b31ba53862650da1117dc89b37856033c631c7dec7bf99a394c750867a7
+ 82f14c0fab9608760ef3232e73341ac8e116aa0593abb709fe10b204be8055da
+ 57628c0d80860f5503463a48b3a04dcf41334f1c64de87340eda23cc1ed63c1c
+ c75cc3417246fd35e30956ddedbe4e45ea909894c57ce3e98d5590de5e27d869
+ 89b77133dd5e0239664d68c38556829fc98862426c3efe551eff3703e4bea882
+ d7bf89c80b6ee50b505de1160df1a195bec23c8864beab038da856287492a547
+ c58d0732296248457b9babdcbdcfdfd505a8d4cf640e5c35ba9aa1317f148b69
+ c29d429ccfe45a82311271d986e69da224f92dd8ff09b4bce066b665ed505393
+ c4c9066ba1173d6a47b8fa535dfd8e5aac10f99ea120cbc734d80223e940b447
+ 576cce30dc9fc395fd6b655b2d5ce3cbb01a35139b87949b6cfe167352e6ba29
+ 90c83491dd504adc95c7a55c0105c35b58c400183016363b1b3a30ceacc73c50
+ ba9a46d04b052ef9b59be5ac4247b17dac3bcebc53709a47e3294288a243f674
+ 148e2064c504e009034c9a81b03944fe75bd4b4cb9705a6e5e7f5fa69170bc3d
+ cde77ebc7c9612cfcf4f26ed4e359e71eea513d0c28d701bdbac3a0c78a573bb
+ 557550c2caf200e1f890b1b2ac96c6ad6e4f2240310fb99d8e2dbe4d8ba38e63
+ 81b5af191bff9052ca247669f6392fdc9fcd650a547e80e2b66e66ea171833df
+ 4e5d2d8da5481fcba57ccc6d1ed120aab96440d2f365a70558846e38faffcb5f
+ f6cf29a96b2195aee40c2ff4bbdb2f7c41bf243398061f7712f848ca54d56ded
+ c28481ba0f8f9a79327515a31dd77f3638f184be301409d422331494d5dcc406
+ 40df68c74e290717e1e5a321feb879d6df12fc7b59265bf8b02587dafbd301a7
+ 10548072a7dbc384f1c0ed4fc4db552acd56643eb00d2ead09f2233df1a0635e
+ d044f05bb675f10ef340bbe58a11264b602a06d1d5b050996708a45c4afb377b
+ 211ed9dc1eefe33e368df9ed9340290da32aca7283d582516d4082e4176fff48
+ 232d75e6e2e3d1777da4a2638130b88a2722d2ac4098c7cb08b0895fefe529ce
+ b7527ab0f7ce08750ba94ce6d34cce1d73ed935c392aaa68465612f13068bca6
+ ac423c6b1b7e6fdc60097a495c6a4c2aa64ca653c4a093b07ae20eab4b6e3469
+ feddfab424d093d273c16fd5be6975923a1742f5316228dc3f3434f9b8284fe7
+ 267dd4ba69d8e855477518d9f547c21050eb78928bc794c0125a204dfea19216
+ e29ce4a67ed2567eb4f75a2226575382d49ab39771f6b48a11632355e0d66fe9
+ 1b8c86b62029875dd768dd002229f8e6a64ec32c9066afb5764888d91cf8aa6c
+ 007b21ed4ccc7833f300f1f64ed17a1e3ab5f5ab06be612e0f5aacbf5e7fde04
+ 113e0a40561001af0fc4824813b1b7ddf5b0124886ab91fba3cca84babf3e182
+ 381b5e7f29384aed8992925ec497b4599f15574214e8ae577dbb498a0e625f25
+ 237c3e0dc3a0ca8e183706dea70c000fc0116ac0f903a7966582a3bbffcd7c8f
+ 9a65bdd23bbb689006814f8e3bd2fdda1a033351061a9c4702887ca4fcab6c32
+ cc3bceecd2a2ba21195f9bc4e9e9942672bf4cebf2e2cb4eb398e5aad63bdefc
+ cc0f68cd83fae94fcfc96d02a4b64ca69a5a3e416fda6e0e7220445895c78db6
+ 65922ec7e70fe6f4302fbc2ec1d4f42538ab3ef4bc14d8f34690d6064099d3c4
+ 3a8223654616d472381626d18a03959cfebb7e1c012dbcaec4feea490f1468c5
+ a1646a92a94066f40357d70c2d3bff4d47053936bf3b15910af863f39c46881c
+ 65dddb3b43cf586c8182d05bfc7d555edefa8d0e136c927db29771f7c28fcf19
+ 703ee5885021d2f6bef4a7a954d96f818247f29649128d477351743242e03689
+ 049d804633e6b89486c6017fd256fc94cb3e6c2356597af0305f6f65bcb2fff2
+ 43628aa549bb12795bd9a3874a7491bbb68a7988420ba782c3abfeda0f24e7da
+ 80a30186af4f1ba9bd904920a0cd4890277a072bf28a7304b4620ca544d38182
+ 5422dc7897e3fd01e95dd680bbcc9645b72a9bb52818ad22a36ad6983725bba8
+ 45944fdaa6018f14edb790cc44476d856b0244db1ac1b8ea32ccf11c34d2e0d6
+ 8416044098a01d814d0abdc26144a6d95333343a66d05b1e05c33d171d2d847c
+ 1194334ae1f2b194410ba28540cc9893d12590b7bb874d251121c8e627e39b72
+ 147bfcefa8d15228297b629d7c2edd41bb14ae28482550b6a528591ef09fa74c
+ ba79b8e0be0de751bd78725b2ea2bdea0e1e6135177271dc802866f884e75450
+ dcc5faaf4fdbede9257d40144023cda224ddc35c6f4ca6550734f2b1b6c0ecb4
+ fbc0f0a8250d0e561e2d1c1c09c69b8d8f6cc8269d37c203c43e1b906ea6283f
+ 9822e01a2dfe22834df194765fa7bf0c07e1cd4058bb3b793d57d01622663fba
+ dd203b50fb215c5fb6a29144f3a40000e86d5f3876967445da05ca1976970359
+ cd13413152f9f2620a05b0287fbaa2680548f1cd8091ad6bd4a98f98bf64f06b
+ 5c944ba7ca5af4e91e29209b4e1ce53b06bc9680ee09f99ada972b1c15033be8
+ a6019c7d1a72778eb31f5947897fb06a37c24199f65d8cebfcf011617c2f8138
+ 8b6673c1690c5d566f22e094c501cdd836f5ef61cd43428f175df29b43276796
+ 08351ddcdb6f3071f44d632a1706f8c1d8903fd3cf5b03be1350c6e0795c1b0c
+ b2df64d47103ed852bea3d5ff173e8d956e61e8666d15d3350e6bd699856e444
+ 51ca1ef6605ef7fbeffee932cdd5b0ccc32dbcadd0e713acdc2be6917165f465
+ a25977eb3d88134aeb1e9acce8aba657cde0a6a906e204a1dcf3eb1c1d9ff2bc
+ e61878392516a319c717fb2da43c6cc1a0bdf294d1bdb84f31b3efd302528e7f
+ d49ec2da1ccb5e36d10ccda5488707e58bec5f7d18ea999ed27e226b60dc68b1
+ 80a78da57f6b392c8e54beae466918d2b07d2ce40595a6c9c02684e3aba73e3f
+ a24c9748a5304c7cb2a2cb669b8e33b46e940886fcb5ddcc72a548e330796307
+ b8d087da326a0402deda94d6502956ccaa7b4d64550269fc6c926593d4e0dfd0
+ c7c98d7a97c0e04dc5c3fc96fd9d032854346b45bdef9f800d5f7dd51732c815
+ fddbcf50f0ef6782c014ecc31e186f05942722a0c7ddffb12e2eeb816f528b98
+ 5f1b19877f54b6215d3f539cea41128a17fa5ce78db583ef63ae628e84af8933
+ a07099e055f6f4bea76429129f16bd5b2dc70a072d57170f0ae1d31bf95e6529
+ 81ec9b496650b74632f5f52c54347b359beb5bb51ccb12aa5ea4fa186fd063e7
+ c727c366518060ce0dd6807c5a98d5dd0a3fc6ee2a83d75f621023de7a6f50ad
+ 92e2c64a458b0dc4ddf51273e96907cb5d95bcb28f2f32052c73769564e30a47
+ 1720f92eebe81a21cfe03cffa887c459798b39f43edb5705e2af693e7314233c
+ 6b6e38f0c4e11b824edb4680024fabf424ac73e4e2ecb891ee856e3fcbc6a0d8
+ 71a64ba7196cd535a7e3218f686cf1e3e190c33b93c5440d6c3d590f7ccd9db7
+ 76240ee4957a8ff22babb28b73d55476c536c4093b3666c2bb7c7eced3a71baf
+ 642eb3c01a38ce2ee3b71c15a99fad0bcd657dc944fe554858f9e4854f307d99
+ 3726e1aab2fdf2e63bc36ae6638a49fe2896541cbc471cc2dfe488d70ee79662
+ bd0e4eb27f0769d94cafbc94737852c153e36ec986e0404f1d405f80f2bbdce6
+ 8d4e5ff2999a900b74568be1a01eef5f89593f048e54baa18f1975f7497e660a
+ 0857007fd17b5121a2ce5e5fe01130309465e6a1febfc58062bf2beb9b6e31ec
+ d51e5b3fa990ec506ce20369d49d2cf7dfcaad501b66b8657671325fe91ccddc
+ 8837ade4b68e4a071d85d21f36906d42fcd535e25e7917a18bad61127aab5bc3
+ bfa666824c105935696063a9dec91c4d29845025de74a79bfffa3546f12b3662
+ 093f85205742712987340f17303986211184af465b5f2c28a996bd99e52c1288
+ 909cb0f9d5af47a1b362b35f4f25f5346837181b4980d80fcf28e8d5f043ae73
+ 6674b72c94e823bcef512b3bdf1ac4623840e18815765f3061f8dccc70f3cd53
+ d2ac931b35e443439af50877c724382b0c84b72b2bc14c491dc98b62be729790
+ 299ef708226052bffad623a2ae38c674ec59104ec05182a4ccb96553c296724a
+ 240a8b0444af87272bc404289bb32e77a9d258e7256bc6b7812bd99714de483a
+ 7d70038918fac6e77f6a0b91d7aac17253fddb6c9e300dd03b95b5e98c781b20
+ 550a9be0e4c0af221d9a6d9b0fc0dae3884dd8e69309fd8e8f21ee4288b6369f
+ 56c6072743282f15a4a161f1d6081eadb40f09322566f52f766cff328f0dc964
+ b240b66112c7bb803b6b12eddf764e6bddfe5a65cd00b8cdb6944e90170b21d8
+ 3402490502696afd064b69457e31ff5857ac715824d583f5864d54b8af33d6b2
+ ed344bfcdb58dc5838e0bccffa46da302cc110fdd8265f12e18e22f1cc352c5c
+ 5ecfa7fec9eea36a822466b874073fb6e71e7b87e53038e921bdcba08b87e6a8
+ 7a9727e7364c7ad7ad1a70ff2bfcdd72756f06ad2a7dde1823ec28a8f3ef65ca
+ 5213408eeaed128dfa5aa2725a2fafb412a7c21ab713b6e10cd5b444e240f643
+ 3a79dff389e0750b65abc5314abc9491ae63c701bb7d9596188248515fdb8f27
+ 314624bb3450e34cb43f25f8e422f72bde4728812d94a54d7734d14ed95f7eca
+ 1bb309428855a8277b7b12e576da9df54b7ccbcb5e3f89fb48cc351992b28849
+ f6ef204e3f6ec2e47d49324238dfbe37193f2ba023c13be2716d1fb0b2d4ec29
+ 23966bcb671e8c490d443895e0d3cc281b89015163ea70b1d2189c21e3f8ea94
+ ba8ef47ccbb49257b0c2748b9eefd8abe489f5af5817b8983cc2649725bd3457
+ eb8b04890467192d80882b112137deee65a6285a249c6671948b93586e16221d
+ a38e1e867724a0eda19ff25e708b663d96f1dbb9f63d2001b93a869510d433d6
+ e8dab3e95b1bbf4d4475828269330bdb34eb13bb9fa0fd32f15b928c4dc673e6
+ 566cdf4f533db49a3cdf0c82c2f87273c69cddaa94df1a2fa4ce401da6ed170b
+ ca690fec7cbd8f3248761c1ea1c4fbba8c76364cf03a8d5767123b00a26a060b
+ fb80702f290244a71d633409b7732eea98360ac3f0d3254a9f863e33ff9ec1da
+ e693a8e6ece0e91146ac3264a48b7892fc2183e0a35b55dc1423e38a0191b075
+ b8265335ea5ea371823f080285ee045ae2f79a59c019be62a4845d66d319ce24
+ 717bb7663ec228f4cfc3d89dc9f6a1cabe64e4b9724904c011ecb008a3d03ed5
+ d416da027a699921cd185eb9a33eed607789134fa00258e1bbda378cafda332a
+ eab14ae51f05afff3f0365b9817b90d059341091bc5b4d64e59d3fd941ccedff
+ bee6851f21af90cf096e83bd80f40a8f2c220f292cc210ededf9a6e00043a87e
+ 6b881f762ac807168eb1e6e1fac2063aab701eccb6992e1d4d6c7d1694f79365
+ 95259da7cb923911f5df24e568f8527c3bf2f3c48ddd5c2e3626b4fcb5f46822
+ 3e890cffffa557c44344621f40f5e5496c02dbf9469be9f6cb788e8ec0a3654e
+ ac3d7a2e04210df54bfd854a56a94def38bdd5ba8aa4c3c70982aa7091bd4d27
+ 4fd42bde0b2285eeded5cd72fdd663daa168dec99688145f44a00e00ec523efb
+ f17115fb04e4da0d7379e029be1fc2576986bea27d50950780755043358f064a
+ e08b86a621f1c5ca56f19e724fc620b15aaad0c77aec450efc53d36ceadcb51a
+ a90462fd0cfaa3b2ebcc1ed0d1cc57cd177f94ae4d6997a864d5ab6ebc0b7f48
+ 36c22699685493ad050daacf7b843d2313b9283014ef5aab2428202f6da36d39
+ 38408a933781b8bf0f1f1bc9e0a899552dbc1555a7c53b009e9ea4fdd8ce7fce
+ b29a3d1a0ea3cbc6d11575bcd93ab7e45ae43d29e992b6bd1188942cdffa4cbe
+ e24ac056111cd70159d06d69b3d878752a66d8352db48aab64b4cf9d23a90ece
+ 0182ae7a95bde9f592fc3ea913a5d1b1e73bd41aa39b9ffcb34f0b06021ee1b9
+ 247c1e623232a19f6b8450336225c33a1c43eacee383cc3d478eb66da27b14bc
+ 98330c7973e7b2df9e5f4042eb35548b4c85c13af52e30a8b317e418c75ef70d
+ a709ee5690e841244596cc3242a8dfc5693847099b88ded40ceba3fa90a30ae8
+ 86d1c713b173a27c3f22b50c348b9ff7dd2174fa0dbc1e0ef5cf5dc29779314e
+ 30ddee80ef2a8e34deef16d8e86120186348eb4470b533e702fa6a481b2e0bff
+ d4778beb2619a5964be6e2d0bf63cb22edfeb68c3e3d4dab656a2ed75af89f94
+ 92301b3a940c45531de1d5d725133628697ec58f6e9bcfcb78b10ec2c521a79e
+ 8fc0e8922847c76b93d8af7769b591f7a9ecc43449d84e85179634645889d9e2
+ 3183a9bd1b7b08e80661e23e892f07dfe6fd51085d96d34392d142762ae93884
+ c8d62e8b4c0707ab5083bec15ac45c83a405fa8c8ade245fb8eb6ab27615f79b
+ 0327b9f1857fa77a2e7a3ec0f9ecb26fb58bbb14de5c92f38c0a336520f6cd6e
+ 2a1db12c945536e055c6c4a3ce70f0a4495b941bd639bcbcdd84a56df0214382
+ 8cb8eb1034a51fb4ca9654942f4fe510cba51d8efdd982bdf26fdeffcca435c9
+ 5c9e2df5f5391115e4c47186a9e29a3dcd99d03e1e056247eada1bc5dc5ad810
+ b785dab19faf611c56d473e4736d8c5a8fedbc3f7df8e7641e5bc06a27c9957b
+ f642d5686856100be55ce65c598ebf0903c6e7afc8c195b8a4d47d5ed6975b58
+ 302597d12d3a50501ede77789e49e0a5e2fd7bb6d4cd1a2aa310543bf08af557
+ 511e56da9c7e7de5ca555ce55c49a4aa1014670a547e80e2b66e6696f45ff7b6
+ f96600342a1e2b4ac5e34af19f62b514d1966c9bb490b31ba27c532c2bb55c3c
+ 8631c31ba2c2a7ca07a87572a3e11c5797cc81617586bd0dfbd24ca33fa50bba
+ bf3ae38af30cfd245cbe1b6f917be08834feb707227845d1c99511290b8c7598
+ 5f4fb0cb307b61556465e2fdf88e955befae7231e31d0d2e608bf6e8ab088f1f
+ 6da3c61b85e37758197ba40e7ab213b24003cc758280cbb5fb9081462e3701dd
+ cbc75135a8e92b55dff747343d8582db1c0c05cb442abe5d39912a37e1e5fd51
+ 7908756a3369b330ddc1ec251ea812b800fffb4733308142c43b139978cc9730
+ 1058490e5807f2130d818d185a098e27b0e7ba0b69238c71788af67dce65baa1
+ a5149e3fd6cbe297279d1f09d4a384e982a8866b2eb1563e24cf5090bdefd79f
+ 8750202318979403d5190a3af1ec062386aae1540f804cf77465d99a38c4418d
+ c5b8d0e5e9b14fe2ea7dee31597883e8dc067e10fa87bb5f38fdf7b40b9bb3c4
+ 3dbc2d4f0f8f1d9563f8ef0449443ef794d65020fbec4bf918df8a7bd0809d28
+ 56aa0814a42cf64b77e452d094f28600daa3d309619a47ad54a673e7e8f164ca
+ b47756646e870b478cf493676de5025ea1a188bc7ab202f32b2bf2f476ac6f59
+ 2a0e8027add757a9453dcf860925a7658e1482cac333c598b030c40e77529414
+ f8556c108f78686679e29ce7eda8dea5de2c91c9e45209f13b3d856fc32bab5c
+ decd8b45b4e3229c45fad7de722e04df1dc68274726131e2edc97551b11cdd13
+ 806f53667c05e973209d38d994dc53a3c59be4b93f44b81f08ef80a1894cc23b
+ 6e089193fa011e5d9118b1a1872cfacae3089c9cd1892fb925304f8d82005aba
+ a49e268419fc78bf33ab7077da0c2d6475e33d13aed7d3c252c02e55c209746b
+ cc4d37d8654e67d09f98bf1f72555adb69a5c14a7d961ee9d96dd5e71b9b5b2f
+ 54f04ed89ecf353d69507e81ffb9639bd0119f0796d5995a4f73eded5c56010e
+ 6394b532008d9cff8aa23f2d31ae04876c365819e60902dab4d0cb024ecf83a4
+ f596ee4029300da3bf7084e51421e65febd0f3942bcabb9686eac9ca30b39eee
+ af9efc08a2e905675976cbd7b775bcc3d5e8f33084c2593e6d2a69095502c062
+ 206bd45511ba189a0380894809d68cf15338e1e809a29d635001d11a4e859302
+ 7e901009d1bba44bb2f4daecd91646cc225801e62413f5ebe1573201dd28540e
+ 5846ee956af0be32099a4cc0a11c03c6f743de8c1b76a968d26d6b030cefa91e
+ 22f07bb1f0738cba0f27f734764554fee6d8fae8b97bd7c23307209a50cd6f7d
+ 65ae71282c4daeef0d06f9c3da7731d47ddab176a8589e6f8748f0aee00ffb37
+ 602cb073d631cbaf2ecd9b5e51f7448775fc10c76758f0b5f1988598eaba3ba8
+ 2348893bb54f7b8f736660392aecbd60a3483f2a2bb6a398e938b4dc4b64c2aa
+ 47d5d550e7251bfeb020be37193f2ba020bb6897334f5c5c4435e4e8b24631a9
+ 16ef02af862d2e4f336e18d48728dc381eab03b408d31fcfc0891c7edc563fe1
+ 5be8f9ee4363378a717db8112d41e3d506e1e6114be57496496dd1ada1568945
+ e9f1e8ed46066a4df35f8ca13c08ef4a8bab5e1f5ebeb9281f987204450426f5
+ 53b6a8e55d001e8c0979418ea1a223279f92ac892346b981907cd1fa8f1dc92d
+ d446738ad5f2f8521c29117f32fdca61843bfa7773b9c5720f4c8482c79bb651
+ 5261c85d4a06056f36517c2355ad4fe9b4d9c4d0e40da86ccfdbd1e7a8c025fb
+ e081f2b1580801aeb1b0f70bb43b06a2b7feb556819b32c769342def516cea42
+ 5e1b02dec445049e0f65a849fba37810dc737bcf9463847878a4dd511eafc374
+ fb03dde30a8c8de7b0ac1f3a38ed57b2434efe1c2382605474b616f146a23d4a
+ 5b2b849c4f1f4914e0a303dc15e48eb847a0adc80c8534b63867d45bbafe8b08
+ c6ea3ee34425f7e4891deef35666f5813cb8043f0b80070a7d913d7c4d785001
+ 9f1cbb89139c80ba1b91672e2e993014947f1f8fe26bd63aba8149a9978fe610
+ d4e752e0b1a8041589cdebc36bf194f5a7b294c1e781f97c0643a58b4a86c16e
+ c5d132ac0f1c4537b57ff7f97328e44bcfbb58973f454fce41d574a97fc0dcfa
+ 6897115aff5fdac2a3fd2c4aad3b95357954cb05c49a168748685e665081359d
+ 1e4b62392f69030a9cfe81069d85c3cc3d0887a13336f741ff3da201752270df
+ f510bb7ab23833e2ef4f6d3cb8a04e05835fd72b43981839ad90319ef1fd389a
+ e4e5097f6e1e8c2b56acbfd61e9670d7fcbed32901fa507b3b591ded7ef2888c
+ 10058a9af7f53f1355803eb26cf7b0b3b6068482329628576b6d36be904fb03f
+ 243ae1d241c859ed72d9bbb366a88d4da82c54509ec28110458e4e1b2b73fa5b
+ f348a40e9ab06a8290e20a4add40615273ec263e6c90bb92ab1599f7639284d4
+ c2f1099cb4ef75b0c9d16b41f25d4bf1a0c625e199ac7d748cf6b50cff711c52
+ 865c4ee381d5d78ca56abeca4f7de6e1bd3d29031466e74116f7df3d3e79202a
+ 5436d7b2b01b653164265bd9beea95a85d1e9de887de445e8b6f1590cbf4af69
+ 015820b0b1a8c49ca4edcbab62a9ef99bab1ebc3e95add3fb7ec8e604396ef84
+ fe401daefe4269eea483153d7d485f952160682e3415510b711774f1ef055b89
+ 48192fe0f96307685402cf6ab05a577f6df127aac03fa55333c7b392454afe2f
+ 4f06b0881d81a0b68fd4be1cbd8f34172219737df0e8b3d5aa08631cb64cedc6
+ fb7d4ab012a17117b8ae752a259bc950cb8be08de07737f9b5706175aa425075
+ 0d22fbb656bd2bb8916805d58ae985136855350977ca50555300e8b8bfaae103
+ 8a38b78622e018a165d0442f8fe1446a815a81cfd246b87fbb2d7aff0cd7e7ca
+ af44dfd347ddbd9640a0463b7c7cc516edae5cc49ea22a75d858a137d7154e29
+ 65e04905f8c092000e3725ff735e4cafd5e5ccdf3606a12ce12568f98f7cdf3a
+ fd35629e9c8d4e86d21da1d8d2672f12852035c4bb7188e32825aec60f544c3e
+ 75d4883054da93232a91f63078bb116eb6a6aa6666e1522f32c2ddc3bb51958f
+ a1000ab302985ff4952b1a991730cb8cc9d76056e58627e33ac73e8e7181dbbb
+ 08405e27f67081dbb34342f567039eed99160e3e71e1afb8a62035f26d57ba61
+ 9eb558abb12e58ac098b1a0e1a41a3a1af86117a339d380a1662fc25f516ef12
+ 0480aefa0519186f1ffef6889fad2c73630e1339008a3cccb47a978442b90f31
+ 38aedea79126ac1a3c89adc908f2997af0b308dfb48dc6dcd063e88655f94a95
+ 3aa252fe6ee57490691a676fe8d67d8bc3fef6e4881ad647c0c4c72609c2bce0
+ fd8e0b71a6d92d0e26ffd3ca287906948121176a65a3b75365291de84855ec94
+ 3d2521d1ae796fd9b2210b9e3706978e88b3f9124abf11017cf175c756342bd3
+ 90f3ab2cedfdfe8b72bd78c1184d116fa99bdc8f71560bdb656814dbf0e789fa
+ ddffbc47882a5cf69711ae34646feb4078f507db6afa85ad6544b1f840b33ae6
+ dd43d3b8612bb43189ced6bd1b54efb545ef9aa508f197c8254f31999d5ae5f9
+ 2c37df70f6eee261744f85b4edb91103c333375b26248d9ba262b4be39f5ebc5
+ 88930682150f60c2bb661475649f366197ad207d0e94b46dd7613eee8cc69975
+ 14b8fe868ddc4e845f6081b53b3d1121a0764d00d84c9513375a6032fb78e47f
+ 10951e50188abca8511e135f868d5f4041b92ea58fd66612061c6aedb8dbd232
+ 22314eff4d4c7ffd7a5fd1c44c418b172c26a6f5ac68e3603b7dd88146f52a33
+ 36b7e4785c2c597aa02b5a593b9f16658b4927f3c65750dd06dfded0defcc63d
+ 111e5d493f53164f07203df57fe50fba1d7f722ac33c7a3af53d83792b1b8122
+ c38018b90b6103502fda38d79f6b88d263da569a8b38aff8265488fe058ce93a
+ 4e999d20cd6bbdb3ea13a35f33e20d69fe44b913e1b88793aa7d65eca3cdf39d
+ 8b9c6d6c19646b114ca487bcea4c7e82ab2894c78d09bf370fe0395c92f6ff34
+ 41779e0d85c9f0a82f518ed45bcdb8a8ae48a1b726c37720b77f1980d6a33f6d
+ 15a7504f2195dad102044395ead6c07d2da7deca1410d399211faef7a8eb73ab
+ d5c6d60adb9d6c7f1e23b74c6051bafa277b8dd67b472024b0ab3816697eb1d8
+ 211a5d49b6a97d5dc25f2a26817ac6bba940a603140f960e5723a96091c833ff
+ fb840dafcdcfa1d36f997bd4ad3474a41de472385ffca2bf9a151af35f675c8e
+ 4f8d2677a08d77de88b6b2120f9137ec66787b44dced2a0df5f38f5cec446dd1
+ 6c34b720a1e40a9010511ab8007af8825c5bc495aa4625a4e3918cfa720cd37f
+ 086e668e0c924082567d383756210621966a5fe19d58fe7477386b66182d996b
+ b39ab868de43d1b24331e6eb07475e498c12a87245a8b0d57174fec0d18efc77
+ 832d05259c1b77f3817b48a5ece6cd4ce7568694d753839ba92ab1a2d8ab1cd9
+ af7c694110011eb30b4a53da8fb16613b008b770e30c89a27762baa4e80818e9
+ f53e26f5f8897eef5111aba6a887a17cf90ffa573c17dc8d49f8bfcff80f22f3
+ ee9d5bd5b162c7fd915462980503cbac322490ea4960e36b2291f726f3fae8d2
+ 7741904592a868867effdc4ebbb37b17029747a918b26e8f3d0d6e13cbaf548e
+ fd512f02a1f5cc19c9546c311d974e4f5e6ee54eb46d33a6f7c14a89c1cce4f4
+ 3eb3604789f883829fe2de0f3438e39648960e4ef5cb352778d3243ee6b5e3b8
+ 8d0edd177bcde0b7136f202fffbd6cfa4e591352881c2bd6d8dbe1ff88246f08
+ d187aaf780e962ce6d5d4f845d75d09340b5aee8cde12810aa9ec925098e7d5e
+ d6975b5830264b090d20f5f84430f28e991f25c56fe9b565f2adaea5bcc60e98
+ 4194ae4a4c293d71261f0f53309005b7a69aaed79d0f24ca12bd92bece951e76
+ b7c579ffb16a18236476fe27beed185b9ff232d42b66e4d712bf8b0c30fe607c
+ 9f1b91ce213958703229758a0b42cc487bab277f89dbe2cb0727559de98400da
+ 2a80616852d4ae9e102df122d8562b997b4d36805932283af1595aaf1a6b4493
+ f3698a777ce9bea8e383d6dc1f5e3f2cb8ad8bcf65942e5959aa9ed2f5c5ecac
+ 8e55de02e736a58a12efac4b5bffe439bb82c89949e04ea99e648124f46f698d
+ 018e0877fc278d3b8e5e4c0ac0e5d40ed97c7ef889a8f9fcac2f4de775b33133
+ c4bc3e86fd595f4de1aea5e527230a975556c83b5421fa17a531c365d46873b1
+ a7083bc3a84fda0443a5976a16393b4952c3a20bab08bb67df4979db5ca6c7f0
+ d0af6eb85f6c1559f006ffb57f980485f7f4d86ada87baee76341bda21f1cba9
+ 4187ead84fc119db7c3b0d25ee1761941806279c625d3ad7778a557ed09c2d36
+ 9de6b5537a5ec4c91e34124ff9a648da8195a3716aa15b727c6a4f450606360d
+ 859990a906cfbe471c0ddb42372e9492ad4914a722dc4c451f3a91646ca340df
+ f8ff15904b5a7d4d5071bc536142fb5e026618df5876c183f3347112f37f0599
+ 37b625f61429612af6e431dfa647c1ab5d399c437e74555ec918a7b5a4789783
+ e4fba621cf27afda0594c198e47a46d51eeabfafad44350c469f9532db1981f6
+ e71aa8a4aa10f3a6841cd8a6797df56d46bd406e35fa7697c043c1fd79b3aff2
+ daf3a5e4c16b97a778975395133cf534f01deb1554e3787117c68bd7be9d405a
+ 383ebce1cb7c2b04392cf7215e20f3fb20e5f9c80cb443ad3d2fe8ea187b9aa7
+ c4f79e110b6cb384ae52f2e57df4daa1c5f2af7bff1c09ce6262064df2343609
+ 0c1e893f029700e38cbf99d7d9b07b798e6aeeff0716a8bc60734dd267c9a71f
+ 5b89a1f13af15d3550f6ceb39281637939a08a352c96d1b68fbc66d753cac523
+ 3526683d1fa9eacbaf7efdc635611ace7cc8244f210a9146920813622ee84bd3
+ 6c1bc5850be84d78cfcab7a9e716d53775ecdb30ec40e6b64cf1b5d3933852d0
+ 54e53b720194b83efb78f285b20945f83a4330540f300f30bf572ff878f3c377
+ 4f1b623a9ea95cdf228638a335cf466b836729b1ade08c34a8b29095fc5c47a7
+ 0418e9b1861d37d5668fa13e5c705e8dd2f1f41756c3d16fdbc4104ecc6e933e
+ 21f0f1af88b016fcf61cf686295bfa7d6a4197a7e7d93aaac5d220c32a89168d
+ 070a4dec58e7d22271884df7949d613ef3279c2dd0f3d25d9cc5b30f55abb4c3
+ c8e73b230c245da37e4c7e418f23d95e89c5c02f18ccd4b2464a5d91b4db2637
+ 9fd6f1e56450dd72ec8846289328e0049fbf8ab5759e67b5046e69c02a74acbd
+ 7c5adac41ec860cb140be4edff216b514ae2153e761a4d1d12bc2e9300bc39a6
+ 95aaf4e7189b0eeda1a2a0f758b1e112b639474a4bd034e3f871404372e789e8
+ f0c9690e2dbe996aa8968f93a27619f9bb0b3c3529c888f23f10fe6ef2777062
+ 550f69d5dd0f19de539421408379bc098809892410ed161779f8d659e228658d
+ 94c31c9bd4d4935275f2a78db1abc1b887fe3c252e36b4d1a40fa2c174360b6a
+ 32638aa4624e8e9b12c7649003f84951dcbaed188b14f8a13ec45ace2dd229f7
+ 9da9c40147eb7ec49370893222836b0c6e9b46e3f13b7df8ea9b4fb8279bb16c
+ 10d302acb7f63ea533cd63383e390e8e5525f43eaa22127ce02ffb4db6da9143
+ d44226e97f713f5f656ad9fe3c1d04134f26cb9479ccf767d3cab0041a7f44de
+ 68329854718adf6a0300ebc3729a230a4da004df7d441f027a26b670225200e0
+ 75521a8c020c7b79dd3ac329da64d5a1093f4affe752eb3fe694c7f7a9fde0e8
+ 8ac850c5c851327b08dea845e2e58ee0ad12244f770ccde2568a81ae7a798a1f
+ bd757de543af0860b8207d7b865292f033d145a920ed5edd3c8503d8a20214c2
+ 53b300c7a235f013ebcbff2a1ec19f9a386302056b02cf578f2536d46f465a42
+ 3d3b7722b48b2cf10fa1de390ba33d1ea1fec259ea9d5080ea2ce4699a1cd339
+ 25d5f0574ab492ef4d3cecd175fd8cefe27bdb2ecb931b7470d5abe0fd017dcb
+ 8546abd5339a90e8e78bf7bb37d59d98d2adf82aef356f23c4f6a24dd9492d6e
+ 99c98026d344985fa85ac4b218a6b7fe922f456b2477350feec7dff522d0ef99
+ 44d1a7d023c34df69322d82802c0f034c5994bad5d6e5554646332a0832b834c
+ ec34154d297819af3aba4c48fcaedc1b02d7d06b9b67c5970a0cd6c91750eabf
+ fe559f749b026556b795cb609237611db37447d8fa791b0349f8e8e10542c103
+ 9ed262710890f4746077dd9fd200d594c38a1b3dc80a6bf9ef73cccd4b252661
+ ab1ae75cb6e9bd239ce5c865faadfa4bf11b75ca28b1b0491673feb0b38cd920
+ e9db4cd00c63ffb96c28d804a745166ba02515f26aeb85eb78c78213350fc37e
+ 9c7edbdb69989e9276056807a02417b4286adaae9e865ada9f80ac0fde4be47c
+ 744a3e1ba755c354c27ae2cb7bcf07bb6a1bd0c70d8ac0db21e963b950174025
+ 880a5c3ecd2e059fb6769e965a64f2ab9d323a73ceada61032de0ead3176dc52
+ dc10d5617dcf42eead7bb1517a3cc815fee39faae4630956459819d3f92e5a76
+ b4e3b25eeb9a59308613518a112be8bb8b9202b542526851d02fb96bf4f0118b
+ 5b395cb10993fc5519268ea5b4a6b9f691534894afac1220925481d763d73991
+ b3d28a906679e7c92a93c77c98d868d41a8f76d0b0e50cae584b099287b681ac
+ 8893f79330fff6a1d2f3038b305de36dea177cc55686ac42e86ede3483b255a6
+ 8c82a0f031155fc8f16e0c57b69093976cf2d5d8cbd8b1ebafb0ebee2a7d15f8
+ 1a6e115d417ee014d7e55466ba3f971e2df8c4a09e0a6dd84ac96fc01f27660f
+ 7be1e1b9d9ba4a411508d2dc5e597c4c2802a41544200de3d74b76fff1e76ae5
+ 5ffd05020cc5c0db2a7fe6201dec8136302ab77c27d4d855f248ba8e5a6be2c1
+ 71251dfb25c98457ac67d5774380fdb9b18e16d153fccaf7b4e9dad17bac756a
+ aab0f1b2f92f6df0b4162a3611d60904552fe68868696a76c58f2dac93a4727f
+ c28aee8b8fbb54f26bcf16db113985d4fed3e0e0750805479b3ab07f1d7a9046
+ 8f42f5e965fdf49efb467d306c67a28d41e87b0b9555f4f27430349f538d4a27
+ 9e92dc467a92fcadcd6f434d0bd64586d82a6d3a86555676381ff8e1c1625a2b
+ ddc8e0467e137d9c13e8958dc951fa6eb7abb283718e0cf6ac6a2f4f948aaead
+ e2e7e178ad49f7a74a49a3de659f077dda9f0da0011e72823f1f2f54b5140ac4
+ a34300bfecf186537a913ac731336a8d99aef58c6666507f3b0f30e001c6bc41
+ 1c316a3122f644f86e01404df023e599d8b4c95ee49753fa55b0339e3e583539
+ 9e1bcf14b377c9e67ae75a4317c8eab8f1ff31ab7b543db77c28d0f959b06c0f
+ c731808e3eff9001c84d1ea78b239aa6f643260b405cc9333de4d8b4ba88901b
+ 67e40986cc8367b6778e1b792f420054ac04b60f8beb0b519368fc3be9fc88c0
+ cb4efd521a34088e241e4058437bcb53257ea1fb05e77fefe11f57d3683cf163
+ 2aa442dc90ead03230478dd11f7e12bb89ca40dc1b8e3b4870209507d1f74831
+ fea81bfb28e6af22d8a130d2a133762abde4f671328036f0abedc2623a161337
+ 12c114da9fd164c8c17cc5a9e6af2018fdec15b2b753a2b1a2c0fa3420f02db1
+ 23b7247e32de02f7d5b88f8aa254f67dd7a804a6f9ba611d007c106b08b386f5
+ d312e575afbf756ff9313d80f5398ec32bd8fd74dee98966756d192ac7c2d5a5
+ fa6560398368c51057b4f8c52dc0a455ffc89f26fa2b2ae606f436c392a9e121
+ 9dddf0adafe770b44bde3e6130cbec42ab0edf7fa7589ef19282ee119fdfdaf2
+ 9c07c3b12c9ed073e324e65f5f5f459a86467877f586337737a091189380c6ea
+ b1ed057ec7c51d1edc855b6c839218909accbb02e603651511c6d066f25b6cd8
+ abca72d991b18675f88de9cfb1c5c906f82cc2cb8c5087aa2dba0909b69e3702
+ 64fc427c826d9954289f09d0f047595182f1b70c0f6230f190e1939e312d0734
+ e021b236f073b5c8de8256accf528ca490b282efe196562315e5e3e242264ef1
+ 1e2e67806753f949f816cccbb8a76ca28c6c686945f51ded7a965aeba508c29c
+ 2e90ea778bf7243b3759f0a874c329f321cbc1b72e3c8e9afe22c5c5baa30fbf
+ ee6f071dfc67af8118ef8c191a9908daaa4c6d3824e333c3d86d8c924bcb24f6
+ ecea0d212b05c3c6db8de588adadb078fccddbd3dbc22ab130a5f0e100719cc6
+ 1f87b37aaee93708bc67248c565ca37fd8b360ed7c8541b0ce4bb643a28cdff2
+ f3f76ce59cb40490bff709c7d5ac00cc3394a78aab3cad3df99dac407bf67947
+ cbeee97201f6d020f885452c429b356aa5fe814c4bc1f1fda7eb82e07f73890b
+ 93fed540dee130d8aaba13265e30ffe4bcf94c94fd87fa07fb66385bfad04686
+ a95d7dac2333f06bf4f76a886265dbe51f664c1a644b9d54937aa5fd34c37d77
+ e3eeae8fbeb5f71652fb98e7d4e1fbec58a134a19f8a7e9cc08172a56a1823ee
+ c5d95cfa18ed339eab6b7adc04434dc0f0a6388817d641abdb56b3f967d6b4fb
+ 9b3cc2510b34b1cb548ee3f91e10371015b3b56c65da29e0c9b73f959b02907a
+ 5baa7e8b00ea1fb05575fd5bf433f6595f15bc89bf833eb85596afe151d122b6
+ 7a7d7701b308c43bfdc000240b7965c7acbbe8b257f9fbbb1f32d61616523573
+ 15e4193892894da8653ed76a0dfdb3be9d66d349d0d41909903d857302829343
+ da13275709c830b1779f2fffe2142ead9a4dfbfa77a677054688e3d41a4bd458
+ ac27fee8f7f1dbf25cb98d96524e1e09641d04712c57c68e2ba9ba77ec085c54
+ c5d88441114a9b1a92a0e5590ca9db621bfa196ede344f523ef834d3a9ab2321
+ 92f3a7c70851a83e64bf662556a660f6b476ae1d9ec9a243513e8424f03f2006
+ 310d7827b61f90de5c2f068193b19e86629dd2b0c952be27c039db3588fdb474
+ 03381fe609a2991b0e2c8cb970ae43e815cc6e1a64d21acb9cc99efa4c82e8c5
+ 22f6fcdfafb6cd779502d8c5a37ab7a4e1691a8c058c308fc662082a9446d246
+ 51480f2012dc2898823e8749553076c2ca1d151a2d141159a57d2e6100a98698
+ 85ab7dc9d6c07e815e45e84bd043dfc264881e9f0e59499c8e711166eaca804b
+ d79eee175f48f5764fe6081fa2ef097127a6a1491d7e6d99adde7eeefa36433e
+ d806613476a273e303a508982633cd2623ca8d60fcbac4f8b97a7bce431ecd55
+ 29e6c1043d4d4a83ac1526dd25388303b11a4b3762b5b5ab055ab6753f33fb18
+ a6119986085ca7d2cff56c8edf342976048383c55f8a84db779a6d16a9657c5c
+ 26f46724be37aa67510a45886f907ae579a1ecb95e83d7827cc54b90cd368830
+ fab83400c406a1e41d9294a5baea67c1cc39f59f5f9d2cd98ff26ea4377b99f7
+ 65f3daf1ad4736c36c20ef582cf138508c6aed0ebce18051159e606c51eab87f
+ 7df243791b246ed502556407177dc488b1aafa33997f41bb7603a82aae417726
+ 3bc8822d59d91110723b8ca966940c08476b0c6ab423c139f4ef6e54f8c26ed8
+ 788ef49fa67aa7299487a22dea0e26655800636c24b8ba52f4edd006fc367f93
+ c0c39755a4621a488661d39c70d7549dc579a886c29b59371e282af7707d1634
+ 461dae1bf891f96ae24d3289ef366c603d9c2dcda132ee7eddad90d455c868fd
+ 31ab63d69d86dcd1ee9720e553bdc3349e16071c89739f4e0c8c64afc7cd97b0
+ 3c15175164efb05c7712525ca4a747889b33e189731b16fcd284acd45c2cc79c
+ 79bf9fbd0ab063209c9502ab61a95dcb90089c64817ec3f93f64e531fbdf86f5
+ 49d94b5e687155acf8600108c186a6a99ef786e6ccf275a4dc51cf0195fd94d1
+ ddc7e9db9d40119eebb2ee2164e8bd4b66054bb0363a8c2a12c42815895f9c05
+ efbbbcf386eaa999440ebd6993c5babab3adf23f36399b3d8ffec36f15552009
+ 5cc81f46519e50ec4070613d28f8576b1a8d68d02550d5dce1064b2c6e806260
+ a98aefa12c7a1e099f0935ec1b8fc0a88b0b23745d5079b9f8cb12a0867067bc
+ 84c90f7b3ef3e677a9e3c2c0678c790c420cf23c1811145131264439cdc733f5
+ 50f728e3a0aa158d089bc0982224fa7fd893544f5a2945ede9f413f7f4c82efd
+ fb7772de6ea288dd95c4aa9b7e23af19425077f830ebba9b6164eea031aac08d
+ dea7928c1aceaf5a1378ca7e2ec768e87ab8c383395f26ee6f3fa4c63f003492
+ 8ac6dbbeaa6bdfce2ca2ae6eb4e9fece548863e27c99aa5f28c18c83eb569c01
+ 1cd71fde99ae8ebc49c0fa90afacdb7f2c400434e6a5844474ade693efd4c514
+ c540b3422e86368773ad0b42f83c856ff4c0c2f5e30302800a859d0dcad72b4f
+ a963ab8a0a49700fab3ab7d30d74e18b22b7beba4d544767e38a949b0937b38d
+ 74a92ed41603b903deef11c09f778a3074bae846ecda030a3101fe2991cc04ec
+ 5eceb497b57f85b21d726b3be29f06769954e8e8e3c34b214de6b302cfb6de39
+ c86911209d582aae7afca97e502b5864821a0810253dd32d975c368bd6a9911b
+ 1e42d8984cc09f6c0e3d10d04fb6a22c86f09e5f45f6e7910f405a26a1a61d7b
+ fc7b66a97e5e4787bac8c5ac437d726076bf2ebf8ec018a638efa3402d252e24
+ 479d287d4a0366c947faf706bc80d956761e1201bc73522bb455ebd2509acc1d
+ c87c40d79eea1566771ae0a8a74191e8f6977dc87bafa60065287bca16c0cc5b
+ 7dee1b47e46f62d8865252225fde09e830d9c723d0cccd4ddb10b8e8ffe0a19f
+ 240ca79a2c75a58a066e7346c11f757437071bc2925d51d790856f8cd1409d6b
+ e75ee38a9555b32679b42b44c16cde12d63e215d23d796ab2dc27f6cff83b47e
+ 5a35c1bb787f6b4cf9741336b0894ba6e93606c0d4f536a86cc07d2986b23b2c
+ 219523d2fc12bf42f92cc1060d250f1600d25dc8a35a5b203b42914710e7f60a
+ 04c77f1689ada1083abb062e9487a96259662d9364bdf480f45258326598ff8c
+ eb730b69d0c47a618d3ad771bdae09313e6522f0b1f7c2b032f3e9f6deb53986
+ 73ca83b465842a41c62b28175eb863ccc1343d5dd73135133fccae9f80d561c7
+ 120724d0179164d39cefd50873d53b508eb0b1377ad26a7ac9352a49fa447667
+ 95667359026afeed8d9eef25ef3f4015c3e16cad29072ad5ffb8d76e7d995449
+ 94997e816ba35323f8926e9f187759e49af630513c2ef4b7e2a8130d09f3b6b6
+ d1771536404c147f10b72b6f39b085a7f7c17b986b2b6228dabc15f792557555
+ 4967f02c99b261412b509bde843bd479f030b85e642e44c3b17592893326849e
+ 37e08e102bd37ebead3466db0f25f18aa477cf309cd213758776d7efa57a2edd
+ d583ba4c5be0127e140a57e5ae4885fc984c61f8820b7bac8c8ee491056d7027
+ dcb6d900290ec2ee3a5716ad301e47a4a54cd0a40724dcd4ac9e5ad09356dc24
+ 6a4cdd5b4aea4fa027809f7597657f62946922162498ae737dbbd2578a9544f2
+ 3f94eaa05a030101e50b47e8d585035ae0f57ac81fd1425ded626ccdf2c705b0
+ d54f05482649ac55d3bd5dd56b34aae61c41cd53aa90354e0c6a7662efffbe8c
+ 79e3b72f7b0a54d2627e595cd3ee2a1622789d4ac79f864b0bfe0d8c5a3e629e
+ 9a4cb7c6050e0b71f851bf28a6db00f6bf1f6dd11a9abba5323045b8cef74e34
+ 4c3675491e7265a9609a40a960b6dae0ab3681433fcc3773c8715340237aeb9f
+ 21894ecfe1d5d89dce1140f937c8db5b4b9c15b0105a21259c392c753dc7ad87
+ d2be0cc6f62d28802b2a6caf14a0f2cffd67897726c4333cd9c6c72378d0a3aa
+ a6329d641b8612be9c2b1dc65e6be81e24b867a6e59778cb57094c5308aa5964
+ 8de4136363790df7eb9ef8aa7fe71b534cc8cfcf616fd6318b9c314ccc10f331
+ 0d605faa252e6c21be4ce28f43c87119c9d26d7aedeef93cadee2770e6e07495
+ d0a1b1cb086468f7eeaf8d3e1843f9e3d5cf0824a40744c6105b8bc4a536a50d
+ df8b7b7d1b6c5bc502c28415e99f962c5a8d8d48ebd1fe02383e4b3b9f091b37
+ bcb5a23d01b7fb41154e8f6521a33ef31021b655ea2e10995de9815452c24dc5
+ a17bdabd3ed8f3981aa43285c0fd0aa1d032798d02c5c91ae5b5ebdddb6455aa
+ 523bb298c36d9f4c66a91cb612802b2c20dfa43bd4973618d9d6394b45cf29c4
+ 807b07cea14c031b1a89e8e0a832a3c63b105a0c171f269e273413b72e555732
+ 856b823d03dd537a4190ce8e2c22f4c8c980c85e430a4f786d5c84843e6753c0
+ e6111e2a5114fe63adaee907ba9fda1a04a7aa55da3b5ffb3f987dd1194c564e
+ 71e4d881b0b7d6436ba61b6dd927593d70adc7c9060d327d034cf54ec110443f
+ 6d6b38f78be15eea781933c2f5bc31795ef1bdc8aca668c6e0977964ae6c6bdd
+ ddd1c104098d914862a5743c96d442e3d8f162e99339d8a9f0f3cba997d944da
+ 1997395ea58e2049e89ba5f24b7124577200d20c67f86d6776f2f8ed41f6bce3
+ ea2df4e43aa1fb5c9d2cee1be263564888fb01e04c9edbcd49512760bd7edf06
+ 330ad7a9ef886f3fe66dea6cc78e016fdf48dacf787193e3fc3e6683ecac66ca
+ 1901dcab4afc87f889f479a76a4c827f4122d423189070e138d1469ee2c7a836
+ f7db5cc2074655b94b793ebf915e0190dcd4e065192482d07bc406110e46d5b7
+ 50c81aa29e50e48930886c913220de17f839feea5a50c51ac99275b1c8ff1c9c
+ 3065e4f3e4a874b264bce145bcc577700158cb5b1e2bf388525183267cc6ed9d
+ 92630610c340c2669bb63fe963f089eb4de70f296e4bf01198901870464059f7
+ b8a507f9796c600fa9798471dbf6bc628c775b3e3cbb1be2172b868cc24d940f
+ 24f1657a87c0b2e63160865e28eaefa4402ecf0f9fa7b5147be33bbcac8b9f43
+ 63a0e99c949c15bb30103ed33c8e476f851b493d576a0b5224997bae21b1eafd
+ 6586145be9ecb58fd1b7e7ec83a6754b31c867a751585e72446ad2fc197b0dea
+ dde8e00663b97fdff66d3634be342fa4c82606b532e7a85363fdf6909efd75f6
+ 853756be59269b512125295e8f857ded9c99ecd27ad158d5fcdf974399e218e4
+ 1c839a93e192722a918e80a3318e6ac44a9c0d3ce8f9ea7447ddb7762d5db78c
+ 543e8a3f6e6d6a48b3a18426c3066a9db4890b955c1316e3addf9d4b4c9e37b4
+ 9dadbacdb05c3f859e9497ed0b134c3a83b8b8e7f18397557b2408e794d04498
+ 5d0996861655e2dabd7c69c49225ddcd018e32e38f7e5c3d03185375d0b295bf
+ f3116f75f8af949ff2df409366012fa5299c6670a7a21c95bfbdc692a0f916a9
+ 6329d9e04e836ffc2a52a8deea52d6cc25e92ff8e49ebd4bb97180d32632d9e3
+ e18deb0d7a9c2158f810b1233f79e4aa8a1a0d8d65914c21e7ac26ce63d53383
+ 3ec072ca18f5e8709ecb7c8affe51afef3e7053b07818d2edaab08a621260ea2
+ 5636f1a5ac6b6ba3bf558726f48fe3e3fb753fc50c023d6ed256e45a8c69c108
+ 1bd7e1b664254d69a3fd1862208b9bc55853b228bdd2808fe50c8fe750e28850
+ d1d23006da980c3cbbdc248049f6e7e17ecaca5f834e551ea8c39237affd2fa9
+ 89fd5656bb91d8930ae68b9f3b435ccbd7dd2b9a10f6865572b12e837eec5789
+ f910285c4eb06965bd65e2c4ffc55c9ba260b4a3cdcb23541adeee3f54d527c8
+ 4265e0320bbcc2e000f3d35e66c4fbc436073794e676c00062b71ccdab486e7e
+ 81453f3bb293aa7f584733df076ab6049706d33dcbbd0214cfcf7fbff19d4283
+ 04cc14afe03ef2976dc88eb6f03ba8815719e0c3bc05ba27dd825251b1c98611
+ b3edbc557704b23c454b2d6df006be18cce29eddcc7ba8a325518d9d00fcb4a5
+ 95d710fca4ad4cd75a52505780fcecf9fe3321151c169bb97026ca90a3d1cfc7
+ c94cd2a1235150335065f7ffd368d0079c90488fe4d3d3fef3769fa47eeeee56
+ 6ca9aa026979822f86b74cd356ec278d8d4af797f3516bbb00ad2809c07c0811
+ 54c0abd8265d923341aa789e54758593f8abc3a69210acd691aaf3e1308a4777
+ 2fbf57382d83d7e3ed6986cb4725caa5d0ec78ebe088ae17e5465453d00c0d27
+ d927f0c8feeafd0ed42c95fc57dcf52ad223b0f8eddfbb1bc745afec9a2cfa3a
+ 41b176f4a9c237e939fa6f661700d00e904b698bf49b4753478ee733f7392b1a
+ 66b23a4e6378e1c58ed89567002775d0391340b164e90565c16ac436f4450fd6
+ 9b9f785e1a4581749b38693f3a047349d3adc441debf26fa5396a0609017186a
+ 85758ab05e00197faf77f75dfd20b3ae9e3ae50694c1f916ae940e24c41766b8
+ bb3d7774a05b71cab19f4eed9c5b6d0cd5fbf33ea37b528537a450addfba8864
+ 3bf80127ac9f0a735d8511f2c69661aadf55f5ffa5b79816e304159378b6a7c8
+ f082a6fa88d40b6b0cfd2d49b8d33db2cde550d9476ef53709e19567ca58a939
+ 4d002d8593f52fe4ae1c62a714a4bfd6fcfb0aa6e97caab9ce7df768f10b5494
+ 3578023c993347f4c5c579ff526ef0672b552c123f270473b36ab80bfb46cd8e
+ 624849573ef5f6ba0393b4bfa2a7cf450fb081c76ee1b15b8de4d78af5ff00c7
+ c236f801dc1d927e27062e60f2b8db53528331985c3a121cfac6f93b215b2365
+ 4633c5d9f8c4f2eee33f1ec2adc384f327c4f0b471aefca353e292899f2babae
+ 69072abd16cc9fa191a8d014df36017726d8f9a37fe5885a29f0bb16f9435d00
+ d6811e0b944a4faf84096f75bba6388dd653cbce3e013e6cf58ebf768dd19630
+ aaf8194a6907a83a5e98407e5ee32b5d25029b3149fcebadcbe0979a495c8d83
+ 07647641f63cf8d34be3202b70d165b7b66e63e4c6f66021f2ded0ef36b17d67
+ 55e22f71a5bd6aae3ffae9cb5b943c9817e69045964c389bae4449e590d6979b
+ 9f57bff85ae806ac82ae0a8223118d871ee4cbb6fe088b661b2947dffd21ce4c
+ 83f6febf2c68f75030c5fc2495521dd140a678c3d80b59e330c396889b5891f9
+ 6087c8009a1cec85d8222eb6225404764914aa1446d26862378ec7b0ebcb8cb7
+ aedb3aea248d9251b813dc40def0a5c2bace5629a7693588ca0ec18ef50d66ff
+ 6e94d9e6d9ef97cf9b12512c419b1ae162cd024fb4cc0334d8009ce343402035
+ 5f0f15dce1005c6b15a01e5b814acf9f6a07e39b9b918941af231586e573d3f8
+ d15b169129142f50b6ff2232509c38db9abe8dc099137b5f8f68bfeb0105d228
+ 7f28a4d6d7a30e76b5c2655866a29b1bef139b846e0ba51c90aeaf9807511d25
+ d0b2e24c1c500fd9064b162728816c563cc4365ff03cfac601cd997b5ffb13bd
+ 8a230552abef837c667bba6887403de7a0fea69cf6ee4e212649185909ab7af4
+ bd040b8edd0e7e8077acc2a2fc5ce545c51e965b0247059863fe3ead580cb928
+ 549a11a4e81cedafd213eb57852c0dccb0edb47c6145898b8e7e4a92f7ef7d4f
+ 305254353600eb2f655ce9895f2dc23ece87bcc2f5ea50c3698f2719a54b80ae
+ 68ebcfdc86d244e0b223d210f43e5fd158a3ac9c611e3adbdac7877aca6d8b83
+ f496bec7414e262cd6dc7cee6eb5909cdee05433a0881ebe85edfa455610e0d9
+ 9c919fc5172e6455128d6031c11ded5eff27b4f2e9fcd6090931fc125a7bb9cc
+ 513e69d76c121dfc9ba3bd77b02eb7acced3cb54bee92529b51e832d7de973b8
+ be8d0735cbf68b9dc1ace56ca91cf74309e949eefcdce8268bb037ee8b9bb4bb
+ 9f252c1826946ef7856c72e59ccec6fd39f65a48246efbe0c1b50cf9a99be251
+ 305491eb8516f8567d57c748575658b3a7aecd6ead9cced75eb195af157887e6
+ d226d24e291f10178a09fc8ef94b9b439d3c932c3d4913c02d4118fd08b284cc
+ 5c4cd9d997448fb8b387fe197c26d9be35f12537784ee2671f9bd3c433133e9d
+ 3475ad4af4e7605e27842f1415292b487e7a97b287f638105e285cd259b73fd1
+ 270e330718ad34dff66a95dbe3c282d6882f6e08de35ad609fc23b483b704863
+ 014c5db9d3fbb3b31cfdf82a312c142547912db8ab75ef4d024ba9817e05914f
+ d3d681a977b3a4bf05b51a35089f54f982d052557a50aa489358046af47cddd8
+ 77e595ac0459acdc9bb1c17e1705ddbe3b32b79ff89736a05254fe529d7e3ba4
+ 78fca6b78819c10b92b5add78489c23e04db146b57ad8e18aba483c55dba1a4f
+ 2834a0acb5df0d737402d5e7971aabe45600edf5f76b8eb0a63f4f3a1e848448
+ b79eebe9c48eb2adf39f206e4b841f7b1aba1adc0dc336c1248403f4f4482f6e
+ 550f6f8d4d00d23124047a7aca85fd9b4c3c643ffb9e35c4c67c6c8ffc5d212e
+ a66cc8975c6e4e26cd7749161e43bec983b37470b44df92605b3fd0dd665881d
+ 88ff83beac1af40c89cd3477dd0dd45e92487e44cd36e91e84a60b19865f138a
+ fb00db551b5d9f087a34d04bb91b6fc5f9f843a755898c6b57735c2f830d53fc
+ 4ee8f37bc59645148188b0dae4544e1537cb1dc21d641a0aa7d3025ff5fefdfe
+ 18ac244db92e73b27de5e6fa78638fb614cdfef4bdded23a6c6a966d3bffd5ac
+ d0a507e9736d16a0304f4124120966e8efb531f8c94dd8f0e04fbc43532613f3
+ f7a2a94a0472860a22e895cc70a65a6efebd1078a3382018a7d6dce1e294322a
+ fef3a7f410426aa6f8ee735e7446822a61a85a19a26076bbd4cdf3822a9bbed8
+ c68e00dae2a9f855a34b7d4f6945deb8573db3bb8bc2678e47fa6ba63d98b8ac
+ 84bb2d7c6e3d6cc4a13cad7a1254c5d7344cef8d122df0f0fd396fa21ea8cced
+ 9148e9842f42918e874c262ed9a048511bfe3fd292c19d0013a2d6759339cfa3
+ 2b1cedcb5e20cdeb7978fab3f15f6e690e178aa0d8a686f2e53ad56594aa102f
+ 3fd4f41b2b3d12a99685692fc66178a844be71ecb3563375ba51bad2bc432c21
+ d31f48dcfe82ac9929bcf22e1a62fd6fb82595c7e7d4f01c2ee00411c5e62dea
+ 2555f184aab5e2d23a6dcf4b7d5f97e2c829dbd35dc926051960da29d4262879
+ 8e0008d0868bcde5542d075e29e01989242aaa52e26b009d9dda9e56aea6446e
+ b4f9ed48e17cd79aca9d1b5c40f793539031648abc315b2a4c672563601bf405
+ fe5aabed89218095005a4b9dbd8d0dc4f2a71efcd25dd568ed88ba692fa4aa79
+ 143d0fe1b7f08fc22afcea9b526f0a09f7cb33465bc7cab916b4ac55fbc52704
+ 434efcdad9b0143d9d2fa0e985339040577c6ea16f866f8845ab8e348f641e37
+ 22e2d297628c59020846d358a6c3f454ba70c83b6ba728a4296badce3a6573a6
+ 7275187a90f0f60fd6b2dac1097c0e15672b98e668d524fa4573da7ee48faf44
+ d7efb71c4fecd7fe5e0957690d59a97ce29d341aeae27687ec53977a7bc6534e
+ 108c2d47f8596db169a62cd40f592774a1fa9ea3b44eeb1738f65f662cc94732
+ 8cdc8ce47391414465675a29c7195014b7a34917085ca0d6c7cee1e956abcb3b
+ d08d895280fce976638b8705d32a5adb4786fc6d924810609f65945570a6e6da
+ 35beb89196ba41b601e76364cb91dd2ba9852c4d61188fe6d8bbed9bf1a19938
+ bbb84c89a266b999221228623a5ab608fa34aa415b20de24f406124d1b3ffe4b
+ 2fe200f9f48165de77634afced6385b18b8dee7c250707ca1c308ff41b06c4c9
+ 3a3a173c648271ddb5218b4a5a053fd188ebd428da378b643a3f156386447d00
+ 83c1b5a868b2fd5ff59eee02e6debcc1f2f4f33a43dbc1fd1bad07574e45dcb8
+ f979e208974906318f6f9a1859b685ee23625492893e5df9fc549691785db01d
+ e62b6e0f546c48ee9be8cb8c143bdff18cec63447df1abc959ef4958da056412
+ 65c6a741e7c5b167e3404ebca9b482a15b89af2d76fab052d47ae6cbece7f53a
+ 0af4247d5a31b6e760bd0f1a52ade72fcc2bc31ab67599eeed012d69f68c2e2a
+ a3c5948834455ada670ac39cfae639f1ce2c583541a7963f4c0913bde6777af0
+ 871da1485469c4655d5f349437e7905968ac8155f992fe01689a849c777ecf7a
+ fd983743b72749aa9b26cfe1251be2e0ee12bbc781f315494b5bc41760c5b2b6
+ 3e911eaf2aebc135d3372c66d64f01c50a8f86097f7a51e7aa3e3afa6dfe1fb1
+ ce801534a2a550f2299a1d7f3623a68fb7dd3a5a762e63c690637d8a31532dcf
+ 76a8d04d36ae6157bff04ffb89e0f9eb4375d8b5c58d032e3ca54e0fb28cda4c
+ 56db6f90688251d4ecf2006ffe701f394d3874d9d977ae19f662b46fbcb48930
+ 4314c54db20ae1c28b6b249175284a00fa229539c83b26d0d3cdbc4c9b4eb2e3
+ 54400875026e652c742d26899143d0bca4df0c8cfc25fec4bc6c6cfa21360e5d
+ 5d1d0f7317f06141a493a3bbcfa23773491bcd00a01c5a38697c544622e35a37
+ 4b214cfe3085d317db4a841bf38164074afd3e4b73f0fd2fbbdc916a95c5f698
+ a8924474af0033ef7d2c91b388e1bc0d5778115b7d8047349ea68f07ce0a2723
+ 2140f2c99d5da9a5839137b7a6ef5d2360779fb9e47bf17fe512e60cde3c82c4
+ 05895ccdae5c5e5573af9806a99c3825d52d2fb39318ae49b6bbf8ce496e62a8
+ 8e51d46f119e15b8763649499f9bcc58d703ee43a8c9ddc9d72ee20959387057
+ 39e71743a6bcd8663901f867adf7a316065d7a14f9992f81d5290d1b827be9d4
+ fe2cef245bbad62651865f82eb6885a744ab37dd9ec0f0aae70dab753f9ee022
+ f2930168e281bd02ed8d5e53e1ede54cac602bb6bf29d37def90f16a83a67e65
+ 7c20b20841109d1bec9e2c18ee86e9e9dd1948dec0e895eb824d8ceeadccbf17
+ c02d409b99b5b2b320d8e87efc9e1abeae62b8e344bd44a8df0d92a875be3ef9
+ 2599bcd195badcb5e961047decdcfcf2aa3a59585c37582c7e7d069f76ee377f
+ 437481b2b68a8a23d93a82d2a65ac200c8c5dcd1d7f8c5175d0f993b97bf9a88
+ 2caee5116c36f888428f08f26755c48a9eac5120525d6553209388b24ec1bb0a
+ 99a67c917bb0c6130fd0f802cbb090dfa36eea6e2c2810530b8ba1ecb37c0eb3
+ 2cea6350946cd8fc422091dbaada4d1ab306e4dd7d7ceb5c4de1c355b9cdd4a4
+ 9828392ff302c594f7ab734d96a4123116516097959d9df9b52366071f0131ad
+ 087dd099d6fc98f8bfe33473e8a5208945a55658a749198663b2eec0638065ab
+ 3714ee5cf14b4b011795be345f50a9fae7ea240e08e1e14d43aa0e1caa538bb0
+ 415858d6f07a49db5b3d07c8b467431aac87c985a38085d4d9d26c85d0b1017b
+ 2af0dc498f969b5a4573c7bf301778ba0b6a01d41c69388efd9ac9616eb7c5b3
+ f4aee08f86be73f67a6812910f8e17c7b9212ce7538a932c9917a4482c9ed539
+ ffee167e1af18c26abd2a09ee09580d8e2d8c2196d63b1afcc999e9422846303
+ 0e571ecd055ddecfbac125a918ddf07657f30d6206ded3dedd1c0028c3e6bcfb
+ ed1e1b39e456fac336459fcd7ec884bd6c3c0f0af62e670af3f1006a127a9631
+ 92dc0072dd53d486c19917ecbaee1028859163406e3d77f7333df6b1407e7527
+ 7539d8c811ba1746258149818e88555f0eb96c631551c80175296401ee362704
+ 302d9c42f5149ed8eb709d5142a1abe6687e0a3b1e7295f6d5273734730794ce
+ c4abc7069eb46d9f5dee2a165691e7f1f0b394e5722c61c98a41b6dfa86a2695
+ 73184e0f050ab66c50dfd6960a93e0740c7f06ec84f24780fdc03577e61386b5
+ 22b9c6786322957eaaa251c0577d189f254a9c87ee0daa6e6f25015f7d9d1543
+ 21db1c06c9bcf23b8ea58aa8bdf57baea64a637a0a0378c0d9d11a3d8e82aa79
+ 656527ceaed3943767b6c645c9f9482e358bc877e95f30f2ce040414e7610a55
+ f2fb3bc028d3153881b4710e639dc3508034b9abde86b1c482441053c1d379db
+ b2560d3ba127ee97b0c9384a5c16f2b47559753bd9412e8b451f48df848092d0
+ a968b8a77aa342651fb988a1cdf1a7729f715fbba7b244418f0f246a8da32ce0
+ 8421fbbf9e545d8a57052a033c0e40965739d4f6aa1a85e80bc7c94616348405
+ 0e9c35ee670bff8df987e97fd4c94e95d6e311d4b250ac7be717c80a9df47f52
+ 4b2d42f111ea1c2881b013086d72e9907f6ebbb82f3f1b0dd9433e2a298b6099
+ 3bcdcf5b80ffbb46f76338a1ce96186e52776ce5b528fe21714b81d32f1a86b0
+ e949bffa8fa9d2872b19b040ee8ecc2d1e74b86fd3976ae1d49c93cfd40af615
+ 3ea058d33d99d483b8944437a20d0ed46558c2eac23ac42be587193baf4070e4
+ c8aaaa2f2582e4c590bcba59001ff1c15db691f80ab98ca4b2797bb44f74a4ba
+ 61500a655eda1b8c361a5b975fd805bc077cb6a14d09dc5ead9a75bbafc7f0bb
+ dbb47f47bf3aac6f00b6666fbdf2054b76cee39b1b34ab865fda074e59935f84
+ 649dac82ed5e67d507a4a93f5f0865779cfd7cdc5da63a5ac776b98110fef14a
+ 32b0d9cb83a7e5bec3770b2c99d92f511daaa0fea9c6d00e2255aebef612615f
+ 77a5cbb289e601a458e3c6151c18bb63e7ea9deb1b36aad6c823fe8548a8ced2
+ 62df2b7aca35d19c4e8ebf19bc017543b769b1ffed60314e6227e093ef9785ce
+ cb4a5a2b9bc153d72b4c4f4a464f79a66ecb50efef325dbb9a3206185da33189
+ ab3ed13aeacf6d022e780d4b3ebaeed9ca27a6f183f8de4e3e08b57ec396e5c3
+ ac8471fc1c9c96a982a762cf3e2462088a16935545fd49f58bf794fcbb6687e3
+ b72b39efb09df6f55940b894eead89972a994663a272174e8c91adabdcb5b479
+ a105ee010013b263883e2cd8f0abf8bd01e4c40bbaf65f5d4e8389f2e44fa359
+ 5956f0ac3874cefd448165c149e177bc9763fcff79463e07244ce614c6e27cf7
+ aa00c32ae700c0b9caf06bf7edd0d35cb99de17c2559dbfe572313a02e26129b
+ 1b734f1a5674a2fc6079c623c181a657edd469d7d1f3b63672077c238ef213a3
+ 7b3548e93fc6ab8b3ae0dfc73f2b51aafa6a44720866dbba3ab1432315865586
+ 4e51b7510353c4467b2e1043f5a8ca6af592df756ee5f5882cc09429cf9752c6
+ 076f33767855343851d9aea71c009e319057a5052629b6141d6507ea32a034b5
+ 5eaa6a4d9c4550dc27dec25e8f4a8b575de69bf8191eea4607157dd9f1c0af49
+ cd06f96ab9d0fabbbe4a47be85004d7ba7fbdfd7b738e56464570643677844f4
+ 8c42a24825fe0627c02cc994ac05150e4f3d9b5b3f801563ece27e4fdd89c233
+ 524731206d7b156bf4890988ab6a77b89d13972b267e5ea9b17025ec9fc608ca
+ c9fd0071fa53f3b9797d6b008e132131335f63b5b59feafb2a58fe2d0259a106
+ f890606693980345e42fca0f4142d27338d091e8e9bbff7ad58fb5d5209a5797
+ 4d04e9a9f47546b6643059cfec13bdb74b5e5f43e79875b74f4edede381d4185
+ f4f3de8e6bd1d10107883e57bc7a8fc013f6497a48e0fbeb7f72b917d7063765
+ 3ebd28b5bcf5c11c09d1e925ca1859e6280b3d3dbf4062f234179ff8e3818105
+ 785d78a4534365d01d4c8015cfb0ad8d004149989b510ac308d5325b2590d040
+ 0b63d305fe0cd89f44e2af08ef78a4cf72950f166795f232849109df451a9366
+ 1e0226a13aba2a353a449c05d34ca14d2fca48febd2f3e91c1b4b81a56c04dd4
+ efa3ac09f9dd7a5894f0a6e92361d2ed4d282dabdd5f975ce3af89046b1ff865
+ bfc3c2f13785f3ad7f840dbcc470a7330c81e815bf55fdc6b0230d4b8198d734
+ 0c2e6232d553a37980d14322d11df8347876996dde9efe33b9215a4c761a2a71
+ d907049ed7b595ea38bbc8fdc0e5aded0f624103d79e6d1a2841374839198f2e
+ 99db304554468c32ce3e7eb6099fad97dbc72d14dc43621c47c8c6eae371f47d
+ 879fbf6b84803d8bd80387f6cea2b71b4de744a969ff98474c088685b318cb14
+ 1aed17eb4e28d83c657f388e534e6147eb20a1e9d5df71bfce3addfae78820ee
+ 311d690db28837e5c5dc6e1c58daca7c6023027598e131fdf9b6cebe18c666b0
+ 4a5fae871e88a4954a27000882a036b7a7e887271c3c91f5adc190c5747a0953
+ 36b75ba9694f757394b1bf1cae5915f91d45a4d5bea1c01ddeea30dabc81bafb
+ 4308ddf4d9d39afdf3852d988b0af1a9e0ff4c2f3e7dfc7aaadb5765a9fb8850
+ 64167666c44dc7a5a3fd7e36d2441e2f7fdedf42946ed51842f15f7545033f10
+ 26521481744b924a3731bf9ecf056bee19a48d50f2d0dfd28eb50897c4517bed
+ f488aa11b11cb517a235218dde8ba121f6fb80bf642b1a51be3ef0c422d0ac32
+ 83491d7a1b6ac0c5ef02c45607bd80ee2e7926d6e77dff1947a129b2e48cadf2
+ a35abb0047ac8e125bed2e0dad26bccb7d3c1ef38640c77928d0f02f12b3bd10
+ fb720f2c9d150c880f04d9d0f4ff5b2551d47d0eff30826dd250fdb055bf7f21
+ ec71b74c052c47ff25aced4cc147fc26687fe680e83f2d24c1b331f5fedc96aa
+ 03511f40b47b1f54af177638df18770042e2820535eeb43941924d6da75e0036
+ 80e54a1504827d628c4ddaaa3e47eac37bf82a5c52aef5f6f8d0810355d42b37
+ a5a0c844c97ef378a24590ea59a0f2d96862cf0ec5a0bc5abfafe6a5d812aeed
+ de09b89fd150ab6b3998b1c2598102e32b0383ea43a494deb2b7e1f47957687b
+ cf867a4105dce4b3c73b601ae0f94cbc426cc649e118f8c2e6b55f891f653ac1
+ b078cef9020188a129eeff24009ce5d11ed4ae02c3c79c60a6a588afb15c74a2
+ 8f307f24d3a10616d27a521e66ad287752ee4b5ae5d08c8abb1a5bedcb146633
+ fdca71f2b60d0799746d8a14324b972042dd459b66d1631e7880a85e906dab6a
+ aaa38244de0c7d5602fb4813ac8f361bb147ce5492a080a4a41f2c5f43ad70b9
+ e537969f50689c283f84f2a6b426c2d512e6952c2823d26e06fbacd023754ed3
+ b54f9f9b21a1c9cb4284db9154e640b2d7824d9e440c3d12db911f4fe63d940e
+ ec89303aa9faf798857397daa3052100560e97689f84008bd584396969682cf7
+ 8f1af3b0fb1d5d39b7399d928c3e33137688eb6f8c8b42bc7274860b2b623e6f
+ 0f358f91eb7cd6686ef8d43e0cf4718f14fd8840f2e858ff7ae0d2f821bef88f
+ a4121c0da0ba042fc52349b1f7c7cc411dfcda2a69a2511155d6ffe9c9acc8aa
+ f933c2a72894e6713437a1e24448cf1e9d1ec5800806129942a65785aca7bd79
+ c7060023960b187013cda24b886b47d88798f7da85940593200396c5f0b94364
+ e9865e5e7d4d1681aabc4556aba980d5e1e86f4d826c792d7cc1c1b661aa8c25
+ 1fc0fbc44d5441edf14385962171e673756c96da133b39d81edc11944b269a41
+ 56260a96b585bfb8e0e3fc6d3a9b0383af76837278b1385a2b4e90e5d4c9c3e4
+ eb28e38afd56b93655d0b1c6941582061aefafdecc04e6b4a6ab701952c5f31b
+ 28d4e02b38dee914f02a00b2fe1c2a901a96c4382115513365c86ffa5bb6623c
+ b80b428421c82ef6f87d284f6ac40858d1f5da2b7b43762fc0daa32f40262c93
+ d64269b729dfe0e2685ae49d14ffeca6a5011d295d88e084da1bc5d816a04e2f
+ d5a9659b84b42b144aef85ce2c17e2d72ef9e3768728109000f4255049f3e007
+ 60796b40d4e61e544ab0251e33daa3a0b9469c1f476814740f0ea8bd0dc77fdd
+ 4db021232c2a153c067ce4da65e2b61483e0d5a9db8f3c43a07239d8c3ca98eb
+ 5e5d06a2aa5380b880371a382e7c3ca01a0f03eeaff27fc9969d0ac32e15e8f2
+ 3261d48d349d10d780a8e5df201c3dded7c53f500fc25d7b70f74492dca239a1
+ 48e4323ec23193d10b159ded440233a6c20f1f6b0211bcc5ad21826953d019c2
+ f2a9149b14b42a224afb8ee04a0a8a4af88b97441b5858da8fe07c1ad8e4a8c9
+ 10d52e3a06dd37eae567d436ed2915e05b57fe100da07d990dd4c105b71d9189
+ da6588dd9cb064229c73bd4eff5c3471844ba6bf50be3c963476de4ac42e6029
+ ed458b8a3c3bd242da994d75d09cbd3861677f217f6f66d305f08f4f212bf6a8
+ 8347c61487e42bb18db16e92e6c863e8275ed4c81edde0d6bf812646c9dd59c9
+ 9688537c81e8a25a7dea62271c8c2a39fe4d301bc17a23b31f3392d844dbf8d0
+ 941d12ba1708c4f945fd33cc9bb25201427502d327b148bb72ee79d00270f94d
+ db93a59297bfeb7e21d919fe47e9e18d4e126ac0606cdde6f19a4f7616505cd9
+ 3210765b52c7d4288f0cff1fd98fae3efaab87b773a684fc7782cac280f39cf2
+ a1de9bce84b986671f2189e69a32f490bde7fb716af16fcc6744c9cc9f259fdb
+ 67d9d236c5d5486f40b6927fd09eddb1fe52a33740220a8ae5c56bb3efdebb7d
+ 063c7e548e60be1d930c9dda7d70885ac40a0f24279e6a99fd83422ca12819b8
+ 20d2f0648e8bc09c1b3b8a8333b6a5c5045a0bc0ef5288f2e2afd776619d4bf2
+ 7c2c01f542dc3b418ee1e066ad72da286610fbdfe1a3102c70894d4c16d16c8d
+ 7cd89114884c3506367426fae024b8d6e62bf1c9ea2e14446325c67def29a475
+ e6098c0d6f06eb7e92b969029a325b1db5117e1cd3f9123a2b2f47e5c471a4be
+ 4040c17111829cb08a5a14b7676f1e97348173dd9b0ed680016f66273b1e5009
+ c9ab12d865cf4de5d7b50dc0c6212aeb90b8695fd028597e563111d4616ef17d
+ 68384a62393196dcfa6398b722abe9faac3bffb71bdbd27ea528ff39351e0008
+ 27bdf1fa065058695da9c7612e08d79151c9f9629c9052930a08a9f3770422d3
+ cb1c0c39dddc1020e7578a2c279402d1e6a071fe5be7abde59a2d6659507ca52
+ c160a9a4cfb15319bc27a12c520a198d843760a6668bc21799595c4cc9813dc1
+ 88247f65300186ea88e8b992cf269f8b54c7b62e92c30ae776c7904248725efd
+ 581d3f0ece7c5b5f82aa8578d5a56c861a3eae9d8bcb458cf6ae850825f2559a
+ 34d9317b1219d2046e4a67689ee73470520aa9bf8373f00a5db56053108f69b7
+ aef0932c508a4953ca0a59722b74cfc66ff0b14567a0d69c0cdb6289deb2d0aa
+ d340d8ba25061bdbd3bfc69f3ad0885ec9442daa82e7cb8a75dcb22ff3533216
+ 6d7179c29408b49971417aabab643c6251ed19e3c587bba2f1dfe40d2ce86046
+ 75f15b7a1e3586fb4f63fff102e9294e144b624dedfad949dec203f6d619445f
+ d65bff82e848a4ca88c6bb125321c06b63b79f392267edc01419a94ef7bde0ea
+ 45d072148ffc4935ac8d1eda18ff7d3262bd82eb4798cc4d7aae12ad09b9f1a8
+ 9a7c246e152f37677888d9c05366ac94466e07b7ecf072973fb989637b0265d8
+ 47aca259c40dc4c514b36eccb8361ecb6c16fa163bdbd9fafd3eeeab4a0f88f8
+ 3d194ed5472c8b89e89cdb7201fe0c15b3e232c4f5b7202b256bcd8ea9eff6d7
+ fa6b55a261be99accc965b3f639de83f116d083deae383d0ef6ebe54bfc693bf
+ 3c9a1a907b2bb30dac30ab528febc99829330ce52fc4e99e4a97d3c68a9705f1
+ b61995e7503003ea195ccb90aa80a2297c404867d66040123d384c063c1eef54
+ bf6fd12900d331dfc6035d98411b827b4741c0dd3af609d148d4979d9fe4848e
+ bf7027aa689cb4cf892991d10e2ebd477b7efa93e9f457db93d89072ee4655a9
+ 7915af32d5343c38e84aa59e91f60adc4eb1000f6b412a3794cad0972da7e197
+ 6c36347fc1a816b8b0c17736c64cf497f71d113568be4b4ba6185bccaa5a8712
+ ab9355f4790eae941a276979d15923bd43945513080e94dc558cb3d1b36cfdd0
+ ff66442d43314981eb440e7d9f50d9187221a07ea595fce621019cd27a9704ea
+ 384b7dd5677e279b60201149d97629c4a29934ef6aafcdfd09fdf81de7578b37
+ 542519420e636ed8c90768ed997ce777291e27fd4c254a3e6e68672f63fde879
+ 2018e870c27ba074af35b95b161e6dcd25d007ad7bd958408cab836f2ff4e355
+ b9340fac1b20aa60f2e98de2e49e78fc2da563dbb36ef52d9ee4acb0c281f2d3
+ 5a16caaa9d691e259befc0817458565a71c02b82aec024a15fd2806703233e95
+ 2e9b23c267d0002d5e9a57b1610a8eec49779952160570c1f2ffe8e999efe634
+ 40639b96f8300424472486f10dec7521e5c824fa5cb44baad3fc315b7a318f3b
+ bdb179f8c86e296ba48c9620701fa94e05dc1af0fef65d928d64ce53bdc71983
+ d1f5792432aa289c4037b8e11c65c99788139fdcacebbd3f9a6fbc78022dfcfc
+ 7c237b13f081ed16902b57a3572dbf02e7781b93259231e43dbcb2e4c95cb565
+ 453cb6081d9116ddef98b6bb9b82bf626911efe0a2a989cad6f510586d7c2cdb
+ 17de05f6b32c5ee7b1b23743ef615fe7ec03d5ea74d65b901d9aa0fe7e639bc4
+ 5924afeba8187b292d2907b704edefbf6a31ba4b281e16d0813904ebcdf10203
+ 1d0c7b492e96a82280acff29c46450d8b3babc52710905f36154fafdd04a13e6
+ 23b720c5e3873cbbe0ae0b340cafd199163babac06e2a39b80ecea32191a4b81
+ 3bc5e29b6aa94caf63b61af099531eb575a2051f3342022aefc556f8d38ea366
+ 688a18757e194af271ac5be3f6293f60be84f639e68db3b85314fe8634f3f06f
+ defc4e6abd8256f21da36db238d70384cd5a23fce2cbb86251819ce6e5f59664
+ b473c078788317bbc20834ea44dd1be437beaa001bd839a0d5b3cac33c1f371b
+ ba606b7ba345a1e36b0dfdb5d0bdab893d326b38bc7bb27b70c42984644d2e93
+ 3c12f29421d9043b5ac63eb9648898a6689e3d7aa95bcb203318ee48f45ba9a2
+ 7fde14e62c122d11e86604e1cbb0dfcfc517291b472952ee59d6b337c6433828
+ 7fcec61067f96ba0a51f37b2f52a4df566b199f53552dd9fd33021f05acb87d8
+ 94dd6758969c4093536f32bfbb77832b1c5917c63a2646f1063fefd4c8c87511
+ d64ebb19186ab047200686080324c03ab4fac3f805e7a7030f69117a2809accf
+ 6377f5344c56baebba354f9c3c0170c9c23030aba41628ed04c55d58e6fad31d
+ c1e411780c1644f037625acb9ea2e53dd6ce91caca1a34a668b0fce85ab2b05f
+ 6ef119ee377348f0d579922e65062099db498d82c07219bf6a0e47d0961e31dc
+ eeaccc75bd4d599a24bb057c8eba3cd50e1e564678715fcf379987a5e024e455
+ be53b92fe2c14a50e3ecb6a938413be1e6c910b9106d90c92ff0e04b8ac341c3
+ e93e750b4b19ca0ca413295737db902ca61a94a49a5fd1d87271291d8fb3fbc8
+ c1c988db99da7b58ad89afd51dbfabbacb89d4d8cea6c2ffb6178ba3a37e1edf
+ 29868d5676824ba4b61f8a61b0ed1fe94386637937d83c16914b0bd6545d8e31
+ 8332cb1eba2d5ee5c072dc3a2433a3d205b504c4c1658e5c81bb3480575daaa0
+ 1a2041d07c64a27f83f124a3537b4ed1e50a537907043e3467262c853aa4a106
+ 7ee91d48848edf8e3b0aa8b069a28bab9cac1456a066cb73a582fa6e74b9d03c
+ b6222491c2a4c1d0ab7eef3e98d625a801e6acffac9954b7a71789976c4a8729
+ b0ec0f1f10f80caf7e5fad90a5484734d63d693066693abd833b9ad941198116
+ 2fa30d894bd9996e9444e0950aacbb71006be35bb076c6f502b1ca475e39d55a
+ 93fcbe75781ccdc17f0d6f5cbe6ad7e09506dcded9f0ef84a2e911024a81ac76
+ be2396e96d3ea1d67cfd0265eac70bf6ccd64a5f9da777eec11b34da9041082a
+ d96f7915cc073bccbb8ca771b29dbb17fa3de3f78e5485cfc15b44989f2b3f66
+ 976fd95dc394f4d9ad33ef51eeb102e3b720dfb6e38155e2b5425d1a362e0d65
+ 6843644f71cb111b2a2ef1cd39bf52931c02f4f9dd1b5a27c76ab1645bfd3e0d
+ 5032ba04870656bb977c8d0a47d757d623eda26f563196080dc9db7f7a913890
+ 8e8c6d7b45c452f6d49899022d51a4361a62bcb2eae927ad059af880375c0bd0
+ a9fe8362271bc48563481bcbc7e0d3a965c8939de7f19c25e08cce124b78449e
+ 3d08340eb08afa14412635cd962fbb80ca415975fbaf73fa3b4747d332a7b360
+ c9570dcf13feb9f063bc5cea3ddd15514339f640761a344816295fc69aa1e9b2
+ add4e17bed6dcc3466aa951419ad7df58afa06ed958b5e215678c2c0993f46ac
+ 49c771787b41d7b9d8814eaf985620a4b04d0d3903a8979237b3059f95b122b5
+ d6e5be952d53b65685c8145e647de043faf85b622ccb4648de5b5bbafda4aee9
+ f6984070ce148c557ed02fe0003a3ad4a9ed16277a690155471f839c7f3d6cbd
+ b63623e948358834766e6dd91632f495fdb14054ed180ee20b366d5e84d883d0
+ 8d370a57002fe752c1b2233ef09babd62b1b7baca288e59cb6fca5f74384e3e1
+ 56746af72eda26aedc957af3c852103f171c515f74fde6edd40a504e51276dc0
+ f64b9585ee82606784b0f1b791df3a92200d698b1a463287b27e4e1853d6e21a
+ d6b1d3392a6f710eba6e5fab778b30c48a5238528eb13d166c7358db64d69d10
+ 4801aa1c000bcdc3c4e487b6907c7849acf158de34273ea4acae0c8969f7c58c
+ db3e8efcd98f4c666e587e63c0097e2e4457c8f2fdb9c225925fcc499d80494b
+ a64b8cc6638b5d54736726d430d35487ecee985d8dfe13a9f2e7ba298942052b
+ 94f110f387576007ffe986f63e01dbef1ec8f462403d88e0be5c6bcb6c701e47
+ d27e27c2a4851f028cd44ffd0527feaac5c6e52315a6038948c94e8b4b96fc79
+ b32f57066b785325065d99f62b41c1d290733a909510d8e216f4f7fa8be3a638
+ 28c2a8fdd78273a877f90b013d1706cc30de41ef4963fffeab7d5366ede6b501
+ 93cc4ef40accbd870c04e0f0b8b0e2aa66d7ec6025eba23118ba22abe7235cd4
+ 3cc2d64229c21bfa72e0c07ef15b48719d73d31aba756a159263fdb8a9591bcd
+ f61a3465d1f34629b1a3caf1e6625155f0cba6f24c91e317cdf773e1d855b675
+ d4b8dd195e4801181c0062b61cdabdbae19f0e3edc56b9de18be95905b199585
+ 9aaf046421e11b866fcdda58147b9702edf6ac03a5f76e96f9caa7abe1a74c22
+ 9a0de6037d6326eb827d3c4771969648eed2014544b65268fac907a56a5676c9
+ c3ac3e0589e2f4b7a43b8937dc15fe07d6c97ebbbfc20bf5e20df3d95cecbb08
+ 97d9f9b4f31b6692e200026ca0dcd4e672f52dfe518c30db176665413e60d207
+ 52db7a7b9e946c2ccc72b308870c27a70e483257fc70b9f905ac404fc03b9bcb
+ 2392b55bd6db117898bd012bcd03e685daaeb37933c9f1d07abd85bc173c14c6
+ b95be46e20d643de3a3c756699dd528148f1eb4ec3d0c91a41bca23b49cc604d
+ 2d0e3970bd603313812c0fcf68825354d9544128f879f3c698e9adb76a16ed13
+ 65b65a2205cf3e2f516b4aef5f8c8c36102e47afca34e706aca2eec557512603
+ 8b7f5eb950d151a6fafa8d4b04d80a1a7f4365ff8e5c12be330f12132bb933f3
+ 96467e1569c217edf9e6ec5733642a28f9aaaf9dd869a51c1f058b0d9d064a9a
+ 653c8490ff1a872f8367fc8e7216ace7577859f38a74e6f00c430a04672a464c
+ 58b741a2b8db5b080f85cf30991435125ac7c9502dec6915b6f1ffdca3b81089
+ 13f3a2336d128c90431d0194068f3ffaa265e5856a533c1dfe6f3a37d65a6344
+ 0d4344bc07f7f3ed15c3db30ed945d3649c7806426553d7dfe5adda51c24fb03
+ 473102baa466846cd4e0dbac645cc72dfa84ccf5e39556ae05cd516f0e05f350
+ 75b2c8a65666ff175a5ef2f3b1bbff4ad89d3a35a42e96ee75bf7899b6039df8
+ cc8ef1bfdcb4227486d0c6938e2722ee1d76d11ed35b0725d72b480bfe311e28
+ 26f5da51c65395b49baf87cc29f135badff38d89b043b5095944e3f699175780
+ 13309b9da333cf384278f491e4161e4cda6b7a14f47bf2a3a38755b410ff0507
+ f45d91b0aaed0b2d4286b0c4350eef8aa0af1c308b2d436de419396d6d23e2b3
+ 760586ae7527811b5e0572c83622a2d27ead8bda8e5913d666dc848ae04d04ad
+ 972bad412b54e92ded73ff89cda38ea36fe725fe41caa059bbd2d7e218b520e7
+ 71442aa4c13ec5cfb33ccc0fb13a2d4071f2903cb50e879a8a08a4e33f65803b
+ 6649531dc4532536be61bef1fac11b7a4897e27026aa064eba648b83ac0f83f1
+ 71aa2cf919115764d7a47c29cb7eea3fd1708df1404a89fe9bca9702c40b7af8
+ 0245e9f96b9a7d36883058060fd2b1c10c26d6ba33ab7f92de51ac302295cd1d
+ 578e0bf429dada86c0e2583652c2bd1770047429c8065cf559f19c2c6c36cf75
+ 97df8eb3cd1e04842216515af5faecd02f429d5c3ea1ad8905101dee8ffee0e8
+ 1e9c8e2e7a77fe3bca97c54fbc773b90b6081869a26d823e13f7e6f006efcfd7
+ ca7de684063da23fefa65d51fe5f258aedfc473279138685fdff2c24ba1293ab
+ 2a31e9ca4ff51f5eb23cd450d35f6c5cacc1f90cb7933bcc122e4739ffe7531e
+ 182ccfffbcf887245c03a07a4948d72be072be63ceda951c139f2b3bacdcbb44
+ a3a35853cd2a87e794ffcb604f11b8b873dd6f1de2c5b52336bfc105b5bd327a
+ 1f5af182807b0b1f65b3238720859c6415f6139ab660d66b81010960887e9002
+ 7c48b8abf6526c54f29289db6ecf1d92ee191c9c68f7051d03cc70aaa8e5266b
+ 62bac01cf5d7d4a034e6ca3fdd5b7052ea4d52b6d7c59b605c8dccb6ffae3ab1
+ 8ac2a53301d6df8b7b4ce1e55583c4b4014efc60e0176a84b00f483333ef3495
+ b228650b0a3d8acd80d5290adcbc5c5eb88abf8a440366ec933e998fd718d121
+ 3a13b84ccd52c8a980e288a8dfd9d4f50a875b29679dd5db1449e29bdbe04887
+ 0077b6d503027c586ac7b3c5bccb48efc1d348c7ded74ef9ba8e890ffa5e708a
+ c8e4229ac2a130cccdf8c1e9b1e2fedb0b58b6b45637b2822827efef24555a95
+ 2a5db1920a327c4eba1e56e88d1f22ff67bdd4692784e114ced2d3ed8eec8e08
+ dc340ef41c15a8b36f1856486d9141a613414cd5faf61083dc118fa329fa9fb3
+ 48fbe925f7e48fc69f3064bbf821a2885e0cfa25b51993afee99696db11ab4ed
+ bae1120a08bed985ea4d32b5bea5ce63ab930388733adb31f161eb0fb50f933c
+ 0878c749aef570160c780d9519378f4a5948208dab0a9df78170aaa37f517c12
+ 46a2e8f0105506dd43201a6f4087c49e90687a1185004273a3cad90cc5c22f54
+ 14aea30a8d341520332ec78282bada90993e77c6da9f83eec91510cf532569b3
+ 514497833d6a9cd4fd507af0fc8e89f961ffa67ad497789ade659e5426308d8a
+ b8bb2677eb19b0dd6222a3a98b0fb92672d097d8f53b03b19fc389e14b025fd5
+ 0c19de03fa9f3e3a1cffc96c2b4421e870692ef8c68437c7a7c2ed4e0a9ff405
+ 8a24401cd304df5a5c5aa0548432d3973bf82429b8c58a7093ca43d44669a4a6
+ 9e4ba34dd952a6ae1e1b31bff31c61fba30e8352b7978a13e90567b5dd3dc9ac
+ b64222017c7f0b00865f0172824928d4620f87727320e8e4941acdada83aef8e
+ 64885e504e97755eeee5341a60cbf7eef8e95c44c7fa6764ccf53319a330ba3d
+ a5455be20415268cf79fce380de8930a3dad1a0b2f990d6b91d897187962e0ac
+ 138c145c8da2f410728bfceb8885a779e0d3cbfad56a75747b37fda7912084cd
+ 26e69abf840eefc53be0e384ddb545c0a457cb289921547db7d3ebe0ad126730
+ bd742eb41c216d22ee804f465fc4197f2abb0f02e62bf31a89ff76f4503bab3f
+ f1cbc87845308b38c23e5920bb27bce026a6908af55819029e8eff6f5beccff9
+ 7fc9ca97772a3ec2e6386aab959595ca41dc8e6923c928c48e900a14d2bc8222
+ eba0c9735400d51c930803f8e09ef1347ec7aa6196f7cf07d94b6c798c53f894
+ eca2daefaaed5ac38d506b8666bfa80f1b8b6b56d009b007965b9a0fe510e08d
+ e600e7f78fcdf59136c6dfc3fd0ed93709e1d34a60487a63f185edc4868b3c37
+ fb871f3496cef623eb61a1ec19bb002d2d5ace609c8d0c149e88c75bde7737ce
+ 984fcc52befc07974dd9f034c64da5d6eb3643b5a03f7c2837c5d2e9f24102c5
+ 52548ebc8b05b707239848c2499ec97d0d51f30cac220a6eddbaa96592f768ba
+ 5d5f20975de8abee8e4705727aa03d057c158c0b109b83b2ffd129894d153340
+ aa80b9ff6d0cdede7ef0d7b9867065b9a3518b566e9896e2ff8f7cd704f937aa
+ 1974eac5ed40adc8273d38dc495422de5a866334c22b0047146e8698c91d07c6
+ 2677a04aba7700e858096ed4c7c47de8af3d5d640a2da148f0aa6a9e892411c4
+ cbc28b904d6499b3df5b0a530e83dc55bf7d6011c488bcbfa3c7ccb816bd9aab
+ f5aa0b23bda60ec02c62e4b3f178362d29832d211cdbc395d0d0bd67b2757f6c
+ 9c85427cb5dcd5fe999ce6eea89197a6402418b2e0640f4b865ef6a71ad12b40
+ 69110a308fda56a5610efd059c51e846ea339e699d1d51abcbc6ff61b0bfd200
+ aa456a308b056cecddd1770616e22e60025211f51c109e4c795d359a9198987c
+ 9c4623d5076f06756c524adbb90e55aedb3c4ed127815849f2c0349fd2b98058
+ c17ef02a5ebe5ae92caff56b006f8ede861f59c4a0c38f60701b4650ae6cd57a
+ 8e47e07beddf837d436d151270172fd066b9bfa822b0465a8ae41559fdb80506
+ 02f46529451b3e8f3c4cd322a539e098500a799984970622b31598232b85d76c
+ 47ab24f48874615e34f6f85da320332b8778568e2af667064c1b47cab12fe81a
+ a7c6dad2f56689a1cf0965bdb2d9f932e9a504dfa880ee2275d866496dbadfa2
+ 79c991a111d18a5b3563609f3c0ff86a1bb889a67f16bfea04224f893db6be36
+ caf6eedcc725b9373edc4fe1c7234db90c2c5f80e3147b533d40d1eba3ff577f
+ 7bd810c7e99cfc3ddaee47efd2e42856ec7f71b558ee178f785274ed52092ad8
+ 9adcf163a897059b0324afc4d3b59376c7eaa67d9e9d91162e9263047f86174c
+ 7a414bd40c7406a6ddf3608ebb08ec243444127c7e83b525b0f1aca349495c9c
+ a47141f28b5ecb8eeafa056b7851120343920aab1531eedfb4b0a2443d137eff
+ 04ac84fba976b3310ff100a0950dd22b61e2c6caacd911d5bd98b7ae05e0f1d8
+ c441bd47b05a8e7f912ec27f1295210f28c919c7cb74fa2ccc90c472cfdfb4a5
+ 293ba478cf22b0d5c073aab4793df0b3df26287306cf8503e1c894079f9d5c73
+ d6264509cd178437c787521351aec7590df4e6da9aa643e839239b0c3dd5b8d3
+ 28b4181157e827586d3b94a01ea408e8be6b5a82aaf0eaa1dba9555f48f8b712
+ 32ea460876fdd3144c016f98be48be34362bd5a837cb8e6b74c28384da61b168
+ e3ab8b8e536a2539dc06c077469997046c88fab1b81b69e60f0aa1a099e76bc9
+ 1531cd3c30bae8ad2828c73908e5f6e4fd2cf93ea8b8cb05d2082f6a5a50d516
+ fb87947a4d8fbdf97737363f8f448044bb81b284e3777b312a97efb0d41d578f
+ ea9daa31c93cc5d3e36e0741af30b7ef5763fada0a567aee3ec64be345644214
+ d26c05b4b2da8c4a73ea6938a53616aa4dbeb1cfe0fd30f6fb2a351cfffdcfd4
+ b33ab87e368984b183e573ab34ed162236ee8c2ac5799932b9107424c4f78704
+ 3962373b6a3036af745f4a021a9fad51109467f134f6e5a8df53a604cead7fe1
+ c6f2a9877c66e85baab55f06a17e7c2682157e461ed8cd999cc9cfd0b48686a0
+ 23a57612c33a79c449327fd09026c10891ce651961fa2c601d6754a8d2b5f8b4
+ 16f2e06870ad5027ccd4e12ecbbbab70c37124136fae21659c6a51f434970372
+ 9256de7c4cd286a625bd1566a331321fd6947e4faed363b55a2d033810f6b1fa
+ 258c28b2f9ec04b0b2b04f994db353d6fd52326111a22d244a83be2ca76379ee
+ 1a3ffb36afa90b6c6432fec515dac8434c057ae7d4da7117dce9ef007fbf3c25
+ 79b8be8f8e92b4182764d2412998e3a1632173e23c6c4202c0df99110fe22d3f
+ d85f8decc66daa3f4ac0604e30488cd9c4a99539cf38e84bae5e2cb9f22d2d7e
+ dd121ec99d7349874a3f7b473c13c216909588333be701d8762a83d77152904c
+ d60153f6cb28953e5abdb4af4a25b54f7209009d828d21b968b517dfc22cc391
+ 9d8d5e97eac02841a585312a3f0d9e34253b6a6127d1e95b7f79a75a6b5758f5
+ 4253177d858eaa3e3fc59adf9d3a794d4c490d8d759c71226809afc303d519f4
+ fb6995dcaf61d8578890e20fb7d4f2abd17a6c39105d7fd85783293cf8a129c1
+ d73ffedc5a6821b2e76c179b6ccec8b4ee8a9b21f29396a2d20374f16e61e460
+ 42c137fef77342e71a6762673081e07dfd90c459ed8241733732d92052d1c5f9
+ 53ba6328701bf48b73b43a92b5d70c050e1dae2a3a893b8697e92c7561936c4e
+ f8daa0d0241f11d5fc283f13e2c711f545fbe6908242b95ac54fc60d93437615
+ cff7595ce8f824c9e461b7372e32dd01e250eeadd287967241babb777e4631d9
+ d593c26ad0b1c2e5cae6fa5a63b8a86b7e7080378a827a5fbac08ea8a4cf3b87
+ 07751499bd6d21aa3735011ee9ec7a345510f6de9270f184f366ff8d83ece920
+ ff54a0289ca41b795a8108077b72ca419285d25fdb1ede4efed1e953ab5d3a67
+ d91875f00e1792e66a7c6fba8253b23b5d737e9c435380a652711d0128db7aae
+ bea99f7c55db98f5d215a29196fc7394732f176c016d2c9846238451429333de
+ 5faac7103059cad8be5ba119308b267055e6504425599f58bb1f5b492fcff503
+ 34a93184ed203e5e58c5b57ed2d8b9d2fcf609f4e1119d4db518b53f3141f555
+ ed6fe29f362ef80a604442a114ad262f7c31057a066fc8e4814f5d52aa65fe93
+ 748780ab2fa91d75494e716c07ad9c7e93ca4118623b48debd0f3f49e3178cc3
+ 8cdd15561df88cc649a87661a6774f80bb968eb1c9beb779cdaa98c9a538995f
+ d0390ee51da0207e9f5b8a90e32a34eefc8013314902f10a7ae525ef42fe3789
+ 7a50023d5e14b72f9f1ba23ddd04ccb534dd0454396a45f32df6dc9fce08db19
+ c16a8b5eb1b9410c2f3fa5f9b080b0a4b12ef61288b6d9215776355567f62ad2
+ d474676671a61441780a53bd08e9a56ffd6b17249306b5dd78573cd29e5b96a8
+ 11aa82bcfacfd829cd9686b609ccdf5c82d3e37415eb9651010c54be4db31995
+ 803793bb1379e825a62097e674d9e80e8ffe2cefc00214a3d0bb0ef7ba97e91c
+ 15032d591f8fee033327e5d408987d29bb80d329c88bc128af6ec86bedb12c50
+ f73d74daf74ba1112c487e4539e862964caae9b7ecd7f211253fbe4af1a2b6c9
+ 6d2c037af1b2cd82dda2c3b2f836fc44a6ae073eb9ef1a11d0af086ed9bd209b
+ 50a2951d3ded365c19e7c7916e9f1b32becc6442e7398ab7d694af9e6cfa4ebd
+ 5d401037c87a1655681e89a339f43c54d48ddbb2943bcf24b34540e86f829c1c
+ 06bb76908f4570d78048d726fbfb3c70b51cb10f954368078909cf66644592c7
+ ca7653908e81bf65f9e353c4dc777e6b948ec197f73adf49bc281095a8a700ba
+ dad0d3cdbc4cc02aa28bc84cbee50a67635864efd202bcaad46ce2bcc5b5869c
+ a04a10a5361400891a397da40b10d6c28496bb24ccbfd45012a2bcd7abbc7f83
+ 26a4ab8214e21612dfd808bfd8ceb93c2e4a838ab84764f03d5b6485c9aa1da0
+ 645047453f2dbe2ca51aa39298eab19e07d014ea9abefede5f8cbe87528fb7a3
+ f0ed
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N231/TimesNewRomanPSMT 1 TZ
+ userdict begin
+ %%BeginResource: font Arial-BoldMT
+ %!PS-AdobeFont-1.0: Arial-BoldMT 001.001
+ %%CreationDate: Wed Jan 27 12:58:23 1999
+ %%VMusage: 29118 36054
+ %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. 
+ %% All Rights Reserved. 
+ %% Arial is a trademark of The Monotype Corporation. registered in the US Patent 
+ %% and Trademark Office and elsewhere.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.001) readonly def
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation. registered in the US Patent and Trademark Office and elsewhere.) readonly def
+ /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def
+ /FullName (Arial MT Bold) readonly def
+ /FamilyName (Arial MT) readonly def
+ /Weight (Bold) readonly def
+ /isFixedPitch false def
+ /ItalicAngle 0 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /Arial-BoldMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44341 def
+ /FontBBox{-167 -250 1006 939}readonly def
+ currentdict end
+ currentfile eexec
+ 904c5ea1435c9964cdd2a085e3457969efc1f06f924c0c2cedb5d3fb56bbd867
+ ff33f8109b45e11ec8c3ec831c257313d39f7317b33e7a6a87834ad3af2309dd
+ d570b5b05a89d90d15aabae2ecd6614dc71e518b0a3a41cc97d0f3c7f841d5cc
+ 185b426aeb3aa36cb397b88084ff52894dbeddac6128a2b8ff8ec53490eba76a
+ 1279fd2ef2df0edc21d2b3a9b4b60b49bf10deaedccf43cd1996d3ac0927e66a
+ 08d84a2d87c1b24dbe46f80d69e4861f789ebbef23cb10db72a178e4d81f44a0
+ ca65a9e5e6e9a233d4ea1da5a2535b8442c7f2bec1da944a968dc79028143b68
+ bb968c519edd03904b401f0cdce036d732ec3d2ec0b304da989d833184578e02
+ 17eeba59f9d57b06380c7847a01eb3f254cd82fe25c98612fd48f8fe49b6106a
+ 21be0015227fddc5bee5fe409e2b749ebaea8604cd3a83165d85dd8b89b8a6ae
+ 9d3ec7d031056df554971d8946686549eaaa1f691d739f9593d6ce5ec6f934bc
+ 513eae56530858a3a10b971efbbb76937908088ffedaf25eaa6d4a94fdac547a
+ 4ddf8a5e632edcf4c13b4289a2592958f5f67807800d4670a3579f63b201ef90
+ 820568e50bc86c6a4045f7f0897afdb6a2ae697669e4e7da13893dd538542a37
+ c877a3677358a09a650175d1e54fe86e4ab465f6209f0e36d1ac191d76aa6c23
+ d8d184b5e89c765d38e5782c5c53fc69195aa9976418b6a210ed132491c1b2b8
+ cb2c4b7cd44236f75dcbf43357018202b2a6ee0086bb796d6793153c82ec0257
+ d6a15add604823f2ff5b0d089098984d9756fa7d10e5190454b14be92afdb4b5
+ 6404497a99195fa4d9c8877aa8b653be9c9ff279c5f2c185e0385536380c694e
+ 621881b18e346d495c37ae1610556e6d7dd28e7f22dd3772e679f85e0240512a
+ 47508a7a0ee1e1628be8b5c3ff89a1fea57ab9eec06fdb6eb3cf72532b1227f7
+ cdbfc2b0a7b682e67c2b4e20b0daa6e85389837ba3788e2d51ec274b3991cf80
+ 7e5f6715d5dae3cee7528c054fbe9e338e874cc1eae6144ba0c32fb8597a5f6b
+ 0325d1a90bdd9bd0cc1f5bea118bb9a492cd9d46355760c62f92dab4773e004f
+ c1fcd2a11bbc547b08c859c7571be62b06a7c2623ad5ea59d065c64d218d9ece
+ c9ea4e7dac66c24c535e5480243cc85c5db385ac30f4dc8078672ad4c209871f
+ 781f3abde767369950e9067c57e9be14d340cfd4029e46fe9d88ddfdc2c5c45f
+ e0d4a04624c6ccb5ddbd746e55353be62c1e40a4c5e08b310228fee2529b107e
+ 12a5bd8f459e98c36b008968589e4baa9ed32a7a466de35554c1328173466150
+ a9b552ec1397757df4fb9912190b271bbf6d2b3844795d4443c3d3c22b087a1f
+ 5d66891c1319f532833d83fcb765e41e8527970b07a84546e8a1b2513a846d1c
+ 8e6e3f0802cd1fe6403faac5de2cd5e94acc731777e1e30f173efd841650bdbe
+ b003ec7b729303cbca8ba4022ca7c472928ca4c3d2b3f591ab05cbd640dc4f89
+ c62012ce599ea01c9d309cc5c0e521381c04e735594ca26d63705c77d07ee422
+ 4d12bd20f21d4c7721e79ca9bdc32b2ee579ee2faa608e91cc46188d6e94d682
+ a18672e65e7c6c00a8de4bed9c2cb17bcac1b17da71c19027ccbf8d73b130877
+ fbbd8a3a6e1515c3a5356f3f00a61cb224b609abf8d33c7e091c0687aa2c113e
+ 31fd54aa16b3e0282f1a28ce343962871f2c2a48de4777a4e3997b6ad8119ba4
+ 34aa2c53bc31949e96a2df24d13fac5c004ffc9d66e2111ff1ebc256a414a15e
+ 2e6a2f2507bb131da16caef7945ae6af7d204f173d3baa63fe77945c11c41a69
+ 566cd444154f5e8aff8bdb7dccd9a64a76ab9900d0479de60ad47fe9011e1018
+ 9e7a5869f375d0905e98fa91a9235caf717233a8aaafcb4e8d9271985395ab38
+ 443ce7613a5ba73ebd9a17525b601cafa5e5e9bae89f297d0a0b182d97bb58cd
+ baefd30846733dad7f8b22a10690ea34c4d435ede3d3bd02946415f82596e59f
+ fc8f8bd657720b2065ade950a4e2691debfdecd49ba7c8efb98f810b0df03632
+ 71fb0866db0567b7bb372c7ab2803b20ad604ad57028610bbfde5ac74d3930b3
+ 13c279e1c3d0c1c048ad0d35672153e49dd66d3b0bf05a7474d50a311fa329b6
+ 986eb0b5a0fca68bc57abac69a3a077d5a9e4ff57039d0c14c7253c8275cc74f
+ cbfac5c6ef1159f7085fe04754b10ac95fc010b67f5024238e38369213180c78
+ e87f77be8851f190a24d42ee33ea460af2c3d075186ce9e736da8b0941458185
+ d418c36d27b47966c691a104dc29c6154221552f1dbf1b7a9f8795ccf1642304
+ 3cac67973b383df736b2d2c50bfc821889525f84a6474c186b2fcbe8339f1491
+ 6d8dda0554e53e9ec559d525ebee198d6ddaa521cdf34a78081b4d5ad2bc44f3
+ 3718516b1f9bef4b9a183712f8ab7b860006adcc3bd66c029cc8e2f16d72287c
+ 45f596d3e9aa10d92f506291b18d211e58943da76432596e14f8beb19d9a4f81
+ bdea455976517125f8cf99d8db478e0b747895c95fc176fe720a427eae14b280
+ 409936fdc7b433de11773b64365c82d50000e9fbd952b4c0856b5d1dc09e1861
+ 10da66d52991246dab0c1c85a4440496d2b04c92757f939c19f4395d3d28cd4f
+ 96263cff6cfb5bd411975a3807a6d7b05395981d1934894df0c0e9b5409b2d9a
+ 15ea0dda8279899d1cb753e9a85f7cd0b382b28766d411d805c07a5991cef28e
+ b6ddf2c222cc6b78705de23c3720933dbf7b048ae34f51a671fce67ad547bbff
+ 3c0118b0946e05361a8e4670796c6e71407377f66b20b6158ebed4d813d21186
+ 7bf5d7b92e2fde16aec3606e9a9b8068d5d3e3e42ca33fff03a5c6c987e2e257
+ 19e5330ad74f9c8ba7aebac33405eeeaf0ef678b12c9971cfa7e072f50d7da3d
+ af35ce1366e2fbf05677906c9f04a0822219be02a2a7f33facda252cdc22938f
+ 2983577b3452bba9e66005527a871675fb7b76199eff20a2b4cd7fbdfc751177
+ b9ae47c0fd7a9917ef43abd1515320e678df666836d21b418d4d54c6ff748ff8
+ a0a2b7011298d82204f86d14d4e8ba7c6bb93eabb831a75565d97a5263ddab46
+ 5b27be20fb3f3541a44aa61ddd877b5e09b048cabeb786fb2d75308cc7d85798
+ 56890a2eccf31724e8bfa65f4e9d49c4f197c62072717aff3f3a63b6d9e4f4c0
+ 4aa1f2d0cd910f6d71f61d3d56c1b76bfae087c17b1e46de0c6d80d9b284cb2f
+ 1d065193037bf051845b51d9d3f07e84c8275f77a8af594f07486f42b95c2b4c
+ 8d3209007b622a3307a93e393144d56be7886d279a5ddc68de3e69a8eec8684c
+ 353c8450b7d60d815860caa8af0a94e5d1938514e5782a3409af0e54ca9c999b
+ cf7048f6e5e357443fcad2c38c7ecd119751a44bb5259377955c0f0dd476cf45
+ 3f3c9412df5d750dd35a2907997eb4d6ee431578d38f50eead0d887c659d0137
+ 3552ca36fa23c7a680fee8d1710b7accd50b24b00aa6bf0b4b5b0cd00dca61d6
+ 55a1d06bb652ca88aadbc920d81433691b46fd11a61f1a3715793b114af8e864
+ 55660f11cd2b0e27c0f08f4963ea558bff1700940fc26b4279c37b92eb52d4dd
+ c7e9dbb402b8324452b7f348a45e6cfb16f24dd42bcebc344a85cdd1a1c65de4
+ 34aada9f625b24607d030f90733bc36eb1555cf5e40fca955e8d364a0553298f
+ 86e53f01029a9b2bb509587893b982b1c6bf6042eab5231febe492b05cbd24e0
+ 509e998af52a2cae5ddb7450c0cadca13eae1d46553c741e5d144e8e2568c01b
+ 5fab73ab52a7638deb7edaad8b4c527b5cadc036837a42b2a244253ea37fb6f8
+ 2c8ecf00f03eeaf9c4d15675a7fabd5700b6cabaca1387ac2cacf431a5e9b149
+ 5f3cadbd25e4ce096c62ad9711277acfe292200de85ad56f0639f7c007660d60
+ fe41fdcffa9f8623a4345ee6c764f4e1c8203d0e1cee0a157fd51f31f6a8969e
+ 4078a37fac420c7d9fb96edbac5755295cb6b99a0f68d171af7c338cf4380d89
+ 1ef58930c9fac0ed5e34f70561f25097822dca98c78fa4ab5eff232bb89e31b3
+ 7b8fe9a36062fd1c0b8da41c4f52c8c9a39e768da50f8faca7f63906391a36c7
+ 599c044c60821dd5e8bdd143a8e69f2d5f4bf1566da816ee3e168c9b4afcfab1
+ dcddd6f4a61c2a489795a8b23a027c8393e78a8feb4fbbfb196b463cc2474270
+ b48e4d56dba877ca9901ebd606e4a68d9c0347946fd33cdfffeed1281b2ade71
+ 79eec9105d2b9580296a056923fc48bfba1d0286a59446dfbfdb14949fb758e3
+ ed113d4b7ad473e00c311fb961fe7dab3ebf015fa81e8e251daa7137c7f01c31
+ d4d93b2a48238ac77f583c76c76dba46f7cc9768f72591aae9f898c0c79b6964
+ 764d294e4c8bb1370efecd980a0da83d90a202a65db5599e3a33d9e6c7f068c0
+ 8ce35d2d846429cc3064913625f2054ab1d9bad3c54e2c6f0574944083731820
+ 125c093b735475396bce415a242c407030a4287b08f19182ba7a3bfb703fc49d
+ 08a039c9586e0184e702867a660486a81f988a6dfaf89dfdb643535658ad505b
+ 93b3a884e155cadd61ec6a75aa31fee439139566de3a93d884905abb26151d66
+ cb7fbed8f77ae2bee09eb7c4b95e424c888780db4844f2c3dda83e03286596fd
+ aae457342c3cd46e4c0c2556a2ce0365b9c92e7dbfe4659deacabbcb51c2755a
+ 08b86982f9a0a62ef0f52e3f10b048a8e4aaaca6c816c74750d103ae25b6f75e
+ 25149127aa461f1ed7241f0b3f4ee932609145e12c4e871b271dda33c8bdf01c
+ 96bf1ea711e34cc692b1157e2d982eb81a8cb882d13780ada5fed7c2cde98e2e
+ 7c92af2a2194e3a26a4b3897ebb100934f0c91c107006ef667c8a39a896c4401
+ 4b09c17ec8a373c6a17137ec5215e78c7abb99d16d4a179f5a6fa70c8fa2a229
+ 68bc9de172052d4f83964df6284127bb4a24d373968e9d0dbb9d8d22320a1918
+ 1999ce0b8a4d9374fd7335e67537be89af0e3ac7988f2613edf3ab70d339ad0e
+ 2f82ee110b6d2703ab6a7ff6c2ef8950614daf82c06a16951e2bcf840f4af54c
+ 46159ae608574f31f8ef331e4ec9adb2a14048d7fada855975300d0b717cc777
+ 366cf3328c063c84fc653eae281aa5e4741a23775e73ac45b7dae52a5f7a37a6
+ f5483fa1775ff1cc3fdac5211fd7d673b740c302dd8ab9897f063a378727346e
+ 892ea6a2205d571a62686b169c90f1ba8e553297d1556ee0255a066068cc051b
+ afed6f7c28902077fb118f6cf5736ebdae7974eb330f1a082238f854075f5751
+ db23a8f721b06d874fed4cd8693a320942fbe108dc72e180ae5ddcb7ea411ce7
+ bfa2ff75de6381eb7e8bc5122ec447d8fb90defdd25daee0fb509f34bfb799c9
+ df27d51b10e41e12f271d8fde082f7963c8ff60859990db052a907905d3c179b
+ 720712c2b7d6fa528a140e64b6bd0e3687052db3b48d85a02e87fd05ed4115fe
+ 65c47155edfbdb55278b8aecb89039ccddc6437282d3a64ead2e627d42ef640a
+ 0c6cff05f8c7fc310d5ac596e29b4cbe52c78a242967e1ac67fb55aed3eec873
+ 58b2d91799ff49d878adc42c2451f24c41617b250faa878f6d8aead1d55e6dae
+ 70d67c102bfe6a8ba5a6332eea5040d39df71712106eee0fc195ea5c2f290d74
+ 8eff8ab2a2225563962379b399ffda04929440f4e40e0dc7c268e2750eaa3cce
+ ca2ccddff7df67f6d60a2c9e8707fad4aaed609ed9b1800a27f3fde7f0c88922
+ f60cac09bce9bddec3c88a1d4e9ad1712ccc3c17a339f4d40fa67acf8ebebc65
+ d268a2bd3c1e71172c0adc9a96b085970e19222e3c7f43790f3e7e6b12167f25
+ c8f89409d75255793e5ff7478f0f530dfb0fdd482ecd913b4f03b824dbad07ac
+ c60c6e6866a44ef17b03ef0839e6784b604bc6f37fe38cf3bedd27284d4507d6
+ faab577c1a3423f2496cbfb8a0085cb98e68b5a5154bc27a62f164ace5dc0297
+ b61a6453f367eb66160a8fa894c838814435a1f70f89a219bdd4cc2b62257023
+ 6955457f9390f04cfed2141242589d0c283e11488436836f5af9d6a69804bf0c
+ ec59e649f57a06c068a65f81c9dd9f83370a2282e21ecca780403a425d20212b
+ 1aed5e43212cfa595b72b1968a9fb43634a4bc8f443b933694631d593801011d
+ abf45e3ce31f03ecce95eb17ed0f4171539fc036a0e5059450b529d57f922b7f
+ 20062c50af6e559500a3d43aca4db29c4fd7dd07d88737abaf09e31054ce15b7
+ fc1a6da06faa42edd22badba7e92ac34567657e801c8bb7b4df977731645a340
+ ad5790a4f95e5401384f415aa05789adefd9aa845b7feac78cbd1ea8f013f8e7
+ 53b1a91f21170ac6ad5a34691cb541f280e7e087164f91f5461880317787dec4
+ 2044813b8adcca509a72e4f6bde0963febc4f945a8f33ae12c08f6a8ce1d3a79
+ 254b54b3a7ac28a6ff2efb4632538c9c632d5c579b604ef5d208837b4265d374
+ b1e5870f603f2267173a81573d1270ede575fdf3af37f86d3ec58e437cef6a92
+ 2048d070a0c938137c0a60aad8f7a4ce9370989071e4239592d253692f821089
+ 1a914d07f302cc4400bd7cb594da50057c2d55f384748c712d49e52227f63b88
+ fbfe3bd01bd0fb4d23be638bc3d3814e240c2d5da610408294d3e72867710412
+ 143d23972887c653298effeb49246436211747f1c7947f4da3113d17671e157b
+ 92207b0d5c5871e3ad93314de9d105c2f6871d60919de32d79e2bf7123c4e16a
+ 307ffd0612a89e24125d362748991574c4c922f7d3b02ae0df881222e9b219ba
+ 2e31b7f35d14a1d79667371118f115756d88efe743525f5c07f244d554ddb0c6
+ aad2df108e8cb248218ebf98755417a2c55d9e6d8514ad7965a31f2ee5f7134a
+ 89185f2b46f4f365c79b97cd5575be648a8d2f3abe20c5dd544484cb2e49499e
+ 272dd68a3eb549d9f933d9fc6d37b43ebb52504d9980bbee61cba16350f6405a
+ 263520bce644ff08ec4cb691e240ab8e832978de1a59975d4f13d7b1d71da3fd
+ 1f11471a4205109b5b6130870d6975754975ee4e7af5afc95e7e72021cb09843
+ 818e0114a3c60a2f7f063a8fc14aa7949cd4e8f5fd2ad4e00f2500a2649df989
+ 7af068d2b7d25b1d8a6637eb1dccc49dee641ba04803173ee20d13fb93f91fb9
+ 957a7a6c5d6cdbfcc261b3c6147f68583414f518a91728c3ba06aa260bda3573
+ 3027860b91af5ffdc1ce1bb8516232ae20d6fbe5582253294191389f426e0c4b
+ 5b2af5b217724e487dc5702ce41c81f209a1998fd53cc14ca1c739ab5ac27f65
+ 23fd37b5a3b55ada156fa5953b643a90432501f41402b1f3271b5345c44e1ea5
+ b2c4a5171e4d5fa1c09ebfe2e4d1cd17af51d74644c1509524a73ed07f7f0b79
+ 150e4dad1aef92360738caae75baf1430550ca9898d5876bd543a77203bb9a9a
+ 9969141f8c564b0685b9daa2fead6b0aeaf326b99174a15a37d80ae534033b13
+ faebbded869c4d0dcacfa49b90d498d318b215bf9d7e4e7113e55fa4eac59b91
+ a84e9c55036beaf6e12458f314909c55b200f32b009a9c90ca8d185e5905a1dc
+ f7a057706f80e1a0a7a1e31ac63611aac857d429cc98dc77c52dc6c7e4d0a335
+ 463bb7d3dac4de2b35bd6afaf997414bd1caad9e647f39848582e178aa6a6fcf
+ 0e5bc132ba973011294abf360296e266fac72a898967ae5c087a93868c47f24d
+ 5cb91ae7d909e2cfa234ac00a5ab134c7d36905ea77ee29fbd344cf52689258d
+ 338a1a94bdc2e8b98f8996b3e87fe0fb92408ad3f786857566fe67f4977f3144
+ a3b4e6b1ffa1d428c33eafc907d6d9948ecdfa5ef38399325c09133fdf835234
+ 2b66a09c2b22244fd50712d3d21172ca361495213043e4b2bef47830fad501aa
+ 6a652861f33c07a3f5f6744c4fadb9e7ef9153005a3f245d8af179da515a7aea
+ 8197db238e4cc4f2809d06e0fdeb52bb3c3b070e1e32acae284ac0bcd3196803
+ 67f8fa9971fad0e3a3489261a57c826ee3d6c148cc24ec18a366140107f495f7
+ d85abb54aef57e8a5ca874ddf1f0d2464c4383f8560c7d4cce5c2d0b56898c39
+ 35576498baa98f84ed7ec4e45c05d61b292a7b2cd760e44685c9c91b680d4f4d
+ 947e42c6da5cf0c8ebed36c99b54988ddaf1c1c8b657cd4fb802bfbbf01eced6
+ 140dae7089c28591730a00b52a8e88bc4037f8d0fb7a594a4d352351811ffe55
+ 5bb03ccf1615c33c2e3043b143914fcdd52d113539d1bf51552c3aa388a88aa0
+ eed22ad41b2f50d23e951d0a45656090fa209d824476915fa93be429ef5a61c4
+ 7b27a73fd1b3318e9f99d52113fa80f158869960793cae18aa31002ae3395c3d
+ 4c374f5f0ab2d3a2046492245b932e989e19b48d57268128664a8f14ebf848ef
+ e15cca8f46514eeb92d9063eb854d22d42a5c486a14382dac87046ee3e1072ba
+ 0adc6907e4b5322113626af1a9ec082eb0d884e67e3cfb2034be9e84feb9bf2a
+ abecf966a05232c80742e78f0b22d2f41e1853e71ae39cfe3cd0123b0ec11204
+ e34066dd1f12be2f4a076b30e3432bc4dd7135a1314f5b840614e90150a12211
+ 39abbc3ffbf7014fba0e66befd41f5952712b25582c415e084d6b97dfa93b51b
+ 8f68651029bc6c34fac40779f5568a5255cc2a4c96de123a35c83d16b5c9dac3
+ 06bb5fb94acc38f871b5715409b56d7589d661b2ed9b2145c4ea90470c51c194
+ 4f5733c4064d8b66422e4c3b96eccdc6c43c90bcc5a234ffe6307a0bfb900bd0
+ fc9beb77fced4520a0d3c8b8e13f04dd3de38fab3b1b2df7fda1d162516dd9cc
+ b6394088eaed3bd42d6b15cc05ea1a87253be931a00c9750689175de3e7fcce9
+ 07f4d7610c7589bd392ecc645672c1de4a2ef67d9a50b029d7546a2f6e044021
+ 6bbac6fd78fd5e4fef88ac5122ebc67ce17dcad67d573eadc1af0c9d8f523acb
+ b883fdc5c94b11a5dff772024c9b442be11dcfb630e9270734d4779ea8f99f18
+ 037239b03d2d16e07bc4eae677e639eb187625a09e3e06cd4347768c689d3bd0
+ 21f47794f7b0247901eba8c7672b5290a31bdd56bf2f5b3041f8d3b9da29c286
+ 115722e3b5982be1777024d56014fb7a7a254b2d5e4697e51ad73320c59a68a9
+ 7f7261dd306f52713203381da4ab2bbd9dc974b524363e09c4462fec1f70199e
+ c80cc854e4ca654981694863da19bd085d470dd09ee72f1c35c656296723c9e4
+ 35740a444d46188fbdc32a12afc594aea7de6f861012a109723eea43c0c29cf8
+ af66994bc5d71dd36979c599cc174122404cd706650055930f1ab5d3784d3c6d
+ 244bd05f0e7ac38e5518b94ca8d9aa65b61873fcc07d5a04f98c4e18dda9050a
+ 1f5dea7dfd2a87cae5484bca81a231509a935552418ba6bdc736fabab10e5c14
+ 638b0b9ad736353ac4e6795286c4ae92ba4267a348bcbe08e3a6f1c4e9aa0b8d
+ 90668ed326beda8797f400200d034f8a0ad0ca658febbd91a03071686aa89393
+ 720b679c57f3b90c59647e0e10b16f9733f0a7760770ac2388ced0aa7352c022
+ 73919bc7cbcd9f998a4b422f3e3a45daf7245bc5b7e4bb171e5d1ed4341d56fe
+ b26a248413954a68c06ba9ddeb53a30dc4bca3472392f96b1256b53d413db486
+ 91107932f352fb3915ab87e8e6a34b30eb630690c78a7fed488ca41929120d29
+ fc5460fad9131fca28b77e079ed27c588ac22e5ad9375e53ac696eabe5c9e28c
+ fefaa621ef0c52eacc9a184d08f7e40e404a4b2d5fa12b29b9ebcc459dd63429
+ e5da478bc0220549aa1d8952128cc97328c13b9d1d1606744a28c6ce928261fc
+ 98c140f47e8cfa42f90bbe99b9f95a184be9ba5b207133efee1f92bf8d1af532
+ fea512c3f54fbd207411f5a7031e6ecd879da1e3c891c13cf93ba2fb52eb7278
+ a413380083381ff5550e8b115d0b2835003df0bdc24af8372effc5bcb1a126da
+ 83ad1438fbf0bd10a74d4a4ce3a9e1251ceb11580421e4bb1bf40f85c12fb6b9
+ 90c4e3d619f50ad66b71ccd762f1abb506d7340e22076111eb65320b3edd8fcd
+ f7aecd364aeb98e6168b55679c82d66cfd3f216da15403f2072466968a0affd4
+ 8920f6ede8901e7e242507c5bfa114e3504e67ead55684f6e7098dd0f2b9052d
+ fd40ca61dc0bfd1be1ce42d669578642dabc3ad01eeaa743e3dbeb623d25d9e0
+ c64ab48219edbfd82415e0a0177307e216f5559934d7edbb7462b804697c27a1
+ 3d72b4c703a893a59daf2df31b5a85add12f2a644d6d3a19378a8a805168591d
+ 2b3c1591e60cb9726b2d0bf9103e9707e5e8b31da42c53bde88cc73102ad976e
+ fbc79c83279a9b1f89083a56c6010f28f629a33dbe464abcddf201026d62fab7
+ 8236bc9c7ea1aab0b4f5b224772222e371d84a631cb72652360ad1c964a3f9c8
+ dc3194832be6a3f581cedeeb8f09a4826b09f9be6aee350d6479115f94813466
+ 7cd73b82175a52a34fbf9d6766f74e8616260e3da3a98fe78e79c89a3db4b658
+ 73264002a5d421abf8ead85f7b7f5375a836dd1b5a93e772119d3bb5615e3078
+ 045c77b131aa4dd4aac6a1084134edba635b1621a59954b764a1650e187afbe8
+ c653309e1ef1f7e1753bd5843a17f3b9ec2188da6f6e2235a88d76eaf8a752c1
+ b96f0eaab791d1955ebb43d2baa93ea3f3ed7e653bef513968108a34b39751f9
+ 267f79a5ec236b6e9611e4ea43b479a11ad2c013fc93090d4697ed998b388955
+ f44459b0038a308187a556b2a93fddc13a0fc94b2fa55935eff35438da81f066
+ 0b44f359bf429631fdb56e8902250d68758df2895ada4f052d1c138707e27283
+ afec86180147e53a9b34abe8f99918594c16eeb3d47c985d636ca5ecf506fd63
+ 4e8698addaad170776d5aa3b23d653f87d88c75595197f09057dbfeff294ca1c
+ f3a2ca5f9fd770ad75e19bd61d0f91f56438c133edeb1e399474e7080ab4a681
+ 52fc959e81bd444aac3df76f98062e5d6f6eae1f78faf044e7bbb5c220d0563c
+ 153408a56be9132a8fa0452f62754d95c5c5ed4667c08f38a31202db725bbd80
+ fc88beffcbc14486d1d528c4dab81d01b43056d4e0d6882d2d91820a811d1296
+ 4c0beeccbcfee6d03dbec5318a7d79d5487b8d3809b636324b0991eaac3f6694
+ 35fe8ec567d18b4108155dd994509a87ff4b68472e7e81c3734aae15deeeea33
+ 84fdbb188024a70ab144baca4e7126c370398e85ab9564f05efd457bc57d3dde
+ d093e4664484fecb80ad985c50c75891c94687278e3972f35c28bbfacb750bbf
+ b9dd59dd53efb4b9c8b9a0ef1f81a645f277922cfd4b81f8cc578c7eb33f7114
+ 0c04f0d0ff89736a099bdff36d0e05b446d5c6f51b32e4551f177bf355ea327f
+ 19d8adcadcd491e35acf31cb4cf649c3503f0b7870a72519083c8d6972f746c8
+ 951cc328212818e1afedd13a5db57a090c00a4bfa3ce5105090e19d756e784a0
+ 4151ec72b42b4ef5d75e877bb24701788887949f26ac3b5e445d445ae45a70d4
+ eff4f4dbb15eb3e3217b8fa37991137ae2614bc6e1e9389b4111a076dd898032
+ eacc1f2b1c30dffc02443321327ef905d7504f626a4aead9fc4caa4611a1789d
+ db483307a1661dc805a65b9c7f5a6f39fa40b3a83a36dbb871fe24e6698e2493
+ 00bc398fc0c92b6a9c727f40042cb4deea3b79d00421ddcb01b9ba104bbc7048
+ 5cdd38e7d87aa8082349b0f45438db96759be1ac6e6367ebcc0fa305b82162ca
+ b1587ad5537f6cf5379c0cd0ae5577624f2442fbc51ee05b477c04a85c44001a
+ 86cdd4aa359508e66696b5d9dc26b510b0ce747a7037f2eb54f2d62fc7f67334
+ 965fd1a256f6a40bbf747b3ca9110d124a0978dc39ab7caf6bbd15cee29285f5
+ 2409e8ae3ac52ee2c4c02de29306de66224888ba29a5a9290be7dc4c60ad2cbb
+ 16479220dc5bba3000f1956d61ac5b354b183f1841a4d7dabc9d3dbb5806e94a
+ 37950ad436c80436fa1c8df97f5cdd612ebb750bdd79b413f6dd285823904907
+ 7dd96dea78d556b67f7e1be52aa47f594d1c4d393d20c3827a384b554ea9783b
+ 5332bf6be7153e2bf155f5a8427c1c7a3ca2ff1571045f2d6d7aea0d00d72db2
+ dcc11d878c9e260b1d2316c09f61caf18c72931ffffb9390c36de3b709f37e88
+ b2afbe0bcb19aba5efe4b10a70380775ad909a66138cd619bb04b457218f4bc7
+ 311ea243019b299c7aa699a785b15d0e7d4deef4fac6e69eda6a4f5261896418
+ 75c8189f582bcd5de3022ec1bd4bdd3e764b3d1a7d648f7b46d145436e721d15
+ 50a313d43b5e2cf7263735baae1290d5347f889b2f81e87ea80604aeeb2766a7
+ b9144a73db5c141e82c53cdf9e23620822bace4410c5d13041cd48f2a53ed029
+ 9c199e76fd572e17276ed57ab6bea180bebc4fb32d0bca0d5e5fe423f7c2f76f
+ 6d47b7700795e8dbe8a6cc29051b4724c9389b60e6a1c2fc60b1f3f87fa9cfb9
+ bd19413f101b79f45f5b228ea5ebf6d1d017729242d118394f208809de3b6495
+ 9fea949dede61a4ea8737b9c838568ec96ca2888b29d965373dfa907b17d0467
+ 5f9a3c5c6bb0dd615150dae82d9917ffb1416a0b120afad7b77c159db9590273
+ 1cafcc0c89b698a557a2b1da99ec349500d336494364d75482e70985d1498c40
+ 3dd4bf218f3a58a21ebeb9f107d5fd2ba5cec4f6f8be84389358966edaf42e18
+ d28f27636d0036c165d266db6c700cf9e60e890cf427c18c134e71d7428c8180
+ cf101f11685c0f71ee150dc482bf8c7a7deb7b509bbdb25258fda34749048ace
+ 7debc237de2d775899ca80076fb9a72fdfc13abc783705488cf16b2689f6445c
+ 46145645d04df6dc9eea9924dd5850dc7694c99d9737a676367a64c7c20e478b
+ 93a9f6da9a407f20d8be502690679a3c96a049eeb804b76bce28e8a3ac47ec5c
+ e7c1fe227f85749e8e5f3ae499a8d210044d0f464795e2f806cbccfc43c5a039
+ 5a599c06df7c5e4b6f9ee8605f23a2684cfbb3efbcd89e106bf5e8f53d567fe6
+ ca74114c337bad139cb8da730f2f48c6aa261e16fcab4949d31167d3d0214c6b
+ c28d01a91b6a381e6f26b2dc80cb99a54a5561d08ab78f2e3990eb84698f2005
+ 675ff914fe82f59b7bbd7490a5a1450e3ca8274eb595d21cb37c994127355119
+ d3bedffe88bab775b80bec3ad51ecce85d09836e3017eab06be1fe9d18d7bcec
+ 03848588c3ad44ec5429e1ac8b5092487ffad6c07e7050d614450613bcc242ec
+ d53b667b6d3ebd436f5248576b3271551628941ea1aa95ff3e5bb49678736c7b
+ c50c328415b22061dfdd2f0d30c5fa1238fec4a2e0dca88b9f651a8453e66ca6
+ c148c3999293052d97d3b9e41f93f8ee8e45a78a700fe2858fba0e8cbdef2498
+ 681c7bca0620bb2e474ee2f254dfed3ae5b58c020ff46f5d21d5919a5d264a5e
+ 3e47253173ce039a9b9df5cbfeb235851cef0158ec84b0ab99d337e6076f2b3c
+ 7de4cd3f4e3fc6bb777a18648ee75449b318f1573997a2851d184b30f5cfb74a
+ 6804e08e2ae58bafd2c5a945ea687c6dd92feb828e6aeb22388bac2c3349dd12
+ 8dd1799029014500348446a6cbdd4537c9821ee3116aa779c8c68516e293786f
+ 96dfae72bc176d2c4de6eed8f162138539aa448349dce37baaa57a302db7fe51
+ 1c7e46f3c9d61b446ffeec5bc73efa2928cf451176dc20adfff08bd037ae0193
+ b02ef92fa9c2eb35972f887e4be2995ee851965065a887f2cc6c652205dd875a
+ b8ef0e0eddf48a5182fc7d0e843e329f2b2cd915a4fb5534a32c9619f7a6a228
+ 3c8a75d83df3885b65e5e742af9270b7bb0a870c3bc3f86fe9f295e55967516e
+ 8feed23fb5715e6124e5ec9af7fd307487b8c1a1ad80970e67f97abc22e9ee58
+ e2031461874360e5079e28a38e4a071d85d21f35e7de9d4b745bb5bfa767ebcc
+ 1609a6b7440bbd2711848d89540ad1ced135244a792ae44a8f6ee602420bbb26
+ f764502276a73d7014ac6f0646bae1cef8101ce4785ec3339065c974dc178718
+ c67aadcf642bd1569441ec1ea35c0aeb29b041a032aa65d4c27ddb7f3db1e44a
+ addf766bd14a1af3df9479807a3a8e822be773820c37e096939260877dc3e649
+ be8584bf3949b1cc8ea6d9ae945bbd803a7bc26cc56ae2a5cd9bc73f0fbdbe5d
+ 8326e5bf8eac16078ac185e465aa53b524a57f4f05d3321d72f8ba2f83af7280
+ b6cb2ba47a5e629aa7bc8cd0ab42cde6147e515ca93a07d12e6b157909379d63
+ 683178c642d772c63adb6cd7cabed861d63faf07d36f424b7599eeb4baac0600
+ 4ccdfe7fa07e38127a0b24e6423fe8a7a907eb19b291ed22ecda2e7c6caac444
+ 6763ee3c833fd93e1a4edd205c61c4c11967974b67e0e86ef8b6efe718d6f90d
+ 17987273ad10ab462149889328428863f80f91e29e27ff7a62af10ab4ba791c6
+ c8f5473743a197071ad99ad3da74cff6605b45b2b43caa37ddb64f56de5152e0
+ 85024177594d87b290ff12e1337f43d7a2a2ed7d0f58ae7edfad72afd59340d3
+ 6daa392c75bbfb9c74c36ada95b9c3db511f3267b1331960d6922a2f99d8d160
+ 5b4bf10731e5a25555ef5e6ed070b3794edae09813d40b3984b0b39ec84e16a1
+ 69d9423ca8adf67d1bf377fdaf4dac29a6ffa9ca97e370b1ac70538406eb17ee
+ 83cf198e2ec114dbc91750ea9627fb7ed68e68e5cca797879285647145e6b548
+ 44dfc660d66ab77550d0e45ad7507963f6bd526819ecbd18e755156c041efe83
+ 1689b4cc52acbdb4ac0f11f7f60375fa781f8a66810170ae0dbfe228e77d207b
+ 16cd1ba5fa28ba4433f7056bc01b816ab66f9fd75c1d0316cb6d1a566745ed27
+ e0d90ee53d8313a7a7bd8f303172fe49202c8fd2080f7aecb24d5d525828b97c
+ b1db5a4075081b9bc0a820759960e8a7871b3eb4edc8988fb77d8e95481700a3
+ 00b8cf4acd3db14e9b4709a073f81a21d967877981317f32ce1c0795bbc40c7c
+ f362392ed8576375cbe0f6110a96af80599e916225c4187d1b3331cb05bb846c
+ 3f2150b4689fc0ff88c3f70076689203056cd71952ceaf382a6950d7823ae878
+ 73f8755b70b3315895192cfe42bb4dec6663cdf09dfa898053b624722d9576e7
+ 900b430279cdc53752015d5f93d1eb0b5e1d0aaf25c0cb519279fd95c5e421df
+ f17755d5e19c91eb48e17cd79ae38cccaeb9c58c60899160d083d586a79cb288
+ 231e1168ae478102ede1785779eb047866eef4551a6cf2e04dd093cdd83f908a
+ 94c2ee1671ed696171dbe4186954c59c172011dfb9eeaea47531a55a32834e99
+ b0c07c2f565dfd196ac273236e621be3eb5b3293b5ba14b5cb421c5700d7115b
+ d56d063ad44ad1550ae34841445c234133282c8a794a51ad248801aa211a1ec7
+ 89ba6e42c5d8c1323ca68180540063a0d07f82911c7d09db5c3b44bdb44f2f1e
+ 26911d749e8a0c265379e5680d4f02c02ad8911b30e9d2f009ffbe75ef19f716
+ 449a29c005224e1828ded9c88dd644aff8afd6dba2b93b78f7ce11b2db259b0e
+ 24b5a4507db2023d84e241b6251a22e5adc380cef22dc62c985fe8e82cb788a3
+ c88f16031c478f59eed6c1aa75650661a7b4aad824647771c8c840f9a7b4a3b4
+ 26c27dd476215fd1368c5168cabbe011703ae825d25892fb9cb8584cd668e3f1
+ 25668aca8522fb748307de1610ff970c7dcfde7e02897152afc6a2ef736b8103
+ 93564785bd5c1b2786773e8347bf5b6f6ad0dc17d39dedc4010a82bee326be68
+ bc8a276623d4c806a80092fbba4d7a1d71b66a9e1d1699acab7c6054edf1702b
+ a6e6908560b67d642c883c533f51149b3a023bcfd5000ea306b5228198a1bc0a
+ 91d7583a1de98249b91d6ecc06946d4db1fd806a1ccc7355885c35223903aa71
+ 4eced6bdc3e5bed447b2b627a0bc94c8fdd23b316da99a241f89a1b50f4d5709
+ bceb4b1583b04ca8093bbb8ed59c419bcc6182df29c1796acade5108b894db9d
+ 604cd630f581244925db84ee3159fc8cd694e2e591f996d5506a18fb1d806073
+ aca56e0ac8d886f5988ba38d925576852cdfdace2ea2be48ce761bd8f27ae6ce
+ 2431b20e6492b37b8f2882a6b826c1f8469a84552f9eba4ff3fb2f4353faa715
+ 59ffcab5d45bd267a6f8768bed14581330ed92bbcba134dc2b7f4a7a87a1ec29
+ f5b27a1c1da467c77fa391aadae2fce11802c5985742fd3ee6012c360e6119b3
+ 0dc44a8e2b51ea41bf0c166acd10d3a3ffe5ae4c23925fda1dffc524f1e62557
+ 93e16d2b5d68d1d5885ebaaac9b04c1f4e1503bb4fa5d122f12963ca77ce74d2
+ 7f81bf73f6ca2ca8936cf248d442fe26af0cdc14a99d7e96f312e5da1b4a893f
+ 78484ba909372e3331a2610761cdd7e94ffc74f95ed7d45f6642cda7443a3b0a
+ 7e24888002c9a31d97267791e32725feaa6b36c4d29bada7c71a57e9bb47714f
+ dfb01c13c72171ff02a8f90fd0aa2468a8a4f79a8cda300c92ab52d813c3da87
+ 245938bf963cad6a943d34c24325140a6ac6b49e56c36ec54db6553e0c2fca5e
+ 7115f42e26beab8da6613d0845a62b234e95e5cf5a381779eaaa186cd15ed415
+ c216e6b252dc44ffae1a8e2216ac3009b7cb2e563d8b8b82ec656df099af2e69
+ 6a3bc4eafb48c048984fbec0a342dc4ece0f16f6223c8a72505da1475f1db0da
+ ac2d4a17370549787af64a277ebad1be64be205ee4615b6b92be4e914a2b481c
+ 1c76d19f585e4c40cf4c8c399c1125ae057e8f759d835b99cbcef0ca651fe16c
+ d72ad2bf1bc86b9c3801b2b1de36dc0f500f5a41742e4e75bc4355a53f9a7dd2
+ 43c253df31758eea3051c4998ee23f7f2a071aeca71f707965cb01c9afb71686
+ b0632fb5ca93ff06f8bc8ea1702b22b3648f8ad0d1247370c0bd03790270deed
+ b850379ec26c599aee97d9eb4792ed9d1973db80040a368a03d780c3c5618e0e
+ 69e88e7203f5add6b964d26f33ce4a6c459baee634d03b5ab316ada245b6949b
+ 57db99ca41e34e26604d2181c6260c60eed49bfa72ff54105090e785275ce8cf
+ c48329c09a8771e40ae8d85d69cf60c58b98784e5c075c73764a1c0c85a57b05
+ 473a67dece4156922f32b80ad4e6dc3856fb2ff0eba54b7bbf4604af357ff39b
+ 2aa05aaf345714989e4afed0eb5d9ac4caf349890c6e333613952cddbe78c8ba
+ 8724b3af63a8c6a79ba9ebc7646020b2266bb9882bc15fa7a47e9e078c8d5e14
+ d5ce13ffb882864d683de4c0b115c7a0eb3575cdacb38f0705bd8a186e522a58
+ 3f03c66e388e6602af2ce3ffd35e666d4ad7c4961903a7a52d877fadae4959f7
+ d58ec401000a4a74195a4fdcab28970f8a514cf0cb22bd5d9e3ed42d3fc8ce9f
+ c36f04a1a374a8bb653db869aa7abb58650d8c1dcc3467a901b30bb92064ee09
+ 407de35795f2b78d453a341dd639e6afc7206e628b0f1ca92a0bd86353595c22
+ c22f63063dae69790fe376be118b98cea837ea7d917af615f2142631d52bae06
+ 8ea09ead09b20d7dd1fc08375c88825a2e5c249b4b5a108dfefdb10dac7111d7
+ 3b629e550a850dcf8c6cc9c874cf9637b3f88f03d746596dbf7a144b34f4eb2f
+ 510b5516b3d9ee9ea125305c788ef6158026ebd3084b8376458edd76120305d5
+ 269dc064c096dad111ab870605edd702f09a7e5d5e43b4ad20b6ea3b44b5fb69
+ 758d1707e4812414b8dda52b9a176fda10336b00853a30d3573b226cfca49a0d
+ 8c24d1080b96b4ad3e4c231894a098923cf77c20ac4350c3fb922c621ca2b83c
+ 4430a34d5682447dd851ad71a4fb6c56b0e4141767091a7352b2e112490b4b18
+ 18f52dc7b05347312dba368ea7cefbff428e47c8dd3d7f3046379d917718a7c5
+ f00472e9e04c74603fb507854f997699e1bbf1c280884953579e4f55a2c830d6
+ c96ec58f2f94c7ad35364d9e3fed7c3fa5156bf917aefc59401b07132d5deab2
+ 47e2614a9e3974fa60451876f82eeb5ed78de40b64289b6e4e0babf77a7e9de7
+ 00dfe41fdff61754420a025a03db663827a5828de76a9db03766e77fef25b345
+ a274cda607dda1784e2627120456ebfb0625f321ab1d045ded074b72085e55ea
+ a8ed156a8190edbcd9308b36011f12fd0cc75a8702673e7faff07c180d45a5da
+ 79120b5595dd1b90e38939cc1d479fd86be8d65323afae30d2bc340bd05e86c7
+ 4436a987abe06b4a4aeb1acc5b8b99863c4a0f21c7cb2f4820e5e469b59db48b
+ 7403296e658501325cf6d7ba375b8306a1c51b8a74f783fd25036ba8f70ee180
+ ac09e9a52b75fb15d8ae0dbfb49f73e42e299b1672ae4fe51e4f179b94728bef
+ fc965a6081fbb09fd3daadaf10bf9e6726e8812069fa05bd27dedeca41116555
+ 4b9627eb8a68e8ec858d91e574fba1099ecf0c545c2b89b68bd95082abf06403
+ 601fdbfaac0dee3e87be016f47b9fc73178bb16fbbbd69863f100a36dce07acd
+ 8bac65d6d1bebcda36b0cdee3f38df977e18db0102f54ebf1334effd454e42b7
+ cb51472bbb9a0f751b40697999f3194c2aff0ba1486fa623039ca6b84110a37c
+ 046ed0181e111761f5dae266900d1dd4279183d70396ce04a1e3830d666cd91b
+ 4c6f3e860baad7fe0dd24b5d988a7bbf5526429eafe089f9002188a12ff08adf
+ 30ce93012c40a9002b5845a223ae41f921706af987d83c54e8c784b65f935283
+ 1e0633f179ccb552740e20e9cc5b2c691e4f33ade7a99683cf32391db7a4b766
+ 52265ec917f900d2431cc98469dfa4bf408845ad40e751f68a3c419da89b2d83
+ 96550ed3a19974fe8cb0b879105c3bfa2f19a48758281c61481bbe107e0c61bc
+ 9c87345c7d6af0810cfad075ec3dcd84e7d818a95886042e0ade56d1ab33791f
+ 868041c789adcf1cea24a51d0283d78009c6b29441e4118450806982048967a5
+ a9d670e42de5426171b37ca626519c75d820b3e95b33ef37f6e0e29b0c86e18e
+ e9e8cd286c26de5284179f77ed5d5f40afb7302bea7a245100b82e73ba0f9b7e
+ cf51297c0b22ce9d408c55f116a9221ab78765413f0c8f40d1da0b4f39bba762
+ 4fd8e34cf401d59710120a364b3278b47f04ceec42d83d2c35995727a10fdb2f
+ 616bee249fe3a91d494142032f707c15d1504ad486d776560452be2b9f7f2c44
+ b5d8da39e71edede02c1e6750d82657eff8b9efa7fbcad2c6dc9806ba4a0e2d2
+ 1976891780fd7b4b3c4c3cb643d123c65e95db3925218cceac697fe2578a6db1
+ 2566fbf49991f7916c3df6f000658fa9bf278764d2f59f7c5003e5bebab3a14b
+ 0d1ee998015d263e5cb94e11b799e7a948c664f842215dc179723ef0e7ecb400
+ cd6ba38c1f8dbe3cd3e7133d45dbe59449918cdfe8dab80addf18571e116f90c
+ dea72aaafb4d15bd7ca2cdce2024c774da5d4951db1b53d7a77c022a3eebeb90
+ fd36ecaba0916f51beb4a6d91b3d6b9314410d454f50c34e90dd55337d22b8cf
+ 4b5c1563ebe2f38cff488be43d13d29e631a750e02c4eff6f61d15361e6c2240
+ e9a668b0a420477d5736d44bcf0cc0f4d8e4079e112925f574a71f7b5a7e4b86
+ 1ec76778c460e0c50e101abfb1e712aead0b394b826fc240d108a9517994b3d5
+ 73c899e55f3ae0ce7e2b21753e0b53ffaf6c75961d7cb18ee388afb85a3222a0
+ 8f51b8d3dd02e768bea7cfd178fd9d8a314776914e4aba59ab80abe1fd2aff88
+ 1665c922692eb66fe986f5ff197ee22a110b2a082ce2e23506e885091fb020f0
+ 1308539f5abdfa1bc0766e68b281470830123b47c9518f6df4e9b5f8a0ab4044
+ a68ae3f5cb7e31095f442bd3ad194b5d60759067aa3f0520707d500eab802a9e
+ fcfe7887d915eac893761dd58fd9516fde9c3214f38c291bc6d30880c4515c76
+ bac58ffaf52157aaed67d8708f7e89bd71555965b4571adc8dd5892c9a554db7
+ f9827892de6117ada0ba0a57be8eb1596d5ab04b64105b8fb1d8c25bba41e5ea
+ 2448d9c2d9db2774c25570cf74453ecb99bc2f1ff4ad4da7a15d588e3e333724
+ a1a3c7bcd000ce256db79fd5966ab2b758fbc42e536e08bf4ec16191ffe8dc95
+ ad79c242e4d99f873aebacb2942c91557789044581c9c2f5e5d13f7635c388f8
+ 91e277f81e618e4b8bb230d4ec77cd8246613d71fc6dfcc9adf0a78e9871e699
+ c9a4dba795493533f4931b7f57eaf6f87cb90a82fe45223294a3558b102d98a6
+ 9adf267e4b09505111b995f42a4a43e822eb95be3347310cb0691ff101ecf97b
+ 4eb383cc67c75b23f7992066739314a2d4cd59d1edab397896fd4203fc210c37
+ 6546865936365b62c9cb13cb2f93aec209a5eebe76f8c147b893329d48e3e399
+ 37ea94539de2076dda32e8d13c11ecbc4c06e86cfeaac0c547a7bdf8b544a047
+ 64be122d291e4bdfc8ef141c9ab8fdd9cfbfece11fb9ab06620edb438f7d159e
+ 427d4388abe42f0ee20af631867abe957974db988c083607aa2379c2137841ac
+ 9a9f5ce8572e3a12ab286045e71cefbcd8208fe0191e5ac7569aede7e0ddf881
+ cee7fabb991be0fe3238c0155e9abddb6a56408ef3c4a77f6c6fc0ca687c67a4
+ ec5cc4a82a1b5fe65fdbeba4543e204c64a4dfd8464cb4b546a64c6c444415db
+ 10b0c7b22336551645099ac01d57afb7e171edaab16bf8fefc2d3ab4b1602435
+ 32a09d0af64ebf5d84d07e2f45d273004f900da02be210f6f01857a9cf544747
+ dace2355d91e7ac3f8c64a91a5dcbfdae85311777ce3e1bc59204154e5a19867
+ bdc71884832cfc1b74d44ea9d885106426da6e50e5c7a6f9b8870b6ef00b77d6
+ c12965ce266e69094ddc8e71a96e105ce49667d7725923d8a66cb3796f963706
+ 3123a3641d7d35cbcac6dba37441b4c871c1e6f8503dd4b17d9894d1dcb36738
+ 9d07040515f054d5201e65a508141f9c94154c3939149c5af954aa3db34fbd2b
+ 885e9f58edfb08708205356cc0ddd0511e0dabbef2d1c48ed0fa665664d8f731
+ 74ad47341d2eb350cb68a81a04198451eda5d4208552bcb0c25f12a4f8a94fb8
+ b96c92c745cbbae6741f8485b4dd21811a293727facdf399bf6975b057bb54db
+ 78056955bd2b965dccd45668306a54cac78c9ab167598de2e70a28531579c130
+ 74cf897dd5696717064d5fe7baec73bbe0e9a7746a0517cbe923939f8cb5c43f
+ f3e0972516047d9b3cc98f119a9a7740816c2ad2dd595455f0b4bbd87b029a82
+ a6fa6c728ff33524c3ef2660ce1344f0ae12d828eb947dd12faf26be34289ac9
+ 4ed7f0f0d358901d7b49548c73269cf11de3791201fd76594d62c218ba838ab1
+ 2a6b7987e58ca8fcca31a9a87876347c3dea6dd8fffcfdafd9c296a53aaa5c03
+ 865813e41bd245897fe3b1552a49efc1bc2ad759fce5021f7a57dda2abb1caad
+ 907a8790310b7bceaa8d9e2fe42c4a9920409ad02c52f0773fb765f32742e6c0
+ d29bc361b9b006a8fa81401f255fe3a864f0b3419cc6c5e3200e9b2c8e3d7148
+ dda841796f5a20b488ba0ea052a5731d1ed356d1e9f4bd5fd7df2bebeb73e8a1
+ 0ce63597dba3575b314979f1043c64f149eed1997220d3b25ee7931c50ac9ba6
+ 83cfc0f8aba6e41a14c96dd665e8c78c6ab047cf966bf497b09f633b9780adbf
+ 6640831a52d94755950759b10e76c83db1b25364c353f7964a2b7a97a1b98c4c
+ eee5550ad445de524406baece1ccfb951a748f02588f0da51beaa2ebd4311885
+ f6c11dbfad1fc03da1fba3f4b37ac63085078579ff5a930b94d470e37cfa1466
+ a5a20c1db424e94dc12ae4431ac8dd7e59514eed8fefa893a0a4f872a9b17feb
+ f2752954121ee5b64290328c604eb79ebefc3134da7a3288410b5d21b4a1b876
+ 124d3076d8f9a3289a1380564244fe3d31548a3ac12cdfd4a62ae816891dfd89
+ 65ff9729571f89e1a99dd9ee0b051b4fcaee03bc376efe273abfdfa32ae183ed
+ e159302fbb222d209923d141553e0c3b2c61c8703262420ef094a8c263005e07
+ 441ae6d8f877c801802440f3fdc08884d759bb058ca028b01122c1b6867e8b14
+ c9278810bb495e2af028ba6ef52f9cebc35d2b8deb1634964e542e3c501bd2d4
+ dff2b995fff9a2158c326b6cd5cf98a3608b75ea5d6cea632611ed42c4140bc6
+ 04d130f6235f3c2641cd3ad1fb9c0d999408eed1c13f2456249f289aa8bcd244
+ c0bc960665c1585a48c559176d2b97c18ce44b670007ca2f915d2585c68d655a
+ 8c62b2d336aa44b09a36d0e7acd60858bbcf6972f09bbe1311159d452fca3876
+ 1e1b27ebceba35d249015c7f04191f69000ccbeede8353de56afe6cd2be51e97
+ 918907809b09d8707d210fcf6882487036d4e803b1ed877d8945aab0bd81260a
+ b34c8be6f753ed32045279bdde839b5834c814fd69c9111f1be690a395160826
+ cdc0ba7359036787d4ebe89fdf86066c099c41b3034bd2255a3fd9b88c1528fb
+ c59a10ab453b24851e5354b5205dde5c43b6eb665d3f3670824df78bcb087a2e
+ 69c56ec4ca8c20237791e73a73cc6a34a5e94c3cb0bd2f65e8f9a6d683ac8eef
+ 8fac9f3311768b2c9a87308b3185ea9fa98c5a5ff08564dc4a8887d00ab27933
+ 7529b40a1e4310e421e3c5d2cdfa6ddc878e1528b5d44f4f6f0676d8348c80f3
+ e2708bae07bd0419804c93c3c65b789322a1b4662211facedcbfb151770e6420
+ a208ebadbb7bdb3631d3422df41732300fbb92a178f161481aac7f2ef659cfb7
+ 982e78ee66dab92b6d90498f56f0a2cb9d08de2ba50d72cfad4ffa1aa5b5a2cb
+ 8ff17e144683b61361bd85f5600fbf2f7e2f4675913d1305dee32f3f5e00ce5d
+ 274e4ea037018e65ff2da032d4bc6586afb577608f02d077456db73dc7885832
+ 017c755718ede53ce3edfd1f82efbebbe6fc0ae0232be60ed98c566eb52dc2f9
+ 007b53fcf39272a6bb14fafdf6046ee7d13a25c01c3cbceb258f15a91919fb35
+ a29d012cf59d015f72175ea1bcf365d46a98b89eecb7d6dfc6aafd0989f731a4
+ 360d1db28efbdb50aa5868139c4379c57d6325959f61d0c1e6b9b648451f1adb
+ ec87cc8399b9e456b20affcdd9ba8e6cfde4e7d382e90026f0266e9da41dbf5a
+ c59d02fdf31064c41c20b49da7fd1f3a64b3cfa4613054709dd798355a2ccf0c
+ 55dbe9cdd817ffef3d0cea077107391970a50246ae63e231c5a7a7b0b1a4198e
+ 40f4aa8d3682ed819badf7f02c15738467821d70b6c4c1ef4316f8a3852e7095
+ 663591ea9d7f8bfd76866f5862b5682a430e68a057638dbfc8b9ed77e74b3ec1
+ 5caf2206423eba10099cdfba84c1b7450c62f8b57e6e0db3f35a43fff0bef5ea
+ 1217ac9dffa3552940742205d9196b6b9949e9c77b750159019c132b6183a7ec
+ cefa9759f26273205ec896ea4cc9bfed5286918e9b88ed6cb47b869d6db95256
+ 55895c95c2419b8623a4346cbf81f37cf07a0e18ee385851dd1c365d59361c5e
+ f18f9085b693ba2e61b7441307721b2b534db66f1f1d183db172ebfd0fcdc158
+ 5e477a1b3e984675023a764c20c939ae337b679247e89ae00b383f8147fdd48c
+ 413ffe414177e1f370a2a53c685f4ddf1df6cf477958d3049142da3066ac37b6
+ 9e4f0a9ee6fa9f162abfeee406f26274cb83e44d9e1809de21543e0ac2d152bd
+ 679f7104872e924ba395f00c7fc223c37925517c76d3574c8f80e5dff8a6566c
+ 24c2f906dc766cdc6917e488df6e6ded216bb26031f7c96b967e2b7bd732096b
+ 96c3810e3e2eb65d9d0c40cddd0861dd2120ee73eecef82f596187ff805bc762
+ 7a9b4eade87a1bd865b15d6bdde0755bf22a018605a160f527955cae09020e29
+ f109455466c7c0f2b57ae926084c07c7219937b8a15cd474892d4dd116352056
+ f4bf5fe6a6abd173af874ad57772a38c799ec87b3add97afaf24776dddcde648
+ 24c04e44737ed5bd4fc458fce3e1e4a12eafce458b3da21bdc946a88482b8714
+ bdc40a5ea9d0ed65ccb8d6a8318d4d30a6967e1878329baaf15d5d3c2ae2d1f8
+ 509c67bfbac93b924e49f72d767f974ba6f5804bf8f2e5dee5556ab8f347a91c
+ d88ca1216d432c0b3fd838218a09d6963babca01d2873ac63dbc402228ceb17a
+ 792b8a6ddb86e70651d8f07d621261098b90a84a95f1823eaf4dcde7bac2e417
+ e82ca7fd061f42e3d9a61bbf46c29a835a1d4a564166d9855a7a72d84e0db36b
+ 828b00e6b095a8d45e21c0a6da98d714aa2dbe1ded2b90aaed074c7cccf6bd91
+ 25b54fb7784373574df1eab2f80228836fc77936a6d2741c4db4e59e00fb9b67
+ a8dde0e71df22bd9f6feef7d90fc0226aebefb296163451c261741e56357acf1
+ 7e65b52a0fcbaa719ae5e15ead5fb38c5f4e94cd978c1425dd4a769219cba03f
+ 49ab9631d6579b09f605f5c0844f30ffaad57931a43878ef383f5c555e017fc2
+ 8ce0f320ff91e28af8c706353c5924f7671b1e553bd49af070c64a21fe62c51b
+ c03751b46fc9d819954ccc3ce9a84c8fffbc671a76fa44bdd567950a8c51d517
+ 837bc772fe0edbf57f49eb9a72621029a1511437cbd22b5f89caf758039b096e
+ afb25bd44355b7e3239f9fcfd1627ab69cfca8143770b65d76a394d11f722bcd
+ 0400d85399d10739deb606aea213346ec1fea38e223260124d2139a1051411a7
+ 180fd2c5ce3275685d190d874e0f8cfc2fae3e470b85cc00ca8b80b006a5e51b
+ 2624f5c430fe3b938ba06a5c569c645202a899bea3e26fde3532c364189d7dce
+ 884442cbd7d8345b47ecb977af92181c3100c13d8cef3e2650909a2177ed9b1b
+ cbc911e8b698eb788116f332de5bf82390159ea37dbc47c71ff5b2a4ac2df810
+ cc76742bd4f966e6028a1fb7340be326026c0eadfc25cd0a8942f3770e543933
+ 99140ed3d583d8d62b875d5453d1c2643348e3590eec455a4313365821436ab8
+ 90b6e91670d58ea68c2d61a3a40760f3942b360202c279e2f2ce36dc1b416765
+ f44824f7c7d97bf03455c7aa60fad754b5e9d435a50d84ce875d938e40cfdd6d
+ 915cffee210a0e2a2ba14b32cbd86ec1a2c6a54792706e63b1c23721afe49a0b
+ cd34853c3140138c166e94e3d5cd6f6544779e588087259787a2de329c6f1017
+ 1eff049e14c5c144563cb0ba502b5507d1d7608bcd78f3404203e80b7f268cce
+ d961edf732ee964fbbe94698bf13c82796336b6edfc0aa6d77e63c5c14886f4a
+ f09ee90c614fab94c292762b9b48f526daf15f0d79605ae2f9e61b562c444bf9
+ eca6cfea306b69f851c864abe511bd11409c79fdfd7e9b44d71f5df86bf94156
+ c23940d06a944360ff7fa755b0974ad2dd52b8b4185163e221269d2d674d9770
+ 0223d26f763bd5bd97740d43620682e06762f619e98f215551e7528bb7275a4f
+ 60cf719a3fde84ce7df6a2026940f127dd83049fd2057fe22808c3ec9190bd50
+ 303929d356dc515b543878c8fcb32c1171ae1b9e24af472acc8020f60506f526
+ c949b44ba4f5b19597434065ffb69a1b9a8ee386181a0bc39902ac9bcc5b9c5a
+ 462bdfade36b77011cf0acc35a2c16c0396750cf72425ea179989d5337befb0b
+ 6b763d031c636cf899675c4a6873e3687fca7fab8c773373607aa0537fd513d4
+ b84dacc2233c5399661ca2e8ad78203c039c74d12c26323b14a369b7b86e5ee6
+ f176712a826ef6c03390cd2f2c6771d3eba54f87011bab0a89e98ea12d17d697
+ 49358478c27df81f1d026e2d0690a76996521b42e2aeb4614030047e270f65a7
+ 7da5482d410a640bbf66fffa89698f3546f055045cfac45d1046eae9a01e0471
+ 433fc07267175b5d717f27da51f8c07b14322f7242c58f67a95bdd79d204cc02
+ 574620295454303ced152c61e1ac979d73c20d418f96874e71807bcd2aa5b228
+ 9222b8921a8e2ab629e0caecf77d21fee0d4cdf397623fb40fc4c1b776655e7f
+ 8fa91410c9af46a5de0882dcc450da2552b498c86340e6f07fb85c959c8441d3
+ 6f89737a223d1bfbfae7e4ab6e596e9a4c50e830b051a5866cebbcd2a829a289
+ 09ffdf79ce88861ac597dcb0ca1240ebf2c566d6f9e5f6b280cebc6e9046ba33
+ 5c6efba81616118c870698b653d4b55ae5bbf3465c30f58b0c9732d969f1a809
+ ce1511583489fc4ed3d77172c1e3e7a6883d304f05cfc776c87b4bdc368908ff
+ f42a7807135cf7e78a3ac7eb7388f27c98542fc2afd2119970bf53f62637b0a0
+ 20746d9e05ff47da4412b0e22f0973300c5befbb610ab00b4e1ee142c5b47744
+ cbae268782e5505471ad6fb772253a8d4d366559d94846851f6d5361d8fe9d6e
+ 5d53a11f8fb3190b2e472cb4aaf5526f7f21b1648ff0c733be01f6276e6c5df9
+ fd61f90004bda8dccd45818b191bba072469ef4c95c21eac514c8d8a647599cd
+ 6be5eb9fa95ad96e3a58604fbbf423475b9832a48f2170ac14642c6a24c66c81
+ f90cf6567e408da4bfc7602a70b17d394cb6866582d7a9f3d2e2b9e3ac8cfed2
+ 3ad65922afbcc13033ff7f56c3cdcad4be53e8b292f14c0d03e31c2f747a48b8
+ 9ee8941411757906a1ad105f0703c1cbc1659f80a0e17f5a26237fb72bd45759
+ e6b0ad7d0e5a533181b8dc608ab94cbdec0c6b71e8e34a4ca1154094e3c021a3
+ bd58204353689c5b67ff6a3cb0a352d66267dfc81ed1a843a62eabdee8c3079f
+ 9a45631619392f1d88d1837f0c5906cb982d62cb20f4f9b629c6281e0947885e
+ aefc2fd8b53c1a92d1725203d96b8f558604d14b19fd1db063a6fab0dad6228f
+ ef84d1069e9f58ce31c9f8d808e913b58011bc7dee3a3d34dff699b1a5b0a086
+ 6439df2f226dbece6e124efb08e28f6730ede831cb1d71464c94bdf3d7976c4e
+ 2de1e0207e24c9f7715fc1c3ab4860bec72586382b455ac4c2bd55930ddac621
+ 93fb970eeebdf95efae740d27ffc92bd90ec522138c3af3964e3aa47e1712c11
+ b2f2f460ad47c9a40df54e53f4d36d3b0521df7dab0011372c6df08630625599
+ 0e86cacc45e56c303764e6b625a489ac2565adca992bb3dc3b76729af8558853
+ 2eef56136cba1dd74c425c03da11b5d010f1bf26dcdc8392a4a4914486c5cbbc
+ b13cd82ae36cbfe1ba759845506cdfe99b3f70915be14186da8ba2dc7db1ea3c
+ a6afb4e869913f2eb809ff2020bdc74865f6878056cf8e6d77cb2a608526afd0
+ e1ca0162bf94ca9fd6d5c28dbc392abfc3f4dad751c64b1bf81abf63e4f6fa09
+ f2e28f60234c2ad0c283f4bb1c43740b2c1209a6bb3610a8b297303920e92be1
+ 9dd76adfc1988a92464f0cd61186e9b458ec68de91c9de2ed8ac072be19cd586
+ 0f8db87f7524aaf7e30e99b6152b1cf5c4270694d86898e69f69ebf66162e8ed
+ 2c21eaa65c78992972bcab8f3b57e5632a86c420573a861835be58b4b4cd26d2
+ c02389a8668ca6e77703b57a8607c7dfff4d46f010b8b392f6849b965da7a208
+ d004f43181774099746f92c2be6915297b1c705908e5c19e4e0d3fa08af592ba
+ 9d774ecead1c8d4e0ceb48b6813e604d98dab1f21b3d0240edc4e1f06ab331cb
+ 73f33cf97681c7ec99dbb2e8704edd093b0635453de0eab91a9cf3266b17b568
+ 8d8cb7a914f18b281de5de5d287a20ca1c994da5a9d3b4d9357888c881e94823
+ 29cdd7fac090387947ed239fe7469953eceeff696dccb988770220539137ebfd
+ da1707dedf104f0be05bb0d1e8022f5016bc93f1a9d86d48623e2adc23d86b4d
+ bd2f770b32e3b6d9ea012ccbc9b1c80c7d9cd150ecda6ea11d6224c62a1db6ff
+ 3b59a602e57a2e4b1571f670ec92d6ab14dd9a267f6bb61d270f7d331c3df5dd
+ 008f5d43574554d8722bee3cf93606a997c4bfc85bb7ab6050e11566e94e6e08
+ ba224b16d1ef328438810c340a3a144b299f250e98bf66be0b213be185e4f6f4
+ b54eeef531dec72ebea2ec043e2cd910b6aa66169c0c6595d3fa47435579a469
+ a96a3f28cdf2de26a661cedad8f41fb4b858173ea8e50accf6903ba641738735
+ 2b438b04f449d1f307c4dd90c049d28ffe59ebea254605957a39ac47fef88f47
+ 19ef3c5ce194789b793a28828d8ee286ae482bb25f86301097891cf482e66bf2
+ c99537c94c0a430e303de6609921e1bb6f01c506aa31e040b30632bebc242275
+ 5a81aab14a998ea82d50288c2d68b4925c748241d9f467dff3657721184ff78d
+ 1a036eb2a2a764ab78905973b0d0fad1c0cbb2312bcf628666b721424582cdc7
+ b0e56a7a981c0ce445afde8ae4324f9da38da3920bba8f973a15807fd43a20b6
+ f4e3307d8a446cec728ac60dd4710c4735ad8c787f1cb89164fbfe0d156246ff
+ 504b3b6ab47e036c23057e3646c927bdcc24211e63b0aa2f2f05cf0a53eeecf3
+ 222727438cdedb6c5c9aa689ef026d70e03fe84ff90b4afc5915a505fbd2cdcf
+ 8a0964040990fb4426a860b47a0701b99bdd8a3cd961522d55acc45dc6656afe
+ 731cc9e047a20d8c195a3a0591ce5a2aa0ad59cc328f4c555a5605af508d1a39
+ 7cb0990e0f31490b55e4fdd0f3be39a711949f9c0b14717970676c09d07276fa
+ 09f9c0e6d2e344c6723616366292c92630d10813fa880f1b13bd59cfa28a6740
+ ffe56616f5695a7b483e7218d215394350f398eb8eadecd760739b528cf44315
+ aaeaaef70b2a8f143d4a49bfdc8de69368c25f1e0af1573574f5d321f88df61f
+ a9c4cca87b38f758b334ce8f7a86ea34fe951fb22a3214b6cbb208e11cdadaa6
+ 44706f73ff2ba56054268805c322c6bd88c40788103cccc3e0a278b76c25b8e2
+ 76df7110b63fe5d5529db16bc8a03f86382d94433de01b3f7c156cca7c3896fe
+ f29876ddf6bdf5698062fbc2fc98b39b54b13e87d43bd7241471f8a55131d596
+ dba8ca540d3f39ec9c3217af4f2f1abdf6626172a7f0d1d7f1809c09c388033d
+ 4cd5982d7e135defab157e004039b11d18c5d36f0ac80b46a012b1533e201b13
+ a4cf567cdc8ccb3bbe6f5f3a92f1862ddd0fb9d37e8afea9ad3cb3a5e3c9191c
+ 0d2fdcd029dba9f71f3c6d48388d6e30119909debf0adf27cbcbbe9f6b5c5483
+ 5708661f1219d0fff213e2abcb413f2f79bca191f3c8a9b86e8483bc6b27d312
+ da6dd2c91b8c244bd4873737ef934fae95881504007b661544306911b730736b
+ 26953a78ff8716744a56669802e272eec96404b0559d9b24b388747eda52c1f4
+ e1948e822c99fea8177280d5569a1840b1dcced6646f311ad60518ef6bb26df4
+ 83e3a18f2e10d7fe4ccbcf37dfcb4cf16c237f61f66b675a45ee23a6c640643c
+ 6bf59393c7f47baa19915fe98e488df72a9ec6bbd4ba2d4656ac6faaffc22e4d
+ 5d867f1127e1607726921fc1bbd52860e7070b36f5afeab38a255e62a4de780a
+ ba1ad25be7f12ec948f41cc861b65705c9df9ff4636ce5de7bcd46a7f982e6d3
+ 465c9a0438f12a68194fc331bf3c5353c89449291b4c622ed54007063a62aae9
+ 64f28ced00669c7c03477e8a8b39ad4a8e0ef7e514cfff239b5285adc7dbfb02
+ 30e0f68c08b38ae3961dd56625d501080419e927d51bcec393980e1fd5d197ce
+ a3266c1b002aadbb5a5dc2b0596bcb68a90b3e75ae6939bc42550a7091d78e1f
+ 32de33fdb6be95c2cf5a38617ed7a04ac3a86980dade722463ce73f2783870b9
+ 4506f4d362a7676d1243a616f1ce493304c47ee618f63b310756aea9fd582e13
+ 61d74a7c700b93210afa1bcdc9e9eb66fb13b784d78cab9150de3cae7dc79b76
+ 9b5733e2c9dba0f5d87a363624695a7cbaf4cc4f399ce0dd015cfbbe2a326d93
+ 106199ca8f6122659caff4f55668912cc2817e6f732b67ca954a0b789dc99a84
+ f64f6a4d91c6ef0531d88ad18d65b847f364c22f3e8f9c8caf139ad52b22299f
+ 444c429bd5b20f51e6e52f193d8c4b5f5966580c9699e14dd03e985c80094d64
+ 474da8c358460af6d3bf61e670a1bcdbacbc87ec628823a0299d39b2f07a4781
+ affeb6130b0bd84196b5445a1ef9cc05cb11fedcc00a196a787b1b2cacf78f1c
+ e9857d8050381f86e1cc5785a6de2d19d72d7e83acb0ce0bd8aa1d8231c48cc5
+ 97f8f67ce229710b9184c34eebbc267ee4e2b8714397c214cbee3d8ce6744a1a
+ 392a526c363e9950b58803f0b60ed9380cd93bcdfb5ac4149cef85f8b4e8a646
+ 989f751c18e5ee61d06f93d0a962f531011a9d20ca648b86463ea467e1d08540
+ 40e1654a81e67ac4f2e48ab19cefae796448fc575ef26d6f5fcc4d4c1611ed05
+ fd01a7e78dc44a4d37647e882a00a07e620040f67cb5690ef86be3a255b28572
+ eb4b065444ddeb860993ff6a49ec7ea58b226d0fe47f7672057f6e3d9b451b0d
+ 0844654cd3b3f96b25b50ac0b18a0a48f1562d1f7f81f4e43e24cb59dece5517
+ a6ca2f13c37ea13244a5e03887f0ba65b9f1b05c63f388a308a88e7f5f798c02
+ ae9e8ec13f4f8caeca9023da2c22e0147108c0ea578f18012c2ee290381ef1bb
+ c693cc17279477528f870967f4548b96de245b88f6bc8e52af5d1436ba9b2151
+ c29e73d23fe92706ce53ef4961e3ee05f03310026d42105e9d760f0df87c2ffd
+ f0b6929e375d697a2eaa119f7fecf4ed39ad66d593cf709b12a96825dd3df2a0
+ d3c2f462f74095ce214af2e555c191301fe0e3fc02211dd84c9c168e2ff0d06a
+ e59b5cdf5928e6db861828334ef94194831d2ec828a7c6ffd7e21454987f11d3
+ 9b5e162763a5b43d1981eb0e04b6ff0d973e3f78e5b4e6b3bc819e049a04ea02
+ 0f44d223d8bc5592fa4ccebff7cca84308dac7aebe3935b877294c556f76cc0b
+ e062f26c7ae3801e4baeef8daa3941256bd3971a0a0d8dae83e9b664ffee452b
+ 36fe206967d8061ad1f7a613c625d6d00bdd330b2bce18bd8b800bf91597dff6
+ 18b6456062b4c779f8be0774aab1617f71840e5aa25637ab5ee903a4d6031363
+ ecfb7309536ebacc0f022118ac95cc6c99ca45c6920dd381e7aeb4b36256a91a
+ 034a4ab9ab11683fcf9037881e1de2b450826d2162a761074415f54f75672885
+ 50639f7c2ecacc7740c78f58c6f3fb91bd76661cf6b658750412c4a8ac6606de
+ b1f3c5edb3e0dbc533e2c51793a17a32c15d428a936a84c6dc9884da77cb6ed0
+ b3970cdba6ff1bd5503a6d99dbe83cdd8979afec0a3abaa21da7a6d0f88270e0
+ 40f0cca8826a89a3ce00d603c6e4cad0ff4039d2e3efd4dd5e6ec334af49e110
+ 875e475a6c0e034ee71af354803186cc9221cc96951aca99f527c5e2c6cb6b2b
+ 96d3a207f856a72b2d3a091b56a1c30f13d27f9ab6e430d374fbc07a3ad1a0d8
+ ab5cbbdf2da885f57f9dff6fb0204dbfd575cf9a85aa30c868790a3f366f09ac
+ 1830836b97bee5437c7ea97dedeb52942fe135d6665d347e6a49c82c5d1ee773
+ b7eced0aa85cda340fc112f7c46a8baeace6cdc2f7f7dc3ec4ff827fea123e17
+ 1deebe069b7f8c9bf1d2f13f32fddbdb7d48aeac5b20126378a0870f3e35aaa4
+ 39d3884e1ad7a6e0ce08eb5bc3699f1d7cd226faee9aa82ba29ec5933b6ba25c
+ baf3ed8d8305857a88bd13000cc47eca59d049370dd79f60b4f1e8e90ad3f23c
+ 878e130de324361853ea8d24625ede378f6b0eff4079f6f06f7f5bfde56cb52a
+ 89dd928461ee92e7775da2b96e30d9afd751ef04a883a84382416cf0e5c67ab8
+ 8d7256c0ff8272dc2617bb4658750bc45280a495caa26ab68d019fdc24032f84
+ fd43dd40622bc9ca3757ecb7326254cf13c8581ae0eb94c477848cdf72563fc0
+ 543aa1b563c9b67c4d3638ca7442fbe93f17e8a9c7c14da2110090286c51df0f
+ 5162535b3543b21fec87a08167d71a567b247efcceb9a27b8b41984b019494a0
+ 095b479ccbaa69643e8b49d678c7b38de00de7cda40727f1dfdcc761ed2cfa09
+ 5a5243040fd849ed59a353e0b98583d53e743c9027abc07fcf7bc7c5a62f4391
+ dfbd248d28ad3d64f471bcac2be1e73b574f17a5ae95845f80bc201cb3a24442
+ fccf767df0a626ef4044c2feb9392927cd094fdbb1b4eeb6acdf925e836afaf9
+ 38a471d8bc09b5202818682c49f41669f7c961f2d10e9e8548fa354ecc63e503
+ 5c8d90de0e3bff84937cdd1f6490c1d5082af11b9d309bc780b01c8d3884759d
+ bb9688317e55c7ef78ccc37873fbe00336dc1a25e76929ac2f31d57bbf706b8b
+ 9961d150f1bfc7ea2a2ebaa495e28d26db77939f36801df283e0127a8b9521ff
+ c450c28d35f649d58959e67c3c78932feec54fdf72071b126bf2f4e68ab027c4
+ eece5960877403d8091121db773569a5d9f881a8e0fda79c7ab094996d5aabe0
+ 8e178be4c984135b5ecadfad2592f0047c3bde2c9d8b4beaecf15eca69a95f9d
+ 7d5354bb3902ca5e4e05fddaae7bb9503c214a40d0aba755a8ae4158761154f3
+ 7e6a58fe154135f40e5eae18f97563dc532d32932fac8dd9803cf7fdf6986127
+ aa78f4f1fd6e4d83a88958637f34235ea9702de18ad27decfcd9ad329f8ecaaa
+ d496c97e33311da36786e44da480b7b08d4496c0a122d1dca485c96b7e909c1e
+ 36aa8ed5e3c4783a2d8f868cf4ef2743428ad586ea33df08ccc7204416aa36d7
+ 0b38b9a0489a31c3ebd09dbf307acff66be202944fa5296afbf621b341d45206
+ cae347e8971c3cbe34022d23c95817f34acb52e3caf4fc389fa1e05371a5a918
+ 09ac5c78ade49dfd6688360e9ebc6ed94324fb4b48a0185710064f140ed8a476
+ 730990181e93a5ef368c1ab0f1365d89b1a58d03457eb09d9b1972bb2566fb03
+ 229b52f2ac8ecbb5edbac17d47d18951f5e0c2255d421897dd9738f2a4bd3580
+ 2e230beb81d2e13a7772d27c6747f8bd7d9063e0c2e7d2919a066986f27214e6
+ b5fe3aa6442244f80352a81e6ff11a5098e249931cc0ec95600d4a0b8aa812e3
+ e6ea522c79ff08ed8df198f33d1ea9da6266a5a2a0a77141c7ba533b1da6158f
+ 2cb0b431de2a8ce2e70fe19d9901bffc7dc3ed74d4e504ef06bf6d3a11e19034
+ 075cae57e6184e3286defec0b228bed03729d5e76e1ac7f385158cc758752524
+ e3deaf8e9829b2f32d2a27f76c78541585be7d1ea96f703d0cbb96d363fd525b
+ ec335f9cffb193cebe07d1bfe0e2cc0bbfd3b634f29c24d30b48e2afe977f067
+ 6b19e7920bd59f7a810b7f8e62d7077404ff564f44c1142814145c5eb899b31c
+ 45bbc9daf33202ecf41fbb8c048be0fe5a00a7ceed8a5ea49b4ba7135d140e9f
+ db98d1919b2552520934148837aa12830f1df0909ab2474e43a9b9e8e1c0a3a9
+ b80871a1a9be1381ef0989a8acf26cc73e8848d3014054fc97c39b8dda001b02
+ c04c1f726795028004132bd327a62f063a08d8f886cbfad24b7ee9142170be51
+ 94851a47056a928fc0d59fc39f0685141b72ae6555ab8531585dd33721c8ca43
+ 56b6338ed86fa13bba06705f4d2c0e34ae370b74dc64e14544859ca10c51ae23
+ 695b6fb1c9bb6b163e08f190e6a3e177603d4a21ea27f6a1992118b150a45c16
+ 8eb8864ab8c7bd92cf7783e644537aa4a7e47ced3ae64f560a8386ae47c78466
+ 03032f3e668ecd1bd6856405e115381049c2de2d2dda3555543561b73a5994c4
+ ba3d6bba92059f8a8f9332f96b66bea022c457fbdcd91fc7e63292989129f5f0
+ 22d47ccbd0b49f8efc3efd45a8c93f8bfac2bd799dcf701df3e27766239f6175
+ 4066d37446793c60f7d0c989be174557b049e35487ff8b1959b20aa8325ca2fd
+ 65cb5373ce22f4fa3cc5921d53f208d0c53521d2d2253816d27bab392c8d09d2
+ 6ed8d9f22a561b7c2b0af971c5c9bcb3d9257beae587f17c3161bf865a218f59
+ 04a171d547459611ec0b21f3e23f2e756ee2008f9880af17e413a63262e260f1
+ 4594691472b7832d06dd277328fc0fd9bb26432207a9e7ddf308fe94965eb6df
+ 32926b9275678f94bac2489d6ff4c590ca5c8c54e2e6326287b60c49ffd6c0e3
+ b49972f9879e93044d5285145d406a7b4acd27d4924dfea9f3926a135a41260f
+ 0f9b8d6337cebe0a8ab5c01c7de896766aed1b542eda892a7c21f5f8f527f988
+ 90ecbd9027da583eb6dd668c0bdda882a7dd9e9a96b3a2c2bbb9eec0bfbf1f63
+ 0af5598b626940084030c2c160e3faa44a0f982c29686a4c3234fcc789b9d0d2
+ 6a974eb33a9e1ef3e099e0f4bfd1f906092990c84284669eaa43bb7c5360fe92
+ 6f41eeee5bd494b10b5bd905d02c1c3d29739fd67369477ab9ddde86fd818069
+ d7720928f8a2f33b2f3b5ecaf3e6df25cdaef9d6a579f42b7d5c7c22287fcbfd
+ 517edfc3b751280b1ac35022dd4ce741432f165cb52b934c1470d5819076ddfa
+ ea87c314c13417c44ec1be3a375cdd8764889dd1772be127d18752028ab1cc7b
+ 33ab62198aa6164467f7a2ad1abfce5791333dbde6c580d7560bdc32fca172c1
+ f6f2694212c2b4b5686e984fc663a6822d9a31a38088816b035a1d8dccbd9b4b
+ 86a11db96c917e5ad3d726d2219ae0e1e559ae4ae8f58e5b4265018cc5cfb486
+ 2347c593e80764b9fb3a1a996328b1964ff22ba3d1bad489892faa151afe2ac9
+ 46ea9068c593d5c1a00e72537bac3672c80ed05000f454dd4e6c2f3165cbb074
+ 107642afe3aff0cb5c9cc72eb6a499008af4e5bf43bac34278d5e4fe5663f385
+ d3758710bbe52f1a1d23be21cc6ddc0f3e78c6a0d8a6733143d1b840118feac1
+ 680c63484d3d7d6b1c5bb146426032472a83cac6071a3234454d228c049d2058
+ 6bac170eb415e4ea093fac752a13f8965749bacea83218170e739bb9279e3fd7
+ 6beca247a378f6c64ff839f1f21421189c55257488099a20a7784429d97e67be
+ a2bac0ad26f978cb6a09feb7bfa22ddd1b05b153728bc16157cd93d0509bbe63
+ da03725ffa7c31078e0d78666248a90766307306ed68f3ea3845fd8feb502d74
+ a13e4cf852da180fc6a2b1c60a53c975e7941764c7a223675f90941622d575dd
+ 100a86b5f9550213f63ba5ff4bfde474f9cf473cbd66f8de48c66ffba434955f
+ 60a185c01485fca8439798e8a9172e8e75dc0405f731ddc5317ec89c09b10b03
+ b6244fca6f052a48ee8ce286caea7b0b4828806e245dbbaaab908999c1de7341
+ f474805f216af7879a49440fd70dd7734e410d86e843c89b5e87068e4d96859c
+ f0ff08878b6f894a468669f7787167a507e94f19d048d5b50bf2508559dd401e
+ 544c6d5062ae8a7e3177af877be29ee9c6bddb8b8cec438373ce43700308dfc8
+ 39f3329aaf79dec9b03462404eee2940f38301a98dcb3a368137da7717c8fb2a
+ 4eaa07b81506c01fb145289f3fb0344afd0c792872c7226807a9bb57e816198f
+ 3fbe8b14c3cd28891685fbb821bbcbb442b608417ce215f96d8b463641ed9e97
+ 51467384ca8916b86fad4e54b8452ef0ce62110fe1c9cc5ec664d07696bc0018
+ df0343130f19b4424a1d1ddb052564fb713f0c7c63f3ac6704707bf8eff5d606
+ d9d3ec208488030d43abfa818fe252d9b57f447d1432b78542fc9980a46832eb
+ ea3366eaad6b5e48b833c67c9edd4026e5a1060a5bc7467d0702235fb9c6dcee
+ ae26697ca4824b297472074d268a44dc6fccf70fcb1959693679e75ef3b4db2b
+ 2926a02867b9cece676e6c82ad8d33ea98c0bf9ad4a5b8e7ea50d107d24b765b
+ 1e6cc40ce11ad94674a23cfb2d77c8db30dc04f63e874cc1cfb9044ad8d98153
+ 3d395957a2011f063125c08f23e310736cefa8720d93130bc3c91c0b8748de6b
+ 0afe4d0590b45573994f8dc0e3e6912401936da36bc724e4f8b9c564f3e12ce1
+ 3f26e587a60cfc9a19911f04c4c5b578c077e2a78c4de692cc53a61d7031804e
+ c86114d478c75b517aea3b2cb3f43f4504fe1cab480175fdb719a23ebe3cdd0c
+ ffee9a5744f8c8408cbd6d2df6f3ba03579d62076f5e7b181a9920c75525353e
+ 13981f813c51397c2b84576f3db7b221a41b6d867bd7bef4831255ebcc17f154
+ 6ca4a5321bb939a1884e013269c5c2dd85e10e1e4c2fe5d3c435700fd4f9ccfa
+ 6183b5112781ea70c09530ed72d6df10b16cf85980a1fd1e8644f8b10da041f9
+ e70aa444f915697ba01e7c52abedc5fa5e4721afb0f8f7e74ad3d0eb03b50983
+ 3dba9d6fc85cb2ac10f87f0e3504aa0de6bc349cb2edfc6c2aa448feba7c3046
+ 128461c0027f997109f0fb3ee0c100c1bd5b9d05a83a50bec25545225f8f122a
+ 64c847e1fc06b61b8db63630a82b3b4903632220fde9c773f3712e23c8026ad8
+ 78804faceadb5a6546c95bae3bc8ccb3f0b0f6e1ac2d792bb7ea78bd4a201560
+ f3a82f978cfd02b270fa22620ecccd42939cf4b29ce8bc921186fbc15b7eced3
+ a92c6d7bf9d3c028ed44d94bba021ac06e889cf141ea0a4c42b730d52d942f89
+ 9a1c337cece8e32592bc654ba0fdd5e86b4447ea33eebb56e4c4fc2a9adc56e7
+ d86ddd1cdb6c172993c3ca923712233eff081721dfcc17054f1fbb4dcfbb9554
+ 45288232ea055543e24873607ad2345c387e1fef5d6223736950a0787bc789bc
+ 6016b2f9850540a04a807f2c6c55296135399fa595ca25e3f8cbe2ca72d89c70
+ 8a6070ae0cfd950394813a633e655ac643c3e56a3b865d6360d106738fa90f19
+ 6d2b35abb8a36c2effdf9a65278b0a885ecdf81fa38ae1a28f24aa046d103714
+ 511dff126aebbdb283464c49b5444ba404f7d21cd9770ced7f674c58d585f15a
+ 96123e1b1c909283949edcd214e3e63ac68261f1867093b9ecd079a644f1b9a8
+ 54672e99f74440a64be0d8d37a61cd7762fc1e628f6563ced57bccd86068db74
+ 83a7fc325103f769babff63043b4ada6dfe02d01e1c38eb8a1c626809c6b35bd
+ c1ea9a27cc8c739a9db78f8272c8cb887d9b5fe3f1381bcf0c52dc3b2eaeeeaa
+ 21e5b6ad515324ee692b0f7622d70415902e8c320d33db0da52b954fc9c73d2e
+ ff36ac2ea2d61f054626aa9c5b80816a2cb9eab69f6bb6193d445a0936e760d0
+ 04244c726d13c79204d398655889ed878be9b4e07adf1237b423ec7c16df2a86
+ 87a1a668f7b4887b45295b8c2faeebbdec549d1cbaea9b8c2241289906178359
+ bbc0d6de0f135976cf0513e7f37419e99801d3c6bde51b086116fb70a9046f00
+ b54ac6b319336522949ce1f3a122862c0091940ce90de5a36d723cb9d4684ca1
+ 2e827b5030403bc0715f1005bbb3d281d14ddbae8abc7b980ddf114d64928334
+ dffc1985e008f32e5ca8c7bf44ebce3009cb8da6b1f3d44b6eb808ae96254871
+ c5a7270e1878a9bc7f6203dc09a28f5db826fa6e2738fd40d0868ef93ac92c9b
+ 7d6e4742b746739c3a5311b5bab767e92afa47b1310da3983d5de02faa4ac290
+ 10af2d37f42d1aecc93e5c08a2c9e85c3682c75bd2e9a23d900443aed3e02ae4
+ 81fe3567613fddce1ac2a04d7fe0ada7d168aa247158813a49b0c471f4a85d43
+ b30029273b20678845ded45119eb7290d0b99d28fd7d6c28c4b0702be3dcf7d4
+ d0dadcb22b42d8e1543dfa4cd362e9953394c46ec7c13fa26547b48a54d7f04a
+ 895639619cba9c3d344a558e2d6932c68ead93d3672ee504bc410715926e8569
+ 86c1b89a99a1249127ff48d4912975535518c13654be95afbb9cf4f4bc8c2076
+ 9d7d0b331a6a5125ac953a7b7d519147e1ddf08d905e1bc14211f04b3e341756
+ 000e82d3ae4e89634e6da1b525baabdeab6d9ac4915fd8cb91d6a4c1ca959c96
+ 79e13b96df82046b567397f1448c19167ea1f6c4bc8db3c16ed3bfc1aaecc7c1
+ c315b0a96bb833055a412346d63abd366442a8915ecee5c71f8aec85945583e8
+ 8e1567ae9966f57a72e127a505ad6dc8ef6ec4ed69c25e7ccd986a43cc590d51
+ 6f4b0d5eb2df6eb3a8eaa72e61c6cc7a196919cb5520e7b80f8517babbf15210
+ 9a591889eb67c022ad3cd5e405da5afdc213f6f025a4ebb6e0e5dce3048a5722
+ 2edc0691ea5420110e047249243b4cb280d04941116aa7a8914b24869f4debac
+ e50dc73d065ddc71085852c42e3f8bb82c7d9b0806ad100ef8b1da3281032292
+ bdac5c686ca50957b2348a248af9c0e9c5c1cc2099c5a7a15473e47fe3bcc261
+ 1cd9dab99a9ad22e124626bd7bb7559db2519857081958de4df4f8e93b8a48c3
+ 668980b1f9dd8d627fb228c7c0015085ec565d82940bcff4dfd056dc2638ad5e
+ b14973bb65db5643c0ecd3e94b028f200d3a09c670bc02f1f3e655ceeedae707
+ 3c2aab9eebaea112e32bbb88692d9ea31b2a203b57f452fa3577047998f3fa17
+ 82672e4533b369b7cb94ff0d776874d044103f36513179c087b1b4b1b935e990
+ 421ed025ef139938dd0e03497909a86ff3f85dad4b4e047e225871df114d6492
+ 8e42ce9d3995a3d5cac856673f64108a3adfea10da4e16f0b2c9099316a81d33
+ dbc7ca0da02c559bcf367256e3077c2af5f4df35279baa00219d1d6e99ebfbe8
+ ac4a6912a20a3cbe2a5827e2cbfaa803d32699b1ddbe95eb049984b55214deed
+ f52dcf2f4c63c8ce2a6127819b34278c4cee46a7448ffb3569487d074d85e269
+ 710fe473cd3fa63e80c750088507a8a54d423e434bf3459301d6d3c3e6cdb9f1
+ 6ca015519af673690c8843c7d540bf2a183fdb49d14fedeb98e377d9b9dd43c3
+ 6cafa1b65484eafea092a0d9d4a0892b37e4d52008ef4438d3320207111ab0f1
+ fcf9c4575b822a7f11843aafb0e9362ab2d785728188b820332783a083ecaa5a
+ 9653e8622a2870ac4f79ba49d79e06524d568e85b4a61e4c593e610a0436eb91
+ 978bb0b98aece66013822d48851bc8f6c9b46833f33ad9d90ee3ccaec218595e
+ f40287a27dcfbc69875a58dfbf7a0656441cd16bedb7c4cdc5566514fe40ecf6
+ 4faa19efd8742351c43ef623515c405a53dbcf451c9931988f880a998c99e190
+ 8467157782747eaca5d8ddd5606be7a29665a44f91d1141902aec78d02ee3cdd
+ 9f7ea87ebbe05728db8e9ddc23806827ce2cd40a9cad5eeceac8d371a26db3a9
+ 8cf7d313573c8f0af004d9c253fdfb702ff7f9c142605941ad74b803a5c59af6
+ d282030968f10e5a77bba02709248a3f79115f14af9535eeb73150d68d53f319
+ af3eb2b180be229b127ee7363772d67d526a15b55ceaddb7b24d7f7bfbfe89b3
+ d16e6a85a0a5aa416281214c27b45bc4a6db1069e1c9e44b22ed0e7b495997e3
+ 63eb4c81a4793b73d2aad0c724efa490de374aefd4b3270ea73ad2fcf640279f
+ 726895ecf4716c8a4182bd65cea1ee3b54b447285e476f529245621c34916aab
+ a9e9d6cba696e85fa982b9e4cf7873294867ab8da10a4ce2868eebd7cc95dc23
+ 3f7fc4bb28216a03690ce71d244b131f069248a9b765be1d6b803ece9d7d2afe
+ 7cd82e47b2e35e65a67db5815c5584fbea10d7fbe821b84bdc77199898215d65
+ ea68ecc66b2945347b5138fbb721e557a14cfb0677ecb044b8a8968383e463dd
+ f27225a613ce686f879690c9658dc1fde07dd8a67cc166deeaff10c34c89d444
+ c1ca32f36b14da4bcff831fb2da2fa41db609a5e8015f74454d4a1a842cfb35e
+ a56b3c9c00ccd5bda165a6a6d547976a8870618839a4da804142aad903e1c1eb
+ d1b8b277f97916d2c09edaf62f8adbe58b398abdfe01fc99763559c5107ecfbf
+ 2fc685a851755c86cb2718aa9dc4dc8e891e275d71e097558969d732a9112f66
+ b692e7ba734a81bcb5dc219711e9f7b118eaef1c08a8caac8b14558c35ea0fab
+ a0c4ae03677d33067e38e4413bdb8f305cb2fd77144516ddb699865f2b905c4d
+ a7e336ed6f9d89f463f44696092e2de286bf80abe514e5a2ee1f6f8e014bcd09
+ 63cf2cbac4d464ef0599e90c431e456c17657a876ec2f68d63606a672da47615
+ a3f0cf32390e981ce83e75d071fb63c4abef37676da30086033e7b6546918d9b
+ 876865bf77108848f165616438ad8b1c8c00d7c76ed09fb79d6feb8f7b3153f2
+ a2a0736dafa1c59badbc32472fd0fac3e51a48ebaa0a8456573d52e7a0b52ba2
+ f8ddcb861ccb34436e9e64276e920f564c3312b2151f433536bcedd0802d7096
+ cc981f2a3bcb426ee0c212db794fe2c83220fc60b282166f7028ebab5e50efd7
+ 5ab5d9f81c97e35ec8de8ba1cf0387018c7bd90ef28f4fa359f50470af0e3fca
+ 10e73308666ee51a52ed948db24b7f753f92b9f61b1bb036af1e5e08f103b780
+ 656213f9e2110a4b60ae0842f84ee9976349305f58e0fc09ca9d75b5a13b1721
+ aad08a73e46a018c2e96538b085befbc57f3535ae1643116a42322d9669bc88c
+ b899dc63622970c41776dc8084fa78403dd8527f8a4ea672137590fffe86543c
+ 1c09e111d03e6d1c6d64190aabff987371cf59bedf9d352bfe3d093d411eaa13
+ 9cebfbbd3bdfd2f14363c2e2b7f2568d48065fac2edd2170e9690b1ba38cc373
+ f75a04dc08bbf676b1564dc98131c2f8101a5dae532ca5461b7d72f52391033e
+ ec2c0d853c7765db67e3262b528629d61ead4ca7e66dae258116d542b0f6b3dc
+ f1dcb49a521c443c762929e9945acb83ece1bd3b35da0704f81c64dcd9986a47
+ 0fe60bef64d9d4393172ccdd762a3e14aebb06b286b1c934a8a7b7aba22dcb83
+ aa18c7f6dc45b11beef335a72b34dd0e56893727a3a664af8204e331378fe8f5
+ dc2bd9ccc942da4c30047b6554793e9517ff591f8e23fa03160f2143a31adc60
+ 5abd76bc0c24e7c339ed103294a3b9ee2869b9d3e1eb8ba67e3a001d6f4b5cb3
+ 10aa54deb88156e42a619eb0f79b5ee87119e85a53d40872ba05d74b795649a8
+ cdf68064e08b35c26bbb9456877e33ff8fda6c2559ab9177b345c5b13129e610
+ 9f56ff6e11832ae668f0e578f2ac95a55e0293f8d4831d6ca21eb5bfb17f4940
+ b1970339cf136f5480806086d3d9d5e67d8e6f502883129ef7bcf94f45a147bf
+ c6918c589968f31199f0b9a4bb2a625f3cef815ca4aa17be0c4b0da0e2469a8d
+ f201cc5e07f42ddb3dd8e81747862f18c08f75f921287ef1ef79d38e751528a1
+ aea047e874768e8f5df3aa4206b65efaa2f6661c5a48a17fee31e2752e7eacbb
+ ba2ed31f1edd0d3e44eacf902cd8b7b8a977b21cde9d62f6a65d824d3dd5805f
+ a6c0f7d2621adef9b1fc12b2c76619c752357ed930174b5909099436a045a976
+ e6ec7e7d83142a3c2c2694e560294920eb9706d4054239859de0956054a259f9
+ b241fa4c0638a4c5bfb1bec7cd1187884139440e86d7358daef742a7786537f3
+ b0fa06d09830149b70ebaacacfdb867dbdb81bc1b3dcdb76bda3f176ad55d1f5
+ 8981a226d4df58ad768c7e0187f1a5a82c36cb0ac029227dfd7a092e9082657f
+ 516659bc9d64e4226cfe6500407f865c9ddcfc510fa81bbec82599e19d7a10fe
+ 2ca13f604b4508731a7b191d91a488c783d1f70326dc791bf5e3eab6698bed6e
+ da6cc88f884c9ca52b50e405ed318919835d94de70f6883d0d0cc01863c39519
+ 23b72afea44fe09baa33ef10b0fc4b2d76907a85454ca02235e9e24c3f3a7dd5
+ 16d03e4c58be075a46c9308cd8d722ae39aa29ff7068374cde0bac03092b2d3b
+ 54ea1fb5d0fdde30fb21a6d9f3ede69d0cab94078736004d2b76d1b59a3a6ff1
+ 302be376a435e19c5714489a89271c34a15eaf51beb34a6997ba21d2d85d6d61
+ 32715d121473146abb749a2009baddc9e9b980dac86b4aa64fd15b4db70a0568
+ 117353b9f5e905ef41ad37ba746f4a7b34f57f23c30e82005fb52c72855f4b15
+ 9d1847b37c320b511db6a7de1c4f83c8228be923d6bdedbf4ca752099c083e29
+ bcb09f1daec92cb2060097a3230574c3eafaf41cfa68721a67826af254c20d73
+ f03f304b329ec4dace4e9fa556bca180067989df01a4954d418f27ddd1d33cc4
+ e296c5ca3f4cc7a8c64ae128ff1f6ac21242afdf146a9ec395985f085d9549e9
+ 92211779028900e82ff34d428b2e19e7ce0c214309d7c4f302137433ab6917f9
+ 36fa5d0354c550efc111d357705ccbb25d8c85a1c1968f730b5d7d6ed9e32ab2
+ fda6acc809c2ed1231e0cd986053d8add062e1f2d3a152f018a72294e391395e
+ 05112229515ea729075ad018c87bfdd25fa95252b2561e1138158a56362a415a
+ a14628be8340dff0319e35d8d65075af2dafe76f0006eab63f8fc63c6dd4506a
+ fe8cf93aa68b60e92e814f1bf4f64491d548d7dc8b721c179b42de4eb1513379
+ 8b9e7f600700acce81dd999c36870192bc811a3ad4eec36ec12d9656a0902a3c
+ 4e7ef3257546e4c64535191eb55b9d31fbd7ba48f5c930d25ca6f23a29b2c411
+ c2f8372f1d1e35bd284e3810df1a8a87d61fed0b372af1d72f4194a76a836b24
+ a9beb0f44b92a99ffa30cce6a15be2aa9a078c980d657fa00ec46141f7c59d12
+ 23cfc04b1691ca95169a69f73b156a07e236dc02abf02c34dbc4833fe725ca60
+ 88dd3a0eccb6b41408008c6c61d5932523d861202e73f713b8439ce8d9fc690c
+ 7934144a5cb0db24abb7a5426a3979aca596226c07b6c40b084d69c738ea3d99
+ 16561e824a42fcfac8d8a9088f62146f1b2c91b910fffc0464766df20cad3791
+ 94c4e79c7ea3845aaa1ad0ad78984aa6508789dca5a5a1b2f315f676a01f8a61
+ 3d6018dd2f023b4b6643f9407b6499e49bf17a738276084a65542f258cf7ad2b
+ 7512f19141cc09d4b3ce04577567eec4805bf9006e5be43989b8ebd8d1d97505
+ a26f10caec5134a6909902a4db8b0a2d234bc172eee26818a6d17eb1b5176d91
+ 457d62ea4e2004d84256084bc74ed711251f42d075e0f8a8627722886c47cb23
+ c878c0f2090eae139038b3bfaf36997ac2e7c5402f08cef71ede83a9ce374fb3
+ b08b80d37b2e6ff03232473f9f33b01f00d70b435a38d8ac0ea651fc625b4d4e
+ 87313c6cdfb98d7e8d92f4e39bebd8f4fcf60ba9faa0999aa2cfc51b849e5f87
+ 663510ea6082e00f9140bb61c6dccde1bfc679da211b4459f1b9d8a59113fa6f
+ 19ad599fa7b54ffedc34cca2b538ef43cf78cb14f2fb67424dcd810ded406692
+ 59749728ea14013e824966bb477407c55d45899189583335f713a96353410ab4
+ 645eff9ab04f4fa53b7c3f2ef4b926cb8ee65e1024a657ce078732f9782905b8
+ 1c78f7430a08f35a85240358cc2423feb8ddcf32d99d42912947672a46b0903a
+ d67f9f768e6e2918b4a63cce53b174b6b7fea6ac428905b62a29b496ebaace
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N223/Arial-BoldMT 1 TZ
+ %%IncludeResource Courier-BoldOblique
+ [/N177/Courier-BoldOblique 1 TZ
+ %%IncludeResource Courier-Bold
+ [/N173/Courier-Bold 1 TZ
+ userdict begin
+ %%BeginResource: font TimesNewRomanPS-ItalicMT
+ %!PS-AdobeFont-1.0: TimesNewRomanPS-ItalicMT 001.002
+ %%CreationDate: Wed Feb  3 17:59:02 1999
+ %%VMusage: 33490 40426
+ %% (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype 
+ %% Corporation. All Rights Reserved.  
+ %% Times New Roman is a trademark of the Monotype Corporation, registered in the 
+ %% US Patent and Trademark Office and may be registered in certain other 
+ %% jurisdictions.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.002) readonly def
+ /Notice (Copyright (c) 1988, 1990, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Times New Roman is a trademark of the Monotype Corporation, registered in the US Patent and Trademark Office and may be registered in certain other jurisdictions.) readonly def
+ /Copyright ( (C) Copyright 1988, 1990, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved.  ) readonly def
+ /FullName (Times New Roman PS Italic) readonly def
+ /FamilyName (Times New Roman PS) readonly def
+ /Weight (Roman) readonly def
+ /isFixedPitch false def
+ /ItalicAngle -17 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /TimesNewRomanPS-ItalicMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44336 def
+ /FontBBox{-191 -250 1031 868}readonly def
+ currentdict end
+ currentfile eexec
+ 2d3c7ad1b40bf0dbcd388c64ce832633f29bdd5069549bd3aabc3fbefcb30020
+ 77177ef67f11a29bb889b282b0528bb2244612e0a05776cc856bf4022dc0693f
+ e538451aa195c313274266a8282b681f8f5fa0cce3c88f34c49aa26a0f96c3af
+ 0ce6c61b32004e85c814d6efb6900d57395a19dda079b5ccbe2c66e14473ea92
+ f3ef59193b602e5ac92e16fb5d3b969b4891431562e34324d2b7bc4521835fb1
+ e86bebde24472a1d2a14b04100b6995a7add284bf4a4207a70b5d0e75ab1abda
+ 65837db2bc5bad099d98fb88a92072b099ee1200890b5ff32d6aac99dbe310ee
+ eca2a8df30a3b26be31e083e00eaf3501c9c0b9c6835374ad07b40881ba12abe
+ 8478d398c31ce0c18ef9972f451d2d0d3d84606f4d93cfb7b172362994e5d440
+ 7230e7f57c004c9876dcb53e29066f25bee164a3ceae245ce3504a5b34b9ffa2
+ d2dc6bb1a8c14d3c825f035517000f97dde27933952973478248f288292d9b1b
+ 0d1df60cdc10da5158068f0cab6cf24c831ea4e60e12da1542b85dd9f9aa4f98
+ 6153e26e96d4337467438b1c11bf4ffae9b915bfb96fab12764452c2a6274c30
+ 85c36159138be457910a12f000b1ea763df38ac43475a6896c59f3742e16185c
+ d4f1b7d8c42b024b2576f6f3a3e40efcd3f3af9662ea8efe0d59acbabd0b2733
+ 51fc57fdf89824ca5a677c7787d00ac1579ee460bb02cc10b1b1852f0cb410bc
+ ad4aeba05f769cc49981b1171766316f914a693bc4b2e34adb019c4a6e51eb46
+ d97e75db75f1f05b93c5b45e5a3f8af45c8932624365559a462c5ea2e37da500
+ c3bd069762040555d6c6d28e1b02421a311f4ecbe8d43e92eeefd41b0582b801
+ 36afd48bb91e972f46dd7e0b2df58a3c1b83483c24bb483c851b4ec767bfe102
+ d204ac98167a28fc8927919a28ef5b59b594b2f88bedd99405158c7664819a2b
+ c9207ebf04278b6d35db892028cf501697cf4392f70c7c16e7c6d4eb0cdda081
+ ab024166fba78f92bde3c432069201f1fed9d4f90c3ba1c09759d337f4c833d1
+ 1b649c1f68457b35dc2d2ab859f2bc93cd1b35c31fb3a1c17bccccd7d2ee61c6
+ 389c470e46be5e656df9a46d8541fb17c41319667ee1db32739b82cf85963b81
+ d2b39cffc5d0a80c77725189e2749ec49fc4605fc76c8dcbf1744b5d6ca97032
+ ef4a1a877675d9cb2e69964ac3b08efdeacf7ceff35e6e78d2f6027803578556
+ b5dad8cd58e8dd95fdc655059d17395381c32b1e9e1d449ccb619a4bc23fff77
+ c80eab1c50e0aea4f666ce6188d7bbfe85dfff6ca0c813deeb83a1dcbe6c41f0
+ d1ea7ace5e423bc14f8e69a52a74833a30e86ffa333be7fa450c5e302d6a4e7b
+ c003d70fecfb27c811075fd2d4f8246499b9476fc173cbbfe9264f40dff4e607
+ f1247d6c0625cc5ec00a1d8ed8032427add21514ba033da3e40091e814e2ccc6
+ 4cc65822b4f070a27f4632d1586d7576a447d320f07fb92158ef4b5cbfee66d0
+ 92e0bc685cdeed94b886b5d01489da5ef617a7bb2d5cfa2aaff3f7d08c1d4b2e
+ 1ae9213a27d1baceb01276f6cd5efcadc3a737a814fa0f206c66ef63e95117f4
+ 99c05faa12c4e4800c182deb19310f745160ddb7b3aa8f5c12ae9ebeafd1656d
+ 7b8612f5c700029c23b514a566f97f64cc768bb8f138d512b368d9b0fd788f4a
+ 3c2ce5f339e8de7fea4961e413ce384b43410bc5809070756fcb355c6a15e973
+ 1d8acfef043f7b76541fc9531b85a61a64f15357eca7228b24257a2b0e16365e
+ 5fa406927bd06b3c464bdeb5221d7d75928364148b72f8c109bd55cc09606284
+ 5488b79680cc2d40eed9d88d8b3c79925f27ba4eb084f260967e563b36da5da6
+ e6ef706903d5eff8c2e083bcd51987997dc0dccdcf2110282fb5b1a98951e4b4
+ 277c9c7caf0d5951cf4e47ad48c93dd24ff8f7cf6d0490827deab840570e6852
+ c191dcaadd39e93da43eee56aada1166be41751f032c41aac94f94b89e6d7bde
+ 25d9a1402014022eb031922e591b8131c341bf047c01d1cb5a1d1028a2923a91
+ b2f77e596fe04b9082aafffbb0dd20a703e88b208204a80941ddd3b40a778ce0
+ 3fb02cf00f3bb8b3bbd8beb9648fdedc9058d7d54abbefb1af03f8fa3fae371e
+ acb31da2902a407b62c8929ffc1fea0ace90e1305cd55b008cddcfa5b8d498ba
+ 8cb184e3965acdcadaaa23d22a616012ad590c7498e5bf349288a1e3a246711c
+ 301c5983e3030f574682abd81279665cafa9135cc1969cd4d7799eba0ad020ad
+ 305bea20dc3f28f0d055886c964e125793b6cc58bcfc7c6ea8ad689b088318b2
+ 0ef8b0bbe31601470d20c56c4a6e4c2e45885c5cefc48d1b979c1af1bd4de2cf
+ a5b054dca5f0ce0756ec924638f2926cbe15315883902b4e1665ba62be40c692
+ f9e55eba0a0c6a98ae7bf4d2ac5fc4e971bd059a64c6c6b35f72f9f28c1f1c53
+ b187ef4b7fc0374123f93d25330226157e608b3d5a249e51a2ef2d0434abed7b
+ aef73ea0c3728f2a27c11919370df5109d26f60d7aff12ddf8e48118aa435972
+ 199fa302572eef6f4f2c2405c884863d9ea2ec99fbc4f5b06db32e87929c4b69
+ 4fc68202c11ed8889e434997f18db8d716728d86c48c5c3cec2a0d8e8b67e27f
+ a0d26b615e6c2ecdfc72c01f8ccc5e16d8035c2b5ba98e6ae4d9106b26208039
+ 4de1a59ec00d91a717c2938e77dbe14d7b11344fcc82f66d063e55202c68bde9
+ 102dfb0d45fd7c50971528c4b1471a5833878a4512d94261f436d5543d4f8182
+ e9a175d22514cb325e34873bec4960ea0336c6306f34b7597bdf8949be1cd70e
+ 91de277138d32d57a770dfa3949baa805d817cbb2b5976d9f47e8d1d2af7b53f
+ 3fb0273823d2d84c85abc9d04291fb3e722d7fb1be7edc74ce7079f2f4b16e9b
+ 0128f4f8e816a1c0c91e41e88b83e331d60cbde06ae0d0ace8b879bbaf8c63db
+ 6a3b33551e8f5edb443890f39b2306a63566e4e07096d2634d1482cbffd3d469
+ a563f8eca5b7b695af2db9235e734eeef91e7f41369284ed4372364143953f23
+ 26e8ef1237180e2821864c622b37bdff67a1828abecde4f1c251cd09651499e1
+ 500db442044b636984b39e3dd926de12d88c3739a60ff8893ac8162a849630dd
+ baa1a939b4455fb38bc88d8895ee75a168a652648cb2018a6d98b158daf35b0b
+ 26dc4bec474c22b86f9b65a8135c8e1dc6595588e907813178841536c7d37dde
+ 0eabd13c42147a08e4626fbbb8ec3834974848f78c2677ed5e689dbe34cbea24
+ dcf0ca9e5cfa1d55d4c596c312fc372c401eeeb46bd6d3290d9a13b88e869a88
+ 4540d282049683961c946845423d059948e68cc151b331806c7b655147ba3fb3
+ 8ac7f597e0010ae3b13727ffbabe1a991730cb8cc9d6bcda470d50ac18ac41b3
+ b6c0f6084f48a29a5153869eb497024bcc913da3ad070bf267ad422bc6909c86
+ d2dfca5002a98a59850ffd439330eee90565f325c783a70ce5877509fb326622
+ 85e8851d003b363bf83097668c1cd5a3fd2dcd61748f707810bf773e727b9d81
+ 7749c44a012c11199de371c0ae2e0ee2840e81ec3b07f11e115ed8a763048e9a
+ b2397f1e6e50ffd7a41fe03faedceaa6deda1b7481aac5d10bf6af3c39511342
+ a6b4b119c596038e62ec5487760a52ec2ab96729c317e60cd8713238e447d1a5
+ 322cefeac03cae084dc3368c3d7346c0284defe9c19dec2685b72c2692041c4f
+ f24ff8af42b40b4df500f8bf3467bd21fb6f1a55802bf0dbefb7e8c7821848f4
+ bbfcd65c694b504c39936b61468abd9d9bdef7a56a284b78d81261321a2860f3
+ 31b613442b58cbe81b99827b320707d88bc15426ca71a37066dcea396ebb1ebd
+ 971b81af0458bcfe820b4639940cf6f3bed706d633c2c11d49deff61f2927688
+ 367d69cc7782ea173ece4e8fca97b5e0c1a4710eb3ae6b0fd0abe4fcde7b1145
+ a453cd5a3c21fa2f55f2eeb2e224e7e61553b99ebfa7a9c78bceccab9ab2dc22
+ ecab3830519246c63b85135e70512342821dcaa372f1ff3840183d1e32348a9a
+ 843aee593601669aeed19bd22880a92b2fa8fd823a49bd17b250694df5107113
+ 2f93123a1d2bab351dc8a002d883e9e042679eb81b33d21558fa185e8e2d9086
+ c2b4889f67a2e82790563928eb7b19d1cda3a22ad9a18b1cc8972ca365715a60
+ 8d548af04ec685f447806b6554618880b4a972c46efd4273cae7859b7b7ddcba
+ 1887eb722804477147ee5e1579038267b6e31bc9a983b76520b62ab593433511
+ 6053b4d91bd0902cf178d645bc07baf585fd4b5a8bcbd4a5c095f463f1152b17
+ e8d51ef46525a73c51b8b94c101f319eaf02e454071b617d922ce89f4b101368
+ 33356abaa21a23b8ff9380b220dac094e2bb46a79aab8a7b1f1cf7a9b7014489
+ 9189773c12a807399c68736679de161f15d478d29b0bc556b2aee341c3fce019
+ 5c3ecdbebbf9506718e1a68fd4e7691f44880bc5ab86275e8a6c8dcbfbafd7a2
+ 967b9b954f8532ca099977dc03cf6c27a22b47a0c315f20d9ee579e5bde03326
+ 1290fb02fed5df0a7aeb213a92541054c545d5c4830ab74810513fbd10a298e1
+ 2f1ec2a42958302f91a3aabf51177ba82a8b403a387289dd4c38a1dc5d6840a9
+ 838f884a1be59056b2dd99e0b3ea1da3e94d6589c9a14448a997608e32615ce5
+ ceae0e7f8987f680625380a4dabee170a34a7c912788951e40f18147904fd5d7
+ 34481d376074607c56400eb1c26a4f2d25e192377f6e31834718ade6ee4cfdd2
+ 5f5477d7a8a3feb54495cc5c9bda60734ff19f38d16949bb8a55e86f802bc8a7
+ e5fe9fba5aa80615929384d41ba55dbf7e6c31469a147195998ce33ad2d062c5
+ 9ed0a1ba8d8b6a341fcd300306302fc49ef69809291ccf340898c54e70045b6b
+ 2ec3cd85ffe17a42f2a3d4a303ce70b22858394bffde32de84b5949cb923b09a
+ 5ab7252c749eaf88621fc8be7f197d259e86bb60e2d5d8aa21defca46d9db74d
+ ba7d325b6dc564c4d26ee6e2925931181480747d6c51fcd6eeb4794e022edfc8
+ b4894fdb34c805b1388467397c52b5eddb64affb74d7518db226e8e23b4812bb
+ c09f2321d6908fbc9ba2506775829f8d0020a5995bcbc653dc6e93ed9d24223c
+ b9d8de3b463cb52cd00ce74ba98d484d36f3af72ddd4f8517dc197d12019c5b1
+ d5ccda01cfefd1ebf9f62562cda62ec96ea7e0b7aa925758588213de4d84ca22
+ 9dec8eb54a6352925297ce916d241f4bba11a1a7c2cebd4a6a1a0711b4d32c08
+ bcfff4288a40306ad86441b582c1554f3a8a85e8b1187a496256e23373ba454e
+ b9e3abc1069a9b4e3c21acef5c81afc2b954c4d4c236ce74bb5a2e48749587a4
+ 8b0754e65b196d23f8933268ff27e4c8c3db545c56ae621ead340bda58756fa0
+ d72f27b5331733b539d95f97184764c3855e5c13ed702a166e78ad2880a9bea2
+ bd64e3e703c5cad6cbe2d73ac814c550337e47b99f86044b4c00980dac302912
+ ac116392ab776b260b8792ee1adf59d2ff21870e3080e26a3c6f3b6fb570a4a3
+ 3754000d470de91486ce84dd796f4678897b0db398623213558095e8fd202cdc
+ 5e5a1befeef512eba360013dc817655de21041050089cb831a72c66c81b3bcd2
+ e6c97383b092cab32d548e149a4c7533d0ddf9c86377b4bb23a99f4009138694
+ 10b0d2c135c45e80c27937739fd0c3f89010b18da6cba63cfde50ff587849ac8
+ e729b543b60d1bdf2ef7932fdcd721bbdb1c4b33c9449b38c20cd89c196f9e2b
+ 9de1f7a14788c0170356ca2975d76eb5dc820e2d7302c9a10b8448a4ea83aaae
+ de3e123862b0cf3df001d1e1374b82924031889a8f46f4b78d910e195bc54574
+ 6430a9ccff49396ab12b273a1a45d8dcff082a7842838cf33ea5a33679f447ff
+ 9efb7c691a752cccb0a6fa58fc447de070e71032869196a7cb6a82bf7a109014
+ 6458e3dccfea2170226871f4b9f3742092e15c725df295daa0c8b8365178440f
+ 8f07eb08e6f42cdced4d74f4b168708b9c2353552d5d6a065db3cf184468ef8b
+ 39d2637c7345118706004fb7d2635c326a70af07b5711c32e17928dff9474367
+ d45950a8ceed686240630fcfb3e3a764f194a61c9dd9c4208bde953fb9fc60d7
+ e95f36b34e896d418fecef5ea2c7cf592854d1c9e670014bcd3756f980b1e0bb
+ 60eed446a8dc5a9153aba58074f3167ce83bc476b236547f6095eb23f39985f9
+ 4e57e86c6aab1f2be23f44f302124b02b177441fa281e6714a11e8c856bcd30c
+ e7bc8f826fc6a6b6ff1ec56c0926ba2dbd8d092ee30ca1a7591f3ccf344d4254
+ b42360b880ac46c57f6ea7a163254c06928a061b1895d3bc512dbe90c79fe24f
+ 1a83604e95e7b4c4c32671962d34f4bc63947b05840209ce2bc2aed25c30096f
+ 41747285e6d7db663aef6b9e1896efec7bf0f2718ebdcd4f983a3a097091bd4d
+ 274fd42bd85bc5c6a7be019529afd45fbb7762aba86f971c1d6d5949ee8ff8b6
+ 638ac0dc101c4cf552ec2a2c631bef56ef63b1bf473f103e4490c4dfb67fcdef
+ c1c02130b506fb4737b899e9ea366d5103c1a11938bc36cd037e97128210c0e1
+ 21f0a34bbc440dd260181f986f398dbd8af0b43c327fc58fcbaea1c129e94b8d
+ b457b549f3651aced3b0453ed7271b88ff27e21ed613ba5fb196de359d11a67a
+ 7e17d12fedae6e51a2bfe7db9c9a177324d45434a3c298c96bee33a90ae8abd9
+ 4ca648c47b203433d6e2f61ae80af5cbbc32d381f0e6bf6ca0c7a2dc6500679f
+ 9eaa4a47cc0afaedace7c47fbb97086750e57c8b38c4f068dfdde688640f7739
+ 65e61c9f9e3cfac20446ce7b23912c0d26becf578682b296d9f1561ca93186b5
+ b0615d87ebc3412ce748f4752069f603df5ce05940f5f9e138c5e9b16d3882ea
+ 4a2a264403be45fac7298a742c46bdbc04fa76e56e372bddbdd7e9e1202d7dcd
+ ab9c145667c8c57b6e43b8d297318f1b732e5689360fc6068392e9ec1019d59f
+ 30b0f65888b283bd2c4086afc8d4f971d7dd650b311c38b71941f20ae37ae6b1
+ bd8a28798bc2545ff3e305bfce3172a657479b9455a5cd7c2e29587c79811f2f
+ a9e742d40c78237d827a4b6912d5e868e7c143791fcf7751a24059b7a07d0dae
+ 2b7451ae20c8c9e024d4199228ce93e1088baaef1f78725f5eb770f3bd474562
+ 476b0629817b44d42c6e54424362226051f20fc08e2f22a515c83cb59c82f65b
+ 4fb658b2e66664b4d7f9a1ecd016435f510138c56bd1f2779e6870b79ebfd04e
+ 62d58fe568c2ad65480513085526e2657051280518bbf10bc598d9227056a34d
+ 04d35ac5659fe3cdaccbf35ab5d53b40fae96374977e6cd6da09c3f391dee73e
+ 5fffd26f19046402486e374e24a30744d25856ac5eda613947aa4656e864ffd0
+ cd5e933cdee624cce37edd5929ddc1ceea31752c4a1eb8aafc59c53f7e34f977
+ fa7991c3cb420e62d52dbf3b78966bb191e29b2dcad4a10a90bebef45b7aedd5
+ 1eae4681bbdf7ba25a1de93c4c210f1336b8bb73d6562579d3eca9c807d25743
+ 29db8b028342d5da1dc28fb26a51259a858f8fe3f066ce1c1f6a5a9375f5dcb7
+ edffda5fdcc8b012180eb1c2bb99e507d055c165096e31fd7dfcc5abf6c412d2
+ 8377defebe5120b39237bb6e42b8f92eb8a5cb203bfbcdbd227bb2a1ba76ef7a
+ 62b833486cf10b104c88b71922834df194765fa7bda9ab779c0feb6717ecf9ed
+ c59d5ce49b60e60903068fef7e31702e9f7be3d10e55b22f5b0b74c6f54f9a04
+ 39d359f027c7c16fd5479c43f3a0442e6383c39405cb29e40cfda1478102ede1
+ 7857c4942e2989c78845c64dc8ff9520b7eb2edd5a71c7d6b094b14fba7fbe70
+ 9768a40ca9d3cb6c6b29c419fb23835bf9a98c7445dd6cd4c5c7bcf719e5568d
+ a4da4c29f9fe6fdfc513ce65685ec7715ca36aabc42eb7f2b3daa4f870c818f0
+ 6fcfd5299ffab09abba1092693c14db2e8e15b8cdf1e1f4f5f663a87a2024028
+ e7ee620f06e751d97b207aaadf134f45489a6eafbfdc0734721f833b4888fa63
+ 23c21aeeea96ef49f3081119341b558100d7cdbed77623fb56afdc5cf724b975
+ e33fbc632403e14bb386dd3cf88646bb77c90186f11c5aef4b6eb9a52b5407bf
+ 9b3a59e9be0763b4b72d20dc6817d37bcea38854d2bb4e0bfbee0f595764ff78
+ 10f32f1c3dc6e4a7c0738f3521b82cd72f72057279efbcfda9a5bd4bba27af4e
+ 5e14ada0acfa9f1f6a0059fa5840c25b2eaa1f683d53c93dd38f18f77a31d381
+ 3eca6b78cb17896ba7e7e98fcfec0a9797af32ecf8ebf635945b51383b1363f2
+ a5f9ee5b00c1eca89216e29c701442ee3105eda23c66740691ba505a046e91a9
+ 7ef11c588936c42d80d23cff82245403ec50105da9894c58c3b2d8d7c39e72b5
+ 72a62e148085375a99d771e562b6b69636b6b879b826e5987b87463ed56d3fbb
+ 6df3d21fd62edb972445723d58924c5da74ac7da8ca3c26028ce56bdbf95bff6
+ c1949c8b05bfda6e071cb71ed83a216241d965b685739017a611c46fe69e5c0f
+ 54b76f4dbe03908aea04fc9c7113e2f3816983d1f2f3ad8b403a2d53922b58ab
+ 38eebc614b2659e0db07452bcc7d99e344714f12f04ead7f45976844fa18ce1e
+ 7299a2f8fb5d0002cbec458d509130f7495f9d9da1adbcbde04a8e1a57fa8c4b
+ 06d87b43b3dce65e7c6963071cd9cea8239cef110d66a9202c67cee9eb32b159
+ 546d5b1bc6aca0775e2379c1f5cf49cc5a34476bd6f666b5e98ee43f280df979
+ 5ba8a7055d0d27c4d6872144757f21aeccd846700d537ee9d6b313f1e9f97dce
+ 05200c0b2da123c0c6ba83586880bfa8c44f895af5d23b272616962c134858d3
+ 2af74eb53b670f204de3658ee27b46af34d69dd70f7425a3eaa902420ef5a746
+ af45ec956acc76393f4778cfebc3ded14115a80fcc31a6c483affca6979cca0b
+ d31a8424bda27c29aa590198c595733155b42dc4f0d36203b8b3ccffbf7a88a5
+ 1b260bd22b2e70c5ad48948e4c4bc4a0a97d38ebf3d647ba5dc8117887f44aed
+ 2899aee62fb15e00d60782c11ee19dbf11eb76a0a36335a444ed2049cf5fe246
+ f49d311009c6433053fccad7a7d6856a9e410135d41edb1453c4bd86e44e9b25
+ 74741084ada9f1fe59c854c7b91165a4013617ad337609a02ead3e829a70f67c
+ 63f934aa97ed5dc20b6dbbf79ff5e7d3826760d21dd9076269ea9baa20815bc8
+ d7971744da02f5d382933ae35dd091d150684e0b66704675a05e9167cb11c641
+ 04ca219afee30077811c4c5f0e0967649cf628ff1efa2d3fef35250aded707d2
+ 51a581820d5438294a8bd979d0e18912efdc4583012947c8d338f5ef91bcb9ad
+ 95b20ff31834b45781ff08308009de710899be14cd508711849ef3c25874b276
+ daa36dd1d6e7a90058e71aca8165cb92b591de93cafecce361d1e5cffdb31864
+ e85eb0f1699731cf3417d6c989a6c71560f2d4bb9a516027a9f3db33e92b153f
+ 562f922a87ee4747982e324fa2fa5fd2d19e9d659c7a521e5903d3d248768cc8
+ e8eb4988b9cda0ac1401e0542235c73e555d8c65b874af2f839fe562f8ebca00
+ 16b88887b92fa9ece0c669c03b8aa2064a9722fcdbb9ba64c6fece03f38e78bd
+ bef8dcb47f030828439d6e4fb7bc2c470bbf16706f11bb951ff1f25225566b9b
+ 7109bddfb72806efb99af75178d7ec024affec5047065db57c19b866d833d649
+ c90ef2dc0cdd6c1ee3c914b33f076ff3dfd0b794dfd5ca4ac0fa3eac58e90c90
+ 829652f0335693dcf75a37c691fdfd2abef3ad2fb0f50e081847c6c7ace2e9d7
+ ec467d08973b6f372fa66b14f87cfb22e94410227722d86638324e5c18b4d2cd
+ 8c7d2ba51cfeca7420bc0ad114740e6443a6feaac1513c6ea3e5335332c8ecc8
+ 8546659017436e3af06d1120686561928e4e34aaf12e40de35f1d02536d30747
+ 6befa7b23198665bb9bd642075d5a7f398099df77f1062066cf520a6d0b3f0b4
+ f97c691a752cccb0a686062755d53d2d257bf20051630d4c36a7c164510a836c
+ e183d432f9659152209943eace79056b205aecdfc26c6b211818798dc688577a
+ 9b225abb1a6684246a2eb14264bd59c28dd22d7c7d7e0bdb4fa7f68bf4b2be68
+ 4b749a1e0e891b65b52592f609f877ec2de56c7ad75a70740ba5891e2c8ebb44
+ b6bdcb3b2da4bbbd51358b9b02d7aec762a93ba168409a14ad4347d385fbfb09
+ 95df003b77e82773fd5c388a18d1c926c387c836486b067b29ef7a8c9a1009a5
+ 5a9fe95256196c4a68f342c80baef8619987aaed27490bcf2f8568ad27673321
+ 843542113fc6b57916ad9a632b89478e006986c845d29434be612791fcc48787
+ 02d1a7ed75698e8d713af75f01c6bbb5424b627ef916b827edc988b853c52790
+ a214db2bf9f74627f363adc86493b717753fc26df26a7b731d3d7ee6215051f5
+ 9e1384ac3cd8e3c771599b518c00708a5bc1850fef582768835805776a2514a1
+ c07ee8950af9e4c21441ebec1b969215b810fd4ef987403fc81ca42d36d3c1fe
+ 6169be24cdc60e3fbf92afae0aafa54c06b94ebee17285cc9f46ac6922526165
+ 7f7e8ea04d7bb167ccd897b6499ce736bc69a349bc066ef916eea198eb300685
+ 8c400d1f0bf550cd990a68a52b343c5477da020a9a981b09815fe03787525f1e
+ 87e2051e1dc230ade530d3b1d4193a868b76fa968f79934ef3ccef0a928c3edf
+ 2063e995d0f3a3bdc2c59560429a64efa06b6dac5282fab743bd3049d46e8d50
+ 3e9998ea62bafa7530d577881c84f7c6c79f249c88b13d65e4fc2c52cef0fe83
+ 39639272df50ffbe1337089724801b9fd4f7569d63db60bd0613376aec9a6324
+ cb0d0896b410ac375463c83ab861b9231ba59d0a6f58f50c3ad6c509e363007f
+ b211d4682db3ab6a92da041a1f61f9b556f2d5212fa7a78d090b091b955381d6
+ fb03e01c35504c414dd05eb7d86f49f7282cf421cf1fc93cbe7e2eea80cd7b28
+ 71b760af1a56a83edc4d51e7862f6e8d3e180530823f28aa79c8c685ab596ef9
+ 1813c25dae7062230f10fa3c0faf71e9180653dcc842ab7d3cf17109bca7e9de
+ d87fc5dd2c3fa1d62f3468976650e05356acc42693c0210961a401f789b73d02
+ 40cc5828f71fd761e77b4b35cc4c8e0acb122770728862e3445ccc0d5539d618
+ 880e2bcfc7b2ff8089fe553e004e6e265b382e8052b8104183fde9a6ec5c1dee
+ 87640b4f3d28bf26c3585973dbcd1d780565c943ecb9d697640f021dca0d03c6
+ 1205659abba04e59e2a3937ab3873b1cba79332a0445bccb92f2f591dc06a59a
+ 80c0ec90a825e7c5f11d52ae8f61663fcf9ec767c4ad36b6b7b4f0ed264ef4c6
+ 4ebfdc822711e5eb464484fcc75da5a51605671fb37c8d17d5585bd10c61f3b8
+ 1f0ddb52fce0bbc3e1e4341db87497307f39a3eb68549f666de7996f5e72eb6c
+ 827fe9b5aacb6a23ca2e997def512350e10a8adc77993500ca11e00380ca640f
+ 3202d9fcefae7080db08f79a5c4410b38213f727e8fd995fbfa3af9149f07c18
+ 994ff414abbe3f3e1f3cd8465036b1880bdb20784e3132e3f538147570f63a48
+ 92992478d62cf47120e7d126cafdb4141e4154ebce926bc08d31656a00780e54
+ 78c24cb5b1a2ffb840f5e20c88078dc9124ab295028a8e7bdf8b24572a2101fb
+ b20df7a997701cf13b14b69236d95e5a023bef580b568e85e7957b5b53404107
+ 532b4f85b1a070fc9fe4d1fcc0b41578fcca6b21dd10bbc2c75dd9bcbb90c4b0
+ ecc30852131dde1b17ddaa148b7e2cd22f11cdf2c076d7e96b174a14809feb2e
+ 994118fb2f4f10328b77e78a6f52c9fc7d8983edc4ae40384d2db01cd2c45535
+ 055b1c0096f2dedc7a2bd24365143a65ec6a11ee570c7be139607b303bd43b49
+ 9a847fede930c44368931d1c7dd0d898c63895e91ff6a11aa3890d30e4d1aed2
+ 2c2eaddcccdd759afda6856d3485788d281060646ebfe4d51db8d3f2209c2623
+ 7804fb33719733e393f3a6b1f70f0c50d6563796bb5be8876dc37f1a5fa233da
+ 1cde09e9232d003d420b4b56c7f6c7646b5f23228cf1715a77114800ca82ed59
+ e7b43cc9663414dda8fece830ad49a9061c5d58a8d06615a387ab0cc233dce3d
+ f86bd6edbf602bfb11b54c2100a7cec275440d01199eaf69f51c1fcd5e8ccd4a
+ 70eae0379b84b98287ebb78d977cf562f21a4a8b77f1f14e660e35e3d3ded6c4
+ a3ddb0a11a792d4466f0010d422afc1198d613c2e743436d085cee6f4ea1e2bc
+ 272704ebd8f504a782e8b40669432a0e15b1775ff3b7b7d94aa29625429c320d
+ a5a92812ba0806db742b1a083b35eb3868dc84fe0f3ee958749831a2fe7960c8
+ 939dc72c60d9cb2aa82f0a9d544047d06797c5e5249c7725a81275288ebcb397
+ 1310cecf053b42ac8da5b7a471da20c3d6d81cbf4b9169ac781cc17d1bfa4f63
+ 3b49d964f02ad46b18ab4cf59b7a50fefe459946c4221fe407bcb5de5738106f
+ 60e64872ff2e7e74742b8ecf79f069b732646525fd39b22386036775190463d2
+ baecf0215afb646b6e6ba2387436925e989a3ff03febc3720e77b2745e80b1e2
+ 1327ecfa70703963703e8e2be2bd3d8c41b5a242edfa194bb82af91eb5567530
+ 23b59344ed65e2b15c493e66995ca73f108a3cd7a77156ecfcf3ca543a4e0fbd
+ 609e69ef566c071dd87fcb4909b53579cd6e1805f2effa0034d8660869b00e5f
+ 8bcad06f04de96499cb677043ab36c02cf1330e28f98b6830c299fc16de7a4b5
+ 83e48f8f66420172e32bbf645c0549d542645f9262f758cb1c2a36e2e5ef89fe
+ 857a8ad5cecbd2e421f7810e7b06ebe6eb57955eef1d321e7f3ce53247dd6c20
+ e7df6067ebd3a191b87662acb433a3e324a91b5c94101d0e9693eb7971645824
+ a1fa281bb7cb583143521475aa789c543ab37288591e3ed8de119832609a0058
+ ad5d977a53f873f31a3b59a88a761815e5a7ac8026558dc3fdd4eae2a2f0210e
+ 5a92a5ff01ffbe6403e0b60ebd17e643fdb88e8ca560c80121d077c84039742e
+ a096d5ea9a40e6588bea37449446159f63419f5f3c804d0a719cd4e8f672cfd9
+ e69fb973a5d77fe11a104da0b90c17a3c5020de5d6de844d1f98f1ad73ded2f5
+ 539dea65c2c0441e39bc3979dca4b141c7da80543b336e0529076247520f564e
+ 8ff9975755aec30139b84964e38caba71c14dec8069f97f566d8d13a5ac1ae43
+ 6a24163940c26f0a5df57ce8a9e513d665f41cf72ffd0292535c5507d3fb8989
+ 08bcacb3fd8d0f5320faec238f4764dae2c634d55a9eeb4f6bc4f670ac8a5db7
+ 95afac4324cccdae0f9c420f7ceae492d6c50047c62d936e632fd549f4a40328
+ 4e8596255c4e37d58516e259a5cd8389818622a7645601b9b87c6d861172d2e2
+ c30c4248934fd2fc59d0cd3b642c0a17f1f6d64594dec573402a2716a2bf085d
+ 7f33e529a0967537a5bf7f74929ff7957abf161d3d416fc962605c451edab35b
+ 882dffb9ca06d49ea4b1868aba74fb824fbe170d75b5f0fb90a00d91286d18bb
+ 3e40066763af294389e383d6f029a7275c128794e8caef34c0a6146414c2b5ef
+ 63d4603f6ffd682a74da98a7a5c7d079bb24728edc0ac5b559e9d2c4fabb9d5f
+ 73d4b716db9fdaab4623d5503ae3a29eb3824c2d97e3ba26883f3a0f3ca55b40
+ 3ad7c62b6d18efff8d07778bac640216c0b08f12b26b839d6e6dafdd297355ab
+ 443dd82dfb7cb05180e9b41e5bbea7608fd6f73a5b46f5b7da83ed8c49b6634b
+ 108bdf0395dc137376b7234a82cb65394cdd491d6a2c0e5aa12f63eba8ca900e
+ 2fc4e6f1cda08df815ec9f2b87b2b01c2fa6f338987d7e30c1cbfc51062235f5
+ 612627fcc821059af9c3e089b07b4e427875531a71c2a8e7e35eb391752d6931
+ 9b5e359b60a48831fa7f86b25624eabfe24b42aabfc878ddbbd0d87abebe7243
+ a9aa722256e23f81840d921e92bdcfdd374a6970a81eacfc06b31e8061c61849
+ 78257f60838e10b83ebae65dbe3ebb092fe8dea4af42e6858c46f75aa822d4cd
+ 3ec503a1d0762dd661e68cf4887897cecc221be474e13280a0020f904493989a
+ cc9fdec2eb73977501ef0253a00c20ea5fb5efdf7d4dfc0699edf4a7d29a86b6
+ 2ec3982508d865279870ca837e07c63ad6adcbfdc1a7456d35592bf1b8d770a0
+ 459c6a405c7f76293485ad7cf80fc86057d66fc84254fbcb3e1b93cffa1dcf69
+ 3fae1d6fafc6b42b3a96f270d3cf095ae1e8f1522cb4943d5b7e06aa5be21bb0
+ 591daeb5d07bf5f3fbb9797d3533575f883ee93ae2e85fb09bd2283e5e1de69c
+ 2dae7e927252857fef43b16eccd4ad5f4ed55e2cc8e035d74f9b27fba482e99d
+ b596421da684b0f00080be7f07b87b1c2e17a4008294101c4762d9ecd209c448
+ 12917830595b04cd2fe2245a6bca0f22c6f615b99972dc758771f7db827f63a8
+ 1b393f3d99f882d6b32fe84b88360e8c379e33ffebb1bbdd088fe2334702511a
+ 51eb1de561a7bc1e41aaf676230c5ee669001a86ae6e8110f5644e2bcdafd6f1
+ 2dd34abbc5e11c30179a5cd9da0da658006e6ad131b85b9def243a5b05db6c0e
+ 132a0fad9deb4c219796ff195a602cf2102d61c44a8e99923e3b9fcb40891834
+ 4d57b3816641711a54badbee6a328f84e94d4fa6d6d061f431c1a90a9dcc2f45
+ e90f6bad0458e2756ae96fe106a5a7acf599980bf129324a80179615717441c5
+ 639c83e8975a4798369709b529fb819ecbfcfd5ce9defb011707cce029739ecd
+ 6f2f8d7e28b786f5ff6c7aa4b2b50e6a86bbd423f274bae43adc3c84f2907335
+ 1e4bd47af01387ca919da759d8e6d5e783223570c4682d6b8c08dd3242380fc5
+ 8835ab30acaa636e180968ad15c9cd043c5fa9305459e53891ecd3e0b0a04d96
+ 1da52c4f3cabe30aa8dae60e40535b9265d9a1f4fecfd1827db7e7722b655d8a
+ ce3b66e429e14c4493794cb1f9da0e1eb3f314f7c2a0e49be22535c2d894b69e
+ e47221303d0f6082930a9500ece26c5afb7b6505ad7692084c9bbb352abc397d
+ bad9bbcd8d419f0d7523a616be831a3e4e555ad8c24c69affef89b73196cf54d
+ 9dd7b6f1eec15bff2ceb018f94bdd96fc21a72ff61769917a9941883962192fd
+ f3588d85411700ebcb18691455f2d9afd498b5c73dce43b8c12956f34b0a7d8d
+ 0f7b19e9ceda95950ab1d0c36ff33a880196aef0b07f3525067e4c875869c7ac
+ 8b835d4f91a83d862da9a679c5917f70230a8a147cd8cb28507ddd77014c2923
+ 1af01b30849d96a6a5f4393cbd9c6c71e05074e9cc36a9fa406a195488ebdebd
+ c245d25d3ed9f6c0dc492fb267d1b2b6ee38084fd50c16f332a17ad171e92458
+ 04a285cef250c500ca7c0861c0d304ba04c8725480b7064d05a5fe6c07e2aeb2
+ dedf986ce5b56848350cd2a899c420d9c498ed3abb1286f3720f2e21609e5c44
+ 7c73e3350f3bf7b8cac30df66d2263309d3459eefd2b1d7a20fdd3a5d2f6fbe7
+ fedd74f2400f5a18c6322d2646003c22c14730004ecca1f530675631a0747e31
+ 267ef59d9d35ec399bf4aa776969acc950a6a3131c0a5bb4282334bdf9a390cb
+ 242094d408f4be136ca01e49d0f194c466ffd081f28477250b8123fb957fd044
+ 5eafb2ddda82d1eea98874cb04f29b0a4edaa171c78c4ef44a26060926cbb640
+ f0c8c68691f4f9894c94c1dbeb1360f007c1d9b1d7eb34df13c7458cd28f44c3
+ ec648be23fdc3aa91a6521a874c5c0ed138de60a457941934f1f93907727b4d5
+ eda94fb2ef3c4bf8913832d6562808a34640f97153639ee81ff0615293b2c940
+ dde716237e7d4704b2e1ce34402d13e910d1897e0471a580ba53fb4a3df7cb60
+ afbea22db3d648918f1ceb826456f9a5f90ce571ff32e4747fbae7006561d0d6
+ 6f1914f5365737b4ea8a1ccf87930d7d197b63f4b43b193a4e333fd6a1432606
+ bebfbc53a86634ad41c4d24bb944d0d33f7f2faed62b32bcf1b0c2ffec65fa4a
+ 4b518099b9fdd55144cce9d97a6af346370606aa7a2fb0c2f96e0ec89cbe8aca
+ cda8f44b5cf234af37df40e8050824816b6c181f2c94e5ae052261dfe467cd2a
+ f0740a511cf0ea082281229df547d12fb66668a185e599af0f2caaf21baaccfe
+ f337147b5d3d8c71def4738fad795b3ff0da11be7557a63afc63db1788e6d4c4
+ 49c34be648114343523b1499aefc4cd1bab4095d48b05c07cf6e288fc97e430a
+ e5edcdada2aa326c8944e3221267dfba0aebef86764b7111b8f8352d855ac8d9
+ 2567517cfc1e41a3e4dbaf2e2068502ccf78bff30adf55d12bae3dd25b8011f0
+ 2a3912de89bc88aa796d30f37959a1d9036aed2ab3b538c021270bf1a2226d8a
+ 9b7b9fe00022f0eda7eefe58aaa99420d22054e0674a81a612887ee12159929b
+ 0f66bc41f60122994483e7328ec9d64dfc2f34cab6f0862fe6160ef8542da26e
+ 31b2ef67d61a06bd1263713ec6a70f695d963f485f0cc608fb1be8bbc7a9aeac
+ 1d0d1a64685fa4e0656f88f6b499013d533345ee6c38df2b6b54c5ab01d02a6b
+ a027c6ea41145ef84aac701871814728c2a1f1c743bb54aef57e8a5cab855db1
+ 475d9d7d535406b577cdca4d0993b13a8f9e64b6e0ca20d5927493b2c4a72239
+ b1e15602ccad01b63fde7be40e5de99f1f9333bd6c9a9481b0013eb2402ee02e
+ 1853473bba641fbce6356f9be8f11811c0418ccd14eca051dd538ca632b1da7b
+ 0a4608574a233f91c5c213a951ce117006ed2c03ee1859781826d366ec7ff292
+ 325214fd38270f61366d66195208055e5b922eb499478a87611f6e79e8a94d7b
+ b595bded7e586e75ac946c9e0ed107e0759b36ffd3af8fb47afc1e732c60ffa8
+ ff168f4addce1337dc4b4fbb20a6e1a1672d56263797137228cbf0455e0b10cc
+ 6eccc2e6bbce3b73da6211aad0b29c4d8049859e8ce8899928142c0332b56aa3
+ 79732957ac35e114c0566842d63c82a71f50be9bf9f274143e04f3ae4dcd10b0
+ d4df37dbab5dcfe602150815166acbc8f7aecb6fb6a847b5d11ea0165f504704
+ 68079a215be7fc1d40075a18bc28624ff2a6d9767438a48ec70b6743902ef13e
+ 90094780ee709da9c9d9468defe4e70ecd6b5d624bc6d51212041c916c4d0de5
+ 58a17c7b06c68cf898fe35949b1d256ff9653bceb7a7be3ad39e7e3e2fd64e29
+ fcb295402cb7dbc5683aba1f70a1ea85cd47ed8be97b5bc7ad54493e29cdbe7b
+ eb5379400f2c3e0f12116aed48ac675b773767c2d787cf4f770c91aa9056d5cd
+ 5501d810dd51d5e7e10b17d5a834a5094b6d371fd36c7fa57c8e78e467da1b59
+ 38efd3d1c6bf12f94822ccef7fb0a8c690e8f46a436b591ad38c52ea2bc72113
+ 50c474f8846625d4b99fac3a85f18be0881584fb014f250fad1458b798ffbb11
+ e9f1e4db4c325f5e5e23e0f8909d45ad8a6f19b754d5ffbdc8aff06a18cdd8e0
+ f7b8d4af3315f3016f55e983a96da779feb4859c820afa1b2abe8c79dbe73a64
+ b5cab323eadc3a4905e777261e8db1c5e4bec946c0b6133405055bcd611aecb3
+ 77cd16814e39e8729cc2cd0d51094475704e3d3bb8e6245cc68619f197444325
+ 220060fe23e1dc71eb668eb24fade5541a64363bb24e0d4cc27af5b3b40def14
+ a56ba198f2fff38f4bb68e8e97cca8a88310e16c80300d28195f5e5f5db5918f
+ f5abb2131c206c182f35ecb41a08da60190a168898f04c30e476c57ff31ae6fc
+ 1415bde8eb7a2b76d8ac0dc1081b4a4f84d5066ee3692f679444c284e42ce3e7
+ 51ff24d3c0579dd02612a5b823da7ee54784e7d48414edb4c93ed04495df9629
+ f6358db90efdef9cf1117c0b09eb7f877e1d310a82b4fdf841ba4f83b11b5531
+ 6103c521a92fd4bce28a767a4deec948584c8e0399936f6d56e4b97c711db46a
+ 513922caaf7dfc804ba5361528cb0bb9346c675cb8b183b5d08abdd427a51c40
+ 486a3ef4fe7501d7788e8b8adf1cfaa042edbcbbacbb6e1b98446a94d751a491
+ c669281b859b9bd776826c373249c997dde9d49917f01c5aa3b3f72676885c01
+ fd6ae0869d6373a6388c6db6f2be2f984073af62177fe7c9eaab2f93a4616754
+ 7d8c5eaf9a660127a9bb191d6529f37af98721ccb10ff52c3787fdfab565d715
+ 1ad13ab75bf181ff6ebcdd58e7380261119d1326c9d3a7343a2cc572cd64e358
+ e612ee713f70cbf3d220d4d5d284634e40fd078ed081c7fe413c8f54a56fa1e2
+ d96a35324461a07feaa41cf5aeeacabca23bde8f3d5badce9330e0e29dd2b105
+ 885d7d0844fafabfd5e954a4793a548d490ac0bd20dd71e82a16f805c5a60c80
+ 4cd633fe56ddc7e2e4b5d9810f2eb96d44edcbf74e15bd8b0a538c7867edc6ad
+ e75298d261eb88cfe4fde377348214544bb601ad59f55e8282f943354b9ff036
+ 97b9f67ed7d14e071e85b75ce8c6288050e3fb3b7ed4348886fdaf4fdbed7d07
+ e22c853e6cd4aa6dd7a13113ac3a9aaad704c8174522484f3547898d3ad0dee6
+ de8e4be232146912aa0553eec61d3ce24224b3f9690be3c9ea1d3573853d30ac
+ 696b9e95100d0d55f06afcff07be9e0949854a919dadbbcdd4512f5e4e295de5
+ 7fb75085445a66b6a4da37801ef4e2ca73bc99512cf51f2d6fcbd45a50de788d
+ eb92bf15824d2d2b30478791e0ce9b39735719fd59685d4b2479725056fca899
+ 35457462edde8b75498622da7874ffb58b71505a4b0896d1d8decce54f81bcc4
+ ebade553879e017f1412734e10422715f6597c59e28cdd9f22dd0a1cb4e71b57
+ eb4d596f005ce04190a053666a98bba105ede6c36fad06118efb7c0add084be0
+ 25577b4c36bb1c81a489e08d536ffe351d40f597da5811cd47cb65b0644746cd
+ e1ff85f7a499d364a7a8c00489318d0058ecc4e243cb3e87170927e8bcb4ea4b
+ 2caca4df0cc14b97e07e0690c1e54e225cef0a74e7703297e04fa7d5ac519139
+ 0e89bc7af8dbcdd13ea431cf62b9df6f39d245ebfa0940d559111d03ea72364d
+ 5ba232d1fd5b5179e7dd9e48c3e89de1fea9032456557259031a705ca01d9adf
+ dde1c1863dbf17fea486231fe2c6fccc866f1414b1cd09bd911ee8c5336bf47c
+ 7e07e90bb67e1e34d33f3b293e2985545aa1a2b368d8807ab454d60c1f7bc9a7
+ 336497d81220765a190b7f660c5bc5af4acc6bf16ab0f9164c9e1598583c8e17
+ 3de308417541c2d3b593765328be022abf80d80a18c4c0f89eb415c08e440fa4
+ 515bb13bd53c7d629e27d5f96365f6c9640f554a6e029abe91c18372cf7158a5
+ ac8aeb5e41b957da3faa5702779ff2eba6b06feae0935dba234778ba6757c39f
+ 0c8665935ab4f27f971be0a79c5cc2f25785db6e69900558bd73657eafc74cd3
+ 2233566d0eef4f34b308698bf496798448b930c5fa0ae3b9c6e474f809617022
+ ec80288732fb9a9ea97fd7ca820540717abf0c2a1aeeeeabc20a070ebf4f479e
+ 28de3888508df139152eefdbf176279669592c6f70a9f87b0465adc7963a1c2c
+ da74db0c41c6237658d609f21541baa539fd8e5a718660bcbd00824a00b857b4
+ 4015113a40c413d5758591eacaece96f839a8ef905229ebb33ad376e03b53e36
+ 3eae7258d84838fdb4ca00a118e831134dd247ff0e161c982649a95b499ce16e
+ d126ea5b0d866411a20a70d15bcf91303e2012f4cfe8d393e30c1d157a487e07
+ 14eab1957d0167170e515e37f23e063038731aba998726fcfa82ae63253e10dd
+ f66b69fe95e7382d8e54d8eb3065175e0ee218aa88283655ba5bd8d365d09d38
+ 95a5e248cbd929084cf11965b2ed2e1639a4984fb18f0aba1635407a81a57b15
+ 05d5e2018764633daa90b577f7eb5897e3b84eade08d2dde8155406ba05b4284
+ 82d66a81842e008dc01928b7025d6f98a95bccbd431ce65b417e121a33d3a9f7
+ cbefa63d8cd58faaa7ff112eb9555e7ba31721f4effe581420f2ae2a7cea2eee
+ 94ef6e72fafcdc32618e0c33b2bef1e708d5a74bdd2e324612dcff788e4ea266
+ 3f28297f465faf9982b447f7dec88b9e147e121324ad3dc7ed0ae2e286d39d06
+ f9abca29384462088dc684720285d0024b6a068839a7781390ee271d2ba5da12
+ 4bc34cc6f9bbaaf7431f25c9ba7d55b0c78b9430dfd010912c5358431a5f9eb6
+ 8c7ee947d51f51e8bd99613802c9986f5207af8d7751d3135cabf96b6de7a9fc
+ 4949ac77ab42016a77192b11dbb26c9d816102a633e7fa993c2046491a87f006
+ dda48eace13ab809f0821848f4bbfcd65bbdb5681a7a89107e115b3ae992e29d
+ 21a5a30a4f66e7691186ff93b9564ab4cb45779a62d9663fc16d637d5f019491
+ ee16ac5f96a3cff1f33ef5d896ae12bb2dedab0677902bf44328073aa09ce64f
+ 30ed8c4da427690c56ea4027ac86485c0e1245adad0a9752a35048c3e6b58390
+ 17a697ef0b5b37e51bab77463fc28cd90c9b0e863aed14ff9a3ada3556298366
+ c7639d416e9ebecdbbaf4af3019c540d99ca87c024382b0c84b72b2966d16b72
+ fc664cf4a1a4838167eb67a1e8e685eb931b5a0992b8eadbf82b978000aabb4d
+ 80623ed2e6f312402ab6a0d5ecde7e663af38f4ff1ed472c1ab4f5231f70a229
+ 8f19119a3dc65ba66d331b48d266fa8151d11dba0a399a687032a897a1d06480
+ 40571eecb83c0dc6818e841ed247870a401f96f39b179b2657f97cf695508455
+ 6280fc0c00e39ffd5b08d1519fa503b54adb578c4ddbc911cc5c0d0abf97b500
+ 432c2af2e86ffaf0cac2da1b9e0db1c2b8c37fffd4d59d8a271dea09c1257322
+ b65f89af189e9316edf597eba30e7e8247757063e3adda2c082659d25bef1cda
+ e9db8931f6a2e69aedaef72f0a6e1c532cee97a0475cae700ef4a13f00eed7e8
+ 0ae4f86b5dac7c00f56568a754f85f3e1449245a6258e96e6d3aca26d5de1ce5
+ 5eb99b4a76dfba1488cb3d618756c5f47598c6008c5b5170d2e028f61ecb7120
+ 64fb39354380c39ab2109219359f45b5d7dfed47eb70cd59a24f68244ce100b8
+ e24c4da6e2c634d55a9eeb4ebd49c17990910703eeb6b378547e4f88567758bf
+ ecf218ac241e58aa1c2fd386d066cfad35b06d51b4b84df567166fa96b6ba82c
+ 052170c7689973815a3aa979fec0eb4b7775922e35aafc31f60eecd2bd60725c
+ 2272ad0964f4a4d855efd2b13e8905ae17911e830ea429daa582682dd1f761b9
+ b8cd111c4ab5b9d07ff789a0ec95453b2da65659ffe499a8d210044d0e9d3480
+ a0e89c7a5227d4f7bbd0f368044cddebdf37090daf5630b0c0d706b5b97d58e3
+ 45fbb04a02c6ee756865f0d4cced8c95c2882af637bf22e6831fb039a064899c
+ 380c11b0d3d8c5b517a97546d032d14ef38b2b8d2da4247aec6547202af8c847
+ c84253f7a2c0cdc740484ac18ac1075fab57e5cd61963060b5f31d2cdac16ca0
+ 64379a55463667a6b43b5f5a356c70b76d7563f523d33d5d9caa91a72965f1a9
+ 7445b479e8dc3fc1003ea18edf4117fb1e30e096a4219dd449f547c7738875ac
+ 0e6c26711c739429656ace4d51b148a8c6ea3c105fec8dbf26785b26e069a733
+ 6dc5d09736beff603a28015ab93e250ee9748bd31a3a61c2b75928da2609daf9
+ 10255149882deb4a5961d1fc30cf447f580c7b9061e542ceecf4132d6c5ed017
+ d393a512a077714d5abc275007adbe32e42611677131c38e7153f6c76955bb3e
+ ca769bbf804de511af08ba10d695ffcd757018150d48fe200f7210ed94f0ad45
+ aa6859a4bb0513af9ebe003453658f62e35977356eb51ef1dd990a080a065658
+ ef57c7d3c91334b1e09e0c1f651908a5a53304766698a5f4eaa13497faa7814a
+ 2467d04e7bbb99199545ba67c228bb1d77c6f2dc4924f4833956fde51917304e
+ 8349e2c10be316390bb556981d1246268801a7242a1e71b6dd2c7635fcf62c94
+ a19f36b36611a4c9ec9d1ad33aaebd90d6c8b22b497f5084a0fd4fc9b467d960
+ 58e68f91c50f180d58114d218d961121a2260246e59ee8263c55bb1a22692efb
+ 2ffc47e0126cf0aae1de48cbbb991eb1d8226394a876e4a5a571401d2f2f69fa
+ 8fdb4ebce8ea06620f5e005a262e9ce2888fb552ae6043bd2d6ee94c57502695
+ 44026258be98092bd69dc5cc45420f5e2a65161734be43b8902f7daac1653072
+ c42ac5a9180d4e1d38d9dae81d60526e100e42dbafb19a74dd1059f349b67778
+ d43d830bd5819956be283d0a40cf21727239642eeae214606e404932aec26e00
+ 5d2f80d053ee49532c56ba71b2a12fea791665f3f1caa33e5aff94fbab05e93d
+ ef36d69d6c1b91d0b26802e50f554ff369f94d5d3fbdcc7f6e22feaa6f73b683
+ 1f80a4afcd2d9a68056772030d70e883cdee9af8becc45f56b343488494fc08e
+ ad2f111bf99037019ce5d4f3e85dbe56569df9033274d8fe7d560b1479e2759d
+ 4c595d4ee105280beafe08a38dae862e732ad35f9800f5103e31a7533fff8553
+ 83f390f3c4033e17a3790ce1ef5081a2f2ba167457490ccfd0b7d327137dd680
+ f9ff9a4b265dd8e74b6cc90fb7e4897e88e28524f13c5f59e8afeb97479c1510
+ 97c62b21c3179ff9503b6081100d116756c47b868bc94c5783be91f6a626a586
+ 3221350d26d2d73c117677a62f5ba067e5b6873f5fa6219138a9e0f4d8deb348
+ 645c7dcac0509996f36e6dbcc16aab7bbf7c463ad0081160723b219c671b4d5c
+ cd27b0fc73ed733d2b285fcd51a9e1b9263b109c1ac9db61680ae216aad80b51
+ c0d92fecedd0e8dec1405caba0d49e042f4133585ea7a20485c6f664dede1f37
+ 8225b9dd7337082c907dc9133de6d236d30ea303a35d9c73fe58d0896007e472
+ c504945f5f5df74d4a1bf1c4b9fe0480a306eb4494b74dac1931c1e0acd3e1c3
+ c86b8e7498fa1f7183ce03ebbc83b0855b522877ea1ef8a702f598866dd4635c
+ 008ce025b16f5ce2c2068f809991e401eda93974a73ad18150d434f51c8be026
+ ffe444cf5f465ea6e2f119a824847706a0b74653cf685a80db445d11479f9c3c
+ bb4a2f66ee8b1a0a53a017780635a6f4b51c6bdb8cd79cc177d6d293de7d2ca6
+ 68a078f093d7751f63f65cbd12b37bc85d94f10185b0291832aee191bbc1d24a
+ 3029315bed132fbf18f13c28236615dda9a4199b7ea29d17a3b665dfe910791a
+ f54cb7f8935d960c1ce4a8fb1d88cea17efa45b64ee2cbf71b866b98fee1fa4e
+ f440b33b5001589a4775fd21e0fe78f46698520a2563dfc38b0fbf3329951a75
+ 439ada273fbe73ca20347138186e78b1e0610e9b2f2c99b6152197600e98955b
+ 9495df01c3edd41254c425a8e4c8ddfbaa8c1c4c90f628176450b285346d3b73
+ 6a6ffda6a4a4385eb7d00acdbf8d31eeef3368ad4553cb79632839164ad53455
+ b0f4911fd85fa2f6f64c322b746a374f9da07e0b06486735b80e119c9a31c5a1
+ a337bed9a2ab182b5ae331f84ceba681a298b99a16cbbf3b08256b58947aebaa
+ 5d337bb73a4f56b159633b7c5b09e5fee106cf7472fbe8f11a178e3ed94c95c7
+ c79c4ffeeb6c82f6f5e1fffc8f7df529824ebf94ed70ab6a3704d053255d9e06
+ e23a51bf0d19079f9d41a27e1d1ce5f5f83a196177b593d13f2b0086c3306290
+ 1e458fcfc2302f6137d5e7cf117eb3dd671c66dbde1b253a68824fa1dc00f53e
+ 6db57cdca58bfced63026f9705cc856c021ddd0e0e685e29b635a630c1309b55
+ 9e3442ce12d3c053589262ac3c1d86efb34fc488ff3808d11aab1ea6f8d9728b
+ c8d02498f912c01609e4720bdd7867fab921dd7ec7b911ee5e8722d008e26fad
+ 1ad0fe844e45f3fc2aef246fb72788f99ef507c262f12f1fca23ef40b42680e2
+ ed7e996b20ee94529e72f4e47833d96823f0f91c49e0674f9f64dd608eee0434
+ ae7f369b41add6811ed8efeb218ed192e80dbb1c1a4da57b98c679dd755b6bde
+ 4365e9dbe40cd8b7c67248b911f94581fbcfecb3494853f1cdc8cd9290572315
+ 3e3eb463f6ca94661060720c607c606e82c84504cc60c49905e38c82987a1547
+ cf72b2ac1b24e32bb61273728899d50c9c5ebacfbe50b733a2dd0adb8c706e70
+ 9d01cf88a1e08b60278fc5e38acac7d5e0be43b907171583a5760ebd9b58457c
+ b3befbf23f2dfcc5e6b4a83f99e478c611a096788c4f8dc394e184381abc893f
+ 5f62d6ee8f177f417450653b03e64bf3b35a242af211286eb4f9e859b69d4869
+ 8da619c23ba2b053cd0d6aa02f9db38f2d95f8c133dbe9f2f0e3b9bd2f076c95
+ 3838a99556c6e9330724cbb0af909e909d4f531e5da43a132c110f83aa26f50d
+ 6be63e0f0af0a169ffe1882c4b1639b4854b46416beb3c29ad74b2eae33e660f
+ 6984afe5bb05fe6e2e36ed403c67fd048b97f086410e85bfc883a9a44c416b63
+ 6f4314e3f9296bc19bff3a491aca8bb4bdbf6c2a5fb6939f00c752441322d947
+ d608bf88924faea24ec8f8a76398144e42a992dc3af1ac85c2a9a266a1575828
+ ab8179e7ae2f5d10d13325d6e71ff7381c74de32f01130a689cc60b0a2cbdd61
+ 8e9354c0f47ca2a38f4298f8b289ebfa1f26a2031b476454cff3f4fc6631e86a
+ 17407441be24945af71079c3e9ee832c58c00f9b298ff2e4251f0b3206ecbcc0
+ 816926d8fb94c2e8ff4c09e62accbb77790cd1f2c5d311b23d533cd9eacf0d8b
+ ded9fe67460d833f4b272c1ddb439927146a73d0ea7761e6dc64189199501c65
+ f2aebd6be9a41f6ce0e4352c88df6386d6af2cfb296b891bd87971b7ba6cdcda
+ 6e70cf316101b35b308acee0bdead3b1771cc14225e5442fe8a3b609b34e8a04
+ 4df225946ccabff0a6df2dc63d40c37bef8b4aa811decf6d2d22cc9abe696c51
+ 5d6a164488e9aaa3eb83e7ed0ce7bdf7adb018cc91d4e6ec848fd15301db1d04
+ f2c97891858b5781a6d342a5a55bb6fb035e698943deb73d08074f389f986992
+ 8b1aa05593ccc1967523ba665a32337a8fb972d593757275e1c5dca899dfd0aa
+ 46b2e28725777ba4dc7ab224d824d364839a8a9d163f75b80c9c91de5ea9f3ed
+ a2eb20e4a549ae81bd38418d2d48db8463c2cd27438989314a35b8cf4b68f042
+ bb3de23d541a50a7e833091a859488b5d09e74558821280586b78b894bb9f40b
+ 5499ed891cfb3a25ce820106507fd72e610d0339d741b10f557df76dc5888521
+ 3afb57cc2dcaafaad126c3a144562ff8aca51b85b393f7e3c1bb3f550d6cb1da
+ 83f7b1674aa12fe7df4eb3464cf06c24b428a6e973fb42fd5997743e17b936b0
+ 51a31a9dd5f4b3d62de9d2a4f18e3e4042d987502fc2815531e3ac3c8696e794
+ e7027f0ab10576efa0d6ee658c8bb479875c75fc7687b227476430081efe4830
+ 77609bf7410a30e7e397024d06f281e8f57d2da6481566a710cc6020db2ac626
+ 499f085f22c8dae7c571797f9481c212d0539add668ed47e0ea266b26a2e73d2
+ c1deebb212c67f99aab7ba1ea98c1047f034f51c11cb571f062c213c7e97d3b3
+ 142ad9629f47cc0525018847b36373ca5bd1308432a2c6bb0b4f3e0d4ac5f5d1
+ 36ae451475a4d7bbc6f8854427771f67734e3e36408e1357f395909172c35a44
+ 8146fcf32f32bf06dbf473374d8c002cedc04924e32b18a7a6391d6d14c6505d
+ e5dbad8c97a9c0fcd1346e55de38ecaa509bf617825e3fc06ca79610068ad7a5
+ b28e15ddc63f5c1e887102ff076c2bc05f0b8b5c3813f84c01c4fc524a99c86b
+ 33c91d438fc553348ad902199c5e4ab3d942a3d3d311e17366ab1f684f7d3125
+ 28de691426aae0536d844c1e8e000c9bb21f930ea59c02d6e86eb7d3fe8a3876
+ 24d0095c4863dc46dce9ba15c2c12e0874e3ecc291d121813ee1f91e7b18423c
+ 1d441ac5a80caa81589c8464169bf45c967d6da095091a17cc52185277b0aaa5
+ 25f0557e1a163d5d13bfa2075cbd3137db0593c7185792607d0943253b175eb0
+ 805e4b0b6cfb276a66a059dc538375be9a79ffe4a4186a1f0bad524a02d22866
+ c235740294d2ab44fe7d45ef442c91428207fcf6032115e78c4202f17a91429e
+ 906e12e55da329667b2f127bd1060a49b6248552283d048bec369410d2af6b13
+ 69a9f8984cdb0dd8327a5830578596211dd710154767d4b90ef4c89b39e54eb8
+ d2bcfeaa43aa7a5f57a7ad0cef81335738119341280b3970acdda182b819ff63
+ f5eab2b4b49d756dcd211b9e743f4f40b12be0733ef14b4ed83b1d76214e7bb9
+ bdf6299c1acec76647ec07b81c898928125bcf46af323dc680f95eae423b8925
+ 09e589204899291f10ab5e384e10e175dbbeade6f37390900a18fa9b87b7c249
+ 9ec97d18701e3f7e489a87c771e6cc071899c86529357ee7032c055b435be1ed
+ 24af24debc1609ea75d51e9c533e21b34a2a88a351e6e3ec0d224767d9ab04a9
+ 1ac2fc104a68328c67e5000d60fa64d36cededc36f7799feccd6c0fd3844507d
+ 6b3c9b67af7e60c87832c034f9b10870d75e8c8072f72487df4a470eaff36093
+ 0e96e886cecdc1545eb239ed6292a86e057a5aabf906aed85e5af55074d5a42a
+ a9c3731e344b17ede4c1ced329923ee142fd7b0eb81aff2a464772a5395ed99c
+ db1384cb2c3364c5dcdf636afce6ee247bf61338ce25367daf1dc5912e858906
+ aa9f0cf239215de2f7f255bc12466a7f42bd6254f606859a44386f9753e89e39
+ fd6086b8e6734dcd3782060e8609f847e1ae6b4e6ce76d109cc0171110ad330c
+ d0e41cc3b4e4132bb3d29df32ede3b3a0bfa0c4d3797c6bedd44f53a6491f014
+ c40a4dca2490e4bb11ac65697142280acf3063959762e52dc9a625d4bdadffbc
+ 8195d29a676bf6ffc01d39dbfd8636bf7f14bff438761ad6db6aef3a2da98ccc
+ dbaec79561f9cdfd58cb36d1956a3b9f78560a15ad805d76aa9b2c108d6a6626
+ 1063fa59451f659342cdd6c1192ce671764ffdd0327bb4917603b42ff00549be
+ a32b12c3e759b4a366fb28750ec5fd6f69d2a538af928a785f0c54f2c2ce0752
+ abb22af833dc0e36308c889961652067de46992def0c30db4540695bd201c455
+ 63564922e8d0fe43e76b3fcd43ebf2e29062c49d9e73faebdea95baf27cf0ac1
+ 8fdf86c0300492a709d069474689f7d1a4707c87e5ab33c1e61d85ecabc7644c
+ c31978ca246dc994de4f85bab122a961be3daea942a3a70e0ba7feed8e102bb1
+ 0822bd0dceed2026e355a2dbb881a43babe04292b7396ef30758eb73dee1e135
+ c521f99e0c601f5b51badd48e2a3c4ac4aa1a1a1b71c2708654ff10262bffd60
+ ec4c84f5034420b69a8d8261c3d3231e28f39ca7d01367280184226cb212959f
+ 6e3fc684e880768e6895c9735adb616122ab292ed374cc0c3aef61e3aeef5b9e
+ 9f2b55d0cc3a9e2744896c0a57fcfb14da1272d97c65f1c01745804b23945b85
+ 7ab8e4457003fcd5a9a5f959a89ebe900165c4e5c8e465743d559b4ed504d6a8
+ f7d4fa8efc14ae9215e2d319f70f136639d5c92cb4f5b5d91ceaac7cfaaca1f7
+ 54f69cfb0df6f5f93e9ed372239cea3acaef800fef99fdc17112cedd9f15c359
+ ab2bfcbf6a6f9f3be35c49b71ee11d13222bbb64af164e2c0bb601b9f0c6a930
+ fccd3fec6a625ec370488c03319bebd6bb2d78c5012895ed29d01222c40ecf39
+ 5f5a29db74ed587f9da37877cbbcde4534d9409eaeb34085bb705ca2ecdd93b9
+ 25a11154f85ff81a43b5b2602546ea9d1367cd6f81e976b1deed3e78bd1712c7
+ ecaa9a454ac3e681776ebb30fd5d58321323f8992c084216d437af8195aa1212
+ 8318154102bcd85b822b441d46362d922cef54f5fefd290e833658aa51015b42
+ f5b11081c1328b41fa176f8c1aa2279fc4ce699356395ddbb719bd270183e750
+ ef8f4a5fdf75e38b15ee149d717a2af622b9d08af35721e75bbcafd9c8e3f29b
+ d71275a0074d0e7828ce8407c3a13ab19ba5b916de74f4f609b6bd8259cf27f1
+ 1d12ed11252d2cd5421233aec79115bd74668133dbdb585b5ebd62528ca5aad3
+ 1195151f7dbfbc4af280e0877eeaf959acd945755086650a81f6e19bba0153b8
+ 13890b760dca951ba6c9a35a041b04904c66d9bd421724cf97d1a5d7ac972496
+ b62602c3ff624202b21c7244a55736ea6871f8e6dcceeae9b5c8f9bc8a0c59aa
+ cd17cc5003b13237bd599f5725c9c6e2d99b2f97258dca79e1fe2396dbc9d10e
+ 603964aba1a53be70bb214e3c9556dd341148c97a9615f492c494866104be677
+ e1bb551a2dd5adb3b349d28ddd6ca700f7367303e4298ad65f47055d4ea878d4
+ 95a52c863c46410e1cf7194823562567557ea255314eb230770a429c122fac85
+ c28ecdc3a929c4b4bdf67f69f055e59ae2d3feb6de0bb68632a1e6ba3369a4f8
+ 257ba5192a8b8bbe0e0eadfbfb188fd5bfd269f5febf847970f5a61612f84f5e
+ 8f71299b66413d37bb23f8ecd17871dc52267d45b13746788d4ae5e231ff1f7d
+ 34ddf738114cb4fbc59fb1fc629000e86bc55be5ad726660fa3c151e5d489718
+ 211eec744281d7962bbafde3511ac0cdd9404459f026903872074b38e0f7af1c
+ 0ac25103ff396ac1f8dba9731be016cbad5335e6718498cfa6b299a693df0db8
+ 0b203dc874627548a47ee4de2cc95853ce703c26ff06a11f597792b330eced0f
+ 147f2f9a25bade18a35622545a5bcb0511470759b8308c4040e679d1f31fdc34
+ 96a75f355c2884a79379b78ed96ed7227bc0ef987ab9019af26596ac5df13c73
+ d164e6e9de4467fec03bfa8facd047a670f9a93671cf68dee1d970ff339dfb07
+ d0ef7653eb665b948dc452369591310b1458c51bd65ee081ec52e5cb951db0d3
+ aa6255f19e787c8267111c311e5a190e39b896e9c7913c526f9e8edc91a3f2f3
+ 1e711840db26b9659c9d5a1e9bc867f2452b28cd0e8f935ec2e5c52d7cfd6911
+ b1e4814231cfa3cd97a8ebfc2d0d695d4ad10c23fbfb80b33f72d2be1d62d058
+ b3c4b5190d0eb7fc8a142ea86aa5d36d98cb8f4075cdc82331f5805534ade1ad
+ 0a26bf8dcb68626fa3e81778155251fb7757f3acda9c4d90391924a9ce42ef56
+ aa95616a04d2e5517201da4220d01bb0a65f199c7ac521f21cd76a0ca72c8789
+ 9a15af165ef4cc9f06d334986229bd9cfc9b1b3ffcbbc5b1264d5f85c2ac270d
+ 2d5c436cd982ef32ea36259f0bbe9b698fd8c7af520051f4666c48ac373718e9
+ 02b542364f29c9f7c9e24ba4344c2a8906ccf6d27580ae8c84d732c38bb8dedb
+ af3f9e09c535f7b2abd53dbc0341493de19774ad87017a6b9d4e8ba15dd029c6
+ fbd3d88935e2fe7e8be70e3cf49054dc128798b4506acbf3de63c1824941599a
+ 7f08b21f6c0e10cdac1c973af9bbfe6340005154aad84a7b8207d21b698785d4
+ 747585e632b045e92ac530a1842050c4f9b163800d4ad2fa057f0af9328f6263
+ 9836853f2177b6d8c6e5841c4bab92e768d66dbd900980be69c3f1aebadf4b9d
+ a7e0d6e937085a1a929420824d21c80963aa49fa67694a1db456893952224fc9
+ f68e7bfcd2148fb3e06ec74ae8dc440111b7466148a86c0bec9d191b3385a014
+ 9a05efd512ab66289aaf2eedb0d3ad01ae473a8526acdd5b3b5c57d7586e9acd
+ c849913cf2a09cf9df483bd6e82bdf96b8503967242ecba52cc860cbea0eb360
+ 139ee68ca1c52e4761e0de897556447fe6501d349509cadabf2d6abecee612c1
+ 4865936827e95fb553f63cfb95b9850bd5bce2874c4b2985a563da114691d026
+ a2199651e33dedfb792760882bfa5cb6d42bc397e6d07a0baf31efbef093ec03
+ de3e39bb1f6d8bf7360e534413a9d8bc1fd1b2d22cd48edfa1512cc2a42e30ad
+ e82fbb51d05dce16a8426a392bfc6d54f0a6909047e903dcdc47f47227dcb332
+ 2c73fb67d7adb32366c16cf1a896bf85b600058fb58d5f7a72a9c03f019dff50
+ ff129beff0669c337e4e1c775aff5bbbb53cbb10b674ad75f50d435c4718a58d
+ 1625398e107f8453120549a490ac1e5abf7bfe00f84d328855c76e4f9b2f0984
+ 437575322ee8f23f014da99e76beb1073fd5e928947c91bf91e2d2844a575565
+ c648ed0b09747420bdfe1c484b3c770a23dc8b4803f8c22fa19186947508b1e7
+ b8bc6aaae12291f0034c543822ddab5298cce47864ae92e3ecc2b054c3c1cf7f
+ d4b2852963da2b190f53c490183fdb76f880ee05117ad965592de5bca697d5e0
+ 186faf76bdd8ca10046f39946a56bacd6461c7d2a3a4f89a0a709b95515227f0
+ 47ae274af6483d3a18fc4cdb43ea8370e24f8bbf29375fc16f6f64364d435ea4
+ bfd65fb33082f712fdbc91fd6e342b8721ee428822d7e356d2c0bb0b488878df
+ ed05b8b074709634f35a9f1410d5115ac630fc7740aed4d24d0807ee87afb65d
+ 619c349574ed5fff0543ae3d3b71e75f9a3f8852b351925120ec5638b06730bd
+ 3b05df179fc094fc6ed8a300bb65907a68fabc430a82465e80c5c324eaa23aee
+ dc68950ce81889ac11fa264313a7d4a9586fd875ac468c38980fbb4c07375f6a
+ 1ee65eda3f6b2c3403759a9c2a97c75cff69871179aa212f5e737bc2b16b8d3d
+ 624bcfc43a3b04fd71d0981d509184c76e2c253c7258b2859d7948289cc46dbd
+ 8e6c62affce4cca99b9bd47e43a9931e68e9f5681ad88f7e36b0abe91bd44421
+ a452badef36aeaa986ad1877b4b3e7778a70c06e313828d247ee16b7a523b59d
+ 3fb9ea991ccc8d47cdd4a588999fe86c9d8c9459313db2cdb89eb8a19537821d
+ af6044f7a1a60d142eb71d5c4cbdd2e095b940281d705500bee28c087e66dc9e
+ 8622d9a39a1057e95ad0b7f79b76921a1ef9149ce9f55e758f8813671ce98cdd
+ 3778559ec6681e8fe1421de41a30bf299c954c247cc6e3ca9cdc6b88e2932847
+ b486724a1277bf8c4e26688bbddd3975626855452e13cd65b6752a2e58c5e947
+ fb2856c96415e8c59cd02774955be000363be471e908812427ed73ec6f9daf56
+ d7018d80e8d761e114d9c7d18873b9b4fcebfbe9a9c093ef5b5d9658f7bcb2af
+ 6671279263e7fb873ab8abd304a56177d7c8ef6eed659e9fd1b10990d30abce3
+ fe3ab6bd98fcf2ebbe3cd1fee488aeebd3f9208f4b728bea1633b5865dbb9954
+ 053a46d78788c5610f3a6fd2a0efa46aff471963f45ce0f2bb7f115417c85bc7
+ f10e8ee2780c750cfb9fe51abc86b2e7b2f502a641ccfee21c726a8b48311d6a
+ ce038b41c717eb7dc0f367712d7819d294d53ff020f68dad8db9e5b9ec83d6f9
+ 552ffa1ea3e1c71f632c64bc46d7e094365082fea447fea055a8aa849953d4bf
+ 1f1fd05156c50a7cf968c2f6ca8a78bdda3a45fd9b00f11ca734f4a97852db2a
+ 58cee8fb141c6aaee923f32213cf7b0164c4afa0c2a67333588ef152b95f459d
+ f57ce56bf101c21102252bf550be1a60ba9fde056d4875baa8eeec18d44d570b
+ 0089edb8da77c688e56fada6d08f666c79ce0b51ac2bff1169549830dd2a5de2
+ aa46b046deb1e74b5a779e79483b0b944cbcab27fd4e8529807802f808b6273d
+ d33ff092739bbbc69e95fb2d2745aa2e184875aba514a53ae0d249405e23c0da
+ a80712ae90c646b669a6f7d16299d61bf95eaf1a6551b17100754be13f7df7e3
+ d1cf43942201b95623499e6e3d7647615faca6aa031bdf03d635894b2a1df8fc
+ 1098898d549fa387ea3d542cb3b67bc3b7b9de8900ca26f32598b576c9b5aa8a
+ 7557a7da55c10111e412eb43bf4fb5ad5cee8466e6fe0e34800b6d49e2d02820
+ 7fee0db875cabb1716067d0570213b7239ff230670b687d8996bdd5aa192a52a
+ 5d462acb5568669e7d3bedb433f85b2f9a893e47ee9f8c4b3606e87ed8fd64df
+ d01bc0826e3c7700d4d0e8d9a771ca5aeceb9d599a899cc5e8f8c7084798c847
+ 2ccfd7dd52945d264471f63bdadd3e8adbe6e3d8547cde049d8f354dc287e8e6
+ 83a5ed0124aa29942c337065f85f49ff343a8412f863b3f505feabe2be881c79
+ cb9cba2ecb55e66889844a4a7a270e126d3c234fee7fcfa4a480d94e45305625
+ 0229ef8a83191ddffc66ceea0979bb7ef8a6e090d58909d848c3b0faca6dacdd
+ c9b14d73f370c3d96a5c61305911b574bb4b38be6808ecf6ebdced45a31faa39
+ dd87c5ef7d16e8d535c0f77d9095d75acfb997311cbb41405bb1a4d4057ce7fd
+ e2d81213e4e18603da9913a4996413d90fad50c5df695ee90da2092ffca30975
+ e21b5850cc9e26db8cf016b776a411b46e77cb6b8e7fc0b62b370996633d50f0
+ b774212509aa057712a9a74f6833b1fc9b6c671b96c735eabc082b699aba70aa
+ f8ec3e7318e4c86854e42d1709e3ce7407815d14434828e4689f1d37195d381d
+ 1aecbc93327ad1261b2a80bf9b6db5e4e38d544a68149ae6d451d514458bf00b
+ ecc47ce8a4ffb0537c1a1604fd47b6dc740ccab751358d23316de5a31607ea90
+ e8c86a9ed0fb853dd3d5db63a9437df1a05ab6307d42e8d51aa6763b70c8207e
+ 27c65e786b74a3d216722175a13286e88d57b9dec885384a90a74713b82e3a42
+ fcc239a07352638eb8b6025c8b2b86a806dc715e2025a732aac0e6723e5ef4ba
+ 1e2cf18249b1cedb414fa6f31b5c59b017f4cb1337fbad43cc56fc312054552f
+ 8e5036d1f9804c4de89f7cdb4d38f8c9c9a70f273401d52fb5368dd155480b30
+ 006d6ba9cc63e81b8be128f6e41b6ed3ed8bf69be5125219d2c1bf9866d10c21
+ 76717d7374f2c8e3c13b46cadc433a4e899ee526d2f804e9f6f19a4fcde068d9
+ ae66eccd54fb16cb941198da0cd1da8e3beafa56c0a7b4285efaa305c13d1502
+ e6b4db145b12964d56d94d7659e1bee66ed2b6992532cd0412a767a20199dbf0
+ 8751bae109f1443007de8afa46b4fb1c3d1529c0a5f4b2b9e777f3b31ffb1aaa
+ 21b3e923087038509093947c90a6bec66ae47cf0692cda06863aba8da5a4dbfd
+ 751830352c379dcb32951927860ed26a30fbb37fc5016b62ca0d106337a5f0af
+ 4ad28f3bcebfcaad13c9979dcbe6cccef9a33b5431adfe0837377c6545dd3503
+ 9405ab5e839fd9bd2efccd279cc60112bcbe7a3eff3503bdf9399d8d4f698f36
+ 4eedd52c6296dba82b548597da6f90e89fc45a00edde5464dfac1310ce57847a
+ f51a43cc916de9e015133444ccd37aec167b15bc584969b68cbc9cb10b4934ff
+ d8687759fe09b11c6e8431d80f5a45a9021aacf422b324b9b9bff1632f5f730e
+ d817f0bbf6e2ff0c06fce9465570fb3d813dde9a99889acf1eb0a4f0bd59f486
+ fe28ab90c02080c0fa3da635dd1af1a939380efe11d271c560d664de79cb6d19
+ 30f9df79a1a0f48f7b7e77e220b83d27a86edab40790065fef83d1d1ed921c31
+ e3e455271cf4ce9edb99458557f877c082acf5bf57f41d70c67c3f95991c5df3
+ aa0df8c98fba4e027c741b3125ea02a7dfccafe63e5a3535653b34d412ed3c58
+ 01abdeee1d09be8f6fc6047ecd2ef80b1e282c647f5808ceaf323b798c92590b
+ 6b9a5ac72399f0062d5fb49aed0147c4bd670f013bf7127987cacce8f432110d
+ 0e4f9d16d1e4a61d02e540b6e2613222e149b4cad196966ece69178911a37236
+ 3e2896769498d929cafcdf41e232f13d21776f67a1b4e8f19ce65ace09d8254e
+ 3a267dd8ecca254acfe8d0e5d3f6b9182cdf4329598734f238084ea761a3e952
+ 07ee6318cf1ad95a287a799959f940d492901bb21856fbaed512b6c62899fa96
+ 174f7b7ea0e837bb47be35029a0f4b5e4e6afa428e4a00864e58da114bf7f07f
+ f0d427fbdb40f3ae74d18e23822805c5b3e425bf7bb528524f49a8f428d5051b
+ d7a119d25dc7a741825ab8e1845de2893eff596d718e9d02aa4c76693897db02
+ aecf8433f26ab003893daef74fccd978a33ea53976487aece48d3869d752ccf5
+ 2b7612be6c261adf0c81a16b41aaf768c71c346b009895fcf8e2efb05ab79a2a
+ 51f9d9d9953780734ce8624402a205838fff0e52cdd3d8f12be91583d214fbb8
+ 9f210a307fc1021327b4aad31e8a6eb130ba68ef41436db06bdce9c88c5b25dc
+ cd29015767dacca8d0a37b109e2972691210b2a36efc93c640424dd2a78e0b11
+ fe9435bc0a65e5c25cf7cb75941d5aff9a971b84673b2164ded9d1dfe7090a1d
+ 469732c177c4dd03c190a20aefca1cd7e048f73e828e9b92d17f3383ed5e17e2
+ 8166f29ee8cfb51771619fe97870bb72d07706830db5e6c5e512d9694b18ef15
+ 7bb17440c49af6b108a32186e90499d298a848151fe80d46b1c1b55f217c7690
+ 3bc3b7366de1f3a122860f8d470242babbaa9de5cb7cbe29dddac6dfeab9638c
+ 162c8cc3ebed23e2665db34e008b4eb17c92d35e06649e32d892dc43d6ccf559
+ cc520cf9b1b5fe529b106640ad803ab7a9b922700357dfd96d854eefbc1bb68f
+ c7bc74441ff6c599cbafe4c668b517e7d9fd2d225d7537d2ba44e3a6e6372911
+ 77a31448b12188e0916a0605eb52e7b238cdf15486832ffddfab7129581642fd
+ d941f8380c623289c50b930c098b432c86750928714223de6d7cd4dabf02670c
+ d2e8ca122deaaf32de9f36685b5ca4a5f386cc2a1a245a24ad144e8cb669d0f1
+ 6ef01662555352ffbfc2658e97169cabcb1f03f252a14f74ec41c63fea7aee65
+ edf876cc922705b6572ed670ff5ad53cb4a37e6b6d6b1553e8134f811b618eca
+ 5fb30abd7b38dbc2eb382a793de8a243eebd18c929785e8e53630b45f6e4235c
+ c10c920a7b6a2693f9b4bcd1933c90b38d4bbe65a896d7e07805f04e5413a809
+ de95859c3ca156b03780cf118844e80ca1623d5639e64d25bc940d52fca09d9a
+ 8c7e20ed48ce2fa67b89db430102c223145c635cf6ded4975204f1b8fd255d5e
+ 88f2d92d5755ea8a5c10aa20e0d76b16c609f029bdc7393954f50cd841479391
+ 39b2351b818bcce3db599acc91e9a27707891754c889dc96720110824dab212d
+ dbc9a2cdc3d7fee4d4547f9749fe086da7a0f24af058f44f8a8004ab0a7e93a2
+ 0b732a9efe3a7a8c46859b653797d28cc0130cb2591e3f18f9909f04e57c1d9e
+ b62aad9959828f67b09a7858621c5b1cc3b75cbdd304c3e4a9fd4c1d8eb48a5d
+ 55bf9c697361f2d108162b1a95ca55f78777a0bfec472e2c099a901dfe9973ec
+ 6b90409e8245c41dbfdf774450f207511dcf8426665e335d80ec895d5050624a
+ d4f386d6c305f954d7e80726b02848746feb55e98bf5dbb61302b28c769c9f88
+ 34782b0c480fdf5dd635e0e924eb705f6146e9de5a74db5d10634fa1f2fac878
+ 8041a1feaa0d1fc58170ab41ee12ffb2f055e9e27082d9c45cbacc290c498f89
+ 4504a33935f09635fdbd04de1a0d5ebd8648f8d118b2154bc650d137710948ad
+ b4e429e7ddd8b8a3f1f960dc59e0ef6fd21a3ff1292e5f74d055a77a274a8a72
+ 86f12160752e34f1f06391644848b2e5105034ef50f50d4d8b2ad1c07cbf446e
+ eae72e25adb21c74b368ebdcd297a1ded98588a4332a4bc084e184e7cfb8be8c
+ 1165f910864d8866a16830e85eb45312ef00057dd51638d100c27238369e4a2c
+ 4bcd9702477a438e6aae75900963d5eaae2d8a5f9e25f677f42b9eabbfb78c62
+ 40eb456ca60cdf5dc7ea405b601f06ed4a9ad3287749fe09fa6734fccdb5db1f
+ dbd37e0533fec689c17ca43489e414f6ced598e3da596b339e9ccb6b585f7c92
+ 2d2189985023f8cebed436872d921468cb1b7f68f98f44e9c160c69fe02a482b
+ a3ce6add38b00fd205349a26af0e15104e7bd59db046f8ae5dddd6148af71f40
+ c5d170095ef916a9bc07355ecd6f14f7170a8a185231ff074a5a697437d142e4
+ 738a6cbf8d15649eb432a6a8fc195ac3a9503704f4b93a0ba8870a63e1bb64b8
+ 8c604da504766f63ce4ec6f5d08be764217aebcff5e48e402569e454c83cee53
+ ccfa425c7ad7365173728688e4f91ce56348d8ae998a0ee066ead8edca211ae4
+ 32873817b8dba7d4e1fd51646c63dfb1909905d7e7d84918cce8536ece5b0072
+ 8195fc635c1eb03dc837c2ce0787371efc83a64196d4d6124aa47eeadc6d79a3
+ 87fd7f594f260ea3190392256a95ea00e5496ee31b5630a8b56707225a411fd6
+ 1cbe67ca8c06ef6cf9bba82c859dacb5fe31edfd3784d5f474fa085d64e6d25c
+ f178788d6042113a1e4ad1825ffff539f3f70ddf827214d8dbd60240fba6bb04
+ 7186ed4d8c2387de399ab27fd12a5f1f5bb366b1f276126e50abbe16e35e9516
+ 9445a587ed3d5e3c558c813cf476209b73adac3753445d480b584b4a402e04cd
+ 6cd0fa3d6cc3f885ba1a450937d8857276857306c954e4f398731ec18238932e
+ fee5f029b4e3a4ee58a1e8c5f0831806760f55d4043e4e0c24580c8e5341c137
+ 7707f96489f514b0614e1d5c36db1eb4415735840b44bf764c46dcf324808348
+ 3a633e4d10f1b6a34ba34779612296dc4717fed4c88b3c1258c3a220c26180f5
+ 4e86385093f01ba576a74241759675d1a0e8c30457d3f2f68ea237808c0cb4b0
+ 52561287aadec43afe4e77ae63ed35e6c564ae138c5e608240bcaab8e26660ba
+ 7f55ed16fdf597450120967344fc00d8532ff06103c9d931d2b4dd1b51da68ce
+ 5a5c31e5e1ff9f50f62cbc4b3405102b093a11badcc070351bc5140aead2d802
+ 0f2da6baded7680be199fdc6e1e631b82964c823e7f73a6957c9b40f5c591383
+ 8fa531189cc51b6e37f4626b20d0664ee17396b6cbc9a1e02cb138de60789463
+ 03726b7a57f622945936bd06a42437fa7607c328874263b610200126d984bf96
+ 7eae290fb5efa19bc90e54293d791439e05ccd90dcd46be46dc2af0d81a8e691
+ deb164662dcaf93967009ff9347cacb8ac131e8219a72205a277f1b9878b9776
+ 05ebec060beccdb7c0de0165acb354a8519b2545b280d47b4bc206959c854971
+ bda8717fa2153fa7474f338dd5f5e2b9018cedb9b0b5fb7ae24e39cd9f2f360d
+ ab74448c2b97ad19a99f71b5cb6c957fd6007ffd773476048d00a95fe7011f7b
+ dc03a344f9b0ba23802f964e753cfe097b55de0387526e9fd9713c7f92f67e0b
+ 8ca450a047431443e66900e779fb4c395e1fc1e6e2a2f2950a8ff3f9d14712dd
+ 11dc488811cd42de8f503ff509f72968887c099b3bcaddb50754cb30d1fc91bc
+ d9b4a8bdb187068b5231536520a5013cf3fefa5479c4c1901136f5bc48e60674
+ c3b446f743200a39fe4b2bc535ad52db17eb2a0a513525fd282d3a3eeab3a2ed
+ 3112aaa3f9e559bf8ed72447e6ddacf006117cf0f42b2a3de6ac58bbb7e8a35d
+ 97f504809246fc66985add1bbf2e8555a1dfb1244a6ca4462918ea9c484386a4
+ 71e64a53ebfedd82170ea05273e4d2270a371b4fa9a95c23b5edb2decd3aa6ea
+ 88fed68cb76db24b163be4d9a0d43ff0707c32ff8437456fbb8c69a2faa83090
+ 66d11da9b06a3a2e659bd445cb671b36f9e54c34d5103bafa00f71c59ca9f384
+ e02126daa521055ef8ab013dd31d1186af695a996c57c2313135b0930a617b88
+ e4b1bf2c51a031fcca7f52d6c8fde8335277e2bfbe0c36b9f2c16e254724d6bc
+ 9d7378d0f6e4d68ad58ffd7456dc3ce4a52013da7f10a9d95ede1dabcf62b3e7
+ fdfd733c4f68fda8181d3b339f904cc4947ad7316b6f33a101ebe8f634ea665d
+ 534078bfe84c8594577080c4364750f75f2aa5966cd3f95f2c4fbe9c166c0b8c
+ bd27e7234336288d8710ba447372095e866d502d16e6a197b53931ae20f220b0
+ b8f3858c17973590bc47d8e46719f3611e653f175314dba25eb2abf3ff3d94f9
+ 3213e756b9ba401f543687c04d95027d80e447606791d3aa234411679225d265
+ fc42954071ba5f5b69451be5614c64fe0e47e049907e806f4e595a9f965a056c
+ 265260d8d3b9e4050ba3aa77c640351e239afc00088ab2960d766b36a351b37e
+ 2ed852f0f15e8a6f4038994263923766c36f8449a443cad63a6f7603940977c5
+ e2785461425d00ca84acd7bf0b3f886d9aae3c7dfbba7cf0277aa07d5f9da482
+ 505f0e026f168d1acfaa3e2ec5055bbb80b85a48d09eb22211cdc9e03b930b8c
+ 6240404f2b442c5f2b9796e150cc1ebd6b3a6f489e175c9a255f27615350e52b
+ 47143340df4487e11effca8d9a7837bde5bf566e6726dd90fdc32daa737ae4f9
+ a33a612455975f6ffe8a1bf53dd246736790b6897e0113ee0ab2cac8fbb3a038
+ 1e843e57bd110635ed245a58419abb61f01eaf8b1fb51c4da1e861c94ea5623a
+ abe123f7f9980b21cb4cf3daae5d0fed82f52f4094eea7e731ea99a1e4f0f380
+ dcdb264f93b13a30d42bd33af8e0ac12c096de5c3e4dff74e42111d0a321fe75
+ 9a65d78b6e626d0d9a92d0ab62acf8ba8da633fdf6aa0af4e57a2738322f5f85
+ 813e35fb2dd4ee8687846119aa49b2ec702769ec07ffa3ac38166a5ba3be0ce9
+ ed0bd6a22d789d3e16a9c7d66c387cac131615283eaa56ac798e3a17b2f467ae
+ 5e12a6902ffae5f30c07aa761a7e4cb3b4449a7886225cfd6e252389df1efea0
+ dd4da1836e00513da08378026fbfa05db7a417b1a1e81c43439cc58081b75e71
+ a9090b1d12f494d50b3c0dc98539e95d88b7fd88b5eebd151338b5e06dc97b6a
+ db82d77f3c0c88a14053d4582c231f2c2f469babbb0882f8dc4745c4aa2a4b05
+ 55dcb4de8c8b647bd38c3d409b015722d124ec2ed6135c888f94c63674bdf72b
+ c70ee657cb70afac97a258b600002cdbdd36315854a4299fc6ef078ceac0e97d
+ 5cddc4ce78573d6a12aaf4ece3bb942f5e0e12a4b72a5a5c64adf9884a04506e
+ 65e437a289f3b558e46ca330c47d432167472d05c4f15f04147f26b57b85edad
+ f7012d1aeb119aea34bf71e10525470b022ade7913bd1c38f01b235e5d0d4da0
+ 389c3f3a2285ca0af45a1139c781b69b5e4d6244506d6a6d77165167bcfc23b7
+ 51276ffb4c311a2b3d7890110b876f843d2e0aa674cc574d6550e1f59df294a1
+ 40d783fa8147ad3c4d3c6eb5c2da3750385e0751e11e5505d027a706050974b1
+ b41713e1af64b7ef97d21128c494a4d4ced22af0cf0b1eadb916bd6450dfacc7
+ e568abd941981f1ba58770fbac943191892a0111895fa8e0dd18506a118aa046
+ 972c4c7257076ff52ed47b8d1e5e7756c3b6c0c329c1c7e441a467a8202a8066
+ b36a29c1c574c987f9eed6b92c4153989f8c6954e7922c3a46f9d14b594899bf
+ 1642e6743ab441cb530cabc4d281d28b2b2e9b77d4727b14e909f6d4087cd71f
+ b3986dfb7f5f8fa46fce45605fbda72cc8107524f6750bd8073135d8cf6b089b
+ 6ef5b8ba49b734f9a7bd27340242b0326f10a330acf893e9c6cf89d313d5cbd7
+ 3824f0baec5a60f2b9268708fbbb21be94726fca5e3557436ae09903e7982a8e
+ 55e529bbbedd8adf0c0b0bb72f3393fac34dd312329d359a380104ed4ba093ed
+ 556b13cfc2b4a79481d10de5f4f1cd2ff9c61d6fe24a1b93fdb2bb2859f6542b
+ 9fa86975b9be7fa498c13cc5701c8de1547ab2251b9e0f558ecd2f56d79ee78a
+ 3dd6b1b49f6d0dade871ce198e51b99c6612327c804a771d59c561f615991cce
+ 99959410e0c1663476e2b08bde680296abfc83e99e91a47b31896ada2b875145
+ bdc007bd067124ec405a6ac34220b25a233d8de92d6ab3d64c95720bf9b9d09e
+ da806aef2bd202161915cdf19e95318852d3dd1c285641273818c359de6fa038
+ 86d5f76126698eba9b729ad74a2b4f290aafbbc3e82e3e87a3ee886f2c82f406
+ 038954359242eaf9cf999409788b125cfe301bb800ee1ed78c3fcc95147ed166
+ d2304b320e87870f66cfbc9bb05d844e8cdeed778f28199aaa1ae7a1db3805f4
+ 8c4b05cfbed5f210cc30c230c5a817aaeeb76f3a1ee8442a741572f052a760ac
+ 982d8bc54116c4f822e5c054691febc8b76739f3723cfc5cec62be69becbd8f7
+ 8ce23ea92c7069226ce0dc04ba8284eb4e3a75e09ec5f11af277f8da4418e24f
+ a71af85fc7646f8cb29d4ab2d9a84379daebbcf129f0ff89f72c029ab44b3c96
+ 7a475b8b4a3477e7a11866e53ec308b73b2d9c8e89c37c2c100250d5dd9ea453
+ 0b3f1d853f0a6e34699667223c73c87c11bc92ec2bfd380397b359d4ba09831a
+ ab9b61687e86020c059f1a0ddfacc5a3c905d53a8ce683b162ba4d5dd0ddd6ae
+ 57b026cb387062dc4cb5139a18c211588fe7f6342e065fc8ca55d4b753b08c44
+ 515a474389bbdac5a5ce0642554d028663037f1d0adf7f9fd6061cb9272bca88
+ f2ffe1d5b03d6660a1aa5d777596ac864162de09476cca47875f709e2cf821e8
+ a51ad2f21343b03f3f7a648148f59bbf8b6d5730cc057dfd156c6d9526894961
+ adc8a0017b98c70b30dabf6ace7f1e1fcec7b28c56a2ae6317ddafb81f6c36e5
+ 10c5ce0c937224df3f23b775e04a4c382e5a8185b5af8bb6f934aa8e0cb34966
+ cf58e0761da04fd2b4a77bbf3214a69397eeb5b264c64abb0578589db1e24efd
+ 03d9c9e3a875af7c6a63c82f7cdc13ca282524552f53ec3d6c05d77df922d852
+ 691e1b0484fdddcb30dee6c1266549e96d028618356fe4b698b8054fa6b4e5af
+ ec7d3fa0f97d3b4e359faa90913c77c7eedca290caeb242c87b6b5d636fef6a2
+ ebfa8c828f47ee51aaeec8081e5d379024b47e95a02a79c5f901a032e3a4596f
+ d1cf13e6f61c9dad5a0c4ed166fa9dd427c7be30be5d435435d9a50bdce54278
+ 643475fb4de2a159059a25a0f62e210948f173c2024a2e627ee87086b4b3aadb
+ 21a9f43abe2d19fa9c0b5bdca80f45386235436c13234c6dcd8c55019f897325
+ b9afc49829f96c75d646831e6d0020d3e1b39d1e136019521d0ebc1554651cd9
+ 232d1b54fe4a4835defa496b6601891eb71f5ea33b27550d56cab972e61b9440
+ e8ac164c8706d8f040beb9952a5d0f20a1fc580b1a22309f3d70c89d98e5580a
+ ed04010740c45e88ebe60ea021117d27aeaafb75245898ff84b6d0b9ae964d21
+ ee49cec1f5e1fc262fd3dd45ebf88b371e58bbc701d3ebffa72f2bcb2c079b88
+ 5cdbd3d883a6d7e8c4057e8c8028e38e156c7ea06f18d4eda1413db1de161108
+ a0e500d802e741c62c646c74a506a81f0a275210b6d1123c1751f833675c804a
+ ff6016691a125bc031fe3077e7a60ebcde31109180f4b7ab81af08782bb2bf22
+ f52a2f86c5e0455ea79d05bb25175f6a984f1c1028e3cb6133ca3f484eb75ab1
+ 0e262026186cca1524eef16dc73e36438279c4a1551d563ea5c1c5027aec8584
+ 7db2b146bcf786e42829874359e7b4f4941a9c5702488a131929f92cc5ee358d
+ 95462362d25fc60d9cefff0481208a18f193dbb6bccb85d16ba25efbfae660f3
+ 875581707d39a5e5676ff9071bc8949d87e5c5c282b2382b3b190a5715f52329
+ 598e2ca0f1ef9697a34af745808a511f7a87188baa2f711483498485821b8cb7
+ f3c67f79ee6f2508c70abdbd433ee10739727b7c403e572ae1659b425208daa5
+ e0ddcffc2f2382a6ae2fe4f8c4829e00d2d76449dd1e7315b3e1227000bf6965
+ 2ac4d1f4aad81546457ad603f8347f7661b21a33c106d57e0ec8eb0f1d2c9ee8
+ bb5e350810eb8527540627ff790d19a8f4b1da5731f117b47bc0ba62b90463f9
+ 87e2701a56fc6015a4f3ea7a32cf4830fe630fdc51e9647af75f92f221bd6748
+ 7c66dcb0e67f17303809e53154b1dcca41e11f5c39e0aa7e2b4e4a88de4fc41f
+ 83b32d01340d9c005c03cb3154d5f66f92ef4de4dc29522f9de310cd49e57a8d
+ 5ee44b6d99248ebd2560e1e5bb9e6c86f8ced900e4c131ba83ff0f08a32d2768
+ 1d3f84bbcecbc57bf1fa2f9800973a1786d50666a2bfb11e3589417486a77622
+ fd821e73b8a887e82da3add7fd11d8d6d77d90ba8171ea057ef9a40841cde229
+ 55fc1252460517209708b04f7217614b125640d718154b7e92a2ead58f2bf447
+ e240c9101e1cd7057769ed5c4f1647895683d68b83f24c91892a25d891859f4a
+ a2c98176b8ea870c29318c171d7f0bf4a025cac8c36bcec254f0eef8d1bb2e40
+ 0f69f063921ed389636d1350e990607aef42fcf6ce9625d76c7ae372899f548d
+ a439912b916e0b942e71f04682c0a9eb06dd8e2b955824360d9c2dc68218ae17
+ 35213757b3090b7caac3898034a462068caffc4fb9834bbd2c6d40b00e284b81
+ 012e1cce8d122ad486197d8abae494cd8cf7b6c3dd2cca4cfc62489a92a184a3
+ 4af93fa8864dccb4ddea58b0d32002c5510c8e746bf9dd8920630cfa484d9a6d
+ 72eadf76e3cad374abc68841efd56cda445e43669cc1f25cf504cd0b8234b13e
+ 7cbeffe28c7d23a0aee10a218c9bf7ac45cb8135da5c6abbf27773013c0195f6
+ ce08523dcecacf507d8cdf8171cf6d39eb94e0fa50f33dbcd0ea8a3249c8e537
+ 6fda6b72963a29126cd00d333d9fd51799b1b4e03235a4dc6a04cf182cebf0ea
+ ffa9199aaa1ae7aba820d5d1825682a7b38634f2d8600b17211d36dcb5665df0
+ 3cee76885b821513bc770a33338d53260abe8c70c9650b1665ab01adda368ee0
+ 272c5ec360fde8e73583932d37259c2b2859fae01eb07a016b06259fb1e67ffc
+ 65e6a4d85ea119d4a6694bd762d0fb5a49ae2840a11c21aff821dda4f1dca320
+ ce211990d514f7c2fd6ed7fd16c17d673a303334ac43cc76ebef6b9e445d8161
+ b3ba83a2f568d15fd1beccee3b8bcadc242cba4f7dac7b13a15a9b3a2945fbb7
+ d899d3465f8f1ac787d1b97d2b60741489f4bfd331b51c37d4aa999cd0def49b
+ 093d6ea63649419ba41d5aaf894e945d139c9a5afeb1c8f2c62ff74f16482dfb
+ d15d6e9b0c8e593dea0316fcc12ff462aeecd5049384aee49d9ce98833668254
+ e3b431181eaeb6a04c8074735239be66d2c09011612033204f4d607a2e64566a
+ c4ad7d951a55515e54e0efab078043be9b3fe4d3aa2f2c02eb57f20fcc663a14
+ 1fdd11ed3c2190ffe43c545041bdfec29501fb4ed2807bbc1030b50021c6b8d6
+ c3e312878709f14ceefbbc61089121af0daad9cbc3f87c7a3669b88e82d9a4bc
+ 47259b44cc064850af58624fd33f5150a4806d6d2c6c9c7ba1ebb54a0e0a791a
+ ea2b095a4702a16cab7fb8c0d4216123102c5198d69874c839fa70d58fa4d41f
+ f3726ac43964960297fbe9fa5b37c5dcf987bfe347c85ef503b970d57c7e17bd
+ cc85a0e1c5c0f6987d86f5aef28f76155c80ec092f0b1f5878f8b97d63fbf829
+ 824f3612ef4f91d535e7958729644fb2f424a4aeba3c46742d57d2d2f8e8212c
+ 12d5e5169eebf7400bb23cdfb923a296f658f5438344f4c64749387e138cdf7f
+ 88ea4accc0ad6f1a76d538a72b5a5f2e449d0b5984ab2229f0ef2cbb36f4e172
+ 39f464b6eb732be3dd16f28238d26c25c27b057993691e5013bb4ea755400f8d
+ bbe836befc6825ae225046a8df954edefe17af26c04cb5062a4b61809880ac25
+ 336707a90eb4f89021ebe8d8100a7686cac0f1553d6cb3149f628c17d189e307
+ 37fbd77e71fd6032f91237e7d0933e096098b0890408842d537899cfe7c41532
+ 6577e5cfc5b94f9f76ededd7bda459d4da2a1b76e5c88ca71ce3a820b59f7f2f
+ 1b6396c841afae7b492f9316e8e272d39dbfd477e18d7855751a6e9248b6f4d4
+ a0a042a8e9af953b6be389bdca226705a8531e3cb581c1fc556a2934b523d72a
+ a79986ccd0a8f30012582a7732a6f1ea8c76c86fc0d3a8135a992dfa2039304a
+ aab8e6a85f7c5d8fdd84cfeb25d5d05a2b5fdcaacf479d0fd894df48bfa46a99
+ 2b3cd1d23519254abfb43526a796ebbb29130650da4047713e7d7a712aceaf90
+ b43caa4d34111558208dca1e1a2873397befbab471214330e60b383d9a823235
+ 1bee89e327c1a36ee56daccc35d9c46d929809461845424f36ab9fc6f354c24b
+ 882ad0b8f4f9364b1fcf7ae6f84d0738d53e4744e7af73b194683c957a20ba70
+ 9faff23c41416200d2d1cd3cc7fd5a685b0b75c78f0dabf3a56a95117e1a1ecb
+ 5bd69d83c55f3974b5a8afe2811ebea990e4cce7f197fd6082fdeda0b4e844eb
+ 36524eec5d63aa60b16e47f78ec4bf0edeffe3d3751ca292f288b8220a5fbd34
+ a36eb9237fafd2b093228109c40c16b3f24a23ef770885a74f8977e174b784ca
+ a7a0c2973d71254eeecd038839ad89a395587d3b0c43cf0b8f6e8b2f68faaa78
+ 48bd188b4d9f09b6ccdf3ebcabd999bee4eed725280f08ae36dec6c9f5891ae9
+ da26e56ccb188175b298cec79d888992ed2ba17932b56ca1a744f84a2d1d3b90
+ ea7e7df147f572317a6543f1cc3563e90d6fe9c634ec1c904242ef2c3a1c80e2
+ 3cad4fcc7e1c3025bf342db972b08e4305bff900d768633ac8ee93e3ee277d2c
+ 868d05e7b9f5d3f720256c1da2629cd9ee7cebc0bb6729c38cff62b62c73ca0b
+ e6ce3e8b0f8fb86fa79aca853e3ed832222712cf4bddb1537c8dfb9fb17a97aa
+ 7389636ce705d607166da2bec90bec63582ee4d756f0285de03ad0b0c0175dd5
+ d7a33a1b3fa1209cce9a7ffcbb322b19fc94aa022b0623c75cc344e533c598d6
+ 905d52f459b945a4aebedd90ef62e03c860a2218a404d5183ccbfaa03280c2f8
+ f0c2caae5e2225d6b2fd495a24e61e1e73c6ef57b313a40ba9346f1d66afc6a4
+ 15e3d31285f788e6bdfe2089eb9fb90c18a0c25e7e808346879fcc5608248e60
+ cf45e77e6fd418e703ad7500820cb68d9608e84655f54e8ae19fbde08c9af965
+ c1f52697d537b286572ca750aeac11da9455b18b21298346cbdc8734a09be913
+ 1676d5cdcc71dbd731ba002d89c80dc9fb397f9baea3c8e7713c6372ca543549
+ a781c5dd1fe11d715bbd3d2e4ebe43019292769fcd839da1c70e0de51c2c5c50
+ ecb8747b4a99884b23ce33c7bb92400cf7657b6328fc12e59cc7392545fb3ffb
+ ebe69c81bde30beeab8ece85a6c528ec4f3cc69f13f97be348fc5a96ef075f91
+ 35493d447e538eb0354bfe60372475ef2cd9840fde59998dfecae7675757cb37
+ 42beb255dd31e043353f56cffb00376a3da8b8a081a023be915d9c9bc00a85a2
+ 2291dd631db16946e3b502a560c0c1b9b47912d8fe0a439fa139f086b19b9576
+ 798fd459e30295d7018b95ce209724753a0d28de9c3e89208f3e567ce6288d4e
+ bfbb4be1f9d0ce83eeae3f677be20ec9f1fa9d0bfa59a6ebc41b7b0612d6e767
+ aefa021138f39ae0b37244cf80880e4eac86387f195f13a05b15c547a3479bf3
+ 7089568e04412ca24440a04a28c65b8f414f4c3dfdd08da055445452de19c002
+ 93630039ffc53a61eaaf391193ea7ac35d2bed9353b7548f6258c6e834dbc71a
+ d7c90736dfe32f7f9d0899c53b5f499fa5c94364a6bd7c0e37a9063f60208e7b
+ 61ce357301fa10046b25140ff053188322ad515dd20282da03b82a8ddded02e3
+ a2f1de3072815d74194b34e6fb9f116cc4e664170e79f961610dddebfb911f7f
+ 8308c2c41c2bf8e07cf3516bf8b2e16ae70a7ae49872da222ae59aec4e14d996
+ 39c9c388628ee70ebdb97985a4a78679734730d1da1b2e15defbdff61347659c
+ 4cbbcf9a69c73f69435f3e4a40709c0c47ca6d8d94c2474fd6514f5a07a0dd79
+ cd0e6aad1a4f4fb383b1bd9fdcb8243b3ff6db5f81c34ece6480f63e2146daa8
+ d982c2bafcb01a28d00a9c9b082511f1b2dcee7894efd53f69bd4c6ee8ba06da
+ c3d921c22c43839f88654551b86dcdbcdb4d762b4bf79809391b748f5fd315da
+ 7caf3f009ec4bff6246137b88cb6f6555a3bce5a81555ec30ed1139362ff0cbe
+ abbe1aa1bc445a90f77d4d0a68ec5f05a8e89752795c13b64d3c9871ed092203
+ 2ce8605da7f727ec357fe20e19215ae2b1759f72333b078b916e0ca7ae6a54da
+ 2223e6f5de4fad934700ef001ec57b1d6570c8872221820153403a96ed5e2d14
+ 47cb1beef6d1719050467a74501a245c8367729b7bd38ef67eb31b824dd2c6a3
+ 04da138bdf58db20ce424b107b06964c9381f2ec1d936683073fd74808c11004
+ 255c063462e8f547376bdd946c8a7af73a0d51b001f2be236168b29d67f9e31f
+ 0ef099763a18a5f34546c205c98b6582895cb712c036716d1801b70b5d2fb3a1
+ 2ddc85703f0c163c2b8e2747b45b3d9f9149aab695468b0a5ef4a1edb1fd4ca9
+ effa142f1220cb7b29abcda99f1cfd17f6462d0f5c4699d351776a6eac8680c0
+ 3f0808ecb575ef30fa917981d80c5a2936c20708c6108b3b415c617624882830
+ 0e14d71c75b774aa78586519a57738afb9814806f1ddcdce44d26fd55ff3c725
+ c72694c74e31e1a3b59c9725a718ae5789e6e6dc933beeaf42833488bb0768e4
+ 2395165bba29c0092c6d661175107c63ac34a8556254f45060bf3fdb8eebfade
+ 6e4303cd7559e49931ea97150abad4dc65065d023d84e4ebd0cdf5e8891b6955
+ 4668816d3d934ce7ccbe69d044e336d87bdc2b6b3e6f1be3bd5d5f746753e883
+ ec0a20f503511b3558b3c2f2bd5999b660f0415e4b002b03d2f19681f16f7f21
+ 7df64c83f1af92ffb5ef4386ecc04f9b5846b7bd1f3e80200dc04c74442fbb68
+ d4c94a595244667da4c3649e232904414d52c6757621837166afd0c069d459c1
+ b75fafd60ae5dfa3df73a3aa5173ccbea5e32310ddf0d28ad03672b8c57bed90
+ 5d9290ce0bb0b80a4b0695151e97f8005561beab88c4607c93d66324adf7912f
+ 7399a3597ec9fa41fb92eeefdbfb671e4e8f84a11c3b33f2e5169c6859d7e9ec
+ f7ee81b4d927395ee3f1cbbbd5944d64cefb71bf193fca8423be6bf556367e03
+ e57b10b26938980140cd1929ae556462d1365d2bd0bf704f9d7fb400a586971d
+ 83ececb2f8180aed435d290d76430084e0bb31e68c0550d5bcdd46aa19263154
+ 71f63438a06e0630e1bba73522bb033494def3ffc74b55e7fb8cf7f67d24be51
+ e638dca700abedeb1da5e5032f6e26a22c3e23944b44513ff0f8599debe76394
+ f21e84b8eddb3bba56a8d35bb71cf0c88bb35ff841cbd52fa4ee1d3af1c64d1c
+ 1d9fa475d547925a594192fa14fabe0661f2a6b2cc39b61f7bb7e4fbef08d58e
+ 3ecc0724c82901ba0c58bd6518e8d9376a495a944d5d964dc2c71e2fdb342dce
+ c1a1ff55ea8a01dbac1cb8dec5713083c21c68017840caab392537e101210a4e
+ a3fff33452f48e455ae679b88646d77a2ec3fc9444f51934226925157da5c045
+ 0695960d4ec16de39162c5c7a0475bd3f94a3ffcfa607a3ba545ddcbbd9a4c52
+ 7ec6d3f63b22ada19cb6afcbf3c31ab7c7f668e90d2645424e52318816fdd6f9
+ ba0450b6ba29d537698f16871eb3cde5eaef9940a8220b2622b6054106fe6246
+ a72747c2e0ee14ae94e2abb5652af38aae2e75fb0b46b1e82bfea39ac811573e
+ 1c1c581a9a547f6ce6e6b888a4628b1a36c4803fb597124faf447d4456ecd738
+ 255a394b651f9315e7b24053e30a2b55a3231558bcbb27e5732e246d093a3d04
+ 66e755e897c4068dd1bef39f7c1b54b4fa31d633a19ba49c92f76be2fab052dc
+ ca69a60e34f0fe8f5d7069ae05269dfd1b52283ff391bfc6f8bdc0d9081f9ce0
+ bfc65cedae19381d0c048813c055a8de79c86ec0e3e1e276178dc15165eb841e
+ 6d50a749e163cc0efcbf65192bfe53d67354775282d8ca0387839f39adcbcd35
+ 43611034c568d11c4d0028a97035c4139b1f3c7c3ce634b8a19f9b7726115681
+ 7207f36b92d1c28007c2ae23d9d6e2a8629043b7531f338c824ae748b932ca23
+ da6fbaa987d0f4a2a524e32c7662a734a4f3f097de5d361abb573f5caee263d9
+ 1a111373aa93914ae3adf09eae6e4dfa5f2e194cb74afc135f9a5c5989abc23a
+ b2447f2a5812162b9844144db85dd250955f73dc4e78fe9b02ddfdd0ca0e9804
+ a38a2f3ebd8c517fcf8cfd588014a3fdeff9c7a426c3f6d97a9d0aafdf159d09
+ 922b43d5e3cc51e22154e86a39b622e500d9d821227b158428ed9a5694affd3c
+ e8ea5a0783dcf36c9f5864d618811c336e2af493bbfd130c16146a90078a18ea
+ 6a97bddaef53a8cf13e8c9db9f614830da0c593e38e9528a078039412f01c076
+ 04ed620229d3a3732c30a7d2a5cbdae5dc6ca373b1c746af57d55b6d94868d61
+ 7dc9a76cd1558e5b8f09e8db01acae95074854a4322fd6623d16cae6d446f10a
+ f48f7853c7638e18a66ec94e75f8506f808e8ca257d2c7f56dcccfc3afd62384
+ 02fefc78ff54b72edcb39cfc0aa18665776d39adfa9b9bf0c74865f20dcebc3c
+ a26796dd99bd2bc03bb8a3b80980746659add54a876a944f310716b5160efb71
+ f171a7a586f616f39818bb9ce82f1d20b40c34b1e7424313eba64938fbe300b8
+ d20babffb3cf0cd062d7cbdb9b4e0fcdf5e2fe0038222bf7b507863e2e930c05
+ 6503e483a8f2a71df69b56375dc3d923989904a6dbec93894578813f43f96c5a
+ 87d75834b04d43febdf5c505d04f9080de3e77c90030df778d4e0d0d49df6cc8
+ be59aae71ae47ce651dd075c8c38f588d26d6f84552505b9cbdea5c677f9227d
+ 15dea7a970e721f66f7af9b77d55c87af40719073523b199712656f1b7eefd70
+ d1d82302559f1f6a1cbf3ca9ba22407021a1f45e2abf1107e2d479bdac47d7c7
+ 24a368cf3e35e26560a168c7b3b27392276847d45f0031be926190a204f5b198
+ 197f2e719babb6c35b6632563e0beb70342be71c4db9ca1c051a093c6310a753
+ 69be286f03df22daf97f14006d3a9ddd083f7b223b964d51370b5866a6a98d46
+ 8c616e777440243da0afc509d5dcbc0cb399f739882234f9a7887a51a1ef37a2
+ 29b8eb10f694af45f9e4c02387b72500b53149563c0397787fa3cf540854425a
+ f4a4bac862d408e79b303ac825bd653431e55ad312d33ec202b74b9167778db3
+ b2781ab84f25f25b5f931d54778e5eec42e914a83db677e81d80a48c1a37492a
+ b56ed359a44f2687cdf87cd7adf364d530ab05a514c62215ba79bd9cd26b89c1
+ c9f8aedd5c6cb07fd0539e6ed1930096779497e9038ddec37f62db70fca826ef
+ 81358c57cc6093f3e024c8215a044c2de5a1dff4c7ca49e9074ec494e7581374
+ 3ed94bf02638d8d81ce3745139150f613c30e0c0fa41f8ec56e9f64f4057a35c
+ c5c39260b5dea537060550f550d74c1dff30711f41805b0fef791fa005f76899
+ 006cf6adc0812f2c696f89331e80b38b679baf00bd83b7c64e9050b2de57393b
+ 685daa10abb271ff7cafb3401b17da6ec12274402f2dbba7c9869ffcc71f6099
+ 761e2a721a9776a556d8065966ef0be6d59d629a08c845b05ec4ef5d818d1460
+ bc88b8be2c77ec95960016bd81dabd7c6fbd7fd4331bcfd99441760d25f2e466
+ bc432448db7679f5e4fcf198d3da060f08ca7ece2c32e74614448446cd6235ca
+ fd004c932a59157752bf30cc70290e14bd7bf84cbaa94dbb7b80805cdaae107a
+ b51c8bf7b45c59429ad489bcc1a1241a47b1590db9b9cc5eddd3efb514072638
+ 864c92e79e22e61bc382fc27b40426e08a50f722c5ee1a1c203cfa88bdcc9f10
+ cbd211964fa8c10d1b9ff47d7040de8aea46445e09b154a5182c49a1ced320c1
+ 39fed5bd9d93e40cf5c800f6fbdc5c5e85fa07a431aa572c2568b395cfaebad7
+ fc5bc8b71251b59c3a514f96ac839e98a3fd763d0cb7dcd032a4d0127c6fa2da
+ a1882c68202a62a0a3aecd400ad7e988bebd46a6dfdbb5b4fbe8ae4580767585
+ 5aabf9cf59cf8acf427f84c35f40f8875f2b93afde450c1e7c9bc0019f550b69
+ e0efe1e365936d7d2737bf3ec34a8ce96f09281d06a1bce31f8259316124b651
+ c406bf29f94298646bbb8c7ff34393c1215f3d31dbb25f895ba44ed374061472
+ e8d612a9a64089b00f07f884f9aa6ce85e0d0bd973ad90d1c80d44aeaa140842
+ ee69bf761e9ca57d21e81ce7ad6e4eb2ce296c306484a2e1d8b4ecf157491ffe
+ 63c7ec79c58b71e06ade3986f4ba77f8892ea1e886dae7306091f4555309bdee
+ 7768048b02b00695b78a998b8677485716ac947f5842002a97b958923dda4d83
+ 2c2d45507fb93c02a9264ca3d2d5e3f046f7faea54685d8ca9ebf200dde054ca
+ 3aa58934d4d12e556a0517930e6781014d166be557942a45ddd11c43e59fc823
+ 838a2d95800aeb4bec66ea144749ee62c40179b2735aa4a40df4d924a295b2f8
+ 681e7c9bd4616ee373652cd67554d3adb5306ee012c981ba8efb5c41dd91a53c
+ d64793d8abed0e49015e3270c4603ce74d701e0a39b4974a400cf767737d9b93
+ 1bebc81f820362a23e42dee4f9246fd9eff54095c7c59ab3c114277a6862dd9b
+ bd194b5211ba26380bb0478b11f967e1b12cd9a518770c2d5415eac6adb32af4
+ efce66ce4301dcd05396cf6a093f71ec4e0c4f15000aadd60243511dca12c170
+ a049902bf37b7a14f463f4441a7a8fcc83e6a534f18b3665eee3839463bf94f0
+ d07ac605280f083e32b39f87e6d90869d143289ecd221681251960151a052d1b
+ 4a0c7a09f6716ca451f4d3bba361544821bf8228c5769b9a844e205c2afb5c32
+ dd49b799a2a8ddb81d35d2f5d97c0d34366026080b86abc179238b510b4930ff
+ 73ee8980eb9000280414147eaa36f5fda84e0ddb4ace17905d205a68dca8e466
+ eef67b57edf4910ec6d0bc1e20c41125054cb488fa9c6ea97eaa71ed9042a33d
+ 436a24a6d7967922bf192c8f0692d330d3e2728175b597573e48dac2f51aaa8b
+ 7234c8
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N171/TimesNewRomanPS-ItalicMT 1 TZ
+ %%IncludeResource Symbol
+ [ 1 /bullet/space
+ /N172/Symbol -1 TZ
+ %%IncludeResource Courier-Oblique
+ [/N176/Courier-Oblique 1 TZ
+ %%IncludeResource Courier
+ [/N175/Courier 1 TZ
+ userdict begin
+ %%BeginResource: font Arial-ItalicMT
+ %!PS-AdobeFont-1.0: Arial-ItalicMT 001.001
+ %%CreationDate: Wed Jan 27 13:00:46 1999
+ %%VMusage: 29187 36123
+ %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. 
+ %% All Rights Reserved. 
+ %% Arial is a trademark of The Monotype Corporation, registered in the US Patent 
+ %% and Trademark Office and elsewhere.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.001) readonly def
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) readonly def
+ /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def
+ /FullName (Arial MT Italic) readonly def
+ /FamilyName (Arial MT) readonly def
+ /Weight (Regular) readonly def
+ /isFixedPitch false def
+ /ItalicAngle -12 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /Arial-ItalicMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44340 def
+ /FontBBox{-261 -250 1059 936}readonly def
+ currentdict end
+ currentfile eexec
+ 414a410b61422d8b318a61dc82494e91375088127193097dff4b40f954c1cbdb
+ 06df5a6447b29e244d99532efbda1c91b4da09b270387dd68ea10797b34c4fde
+ d7f6fbd76ea82f0ae2e6a60e7ce44ffcd750d999f879e672a4d13dc29ee81f7a
+ e2bdbb8a4989207e7665af94b043404d03bf5a2aa8c4a6c960f496967a605f61
+ 3d68bbce3ccf36ac3df993da02051a41c34517365cc7edd0f1feca105d84cff0
+ 6c9e1f5663c4a4a7c946d353d802577017594cd6c9e8af4163a00e0cb26969b3
+ 448be98e348012dc9e709e4ca8e013b3704baf7063e24a276f211aa8f05896e6
+ 8d57f1decd16e61f5e942915d47085cb36fde6282fa8e0bc566d6ad4e4b9a71e
+ d8dae0e142f5a23f81bb008dc7d91697c86f48487dc81f7623406b2c88321e2d
+ fd66960a044b8dfae820c580b17336182f66a9ddfb4516e4b7d11e0921de6a8f
+ fc2ad4244782dbe6e2098a275cc9a7cb6aaf723fa21ecb3cd4789c2cc4b3b35b
+ 02d6292c8acf12956b69d74578f6a7f5ede45d7bf6f21c9b4bc8e8c8b960441e
+ df105cc5f3db10f19d29c46595bc292257dc023522c8ae757eb45dbd053f85f1
+ 62b45ccd20a6f84345dcc246691e81c322da907259061751799f4f8afa3a940c
+ a1bf5aba316e2c6a241873584571230b8a9084b700cff49b5ca0787877936da5
+ bd7c80139be663e3f54e4defc316b4d064bfb01ae39b97b96a40d0cb69067322
+ 334ba2f82217909a0418465bddcfb3a3adf168a45c1d1b441de64e2dd81362f7
+ 0258effbc94ade9dde91671292819be47629ba2d6cae25bd463675b3a60ffdb2
+ 3849686190afa3f257944abd855b3e0d8844cf264c2ce4dbd22cc3ccd2d6fc6d
+ d021fe58ccf617979995434dc1cc08fc71c0247858e4e09600965314641501cc
+ bc9e38aaa460329fc8ba9d6098b8cb38d549aa2413e6ac24b2d70f15c6d90751
+ 02898edc47096ffb929e7c9d17f31b1f935d2cf118fefad78dde84c5608f7108
+ 4f1d5e9942b1126d64818925c8f7dcb422031900b00a0e62cb0b65f1b6c2b53b
+ 12aeb75bc5c5387592c37fee98230512767f6607dae2f28f2debfe860df5048f
+ 8d567b1cc18dce3ae36e0745d45492a57a87ba84d39969d2465233d3bd4eb8e4
+ c214327a2b8299686aec3a35f730ec3799b18a5d75582dbe24abaca62acadaa2
+ 5a05728af2c57d8c3a631e19ef504dfd96a03b4cafa60105b51f65c371449bf0
+ dff0cc50e15572692f59e95e9b5782ae4ce2dc22f27a2ea2258a384cab48b83b
+ d69030980286963fd1f9ba98a22f562d73d44b07a90f446cc21d4298bf573b41
+ 4bc661b059148b3911c20fd9971fac61aa5b77b12b31078aa9a191c2b2a3b1a4
+ 83153d7d485f9533e2d761abfa729cb8bb577196f24ac9283124fe60c9c2be7a
+ 535018afcdeb50a7d93133a589c0dd6ca9a641e36c2e24aba4722962647f2ec8
+ 36caa2c885b18dc2c879989246c01d7c45d809abf20a60127635abeb4fc66016
+ 54fb8273c4e152cf0b43b0ca08fda7d83d3aa625c85602de9f69bbd6eafea748
+ b51b00454d48aa7b421bfab40b108907ad78bf63efad8659719e7db3938f21bd
+ b4679e431acec2aaab1ccc12ad37ab236d6257bfa30bb553ce6342027ae0440f
+ 728d8a64a61d531f0092c89701f553b32b6f24da8ba3fe385a7724321cd8ea32
+ 0096137214fba345d1050e5015decbbd1cf81875683ef4ea59f851eb1d0be972
+ ccd453f16fae7f4f55c4d6bd5ade583027062e320652722aeb0928d96938ba27
+ 16093a7baf735bc93b644be3669f3748ac5ec0b4dc2ba4249cceb23b574e7969
+ dc4473b146404c6eabe1d13870cdff45f792644fa8b2ed1b399dfd1536dcb559
+ f7c5e760eb6a41932bbf66cca9951c359b610eb41e913027fc17471bc33e26aa
+ 66eb683534602c5e22f74db2af092f50035966e237f37fddbc3467ddcfe4c158
+ 5637dbc9fefc35c5536fac9e2c7631798be61e6d9337ba75e6159c3fb9b23023
+ 725b1f55cc03c4d64e339e72eebbeada7a80d6aa94b07a744bd9a667c081821f
+ b759b6e7c6645d0b5ba196bb74ecbb93d4817f4909bd992ff90145e40cdcead5
+ 752b2ca27c4cdeac8c99bf90733030a32babf7cdda3c2a8c76920c2a8ed9395a
+ e559fe9a7380d962bcc3fa72dc1b32878ea4c1a4cd196c01f2daf6a6655d1db0
+ 9b64467d514dce47e51980eec125c6de56f6559396a797f4cecfafd949461d3a
+ 0ca3e1b7502ffb5c4db188f516cf4810ef700a0ce7c4b5f96847efdd657308cf
+ a7413529a1ecb652adf5effad85c6f2b273ac71865fef06a32985507cb28e19b
+ aefb623fa2c8bec9251e4ad405905c70c77f795f1a9273a91e232d0a35f33901
+ 0c75951cbdb31a8646deb04bec7b0106e228ea3ec379b972d6f28473c237457d
+ 9ebb7b835ba2987d0cee1344d47e5c18b4b4beb3fedc3197bc5da32f5f357617
+ feaa066d5612ef89f9a37f161f53a00b5773647bff706136599757d4533ea7ee
+ e9d188fc2a99498c2769757de0866982a0acace8dd1550b21e3c820986739f22
+ fd55a08a76941620cfaaab217adb0c0af2c0cb7b4b15ecd39e1a3565352e1a75
+ 96cd19eb7fc4ab516df00cc1af9eb1b705eed150c8995c7031555a44c3fcd409
+ 4711647f25fac47b2e89bdb6546d4eaa0fb032cfd30f2382f21cd0c6e091cdbe
+ d21d160d382d41412a5b93717d4c84e3ab2c3230f3afde778c34894e1d63cba3
+ 989b0459dadb13073e7291d6ab739b7e4feebfe522cce061ce706505decbaad0
+ 95df348400c339121cf687db52dd8be5cc2c65f5a911c059b873854002f89079
+ 3f7f61712d7819be91f366fa8770d4daa5dab621974ba99527245a00d294f249
+ 7b841bd8d8403ab8fe63f85a747bca8174448e6353b0f61dfe6f39368ef09e00
+ 9433f21c477a894f09f774d70c7453247dc1eb699c070f3684cc2e3ddb659fe1
+ f0b07d189415933615210b7698387ef543635d43fd2aba03144509c98058b68c
+ 3a72c38ea94850c4be18002d1160bcebb8ef246cca279a7c95ad201801039cf4
+ a49d28e56ba0a9f2e1eefb751be4ccef8e79defa6f65475ebfa9ffd298456425
+ 8b86444090b7cc908aedb9f5488d8b67912ccb2f0e52aa2981cc5ef5d59269cf
+ 6e76a9a57d3472f4bfa99a198320298d3e9044f6bcfb2984be78de4bda90505c
+ 2ea74903ec85455df03e4d2252d9eec7db1c30299353f4a6edc49ed5e813aed0
+ 901661ad78ba441477618d73740c943553110efba5a8c572de044dbd4b92430a
+ bacad2600a44dc6c461820581ae00272d12752574b6b427ad5372f6aa8e4e24f
+ a7deed7ef1a8c452c7f241fc39ab0fa039fdf3ecf330d5cc7b7911de1e389cb8
+ 9863da568642bcd5d0a505648740d0e711805a7d8644933a1fee43266fe9b070
+ 78beb8940c458a65ff05fc1b505590dfe4642f1933dcf815893f49346e310451
+ ee992047236d479ea8bc628996b0b1931dfe22d44af2dcd24862c0960979159e
+ 1f9eee5b802175d9fedba009d2a3eb8960ce1608a9d4cc2d8e9b95a200014cff
+ 26a85815141ce3d3a4451de8874aa71e488094a8d6548c1829eef6aaddb6e53d
+ dcebbb54b3598c92664b23a33b52dfb33bbf008b9568569e3d070f68ae5a3835
+ cc078301323c9baa3469f73dbb2ca98e614d8ce077bb143c31ce52a8daff0129
+ 2fd18ec036f6575b9ee5387e47c6f45c8a2eb58343a250a7d450219de1f9b422
+ 66bf1feeb3456903706f1b1674f986c6a31560a7b8c0fb3ce5d9d404dcc6dad6
+ 5c6efc139e2c0928b5e800ba13f6a7a22b1e79d2e00eb2b090721e97ceea4a79
+ 1b04ce4b54d72281957b46b46623d14ac8af38f936e27fd9d5763eb7c78594e6
+ 6e405b3b62807f0adff384bf1d572c4d5b39eef2abe4bd017b134dd642b446d4
+ 0202bf98b60b8dfe07408f2abe9d5154118eba4cab92d1c736e2ee6c98ed66d1
+ ba0541546793605d22fd97739f8dcc9791da28e06e109c3fdccd65865d0a260f
+ c72fcc2e5038bad105c6cdb7f0b8a20317ab28b0b81313561dbe5bb7224525c8
+ 06aa3abd1024690e97efcce22325bcf1772729566fd5d4d7fdddf502a78cc406
+ b6c908eb2c9b157e27271b3d3b1b967a7e233b7a7da70d25cd20bdb11caa18d6
+ 0fc28b080726cf3f4a312596813773129220ed014a091dc9550d366f4ef59de0
+ 933dc3d1be928f72786c1e2a33d4b021594001dc5b6d341226039ed6428c8180
+ 1ef27c67fcc21754ae589c732800c10c6dff0c95fb6def75b07443a8e1cfe793
+ c70367750fecee8e9a05a6552c222623355e6d81a5a918ffe164bb7392d1d506
+ eb9ed5bf8f5bf136d430251a1448e6e6df562af39a32a57dca90289a0ef11e24
+ 6f450c5c4d2f749380ead9b86f65b9cb50977bb8529c7026f6af5bf4bc4b070d
+ e3abe764e92b5dbe073416c103f02506bf9a4a1a48ca799a5f7ab68494a5c110
+ e1804d7d4ac1b9161e1a7788b83c1aafe14a4230eecabe496d1264b61fb4527f
+ 4d92c7ab797bd7200020379722c07579eff496b54d7560ef2fa838f3adcbc844
+ 0298061c8b771732c8165e36eccac20c2b945d3d3fe047c72911860aa71d5e33
+ f04d7952608a16a2b18a8db61835e389ce3b159971074b01aa410a537ebd05d9
+ 128d0d21f8031d4e38e54080fa1152b90c299bd55acf00fb186732b118387c4d
+ 23a7a4f546081666dd427c47dfbd78516c00f5bdb711625f3761b98b4cfd45d4
+ 6a68d93d2b39be2404fca6c8c9fb55ffe818e62958782580d351c23e27cede3f
+ eb2316bcfb07845cfb84a4f8f6c1543b353721f6ae28d5efa3ac07334030aa15
+ c66d51387ba1e0daa307856b6134be7556c2dc651b974cc20b298f19aaa9ccd8
+ aaf29905ecd4087554098510f72d92478881a3df309b9fc986f5e1554541ebc7
+ fc6191d07ec62ac3a626a80e70edf6112e2d4420dd9c0fe0bf32b8c42fa6c716
+ 8c952975201fb717882f6a342fafa1ff79c1b27f51a6eadea08cc919df8216b5
+ 91111bea340349b5d5cbd01915dcac06e1fae669362ad918394f2059b7065feb
+ ae628028816d5454a9760beeceb7794b2c3cde7ea7b13489b5d9698670952beb
+ c53ebff7ebfeb9910b23752e3f685f8d5ed5e6e69cee6a8b6322ef1ed5b2e86c
+ c0a0dd3a6c441e719d8635ee5931a69a839bb77e0e654969cf4552d59c46b151
+ 9e48e61f9c3629948ba8947ceada76780c39c152e51213ada1eae655d3bd0ad4
+ 1adc9f78bb5ec86aae955f197f605eb5178fe94f1f8b52a4d7289d95bbc5619e
+ 955501847a1b104f6f0857f24fd194f1af16e94987b86efd8574e8d8e87aa148
+ 6de001ff3853b4294607a0aa0ac7d6822a07386dad712cefb8feec6db3b7ebe4
+ 85f0df0e29d2f08bbcc719ef8f9ae89a2a3d9c268a543856ab30991d278edb3f
+ e8408bcc95266f6b1c389ef06c6d682f533a5657601a2dfa48273edaaa340b29
+ efb1c71b30d4ff5cd217f8ffa5642f9873dd6b594173b13faefe2120defaae84
+ 528654d190c0857ded28d57d9af153f5875f8f4087030cc6f2a536e46a0a80c8
+ 58c15d06b1e1247fac9052fd1ea5f3d4a47671a031602175e07fd6f6eed8b414
+ 10b04f327017e9ce55f5a90243888c8bfcb4ba46ad975c3de327e9df20a2408a
+ b4d0767dbca4438e4ffa4261f41e05ef8b0d9c63daffff8eaaceaa7bf984c53a
+ cb3926188997da76ce38c8b01e22f8c20ec662f279cc08fceaeca2e6cc9ef93b
+ f2f35896e5017b279e6accf7466729aafbc7fc0962c22c781892ecf6c77b3890
+ 92d56d548149745195f2ca959936e743827217407a1d790be7dede050f30d073
+ ffd932d848a81af067b6b030c5b9f2b94eae5f0fce310da92e9599ab54fae852
+ 2fd7283ba587f3f4a741e47d8c012335cdf488192e007e6f8c4f4d31ce7febe2
+ 8defaaba76ec22331c2de701fc93fc964b29a09e2ba05c886b2e7dba9fa83a34
+ ed3db1c32532f51631d4372ee9dbdb86b4083682f0c84f802b966b79765cf868
+ 619fddd041c7632b9d7e7ede3cb1b9d35c6d37f5b715dcb93291b037cb6d54a1
+ 9080cdcf7dc0d361968a6f8e4e56323542c7001a78d554f14f64fca7ad09c039
+ c1112bc2a39ed37e5687977db15c2fa3ad57486acffd505df3b4b127533d55fb
+ a9001f15636a6a276bfae3c92df528e9e19c081eff5febe7b6e855156d95730d
+ 32eba40db56ffc7a4e21b2bc7261424c539c400517c03f68fd6b2c56002c694a
+ 556d483164e8e5843da6dd2486ea68ec57893e82dfbc884791820cf20a583592
+ a8ba2fe23325a0a1f13ceb0b276e1a02986e1d5ae0f672bec79998b8c0034d1f
+ 0fcfda5ae5ae794f5ce38e840d944358a970dc5acf9fab5cd3c254fb1c88101a
+ 37408b0ac5d6f4a1e56518cdca1711e92a6c33b6796f4b0f8cbdf2b8edc8f501
+ 3da3cf2a51f68a32fef929e326ed49b3f77714ce544289b84cc2da025731db64
+ bb4b10cf9143f3a1a0fc629120acb92d176f0d235080d8ee1ab3374bf6f5aa72
+ 43eaea173078117e3505e1c2073bef43358685bc248071494333e5cf3898ecb3
+ 88aaaa2a522d4113399119f5364ab1a23c475061d8900d17d9677ae7cf173437
+ 919d8c984a035f9010b9db02cd984c47a2964cdcf5bded70df217d0ea0772d70
+ 58f7e8469bea165417956b7b8d0b785760dd597b9561bdcdf061c7c1255585ce
+ ef4463eedb83dd1adcddc734424cd7d350bf322478104211bf9aeddde20b991e
+ 8535188b49fab7d02b0cd660312bd6e13caba635f132941c359b610eb41e9135
+ 3a03311938a796b6a18640c667a338a55b44c80769e446c5e9e947534fbe8ee3
+ 6108dea8e4efb60a055fbfd93520ce2674060d9460a77d052cce37622256a965
+ 7e0ae08aacad5a0a2544289e254dd67cbc096c44983f8de58e8097de623b004f
+ 895459e7002a6f451d6dcdb3b4b2aabae1c985d834dafc14076e79fd9ba1897f
+ ee39a7774b435a4efa3ce08de5048b6b96d4764133f317e50e68dde97aba6b5b
+ 915ca1ac98f00848da30a807766982a3d616dbb2504dfd3280e415574d4d7272
+ 93e78a4b3d1805678a7cd99bcaa0667dfd58b5b6ecb819d781a7fa8edef6791b
+ 1b45b2e6ac1684d2c33541663d7689bd4a88daef9797bcdf4a67e3ff3d800c95
+ 5dcc96ac610a2001604ccb18704c1d809715bb3b6b7d19a7395503af65369fe9
+ f41229abf18a3bbb9709481c24b910a0dbd662c2c88b19fd8daa18c7f60d0ffe
+ 48970acb5eb130b449137b9cd80278e6a22eac5a3f9d962d80099dbf658a7b29
+ 529884802c81038813508a598950b730e33233a4b6c81b3dffd77be1711f2ef1
+ 232f30f79cff21ad53803bf53f679fdc86abe4bd017b134dd209034ad2b8fec6
+ 20eaa78103f64ed4ce13ff909c52342ed3d57b09ef8ff6abdd43b0bcb4d69ae5
+ 642c5eb9bfe4e8e3476afdcf46cb4dc451f9c6d4ab386a0c93bf55321017724f
+ 920a46ae189b0176bc76b5aae8969459f69686215ef766545f78b57cb9b59468
+ 21a9bcf18210e6c7ec319a2ddff907fe3f5e364d05ce46c344f6f2fec694b463
+ 912f7d734950789923c1ddcc0994130ee76e8676dbea2e034968501ace49a942
+ c873e6b14f71e963c11e7f66957d4be9ce8026689fbd7cba8b9c677596ab38cc
+ 069e60aa8cea4213bfa596634c2cf442169358e4dff89b38a24e6f88f3b7c43b
+ 2eb12f366084def6435a466f94e380571d3dd14d34475d326c0d38d83d859c06
+ af76afe7cefc3196dc7907ac58bd6d987afeab1c631b64fce1bf6307cc722e54
+ ccf2c3f719a8ec53a5539f7503e062298dc8968a744f2f5c931b83bf8bba4450
+ 2065bd7f65d06be9ac8297ef51fa8c06a3ec05987ec81a38d41415c87a612807
+ db249f01fd956a1e204c11b414120f630ec8d94d88e6e41eaf1734094fa98ffb
+ dc84c66d011bb61af8321660a06cc7e7b22c37e2265734327c4d21a6529c50b7
+ d115567e8bf55617aa9b28e6ad9c75c5d91dda5fa2efec0dc87bc7c5a6fed9a5
+ ce02789ef00c7d280742ed80acbc137c1360dd9cdeb73529604fe76ede921d30
+ c2c4baef68fee83a49fb33443d76b9db239bf7b4ef9c75edb10b895df7e74ae2
+ ec3067dedb9b0a6965388621eabe8997f8b0889a3cf59eda5e6206fb714a2ba7
+ 870abdc1497f3bdcb6e2b5da137c8560683a9215a78aa8e58b5ae4eb0c6234f7
+ f45b18d85fce17a050255cf1d65b4b5bcf5d3c8af70de3246dfcbbd6e445583d
+ fd9c195fafd65900d3a0597b7382b339ba0164d71b2eadb5ec0432469393588d
+ 9fc1e251d1f7e9dd4be264ca4ca8a60e5e7b635665b6da5ce14e1429142cd2aa
+ 72877d6bbd696bee61446a8f1982969f05ab646eb2a032ba0295c337f16a90e7
+ 8bd27f7407a61d4861e13509ae325cbec90920866b8ffc859d584b04a48ef622
+ fd72228ac15e38575c254a3c21606825e059c9a33f24670cf195761c1909b838
+ 2ff9ca7779f5021bcaec75a3e9fe11dea1a5aa6868fcdaa8116e48e64647002b
+ ae0876ba705b60ce1e836b7af979e8805119430674d211ff16ba994fa366628f
+ 75812cecc1792a819fd05ffd0c76b4b7b98f0c017d8cd25120ff314940a24bd2
+ 93115cd15e4da178f3c36ea40a53adf3564006b8b96e0e0458369b4124c93067
+ a6b43b33f566a0867ea87625f79b1e8a0057b21e4a91534575454d8a94359ac3
+ 595baab9e5f3e40d9a6af7bc5ed468e6cdb3045df1d7a9b7e683190f569f98fe
+ a8ddb67ccb161f806908d0c344f8ec310e2c98b22dc1f95f45b85074a6b4e0aa
+ 3e0e616685ee8ae41f583a288434333539dfd01f3b16e9f98f20d7e77546b26a
+ aa433ec4619c3924d516c993f5a9354a38af069ec6410e41a1703ba240101560
+ 52cf297ad1d71c3164726133522021c33978cafadc8465b5ecbb231b205056d9
+ 03e2756045a62b4c3dad5398c1ff63b0105cacd719a21d46700c8e5b7c3f8337
+ 2df726a99b9af12762858fe28aba60346758d9bca3387c78e203e7bdbb1a1998
+ cdcd58e5c2e9db6e5199a356f0710c6a1c628494d611d109a764837c4a960506
+ 9612852932c1cd8752fc70e2ff6e4aea2f0bcf6af10ef5fe8da28ba5375c402b
+ f786205cc6dfc997b78f99cf85638bbd3a18412aa4aa3e61748d36095c3fe9df
+ fcaa5a70205316bdd0706c4df71ba087f73da0951d02b7db72993d1030e5436d
+ 5f0857c107b57532aabe1aa9568b3b836a9477f6d0b8cc5e0bb18bb7675179a3
+ 70910d88abad2c99a8c639e5eae869c31fcf1d7621c8abedb39cf6eeaf223b56
+ 321b2223c8f631b0628fa575a59ec2f0ce8584aa8e08596694cd6bb7fe8e2dbb
+ e732e13a4d4ed0114183da45b498dd00cc7777cbbcde2985cfd287b0debe6e29
+ f0ddf11781d5ee420df02cbc20cef5a7d98541ba9b226135ecdbbfbc983d9bce
+ 99a0b4fa4bae8509b4a69ba804b9adbeceb55785312ee695b297c7b16b713c4f
+ ef32eafb90fa93771cda5fcc78d9bafb6f1249c22697037eb48e6354f82d2d9b
+ c3123309281035121be3aba28b3d6b983ed8c992268c3bfb4f08c44a42d40614
+ 3046d6e4038eb39cbaa6a322a99a1e33fb4633feb56d1c30259d9cc2decd573c
+ 8360e7be37456710c57af371dbd3954cf74b70cd858c9b6041483d86aa03cf82
+ dea12287365290fffa9d1ee4836314697b1a5a21bb9c210934b0bd05a57e424b
+ 2e9c4305ea838d677e076cec57cbb3d357461f0b181f47a183e5c5ffb79455aa
+ 62706bac8ea6eecc8806c10deef835f93e6bc7dc4c7fdca9867975f2e0020fb4
+ d5f3ef19ea9ef011ab28051340a9276afa5498f010d784745d290c27121011d8
+ 162d300bbb4f2977f2668f1dcb4d8a6334f85fafb57c2c4659972a641b005d74
+ 6cb38c1067682b1247ff699a50b012a16bf42c3b97efc948ab9341dd83c85136
+ 297d3bf806a0cc81c354fbd63627d51df0c48938a3cdc5a90c554b95622cf985
+ f959ecf3d8adb82856459c8cf38d7ccc6aeef123ce75044da59750a1411a2094
+ 7bfb1c3505d450dd42a6cc3f4e6b616973ea714455e211e675174867b037d933
+ d5762ae29c3ed8f8ac1282ce2b8ee58339108f0636cb074db3a8af54ad21e5d9
+ ed9eb7b86faaedc94f119b6e5150838a1ee984015014b0c732c6d850400efc35
+ c7cd0e2838ef7e1bc02b1a9ccc6587f9a4c520a2ee94edc582032da7053e0c6a
+ 451513963982132fe1ffddcadae32c65572fd0d4afeb4b8053fba58d9e68dcc9
+ 1c8ee58a66d604b1c1db1d7564470a42f929bde69dfa6fbc2c0169f4995af414
+ 56ea2d43636a5394c406cd562f85f5b46f8ae65c7791c0a521e46da57e07e46b
+ 0dea35cd5a7576a3dc797531dab1bfb71d4837c632a1db92d2876ad5967d01b4
+ f4729683670c094a6abadbb2d7ce100b8adfbdf06e53497e4e1ef4c497df43dc
+ 01a3588fb3504df1bec0b10a12487200ac047294de314305712ab29f740102ef
+ 45983fd13e8c68f1d258df6776c3d445e0c0d7dc385bdd1cb32951c3b40615bc
+ 15de5deda9edc5aad1e2b51b032d4674ac16e515adf3f1dca4a1037b84cf3275
+ d549c4a92ce44631d08ba1ec88c14f820099916171b2ddd937805971b6230d26
+ 10b63463cb74a97e3f2438a48d9a448fa31f1f319a05883308ec70cf324eb1b4
+ 166f4a7e66a98d8661645e77d4709b7d6690112ebd47ef93f49a6aad5639a7d1
+ 05ea34220d780721e39f666d837d16f951795c2bbd6186d49e3e67d9ee60342e
+ 558f193e8b09ba17e18d164e1a933817168828ba16862733ee0ff9aedc4cb7a3
+ 76e63d593a411f83e53b4b37ce858a37f7ef3308764e003d831817cebe5ca2e1
+ 63362f1abe1be08e6e913aa6ddfc014a436fda405813509f9506554fc9db3f1b
+ b73d48aa4052e1d53edf6a1feaf0cbb531cd80fcf174ec8edff7a87e38b64317
+ 2e185186954adca213f8eaca7734977b5b82c929cb5a9752827c85dad50f7a4e
+ 80a7523790f79251d652b99d55f9237cfdd8f480ad51d3a112c48ffa971bf1a8
+ 352cf97ed77d48a6e14bec689aa26d4e287a17ac5a2f2312d5c5e51b808eb2da
+ 26d8a7db5943ec796975802e9fb0200185a372ca4dde5c0634399736de588936
+ 5d60726c2a2c9e9f3fed433335c2e529d3408375509ef1cc250c71cc999a3486
+ 22d7876e52431d853d934d5c58dcacffae7c78b074a28c9a73b3e64ea12bc3c0
+ d21dabf4bf031ef02bf54614ce2ed5b376c2f7cdac3c136ddccd803846417d93
+ f27426ddec4f95c3aad3e4ff13d8c6b1f182c6e692148912d241625651428e5d
+ 311ce9b958ec927b3a4cdc471ecbe9e1b82208bb3228d608de35c1c246c549b2
+ 3e5b23adfefe919fc17fefe28bae7e2ffbc89ec67442b907bb40d9d571093ded
+ 90ced66a698e65973c8b6f44b2dc63c1aa7622c8bdda296013b17d54da761e79
+ 7f57216f9128aeb191a12e773e3f02329ac8aa6a36ebc82fed0c3ee163daccba
+ 63d48b11aee7ca9c6cb057d5a33e701ea4b8554107cbe495fdcadb38b6ac78d7
+ aafdbad1418967b7fcd21c20cbc734d80223ed9fa9f708558679126074388251
+ 49adba0c9c75c5b1a7236a4b815d04759a1bae78c2829248f36083f7fda217dc
+ f43a205931b4842d82681648c9e431077d2d71a2cad119d130242897df67fb6f
+ aae447f335a4b28462e65c2a7de4ab639859a6b20983dda81a7fce794557088c
+ bb1b4e36027c562243e43227621c61c90a39b3e3c336bff286fe08431e4f92ad
+ 563d52617601f4e8c5782ae42d9a3958e6e86824f23f69596b811170f11f3a99
+ bab44f074d68b8d11d678212e50be4e4866b1a6a454b745938b98b0d02cb0d6e
+ 7ed7dab3e4962ba1c9f9104583aca1b10e0c955d6d4ba96b885ca3aa85186ee7
+ 7bda8ebed9aafe5b46fee081530f5b5e04cfe236f91ac7a8689cae7464b0044c
+ ef7fefcc2c83430ebdad0c5bf7b36a04ce8082eda6960d7eb2c00ec3372807f8
+ 2ea1eadb7750031b6ea6b25b067bf784bee094ee00606d642f154dbe2e975390
+ a268e97102417b09747ec3bb0b1ed05fff442e2fb661f6afa79a732bdf7b0980
+ fee001d4e614cf5c54d6e1b7000a660906af548eaf41559a5e80fb4fc1aa6ebf
+ 026ce2811daf1813d494101d0345a566bed02431c37fcc2fd843e5ee484ced65
+ 826c8e515e852c63ba9b6548fa7ced7aeee2cc85d3da8983bf7a09885409c390
+ 048a08f48804095ed25b860634fcb2d3a14ec9272ea02e66eb1df5e621479131
+ 85864f744a0fc3843d9325e346eaba5ced4cdb349b9acdb134e7077f19906116
+ 9dfde96d7319534e67f49433f6059357756d0fcf7a3ba3805a859d2d5137f0a6
+ 48f4d4c0015e3571dcf3b48edcd28ecaab7b20147a73068656e5ad892e35c889
+ d74938f733844b1b71b8592170984863a1087ce5c9a9f15404c32e6e625f62e7
+ 2f2cdf8a88b77f74c8bd96fbc8994114fe16bd98713d01032d9e0e26b3d2b23d
+ ee6336562104d44a85576008eca8aa9d22b6c0e4db2807334f439b07ad3c27e5
+ 06685a30502c94c54c2bb25d5716b920d778b095df8d77f388c6144c001a4390
+ f6f8acd022897057fe51705136ef2896c8158df344a85aa033b6f139b14a3715
+ c7f4c6a38045a848829c67f8f1f29388eaf570e6ee1cd430a8ed18989d0c1b50
+ 00fad7b52e99b27e65344abf44b932ccd0295a1845559e0c5b3fef581d318448
+ 0bb0627c309af04f31cf8df5bec6a0a706a13eeacfe0665d0597b0bdfbfc5759
+ 4d138bb6ba1613191eca0d604dafc41d015bdaea784423ab9bd50f0a305ebca2
+ 81bc604bb19e7b8872ddb2b6a58985b820ebfceec7ba9503954618135e7aa991
+ e064db3584b30bf44bde46177da4cc2b5d90a303b9b2881f9eb0005e6cc145a6
+ 1d68e235384157e746fa0487dc187d43bcae95b62301feca034c12fd0c73b8f8
+ 206229dc3d19773510224328b4411819eb0fea1012c476fe332073a7e9d09aa1
+ 0ec8903d011d85ac2b27ccb11b5d7b3fc064433bca9349cea973def294d64e93
+ 959a1db2a7e90efc4ea7e05518c6adca17c9e623519f86eff557d1c0350baa4b
+ e8665f2ca1ad3ca2f684c44f967a4f4044cb6b0c8802ea04174f5b2cabcf1351
+ 20f8a039e2163d918c6625ad3ca64fabfef616d20ba501dd63e4c9a87567f12e
+ b73b6a51b3340ccc1ab021b8ede5955d5b2af33ae6c458dc0d5b7cd688766f12
+ 7b50ed3691480b1e09e0275f4677029d8107089c24af3e4496bf3168664a9837
+ 855a9dba5b41564bc46883fbcf261f729a33e11ba7f332ea6fc827c30c3398b4
+ 9238119872aa8ab2cf4d3a39d72e101f79ebc86efb36bfb5829a2b98a53b98b1
+ 7dd0042adf6168f6c6d635d34089d289a05c079b8d85631e97dd2f619abda256
+ e6c6fcc925be0126a54a42cdc7cae6c0d0dfc6818530e50e80914945e458ea44
+ 141e0301e6c3709cec5668a4ed15bac298c5e35d9d556d354ba34e94ecd2e014
+ 78881f66dd09e915f547b5cdd318de201fe86e04b5d35ccef89d97ce7a4a9c54
+ bc0d2af6ad39d2d146296aa6ab6c033d3b9c77984700fc7352dc4cb27d844b33
+ 772cb3b7fb860da15e43bb488560bf7225f45aebf5a0d440a28461b0d4aa5927
+ ce1c0ce705f9a96e286a4eaf3da89831f136aa21697537fb7d89ae75244ac4af
+ 0184f38b6a260028deb7ba972f35698cfd5644619ea99f09c0f6cde50a759f4f
+ 7e42e9c75de34f3c310f19a2d1d7f775bb0248c6b7bfa7779b9b1d4d6bf77eff
+ 3bddb7be8be69f1ef298e92463291a25ca4652f700c8a7a52bfc7ee8edd994dc
+ 0626e6f43d1a3d08df54d34cd43e3a6e77de9c76b8549b254d5fd58b69c36dd9
+ b19755d84e02f4d575b21d2fbfd64775994a1507329cf609e97697f4911f2dee
+ c1299a758f47c78224598173a948e59da721f7dddaa9dd6996461b327b150380
+ 435752cfde4504064003115d7e7bf755f88ab2d23a8e00a602dd789516527529
+ 102809c0dda486d1da739c99066b35a9010203852796b0ab2389d391bf61ee30
+ 8ac29cad165b9e8b9a62c3854ea646f697a81296a73d11c3e182fcffeb4d0d1e
+ 09e89152240064dad6ba178fe22c18baece9eda4f0f7c0fd7801f730cc0f6cf1
+ d067f152b483b5d6c2b60c91773056972bf7f0266db63c5250aa4067fe1613a5
+ 56a25e924f344b39928b1fb9b4a7fc5256b95642f1b1340da991e30fddee7fd7
+ 6e3d8fe82cb3b4e3b69d4c0d878a701a7f23142e08b61a94df0f21fa169bd2bd
+ 0a9b6a992fa9061148087f9c91073112f1c681b57d14cb5bdaa4124416ef0ac4
+ bef0252f89224044b5347d144e8d924dd2f599713c5537fcdd88882dcdf1a9cf
+ 4fcb8d9a3bf371e7dcdd95c1789ac3f1b8a226f25050d8df0c9dfd0076808443
+ acf10389782a58238b509940cb654daad68982a4d25aa797994ac42af5c9765a
+ d222e21f7373bbb1d05f2040f1a77f73748ef9e46da432a2ce3f0256c84451f6
+ 1997b23d3dc6f79773812d8c50bf07a620d063e0ca1a08b48a0a53ea3c0ec9fd
+ 34e954b80b5a7c8653252c7e77754d19d2c0cdf32b960566fb595552977f211b
+ 2dc10fe3375ac5793f9f58c2890599a3c27127b6401750897b03e91d0b04c9a6
+ 3d6aab101d9690d32d8b1042de5ee99e69c7ca9f576d68a9156e6eccda400cbc
+ 26fb3b01762042ff40a96d9f9bf52d21799aea86f9c7247778b83d4d738f6138
+ e406c62e32f37a817155e3ace4f3a2642cb77ee694c486d4e80b65440b3b37d6
+ d6a734b010f6f8a4cc82800f19571a26da335e77963cdfc1e7b1dd3c1044a34e
+ 643e607412343a39a6fc4949ac1b597c3a80a7f656d133de58d591cc9c24140b
+ 9a46619e0cac5ce913c0186c9785b1cba6ed80ef6302e40ad6907ac8d732d55a
+ 53f9dc88efa74c3a6a92e673e6887eb366b73ef9794062201b01f008f6044569
+ 89a6588dace1cb18b2010fc177e60cfee7e5cf59018f186507190273b6105afd
+ 3911f11eb379ef9c2488499b8326856bdd3c2f8ee6cb858100c6b41ed90879ee
+ 5a1a325b55602d3440cdfa73c1c522986b9d6cfc6f6a469ba7a302fe2e0df7a8
+ b4f2033a85b65fd47cce795bd8228ef848148b5f41c46ac6e3d48d81d631625f
+ 4278869fe9a1417ab05ce085b18de912094dc081442b2266dbb78981a234ebab
+ f7a7baa47e269e5b00b155f1494b23e9e820c676ad5972ebb505866bcb6ddc5c
+ ac9e234280b100a81112a226f1928a2f34fc6a3a39324bc14c95c485615b3df9
+ 17ca4ee59c1f2c888cf9762c7b4e285744986cc89cdc4597aadc90dcfb67f1b6
+ 6a48df5cc2e1a89b2e48ebd6b7d0bc51a2d9ca3df7f7c2a9a5ab9ab0e129afbf
+ d148900e639870165870e96923c8a991815b6bf2e32e043fa4c587eb1098294c
+ 95b27305be8e9b047edae73e5fffbe2a6fa534cfcc5519006c81f92e26e96b3f
+ 42a40d3dfb0d9d78517a359d7cfe8a9991174692b552efd6e8ef95a52ced2a78
+ 25066b6b049ca73dc412b94105aa1820db84f05f806b8f5982cd038380cbe1c6
+ 1ae97d67897c64376e820f0b8b478d2749cbfb475d0d107f79861c6e8d63442b
+ dbf0a30fb4df6b4003e637b76367a8d52a7543a84dbbc24abccdb2f4fac49d84
+ b88218f6d757e9d7a7967daf5cf2b60dcf62b326e7f088affbb473e6ad3820cd
+ 5937fb915f2626e7214dfd20995c8f1a7f45b56b8bc306f6dbf1928ee8a8e695
+ 7c9043c0706187b616c4f31a5bd9eddf59319269d09ed913db43b62e2ee1b57e
+ ad0a0ff826060036329d2845cc0f62a4dc224d329f462ca4c89f9f981bfa7b36
+ 092ea608623e7679ec9c1940b0b2a212592308842740f59872a2858c71d266d4
+ eec61949552f526f07a107e8a9c7988ee6c88d3821334f7e2bd8ca78b52d93e5
+ 20f1d21067af0b495b877db5ec049853e42c676aecc267c1f61c6ba835d3787f
+ 275100575780ba98f3b19308c7344ecb3149aba1c93faa61ae4996b3ae4462fb
+ 4547c3bacca23ae20c8cb226f1bc76482ded1588909cb001b1593457dc1d7fa4
+ 8797f1584ccf0f75e8935fd09d1310397ec1184d119707492e3d5d8e8cdcdb0c
+ 7a632bf87ee042f4bc783feec07cd78599af42c157883fd48634d41fb98117d5
+ 8f5686a343a72141ea551b11697e60c98af181a9e50a0ae7df5d7a75730328e1
+ bf9c094ff2a774b05c254136acc3e89aa579215581be12622b2e4b6ecbc04c02
+ fed6bf2dbc1d4c249f9a4249a484592db6f6637202eccd029386ea87a46d7075
+ 2eff8df768c7537accf2ad3e189af91cc9f4c317ab714719065d5c173f2d3182
+ bf5040689f9700f639c1b9682a2e0fd8a539efbbb85ace6f306a846b52652ade
+ 73f886bbfd3e5b89d0f68b5e56f0d6e4086deaf2fda7e7d3dc802a16cd1a7b2d
+ 2ae19bc756834ee9aadef38298966050f5147a47fde8a91c5b29379d5f73ae1f
+ f31581b4a5a7f639b94c2365fe43dc58b216a5fd37d20ab9a91b370ba12cb532
+ 90ab8401f7f225306daff48ebaf2f83dbe2f6599233913e3587e426add255583
+ d1f1ee7ad6c8bc4497de94b3d7bc6dcffac86a69a44de75babcfe1410b1328cd
+ fd49ed3362c706d374d16965e89d0357811cf6614c4ed59343dd86fa8f9c06e7
+ 61c54d6f734a69ea290e5911c5b7cd535730952ba0bc3438b73a2fadd22b5bb7
+ d219086da486c57228ee296ce7d82f06d21da7c4f4511b6dd9bef17f44336ecc
+ 4798a5e11272661f2feeee759355f459ed097b05ec241d49991d2ae7bcadad77
+ 1697274a557fdd4c850d1eab0295dde5b5a0cca29d27380dc9a1ab898be8d727
+ 36ff9fa6a4e43ee2a447ea1f2b510b19e9118dadcbb2b0785dec56c065b01924
+ 4c7ff4b3c2aa7ece36496cf869da1b5e557a214978957340cf92b7dd82c91efc
+ c0f794b0768c84e3160d12dbf4192590f19306ebd2f8b7dcbb595a4b27a67e6c
+ 5ac22ff10ab919e07d21f49ce4970456ed8017c063a865fc6813a6457f72dbdb
+ bc7b17654cd10635827659ad014326940404c464473ab46c4275ce7d9d2fa8fe
+ ae8f83576ec88741f48f6a8466479be400326e4486bbca2d67edd24e68878504
+ d62eda8ce02756dbb2eb67230e84cd53ed828f0f44b8f9c111470144e1c7ffd4
+ 94ef512b6bfd503b20853f5f64cae44f56910625b13ce5504b770b3a2880c407
+ 72aeb44d3964e341981f20a79c83316befad5d428febf40812c26c77b712ca8a
+ 192c11fdbfa19de5d8c974fc60334b8a5a44371f8abd613533f65e569e7eb692
+ 185c28916976bb898ebb151c81dec89beb9bdfc827f5f0f81756d87d8b49b5e4
+ 7b83ec8bef987e513edba548200a5cdfe8496ff2296b15bcfbca92d2dcd574b1
+ c3ef5aa82558ea407251f133e750d090c4726da21304c77722444984c8402866
+ 5a131a15316b549156b7a680bbdae0e9300beba6805bfc34182ea1fdf6dc456b
+ 082bcb0df6eb094d1f290be8b404922f1824f521bc5651b23129c3ea9cd583ba
+ 5961259dd73ab330124a951c287e844518a9e9fcca44238be37e8bc58a198e42
+ 94858267d4b435c939f7a4e5e3d2c27be9e557fc77448efb56b5202b77266228
+ c131d26a096769599abf09309bbcb2bcb275d465e9650519225bca9d0a568021
+ 4e38e6f28389455c57e813d1500f35c5bfae243d4abb4fe0c3f759f66ec3941a
+ e620a93230a7eb71f8f65f9da70ac28e6098b6825016221acbecffcbe4745390
+ 16220349185d3c431e9b5d3f0e36ae4530c00f2c7769fa11da8d41a749b74c49
+ 23db4b1daba3336674ef0b77fad7e717f9a48fdbadd767413db62f0846e6a1ac
+ 2d7c69e2550d4192f47e652c964550c177b2180d1f94955b97805dcf5138c3f2
+ 2910b0cac9f9bc122e3d5965f29d3f39c686d47f997dc08bb20f75ba16cfe207
+ 64ed97cd0ac46d25de3ec67725e3a362677cd0cd7dacb46f5f6351bc5f461334
+ a54c9aa270fde84745c0b2089dc7a1a9b98f518dc40fa52eb641166c259dfbe3
+ 567d08656139eba3d76ca8257b2e717be6d4ac62c6e72b503fc336d59c191106
+ 783fba56ebac246f7c89cf31c49e3b1adc017e12d0b305d980bdce6cac66c861
+ 8fb9c4a06baf5f1059ffca385d18160dafcf53267082933fda6a3fecd3a2a1db
+ 368a34b6e2e61d58777ab87479c29b6d3a744d36eaeacb1e80c21c900b9ec508
+ d4c0d36322b31b7c9b94324a0d321c3670f935a85e884799bb97411fb534d825
+ 685721a7a2cb7baf0c164852b581b8f0cf5dca065e11300fdf748ba1b38d369e
+ 79236d32ee2c12820f6307b1b675719f841d05808bb1182fe8ee3f03d00404be
+ 675c2686630d078845ea502a827535509f56f201edfc44c2620630880322b126
+ ee0ce080458bfac364ef27774c114de08c49586fe2f7a5651909a2782dde6cc6
+ 20de9f7de4f7d9d534687dba12a32ac6bbc7786cc8bec47feb306aa2e82d512e
+ 13861cfc428ca7330d28ab9cacd08eb701a010c70caa95050d34f1777d08769a
+ 2402a4cb15e057e4265b079a015aec062d70a5fb4f4e2a7410db2019acae9f48
+ 820a4bf2a05b24ff1482a53a5ccbc784e9960015deb7c8081566995be23e53ef
+ ca2885be6d6a8b2946ca69c9387265cfadb7b589a7e5ec6fb4626472ef92b18d
+ b990dabbb5cccc52c39fe329ed93d3a5d23fac802513a05950e42cc9f7d6793b
+ 32d31f56bdcd1ccc615a0c68fc9ba7a28007283d1f11f4655c59907bb7d6b582
+ a3934c78586420880e70eee2ac0589180490cbeeb168b351d691939a97589d3e
+ ee16e7be9547d888674753eba617b8ec58e9a047cfe7f384fb633d669619b8f6
+ 303847e278ba1d4338c60431e0c924d77a51606bc0d979207958b3929486f343
+ 739461b64fff745d5944eba8c8df58d3c738a87bac6a7ecd7132e2dc9434d7e8
+ 8f831da242981a63adb3e5e77bdd3596b8046d2868e4b74935708b4818f0c160
+ 1cf2479fa77e700bf116e262d7a5116db769afbea1b488b459e8950d3ab7d423
+ e705e45b4eb35efcf832bc4c45c2b17bcd3b081fc00c979fb3ae014bf6815d01
+ 1d444aa60479beb401b3fa62f5d48e9b2d694de956192ba7977a99f01ee80176
+ 0bdf23e8300f0b833dc3ce051e2464673e851da92974fca322572b30af6b2423
+ 4d9229a964f9a26b9b63312793fcbbb38bcdfa3e2e881f9b5f3891ad3df1b8f0
+ d6ab5d8b52183c9ac3e652be1b0c0ea778f784d32889e5a2d0a84e30cd782461
+ e666f8ab42030d678dc0afd9ee9bb38a14a93321f5fdbfbbe00e3e6f0024e880
+ bf43e86d19167d51a20499d1e77320c58bdcdf604dbfe51d8dc47fb790fcf236
+ 67f8a78c35c7bf5a1ee02355381715b506d75c974a419537f748121d4e5704e9
+ 0d2e24678b028ea41760aeebb8d0a13b6ed4a1261389fedc5af2bed76da9a351
+ bbf7837339219d58729064849fc3421830ae6e9226df0ec3b23cd47642dde117
+ d52d46592479f58c7a0bf00e64447a01954bd967b711d3cec51a0ee25ef63156
+ 09b2d56b4232a1a655d63e20aa9e8980169b425acb20b1f7f5b76888a250b420
+ 16552ece25c50515c75953ead5ca5c85a137eb130c5a410e74a32c505a9eac98
+ 86f91bd80bb87832d6c0cf3fea94265aed5fb7a1ba5d0c2bdf38c2a43f75cf73
+ 0dc61f7e99ff92cb13b03d5a4758a067d5022dd572af332765e648fef922190a
+ 2ede1e733166ca3f0b9982aeb0924efe4e94c27e12cdd2cd79be85718caa3f1e
+ ebb6863b0210c41359eafa40523b05e002488fe58e1d4202e9756555645a102e
+ d83c531fc327bb0d4b27ab5bb049dbaf75a230caf2ee4f95a826d7458b45a5fc
+ 53bca1bea348896be4db20fa6d07b288baa36247c54e4641c40486bd5b92a6bf
+ c3ecc7f3fdd6fba5c4a410cd1a898d98b22dc24bbeb96c877ab9ec4bfe972c14
+ 223f4ee6c702650b54dd6c6301668f182f2ae0f03499b7b7a579cae77aa9a294
+ b824b4f0766d730e4746c82e25299b9c91fe523b0e557d3ac01b4e0b2f1aa3c4
+ 8494c414e7e60dbb17a4ad8b519248befa7b98db52709fda9008e7d35852026c
+ 65bb3088b4bcc6c0117fb7f263ddfae0882bf179ac79ea290c358c7f17660746
+ 35b4697324822ecefa27b69ba3c4dd257772229f306378f0cc745a01b2f98f2d
+ 3b07c9be07acd444829290f82f037fa980031240abb616edd881e5f86c2b5d21
+ c07a977f819154659468ab38ecb02d643bc7cf4fdcd6403d9d1c0bd99b1959f3
+ 3a8bba18b5a2da5e198bbb3e3896936f14d4ba26570ac4ff425a6a067294bba4
+ 61afe05e66e3f41e0ca2a0e24226f8b6ea4be072a1e4d1653e2850b6b606ba06
+ e83eb3509c9da916b18827b204cb6f8e396f2dcff53284cdfc7bc585f515280d
+ f31c0a3b72787a78b30b082c38357ebb922edfa8207d069b7632a5da53536c3d
+ 537dbddb409cf872a29e65c9883bade6c96f2680d41da15532023444668ad62e
+ e32bba0e3404e63a04ec28c22d63cf2eaff49edcf49c71b62f694aa843031833
+ 60401c3631321da8000527d51c7580b83f414ba7400c093c0a99d9fd32a8156d
+ b0856ca08556541ff28b5c4b723ff7d5a02cf642b608d39bc2733ae685a932de
+ f5cdfc3bc17669035eff7dc0b2de8b08eeb0af2c4fe233c142755e76a20a9018
+ e6a40d169d340abacd727b75e61ec30f7f0356e00963913aaae0e456bf9b6a4c
+ 9276699b085f1bcc1724f75a4b16c4a87b9c7cce93336d8b24fbb02c65cc60e7
+ e49c7a15247afb770aad747ce481155201ec21486b9649ff47a0e593b253721e
+ 86984dafe527c458756cebc671e071d2311a5a3bdbfae1de2d0d7bc317934180
+ a8d4cdcac18d365e82c51c442b6c3fb4d4da4cf45b58d630038a0895b91b75b2
+ b15e97db4363d860ffcd953f7b7959e51ea43b19e550154b7e9a4fb6f951f847
+ 67ff4578f698448395399aa54714825b6ec0a5c5204652fdcc2bc5d1809c52d5
+ a1ed0615c2521398138bfe69fdc897c150219b437ab01dd93aa1f3b1537f35a8
+ 7a72598875df9b1af85e6c19fdd8c9f7159708ed8292ddc55a7bbbb015791ac3
+ 8639ff6f7abcbb21f3d2605ce696b952c9be9c01fbbaa4ea0a12ea6dbe380888
+ a4f1013a14eb693bde7f4266e059837d92585f4a062de2a2e9aa0c668141a3b3
+ b2a6b9775168971409a17063b57cb786a2acf46cba6bb385773462c2129d9e38
+ 5fb97f0083f6673a5bfe1c48993a352648d38601346a6ea8ddfd05f9327d460c
+ 01386c3df63cbc29f72c9e63cfb51681a61a09ff2cc5b7eafcedbfc3cbaa44ec
+ e184c6b29113be2526ab744f82230b47e46671ebe87eee5bd13d770b8fe3d13a
+ 6c349cbe11a744efe795ac9f7f13b5f6537aa15b22aa547ba82bbea2b0a96ee0
+ b706d51b84b1ec15949b77c6575ce6b469c115850e237c39bccce257878c7fbe
+ 4ef41574a6d083e3a59d8ada4fa51436bbea6afd8bc58aea9a837fa16a4347b0
+ b12c56782639f587791d9f6d0898decd06b5d430d6651a44c7c5f80886377bc9
+ 4126cae9b591441bb9b85ed26d2fa41275539e3be279c669104ec381678b74d9
+ ba7f0b7bcd002fc475ef593b4981428ca44c719e559ff8251daeb9b26447717f
+ 92ab3f08374433c361708a0ec849a1326eb0005083bc51c2cb5ce180ef76b870
+ b994588ce0cee5ff29e23e76b04a1057c56df4594a5a9ca8d10fad13bc4ea12a
+ 5ade07f541aaaf6486c6d86ab7cc684bb7ae76d45941c1421d75b0cfa270f5f8
+ ec8819612bdb0c2dc8ee8ca62e01478b974be07b202fc6233483adfd120b2622
+ 2589ce7e8a42750b4a244cb7975dca0b4408134309f294401aa347369cfcbf12
+ d91c7e1201a2f69b0e54f33df8a12c55b7af30ed64f44cac4afc163885ad2d67
+ 6c14b392a6f55ffb9dc13b575e6123aea594d85e81896f616da025e53ebf75ca
+ 354fd67c6ca9b7b0dadb05d897aa8221a3d3a8e31b5984e51e1d320b46b9f913
+ 55700541701d1d26ce6d847ed39219621fd4dcd2b26f1e52c3bc85e8a7d67684
+ f953fda2d5eaf01f5290eb35b2eff44d27c04709a4694c66d589e2f038104e40
+ 8d81fa08f8677901d80378f2d36127abf1fc04f41b3f7eda993b432b34678fa0
+ 5c3deb83d8cfeb0a88815eb023e580a742267c3ad4497d4ddcd4b5e4995d5c04
+ e60a38515ca36256251e89ef9fef33ba9d6936154586b2c31a88e8e425c7cb86
+ 61a68c32c1e3bc07d56b11fd192856e13a4a3f2dc811a1b8dcc55fd7c9685bc2
+ 544f3398b1d1e8c9034ae96282bdeb2b805746325416d699df8807ee89e73965
+ ef0c58dca75f8283501251fbd57ddc38c14a0a9557be68117970ecdc70168401
+ 320cdca9ddae92db31d5dc80cf63c90becb813d511ee40aa9918804ec56fd283
+ f7ddda9409dbf8e34f26d851183b35958b3563f02a63af518f32ef8c872fcfb3
+ 4080800e5733b82a2c982ccb22bab5b0f9d67e633b7505be4157d688b244280d
+ 98f627a91411870ab6d84e50a08c739feca7e003ea00047feae3125853baedda
+ d6924defce967ff77b40b2a0b1af322e0d6db27affb9228b17cc9a5fb8fe20e1
+ 13ff252646848f5cfb825ea009cf78bf36095ef961e1e5280bd06f7849ac8892
+ 7bc2abe5566d6c5193cf203ea9a475ed5b0d0225554c9c170a4a20a1fbf67bc6
+ bda3e0629c85e9ec671e21b444a098527837f9b57099309ae9a9559b662d9c46
+ 74043ecc24037ab6ace80ffe92e07de266a26af87520a7349bb726944076e0a0
+ 71be2b29bcb9cbe33e602674d310269e842cd78e2981ffe20a873751f98eaf21
+ 66a5a9db7a9b7369d01ec6908fcbedfec09007b06c1f457add7424f8e0cbf77f
+ 86e1da1224bdbe35c9315097b3af305f2128a652dfa6e4c38571716ae231a47a
+ c1e353d966f32b516041988bcb6ed1fbf6465a125411faaca2ff572f8d80cff9
+ 2d0394765194fc17a78abe7bf91192c73dd1cade297aa05666285ae7dac5cceb
+ efce0cf4ead36f9ffdd325327dcb9ff940a8bc85e9e32b53a7dbf92d2f995aee
+ 69b3a94a32a7a40945d67be26f7193f3014bb6b02bc587501c2c65db9c4d1a8a
+ 90c711eb14a4bb16d2db8250e2b58e8ae887ad08b6130d79ff76ff647cc7b91c
+ 11abeadb9960df641243bed0770e1931dae588963cef78e3abde1fb3863a71dc
+ e4b400450c9927369f7e1e807b136908c3883d15e83b1f8fd378f420181e74a7
+ b47376a5bb647c3e6f10aaa6a88de27163188b1b0db48e24eaf7042d61f5dfc3
+ 6646c7945df1290c7af8b9e9971a356007fea8b7904d05930888a48a591d22e0
+ a1f0d8c7ac0a0505df6ec88d0b81f6a30f1a41390e85a46094b92910446cd60c
+ 9d6624c8a42777b7617e5a5dc69e67e2fdb5d5d5f97322d6efc8a3ebee3aa079
+ 51045e4af73257ce66d25325b9d0698fbcb43b6fb3a41abfec533a63bf2cceb8
+ 4dee826cbba098df245a7496063d8ca6fd60adb0c1c082440f87ad344b981387
+ c2e62034aae8f7ac11c45885d5e31210f44b1f305f69cb48e620290c5f2562ea
+ fa1afbb915e06fbcbdb3570b93d22c4eb6ca432170b8aabb624894468fe5d034
+ ebf8f166427cabfbfc3710a717b42b402ac1ca78f5e40062cfcfe62d72dfa6d2
+ 2a2ce066e7c89d325ae0e874e0a80032a1adf568a44bd47ad9c7b94c786fa18a
+ 5e2c3d7484900076791079e48e28ae7be41faf087fd12b05b54e3c2038a6c150
+ 3338faff00d4efd7649bc995a2d09109c504e573814e46eef6b5d1f9a70199b7
+ 2c3d5952ff69e59ff77c068e76e065993586928b1643c43692c760f9bb672f23
+ af05d6eaf4e16f05923f3c24a9de3e3341efc4de4a8b3776ab14c759d29a2c6f
+ 79b78e9b8ae36d271100fc8f9ca9f3cf1fdb9a35be6fb39287e94a94d0d1b22f
+ 28edc31a1627bbae247c3ad54dac6e780101e8134ef7fe57b1da287d1827423e
+ 976b0d4b8bc722ad6386af68da5688062c8c07650686cebee24ecbbbfa43eaf2
+ fea0f603e8c02588614539ed4d61a8b76afdf87c128c51c8c2b18a974e682272
+ cd4bf9bffd083a8a6d4829eb672392bf2e119717762a06f7c350fd050a4d998f
+ a8653c60b2a9cc3cb3a5370aa8591e115b1efb79843035e20a38cae387354db0
+ 7011cbfbcaca62482d582b34138f8886926572d6c8910b6036fc92db24bae605
+ c883d0f8d90bba79b636271fc1e9f6b1d5947b69a15c32db5cb9d0e2e160fdf1
+ 434a925f135cd14968a579c59d6752ec5e48da86c1e51b4c35113962a609f1aa
+ 8bf29771737fb77784ff9e0959fe72aa8b65492a30845ffd3c897aa7c70e2384
+ dd4a32c05e87adfed587722e2824b7553566a0cd1a39d6ebda2b8b0841b7ef0b
+ 63782edca7dc63902cd8b4b69a9fae414e5bc7f30322e58eab26c36403955228
+ 6bfce84cbcc49456842fb71c162da475ee0a232b13228508d7c3018073a764be
+ db64729d14b62375ef30634600785fba1ebe2efdd4224b29313d5aa3face6ba3
+ b7af948f1111b3a1b068659e3044dc007276826d33814c6014ff9f3f5912e2ec
+ 69bc0300097099bcc958eafe2cfc34b85e870f4e8ce6a9baa87dc9958d468e2f
+ 6fc1a2b9ab992ca3f96fb839da2f8d72cb81154b2e06b5f2224449f9fb90475e
+ 8a4a327da0f25cd60e288b5f2ab8d98c61c7cac9c63584c130018dd93e9bb102
+ 1241fc991cfcbd7c97f2d1ad8bfe4f9adb5b3e64f041b4b5f04f8d3095053502
+ 3a1cdb809343195799d02c4cca185d5a9d86ebb8124a028422732b7d3f630f89
+ 2b457f4782a64c5f4ffc419f2659f186162155dbcf61e995c8d7c13ba5577d45
+ a8d9354043733cbbdab4add27cbf7b29d94f4d5f733d3a8bc3957255c25e9efe
+ 2f5c8f0cf8342f36c3c24bdf383b3a02aa4de4a1691b183cbabfe7ca2391f6cc
+ 185d3d1b3a01f74a7b0316b8b03474f7cb3acd6618962d0e0cfd0272c7f53e1b
+ ce211848dce537485324fa99ef572ac2a21f4dd4b089e0355e5d28afd89c10fe
+ 21752fb8cac5255d0cbc08d066f60906552400fc7d38393721285b1bc26b0a8d
+ be28e239b75f5595a64faa6f8e3fe191f5eb07f1076589d4c62caa5eeff313e8
+ 45cb6ae316fe0047ac597aa6f10804c75411dfa2db3d9c9ab8b89633fbcb0f2f
+ b8d184680ea31a8a979406f8ed95a23474beb6da0780e776b654d59a4e22b7a7
+ 8050eb711a78c1aa62b97eaadefa9be820c86ce04bfc82d336f8d6e7a482fab9
+ 654d4fbefc34cbe092c9d55fd3add4efe87c67f767514bc01f756563408d2444
+ 1fec3a5e53bf4fe5f7cb7112aabb0c986ac8a63c61e52a6384be22dad2a0c59b
+ fa2afdffa18d5f5da075ecada29a91a2edc28dfa25b026cd36fe6c00ab39f9b8
+ 2aa0b8b192eb84de1d4544418c6a7045b3cc44af1bbd1af5d6d5c0b834343003
+ a78f876f64aa3cff80df51278a57f204c7de40cc1efa3d80f6fee3d318f8b000
+ c2db2c930c2451a65063b97dc99f9de04b2e01c2da4881b82faf474afff8a5dd
+ f9db24c9492c0d34e8149da91a15a5715f3c38d3a2276316dc7c376fcf602cee
+ 01d14b5903365bb97aa93467c612ed5441a2bb5ab03c9a3ca4224d5ccddfbc07
+ f9703c872f0193460dd6cb5c79ede66ef86750004b04f0d1e4d3fe8c3a92e9ac
+ 629f11725469b38e87754b85366ca694a2c8029d977b1f6c99eb58d021295dd9
+ ebb649faf89fcf0f035a5162628d77bbbf2552c26d076684cf068d3239ef7d69
+ 646cf0320f3f260902d4b11e8477219263ae556d150aaa3b3566d7e27fa5c40c
+ 0c6893b3368e7af9967b06d4698013ebb9d55e3e1b593e7637fcb5b4768b55d9
+ 9e44b807c5db8edf8da7c795126ce714ceb5f53d25042625ed183542f8f84630
+ fc5986ec6c18f36d5faa70b574b86ef634abfafea65e12f1a6936f0d86dcea83
+ ac1f87c4ed72db03b5486162572077c3732aed47185ba6ea3dedbe7ae889e5f9
+ 84ee3204625c5c5a451c415a9401aca754f7bc8008a18511a668e46a68210f2d
+ ec15872ace763cd900d0d68e3ca2ad8480f2414fef99d23c78e4654b91b215d2
+ cfe45d7327e700401fb4876b667e8878b403f0d6d7fcc16c2ec9081b09d856a9
+ ea679e60a42506104b2cc381ac60451197682532224d1c3cfb0a20f6dfdfd0ab
+ 4ebfee1e0413a1f8649dececd5a95757612603bdddb43dc58158fbd899239eb8
+ 04dc2aa7d4784d33a58e87f46e9400e9f6c688b3d626673a8966da71f07f8cb7
+ 12c0b18840a79bb59c705447a3a24dbce7cfd23d055a95fda0205e918b737f87
+ 45b77f69e3a6ae7dee545ea2e9953f2271ff331a25f278f7818b1f7343280ab8
+ 77817c241e8d3b5366eeb0f3e0d46024849a13fccab4d8a1d825ad7180f8ec6a
+ a451c2f6960907e51df46d58e0e49fe40d95b81df688030762f7874e2585bf40
+ 16cf24837425816345cc142ebe092a8575b38ba7d27c42862e8866dcab0fea39
+ 69a2901b01c95866ed246c01a8ff1ac36f373f066eac9165a02d8f73e99e424f
+ 7b1460d7e7b629d8eb4be52124186841879357556d7be331b4404454328c6b96
+ f584e44087f133089176c53831f21a289d0898f9062585c0a0d2cc81f285038c
+ 6e8900a5edf3386f6a39e7da1962f4092baa9a82b09e6d5fb8ff6c718b5f7695
+ 3f72eafa146b90b89f0ca8923d4b8e435465d503265dd85accdb80b9104f72a4
+ a1d30eec91f6f700b5314bd1515e41eafd286714626ea9b71b64d0a3b6f03961
+ 64e84fbc66b101425af92f78db052d1423efc219452e47a6f59d0c2e01d66f65
+ c12838ca77a1da49234f8241229d41408f4a059f8a96e7e01305423c7876e8b9
+ c30dd782de97d9788ec6ae5b8f281999b0f284af2c4e913d752f0453d08fa311
+ 56978f3a7a8fc1c9bb5bde0b223b9a0b34e4441315632305e99435e11c8ca565
+ 7822f375f06c628bd08434a97d61a25cb0cf9cdadf05604116a93a1a20aab6ce
+ 61644aa40188b1c71a18535dfc23a60d47d5f13e83ead258e0cc76bf6a6c2a9e
+ d507c1968a9d32f72cf1b05d07f14decd8bf7719c1e8203aae3cac86ac5680da
+ 56be79b65125b4af16cec475c0cb4770f4cdc9ca7743bc4bd1fbf4e6694dc63d
+ 1e25b5a5d054d1d8c68030dbfdca48d5d81d54636514b5cb8e1213fa45104f7f
+ e7cbd4ed6b6bdf9d86e385f9d9f9fbc309692fc6ce3ecc5d97200581ef49014e
+ 2359ab109f7929892db1a63a9e278d9cae86276ef8a2cdfea4c602b717dc9211
+ a285a7ffd844adba5137768e71148e2cbc1b64539341e39517673ef980e66f2e
+ 8dd95750151937ca183194438fc9f65e76355d6546dbec33017462082a6f39f1
+ c7c5ae43a2074ae00802b5f50c766beff912d9f3f73d81296aa159cddfcb229c
+ d3cb3afd6c1cf9d4415087dc2a7749511d8c173f6009685b73859f0acfa42a46
+ 190431f4e8a52f5d6c1ee031c7835488af8fc5b85cb3b92dad27491e3ade2d4b
+ 3f55b31f8b0a2589283f7369bd9112ec7abb988f7e8db94e5cc1e688a91d740d
+ aa45c6e1f27feb43875a8dc952472588e2e7f4910239ccda5494a3efb56cbbb3
+ 7cff3e999061ed6f634af108230cdb28e4671e02349b6d74ee29a5ca57a493dc
+ b6565a036680d2f6dc2b84683fc3c8a54e591673f6cfbc618b3744ad8b883090
+ a35269b33da286c29d926ea214a7d371640deec976a577619220187778d9d32f
+ 201c2df6dea28a9fafdef53e80d942b390fa761ab6c7289d5b5df59afd712a42
+ bccd958fb5432ef156ea47e850a2c7ca3d14e0027e0e099aed792d5965878618
+ 0b0ce8d809d7f38276b16bf668ad0f39032b8a31854f6545b700b0b617d022c1
+ b910ff9718b91a49ae19e883ca357a09c0ecc29e9e51171e851d97098fc6b9c1
+ 4a98f19a4504472e0c748d2817e8813675b9177bb210f5e434dcce3cf6b533c7
+ 2ad64fceb651c039d449fa00d1a23632789064a511ac137a7409a59bd172ffca
+ a86b3d5c68f7eb548b35e57db2c79f31b55382ef031d7ebb5737abe94a612ccc
+ 6b5c31a02ca2389686dde57c5a6b58a43cabe2313238944f93fa3d2309cb12c3
+ 504b2af4411ea00895fa49cc105b248ebb654edc09354dc3ca14a04976bb12ff
+ 7b1aeaf1e08f4609ef3190cbba5f1d9f60552e4ac4e3dc1fc5118f0c0507bf52
+ 90538dc1e041a63a5609888c10cd7a2b5ad7e3a602b9c3e39e39150802337bed
+ 0bed7d50c84c0caf96de68df4bb101e15001922b31718d42723b4e74a9508f88
+ 8de666d9bfac09ee52233977a94abcb862391a1d62fcdee602ed89022d618f42
+ 61fff4e5cf72568a9b59f85b3113ac3147721b677edacc8335e3c79a7e3d4c00
+ 60c835ddf3a16bb8d6cc5e12b8f5763451ac654d580ba795ba95f9c075318aaa
+ f9968c4974f7fa080b8a2682c15db72bbf5ca43be8dcc5c7e9ddca9c97e2cb91
+ 67476e14f58dc8a7c28d4473de5fbb7fce7e5529e3127feab58be1448c77cb44
+ 138d207ae53172932b1001993d51424cff61f7956e3b7e53ef8c344b414f75bb
+ eb09f06cba26175ee5127a45d81d4ff207d1c5d3659aa0a2b7daf03e685262d0
+ 6d2bbef6033f574c0f42a3028ce2251d571b739ed030da4a0cd24d0aa0071a62
+ 502722c3c27434f1b3cb8b33d51069b03ef86ab7dacccaf1ba01dcefaa8cd290
+ 70847f79b5c25beece73b0b2276405fef125f245ac2c0ded526bdf176ade097b
+ e0429604d8c4f78eca62759c30cd4bc7bbb141eccedd4c51e112b599a0baaa8e
+ 61ccd2546e33fb93e6321125b630c1bed40eb5b33dd2f76c0ae2d78e583bb616
+ 8f547541dd0e7c7aa39e5e65ce29cb57374cba14ff2c19bc377115058b5f3824
+ d003ef571254be782d86ff96912924b0e3bce97d075f9a59f2ed8208674a3036
+ a9d26914a1890b5fc00a4b8737312f1811f81118478dcba135ca193481e22c4e
+ 9daab61489a5723b5fd81cfbc98e1ab3bdfce4981cca35c41dc85d7dfd6dde48
+ 04c797bd2b628d6c0a2bd2aea05a64ad1d5f0879fc021c4ca6a88e6cc505539b
+ 923bfea614c1977b8f03b1b40a954bed1127ac3bc976a5cb85359de68ba2ec54
+ 62a4b73224c530ff4ef62528c5cdd6d90713c54457b93c1d661ec5426127d877
+ 39fffc8068389bae2fca594a7deb46e9ee3583c417a6c86b9bb4ad125a07a30e
+ 908e8dfdebbe20b045635a804435f4e97d39d5cf0538050ccf2c5c41ac21cc1e
+ 3e6679884301059930ffc95a453d5c775e8658495df5c144ccb6862274fa91a5
+ 960069bde465e5871b620ee189e3c29bdb003f7dba7fc24d8626229d38ea3c2c
+ ad6fcbda69d994c1cf619cc6800c010e4ceb251e3a0ef0d539cd81230e00575f
+ 81fa125797523c1e7b7c3dbc8cfaa12068c71685a791a4ffa02dc31cef15d64b
+ 40af80eccd35f497de8b41f6eab0a1ee57bd1da3028c9d7920fffd4e91d0cdad
+ 7255fbd0285deade955b8430cc72a564e3f5b9b919716c2eb67610b5a60d5f3f
+ 0ddf5e07e4a2b11d033a2008046389469f26c10837385270e6f6c3898ef34c03
+ 258b2431d28d75851b4c4b39134f25579bfb51bdcac4bed96e6965f39b50e598
+ 879fdf2fb0d071cbf61b0a12971a551febcbc540e4c72847445e278494b2a348
+ bc59e610dc16b333eeacbbbebddafa146fe3a4cb3fae15af846ed28ce40730ca
+ e1887821df1d02cb791d2623dd2762bd9917dbd8e21709d54fbeaed7c7fcca4c
+ cd072b501753f4f6cf7e17e55aabe45271c734286aef4d0461242167c6ec39b5
+ 41156a194ecb6473ae1d583aee5f9ade2c7e3a88029ef1934cea0a396df9854f
+ af924d8f67becfc4b94eedf9234a83b2dc2d74a465537c97d572d8f83f4658b0
+ b6e9dd328c66b1ce0835819ebb60590b80c6890fad1c9f752f01d74256026fea
+ 752c27ba91ac116e50c8664acc7e1b05cc6f8f2da835a954fab216c12a14d562
+ feda92b7f2aa74a1376d59bca99b0dec1d58352dae026694bd36fb800ba4c243
+ 3a72fa8af6e6ddf0ad6096f07efd60ade87e765dfea149b605af8cf5f5e7e584
+ ff55ecf1bb8dbfaca7b5ea7dc4b763f25b840c94155cb22220e82217a00ce44b
+ 4425929934fc2bd757bd83bad10ff6f035dc73e635963da7a3bb5f12ca4a517c
+ 0e721866d7244a3477085a042f16a356c3c549878880be60f0ad94467bfb01f8
+ c9889d73ece5749fd17b41f5dc124a36f37c44abaeffbeeeeec50b84320ffb35
+ c2b55f244b9e816da736e5f7bfed32ab039541c2637cdfa01bad58da3ae2b239
+ 63a3957c1fb595140d473e205812d107ef781ee58b04188d1b47a86bf056b89c
+ 3496c4f3313e9bc79235e108c834b9053d5a3d96f48035195ec2ccb7275540bd
+ 2a1b95a4ef56a97ee0d7637455f185b82bde35d5433974eedb20fb2cfbe9265a
+ b60c5d0436e6d32e7e6499e81a453992e9c7cab6f9a2893f93a6dd56357e4f2d
+ 3da86f9985d1b70f79a6e6669eaf0813e0539e84b4601a62a4ed8398a9592de7
+ 057e33d305dab1df6b1aab18583cf9c6687f2019d001e9d8e77f63befe79dcea
+ 9d322c217abf906e6d7ceab21d32f0154fff0ab14fd1930896b994dcf002e99b
+ 719c66c5791703e0cb229c9441197720d1f68cc9237bea74a75affc0b6e28140
+ 5981c6e7a39012bd338d33a428138448404c0f369bcdc009d99fa838d121c6f6
+ a3a588868873992584d92dc5ff05652296c2efc8226547729b7ece0b840d0157
+ 0560de9b6cbe22a792d2441e1da3f4af72381addfc5d1564e5aa5e985f36ad25
+ c6ce3f75d725d4908501c928452aa05c15a3ff1f413ba1e91eacb9f288c4af68
+ 548327a6496fb4c66d4387c54d5fc069edb28fec3e9e742fd30ebf5e6be10d9f
+ 8ed0b76d0c99b1afcdf0d8db3e73eb049b77e4dbc4c2006d6ab38d4586d126a0
+ d5aad88e6f9591a13bed264a8c3500f0968c00de07533a8950db2139b8c5f6bd
+ 84360dff4d3aa76950b9cd7255a9775d2c5fd695b3372385b90c2f9fb00253a7
+ 37810201266930e1bcda9f4fe3295944644b2e62cd322dc8f7bdfb4db33efcb6
+ ef0313934ae1d638007a714d9381f5774f4092b66cd67115564279223ee53a51
+ 328d2730492af0f7312a471e5117945f7e753afa240757d6acd7ad3f7ff083ce
+ f5f6762a9748a53003304571ee20043128a824d14a22c4cd742f04c7eeecb354
+ ad4ef54c03ee1bc1279821ba12174273514f292317eb097246d4f586edef4a8f
+ d44676fa28545bbafa63d9ee3aed67647d349583b300153fc438476382f7800a
+ 92d9ca6714423978d61eb3b050dfd63fd6ab6f5b7b626a31b99790d37b22e3b7
+ 97a4fd5b6303adfb9f3f1d38ef6de6030cf3a62978db1787173498cae7531134
+ 90f95b777a9789cdac01f00f7df42bcc397e47b468078202d3a283557b385e70
+ 24d971100fd11a2cc47229a78bfea1348d913635d5e9fd6a18c74d5587de67cc
+ 2bb78e3e1a854e38c573e6cb8e6e03d67fb6a49cc428dc1873676ca48ba11865
+ 6f998732c5929943d06a877964e3feeb809f7d1be48d663a445af4fef51b8bca
+ cd338212fcab3d4d50e087981ca12fd82b2eac30e82f346fff02c0b4b8fbe37e
+ 0c56291ca81c4b333b3d3e7b1dfc10455f6670d91c688253729731dd3e7b0916
+ ef98ef55f491da6ec7c7584473527125336631cb77db6e28f26b85801f5c2a6b
+ 0e1869a6c1402c7effa7e9d415374021230ceb6d9006d859bfd9ca5ee140f10f
+ 879e6b279ea53434f825f76e6db87aa7f6f8c41e77e531f58994121eb46e9352
+ 4d332d804aa1c862decdc628770e027d278ff68fcf6670f76129eb9547fe96e4
+ a2c8683bcf538331b42f168dc88652f78bbb01c4d0d0c234ccbe2a16d79e41e2
+ 83da8c7e3637e5c38108496fd450893c715e523ab4f65b863195c27566f3f97f
+ d14b294ceea7754a54364eb313541ccabcb964f77ed61033b9ec083320433255
+ b66b50184b7e5cad0eb03f1d2476ef6032e2851662faaad77a3dd00799f3f167
+ 2f3c949da72d0c9df2b9385e5529b8140953729d22fc48fa1b8c29dbfe30f036
+ 891e024d8c4244475a8d4fc33214d9ef1596b22913dc174551b46a0d35320af6
+ b30b0e7e183cf826aa7bd984ba50a96a8162add7cf4e28da519e3ad4bd9d22bf
+ a40ab84162d520a4f375796b638b5bef9519a75448677c54dd39a0c8fbab457b
+ 3d1b22b2b36ffaa796c256bc95752c5e55a52c5d19a5830c5a88e2de864794a3
+ cb9f1dd31318213b2c6b2dc2ce6f7bdd1279d667f78e0dd69d8a7412215e996f
+ 61cfea0eb05c53397b758ea31a0ba8397beaea3e637d8e9983435621950b2ac4
+ 09b1a999140825224f5d36987b832c7dbc9b59b3232a4bd72b5485435aa0d83c
+ 3c1cdaadf81255f4119a1ac08ea59223fa960ccf7447a966484255d821fcd461
+ 5d237f309c9295f3a81fba2b232a63ba4710d5d3aa18da029befa901fcc58e81
+ 523cf986edde8a20413ce1bb22a4fd0eceb0a83fee4c59728bc2553a656caf9d
+ 59803ca3f9714874a7e2bb44e11441d3b7e4a5a2507bc86eda8de6256bfdd778
+ 2ce56851c842641b9581cd2457d68c8f082b85dcc8a045801c7bad48948e41d8
+ 6750f1cbb1eb9b87cbf10345ee8979d6b019bcfdb5fb48f6ee531a8e14837aec
+ 7360a68b66a740f65100ac06faee9eb164edd99a3625114f8289c1c4b860873a
+ 033fbee2477f6c49db2a3ca9c4844b54ec66ee9321d750eb5873b8263d47323b
+ 327a5750e65b57120bb519c478a042f133c74b6ea3f0cd4bf966233db96478f6
+ 171cbaf6abce6ef8478d1f4ca7aeffb348f89f6e00f4a65f8f7c6df715d64f2d
+ 00c34f38616341dbf55064595c42acc1d8c7c9c2c5073cababdeb36f73858721
+ d3b16ff58694f87fbecc36c37e42769279c525151c3d6d7108caefc9faccef4e
+ 3935c8d5c518658b99568f0929a3abaed820ae42d7bdd8029f1f5c9fe9c11397
+ 8165723dadb72852d676618f3a627cb2efbdf4d167f7b46836ff95edf621fe92
+ e0d23dd1a2b3a4e22fa4844c7aa1d472681fe5f64a1db80a1b096a52d8519478
+ 5e14ba2e9d456fd54004e5a1178861cb756df45ede5b6b236b3072a943456033
+ 8de126b4b0313bbe693251604d88a8c8083d3ae7ab30b6c900aa8e1ca5c4d12c
+ 47b9d0041c264ccdb4bdba50728576a176554a4f5f8ae8b65836b414d39b0317
+ cde91bf8ac3d6ff01ba6195c83aeddfff2c0df9b6522b0e238a9ac1dd25c6fe2
+ 017a0b17e9fe50fc826a32524e9c3dace18900ae8dbb6a663300059465776e6a
+ bde46caee51c0b230948545b8cdd683d7f3f332592a4a3badb8bdf5b144848ce
+ 805fe257c94d06046b3728ac72648cb9da1d7f07092543e354dfd19b1bcc5ce2
+ 28fb0f7f66a93edc74418602c2f6311ff75a5e64c573148abffa3713ff1b02ed
+ 2c06c787468d58729c07057e0a5c08913aa9ebeab58cc727fb7d8e9d426431f7
+ 704f513a25bda4008eadf0f00c7963a658b5deb90a622b1bf156b80b9aab8097
+ 9720d5e261f40f3927e1677dfdca996e736cfca59738ac5e26db44707ed10617
+ a9056c71b64a9775ded12a1e76c39bcd4449c274c78abe2b2035bf2af8f30c6f
+ cc7b4adecff52ea9269b7a2fa044932f492b81ab691a1f11dff2e5f19049aa9e
+ 1af5ab0bf0530aad5e361a9e6e6417d1bc4d420e967fbf9fd8fa268f34fbc58e
+ 1f4d32a16682d678ee2d2cf771f2aa9f716dbc29257af4d24e9ec12a31a853b4
+ 765868bb46fb2a7852c2f58fff2f79c70d047e2867d46d84077bf5db970158ed
+ 32ddf849e87a11deb8ce5e4aa8230cc6220f6842ded20aee746f6a0f94909df0
+ 5ca9b4e9ae6a20b457111845c0f1cf4f4388f121b7f4468e4ee5f8aa89aabc55
+ 95a868b6869310f312304cc00ed79f092faefa26185ebe6ef1866f28c1e114d9
+ 8c8f9533816184f9242719f3313f000517c418c4745b678c4ea96ca3e1b4eaa3
+ e25d0644c767f25db90116c2acf5ab6703d9e7bb63d6877405982b6bdcef12f5
+ 3fc75507bc69cfa936cee5629aa841f80ba467253711285ad95c165afdc8edba
+ a66385a0441a0a20027a751698a62b2cfdaa01f65c64dfb3fed654373f793c78
+ 538efbe4fd81ab9577e40cc6c01f045f1797d94f4e15edf2badc77ceafd3ec4a
+ 7356a7a18b66488694f4a51e0d3a70a62e0b2b02d0e49d0cb7fb68010c3ac999
+ ff9bca672e4692f3b7a3853d02fb6af00a31c0bb15f39171bde3b526811404c1
+ f052977c802573588a7c06002c6eb6571abf3ddaca9a8f6571a6d3367e0ef503
+ bb1185324ebd8aced067f8d1b8e07a6929f2d1ad0a9ea949d74ef5fdcb0811fb
+ 522303b91da3819d5ab83dfdcacf86deb353334a323ee42127977ebe0d97609d
+ 99d1777cc36bf57f7f4172111651e47c05a8f621622b9a73cbab65b9bcc01246
+ 328368e58ef4355d4b7b0aec304418f1625d462f3b32f5221286f8e854446c60
+ 41f22dca2ddcef4c88797e14d722eb7d41d55c185c146e86f2368899f97be599
+ 78f29ba2ed4cd6e93c45e1878894541734f143c119cfc5cf5b9cfffe2c5b751e
+ 426aa6cf9077a1ea54fed4f425e21bb7aefc7b97d45950ce410f31ab75565f1d
+ 87af42b8dd67fe2981807bd295b0959b181ffb0e0068d6ddfaefd0e81ba716f7
+ 6c85c4922805ea04a4b66db39ca7edf603f0065a2be2ebb7a24d5ab034752d2c
+ f28d86dee4133f580b57e5dc087c9fb3f2bc015d1a1af1786559fa53c02df068
+ 8601cd10ecf4a9c5a9230d0f078643fa057e68789f5a2759d9166c7c68b77a0f
+ 6432e4402d7ba6bcb21c14b7617f340015687b0e5657ca9a580f25034a824ca3
+ f77d6138966e39355a3e8efd5ba16b7c3be4d2d6fbfc2435cdf488192e007e50
+ d8ab05443f0a8bff8dc4ee78562fab2b3f620c2370b93f4e21286f83e5322785
+ 5c106aa071c3f9878ad32196685d3a6db8f8b89bf3968451d6f325dda71ac647
+ 52fdb1cc7578180271649ba7acac6096ae37e79138bd3e88d3b263afef853931
+ cb9bcdbefe805d4001422a34cea029673f3e7970345aee221e2e4ddcfeef9f59
+ 27e67847b49ec6243a35fa9fc7d62e1c91362fae2f9c03ac7979766fcb1a9019
+ a26f6ac795919af11acb338160d15433adcf97f69d8f08ba801a06b8bff4c270
+ 3936560ebce72669a89b3bc986bc2a25bd74bb5101063a8fb3662741f17b5da0
+ 0d63ea48ecf66659e94e46d9ec76c75981a8ed890a2c9a1ab46d10338bd3e088
+ 07f0305a3b2f51f22c32955255d5076f20d9e114a7d7c0b74444b2408c06ae1f
+ b7b77895536fe052c2cd278fe3c235ee39fc09c21d35944a91e4f8b5a87959cd
+ f7e9e2f4610f7d69a9e2347ea8719d0fd43bc6883f7df67f0180dbb3c388a204
+ 2d04aa4cc0e5c82cbb3cf9ffb1d7975dca62a5b6834542c29cb9738941d25c38
+ a20b991bde115fc4945a609036dbd320527ed57e2a3ba6d26ec1bb0cbd2aa61f
+ 1b5000116ce4ccf77dfd35c6544c642bbe078b0f0d6ff198cfe5c35714f9da70
+ cfe7d945b4547fa367311a07d11842fc807c0a3bcedcb80d071cc2f1f703242b
+ f571fe56919e6fc0d9fdb95890b0fe4ce3ce04cf778b92f22f526e8321b700c5
+ 4a0983f150682e6a5340878a4a15a8a7c1fea6dd64365743c0d241d23e2ea640
+ 745cabb62366fe25e1f47a4b46adffa337a6eb2bd45165c20bf4bfa05572779b
+ 8a32336d2bd1b680abaaf53c138e7fbe01b754ea456ab6c900c5f150985341c0
+ aed06c6b34c0b16a61a9218a437d4d4798ab14ac63fac45b7ce7a28b27032aee
+ de9fabded48939becea6772bb87d21030bd025b73ec68aabcf98f8c8c69e3553
+ f59cb41ef23286efc607939b2c5835354c5d24efc301fa0e16fccc696fff9b36
+ 4c39cba039c01feeebc382beb53dffd57a3cacfde84b7a878c565b5b6ca0396d
+ d86f936b1d82b35161c614015ef66a9b864e4399c3c73034fde73e72cca2dd45
+ 293e0383d734213a00ec40f233c44b743e7783a16f7ad8344f4c56ee8750e690
+ 765394ca6a884d656996bec66dce2262e6ae248efbde23996bb48b0a43731d9f
+ b4ec6d1bb4b64a712a1ccf155e2a179a76480c04a78aaa179d727f40938f39f5
+ 9e7500e9830c5a02c18b5c227b16b6379cd6de4af0a3be5849e4cda3529789d4
+ 08f91235430c6a93a75ac889f3559dbb59bcadb15bfe79925245bed291f85dda
+ e5b273535d5c535776ccd6a328dbeac7148e9e92d4db7da139c5066c7b6d6fc0
+ 64a9b3a28f1bc2bd541a20efb336d92ec5b21f10fd0274f3edd2e13c978a57d3
+ 38095a5d4f1bdf0243710e8ca9e14ddb9633de16eb357ffe9ac468705833c6bf
+ fcb4411e9307b58150d4324f2eade9123cbeb27c0fa6eb8d56214887d67bb2df
+ cc39a2d787d8825dcaf9bce947985c9b7aeccc30bf0e8a2dc66dd9d8db714fc0
+ 17d1d96567c4a2dffa062e5dbeb221ec088a173571a878b64feba76299f400cb
+ 266589acff2080afab3290672fe8538f6c2b4b47a7a9a88b1f6a883a4932a976
+ bac540a2ebb5c5cadb4cf884e87be0f7fbc5c7515080825014421240bd4a6065
+ 06c4d3f0935138a667a824614317246b35803d14347ac6e84b6b909f401b012e
+ 9d1003058d822e48f9e1a4acae63f325ed48d96674ee254fcf80c7f0a77eaf50
+ 8e85b0b13b44161423228fe68f7ea6284932a4bccf06b2b0357102e2e4f6754a
+ d4d42f65a32010ec4f55363f42edb82f74050bd4ca8a15134d52764a3ee8700f
+ aa87e13e08c1124dbbaab1b6c178ff342d07e6fab354caa49b9ca3c85a15092f
+ ba13b502691daeb8276a69466dd394c5152b206bb7e3eb85e16f14d3ef934747
+ 741e199ac17db1e4171aea9e2f63a9a119124cdc2c56a9606512ec53d9abc9b2
+ 101883a4fd28001e74c6ec898f26bf6e1fbf8528e18c5441225ef41ed09b5c23
+ 9ab9ddd568620d0634afdc00f6a8af5d870cad7d10230759a887cd428e1bb099
+ ccffc063a76b6f4f8119e7ba6b60ba098aaaccb35a3a620674f468d09930041b
+ 9feba9d485f1beed1a1050c5bae99df82387afb73407e6e8c7c1ba0b24a327af
+ c6ed340e2249cf31d1f4b010a1d2b93a8271e1401f779eeede5462e3ba253799
+ 2c8b59b4d1f6bf57b38c1cfd3bd65a13e0bef1d56bdc9427ad0d42b99c8cd56b
+ 539ff78d3ebf7def0c9b9f3058ec0c282fb3a4b0a52cb9fe525e738f4692fcb1
+ ea48aa55da9c7cc0d3e77e04e585124c6e06d404da6a681d64767aea325dbbcb
+ 3457bde1a8b97b0bc3e9ab432105ce099030c165727a8e18e9871dda91bcda08
+ 3684e085db0b0d442587775d590a17a103c8992a40f6cf0141cfb6814075becd
+ a22a60918dee16e11856f733116db3405b55b30fd5e4a9c2ebae43d7adb76d4a
+ 1e094a7df115be9145821083edc8161698a676872d876334db2c1dd472eb5cbb
+ e48350470b043e46550e0eecc7b82c06d165315a5c719f3a7198d8988d89308d
+ 5dfe03305de90668e10bf64bf852377e9459c6a2a2f5bc155a8e9bcf2f083f00
+ f196c84078841653c6c4af3a43f707a0c0051c2fdb09f414a395f954dae1e008
+ dc27b785746c292b0cb656d830fcd16bfe7b25d1bb70e52ee940be7c71eb0dec
+ 7ad812b9242cc5b0ad0a1a0acf53e74ca423a0bc104aaba2aff9373284d674a1
+ 0c8f7b3f1b46ebd3a3554c40e74df8b92acddcf5c15508042231660c9e76671e
+ 70ecd6c7bcc7d3771a34f7275b9bfcb24c5ae4eaa3e2fda5c25c40dfdcbceb1a
+ bcb0c5205689e6c1b829b46dac8b2b9dcda2097d8941f3fd0edeb32ea865593e
+ f77a3897e2a8a491ca64f1dfe32c898096c76dc554bc0457a442fd010136cc28
+ 2af61d255d02cca4684f54bd28d14e445efd82b13d4952c9991ebf50b1fc474c
+ c366ea6bae2367f58995b7ef0c3520dbe31b670a4c6f27c3e6f8d0e57b6e44bd
+ fb51be1c318bd91a215720c6bea4b9a4569ab0243d73cd23000ccac1e327164b
+ 29adc24d434ed5d9751e82aded26e9aa330fba9107b88c83b1a31870c7c81080
+ 1e385d381e576bf32cf5cf7eadbefd2d88ed3a1be074261f42cbae614357a505
+ 2af5ba5e1b9bde2b8dd5ae0884b018c8d155b849d1405899f0ca55fc669b4008
+ 73bbb10dcbde6613541498021bc1e6cab8a879c8e4fa8cd2d96b7b016a137b6c
+ 866b7401df82197c93c58f75cf4d5310dd9eeb8555ea786363eb30835c59ede4
+ 92d944b60ba852b312b13d1c5990c5704e2de6d9b5555593f5163967c7e6d9bb
+ 71d9c916ca0df401fc7964a3d9bccf88443a4cdf527e6d3537e8011b55b07cf8
+ 3e24ca49592f96527ab710e26cee8d68b3082854c1d1f4b4258c38ef41bcba5e
+ 297d249c9368e83443bb80fdc5f49929e1e551c70e97c9039d8cccba67bfd179
+ 46967b766e09360dc7de606c0a7a77dc31e93c7232acf4279103edb5f0550bec
+ 755f4f6d1f2fdeb845ff0d6bde0e92938f6a2ad320c5dc2422309aa7cabec63d
+ ced0436a7538c6e8183288103086cb9942f644c702c1070c94a17aa27cd0597c
+ da2f46924f4f6849e930105849323dfa88681a91c020da42f537517b29583430
+ f03b7a2926c826b0330b07a801fea2777717533ca7f43252674210e99adf1c49
+ 303cee75cb63593345c6ef8126bccba0949eea85ffe129fb5d310c2e072cec0f
+ d0ebc635b145fcf905fdf0c63de1bb1e6f1880960dbc85ce8d58c48dabaf6f2a
+ 66eab31f2ce7069d6ba08cf4b7b74c20255c2063ac883da8b171c60d53232a26
+ f1a420f067c98af4b5102a96522ef80aed22cc87687fffc37f53305e96cc4b05
+ fca10959c44227bef6c8468702e487def7d85c4552b35acea119df23601b4986
+ 6702e1b4adc5f22141c0633eb0c764941c300b171acc02e34cb8791b1f5e6511
+ 596913aaa882335dd1db0095f9a9493ba5703f12a920940d6e2748f0691d51db
+ 1dbb4abf11ce39183188252bc0f0eb404b5ac2c1056e8c179190448993f7fa72
+ 6a3d7633be4d126502d32c1a2cfbd9f1655987d72a5e76d0f49c670d84c6db16
+ 6e8e188242004e08af649c34cb760fa83398e67a044a71bacc3fe2790618f620
+ 5f8daf472260728d07641ef0a29e43f3e00388baa1c290e647cdb51ca07c8a3b
+ a024121fc48d7b8151f3c15605ec24c14780d7b058fd4ff7760ddae14d8b1f5e
+ 9be7fe28e7effa72d2ac2bd317cd4d560bcec44fb285f85d2949350bd4d58285
+ 7ae01dfef4f36a08b75bfe94d228db7bfc368acadc58843e7d6f68bb88dc74ec
+ 6b04fb85c93eb919bcb093f5e654eac021bf0d335d0bb982d606370a823251ce
+ 47bad54f5cde731c6cbdd9faf240c5a6f51f5d440a6cdecb06446a462083e550
+ 40865560638ba77735b26f9732baf07fc4cdd6939d46f215442689bd555fb98f
+ ed72e4a98547786edf9cf72915288aa0732be6f644f34bb8e7525470aa616723
+ 9bf10b11e1fad30c0a6868fd247ed36604c81bfdf60ee395e95bec175718cd94
+ 4c814fbb19cf9a2fa0e5bb682ecb1bc8d30876ac31e8667d0c4984982065fd7b
+ a3f46ee6edbf319f79506aad596618e534018788603aa105a439cc4ab6ec5a27
+ 5c546394ae9e98041a4cab03fbfdda1087727ea620eaeb3b72365adb3859703a
+ 76f243ad1b33492789fa30c0972eb2e44cb1602b686a35106dccf2a65158e453
+ c0d2b3ab54786768069b68073ffe1d2e797533ffdd402b594b61b41092995a91
+ 22df66a6c1f0a312414ec790e097957da5557932f91c23e431cf77387c4e5355
+ 222d12f6653eac00825536ad0f0d37e96b1a8e6902702495825d5d1dad56b44b
+ 26d19e314cb08ba5687625170f9268a5b989aac65b7b73e547c4316dc3814330
+ b7f3c183468a943cd190708fa85756d27579c6ee299db8a78b8409af9a174952
+ 4d93fbce87916d7d1324121f61a1c78cb9cabc9d63371fd36c137aed854d5089
+ b399da52373f40614f4bd8ea9c17754dee448b67cbfdd0e145f41bf0478d1e6a
+ 616935f365aff7523bda1ca61db53cbd2565f6b0a055c1a0d647f2632b515c70
+ e63427909ea4cf1019a02c9e12adee8641a38a1baa39096388c083ab2862c79f
+ 09e1875a189dfbf9aa5a0fbf1aa093a3736a265b77bb8b9037876be3ea594f09
+ cfb2e1ffb80d9efb431fc1d7089063e7f434a7bf423af81869afa3d9d5510b3a
+ 51c859c9a01ecf2679967b4f2ff4f2165b519769a4d9ea3d1a22d3ccdf3c4d52
+ 66463561a0a21a1b879969cf27ff28e3273311a7afcf0dde8a97d1b327deadb8
+ 2d28277e56232d4a8f747b4b264ac8feda5ff20d497e6c18f1cf1a9f211ab19e
+ 470b76de4c809f0a300a21950ec5b5ee75a1122af7f18dee3dbfad8f85a44284
+ 0d20aec8f29fa6820a5190869293709d38d4511aa89598e70361ca39f3d7dc43
+ f7f0340d2032cc6cb0cdeb9f5099a783608ce0aca9bd074f15d4df03dd298dc8
+ e3aa3b1c16323ea925e5024247a41a7837dfea1223929dc269e9b71ee7939f71
+ 8e431502e8780c6088fc4125e1c7ed7139bd30e4b54064571080cd1fdd684111
+ 77f32ce1a09c867184154fa1ef1582d94b5ff54aa65e2001e6072806deed2127
+ 8cbac40f8ce886ce4f29b7198204dfb4d6abf931ef25ac83ec3af033a3fac282
+ 1c74d0b8e3a79cb2dfb976a64565b2052ec691897f99616ea480383436fcf329
+ 80dc56f9bfdebe5eb838f2f2dc2b3e0345ed15de2723f0a92bf7e8e96cdedce1
+ fc3c39dfa662519e11c00ffda4df0c3605081d5a42e885f668fa484e5b8a024f
+ 98500f84323122401fa31982ada9177422ceea8e10c1dd37dbaec89c2a03aed6
+ 64f4ba7a3baf51d2a150951659198c5f3b0226108f575c8eb8cd39f3a117a943
+ 26b86a62c011a4311fea1dbfffe47ddde489e291c596123400e49380c51c3bb6
+ 88f2ca725ac98f84ec38384043aa4f00905d2ca34c02295d4f0109a2f1f38ef1
+ 2f5a649585411bff96d925adc5e96ed91a5f3167e99b4904896db2a923e62977
+ 1d4f9424c91dae6c3a50ee68450f9d5953f70e169dac7e412b1a1b7079caf42b
+ 6402ebf3c7b159a429b3d86f49f74495cbb7fdbc7e3046c941a6df14f14014ac
+ 3995bbc9dcbbc79aef16a445a0a706d3c26702814581ea9a6619c0b6faa53032
+ ae963f26f959c8c1f124552c343ad68ba2d1bb4df600e822a0142c891241f046
+ db5a0f77ea4689ddaa357001d7005d720c6c72ab980b22efd4449ed48d6d17f0
+ 818551b20ecc95bc46b7e1e5b44f47c9aec1edba140be2447a8fd8a8e9649dcd
+ caefc584373b780ebc9f0cde0cf0194c61bcff3e1f5175d6cc5240bab13fd3d6
+ 29942fd198ef2510f3f068a0bb30c5c1e43086127a19f251f25a69bf2665f479
+ a8d2a19045f74bd02af5d99724d5bb7c89b6b9a18f7fdc01e7f20d80705391eb
+ 4def06b21d49d28a2099ca7a1c8da414a66eda6aeb38c692fe7d89ad5c838d6b
+ 2ccb01e45ad7f13ee06db6aaa498caa2ed0ddbbb9bbfde1d529ea3eec3c17b84
+ 43e151309c3db1bea309376baf9a678b7ab53e554a4cdab23f3114f264e47f8c
+ b1e5e70cc66ae399ca19b5650bb6a66510be7aa39d67fa76f5a456d14bdca1de
+ ada3cf27d618d1eab87f2e4066f94545316d09cc9c45d5d700cb333108db22ae
+ a6264aff15c3def98d99081743491e8854fab322658f2f76ed3ba044c6e8649b
+ 3da9a2cbff387e6495823712d367cec74022490ba750be2a3ba2b5c343c25c04
+ 28bcff431a145edee3b31c9d486590432da6b808b5ac224119bb57511564ca99
+ 4b3832e63c81c996559567b8c7b1a38d891b3c853a7862ed52ff2e61430b53ce
+ 32e95fab8e5b0cb1854a448e3c205c46fdd30c2ee4556144618324cfc740d624
+ e10692673ce3092edc3dd5ca96d4a3dbae427ec7d4391cf152b13d5fde4fdb14
+ 729cec5beda3b42a1f9ae98bbfe99f04ce114f4ad62d44fcde9edc48cb345041
+ 53ad128311c277f4f56bee3994d94036068de6dcc6dc1ea8bf876fa2a0d26842
+ 371e891ea19d6899ef26f3b6c65800ebae6bcd98cb7824ba7e47c8e53e38e5a3
+ b8109de9143def1ee22f5bd205f95a7128ebdfd7905b7a36fcee06b8e9fa0a50
+ e297a15d53b8e357cd12c469b0d5e453c86b3529890c30658f3d7ee47f7488e0
+ 27747b0e535a3c41689bc5b5874770141f8adeb76fd11898c4035deaeccf2422
+ e16f46ba244044b471c6d6c54c6cf871860914646be86e0622b532fd7ead9cea
+ b25f2a205f1b4e10ea514f458758cff2de1311766625670c873f5134deade261
+ 0a6e64443238a829985ab5f5393deb90b95fd8b6fa10f873e26ea88badc80283
+ bdedef13363a06f9aadb5ae2469faec8f224a56b0456106892649bf6cfcb5c50
+ caf1b76f08dadc7cce533f86bc698d0fc517d96eea51501202dcb8aeaf99a77b
+ a33e3ade7a0ed182822c0c7981d7f72f366194cb32cf58ffa5f57b211fe40066
+ 1a21851dd4061376be1aeb986f773698458d75b03998ba97f143e059f8c6e54d
+ a72cac6847089506ef9841a2bad26ccbb219509f36aa7637e2880a2e2aed1d0f
+ 655d8483e48edcacd6110230d8bfdfa7af2ca22d280395815be401cab0aef078
+ f14ff5bb4122671a076a58047c673febdd3208a94321f1662d93e0c117099d73
+ f9ca8b49f966f2498c0a9fa7b0ea24bf427191c059556ee66dca8bf630b435e5
+ 766c7e5fe301028b4dd91f68cfb28a91cc04161dbd635b271ad0499ac82ecb0d
+ 8e1a2d7fe33d80113fab41bb67d196f7f8347452d8655bc8d3fa0ed1d13a0558
+ 8a7e2a73ab2876177dbccfc60d8dd073385ae435866ea48ab68b1e1c0e1aca4e
+ 7e37eb8bbda29e4f1558e99bc5c7d487a31bfe2fca9a555c98df2b75dedba969
+ 7b866a3ae1dc8fd64659a030b676eaa97516445004de32a38e2325e7958067b0
+ f97fbf7e40a37ffc31ac3fa85eddab4423b69f6ee6a7b6201c0580d72d989d2f
+ 216e659c8cf322b0abcd7594f0028a3f284d5759e222750cdc049e956ace3465
+ 6b2ebff515c01596d7db3c60aa71880b48e8d1bef40f9c58e6d0451d9323b5b8
+ 23f6d4652f142890ede74bb19614c3b24cf7f139d475ddccb322e368b5da0652
+ 1194fcacf7dd526697aaa19a280e924028cc36aaa19209ff6e167accebbbba77
+ 9b1460fe314a09ec87873d8803d8ef3f05c800fa47154f275b8ba4be6405bc07
+ 9e2299e57c45d101b64c93491c009c3a1fc9528a9576d1a826de46262b8181c2
+ a019d02715fd6117bff5b4dd07dde0c805e67d921096b5a1d84ad8044798df1a
+ b7727b49a1621f14c3
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N174/Arial-ItalicMT 1 TZ
+ userdict begin
+ %%BeginResource: font ArialMT
+ %!PS-AdobeFont-1.0: ArialMT 001.001
+ %%CreationDate: Wed Jan 27 13:02:03 1999
+ %%VMusage: 29179 36115
+ %% (C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. 
+ %% All Rights Reserved. 
+ %% Arial is a trademark of The Monotype Corporation, registered in the US Patent 
+ %% and Trademark Office and elsewhere.
+ 11 dict begin
+ /FontInfo 10 dict dup begin
+ /version (001.001) readonly def
+ /Notice (Copyright (c) 1991, 1993, 1996, 1997, 1998, 1999 Adobe Systems Incorporated.  All Rights Reserved.Arial is a trademark of The Monotype Corporation, registered in the US Patent and Trademark Office and elsewhere.) readonly def
+ /Copyright ((C) Copyright 1991, 1993, 1996, 1997, 1998, 1999 The Monotype Corporation. All Rights Reserved. ) readonly def
+ /FullName (Arial MT) readonly def
+ /FamilyName (Arial MT) readonly def
+ /Weight (Regular) readonly def
+ /isFixedPitch false def
+ /ItalicAngle 0 def
+ /UnderlinePosition -100 def
+ /UnderlineThickness 50 def
+ end readonly def
+ /FontName /ArialMT def
+ /Encoding StandardEncoding def
+ /PaintType 0 def
+ /FontType 1 def
+ /FontMatrix [0.001 0 0 0.001 0 0]  def
+ /UniqueID 44339 def
+ /FontBBox{-222 -250 1006 922}readonly def
+ currentdict end
+ currentfile eexec
+ 76ac4382df5fa30f598262867033f1e140ca4fdf95c2cabfc650ce0c7c4c85e5
+ 4fc2bd92f4b2caf745a129ad266a29aebacbcd28dbad78271a7d2222231c3571
+ fa36c53b990f1b7489f0d254320d1c3bdf23e2c1607cb3c7218a61e692463cd6
+ c97902eab1b0ad9978b80d2a2263d834d17ea2f8028d0b90404a665abf09ee12
+ d3c3834e47334a47f2c514ba2d7fdec91826385ce2c61d9291bc49d0a6344042
+ f5348512d1f65c54b9940151ab0d22422dbaf65cc6255414ff6a185697230a08
+ 23b2775716184143451194638c15ed5bf9cbc45ee3f2b1a9331f838b75ae7d72
+ 70bd6d7623358dc127d682401e3052156940186b1c7edd7ccefa7767c0eed29d
+ f2be4687ff0512106cd2d703a80cf940495eabc7e8fc9ee13bcc0345fb7d90df
+ 559e16f2fa5ea1962d7eea36a485a2ac9801c3e6c91a88d342c7dafc0f65fcbb
+ 454eb47042d73b438545dba65a971ba81e672c807eaa18feb4a8f93c7c884d06
+ 1f50fc6157ce581f44febf55b8ca883b5217e1e9184433c2f3a1ea430b17d2c1
+ 0064bb237844a53c4aa0387d166ed241deea2e000cc6ec2bfb33ad85f6871f68
+ ead5ca6d7526cc38f7bd3284332ae5b7b4f0190d0603392507fb6cde9dcd4907
+ 01746b846bb7061d7c1ad5b641dca7828404ad8627a8ba3ae84f9263f89ef32d
+ 35fc96dfd188902b7de82295734ef180c64f8da4b2a1f653fbb4ccbe4c294428
+ 62f5e2508ac3153d64defa890d67be42a6e835f856234565554f6029f21338c8
+ 5ac0b17b1689786492bf4e9640106b902693e4a63aff0d50ea83eca6d92ec55a
+ 879af8cc8d6b43174c95afbe1c16ed1f3c12936cba7255f03da34a0d220f1b2f
+ 18f4e87aea7d283b99a70db78b429add489ae89182215350800243a1e0f94d65
+ 2130d35f747680743a128d315f72703e787a1ecfa0deb20eeceaa0b895cadbb3
+ c1e368f76745392fc0a3dd4fb29d4bd55d14306b838c033f1d5807f38594df8d
+ 45f1432b343e3835a0917455599caa5da13d501a6545bca9ab2e43c6189106e2
+ b9b1354d07110fcdcc1de75cf8378a851d137f04da33d6b637fb61e4ed40c03c
+ 7514397b0252535140305b5c53d98d051a9cc54b98c5ae256754afa9ebc80ec6
+ 1dbb6112f1314ce5698d6bc175d37b369645582f4cbe3e267b3992d3c4c37314
+ 220cffa562a76571c29d5be6d626bf69dbb59413c8ec8c3ea963349d4a01f828
+ 1d09fb1ea06d72c504fd695b52c65e3ba30334eb0f7fc21368bceb9194869d09
+ 8eb265a8e3d1aaf54ad21322fa91ed654b776182ecdc5f6a7bffac1b589e1bb3
+ ce90419d153b4626c8f45fdb5ae790546da694319189719cb01337a2ba6fdb9b
+ 57a75801ef639ff13db3f3117d84af2c46d03421e929fc4b36f4a79daac0e50c
+ 6d10ec7e0232e8b23479916ed7be07c01ba1fdfc9284291779ae7e8c212d1d40
+ a7749e8457b87075be99f21f619f58ac7f2ab0bbb40333aaf81dbcea24ea5cd2
+ a4e42e4f0eabc9d0d9257893743396e2b5fc6601a0e1d822802654c6fa00bc26
+ 17baeaff6abe19a3bbc0741fabf1da240d770f060f4097b2dca1bc67ed697a8c
+ 4821addd0cbad55afa549bee2739cba9cc47212e21c91cf9f9170c45316a3633
+ 589bdd37006b07eb91ebc7711fd415eebec899456a8fce41a43d93f484aa3483
+ 30446b9066fb846b733a1d91a600e115e70a7947aa4d2b78bc5d492eaa9db46f
+ aa80eda23c82dd6aa0bbabe5d97f727bd3c814e1785cd32267747ca2de19858f
+ 295a330248859e126821814fc321d85d24cbd171ad75184b3b1800782668036d
+ a3de4a6bb6721f613a59a3ee7e319d79210a110ed7d52dd4588a450baa0a0dc7
+ 1a58fed2a37473db7e5e19af78b16cd1648d0a711d52560276eac2d544710e35
+ 79b2050c0fa4f9a575d8abd7f78899128a390593d016f19eaffbc7f6763f9003
+ 064878cd746b91bd08b42e1c8542082e12ee9bdefa55363fecbd90b8365ef29a
+ 38644c2dfd6672ee69fc3de997c1017da8c81d223fb490346a778e02ce285544
+ 1f8a5dedbfe52b3be746613d9d02d83e17d0fc679137c2d483eb9fd542313905
+ 7f7cfaec0088115be17055dd2e2ccf64d5a302f2e4f517759b82bf99e11bfc9b
+ dc3dc45f0881224e184e4148c46f02c3fe90f763ed0fda652d9ac0f16515d57e
+ 544989056660e9cffecb78bcaa430c1cacd44d30facb6c9e29f617bb98ab5287
+ 6ce8084815f566dd204cdd0efa0ff775af3290473c4d656f6b16dfa504c31ad0
+ 79fb0e4930600915627edea4f5edfeee468f487a73411efff8f0852e07e4a52b
+ 7558d32cdd4d4e28acf714266f99b19e87aac5c04d7a3c34db9cc84f24fd288b
+ 8ed18f19cba04421d95124ac106b8344f1682938b79e3fdfdc23bdf8eece54f4
+ 6c8a18935865664516f4495c4d974e2c82a523a0c68f90f3ae3482775940c0c0
+ 174633d5112352c35ddf2c7a57ef4f7b6731b506f4b5e57fe4bb4f1d33b01107
+ 0cde4e732a50c96e09302bed5d5bd73b44c69f4f3f0fd9623bb02c378586470d
+ 308f8bb8d8d4acd132c6b2991d852fc134ec6fd7e69c4d4eeea5a4e73ab2a48e
+ 4d119d7a1f64682ec648fa51a21038a95b73f50abf9850ad6b3abe2f9e0cef23
+ 6f3fc5f9b86273c9a0f9218cf4801e5bf908adb10566acd612a277554559959b
+ f5e2baa5f2a2af68bbc6972085b01e8a8954526cd78c24f24c6dcf8dd799c37e
+ b4943a0cda6c6919ff10c293720b14a110349ca192d6d358ac5d3efd8005c5c2
+ 610cd0f7156859f149713358f45e228f392754b0d06dc536fa12c8489d402a3e
+ 0d0bc0d653d0e77d9071466adf904fb973d4eb2045d068fb53152e0dcac2ea2d
+ 7d59a59a7c4b826aa04d4354e1d423ddb2dcca63e225230377bbc7539d0b249e
+ 9a7d5538ddc534d181459a2519d59b1416888eeb7b19a1fd296c180c59eb771a
+ 75f5a77ecacfcc05566bab9535bceef74699d948cb671bc9b84007258b24eb8f
+ 07ea32edf2503b4d5dbf0f726ac9128ed8590a2c81fd7ee708e728fbdc5fc03d
+ 4eb6c2bf36112db8df3ab2172ef68851b18c520166f7adcaaa8bae3244511da1
+ e83fb8f7f2f2c0047602e7d578d08b87d8d06ac0b36c82da2593df2899870368
+ d8e75814ccb9477d825804adbf5bfe0cb5e437f21f39bd4729e576e93592d896
+ d0e2e2267f546fc91b921fb8bf67d7e1ff41a622dda81b0c9106d7aef8726c1e
+ 2e11692c7b8e2f1a25d33a959681609db5525214416ae0c584faa4ff4b3233d0
+ ff8565c6a569e60dc1ddaf35424d9029fbe655342308797793b6814bb9e1aee8
+ fbb162bfee3b3e4ac07cee8556dc8b0650448da184fee8cf966e2b8d556ac88b
+ f96725c2874400530173ea0b96db624d208320ecefa2e2f3c3b81e3fe1c0bbf5
+ 01e3f5b4555ebd9c9224d840556854c6f8020477d1246894aded689ea474b131
+ 28535a3ffc6a9c6ca4881ef3502d209ca582cf5677a162bf177179f8b9606b06
+ d09a9a4ccea3fb2ef05b34e90552df6ee75e0e0caac0f233cb5dc84affa71351
+ f856121ca7e6eebe334622545962ddaea67e8cbb39eb6c73a519cc21cc0275ee
+ 982f6ee9f99866ccbeee85c378819e080937b2f2217fced42e2d522491a9e63b
+ bcb7513fe18eb87d4dd62e3f265ac62e5002d7cc47961bc42d99e34c644214cb
+ 64c1d537d102ca0cabab78d517591ec99ad1e85f07ebe512a28bf6c6211fb3c8
+ 7a3200ef0330a2d4b4f744ce6743dbc1f3b3a13622406499e264ec8b8de42242
+ b091f76292acfe0b1970132783f4b8cf8f3b552c0aba2bdd69d0ce811770835c
+ b096f1f7105ccc8cec057c827404d4768f3832deaff0988c645603e2ef3a5096
+ 844429bd3b5f2577b5b00b89c619a25a3087a66a4bf35f1a2f2f43205d25c54a
+ 336717062078ed4644dfdfd88e6706b5f8b3205663cf5303a43b8c47156d6f75
+ 468a79a0510be406066f05e9cfe6f597fe68d92ff8107366a6ef60d7ddd5b53c
+ f569a6040d8a2f0959da594526fba26021b06131a388c12f769781be703518b5
+ 6c988ae9129dbbb3b0d300274c1fb10c640a23dfa6be42acf12d63a8ec0d0cd6
+ dc0dbf16a0d9c9a36db6baedcf6b5f025866720f72259e18d7b966763de87b61
+ 19cdfe0b208a667ccff3e0a6030b5300998ee8c31b704a50d12d8eced2880154
+ be88b63591d8b09ea003cc5f33872418c03d28418684810f1bc58cf16ef7743b
+ ca3f21d3cf9c2d9660ffd0c08b8c76549478120793cb486724c5ac95216f81c2
+ e6daad931b79a0a3acbb0fb087e05644872ce2190e3dd86ab6395aa7afb473a2
+ a5977c397010bf244f7f571ea1d80c429ce484de3f00f21f119b0bbdc2ee068f
+ b4710c6c324f9e531c037f947f9cc09c2351ba7a12d9bafa200d63de0998f76f
+ f59b90c9dcf1c44e390a1e4d0239a8195abc71f25f0712fe592e94ffab89137c
+ 1aaf8aa341c0d9f4009a3b81600ab819fc248cfa3f59f355d1d92612620e1cde
+ 126f20ac7039ec7f198dfc48995afc73ab55fbdf59b1c31d37139698d08262f2
+ 91191f7307930d9b0dad0c4181744b96e4d6ac908d355a5b670c17287457ed76
+ af1820772bcdc438fd2e5b08ad3bccbecf9614e848ba8cd4875c7d4e67a3aab3
+ b90f0a191230ba3ae1061cd0bdb458093aa73406ec5422087fe762d7c30be4b7
+ 731d7c80118812c9bb0ab2594db97caaf7a6a941382be67d67dfe7117ad3f153
+ 82db3903cc8eeb238a115c2c4dc673e6566cdf49a17062e44267e94c363113f9
+ 288d899ba776af872e17c13f9448d07ede0c145caee491130fba1a5c27af299c
+ a2a49d9abd7bcb459af5db10ceed9910a945a761892e4a88030b07620eddb303
+ fc39845e445924f218dd210e3dfacf2d7a0264578a27324a51d9fd47417f4603
+ 1e9627c6a937fe720d7d8581c2ce062a7248c22a62a1bd3732482d403d2741f9
+ 8f12241f2afa9e269cb9b03674f440d59a39cc3aef95b71c7cf7cc154385d0a0
+ 4140b4202af5233027d144a433863dcc314bfb1eccae90895b396c47bed1be1a
+ b169a312c95c6f207e9b86bb188f2f58ee0b2951c2825d88cc97754c02fb90a8
+ dde557072bb673b9d49874e517ca226c593710de95bce0c58b80eb29e0124497
+ d299c29b49146fa3715be8ebbbfc63637b82b126c105700e73b7050d0a77c550
+ 8be01d9ef53d624f81cd1e6cfcee78145aa01e7474ca2a8822f17ee165bf26ea
+ d772faa83592551275d4978bc0a27d0fdffac77e2af73abb8a6ec420ae5d1c67
+ 8292fbf63576666158744bc9b4abfebeebfe4903015fc64bd92fb94944bf9f6c
+ 081b65b84e84a9ccd7fe02309910ab350422fac82c3747a5d2686b53575d59e2
+ 7fe069ca63c167e76dcf7c8f4d389acb966dac17d94230c074fd304c67fe4b53
+ 1283bfa7e7c163f261e49dcdb80641bf2bee668837213aa27a723ec10c0383c6
+ c15bafb44e6f020b681ecda2d3870ec51e4a7fb2723f8ba4d34a1714687b9e35
+ 16db8ec0eef533a5abbbb1d511d42f65b34b1435576162131a5891a1ea821200
+ 3b09bb6c6c48f3445f7a6185b38dfeea1d567ff0c90ce46e28484b76aefbbc94
+ e8f7309480b2d66a529661b4cfb7c0c43cc37b35fa4f160aa9ac48dcda5b6961
+ 4ba67ae9b8a5610ee7bb90717b792aae7216e1d9661d6099c514c73252649540
+ 7b1af622e86dfe84442f1ca89cecdeea9bd50dbfe30a8ec6b0dfff6856e34ed4
+ 04979a508d7653b6f92095f6577936b10faf06ff03e0ff5a319245f425b1a284
+ 22b99f54308019cc2c60c5060f4fa2e075b9f654bef8a41c24756a34af39f0b2
+ fafb1123de4ee420e438990e66efa4669d78464b9668d1a73846a070dd146ca5
+ 35d4e04c7904b7c69fb1847fa7b0d8962578954c73c42fb31957dd3093d90b5a
+ 103ac9269d0f2c8c7932a794bc8b59ce03c6324420130306a1d42dfa56fcc967
+ 68ca34335e54be82596dace11622d5b65dd5a9c50a254c22e83f79871907bda4
+ 62f26bc7084067d8b5f20588c855d2e59b0b676d43142e60486b3b52221ca7df
+ 12696766f599a70fb8a2138e2db585c2270cdc28c6664b28475e827cb47d259d
+ c44186fc217dce173b03beeeae3f41b0d8380c686329fa85932746e9af2dfb16
+ 3addaea7053a5e14c2dbe5e553c4a0642f789f3c6ca9e8e36bdfc21e86833631
+ 04365eceeae6eabe63cdcfb9e328e672ef98e047d7fbb0a4e859d283503d108c
+ 1edbe6c7f393451b042e1b7d2b746d36e0051099cf58027d834250e2bc151bbc
+ 46f31261252400f85fe00e68c69e6d3cb56ed2861f56546ec3f441997113ff0e
+ c0c03ece9bca781b98c121bdd4085345f81d2979604965f7e14022f16ae57a54
+ 19556d0170728931183d4401aa197e216d095258918d227196dfe0170ce204b1
+ 3ba6a2f90ed6a01b71a190852852de916511e8f93dba157911b80797f50563ac
+ 0a82d60719d9ec4224f95b83fbc0eb1a103c64bd1bbd8a674d4d1a8d8f778fd4
+ 590313af0f8aa439f193e4f28bc1067bcaa5ea211222d68c87c375113c6af1ca
+ 9b51552d31c7967ac4fa5f1a86dfe5b7e6efda4cceaaab7569a03ff5f44ffe77
+ abb1bb65062685421ebf77791ea2be4414a354be99ce0a5e0355aa3179912154
+ 9c945abff2c85b3d7614f83a0666bc5349f3955e6804f1a008275df1faa16248
+ 1ca06afc703e36637e0b1b7f718691d11603fc52148b296d39eca26c00c6a491
+ a29c9457ae7489beacb2f60ae03c29f9738a9cb0610f5f1bcd42a76d7e572172
+ 58bae25fc234eef68f5a3d194c19ce178c4bd7a822dc3facecc035ac3361ddae
+ 53afe07092d99a537f5c924423dd7cd7e10c3f5fba9096b2f76f28e1325e8ec1
+ 89c334c577f7894f7fb0698bf822c98488d890eca8de4cfc28069e06faf6b7f3
+ 51ec4b30b4fb4f329405e4b59946ad9ffe7f60911ba90efe666b26ba3f63a749
+ 65d05509efb912c13e072d4a417b3cbe72285bd5a48dec3df6e444d8bb2d8388
+ 4eaccde239687aed668b406d00559c88e400e64e16649e8100098b432cdd7139
+ 1d363f816ecf7798f1462455b1781723ed4f33c3c6eaa81e2977977bd09b7765
+ 41ae2b94c5556f5149b5b4143334e73bd78d9711862451e855c465978aaf5686
+ 1b046ba4cddea43f89e7f5969a4d29da69c0e22bcf7ccfb16efce0b042c46194
+ 076353385118b2bab257752b47c4d47fb2d28a670ee246fbf5c9e52169e92e95
+ 9468e9a6e9116b5414481e276bb43c32359b28940fb5106cf3f3ae19458ccd49
+ acf3b8c208253ea800763a2074ddb3d9d6d6a3e7b3fe9bbdc6ed50a2efee514b
+ 22dafeb6dbeb3383f142a72b95c9084a8425fe56025d1ca18f9af41eb782b26f
+ 1a4cbeacd1c43dd2be71fae0e61669476efc46da149bac47cd6e9523855bf596
+ 41f640e9008b2c25734c3517f7d639f8fd935a6e14e0bb6692496bc0830e7d9c
+ 2203e44021c0374e87019c19613cfee78c509ec4440d89aa1f33c5131afedc61
+ 02fecae58d22e7a033b012b9186b9b1b4ee69c506cdcf02b3c134afa8d44360c
+ 77a93522b8ab80908253dfc1c9d91c7ec2033067e021c893bb449b1565e1364a
+ 697932c506a622a1c767537cfc710306616d93555a2a63f8e0a047d67d5925d8
+ 3700e105b04324cce8714449de2ba7ed64b88d3f414dd1a1e63bd717c6a348c6
+ edee5c30c029e8d91b2dce9cabb3b13691365f9f5ddefcb7f692779e5bb7af02
+ 9617d49f54a22f8ae6db50a03b5d6ad11645f625c39c7b37072de8f3473dc618
+ 03e7e185e863c14643ded7706f17240f85747282757deecd774fbbda0f7bae08
+ b08242c5bc26363a42bb1fc879048e72683fbc596c3f1d4fda0443a5976a1573
+ 04ef66011a9f8f8696a0d3cab4fa556ab109a0b0b5dad11161763dd155d7ba54
+ aa28185d92c9efc4cb60b0bcb03c50391a5901a869952c4f65fd917ec08becd0
+ 944b494f020acb81e231e7b98cbf3db5f1703f040a6145763a6fdb6396aa105e
+ 7f12aad30bc06e6bee45fae986c0faa4ce3952c6f1ec1926012b4c5493c5d0b7
+ 58d9a4f6c1591125d2ab64aeb47ead21c8971e649c6c9c18a26153253e30b4ee
+ 95bca9762051b1cae932d7132a3d4c23fcceb4e5e3c17fdfe2a911961ad55158
+ 5de9eaf8a729be4e12327364a4ff1738ea372fde937c5d04ef03881325876bf2
+ 0b1bb3ad407b8beebbc440fd2c99b6e13a055463961f0741e52c77ea3fe22e93
+ dbd608b2996ba9c25337ac27614e83fb4ecbaba464cfde66f0f949fbeb3b80da
+ 6e68749e47f0a10a141b4886fe0e92992d726d86ed681e2ca97c1577e1bd174f
+ 5d03ac639772d263aa1bcfae9ab6472ba10c5a831f729847c4dd334810fc3c3a
+ 759a3b33b715b283718e0cf6ac68b57d068d0a476db61a2b340edff20224d23e
+ 8a8830f33e9eef31f54570527ef41fa045451587f3b154f3121790c585e0ae5f
+ 1b012700681b083872e2bdbb7f8a23d3bf97bf87d7cde1bed4adc8d7e5efa913
+ 5714f9df8396d728b384a6f0b019fb02adcbc0922edae7e94d1ce78a7041f779
+ 02624b4c0e7f65ba52056d76d61fcbf652e9ff464fb5a2c21e9ee53f01029a9b
+ 2bb1cb4bff99c25d2b4e1a0d4c1c9234b7ed78785ae86cda8102ff357c6d1818
+ 9441774bc20aad8a9b543bd77ba2604dc5ad5af5fdc42b6f301d517b469c978a
+ 0efcdb7cd6f43157faa4ee97a60b9e9ef240990c8f1ac132dde465e0a93a0f98
+ 27b7a1b70f9911493d82f4b2bfd3852d68726e82ff2fe4f4148fdfd125cf9003
+ 551effbb317412613d7eb4318e64694fe3e966a742e6ffa12daa8e13366e78cb
+ bd1ff80672e67c5d28e562d5adce360c174e2211eaed34fb84f3aad3aba241e6
+ aedde1dd0219636d891e38ebe419f46035fdc8ef6606e95185b7bb935ea6ddaa
+ 4682753a0977dc00845ed4aa418e5f73817ca48efd365a9277fcfdb14175c3c3
+ 099d86738b59d64a9cffd6a1814a0a0112b0b2a553443127920d60fd79607b7f
+ a9bcea5f6a4c6fa0950ea1822e686f3d472cd815f35ca5af6dd40b21c18d8f6f
+ 229e214e457d9352d5e60d3ebefb840bc7250d45d2d977560c0195dbe8067898
+ 2296064f13c29daa78066437cb4d69cb490bc4414cfe87cc87e6331056040947
+ d4fb66f2042ddc4615727ce914a10270ae1598ae690b64d97e1410f16f988fb8
+ c2a02eb9b4cbf49bd6526b9ead29a8127a3036b2f021382cda205781822312b0
+ f2c68884191082bb51db23a8f721b06440f80f2de4fb3c38ebfe5623330cdc57
+ bfec2b15b15a570f65bc5f1533565ee49eda9a5c47dd962eb0aba2525853ba47
+ bd920882570b5d9f398ee687cfdfce67335c464c8de841813c3240583b6120fb
+ d6080881d5036c288058f9b020d5afcd979ca578670630341f8034395a1ba4ef
+ 149e6a01b9c6fe42fa2c6fa8aff9cc4dc98c629afa664247a98bbe6ff7cdcd48
+ 5ad0652fcbd52bd087ca7bf1c78e5c9df0be76927db25c2fab3b89ab6bb361fa
+ b386c8099a9beaaefb95b1dbbcf636caefff730257f50e61a597875c3e52aebc
+ 0f1daaeaadce926fad05abc3e81563c7bd44234a23bb51eaf6cc11467850bbc9
+ fbb57458dac9ec5b6a7c2197f586266c201af0de0c31e04f300ab0844d276ea6
+ d29ba930bd18c7c0bcbd860fc02762bf220b2292229b74cce1d5cd5605f119e2
+ 36bcee7abfcd3a1928e568902f5533e3639151d67648f05f05f1f6d3b52ed05d
+ 706b72b98355df2f73f3b0b5e9cfee93075a6619f5a05ac92ca48a1f69712d18
+ 9719ee36a16c396f840fd00652e358983ff431d17ef69b03914551f0daea24c8
+ 0e8d4031a54390d248705e6761a0787216d86fdd15a7bfb3abb00e393f919414
+ 9d1217080b7631ca959b15948d8bb423336f36ca4b61b44023b9f3cb3cd5ef19
+ d896668dab550740f72d50fbd58a0d4f9ab56b8574598f5aabc08b6b66cbc0a3
+ db7525b11bdc4ce96c9cb5c59e498cde229018d22b7978b87d68f127009dcb1e
+ f1a4425f9aa97057bfac8b11fffd6ac911f5901cede814fb58abe2cb85d4e9bf
+ 15cad425335bf709fc5dd665e73b55e0a177478c3b9f574bde40c8f90df04efe
+ c23054c0c62827bf0e37e450455d562023465c5a51cc67da4946cf2b5db47e40
+ 726a1500b94db2a40bc988c48eb3096feb6d66ce90d66f704d84158216381743
+ 1e7424990a8c8d2555e41ade1443f8abbaaa2fa6dd96cfb4e59bbad563278185
+ 82d0f4a2a57fdea7149e23c014b72658a70ca496c0c1c9771286946ddced2e89
+ c61c5766bcdfb7960c7f34b581c047de0c3ee8bfbfcad3eeb0a9e3c161770e1f
+ d6dc30874fc30db7431305eb64db03351709b701e93d8414a8c916422af06423
+ 010931bae935fefacc0189f374dc36f087b8917998a9e56b978cbfb965c82a64
+ d5bb7b8d24c67def296bead21783121acdfe44f4d0ef8660d1de94cccbb0cda6
+ b5a2e6b34ff94437091017ba70ebf0aa2f625991a978ed8eb6e16f8d2217a318
+ ec823a5d4d602cd0cb155c8434d640e09e1b5c7c94d0cee16d0c13f1f8e1ae90
+ d59fa4f4d1c99603ad37d2b9fae4adf68891ffe9fa11238a86e92d910f6dda35
+ b8f7517d4c084df29355f591d31f471e3fab6b0209ed067a2c5f2bcaa85854fc
+ be16ce1336e554b315c6b061ef8216d3cbe5d4d52ef3aabe69dcf8d433a43ef1
+ 4eaed5ba5a6bcdfd19e4fba9a8c1bed3f5f23f4d4448eba5e86d409a61f6aec1
+ c40cc45604c3147facb9f2141faba0e10605c82c5dcc753ae0c43cb345eced25
+ 0fdba58756c4bf7c83bde1fbd68522e062215c6389db548d908d2bdc7cc8da1e
+ f95dcea6c2c8b022a7b5bf37480fa3621640b706eb4413026dd757e470666919
+ acc8d7972731505639dab152498317090ec20540883d8016d40df3bfcf52c380
+ c92010f2a5cfc94f1d6b7ee9a7fee210d22a897f3269e83f6f4d8f36292470c2
+ 83b8e0d261eaf8ea77feda02de34b594ed54545b6c761a2eacbf7eb1152d6c0d
+ c98ff221f67b01d38e141c4818d470cc8eb4d4e3f0518a229ccae5f3d4b55dd1
+ f85e9d68cc188f85570f7ade39e08427c6c80fe6c3b8387ee5709f5be70f5c36
+ edee99f7ae459a219dcc01e2d946a04df07d1dc2144e96770542e72f8331f021
+ 081fc3fac1a9a6f5048e897304308c7f99beb17c23c5297880713b41628857b0
+ 58055d51c43d8193c5e291e075a1077150ff7e9b89a10cc437510e96401c22bd
+ 2920ba505dc548dde86789878649af3efb2814c4c3d274ec114867d9eb9c418f
+ d9f3a7d99d62b85e7721e93465caf4c69d5890225257e050df73f45956cec7f9
+ 89707b924f8ecb8f921a4299e84b3af4016601185c0cfd8fbf708a5f313fb7fd
+ 46ae32eb71dcff73f0cd44fcf79e6214f747478d96b0fd7edaca7693552a2fc2
+ 10b4700c977e0429734028a975e2decff695c68550d919d4730a33db14f364fc
+ e1225b89dfcd7f95bdbf80ed26c503686f93b81310827340cf7abb92ea493ec7
+ ec619d61313a2d590997e4d8b491df7716906415c66315f28c25740f87c4f1c4
+ ea8343669d9d712f378c49ec7d9417b736b3fb3fe4df7d536993f0392dea2b5c
+ 60a3d4bd22aec479b953596821730c80a3c8396aadae11088590f89ea6a65944
+ e0f21cf44ed451ce11cc36efb4e69eca95c398ac5869ca556a2a78324f444f47
+ 71306fef7f3b20ed8d44666e2cc6e32f0e920a1cfc6a59963ee3cefaf00e37b8
+ 9e6ec4d8b28dea85790e5d340cea808bbd074eb9ee15d8c445ed519d78ab29d6
+ 50a8f93933d9b5fe07449869f7007a427148ec4d6a053a193a1dec3db0d97f30
+ e508e80c4e4ac613dc91253f5564ac596559c2ee0ee16094139d61f9c5685c78
+ b27f422569decd0b332de32ac236bc94f04fd4f7e8a433bc50164ccff89d04e9
+ 078f793fd5eae15c2cd0f3e28f8af614e77801541a6c4d482154a5a4779ddd22
+ d80ef4e6381bc94285e9041b45066eb8cba51a5faf279644df13e0f7474d2385
+ ef1b1c7feb9f2d57869545b7038b151ce7d80cdb1b85d46007c8afe66dd4fb28
+ e72c3315faa87966a762a2a13d8cdf09ffd55217ec55dbecdf48cfaf5403a7c3
+ 6a5478909f8cdf9ea4b5dc80b1cbd0b238ee70053807762e42b76eee377a4dae
+ 834ce6d73379a9f46425309a2946c48a3648543ff42a2bb99f529f6e5151fc5c
+ fad03d923e9c91a2a5804dc3b3356b76d9dd0ddffdc526ede0c4955ac1cff7b2
+ 7e104b18e89251af993891b0b499d35db9e25a932f94de1be4ef12df20fe1200
+ 7bf0b6bcb8f2f4354e1b547ddfac06ae408f9a3b686b20b4284aa4a4897d61bb
+ 3b504e0f689701fb0ffe8c8282517294fd8e01055b3208aa64345350333f0431
+ 4e030c7591bed22ddbd0c67749a6f37475a25ff4b4707220b395265c60c57587
+ b66b97f5738860726c0bb60f70ce8181824873e6ce2508153f4717c8807fb87b
+ faa3afbdebe74a55587b6b723d9579761d3680bb7cfc8812a29d3f021882fb8c
+ e00849c62658623084898de89d322c214d9c7cebddada615efc416f5aa607a9c
+ f032a8b3200c6c181ba49399d335ed76ea8c1ec08eaa242009737dd90b81a24a
+ a5957fe4b863c3fd24789ebc1d8afb3e5d20b1f39a95658d1653fe8b17e1052e
+ 15e9149c5f221608a80ca4a305aeee0a5d5a2b38944c29f326ffd39df3c0f366
+ 472eaa5cbae5285b062dab5ea7c76fa67ad72ab46d4581423b58f44fc043c02f
+ adb55e3d888f3f2b858cd24af4c7de480c8bf8cbf2105135c67ef3c22233364a
+ e03a053bfc8cfe2c9e37fa148f0866058781c46bb614ae98f480bcd232de11ed
+ 84ca44bc2c4a40f9e2f87be79a2c1748d0e974b4631b1cd8bbf4b9f6c453f9a0
+ 402df7991269f64902c7c3e99b490f5a65e2367279d5145492c630ee77b438a3
+ 20e71b4ffae0b387387bdd3c1962a2763fc6a02205be81feb540e13c2b845e63
+ 2ba4676a24f395133709ee632be861bed8cf705597f1c3dac3714f06a813de46
+ 1bf6fb70e606928ec10e5fe48ec7687fbdc8331181bdcb85d5085e7731996463
+ 9cab6f9905197f0b522bfa692790c106f95ddef4ebb61009510e98137ebb6467
+ 93adcdfc16aa623f96f1318401e2da2d3a767c63be170a08aa910518afe66f6f
+ b35b80756b4e3056764750bda4bb7d31efcd46c80a60d9cff6cb22bd5d4aa9c5
+ 0b3d7905a4b4b09c2ec38eb9aa5b0b6d18c206a3ada110a4b89bfaa1424ac565
+ 817e2a79787bac4649d490044110187ccd1a8fdbbace444195ad90d7abbb2f9e
+ 84370ebb249c6f71a18fb5f93399add2d599b9b9e99c5f99c1d7be5ae8906564
+ 1b369e69773dccc3d1526a423f6d0166aac88e94ba702378b31e06e27bfb6184
+ b7606d8fff89f53aa309d7cfd45a7c88c2ec3e1e889fd2aedda5ae955dff8bae
+ 22dd647523b1b9a32ace2e1fb2af3197d95d4f18c289951384852048bffa8efb
+ 1f15f3c47eee42480962aa40a36cf20d40a2a6d76a75023fa2f3b2b74b5e3381
+ b62d0fcedfe50ddafb0e828245f4e71520df08920450dbe20103cf63260ce591
+ f798ace8f08bdb1b63c4ec61703f0664a293b4ef7e252faee932c5d305987fc2
+ bcb5e2bbef9d69415c6a47578e2e8d9a38abed14d229f2e3c7e1b98f9f47d234
+ cc22a0702f5eccdae5ae38402c2023894ae01a83754982458060a13a8165f649
+ 5117729bec08e9f2117c14501eca9d96a1b4b53413fa2a1f4ec1eb727bef981c
+ d5f12b5efdfe4d632e835986f16ffca3fcf6ebaa9e03fa15c5d70e8557985741
+ 53cf8de128138a0a22aab457bbf59baa37523aff9b491cd863108f5417e1e513
+ d30e78d7ee304d227d4a8de5e1d8dcdb86c1e864ea9ee9d5dfb1e070dbffd2b6
+ 005afa306e553f7a351b28828fed4968b44d1b4b286c01d49ee19e3afe3dda35
+ 993619e0135c27c137e71d7de361daf63e1b427ea8efadcf36e8f50d619d35ff
+ 26471a0a49663b56a6ad2a5061388b92a6e89c00d76bef9bc7a089ccf6d7c511
+ f6cfea54a0571e6e7fcfdcaff9cc7b4fb4a836d0c281227ccfe18ca8346e092c
+ 5d1471c070077a5f541567127be35e1805174fea63f939b1720429312f960267
+ 9fadc83aa396e351dcd23e21220e850456be1af9a0162f2e726d303b56a166d1
+ ef49cf6ec9b335afde96c45622b48bec7139730ee96081591ba24b7921429bdd
+ 5fcbdb255c9a2aa47c9407331a8f451ef0b2b79279ce9add196da18d98598a29
+ 67ca981b0875beee30e63dd21fdad22eedcfb12b2c70363e2b840b2b623ea007
+ 59b3b381ae59f0cbcfdda691b1fd0cf20d4baf773ffea08e4013384d3da97bff
+ 9a21574a38623fb1abe11169c7988a1bd7a10be18f5c883a15be833240c49527
+ 184b4345f6da631d7f8d78aca80994d6e7038923686659691221fa01b528c251
+ ec2a52f7b891be141aa712646649847e7fe2ad128adc3cf03febc3725555bbc3
+ 3a3163534ad869afc6a24617b2f77f722d3c045259be57ffdfb68a41ed139953
+ 75296880fd03c37faf81c5925affdcc8175f029cb8994be3bd2f4304b72f54b5
+ 47af8c6cce77ca7a7c70b12c70f7d6e715da13993f8ae11a86b6fedf754a86be
+ 44b4e65ac10c23fb1133c6dfe03e4547b4c22eac782c0cdcdf1f064840b45a1c
+ 9cc82ca5e6afe01abd741ffd70414ef3cbc2dfd2d1df32e4612b048fecefc3a6
+ 728a43dbda82ace654a68ff0c750b1ef7a9223d680137bb2728b3d5c8945a9c7
+ f7506674683c6e8331be9d15261db1976c44a9b18ab5fafca8a80b0d661fbf16
+ 470afbff8ad5d7ed99bbda94999e9ac9efa3feb126888d075905b468fdc77c6d
+ d4b7a92e9d98cf189376bca09b50a09db05463c847a8271652542480b565bb5f
+ e80d0aafb72ebb272df7d1d371cbf8465d50cc074c3cc7c2b8f1be60a1f8901f
+ 50abc1a6816dedee27a30324b4a402d2ce27776ee8c01726dbab2bfb7ce4eaa2
+ 7daf67282d97ff95678acb54e67dad13f9b3a32a842434bdc2d9888a92a58c0b
+ d512e0176dc9a1356c0bf2cb08eb9f499623734e3f01e1d7d5770f0a0761ede0
+ 64d9663fc136072933110dc9c2338ae16405a6196c97f3ea71460082a5928163
+ 8bb655ef475cba92dd7d6efaf2f21017c99cec103f4d58409b6d8d0e89d31bdd
+ 8fe9c1f076e829e3277a02d8bed0a7b45838fe51405abeed75d04893478e3969
+ 6c58ce611d97fec9d2dc6dd9ce9b5215c4760eb4ff073bab5750456dc7f824d5
+ 97f8fa0a2a2e5e874b91b50946432a4d25cb68c8df846bc4b1fe10758155e706
+ ea34190e7db866ed299be41cbf1af913feb37fd08fee42deee5be073b0ea0053
+ 33b20a35def5fbe0e94378c2ebbef66cac0ab19374989f317e7b63bb57279b0c
+ ed2795fc8c33af0ec4fc78462a811c5820429075ea4815d02436eabb71d583bb
+ 8f82a633539088d14e8dd207c10202637f585c059a1310255099c8504372423b
+ c2b7c206f9e4fc77d76bf5c425c7f094fa9f93b6fade682eaf91e20dbf7c2ab7
+ 4592a912ef9a5032adb2966382663d5cb83d1be60c42bf5cd0526360ad3dc29b
+ 962a65fb0af2bc810896aa833d4032437f75ee2e486ff2fc6b14a581f76d62af
+ 5e9b2643743dcb3749a2d58c7af3094df38c3c0262169761a9b2cc9add779626
+ 18063fa206f398edc4b1a5f6bda8a1dc29b07d52c1ce49d548fbc8b92b77dc4c
+ 2e8c4fdcfe211ce97ce74978b82e56bf929f1655dc74dbde8126129372f43a93
+ ba082f59b65934c477a54bc35ee949a811c63fcadeeca74990045c17ffde89e3
+ a95a11289118da3e34d454995a56a5f894941b64cd9ba8448fa52fbad869ea79
+ 2e98b7533a7267e2e8213ea7bc92e00685e959e7826cf1bc9503ce95827d17ce
+ d965c94a4b1eb8246bfbfad264e2b59878bfd0bc5cfca55207b8915ef47c3b28
+ bdee9fc6f2ff5e8fb1ea200a8932255ab2975a5df7a689ed938de6b8b85f959a
+ a25ecaac01a2259b782565bb2230e7a4a75691ced106ddb2b67b3694e8f491a6
+ ab6bb9c2077a2cbb809129989ebce2c20a50a0f327d27dfc1a3ccd7cbbefe067
+ f2d611779d1027c9b688994c87675e306a1caa9c3e5b226da534d3048ceb4c30
+ 357a729ef313ea4ac681a12dd60fcb5985640c80642a870c3b509f4f68a05487
+ 383822ae12a6ee24ec342fdeaf0f1e4f893c91841e5d9e829981b114211bc216
+ d4eb7eb3e975cff1cbbeb778ea66c67fce0ff0e8a39cf890e0f68c296d1e625d
+ b0d8c2ed686164bb08448c74007479863d0f42a62c93d637ac0e205ef01fd179
+ 65e1e72d83a5a910e0778b1055b01bad215e0f768f1932bb787ae651b8ca2a67
+ dfbc5f7060220ce2b75aefa718cef6a2604d9fe27763043408242d46eed50b19
+ 0a24476f5c7776757a14edc9657357ae32c3b50959c214e3c5219c8cd12f4596
+ 5fd4c48fb08cb1e2f12e92468fa3c7c2129c011bb257d5f3c839471a569e7cbd
+ ceabbc51ed9c958a6203c0c8e304bba0019781bb15c6ec100f4e36971dab9400
+ de6c2afd6f00aa7085968e3cae689af2cdc5350ec8ace369f5da75d0a129fcb7
+ 42f6e58624e541bc7d1be6f8adb2f9f0f132e1d590cc406be42c083158561880
+ 84f942b759a9051491dc6fa2abf89fbd459599dd285886e2b6ed71012d670c6c
+ f1e29a79f952e4aa544caef90462b29d4f4f20be09b829b02c11c4f0d7316895
+ c87933387db785fd6669210d3495fea4e27dba8a50abd7a02e7d1a42f8a7581c
+ cbd7e54898e3670a52eebb0b783357da441dcd643018149e7215d30009760485
+ 15cba63dc44facc0c7bc086f606f90e23fac830e9f8624a768697e768f14e862
+ 79da00de9a729899c25bd7ace28f5ca064a7c4f777021a737f615b5a7695b49a
+ d52616291d0ed0584409893365264887bc534b567219293f4693c4a73c1a494a
+ e317eeaa624a6339f1ecd370821f4edfa4bbc14923546ddcce198e5af9b470e9
+ 5a390d7c8c6e9b74df6e7cad2330ba50667dd5662b74c205c16706d2ac50dcfc
+ 5eea6acdb1f372fb40aea8d47fc2881d3cad562fc34b0cb011f257d6f1346953
+ 0f635969d82ad2c6ae87d0b5d3ca8c728bb9afdc845fbfc6f1b585dbabec8119
+ 048621d3c9a6cccf785a057f54d5bf8b4305c5b7d598c5189e1801ac327e203a
+ 5b3c6688e9c6d4950774d29d4a8e1fb8273f74fde2c42dd57b24edba76a64142
+ 0e3fe84d4de48017cf32af30f6e3eb9a6945971b49fe8d6bb32778509dd03022
+ 9409f9e687febeabe63b112a7e30a8a284210bd3c59ec59d5bb2745855997365
+ de3c3739af4b9037fd657da8f1fbb8afc48c8df76cb3d91e59f188a8e3b7868a
+ 73ffd0c4a53728d2227001e8e74ee2b38e225c82c8889a81167e751c91810067
+ 6ab08eb4af988a854d135d19d6f15c614ecfa6642df9ac58c5f6dabe2e2ef602
+ 6fbab0f9bb126c24f96f5f53b94c540d9c23eed7e46393601a6473e74219713a
+ d427db2af7d7301bd417090795b99d19703ff3ccd859ff9ce6927001b851515a
+ 3b82bc08cd19937c54e81549a3450ddde91c8adf82c1ec8f196b1cd80db3bb57
+ fba270cd9bd62c5f2e3cff5876bacd574d50af68543bf2d1b6f98851e8c9dfad
+ ff2ac1db226067fb63da8b6377286ec32d472c6a5d40101d94e927dfd0689aa8
+ 660272f18bee93ced2a77f1a05b08da4488d30abd079cb443a9904acee469a66
+ 08b63059d7906d6586542e8a8a9b41a4c199999d6d65f8f336481f067b67f906
+ d2a7a30223b129c5618fb2fc324639956d117aba900259c61793d8ad12907878
+ 98242bc4531d3688df36765e6b69fc343ddf2683da659cbbf3ae22224158224b
+ ba0b92eee51215aa785332bfaaafc47a653ae605ca4dc13b5fe4d847b3faae49
+ ea52d013817e75a4ce0676961260214f0847fd3257f72480c7ab9f0d70188b96
+ bbda478f93c4647d52273da786ed03cd17082ab158ee96368acd9b7d7ceebd60
+ 045e83e38577cbe8b03e9246c056dbee5fca0eea1430f604b200db1e958574f8
+ 7b254453f90c1f32236a1bd0942e2753cbbb64eb6485c234c90810a9873bb935
+ 82cb73ddfd57ddb210eca66a514f405b8e06961ce7428b40a3d94850e8c0a63b
+ 3e4f7e9d13efad70e099670b798da5d56528fc91617bb44aa32e047925c0a470
+ 91c9b7d40186c9cb32ccbb309c42894bfa17f94ead0b37d8b71f0b49f31f424b
+ 73bbdaf6309749c26a73aeb266257096ab6a069a760f7aa562d6231d5c43883e
+ f48c3ae89acaafad766b027fc1fc7b0be998a7c4241347bb3fe3a1657c88b892
+ d29020f92edaa59929eec0d2c7464e583d3d417b5d5115b3ece459e55e45bc68
+ 28eb0de7b3c3487a25eeca6114c5ccb23f9ef10695d971b8fe13365f9b3fa967
+ eddfd6cee9b505e18c54c64564a795e90282e48ab09d011f2b12afa71721e1fa
+ 937aa00bba9ea89be8cfd319a6c611cf7593ee321a9b8f34860386afc18000a0
+ 973eb482e651c7e81ea804324306fa4fbcdd04162b29ae2b83b341e93d891ec3
+ 5a8af145480f0a7914f6bd6ba29c227776ee2e8a9fd5b5e93b2f39f0c6fa1ffa
+ 0c63c3b744e8e108f9c6973fffb71ca03884d87e17cbba27a154ae0bce55b8bb
+ 4ea33f0d883592ae98d78d959cac12789784bac28fbd5f89a46d4f4e123a9420
+ 27b973ad0c7ac6c8f58eb16f18f187feeeea907d8488cb1dcea88a4bc3a784ff
+ b13d92b5c5c79d516773d0f39ef5fad76d770aa868e167d8de4b9e391d76649d
+ 6c3718ebf61b37c735573d6ddf1d8757df025de839b0b722206bafb7f622a4e5
+ a3090d17da1e125754ca5b36e3e4c7019787605c3f0fa9d145959a6530900882
+ aba5992627deddc477775274a900132855a0df63d98aaf58c50b522461fe3c04
+ e4d3d4e9a7e52c51beaf632142e16a6353d2c375e534f9914c15539080762b31
+ c90681d700d6953fc4b84411fc77d4b2fd3dc6fb6d260a822eca389cf0b833a8
+ 1546cfac197e7a97cc09239ff206dce896ec92bd3d36d3febc5a61e26db49f0c
+ fb2b0e5975d3fe4c987eb80cc6444416600f19e5897cd5d0833612b47414c01d
+ 25dba0f3c22ccda96245e8f7eca954f056a697b5f6050949abda10bdfbf310c2
+ 5c4a4094abc5c6b71a670990306561e8bc1cab54c3a7ad3b05eebef6173d7c8f
+ 50d68a93cdc845900a6d729a64ee48eb7efa9c5b866e5dcb0039883cc3cdac90
+ 4ad895cd0e709d216a6b65874166f868c3914be18e786c24bca27c54e0b839ea
+ b78e875780ce54c8d941bd7e8192b036aa8f2152c9b609c81f835b8d720400d8
+ 0dba717a7280392d585f8caad0293cb11fb5ffbb42ef6a2f2eaea98ad2bd56c2
+ 7cbf041b3c96310122fadecb8a8babd207aa66723b3faa52944a0bb78973a10f
+ a04856de03ceeaf415e5a9cda184f919420a7e73b26cd38c6a50bb9e9744ed45
+ 94ac8474929692dd138ccd0da77ce7b0466c9464cfe9786ff83b8135b49c9c54
+ f8ae1c44ced690591fad261d238caefab50c63e969653f019c515b49d2884c61
+ 5d51182ca84d1b4fa29772b74a11a7314887034ea6e22de73c47537511f6a6f5
+ 0e9f6a1598eff8a08aaf8668245ed33c79e681c039b30944a22e4e5e9c3c92fd
+ f35afe5e66d734bafe2e85616ae132a751215a56c4526e959ee04ab4b7002d0e
+ ccb1b49eb1f5c154e8886fbca5ce83a31aa3c8f84359c4c66f6af83dfb0a4366
+ cc2d7fe6de33abf14e3e1e2f8dc1ed91a0d0107b6665cf31c5eb3402b02c6756
+ d893637fe35d7c4399768d5cd659c4ecd31bdd312537ac8acb85c77d6788c0fb
+ ac9d47ee6746afad82d49e5dd1c04fe2c9186e62b83dd88bdf3ae9d1a7df2dc8
+ 70394b8148f89db647c9f9d0131a83deb55dfa2c92ff0c9e073e1b4d1178b594
+ f16428bac0084765db82026b8e6aa50b8222c58af752a80c17fcc9fbb0589fd2
+ 2a166de209255454054b9efec0687811b2dee4d7fb3032f4d4c28f264a180d3b
+ 8135b49c8adc03934eaff2434f46292e1721aa25892468634b601e3b4aba668c
+ 62bb839cd85b5b5eeefc7e22ec5339f003e166db0abdead64da2a5e16c2ff078
+ a51cfa5743e7eb8bb8f1090559a9ecf19ada7f654ddf7ef79fe51a845be8dfad
+ e8fd8c1ee70bf5bdb921136b76dd7262ee4ba8fa2fb9a25e5d2a5980ee401ae1
+ 5dc766b4963bb9dd786929bab56e65cdbd618062afe34c166f90e8166577ea24
+ 5bc425c08883cb8be042a99ff43eadf60d1fe6495717dc44c3b78bedd70c5a7b
+ 7c32cc9bb8e8e69213e94f4c0d740be930cdda5d4c653720374e34e4b633573b
+ d4cc76832430bd51f18d8b0e7c07b54381d79a2fd434992e49730b433f646edc
+ b17062f2480ee7c8af3c2c76b03abb1b839a8cc335ed3646b5867446073781eb
+ 1d6b3c9a96179ee05fc3b4c7b168778036d40621fec6fee032b015f3897a8dbe
+ 63b1fad3ede70e2db545653834cb7080f6280f55730c82bec752c9e83dc70abe
+ 30908ea6b40075dd5251f15b632a808394391141c54f65a026b16a2a34747f85
+ fd4178a4e96fcb4a776be1839d08242e8254b5d8f558603b0b7cf3abaae988c9
+ e18d7e7bdb2d52d484e32e975b683ad79b795618f3b637e1aec7010ea244cb7d
+ a57f12fb9952eb14db718d851ecab91bb1a39b95c5aed98e4c0db466bf12a7fc
+ acf197699d07193d53c71efa10d6c967a348b1a3cf7af986f24029a8b516bbb3
+ a682c055ec80e6641f68015a0e5e92c70028462675b37baa94164b60d4026bef
+ 5f753214804ef70e86beaa1f3c05d21cd85b3509d6245359cd68c5a77c92f266
+ d3b5bad87c9d9f4293e7912322f8d9f255bb6c5b7d980364f71c973d13e63245
+ 2373e87df286b56414e10e7fbf79823d6fe53dc3a45a2f1683d8c922b88ebb94
+ a97201720f103138709e4361b8ef1c570d166e763263c98933a718f562a3c15e
+ 0313dc400d09f97dc8fb62b66ef0d5317777c0aca4ef536ecf3c05d7461ebe18
+ 9a57e736bb33420c134e250e36ebd26f6d782c129057f63a4255533799547698
+ 6eb95054d03eac52df1d7092cfeb1ccc8e3ddfcb07896b2d561489c310c6a08e
+ 5c58ed379105d6addbb96ff4b8e7c2c2a2892c53fe592d5abe906112770a8306
+ ac64d5d34c734047ccdc995bf74886c53e9af81a16d6ed1eff343b99810bf9f1
+ dfe70a3e8b2484eb4b4ec097758d219182ecdb17f4ba237b8161b56232dad6f7
+ eee0803678ae36418ef3a117dc9e34794a07b2852c52779d1ede2896b5d70e94
+ e7494222c49e0775e63b64d73d1d627c14e775ff37028a944137a39a94b947d4
+ 7ca1a0a569babf4c92c6a3e3403f0e1aba385e9bfcca7e663f9ade536f56731b
+ 368333461ca4fd85e77c26f9092a8eb57620e27dfeb0e7844e7863eb62294f00
+ e023a9b4a7c4e7f0b75f36dbe823a2c88022b4d247ea81f6e18d262407b0516f
+ 175402554fc3b74975b0a313af59809a6382990b561843f19e8052cd2d01971c
+ d3f04643d59d20472372b518f1b3e0cd12d8598bbbeaa728f0e47f5aa125b32d
+ b0de7159123716746ce294c9bdf77016fe334cfe45108ddcd325ef3b61fa67e5
+ 50718e841a6d9c691965d43b10aa388d49444b36ebac52c0d1e06a248b87a0bf
+ 6bbc396366e322af167f62c3bf00cf6f727cd081c81471d13796c23f0e13b64a
+ 2fec4399908dc6f8550a058e28536ccbca7d70607821f77c69daf23b8738c17e
+ 2bedaeea4b14afbce1e02bb2873bcb5eb0db37afa344bc8a5e28448e11ee1007
+ 4c4a7dfe34526ae811bdee77dc716ebffd4ddb299dc98f74d8e5e9d7b6de0751
+ 7333973a32db992ab40bb2df32008165fac3fb5b69b2fa707b8b8a55eaa467e9
+ e6a3fad796f92556577220c862c60ba3c56babc5ea00677ab2ace2194a277c90
+ 3d98db046f5ae6d08bc1ff04ae29078eec1475c4dcbe5842810753d18a928e89
+ 5f479f76189466e38a223f66c3fa83c6c50138dbd2f4f9f12df440373a98a86d
+ e5d06c40046f41079eafa0062c96d85a97364fde75ee41d2ff09ee0bfc38697a
+ 7e394e4de27d511cf4c4d96fbca82cadbce1f13789410ed9fbed6ba600b4f3cf
+ 441bde40ab8ebe8423c3b9997996756e674193baaf348dc8701994c8384591b7
+ 843135a2cec348d567fb30e03e7b36bba0839149d16bb47231648919d6dcfe28
+ 882b216e15c9ac755a72576ba9f7006d416ed8f18ae872c257fb52b1b66ddc6e
+ 80de4c6d29761dce4f69aa3e445010013aedb44dfdf2507ef8def4266da630c5
+ 0de35a1c0b023a73cc543592d116d075ac6f1bce76a1b287b2c71c0fbb16aacc
+ 6ff32c51a9d98eb5e85b6aad4dad5bdd9f9564371035e5f33a6a1e2976144582
+ 47881acad9a469c316d6c03c4ae2a5ebfc51c71ce46471bccb14a5c940ebf40e
+ 51060851c0935d3f092032824a2258c8c2cd59c2081d0a11549ce1b7880bb3cd
+ d6a41536966cc9bb089b6ab3eff9ba34a1e02a490fb49f3b714a4c113942d5c5
+ f8d2666fd9eac50288a6f38341ff34f89f44861058bcd74e138a5e5b93d98695
+ aff66b1276a282063d884cff087ead483215222a484da88c8ebd3fffe5e1edb7
+ 8d977cf5393e0bce3c576753e336e8d27959f097b8df2a84c6d579a2099658d3
+ 12f5b6c72060061fc70ccfe9a5897ca5155851780b940746435e387cdeba5e0c
+ 0ac5c1c626a9ee188aa1d3354f863bdfe0e8f83178ffa91fff418dbfc563f207
+ d4ab556c9a6a5cd1f4ff218c197a4ce9954f32bf3f6ffd344f3f6bb400d2c2cb
+ c5d8a337fd792387660da55046b556b7ddf50df31ae2903efb4c70e7adee8b85
+ a7b50e5bfced5bf4749bed4e36a1c4a1e759f3c2345a3eed73b9c9941d6e5c7a
+ 3682921d0894f032a01c23d2f3ad313fe6399e3d1317ab5724c0cf8e54e8c2c5
+ 6efc1e5574d7434d7d68cae8715d122263de1120cbd3199351cab55b1e188602
+ 4bb669f06e3b224e09c9214d0222227675795e3b23d4c5d7051c4fb1ef1074b9
+ e1b751b0890a39c27cb1fa03d33a7332fd80061f81aeac1c9f395033c9eb1ecd
+ 5961e6e137438b8d87fd4f737ffeeebed264ee073ca0d5f5b95d6307d6de0a41
+ b65d3e9a1de1a96dc3f3a16918e4b559089dccd1e3ddcb0c07c7494ee40ae018
+ 9d35a16ce75980695028c5a6c55677bbb001761154cc2f737fb4a12082c2382f
+ 878e53e51805e36beeb0290c8684e2ddb01f1214d885ce6f745c4f32886b08fb
+ e2452755e002ddf9ae0d952c957bf52ce708757cd87e5bd916b0e00d9cb9b3c0
+ 3dc8040628d32927801ef76f74bc07bd91d2ca3bae1752081aea491d773f13e3
+ 67d530b9142d59d208a7c9e3cf23bfabfc77e23f65c91991b0201587ea64de9d
+ 0a806a71a5572516462528c0c7c85d02c55b40de0c487d0d8c34b1354575604b
+ 7628eef3d733bfa95c01b9c296c82ac3af80349d8d5c1f93090b41ff16be3f10
+ a1f5d9333fe1c0d36a9dbb1e3ed9d9387cd2014c056a56ddc3cc38698377578d
+ ac8ec0e8112bdc47b5de96ca66d39924261aa5d97c63527a5f4ae3886269f6e1
+ ba68936d52b2f5d48b1d2b271cf0007dfef529b965a5e5b5c1d5626b022dfcd2
+ 7eee217f48f3838de9f4eab6be81f48ee4a1ac17e6f5a5b4c5b639a6fe890485
+ 9240450db6dcc9412638052a208ca85108fc941fdc9364c455c6338607547231
+ 611f89a2af34f21b7ad0737de131494b4217cf4961c2063a308ce54cd27922dd
+ 60bc20fc0fc670ef17c27194932825b2e9c339804b934a757ec9c6176dc44536
+ 73e2cc8d256c0d7cbb8e6eafa16e60c2b2ac1233424915525fb901baafdb12ee
+ fbe8292ed097f7e8956f496a5600cd7633a3ee873c0f8ba6e73874d70f931557
+ aa4f939dc697db300ec94cd0dcd6d4a4026f6aa8439b8ee4f2123a38861c9670
+ 4f8d78da456ac34cb97efb8ef8844b282e0f5350252f44ba62b3b33f91da1b53
+ e9e242dd438933bae21068fec3da558a7b03673fd6c457eab2af7cc1b8e469e7
+ 9413fe41c5a2a3519e8dee7534a86077a9fb45fd34a10503748f9f87475526ee
+ 0764f96de4afa6332f61517bb23e5713e279d152516b3af370ec6d269db2573b
+ 1324268a61abb55d19b06f5bef558ba992f47e0774bdef85628b404d802f5f96
+ e08c7358b646507cc933a4e915c694a5cafb137434bac41dff9cab79c8c685f0
+ e1d61b4868fb143ef0126d8be63389c0d9f3045ef668f61c8a2d75aa0eed300e
+ eaecc205625ea1b4ec07d1bb6e790a8e26e83dfc18f719265d9ededddb49fec2
+ ccbf02764407e045778844529c209508c8bfb1c1778b3ace523d947673cd82ef
+ 67b2ea3eb3b2b33790c8d8b88d7251324f45cfd682ad11eccb8341e79ae2fe0e
+ 43fda75bd5d311d710f1634edb305681c9890305821e3f1bb15b003819376371
+ 004809e59cefe012b802871e2826e92f31ef78d44301d4bc83c587b363b675f3
+ b3f0699d237c25c3c48219594a2c3a0acf35f1f3c35cacd9f60ab5992e6fe031
+ 37abc48b829b49db0a8f8b23713df9c716c706070a504dbc29c15ce5c83afc2c
+ a27e7dfba78792df0bb24457076ae17211bfc5b74b827fdc86ba15d7b24a6887
+ 0cd5fe1b22b757d5f321a992d1eda4ec4b2b6fc329db627617e3e58f118f9eb2
+ 32b48cabc49f11ba9777f8ba56a8b7a3a4e3e76e6051b854203ccb98ced73c56
+ 9ad5a84fd033534e5c742e0a1d4c919a1fcc69bdcd31b29eee885ebcad6f82f1
+ b4d51e6889546900bcc955d4825184c5f0fde40241de7c50a7c49e6a68683ceb
+ 6684c29c33cc63362c4666fe8bb7d2f39c5925ed6a3f6572da3d9e2f19e32a7c
+ e87af43ab9965eb90ba8a90bd92a93d97f8a77e2532d778f439225552c159635
+ 06b319b7554ca8d84fd4ee02b5373e687addcf4f94411e51ed771a811d2df5ed
+ 6094a0ec262927619462d7de8dd20a99107a0347ff2c22f21c9c7ff18ccf5355
+ 7cb9ef252fd75429e81454e2bcc628098d82a8e9cdb289cc4a724975993bfb42
+ 5b6679350efb9f827f1cc542487c914e3e7fd791203afecbda33f622a697a145
+ 96f8102f1d5c2047bae1085810e693e75773ed40c1f79da58f377110e7105298
+ bd2824597a344924068c151ff672bd217c28b7355256ccd05f70f342058342c8
+ 68c201e7de190079f3d39d1e23804c8c617e2e060b3f7dc90cb5c48b4ababb64
+ 260343c327d05b91edff8a35a4a618d0a70abcd72036d162ebba5b94bb16cf88
+ 8076d7d765fdb83199859f6fffe7c1b39886609f357915dfb5c1d849993fa15e
+ 86cd01b30a6fd8d5f116aacdca41a575c0319a6540ba7acfd01f588b75209924
+ 105e746860110d7a1bfe16e3dc31f13026f19ffa90b60d71be61e019423d4426
+ 262d9e8817fb2ae96203674f5f50af2cfdf91113f83bf23a45174b7e5ddc69ac
+ 62df5a7a1ac4ce67fcc46c2f92d764698e42ca103327ecdfdd3e05d419d4ee14
+ 630d34bcc0485e7c85e0c5fe244042001219d457ed3636b383ed38d89ce0bd01
+ ad668b75923650dd8a4bc84b02391ae15cbdab93d8fad10b531086a876951ec3
+ 9871ec22a41e6eb0d81e6f0ccc4e33cf0dddbc197dc050192050ad3557d150c3
+ e4233553d6c5d4fdbb0482edb3fd7bdabb2a348986cff2b9b61cfd3db28ecc1b
+ f39a7511d032f86ad5c1d7bb2c90dc1bec69149968e24bec4b819fec05fffb6d
+ 22ad946b957570a38287a953c94d87a46c7c8afd990d3fda7831c9eb4142e3b8
+ db19f13ad542b2805bc8bb49165b08c8b1bc1a04ba1ba5177c17e71e71e9eed3
+ b1d0657d107b80ccec2894028b4509f33664123076f9abe61919d7bb4158b839
+ c99fbd1d42fa2bbb8880926c548ef06a8169bd200093421ff43d71e5d55fc691
+ e290fdb7124d42ab2e257ad7711d63d47d11e9497e8cbd38856a3f91e684832e
+ 60cb0459233d79128a4b64f5be54b56e2d09d425ab6e9f4982d14db8ea69a932
+ b011070cde4e732a75d10a74240274998b9b33366786692fabe0ddcbef1bb869
+ 6a0ccb6c28cc3e4cf990d64db8cf765073b23c25c4d33de606efcff05901e324
+ 09a4c60a826d515e179480bb2f700112c5d2f0a5d847c67ece58c32670583eff
+ 8e1ed86cdbcd307fd9f35b8bec9d052356b9919f422c1f027498a360c3fc1f86
+ 852ad054a5c185452010ba61325eb3079a713e6030a639913a1dac4920c3ccc5
+ b24607d65c6d0e929ca06738805c0b4688e259b654eb2ce52b9ce7d68995ccfd
+ 34408888d3963459b95103434734b1a14526ae9d892333c7f4102aecd41d5d84
+ 9c1883d492f233630d75d363ccb93ce78c6ee27cc2d533ec879bb54bd123b3a3
+ c50a93d4a66924593e819d1ac027896c271a3f0a4416901b898f3facabbb4373
+ 894237264595e81ff5b1eb990afc0bb318a4d372e8db65c7ef8395746f5aed00
+ 1a12c81ffa93d52354a32608b6c785aa3f35c8206a121e041686571a373729d7
+ 8cc3a4706aeb73ca37958faf24f2dfc839e97febfd506965185e3658f6585933
+ 9e4db163170b6af8f4a2dcb07c528ac34b0c29f1a8e6aaa639b6696e6284a7b8
+ ec043c4839ad38585ae97ecec95a53632410f31e99a766f4dec82af52cc8ddfa
+ dacdfd13a18a2908cc0f5dcabfd1751027101ba7f00f3256d68387987a8ecbd6
+ 28a2714424d4510cf4a1190ce46c66fe95bd83734d3859c706432d4eaa7ea16c
+ d2ebecff208a105170fa5c3da1135e930794c3b8572a3303667028cccbb57766
+ 53241f90834f18f20e9ac7349b62dd993481a8ccb35219378dee0ca2fb8e73de
+ 322df0a5297057335d0ac9086bc99fc4836c3c58ffcf53c0b36aaaa35c8cb685
+ a89f45583cf09d976aea75d761da58946c7fb19a076fcdb6074457d81d581b8d
+ 8709c316ace44755523bc5544c3d4a60e3cb9bdaaa0891cc8ddf4a8fec0b3ae3
+ e55ffb602bdca0a804c2d27494bf0f3b80acb66120c05b356623f66ea5bcf65b
+ e68402065e6be41fdec2a0a8ae8edfe64f956ecfbbbf56f6a7ec18677cab30ba
+ e198e428cc555ffa37228c033da93b3ed9d97d604317cedb0a7bc701d3684838
+ a4aa6a38b01fec46dd01c3fa9271eb1afaa033b8e63c019d1cf1cd079052428b
+ 0ada8c1ddcca15b257a4b50c0cf5df1040b7f4fd3920338379b461667c0333c5
+ 7ca835544502c7e5def4c55b614415c7917d5983026c706ebe93f1c0642311d9
+ 0fa22fded1419c66666e633516abb9962f8147e35d08ef822ac45b2a64dd6502
+ 86e956e0c4ed97a8e536a48befe09a650e88bd487ca301c19d3409ef8ce94f3e
+ e683aed70fee5cf5ba17ec896ed305051ddc4aa1e7199e19e1f86a29211a2ac4
+ c7fc540a948328362a28b4fbf6be439d5bcf2fedfd8e45860fadf77d652c481e
+ eaef46995b5a7e2970f9d4589f003dd568d741d99d2c14c8255dbc50340de4bf
+ 3bba1e7f3d29544bee524180249976a9635b6239f5b419a020dafcb20402dd77
+ 2e5ca3307cc26fd7ef6efb6cb58c5f201774e991ee38b2a62add0a60ffd8af6c
+ 9b441be1eeeaf4c780124f47b7a4a0a0ac46b437d0bbd2d3c4e546dceb056705
+ 0a11d8fcc7d3aaabff5753560301948712da6d8d0cada681e4c9c2012f77be60
+ 26b2f842301fb35a90db3c4f4f84e1bd30bae32fe4ae7f392fea32390c62d8fe
+ 2937aa73e35391ef3357ee6552ab37bc5c723df5f36a30497319649f645b9267
+ e3eb4dfd86618f3d2e7560df20a0b593b2dd0205e8470337ca8c418defaf9077
+ 9adf3c34e8f2b92cae2f73b2afc3b5181413942d411cfd10db5a6a93310ca081
+ 310e199195888e102ebb9fcd10b025091104aed42d4327ee4bf9b1be081d9c45
+ cb341ccd4a732a6900c56ee591603d08c5c7f11c26bd9adc58be6643ed22428e
+ 7938a32227d06c23e67390df091566df0b574f44d049a1a2795496d514df20ed
+ f836e47f9b4b7878f91b548056069c21325868a675080c63b236fa30dfab957d
+ ef11332714a0f77aebea926f2a8c548e1367e84a1cd5865bbc95b06f6310d009
+ f9ba3ce164a846a4c4c6e1246876cc8a4a68f0e0bf77a4269256876baee137b2
+ 55246035c9c16de07b30b66a8572243a2c3c9b96c117402e6b40e5fa4da6f120
+ 6dfd92289a89bfe4cefd761fb6e0584c7749186432af9b3887c6119c852b7a60
+ bb6bb9dbb1d0bf1671ccff0aeb92ddb64d504c479cbde36f2c6f17145b7da920
+ b8147c534bf53e7c2b0db1a3835bf44bdd79710cccb79454b4f9642fd80f1d75
+ b4abb9ad49c0c6ff68f161b8df2215d8d86958bc1f7470e0f7f4a05af610de64
+ 329aac1ce5613b68c2c61c031382f92d3674687bdc6a0769d77f663c7a7c7cce
+ 414815e34aa0324a0171bffd53f150cf78093140d1303c7b341a4167788ff4c9
+ 15cb42180b5cfcd27f6711c35bd5cb269c3c9642861e2c9f435beb6d68b8891b
+ 60ad43845343a294cbf42e70df804ea4b70e27a2596d8be33729e87d4d806d93
+ 9971bf01356a7eb0809006632d7108c0547fc752813dc5876d38b48b72eb7539
+ 5dfac91b34ce383a9ebae75df02827b7602d08df36c25e6f7c10941065d55eec
+ 6f79e3e80cbd0db2c3383a72fde25cb4fae0d32d0c1e1b425d3fa9c2ca933a79
+ 801e99cf622ed8624b60df8ed21c78bf9e90045ec38f8816df3322525c2540c7
+ 30568d4effe3c58a2282e0bdb3c5cff5d855770b468e4a7b69c099acdeed17a8
+ 4dd9c13b035fe5ec213233eb8caaddb26a1a8532e8ce21707d34e4d382aeefed
+ 9f5b955181969a1e15251905c4f10bbbc5b33421059d140664410059fa99496d
+ fd758e012393a1db17548f6f34c6982b34a277fe5c6705605414630d7a9d2abc
+ 47026bebaf52ddd730612e753f401eb446fb0ded77757196e5ed389de495c37d
+ a133ecc07efa24a74046019daa0f075cebce8b5f1d8cb2b8cabeafe600624f98
+ 326e09a2c60a6aacda93e77f62727ac597aa3c3741c93437bff91d0175312d10
+ 712a14460697528c5ff2eee1e348d5bcccfdb59aa2db748823fdc29819e5abec
+ 5921679f180ec4d7924a3047ae145959800b35ccaf0ee3c1d4c0c9205f5ffbf5
+ 4aac04505107ce64dcb699ab320b525c0172d2142d1ed5c06716abd41810c61b
+ 6f6cf97046c82aa5388c27faa9393bea8bf5107806bcc6472bc70a7ca4a74e5f
+ b7356143a41db699d2b77d7e3f12b05b779a72732e322699ce4f8972a193256c
+ 7088c02c86906805ccf001d3b0db6e70af122d727751242f0261fe18e07a93c9
+ bbbb3bdea5f90778c5628599aaf6c67ded3daedec72887ddfc44c7bded1ca82e
+ 2fc217cd0158c8a7911bb3d8e7b54b5dfa8c72341b1faea1b3f9d167becd87ca
+ 82cbb4637d8c51a0c76e5f1854e22c9dae736ee3a974b9c02dbf00a68b145a90
+ d5fd63e809985d828d490fbd0e524bc1f2e82f124e4b3ee3a0d387a49f5b9757
+ a4e049a37882ef7e73b10832e5cf27c18050158d0c365cfeb2291cbad44b2ce2
+ 435f31f58b4355663510ea6096d1318b4895ba3fef71a490274074785a576a9f
+ 7ceb471c0393c3cd94e0f6be931a4c2cd3f8ef61aef576650b6e23841b035913
+ 3604b59968c3d2bcd17eeeff33fa25d15bde4b65314163f67942eab86a858dbe
+ 083774621edbece278f5d9b9e9b9c1399e68063eb16509b06f2a6231f0ddc861
+ ee777c413d68debd9d21f6ae678a95116e58922e32420630c632140f794036c6
+ 1da58a585bb48f78c68a479169c1fcee5f4d3ec8cdcbe2f620d51ec6714c3077
+ c12ea1dd5c219c64efc9e2a080f46f7ae3f4ff4c0e8d84fd75d0a3a77bb985fe
+ b866893d8c2f956096f60890b3fe537c87f4dfafa7e4d147a83a772a631620dd
+ a0a468a4e2a595ce5d84fc34cd76df4c7b618f25028975fb6869f4d6bf22d539
+ c0523ffe5a39617d43e166b458f80a9e658329b21682509e04ae6edc204707bd
+ 1a7cec577bbff2748a3c0f9986314c5619fdc3b22dde34269ad8f757c38d05f8
+ df9f89dd60c085c2935b0bb84d44758282a676da879a13d2f48978fd3538f98c
+ fe9a20b81fe841d9e369b1468c05481147f517da78a01edef82ad2089a143c0c
+ 1e75d6530b79fcc180ff279578fd3073c9cbeab25c4b2e40f196715d3e3dc5ac
+ 54d7e04fb71493d20861966057b4f853b03caf832b39b1fa8b5dc9f77abaeb54
+ 399c458bfac364f1be9bdf581f38c0d005fb21fb874d14b31ddbcae7d6c1c7b6
+ 5a85e111d48488842ca32388cb1bfae943b801a116e14debe352b6e9d2eb3404
+ e5a27595f77f1cbe17d076630d537936d7ef5a7b2b175162c0ecba84b02d7d7a
+ 564a37db83e56f41298bbc1cca7a9dfa4a71172b92b0e27f7955a5de1a4319bc
+ 956690951d7cb0265fed3fccf9c675bb3d0255b07b65a90c989c35760480d4e4
+ f2837176bbad80ea0168c430e066802dd8f135d63827ea99efbde4650292a55b
+ 4ed5198b0e2b6195df37a7312dfb3ae996f0321ec65fbe3312ec892dc0572a83
+ d9bc4138de4fb8f3169a035d75336c14fbc50eb9e8bb2b9156290b511ee24fa4
+ e75b957e38c4ce4925bfa1f4376f8bb7ee011efa988d966208feb93083825331
+ fc820b3826b3237e4d9b1a9e13784bb3d62b5ac448607d6212cebd7605c85ab3
+ 11bf07c333964d0e141ba8a1f972b96b0b9a606b0c2f7aced108c8feb7f49e5e
+ d4165d0c0cce676206324b46a9d35f56936ece60e720d07c31aab6b1aaf7d6f7
+ d2f6d66974ab03419fe8e3a9e3c59997e43063185cd760884d0e5e1bb1acb525
+ e69713114e673154419f3545921e1df695a7321297299b915b68740445e4694a
+ 1ea25e4dd33844fe2ed7a07bd4169806772424fbaf72be85492b9a26a9071ee8
+ 5b2061fd9439226431a039b96cd1704da917fd2dcad36869ff33ffd7deaee12f
+ 7e558965208d632b9a0cd5f53d75fb6f83bf4ee5d1d534369dcd809d2095be2d
+ 6bb5d71aeb99c8aee1567994481cf877eb42daa66159085ddc96d071ad04ee81
+ 5030f84c0e53a7a0b52e1b0aa408824bfbab3d47272de5d5d58663022fc6aea3
+ 8a3ec02ded26669203f5dd224797c39ebb137eb451f644c7111ad4d6ae4c51f4
+ f200852906f5ac43bcf3078996ad8b0ece872fe2b4f6bb3935cf3d9a2f651ed3
+ 318f86012b7af826df2f6049ea9f717c16b60a222492158e496e51344489420f
+ b5e75c75cd339be419ba3a939ccfc52ac30b4eb5c2bb1e0cf26b83a6e19c19c6
+ 2573ca4ac2b63b1914bcb808a02543ed79cf82e86ac0e8aa25a4c36f11242d1a
+ a966d2329dda6642c5055dba9713ed80aee576e7eb773e878d0b9f194581a4bc
+ 8b6597c6c385942066a6784ab87a0badcd7ab49099775864de0ff5ab0cc7fc49
+ 28f94b3e956678fcc89d51ea7adf5f9cc9a9be1531e8273fa7a30f660e38f5b7
+ dde8f6efa9087bc90d47ff60d42f5d02cac1ecd2e37df3653966ad37e744ad76
+ ca6edefd13182c89f30b5faa7d9c83552cbce91fdc2760b3de1e37c1d6b98c61
+ c3087d42cc30170b03e9b7d3c12d23d313d6b5a522639c0255fc4fde39101161
+ e40e9e2383602945a2283cabdc4aa4e0fc912f97370a23c44cbc55565ef3f30f
+ f62d2f825f63fa5236aad1da26fab87caad472b22217cc7050d53ae7aaef3a61
+ 5da0fc52c77aea9e8a7cfe79ea5780331cbc04646814d235525377593e264b0e
+ be4a122e6c65f4306a154129ef2a7f956e51b206b34170a91fde12abd927fc51
+ 9af3361f109f098e44d825ec44cc06b76672ea317e1fbb6b2a35cdfbb856fffc
+ 24c7419ceb2deb162986847bf6f55f80bcc521ae73405df230f2ecd865ab19e3
+ e969999e25d7d5572b50096d0145390d7a4b60eaa07315c5e0165db0f803b79b
+ 426a97a0f81d2e6a021749d8deba2ed844924ef5652efc5b91ddd5e517030efe
+ cc99d49437e999d1316dd75e9001bf600fd412b9deb0aad5dba55eaa33bed5b2
+ 855870e04e1731878098eef5e396bde6fb719664635a9299e7ca60cd8eb65bd5
+ 7fea75f00ad58980f4377fa7f1dbe417ae85471934e6f6d7f923b7dedd6002fb
+ ec73f8c5db6043c0495048fab0d4f7c0beb26a5636b9e1cda69950ffc3bd792e
+ 0cc722f62d3143bf3e64fb940dd73d91c06086576515b08104d124df6189b443
+ 555f11f33784d70ced5e9dd367ff79f31841a962e93cddd0c3bb08b2b6aea070
+ 63f43c91e19a2d299b48409071404a75180eff9aa217fdf07eea792570674a2b
+ 23b46de701047e1d1f5773e608487f0aa94adacd8f256cb956c4113039b3aa83
+ 19795dd4b147ac14f4d15426eb490148c24ff325026f36c8c7e1f13feb282d43
+ 7ea9fffa95e0c81d1d9bd2fa6dc8681217f1c2fad7122c971872af83af7f727f
+ af0dc4eca43cd4d8838e6bc6aa08de2e7377ea63915da70ea1d55cf8d39a3103
+ 330086751c42d6a23251e8aabbd7aa075d30d503aa98e498ef3a4a620b286541
+ 5d0276eac2d544710e47f3487258c3dc1cc50157f770cf2373458735bf729426
+ 0a344e626ddd282e5efa200465d1084e8c80f8d899891ce9c6b9278a37fe122b
+ 4b14795d49e86906432322a3a1ed6d4690d248705e6761a00409ab46d30cb0e8
+ 86bdafe88dc55549c766dc9af42b35c0f595050d7e70c0d95b9a43d5ec18efbf
+ 13723c7de42c2cdbaaba28d23fa79b05315f31b51b3eb7573c847894dbdbabb6
+ 891a3b72c790baa74c4c0f839626a7ba046289b27b32dae77cf086fc16ef6b65
+ 07a52cd93b5f1c55124b3b11d8be7d5dfcd9c7d2ef5b7a88b887683c234ded63
+ 4f04261ac2b3fd98a21eb61df4064f69e6b970caab7cd6c26c3b0387d3201148
+ 2477eed979df27b2d475edab9e804c4a1123f656cde3f99b2bcd6b2ae8329d1e
+ 656e85b818c8097ac700d3708bdf746f1c52df95c2a33050d9c911beff02bfef
+ 1d076398c795edfd2330dce9512026c0792f1b40c5fe0432bcc156a8c20ef21e
+ 2f0062f5cab18e14ca1a734e257d4d8d20b3afabe359d953b94e0eb304d67f5c
+ 4d0f87c685ac9148e39cdfee0c00f961b4a13de1327b8ba8406882cacea4bc46
+ 4fe350b30f53c25638cc6453b7967af11e9e02ebb5d20fae46b94cd292c3f08b
+ 71b366b3248ebfc63851d2cc0a23d87f719e5395e07233409dee21393e4666b7
+ fb4abc9f66f14ba67f081cf7339f819a92bb17dd640d12b72fbec9f8fbef6e20
+ 8978a718dcc40f4f38579031cf93ce3dabfc2f2428ae4b815f14fa122899c5be
+ 15b95af25f7d0fe1937ee88feb5a26d678db8e33e59baddecdda98c20830dce8
+ 83aa353f3ccc8e9d2bead8fed5f5e88db42d85a2f7d3d8e0e14b51f27358a8a1
+ f68d5b356fa24d53a5f5dbaa62b6b55fc953eaaf120159975b39586a69f55c3c
+ 95f317a37f38e378a25f9234c447ed889b95d0c3ddebbcde523b3f341b2de3ac
+ c5f21649632114ec7fcbb972f9601e6af5a36a9a899e49a2d60178d596bb9745
+ 10923e7302e4320b3010185168be945ac189567ed209a491421d74917acde07d
+ f8866332b7fa4ed7476fee0e0266cdae2f8224f616067143e903c3689b8e5a75
+ 47659b2b1c9f37efe2b7df4032843fcb1e24d99a05c71d3f367b57f44e27039e
+ 87c5ec675ed4ef73841c99fa8a13b13e4ee786b8e90b79dd7856cfedfebbaa56
+ f8dfde63d9b23cdc248e6959a8f20549fcd1f0e90902d9976ade27b809acc988
+ 2bf0ea5802509d2c859447c83bbf96070cc0228e8e05e08fd6e84b7538bcec02
+ 03792daa8a87f812608f934273f98dcf6e52fec785de9851cc159b72a3d9a46f
+ e7129baec8b790fb0212da2193ed51da8b5d328b35eeb63354b8023f12c6bad3
+ 661d2b0edd2703ef5b06bdafc58ff22f659ac74b0ee85cd40a069ddcfa905db5
+ 66cf937caface9db0309d2ace13c43b8c0142cdb8eb4ed557301f3f19d83b98b
+ 07c71934c05cb53e68db065728ec2acdd29c4aecf348ffd6a5eda99c242b3061
+ 9987a15f554a5e54cff293429f6d147f1ad4e97a620ef1447a02484e2d80f35c
+ efa627d64cf13726d76b91aba683ce4251eab9d330b64a8c84f027999a8ce95c
+ 12814eea28a6e8540f65615d75993df63973edc2f5362b6277b275a7ac39ed5f
+ a19e46f1539c46f824410bd6ae9e5268d75f3d2b70887266de4d65df95e13331
+ afcb75cf99823db4c36cb2de2a8414bb92508aa2eff0fafb6114b781f19380b3
+ e50633dfe96998176d24010c60692ceb709691864cd73694ebd942a143857fb5
+ 5c3fb2e8ff3a8a754d978d47828bd831322dec48c99c142395c108114641c785
+ 4b51e898ab328f18847ef4a68d2076f7721dae2edcb68ad4256722c3d3af3ffb
+ c1fc5f23680112a2d82dcbc4a12a2835ae524f94d6c69a47a1e1f514f5f5f114
+ 6c68bb0717bc746679e66bc7f01caed0e51a134eafea7d6c4e43e6431538e14f
+ b12af2fa2a79e38446cd32f8ab3a5f9c457a44ba9bd7fa5a59cb779c68021ffa
+ a5f077905e266665ba057d5a59e56e3fcd47221d55eebf1da1e670da660a8546
+ bcb88b9292afec3b18d35bb75555dc1936dbe3bd3a7906c4ad8989015da99898
+ dbab277e0f304c7d0150baff56e8672e0f00856a1531c941142d32614989e99c
+ f9eae654ccf0aead574f97c054f3a18f8076a9f8df8f2de591e6468ea856c002
+ 81d7ed4a9dc7a5598f4301f1a1cde5dc4ef41dbde654a0850658dd00ea847fb1
+ 1376894c9f31f5147f4005da7359f7a052e33bcdf347158899cbacfcf4e9fbe8
+ c5c691188edf3356aa9187c3621a37e5b0e13395462cb855c2f6e66883c7cc54
+ f221d6673bf1507932fc54b4dcea9e1ff60017404ef18213a495d1a28433eb0e
+ 2660d7490ecbe82d768194f26e2d0706c1218582ad601e9348c6fd53060b6331
+ c36e76859d82ccce397ec0b5dedae6be3965783b0fb9a26dec145ac775a6da10
+ c876d8e34e644556637e620a6a01a3b4af4d59c9820c94b6a2fa4644b108ab59
+ 180c561b5824c658d60ec9ac7ad1c68e5cf42e004660759ed72c845119aeade2
+ e4e194d4b611670e692bd34ba0156eb8ebad862d0be2d2f1e27859ceeb2e43d8
+ 1c8775268d3d952ecaf2b8bc5e8206b8d911b90c0c773f9563b209cf382611e3
+ a0132469877092e6d540b4eec5ebf185283647ecd428d7674de7f960033aebcd
+ aee4e32f5d2740bb65883de50c479841f0ff1f150c2b4f0dd221cd181d29a104
+ cc1b983a57315f5c4154ef426e959170d58927c62b7a1a6a3bc8f44d9e41227e
+ d6762b77b721366be102d4e33d01d52ba4d7b259e7bc76623550c3b01b792264
+ 0039f0be102b81cca0f4c1af5f219dae771360236ecdb4fb90603b12861a858d
+ d0b0f501ca7842c4bb1ed88b1dff82f29fcf35af7daeab39d1448037f268d1f4
+ d9adbe3eff5219a11f3f006187c0386a54186fe5832b634ee93b0a2c236c5d00
+ 87dd474f36076ddb813f02345d066c0f2e9414a44060980c95b32fa4107d0f1e
+ bcb11d5284f55680b73ab54265fd24f3375bbf6448f18d96a5052136acceb70a
+ cc0f50cccc2b28456e4af36d76efbfa1c03ff007146268fc491decc207dfe643
+ 670c84c1fcf3cd2bf574f86efe40d23b69cb60ae8db7a5207fd6585e8df5b438
+ a1fb54b35fb6963bbdfeba452fe6032d0e5c74966e4f2249dc4626459887e80a
+ 97034ae1d3dc03f25187fd34b060dd6511eb3734a2ebc5c6764991543bd3b833
+ 38a2cb0f6121553d4ea2de3dab9b1e606dda33acc8f437cf55d041f624109247
+ 5107bfaa9757c8288e0bef0609276311aa55941e65c578265b8b4920c5b3657d
+ 02f7e311a02cf8d09a7559e12e5db43063b817546b397b8c035f17e167c469fe
+ e383caed7f2d63c0c3a12147c3ad28b188d7ecd1a190ddca12afdc31f6d44503
+ c382e8cf8b651754369b03c58a592a42a9812ef8065717854c85a93a1ffc8643
+ b1ac5ee5662630c3f1207e2c30c71de595c569fff3a94de2f9c53fd0b9fd59fd
+ b92245223198a7ae787aa67f605d6650977dd66e11a11f00bb82c6751f66558e
+ 0b7218f4d84bb5786e865662d017fd2b690d2c561e78cca6a7c102774307aead
+ e037ac0430d377662aa9e725e3bcba890e9ef95c0094b79d4b4ee734628970a6
+ 23b3986b8a3ab3a3755225eaa19900d836548be5be83adf543efbe10b3c55660
+ 05398f2522e27273b340add67ac370845eec7b6a58cf55c8906949d0a8ed567e
+ c979af23e36fae0be6bd3fd2d8c6ad87629c7dcbce55fa7ed764507e07511fc2
+ 166db6366582490509e05b9ffa8ca1538930573d05ad6f5de5939aa8796ec2cf
+ 2e79a9b7bf66e7cc42405e188df5da27b66b80c83bf40badbda185820d9a9773
+ 1b679eb16e349c987190e51c80cb2792f4d210202934f0df56735f4282395269
+ ebc4c70b25cc0c34c722004574e4433756e55f9725fabbba501cd38b4ddc572b
+ 1fce6cda5d734dbe4d9e6fd039994f3d1f4dfdb6e0aed0ee8573a52667cd445e
+ ba950f4cae1d77040a4bf00a42dc63e768e3cff9bb02d4a8e8ca12ea601dfa70
+ 2d88b43311438d065eaf91dfcbe3d6f6c1dfc11ce61a049f51444da3f682c48c
+ bd18aaed4744580afb7418ae05f311f00cc1c5ce3557b5dff72671f58ba4c6b9
+ 27d986dcebc898d369e46cc327da1f1cc53b9984fff44f1215a2a65073898e0a
+ 4d1840b1247b61a552065307c18b8bbfb4b0d14cdc516e93801c111a8299d020
+ 048d799760d9ca19ea2ac938f7d50e86fdde14fb341c2ffe307beda05f1b1670
+ 7c5dfdf9edd96b088a60503e05384b1e7b459ff12d0f7b62ce574d28c29fb0c0
+ 38dafeda7dd19f96f551f4e2a0e6fac85c00041121eb9cc85fe9edd0d19469f5
+ 16ce2d707521896f83fd8b13891a7e9c5c4fa5a5b5f5fcdcff9b66583aa6213e
+ abc95f57060ea4a59a3df8850a4dbd2be7a209e9283549071cc76552696dcc4a
+ 4b3b9667a69f3c520c075bdaec71791ea343022037d684d9ca7fa7a4cb7b0ae7
+ 1d16e2a0247ad75c045d5dc4d3956882d8d074a8211257ab33e504175ff80d3f
+ 3570c3f5f5b56210bf61c91fcac02377e544369fc6e5404bc24bf61e3ce3aa0c
+ 40f148f6f14ce9ac11a5689bff4fee5e02d6383524f2f2b96055cf2067591518
+ 1d6a8d04a91bad0d5679557b6b0b7e7da0995796c8e7e4725a2c279ebc777187
+ 7c6128d2d6ab4d1a1e0fefde58beb1b5cca7521b4d50e329866a32f13bf7fd43
+ 012481d8f6089d81c625cc11dc89b31320818e1dce321adaebc73effd87afed6
+ fb3789ffd783eb785046f36048b0151aeab0ba88beca9e28645bb12dbd3956c2
+ 8929ec53269e79c437cd957953c06c98858b9d8ae228149878b0b822f30b09f8
+ bb181847af1d98e000b700656f6d26d50799e4243aab93248d6e71839bf0187a
+ 166ffd6af616f3da4260c14812d2ba5deecba04748bd9eb0dc6555ffc9627dbd
+ 8b72d646d2f6c627efd7205668fabe6b7738010e01bc3d110849609ba2517733
+ 20561d7caf8c64697d7ea41e9c24b935aa9a3fdb7be49cbf58272f309ca67eef
+ bb3fa4ad48104a3eef4732d165fa4e4dff1dafead9d8f094223bba2d0d8bec5a
+ a15b0347e69a77136ef8acd7069c1e09b15024079a34e2c17b03feb2df6bf087
+ 779b6f46be71b2381d47d9038cf206108a903750e6de1dd34bc1fb8e1039e722
+ 15f917de89577ce14a18ebeb46d62ab43645507f5b0f990bd24c74d9a92c968e
+ 19091ade5267591a2f098b937577aad4eb08e0f36d409a274281239f1eac1a8d
+ d87fae7a37aa67b2ca1dbc89f4c0f6af4413f51092993666a6a165518b2707c4
+ 907d5da3975b74018c40185a4c87bcdab5e1fda68b06b7037b7a17c0abe4cb97
+ 64e5885bc4c1893aca4c9594dd2ac40c1b5fdd992cebeb64f9b313d501d83ed4
+ 80003ea2e7162620fe4fa264943457693652f46c0f0b1843aa61fbdfd657d35a
+ bc866e27b63196ee524eaadfd05621f4a131cc0d38b8ba9982750d4f37d67a35
+ 77f31526a39156b05d36b8124ad2d04ad6010a473703ffb375d68c629e3c26e2
+ efa56cb1a646306ac001c35b8e0f3a7ac3dbbe28a0c2427adbe16198639acfef
+ 4a90f273784485f91821353589e21b8cfcd4b2289344b55787e73a60f10cab8b
+ 5d4b80f0a782d9900ac8372f9b3a91bcf51a1f61742a9435be4b727241b9df25
+ 1da7e1110c6452584f5d50a01c158fcfa25b02883750b175e38b1d3ca2a9f856
+ 0eb35e4fe74705be34321024a38dcbafe2a9bd5a150d25785b32c563bd0a2d1d
+ 7ba533fab24e9e4f25ececf5358fa9eb20488888d1debe3c8d1d128e422ad0e9
+ be060be8259c006d9c60ad2a941aad8f2c61d15845da8aa762887ca83bce6fab
+ 95ba074116ddbd7b75d97c6b9b093e3d9d2f5a4712c303dd6fd89df607988672
+ cca9cb44927c42a22269627d8de165b21f1322431bbc890b451c75d2262186f9
+ 34e94a9a47515fd781e202ca6fa1858cea4045b054b2e81bdccb91934c2acc12
+ 2ed64594da77ad6edd4318eeec31da4844ea21afb1eceec5def9487ea1dbee9d
+ 98f3d25c7ac04d31a820ffb086d8f6b8c7dc8f07ee2d1e71034acbdb1dc5010b
+ 48664f57942cef1d3909378dd2e3c8cf227ad0d922eb3fdd8ba2c0d2b111a03b
+ 57815b9a730a9e7f07c496d9927767ef78a553cbff2b54f40b9edf1cdae529ff
+ 5a45a956e84d038ed29dc69710610e199e2651968e81216e659c8cf32782cf43
+ 76372921d21c3ffa77c1f7eb7747df7bfb6b248b125069a2a35b1a8cf7eec665
+ c3274581a8d61f144aee9a53cf41cc101ff890b4d436508f40f029a92b3c34c0
+ 19af97305cba83a53f6eff10dbdd36761ea23ed18982f24324c7553d95a23abb
+ d75e481c1c71a7f74fd0e7a782661cabbc1f9ef627751e268ad83e9fabeb8524
+ 7718b7cd828dc8fdd22d8e2e05ca630c509c1ad8f0fb1ff6ac5a392e4c6ac37c
+ dd69c834e09e2965db779a283d7d8da81e04bbcf40c946f767730c70fd8aff96
+ 90940afe11f17ce6bd33e010becad17093591a8d7e82970bb951be886a94c3cb
+ 018e20b2531b541681e428fcbcf63b3ac53184a1ef13d6beb04ead746bea3486
+ b4c99434a1c8e9c4292583ce2f87558c81bf603dbab69f9fa8efbccb2e8b4efc
+ 364b5ac29846ffd2945f31a838b698ae53e05f56f85e940034bc5955407aae17
+ a9fb9453a945575bf1f85ffb0e6d225bcd87fae4e4551dfa5fd1cee5ad8699a9
+ 06bf885cc5636df883886f302693550841cbb1deef0a6dda069818e0346e31f8
+ f87b7020734e8ad1a4a4013c387a60b77b0190f800ccc931d5cb302956263797
+ 48e2177fffd92e38ae6bb0621556a1a586b74f9c1d425fd12e9f008611a51efc
+ 4319e4225d0c6555f292750ae1923845919c302d56983adfa97075fcdc806d28
+ 87f94ed91b0375803c90f35cc230865314fa0469d2b2a71ea1c6b29437c3c3a5
+ 3bf11a93e31b32d0ee220250b87c9934f14e4cc923d1d7d4ab086dbc914b15aa
+ a79985c970513db533c6e70fcc45450c93a1a032870056a12bf5268fe363b223
+ 3442e653d0bc259b98620583a51f55f7e89c16a59e85ce66ae056a65dfaf0188
+ 0b54deaf30b8e21280d98a9bafa0f401fc25a9d20a9a422c152139e3a040ccee
+ d279b8587ac04b1437d8fe2c670ad4657da79ec8de5153d026d008a912f22289
+ 996013851fc74c03426abbf16d663850a33b55f72bdf0a3bb20250d9f35b6c3d
+ 97ef7df881335b256b8f1846f227e8cadbfd6cddf26545512c654f1a664ac67f
+ ff3deed538959823a151e0f8373694d529c9ab7cd58c48dd4717ac19a965ea66
+ 6f1969df92796ce3a735bf19b92157b9ccf080c2aea7be341cbb900a03896b7a
+ 4ca46af38c51fcf08769e98232039bd17682074b4eb18f30ae9b7dd3fb763511
+ cae6756e5998a0a7aab89c620e405ceab692c7d185d6db0cf500fcf89cf1a9cd
+ 0e53f0e6c1eaee82065756bd1708a824090de983655722dab11787ed865c0099
+ 005ad29c12fe12e4534c0f2480924d68e8559f69548e74b3edffdeb5abce0680
+ 434f1995c334a8c9313cd2db036ed014a491867103152a4233ed72079f089b9e
+ 39338ea6b5f3d595849f256ad65d9a167667ad3b067a85ff3e541d276043e08c
+ 6f70721738c8774d37d209478c00d4d4bbd6b7fbb6e07b77afa87e1920abb8fe
+ 0a146d9e6d4f18d695023cba709541d29d0d26ebac935ca4c00e28ca8c9f2647
+ f5b515a8c956640a607e1af85afd1084122cdc02224c754755215a936c162ea8
+ 31ca8c0e5a7119968d2597b0998cd4fefd12b0f69e30746d04345406231366ec
+ b3bab2af4a2d70eaa61240554e1f8e8c1cccd9880fd6bd83a38b54ad5959f576
+ 9d252afb5b5b872f0dc97104ee4ed900d1f3aae4589ae85dac85e65634397c6c
+ 4da85972a0d0c2b7000888149280ae582ba889578d7bc515d964ca0b5bc92219
+ bc3a090d59bb95adb230b1740b8380e5dd01a27a221c2fe1e668a709dd24fd11
+ d36f40aca7ed7f43f1ce0e28c50597240d4380cbf2a181bd7c28b5cf4c95d9c2
+ 84a4fc3c31faf4f9b3b8f1cc85462711fde23439dca3972ee20d651d634aaa6f
+ 2d3539e8cf072c9da68a01cc89ea935de070ddf32bc26d616410f526b37c89a0
+ ea59a1bf9eab03c5b85ef2f8c8b9848004e5c3490351a7f1aec48469140b0676
+ 2b7286170efbbf68ba09db77e17de523456244593c09acd6be3a9db31a3a56ba
+ f4f0de79619a70eeffaa33e1ad9081cd74057b5d81e2bb6bf973fb50de259b2a
+ 6ab55b0c9fe89ffdfa0da2c7554360517b6cb4d75eeee0cf2ec44cf682901864
+ c9aa7b05b7105a639e4a6500429d07d7ed9a578ca329235aa61bfb5b459c75ac
+ 199b8c2e436a0c73cf6fa9897aac3770c4c6f9393f6783d47f2ef1fa4f86f2c3
+ 3058e1dee447e0edcee038efbbb4192cd1c78ca28dfd3e9972ef52d1d2c2c96f
+ abdead48507ab80bddf2550acf1cc6b81d29dabf6829da55fd64464f365aadbd
+ e7d6e972cd3208fb6b679d6c780fa7cfab86a0e86ea8e91367ff53955a3e1907
+ c78d7bee62c13e07b3e1b1b64639cd77c21d882ddf4ff00cd7d46e946fa42d56
+ 864d7bbc34c7aca481c027202b925114354810a18cf478409e21b87972ad166d
+ 3fe61117e614d7cd7f0359286dc0b5d16b6f23e627e8b60dd94401be46474820
+ 1d4a98f86e8713dea5b3c25a3ab4e5cc932d86893ea2e6621473e51c859933a1
+ a19cadd311b929fa9e256b19cf14e2bef6f488aade70252a755f79193812531b
+ 8ea1a282ae48aef06fd590fa1b04f89724647ce2bc6fd021d9ae5e92c5a71f25
+ 3f7d28173062990a791d17ce8a924c89986b25e5cae4766c3cf5e9fdd3916c62
+ 6f553b2aac5de8c95ab1d7b56dc0516982a62c5c959c82736b6979a8e1ec19e1
+ b632b280c616b7e37f74a45b9ad57edda4b7489eb910404e7be4e7edb51271f9
+ 8dcfe910020975acc28b7183ac6adc56aa6ee68bf690e578591b68b4d8b04719
+ 58a899c6f2a2aabe10141b0656c51becc99801805b27a8837205345d1daa951d
+ 432b525f0a117c0495aa5bd1fc44806fc163125e2f116776813d8d22427eded6
+ 9881f1a5da891e97e181ed339a083ff6821e99439618aecef62d5807929c8a39
+ 385697ef0c6024f5c2880a264aab6fa39ea54ec7ac2f263307c2c3bb132684ee
+ 4bc7cc9409c8e71dd8889114c69bb5c9f87f0a3644b3debb285f86856dfb6711
+ cbc133ef3b853b448267bc2aad471fb72f52e21a94c526dfc5dcbb86d4d184ee
+ 9a463d5f0acb7254fbb89fb2c964b49253d450d0d20ea51bb47ae06d999e0a7a
+ 7a91be0643e555eccd04027c1d7b5a52c0cb7c7541678c62fc27b4daa63eeb6a
+ 17ee67bc4cc6dd1cff171b33c548dc22a21e24dcafd18012af1b6cea9a1b84eb
+ 8f0140383c4b3ea250b382d1fc62f5ab4ceda8b922ac11de48d288b65a5ce4f0
+ 4ba12d997bcfa09043fd128509bf2ffdba507f149e14b129cccb9b4b05922c66
+ eb6c724600f6dbc678c77456bd1b302a33216e9bb9927af9f03c5570ee2e3df2
+ 8d1690661298f0a9c915e435d17cd7b3dc739f8bcd6a818dc03ad8c4e671b4e5
+ c9cbed7c326ed83612a6affc804721e0cd2154fccd127d83e7e0b699d39a93d1
+ 09c7b87abf7b85e177182930a195e6b9977b0b159f7164efc4af6b71e91f2e8d
+ a4376ef7ae61c6e4e0192567235beb1e7fb1cfa1d430fcc7822d7ca72a47f654
+ ca13ff6bc28c1b24c2738992ea833db434bbec0c7518281beb8fcbfc4a7fc994
+ ff1157d933a952fd2f441beae22bf3ad77501a206d12f483112b2188ffd3f718
+ 153eabab1c553d0fa12670eb6f4598a99bb771134f1293c909c288201d42a2a4
+ d47756d8efa9eb1acd391337395ae4f22b33c225488b268462162187b674966b
+ 3995b6665b836fc97453e6376bad09eaf80580c2611d4a998f19137b6f0e8e64
+ ef0dbd748e911d986900fe0f07ce0e915b072e8f0c5ae78778ff88a0f8f36d36
+ 8a16d2788e5d82409b95849fd292d832bf5e594da719d2319261151bb4979435
+ caf30b7dbc473590cdca8d766aaec58c9b4861a254800e82f808da18d4d3a1d3
+ e3e5b602d2293b0cfdeeef0023f65c9f1c5186c8c8b974c93d34f51def512293
+ 72b4175643464ec7c41b4281cdda953bac614405de32c9ac738598fc5b4b3add
+ 3b69f7b887dd7561ff83da90f1f8628687131973000f2fc667d1ffe303fbeec0
+ c599b22ca38f9b028e46035c9738d7b7792cc298b7cd11dd18c10e9bbb7c1a49
+ 55b749226aa0afaa68f2f7b8027667daafec604867d344173ecdf658f72c92c0
+ 03a8aa1831f910678c83ed5ee662d42db276695bea37372ea16057ec67cc6727
+ 9310e88afdb2b515189fb004f2bc003ca4796d3a8d19316451b9bc2b13623626
+ a5d7256a097588b3b4d301a2b0f59718257bf17728d9abf2fe46e8606bc6a2d0
+ 73891759d154adfcff0ce603f15a1ba7c721b0a2066be9d3433a1950b71a505a
+ 25503680495bbaf1867b19213a84fb3e5d67b2dc2bac6f0519e783df126e5502
+ d71b747171197e3aca499e8b3cb3b5c70bf0969fe4685727536040b70fef3607
+ e888e351e6b2ab58114dab4f375cc9aaf508db81adc8fc848aa4d1620a7d80e8
+ 48f92986fa69d5b9d7c27dbc711c55c53c9cb58637c3b824d5f539997315d03b
+ b14d74a363ff6d4d2661afb2f5bb102e5445ddff984a52c83493ce3279d6755c
+ 4d
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ 0000000000000000000000000000000000000000000000000000000000000000
+ cleartomark
+ 
+ %%EndResource
+ end
+ [/N228/ArialMT 1 TZ
+ PDFVars/TermAll get exec end end
+ 
+ %%EndSetup
+ %%Page: 1 1
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ /N226 [/Indexed /N224 /ColorSpace findRes 255
+ <~!!!!"!<E6'!X&W/"U,&6"pP;;#71\C$47+J$O[@O$k<aW%hB0^&.fHe&ebol'bqH"
+ (Ddr,)&aD3)]K_9*#ot>*?H7C+!2RI+<VgN+X&!P+sJ3U,9nHZ,UF`_-71&e-RU;j
+ -n-So.4H\q.Olr!.kE5&/M/P,/hSe10/,(60ekC<1,:U?1,C^B1c.$H2)R9M2E*QR
+ 3&ilX3B9,]3]fDb4?P_h4Ztqk4[)%n5<h@t5X7V$5sdn)6UO4/6psI477Ka97n6'?
+ 84Z<D8P2TI8kM]K91qrP9MJ5U:/4P[:JXe`:f1(e;GpCk;c?Xp<)lpu<`W7&='&L+
+ =BSd0>$>*5>$>-7>?kE<?!U`B?=$uG?XR8L@:<SR@U`hW@q9+\AS#FbAnG[gB4tsl
+ Bk_9rC2.O"CM[g'D/F--DJjB2Df9Q4E,]c9EH-#>EcZ;CFEDVIF`hkNG'A.SG^+IY
+ H$O^^H@(!cI!g<iI=6QnIXcisJ:N0$JUrE)JqJ].KS5#4KnY89L51P>LkpkDM2@+I
+ MMmCNN/W^TNK&sYNfT6^OH>QdOcbfiP*;&mP`q>rPa%GuQ'R`%Q^=&+R$a;0R@9S5
+ S"#n;S=H.@SXuFET:_aKTV/!PTq\9UUSFT[Unji`V5C,eVl-GkW2Q\pWN)tuX/i;&
+ XK8P+Xfeh0YHP.6YctC;Z*L[@Za7!F['[6K[C3NP\$riV\@B)[\[oA`]=Y\f]Y(qk
+ ]tV4p^V@P!^qde&_8=(+_o'C1`5KX6`Q#p;a2c6AaN2KFai_cKbKJ)Qbfn>Vc-FV[
+ cd0qad*U1fdF-Ike'ldqeC<%!e^i=&f@SX,f\"m1g"P06gY:K<gt^`Ah;7#Fhr!>L
+ i8ESQiSrkVjQ#=_jQ5Ock3(pjkih6pl07KulKdd%m-O*+mHs?0mdKW5nF5r;naZ2@
+ o(2JEo^qeKp%A%Pp@n=Uq"XX[q>'m`qYU0er;?KkrVc`prr<#u~>]
+ /ColorSpace defineRes pop
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N223 1 Tf
+ 26.03779 0 0 26.03779 90.03318 695.64808 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.14749 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ /N228 1 Tf
+ 0 -1.14289 TD
+ ( )Tj 
+ /N223 1 Tf
+ 35.99699 0 0 35.99699 90.03318 415.47138 Tm
+ ( )Tj 
+ /N231 1 Tf
+ 9.95919 0 0 9.95919 90.03318 398.67279 Tm
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -1.14459 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -1.14459 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -1.14459 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -3.63859 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -1.14459 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ ET
+ q
+ 261.09819 0 0 103.43139 74.79438 496.94459 cm
+ 
+ _op? setoverprint
+ BI
+ /Width 1088
+ /Height 431
+ /Filter [/ASCII85Decode /LZWDecode ]
+ /BitsPerComponent 8
+ /Decode [0 255]
+ /ColorSpace /N226 /ColorSpace findRes 
+ ID
+ J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+ >q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`C/m<k<ioH)<bk^H
+ j`\=EYZP^B4!g3;B=(iZ<kDqOh/Bf.DHAorf'R[o?>ioWjnAY&^gM+`4=1jRLW!YA
+ =M/6)*KS9PE`kN%="Tc_Aoh+fk'&t\ctIN)4XQLiVpoI(>.nOW?*DmsG$@,,f58"P
+ DKf<uk4a;=i,EpG4sq/+a5h8d>eXi0S^6MAH<i_4=0:*@G'dN/kBFVsn9B=e5:;fB
+ kOa(K?GC-^h=(,dIU>=;fBr>1IXb_>kP+oS^^pnX!PjdJ%0OEX9GI`IODGpB_@VYP
+ $,Ve*/ITH-bV]jIOR,+@`"<DH&]Be_9bYJX9N;hHO_e;>`Y"/@)9.f?D&^M-b]OrH
+ OmIK<a:\o8+ioftN?cOX9U-pGP&-[:aqBZ0.E[gSKQiR;GQ7^OkBsBbbR'\D&'K#B
+ ?HebrpjY/^k'N,,Qh-&`0.R9QITMU%bjnPrk5<*!:*b5Z5EYR':-Zt08,tl[`dG0_
+ !!3#QhjNPMT/':EpqC+87XW\jdM,M!-^4.trhpjupqK>K1>PGuZpO^p!!2GcT28O\
+ I4!bfj*`Xbbb=u/V&/.iEF;`ir;A=m'3O.'W3o?&A5QB+5?V)&j!@p_!;gk6g30:#
+ (YEnes'OP]B]!jQ7X`Zi.#.]*FOda.3&fQXZQ^LH7/Ljth%ulq0<"W1O+C<)I<Tkm
+ o%8Db)rc;Y?sJZ<5B1,uN\>B[NMZ`5dM@FdGMa8AOa'JgIN('$C"_BhjOFN#QEk\q
+ WGaOO%;1X.-2k`KOm3f+Q0'oX;(,e:DM"JDH7aXXh2HpBSQ:'%&Tm2qG"JT8WXTuO
+ B)7IMNS^Yn^SL32DR.An=/-KlO5bW9H=O'sJ#[1o>'I%72F-.Ij]2QWS.k`Gq_IDP
+ O^EcG9Ea]PNT'm,JR?Z>\&71Hn\:^f)%<(M<P3'`Qh.VP+0dP*%L(65*.K3NAj&4[
+ YOoH,FBA/V/dE`r<M**So6o/%_6Ma3+`_ZT\UI?IrY2j$2&n9'kU,*jSP](O(<M6-
+ )7Qe<B+08+R7lC/ia7i@?b]"gX^5FXe9d1oegA'W9heE>)892Np&SK`*1C)O,g]o1
+ Q&lNoHA,*DWWOSK6t5!;MGo/@o+ng^qO^t]HR=8e\]'(0ht[>*Mbos1ek?n5T`fOu
+ q'Ea4JHO#PgL*X9Yn$MeYT0X%A?%qUMtec)7sM4X0P-,-ZTc!g&0H@Z;)>o<4Kng1
+ Iu)H?[3W8"W+'HtL.e@Y&BFXC*he?,lK)TokTj:8qPo'#&M:/l<qhpoe;S/e0Tue$
+ (EtR9Mes=X68a;oiJS?SnA'^b3"BGfRYbBI=dBg8IN.9oCf)<<qAO&@XOpAU&aN=e
+ a(QBcUra40b5in\[?2U=Cd)5l4qNh^G83e^We3\L/#H4Ys!7N*95rtAa`UdR85-Eh
+ "Pu5DOt.eUg.Ib64ISrDJ.ptb"dW'%`OCU,h@p%2QV8T:RE6<V#[5`GK[scd2J,CR
+ 8teg2c2SG3^Fin+'q/lk]bkH9m%G'&.nbJ2W/s4G?*U;clK/eB8`ls^!AKVYd:!W4
+ dkK3<Y@^2J'0ce,7,p&E0ob/,O?,/$9#Da;5^XZ/p[]+7%%UELckjiV#t1$f/gYU>
+ FOAMi)WJn/NH*I59I^<:l%4ejL'D!?.Y7XJ),tMD&-p"+nj0,CAUH<AL.#_,<9R<&
+ ;,Zn@auQD_B4A3E7&"VKqJNSe\VG);"qOZgPu6<r*spp)3KVCk6;8I&UI6qWX\*D'
+ CXYbL6q4,pg*3gN#q_q?RY$Y0$32RoJ!\A3Y:,jL;lQOZ;b@a[ee``+>G2Rlb@I$n
+ 'h)V'Ps2Lq+uS".:HRHfW$0YC9GP'hSj\"4,OOHtfeTC9>3/J]PB;E1A@Z@i9l;)<
+ 5"Ur"*gp1l(pBu<aJ6@0n]@'?B\)C%ghQ@ths@$^ZML_*U8Mb#87*&)E/%8E+^.ST
+ c^/0/b/;)-60r#"\CBUa<`I7Ra^+mD(U/VKCEQY*-kEnbB'**Ero('>9tq(`r*ZfP
+ A+4K3]'@TA&??n.8PQEo=%&!U[38o*,a"]%]+ZY65X[:`M(2Va<n*:$K[a8T<d::7
+ i+J*g8ITCT-C/\O$sl7R6<gsQIc+Rr3EE@F7_3?\)%s$D!&<FFL<HJ&'UuK^M']0,
+ [DO5RH/JZ'G`TsW7iWqI\n,`QaNUG$EEETX7r*^5SuDq2k41`eZdBVhCPsa/*86ft
+ FjeEc)9M($JA!5%-Fh^\d:I[=6L7u^-5X`'?NMm.Zq<(]l*"!"=P'Np/la.k[8CPF
+ oo`t]XsfYV:m#PklS38p.>uYAOmJu-9dW'S=;L0a$$2WXL.0H;pKtA"H:P:;M:SIM
+ BZ>(tPW"pDE7d4]CcoD%aX2N<)X,K#3tOhg2A+*]e;imtUlVk*-GZ(!jH5G%R;Pkr
+ >rp&]bN]`$o^PW1bb'0C9SL2S[YIPf:l&hN';`f/i_+YQMsg!KO7PElh,uL/nZjCQ
+ mQ"J27#pY"rYtnsiB=m#%$=fn*+Ue"73]2[Q]\CPq`.4Oil\m%U7F9W3.W(/5QcV"
+ NUO?6N,^+I2+6rVou.8^",WLXLi$IkB/52l,';b0oq%(sS>&7!$r<DFaZmWJ?Ie9D
+ 7qhRi4b'Kp.f^M2UiHVP(J*FB97-lemhK-[a<,`l,`eYn66"gnC-UsBF/tGY%EF9j
+ dHtL7_Y:o(hA*!nW]]pHB,BM@Lu$)+L23!OT.T$QVgp!U0"q+oY.4?Y-Kol2P'Y(j
+ eHf2_n7>MbG[`%\/5=jEAOE#qDa6b[WfZse=.&R$cI9mYpM'hFVWeUjMY/$he;JP<
+ C/#to#j)Tj"[1&Ccc/@geS4a5bcL_LNP@H>Yq[+``fTW]ZcO;cd0+$Q0gErQc>N:6
+ 7f@+qr^$OWkhI_)DGZCs+pSPJ+pbt\$n'8f?B3C[KrFQP..IPr,0m""@TpiHYe!MU
+ dmTG)01I4g%0GN+OW\!1iqVKU&oqqJ.BKseE)IipT*>B5iC.G]U'-kqE[3>&;_@cN
+ 7SNQpFRDhW-'4KeDl3F^V$TKjr@^"[!kAT;80Y1:#\,:S`EN=7poi&7POJKQVIKsb
+ $;La-:I/=mKIG0@>iJT0pFXDqUAjs7BHYL+$cP1"n5u@&`;*jTD?TT.Y;e+/`r?H"
+ PCcor:[0),UhI!t<?RlW+F_R':6I=U,]&/F_B?1;.[S9ZrG_lfmNhR:*4X;LrlH9s
+ jYecqoZ[FqaY4h`0V2=(r9m*Mr:&(]%us%P%hA^q\abJ4&?I"4!s2qjD!kgXYR#Gg
+ kRm;P=>8Ya;0'K>2Zk7,$V;$VEP,oO^DY$VQ%P$HAHnsL$me=.:.jdrlN7p^<stdB
+ Fp3Wg:hhK+qR^Km>YXAWVC%`5nEb.TUW'2@96OL$=s:&gD+p69mq2C4C)c+Q#N\3M
+ DcBf8OoacC-7%#W7@Y%]&sPq@,/u;EnO1o>ied1],\cgO&K'bDqDE&+E\0fil:`)`
+ *,TKq#QapEk2Omjk.P5WUe^pb#TE7?V"Nj`-c3J2EB59/N>[`Q&8edbd/o#6SL,Nu
+ ,-ST-N#)d(6QlL:T8[#";F(+R0,Nd$)WDN6ZC"N%<20c,DN;m[17TPKr?5Wp*V-qo
+ OU*)'?SCKkk-G:HP/nc^^D5m]+K$S>@MjnpTEF_9-cS?_67X$+jrq#SM@s/E;0*'g
+ 1k=#Kg'2F=Oa'eX`d1,O)!D&-BC)6W*meZ?,7Y^B_1(GV&gO3W/h4RZdNKO6q"a*_
+ --cuGTtX5dI_A''ck".L;]m5S"##6B2^Z=N8tu7T(?6]T+JMb7!\h\mjUt>Tj&2g*
+ NtEt\"Rn`Z)DB_eDLRSHf01`TkGns6Z2dpB6=MR3U!mNpPPAN^3[6C'4,.r>Zj`+8
+ HPg3t#LbmM9>]d="$.V8!j1<'M[LUMs#S08Ws:"$64kb<@m`SG\a^P(`eu@!aTp<p
+ +jItliZBgkB0]8<nHM9IJd40m(EAPX#>L4&mqeXQ=CDmJX.]JY-VP`UBPGsEaU"S&
+ nQ-Z]77,L]Z,Mh&Cm.Gb%b`JFr2.8Qc;+,_@VO9m.86D9BTR>C?n.:'!bmcb!^Sg6
+ %"8cR5)'4%oGA`!E,EH,9PoY2b2APlr*^73:K)pT$G-G;ddReS7fkT"Zde3XJPjoD
+ ,&P:R/9Oj-P;gY2\S9832"kjpegF:Arj5L;PoM;l,uPod)DkXd-,e?\oTF8FY_TDU
+ U'Ag07n1cN+\.,jPmSZ#>65O7>qc3^kB/Ws30&S>3QtV_mTO/\.+%F%_ZDC2/Z2Pq
+ %TL[+mZdulQ!Pm+m]^hkC"('R/hL<P(pWZ&Q.2V)##A:$fYWSu<O0hO'nRQ&%ZE9g
+ "P&1c2)+2`?t6CqKC_r:k!5[UO^QJCq>spjd8%,m+<kX:92jDmYj2:RRnh%m;q$4t
+ eWsF6Y6WEPm_HOOjQMa!(5N3]&+)k>+C:kLLa*LJ-&dNM9&KgC_&<VD!UIJl670AY
+ (LX>/+VX)S!Y!aPrd_CE,$$\J#S9gL7V-b6=9oTSmAj^5"SB*@,HA.N@L#nB-!GmE
+ q5Pf3E3TX<FJd:9f!^BB<1kS>%)qjTOELP+PIr<_4Oe"9Up!aJePdA$TH].O(+^<_
+ 8n?KgWc198>>%:*o//)j:j44$C$(X(1HJKXl6.S(Gg3P.:@OR+%[9KnC]YUq1uPF=
+ b`k[D@b(?N[RD[DFHs%_rlO(#i85"7faD8e4k$A8^]<@(ojT,1<bDpfPq_/to1I)+
+ ,,H!.Ji;UfWZ\O<<n*_@%HJZ)'Y4>qh94;hZs-BmT3rqKM,>388NQ#(o2rEk,HDo%
+ \'BYbka;pZlQRgriYsa%#A/'9cSe['$b5u?FaFh*.]a'1Z#`(f'[RYQ7&_IfN#(m5
+ iZTh2ogjI1n0`%mNekp\H'L4rVG+iaOC8_rimCnJe;$<]U5P'lO"bsXU(pg_+'80a
+ -#RBA:doLT70l]9hQu/a65tJ(U1u5_M^u1%Di0RU=t5`kas%>c%-Iqa)CZ:;F12Q$
+ <8V<>@p4"W+H9ejQ`4D[A<c'[>NO<$24'7''5cio>d!`dNe]D%#:V%,J@BB7@U"a7
+ 6[0(Q>d"RVf[XZaqX$3Q+Y^95XrWT]qOHrO=VrL2bj$>`Gi9)&Mm#16V1PtWUP`M0
+ ?/fW)c*F`Oo&</V?_qdFFOF\7eW#@"PGs[*/*2tH+KJF0P!tHUmWVr'3t-^-a35>M
+ 79^H:B+QScO?#moKj&Mp-MMDuH=@2$JuO;N<GO1LFP.]_="J9hJUj)3,o;dn%BELn
+ mYKPDn2:hnY6/3LrGfhNTsZ/6iY^\!8DGs7[o'gg2OI`N9Hh[r?m6\;`6.XgG4(B>
+ a_ljt(c@j$@lC<7:)>.CaRn9IVW(=kiDHs+$*5ZPWd=Ad+P(9RFkA&/'pc7U0p9Pi
+ Xb7gBnn'1lRl!!l.h!Rl%'@[[L)=PDg2S-RhHWmq]aX&PQF%mc2+eZ0O>JkZnGMJA
+ 2$Bs(edde^"`"MQ)b5/:+`O'GcT79V5h`IK'Cd_8U:[')-(VmV1m&l/6>X0Y`Cn0*
+ [olB)"gt35ZZ8%IK@)-GFZY.fR(.qR]:$Qm.%h`pkqdK(=Vu9iZ4Dn;n0-9@9<_'g
+ qXu(jr*epi-7ee:3,+a(W8^h&+BMF4L]`u="d90b>>s1i34:0&!BN)qbe#ZQDYs\&
+ OE.C]0"*qeFa0DX(>ME0TeHk#g;"k87Yo3^&X=*;U/LPbHMeDe_ODBN&8SEEi$"(g
+ YK)CZH:T1JI(!3[5=29!.-g9G6En$D.d/tui1@I'94TL`+7rkcNMEEr8?q['9]?dp
+ V!#1g&#q@#'C-"[2mu[;+sDuV+]p3<8-7(RX!&*m/*^]!H^H,EFsIHf:)+MAjsIsu
+ JTQ$_Q\$'(b4O18@,`$JH2BMW@M?PZ0u>-Eb'VJGiEfT$9V/-?X7Sm82N\>K`$UG,
+ #]>BW\_)H*b#+'j?#YHkeLJ"Kb,j1D=UlSn2/odu2iZfg\jX#5\"/Q(gT%XXUMtuP
+ P=oSN"Pu1ueVnJp4$O?WO$)12PO2?<9Zqu0!%[V^TWt5s,qHZr59>24b,oHsaU4@c
+ pHG$>_j+FKm7p=#.^j`t#N?`E8n?d?%nAbU+^;l1GuCJjAOiITJL@eHcNd4iCM;]H
+ _Kutr9:9oc053+5Smn5RC0e<<,[Qli.9i'lA^5?5QK.o>,\A??gP#5]RVN_I*3jf4
+ >fgq"F(*b^SG+=8AZ7:q%/1@Ne1.ZN'FfL#gT:N9?a&d/R+8tu,=TU;bc^Vj-V_^7
+ (=_pY=34Oe!cNWAL>"@CSd?od,*LnZ*@Sq<Rebi4,"dgI[NOr<\JVuQQ`6`uXFsUj
+ JQ25%^)O;FX^ZDFf=6EV0S]T"U1E*Y3k`'U(sX:0Jsb=%ABdKs?4C^4$mGP8GVAG,
+ kEjPq=L#S%SqlL&B`FYO=*fP,/0/Xr*Lr?)U0<s+q7)/%oX!&LGsEAgAjppJHj"Of
+ ;:P1U+jU#XHm$MI,dbm@gg/n#85?@X7A$/8,7mIi*hg(7adoKe=_j7i&I@DQ9C4J9
+ FTC<b6=I@JQ^6F6+Z]rQPsR#"oHP#1`;9r2XI+XU*jY$l\OH^e]=Mpf#O";jIop:C
+ [(hqGH#nkM\;h8UCS/.L@aQS3^/J\2U+HMNYI?7$6oIBQiP4S9eM#a3+k2=/3)Xf9
+ 3tb"/mfHh9b6IuF3R^MeQ/]O35/r:W6`U8Fgg?8VKt=#?W:t-P4an*AKnjC7MU+8u
+ >e"j@IA7@P)g06QgY>HjI65-(Eg5HUm$V`9>VD5:-SLligiD:D&+S*qX8U;YMoV=m
+ iW.kc^u1;DGe="V5J^cifQ9;#&W&p5mJ'@]0c:M?O7AV,4t.M58AGN*qn50(N5[*+
+ flXr9s'Nkli:hW=+E*]D^_;"3rX,j#!$cRkOa`#b-c'J3pnXpR;5m+*oB7=rV\lGO
+ *VB^a/g.p49agWNjP!f^Sl;?6WStQu8=h?k0RAS)N=N3oA(Cp4]Uou^hI9DDj$*ij
+ WE#Y#C<cSm.@LY''=@[+++0$_U)BCp%U"Objl1.TY%i\5\jS;MS;%\c0Z?gEOUH8l
+ 5n_LY,5WDSrZWGUC[d2Xi4jgrB@:t8rLE=:18`#E43k3DT8`#HY7TO&HaO%GaNO*k
+ Sq`GJL:d!*3Ae4)4JKad[%8Q_`ugmp@B9A@"QZ5X&nn^%%XNl+U(;"5ZluEt-KV.D
+ S(@hINp7V".S\&4r1n8B)HX"X\hrQ_DL=YK^b7KAM8H482Ma[P]Mf_,%uP'*\)r'+
+ \&PFq=PuI0qulVc;7oBT6KftRTufhUrfTjo,>=o:&n3R04`Z3pnAHfH$Alf<*'Xk3
+ Elq`=/F2#("KeWp@-#OH"5(=UW+9/l_MQooGJWO=h[i;9it-u=b*:3A0'Ji&,Wq7l
+ *4mFP7!uYn#k[K'Viu]S/[Z:h5+#9Llr,VqFTN]Na/t3U/#+^bLpa(E'cTRbZ!+%S
+ +EBM4rZHlB"];>"j^+6Q.GImT;2WU>L`?$i2SE.4b6_OS@!SAMUXha>8B(,iLLMSG
+ lD5Joe?Wdpc#S\;B7LdJ#;Wm_h;^l![;%=rU+c1QMi$Nl_XC$<4+RFL8>XT3;eU<Z
+ ^0l2,=L6opNConr\9iDQ2A8]H66MXF7mJ7qPHAOHQ-'%j?Dr3GnlFC00%+59-9@"G
+ 8L)cHA?"CQ$tYW4f9E:\_L?Fbhu^B/U_jG1Kf@\6/;d9Hc;(F82eW4>BINJaL.`3f
+ PFj+DAu.:0\UF%`lWG@FJ"i8M-&:a81g75^[PKeNmjKN)Kh'diBaO5UHDO:]p8XmL
+ TQpIF]/o#%N/Zik&uWUYE$?,`lKCb\!q2AG'sJgg@sMppq[,pCm#')WQ?+NKZAPQD
+ D\^a:&ZtN'-2ec[daL.lK]lq%W\4bTGB4XrW[%K2_"fQP5'QI]\ft5EMF\d1NTGV_
+ [+]lTJZbd'$l+YrR3(neiVin&M+:a`WIaL%h`e_uaS0>.8-kj)dIDK:SLZ<lJ$*lO
+ ^=r\9I:SK1UDG`hcAD3M8XsG,@P1ZPERoQ68a;QVE/./.a`e6!fJ?u+bokK(7h*gu
+ Q\XX&L`##n$3Bau2;medZ#jaCe9AaiWnX,0-6TNu,f,[Hk+AF5+ja$c5U$QYiaVD+
+ b75dOjq.G"qZr#AdJjhE?I&n5T5k=uM%l;&6XSj(.F>Gm^Bg&j?kTq9`!g:u&ADWk
+ 6s`MZ=[EMkU:;8?-m:(Rh4cm79UpVD3NdUj_dtZcUOa\:Aem),G3L1kM)tasrM(@_
+ mTThl8d4?$1OoXW+;ck'F&;s_2PW+=9ajXUYtTYb_Cku3I'f0_o]o"MA>g^*(OM"X
+ mlm-ddDUFK,iZHib$o-?>gORF0T`78nc^8qq[d_#*SCepe4AZ-6$>Z#GK8/b0BOcH
+ 6P?WFMtr[@,`*5*bE85\1->r^I&<2ZL$Q`V:+,)d6^:7":lm]e<9JSo3+>'0YEiKF
+ _u+@BVljp#Ze$E77!O[>r1["*H=,_9:KPL]`/qtsAuQdk757e=9kD!PjntKm+o[ll
+ Y^\GI[2a^6JUg-4Z3SXT\0DShNC:ek^B+3ITV)?s&8B6'$CjrqkO<E;Ab`tam0=fP
+ IYALnpd6N&=`]IL>"_]k/&h:uU!oOR[2"m"MP@eKAS%B0a`_E$";"T_:3Mm656WOR
+ [\;eWfM[<(:^S?uV<l!Q\9#2YlliU<2E9@AR;CYnrDf!pi.&uq4sSQ"h\5WUN!]"q
+ =[E"aHW,Ho7;EQGLue!"mS.hd2cV+M?lp3YE/XedhB0X`)EPehbF7QE0>mb(+Z,dH
+ 4",o'X/212Pb'P&3I!nD7$pX`ke:(5^mHTo"q1/$j;j_F->kEUX;$9,O88!202Vk6
+ !BaGIiI2a(TKfP:S0*F[O*]<P.T@3tKZi&hF=9#8P5#pMOZO#(aGkqM'tQ"o(sc0A
+ d''QH]URX1'NGhm$$u@2jfaM@HZ%Zf7[Q+EgtSpjWlh]QD,j'X3=finkoVd-JSS^>
+ ;)L#u#Hrm*)qcckE%ZDB_$9b@d=rXun[Ta`2!4rnr*HKrNC>7;K".F^,4Uc,.0]M$
+ .BU6/JV/6,bca.!Ul(2MeojiXjL5d:O?Z!L'A'&F1^C.qn!k&:r5<da,/:[o9CV(Y
+ ctj/<_BXVpkjF5+XeS3jCmdREZ'[P0'bSeL@XcB>3lAJGJ_D[RV\DmFeAOE6[;8[9
+ .iH!@;tDl8NC9>b*c4-@,?j/Ur7.A+YL`L^s'$`/:,E9Ld4>f7BiBMVW:!ksN=;+]
+ Q852n6rkFm7eL>F;'p6kHQ\dXle@+$Y@N5qbpYAKO>F$Qp(]%#c!JQ,9=M"3@Fib:
+ gMtQaWH9bl>hqF#A<ABs!&q4[\f+4mUKWj6;>%'1R5]Z!:(BY^E[/7ta*"4@Z:f:l
+ pT`ImYn0X'X98@ef_4c!l[g4W'rM!^-M)7GLSJG`r1i:_1sKfAEc3`t&%F:%O3%i%
+ Yis+[;7sf#ONcl\8]E6X>qJZb6:ZCQ>Pb0*^OL5=(;DML\@qA%^QBPT7QHqqPjlF,
+ SldgljUB,pr;t1Fr1hWjFSSn+:=5-tUXobt4lWnde9=G_?TDSomDFFL/S[SfC?G!+
+ Ztj7c$jrbS=&M:BCO+p-LIr=^cj0PFl(U5Ufri.D6bSPd(Wq+uRF@#MZ*,?o!\r$]
+ %,\:s)ppZ]=5T8JQ/#srVVpH=\N)aR3;uZoqAI8pH2bIGh]LXS:RU>r=]0_Pa5BV*
+ IJ&GTI-T<DBB;mplr/DGK]cR2&LB$/8>BJ]qG+anR=;d>I-qIC6eZ^10.)/6ZBC.<
+ #T?W'@eID0kDA`a5S/F<U]QB_P.bOp]Q<AEP.*N1Ld1Br/7Bg>>9CViUqD5m\g\U]
+ $h"EX1VY)/\T?:P,'H*l0=$D##5f'qHj-C2V$NibS;Zfk)@A`c\>*1t-?pW#-jPA%
+ &r:VL5*9+]O@R.H(U1ss_Jl-DUa&/3\>P4g5]^6kE/GIE#751G#p:V2'Bfd&%]Lk_
+ _H\E,!Odj%(btA+_(^Y>$Y_mf[m8.tOeOBJq?&GsV2':c_4k,M3?"f)'LFVnUWVE0
+ 5_bZ$I#7\+Oh`Wcl]DJD007Ir%Vi>LQp6<&/!&qJ/`EWKWqdL[q]<?J70&&T\/3&(
+ JVJPO&4BTU)Ho?3.?kND`//,Wpcl`#rW)foO2H61OG9$6%tf6u#`*E<OL)o*4Wjb0
+ 6@6iXH@NnUBuYgBM3=8XoJs%p2mX1(0A<_N=I^m5T19k2\mYQUaIgBV5K56u*-te>
+ r(fU?[(0itMLZ5WGuKHD9bN$D/PF4fq#>nj[RS)FW,uu3d[5`9ALE!UO8OGr'CRLS
+ RP3#8a+>s3&ZZ6A)2a"3`,!LIq0W8AMTG^IN"hJr.><[.XY8];"oO2c'UY"^Kue(c
+ 8;!m,q"G@mXU?P^JGJPbr0G@PUWQ!#X@.1lOlJIGV+QE>]j&e)PcDm2)Q7U&XZ:R;
+ goJTiYKI'QOfPA%1pK\0@@FhCb<32U@(NBu:T9G]b%.s(Uq4aVBIGDabIkNl>$<i&
+ ^.\[FbS7n;,f69AG053M9Mkf2l"Eaqa394Xb`p5nK*ohubHtt1bf%cMjNc!Acao9r
+ bLFm5,Cgjed`k20buE6<@GNPpf$.XY9DmF:UtX)#gWT`d9.\jk]A]bhhG+43c4o6[
+ \`6C(i_349c(*iiAEM0ZkEp<8_mJW$,.PnQl;#:acID6]9V'JaYKUaScM[4Y,kB8<
+ *i-aGbMo0i]_,'BpWnN3\npKSN2S=El-HI/cd_p;HDJNmr^34FM6)BW"Tm%."3/a&
+ :aH6$)kss`##L!Zd$"DiCu`m3lRRpsd(Kn8jURnTUsI!j3g(1K*>).+'@B(?)s"QW
+ 8aj)V(=@gQd?'a'jVbX4bti0q;:Q]6!pqgU*[7+<;?\5l,nj/k,-6'2d+'C>AL>`N
+ 916H@.7%"^ALUNb/'\OAYT58=R1@UR/lMp-c9e>Sr@p[n/lOVado>:u[0P/_T9442
+ ;gg[TUsCFm3gB`pci#t)jZ^lAQdT/($3?IB'ggD,_QMDb<'*)RI7;Y.8'@nR;QWJ1
+ !3K('8lWc'ZlLGld(G9WY12i8eJ)[54Z?@([8Qs#eQ#VQnT33n9I$&)eR_n6UEZU9
+ <7S*Ue^[s,H2gN;?<.5;ee*\"FV<7GA(F(Zd@j=c`FW(mB@_Ti'k!:-I:H<;CY$I@
+ f%"Wgj_iZBDq>/3f+i;W-$%TpF4Wj&f2ZtFATl[JGLqOnf9LX5V0^b$He65af@><$
+ jaPhSJ(OpTfG/ti-%ac,K@iVGfN!XXAVSi[LY.<:fTh<GV2Ep5MqH"-f[Yu6jc8!d
+ O4a\ufbKY&-'Hq=PM&Bhfi=<jAX;"lQe@([fp.uYV4-)FS(YcNg!uYHjdt/uT@sIA
+ g(g=8-)0*NUY8/4g/Y!'AZ"1(VqQj'g6JYkV5i7WX4kOog=<=Zjf[>1YM05bgD.!J
+ -*l8_ZeIpUgJtZ9A[^?9\(cVHgQf>(V7PEh]A(<;gXX!ljhBLB^W_n\.@c,ab^.:j
+ 8_aJEX$+GWA]EMJa4u(2=5C\AWucn<:Y_0J#(=Qtjj)ZK*0tHf>ntE8916#O1=u/#
+ ]@,NOKWnA%7bpKJ.]l-F.Ce1sKZ"6uMO\)1!qj;^Ute:Q-ZrMHW>+1%K0t942fu)f
+ 1NAQKPaE3FYP$r.,QJRT29Jk<%HTagHE,NokorR]=:@DQ1UCBp_GCh6e-k`FXmTNs
+ :Yun:,TZH4)th4oP)\R%&#-)]?2'_7pt+S#hk7)Vb9Gd<LlP3n#p!egp%U4@f[kb6
+ i#=(?ZT)==aJuBK?tk2M"ao6o$/hVU4eh>iD=ibJoAJ9Y@-r=!rX]A6hRTK5_?efN
+ YarMR'W%*1f;p!$ER;j/)N)bpiAMh;_T1WcH=7j$en`K;;:ge^+>'0/WCA,aQ.P!Y
+ O'jI1]=&B2c68N#iaS#%ih^nZD=ZW6AAfG'eFKWt^+bQG1"UjO@^q*M67Lc)lX41T
+ ?62%7Sd3m(1>erJ`eGls$n<a.`8ffQ@tf*c[Q0W6V.&Bf;r00</juQ(7Fu-.jDs>(
+ L.7RV*a[<UjL._AomG_\X"OgJ8Lgb$'iHf56K>`qjW5E'/UQL0Z]r<eQf4c5<8S2!
+ n&@,_j/uOAr_-Bo6728nAjD;`Jgode^*5aCMB4S9-0&R=HXtYgVU7lq)Caa?hDQ,p
+ QUY`OUB>,)Eo8t;6-[s?C<,@s$OLEZ1QHJt:1I?tbVG2iS*[+[d&F+4E@1BkkFe1)
+ [<*t=7M816ea"TiApGJiJYJ`ff04hDBh%;aa63N%Z=]&a[P2BFS7n1/BV:Z)[H;$[
+ gdYU;kl(#5]VsU"E#pj0Y78]QL4![;KZ_#W(-?hL;e8GrL6%MHY7-3(esF5s^dfH7
+ 8`ZBZ/>:/9V,gWYZqPtid<S8#!6>"4lIN*&k-""#4K*G,CDO&7ko.+@S"q=5A-'IO
+ ITs!q^F>k*!ITlA,=KZXkQ1U!_",q>`k>CoWDKC&Qf3F-o=cu-:hY"g]Y_m)!qm=G
+ 4Le_,)k1%qTbN9.ASYIC84(@R7Xh"1=X`^`hr`9d#/E@l^p8>A$mo=-fUQQqO?U*p
+ Lq-+?f!;8Efa/R1#\M1VLu6,\f<s2N%K5@l<**S<NYWZ0<*n$"Or.msC#0>j*4nRD
+ KC<\I/-qh4BG-PG8X2#rlAb?TmWcuFm_Z%pg^oe5$8a<?KHJaIjr[8!hkS$tL<jFm
+ QK'G"54^t;l3uk+rkm=O-Le'QjMqZUnRU=tj@8Y,\?*GdWUOZ#ils[UJ\<SR$,OEE
+ m:"F+7ZtL[%B=]1E<[<,#0_oAS8FPF%CYfa<sa_*%H!qQPlDS-0,[c&$F=pJ2oaf&
+ RiBieDl[,'nRJ.,;%`?YV<<:OE%5IY,W,!]N,W$GER<b9F"?gR#BHq*n\KdYXuZ$V
+ S7IN@8q-*sah6b\W3hli$BF^c1UXNT%n")ZnKAV;/fqr^!;!?0F1kHAfhc`O;TMW[
+ P2M2f?Ak;6&b--pDm@;T2ae('?-#b9o9;!$B/MR8.#DS01\XR^VO"M@8T^L`#cBnY
+ ;o4R&$TK4A)Ri]H#2:m4#dSqT(/IBWT2Z,X=;U-8B&?2QeN@p;)SY*#M6*Rq%IYW6
+ ,jjr3G"*$U4D8a>&9%W(oqi:Ck_OB#fo>`Ap!5gDoE09+?K9?t@Yj]heg9ub@;_UC
+ o[X?:=)BlT=U94q(Zl,"Q0Zs:?d*/$[I6sP,9*Ql;C/M))p\O>^/iD^I:k7/GH5'?
+ GCj@k2>9@pmo;4=^uY8p.GU8&WoGRk+'0DB<\B-_9;cbdU%!;`eW);Hm_GIg?30XL
+ /9n,VGu@=*Skfe]AmPFOZ2^,tmuLsKM"Y`SoUb/dFr,E9EI!q2GSMQNLtMOc/,!l=
+ 1T&uk7`OhVQ#nj@EFC+_0<'&cB)'q-nQ2sRn"!B9VX7`mpO%13;FH[<,HkIJD+q`i
+ E?o_2P%8^WHM/.?(VSc4T2Gp$$9)Ah8XYG8RkE?cH@LQ:cas"\_0H-17k]O+Ed[_5
+ BF013i1F]3?bm'SJ4=^aC9N;Is1\l5L%[1<c7`Kt+2hQrPC,$CM2/BaX>'NQf@6_E
+ $-0[e'3R$,"((&[XMUs"7u?Q@gZF/M$6UFo#Y0UKQdjmqqQWdLl*_@9Cje'0FhcS)
+ K8B<7)ucBgrQpr%e'c!*r^NN&OOH*\#L,CU4;?>`.mKl%s1&s/G^:nu/o2E0;r<)/
+ !!iQ+"Ts?B@*j-d-3g)l_dUpeF++i;MFD"%BOjFe)idEudJ3p"73dseAC>`kVF_Si
+ 5f`GpKRH':MZ_Z'2Y_`8'L0`qo=>(k*oE@4B[R([IY1:H$g<_lr9R`S0;$_Zq7RiW
+ -U6'1cnPC5hd;!Dh==0<Op\secg=PJrD`cG08&Z]9+6F.GJ%1`QYYL\o39(?E7fP-
+ -:*3L@\ja=jg%G'^fl<_Gsd'3N2<<>g%b0P+-=c@!V)QB5:f#XkV1<[hNfOfa58Gr
+ ?%rMiPL>B`EMS''ahNkBpUj%H#Bd33F*ZR;5*fR&Nm-sFqW7<_-Ilq2*Bp>Lhf\B\
+ &,D%Sm`DU#b^/,J:P)H`]?oX4466**Bu#r2#h!b-$g@K_lbDY:!kZ6dC`*Gnbkn4A
+ U!4e<Vmd&o#*_8HJh%3q8ho0e\5;/n&!?AP4MEfeqF;"5L_D%u^C,D\P:A6.7X)2"
+ OuUTJXUKB78'?-!(.ck9OH774O^>iDMaJ\R,#NZ3,c1_B.4QI6Ht&2ZX1Srn.MC2K
+ QkABRhB.ODb(27B;:>75,V&*]q]lgNh\DjVUA6kqo>9$@9N3#<kK.[j>d(bR,Mogo
+ Bh\=X96;XUB8,u@'1J\C._d@ZLj_8r71)&H?^L)Kdl!l,njb&QF(360Y=lOhNE-Db
+ A<5+f?#*6feb]_A_6TO)XJG<\LmZW__?j^S#iRu[fn^B5O4m28F(_s;V&nbu[62ho
+ 1)A#5^/^!>OM4\-lu'37n`r2Xb\MXaBAV7O<FJ1RlM-`#2QBJndha=un_.YSClm&F
+ -37c:OQ?@f+gl>XLTU;33ErF1jt*oM#i7D2@TaaD,tK_<QFl"Q9m9nj1lTKdc.B4m
+ OPo%$'4!6[c6\rM)(GTC,T05BcQnp1]e6#4,2].@H:"$rBH!H3I69D3muQ%F;N%DE
+ R[*=bk4hDXL?f@VJTe]-]mt%NbF7ZQAZB(DJ'JH4^lMkqobY6_/`PY^C7H;mX#cIL
+ /spO$g1.N_Q0n+HChQabN`7M%)gdG2k+*db`-kR"jQQU`\"r?'ZdPs]4DDZTepe+l
+ 7X8!.g@j@;ESBa$rpl6GE@,7[nm%e92f.dYH',F/09ZV]of/T"b?M-BYN9IG(5.81
+ :nG4[jo%^7X5:KmTR1,I\j-)dQXBI.*K-QVpki]FPb%XDnWNnOROq<UjY=h32oOWN
+ OO"Nt4o?TqlMQLnFX'ZZJ\H?VpWC<h0p"AN5lq2mT(8b"0=h]D8)SH\iMAU>("F6O
+ :<=X.,p;MqJ&7A9q\Ujj-no&INU]1KiNd!3Y)/JiBKHAie3GE9"JeFF56t_-pOm07
+ )+*>N%LDta0o`H$72Vgd'R9(m:!qQPLAl9"Gb9PG*P.ZY#^BiY9o[Q6P<j:2(8BJK
+ ..?Nt-mc85USn/W:].(L-:o)sUf8jRrQWC2#hGKuC4<*:7[?Uf*$h=tM<;AMaJ*?K
+ US24PClUb/ke>tW=_((+^.ad#H=BdjRNS_I:6Z&cF6/6?Q?$#23(Y`9,ttHcd4CJP
+ P@W?HqgM,U&hco;#o_JB]p;/GB[!Fk8/UT+QKL/@Q:\84B&b/'Aq!'@+qHT\I!gC%
+ Q=gm:4#1DI=EW)gRSH2,1Zo/DCK&$7cQbY<$"Wn%Zi+7Uo,Tu,&Hn`EIXVr",/*.o
+ 4&KoK?VJS1B.,bgTek>_;0"0U9LTjDP]D:P'WjWZ<<Stn^o]2pAKd4!V(G@QiPi@`
+ 46WAu*V>eZ:l9"@W::Os'T/P-b",uU`<D>kSm`Z(-EjFBM)_k"BuGb(:InJM,W*N)
+ c['belCeNaeHW6#b(a@T/E3BlOtdkY(9d"VrD2u6RF=M@=528BNjWW4U&)>e/#?[X
+ d#l_Ig<2=R4QT$&I:()4`knM<959a[EL;Wg8\bLSIl-_ufD@CtlPYJ^F"5%i)OhdL
+ [+Qt\3/CJq-M\rVR4EGSp_>]?7r3_\YGE;oQFf(ndhSE-ep`F>>12-e,$)'lBT^8G
+ %rKc1\Y-sV*gQ49pKmq2[UaFA&3H7VDTsT=Q[L)_isTfPFeLWLfX4h8.<u1J-'Tlg
+ WAluN!%uq6\E5I]M"`]JaPHI%Ur*.<$j;6e&VRml:l4%<4+ZcC^Q`:\P@!mgn7#u1
+ 0UE4EL\PQ0=#AF7bO5u"4@NX&Oq#-5rS6D&<Jp<Y/Al2XC#MKEB*g`f/+Wh_iY#Zl
+ U:KG42t2f";JC`Ar^%pA'+s;g[=Ls+W`-#q*[rW!qoiIrSW"X90e=kVYF,GVb-qkC
+ pQ%toraSth.l86iR3sNn,Jf2Ms-T<jQ*>Q']hj>5U'o=:ng6UH7WUZAGI\:TIQoQU
+ "X.P<e>]f-BuF/W46G)`L+o1;W(&R4OfY:B*3=&(,o4rEqbTd=nIW8W?If`?S3VW$
+ C+_id;e]\?WQ;NIZ%OW.PsXZ8"obgTeH\VZI:u&\4!W3i1F_R0"/tOcP-&\Y:TUYu
+ lPe$Bc=EB8Pq[YlaOY:H#@s[uXgtY$rkU#88>,;.4PR9#iS2Ii31+Q[8o98s`tcb?
+ P\eQH2c1'P`K@as(8=ClW@U"Gk`>420=a"oOuf&8JWg<kgn./=G,?3N.?//+bqA`r
+ M,Beb9qk7iJP1_#M^(I76cqs6bWln&L[r;6bE,4JiL9q)*=_^DZHf<q0:uNc^%t*>
+ 4#c?#5D;APY),.L,2idaVja/K6k&5t3i0TTiPPcJQA8T)onKk50#cK?-Y;Z#SM`Eu
+ L.+/^+Qm;@NtD9HVE9Y%mW5G*T+5RNCWT)d`"Si+h9dB;(O%3pA;9f`%j_'-/b'b(
+ VY0f%Jh2`ti'f<>OUhXh*c5gGhJB/>9Y(3R3?MYME&[P-J]Pr)V'R--Q9ak2&]lCU
+ +Y0bLPRWi#9>?nc:kQnp@QE2c?Uph2G`m/IboR:+7ld1(iiIW<.>%SBomK5kqVk6>
+ %f1,(WP?Cr;E;M8IieEH,N&*RK6E(>ItN4FJ,\[)K$*]$q?79%*7).ik93E#@p!U[
+ !Y=AApLSaFJl)>7I)N.g^C=`G!\3Ldm-:ep5u5q-&(\;Z]$TG4!TIi>Xth3=M#G97
+ 9$a@_/+S>S:B\ada"I3:_b0IfcK</<2lhi=U+$"ZCa,uBEl:rZb!cCCfH[T:+]'@-
+ Y\kYh$L!HB+Gi;f67VG6W4>=]m#Y7NMHIEmY[!q?oV+2L"]cn1Lg^<J9u2;f643=[
+ -EU+c,B1jo&:XrsK"ch!ro.Snn)iadc62QenY-MeE5'tcnh^^h%T$bf:peFK)%A5M
+ Ulaji:+@pW(s6h<ThuppK*)EVi:mlEQ>lIFT\^FE%XI"4'>b1a_D_T!.U+Qdl=:nB
+ d0_)eYY*7Pi.FZ:mJRQi>)JE/IV`@-LPZR>1hq";Q>iFRD)1o]:qHg@%g3gaO^T"Z
+ >2LN^"C_SYn&@a_]S_iCIW96KZ+,%@]bj;.(kP$i./OZ4cF67uX\VnVOae8Oiu1J.
+ .'Wari4aeuCB.m)OO:'rM74SF38QC0`c3s`&X&YViZliK,*>YEJqDAQ*?5[O*_N=B
+ %94U("H_#i>&kf2&ia$W4Wom/+MpDgBDEF>+!D)L\?Z2_,MNt(1*H*t8MOm(ccHYl
+ g*:R6Nis$BOcLc%],[P4-g<K6:?58?KJl^B6;g)r9.M&mm^\J^B'e`SXGG$b5q"LB
+ ,bdXQ-RQi,?n9;=*l9?>,G+OH0d_R9-H!A@6g#Kn[0M:OhPa^4Ejgu@L*SKV+YMe$
+ @Oh<(ii8fV.Z]36A</=;EA0qZ,r/4g:TP_g*(lD<0*\C/9!9s[aX,pe*D)PBO"MlE
+ _F9Wo.INHFcs4$m1*oiHFV@fc1Fe_I0/EroXTssOECqA%c8j>K1p:C=,2U&?E82c9
+ ,uVlQOi0MA2)u=XFn90&BpB(3<A$'cpOd$"C$.9,$S^Y$0d9=I9;MSs=Yb[rO0c8:
+ o8O\fR%';13U&C^16=$7N[&QH-UZTcdsCMI:E!]M0VU$UETe\^d/md<5YrC_;e%>Q
+ E@^/p3eA:ojq.M*_HR/]*V2?:PK^4./iOGs-)9*S;<oj^h$EX?5kGWo.QKhol3$LW
+ 0BB-&6bPTlRl-$C6#K[e;ueFHl8D'PBB.d=e3sk3ImgY<!t'LG-qbK<8OC8t5,(,-
+ YYJ#YmYc0f+gQu_F+0Rq&OGn9Bk$Np:00fDF>4?^Cia_iF"K[&1Ie/*$6gK`C:klL
+ 5Uhbb7S'@I+oW5K_]r-b\H<F*i`K9`D%Uf,8Sb.ci`/DnVDRqk4`o.-[.GZ;T(ga,
+ #bm;QB=/R0og#7m"6RB>oW9srY;HCk7meh)FUB7uJ0Sc3;F#_1,"GXhI9#qWC:,'>
+ F0^n-3Dd#K,k@KMV$\172CK\3oVq'UC!f:<m8E*q@B5qbUu+X\d95Id6nB]hF_G`8
+ fhhi@90f)E']'uJ%fq;U9r3Ua-=]m:&Bm"#5@Y:)$5AS%^`mmF04<[=!Y>D*at#cm
+ ?Gk`/26`_GZmHr'<<=QNi85A/.9Gp/43a?n@6\/%L^WJX)t?I/eG+6?>XUBR!UP1n
+ Yhh(o78H0U%>3DG6[N@P!E$4!0aPr8k#;f^@NlOaAl4kjAaO'Y_?KHpK`L!\p((X;
+ Ou]sGHun.OitNBhh\4QOB!k3E6JlLC<GFr.(Z?DCnmZrc5ugs_,j9>E0n3sn685+I
+ (%;EW!'[u[[iB&iLOr^@@6[e'`GLTiD$3XP<ip7iT5N5jDhSO8i;O&Nd![+AD-$K[
+ -_G4a!::8Jee\\h/5pQ;R"n/hm)#d6W@;fj_X-4;il/8@p<$Afc#\K?E7[a)f2$N*
+ ;fu/CFdH<Tf3`\;@s1pdG*cuff5GjLF*C]0GF*Z#f7/#]K6UIQGaF>5f8k1nPBg5r
+ H'b"Gf:R@*UO$">HC([Yf<9N;Z[5c_H^D?kf=u\L_gGP+I$`$(f?\j]dsY<LI@&]:
+ fAD#nj*k(mI[BALfC+2*o7'j9J!^%^fDg@<"+XJYJ=$^pfFNNM'7j7%JX@C-fH5\^
+ ,D'#FJs\'?fIqjo1P8dgK:"`QfKY$+6\JQ3KU>DcfM@2<;h\=TKpZ(ufO'@M@tn)u
+ L6ub2fPcN^F,*kALR<FDfRJ\oK8<WbLmX*VfT1k+PDND.M3schfUn$<UP`0OMO:H%
+ fWU2MZ\qqpMjV,7fY<@^_i.^<N0qeIf[#Nodu@J]NL8I[f\_]+j,R7)NgT-mf^Fk<
+ o8d#JO-og*f`.$N"-?XjOI6K<faj2_'9QE6OdR/NfcQ@p,Ec1WP*mh`fe8O,1Qts#
+ PF4Lrfft]=6^1_DPaP1/fh[kN;jCKeQ'kjAfjC$_A!U81QC2J7+p%~>
+ EI
+ 
+ Q
+ q
+ 134.14878 0 0 23.99798 85.11358 449.06858 cm
+ 
+ _op? setoverprint
+ BI
+ /Width 559
+ /Height 100
+ /Filter [/ASCII85Decode /LZWDecode ]
+ /BitsPerComponent 8
+ /Decode [0 255]
+ /ColorSpace /N226 /ColorSpace findRes 
+ ID
+ J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Rp>H
+ >q_R=AlC^cenm@9:1mM9jS"!dTMT<$3[GQ$8#0$s<4ZX!SPQ1`C/m<k<ioH)<bk^H
+ j`\=EYZP^B4!g3;B=(iZ<kDqOh/Bf.DHAorf'R[o?>ioWjnAY&^gM+`4=1jRLW!YA
+ =M/6)*KS9PE`kN%="Tbr0@0I,k&EVQXcN*X4XQLiVpdpFqLSIW5rrZE1iE)3UH\uJ
+ J2^]Gf`,;]hJd^E4soh,\`.P:o6('LG(59e3ZF)4/!j9!G'cIa5?G$Hk4V+.phrb:
+ aPlg(oe,.2LY_%fk+3X9J'5ao_7^gA=3@-/5RlK+oY8M3kj4`$A'F4%0Iiar^b?`'
+ #::!DSGo2N>P.ANMKC!A6;@qD%]'`CS6qt/dL,rk;'MJ?^!R45&]MjC9]Ccr9CVPj
+ OfFT^4gC2t+!jdrMVFg:<.s'sOs5M'apcpP$d(5XQ2jL^E^(d.JGX%+a(RP8e2>\&
+ UD>gBar*$,F#7_6bt'CN2_3?eSqkV>_@Br!O@hELc]dG(Oe)+PaG1Z*%0hd=1bq-^
+ cq,4eiW8[T#s"e<"Tjlc#^m(EUQk^8P#FgJ/<8(5nn1(8'8dMe]#T(;(UueZOGOk8
+ I;%R?icuV5U!fu$Jf!GA*oMV/r(r$s;O`7KMtR2rDis%(5;(R=Prqjrc:rd?_@nC.
+ 9HWWOKj17*q#=u0p/3&T9"%n&=]]Iu?:WN/'oQkG=$e$2NV?rX2jO!RKm?q32;;+S
+ =+m<"?B=&0I&0hS>_LZEeW1\YLhV?i3S'+_ih/edT'V=+Ys45XUAcQo'DJQ9+5mK.
+ ^+[1Q&iiOn[aG>"@lX0J0&P(;(0BUX(a"@h)BGHI+kaSmnIPGA#3*4>2GpLso?%<6
+ 3SIYFMbaiQ54*prl4c1o"FKRr??qcT60Aa1?_8J&IJF.4aC\KRJbgiHSiD=L1GH^c
+ C(tmZO8sdC7=)fMZb(6DT;f?4EYs#gY_LUI7q[;48o7J;"j/o2l<CPr/ubH:4FH$U
+ p@UsLS:C6M,]g-(!IhT!a:cVpi'JCr-R3[B%VgLW&aBtU6i?miX;14/$?u;$3YlAs
+ EJKlR]\,C$9&gd:?M@pn5?NZk*p^5mH4gHu_mkAIiUai,8d3M]!!U;,T<nKCmi:=J
+ LD8:o6]lo[(jE^T!8*nm`!u2rYdLDNbM9`.2bq=G+,C!p+Gn!eY[,eLkOdbAdCXE%
+ $1U73rj^6)'Po?\nIV%f$;K",IgH-/&X86Z:<QIHn0KT\fA_l5Opj<haQGn>!9T)!
+ \O$T[QG&K>"5sR'G_`^U0j%-&@DTO5U_XKN;`>AM*!:JKL&ijHX8j#eRg\a?h*3Xu
+ %0:^G=9ACZ]pMP^iV;;ii-dUR63be-4D7d#asKL.PoCp:7QRDe)B6^?,QIs69'C]Z
+ P.0#2cY9+8:)JW)-9+9qHr?*R_=rTWk^$f[g5Kp@/'BeQ+UBLRJRf1-]/Rf"iVU8J
+ d<4TpZ3:]m.[H$mVF_cc5:DTrc]Y0n/.d&nj2`dN3R.p(K(+7(PIus6k))*eW(Q-A
+ C"[7&Q>e'=pp(e0VHemkFg%d\#3W#JNU0t#8YQG6N\k9+PPB^BLsea>%0h^T%Uu)&
+ XDqes-s6r><WE,+]SCnM8X*\.S0mfe#Xga6:Sq"0\_AoD;FmQ1Ai12]5!nJ625*_n
+ Aju8$(<tpMQ&jFI:EtbNW=ct@07nsVqL1_DloBB(kSLHm\3m,$PFYMoOj\npR&F-o
+ L/Q<*-.Pdd.MR_"c)EhFW23>U,eKtp$;SC3MXp'6]:ahCQdi?u*M+4ZJ/+#r.67ae
+ 84?*/FeF<-<%p8U'Fq1/;M1'%BjN29?XdcCi\)_E#:O=#+OX<3&1Z^EA3@boW$+<u
+ F7h@!jOL9P[[ipHnR/7Oi]&gT>u$3hD5@D+YABBHf;L`LlbamRB'mE=#D>=kBRb_U
+ Y0)i139a!L;'5BR]>Qb2Coq6\3RuB&**#b7,ePiT(=qWX[.l$*2-mOh[,BXG6Z4B8
+ _QJ"7gTF2RJ?:EmXZ*C2hCI5s+%h`IEZg<ECE35gpjWtBRcrU1mqF>q/Kh87iEWYE
+ EG+jD+Z:4m<q8,!0AOdd/].D>&e?9uq&uoGB(jj2HpHs+=2SZ2T3]*8I]IVh,"d5Y
+ WlAgDNY!:6f0G7"--CC*p(>;4'"FF-KP,/<!`(bd_W;b(D^fB/\N"U**&e"rmMp2c
+ GM8Bj963s$/mupaR"JTC!:oV6#0g89j3!=-2p_Xa\qiT^c^GGuTA;'?=(_c[J,s(5
+ "p_lq`QagD^(9BZ99?^c@Uf+jR,ftK`Hd.UB05"='kFYuRTCJCEY^afk)mR"(0@'*
+ +eS+<g,[I?o]ViLLX=%tb.96+OJR"]d(R1R:_-?:Cep>'enhMAk^i))eTLHjXhX#e
+ @VK\<ZNL3,V1]cp,7DsC1o5Ia)V+"VBeaA0rliu?B6.lI)`6Xd_Kf8@&mlY*F1+MZ
+ fiYS-m+ne@ns7GJHi$_/S0UDWjC*E2\G'R#4h,3r+O6HO*,f[#U:4^Xeg)1]TG2+U
+ mdC>4qtG7#!`QloZ:s,1^Duf^;j4_gDrl(f:/W+>P;rXCiJ2<A3'G1#kGL2cH5i3H
+ geiiPs#QT)?[64CAoN&3a393pP]GVPOnC@UY.Wq1E,J5O:<4NVgUDI7%<%6301kO%
+ LSFAT>Eer8S*d!rU\*B@62BAm&aB0uENS&Qq.Fd6>\>h\SgWGVT`i\dMeLH)\[B$C
+ (E`OjRWBIS[i^jMkrX'fpi6Z]#j6X,IN*jE^`T2[#:dp1s#G?8;P(LuL@DlPC[+X[
+ _'Ul=c.U!@k.X:Md).uNI,om>p&VfVB:@jk(LUV\UWImT)>%4deb3<'E8/.!k^Kkq
+ H[fi(r+@D7Im;\4*3\G;LJ[Qt5(NU1=EC0ckG^j;B8Z3YUX%K6qk%utmR_T^Wh,.X
+ d,,:WdYqY(LEQ&h*op+op.hRaDqt'tbTLW8+\8!CO;@`>^5_8']T8@&B)_s",07rR
+ 4g4eaC8CU,n=mfg$0+"_/^!u%SF4_c+DI-$0B2_&@dK,FnIO.=:eL5=*s'^%j=j!^
+ X.]X5KWC1j!cMiSmo672P#3A$%I4f-Y^SA\Os!Scr,!(`j,4-q5&d`W!0/haC&m\]
+ &;j4I"]-K@0T+5]KZ-b2%'\Us/7>hWY\1/?#Hq>*lp+HZRgh&dCT1d@-Jhnoo_Q`5
+ "OG0fjX=^$\6mT%!3_]WBEnkT@/Y%lrN<7#%n?8E5jGT5l`id5Ab(\9+UPC2p8'+l
+ #uKAjrp"I62bOG[E4647<<V^=;J1A[Lh,\P,76,Vjj3#M:h2MC(D)]eqf*J]&FgTW
+ Rgd]'feA7$9fhsd-B?=*]IoB^c[_K0Z<t\5cjr+u#G-,k^*/S/`3<kad,b'.C7@a%
+ !\`!hOZ=1mr5*94#*G#Yn3n<M@h_6o'ToWuMt!f?+A]g[RW-46d@Up=4VR@B#E)Jg
+ Om(;/)A26gO,($-mX53$(t(-`i9>9PWgY_X^rhfCn8YKQd0fR1lQV@m'p56K067iu
+ ?6k[C-P0,\d%$c3DPRc),YkTe10YhkRS#s$B!KWKlr+peEZfCp*t[H9-rRVg.h(oI
+ '16m.:[Zg'gDfTe.roh,E9AA64!?B1FpjW`dO+kS#`3AdH#]37dTIA!N$-5L,d+;s
+ -o?1sbks2d&(0g2:j4)s%2ol>-dC0_1C/D*lR%b"pZZ?\#a6@TWt5hcq#uitjRX@P
+ RauE[.T5s_Y88rM*@0!48-i!FEShin,X/OL/+YVA$r&L:0eDgL+HhpCP1ZtDL8g'&
+ /e`jCZ-#0s'*e$/A?tVio1Lpdp*!#*0@<&ic+Kne'.6^Y-5$576i_/(XZ#b(4-Anc
+ '4N7#HT1P/2^/ld`mH7lCF1jl4O_Rro/m-9r(D^3'COG(E3=_T:B-J`oLVn9_g9Ce
+ eKr\V5'+Fq9iP@h.XUcH4k(8bZl:S1GndGe:Mq#qZ_Kjnm2cn=Of@pfUNUCu0KV_l
+ 3\$gQC67=0%*^DJ$18fkErPp!A="k'7`#G>&9C6:+#*)X0$P@mN"nWFN#CRqdGmX2
+ 1i=K`$;*ZV%H.4#oNWn61ghOt_)/AFc\u.>7_q``:6a!so[-AieP1/=9si_No\iP%
+ j\Bp^::0C`o^P^6ohT]*:UL'ro`7lH"]0=J:pga/oat%Y'iB)k;7.EAoc[3j,uSk7
+ ;RJ)SoeBB&2,eWX;mebeog)P779"D$<4,G"ohe^H<E40E<OH+4ojLlYAQEqf<h^o`+9~>
+ EI
+ 
+ Q
+ q
+ 107.99099 0 0 17.03858 410.40649 141.41429 cm
+ 
+ _op? setoverprint
+ BI
+ /Width 450
+ /Height 71
+ /Filter [/ASCII85Decode /LZWDecode ]
+ /BitsPerComponent 8
+ /Decode [0 255]
+ /ColorSpace /N226 /ColorSpace findRes 
+ ID
+ J3Vsg3$]7K#D>EP:q1$o*=mro@So+\<\5,H7Uo<*jE<[.O@Wn[3@'nb-^757;Re4U
+ >q_R=AlC-henlmLbi_p8F1uQWTMT+u$7-II8#0$J"7l;:^I"ku@H7bq<ic9<'@H1C
+ Q$0i*#Z^4k;1a83B;lRrG.KY`hbUUaDGg-0JuMfg&./UC!<>De&6Z/\3F`'J@B0Ye
+ V[M_*`,D8V10HSnJuk#c]C+3YL.<\bOL-LU#XZE\<=i4g)SKYh&P7\[n+<<.HX!t;
+ *%Il];h!7h#[k+]4-onT$[:X>Rr0T3(pMi6&f"5tX.@k@+=aVIIa4*qm!)qW.TZ*W
+ Dq&hj?F`R@Pn%0OXrbnr7N($^TK]!Y3s2pH3D)iXr]Eu^(e;0!,SZ?Tc[$T73"T;t
+ "!M:QXB7ecau'C5k\K1X]$So1$6a?qOSqRE8gb)t#_K-S78Y#HLPb;s8JoJRCfmIO
+ ccgFV7#4\>)b9HK&KRgkK=qqlLA;n^8BM'eKZIn)5lsWppjXm=@efq0U1SZM/PCZi
+ hQ=C&6AgR"na[B,W.9IF]<-S`5r24@<7O%.d6\'3:QrAt&>ZV#&Lsb'JdX`Ai.-8(
+ O7XV.3_tk&(f/)m80B:Fmbn*kW?D8V8L9,f>q_Q5;B84sW`8nL1uJLELb@3\l4=R#
+ ;>tMfNI<:Ne`ZaY-rQ;1!gD!P44'fnkS_3G=6_2!5M&F=m7c4^BqH%E"9lFt<#03]
+ =1-t:Tl1JE"[QOm-[@m'f?,LL8%s+MrpD8U!YfjWf+K3F>6"[H?lS6RJ5?XjN9r;B
+ 70PME(`88ZK9-eDfRY(YNVeOa9f<[c#SsF#A>$d8Wr\n(RZJ@%"p*Rg()I,f;BWKl
+ Os"4YR/r^(\'bsd[Gc\PK,>*jjFp`O+M`4E`.MAE-&6aFO/Wnh+'(Q4[[;a08hK=a
+ 3Y?*8GIL13KS40Nl5"%f(\.r<;lD/&5UamW8Wk3hqPm(0<[[ts+G9q5lCiubPFj!T
+ #7uO5(RDL^*Y8YnY(.BV&%3mUE_8jR^k3QZAst%7"0@;a5k#t^Z3jC,4UM.mm7:J$
+ boh8ZM2!/"qN'?@ELlU!RKusXU2UA]T7p-5B)T]B%KDfI58i`#GVL7c"iehMH4LKk
+ XtTh]&e+<F^O,p"#HT)BIeJJ=$8.?qoggaKU.XWCOkq4<Vil^X?jCX:PX.cgjF+ZP
+ 2cso&>O?ZnN23r"(@?VSef^`<U+pZkh&k;V@EQ\`P\3fZNB?8ILErWS64F&=q][.Y
+ T\,f*ZpC<.ZQ`%N2jBO\Oig&d+Dlhk'SlrZ=Ar$A:_\I>U6Q.\_+/aG'l61&pei5s
+ "Y,U9J#h``6Ata`+Ga-p7"Q!S!!G5+K7+D"@Li2X&peY1.?bIE*'tk0.jBuKdhIV@
+ U>a3(.$4(r_t"'Lb!YhI0bF[IEYsr`=Tj7(XG+FAU-T9Z(4-TlL7P5!jWb'@/Q#CX
+ WKT#&@uPhZ;6<3N=OO8nWCV\>SZr`ng?_?uGp/o6:-[D/5ic0sLi3#IVU[NMjW$l9
+ :?\H:BcKK1!.^!G%LnY)F?l]r_1^nk:-NY@0F8]iO@1B5P_i0/jWOhYl6[=V,/RBU
+ YnN.S$98ZcA4@lP_gWkR]F=U`iR-+SSjai;31-C%$:H?eCDLcNq1qlnq$N4^nhhQL
+ &3JqR[%*p-%>siR;8@keL(^pmQI6L0aLq$d1`c%J2Fo@]]blmm&k#O,)'92C/!@5`
+ M`9kV:XudY+S:bi8G*h5#Vb-FoVA79$7=Nl.0$"rFZIjd%l\'N#G_JB5KJus8;K\B
+ .$K%>'i9Ajf6"3X1\O2^W^f-bK@6Q0IKZ;f.fVa9B-srBGp214:PuY(94>IT`++?8
+ Vq>o16GBfA3h4<)9^[+H2OV]3'%0B'bFXDn/q`oJ<LR&%V5,H?!"#YijuE`'doF:A
+ H?;M^;+35Ch-1'R)cR/-GZlec5ZDb4DpOl\Q#Gg&OA_9QL`KEgP3PNSiY>gmUNa.X
+ (be[=Y??ZM@XIh%5L8m5A$#SV.##<j.qIYiM-[(\($R='FR*b)(#Gmu!]Ulb1G31L
+ b."/V_GQ5jE/5[8Z*4Lec8(;\#m*#4KcCq(E[bVU@7[U9qUgmu05&<-<%*WabnXV/
+ +72'5D)X&Xh+"V2)2XA.5l`SE$=lHW.qb(q`/)^E&TT.n+0fEi6Jo),/]W;o]oM`\
+ U4Ij6>fh:'!lF4uR=mm[0gs'"#3uh3[u=o*UTRUmV$6[48/MgP0=_C-0`ciHU.k/'
+ -&.A?>@E\NL+XV!/nYa4OJA!i!QNF?biFj/M9*hW,Zl5RB##RQnn&"uT`'RIorWn5
+ PAqb5D&Z]bLCKWB!$^p:NPW53lL2Oqbu+G)jAGob87bnRf-!%ei]!HjA^DQ/s!6CJ
+ +^>BjL*/iMoi,*O-o=4YWl/m?ki*nb#gpeUbUX+E_N.-A)G\9P!i$=^hj3td5ZcX_
+ !%$p1R-@.lbSMcNP!kBBp:=bE)RtU<ddsh4![cJl@p!,1<jTseS^2H9<7'V_LZg/h
+ Z3:jm:bn7;mZQ#F(C(hkZOsSP]f.4jTTCS@>X[reO>Qj:B3hH/DT2k_DR=0]PcP\)
+ -OCSGoH]%14BOt?p0$(=%"`2V"b*ifG$E=g16RY78)M';A,?$0jOYQ>#`?8J(2JnJ
+ c0CKPD]p=7XL</jl%faU5RnYB;\3hOlg?*!Jg:fL<)QZ>aRVktc:5[4mNX5ATa"Sc
+ 98*qnTuEYu8W_cO0imtB1WU?$dIfn[*_iTmdoKP#S32r-+p`H$5Adp?1k_@$dR!VZ
+ Tga6=plVUL;L%?=ksSA$Xjth^f0N!\[docIY-2Lq2eO6%5S/44pX2!je0(se#^SP8
+ c^H1-,>qsR&N4KqaU;)<le?auM4:;s/.g^CGLGZG$V5]`e?LJ>_L!!nbuM5t]"Tk^
+ =$hhcaF#E/`'O45mqp*o.2OW,3cIrR"l>'MV]l&<J,@"^U8^*%kj&5$?7jb-M6cgV
+ ,T[,*cN5BhcM0bF2BjNQi+9.>&)\YXjQt33+@WO.YGg3Z$NNKtI#E1K![(e[cA-=G
+ *UO+V%2eD?55IU1nuX8?@N\]'9`YdWUMlUok;"4bq$+&'9i,T*YOq7Dq!CNbore9<
+ "/]noW<LCQ.-glX%u;XZWo=C?j+Da%De:K'$t!J%$%`Ro8'M)Z.-Zf"+@E%3O=DAL
+ ;?.5o#S8ihd"_8`-NjJ^0BeL6XW/btS2&<(XJ1[2+uog[XRJOTC.u_=C%.bsM#7QU
+ ..FkknAIb7-6Qdsnu)?sOT[)ZYTn%Q.&sfD0K:20!jhC[+NQIBLc5aB4MNM!Ts2*R
+ CW%g)JE3B[0`W?l!XS_.iZc9PIGu18!fUYZ']]Z.+m)bo8,A*re;Vd?JIja56cLQP
+ #mDss%^**>;0J07&g4'`&;@26nSf_7egX#0UCe=cN$S_jBbfVM>7!:WYp@%uJh[du
+ )'Te)E/Z%3`[Hp<,0tNJiWfD0R0L_q!eru*_M](E!kB`K:+/M.OWG`bi%.`Cjs$oG
+ U)Y36?KI6V.-r`'Z-FOci?TTMKTWG?Wb<PF!cGk9jMk6u@Nu%2e0%V2&#'J5d/]\6
+ ZP!j,2l4[m%PAntlFkQA,8'W'&]50R?Pc7R'CL,WV(!XO^EqkLKa'jg-_d@K'M63T
+ F&H6kLKs2/W$=^Kf-K\pn[p&S^16U8/4/&iO6kPT65T"@j6[\kCn*a5+VBOQjFRXR
+ k(>*8E7UbJfqJrimK-.VIj%,](ZA^:W\=n@?5N'#1".7D;^<[J*ofTC131ff_1!'h
+ /hnWo]>XUp+[-:rVudVf[,KsjZTaZ&bUe9n,3;NRlm+$d-uB,E/A^0h_&ghjaW.%<
+ S?#RGLN".&7Ka=@"XS+K_-YB:JLI6P&ebP=aWB94fUAPSGE*Z\J,mQp_&O(b4(mo-
+ J71>k&AsR&4N*9s5[Y.E`bqL\*W\PUN8C"s^_.,V/[D22T\s3#5Rn73pFeftoFUX%
+ =$\K)]nqq=PT`@>clsoQ6<#O'Bph<L]VTF0@\Wf.%O"2=(t*Lp6\/VV"c,'SVaOK0
+ On7pF77%CqV*A@\A)L`)&@Nk#TOK5Q5bt/FoRPnt-6k)e82Q;soT;^%Pt?(c8[P$[
+ oV"l6V+Pj/9!k]moW_%G[7bVP9=2B*oYF3X`CtBq9XN&<o[#dPZjU9N9m"u][,Fao
+ hbDVR:6aj8[,Xp2ohRF?:3?A/'`Cic!Dmn,:pfsn<=Mas'2]JT:mDtsFWF=Z+&[5-
+ ;RIB?eK[ub2,c@m;AD>mPrDY70iV.?<#%JlU'4=,fhOD)<OGt0o\W[!@oa=G<g?`e
+ F`CHiF&qsV=1*<Tojq4TK3/k*=ETU*[?4O5O',JH=B1hmQ'kf5SQ]$e>'6rN[BWkW
+ Y?P#5=nT=-+obMa9iRBR>ZK$J[Ei*cd9UnF?+%d[ouCArdp<dP?<,ZbQ1&&0h-X/*
+ :6a<Op%)Lu"^j4p?ZlZ^edGh#&Rfht@C>o>p((T_,@VDj:pkf]<Pqh$m:00W:mO+B
+ 2F1i]/S$b,A(F4\p-iJ7:K=i'=-cKiG$SYp?Y-Z?Ai<e'2K<>PF(SHuB(g@[p3U<C
+ K4T4[B@_iMer+6#M.q-q:XoJB63V)R,A,JIC/kp^Q$[8qpM1PTC3I:*p:kBd_bZT1
+ C_k93<mPTJa(n`+D)U'aon.,sBl6tPDDpm"G40=WnS`UDDm`kNiVjrB~>
+ EI
+ 
+ Q
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 2 2
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 2)Tj 
+ 9.95919 0 0 9.95919 90.03318 711.00679 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ 0 -1.14459 TD
+ ( )Tj 
+ 0 -1.15658 TD
+ ( )Tj 
+ T*
+ ( )Tj 
+ /N223 1 Tf
+ 20.03829 0 0 20.03829 90.03318 602.41578 Tm
+ (P)Tj 
+ 15.95869 0 0 15.95869 103.35209 602.41578 Tm
+ 0.00088 Tc
+ (REF)Tj [-12.29998 ]TJ (A)Tj [23.79998 ]TJ (C)Tj [-6.29998 ]TJ (E)Tj 
+ 20.03829 0 0 20.03829 168.98658 602.41578 Tm
+ 0 Tc
+ ( )Tj 
+ /N170 1 Tf
+ 11.99899 0 0 11.99899 90.03318 583.93739 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ /N231 1 Tf
+ 0 -1.12998 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (This document ex)Tj [-10.5 ]TJ (plains )Tj [-10 ]TJ (how to constru)Tj [-10.5 ]TJ (c)Tj [3.29998 ]TJ (t a)Tj [-6.69999 ]TJ ( compi)Tj [-12.69999 ]TJ (l)Tj [-2.69999 ]TJ (er usin)Tj [-10.5 ]TJ (g)Tj [9.5 ]TJ ( lex)Tj [-10.5 ]TJ ( and)Tj [-10.5 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.5 ]TJ (a)Tj [3.29998 ]TJ (c)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ (. )Tj [-10 ]TJ (Lex)Tj [-10.5 ]TJ ( and )Tj [-20 ]TJ (y)Tj [19.5 ]TJ (a)Tj [3.29998 ]TJ (c)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ ( )Tj [-10 ]TJ (are)Tj [-6.69999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00129 Tc
+ 0.04129 Tw
+ (t)Tj [-3.5 ]TJ (ool)Tj [-3.5 ]TJ (s used t)Tj [-3.5 ]TJ (o)Tj [-1.29998 ]TJ ( )Tj [-10 ]TJ (g)Tj [8.69999 ]TJ (e)Tj [2.5 ]TJ (ne)Tj [-7.5 ]TJ (rat)Tj [-3.5 ]TJ (e)Tj [-7.5 ]TJ ( l)Tj [-3.5 ]TJ (e)Tj [-7.5 ]TJ (x)Tj [-11.29998 ]TJ (i)Tj [-3.5 ]TJ (cal)Tj [-3.5 ]TJ ( anal)Tj [-13.5 ]TJ (y)Tj [18.69999 ]TJ (z)Tj [-7.5 ]TJ (ers)Tj [-12.09999 ]TJ ( and p)Tj [-11.29998 ]TJ (a)Tj [2.5 ]TJ (rse)Tj [-7.5 ]TJ (r)Tj [1.69999 ]TJ (s. )Tj [-10 ]TJ (I)Tj [11.69999 ]TJ ( )Tj [-10 ]TJ (assum)Tj [-3.5 ]TJ (e)Tj [2.5 ]TJ ( )Tj [-20 ]TJ (y)Tj [18.69999 ]TJ (ou )Tj [-10 ]TJ (can p)Tj [-11.29998 ]TJ (r)Tj [1.69999 ]TJ (o)Tj [-11.29998 ]TJ (g)Tj [8.69999 ]TJ (r)Tj [-8.29998 ]TJ (a)Tj [2.5 ]TJ (m)Tj [-3.5 ]TJ ( i)Tj [-3.5 ]TJ (n)Tj [-1.29998 ]TJ ( C)Tj [-4.29998 ]TJ (,)Tj [-1.29998 ]TJ ( and)Tj [-11.29998 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.00059 Tw
+ (understand data stru)Tj [-10.59999 ]TJ (cture)Tj [-6.79998 ]TJ (s)Tj [-1.39999 ]TJ ( such as linked-lists and trees. )Tj 
+ T*
+ -0.00048 Tc
+ 0.11048 Tw
+ ( )Tj [-1140 ]TJ (The introduction describ)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ (s the basic building)Tj [9.5 ]TJ ( blocks of a compiler and e)Tj [-6.69999 ]TJ (x)Tj [-10.5 ]TJ (plains )Tj [10 ]TJ (the)Tj [13.29998 ]TJ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0.11099 Tw
+ (interaction between lex)Tj [-11 ]TJ ( and )Tj [-10 ]TJ (y)Tj [19 ]TJ (a)Tj [-7.19999 ]TJ (cc. The nex)Tj [-11 ]TJ (t)Tj [-3.19999 ]TJ ( two )Tj [10 ]TJ (sections describe lex)Tj [-11 ]TJ ( and )Tj [-10 ]TJ (y)Tj [19 ]TJ (a)Tj [2.79998 ]TJ (c)Tj [-7.19999 ]TJ (c)Tj [2.79998 ]TJ ( in more )Tj 
+ T*
+ -0.00028 Tc
+ 0.31028 Tw
+ (detail. W)Tj [-6.5 ]TJ (ith this backg)Tj [9.69999 ]TJ (r)Tj [2.69999 ]TJ (ound, we constru)Tj [-10.29998 ]TJ (c)Tj [3.5 ]TJ (t a )Tj [-10 ]TJ (sophisticated calculator.)Tj [-10.29998 ]TJ ( Conventional )Tj 
+ T*
+ -0.00149 Tc
+ 0.06149 Tw
+ (ari)Tj [-3.69999 ]TJ (t)Tj [-3.69999 ]TJ (h)Tj [-1.5 ]TJ (m)Tj [-3.69999 ]TJ (e)Tj [2.29998 ]TJ (t)Tj [-3.69999 ]TJ (i)Tj [-3.69999 ]TJ (c)Tj [2.29998 ]TJ ( operat)Tj [-3.69999 ]TJ (i)Tj [-3.69999 ]TJ (ons an)Tj [-11.5 ]TJ (d cont)Tj [-3.69999 ]TJ (rol)Tj [-3.69999 ]TJ ( st)Tj [-3.69999 ]TJ (at)Tj [-3.69999 ]TJ (em)Tj [-3.69999 ]TJ (ent)Tj [-3.69999 ]TJ (s)Tj [-2.29998 ]TJ (, such as )Tj 
+ /N171 1 Tf
+ 21.78999 0 TD
+ 0.00158 Tc
+ 0 Tw
+ (if-)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (l)Tj [-0.59999 ]TJ (se)Tj 
+ /N231 1 Tf
+ 2.43998 0 TD
+ -0.00099 Tc
+ 0.06098 Tw
+ ( and )Tj 
+ /N171 1 Tf
+ 2.05999 0 TD
+ 0.00189 Tc
+ 0 Tw
+ (while)Tj 
+ /N231 1 Tf
+ 2.16999 0 TD
+ 0.00138 Tc
+ 0.05859 Tw
+ (, a)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ (e)Tj [5.19999 ]TJ ( imple)Tj [5.19999 ]TJ (me)Tj [5.19999 ]TJ (nte)Tj [5.19999 ]TJ (d)Tj [1.39999 ]TJ (.)Tj [11.39999 ]TJ ( )Tj 
+ -28.45999 -1.14999 TD
+ -0.00129 Tc
+ 0.01129 Tw
+ (W)Tj [-7.5 ]TJ (ith m)Tj [6.5 ]TJ (i)Tj [-3.5 ]TJ (nor changes, we )Tj [-10 ]TJ (convert the cal)Tj [-13.5 ]TJ (culator into a compiler for a stack-)Tj [-8.29998 ]TJ (b)Tj [-1.29998 ]TJ (ased machine.)Tj [-11.29998 ]TJ ( )Tj 
+ T*
+ 0.00109 Tc
+ 0.10888 Tw
+ (The)Tj [4.89999 ]TJ ( r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (m)Tj [-11.09999 ]TJ (a)Tj [4.89999 ]TJ (ining)Tj [11.09999 ]TJ ( s)Tj [-9.69999 ]TJ (e)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (tions )Tj [-10 ]TJ (disc)Tj [4.89999 ]TJ (uss issue)Tj [4.89999 ]TJ (s)Tj [0.29998 ]TJ ( tha)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ ( c)Tj [4.89999 ]TJ (o)Tj [1.09999 ]TJ (m)Tj [-11.09999 ]TJ (m)Tj [-0.89999 ]TJ (onl)Tj [-11.09999 ]TJ (y)Tj [21.09999 ]TJ ( a)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (is)Tj [-9.69999 ]TJ (e)Tj [4.89999 ]TJ ( in c)Tj [4.89999 ]TJ (o)Tj [1.09999 ]TJ (mpile)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ ( )Tj [-10 ]TJ (wr)Tj [4.09999 ]TJ (iting)Tj [11.09999 ]TJ (.)Tj [1.09999 ]TJ ( Sour)Tj [4.09999 ]TJ (ce)Tj [4.89999 ]TJ ( )Tj 
+ 0 -1.13999 TD
+ -0.00059 Tc
+ 0.00059 Tw
+ (code for )Tj [-10 ]TJ (ex)Tj [-10.59999 ]TJ (amples ma)Tj [-6.79998 ]TJ (y)Tj [19.39999 ]TJ ( b)Tj [-10.59999 ]TJ (e)Tj [3.19999 ]TJ ( downloaded )Tj [-10 ]TJ (from the w)Tj [-8.39999 ]TJ (e)Tj [3.19999 ]TJ (b site listed below. )Tj 
+ 0 -1.14999 TD
+ -0.00019 Tc
+ 0.17019 Tw
+ ( )Tj [-1080 ]TJ (Permission to reproduce)Tj [-6.39999 ]TJ ( portions of this docum)Tj [-12.39999 ]TJ (ent is g)Tj [9.79998 ]TJ (i)Tj [-2.39999 ]TJ (ven)Tj [-10.19999 ]TJ ( provided th)Tj [-10.19999 ]TJ (e web site)Tj [-6.39999 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.01058 Tw
+ (listed below is r)Tj [-7.59999 ]TJ (e)Tj [3.19999 ]TJ (fe)Tj [-6.79998 ]TJ (renc)Tj [-6.79998 ]TJ (e)Tj [-6.79998 ]TJ (d, and no)Tj [-10.59999 ]TJ ( additional r)Tj [-7.59999 ]TJ (e)Tj [3.19999 ]TJ (str)Tj [-7.59999 ]TJ (i)Tj [-2.79998 ]TJ (ctions appl)Tj [-12.79998 ]TJ (y)Tj [19.39999 ]TJ (.)Tj [-10.59999 ]TJ ( Source)Tj [-6.79998 ]TJ ( cod)Tj [-10.59999 ]TJ (e)Tj [3.19999 ]TJ (, when)Tj [-10.59999 ]TJ ( part)Tj [-12.79998 ]TJ ( of )Tj 
+ T*
+ -0.00099 Tc
+ 0.00099 Tw
+ (a softwar)Tj [-8 ]TJ (e)Tj [2.79998 ]TJ ( proje)Tj [-7.19999 ]TJ (c)Tj [2.79998 ]TJ (t, ma)Tj [-17.19999 ]TJ (y)Tj [19 ]TJ ( b)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ ( used fr)Tj [-8 ]TJ (eel)Tj [-23.19999 ]TJ (y)Tj [19 ]TJ ( without ref)Tj [-8 ]TJ (e)Tj [-7.19999 ]TJ (rence to the )Tj [-10 ]TJ (author. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ T*
+ ( )Tj 
+ T*
+ (T)Tj 
+ 9.47918 0 0 9.47918 97.35258 349.71688 Tm
+ -0.00079 Tc
+ (HOMAS )Tj 
+ 11.99899 0 0 11.99899 133.94949 349.71688 Tm
+ 0 Tc
+ (N)Tj 
+ 9.47918 0 0 9.47918 142.70878 349.71688 Tm
+ -0.00239 Tc
+ (IEMA)Tj [-14.39999 ]TJ (NN)Tj 
+ 11.99899 0 0 11.99899 180.62559 349.71688 Tm
+ 0 Tc
+ ( )Tj 
+ -7.54998 -1.14999 TD
+ -0.00019 Tc
+ 0.00019 Tw
+ (Portland, Ore)Tj [-6.39999 ]TJ (g)Tj [9.79998 ]TJ (on )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ T*
+ 0.00219 Tc
+ 0.24778 Tw
+ (e)Tj [6 ]TJ (m)Tj [0 ]TJ (a)Tj [6 ]TJ (il:  )Tj 
+ 0 0 1 sc
+ 4.5 0 TD
+ -0.00149 Tc
+ 0 Tw
+ (t)Tj [-3.69999 ]TJ (hom)Tj [-3.69999 ]TJ (asn@epaperp)Tj [-11.5 ]TJ (r)Tj [1.5 ]TJ (ess.co)Tj [-11.5 ]TJ (m)Tj 
+ ET
+ 
+ 144.02899 307 131.98899 -0.59999 rf
+ BT
+ /N228 1 Tf
+ 14.03878 0 0 14.03878 276.01768 308.32029 Tm
+ 0 0 0 sc
+ 0 Tc
+ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 294.52149 Tm
+ 0.00068 Tc
+ -0.00068 Tw
+ (we)Tj [4.5 ]TJ (b site)Tj [4.5 ]TJ (:  )Tj 
+ 0 0 1 sc
+ 4.5 0 TD
+ -0.00169 Tc
+ 0 Tw
+ (epaperp)Tj [-11.69999 ]TJ (r)Tj [1.29998 ]TJ (ess.com)Tj 
+ ET
+ 144.02899 293.20199 80.15299 -0.59999 rf
+ BT
+ /N228 1 Tf
+ 14.03878 0 0 14.03878 224.18199 294.52149 Tm
+ 0 0 0 sc
+ 0 Tc
+ ( )Tj 
+ -9.55558 -1.13679 TD
+ ( )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 3 3
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 3)Tj 
+ /N223 1 Tf
+ 20.03829 0 0 20.03829 90.03318 701.40759 Tm
+ 0 Tc
+ (C)Tj 
+ 15.95869 0 0 15.95869 104.55198 701.40759 Tm
+ -0.00189 Tc
+ (ONTE)Tj [-4.09999 ]TJ (N)Tj [-9.09999 ]TJ (T)Tj [-0.09999 ]TJ (S)Tj 
+ 20.03829 0 0 20.03829 180.86558 701.40759 Tm
+ 0 Tc
+ ( )Tj 
+ 23.99798 0 0 23.99798 306.01519 674.64979 Tm
+ ( )Tj 
+ 11.03909 0 0 11.03909 90.03318 641.29258 Tm
+ -0.00399 Tc
+ 0.49789 Tw
+ (1. I)Tj 
+ 8.99919 0 0 8.99919 110.79139 641.29258 Tm
+ -0.00129 Tc
+ 0 Tw
+ (NTRODUCTION)Tj 
+ 11.03909 0 0 11.03909 177.26589 641.29258 Tm
+ 30.35258 Tc
+ ( 4)Tj 
+ ET
+ 
+ 90.03298 640.09298 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 641.29258 Tm
+ 0 Tc
+ ( )Tj 
+ -39.08699 -3.31518 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (2. L)Tj 
+ 8.99919 0 0 8.99919 114.39109 604.69558 Tm
+ -0.00028 Tc
+ 0 Tw
+ (EX)Tj 
+ 11.03909 0 0 11.03909 126.39009 604.69558 Tm
+ 0 Tc
+ ( )Tj 
+ 35.23908 0 TD
+ (6)Tj 
+ ET
+ 90.03298 603.49598 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 604.69558 Tm
+ ( )Tj 
+ /N231 1 Tf
+ -39.08699 -1.67388 TD
+ 0.00129 Tc
+ 1.45518 Tw
+ (2.1 T)Tj [-7.39999 ]TJ (h)Tj [1.29998 ]TJ (e)Tj [10.39999 ]TJ (o)Tj [1.29998 ]TJ (ry)Tj [12.19999 ]TJ ( )Tj 
+ 38.58699 0 TD
+ 0 Tc
+ 0 Tw
+ (6 )Tj 
+ -38.58699 -1.15219 TD
+ 0.00149 Tc
+ 1.45498 Tw
+ (2.2 Prac)Tj [10.59999 ]TJ (tic)Tj [10.59999 ]TJ (e)Tj [10.59999 ]TJ ( )Tj 
+ 38.58699 0 TD
+ 0 Tc
+ 0 Tw
+ (7 )Tj 
+ /N223 1 Tf
+ -38.58699 -2.78259 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (3. Y)Tj 
+ 8.99919 0 0 8.99919 114.99108 542.78079 Tm
+ -0.01548 Tc
+ 0 Tw
+ (AC)Tj [-26.69999 ]TJ (C)Tj 
+ 11.03909 0 0 11.03909 134.54949 542.78079 Tm
+ 0 Tc
+ ( )Tj 
+ 33.94569 0 TD
+ -0.00178 Tc
+ (12)Tj 
+ ET
+ 90.03298 541.58099 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 542.78079 Tm
+ 0 Tc
+ ( )Tj 
+ /N231 1 Tf
+ -39.08699 -1.68479 TD
+ 0.00088 Tc
+ 1.45559 Tw
+ (3.1 T)Tj [-7.79998 ]TJ (h)Tj [0.89999 ]TJ (e)Tj [10 ]TJ (o)Tj [0.89999 ]TJ (ry)Tj [11.79998 ]TJ ( )Tj [-30543.5 ]TJ (12 )Tj 
+ 0 -1.14129 TD
+ 0.00119 Tc
+ -0.00119 Tw
+ (3.2 )Tj [-1456.5 ]TJ (Prac)Tj [10.29998 ]TJ (tic)Tj [10.29998 ]TJ (e, Pa)Tj [10.29998 ]TJ (rt I)Tj [19 ]TJ ( )Tj [-28989.09999 ]TJ (14 )Tj 
+ T*
+ (3.3 )Tj [-1456.5 ]TJ (Prac)Tj [10.29998 ]TJ (tic)Tj [10.29998 ]TJ (e, Pa)Tj [10.29998 ]TJ (rt I)Tj [8.09999 ]TJ (I)Tj [8.19999 ]TJ ( )Tj [-28652.19999 ]TJ (17 )Tj 
+ /N223 1 Tf
+ 0 -2.79348 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (4. C)Tj 
+ 8.99919 0 0 8.99919 115.59098 468.14698 Tm
+ -0.01548 Tc
+ 0 Tw
+ (AL)Tj [-18 ]TJ (C)Tj [-26.69999 ]TJ (U)Tj [-13.29998 ]TJ (L)Tj [-31.29998 ]TJ (A)Tj [0 ]TJ (T)Tj [-18 ]TJ (O)Tj [-11 ]TJ (R)Tj 
+ 11.03909 0 0 11.03909 171.62638 468.14698 Tm
+ -0.00178 Tc
+ 30.31089 Tw
+ ( 20)Tj 
+ ET
+ 90.03298 466.94699 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 468.14698 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N231 1 Tf
+ -39.08699 -1.67388 TD
+ 0.00039 Tc
+ 1.45608 Tw
+ (4.1 Descr)Tj [7.29998 ]TJ (i)Tj [-4.39999 ]TJ (pt)Tj [6.5 ]TJ (ion)Tj [11.29998 ]TJ ( )Tj [-28771.79998 ]TJ (20 )Tj 
+ 0 -1.15219 TD
+ 0.00079 Tc
+ 1.45568 Tw
+ (4.2 I)Tj [18.59999 ]TJ (n)Tj [0.79998 ]TJ (clude )Tj [1456.5 ]TJ (Fil)Tj [6.89999 ]TJ (e)Tj [9.89999 ]TJ ( )Tj [-28641.29998 ]TJ (23 )Tj 
+ 0 -1.14129 TD
+ 0.00028 Tc
+ 1.45619 Tw
+ (4.3 Lex )Tj [1456.5 ]TJ (I)Tj [18.09999 ]TJ (nput )Tj [-29521.79998 ]TJ (24 )Tj 
+ 0 -1.15219 TD
+ 0.00079 Tc
+ 1.45568 Tw
+ (4.4 Y)Tj [5.59999 ]TJ (acc )Tj [1456.5 ]TJ (I)Tj [18.59999 ]TJ (nput )Tj [-29021.79998 ]TJ (25 )Tj 
+ 0 -1.14129 TD
+ 0.00129 Tc
+ 1.45518 Tw
+ (4.5 I)Tj [19.09999 ]TJ (n)Tj [1.29998 ]TJ (terpret)Tj [7.39999 ]TJ (e)Tj [-0.5 ]TJ (r)Tj [8.19999 ]TJ ( )Tj [-29217.39999 ]TJ (29 )Tj 
+ T*
+ 0.00059 Tc
+ 1.45588 Tw
+ (4.6 Com)Tj [17.59999 ]TJ (p)Tj [0.59999 ]TJ (iler)Tj [7.5 ]TJ ( )Tj [-29663.09999 ]TJ (30 )Tj 
+ /N223 1 Tf
+ 0 -2.79348 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (5. M)Tj 
+ 8.99919 0 0 8.99919 116.91088 355.59638 Tm
+ -0.00178 Tc
+ 0 Tw
+ (ORE )Tj 
+ 11.03909 0 0 11.03909 138.86909 355.59638 Tm
+ 0 Tc
+ (L)Tj 
+ 8.99919 0 0 8.99919 145.58848 355.59638 Tm
+ -0.00028 Tc
+ (EX)Tj 
+ 11.03909 0 0 11.03909 157.58758 355.59638 Tm
+ -0.00178 Tc
+ 31.58268 Tw
+ ( 32)Tj 
+ ET
+ 90.03298 354.39599 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 355.59638 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N231 1 Tf
+ -39.08699 -1.67388 TD
+ 0.00068 Tc
+ 1.45579 Tw
+ (5.1 Str)Tj [7.59999 ]TJ (i)Tj [-4.09999 ]TJ (ng)Tj [11.59999 ]TJ (s )Tj 
+ 38.08699 0 TD
+ 0 Tc
+ 0 Tw
+ (32 )Tj 
+ -38.08699 -1.15219 TD
+ 0.00109 Tc
+ 1.45539 Tw
+ (5.2 Reserv)Tj [12 ]TJ (ed )Tj [1456.5 ]TJ (W)Tj [10.19999 ]TJ (o)Tj [1.09999 ]TJ (rd)Tj [12 ]TJ (s)Tj [9.89999 ]TJ ( )Tj [-26815.19999 ]TJ (33 )Tj 
+ 0 -1.14129 TD
+ -0.00019 Tc
+ 1.45669 Tw
+ (5.3 Debug)Tj [10.69999 ]TJ (g)Tj [10.69999 ]TJ (i)Tj [-5 ]TJ (ng)Tj [10.69999 ]TJ ( )Tj [1456.5 ]TJ (Lex)Tj [-11 ]TJ ( )Tj [-27195.69999 ]TJ (33 )Tj 
+ /N223 1 Tf
+ 0 -2.78259 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (6. M)Tj 
+ 8.99919 0 0 8.99919 116.91088 281.08259 Tm
+ -0.00178 Tc
+ 0 Tw
+ (ORE )Tj 
+ 11.03909 0 0 11.03909 138.86909 281.08259 Tm
+ 0 Tc
+ (Y)Tj 
+ 8.99919 0 0 8.99919 146.18849 281.08259 Tm
+ -0.01548 Tc
+ (AC)Tj [-13.29998 ]TJ (C)Tj 
+ 11.03909 0 0 11.03909 165.62689 281.08259 Tm
+ -0.00178 Tc
+ 30.85438 Tw
+ ( 35)Tj 
+ ET
+ 90.03298 279.88299 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 281.08259 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N231 1 Tf
+ -39.08699 -1.68479 TD
+ 0.00079 Tc
+ 1.45568 Tw
+ (6.1 Recurs)Tj [9.5 ]TJ (ion)Tj [11.69999 ]TJ ( )Tj [-29380.5 ]TJ (35 )Tj 
+ 0 -1.14129 TD
+ 0.00088 Tc
+ 1.45559 Tw
+ (6.2 I)Tj [18.69999 ]TJ (f)Tj [-13.89999 ]TJ (-)Tj [7.79998 ]TJ (E)Tj [3 ]TJ (lse )Tj [1456.5 ]TJ (Am)Tj [17.89999 ]TJ (big)Tj [11.79998 ]TJ (u)Tj [0.89999 ]TJ (ity )Tj [-26141.29998 ]TJ (35 )Tj 
+ 0 -1.15219 TD
+ 0.00158 Tc
+ 1.45489 Tw
+ (6.3 Erro)Tj [12.5 ]TJ (r )Tj [1456.5 ]TJ (Me)Tj [10.69999 ]TJ (ssag)Tj [12.5 ]TJ (e)Tj [-0.19999 ]TJ (s)Tj [10.39999 ]TJ ( )Tj [-27195.69999 ]TJ (36 )Tj 
+ 0 -1.14129 TD
+ 0.00119 Tc
+ 1.45529 Tw
+ (6.4 I)Tj [19 ]TJ (nherited )Tj [1456.5 ]TJ (A)Tj [16.79998 ]TJ (t)Tj [-3.59999 ]TJ (t)Tj [7.29998 ]TJ (r)Tj [-2.69999 ]TJ (ibu)Tj [12.09999 ]TJ (t)Tj [-3.59999 ]TJ (e)Tj [10.29998 ]TJ (s)Tj [10 ]TJ ( )Tj [-25597.89999 ]TJ (37 )Tj 
+ T*
+ 0.00048 Tc
+ 1.45599 Tw
+ (6.5 Em)Tj [17.5 ]TJ (bedded )Tj [1456.5 ]TJ (Actio)Tj [11.39999 ]TJ (ns)Tj [9.29998 ]TJ ( )Tj [-25815.19999 ]TJ (37 )Tj 
+ 0 -1.15219 TD
+ (6.6 D)Tj [5.29998 ]TJ (e)Tj [-1.29998 ]TJ (bug)Tj [11.39999 ]TJ (g)Tj [11.39999 ]TJ (i)Tj [-4.29998 ]TJ (ng)Tj [11.39999 ]TJ ( )Tj [1445.59999 ]TJ (Y)Tj [5.29998 ]TJ (acc )Tj [-26695.69999 ]TJ (38 )Tj 
+ /N223 1 Tf
+ 0 -2.78259 TD
+ -0.00399 Tc
+ 0.49789 Tw
+ (7. B)Tj 
+ 8.99919 0 0 8.99919 115.59098 168.53199 Tm
+ -0.00358 Tc
+ 0 Tw
+ (I)Tj [-5.79998 ]TJ (B)Tj [-1.39999 ]TJ (L)Tj [-6.09999 ]TJ (I)Tj [-5.79998 ]TJ (OGR)Tj [-14.79998 ]TJ (A)Tj [11.89999 ]TJ (P)Tj [-3.29998 ]TJ (HY)Tj 
+ 11.03909 0 0 11.03909 178.10578 168.53199 Tm
+ -0.00178 Tc
+ 29.72399 Tw
+ ( 39)Tj 
+ ET
+ 90.03298 167.33198 431.48399 -1.19999 rf
+ BT
+ 11.03909 0 0 11.03909 521.51719 168.53199 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 9.95919 0 0 9.95919 90.03318 150.77349 Tm
+ ( )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 4 4
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 4)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ 0.00158 Tc
+ 0.48719 Tw
+ (1)Tj [4.39999 ]TJ (.)Tj [-0.59999 ]TJ ( Introduc)Tj [4.39999 ]TJ (ti)Tj [6.09999 ]TJ (on )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 681.00929 Tm
+ -0.00009 Tc
+ 0.13009 Tw
+ (Until 1975, writing a)Tj [-6.29998 ]TJ ( co)Tj [-10.09999 ]TJ (mpiler was)Tj [-10.89999 ]TJ ( a v)Tj [-10.09999 ]TJ (e)Tj [3.69999 ]TJ (r)Tj [-17.09999 ]TJ (y)Tj [19.89999 ]TJ ( time-)Tj [-7.09999 ]TJ (c)Tj [3.69999 ]TJ (onsuming)Tj [9.89999 ]TJ ( p)Tj [-10.09999 ]TJ (r)Tj [2.89999 ]TJ (ocess.)Tj [-10.09999 ]TJ ( The)Tj [-6.29998 ]TJ (n)Tj [-0.09999 ]TJ ( )Tj 
+ 0 0 1 sc
+ 31.00999 0 TD
+ 0.00009 Tc
+ 0.12989 Tw
+ (L)Tj [10.89999 ]TJ (e)Tj [3.89999 ]TJ (sk [)Tj [-6.89999 ]TJ (1975])Tj 
+ ET
+ 462.12199 679.68899 59.875 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 521.99708 681.00929 Tm
+ 0 0 0 sc
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ -36 -1.14999 TD
+ -0.00099 Tc
+ (and )Tj 
+ 0 0 1 sc
+ 1.84999 0 TD
+ 0.00009 Tc
+ 0.15989 Tw
+ (J)Tj [-10.69999 ]TJ (ohnson)Tj [10.09999 ]TJ ( [)Tj [-6.89999 ]TJ (1975)Tj [10.09999 ]TJ (])Tj 
+ ET
+ 112.23098 665.89099 76.31399 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 188.54499 667.21038 Tm
+ 0 0 0 sc
+ 0.00109 Tc
+ 0.15888 Tw
+ ( pub)Tj [11.09999 ]TJ (lishe)Tj [4.89999 ]TJ (d pa)Tj [4.89999 ]TJ (pe)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (s)Tj [0.29998 ]TJ ( on le)Tj [4.89999 ]TJ (x a)Tj [4.89999 ]TJ (nd )Tj [-10 ]TJ (y)Tj [21.09999 ]TJ (a)Tj [4.89999 ]TJ (cc)Tj [4.89999 ]TJ (. The)Tj [4.89999 ]TJ (s)Tj [0.29998 ]TJ (e)Tj [4.89999 ]TJ ( utilitie)Tj [4.89999 ]TJ (s g)Tj [11.09999 ]TJ (r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ (l)Tj [-21.09999 ]TJ (y)Tj [31.09999 ]TJ ( simplif)Tj [-15.89999 ]TJ (y)Tj [21.09999 ]TJ ( )Tj 
+ -8.20999 -1.14999 TD
+ -0.00039 Tc
+ 0.08039 Tw
+ (compiler writing)Tj [9.59999 ]TJ (.)Tj [-0.39999 ]TJ ( )Tj [-20 ]TJ (I)Tj [22.59999 ]TJ (m)Tj [-2.59999 ]TJ (pl)Tj [-12.59999 ]TJ (e)Tj [-6.59999 ]TJ (m)Tj [-2.59999 ]TJ (entation details for lex)Tj [-10.39999 ]TJ ( and )Tj [-10 ]TJ (y)Tj [19.59999 ]TJ (a)Tj [-6.59999 ]TJ (c)Tj [-6.59999 ]TJ (c)Tj [3.39999 ]TJ ( ma)Tj [-16.59999 ]TJ (y)Tj [19.59999 ]TJ ( be found)Tj [-10.39999 ]TJ ( in )Tj 
+ 0 0 1 sc
+ 31.03999 0 TD
+ -0.00019 Tc
+ 0.08018 Tw
+ (Aho [)Tj [-7.19999 ]TJ (1986])Tj 
+ ET
+ 462.48199 652.09199 56.63499 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 519.11738 653.41159 Tm
+ 0 0 0 sc
+ -0.00999 Tc
+ 0 Tw
+ (. )Tj 
+ -35.75999 -1.14999 TD
+ -0.00228 Tc
+ 0.00228 Tw
+ (L)Tj [8.5 ]TJ (e)Tj [1.5 ]TJ (x)Tj [-12.29998 ]TJ ( and )Tj [-20 ]TJ (y)Tj [17.69999 ]TJ (a)Tj [-8.5 ]TJ (cc a)Tj [-8.5 ]TJ (r)Tj [0.69999 ]TJ (e )Tj [-10 ]TJ (avai)Tj [-4.5 ]TJ (l)Tj [-4.5 ]TJ (a)Tj [1.5 ]TJ (bl)Tj [-14.5 ]TJ (e from)Tj [-4.39999 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N172 1 Tf
+ 1.5 -1.22999 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00178 Tc
+ 0.00178 Tw
+ (Mort)Tj [-4 ]TJ (i)Tj [-4 ]TJ (ce Kern S)Tj [-25.69999 ]TJ (y)Tj [18.19999 ]TJ (st)Tj [-4 ]TJ (em)Tj [-4 ]TJ (s \()Tj [-8.79998 ]TJ (M)Tj [-2.59999 ]TJ (KS)Tj [-5.69999 ]TJ (\), at)Tj [-4 ]TJ ( )Tj 
+ 0 0 1 sc
+ 13.54998 0 TD
+ 0.00019 Tc
+ 0 Tw
+ (http://www.mks.com)Tj 
+ ET
+ 288.61698 609.73498 101.39199 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 390.00819 611.05509 Tm
+ 0 0 0 sc
+ 0 Tc
+ (, )Tj 
+ /N172 1 Tf
+ -23.5 -1.21998 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00088 Tc
+ 0.00088 Tw
+ (GNU flex)Tj [-10.89999 ]TJ ( and bison, at )Tj 
+ 0 0 1 sc
+ 9.54998 0 TD
+ 0.00028 Tc
+ 0 Tw
+ (http://www.g)Tj [10.29998 ]TJ (nu.or)Tj [-6.69999 ]TJ (g)Tj 
+ ET
+ 240.62098 595.09599 94.55198 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 335.17269 596.41629 Tm
+ 0 0 0 sc
+ 0 Tc
+ (, )Tj 
+ /N172 1 Tf
+ -18.92999 -1.21998 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ 0.00019 Tc
+ -0.00019 Tw
+ (Ming)Tj [10.19999 ]TJ (, at )Tj 
+ 0 0 1 sc
+ 3.62998 0 TD
+ 0 Tw
+ (http://ag)Tj [10.19999 ]TJ (n)Tj [-9.79998 ]TJ (es.dida.ph)Tj [-9.79998 ]TJ (y)Tj [20.19999 ]TJ (s)Tj [-0.59999 ]TJ (ik.uni-)Tj [-6.79998 ]TJ (e)Tj [4 ]TJ (ssen.de/~ja)Tj [-6 ]TJ (njaap/ming)Tj [10.19999 ]TJ (w)Tj [2.39999 ]TJ (32)Tj 
+ ET
+ 169.58699 580.45799 270.33699 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 439.92399 581.77749 Tm
+ 0 0 0 sc
+ 0 Tc
+ (, )Tj 
+ /N172 1 Tf
+ -27.65998 -1.21998 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00009 Tc
+ 0.00009 Tw
+ (C)Tj [-13.09999 ]TJ (y)Tj [19.89999 ]TJ (gnus, at )Tj 
+ 0 0 1 sc
+ 4.51998 0 TD
+ 0 Tc
+ 0 Tw
+ (http://www.c)Tj [-6.19999 ]TJ (y)Tj [10 ]TJ (gnus.com/misc/)Tj [-12.19999 ]TJ (g)Tj [10 ]TJ (n)Tj [0 ]TJ (u-win)Tj [-10 ]TJ (3)Tj [0 ]TJ (2)Tj 
+ ET
+ 180.26599 565.81898 196.78399 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 377.04928 567.13868 Tm
+ 0 0 0 sc
+ -0.00059 Tc
+ 0.00059 Tw
+ (, and )Tj 
+ /N172 1 Tf
+ -22.41999 -1.22999 TD
+ 0 Tc
+ 0 Tw
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (me, at )Tj 
+ 0 0 1 sc
+ 2.68998 0 TD
+ 0.00099 Tc
+ 0 Tw
+ (http://e)Tj [4.79998 ]TJ (pa)Tj [4.79998 ]TJ (pe)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (p)Tj [1 ]TJ (r)Tj [4 ]TJ (e)Tj [4.79998 ]TJ (ss.)Tj [-9 ]TJ (c)Tj [4.79998 ]TJ (o)Tj [1 ]TJ (m)Tj 
+ ET
+ 158.30699 551.05999 108.95098 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 267.25839 552.37998 Tm
+ 0 0 0 sc
+ 0 Tc
+ (. )Tj 
+ -14.76998 -1.13999 TD
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.27049 Tw
+ (The ve)Tj [-6.69999 ]TJ (rsion from M)Tj [-11.29998 ]TJ (K)Tj [1.69999 ]TJ (S is a hi)Tj [-12.69999 ]TJ (g)Tj [9.5 ]TJ (h)Tj [-0.39999 ]TJ (-qu)Tj [-10.5 ]TJ (a)Tj [3.29998 ]TJ (lit)Tj [-12.69999 ]TJ (y)Tj [19.5 ]TJ ( )Tj [-10 ]TJ (com)Tj [-12.69999 ]TJ (m)Tj [-2.69999 ]TJ (ercial p)Tj [-10.5 ]TJ (r)Tj [2.5 ]TJ (oduct that )Tj [-10 ]TJ (ret)Tj [-12.69999 ]TJ (a)Tj [3.29998 ]TJ (ils for )Tj [-10 ]TJ (about )Tj 
+ T*
+ -0.00088 Tc
+ 0.06089 Tw
+ ($300US. GNU softw)Tj [-8.69999 ]TJ (a)Tj [2.89999 ]TJ (re)Tj [-7.09999 ]TJ ( )Tj [-10 ]TJ (is free.)Tj [-10.89999 ]TJ ( Output from fl)Tj [-13.09999 ]TJ (ex)Tj [-10.89999 ]TJ ( ma)Tj [-7.09999 ]TJ (y)Tj [19.09999 ]TJ ( )Tj [-10 ]TJ (be us)Tj [-11.69999 ]TJ (ed in a )Tj [-10 ]TJ (commercial p)Tj [-10.89999 ]TJ (r)Tj [2.09999 ]TJ (oduct, )Tj 
+ T*
+ -0.00048 Tc
+ 0.01049 Tw
+ (and, as of v)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ (rsion 1.24, t)Tj [-12.69999 ]TJ (h)Tj [-0.5 ]TJ (e same is true )Tj [-10 ]TJ (for bison.)Tj [-10.5 ]TJ ( Ming)Tj [9.5 ]TJ ( and C)Tj [-23.5 ]TJ (y)Tj [19.5 ]TJ (gnus a)Tj [-6.69999 ]TJ (r)Tj [2.5 ]TJ (e 32)Tj [-10.39999 ]TJ (-bit W)Tj [-6.69999 ]TJ (i)Tj [-2.69999 ]TJ (ndows-)Tj 
+ T*
+ -0.00039 Tc
+ 0.06039 Tw
+ (95/NT ports of the GNU software. M)Tj [-21.19999 ]TJ (y)Tj [19.59999 ]TJ ( version is based on Ming)Tj [9.59999 ]TJ (\222s, but is compiled with )Tj 
+ T*
+ 0.00028 Tw
+ (Visual C++)Tj [-6.29998 ]TJ ( and in)Tj [-10.29998 ]TJ (cludes )Tj [-10 ]TJ (a minor bu)Tj [-10.29998 ]TJ (g fix)Tj [-10.29998 ]TJ ( in the fil)Tj [-12.5 ]TJ (e)Tj [3.5 ]TJ ( handlin)Tj [-10.29998 ]TJ (g)Tj [9.69999 ]TJ ( )Tj [-10 ]TJ (routine. )Tj [-10 ]TJ (I)Tj [12.69999 ]TJ (f)Tj [-7.29998 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.69999 ]TJ (o)Tj [-0.29998 ]TJ (u)Tj [-10.29998 ]TJ ( download m)Tj [-22.5 ]TJ (y)Tj [9.69999 ]TJ ( )Tj 
+ T*
+ -0.00068 Tc
+ 0.00068 Tw
+ (version, be sure to )Tj [-10 ]TJ (retain )Tj [-10 ]TJ (director)Tj [-17.69999 ]TJ (y)Tj [19.29998 ]TJ ( structur)Tj [-7.69999 ]TJ (e when )Tj [-10 ]TJ (y)Tj [19.29998 ]TJ (o)Tj [-10.69999 ]TJ (u unz)Tj [-6.89999 ]TJ (ip. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ ET
+ 1 1 1 sc
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 1 J
+ 1 j
+ 0.23899 w
+ 10 M
+ []0 d
+ 270.97799 392.31298 107.99099 17.99899 re
+ B* 
+ BT
+ /N228 1 Tf
+ 8.99179 0 0 8.99179 292.21629 398.67279 Tm
+ 0 0 0 sc
+ 0.00408 Tc
+ -0.00169 Tw
+ (Lex)Tj [23.69999 ]TJ (ical Analy)Tj [10.39999 ]TJ (z)Tj [10.39999 ]TJ (e)Tj [-0.19999 ]TJ (r)Tj 
+ ET
+ 1 1 1 sc
+ 270.97799 320.43899 107.99099 17.99798 re
+ B* 
+ BT
+ 8.99179 0 0 8.99179 292.57629 326.67878 Tm
+ 0 0 0 sc
+ 0.00289 Tc
+ -0.00048 Tw
+ (Sy)Tj [9.19999 ]TJ (ntax)Tj [22.5 ]TJ ( Analy)Tj [9.19999 ]TJ (z)Tj [9.19999 ]TJ (e)Tj [-1.39999 ]TJ (r)Tj 
+ /N173 1 Tf
+ -0.29359 11.00909 TD
+ 0.60099 Tc
+ 0 Tw
+ (a=b+c*d)Tj 
+ -2.40199 -7.01908 TD
+ 0.00048 Tc
+ (id1)Tj [-600.5 ]TJ (=)Tj [-600.5 ]TJ (id2)Tj [-600.5 ]TJ (+)Tj [-600.5 ]TJ (id3)Tj [-600.5 ]TJ (*)Tj [-600.5 ]TJ (id4)Tj 
+ 11.98919 0 0 11.98919 321.37388 287.56208 Tm
+ 0 Tc
+ (=)Tj 
+ 3.00248 -1.50119 TD
+ (+)Tj 
+ ET
+ 333.97299 286.72198 m
+ 351.97099 277.72299 l
+ 369.96998 268.72399 m
+ 387.96798 259.72399 l
+ 315.97399 286.72198 m
+ 297.97599 277.72299 l
+ 405.96699 250.72499 m
+ 423.96499 241.72599 l
+ S 
+ BT
+ 11.98919 0 0 11.98919 393.24789 251.56498 Tm
+ (*)Tj 
+ ET
+ 351.97099 268.72399 m
+ 333.97299 259.72399 l
+ 387.96798 250.72499 m
+ 369.96998 241.72599 l
+ S 
+ BT
+ 8.99179 0 0 8.99179 277.57749 268.24369 Tm
+ 0.00048 Tc
+ (id1)Tj 
+ ET
+ 324.97399 423.87098 m
+ 324.97399 413.43199 l
+ S 
+ 324.97399 410.31199 m
+ 327.01298 414.39099 l
+ 326.89299 414.27099 l
+ 326.65299 414.15199 l
+ 326.41299 414.15199 l
+ 326.17298 414.03199 l
+ 325.93399 414.03199 l
+ 325.69398 413.91198 l
+ 324.37399 413.91198 l
+ 324.13398 414.03199 l
+ 323.89399 414.03199 l
+ 323.65399 414.15199 l
+ 323.41398 414.15199 l
+ 323.17399 414.27099 l
+ 322.93399 414.39099 l
+ 324.97399 410.31199 l
+ f* 
+ 324.97399 392.31298 m
+ 324.97399 377.43499 l
+ S 
+ 324.97399 374.31498 m
+ 327.01298 378.39399 l
+ 326.89299 378.27499 l
+ 326.65299 378.15499 l
+ 326.41299 378.15499 l
+ 326.17298 378.03498 l
+ 325.93399 378.03498 l
+ 325.69398 377.91499 l
+ 324.37399 377.91499 l
+ 324.13398 378.03498 l
+ 323.89399 378.03498 l
+ 323.65399 378.15499 l
+ 323.41398 378.15499 l
+ 323.17399 378.27499 l
+ 322.93399 378.39399 l
+ 324.97399 374.31498 l
+ f* 
+ 324.97399 356.43598 m
+ 324.97399 341.55799 l
+ S 
+ 324.97399 338.43798 m
+ 327.01298 342.51699 l
+ 326.89299 342.39698 l
+ 326.65299 342.27699 l
+ 326.41299 342.27699 l
+ 326.17298 342.15798 l
+ 325.93399 342.15798 l
+ 325.69398 342.03799 l
+ 324.37399 342.03799 l
+ 324.13398 342.15798 l
+ 323.89399 342.15798 l
+ 323.65399 342.27699 l
+ 323.41398 342.27699 l
+ 323.17399 342.39698 l
+ 322.93399 342.51699 l
+ 324.97399 338.43798 l
+ f* 
+ 324.97399 320.43899 m
+ 324.97399 305.56098 l
+ S 
+ 324.97399 302.44099 m
+ 327.01298 306.51998 l
+ 326.89299 306.39999 l
+ 326.65299 306.28099 l
+ 326.41299 306.28099 l
+ 326.17298 306.16099 l
+ 325.93399 306.16099 l
+ 325.69398 306.04098 l
+ 324.37399 306.04098 l
+ 324.13398 306.16099 l
+ 323.89399 306.16099 l
+ 323.65399 306.28099 l
+ 323.41398 306.28099 l
+ 323.17399 306.39999 l
+ 322.93399 306.51998 l
+ 324.97399 302.44099 l
+ f* 
+ BT
+ /N171 1 Tf
+ 9.95129 0 0 9.95129 201.02389 425.31059 Tm
+ 0.00439 Tc
+ -0.00119 Tw
+ (s)Tj [7.69999 ]TJ (our)Tj [7.69999 ]TJ (ce cod)Tj [10 ]TJ (e)Tj 
+ 2.26689 -6.33029 TD
+ 0.00088 Tc
+ 0 Tw
+ (to)Tj [-5.5 ]TJ (ke)Tj [10.69999 ]TJ (n)Tj [-5.5 ]TJ (s)Tj 
+ -1.80868 -7.45169 TD
+ 0.00419 Tc
+ -0.00099 Tw
+ (s)Tj [7.5 ]TJ (y)Tj [1.89999 ]TJ (nt)Tj [4.69999 ]TJ (ax t)Tj [4.69999 ]TJ (r)Tj [19.59999 ]TJ (ee)Tj 
+ /N173 1 Tf
+ 8.99179 0 0 8.99179 313.57449 250.24519 Tm
+ 0.00048 Tc
+ 0 Tw
+ (id2)Tj 
+ 4.00329 -2.00169 TD
+ (id3)Tj [-6939.09999 ]TJ (id4)Tj 
+ ET
+ 324.97399 241.72599 m
+ 324.97399 226.72698 l
+ S 
+ 324.97399 223.72698 m
+ 327.01298 227.80699 l
+ 326.89299 227.68699 l
+ 326.65299 227.56698 l
+ 326.41299 227.44699 l
+ 326.17298 227.44699 l
+ 325.93399 227.32699 l
+ 324.13398 227.32699 l
+ 323.89399 227.44699 l
+ 323.65399 227.44699 l
+ 323.41398 227.56698 l
+ 322.93399 227.80699 l
+ 324.97399 223.72698 l
+ f* 
+ BT
+ 8.99179 0 0 8.99179 295.21609 174.29148 Tm
+ (load)Tj [-1601.29998 ]TJ (id3)Tj 
+ 0 -1.20098 TD
+ (mul)Tj [-2201.79998 ]TJ (id4)Tj 
+ T*
+ (add)Tj [-2201.79998 ]TJ (id2)Tj 
+ T*
+ (store)Tj [-1000.79998 ]TJ (id1)Tj 
+ ET
+ 1 1 1 sc
+ 270.97799 205.72898 107.99099 17.99899 re
+ B* 
+ BT
+ /N228 1 Tf
+ 8.99179 0 0 8.99179 292.57629 211.96839 Tm
+ 0 0 0 sc
+ 0.00379 Tc
+ -0.00138 Tw
+ (C)Tj [5.39999 ]TJ (ode G)Tj [7.69999 ]TJ (enerator)Tj 
+ ET
+ 324.97399 205.72898 m
+ 324.97399 190.84999 l
+ S 
+ 324.97399 187.72999 m
+ 327.01298 191.80999 l
+ 326.89299 191.80999 l
+ 326.65299 191.68998 l
+ 326.41299 191.56999 l
+ 326.17298 191.56999 l
+ 325.93399 191.44999 l
+ 325.45399 191.44999 l
+ 325.09399 191.32998 l
+ 324.85398 191.32998 l
+ 324.61399 191.44999 l
+ 324.13398 191.44999 l
+ 323.89399 191.56999 l
+ 323.65399 191.56999 l
+ 323.41398 191.68998 l
+ 323.17399 191.80999 l
+ 322.93399 191.80999 l
+ 324.97399 187.72999 l
+ f* 
+ BT
+ /N171 1 Tf
+ 9.95129 0 0 9.95129 187.58509 175.73139 Tm
+ 0.00479 Tc
+ -0.00158 Tw
+ (gener)Tj [8.09999 ]TJ (a)Tj [-1.59999 ]TJ (t)Tj [5.29998 ]TJ (e)Tj [2.5 ]TJ (d co)Tj [10.39999 ]TJ (de)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 450.72309 136.13459 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N170 1 Tf
+ -19.09999 -1.38999 TD
+ -0.00149 Tc
+ 0.00149 Tw
+ (F)Tj [9.29998 ]TJ (i)Tj [-3.69999 ]TJ (gure 1)Tj [-11.5 ]TJ (-)Tj [1.5 ]TJ (1: )Tj 
+ /N231 1 Tf
+ 4.98999 0 TD
+ -0.00019 Tc
+ 0.00019 Tw
+ (Compilation Sequence )Tj 
+ -15.94999 -1.64999 TD
+ 1.25 Tc
+ 0 Tw
+ (  )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 5 5
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 5)Tj 
+ 0 55.84999 TD
+ -0.00109 Tc
+ 0.12109 Tw
+ ( )Tj [-1130 ]TJ (L)Tj [9.69999 ]TJ (e)Tj [2.69999 ]TJ (x)Tj [-11.09999 ]TJ ( g)Tj [8.89999 ]TJ (e)Tj [2.69999 ]TJ (n)Tj [-11.09999 ]TJ (e)Tj [2.69999 ]TJ (r)Tj [-8.09999 ]TJ (a)Tj [2.69999 ]TJ (tes C code for a lex)Tj [-11.09999 ]TJ (i)Tj [-3.29998 ]TJ (cal anal)Tj [-13.29998 ]TJ (y)Tj [28.89999 ]TJ (z)Tj [-7.29998 ]TJ (e)Tj [-7.29998 ]TJ (r)Tj [1.89999 ]TJ (, or scanner. )Tj [-10 ]TJ (I)Tj [11.89999 ]TJ (t)Tj [-3.29998 ]TJ ( uses patterns t)Tj [-13.29998 ]TJ (h)Tj [-1.09999 ]TJ (at match )Tj 
+ 0 -1.14999 TD
+ 0.00009 Tc
+ 0.47988 Tw
+ (string)Tj [10.09999 ]TJ (s in th)Tj [-9.89999 ]TJ (e input a)Tj [-6.09999 ]TJ (nd conve)Tj [-6.09999 ]TJ (rts the strin)Tj [-9.89999 ]TJ (g)Tj [0.09999 ]TJ (s to )Tj 
+ /N171 1 Tf
+ 22.81999 0 TD
+ -0.00248 Tc
+ 0 Tw
+ (t)Tj [-4.69999 ]TJ (o)Tj [-2.5 ]TJ (kens)Tj 
+ /N231 1 Tf
+ 2.54998 0 TD
+ -0.00109 Tc
+ 0.48109 Tw
+ (.)Tj [-11.09999 ]TJ ( Tokens )Tj [-10 ]TJ (are)Tj [-7.29998 ]TJ ( numeric)Tj [-7.29998 ]TJ (al)Tj [-13.29998 ]TJ ( )Tj 
+ -25.36999 -1.14999 TD
+ -0.00019 Tc
+ 0.00019 Tw
+ (repres)Tj [-11 ]TJ (entations of string)Tj [9.79998 ]TJ (s)Tj [-11 ]TJ (,)Tj [-0.19999 ]TJ ( and simplif)Tj [-7.19999 ]TJ (y)Tj [19.79998 ]TJ ( proc)Tj [-6.39999 ]TJ (essing. This is illustrated in F)Tj [5.89999 ]TJ (i)Tj [-2.39999 ]TJ (gure 1-1. )Tj 
+ T*
+ -0.00009 Tc
+ 0.17008 Tw
+ ( )Tj [-1080 ]TJ (As lex)Tj [-10.09999 ]TJ ( finds identifiers )Tj [-10 ]TJ (in the input stream, it e)Tj [-6.29998 ]TJ (n)Tj [-0.09999 ]TJ (ters them in a)Tj [-6.29998 ]TJ ( )Tj 
+ /N171 1 Tf
+ 28.50999 0 TD
+ 0.00009 Tc
+ 0.17988 Tw
+ (symbol table)Tj 
+ /N231 1 Tf
+ 5.25999 0 TD
+ -0.00019 Tc
+ 0.17019 Tw
+ (. The)Tj [-6.39999 ]TJ ( )Tj 
+ -33.76998 -1.14999 TD
+ -0.00039 Tc
+ 0.08039 Tw
+ (s)Tj [-11.19999 ]TJ (y)Tj [19.59999 ]TJ (mbol table ma)Tj [-16.59999 ]TJ (y)Tj [19.59999 ]TJ ( also )Tj [-10 ]TJ (c)Tj [-6.59999 ]TJ (ontain other information)Tj [-10.39999 ]TJ ( such as data t)Tj [-22.59999 ]TJ (y)Tj [19.59999 ]TJ (pe )Tj [-10 ]TJ (\()Tj 
+ /N171 1 Tf
+ 27.95999 0 TD
+ 0.00169 Tc
+ 0 Tw
+ (inte)Tj [5.5 ]TJ (g)Tj [-8.29998 ]TJ (e)Tj [5.5 ]TJ (r)Tj 
+ /N231 1 Tf
+ 2.83999 0 TD
+ -0.00149 Tc
+ 0.08149 Tw
+ ( or )Tj 
+ /N171 1 Tf
+ 1.48999 0 TD
+ -0.00079 Tc
+ 0 Tw
+ (real)Tj 
+ /N231 1 Tf
+ 1.60998 0 TD
+ -0.00158 Tc
+ 0.08158 Tw
+ (\) and )Tj 
+ -33.89999 -1.14999 TD
+ 0.00189 Tc
+ 0.09809 Tw
+ (loc)Tj [5.69999 ]TJ (a)Tj [5.69999 ]TJ (tion of)Tj [4.89999 ]TJ ( the va)Tj [5.69999 ]TJ (r)Tj [4.89999 ]TJ (i)Tj [-10.29998 ]TJ (a)Tj [5.69999 ]TJ (b)Tj [1.89999 ]TJ (le)Tj [5.69999 ]TJ ( i)Tj [-10.29998 ]TJ (n)Tj [1.89999 ]TJ ( me)Tj [5.69999 ]TJ (mor)Tj [-15.09999 ]TJ (y)Tj [21.89999 ]TJ (. All subse)Tj [5.69999 ]TJ (q)Tj [1.89999 ]TJ (u)Tj [-8.09999 ]TJ (e)Tj [-4.29998 ]TJ (nt r)Tj [4.89999 ]TJ (e)Tj [5.69999 ]TJ (fe)Tj [5.69999 ]TJ (r)Tj [4.89999 ]TJ (e)Tj [5.69999 ]TJ (n)Tj [-8.09999 ]TJ (c)Tj [5.69999 ]TJ (e)Tj [5.69999 ]TJ (s)Tj [1.09999 ]TJ ( to id)Tj [-8.09999 ]TJ (e)Tj [5.69999 ]TJ (n)Tj [1.89999 ]TJ (tif)Tj [4.89999 ]TJ (ier)Tj [4.89999 ]TJ (s)Tj [1.09999 ]TJ ( r)Tj [4.89999 ]TJ (e)Tj [-4.29998 ]TJ (f)Tj [4.89999 ]TJ (e)Tj [5.69999 ]TJ (r to the)Tj [5.69999 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.00059 Tw
+ (appropriate s)Tj [-21.39999 ]TJ (y)Tj [19.39999 ]TJ (mbol table )Tj [-10 ]TJ (index)Tj [-10.59999 ]TJ (.)Tj [-0.59999 ]TJ ( )Tj 
+ T*
+ -0.00199 Tc
+ 0.03199 Tw
+ ( )Tj [-1220 ]TJ (Yacc )Tj [-10 ]TJ (gener)Tj [-9 ]TJ (a)Tj [1.79998 ]TJ (t)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (s C)Tj [-5 ]TJ ( code f)Tj [-9 ]TJ (o)Tj [-2 ]TJ (r a s)Tj [-12.79998 ]TJ (y)Tj [18 ]TJ (nt)Tj [-14.19999 ]TJ (ax)Tj [-12 ]TJ ( anal)Tj [-14.19999 ]TJ (y)Tj [28 ]TJ (z)Tj [-18.19999 ]TJ (er, or )Tj [-10 ]TJ (parser. Y)Tj [-9.79998 ]TJ (a)Tj [1.79998 ]TJ (c)Tj [-8.19999 ]TJ (c)Tj [1.79998 ]TJ ( uses )Tj [-10 ]TJ (g)Tj [8 ]TJ (r)Tj [1 ]TJ (am)Tj [-4.19999 ]TJ (m)Tj [-14.19999 ]TJ (a)Tj [1.79998 ]TJ (r rul)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (s t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (at)Tj [-14.19999 ]TJ ( )Tj 
+ T*
+ 0.15209 Tw
+ (al)Tj [-4.29998 ]TJ (l)Tj [-4.29998 ]TJ (o)Tj [-2.09999 ]TJ (w i)Tj [-4.29998 ]TJ (t)Tj [-4.29998 ]TJ ( t)Tj [-4.29998 ]TJ (o)Tj [-2.09999 ]TJ ( anal)Tj [-24.29998 ]TJ (y)Tj [27.89999 ]TJ (z)Tj [-8.29998 ]TJ (e)Tj [-8.29998 ]TJ ( t)Tj [-4.29998 ]TJ (oke)Tj [-8.29998 ]TJ (ns from)Tj [-4.29998 ]TJ ( l)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (x)Tj [-12.09999 ]TJ ( and cr)Tj [-9.09999 ]TJ (eat)Tj [-4.29998 ]TJ (e )Tj [-10 ]TJ (a s)Tj [-12.89999 ]TJ (y)Tj [17.89999 ]TJ (nt)Tj [-14.29998 ]TJ (ax)Tj [-12.09999 ]TJ ( t)Tj [-4.29998 ]TJ (r)Tj [0.89999 ]TJ (ee. A s)Tj [-22.89999 ]TJ (y)Tj [17.89999 ]TJ (nt)Tj [-4.29998 ]TJ (ax)Tj [-12.09999 ]TJ ( )Tj [-10 ]TJ (t)Tj [-4.29998 ]TJ (r)Tj [0.89999 ]TJ (ee i)Tj [-4.29998 ]TJ (m)Tj [-4.29998 ]TJ (poses a)Tj [-8.29998 ]TJ ( )Tj 
+ T*
+ 0.09199 Tw
+ (hi)Tj [-4.19999 ]TJ (erar)Tj [-9 ]TJ (chi)Tj [-4.19999 ]TJ (cal)Tj [-4.19999 ]TJ ( st)Tj [-4.19999 ]TJ (ruct)Tj [-4.19999 ]TJ (ur)Tj [-9 ]TJ (e on)Tj [-12 ]TJ ( t)Tj [-4.19999 ]TJ (okens. For )Tj [-10 ]TJ (ex)Tj [-12 ]TJ (am)Tj [-4.19999 ]TJ (pl)Tj [-4.19999 ]TJ (e, operat)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ (r p)Tj [-12 ]TJ (r)Tj [1 ]TJ (ec)Tj [-8.19999 ]TJ (edenc)Tj [-8.19999 ]TJ (e)Tj [1.79998 ]TJ ( and )Tj [-10 ]TJ (associ)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (v)Tj [-2 ]TJ (i)Tj [-4.19999 ]TJ (t)Tj [-14.19999 ]TJ (y)Tj [18 ]TJ ( a)Tj [-8.19999 ]TJ (r)Tj [1 ]TJ (e)Tj [-8.09999 ]TJ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0.03099 Tw
+ (apparent)Tj [-13.19999 ]TJ ( in the s)Tj [-21.79998 ]TJ (y)Tj [19 ]TJ (nt)Tj [-13.19999 ]TJ (ax)Tj [-11 ]TJ ( tree. Th)Tj [-11 ]TJ (e nex)Tj [-11 ]TJ (t)Tj [-3.19999 ]TJ ( step, )Tj [-10 ]TJ (code )Tj [-10 ]TJ (generation, do)Tj [-11 ]TJ (es )Tj [-10 ]TJ (a depth)Tj [-10.79998 ]TJ (-)Tj [2 ]TJ (f)Tj [-8 ]TJ (i)Tj [-3.19999 ]TJ (rst walk of)Tj [-8 ]TJ ( the)Tj [-7.19999 ]TJ ( )Tj 
+ T*
+ 0.16099 Tw
+ (s)Tj [-11.79998 ]TJ (y)Tj [19 ]TJ (ntax)Tj [-11 ]TJ ( tree to g)Tj [9 ]TJ (e)Tj [2.79998 ]TJ (ne)Tj [-7.19999 ]TJ (rate )Tj [-10 ]TJ (code. Some compilers produce machine cod)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ (, w)Tj [-8.79998 ]TJ (h)Tj [-1 ]TJ (ile others, as)Tj [8.19999 ]TJ ( )Tj 
+ T*
+ -0.00009 Tc
+ 0.00009 Tw
+ (shown above, output asse)Tj [-6.29998 ]TJ (mbl)Tj [-12.29998 ]TJ (y)Tj [19.89999 ]TJ (. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ ET
+ 1 1 1 sc
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 1 J
+ 1 j
+ 0.71699 w
+ 10 M
+ []0 d
+ 
+ 213.62298 417.03099 35.99699 17.99899 re
+ B* 
+ BT
+ /N228 1 Tf
+ 8.99128 0 0 8.99128 225.86178 423.39068 Tm
+ 0 0 0 sc
+ 0.00448 Tc
+ (lex)Tj 
+ ET
+ 1 1 1 sc
+ 213.62298 489.02499 35.99699 17.99899 re
+ B* 
+ BT
+ 8.99128 0 0 8.99128 222.26208 495.26478 Tm
+ 0 0 0 sc
+ -0.00619 Tc
+ (ya)Tj [-10.5 ]TJ (c)Tj [-13.29998 ]TJ (c)Tj 
+ ET
+ 1 1 1 sc
+ 348.49198 453.02799 35.99699 17.99899 re
+ B* 
+ BT
+ 8.99128 0 0 8.99128 361.93049 459.26779 Tm
+ 0 0 0 sc
+ 0.00709 Tc
+ (cc)Tj 
+ -22.83338 4.00349 TD
+ 0.00408 Tc
+ (bas.y)Tj 
+ 0.26689 -7.99369 TD
+ 0.00379 Tc
+ (bas.l)Tj [-12385.09999 ]TJ (lex)Tj [23.39999 ]TJ (.)Tj [1.39999 ]TJ (y)Tj [10 ]TJ (y)Tj [23.39999 ]TJ (.c)Tj 
+ 14.51939 7.99369 TD
+ 0.00299 Tc
+ (y)Tj [9.19999 ]TJ (.tab)Tj [12 ]TJ (.)Tj [0.59999 ]TJ (c)Tj 
+ 15.80059 -3.99018 TD
+ 0.00448 Tc
+ (bas.ex)Tj [24.09999 ]TJ (e)Tj 
+ 0.24018 5.99189 TD
+ 0.00509 Tc
+ (source)Tj 
+ -2.04179 -12.99809 TD
+ 0.00439 Tc
+ -0.00199 Tw
+ (com)Tj [10 ]TJ (p)Tj [0.09999 ]TJ (iled output)Tj 
+ ET
+ 447.48298 507.02398 m
+ 447.48298 474.74598 l
+ S 
+ 447.48298 471.02699 m
+ 450.00299 476.06599 l
+ 449.64299 475.82598 l
+ 449.40299 475.82598 l
+ 449.04299 475.70599 l
+ 448.80299 475.58599 l
+ 448.44299 475.46598 l
+ 446.40299 475.46598 l
+ 446.04299 475.58599 l
+ 445.80398 475.70599 l
+ 445.44398 475.82598 l
+ 445.20399 475.82598 l
+ 444.96398 476.06599 l
+ 447.48298 471.02699 l
+ f* 
+ 447.48298 453.02799 m
+ 447.48298 420.87098 l
+ S 
+ 447.48298 417.03099 m
+ 450.00299 422.07099 l
+ 449.64299 421.95098 l
+ 449.40299 421.83099 l
+ 449.04299 421.83099 l
+ 448.80299 421.71099 l
+ 448.44299 421.59098 l
+ 447.84298 421.59098 l
+ 447.60299 421.47099 l
+ 447.24299 421.47099 l
+ 447.00299 421.59098 l
+ 446.40299 421.59098 l
+ 446.04299 421.71099 l
+ 445.80398 421.83099 l
+ 445.44398 421.83099 l
+ 445.20399 421.95098 l
+ 444.96398 422.07099 l
+ 447.48298 417.03099 l
+ f* 
+ 384.48899 462.02799 m
+ 421.20599 462.02799 l
+ S 
+ 425.04499 462.02799 m
+ 420.00599 459.50799 l
+ 420.24598 459.98799 l
+ 420.36599 460.34799 l
+ 420.48599 460.58799 l
+ 420.48599 460.94799 l
+ 420.60598 461.18798 l
+ 420.60598 462.74699 l
+ 420.48599 462.98699 l
+ 420.48599 463.34698 l
+ 420.36599 463.58699 l
+ 420.24598 463.94699 l
+ 420.12599 464.18699 l
+ 420.00599 464.54699 l
+ 425.04499 462.02799 l
+ f* 
+ 321.49398 498.02499 m
+ 346.21199 465.02699 l
+ S 
+ 348.49198 462.02799 m
+ 343.45199 464.54699 l
+ 343.81199 464.54699 l
+ 344.05198 464.66699 l
+ 344.41198 464.78698 l
+ 344.65199 464.78698 l
+ 344.89199 464.90699 l
+ 345.25199 465.14698 l
+ 345.73199 465.38699 l
+ 346.21199 465.86698 l
+ 346.45199 465.98699 l
+ 346.69198 466.22698 l
+ 346.81199 466.46699 l
+ 347.05198 466.70698 l
+ 347.17199 466.94699 l
+ 347.41198 467.18699 l
+ 347.53199 467.54699 l
+ 348.49198 462.02799 l
+ f* 
+ 321.49398 426.03099 m
+ 346.21199 458.90798 l
+ S 
+ 348.49198 462.02799 m
+ 343.45199 459.50799 l
+ 343.81199 459.38798 l
+ 344.05198 459.26799 l
+ 344.41198 459.26799 l
+ 344.65199 459.14799 l
+ 344.89199 459.02799 l
+ 345.25199 458.78799 l
+ 345.49198 458.66799 l
+ 345.73199 458.54798 l
+ 346.21199 458.06799 l
+ 346.45199 457.94799 l
+ 346.69198 457.70799 l
+ 346.81199 457.46798 l
+ 347.05198 457.22799 l
+ 347.17199 456.98799 l
+ 347.41198 456.74798 l
+ 347.53199 456.38798 l
+ 348.49198 462.02799 l
+ f* 
+ 249.61999 426.03099 m
+ 281.77699 426.03099 l
+ S 
+ 285.61698 426.03099 m
+ 280.57699 423.51098 l
+ 280.69699 423.87098 l
+ 280.81698 424.11099 l
+ 280.93699 424.47099 l
+ 281.05699 424.71099 l
+ 281.05699 425.07099 l
+ 281.17698 425.31098 l
+ 281.17698 426.86999 l
+ 281.05699 427.10998 l
+ 281.05699 427.46998 l
+ 280.93699 427.70999 l
+ 280.81698 428.06999 l
+ 280.57699 428.54998 l
+ 285.61698 426.03099 l
+ f* 
+ 249.61999 498.02499 m
+ 281.77699 498.02499 l
+ S 
+ 285.61698 498.02499 m
+ 280.57699 495.50498 l
+ 280.81698 495.98498 l
+ 280.93699 496.34498 l
+ 281.05699 496.58499 l
+ 281.05699 496.94499 l
+ 281.17698 497.18499 l
+ 281.17698 498.74398 l
+ 281.05699 498.98399 l
+ 281.05699 499.34399 l
+ 280.93699 499.58399 l
+ 280.81698 499.94398 l
+ 280.69699 500.18399 l
+ 280.57699 500.54399 l
+ 285.61698 498.02499 l
+ f* 
+ 182.18598 498.02499 m
+ 209.78298 498.02499 l
+ S 
+ 213.62298 498.02499 m
+ 208.58299 495.50498 l
+ 208.82299 495.98498 l
+ 208.94299 496.34498 l
+ 209.06298 496.58499 l
+ 209.06298 496.94499 l
+ 209.18299 497.18499 l
+ 209.18299 498.74398 l
+ 209.06298 498.98399 l
+ 209.06298 499.34399 l
+ 208.94299 499.58399 l
+ 208.82299 499.94398 l
+ 208.70298 500.18399 l
+ 208.58299 500.54399 l
+ 213.62298 498.02499 l
+ f* 
+ 182.18598 426.03099 m
+ 209.78298 426.03099 l
+ S 
+ 213.62298 426.03099 m
+ 208.58299 423.51098 l
+ 208.70298 423.87098 l
+ 208.82299 424.11099 l
+ 208.94299 424.47099 l
+ 209.06298 424.71099 l
+ 209.06298 425.07099 l
+ 209.18299 425.31098 l
+ 209.18299 426.86999 l
+ 209.06298 427.10998 l
+ 209.06298 427.46998 l
+ 208.94299 427.70999 l
+ 208.82299 428.06999 l
+ 208.58299 428.54998 l
+ 213.62298 426.03099 l
+ f* 
+ BT
+ 8.99128 0 0 8.99128 289.57649 409.83189 Tm
+ 0 Tc
+ 0 Tw
+ (\()Tj 
+ /N174 1 Tf
+ 0.33358 0 TD
+ 0.00549 Tc
+ (yylex)Tj 
+ /N228 1 Tf
+ 2.29539 0 TD
+ 0 Tc
+ (\))Tj 
+ -2.62899 11.00968 TD
+ (\()Tj 
+ /N174 1 Tf
+ 0.33358 0 TD
+ 0.00648 Tc
+ (yypa)Tj [15.5 ]TJ (r)Tj [5.89999 ]TJ (se)Tj 
+ /N228 1 Tf
+ 3.52308 0 TD
+ 0 Tc
+ (\))Tj 
+ -11.81039 -5.51148 TD
+ 0.00318 Tc
+ (y)Tj [9.39999 ]TJ (.tab.h)Tj 
+ ET
+ 231.62098 489.02499 m
+ 231.62098 474.74598 l
+ S 
+ 231.62098 471.02699 m
+ 234.14099 476.06599 l
+ 233.90098 475.82598 l
+ 233.54098 475.82598 l
+ 233.30099 475.70599 l
+ 233.06098 475.58599 l
+ 232.70098 475.46598 l
+ 230.54098 475.46598 l
+ 230.30099 475.58599 l
+ 229.94198 475.70599 l
+ 229.70199 475.82598 l
+ 229.34199 475.82598 l
+ 229.10198 476.06599 l
+ 231.62098 471.02699 l
+ f* 
+ 231.62098 453.02799 m
+ 231.62098 438.86898 l
+ S 
+ 231.62098 435.02999 m
+ 234.14099 440.06898 l
+ 233.90098 439.94898 l
+ 233.54098 439.82899 l
+ 233.30099 439.82899 l
+ 233.06098 439.70899 l
+ 232.70098 439.58898 l
+ 230.54098 439.58898 l
+ 230.30099 439.70899 l
+ 229.94198 439.82899 l
+ 229.70199 439.82899 l
+ 229.34199 439.94898 l
+ 229.10198 440.06898 l
+ 231.62098 435.02999 l
+ f* 
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 485.52018 388.11369 Tm
+ 0 Tc
+ ( )Tj 
+ /N170 1 Tf
+ -24.64999 -1.39999 TD
+ -0.00149 Tc
+ 0.00149 Tw
+ (F)Tj [9.29998 ]TJ (i)Tj [-3.69999 ]TJ (gure 1)Tj [-11.5 ]TJ (-)Tj [1.5 ]TJ (2: )Tj 
+ /N231 1 Tf
+ 5 0 TD
+ 0.00138 Tc
+ -0.00138 Tw
+ (B)Tj [8.39999 ]TJ (u)Tj [1.39999 ]TJ (ilding)Tj [11.39999 ]TJ ( a)Tj [5.19999 ]TJ ( C)Tj [-11.59999 ]TJ (o)Tj [1.39999 ]TJ (mpile)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ ( with )Tj [-10 ]TJ (L)Tj [22.19999 ]TJ (e)Tj [5.19999 ]TJ (x)Tj [-8.59999 ]TJ (/)Tj [-0.79998 ]TJ (Ya)Tj [5.19999 ]TJ (cc)Tj 
+ /N170 1 Tf
+ 14.37998 0 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N231 1 Tf
+ -27.68998 -1.64999 TD
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.03048 Tw
+ ( )Tj [-1220 ]TJ (F)Tj [5.59999 ]TJ (i)Tj [-2.69999 ]TJ (g)Tj [9.5 ]TJ (u)Tj [-10.5 ]TJ (re 1-2 illustrates the )Tj [-10 ]TJ (file naming)Tj [9.5 ]TJ ( )Tj [-10 ]TJ (conventions used b)Tj [-10.5 ]TJ (y)Tj [19.5 ]TJ ( lex)Tj [-10.5 ]TJ ( and )Tj [-20 ]TJ (y)Tj [19.5 ]TJ (a)Tj [-6.69999 ]TJ (cc. W)Tj [-6.69999 ]TJ (e)Tj [3.5 ]TJ (')Tj [9.69999 ]TJ (ll assum)Tj [-12.69999 ]TJ (e)Tj [-6.69999 ]TJ ( )Tj 
+ T*
+ 0.00099 Tc
+ -0.00099 Tw
+ (our)Tj [4 ]TJ ( g)Tj [11 ]TJ (o)Tj [-9 ]TJ (a)Tj [4.79998 ]TJ (l)Tj [-1.19999 ]TJ ( is to wr)Tj [4 ]TJ (ite)Tj [4.79998 ]TJ ( a)Tj [4.79998 ]TJ ( )Tj [-10 ]TJ (B)Tj [8 ]TJ (A)Tj [-6.79998 ]TJ (S)Tj [-12.79998 ]TJ (I)Tj [24 ]TJ (C c)Tj [4.79998 ]TJ (o)Tj [1 ]TJ (mpile)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (.)Tj [1 ]TJ ( )Tj [-10 ]TJ (F)Tj [7.09999 ]TJ (i)Tj [-1.19999 ]TJ (r)Tj [4 ]TJ (s)Tj [0.19999 ]TJ (t, we)Tj [4.79998 ]TJ ( n)Tj [-9 ]TJ (e)Tj [4.79998 ]TJ (e)Tj [4.79998 ]TJ (d)Tj [1 ]TJ ( to spe)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (i)Tj [-1.19999 ]TJ (f)Tj [-16 ]TJ (y)Tj [21 ]TJ ( )Tj [-10 ]TJ (a)Tj [4.79998 ]TJ (ll pa)Tj [4.79998 ]TJ (tte)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (n)Tj [1 ]TJ ( )Tj [-10 ]TJ (ma)Tj [4.79998 ]TJ (tc)Tj [4.79998 ]TJ (hing)Tj [11 ]TJ ( )Tj [-10 ]TJ (r)Tj [4 ]TJ (u)Tj [1 ]TJ (le)Tj [4.89999 ]TJ (s)Tj [-9.79998 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00228 Tc
+ 0.03228 Tw
+ (for l)Tj [-4.5 ]TJ (e)Tj [1.5 ]TJ (x)Tj [-12.29998 ]TJ ( \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 129.38989 309.88018 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas.l)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 162.38708 309.88018 Tm
+ -0.00189 Tc
+ 0.04188 Tw
+ (\) and g)Tj [8.09999 ]TJ (r)Tj [-8.89999 ]TJ (a)Tj [-8.09999 ]TJ (m)Tj [-4.09999 ]TJ (m)Tj [-4.09999 ]TJ (a)Tj [1.89999 ]TJ (r )Tj [10 ]TJ (rul)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ (s for )Tj [-10 ]TJ (y)Tj [18.09999 ]TJ (a)Tj [-8.09999 ]TJ (cc)Tj [-8.09999 ]TJ ( )Tj [10 ]TJ (\()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 310.69479 309.88018 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ba)Tj [-10.89999 ]TJ (s.y)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 343.81199 309.88018 Tm
+ 0.00149 Tc
+ 0.02848 Tw
+ (\))Tj [4.5 ]TJ (.)Tj [1.5 ]TJ ( Comma)Tj [5.29998 ]TJ (nds to c)Tj [5.29998 ]TJ (r)Tj [-5.5 ]TJ (e)Tj [5.29998 ]TJ (a)Tj [-4.69999 ]TJ (te)Tj [5.29998 ]TJ ( our)Tj [4.5 ]TJ ( c)Tj [5.29998 ]TJ (o)Tj [1.5 ]TJ (mpiler)Tj [4.5 ]TJ (,)Tj [1.5 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 295.36138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas.exe)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 136.22929 295.36138 Tm
+ 0.00088 Tc
+ -0.00088 Tw
+ (, a)Tj [4.69999 ]TJ (r)Tj [3.89999 ]TJ (e)Tj [4.69999 ]TJ ( liste)Tj [4.69999 ]TJ (d be)Tj [4.69999 ]TJ (lo)Tj [-9.09999 ]TJ (w: )Tj 
+ -3.84999 -1.17999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 269.20359 Tm
+ -0.00219 Tc
+ (yacc)Tj [-597.79998 ]TJ (\226d)Tj [-597.89999 ]TJ (bas.y)Tj [-11358.79998 ]TJ (#)Tj [-597.89999 ]TJ (create)Tj [-597.69999 ]TJ (y.tab.h,)Tj [-597.89999 ]TJ (y.tab.c)Tj 
+ 0 -1.13038 TD
+ (lex)Tj [-597.89999 ]TJ (bas.l)Tj [-13750.09999 ]TJ (#)Tj [-597.89999 ]TJ (create)Tj [-597.89999 ]TJ (lex.yy.c)Tj 
+ T*
+ (cc)Tj [-597.89999 ]TJ (lex.yy.c)Tj [-597.89999 ]TJ (y.tab.c)Tj [-597.79998 ]TJ (\226obas.exe)Tj [-1793.5 ]TJ (#)Tj [-597.89999 ]TJ (compile/link)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 108.03169 229.96688 Tm
+ 0 Tc
+ ( )Tj 
+ -1.5 -1.16999 TD
+ -0.00209 Tc
+ 0.38209 Tw
+ (Yacc)Tj [-8.29998 ]TJ ( re)Tj [-8.29998 ]TJ (ads t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e )Tj [-10 ]TJ (gram)Tj [-4.29998 ]TJ (m)Tj [-14.29998 ]TJ (a)Tj [1.69999 ]TJ (r des)Tj [-12.89999 ]TJ (c)Tj [1.69999 ]TJ (ri)Tj [-4.29998 ]TJ (pt)Tj [-4.29998 ]TJ (i)Tj [-4.29998 ]TJ (ons i)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 310.81478 215.92799 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas)Tj [-10.89999 ]TJ (.y)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 343.93199 215.92799 Tm
+ -0.00119 Tc
+ 0.38119 Tw
+ ( and )Tj [-10 ]TJ (g)Tj [8.79998 ]TJ (e)Tj [2.59999 ]TJ (n)Tj [-11.19999 ]TJ (e)Tj [2.59999 ]TJ (rat)Tj [-13.39999 ]TJ (e)Tj [2.59999 ]TJ (s a p)Tj [-11.19999 ]TJ (a)Tj [2.59999 ]TJ (rser,)Tj [-11.19999 ]TJ ( function )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 201.40928 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyparse)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 136.22929 201.40928 Tm
+ 0.00129 Tc
+ 0.02868 Tw
+ (, in f)Tj [4.29998 ]TJ (ile)Tj [5.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 174.62609 201.40928 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.tab)Tj [10.79998 ]TJ (.c)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 220.70228 201.40928 Tm
+ 0.00099 Tc
+ 0.02899 Tw
+ (. )Tj [-10 ]TJ (I)Tj [24 ]TJ (n)Tj [1 ]TJ (c)Tj [4.79998 ]TJ (l)Tj [-1.19999 ]TJ (ud)Tj [-9 ]TJ (e)Tj [4.79998 ]TJ (d)Tj [1 ]TJ ( in f)Tj [4 ]TJ (ile)Tj [4.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 304.33529 201.40928 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas.y)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 337.33259 201.40928 Tm
+ -0.00109 Tc
+ 0.03109 Tw
+ ( are token decla)Tj [-7.29998 ]TJ (r)Tj [1.89999 ]TJ (ations. The )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 474.84109 201.40928 Tm
+ -0.00219 Tc
+ 0 Tw
+ (\226d)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 488.03999 201.40928 Tm
+ 0.00088 Tc
+ 0.02909 Tw
+ ( option)Tj [10.89999 ]TJ ( )Tj 
+ -33.16999 -1.20999 TD
+ -0.00189 Tc
+ 0.03189 Tw
+ (causes )Tj [-20 ]TJ (y)Tj [18.09999 ]TJ (a)Tj [-8.09999 ]TJ (cc t)Tj [-4.09999 ]TJ (o)Tj [-1.89999 ]TJ ( )Tj [-10 ]TJ (g)Tj [8.09999 ]TJ (e)Tj [1.89999 ]TJ (n)Tj [-11.89999 ]TJ (e)Tj [1.89999 ]TJ (rat)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ ( d)Tj [-11.89999 ]TJ (e)Tj [1.89999 ]TJ (fi)Tj [-4.09999 ]TJ (ni)Tj [-4.09999 ]TJ (t)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (ons for t)Tj [-4.09999 ]TJ (okens and )Tj [-10 ]TJ (pl)Tj [-4.09999 ]TJ (ace t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (em)Tj [-4.09999 ]TJ ( i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ ( fi)Tj [-4.09999 ]TJ (l)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 422.04548 186.89039 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.tab)Tj [-10.89999 ]TJ (.h)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 468.36158 186.89039 Tm
+ -0.00178 Tc
+ 0.04179 Tw
+ (. L)Tj [19 ]TJ (e)Tj [2 ]TJ (x)Tj [-11.79998 ]TJ ( )Tj [10 ]TJ (reads)Tj [-12.59999 ]TJ ( )Tj 
+ -31.52999 -1.20999 TD
+ 0.00099 Tc
+ 0.31898 Tw
+ (the)Tj [4.79998 ]TJ ( pa)Tj [4.79998 ]TJ (tte)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (n)Tj [1 ]TJ ( d)Tj [-9 ]TJ (e)Tj [4.79998 ]TJ (sc)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (ptions)Tj [-9.79998 ]TJ ( in )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 232.82128 172.37168 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas.l)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 265.81849 172.37168 Tm
+ -0.00059 Tc
+ 0.32058 Tw
+ (, includes fi)Tj [-12.79998 ]TJ (le )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 345.37188 172.37168 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.tab.h)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 391.56799 172.37168 Tm
+ -0.00138 Tc
+ 0.32139 Tw
+ (, and )Tj [-10 ]TJ (gene)Tj [-7.59999 ]TJ (r)Tj [-8.39999 ]TJ (a)Tj [2.39999 ]TJ (tes a l)Tj [-13.59999 ]TJ (e)Tj [2.39999 ]TJ (x)Tj [-11.39999 ]TJ (i)Tj [-3.59999 ]TJ (cal)Tj [6.39999 ]TJ ( )Tj 
+ -25.12998 -1.19999 TD
+ -0.00088 Tc
+ 0.00088 Tw
+ (anal)Tj [-23.09999 ]TJ (y)Tj [29.09999 ]TJ (z)Tj [-7.09999 ]TJ (e)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (, function )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 179.54568 157.97279 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 212.66288 157.97279 Tm
+ 0.00109 Tc
+ -0.00109 Tw
+ (, in f)Tj [4.09999 ]TJ (ile)Tj [4.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 249.97979 157.97279 Tm
+ -0.00219 Tc
+ 0 Tw
+ (lex.yy.c)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 302.77549 157.97279 Tm
+ 0 Tc
+ (.  )Tj 
+ -17.72999 -1.18998 TD
+ -0.00088 Tc
+ 0.03089 Tw
+ ( )Tj [-1220 ]TJ (F)Tj [5.19999 ]TJ (i)Tj [-3.09999 ]TJ (nall)Tj [-13.09999 ]TJ (y)Tj [19.09999 ]TJ (,)Tj [-10.89999 ]TJ ( the lex)Tj [-10.89999 ]TJ (e)Tj [2.89999 ]TJ (r )Tj [-10 ]TJ (and pa)Tj [-7.09999 ]TJ (r)Tj [-7.89999 ]TJ (s)Tj [-1.69999 ]TJ (er a)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (e )Tj [-10 ]TJ (compiled and lin)Tj [-10.89999 ]TJ (ked together)Tj [-7.89999 ]TJ ( to form th)Tj [-10.89999 ]TJ (e )Tj [-10 ]TJ (ex)Tj [-10.89999 ]TJ (ecutable, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 129.65519 Tm
+ -0.00219 Tc
+ 0 Tw
+ (bas.exe)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 136.22929 129.65519 Tm
+ 0.00059 Tc
+ -0.00059 Tw
+ (.  )Tj [100 ]TJ (F)Tj [6.69999 ]TJ (r)Tj [3.59999 ]TJ (om )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 177.02589 129.65519 Tm
+ -0.00219 Tc
+ 0 Tw
+ (main)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 203.42369 129.65519 Tm
+ 0.00158 Tc
+ 0.33839 Tw
+ (, we)Tj [5.39999 ]TJ ( ca)Tj [5.39999 ]TJ (ll )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 258.97909 129.65519 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyparse)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 305.17518 129.65519 Tm
+ 0.00088 Tc
+ 0.33909 Tw
+ ( to r)Tj [3.89999 ]TJ (un the)Tj [4.69999 ]TJ ( c)Tj [4.69999 ]TJ (o)Tj [0.89999 ]TJ (mpile)Tj [4.69999 ]TJ (r)Tj [3.89999 ]TJ (.)Tj [0.89999 ]TJ ( F)Tj [7 ]TJ (unc)Tj [4.69999 ]TJ (tion )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 475.80099 129.65519 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyparse)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 521.99708 129.65519 Tm
+ 0 Tc
+ ( )Tj 
+ -36 -1.20999 TD
+ 0.00178 Tc
+ 0.00819 Tw
+ (a)Tj [5.59999 ]TJ (u)Tj [1.79998 ]TJ (toma)Tj [5.59999 ]TJ (tic)Tj [5.59999 ]TJ (a)Tj [5.59999 ]TJ (l)Tj [-0.39999 ]TJ (l)Tj [-10.39999 ]TJ (y)Tj [21.79998 ]TJ ( c)Tj [5.59999 ]TJ (a)Tj [5.59999 ]TJ (lls )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 183.26539 115.13639 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyle)Tj [-10.89999 ]TJ (x)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 216.38259 115.13639 Tm
+ -0.00119 Tc
+ 0.00119 Tw
+ ( t)Tj [-3.39999 ]TJ (o)Tj [-1.19999 ]TJ ( obt)Tj [-3.39999 ]TJ (ai)Tj [-3.39999 ]TJ (n each t)Tj [-3.39999 ]TJ (oken. )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 6 6
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 6)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ -0.00178 Tc
+ 0.49058 Tw
+ (2. L)Tj [-4.29998 ]TJ (ex )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ 15.95869 0 0 15.95869 90.03318 659.05108 Tm
+ -0.00088 Tc
+ 0.58769 Tw
+ (2.1 The)Tj [-8.69999 ]TJ (or)Tj [-17.79998 ]TJ (y)Tj [13.89999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 638.65278 Tm
+ -0.00079 Tc
+ 0.06079 Tw
+ (The first phase in a compiler reads the input source and conve)Tj [-7 ]TJ (rts string)Tj [9.19999 ]TJ (s in the source to)Tj [9.19999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0.00178 Tc
+ 0.01818 Tw
+ (toke)Tj [5.59999 ]TJ (ns. Usin)Tj [-8.19999 ]TJ (g)Tj [11.79998 ]TJ ( reg)Tj [11.79998 ]TJ (u)Tj [1.79998 ]TJ (la)Tj [5.59999 ]TJ (r e)Tj [5.59999 ]TJ (x)Tj [-8.19999 ]TJ (pr)Tj [4.79998 ]TJ (e)Tj [5.59999 ]TJ (ssions, we ca)Tj [5.59999 ]TJ (n spec)Tj [5.59999 ]TJ (ify)Tj [21.79998 ]TJ ( )Tj [-10 ]TJ (p)Tj [-8.19999 ]TJ (a)Tj [5.59999 ]TJ (tte)Tj [5.59999 ]TJ (r)Tj [4.79998 ]TJ (n)Tj [1.79998 ]TJ (s)Tj [-9 ]TJ ( to le)Tj [5.59999 ]TJ (x)Tj [-8.19999 ]TJ ( tha)Tj [5.59999 ]TJ (t)Tj [-0.39999 ]TJ ( a)Tj [5.59999 ]TJ (llo)Tj [-8.19999 ]TJ (w it to sca)Tj [5.59999 ]TJ (n)Tj [1.79998 ]TJ ( )Tj [-10 ]TJ (a)Tj [5.59999 ]TJ (nd )Tj 
+ T*
+ 0.00109 Tc
+ 0.17889 Tw
+ (ma)Tj [4.89999 ]TJ (tc)Tj [4.89999 ]TJ (h str)Tj [4.09999 ]TJ (i)Tj [-1.09999 ]TJ (ng)Tj [11.09999 ]TJ (s in the)Tj [4.89999 ]TJ ( inp)Tj [11.09999 ]TJ (u)Tj [1.09999 ]TJ (t. Ea)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (h)Tj [1.09999 ]TJ ( pa)Tj [4.89999 ]TJ (tte)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (n)Tj [1.09999 ]TJ ( in le)Tj [14.89999 ]TJ (x)Tj [-8.89999 ]TJ ( )Tj [10 ]TJ (ha)Tj [4.89999 ]TJ (s a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ (ssoc)Tj [4.89999 ]TJ (i)Tj [-1.09999 ]TJ (a)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ (e)Tj [4.89999 ]TJ (d)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (tion)Tj [-8.89999 ]TJ (.)Tj [1.09999 ]TJ ( T)Tj [-8.09999 ]TJ (y)Tj [21.09999 ]TJ (pic)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (l)Tj [-21.09999 ]TJ (y)Tj [31.09999 ]TJ ( )Tj [-10 ]TJ (a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ ( )Tj 
+ T*
+ -0.00079 Tc
+ 0.05079 Tw
+ (action returns )Tj [-10 ]TJ (a token,)Tj [-10.79998 ]TJ ( re)Tj [-7 ]TJ (presentin)Tj [-10.69999 ]TJ (g)Tj [9.19999 ]TJ ( the mat)Tj [-13 ]TJ (c)Tj [3 ]TJ (hed s)Tj [-11.59999 ]TJ (t)Tj [-3 ]TJ (ring)Tj [9.19999 ]TJ (, fo)Tj [-10.79998 ]TJ (r subsequ)Tj [-10.79998 ]TJ (e)Tj [3 ]TJ (nt use)Tj [-7 ]TJ ( b)Tj [-10.79998 ]TJ (y)Tj [19.19999 ]TJ ( th)Tj [-10.79998 ]TJ (e pa)Tj [-7 ]TJ (rser.)Tj [-10.79998 ]TJ ( )Tj 
+ T*
+ 0.00109 Tc
+ 0.16889 Tw
+ (To be)Tj [4.89999 ]TJ (g)Tj [11.09999 ]TJ (i)Tj [-1.09999 ]TJ (n with, howe)Tj [4.89999 ]TJ (v)Tj [1.09999 ]TJ (er, we)Tj [4.89999 ]TJ ( will simpl)Tj [-11.09999 ]TJ (y)Tj [31.09999 ]TJ ( pr)Tj [4.09999 ]TJ (int the)Tj [4.89999 ]TJ ( ma)Tj [4.89999 ]TJ (tc)Tj [4.89999 ]TJ (he)Tj [4.89999 ]TJ (d str)Tj [4.09999 ]TJ (i)Tj [-1.09999 ]TJ (ng)Tj [11.09999 ]TJ ( ra)Tj [4.89999 ]TJ (the)Tj [4.89999 ]TJ (r)Tj [-5.89999 ]TJ ( tha)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ ( r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (tur)Tj [4.09999 ]TJ (n)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ ( )Tj 
+ T*
+ 0.00149 Tc
+ -0.00149 Tw
+ (toke)Tj [5.29998 ]TJ (n va)Tj [5.29998 ]TJ (lue)Tj [5.29998 ]TJ (.)Tj [1.5 ]TJ ( We)Tj [5.29998 ]TJ ( ma)Tj [-14.69999 ]TJ (y)Tj [21.5 ]TJ ( sc)Tj [5.29998 ]TJ (an f)Tj [4.5 ]TJ (o)Tj [1.5 ]TJ (r)Tj [4.5 ]TJ ( ide)Tj [5.29998 ]TJ (n)Tj [1.5 ]TJ (tif)Tj [4.5 ]TJ (ie)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (s)Tj [0.69999 ]TJ ( usin)Tj [-8.5 ]TJ (g)Tj [11.5 ]TJ ( the r)Tj [4.5 ]TJ (e)Tj [-4.69999 ]TJ (g)Tj [11.5 ]TJ (u)Tj [1.5 ]TJ (la)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ ( )Tj [-10 ]TJ (e)Tj [5.29998 ]TJ (x)Tj [-8.5 ]TJ (pr)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (ssion )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 236.66088 543.86068 Tm
+ -0.00219 Tc
+ (letter\(letter|digit\)*)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 529.58189 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ 0.00099 Tc
+ 0.00889 Tw
+ (This pa)Tj [4.79998 ]TJ (tte)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (n)Tj [1 ]TJ ( ma)Tj [4.79998 ]TJ (tc)Tj [4.79998 ]TJ (he)Tj [4.79998 ]TJ (s a)Tj [4.79998 ]TJ ( str)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (ng)Tj [11 ]TJ ( of)Tj [4 ]TJ ( c)Tj [4.79998 ]TJ (h)Tj [-9 ]TJ (a)Tj [4.79998 ]TJ (r)Tj [-6 ]TJ (a)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (t)Tj [-1.19999 ]TJ (e)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (s tha)Tj [4.79998 ]TJ (t)Tj [-1.19999 ]TJ ( beg)Tj [11 ]TJ (i)Tj [-1.19999 ]TJ (ns with a)Tj [4.79998 ]TJ ( sing)Tj [11 ]TJ (le)Tj [4.79998 ]TJ ( le)Tj [4.79998 ]TJ (tte)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (,)Tj [1 ]TJ ( )Tj [-10.09999 ]TJ (a)Tj [4.79998 ]TJ (nd is f)Tj [4 ]TJ (o)Tj [1 ]TJ (llowe)Tj [4.79998 ]TJ (d)Tj [-9 ]TJ ( )Tj 
+ T*
+ 0.00129 Tc
+ 0.13868 Tw
+ (b)Tj [-8.69999 ]TJ (y)Tj [21.29998 ]TJ ( ze)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ (o)Tj [1.29998 ]TJ ( or)Tj [4.29998 ]TJ ( mor)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ ( le)Tj [5.09999 ]TJ (tte)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ (s)Tj [0.5 ]TJ ( )Tj [-10 ]TJ (or)Tj [4.29998 ]TJ ( dig)Tj [11.29998 ]TJ (its. This e)Tj [5.09999 ]TJ (x)Tj [-8.69999 ]TJ (a)Tj [5.09999 ]TJ (m)Tj [-0.89999 ]TJ (ple)Tj [5.09999 ]TJ ( )Tj [10 ]TJ (nic)Tj [5.09999 ]TJ (e)Tj [5.09999 ]TJ (l)Tj [-10.89999 ]TJ (y)Tj [21.29998 ]TJ ( illustr)Tj [4.29998 ]TJ (a)Tj [5.09999 ]TJ (te)Tj [5.09999 ]TJ (s ope)Tj [5.09999 ]TJ (ra)Tj [5.09999 ]TJ (tions a)Tj [5.09999 ]TJ (llowe)Tj [5.09999 ]TJ (d in )Tj 
+ T*
+ -0.00099 Tc
+ 0.01098 Tw
+ (re)Tj [-7.19999 ]TJ (g)Tj [9 ]TJ (u)Tj [-1 ]TJ (lar ex)Tj [-11 ]TJ (pressions: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N172 1 Tf
+ 1.5 -1.25 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00088 Tc
+ 0.00088 Tw
+ (repetition, ex)Tj [-10.89999 ]TJ (pressed b)Tj [-20.89999 ]TJ (y)Tj [19.09999 ]TJ ( the \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 266.17849 459.38778 Tm
+ 0 Tc
+ 0 Tw
+ (*)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 272.77789 459.38778 Tm
+ -0.00248 Tc
+ 0.00248 Tw
+ (\224 op)Tj [-12.5 ]TJ (erat)Tj [-4.69999 ]TJ (or )Tj 
+ /N172 1 Tf
+ -13.72999 -1.27999 TD
+ 0 Tc
+ 0 Tw
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00099 Tc
+ 0.00099 Tw
+ (alternation, ex)Tj [-11 ]TJ (pressed b)Tj [-21 ]TJ (y)Tj [19 ]TJ ( )Tj [-10 ]TJ (the \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 271.57798 444.02899 Tm
+ 0 Tc
+ 0 Tw
+ (|)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 278.17749 444.02899 Tm
+ -0.00228 Tc
+ 0.00228 Tw
+ (\224 ope)Tj [-8.5 ]TJ (rat)Tj [-4.5 ]TJ (o)Tj [-2.29998 ]TJ (r )Tj 
+ /N172 1 Tf
+ -14.17999 -1.25999 TD
+ 0 Tc
+ 0 Tw
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00219 Tc
+ (concat)Tj [-4.39999 ]TJ (en)Tj [-12.19999 ]TJ (at)Tj [-4.39999 ]TJ (i)Tj [-4.39999 ]TJ (on )Tj 
+ -1.5 -1.13999 TD
+ 0 Tc
+ ( )Tj 
+ /N171 1 Tf
+ -1.5 -1.14999 TD
+ -0.00039 Tc
+ 1.25039 Tw
+ ( Any)Tj 
+ /N231 1 Tf
+ 3.04998 0 TD
+ -0.00099 Tc
+ 0.22099 Tw
+ ( re)Tj [-7.19999 ]TJ (g)Tj [9 ]TJ (u)Tj [-1 ]TJ (lar ex)Tj [-11 ]TJ (pression ex)Tj [-11 ]TJ (pressions ma)Tj [-7.19999 ]TJ (y)Tj [29 ]TJ ( be ex)Tj [-11 ]TJ (pressed as a finite state automaton )Tj 
+ -3.04998 -1.14999 TD
+ -0.00149 Tc
+ 0.00149 Tw
+ (\(FS)Tj [-5.39999 ]TJ (A)Tj [0.69999 ]TJ (\). W)Tj [-7.69999 ]TJ (e)Tj [2.29998 ]TJ ( )Tj [-10 ]TJ (can )Tj [-10 ]TJ (repr)Tj [-8.5 ]TJ (esent)Tj [-3.69999 ]TJ ( )Tj [-10 ]TJ (an FS)Tj [-5.39999 ]TJ (A usi)Tj [-3.69999 ]TJ (n)Tj [-11.5 ]TJ (g)Tj [8.5 ]TJ ( st)Tj [-3.69999 ]TJ (at)Tj [-13.69999 ]TJ (es, and )Tj [-10 ]TJ (t)Tj [-3.69999 ]TJ (r)Tj [1.5 ]TJ (ansi)Tj [-3.69999 ]TJ (t)Tj [-3.69999 ]TJ (i)Tj [-3.69999 ]TJ (ons bet)Tj [-3.69999 ]TJ (w)Tj [0.69999 ]TJ (een st)Tj [-3.69999 ]TJ (at)Tj [-13.69999 ]TJ (es)Tj [-12.29998 ]TJ (. There)Tj [-7.69999 ]TJ ( i)Tj [-3.69999 ]TJ (s)Tj [-2.29998 ]TJ ( one)Tj [-7.69999 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.00059 Tw
+ (start state, and one o)Tj [-10.59999 ]TJ (r)Tj [2.39999 ]TJ ( more final or )Tj [-10 ]TJ (acc)Tj [-6.79998 ]TJ (epting)Tj [9.39999 ]TJ ( st)Tj [-12.79998 ]TJ (ate)Tj [-6.79998 ]TJ (s)Tj [-1.39999 ]TJ (. )Tj 
+ ET
+ 1 1 1 sc
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 1 J
+ 1 j
+ 0.71699 w
+ 10 M
+ []0 d
+ 252.5 322.11898 m
+ 252.73999 324.15899 l
+ 253.33999 326.07899 l
+ 254.41899 327.75898 l
+ 255.85899 329.19898 l
+ 257.53898 330.27899 l
+ 259.45899 330.87799 l
+ 261.49899 331.11799 l
+ 263.41899 330.87799 l
+ 265.33898 330.27899 l
+ 267.01799 329.19898 l
+ 268.45799 327.75898 l
+ 269.53799 326.07899 l
+ 270.25799 324.15899 l
+ 270.49798 322.11898 l
+ 270.25799 320.07899 l
+ 269.53799 318.15998 l
+ 268.45799 316.47999 l
+ 267.01799 315.03999 l
+ 265.33898 313.95999 l
+ 263.41899 313.35998 l
+ 261.49899 313.11999 l
+ 259.45899 313.35998 l
+ 257.53898 313.95999 l
+ 255.85899 315.03999 l
+ 254.41899 316.47999 l
+ 253.33999 318.15998 l
+ 252.73999 320.07899 l
+ 252.5 322.11898 l
+ b* 
+ BT
+ /N228 1 Tf
+ 8.98149 0 0 8.98149 258.97909 319.47938 Tm
+ 0 0 0 sc
+ 0 Tc
+ 0 Tw
+ (0)Tj 
+ ET
+ 1 1 1 sc
+ 324.49398 322.11898 m
+ 324.73399 324.15899 l
+ 325.33399 326.07899 l
+ 326.41299 327.75898 l
+ 327.85299 329.19898 l
+ 329.53298 330.27899 l
+ 331.45298 330.87799 l
+ 333.49299 331.11799 l
+ 335.41299 330.87799 l
+ 337.33299 330.27899 l
+ 339.13198 329.19898 l
+ 340.45199 327.75898 l
+ 341.53199 326.07899 l
+ 342.25199 324.15899 l
+ 342.49198 322.11898 l
+ 342.25199 320.07899 l
+ 341.53199 318.15998 l
+ 340.45199 316.47999 l
+ 339.13198 315.03999 l
+ 337.33299 313.95999 l
+ 335.41299 313.35998 l
+ 333.49299 313.11999 l
+ 331.45298 313.35998 l
+ 329.53298 313.95999 l
+ 327.85299 315.03999 l
+ 326.41299 316.47999 l
+ 325.33399 318.15998 l
+ 324.73399 320.07899 l
+ 324.49398 322.11898 l
+ b* 
+ BT
+ 8.98149 0 0 8.98149 330.97309 319.47938 Tm
+ 0 0 0 sc
+ (1)Tj 
+ ET
+ 1 1 1 sc
+ 398.64698 322.11898 m
+ 398.76699 324.27899 l
+ 399.48699 326.43899 l
+ 400.44699 328.35899 l
+ 401.88699 330.03898 l
+ 403.56698 331.47799 l
+ 405.48699 332.55799 l
+ 407.64698 333.15798 l
+ 409.80699 333.39799 l
+ 412.08599 333.15798 l
+ 414.12599 332.55799 l
+ 416.04598 331.47799 l
+ 417.84599 330.03898 l
+ 419.16598 328.35899 l
+ 420.24598 326.43899 l
+ 420.84599 324.27899 l
+ 421.08599 322.11898 l
+ 420.84599 319.95899 l
+ 420.24598 317.79998 l
+ 419.16598 315.87998 l
+ 417.84599 314.19999 l
+ 416.04598 312.75999 l
+ 414.12599 311.67999 l
+ 412.08599 311.07998 l
+ 409.80699 310.83999 l
+ 407.64698 311.07998 l
+ 405.48699 311.67999 l
+ 403.56698 312.75999 l
+ 401.88699 314.19999 l
+ 400.44699 315.87998 l
+ 399.48699 317.79998 l
+ 398.76699 319.95899 l
+ 398.64698 322.11898 l
+ b* 
+ 270.49798 322.11898 m
+ 318.49398 322.11898 l
+ S 
+ 0 0 0 sc
+ 324.49398 322.11898 m
+ 316.57398 318.15998 l
+ 316.69398 318.63899 l
+ 316.93399 318.99899 l
+ 317.41398 320.91899 l
+ 317.41398 321.39898 l
+ 317.53399 321.87899 l
+ 317.53399 322.35899 l
+ 317.41398 322.83898 l
+ 317.41398 323.31898 l
+ 316.93399 325.23899 l
+ 316.69398 325.59899 l
+ 316.57398 326.07899 l
+ 324.49398 322.11898 l
+ f* 
+ 342.49198 322.11898 m
+ 392.64799 322.11898 l
+ S 
+ 398.64698 322.11898 m
+ 390.72799 318.15998 l
+ 390.84799 318.63899 l
+ 391.08799 318.99899 l
+ 391.56799 320.91899 l
+ 391.56799 323.31898 l
+ 391.08799 325.23899 l
+ 390.84799 325.59899 l
+ 390.72799 326.07899 l
+ 398.64698 322.11898 l
+ f* 
+ 1 1 1 sc
+ 400.80699 322.11898 m
+ 401.04699 324.15899 l
+ 401.76699 326.07899 l
+ 402.84698 327.75898 l
+ 404.28698 329.19898 l
+ 405.96699 330.27899 l
+ 407.88699 330.87799 l
+ 409.80699 331.11799 l
+ 411.84599 330.87799 l
+ 413.76599 330.27899 l
+ 415.44599 329.19898 l
+ 416.88598 327.75898 l
+ 417.96598 326.07899 l
+ 418.56599 324.15899 l
+ 418.80599 322.11898 l
+ 418.56599 320.07899 l
+ 417.96598 318.15998 l
+ 416.88598 316.47999 l
+ 415.44599 315.03999 l
+ 413.76599 313.95999 l
+ 411.84599 313.35998 l
+ 409.80699 313.11999 l
+ 407.88699 313.35998 l
+ 405.96699 313.95999 l
+ 404.28698 315.03999 l
+ 402.84698 316.47999 l
+ 401.76699 318.15998 l
+ 401.04699 320.07899 l
+ 400.80699 322.11898 l
+ b* 
+ BT
+ 8.98149 0 0 8.98149 407.40669 319.47938 Tm
+ 0 0 0 sc
+ (2)Tj 
+ ET
+ 198.62399 322.11898 m
+ 246.61999 322.11898 l
+ S 
+ 252.5 322.11898 m
+ 244.69999 318.15998 l
+ 244.81999 318.63899 l
+ 245.05999 318.99899 l
+ 245.53999 320.91899 l
+ 245.53999 323.31898 l
+ 245.05999 325.23899 l
+ 244.81999 325.59899 l
+ 244.69999 326.07899 l
+ 252.5 322.11898 l
+ f* 
+ 327.13299 328.47898 m
+ 327.85299 333.87799 l
+ 328.57299 338.43798 l
+ 329.53298 342.15798 l
+ 330.49299 345.15699 l
+ 331.45298 347.31698 l
+ 332.41299 348.51699 l
+ 333.37298 348.99699 l
+ 334.45298 348.63699 l
+ 335.41299 347.43699 l
+ 336.37298 345.39698 l
+ 337.33299 342.51699 l
+ 338.17199 338.79798 l
+ 339.01199 334.47799 l
+ S 
+ 339.85198 328.47898 m
+ 334.81298 335.79798 l
+ 335.29299 335.67799 l
+ 335.77299 335.55799 l
+ 336.25299 335.43798 l
+ 336.73298 335.43798 l
+ 337.21299 335.31799 l
+ 338.17199 335.31799 l
+ 338.65199 335.43798 l
+ 339.13198 335.43798 l
+ 339.61199 335.55799 l
+ 340.09199 335.67799 l
+ 340.57199 335.79798 l
+ 341.05198 335.91799 l
+ 341.41198 336.15798 l
+ 341.89199 336.39799 l
+ 342.25199 336.63798 l
+ 342.73199 336.87799 l
+ 339.85198 328.47898 l
+ f* 
+ BT
+ /N174 1 Tf
+ 8.98149 0 0 8.98149 287.41668 328.47859 Tm
+ 0.00408 Tc
+ (letter)Tj 
+ 2.35128 3.09939 TD
+ 0.00358 Tc
+ -0.00088 Tw
+ (letter or digit)Tj 
+ 5.63778 -2.99259 TD
+ 0.00389 Tc
+ 0 Tw
+ (oth)Tj [12.29998 ]TJ (e)Tj [-1.09999 ]TJ (r)Tj 
+ -16.35229 -0.05339 TD
+ 0.00509 Tc
+ (star)Tj [4.09999 ]TJ (t)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 423.24539 308.92028 Tm
+ 0 Tc
+ ( )Tj 
+ /N170 1 Tf
+ -16.93998 -1.40998 TD
+ -0.00149 Tc
+ 0.00149 Tw
+ (F)Tj [9.29998 ]TJ (i)Tj [-3.69999 ]TJ (gure 2)Tj [-11.5 ]TJ (-)Tj [1.5 ]TJ (1: )Tj 
+ /N231 1 Tf
+ 5 0 TD
+ 0.00109 Tc
+ -0.00109 Tw
+ (F)Tj [7.19999 ]TJ (i)Tj [-1.09999 ]TJ (nite)Tj [4.89999 ]TJ ( Sta)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ (e)Tj [4.89999 ]TJ ( Automa)Tj [4.89999 ]TJ (ton )Tj 
+ -15.82998 -1.64999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00209 Tc
+ 0.03199 Tw
+ (I)Tj [10.89999 ]TJ (n)Tj [-2.09999 ]TJ ( )Tj [-10.09999 ]TJ (Fi)Tj [-4.29998 ]TJ (g)Tj [7.89999 ]TJ (u)Tj [-12.09999 ]TJ (re 2-1, st)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (e 0 i)Tj [-4.29998 ]TJ (s)Tj [-2.89999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e st)Tj [-4.29998 ]TJ (art)Tj [-4.29998 ]TJ ( st)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (e, and st)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (e 2 i)Tj [-4.29998 ]TJ (s)Tj [-2.89999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e accept)Tj [-4.29998 ]TJ (i)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ (g)Tj [7.89999 ]TJ ( st)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (e. As)Tj [-12.89999 ]TJ ( chara)Tj [-8.29998 ]TJ (c)Tj [1.69999 ]TJ (t)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (rs ar)Tj [-9.09999 ]TJ (e )Tj 
+ T*
+ 0.00209 Tc
+ 0.12789 Tw
+ (r)Tj [5.09999 ]TJ (e)Tj [5.89999 ]TJ (a)Tj [5.89999 ]TJ (d)Tj [2.09999 ]TJ (,)Tj [-7.89999 ]TJ ( we ma)Tj [5.89999 ]TJ (ke a)Tj [5.89999 ]TJ ( t)Tj [-10.09999 ]TJ (r)Tj [5.09999 ]TJ (a)Tj [5.89999 ]TJ (n)Tj [2.09999 ]TJ (sition f)Tj [5.09999 ]TJ (r)Tj [5.09999 ]TJ (o)Tj [2.09999 ]TJ (m on)Tj [-7.89999 ]TJ (e)Tj [5.89999 ]TJ ( sta)Tj [5.89999 ]TJ (t)Tj [-0.09999 ]TJ (e to )Tj [-10 ]TJ (a)Tj [5.89999 ]TJ (n)Tj [-7.89999 ]TJ (othe)Tj [5.89999 ]TJ (r)Tj [5.09999 ]TJ (.)Tj [2.09999 ]TJ ( Whe)Tj [5.89999 ]TJ (n)Tj [2.09999 ]TJ ( the f)Tj [5.09999 ]TJ (i)Tj [-0.09999 ]TJ (r)Tj [5.09999 ]TJ (s)Tj [1.29998 ]TJ (t l)Tj [-10.09999 ]TJ (e)Tj [5.89999 ]TJ (tte)Tj [5.89999 ]TJ (r)Tj [5.09999 ]TJ ( is re)Tj [5.89999 ]TJ (a)Tj [5.89999 ]TJ (d)Tj [2.09999 ]TJ (,)Tj [-7.89999 ]TJ ( we )Tj 
+ 0 -1.13999 TD
+ 0.00788 Tw
+ (tr)Tj [5.09999 ]TJ (a)Tj [5.89999 ]TJ (n)Tj [2.09999 ]TJ (sition to sta)Tj [5.89999 ]TJ (t)Tj [-0.09999 ]TJ (e)Tj [5.89999 ]TJ ( 1. We)Tj [5.89999 ]TJ ( re)Tj [5.89999 ]TJ (ma)Tj [5.89999 ]TJ (in in sta)Tj [5.89999 ]TJ (t)Tj [-0.09999 ]TJ (e)Tj [5.89999 ]TJ ( 1)Tj [-7.89999 ]TJ ( a)Tj [5.89999 ]TJ (s)Tj [1.29998 ]TJ ( more)Tj [5.89999 ]TJ ( )Tj [-10 ]TJ (le)Tj [5.89999 ]TJ (tte)Tj [5.89999 ]TJ (r)Tj [5.09999 ]TJ (s)Tj [1.29998 ]TJ ( or)Tj [5.09999 ]TJ ( di)Tj [-10.09999 ]TJ (g)Tj [12.09999 ]TJ (its ar)Tj [5.09999 ]TJ (e)Tj [5.89999 ]TJ ( )Tj [-10 ]TJ (r)Tj [5.09999 ]TJ (e)Tj [5.89999 ]TJ (a)Tj [5.89999 ]TJ (d)Tj [2.09999 ]TJ (.)Tj [-7.89999 ]TJ ( )Tj [-10 ]TJ (Whe)Tj [5.89999 ]TJ (n)Tj [2.09999 ]TJ ( we)Tj [5.89999 ]TJ ( re)Tj [5.89999 ]TJ (a)Tj [5.89999 ]TJ (d)Tj [-7.89999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00199 Tc
+ 0.11199 Tw
+ (a char)Tj [-9 ]TJ (act)Tj [-4.19999 ]TJ (er ot)Tj [-4.19999 ]TJ (he)Tj [-8.19999 ]TJ (r t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (an a l)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (t)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (r or di)Tj [-4.19999 ]TJ (g)Tj [8 ]TJ (i)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (,)Tj [-2 ]TJ ( we t)Tj [-4.19999 ]TJ (r)Tj [1 ]TJ (ansi)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (on t)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ ( st)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (e 2, )Tj [10 ]TJ (t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e accept)Tj [-14.19999 ]TJ (i)Tj [-4.19999 ]TJ (ng)Tj [8 ]TJ ( st)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (e. )Tj 
+ /N171 1 Tf
+ 34.43998 0 TD
+ -0.00039 Tc
+ 0 Tw
+ (Any)Tj 
+ /N231 1 Tf
+ 1.55999 0 TD
+ 0 Tc
+ ( )Tj 
+ -36 -1.14999 TD
+ -0.00219 Tc
+ 0.20219 Tw
+ (FS)Tj [-6.09999 ]TJ (A m)Tj [-4.39999 ]TJ (a)Tj [-8.39999 ]TJ (y)Tj [17.79998 ]TJ ( be ex)Tj [-12.19999 ]TJ (pressed as a com)Tj [-4.39999 ]TJ (put)Tj [-4.39999 ]TJ (er program)Tj [-4.39999 ]TJ (.)Tj [-12.19999 ]TJ ( For ex)Tj [-12.19999 ]TJ (am)Tj [-4.39999 ]TJ (pl)Tj [-4.39999 ]TJ (e, our 3-st)Tj [-4.39999 ]TJ (a)Tj [11.59999 ]TJ (t)Tj [-4.39999 ]TJ (e m)Tj [-4.39999 ]TJ (achi)Tj [-4.39999 ]TJ (n)Tj [-2.19999 ]TJ (e i)Tj [-4.39999 ]TJ (s)Tj [-3 ]TJ ( )Tj 
+ T*
+ 0.00189 Tc
+ -0.00189 Tw
+ (e)Tj [5.69999 ]TJ (a)Tj [5.69999 ]TJ (s)Tj [1.09999 ]TJ (il)Tj [-10.29998 ]TJ (y)Tj [21.89999 ]TJ ( p)Tj [-8.09999 ]TJ (r)Tj [4.89999 ]TJ (o)Tj [-8.09999 ]TJ (g)Tj [11.89999 ]TJ (r)Tj [4.89999 ]TJ (a)Tj [5.69999 ]TJ (mme)Tj [5.69999 ]TJ (d: )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 7 7
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 7)Tj 
+ 0 55.84999 TD
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ ET
+ 1 1 1 sc
+ 
+ 124.58999 692.40798 398.84698 -12.47898 rf
+ BT
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 683.40908 Tm
+ 0 0 0 sc
+ -0.00219 Tc
+ (start:)Tj [-1195.69999 ]TJ (goto)Tj [-597.89999 ]TJ (state0)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 679.92898 398.84698 -12.47898 rf
+ 124.58999 667.44999 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 126.03019 658.45118 Tm
+ 0 0 0 sc
+ (state0:)Tj [-597.89999 ]TJ (read)Tj [-597.89999 ]TJ (c)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 654.97099 398.84698 -12.35899 rf
+ BT
+ 11.03909 0 0 11.03909 178.82609 645.97219 Tm
+ 0 0 0 sc
+ (if)Tj [-597.89999 ]TJ (c)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (letter)Tj [-597.89999 ]TJ (goto)Tj [-597.89999 ]TJ (state1)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 642.61199 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 178.82609 633.61318 Tm
+ 0 0 0 sc
+ (goto)Tj [-597.89999 ]TJ (state0)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 630.13398 398.84698 -12.47898 rf
+ 124.58999 617.65499 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 126.03019 608.65528 Tm
+ 0 0 0 sc
+ (state1:)Tj [-597.89999 ]TJ (read)Tj [-597.89999 ]TJ (c)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 605.17599 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 178.82609 596.17628 Tm
+ 0 0 0 sc
+ (if)Tj [-597.89999 ]TJ (c)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (letter)Tj [-597.89999 ]TJ (goto)Tj [-597.89999 ]TJ (state1)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 592.69699 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 178.82609 583.69738 Tm
+ 0 0 0 sc
+ (if)Tj [-597.89999 ]TJ (c)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (digit)Tj [-597.89999 ]TJ (goto)Tj [-597.89999 ]TJ (state1)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 580.21798 398.84698 -12.35899 rf
+ BT
+ 11.03909 0 0 11.03909 178.82609 571.21839 Tm
+ 0 0 0 sc
+ (goto)Tj [-597.89999 ]TJ (state2)Tj 
+ ET
+ 1 1 1 sc
+ 124.58999 567.85899 398.84698 -12.47898 rf
+ 124.58999 555.37998 398.84698 -12.47898 rf
+ BT
+ 11.03909 0 0 11.03909 126.03019 546.38049 Tm
+ 0 0 0 sc
+ (state2:)Tj [-597.89999 ]TJ (accept)Tj [-597.89999 ]TJ (string)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 532.10169 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ -0.00178 Tc
+ 0.02178 Tw
+ (Thi)Tj [-4 ]TJ (s)Tj [-2.59999 ]TJ ( i)Tj [-4 ]TJ (s)Tj [-2.59999 ]TJ ( )Tj [10 ]TJ (t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (e t)Tj [-4 ]TJ (echni)Tj [-4 ]TJ (que used b)Tj [-11.79998 ]TJ (y)Tj [28.19999 ]TJ ( l)Tj [-4 ]TJ (e)Tj [2 ]TJ (x)Tj [-11.79998 ]TJ (.)Tj [-1.79998 ]TJ ( R)Tj [-4.79998 ]TJ (e)Tj [2 ]TJ (g)Tj [8.19999 ]TJ (u)Tj [-1.79998 ]TJ (l)Tj [-4 ]TJ (a)Tj [2 ]TJ (r ex)Tj [-11.79998 ]TJ (press)Tj [-12.59999 ]TJ (i)Tj [-4 ]TJ (ons are t)Tj [-4 ]TJ (r)Tj [1.19999 ]TJ (ansl)Tj [-4 ]TJ (at)Tj [-4 ]TJ (ed b)Tj [-11.79998 ]TJ (y)Tj [18.19999 ]TJ ( l)Tj [-4 ]TJ (e)Tj [2 ]TJ (x)Tj [-11.79998 ]TJ ( t)Tj [-4 ]TJ (o)Tj [-1.79998 ]TJ ( a com)Tj [-4 ]TJ (put)Tj [-4 ]TJ (er)Tj [11.19999 ]TJ ( )Tj 
+ T*
+ 0.00079 Tc
+ 0.05918 Tw
+ (pr)Tj [3.79998 ]TJ (ogr)Tj [3.79998 ]TJ (a)Tj [4.59999 ]TJ (m)Tj [-1.39999 ]TJ ( tha)Tj [4.59999 ]TJ (t)Tj [-1.39999 ]TJ ( mimic)Tj [4.59999 ]TJ (s a)Tj [4.59999 ]TJ (n)Tj [0.79998 ]TJ ( )Tj [-10 ]TJ (F)Tj [6.89999 ]TJ (S)Tj [-3.09999 ]TJ (A. Usin)Tj [-9.19999 ]TJ (g)Tj [10.79998 ]TJ ( the)Tj [4.59999 ]TJ ( n)Tj [-9.19999 ]TJ (e)Tj [4.79998 ]TJ (x)Tj [-9.19999 ]TJ (t)Tj [-1.39999 ]TJ ( )Tj 
+ /N171 1 Tf
+ 18.68998 0 TD
+ 0.00109 Tc
+ 0 Tw
+ (inp)Tj [11.09999 ]TJ (u)Tj [1.09999 ]TJ (t)Tj 
+ /N231 1 Tf
+ 2.04998 0 TD
+ -0.00199 Tc
+ 0.06199 Tw
+ ( chara)Tj [-8.19999 ]TJ (c)Tj [1.79998 ]TJ (t)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (r,)Tj [-12 ]TJ ( and )Tj 
+ /N171 1 Tf
+ 6.28999 0 TD
+ -0.00009 Tc
+ 0.06008 Tw
+ (current)Tj [-12.29998 ]TJ ( state)Tj 
+ /N231 1 Tf
+ 5.14999 0 TD
+ -0.00119 Tc
+ 0.06118 Tw
+ (, the nex)Tj [-11.19999 ]TJ (t)Tj [-3.39999 ]TJ ( )Tj 
+ -32.17999 -1.14999 TD
+ -0.00199 Tc
+ 0.00199 Tw
+ (st)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (e i)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( easi)Tj [-4.19999 ]TJ (l)Tj [-14.19999 ]TJ (y)Tj [18 ]TJ ( d)Tj [-12 ]TJ (e)Tj [1.79998 ]TJ (t)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (rm)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ (ed)Tj [-12 ]TJ ( b)Tj [-12 ]TJ (y)Tj [18 ]TJ ( i)Tj [-4.19999 ]TJ (ndex)Tj [-12 ]TJ (i)Tj [-4.19999 ]TJ (ng)Tj [8 ]TJ ( i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ (t)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ ( a com)Tj [-4.19999 ]TJ (p)Tj [-12 ]TJ (ut)Tj [-4.19999 ]TJ (er-)Tj [-9 ]TJ (g)Tj [8 ]TJ (en)Tj [-12 ]TJ (erat)Tj [-4.19999 ]TJ (ed st)Tj [-14.19999 ]TJ (at)Tj [-4.19999 ]TJ (e t)Tj [-4.19999 ]TJ (a)Tj [1.79998 ]TJ (bl)Tj [-4.19999 ]TJ (e)Tj [-8.19999 ]TJ (.)Tj [-1.89999 ]TJ ( )Tj 
+ T*
+ -0.00048 Tc
+ 0.06048 Tw
+ ( )Tj [-1190 ]TJ (Now we c)Tj [-6.69999 ]TJ (a)Tj [3.29998 ]TJ (n easil)Tj [-22.69999 ]TJ (y)Tj [29.5 ]TJ ( und)Tj [-10.5 ]TJ (e)Tj [-6.69999 ]TJ (r)Tj [2.5 ]TJ (stand some of lex)Tj [-10.5 ]TJ (\222)Tj [2.5 ]TJ (s limi)Tj [7.29998 ]TJ (tations. F)Tj [5.59999 ]TJ (o)Tj [-0.5 ]TJ (r ex)Tj [-10.5 ]TJ (ample, lex cannot be )Tj 
+ T*
+ -0.00158 Tc
+ 0.04159 Tw
+ (used t)Tj [-3.79998 ]TJ (o)Tj [-1.59999 ]TJ ( recog)Tj [8.39999 ]TJ (n)Tj [-1.59999 ]TJ (i)Tj [-3.79998 ]TJ (z)Tj [-7.79998 ]TJ (e nest)Tj [-3.79998 ]TJ (ed )Tj [-10 ]TJ (st)Tj [-3.79998 ]TJ (ruct)Tj [-3.79998 ]TJ (ures such as parent)Tj [-13.79998 ]TJ (heses. Nest)Tj [-3.79998 ]TJ (ed st)Tj [-3.79998 ]TJ (ruct)Tj [-3.79998 ]TJ (ures )Tj [-10 ]TJ (are handl)Tj [-3.79998 ]TJ (ed b)Tj [-21.59999 ]TJ (y)Tj [18.39999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00119 Tc
+ 0.01119 Tw
+ (incorporatin)Tj [-11.19999 ]TJ (g)Tj [8.79998 ]TJ ( a stack. W)Tj [-7.39999 ]TJ (h)Tj [-1.19999 ]TJ (enever w)Tj [-9 ]TJ (e)Tj [2.59999 ]TJ ( encounte)Tj [-7.39999 ]TJ (r)Tj [1.79998 ]TJ ( a \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 330.49308 449.06858 Tm
+ 0 Tc
+ 0 Tw
+ (\()Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 337.09259 449.06858 Tm
+ -0.00079 Tc
+ 0.01078 Tw
+ (\224, we push it on the stac)Tj [13 ]TJ (k. W)Tj [-7 ]TJ (h)Tj [-0.79998 ]TJ (en a \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 510.11808 449.06858 Tm
+ 0 Tc
+ 0 Tw
+ (\))Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 516.71759 449.06858 Tm
+ -0.00379 Tc
+ (\224 )Tj 
+ -35.55999 -1.18998 TD
+ -0.00059 Tc
+ 0.09059 Tw
+ (is encountered, w)Tj [-8.39999 ]TJ (e)Tj [3.19999 ]TJ ( matc)Tj [-6.79998 ]TJ (h it with the top of the s)Tj [8.59999 ]TJ (t)Tj [-2.79998 ]TJ (ack, and pop the stack. )Tj [-10 ]TJ (L)Tj [10.19999 ]TJ (e)Tj [3.19999 ]TJ (x)Tj [-10.59999 ]TJ (,)Tj [-0.59999 ]TJ ( howeve)Tj [-6.79998 ]TJ (r)Tj [2.39999 ]TJ (,)Tj [-10.59999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00009 Tc
+ 0.08009 Tw
+ (onl)Tj [-12.29998 ]TJ (y)Tj [29.89999 ]TJ ( h)Tj [-10.09999 ]TJ (a)Tj [3.69999 ]TJ (s states and trans)Tj [-10.89999 ]TJ (itions between states. Si)Tj [7.69999 ]TJ (nce it has no stack, it i)Tj [7.69999 ]TJ (s)Tj [-0.89999 ]TJ ( )Tj [10 ]TJ (not well suited)Tj [9.89999 ]TJ ( )Tj 
+ T*
+ -0.00199 Tc
+ 0.23199 Tw
+ (for parsi)Tj [-4.19999 ]TJ (n)Tj [-12 ]TJ (g)Tj [8 ]TJ ( nest)Tj [-4.19999 ]TJ (ed st)Tj [-4.19999 ]TJ (ruct)Tj [-4.19999 ]TJ (ures. Yacc au)Tj [-12 ]TJ (g)Tj [8 ]TJ (m)Tj [-4.19999 ]TJ (ent)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( a)Tj [-8.19999 ]TJ (n)Tj [-2 ]TJ ( FS)Tj [-5.89999 ]TJ (A wi)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ ( a s)Tj [7.19999 ]TJ (t)Tj [-4.19999 ]TJ (ack, and can process)Tj [-12.79998 ]TJ ( )Tj 
+ T*
+ 0.00109 Tc
+ 0.06889 Tw
+ (c)Tj [4.89999 ]TJ (onstr)Tj [4.09999 ]TJ (uc)Tj [4.89999 ]TJ (ts suc)Tj [4.89999 ]TJ (h)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ (s)Tj [0.29998 ]TJ ( pa)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (nt)Tj [-11.09999 ]TJ (he)Tj [4.89999 ]TJ (se)Tj [4.89999 ]TJ (s with e)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (s)Tj [0.29998 ]TJ (e)Tj [4.89999 ]TJ (.)Tj [1.09999 ]TJ ( The)Tj [4.89999 ]TJ ( impor)Tj [4.09999 ]TJ (ta)Tj [4.89999 ]TJ (nt thing)Tj [11.09999 ]TJ ( is to use)Tj [4.89999 ]TJ ( th)Tj [11.09999 ]TJ (e)Tj [4.89999 ]TJ ( r)Tj [4.09999 ]TJ (i)Tj [-1.09999 ]TJ (g)Tj [11.09999 ]TJ (h)Tj [1.09999 ]TJ (t tool f)Tj [4.09999 ]TJ (o)Tj [1.09999 ]TJ (r )Tj 
+ T*
+ -0.00048 Tc
+ 0.00048 Tw
+ (the job. )Tj [-10 ]TJ (L)Tj [20.29998 ]TJ (e)Tj [3.29998 ]TJ (x)Tj [-10.5 ]TJ ( is g)Tj [9.5 ]TJ (ood )Tj [-10 ]TJ (at pa)Tj [-6.59999 ]TJ (ttern matching)Tj [9.5 ]TJ (. )Tj [-10 ]TJ (Yac)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ ( is a)Tj [-6.69999 ]TJ (ppropriate fo)Tj [-10.5 ]TJ (r more ch)Tj [-10.5 ]TJ (alleng)Tj [9.5 ]TJ (in)Tj [-10.5 ]TJ (g)Tj [9.5 ]TJ ( tasks. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 343.83738 Tm
+ 0.00028 Tc
+ 0.58648 Tw
+ (2.2 Practice )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 323.43908 Tm
+ 1.25 Tc
+ 0 Tw
+ (  )Tj 
+ /N174 1 Tf
+ 9.95919 0 0 9.95919 160.10729 304.60058 Tm
+ -0.00158 Tc
+ (M)Tj [12.09999 ]TJ (e)Tj [0.29998 ]TJ (tac)Tj [-7.59999 ]TJ (har)Tj [-5.89999 ]TJ (ac)Tj [-7.59999 ]TJ (ter)Tj [-1933.59999 ]TJ (M)Tj [12.09999 ]TJ (atc)Tj [-7.59999 ]TJ (hes)Tj 
+ /N173 1 Tf
+ 0.01199 -1.24099 TD
+ 0 Tc
+ (.)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00199 Tc
+ 0.00129 Tw
+ (any)Tj [28.09999 ]TJ ( c)Tj [-8 ]TJ (har)Tj [-6.29998 ]TJ (ac)Tj [-8 ]TJ (ter)Tj [-6.29998 ]TJ ( ex)Tj [-8 ]TJ (c)Tj [-8 ]TJ (ept new)Tj [9.29998 ]TJ (line)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ (\\n)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00299 Tc
+ (new)Tj [8.29998 ]TJ (line)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0 Tc
+ (*)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00189 Tc
+ 0.00119 Tw
+ (z)Tj [16.19999 ]TJ (e)Tj [0 ]TJ (r)Tj [-6.19999 ]TJ (o)Tj [0 ]TJ ( or)Tj [-6.19999 ]TJ ( m)Tj [-24.29998 ]TJ (o)Tj [0 ]TJ (r)Tj [-6.19999 ]TJ (e)Tj [0 ]TJ ( c)Tj [-7.89999 ]TJ (opies)Tj [-7.89999 ]TJ ( of)Tj [-13.19999 ]TJ ( pr)Tj [-6.19999 ]TJ (ec)Tj [-7.89999 ]TJ (eding ex)Tj [-7.89999 ]TJ (pr)Tj [-6.19999 ]TJ (es)Tj [-7.89999 ]TJ (s)Tj [-7.89999 ]TJ (i)Tj [3.39999 ]TJ (on)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0 Tc
+ 0 Tw
+ (+)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00199 Tc
+ 0.00129 Tw
+ (one or)Tj [-6.29998 ]TJ ( m)Tj [-24.39999 ]TJ (o)Tj [-0.09999 ]TJ (r)Tj [-6.29998 ]TJ (e)Tj [-0.09999 ]TJ ( c)Tj [-8 ]TJ (opies)Tj [-8 ]TJ ( of)Tj [-13.29998 ]TJ ( pr)Tj [-6.29998 ]TJ (ec)Tj [-8 ]TJ (eding ex)Tj [-8 ]TJ (pr)Tj [-6.29998 ]TJ (es)Tj [-8 ]TJ (s)Tj [-8 ]TJ (i)Tj [3.29998 ]TJ (on)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31318 TD
+ 0 Tc
+ 0 Tw
+ (?)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00189 Tc
+ 0.00119 Tw
+ (z)Tj [16.19999 ]TJ (e)Tj [0 ]TJ (r)Tj [-6.19999 ]TJ (o)Tj [0 ]TJ ( or)Tj [-6.19999 ]TJ ( one c)Tj [-7.89999 ]TJ (opy)Tj [28.19999 ]TJ ( of)Tj [-13.19999 ]TJ ( pr)Tj [-6.19999 ]TJ (ec)Tj [-7.89999 ]TJ (eeding ex)Tj [-7.89999 ]TJ (pr)Tj [-6.19999 ]TJ (es)Tj [-7.89999 ]TJ (s)Tj [-7.89999 ]TJ (i)Tj [3.39999 ]TJ (on)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0 Tc
+ 0 Tw
+ (^)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00268 Tc
+ 0.00199 Tw
+ (beginning of)Tj [-14 ]TJ ( line)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0 Tc
+ 0 Tw
+ ($)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00248 Tc
+ 0.00178 Tw
+ (end of)Tj [-13.79998 ]TJ ( line)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (a|b)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00169 Tc
+ 0.00099 Tw
+ (a or)Tj [-6 ]TJ ( b)Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (\(ab\)+)Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00199 Tc
+ 0.00129 Tw
+ (one or)Tj [-6.29998 ]TJ ( m)Tj [-24.39999 ]TJ (o)Tj [-0.09999 ]TJ (r)Tj [-6.29998 ]TJ (e)Tj [-0.09999 ]TJ ( c)Tj [-8 ]TJ (opies)Tj [-8 ]TJ ( of)Tj [-13.29998 ]TJ ( ab \()Tj [-6.29998 ]TJ (g)Tj [-0.09999 ]TJ (r)Tj [-6.29998 ]TJ (ouping\))Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ ("a+b")Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00299 Tc
+ 0.00228 Tw
+ (liter)Tj [-7.29998 ]TJ (al \223)Tj [-7.29998 ]TJ (a)Tj [-1.09999 ]TJ (+b\224)Tj [-7.29998 ]TJ ( \()Tj [-7.29998 ]TJ (C)Tj [-3.69999 ]TJ ( es)Tj [-9 ]TJ (c)Tj [-9 ]TJ (apes)Tj [-9 ]TJ ( s)Tj [-9 ]TJ (t)Tj [-2.29998 ]TJ (ill w)Tj [8.29998 ]TJ (o)Tj [-1.09999 ]TJ (r)Tj [-7.29998 ]TJ (k)Tj [-21.09999 ]TJ (\))Tj 
+ /N173 1 Tf
+ -8.30119 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ ([])Tj 
+ /N228 1 Tf
+ 8.30119 0 TD
+ -0.00178 Tc
+ 0.00109 Tw
+ (c)Tj [-7.79998 ]TJ (har)Tj [-6.09999 ]TJ (ac)Tj [-7.79998 ]TJ (ter)Tj [-6.09999 ]TJ ( c)Tj [-7.79998 ]TJ (l)Tj [3.5 ]TJ (as)Tj [-7.79998 ]TJ (s)Tj 
+ ET
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 0 J
+ 0 j
+ 0.21598 w
+ 10 M
+ []0 d
+ 158.18699 314.55999 m
+ 453.96299 314.55999 l
+ S 
+ 158.18699 314.55999 295.77499 -0.95999 rf
+ 158.18699 302.20098 m
+ 453.96299 302.20098 l
+ S 
+ 158.18699 302.20098 295.77499 -0.95999 rf
+ 158.18699 158.33299 m
+ 453.96299 158.33299 l
+ S 
+ 158.18699 158.33299 295.77499 -0.95999 rf
+ BT
+ /N170 1 Tf
+ 11.99899 0 0 11.99899 454.32279 157.37289 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ -20.30999 -1.90998 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (Table 2-1: )Tj 
+ /N231 1 Tf
+ 4.60998 0 TD
+ 0.00199 Tc
+ -0.00199 Tw
+ (Pa)Tj [5.79998 ]TJ (tte)Tj [5.79998 ]TJ (r)Tj [5 ]TJ (n)Tj [2 ]TJ ( Ma)Tj [5.79998 ]TJ (tching)Tj [12 ]TJ ( Pr)Tj [5 ]TJ (imitive)Tj [5.79998 ]TJ (s)Tj [1.19999 ]TJ ( )Tj 
+ -14.65998 -1.64999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 8 8
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 8)Tj 
+ /N174 1 Tf
+ 9.95919 0 0 9.95919 168.74659 710.16688 Tm
+ -0.00209 Tc
+ (Ex)Tj [-8.09999 ]TJ (pr)Tj [-6.39999 ]TJ (es)Tj [-8.09999 ]TJ (s)Tj [-8.09999 ]TJ (i)Tj [3.19999 ]TJ (on)Tj [-5421.79998 ]TJ (M)Tj [11.59999 ]TJ (a)Tj [-0.19999 ]TJ (tc)Tj [-8.09999 ]TJ (hes)Tj 
+ /N173 1 Tf
+ 0.01199 -1.24099 TD
+ 0.00239 Tc
+ (abc)Tj [-8566.29998 ]TJ (abc)Tj 
+ 0 -1.31329 TD
+ (abc*)Tj [-7963.89999 ]TJ (ab,)Tj [-602.39999 ]TJ (abc,)Tj [-602.39999 ]TJ (abcc,)Tj [-602.39999 ]TJ (abccc,)Tj [-602.39999 ]TJ (\205)Tj 
+ T*
+ (abc+)Tj [-7963.89999 ]TJ (abc,)Tj [-602.39999 ]TJ (abcc,)Tj [-602.39999 ]TJ (abccc,)Tj [-602.39999 ]TJ (\205)Tj 
+ T*
+ (a\(bc\)+)Tj [-6759 ]TJ (abc,)Tj [-602.39999 ]TJ (abcbc,)Tj [-602.39999 ]TJ (abcbcbc,)Tj [-602.39999 ]TJ (\205)Tj 
+ T*
+ (a\(bc\)?)Tj [-6759 ]TJ (a,)Tj [-602.39999 ]TJ (abc)Tj 
+ T*
+ ([abc])Tj [-7361.39999 ]TJ (a,)Tj [-602.39999 ]TJ (b,)Tj [-602.39999 ]TJ (c)Tj 
+ T*
+ ([a-z])Tj 
+ /N228 1 Tf
+ 10.36138 0.01199 TD
+ -0.00119 Tc
+ 0.00048 Tw
+ (any)Tj [28.89999 ]TJ ( letter, )Tj 
+ /N173 1 Tf
+ 4.62649 0 TD
+ 0 Tc
+ 0 Tw
+ (a)Tj 
+ /N228 1 Tf
+ 0.60238 0 TD
+ -0.00158 Tc
+ 0.00088 Tw
+ ( thr)Tj [-5.89999 ]TJ (ough )Tj 
+ /N173 1 Tf
+ 3.93978 0 TD
+ 0 Tc
+ 0 Tw
+ (z)Tj 
+ -19.53009 -1.32528 TD
+ 0.00239 Tc
+ ([a\\-z])Tj [-6759 ]TJ (a,)Tj [-602.39999 ]TJ (-,)Tj [-602.39999 ]TJ (z)Tj 
+ 0 -1.31329 TD
+ ([-az])Tj [-7361.39999 ]TJ (-,)Tj [-602.39999 ]TJ (a,)Tj [-602.39999 ]TJ (z)Tj 
+ T*
+ ([A-Za-z0-9]+)Tj 
+ /N228 1 Tf
+ 10.36138 0 TD
+ -0.00209 Tc
+ 0.00138 Tw
+ (one or)Tj [-6.39999 ]TJ ( m)Tj [-24.5 ]TJ (o)Tj [-0.19999 ]TJ (r)Tj [-6.39999 ]TJ (e)Tj [-0.19999 ]TJ ( alphanum)Tj [-24.5 ]TJ (er)Tj [-6.39999 ]TJ (ic)Tj [-8.09999 ]TJ ( c)Tj [-8.09999 ]TJ (har)Tj [-6.39999 ]TJ (ac)Tj [-8.09999 ]TJ (ter)Tj [-6.39999 ]TJ (s)Tj 
+ /N173 1 Tf
+ -10.36138 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ ([)Tj [-602.39999 ]TJ (\\t\\n]+)Tj 
+ /N228 1 Tf
+ 10.36138 0 TD
+ -0.00219 Tc
+ (w)Tj [9.09999 ]TJ (h)Tj [-0.29998 ]TJ (ites)Tj [-8.19999 ]TJ (pac)Tj [-8.19999 ]TJ (e)Tj 
+ /N173 1 Tf
+ -10.36138 -1.31329 TD
+ 0.00239 Tc
+ ([^ab])Tj 
+ /N228 1 Tf
+ 10.36138 0.01208 TD
+ -0.00178 Tc
+ 0.00109 Tw
+ (any)Tj [28.29998 ]TJ (thing ex)Tj [-7.79998 ]TJ (c)Tj [-7.79998 ]TJ (ept: )Tj 
+ /N173 1 Tf
+ 7.51809 0 TD
+ 0.00239 Tc
+ 0 Tw
+ (a,)Tj [-602.39999 ]TJ (b)Tj 
+ -17.87948 -1.32528 TD
+ ([a^b])Tj [-7361.39999 ]TJ (a,)Tj [-602.39999 ]TJ (^,)Tj [-602.39999 ]TJ (b)Tj 
+ 0 -1.31329 TD
+ ([a|b])Tj [-7361.39999 ]TJ (a,)Tj [-602.39999 ]TJ (|,)Tj [-602.39999 ]TJ (b)Tj 
+ T*
+ (a|b)Tj 
+ 10.37348 0.01208 TD
+ 0 Tc
+ (a)Tj 
+ /N228 1 Tf
+ 1.20478 0 TD
+ -0.00189 Tc
+ (or)Tj 
+ /N173 1 Tf
+ 1.49398 0 TD
+ 0 Tc
+ (b)Tj 
+ ET
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 0 J
+ 0 j
+ 0.21598 w
+ 10 M
+ []0 d
+ 
+ 166.82699 720.12599 m
+ 445.32398 720.12599 l
+ S 
+ 166.82699 720.12599 278.49699 -0.95999 rf
+ 166.82699 707.76699 m
+ 445.32398 707.76699 l
+ S 
+ 166.82699 707.76699 278.49699 -0.95999 rf
+ 166.82699 511.58299 m
+ 445.32398 511.58299 l
+ S 
+ 166.82699 511.58299 278.49699 -0.95999 rf
+ BT
+ /N170 1 Tf
+ 11.99899 0 0 11.99899 445.68348 510.62348 Tm
+ ( )Tj 
+ -19.5 -1.90998 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (Table 2-2: )Tj 
+ /N231 1 Tf
+ 4.60998 0 TD
+ -0.00009 Tc
+ 0.00009 Tw
+ (Pattern Matc)Tj [-6.29998 ]TJ (hing)Tj [9.89999 ]TJ ( Ex)Tj [-10.09999 ]TJ (amples )Tj 
+ -14.75 -1.64999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00088 Tc
+ 0.00088 Tw
+ (Reg)Tj [9.09999 ]TJ (u)Tj [-0.89999 ]TJ (la)Tj [-7.09999 ]TJ (r ex)Tj [-10.89999 ]TJ (pressions in lex)Tj [-10.89999 ]TJ ( are composed of )Tj 
+ /N171 1 Tf
+ 17.68998 0 TD
+ -0.00048 Tc
+ 0 Tw
+ (metac)Tj [-6.69999 ]TJ (haracters)Tj 
+ /N231 1 Tf
+ 6.21998 0 TD
+ -0.00028 Tc
+ 0.00028 Tw
+ ( \(Table 2)Tj [-10.29998 ]TJ (-)Tj [2.69999 ]TJ (1\). Pa)Tj [-6.5 ]TJ (ttern matchin)Tj [-10.29998 ]TJ (g)Tj [-0.29998 ]TJ ( )Tj 
+ -23.90998 -1.14999 TD
+ -0.00189 Tc
+ 0.11189 Tw
+ (ex)Tj [-11.89999 ]TJ (am)Tj [-4.09999 ]TJ (pl)Tj [-4.09999 ]TJ (es are shown i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ ( )Tj [-9.89999 ]TJ (Tabl)Tj [-4.09999 ]TJ (e 2-2. W)Tj [-8.09999 ]TJ (i)Tj [-4.09999 ]TJ (t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ ( a cha)Tj [-8.09999 ]TJ (r)Tj [1.09999 ]TJ (act)Tj [-4.09999 ]TJ (e)Tj [-8.09999 ]TJ (r)Tj [1.09999 ]TJ ( cl)Tj [-4.09999 ]TJ (ass, norm)Tj [-4.09999 ]TJ (a)Tj [1.89999 ]TJ (l)Tj [-4.09999 ]TJ ( op)Tj [-11.89999 ]TJ (er)Tj [-8.89999 ]TJ (at)Tj [-4.09999 ]TJ (ors l)Tj [-4.09999 ]TJ (o)Tj [-1.89999 ]TJ (se t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (ei)Tj [-4.09999 ]TJ (r )Tj 
+ 0 -1.16999 TD
+ -0.00228 Tc
+ 0.02229 Tw
+ (m)Tj [-4.5 ]TJ (eani)Tj [-4.5 ]TJ (n)Tj [-2.29998 ]TJ (g)Tj [7.69999 ]TJ (.)Tj [-2.29998 ]TJ ( T)Tj [-11.5 ]TJ (w)Tj [-0.09999 ]TJ (o oper)Tj [-9.29998 ]TJ (a)Tj [1.5 ]TJ (t)Tj [-4.5 ]TJ (o)Tj [-2.29998 ]TJ (rs al)Tj [-4.5 ]TJ (l)Tj [-4.5 ]TJ (o)Tj [-2.29998 ]TJ (wed i)Tj [-4.5 ]TJ (n)Tj [-2.29998 ]TJ ( a char)Tj [-9.29998 ]TJ (act)Tj [-4.5 ]TJ (e)Tj [-8.5 ]TJ (r)Tj [0.69999 ]TJ ( cl)Tj [-14.5 ]TJ (ass are t)Tj [-4.5 ]TJ (h)Tj [-2.29998 ]TJ (e h)Tj [-22.29998 ]TJ (y)Tj [17.69999 ]TJ (ph)Tj [-12.29998 ]TJ (en \(\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 430.20478 426.27049 Tm
+ 0 Tc
+ 0 Tw
+ (-)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 436.80429 426.27049 Tm
+ -0.00129 Tc
+ 0.03129 Tw
+ (\224)Tj [-7.5 ]TJ (\))Tj [1.69999 ]TJ ( and )Tj [10 ]TJ (circumflex)Tj [-11.29998 ]TJ ( )Tj 
+ -28.89999 -1.20999 TD
+ -0.00299 Tc
+ 0 Tw
+ (\(\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 99.27239 411.75169 Tm
+ 0 Tc
+ (^)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 105.87188 411.75169 Tm
+ -0.00209 Tc
+ 0.11209 Tw
+ (\224\). W)Tj [-8.29998 ]TJ (h)Tj [-2.09999 ]TJ (en used bet)Tj [-4.29998 ]TJ (w)Tj [0.09999 ]TJ (e)Tj [-8.29998 ]TJ (e)Tj [1.69999 ]TJ (n t)Tj [-4.29998 ]TJ (w)Tj [0.09999 ]TJ (o charact)Tj [-14.29998 ]TJ (ers, t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e hy)Tj [17.89999 ]TJ (p)Tj [-12.09999 ]TJ (h)Tj [-2.09999 ]TJ (en r)Tj [-9.09999 ]TJ (e)Tj [1.69999 ]TJ (pres)Tj [-12.89999 ]TJ (ent)Tj [-4.29998 ]TJ (s)Tj [-2.89999 ]TJ ( a ran)Tj [-12.09999 ]TJ (g)Tj [7.89999 ]TJ (e)Tj [-8.29998 ]TJ ( of charact)Tj [-14.29998 ]TJ (ers.)Tj [-12.09999 ]TJ ( )Tj 
+ -1.31999 -1.18998 TD
+ -0.00079 Tc
+ 0.07078 Tw
+ (The cir)Tj [-7.79998 ]TJ (c)Tj [3 ]TJ (umflex)Tj [-10.79998 ]TJ (, when us)Tj [-11.59999 ]TJ (ed as th)Tj [-10.79998 ]TJ (e first )Tj [-10 ]TJ (cha)Tj [-7 ]TJ (r)Tj [2.19999 ]TJ (acte)Tj [-7 ]TJ (r)Tj [2.19999 ]TJ (, )Tj [-10 ]TJ (negates the)Tj [-7 ]TJ ( ex)Tj [-10.79998 ]TJ (pression. )Tj [-10 ]TJ (If two patte)Tj [-7 ]TJ (rns)Tj [-11.59999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00068 Tc
+ 0.03068 Tw
+ (match the same strin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ (, th)Tj [-10.69999 ]TJ (e longest match wins. )Tj [-10 ]TJ (I)Tj [12.29998 ]TJ (n)Tj [-0.69999 ]TJ ( )Tj [-10 ]TJ (case both match)Tj [-10.69999 ]TJ (e)Tj [3.09999 ]TJ (s ar)Tj [-7.69999 ]TJ (e th)Tj [-10.69999 ]TJ (e same len)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ (th, )Tj 
+ T*
+ 0.00119 Tc
+ -0.00119 Tw
+ (the)Tj [5 ]TJ (n)Tj [1.19999 ]TJ ( the)Tj [5 ]TJ ( f)Tj [4.19999 ]TJ (i)Tj [-1 ]TJ (r)Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ (t pa)Tj [5 ]TJ (tte)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (n)Tj [1.19999 ]TJ ( listed is use)Tj [5 ]TJ (d. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -7.96998 TD
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ 0 -1.16999 TD
+ 0.03999 Tw
+ ( )Tj [-1210 ]TJ (I)Tj [13 ]TJ (nput to)Tj [-10 ]TJ ( )Tj [-10 ]TJ (L)Tj [10.79998 ]TJ (e)Tj [3.79998 ]TJ (x)Tj [-10 ]TJ ( is divided i)Tj [-12.19999 ]TJ (n)Tj [0 ]TJ (to three s)Tj [-10.79998 ]TJ (ections, with )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 342.73208 232.60659 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%%)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 355.93099 232.60659 Tm
+ 0.00039 Tc
+ 0.03959 Tw
+ ( dividing)Tj [10.39999 ]TJ ( the)Tj [-5.79998 ]TJ ( sections.)Tj [-9.59999 ]TJ ( This is best )Tj 
+ -22.15998 -1.18998 TD
+ 0.00119 Tc
+ -0.00119 Tw
+ (illustr)Tj [4.19999 ]TJ (a)Tj [5 ]TJ (te)Tj [5 ]TJ (d b)Tj [-8.79998 ]TJ (y)Tj [21.19999 ]TJ ( e)Tj [5 ]TJ (x)Tj [-8.79998 ]TJ (a)Tj [5 ]TJ (m)Tj [-1 ]TJ (ple)Tj [5 ]TJ (.)Tj [1.19999 ]TJ ( T)Tj [-8 ]TJ (h)Tj [1.19999 ]TJ (e)Tj [5 ]TJ ( f)Tj [4.19999 ]TJ (i)Tj [-1 ]TJ (r)Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ (t e)Tj [5 ]TJ (x)Tj [-8.79998 ]TJ (a)Tj [5 ]TJ (m)Tj [-1 ]TJ (ple)Tj [5 ]TJ ( is the)Tj [5.19999 ]TJ ( shor)Tj [4.19999 ]TJ (te)Tj [5 ]TJ (st possible)Tj [5 ]TJ ( le)Tj [5 ]TJ (x)Tj [-8.79998 ]TJ ( f)Tj [4.19999 ]TJ (ile)Tj [5 ]TJ (: )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 192.52999 Tm
+ -0.00219 Tc
+ (%%)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 178.37109 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.02049 Tw
+ (I)Tj [12.5 ]TJ (nput is copied to output, one chara)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ (ter at a time. )Tj [-10 ]TJ (The first )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 374.52949 164.33229 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%%)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 387.72839 164.33229 Tm
+ -0.00199 Tc
+ 0.02198 Tw
+ ( i)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( al)Tj [-4.19999 ]TJ (wa)Tj [-8.19999 ]TJ (y)Tj [18 ]TJ (s)Tj [-2.79998 ]TJ ( r)Tj [-9 ]TJ (e)Tj [-8.19999 ]TJ (qui)Tj [-4.19999 ]TJ (red, as t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (ere )Tj 
+ -24.80999 -1.18998 TD
+ -0.00068 Tc
+ 0.07069 Tw
+ (must alwa)Tj [-6.89999 ]TJ (y)Tj [19.29998 ]TJ (s)Tj [-1.5 ]TJ ( b)Tj [-10.69999 ]TJ (e)Tj [3.09999 ]TJ ( a )Tj [-10 ]TJ (rules s)Tj [-11.5 ]TJ (ection. Howev)Tj [-10.69999 ]TJ (e)Tj [3.09999 ]TJ (r, if )Tj [-10 ]TJ (we d)Tj [-10.69999 ]TJ (on\222t specif)Tj [-17.69999 ]TJ (y)Tj [19.29998 ]TJ ( a)Tj [-6.89999 ]TJ (n)Tj [-20.69999 ]TJ (y)Tj [19.29998 ]TJ ( rules, th)Tj [-10.69999 ]TJ (en the def)Tj [-7.69999 ]TJ (a)Tj [3.09999 ]TJ (ult )Tj 
+ 0 -1.14999 TD
+ -0.00028 Tc
+ 0.15029 Tw
+ (action is to match )Tj [-10 ]TJ (ever)Tj [-17.29998 ]TJ (y)Tj [9.69999 ]TJ (t)Tj [-2.5 ]TJ (hing)Tj [9.69999 ]TJ ( and )Tj [-10 ]TJ (cop)Tj [-20.29998 ]TJ (y)Tj [19.69999 ]TJ ( it to out)Tj [-12.5 ]TJ (put. Defaults fo)Tj [-10.29998 ]TJ (r input a)Tj [-6.5 ]TJ (n)Tj [-0.09999 ]TJ (d output are)Tj [-6.39999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 122.21578 Tm
+ -0.00219 Tc
+ 0 Tw
+ (stdin)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 123.03039 122.21578 Tm
+ -0.00099 Tc
+ 0.20098 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 151.10809 122.21578 Tm
+ -0.00219 Tc
+ 0 Tw
+ (stdout)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 190.70478 122.21578 Tm
+ 0.00129 Tc
+ 0.19869 Tw
+ (, r)Tj [4.29998 ]TJ (e)Tj [-4.89999 ]TJ (spe)Tj [5.09999 ]TJ (c)Tj [5.09999 ]TJ (tive)Tj [5.09999 ]TJ (l)Tj [-10.89999 ]TJ (y)Tj [21.29998 ]TJ (.)Tj [1.29998 ]TJ ( )Tj [-10 ]TJ (He)Tj [5.09999 ]TJ (re)Tj [5.09999 ]TJ ( is the)Tj [5.09999 ]TJ ( sa)Tj [5.09999 ]TJ (me)Tj [5.09999 ]TJ ( e)Tj [5.09999 ]TJ (x)Tj [-8.69999 ]TJ (a)Tj [5.09999 ]TJ (m)Tj [-0.89999 ]TJ (ple)Tj [5.09999 ]TJ (,)Tj [1.29998 ]TJ ( with de)Tj [5.09999 ]TJ (f)Tj [4.29998 ]TJ (a)Tj [5.09999 ]TJ (ults e)Tj [5.09999 ]TJ (x)Tj [-8.69999 ]TJ (plic)Tj [5.09999 ]TJ (it)Tj [9.09999 ]TJ (l)Tj [-10.89999 ]TJ (y)Tj [21.29998 ]TJ ( )Tj 
+ -8.38999 -1.18998 TD
+ -0.00088 Tc
+ 0 Tw
+ (coded: )Tj 
+ ET
+ 1 1 1 sc
+ 225.62199 352.35699 160.78698 -20.87799 rf
+ BT
+ 11.99899 0 0 11.99899 234.02119 334.47808 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ 0.00099 Tc
+ (de)Tj [4.79998 ]TJ (finitions)Tj 
+ /N231 1 Tf
+ 4.22999 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 353.07699 0.71998 -0.71998 rf
+ 224.90199 353.07699 0.71998 -0.71998 rf
+ 225.62199 353.07699 160.78698 -0.71998 rf
+ 386.40798 353.07699 0.71998 -0.71998 rf
+ 386.40798 353.07699 0.71998 -0.71998 rf
+ 224.90199 352.35699 0.71998 -20.87799 rf
+ 386.40798 352.35699 0.71998 -20.87799 rf
+ 1 1 1 sc
+ 225.62199 331.47799 160.78698 -12.35899 rf
+ BT
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 234.02119 322.47909 Tm
+ 0 0 0 sc
+ -0.00219 Tc
+ (%%)Tj 
+ ET
+ 224.90199 331.47799 0.71998 -12.35899 rf
+ 386.40798 331.47799 0.71998 -12.35899 rf
+ 1 1 1 sc
+ 225.62199 319.11898 160.78698 -13.79899 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 234.02119 308.32029 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ -0.00019 Tc
+ (rules)Tj 
+ /N231 1 Tf
+ 2 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 319.11898 0.71998 -13.79899 rf
+ 386.40798 319.11898 0.71998 -13.79899 rf
+ 1 1 1 sc
+ 225.62199 305.32099 160.78698 -12.47898 rf
+ BT
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 234.02119 296.32128 Tm
+ 0 0 0 sc
+ -0.00219 Tc
+ (%%)Tj 
+ ET
+ 224.90199 305.32099 0.71998 -12.47898 rf
+ 386.40798 305.32099 0.71998 -12.47898 rf
+ 1 1 1 sc
+ 225.62199 292.84199 160.78698 -20.87799 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 234.02119 281.92248 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ -0.00009 Tc
+ (subroutines)Tj 
+ /N231 1 Tf
+ 4.66999 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 271.96299 0.71998 -0.71998 rf
+ 224.90199 271.96299 0.71998 -0.71998 rf
+ 225.62199 271.96299 160.78698 -0.71998 rf
+ 386.40798 271.96299 0.71998 -0.71998 rf
+ 386.40798 271.96299 0.71998 -0.71998 rf
+ 224.90199 292.84199 0.71998 -20.87799 rf
+ 386.40798 292.84199 0.71998 -20.87799 rf
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 9 9
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 17.5 Tc
+ 0 Tw
+ ( 9)Tj 
+ 0 55.84999 TD
+ 0 Tc
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 684.72889 Tm
+ -0.00219 Tc
+ (%%)Tj 
+ 2.39129 -1.13038 TD
+ (/*)Tj [-597.89999 ]TJ (match)Tj [-597.89999 ]TJ (everything)Tj [-597.89999 ]TJ (except)Tj [-597.89999 ]TJ (newline)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (.)Tj [-1793.5 ]TJ (ECHO;)Tj 
+ 2.39129 -1.11959 TD
+ (/*)Tj [-597.89999 ]TJ (match)Tj [-597.89999 ]TJ (newline)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (\\n)Tj [-1195.69999 ]TJ (ECHO;)Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (yywrap\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (return)Tj [-597.89999 ]TJ (1;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.26089 TD
+ -0.00219 Tc
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yylex\(\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 483.62568 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00059 Tc
+ 0.03059 Tw
+ (Two patterns have been )Tj [-10 ]TJ (specified in the rules section. Each pattern must b)Tj [9.39999 ]TJ (e)Tj [3.19999 ]TJ (g)Tj [9.39999 ]TJ (i)Tj [-2.79998 ]TJ (n in column)Tj [-10.59999 ]TJ ( )Tj 
+ T*
+ 0.00028 Tc
+ 0.21969 Tw
+ (one)Tj [4.09999 ]TJ (. This is f)Tj [3.29998 ]TJ (o)Tj [0.29998 ]TJ (llowe)Tj [4.09999 ]TJ (d)Tj [-9.69999 ]TJ ( b)Tj [-9.69999 ]TJ (y)Tj [20.29998 ]TJ ( )Tj 
+ /N171 1 Tf
+ 11.04998 0 TD
+ 0.00048 Tc
+ 0 Tw
+ (whitespac)Tj [-5.69999 ]TJ (e)Tj 
+ /N231 1 Tf
+ 4.44999 0 TD
+ -0.00158 Tc
+ 0.22158 Tw
+ ( \(sp)Tj [-11.59999 ]TJ (ace,)Tj [-11.59999 ]TJ ( t)Tj [-3.79998 ]TJ (a)Tj [-7.79998 ]TJ (b or ne)Tj [-7.79998 ]TJ (wl)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (n)Tj [-1.59999 ]TJ (e\), and)Tj [-11.59999 ]TJ ( an )Tj [-10 ]TJ (opt)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (onal)Tj [-3.79998 ]TJ ( act)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (on )Tj 
+ -15.5 -1.14999 TD
+ 0.00149 Tc
+ 0.22848 Tw
+ (a)Tj [5.29998 ]TJ (ssoc)Tj [5.29998 ]TJ (i)Tj [-0.69999 ]TJ (a)Tj [5.29998 ]TJ (t)Tj [-0.69999 ]TJ (e)Tj [5.29998 ]TJ (d)Tj [1.5 ]TJ ( )Tj [-10 ]TJ (with the)Tj [5.29998 ]TJ ( p)Tj [-8.5 ]TJ (a)Tj [5.29998 ]TJ (tte)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (n. Th)Tj [-8.5 ]TJ (e)Tj [5.29998 ]TJ ( )Tj [-10 ]TJ (a)Tj [5.29998 ]TJ (c)Tj [5.29998 ]TJ (tion ma)Tj [-14.69999 ]TJ (y)Tj [21.5 ]TJ ( )Tj [-10 ]TJ (be a)Tj [5.29998 ]TJ ( sin)Tj [-8.5 ]TJ (g)Tj [11.5 ]TJ (le C sta)Tj [5.29998 ]TJ (t)Tj [-0.69999 ]TJ (e)Tj [5.29998 ]TJ (m)Tj [-0.69999 ]TJ (e)Tj [5.29998 ]TJ (n)Tj [1.5 ]TJ (t,)Tj [-8.5 ]TJ ( )Tj [-10 ]TJ (or)Tj [4.5 ]TJ ( multiple)Tj [5.29998 ]TJ ( C )Tj 
+ T*
+ -0.00028 Tc
+ 0.04029 Tw
+ (statements enclosed in br)Tj [-7.29998 ]TJ (aces. An)Tj [-20.29998 ]TJ (y)Tj [19.69999 ]TJ (t)Tj [-2.5 ]TJ (hin)Tj [-10.29998 ]TJ (g)Tj [9.69999 ]TJ ( not starting)Tj [9.69999 ]TJ ( in column one is copi)Tj [-12.5 ]TJ (ed verbatim to )Tj 
+ T*
+ 0.03039 Tw
+ (the g)Tj [9.59999 ]TJ (e)Tj [3.39999 ]TJ (n)Tj [-10.39999 ]TJ (e)Tj [3.39999 ]TJ (rat)Tj [-12.59999 ]TJ (e)Tj [3.39999 ]TJ (d C file. W)Tj [-6.59999 ]TJ (e)Tj [3.39999 ]TJ ( )Tj [10 ]TJ (ma)Tj [-6.59999 ]TJ (y)Tj [19.59999 ]TJ ( take adv)Tj [-10.39999 ]TJ (a)Tj [3.39999 ]TJ (nta)Tj [-6.59999 ]TJ (g)Tj [9.59999 ]TJ (e of th)Tj [-10.39999 ]TJ (is behavior to specif)Tj [-7.39999 ]TJ (y)Tj [19.59999 ]TJ ( co)Tj [-10.39999 ]TJ (mments in our)Tj [12.59999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ 0.00178 Tc
+ 0.17819 Tw
+ (le)Tj [5.59999 ]TJ (x)Tj [-8.19999 ]TJ ( f)Tj [4.79998 ]TJ (ile)Tj [5.59999 ]TJ (. )Tj [-10 ]TJ (I)Tj [24.79998 ]TJ (n)Tj [1.79998 ]TJ ( this e)Tj [5.59999 ]TJ (x)Tj [-8.19999 ]TJ (a)Tj [5.59999 ]TJ (m)Tj [-0.39999 ]TJ (ple the)Tj [5.59999 ]TJ (r)Tj [4.79998 ]TJ (e)Tj [5.59999 ]TJ ( )Tj [-10 ]TJ (a)Tj [5.59999 ]TJ (r)Tj [4.79998 ]TJ (e two pa)Tj [5.59999 ]TJ (tte)Tj [5.59999 ]TJ (r)Tj [4.79998 ]TJ (n)Tj [1.79998 ]TJ (s,)Tj [-8.19999 ]TJ (  \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 346.33178 400.59259 Tm
+ 0 Tc
+ 0 Tw
+ (.)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 352.93119 400.59259 Tm
+ -0.00189 Tc
+ 0.19189 Tw
+ (\224 and )Tj [10 ]TJ (\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 391.20809 400.59259 Tm
+ -0.00219 Tc
+ 0 Tw
+ (\\n)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 404.52688 400.59259 Tm
+ 0.00138 Tc
+ 0.17858 Tw
+ (\224)Tj [5.19999 ]TJ (,)Tj [1.39999 ]TJ ( with an )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 461.04219 400.59259 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ECHO)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 487.43998 400.59259 Tm
+ 0.00149 Tc
+ 0.17849 Tw
+ ( a)Tj [5.29998 ]TJ (c)Tj [5.29998 ]TJ (tion)Tj [-8.5 ]TJ ( )Tj 
+ -33.11999 -1.20999 TD
+ -0.00209 Tc
+ 0.01208 Tw
+ (associ)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (ed fo)Tj [-12.09999 ]TJ (r ea)Tj [-8.29998 ]TJ (ch pat)Tj [-4.29998 ]TJ (t)Tj [-4.29998 ]TJ (e)Tj [-8.29998 ]TJ (r)Tj [-9.09999 ]TJ (n. S)Tj [-6 ]TJ (e)Tj [1.69999 ]TJ (veral)Tj [-4.29998 ]TJ ( m)Tj [-4.29998 ]TJ (a)Tj [-8.29998 ]TJ (cros and v)Tj [-12.09999 ]TJ (a)Tj [-8.29998 ]TJ (ri)Tj [-4.29998 ]TJ (abl)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (s ar)Tj [-9.09999 ]TJ (e pred)Tj [-12.09999 ]TJ (efi)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ (ed b)Tj [-22.09999 ]TJ (y)Tj [17.89999 ]TJ ( )Tj [-10 ]TJ (l)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (x)Tj [-12.09999 ]TJ (.)Tj [-2.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 476.16099 386.07379 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ECHO)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 502.55879 386.07379 Tm
+ 0.00149 Tc
+ 0.00849 Tw
+ ( is a)Tj [15.29998 ]TJ ( )Tj 
+ -34.37998 -1.18998 TD
+ 0.00109 Tc
+ 0.28889 Tw
+ (ma)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (o tha)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ ( wr)Tj [4.09999 ]TJ (ite)Tj [4.89999 ]TJ (s c)Tj [4.89999 ]TJ (o)Tj [1.09999 ]TJ (d)Tj [-8.89999 ]TJ (e)Tj [-5.09999 ]TJ ( ma)Tj [4.89999 ]TJ (tc)Tj [4.89999 ]TJ (he)Tj [4.89999 ]TJ (d b)Tj [-8.89999 ]TJ (y)Tj [21.09999 ]TJ ( the)Tj [4.89999 ]TJ ( p)Tj [-8.89999 ]TJ (a)Tj [4.89999 ]TJ (tte)Tj [4.89999 ]TJ (rn. This is the)Tj [4.89999 ]TJ ( de)Tj [4.89999 ]TJ (f)Tj [4.09999 ]TJ (a)Tj [4.89999 ]TJ (ult a)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (tion f)Tj [4.09999 ]TJ (o)Tj [1.09999 ]TJ (r)Tj [4.09999 ]TJ ( a)Tj [4.89999 ]TJ (n)Tj [-18.69999 ]TJ (y)Tj [21.09999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ 0.00009 Tc
+ -0.00009 Tw
+ (unmatched strin)Tj [-9.89999 ]TJ (g)Tj [10.09999 ]TJ (s. T)Tj [-19.09999 ]TJ (y)Tj [20.09999 ]TJ (pic)Tj [-6.09999 ]TJ (a)Tj [3.89999 ]TJ (ll)Tj [-12.09999 ]TJ (y)Tj [20.09999 ]TJ (,)Tj [0.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 235.58108 357.75619 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ECHO)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 261.97879 357.75619 Tm
+ 0 Tc
+ ( is defin)Tj [-10 ]TJ (e)Tj [3.79998 ]TJ (d as: )Tj 
+ -14.32998 -1.18998 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 331.47839 Tm
+ -0.00219 Tc
+ (#define)Tj [-597.89999 ]TJ (ECHO)Tj [-597.89999 ]TJ (fwrite\(yytext,)Tj [-597.89999 ]TJ (yyleng,)Tj [-597.89999 ]TJ (1,)Tj [-597.89999 ]TJ (yyout\))Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 108.03169 317.19958 Tm
+ 0 Tc
+ ( )Tj 
+ -1.5 -1.16999 TD
+ -0.00149 Tc
+ (Variable )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 135.38938 303.16069 Tm
+ -0.00219 Tc
+ (yytext)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 174.98609 303.16069 Tm
+ -0.00048 Tc
+ 0.10049 Tw
+ ( is a pointer to the matched string)Tj [9.5 ]TJ ( \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 351.61138 303.16069 Tm
+ -0.00219 Tc
+ 0 Tw
+ (NULL)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 378.00918 303.16069 Tm
+ -0.00189 Tc
+ 0.10189 Tw
+ (-t)Tj [-4.09999 ]TJ (e)Tj [-8.09999 ]TJ (r)Tj [1.09999 ]TJ (m)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ (at)Tj [-4.09999 ]TJ (ed\), a)Tj [-8.09999 ]TJ (nd  )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 470.28149 303.16069 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyleng)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 509.87818 303.16069 Tm
+ 0.00219 Tc
+ 0.09779 Tw
+ ( is)Tj [11.39999 ]TJ ( )Tj 
+ -34.98999 -1.20999 TD
+ 0.00099 Tc
+ 0.22898 Tw
+ (the)Tj [4.79998 ]TJ ( le)Tj [4.79998 ]TJ (ng)Tj [11 ]TJ (th of)Tj [4 ]TJ ( the)Tj [4.79998 ]TJ ( ma)Tj [4.79998 ]TJ (tc)Tj [4.79998 ]TJ (h)Tj [-9 ]TJ (e)Tj [4.79998 ]TJ (d str)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (ng)Tj [11 ]TJ (. V)Tj [-6.79998 ]TJ (a)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (a)Tj [4.79998 ]TJ (b)Tj [1 ]TJ (le)Tj [4.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 311.65469 288.64189 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyo)Tj [-10.89999 ]TJ (ut)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 344.77189 288.64189 Tm
+ -0.00019 Tc
+ 0.23019 Tw
+ ( is the output file, and defaults to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 274.24319 Tm
+ -0.00219 Tc
+ 0 Tw
+ (stdout)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 129.62989 274.24319 Tm
+ 0.00009 Tc
+ 0.05989 Tw
+ (. F)Tj [6.19999 ]TJ (unction )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 182.66549 274.24319 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yywrap)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 222.26208 274.24319 Tm
+ -0.00039 Tc
+ 0.06039 Tw
+ ( is called b)Tj [-10.39999 ]TJ (y)Tj [19.59999 ]TJ ( lex)Tj [-10.39999 ]TJ ( when)Tj [-10.39999 ]TJ ( input is e)Tj [13.39999 ]TJ (x)Tj [-10.39999 ]TJ (hausted. Retu)Tj [9.59999 ]TJ (rn 1 if )Tj [-10 ]TJ (y)Tj [19.59999 ]TJ (ou ar)Tj [-7.39999 ]TJ (e)Tj [-6.59999 ]TJ ( )Tj 
+ -11.01998 -1.20999 TD
+ -0.00048 Tc
+ 0.05049 Tw
+ (done, or)Tj [-7.5 ]TJ ( 0 if mor)Tj [-7.5 ]TJ (e)Tj [3.29998 ]TJ ( p)Tj [-10.5 ]TJ (r)Tj [2.5 ]TJ (oce)Tj [-6.69999 ]TJ (ssing)Tj [9.5 ]TJ ( is r)Tj [-7.5 ]TJ (e)Tj [3.29998 ]TJ (quired.)Tj [-10.5 ]TJ ( Ever)Tj [-17.5 ]TJ (y)Tj [19.5 ]TJ ( )Tj [-20 ]TJ (C program )Tj [-10 ]TJ (requires)Tj [-11.29998 ]TJ ( a)Tj [-6.69999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 435.24438 259.72439 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ma)Tj [-10.89999 ]TJ (in)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 461.76219 259.72439 Tm
+ -0.00019 Tc
+ 0.05018 Tw
+ ( function. )Tj [-10 ]TJ (I)Tj [12.79998 ]TJ (n)Tj [-10.19999 ]TJ ( )Tj 
+ -30.97999 -1.20999 TD
+ 0.00219 Tc
+ 0.06779 Tw
+ (this c)Tj [6 ]TJ (a)Tj [6 ]TJ (s)Tj [1.39999 ]TJ (e)Tj [6 ]TJ (,)Tj [2.19999 ]TJ ( we simpl)Tj [-10 ]TJ (y)Tj [22.19999 ]TJ ( ca)Tj [6 ]TJ (ll )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 214.22279 245.20559 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 247.22009 245.20559 Tm
+ 0.00149 Tc
+ 0.06849 Tw
+ (, the)Tj [5.29998 ]TJ ( ma)Tj [5.29998 ]TJ (in e)Tj [5.29998 ]TJ (n)Tj [1.5 ]TJ (tr)Tj [-15.5 ]TJ (y)Tj [21.5 ]TJ (-)Tj [-5.5 ]TJ (point f)Tj [4.5 ]TJ (o)Tj [1.5 ]TJ (r)Tj [4.5 ]TJ ( le)Tj [5.29998 ]TJ (x)Tj [-8.5 ]TJ (.)Tj [1.5 ]TJ ( Some)Tj [5.29998 ]TJ ( impl)Tj [9.29998 ]TJ (e)Tj [5.29998 ]TJ (me)Tj [5.29998 ]TJ (nta)Tj [5.29998 ]TJ (tions of )Tj 
+ -13.09999 -1.20999 TD
+ -0.00068 Tc
+ 0.09069 Tw
+ (lex)Tj [-10.69999 ]TJ ( include copies of )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 196.94419 230.68679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ma)Tj [10.79998 ]TJ (in)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 223.22209 230.68679 Tm
+ -0.00099 Tc
+ 0.09098 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 248.65989 230.68679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yywrap)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 288.25669 230.68679 Tm
+ 0.00109 Tc
+ 0.08889 Tw
+ ( in a)Tj [4.89999 ]TJ ( )Tj [10 ]TJ (libr)Tj [14.09999 ]TJ (a)Tj [4.89999 ]TJ (r)Tj [-15.89999 ]TJ (y)Tj [21.09999 ]TJ (, e)Tj [4.89999 ]TJ (limina)Tj [4.89999 ]TJ (ting)Tj [11.09999 ]TJ ( the)Tj [4.89999 ]TJ ( ne)Tj [4.89999 ]TJ (e)Tj [4.89999 ]TJ (d)Tj [-8.89999 ]TJ ( to c)Tj [4.89999 ]TJ (ode)Tj [4.89999 ]TJ ( the)Tj [4.89999 ]TJ (m)Tj [8.89999 ]TJ ( )Tj 
+ -16.51998 -1.18998 TD
+ -0.00059 Tc
+ 0.00059 Tw
+ (ex)Tj [-10.59999 ]TJ (plicitl)Tj [-12.79998 ]TJ (y)Tj [29.39999 ]TJ (.)Tj [-0.59999 ]TJ ( This is wh)Tj [-10.59999 ]TJ (y)Tj [19.39999 ]TJ ( ou)Tj [-10.59999 ]TJ (r first ex)Tj [-10.59999 ]TJ (ample, the shortest lex)Tj [-10.59999 ]TJ ( prog)Tj [9.39999 ]TJ (ram, fun)Tj [-10.59999 ]TJ (c)Tj [3.19999 ]TJ (tioned properl)Tj [-22.79998 ]TJ (y)Tj [19.39999 ]TJ (.)Tj [-0.39999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 10 10
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 10)Tj 
+ /N174 1 Tf
+ 9.95919 0 0 9.95919 162.86709 710.04689 Tm
+ -0.00209 Tc
+ 0 Tw
+ (name)Tj [-9144.69999 ]TJ (f)Tj [-1.39999 ]TJ (unc)Tj [-8.09999 ]TJ (tion)Tj 
+ /N173 1 Tf
+ 0.01199 -1.24099 TD
+ 0.00239 Tc
+ (int)Tj [-602.39999 ]TJ (yylex\(void\))Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00138 Tc
+ 0.00068 Tw
+ (c)Tj [-7.39999 ]TJ (a)Tj [0.5 ]TJ (ll to inv)Tj [4.59999 ]TJ (o)Tj [0.5 ]TJ (k)Tj [-19.5 ]TJ (e)Tj [0.5 ]TJ ( lex)Tj [-7.39999 ]TJ (e)Tj [0.5 ]TJ (r, returns)Tj [-7.39999 ]TJ ( tok)Tj [-19.5 ]TJ (e)Tj [0.5 ]TJ (n)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ (char)Tj [-602.39999 ]TJ (*yytext)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00169 Tc
+ 0.00099 Tw
+ (pointer)Tj [-6 ]TJ ( to m)Tj [-24.09999 ]TJ (a)Tj [0.19999 ]TJ (tc)Tj [-7.69999 ]TJ (hed s)Tj [-7.69999 ]TJ (t)Tj [-1 ]TJ (r)Tj [-6 ]TJ (i)Tj [3.59999 ]TJ (ng)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (yyleng)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00178 Tc
+ 0.00109 Tw
+ (length of)Tj [-13.09999 ]TJ ( m)Tj [-24.19999 ]TJ (a)Tj [0.09999 ]TJ (tc)Tj [-7.79998 ]TJ (hed s)Tj [-7.79998 ]TJ (t)Tj [-1.09999 ]TJ (r)Tj [-6.09999 ]TJ (i)Tj [3.5 ]TJ (ng)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00209 Tc
+ 0.00138 Tw
+ (value as)Tj [-8.09999 ]TJ (s)Tj [-8.09999 ]TJ (o)Tj [-0.19999 ]TJ (c)Tj [-8.09999 ]TJ (i)Tj [3.19999 ]TJ (ated w)Tj [9.19999 ]TJ (i)Tj [3.19999 ]TJ (th tok)Tj [-20.19999 ]TJ (e)Tj [-0.19999 ]TJ (n)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (int)Tj [-602.39999 ]TJ (yywrap\(void\))Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00189 Tc
+ 0.00119 Tw
+ (w)Tj [9.39999 ]TJ (r)Tj [-6.19999 ]TJ (apup, r)Tj [-6.19999 ]TJ (e)Tj [0 ]TJ (tur)Tj [-6.19999 ]TJ (n)Tj [0 ]TJ ( 1 if)Tj [-13.19999 ]TJ ( done, 0 if)Tj [-13.19999 ]TJ ( not done)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ (FILE)Tj [-602.39999 ]TJ (*yyout)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00259 Tc
+ 0.00189 Tw
+ (output f)Tj [-13.89999 ]TJ (ile)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (FILE)Tj [-602.39999 ]TJ (*yyin)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00309 Tc
+ 0.00239 Tw
+ (input f)Tj [-14.39999 ]TJ (ile)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (INITIAL)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00289 Tc
+ 0.00219 Tw
+ (initial s)Tj [-8.89999 ]TJ (t)Tj [-2.19999 ]TJ (ar)Tj [-7.19999 ]TJ (t c)Tj [-8.89999 ]TJ (ondition)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31318 TD
+ 0.00239 Tc
+ 0 Tw
+ (BEGIN)Tj [-602.39999 ]TJ (condition)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00219 Tc
+ 0.00149 Tw
+ (s)Tj [-8.19999 ]TJ (w)Tj [9.09999 ]TJ (itc)Tj [-8.19999 ]TJ (h)Tj [-0.29998 ]TJ ( s)Tj [-8.19999 ]TJ (t)Tj [-1.5 ]TJ (ar)Tj [-6.5 ]TJ (t c)Tj [-8.19999 ]TJ (ondition)Tj 
+ /N173 1 Tf
+ -11.62649 -1.31329 TD
+ 0.00239 Tc
+ 0 Tw
+ (ECHO)Tj 
+ /N228 1 Tf
+ 11.62649 0 TD
+ -0.00189 Tc
+ 0.00119 Tw
+ (w)Tj [9.39999 ]TJ (r)Tj [-6.19999 ]TJ (ite m)Tj [-24.29998 ]TJ (a)Tj [0 ]TJ (tc)Tj [-7.89999 ]TJ (hed s)Tj [-7.89999 ]TJ (t)Tj [-1.19999 ]TJ (r)Tj [-6.19999 ]TJ (i)Tj [3.39999 ]TJ (ng)Tj 
+ ET
+ /N224 /ColorSpace findRes CS
+ 0 0 0 SC
+ 0 J
+ 0 j
+ 0.21598 w
+ 10 M
+ []0 d
+ 
+ 160.94699 720.00599 m
+ 451.20298 720.00599 l
+ S 
+ 160.94699 720.00599 290.25599 -0.95999 rf
+ 160.94699 707.64698 m
+ 451.20298 707.64698 l
+ S 
+ 160.94699 707.64698 290.25599 -0.95999 rf
+ 160.94699 576.85798 m
+ 451.20298 576.85798 l
+ S 
+ 160.94699 576.85798 290.25599 -0.95999 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 451.56298 575.89799 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ -12.12998 -0.89999 TD
+ ( )Tj 
+ /N170 1 Tf
+ -7.40998 -1.64999 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (Table 2-3: )Tj 
+ /N231 1 Tf
+ 4.61999 0 TD
+ -0.00189 Tc
+ 0.00189 Tw
+ (L)Tj [8.89999 ]TJ (e)Tj [1.89999 ]TJ (x)Tj [-11.89999 ]TJ ( P)Tj [-5.79998 ]TJ (r)Tj [1.09999 ]TJ (edefi)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ (ed Vari)Tj [-4.09999 ]TJ (abl)Tj [-14.09999 ]TJ (e)Tj [1.89999 ]TJ (s )Tj 
+ -15.20999 -1.64999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ T*
+ -0.00019 Tc
+ 0.19018 Tw
+ ( )Tj [-1060 ]TJ (Here)Tj [-6.39999 ]TJ (\222s a pro)Tj [-10.19999 ]TJ (g)Tj [-0.19999 ]TJ (ram that )Tj [-10 ]TJ (does nothing)Tj [9.79998 ]TJ ( )Tj [-10 ]TJ (at all. All input is matched, but no action is)Tj [-11 ]TJ ( )Tj 
+ T*
+ 0.00068 Tc
+ -0.00068 Tw
+ (a)Tj [4.5 ]TJ (ssoc)Tj [4.5 ]TJ (i)Tj [-1.5 ]TJ (a)Tj [4.5 ]TJ (t)Tj [-1.5 ]TJ (e)Tj [4.5 ]TJ (d)Tj [0.69999 ]TJ ( with a)Tj [4.5 ]TJ (n)Tj [-19.29998 ]TJ (y)Tj [20.69999 ]TJ ( p)Tj [-9.29998 ]TJ (a)Tj [4.5 ]TJ (tter)Tj [3.69999 ]TJ (n, so the)Tj [4.5 ]TJ (r)Tj [3.69999 ]TJ (e)Tj [4.5 ]TJ ( will be)Tj [4.5 ]TJ ( no ou)Tj [-9.29998 ]TJ (tput. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 458.30778 Tm
+ -0.00219 Tc
+ (%%)Tj 
+ 0 -1.13038 TD
+ 0 Tc
+ (.)Tj 
+ 0 -1.11959 TD
+ -0.00219 Tc
+ (\\n)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 406.71209 Tm
+ -0.00189 Tc
+ 0.41189 Tw
+ ( )Tj [-840 ]TJ (The fol)Tj [-4.09999 ]TJ (l)Tj [-4.09999 ]TJ (o)Tj [-1.89999 ]TJ (wi)Tj [-4.09999 ]TJ (ng)Tj [8.09999 ]TJ ( )Tj [-10 ]TJ (ex)Tj [-11.89999 ]TJ (am)Tj [-4.09999 ]TJ (pl)Tj [-4.09999 ]TJ (e prepends l)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ (e num)Tj [-4.09999 ]TJ (be)Tj [-8.09999 ]TJ (r)Tj [-8.89999 ]TJ (s)Tj [-2.69999 ]TJ ( t)Tj [-4.09999 ]TJ (o)Tj [-1.89999 ]TJ ( each l)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ (e i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ ( a )Tj [-10 ]TJ (f)Tj [-8.89999 ]TJ (i)Tj [-4.09999 ]TJ (l)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ (. S)Tj [-5.69999 ]TJ (o)Tj [-1.89999 ]TJ (m)Tj [-4.09999 ]TJ (e)Tj [11.89999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ 0.00129 Tc
+ 0.00869 Tw
+ (imple)Tj [5.09999 ]TJ (me)Tj [5.09999 ]TJ (nta)Tj [5.09999 ]TJ (tions of)Tj [4.29998 ]TJ ( le)Tj [5.09999 ]TJ (x)Tj [-8.69999 ]TJ ( pr)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ (d)Tj [1.29998 ]TJ (e)Tj [5.09999 ]TJ (f)Tj [4.29998 ]TJ (in)Tj [-8.69999 ]TJ (e)Tj [5.09999 ]TJ ( a)Tj [5.09999 ]TJ (nd )Tj [-10 ]TJ (c)Tj [5.09999 ]TJ (a)Tj [5.09999 ]TJ (l)Tj [-0.89999 ]TJ (c)Tj [5.09999 ]TJ (u)Tj [1.29998 ]TJ (l)Tj [-10.89999 ]TJ (a)Tj [5.09999 ]TJ (te)Tj [5.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 318.73408 392.67329 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yy)Tj [-10.89999 ]TJ (lineno)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 371.64968 392.67329 Tm
+ -0.00048 Tc
+ 0.01049 Tw
+ (. The input file )Tj [-10 ]TJ (f)Tj [-7.5 ]TJ (o)Tj [-0.5 ]TJ (r lex)Tj [-10.5 ]TJ ( is )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 492.71958 392.67329 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyin)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 519.11738 392.67329 Tm
+ -0.00999 Tc
+ (, )Tj 
+ -35.75999 -1.20999 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (and defaults to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 163.58699 378.15449 Tm
+ -0.00219 Tc
+ 0 Tw
+ (stdin)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 196.58428 378.15449 Tm
+ 0 Tc
+ (. )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 353.19659 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (yylineno;)Tj 
+ -2.39129 -1.11959 TD
+ (%})Tj 
+ 0 -1.13038 TD
+ (%%)Tj 
+ T*
+ (^\(.*\)\\n)Tj [-2391.39999 ]TJ (printf\("%4d\\t%s",)Tj [-597.89999 ]TJ (++yylineno,)Tj [-597.89999 ]TJ (yytext\);)Tj 
+ T*
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (main\(int)Tj [-597.89999 ]TJ (argc,)Tj [-597.89999 ]TJ (char)Tj [-597.89999 ]TJ (*argv[]\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yyin)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (fopen\(argv[1],)Tj [-597.89999 ]TJ ("r"\);)Tj 
+ 0 -1.11959 TD
+ (yylex\(\);)Tj 
+ 0 -1.13038 TD
+ (fclose\(yyin\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 214.36808 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00079 Tc
+ 0.10919 Tw
+ ( )Tj [-1140 ]TJ (The)Tj [4.59999 ]TJ ( de)Tj [4.59999 ]TJ (f)Tj [3.79998 ]TJ (i)Tj [-1.39999 ]TJ (nitions se)Tj [4.59999 ]TJ (c)Tj [4.59999 ]TJ (tion is c)Tj [4.59999 ]TJ (o)Tj [0.79998 ]TJ (mpose)Tj [4.59999 ]TJ (d)Tj [0.79998 ]TJ ( of)Tj [3.79998 ]TJ ( substituti)Tj [8.59999 ]TJ (ons, c)Tj [4.59999 ]TJ (ode)Tj [4.59999 ]TJ (, a)Tj [4.59999 ]TJ (nd sta)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ (t sta)Tj [4.59999 ]TJ (t)Tj [-1.39999 ]TJ (e)Tj 
+ /N171 1 Tf
+ 31.75 0 TD
+ 0 Tc
+ 0 Tw
+ (s)Tj 
+ /N231 1 Tf
+ 0.38999 0 TD
+ 0.00019 Tc
+ 0.10978 Tw
+ (. Code in )Tj 
+ -32.13999 -1.14999 TD
+ 0.00088 Tc
+ 0.05909 Tw
+ (the)Tj [4.69999 ]TJ ( de)Tj [4.69999 ]TJ (f)Tj [3.89999 ]TJ (i)Tj [-1.29998 ]TJ (nitions se)Tj [4.69999 ]TJ (c)Tj [4.69999 ]TJ (tion is )Tj [10 ]TJ (simpl)Tj [-11.29998 ]TJ (y)Tj [30.89999 ]TJ ( c)Tj [4.69999 ]TJ (opi)Tj [-11.29998 ]TJ (e)Tj [4.69999 ]TJ (d)Tj [0.89999 ]TJ ( a)Tj [4.69999 ]TJ (s)Tj [0.19999 ]TJ (-)Tj [3.89999 ]TJ (i)Tj [-1.29998 ]TJ (s to the)Tj [4.69999 ]TJ ( top of)Tj [3.89999 ]TJ ( the)Tj [4.69999 ]TJ ( g)Tj [10.89999 ]TJ (e)Tj [4.69999 ]TJ (n)Tj [-9.09999 ]TJ (e)Tj [4.69999 ]TJ (r)Tj [3.89999 ]TJ (a)Tj [4.69999 ]TJ (te)Tj [4.69999 ]TJ (d C )Tj [-10 ]TJ (f)Tj [3.89999 ]TJ (ile)Tj [4.69999 ]TJ (, a)Tj [4.69999 ]TJ (nd must)Tj [8.69999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00068 Tc
+ 0.04069 Tw
+ (be bra)Tj [-6.89999 ]TJ (c)Tj [3.09999 ]TJ (keted )Tj [-10 ]TJ (with \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 185.06518 172.73159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%{)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 198.26419 172.73159 Tm
+ -0.00149 Tc
+ 0.05149 Tw
+ (\223 a)Tj [-7.69999 ]TJ (nd )Tj [10 ]TJ (\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 233.30119 172.73159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 246.50009 172.73159 Tm
+ 0.00189 Tc
+ 0.03808 Tw
+ (\224)Tj [5.69999 ]TJ ( mar)Tj [4.89999 ]TJ (k)Tj [1.89999 ]TJ (e)Tj [5.69999 ]TJ (r)Tj [4.89999 ]TJ (s.)Tj [-8.09999 ]TJ ( Substit)Tj [9.69999 ]TJ (utions simplify)Tj [31.89999 ]TJ ( p)Tj [-8.09999 ]TJ (a)Tj [5.69999 ]TJ (tte)Tj [5.69999 ]TJ (r)Tj [4.89999 ]TJ (n)Tj [2 ]TJ (-ma)Tj [5.69999 ]TJ (t)Tj [-0.29998 ]TJ (c)Tj [5.69999 ]TJ (h)Tj [1.89999 ]TJ (ing)Tj [11.89999 ]TJ ( )Tj [-10 ]TJ (r)Tj [4.89999 ]TJ (u)Tj [1.89999 ]TJ (le)Tj [5.69999 ]TJ (s.)Tj [-8.09999 ]TJ ( )Tj 
+ -13.03999 -1.18998 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (F)Tj [5.59999 ]TJ (o)Tj [-0.5 ]TJ (r ex)Tj [-10.5 ]TJ (ample, we ma)Tj [-16.69999 ]TJ (y)Tj [19.5 ]TJ ( d)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ (f)Tj [-7.5 ]TJ (i)Tj [-2.69999 ]TJ (ne dig)Tj [9.5 ]TJ (its and letters: )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 11 11
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 11)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 683.40908 Tm
+ -0.00219 Tc
+ (digit)Tj [-1902.19999 ]TJ ([0-9])Tj 
+ 0 -1.13038 TD
+ (letter)Tj [-1304.39999 ]TJ ([A-Za-z])Tj 
+ T*
+ (%{)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (count;)Tj 
+ -2.39129 -1.11959 TD
+ (%})Tj 
+ 0 -1.13038 TD
+ (%%)Tj 
+ 2.39129 -1.13038 TD
+ (/*)Tj [-597.89999 ]TJ (match)Tj [-597.89999 ]TJ (identifier)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ ({letter}\({letter}|{digit}\)*)Tj [-3152.09999 ]TJ (count++;)Tj 
+ T*
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (yylex\(\);)Tj 
+ 0 -1.13038 TD
+ (printf\("number)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (identifiers)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (%)Tj [0 ]TJ (d\\n",)Tj [-597.89999 ]TJ (count\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 507.14379 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00158 Tc
+ 0.52159 Tw
+ ( )Tj [-730 ]TJ (W)Tj [-7.79998 ]TJ (h)Tj [-1.59999 ]TJ (i)Tj [-3.79998 ]TJ (t)Tj [-3.79998 ]TJ (e)Tj [2.19999 ]TJ (space m)Tj [-3.79998 ]TJ (u)Tj [-1.59999 ]TJ (st)Tj [-3.79998 ]TJ ( sepa)Tj [-7.79998 ]TJ (rat)Tj [-3.79998 ]TJ (e)Tj [2.19999 ]TJ ( t)Tj [-3.79998 ]TJ (h)Tj [-1.59999 ]TJ (e de)Tj [-7.79998 ]TJ (fi)Tj [-3.79998 ]TJ (ni)Tj [-3.79998 ]TJ (ng)Tj [8.39999 ]TJ ( t)Tj [-3.79998 ]TJ (e)Tj [-7.79998 ]TJ (rm)Tj [-13.79998 ]TJ ( and t)Tj [-3.79998 ]TJ (h)Tj [-1.59999 ]TJ (e associ)Tj [-3.79998 ]TJ (at)Tj [-3.79998 ]TJ (ed )Tj [-10 ]TJ (ex)Tj [-11.59999 ]TJ (pressi)Tj [-3.79998 ]TJ (on.)Tj [8.39999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00079 Tc
+ 0.07078 Tw
+ (Referen)Tj [-10.79998 ]TJ (ces to substitutions in the rules section ar)Tj [-7.79998 ]TJ (e surrounded b)Tj [-20.79998 ]TJ (y)Tj [19.19999 ]TJ ( br)Tj [-7.79998 ]TJ (ac)Tj [-7 ]TJ (es \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 452.16299 479.30609 Tm
+ -0.00219 Tc
+ 0 Tw
+ ({letter})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 504.95858 479.30609 Tm
+ -0.00299 Tc
+ 0.07299 Tw
+ (\) t)Tj [-5.19999 ]TJ (o)Tj [7 ]TJ ( )Tj 
+ -34.57998 -1.18998 TD
+ -0.00059 Tc
+ 0.04058 Tw
+ (disting)Tj [9.39999 ]TJ (u)Tj [-0.59999 ]TJ (ish them from lit)Tj [7.19999 ]TJ (erals. W)Tj [-6.79998 ]TJ (h)Tj [-0.59999 ]TJ (en we have a match in the rules section, )Tj [10 ]TJ (the associated)Tj [-10.59999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00109 Tc
+ 0.10108 Tw
+ (C code is ex)Tj [-11.09999 ]TJ (ecuted. Here is a scanner that count)Tj [-13.09999 ]TJ (s the number of chara)Tj [-7.29998 ]TJ (c)Tj [2.69999 ]TJ (te)Tj [-7.29998 ]TJ (rs, words, and )Tj 
+ T*
+ 0.00119 Tc
+ -0.00119 Tw
+ (line)Tj [5 ]TJ (s)Tj [0.39999 ]TJ ( in a)Tj [5 ]TJ ( f)Tj [4.19999 ]TJ (ile)Tj [5 ]TJ ( \()Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ (imila)Tj [5 ]TJ (r)Tj [4.19999 ]TJ ( to Unix)Tj [-8.79998 ]TJ ( )Tj 
+ /N171 1 Tf
+ 12.08999 0 TD
+ 0.00299 Tc
+ 0 Tw
+ (wc)Tj 
+ /N231 1 Tf
+ 1.10998 0 TD
+ -0.00299 Tc
+ (\):)Tj [-5.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 413.07159 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (nchar,)Tj [-597.89999 ]TJ (nword,)Tj [-597.89999 ]TJ (nline;)Tj 
+ -2.39129 -1.13038 TD
+ (%})Tj 
+ T*
+ (%%)Tj 
+ T*
+ (\\n)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ (nline++;)Tj [-597.89999 ]TJ (nchar++;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ ([^)Tj [-597.79998 ]TJ (\\t\\n]+)Tj [-1195.69999 ]TJ ({)Tj [-597.89999 ]TJ (nword++,)Tj [-597.89999 ]TJ (nchar)Tj [-597.89999 ]TJ (+=)Tj [-597.89999 ]TJ (yyleng;)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (.)Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ (nchar++;)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yylex\(\);)Tj 
+ T*
+ (printf\("%d\\t%d\\t%d\\n",)Tj [-597.89999 ]TJ (nchar,)Tj [-597.89999 ]TJ (nword,)Tj [-597.89999 ]TJ (nline\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 249.28518 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 12 12
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 12)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ -0.00199 Tc
+ 0.49079 Tw
+ (3. Y)Tj [51.69999 ]TJ (acc )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ 15.95869 0 0 15.95869 90.03318 659.05108 Tm
+ -0.00088 Tc
+ 0.58769 Tw
+ (3.1 The)Tj [-8.69999 ]TJ (or)Tj [-17.79998 ]TJ (y)Tj [13.89999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 638.65278 Tm
+ -0.00109 Tc
+ 0.19108 Tw
+ (Grammars )Tj [-10 ]TJ (for )Tj [-20 ]TJ (y)Tj [18.89999 ]TJ (a)Tj [-7.29998 ]TJ (c)Tj [-7.29998 ]TJ (c)Tj [2.69999 ]TJ ( a)Tj [-7.29998 ]TJ (r)Tj [1.89999 ]TJ (e )Tj [-10 ]TJ (described )Tj [-10 ]TJ (using a v)Tj [-11.09999 ]TJ (a)Tj [2.69999 ]TJ (ria)Tj [-7.29998 ]TJ (n)Tj [-1.09999 ]TJ (t of Backus )Tj [-10 ]TJ (Naur)Tj [-8.09999 ]TJ ( F)Tj [5 ]TJ (o)Tj [-11.09999 ]TJ (r)Tj [-8.09999 ]TJ (m)Tj [-3.29998 ]TJ ( \(B)Tj [5.89999 ]TJ (N)Tj [-8.89999 ]TJ (F)Tj [5 ]TJ (\).)Tj [-11.09999 ]TJ ( This )Tj 
+ 0 -1.14999 TD
+ -0.00088 Tc
+ 0.39089 Tw
+ (technique was pionee)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (e)Tj [-7.09999 ]TJ (d)Tj [-0.89999 ]TJ ( b)Tj [-10.89999 ]TJ (y)Tj [29.09999 ]TJ ( J)Tj [-11.69999 ]TJ (ohn B)Tj [6.09999 ]TJ (a)Tj [-7.09999 ]TJ (ckus an)Tj [-10.89999 ]TJ (d Peter Naur, and use)Tj [-7.09999 ]TJ (d)Tj [-0.89999 ]TJ ( to describe )Tj 
+ T*
+ -0.00109 Tc
+ 0.30099 Tw
+ (A)Tj [-8.89999 ]TJ (L)Tj [9.69999 ]TJ (GO)Tj [-8.89999 ]TJ (L)Tj [9.69999 ]TJ (60. A )Tj [-10.09999 ]TJ (B)Tj [5.89999 ]TJ (N)Tj [-8.89999 ]TJ (F)Tj [5 ]TJ ( )Tj [-10.09999 ]TJ (g)Tj [8.89999 ]TJ (r)Tj [-8.09999 ]TJ (ammar c)Tj [-7.29998 ]TJ (a)Tj [2.69999 ]TJ (n be us)Tj [-11.89999 ]TJ (ed to ex)Tj [-11.09999 ]TJ (press )Tj 
+ /N171 1 Tf
+ 23.80999 0 TD
+ -0.00178 Tc
+ 0 Tw
+ (cont)Tj [-4 ]TJ (ext)Tj [-4 ]TJ (-f)Tj [-4 ]TJ (re)Tj [-8 ]TJ (e)Tj 
+ /N231 1 Tf
+ 4.76998 0 TD
+ 0.00028 Tc
+ 0.29969 Tw
+ ( la)Tj [-5.89999 ]TJ (ng)Tj [10.29998 ]TJ (ua)Tj [-5.89999 ]TJ (ges. Most)Tj [-11.89999 ]TJ ( )Tj 
+ -28.57998 -1.14999 TD
+ 0.00158 Tc
+ 0.08839 Tw
+ (c)Tj [5.39999 ]TJ (onstr)Tj [4.59999 ]TJ (uc)Tj [5.39999 ]TJ (ts in mode)Tj [5.39999 ]TJ (r)Tj [4.59999 ]TJ (n)Tj [1.59999 ]TJ ( prog)Tj [11.59999 ]TJ (ra)Tj [5.39999 ]TJ (mming)Tj [11.59999 ]TJ ( la)Tj [5.39999 ]TJ (n)Tj [-8.39999 ]TJ (g)Tj [11.59999 ]TJ (u)Tj [-8.39999 ]TJ (a)Tj [-4.59999 ]TJ (g)Tj [11.59999 ]TJ (e)Tj [5.39999 ]TJ (s can be)Tj [5.39999 ]TJ ( r)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (pre)Tj [5.39999 ]TJ (s)Tj [0.79998 ]TJ (e)Tj [5.39999 ]TJ (n)Tj [1.59999 ]TJ (te)Tj [5.39999 ]TJ (d in BNF. F)Tj [7.69999 ]TJ (o)Tj [1.59999 ]TJ (r)Tj [4.59999 ]TJ ( e)Tj [5.39999 ]TJ (x)Tj [-8.39999 ]TJ (a)Tj [5.39999 ]TJ (m)Tj [-0.59999 ]TJ (ple)Tj [5.39999 ]TJ (,)Tj [1.59999 ]TJ ( )Tj 
+ T*
+ 0.00079 Tc
+ -0.00079 Tw
+ (the)Tj [4.59999 ]TJ ( g)Tj [10.79998 ]TJ (r)Tj [-6.19999 ]TJ (a)Tj [4.59999 ]TJ (mma)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ ( f)Tj [3.79998 ]TJ (o)Tj [-9.19999 ]TJ (r)Tj [3.79998 ]TJ ( a)Tj [4.59999 ]TJ (n)Tj [0.79998 ]TJ ( )Tj [-10 ]TJ (e)Tj [4.59999 ]TJ (x)Tj [-9.19999 ]TJ (pr)Tj [3.79998 ]TJ (e)Tj [4.59999 ]TJ (ssion tha)Tj [4.59999 ]TJ (t)Tj [-1.39999 ]TJ ( multipl)Tj [8.59999 ]TJ (i)Tj [-1.39999 ]TJ (e)Tj [4.59999 ]TJ (s)Tj [0 ]TJ ( a)Tj [4.59999 ]TJ (nd a)Tj [4.59999 ]TJ (dds numbe)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ (s)Tj [0 ]TJ ( is )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 557.65948 Tm
+ 0.59568 Tc
+ (1)Tj [-1793.5 ]TJ (E)Tj [0.09999 ]TJ (-)Tj [597.89999 ]TJ (>E+E)Tj 
+ 0 -1.13038 TD
+ (2)Tj [-1793.5 ]TJ (E)Tj [0.09999 ]TJ (-)Tj [597.89999 ]TJ (>E*E)Tj 
+ T*
+ -0.00219 Tc
+ (3)Tj [-2391.39999 ]TJ (E)Tj [-597.79998 ]TJ (->)Tj [-597.89999 ]TJ (id)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 505.94378 Tm
+ -0.00109 Tc
+ 0.04109 Tw
+ (Three produ)Tj [-11.09999 ]TJ (ctions have )Tj [-10 ]TJ (been specifi)Tj [-13.29998 ]TJ (ed. Terms th)Tj [-11.09999 ]TJ (at appea)Tj [-7.29998 ]TJ (r)Tj [1.89999 ]TJ ( on the left-han)Tj [-11.09999 ]TJ (d side \(lhs\) of a )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.14048 Tw
+ (production, such as )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 190.94479 491.90499 Tm
+ 0 Tc
+ 0 Tw
+ (E)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 197.54418 491.90499 Tm
+ -0.00088 Tc
+ 0.14089 Tw
+ ( )Tj [-10 ]TJ (\(e)Tj [-7.09999 ]TJ (x)Tj [-10.89999 ]TJ (p)Tj [-0.89999 ]TJ (ression\) are nontermi)Tj [-13.09999 ]TJ (nals. Terms such )Tj [-10 ]TJ (as )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 432.72459 491.90499 Tm
+ -0.00219 Tc
+ 0 Tw
+ (id)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 445.92349 491.90499 Tm
+ 0.00228 Tc
+ 0.14768 Tw
+ ( \()Tj [5.29998 ]TJ (i)Tj [0.09999 ]TJ (de)Tj [6.09999 ]TJ (ntif)Tj [5.29998 ]TJ (ie)Tj [6.09999 ]TJ (r)Tj [5.29998 ]TJ (\))Tj [5.29998 ]TJ ( a)Tj [6.09999 ]TJ (r)Tj [5.29998 ]TJ (e )Tj 
+ -29.65998 -1.17999 TD
+ -0.00109 Tc
+ 0.21109 Tw
+ (terminals \(tokens return)Tj [-11.09999 ]TJ (ed b)Tj [-11.09999 ]TJ (y)Tj [18.89999 ]TJ ( lex)Tj [-11.09999 ]TJ (\))Tj [1.89999 ]TJ ( and onl)Tj [-13.29998 ]TJ (y)Tj [18.89999 ]TJ ( ap)Tj [-11.09999 ]TJ (pear on the ri)Tj [-13.29998 ]TJ (g)Tj [8.89999 ]TJ (h)Tj [-1.09999 ]TJ (t-hand )Tj [-10 ]TJ (side \(rhs\) of a )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.41049 Tw
+ (production. This g)Tj [9.5 ]TJ (r)Tj [-7.5 ]TJ (am)Tj [-12.69999 ]TJ (mar specifies th)Tj [-10.5 ]TJ (at an )Tj [-10 ]TJ (ex)Tj [-10.5 ]TJ (pression ma)Tj [-6.69999 ]TJ (y)Tj [19.5 ]TJ ( be th)Tj [-10.5 ]TJ (e)Tj [-6.69999 ]TJ ( sum of two)Tj [9.5 ]TJ ( )Tj 
+ T*
+ -0.00068 Tc
+ 0.03068 Tw
+ (ex)Tj [-10.69999 ]TJ (pressions, the product of two ex)Tj [-10.69999 ]TJ (pressions, or an)Tj [-10.69999 ]TJ ( identifier. W)Tj [-6.89999 ]TJ (e)Tj [3.09999 ]TJ ( can us)Tj [-11.5 ]TJ (e this g)Tj [9.29998 ]TJ (r)Tj [2.29998 ]TJ (amma)Tj [-6.89999 ]TJ (r to)Tj [-10.69999 ]TJ ( )Tj 
+ T*
+ -0.00079 Tc
+ 0.00079 Tw
+ (g)Tj [9.19999 ]TJ (e)Tj [3 ]TJ (n)Tj [-10.79998 ]TJ (e)Tj [3 ]TJ (rat)Tj [-13 ]TJ (e)Tj [3 ]TJ ( ex)Tj [-10.79998 ]TJ (pressions: )Tj 
+ 1.5 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 410.55178 Tm
+ 0.59568 Tc
+ (E-)Tj [597.89999 ]TJ (>E*E)Tj 
+ 11.41299 0 TD
+ -0.00219 Tc
+ (\(r2\))Tj 
+ -10.21739 -1.13038 TD
+ 0.59568 Tc
+ (-)Tj [597.89999 ]TJ (>E*z)Tj 
+ 10.21739 0 TD
+ -0.00219 Tc
+ (\(r3\))Tj 
+ -10.21739 -1.13038 TD
+ 0.59568 Tc
+ (-)Tj [597.89999 ]TJ (>E+E*z)Tj 
+ 10.21739 0 TD
+ -0.00219 Tc
+ (\(r1\))Tj 
+ -10.21739 -1.13038 TD
+ 0.59568 Tc
+ (-)Tj [597.89999 ]TJ (>E+y*z)Tj 
+ 10.21739 0 TD
+ -0.00219 Tc
+ (\(r3\))Tj 
+ -10.21739 -1.13038 TD
+ 0.59568 Tc
+ (-)Tj [597.89999 ]TJ (>x+y*z)Tj 
+ 10.21739 0 TD
+ -0.00219 Tc
+ (\(r3\))Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 346.35719 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00088 Tc
+ 0.42089 Tw
+ (At each step we ex)Tj [-10.89999 ]TJ (panded a term, replacin)Tj [-10.89999 ]TJ (g)Tj [-0.89999 ]TJ ( the lhs of)Tj [12.09999 ]TJ ( a production with )Tj [10 ]TJ (the)Tj [12.89999 ]TJ ( )Tj 
+ T*
+ -0.00079 Tc
+ 0.15078 Tw
+ (correspondin)Tj [-10.79998 ]TJ (g)Tj [9.19999 ]TJ ( rhs. The )Tj [-10 ]TJ (numbers on the rig)Tj [9.19999 ]TJ (h)Tj [-0.79998 ]TJ (t in)Tj [-10.79998 ]TJ (dicate which rule applie)Tj [-7 ]TJ (d. To parse an)Tj [-10.79998 ]TJ ( )Tj 
+ T*
+ -0.00068 Tc
+ 0.04069 Tw
+ (ex)Tj [-10.69999 ]TJ (pression, we actuall)Tj [-12.89999 ]TJ (y)Tj [19.29998 ]TJ ( n)Tj [-10.69999 ]TJ (eed to do the reverse ope)Tj [-6.89999 ]TJ (ration. )Tj [-10 ]TJ (I)Tj [22.29998 ]TJ (n)Tj [-0.69999 ]TJ (ste)Tj [-6.89999 ]TJ (a)Tj [3.09999 ]TJ (d of starting with a sing)Tj [9.29998 ]TJ (le )Tj 
+ T*
+ 0.16069 Tw
+ (nonterminal \(start s)Tj [-11.5 ]TJ (y)Tj [19.29998 ]TJ (mb)Tj [-10.69999 ]TJ (ol\) and g)Tj [9.29998 ]TJ (e)Tj [3.09999 ]TJ (ne)Tj [-6.89999 ]TJ (ratin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ ( an e)Tj [-6.89999 ]TJ (x)Tj [-10.69999 ]TJ (pression from a g)Tj [9.29998 ]TJ (r)Tj [2.29998 ]TJ (ammar, we need to )Tj 
+ /N171 1 Tf
+ T*
+ -0.00138 Tc
+ 0 Tw
+ (reduce)Tj 
+ /N231 1 Tf
+ 2.70999 0 TD
+ -0.00048 Tc
+ 0.03048 Tw
+ ( )Tj [-10 ]TJ (an ex)Tj [-10.5 ]TJ (pression to a sing)Tj [9.5 ]TJ (le nont)Tj [-12.69999 ]TJ (erminal. Thi)Tj [-12.69999 ]TJ (s)Tj [-1.29998 ]TJ ( is known as )Tj 
+ /N171 1 Tf
+ 23.00999 0 TD
+ -0.00009 Tc
+ 0 Tw
+ (bottom-up)Tj 
+ /N231 1 Tf
+ 4.10998 0 TD
+ -0.00149 Tc
+ 0.04148 Tw
+ ( or )Tj 
+ /N171 1 Tf
+ 1.39999 0 TD
+ 0.00099 Tc
+ 0 Tw
+ (shift-)Tj [4 ]TJ (re)Tj [4.79998 ]TJ (duc)Tj [4.79998 ]TJ (e)Tj 
+ /N231 1 Tf
+ 4.76998 0 TD
+ 0 Tc
+ ( )Tj 
+ -36 -1.14999 TD
+ -0.00039 Tc
+ 0.12039 Tw
+ (parsing)Tj [9.59999 ]TJ (,)Tj [-10.39999 ]TJ ( and us)Tj [-11.19999 ]TJ (es a)Tj [-6.59999 ]TJ ( stac)Tj [-6.59999 ]TJ (k for storin)Tj [-10.39999 ]TJ (g)Tj [9.59999 ]TJ ( te)Tj [-6.59999 ]TJ (rms. He)Tj [-6.59999 ]TJ (r)Tj [-7.39999 ]TJ (e)Tj [3.39999 ]TJ ( is the sam)Tj [-12.39999 ]TJ (e)Tj [3.39999 ]TJ ( de)Tj [-6.59999 ]TJ (rivation, but in rev)Tj [-10.39999 ]TJ (e)Tj [3.39999 ]TJ (rse)Tj [-6.59999 ]TJ ( )Tj 
+ T*
+ -0.00129 Tc
+ 0 Tw
+ (order: )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 13 13
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 13)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ 1.5 -1.14999 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 132.62969 683.40908 Tm
+ 0.59568 Tc
+ (1)Tj [-1467.29998 ]TJ (.x+y*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (shift)Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (2)Tj [-1467.29998 ]TJ (x.+y*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (reduce\(r3\))Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (3)Tj [-1467.29998 ]TJ (E.+y*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (shift)Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (4)Tj [-1467.29998 ]TJ (E+.y*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (shift)Tj 
+ -12.44558 -1.11959 TD
+ 0.59568 Tc
+ (5)Tj [-1467.29998 ]TJ (E+y.*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (reduce\(r3\))Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (6)Tj [-1467.29998 ]TJ (E+E.*z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (shift)Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (7)Tj [-1467.29998 ]TJ (E+E*.z)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (shift)Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (8)Tj [-1467.29998 ]TJ (E+E*z.)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (reduce\(r3\))Tj 
+ -12.44558 -1.13038 TD
+ 0.59568 Tc
+ (9)Tj [-1467.29998 ]TJ (E+E*E.)Tj 
+ 12.44558 0 TD
+ -0.00219 Tc
+ (reduce\(r2\))Tj [-3804.29998 ]TJ (emit)Tj [-597.89999 ]TJ (multiply)Tj 
+ -13.04348 -1.13038 TD
+ 0.59568 Tc
+ (1)Tj [597.89999 ]TJ (0)Tj [-1467.29998 ]TJ (E+E.)Tj 
+ 13.04348 0 TD
+ -0.00219 Tc
+ (reduce\(r1\))Tj [-3804.29998 ]TJ (emit)Tj [-597.89999 ]TJ (add)Tj 
+ -13.04348 -1.11959 TD
+ (11)Tj [-2065.19999 ]TJ (E)Tj [-597.89999 ]TJ (.)Tj [-7989.19999 ]TJ (accept)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 108.03169 544.58059 Tm
+ 0 Tc
+ ( )Tj 
+ -1.5 -1.14999 TD
+ -0.00059 Tc
+ 0.07058 Tw
+ (Terms to the left of th)Tj [-10.59999 ]TJ (e )Tj [-10 ]TJ (dot are on the sta)Tj [-6.79998 ]TJ (c)Tj [3.19999 ]TJ (k, whi)Tj [-12.79998 ]TJ (l)Tj [-2.79998 ]TJ (e remainin)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ ( input is to the ri)Tj [-12.79998 ]TJ (g)Tj [9.39999 ]TJ (h)Tj [-0.59999 ]TJ (t of the )Tj 
+ T*
+ 0.03059 Tw
+ (dot. W)Tj [-6.79998 ]TJ (e)Tj [3.19999 ]TJ ( s)Tj [8.59999 ]TJ (t)Tj [-2.79998 ]TJ (art b)Tj [-10.59999 ]TJ (y)Tj [29.39999 ]TJ ( shifting)Tj [9.39999 ]TJ ( )Tj [-10 ]TJ (tokens onto the s)Tj [8.59999 ]TJ (t)Tj [-2.79998 ]TJ (ack. When the top of )Tj [10 ]TJ (the stack )Tj [10 ]TJ (matches the rhs )Tj 
+ T*
+ -0.00088 Tc
+ 0.31089 Tw
+ (of a production, we r)Tj [-7.89999 ]TJ (e)Tj [-7.09999 ]TJ (place the match)Tj [-10.89999 ]TJ (e)Tj [2.89999 ]TJ (d tokens on the stack with t)Tj [6.89999 ]TJ (h)Tj [-0.89999 ]TJ (e lhs of the )Tj 
+ T*
+ -0.00068 Tc
+ 0.02069 Tw
+ (production. Conceptuall)Tj [-22.89999 ]TJ (y)Tj [9.29998 ]TJ (, the matched)Tj [-10.69999 ]TJ ( tokens of)Tj [-7.69999 ]TJ ( the rhs )Tj [-10 ]TJ (are pop)Tj [-10.69999 ]TJ (ped of)Tj [-7.69999 ]TJ (f the)Tj [-6.89999 ]TJ ( stack, and)Tj [-10.69999 ]TJ ( the)Tj [-6.89999 ]TJ ( )Tj 
+ T*
+ -0.00048 Tc
+ 0.04049 Tw
+ (lhs of the produ)Tj [-10.5 ]TJ (ction is pushed on the sta)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ (k. The)Tj [-6.69999 ]TJ ( )Tj [-10 ]TJ (matched tokens )Tj [-10 ]TJ (are)Tj [-6.69999 ]TJ ( kno)Tj [-10.5 ]TJ (wn as a)Tj [-6.69999 ]TJ ( )Tj 
+ /N171 1 Tf
+ 33.02999 0 TD
+ 0.00039 Tc
+ 0 Tw
+ (handle)Tj 
+ /N231 1 Tf
+ 2.71998 0 TD
+ 0 Tc
+ (, )Tj 
+ -35.75 -1.14999 TD
+ -0.00248 Tc
+ 0.05249 Tw
+ (and we ar)Tj [-9.5 ]TJ (e )Tj 
+ /N171 1 Tf
+ 4.71998 0 TD
+ -0.00068 Tc
+ 0 Tw
+ (reducing)Tj 
+ /N231 1 Tf
+ 3.54998 0 TD
+ -0.00028 Tc
+ 0.05029 Tw
+ ( the )Tj [-10 ]TJ (handle to the lhs of the production. This process c)Tj [-6.5 ]TJ (ontinues until)Tj [7.5 ]TJ ( )Tj 
+ -8.26998 -1.14999 TD
+ 0.10029 Tw
+ (we have shifted all input to the stack, and onl)Tj [-12.5 ]TJ (y)Tj [29.69999 ]TJ ( t)Tj [-12.5 ]TJ (h)Tj [-0.29998 ]TJ (e starting)Tj [9.69999 ]TJ ( nonterminal r)Tj [-7.29998 ]TJ (e)Tj [3.5 ]TJ (mains on the)Tj [13.5 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.04049 Tw
+ (stack. )Tj [-10 ]TJ (I)Tj [22.5 ]TJ (n)Tj [-0.5 ]TJ ( step 1 we shift the )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 227.06179 433.94989 Tm
+ 0 Tc
+ 0 Tw
+ (x)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 233.66119 433.94989 Tm
+ -0.00149 Tc
+ 0.04148 Tw
+ ( t)Tj [-3.69999 ]TJ (o)Tj [-1.5 ]TJ ( t)Tj [-3.69999 ]TJ (h)Tj [-1.5 ]TJ (e s)Tj [7.69999 ]TJ (t)Tj [-3.69999 ]TJ (ack. S)Tj [-5.39999 ]TJ (t)Tj [-3.69999 ]TJ (ep 2 )Tj [10 ]TJ (appl)Tj [-3.69999 ]TJ (i)Tj [-3.69999 ]TJ (e)Tj [2.29998 ]TJ (s rul)Tj [-3.69999 ]TJ (e)Tj [2.39999 ]TJ ( r3 t)Tj [-3.69999 ]TJ (o)Tj [-1.5 ]TJ ( t)Tj [-3.69999 ]TJ (h)Tj [-1.5 ]TJ (e st)Tj [-3.69999 ]TJ (ac)Tj [12.29998 ]TJ (k, chang)Tj [8.5 ]TJ (i)Tj [-3.69999 ]TJ (n)Tj [-11.5 ]TJ (g)Tj [8.5 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 515.39768 433.94989 Tm
+ 0 Tc
+ 0 Tw
+ (x)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 521.99708 433.94989 Tm
+ ( )Tj 
+ -36 -1.20999 TD
+ 0.00109 Tc
+ (to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 104.43199 419.43109 Tm
+ 0 Tc
+ (E)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 111.03138 419.43109 Tm
+ 0.00009 Tc
+ 0.16989 Tw
+ (. W)Tj [-6.09999 ]TJ (e)Tj [3.89999 ]TJ ( continue shifti)Tj [7.89999 ]TJ (ng)Tj [10.09999 ]TJ ( and )Tj [-10 ]TJ (reducin)Tj [-9.89999 ]TJ (g)Tj [10.09999 ]TJ (,)Tj [0.09999 ]TJ ( until a)Tj [-6.09999 ]TJ ( sing)Tj [10.09999 ]TJ (le nonterminal, the)Tj [-6.09999 ]TJ ( start s)Tj [-10.69999 ]TJ (y)Tj [20.09999 ]TJ (mbol,)Tj [-9.89999 ]TJ ( )Tj 
+ -1.75 -1.18998 TD
+ 0.00109 Tc
+ 0.03889 Tw
+ (r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (ma)Tj [4.89999 ]TJ (ins in the)Tj [4.89999 ]TJ ( sta)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (k. )Tj [-10 ]TJ (I)Tj [14.09999 ]TJ (n)Tj [1.09999 ]TJ ( s)Tj [-9.69999 ]TJ (t)Tj [-1.09999 ]TJ (e)Tj [4.89999 ]TJ (p)Tj [1.09999 ]TJ ( 9, whe)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ ( we)Tj [4.89999 ]TJ ( re)Tj [4.89999 ]TJ (duc)Tj [4.89999 ]TJ (e)Tj [4.89999 ]TJ ( )Tj [-10 ]TJ (rule)Tj [4.89999 ]TJ ( r)Tj [4.09999 ]TJ (2, we)Tj [4.89999 ]TJ ( e)Tj [4.89999 ]TJ (mit the)Tj [4.89999 ]TJ ( multipl)Tj [-11.09999 ]TJ (y)Tj [21.09999 ]TJ ( instr)Tj [4.09999 ]TJ (u)Tj [1.09999 ]TJ (c)Tj [4.89999 ]TJ (tion.)Tj [11.09999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0.37998 Tw
+ (Similarl)Tj [-12.19999 ]TJ (y)Tj [30 ]TJ (,)Tj [0 ]TJ ( the )Tj [-10 ]TJ (add instruction is emitted in step )Tj [380 ]TJ (10. Thus, multipl)Tj [-12.19999 ]TJ (y)Tj [20 ]TJ ( has a higher)Tj [-7 ]TJ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0.00099 Tw
+ (preced)Tj [-11 ]TJ (enc)Tj [-7.19999 ]TJ (e)Tj [2.79998 ]TJ ( than addition)Tj [-11 ]TJ (.)Tj [-0.89999 ]TJ ( )Tj 
+ T*
+ -0.00068 Tc
+ 0.15069 Tw
+ ( )Tj [-1100 ]TJ (Consider, however, the shift at step 6.)Tj [9.29998 ]TJ ( )Tj [-10 ]TJ (I)Tj [22.29998 ]TJ (n)Tj [-0.69999 ]TJ (stead o)Tj [-10.69999 ]TJ (f)Tj [2.29998 ]TJ ( shifting)Tj [9.29998 ]TJ (,)Tj [-0.69999 ]TJ ( we could have reduced)Tj [-10.69999 ]TJ (,)Tj [-10.69999 ]TJ ( )Tj 
+ T*
+ -0.00129 Tc
+ 0.36129 Tw
+ (appl)Tj [-13.5 ]TJ (y)Tj [18.69999 ]TJ (i)Tj [-3.5 ]TJ (n)Tj [-11.29998 ]TJ (g)Tj [8.69999 ]TJ ( )Tj [-10 ]TJ (rul)Tj [-3.5 ]TJ (e)Tj [2.5 ]TJ ( )Tj [-10 ]TJ (r1. Thi)Tj [-3.5 ]TJ (s)Tj [-12.09999 ]TJ ( woul)Tj [-3.5 ]TJ (d r)Tj [-8.29998 ]TJ (e)Tj [2.5 ]TJ (sul)Tj [-3.5 ]TJ (t)Tj [-3.5 ]TJ ( i)Tj [-3.5 ]TJ (n)Tj [-1.29998 ]TJ ( addi)Tj [-3.5 ]TJ (t)Tj [-3.5 ]TJ (i)Tj [-3.5 ]TJ (on havi)Tj [-3.5 ]TJ (n)Tj [-11.29998 ]TJ (g)Tj [8.69999 ]TJ ( a)Tj [-7.5 ]TJ ( hi)Tj [-13.5 ]TJ (g)Tj [8.69999 ]TJ (h)Tj [-1.29998 ]TJ (er)Tj [-8.29998 ]TJ ( pr)Tj [-8.29998 ]TJ (eced)Tj [-11.29998 ]TJ (ence)Tj [-7.5 ]TJ ( t)Tj [-3.5 ]TJ (h)Tj [-1.29998 ]TJ (an)Tj [-11.29998 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0.10998 Tw
+ (multiplication. This i)Tj [7.79998 ]TJ (s)Tj [-0.79998 ]TJ ( k)Tj [10 ]TJ (nown as a )Tj 
+ /N171 1 Tf
+ 14.44999 0 TD
+ 0.00099 Tc
+ 0 Tw
+ (shift-)Tj [4 ]TJ (re)Tj [4.79998 ]TJ (duc)Tj [4.79998 ]TJ (e)Tj 
+ /N231 1 Tf
+ 4.76998 0 TD
+ 0.00119 Tc
+ 0.10879 Tw
+ ( )Tj [-10 ]TJ (conf)Tj [4.19999 ]TJ (lic)Tj [5 ]TJ (t. Our)Tj [4.19999 ]TJ ( gr)Tj [4.19999 ]TJ (a)Tj [5 ]TJ (mma)Tj [5 ]TJ (r)Tj [4.19999 ]TJ ( is )Tj 
+ /N171 1 Tf
+ 10.94999 0 TD
+ 0 Tc
+ 0 Tw
+ (ambiguous)Tj 
+ /N231 1 Tf
+ 4.38999 0 TD
+ -0.00079 Tc
+ 0.11079 Tw
+ (, as )Tj 
+ -34.55999 -1.14999 TD
+ -0.00059 Tc
+ 0.16059 Tw
+ (there is more than one )Tj [-10 ]TJ (possible derivation that will )Tj [-10 ]TJ (y)Tj [29.39999 ]TJ (i)Tj [-12.79998 ]TJ (eld the ex)Tj [-10.59999 ]TJ (pression. )Tj [-10 ]TJ (I)Tj [22.39999 ]TJ (n)Tj [-0.59999 ]TJ ( this cas)Tj [-11.39999 ]TJ (e,)Tj [-10.59999 ]TJ ( )Tj 
+ T*
+ -0.00199 Tc
+ 0.00199 Tw
+ (operat)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ (r pr)Tj [-9 ]TJ (ec)Tj [-8.19999 ]TJ (edenc)Tj [-8.19999 ]TJ (e)Tj [1.79998 ]TJ ( i)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( af)Tj [-9 ]TJ (fect)Tj [-4.19999 ]TJ (ed. As )Tj [-10 ]TJ (anot)Tj [-4.19999 ]TJ (her )Tj [-10 ]TJ (ex)Tj [-12 ]TJ (am)Tj [-4.19999 ]TJ (pl)Tj [-4.19999 ]TJ (e, associ)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (v)Tj [-2 ]TJ (i)Tj [-4.19999 ]TJ (t)Tj [-14.19999 ]TJ (y)Tj [18 ]TJ ( i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e rul)Tj [-14.19999 ]TJ (e)Tj [2.09999 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 282.76249 Tm
+ 0.59568 Tc
+ (E-)Tj [597.89999 ]TJ (>E+E)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 268.48359 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.11059 Tw
+ (is ambig)Tj [9.39999 ]TJ (uous, )Tj [-10 ]TJ (for w)Tj [-8.39999 ]TJ (e)Tj [3.29998 ]TJ ( m)Tj [-12.79998 ]TJ (a)Tj [-6.79998 ]TJ (y)Tj [19.39999 ]TJ ( )Tj [-10 ]TJ (re)Tj [-6.79998 ]TJ (curse)Tj [-6.79998 ]TJ ( on the)Tj [-6.79998 ]TJ ( left o)Tj [-10.59999 ]TJ (r)Tj [-7.59999 ]TJ ( the ri)Tj [-12.79998 ]TJ (g)Tj [9.39999 ]TJ (h)Tj [-0.59999 ]TJ (t. To)Tj [-10.59999 ]TJ ( remed)Tj [-20.59999 ]TJ (y)Tj [19.39999 ]TJ ( )Tj [-10 ]TJ (th)Tj [-10.59999 ]TJ (e situation, we )Tj 
+ T*
+ -0.00079 Tc
+ 0.12078 Tw
+ (could rewrite the )Tj [-10 ]TJ (gramm)Tj [-13 ]TJ (a)Tj [3 ]TJ (r, or suppl)Tj [-23 ]TJ (y)Tj [29.19999 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.19999 ]TJ (a)Tj [-7 ]TJ (c)Tj [-7 ]TJ (c)Tj [3 ]TJ ( with directives that indicate )Tj [-10 ]TJ (which operator)Tj [-7.79998 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.12059 Tw
+ (has prec)Tj [-6.79998 ]TJ (edenc)Tj [-6.79998 ]TJ (e)Tj [3.19999 ]TJ (. The latt)Tj [-12.79998 ]TJ (er method is simpler, and will be demonstrated in the )Tj 
+ /N171 1 Tf
+ 32.72999 0 TD
+ -0.00028 Tc
+ 0 Tw
+ (practice)Tj 
+ /N231 1 Tf
+ 3.26998 0 TD
+ 0 Tc
+ ( )Tj 
+ -36 -1.14999 TD
+ -0.00028 Tc
+ (section. )Tj 
+ 0 -1.16999 TD
+ 0.00079 Tc
+ 0.12919 Tw
+ ( )Tj [-1120 ]TJ (The)Tj [4.59999 ]TJ ( )Tj [10 ]TJ (f)Tj [3.79998 ]TJ (o)Tj [0.79998 ]TJ (llowin)Tj [-9.19999 ]TJ (g)Tj [10.79998 ]TJ ( g)Tj [10.79998 ]TJ (r)Tj [-6.19999 ]TJ (a)Tj [4.59999 ]TJ (mma)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ ( ha)Tj [4.59999 ]TJ (s )Tj [10 ]TJ (a)Tj [4.59999 ]TJ ( )Tj 
+ /N171 1 Tf
+ 14.17999 0 TD
+ -0.00158 Tc
+ 0 Tw
+ (r)Tj [-12.39999 ]TJ (e)Tj [2.19999 ]TJ (duc)Tj [-7.79998 ]TJ (e-redu)Tj [-11.59999 ]TJ (ce)Tj 
+ /N231 1 Tf
+ 5.77999 0 TD
+ 0.00219 Tc
+ 0.11779 Tw
+ ( )Tj [-10 ]TJ (c)Tj [6 ]TJ (o)Tj [2.19999 ]TJ (n)Tj [-7.79998 ]TJ (f)Tj [5.19999 ]TJ (lic)Tj [6 ]TJ (t. With a)Tj [6 ]TJ (n)Tj [2.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 422.52549 199.24949 Tm
+ -0.00219 Tc
+ 0 Tw
+ (id)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 435.72439 199.24949 Tm
+ -0.00019 Tc
+ 0.12019 Tw
+ ( on the)Tj [-6.39999 ]TJ ( stack, w)Tj [-8 ]TJ (e)Tj [-6.39999 ]TJ ( )Tj 
+ -28.80999 -1.20999 TD
+ 0.00338 Tc
+ -0.00338 Tw
+ (may)Tj [23.39999 ]TJ ( re)Tj [7.19999 ]TJ (duce)Tj [7.19999 ]TJ ( to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 160.94729 184.73059 Tm
+ 0 Tc
+ 0 Tw
+ (T)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 167.54669 184.73059 Tm
+ -0.00138 Tc
+ 0.00138 Tw
+ (, or redu)Tj [-11.39999 ]TJ (ce to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 233.78118 184.73059 Tm
+ 0 Tc
+ 0 Tw
+ (E)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 240.38059 184.73059 Tm
+ (. )Tj 
+ -12.52999 -1.17999 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 158.57279 Tm
+ 0.59568 Tc
+ (E-)Tj [597.89999 ]TJ (>T)Tj 
+ 0 -1.13038 TD
+ (E-)Tj [597.89999 ]TJ (>i)Tj [597.89999 ]TJ (d)Tj 
+ T*
+ (T-)Tj [597.89999 ]TJ (>i)Tj [597.89999 ]TJ (d)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 119.33609 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00248 Tc
+ 0.05749 Tw
+ (Ya)Tj [6.29998 ]TJ (c)Tj [6.29998 ]TJ (c)Tj [-3.69999 ]TJ ( ta)Tj [6.29998 ]TJ (ke)Tj [6.29998 ]TJ (s)Tj [-8.29998 ]TJ ( a de)Tj [6.29998 ]TJ (fa)Tj [6.29998 ]TJ (ult ac)Tj [6.29998 ]TJ (tion whe)Tj [6.29998 ]TJ (n)Tj [-7.5 ]TJ ( the)Tj [6.29998 ]TJ (r)Tj [5.5 ]TJ (e is a c)Tj [6.29998 ]TJ (o)Tj [2.5 ]TJ (n)Tj [-7.5 ]TJ (f)Tj [5.5 ]TJ (lic)Tj [6.29998 ]TJ (t. F)Tj [8.59999 ]TJ (o)Tj [-7.5 ]TJ (r)Tj [5.5 ]TJ ( shif)Tj [5.5 ]TJ (t-)Tj [5.5 ]TJ (re)Tj [6.29998 ]TJ (duce)Tj [6.29998 ]TJ ( c)Tj [6.29998 ]TJ (o)Tj [2.5 ]TJ (n)Tj [-7.5 ]TJ (f)Tj [5.5 ]TJ (l)Tj [-9.69999 ]TJ (i)Tj [0.29998 ]TJ (c)Tj [6.29998 ]TJ (t)Tj [0.29998 ]TJ (s, )Tj [-10 ]TJ (y)Tj [22.5 ]TJ (acc)Tj [6.29998 ]TJ ( will )Tj 
+ T*
+ 0.00149 Tc
+ 0.09849 Tw
+ (shif)Tj [4.5 ]TJ (t. F)Tj [7.59999 ]TJ (o)Tj [1.5 ]TJ (r)Tj [4.5 ]TJ ( r)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (du)Tj [-8.5 ]TJ (c)Tj [5.29998 ]TJ (e)Tj [5.39999 ]TJ (-r)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (duce)Tj [5.29998 ]TJ ( )Tj [-10 ]TJ (c)Tj [5.29998 ]TJ (onf)Tj [4.5 ]TJ (lic)Tj [5.29998 ]TJ (ts, it will use)Tj [5.29998 ]TJ ( the)Tj [5.29998 ]TJ ( f)Tj [4.5 ]TJ (i)Tj [-0.69999 ]TJ (r)Tj [4.5 ]TJ (s)Tj [0.69999 ]TJ (t r)Tj [4.5 ]TJ (u)Tj [1.5 ]TJ (le)Tj [5.29998 ]TJ ( in the)Tj [5.29998 ]TJ ( listing)Tj [11.5 ]TJ (.)Tj [1.5 ]TJ ( )Tj [-10 ]TJ (I)Tj [4.5 ]TJ (t)Tj [-0.69999 ]TJ ( a)Tj [5.29998 ]TJ (l)Tj [-0.69999 ]TJ (so issue)Tj [5.29998 ]TJ (s)Tj [0.69999 ]TJ ( a)Tj [15.29998 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.01058 Tw
+ (warnin)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ ( messa)Tj [-6.79998 ]TJ (ge wh)Tj [-10.59999 ]TJ (ene)Tj [-6.79998 ]TJ (v)Tj [-0.59999 ]TJ (er a)Tj [-6.79998 ]TJ ( conflict )Tj [-10 ]TJ (ex)Tj [-10.59999 ]TJ (ists. The warnin)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ (s)Tj [-1.39999 ]TJ ( ma)Tj [-16.79998 ]TJ (y)Tj [19.39999 ]TJ ( b)Tj [-10.59999 ]TJ (e)Tj [3.19999 ]TJ ( suppr)Tj [-7.59999 ]TJ (essed b)Tj [-20.59999 ]TJ (y)Tj [19.39999 ]TJ ( makin)Tj [-10.59999 ]TJ (g)Tj [-0.59999 ]TJ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 14 14
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 14)Tj 
+ 0 55.84999 TD
+ -0.00039 Tc
+ 0.02038 Tw
+ (the grammar un)Tj [-10.39999 ]TJ (ambig)Tj [9.59999 ]TJ (u)Tj [-0.39999 ]TJ (o)Tj [-10.39999 ]TJ (u)Tj [-0.39999 ]TJ (s. Several methods fo)Tj [-10.39999 ]TJ (r r)Tj [-7.39999 ]TJ (e)Tj [3.39999 ]TJ (moving)Tj [9.59999 ]TJ ( ambi)Tj [-12.59999 ]TJ (g)Tj [9.59999 ]TJ (u)Tj [-0.39999 ]TJ (it)Tj [-22.59999 ]TJ (y)Tj [19.59999 ]TJ ( will be present)Tj [-12.59999 ]TJ (e)Tj [3.39999 ]TJ (d in)Tj [-10.39999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0.00028 Tw
+ (subsequent sections. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 659.65109 Tm
+ 0.00039 Tc
+ 0.58639 Tw
+ (3.2 Practice, )Tj [586.39999 ]TJ (Part )Tj [578.89999 ]TJ (I )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 639.25268 Tm
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -7.97999 TD
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ T*
+ -0.00028 Tc
+ 0.19029 Tw
+ (I)Tj [12.69999 ]TJ (nput to )Tj [-20 ]TJ (y)Tj [19.69999 ]TJ (a)Tj [-6.5 ]TJ (c)Tj [-6.5 ]TJ (c)Tj [3.5 ]TJ ( is divided)Tj [-10.29998 ]TJ ( into three s)Tj [-11.09999 ]TJ (ections. Th)Tj [-10.29998 ]TJ (e )Tj 
+ /N171 1 Tf
+ 20.94999 0 TD
+ 0.00099 Tc
+ 0 Tw
+ (de)Tj [4.79998 ]TJ (finitions)Tj 
+ /N231 1 Tf
+ 4.22999 0 TD
+ -0.00028 Tc
+ 0.19029 Tw
+ ( section co)Tj [-10.29998 ]TJ (nsists of token )Tj 
+ -25.17999 -1.15998 TD
+ -0.00189 Tc
+ 0.02189 Tw
+ (decl)Tj [-4.09999 ]TJ (ar)Tj [-8.89999 ]TJ (at)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (ons, and C)Tj [-4.89999 ]TJ ( code )Tj [10 ]TJ (bracket)Tj [-14.09999 ]TJ (ed b)Tj [-11.89999 ]TJ (y)Tj [18.09999 ]TJ ( \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 281.89718 501.98419 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%{)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 295.21609 501.98419 Tm
+ -0.00189 Tc
+ 0.02189 Tw
+ (\223 and \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 329.53318 501.98419 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 342.73208 501.98419 Tm
+ -0.00309 Tc
+ 0.02299 Tw
+ (\224. The BN)Tj [-10.89999 ]TJ (F g)Tj [6.89999 ]TJ (r)Tj [-10.09999 ]TJ (am)Tj [-5.29998 ]TJ (m)Tj [-5.29998 ]TJ (a)Tj [0.69999 ]TJ (r )Tj [-10.09999 ]TJ (i)Tj [-5.29998 ]TJ (s)Tj [-3.89999 ]TJ ( pl)Tj [-5.29998 ]TJ (aced i)Tj [-5.29998 ]TJ (n)Tj [-3.09999 ]TJ ( t)Tj [-5.29998 ]TJ (h)Tj [-3.09999 ]TJ (e)Tj [10.69999 ]TJ ( )Tj 
+ /N171 1 Tf
+ -21.05999 -1.18998 TD
+ -0.00019 Tc
+ 0 Tw
+ (rules)Tj 
+ /N231 1 Tf
+ 2 0 TD
+ -0.00068 Tc
+ 0.00068 Tw
+ ( section, and user su)Tj [-10.69999 ]TJ (broutines are )Tj [-10 ]TJ (added in th)Tj [-10.69999 ]TJ (e )Tj 
+ /N171 1 Tf
+ 18.65998 0 TD
+ -0.00009 Tc
+ 0 Tw
+ (subroutines)Tj 
+ /N231 1 Tf
+ 4.66999 0 TD
+ -0.00019 Tc
+ 0.00019 Tw
+ ( section.  )Tj 
+ -25.32998 -1.14999 TD
+ 0.00109 Tc
+ 0.13888 Tw
+ ( )Tj [-1110 ]TJ (This is be)Tj [4.89999 ]TJ (st)Tj [8.89999 ]TJ ( illu)Tj [11.09999 ]TJ (str)Tj [4.09999 ]TJ (a)Tj [4.89999 ]TJ (te)Tj [4.89999 ]TJ (d by)Tj [21.09999 ]TJ ( )Tj [-10 ]TJ (c)Tj [4.89999 ]TJ (onstr)Tj [4.09999 ]TJ (uc)Tj [4.89999 ]TJ (tin)Tj [-8.89999 ]TJ (g)Tj [11.09999 ]TJ ( a)Tj [4.89999 ]TJ ( sma)Tj [4.89999 ]TJ (ll c)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (c)Tj [4.89999 ]TJ (u)Tj [1.09999 ]TJ (la)Tj [4.89999 ]TJ (tor)Tj [4.09999 ]TJ ( tha)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ ( c)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ (dd a)Tj [4.89999 ]TJ (nd subtr)Tj [4.09999 ]TJ (a)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ ( )Tj 
+ T*
+ -0.00039 Tc
+ 0.25039 Tw
+ (numbers. W)Tj [-6.59999 ]TJ (e)Tj [3.39999 ]TJ (\222ll be)Tj [-6.59999 ]TJ (g)Tj [9.59999 ]TJ (i)Tj [-2.59999 ]TJ (n b)Tj [-10.39999 ]TJ (y)Tj [19.59999 ]TJ ( )Tj [-10 ]TJ (ex)Tj [-10.39999 ]TJ (amining)Tj [9.59999 ]TJ ( th)Tj [-10.39999 ]TJ (e linka)Tj [-6.59999 ]TJ (ge betwe)Tj [-6.59999 ]TJ (e)Tj [3.39999 ]TJ (n lex)Tj [-10.39999 ]TJ ( and )Tj [-20 ]TJ (y)Tj [19.59999 ]TJ (a)Tj [3.39999 ]TJ (c)Tj [-6.59999 ]TJ (c)Tj [3.39999 ]TJ (. Her)Tj [-7.39999 ]TJ (e)Tj [3.39999 ]TJ ( is the )Tj 
+ T*
+ -0.00019 Tc
+ 0.00019 Tw
+ (definitions section for the )Tj [-10 ]TJ (y)Tj [19.79998 ]TJ (a)Tj [-6.39999 ]TJ (c)Tj [-6.39999 ]TJ (c)Tj [3.59999 ]TJ ( input file: )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 421.83088 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%token)Tj [-597.89999 ]TJ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 394.83309 Tm
+ -0.00199 Tc
+ 0.09199 Tw
+ (Thi)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( defi)Tj [-4.19999 ]TJ (ni)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (on decl)Tj [-14.19999 ]TJ (ares)Tj [-12.79998 ]TJ ( )Tj [-10 ]TJ (an )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 225.14189 394.83309 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 271.33799 394.83309 Tm
+ -0.00048 Tc
+ 0.09049 Tw
+ ( tok)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ (n. W)Tj [-6.69999 ]TJ (h)Tj [-0.5 ]TJ (e)Tj [-6.69999 ]TJ (n)Tj [-0.5 ]TJ ( we)Tj [-6.69999 ]TJ ( run )Tj [-20 ]TJ (y)Tj [19.5 ]TJ (a)Tj [-6.69999 ]TJ (c)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ (, it )Tj [-10 ]TJ (gener)Tj [-7.5 ]TJ (a)Tj [-6.69999 ]TJ (tes a p)Tj [-10.5 ]TJ (a)Tj [3.29998 ]TJ (rse)Tj [-6.69999 ]TJ (r)Tj [2.5 ]TJ ( in )Tj 
+ -15.10998 -1.20999 TD
+ 0.00219 Tc
+ 0 Tw
+ (f)Tj [5.19999 ]TJ (ile)Tj [6 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 108.99159 380.31428 Tm
+ -0.00219 Tc
+ (y.tab.c)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 155.18769 380.31428 Tm
+ -0.00068 Tc
+ 0.00068 Tw
+ (, and also c)Tj [-6.89999 ]TJ (r)Tj [2.29998 ]TJ (eates )Tj [-10 ]TJ (an include file, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 314.65438 380.31428 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.)Tj [-10.89999 ]TJ (tab.h)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 360.97059 380.31428 Tm
+ 0.00219 Tc
+ (: )Tj 
+ -22.57998 -1.18998 TD
+ 0 Tc
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 354.03649 Tm
+ -0.00219 Tc
+ (#ifndef)Tj [-597.89999 ]TJ (YYSTYPE)Tj 
+ 0 -1.11959 TD
+ (#define)Tj [-597.89999 ]TJ (YYSTYPE)Tj [-597.89999 ]TJ (int)Tj 
+ 0 -1.13038 TD
+ (#endif)Tj 
+ T*
+ (#define)Tj [-597.89999 ]TJ (INTEGER)Tj [-597.89999 ]TJ (258)Tj 
+ T*
+ (extern)Tj [-597.89999 ]TJ (YYSTYPE)Tj [-597.89999 ]TJ (yylval;)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 289.96189 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00109 Tc
+ 0.03889 Tw
+ (L)Tj [11.89999 ]TJ (e)Tj [4.89999 ]TJ (x)Tj [-8.89999 ]TJ ( inc)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (ude)Tj [4.89999 ]TJ (s this f)Tj [4.09999 ]TJ (ile)Tj [4.89999 ]TJ ( a)Tj [4.89999 ]TJ (n)Tj [11.09999 ]TJ (d utili)Tj [8.89999 ]TJ (ze)Tj [4.89999 ]TJ (s the)Tj [4.89999 ]TJ ( de)Tj [4.89999 ]TJ (f)Tj [4.09999 ]TJ (i)Tj [-1.09999 ]TJ (nitions)Tj [10.29998 ]TJ ( )Tj [10 ]TJ (f)Tj [4.09999 ]TJ (o)Tj [1.09999 ]TJ (r)Tj [4.09999 ]TJ ( toke)Tj [4.89999 ]TJ (n va)Tj [4.89999 ]TJ (lue)Tj [4.89999 ]TJ (s)Tj [0.29998 ]TJ (. To obta)Tj [4.89999 ]TJ (i)Tj [-1.09999 ]TJ (n toke)Tj [4.89999 ]TJ (ns, )Tj [-10 ]TJ (y)Tj [21.09999 ]TJ (a)Tj [4.89999 ]TJ (cc )Tj 
+ 0 -1.16999 TD
+ 0.00169 Tc
+ 0 Tw
+ (c)Tj [5.5 ]TJ (a)Tj [5.5 ]TJ (lls )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 117.27088 262.12419 Tm
+ -0.00219 Tc
+ (yylex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 150.26809 262.12419 Tm
+ 0.00009 Tc
+ 0.18989 Tw
+ (. F)Tj [6.19999 ]TJ (unction )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 206.54348 262.12419 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 239.54069 262.12419 Tm
+ -0.00109 Tc
+ 0.19108 Tw
+ ( has a r)Tj [-8.09999 ]TJ (e)Tj [2.69999 ]TJ (turn t)Tj [-13.29998 ]TJ (y)Tj [18.89999 ]TJ (p)Tj [-11.09999 ]TJ (e)Tj [2.69999 ]TJ ( of )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 351.73139 262.12419 Tm
+ -0.00219 Tc
+ 0 Tw
+ (int)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 371.52969 262.12419 Tm
+ -0.00099 Tc
+ 0.19099 Tw
+ (, and )Tj [-10 ]TJ (returns t)Tj [-13.19999 ]TJ (h)Tj [-1 ]TJ (e token value.)Tj [-11 ]TJ ( )Tj 
+ -23.45999 -1.20999 TD
+ -0.00199 Tc
+ 0.00199 Tw
+ (Val)Tj [-4.19999 ]TJ (u)Tj [-2 ]TJ (es associ)Tj [-14.19999 ]TJ (at)Tj [-4.19999 ]TJ (ed wi)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e t)Tj [-4.19999 ]TJ (oken ar)Tj [-9 ]TJ (e ret)Tj [-4.19999 ]TJ (u)Tj [-2 ]TJ (rn)Tj [-12 ]TJ (ed b)Tj [-22 ]TJ (y)Tj [18 ]TJ ( l)Tj [-4.19999 ]TJ (e)Tj [-8.19999 ]TJ (x)Tj [-12 ]TJ ( i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ ( vari)Tj [-4.19999 ]TJ (abl)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 397.56748 247.60539 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 437.16419 247.60539 Tm
+ -0.00268 Tc
+ 0.00268 Tw
+ (. Fo)Tj [-12.69999 ]TJ (r ex)Tj [-12.69999 ]TJ (am)Tj [-4.89999 ]TJ (pl)Tj [-4.89999 ]TJ (e, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 222.76748 Tm
+ -0.00219 Tc
+ 0 Tw
+ ([0-9]+)Tj [-3587 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (atoi\(yytext\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (INTEGER;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 171.05178 Tm
+ ( )Tj 
+ 0 -1.16999 TD
+ 0.00079 Tc
+ 0.05918 Tw
+ (would stor)Tj [3.79998 ]TJ (e)Tj [4.59999 ]TJ ( the)Tj [4.59999 ]TJ ( v)Tj [-9.19999 ]TJ (a)Tj [4.59999 ]TJ (lue)Tj [4.59999 ]TJ ( o)Tj [-9.19999 ]TJ (f)Tj [3.79998 ]TJ ( )Tj [-10 ]TJ (the)Tj [4.59999 ]TJ ( inte)Tj [4.59999 ]TJ (ge)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ ( in )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 281.17718 157.01298 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yy)Tj [-10.89999 ]TJ (lval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 320.89389 157.01298 Tm
+ -0.00039 Tc
+ 0.06039 Tw
+ (, a)Tj [-6.59999 ]TJ (nd return tok)Tj [-10.39999 ]TJ (e)Tj [3.39999 ]TJ (n )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 411.48638 157.01298 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGE)Tj [-10.89999 ]TJ (R)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 457.80249 157.01298 Tm
+ 0.00509 Tc
+ 0.05488 Tw
+ ( to)Tj [5.09999 ]TJ ( )Tj [-10 ]TJ (y)Tj [25.09999 ]TJ (acc)Tj [8.89999 ]TJ (.)Tj [5.09999 ]TJ ( T)Tj [5.89999 ]TJ (h)Tj [5.09999 ]TJ (e )Tj 
+ -30.64999 -1.20999 TD
+ -0.00189 Tc
+ 0.06188 Tw
+ (t)Tj [-14.09999 ]TJ (y)Tj [18.09999 ]TJ (pe o)Tj [-11.89999 ]TJ (f)Tj [1.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 128.06999 142.49409 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 167.66668 142.49409 Tm
+ 0.00228 Tc
+ 0.05769 Tw
+ ( is de)Tj [6.09999 ]TJ (termine)Tj [6.09999 ]TJ (d)Tj [2.29998 ]TJ ( b)Tj [-7.69999 ]TJ (y)Tj [22.29998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 256.57929 142.49409 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYSTYPE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 302.77549 142.49409 Tm
+ 0.00099 Tc
+ 0.05899 Tw
+ (. Sin)Tj [-9 ]TJ (c)Tj [4.79998 ]TJ (e)Tj [4.79998 ]TJ ( the)Tj [4.79998 ]TJ ( d)Tj [-9 ]TJ (e)Tj [4.79998 ]TJ (f)Tj [4 ]TJ (a)Tj [4.79998 ]TJ (ult t)Tj [-21.19999 ]TJ (y)Tj [21 ]TJ (pe)Tj [4.79998 ]TJ ( is int)Tj [-11.19999 ]TJ (e)Tj [4.79998 ]TJ (ge)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (,)Tj [1 ]TJ ( this wor)Tj [4 ]TJ (k)Tj [1 ]TJ (s )Tj 
+ -17.72999 -1.18998 TD
+ -0.00088 Tc
+ 0.09089 Tw
+ (well in this case. Token )Tj [-10 ]TJ (values 0-255 a)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (e r)Tj [-7.89999 ]TJ (e)Tj [2.89999 ]TJ (serv)Tj [-10.89999 ]TJ (e)Tj [-7.09999 ]TJ (d)Tj [-0.89999 ]TJ ( for cha)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (a)Tj [-7.09999 ]TJ (c)Tj [2.89999 ]TJ (ter valu)Tj [-10.89999 ]TJ (es. For ex)Tj [-10.89999 ]TJ (ample, if )Tj 
+ 0 -1.14999 TD
+ -0.00109 Tc
+ 0.00109 Tw
+ (y)Tj [18.89999 ]TJ (o)Tj [-11.09999 ]TJ (u had )Tj [-10 ]TJ (a rule su)Tj [-11.09999 ]TJ (ch as )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 88.61869 Tm
+ -0.00219 Tc
+ ([-+])Tj [-5054.39999 ]TJ (return)Tj [-597.89999 ]TJ (*yytext;)Tj [-4782.5 ]TJ (/*)Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (operator)Tj [-597.89999 ]TJ (*/)Tj 
+ ET
+ 1 1 1 sc
+ 
+ 225.62199 635.41299 160.78698 -20.75799 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 234.02119 617.53448 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ 0.00099 Tc
+ (de)Tj [4.79998 ]TJ (finitions)Tj 
+ /N231 1 Tf
+ 4.22999 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 636.13299 0.71998 -0.71998 rf
+ 224.90199 636.13299 0.71998 -0.71998 rf
+ 225.62199 636.13299 160.78698 -0.71998 rf
+ 386.40798 636.13299 0.71998 -0.71998 rf
+ 386.40798 636.13299 0.71998 -0.71998 rf
+ 224.90199 635.41299 0.71998 -20.75799 rf
+ 386.40798 635.41299 0.71998 -20.75799 rf
+ 1 1 1 sc
+ 225.62199 614.65499 160.78698 -12.47898 rf
+ BT
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 234.02119 605.65548 Tm
+ 0 0 0 sc
+ -0.00219 Tc
+ (%%)Tj 
+ ET
+ 224.90199 614.65499 0.71998 -12.47898 rf
+ 386.40798 614.65499 0.71998 -12.47898 rf
+ 1 1 1 sc
+ 225.62199 602.17599 160.78698 -13.79899 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 234.02119 591.37669 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ -0.00019 Tc
+ (rules)Tj 
+ /N231 1 Tf
+ 2 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 602.17599 0.71998 -13.79899 rf
+ 386.40798 602.17599 0.71998 -13.79899 rf
+ 1 1 1 sc
+ 225.62199 588.37699 160.78698 -12.47898 rf
+ BT
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 234.02119 579.37768 Tm
+ 0 0 0 sc
+ -0.00219 Tc
+ (%%)Tj 
+ ET
+ 224.90199 588.37699 0.71998 -12.47898 rf
+ 386.40798 588.37699 0.71998 -12.47898 rf
+ 1 1 1 sc
+ 225.62199 575.89799 160.78698 -20.87799 rf
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 234.02119 564.97889 Tm
+ 0 0 0 sc
+ 0 Tc
+ (... )Tj 
+ /N171 1 Tf
+ 1 0 TD
+ -0.00009 Tc
+ (subroutines)Tj 
+ /N231 1 Tf
+ 4.66999 0 TD
+ 0 Tc
+ ( ... )Tj 
+ ET
+ 224.90199 555.01998 0.71998 -0.71998 rf
+ 224.90199 555.01998 0.71998 -0.71998 rf
+ 225.62199 555.01998 160.78698 -0.71998 rf
+ 386.40798 555.01998 0.71998 -0.71998 rf
+ 386.40798 555.01998 0.71998 -0.71998 rf
+ 224.90199 575.89799 0.71998 -20.87799 rf
+ 386.40798 575.89799 0.71998 -20.87799 rf
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 15 15
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 15)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00189 Tc
+ 0.03189 Tw
+ (t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (e chara)Tj [-8.09999 ]TJ (c)Tj [1.89999 ]TJ (t)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ (r val)Tj [-4.09999 ]TJ (u)Tj [-1.89999 ]TJ (e fo)Tj [-11.89999 ]TJ (r m)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (nus or pl)Tj [-4.09999 ]TJ (us is ret)Tj [-4.09999 ]TJ (u)Tj [-1.89999 ]TJ (rned. Not)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ ( t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (at)Tj [-4.09999 ]TJ ( we pl)Tj [-4.09999 ]TJ (aced t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (e m)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (nus si)Tj [-4.09999 ]TJ (g)Tj [8.09999 ]TJ (n)Tj [-1.89999 ]TJ ( fi)Tj [-4.09999 ]TJ (rst)Tj [-4.09999 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.08059 Tw
+ (so that it wouldn\222t be m)Tj [7.19999 ]TJ (i)Tj [7.19999 ]TJ (s)Tj [-1.39999 ]TJ (taken for a r)Tj [-7.59999 ]TJ (a)Tj [3.19999 ]TJ (n)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ (e desi)Tj [-12.79998 ]TJ (gnator. Gene)Tj [-6.79998 ]TJ (rated token v)Tj [-10.59999 ]TJ (a)Tj [3.19999 ]TJ (lues t)Tj [-12.79998 ]TJ (y)Tj [19.39999 ]TJ (pic)Tj [-6.79998 ]TJ (a)Tj [3.19999 ]TJ (ll)Tj [-12.79998 ]TJ (y)Tj [9.39999 ]TJ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0.04098 Tw
+ (start around 258, as lex)Tj [-11 ]TJ ( r)Tj [12 ]TJ (e)Tj [2.79998 ]TJ (serves sev)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ (ral valu)Tj [-11 ]TJ (es fo)Tj [-11 ]TJ (r end-of-)Tj [-8 ]TJ (f)Tj [2 ]TJ (ile and er)Tj [-8 ]TJ (ror pr)Tj [-8 ]TJ (ocessing)Tj [9 ]TJ (. H)Tj [-8.79998 ]TJ (e)Tj [2.79998 ]TJ (re)Tj [-7.19999 ]TJ ( )Tj 
+ T*
+ 0.00138 Tc
+ -0.00138 Tw
+ (is the)Tj [5.19999 ]TJ ( c)Tj [5.19999 ]TJ (o)Tj [1.39999 ]TJ (mple)Tj [5.19999 ]TJ (te)Tj [5.19999 ]TJ ( le)Tj [5.19999 ]TJ (x)Tj [-8.59999 ]TJ ( input )Tj [10 ]TJ (spe)Tj [5.19999 ]TJ (c)Tj [5.19999 ]TJ (i)Tj [-0.79998 ]TJ (f)Tj [4.39999 ]TJ (i)Tj [-0.79998 ]TJ (c)Tj [5.19999 ]TJ (a)Tj [5.19999 ]TJ (tion f)Tj [4.39999 ]TJ (o)Tj [-8.59999 ]TJ (r)Tj [4.39999 ]TJ ( our)Tj [4.39999 ]TJ ( ca)Tj [5.19999 ]TJ (lcula)Tj [5.19999 ]TJ (t)Tj [-0.79998 ]TJ (or)Tj [4.39999 ]TJ (: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 628.21359 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ ("y.tab.h")Tj 
+ T*
+ (%})Tj 
+ 0 -2.25 TD
+ (%%)Tj 
+ 0 -2.26089 TD
+ ([0-9]+)Tj [-3587 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (atoi\(yytext\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (INTEGER;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -7.17399 -2.25 TD
+ -0.00219 Tc
+ ([-+\\n])Tj [-3587 ]TJ (return)Tj [-597.89999 ]TJ (*yytext;)Tj 
+ 0 -2.26089 TD
+ ([)Tj [-597.89999 ]TJ (\\t])Tj [-4130.5 ]TJ (;)Tj [-597.89999 ]TJ (/)Tj [0 ]TJ (*)Tj [-597.89999 ]TJ (skip)Tj [-597.89999 ]TJ (whitespace)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (.)Tj [-6576.19999 ]TJ (yyerror\("invalid)Tj [-597.89999 ]TJ (character"\);)Tj 
+ 0 -2.25 TD
+ (%%)Tj 
+ 0 -2.26089 TD
+ (int)Tj [-597.89999 ]TJ (yywrap\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (1;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 352.35668 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00138 Tc
+ 0.13139 Tw
+ (I)Tj [11.59999 ]TJ (n)Tj [-1.39999 ]TJ (t)Tj [-3.59999 ]TJ (e)Tj [-7.59999 ]TJ (rnal)Tj [-3.59999 ]TJ (l)Tj [-23.59999 ]TJ (y)Tj [18.59999 ]TJ (, )Tj [-20 ]TJ (y)Tj [18.59999 ]TJ (a)Tj [2.39999 ]TJ (c)Tj [-7.59999 ]TJ (c)Tj [2.39999 ]TJ ( m)Tj [-3.59999 ]TJ (a)Tj [2.39999 ]TJ (i)Tj [-3.59999 ]TJ (n)Tj [-1.39999 ]TJ (t)Tj [-3.59999 ]TJ (a)Tj [2.39999 ]TJ (i)Tj [-3.59999 ]TJ (n)Tj [-1.39999 ]TJ (s t)Tj [-3.59999 ]TJ (w)Tj [0.79998 ]TJ (o st)Tj [-3.59999 ]TJ (acks i)Tj [-3.59999 ]TJ (n)Tj [-1.39999 ]TJ ( m)Tj [-3.59999 ]TJ (e)Tj [2.39999 ]TJ (m)Tj [-3.59999 ]TJ (o)Tj [-1.39999 ]TJ (r)Tj [-8.39999 ]TJ (y)Tj [28.59999 ]TJ (;)Tj [-13.59999 ]TJ ( a parse st)Tj [-3.59999 ]TJ (ack and )Tj [-10 ]TJ (a val)Tj [-13.59999 ]TJ (u)Tj [-1.39999 ]TJ (e st)Tj [-3.59999 ]TJ (ack. The)Tj [-7.59999 ]TJ ( )Tj 
+ T*
+ -0.00088 Tc
+ 0.05088 Tw
+ (parse stack )Tj [-10 ]TJ (contains term)Tj [-13.09999 ]TJ (inals and nonterminals, a)Tj [-7.09999 ]TJ (nd repres)Tj [-11.69999 ]TJ (ents the curr)Tj [-7.89999 ]TJ (ent parsing)Tj [9.09999 ]TJ ( state.)Tj [-10.89999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00209 Tc
+ 0.21209 Tw
+ (The val)Tj [-4.29998 ]TJ (u)Tj [-2.09999 ]TJ (e st)Tj [-4.29998 ]TJ (ack i)Tj [-4.29998 ]TJ (s)Tj [-2.89999 ]TJ ( an a)Tj [-8.29998 ]TJ (rra)Tj [-18.29998 ]TJ (y)Tj [17.89999 ]TJ ( of )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 251.65969 310.72009 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYSTYPE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 297.85578 310.72009 Tm
+ 0.21218 Tw
+ ( el)Tj [-4.39999 ]TJ (em)Tj [-14.39999 ]TJ (e)Tj [-8.39999 ]TJ (n)Tj [-2.19999 ]TJ (t)Tj [-4.39999 ]TJ (s)Tj [-3 ]TJ (, and associ)Tj [-4.39999 ]TJ (at)Tj [-4.39999 ]TJ (es a va)Tj [-8.39999 ]TJ (l)Tj [-4.39999 ]TJ (u)Tj [-2.19999 ]TJ (e wi)Tj [-4.39999 ]TJ (t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ ( each )Tj 
+ -17.31999 -1.20999 TD
+ -0.00209 Tc
+ 0.03208 Tw
+ (el)Tj [-4.29998 ]TJ (em)Tj [-4.29998 ]TJ (ent)Tj [-4.29998 ]TJ ( i)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e p)Tj [-12.09999 ]TJ (a)Tj [1.69999 ]TJ (rse)Tj [-8.29998 ]TJ ( st)Tj [-4.29998 ]TJ (ac)Tj [-8.29998 ]TJ (k. For)Tj [-9.09999 ]TJ ( ex)Tj [-12.09999 ]TJ (am)Tj [-4.29998 ]TJ (pl)Tj [-4.29998 ]TJ (e, when)Tj [-12.09999 ]TJ ( l)Tj [-4.29998 ]TJ (e)Tj [-8.29998 ]TJ (x)Tj [-12.09999 ]TJ ( ret)Tj [-4.29998 ]TJ (u)Tj [-2.09999 ]TJ (rns an )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 387.84838 296.20138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 434.04449 296.20138 Tm
+ 0.00109 Tc
+ 0.02888 Tw
+ ( to)Tj [-8.89999 ]TJ (ke)Tj [4.89999 ]TJ (n, )Tj [-20 ]TJ (y)Tj [21.09999 ]TJ (a)Tj [-5.09999 ]TJ (c)Tj [4.89999 ]TJ (c)Tj [4.89999 ]TJ ( shif)Tj [4.09999 ]TJ (ts)Tj [-9.69999 ]TJ ( )Tj 
+ -28.66999 -1.20999 TD
+ -0.00068 Tc
+ 0.10069 Tw
+ (this token to )Tj [10 ]TJ (the parse stack. At the same time, the correspondin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 419.88569 281.68249 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylva)Tj [-10.89999 ]TJ (l)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 459.60238 281.68249 Tm
+ 0.00129 Tc
+ 0.09869 Tw
+ ( is shif)Tj [4.29998 ]TJ (te)Tj [5.09999 ]TJ (d t)Tj [9.09999 ]TJ (o)Tj [11.29998 ]TJ ( )Tj 
+ -30.79998 -1.18998 TD
+ -0.00119 Tc
+ 0.08119 Tw
+ (the value stack. Th)Tj [-11.19999 ]TJ (e pa)Tj [-7.39999 ]TJ (rse and value st)Tj [-13.39999 ]TJ (acks a)Tj [-7.39999 ]TJ (r)Tj [1.79998 ]TJ (e al)Tj [-13.39999 ]TJ (wa)Tj [-17.39999 ]TJ (y)Tj [18.79998 ]TJ (s)Tj [-2 ]TJ ( s)Tj [-12 ]TJ (y)Tj [18.79998 ]TJ (n)Tj [-11.19999 ]TJ (c)Tj [2.59999 ]TJ (hroniz)Tj [-7.39999 ]TJ (e)Tj [2.59999 ]TJ (d, so fi)Tj [-13.39999 ]TJ (nding)Tj [8.79998 ]TJ ( a v)Tj [-11.19999 ]TJ (a)Tj [2.59999 ]TJ (lue)Tj [-7.39999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00079 Tc
+ 0.02079 Tw
+ (related to a token on the )Tj [10 ]TJ (stack is easil)Tj [-13 ]TJ (y)Tj [29.19999 ]TJ ( )Tj [-10 ]TJ (accomplis)Tj [-11.59999 ]TJ (hed. Here is the )Tj [-10 ]TJ (y)Tj [19.19999 ]TJ (a)Tj [-7 ]TJ (cc input specification )Tj 
+ T*
+ -0.00068 Tc
+ 0.00068 Tw
+ (for our c)Tj [-6.89999 ]TJ (a)Tj [3.09999 ]TJ (lculator: )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 16 16
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 16)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 683.40908 Tm
+ -0.00219 Tc
+ (%token)Tj [-597.89999 ]TJ (INTEGER)Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ 0 -2.25 TD
+ (program:)Tj 
+ 4.78259 -1.13038 TD
+ (program)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\\n')Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ (printf\("%d\\n",)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (|)Tj 
+ T*
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (expr:)Tj 
+ 4.78259 -1.11959 TD
+ (INTEGER)Tj [-11358.79998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($1;)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('-')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.69999 ]TJ (-)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (%%)Tj 
+ 0 -2.25 TD
+ (int)Tj [-597.89999 ]TJ (yyerror\(char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (fprintf\(stderr,)Tj [-597.79998 ]TJ ("%s\\n",)Tj [-597.89999 ]TJ (s\);)Tj 
+ -0.16308 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.22828 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.25 TD
+ -0.00219 Tc
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yyparse\(\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 357.63619 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00149 Tc
+ 0.06849 Tw
+ (The)Tj [5.29998 ]TJ ( r)Tj [4.5 ]TJ (u)Tj [1.5 ]TJ (le)Tj [5.29998 ]TJ (s)Tj [-9.29998 ]TJ ( se)Tj [5.29998 ]TJ (c)Tj [5.29998 ]TJ (tion )Tj [-10 ]TJ (r)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (se)Tj [5.29998 ]TJ (mb)Tj [-8.5 ]TJ (le)Tj [5.29998 ]TJ (s the)Tj [5.29998 ]TJ ( )Tj [-10 ]TJ (B)Tj [8.5 ]TJ (N)Tj [-6.29998 ]TJ (F)Tj [7.59999 ]TJ ( )Tj [-10 ]TJ (g)Tj [11.5 ]TJ (r)Tj [-5.5 ]TJ (a)Tj [5.29998 ]TJ (mma)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ ( di)Tj [-10.69999 ]TJ (sc)Tj [5.29998 ]TJ (usse)Tj [5.29998 ]TJ (d ea)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (lie)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (.)Tj [-8.5 ]TJ ( The)Tj [5.29998 ]TJ ( l)Tj [-10.69999 ]TJ (e)Tj [5.29998 ]TJ (f)Tj [4.5 ]TJ (t)Tj [-0.5 ]TJ (-ha)Tj [5.29998 ]TJ (nd side)Tj [5.29998 ]TJ ( o)Tj [-8.5 ]TJ (f)Tj [4.5 ]TJ ( a )Tj 
+ T*
+ -0.00028 Tc
+ 0.02029 Tw
+ (production, or nontermin)Tj [-10.29998 ]TJ (al, is entered left-justifie)Tj [-6.5 ]TJ (d, followed b)Tj [-10.29998 ]TJ (y)Tj [19.69999 ]TJ ( )Tj [-10 ]TJ (a colon. T)Tj [-9.5 ]TJ (h)Tj [-0.29998 ]TJ (is is followed)Tj [9.69999 ]TJ ( )Tj 
+ T*
+ -0.00079 Tc
+ 0.14079 Tw
+ (b)Tj [-10.79998 ]TJ (y)Tj [19.19999 ]TJ ( the ri)Tj [-13 ]TJ (g)Tj [9.19999 ]TJ (h)Tj [-0.79998 ]TJ (t-hand side o)Tj [-10.79998 ]TJ (f)Tj [2.19999 ]TJ ( the production. Actions associated with a rule are ente)Tj [-7 ]TJ (red in)Tj [-10.79998 ]TJ ( )Tj 
+ T*
+ -0.00169 Tc
+ 0 Tw
+ (braces. )Tj 
+ T*
+ 0.00119 Tc
+ 0.03878 Tw
+ ( )Tj [-1210 ]TJ (B)Tj [-11.79998 ]TJ (y)Tj [21.19999 ]TJ ( utilizing)Tj [11.19999 ]TJ ( le)Tj [5 ]TJ (f)Tj [4.19999 ]TJ (t)Tj [-0.89999 ]TJ (-)Tj [4.19999 ]TJ (r)Tj [4.19999 ]TJ (e)Tj [-5 ]TJ (c)Tj [5 ]TJ (u)Tj [1.19999 ]TJ (r)Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ (io)Tj [-8.79998 ]TJ (n, we)Tj [5 ]TJ ( ha)Tj [5 ]TJ (ve)Tj [5 ]TJ ( sp)Tj [-8.79998 ]TJ (e)Tj [5 ]TJ (c)Tj [5 ]TJ (i)Tj [-1 ]TJ (f)Tj [4.19999 ]TJ (i)Tj [-1 ]TJ (e)Tj [5 ]TJ (d)Tj [1.19999 ]TJ ( tha)Tj [5 ]TJ (t)Tj [-11 ]TJ ( a)Tj [5 ]TJ ( pr)Tj [4.19999 ]TJ (o)Tj [-8.79998 ]TJ (g)Tj [11.19999 ]TJ (r)Tj [4.19999 ]TJ (a)Tj [5 ]TJ (m c)Tj [5 ]TJ (onsists of)Tj [4.19999 ]TJ ( zer)Tj [4.19999 ]TJ (o or)Tj [4.19999 ]TJ ( mor)Tj [4.19999 ]TJ (e)Tj [5 ]TJ ( )Tj 
+ T*
+ -0.00178 Tc
+ 0.05178 Tw
+ (ex)Tj [-11.79998 ]TJ (pressi)Tj [-4 ]TJ (ons. Each ex)Tj [-11.79998 ]TJ (pressi)Tj [-4 ]TJ (on t)Tj [-4 ]TJ (e)Tj [2 ]TJ (rm)Tj [-4 ]TJ (i)Tj [-4 ]TJ (n)Tj [-1.79998 ]TJ (at)Tj [-4 ]TJ (es wi)Tj [-4 ]TJ (t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ ( a ne)Tj [-8 ]TJ (wl)Tj [-4 ]TJ (i)Tj [-4 ]TJ (n)Tj [-1.79998 ]TJ (e. W)Tj [-8 ]TJ (h)Tj [-1.79998 ]TJ (en a newl)Tj [-4 ]TJ (i)Tj [-4 ]TJ (n)Tj [-1.79998 ]TJ (e i)Tj [-13.79998 ]TJ (s)Tj [-2.59999 ]TJ ( det)Tj [-4 ]TJ (ect)Tj [-4 ]TJ (ed, w)Tj [-9.59999 ]TJ (e)Tj [2 ]TJ ( )Tj 
+ T*
+ -0.00109 Tc
+ 0.00109 Tw
+ (print the value of the )Tj [-10 ]TJ (ex)Tj [-11.09999 ]TJ (pression. W)Tj [-7.29998 ]TJ (h)Tj [-1.09999 ]TJ (en we appl)Tj [-23.29998 ]TJ (y)Tj [18.89999 ]TJ ( t)Tj [-13.29998 ]TJ (h)Tj [-1.09999 ]TJ (e rule )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 235.24639 Tm
+ -0.00219 Tc
+ (expr:)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ (expr)Tj [-5434.79998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 220.96759 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0.03099 Tw
+ (we repla)Tj [-7.19999 ]TJ (ce the ri)Tj [-13.19999 ]TJ (g)Tj [9 ]TJ (h)Tj [-1 ]TJ (t-h)Tj [-11 ]TJ (a)Tj [2.79998 ]TJ (n)Tj [-11 ]TJ (d)Tj [-1 ]TJ ( side of the production in the parse stack with th)Tj [-11 ]TJ (e left-hand side )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.07049 Tw
+ (of the same produ)Tj [-10.5 ]TJ (ction. I)Tj [12.5 ]TJ (n)Tj [-0.5 ]TJ ( this c)Tj [-6.69999 ]TJ (a)Tj [3.29998 ]TJ (se, we pop )Tj [-10 ]TJ (\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 317.05419 193.12989 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ex)Tj [-10.89999 ]TJ (pr)Tj [-673.89999 ]TJ ('+')Tj [-674 ]TJ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 404.64689 193.12989 Tm
+ -0.00099 Tc
+ 0.07099 Tw
+ (\224 and pus)Tj [-11.79998 ]TJ (h \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 466.80178 193.12989 Tm
+ -0.00219 Tc
+ 0 Tw
+ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 493.19949 193.12989 Tm
+ -0.00189 Tc
+ 0.07189 Tw
+ (\224. W)Tj [-8.09999 ]TJ (e)Tj [1.89999 ]TJ ( )Tj 
+ -33.59999 -1.17999 TD
+ -0.00099 Tc
+ 0.05099 Tw
+ (have redu)Tj [-11 ]TJ (ced the stack b)Tj [-11 ]TJ (y)Tj [19 ]TJ ( )Tj [-10 ]TJ (poppin)Tj [-11 ]TJ (g)Tj [9 ]TJ ( three terms of)Tj [-8 ]TJ (f the stack, and pushing)Tj [9 ]TJ ( )Tj [-10 ]TJ (back one term. )Tj 
+ 0 -1.16999 TD
+ 0.00199 Tc
+ 0.06799 Tw
+ (We)Tj [5.79998 ]TJ ( may)Tj [22 ]TJ ( re)Tj [5.79998 ]TJ (fe)Tj [5.79998 ]TJ (r)Tj [5 ]TJ (e)Tj [5.79998 ]TJ (n)Tj [-8 ]TJ (c)Tj [5.79998 ]TJ (e)Tj [5.79998 ]TJ ( positions in the)Tj [5.79998 ]TJ ( va)Tj [5.79998 ]TJ (lue)Tj [5.79998 ]TJ ( sta)Tj [5.79998 ]TJ (c)Tj [5.79998 ]TJ (k)Tj [2 ]TJ ( in)Tj [-8 ]TJ ( our)Tj [5 ]TJ ( C c)Tj [5.79998 ]TJ (ode)Tj [5.79998 ]TJ ( b)Tj [-18 ]TJ (y)Tj [22 ]TJ ( sp)Tj [-8 ]TJ (e)Tj [5.79998 ]TJ (c)Tj [5.79998 ]TJ (i)Tj [-0.19999 ]TJ (f)Tj [-15 ]TJ (y)Tj [22 ]TJ (in)Tj [-8 ]TJ (g)Tj [12 ]TJ ( \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 466.92179 164.93229 Tm
+ 0.00869 Tc
+ 0 Tw
+ ($1)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 480.24069 164.93229 Tm
+ -0.00329 Tc
+ 0.07328 Tw
+ (\224 fo)Tj [-13.29998 ]TJ (r t)Tj [-5.5 ]TJ (h)Tj [-3.29998 ]TJ (e)Tj [-9.5 ]TJ ( )Tj 
+ -32.51998 -1.20999 TD
+ -0.00039 Tc
+ 0.06039 Tw
+ (first term on the rig)Tj [9.59999 ]TJ (h)Tj [-0.39999 ]TJ (t-h)Tj [-10.39999 ]TJ (a)Tj [-6.59999 ]TJ (nd side of the productio)Tj [-10.39999 ]TJ (n, \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 345.73188 150.41349 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($2)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 358.93078 150.41349 Tm
+ -0.00109 Tc
+ 0.06109 Tw
+ (\224 for the s)Tj [-11.89999 ]TJ (econd, a)Tj [-7.29998 ]TJ (nd so on. \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 503.51869 150.41349 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($$)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 516.71759 150.41349 Tm
+ -0.00379 Tc
+ (\224 )Tj 
+ -35.55999 -1.18998 TD
+ -0.00109 Tc
+ 0.04109 Tw
+ (desig)Tj [8.89999 ]TJ (n)Tj [-1.09999 ]TJ (at)Tj [-13.29998 ]TJ (es the top of the stack after )Tj [-10 ]TJ (reduction has )Tj [-10 ]TJ (taken place. Th)Tj [-11.09999 ]TJ (e above a)Tj [-7.29998 ]TJ (c)Tj [2.69999 ]TJ (tion adds the )Tj 
+ 0 -1.14999 TD
+ -0.00068 Tc
+ 0.09069 Tw
+ (value associated with tw)Tj [-8.5 ]TJ (o ex)Tj [-10.69999 ]TJ (pressions, pops three terms off the value sta)Tj [-6.89999 ]TJ (c)Tj [3.09999 ]TJ (k, and pushes )Tj 
+ T*
+ -0.00079 Tc
+ 0.00079 Tw
+ (back a sin)Tj [-10.79998 ]TJ (g)Tj [9.19999 ]TJ (le sum. Thus, )Tj [-10 ]TJ (the parse )Tj [-10 ]TJ (and value sta)Tj [-7 ]TJ (c)Tj [3 ]TJ (k)Tj [-10.79998 ]TJ (s)Tj [-1.59999 ]TJ ( remain s)Tj [-21.59999 ]TJ (y)Tj [19.19999 ]TJ (nchroniz)Tj [-7 ]TJ (e)Tj [3 ]TJ (d. )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 17 17
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 17)Tj 
+ 0 55.82998 TD
+ 0.00228 Tc
+ 0.07769 Tw
+ ( )Tj [-1170 ]TJ (Nume)Tj [6.09999 ]TJ (r)Tj [5.29998 ]TJ (i)Tj [0.09999 ]TJ (c)Tj [6.09999 ]TJ ( v)Tj [-7.69999 ]TJ (a)Tj [6.09999 ]TJ (lue)Tj [6.09999 ]TJ (s)Tj [1.5 ]TJ ( ar)Tj [5.29998 ]TJ (e)Tj [6.09999 ]TJ ( initia)Tj [6.09999 ]TJ (ll)Tj [-9.89999 ]TJ (y)Tj [22.29998 ]TJ ( )Tj [-10 ]TJ (e)Tj [6.09999 ]TJ (n)Tj [2.29998 ]TJ (te)Tj [6.09999 ]TJ (re)Tj [6.09999 ]TJ (d on the sta)Tj [6.09999 ]TJ (c)Tj [6.09999 ]TJ (k)Tj [-7.69999 ]TJ ( whe)Tj [6.09999 ]TJ (n)Tj [2.29998 ]TJ ( w)Tj [-5.5 ]TJ (e)Tj [6.09999 ]TJ ( re)Tj [6.09999 ]TJ (duce)Tj [6.09999 ]TJ ( f)Tj [5.29998 ]TJ (r)Tj [5.29998 ]TJ (o)Tj [2.29998 ]TJ (m)Tj [-9.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 462.36219 708.96688 Tm
+ -0.00219 Tc
+ 0 Tw
+ (I)Tj [-10.89999 ]TJ (NTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 508.67829 708.96688 Tm
+ 0.00109 Tc
+ 0.07888 Tw
+ ( to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 694.44808 Tm
+ -0.00219 Tc
+ 0 Tw
+ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 116.43099 694.44808 Tm
+ -0.00158 Tc
+ 0.00158 Tw
+ (. After )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 150.62809 694.44808 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 196.82429 694.44808 Tm
+ 0.00088 Tc
+ -0.00088 Tw
+ ( is )Tj [-10 ]TJ (shif)Tj [3.89999 ]TJ (te)Tj [4.69999 ]TJ (d to the)Tj [4.69999 ]TJ ( sta)Tj [4.69999 ]TJ (c)Tj [4.69999 ]TJ (k, we)Tj [4.69999 ]TJ ( )Tj [-10 ]TJ (appl)Tj [-11.29998 ]TJ (y)Tj [20.89999 ]TJ ( the)Tj [4.69999 ]TJ ( r)Tj [3.89999 ]TJ (u)Tj [0.89999 ]TJ (le)Tj [4.89999 ]TJ ( )Tj 
+ -8.89999 -1.18998 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 668.17028 Tm
+ -0.00219 Tc
+ (expr:)Tj [-597.89999 ]TJ (INTEGER)Tj [-3641.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($1;)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 653.89149 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00209 Tc
+ (The )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 112.47129 639.85269 Tm
+ -0.00219 Tc
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 158.66738 639.85269 Tm
+ -0.00068 Tc
+ 0.07069 Tw
+ ( token)Tj [-10.69999 ]TJ ( is p)Tj [-10.69999 ]TJ (opped off)Tj [-7.69999 ]TJ ( the p)Tj [-10.69999 ]TJ (a)Tj [3.09999 ]TJ (rse)Tj [-6.89999 ]TJ ( stac)Tj [-6.89999 ]TJ (k, followed b)Tj [-20.69999 ]TJ (y)Tj [19.29998 ]TJ ( )Tj [-10 ]TJ (a push)Tj [-10.69999 ]TJ ( of)Tj [-7.69999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 453.48289 639.85269 Tm
+ -0.00219 Tc
+ 0 Tw
+ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 479.88069 639.85269 Tm
+ -0.00059 Tc
+ 0.07058 Tw
+ (. F)Tj [5.5 ]TJ (o)Tj [-10.59999 ]TJ (r the)Tj [-6.79998 ]TJ ( )Tj 
+ -32.48999 -1.17999 TD
+ -0.00088 Tc
+ 0.12089 Tw
+ (value stack, we pop the )Tj [-10 ]TJ (integ)Tj [9.09999 ]TJ (e)Tj [-7.09999 ]TJ (r value of)Tj [-7.89999 ]TJ (f the stack, and then push it back on ag)Tj [9.09999 ]TJ (ain. )Tj [-10 ]TJ (In)Tj [-10.89999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.06048 Tw
+ (other words, w)Tj [-8.29998 ]TJ (e)Tj [3.29998 ]TJ ( do nothi)Tj [-12.69999 ]TJ (ng)Tj [9.5 ]TJ (. )Tj [-10 ]TJ (I)Tj [12.5 ]TJ (n)Tj [-10.5 ]TJ ( fa)Tj [-6.69999 ]TJ (ct, this is the de)Tj [-6.69999 ]TJ (fault action, and n)Tj [-10.5 ]TJ (eed no)Tj [-10.5 ]TJ (t be specified.)Tj [-10.5 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00099 Tc
+ 0.00099 Tw
+ (F)Tj [5.09999 ]TJ (i)Tj [-3.19999 ]TJ (nall)Tj [-13.19999 ]TJ (y)Tj [19 ]TJ (,)Tj [-1 ]TJ ( )Tj [-10 ]TJ (when a n)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ (wline i)Tj [-13.19999 ]TJ (s)Tj [-1.79998 ]TJ ( encounter)Tj [-8 ]TJ (ed, the value )Tj [-10 ]TJ (associated with )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 407.16668 597.85618 Tm
+ -0.00219 Tc
+ 0 Tw
+ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 433.56449 597.85618 Tm
+ 0.00079 Tc
+ -0.00079 Tw
+ ( is )Tj [-10 ]TJ (pr)Tj [3.79998 ]TJ (inte)Tj [4.59999 ]TJ (d. )Tj 
+ -28.62998 -1.20999 TD
+ -0.00099 Tc
+ 0.09098 Tw
+ ( )Tj [-1160 ]TJ (I)Tj [12 ]TJ (n)Tj [-1 ]TJ ( the ev)Tj [-11 ]TJ (ent of s)Tj [-11.79998 ]TJ (y)Tj [19 ]TJ (ntax)Tj [-11 ]TJ ( er)Tj [-8 ]TJ (rors, )Tj [-10 ]TJ (y)Tj [19 ]TJ (a)Tj [-7.19999 ]TJ (cc c)Tj [-7.19999 ]TJ (a)Tj [2.79998 ]TJ (lls the user-)Tj [-8 ]TJ (s)Tj [-1.79998 ]TJ (upplied function )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 438.84408 583.33738 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyerror)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 485.04019 583.33738 Tm
+ 0 Tc
+ 0.09999 Tw
+ (. I)Tj [23 ]TJ (f)Tj [3 ]TJ ( )Tj [-10 ]TJ (y)Tj [20 ]TJ (ou )Tj 
+ -32.91999 -1.20999 TD
+ -0.00239 Tc
+ 0.02239 Tw
+ (need t)Tj [-4.59999 ]TJ (o)Tj [-2.39999 ]TJ ( m)Tj [-4.59999 ]TJ (odi)Tj [-4.59999 ]TJ (f)Tj [-19.39999 ]TJ (y)Tj [17.59999 ]TJ ( t)Tj [-4.59999 ]TJ (h)Tj [-2.39999 ]TJ (e i)Tj [-4.59999 ]TJ (n)Tj [-2.39999 ]TJ (t)Tj [-4.59999 ]TJ (e)Tj [-8.59999 ]TJ (rf)Tj [-9.39999 ]TJ (ace t)Tj [-4.59999 ]TJ (o)Tj [-2.39999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 242.06048 568.81858 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyerror)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 288.25669 568.81858 Tm
+ 0.00209 Tc
+ 0.01789 Tw
+ (,)Tj [-7.89999 ]TJ ( )Tj [-20 ]TJ (y)Tj [22.09999 ]TJ (ou ca)Tj [5.89999 ]TJ (n)Tj [-7.89999 ]TJ ( a)Tj [5.89999 ]TJ (lte)Tj [5.89999 ]TJ (r)Tj [5.09999 ]TJ ( the)Tj [5.89999 ]TJ ( )Tj 
+ /N171 1 Tf
+ 7.50999 0 TD
+ -0.00149 Tc
+ 0 Tw
+ (canned)Tj 
+ /N231 1 Tf
+ 2.87998 0 TD
+ 0.00109 Tc
+ 0.02888 Tw
+ ( f)Tj [4.09999 ]TJ (ile)Tj [4.89999 ]TJ ( )Tj [10 ]TJ (tha)Tj [4.89999 ]TJ (t)Tj [-11.09999 ]TJ ( y)Tj [21.09999 ]TJ (a)Tj [-5.09999 ]TJ (c)Tj [4.89999 ]TJ (c)Tj [-5.09999 ]TJ ( )Tj [10 ]TJ (inc)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (ude)Tj [4.89999 ]TJ (s )Tj 
+ -26.90998 -1.20999 TD
+ -0.00059 Tc
+ 0.03059 Tw
+ (to fit )Tj [-20 ]TJ (y)Tj [19.39999 ]TJ (our n)Tj [-10.59999 ]TJ (eeds.)Tj [-10.59999 ]TJ ( The l)Tj [-12.79998 ]TJ (a)Tj [3.19999 ]TJ (s)Tj [-11.39999 ]TJ (t)Tj [-2.79998 ]TJ ( function in ou)Tj [-10.59999 ]TJ (r )Tj [-20 ]TJ (y)Tj [19.39999 ]TJ (a)Tj [-6.79998 ]TJ (cc)Tj [-6.79998 ]TJ ( sp)Tj [-10.59999 ]TJ (ecification is)Tj [-11.39999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 395.28768 554.29978 Tm
+ -0.00219 Tc
+ 0 Tw
+ (main)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 421.68548 554.29978 Tm
+ -0.00248 Tc
+ 0.03248 Tw
+ ( \205)Tj [-12.5 ]TJ ( i)Tj [-4.69999 ]TJ (n)Tj [-2.5 ]TJ ( cas)Tj [-13.29998 ]TJ (e )Tj [-20 ]TJ (y)Tj [17.5 ]TJ (ou )Tj [-10 ]TJ (wer)Tj [-9.5 ]TJ (e)Tj [1.29998 ]TJ ( )Tj 
+ -27.63999 -1.18998 TD
+ -0.00068 Tc
+ 0.07069 Tw
+ (wonderin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ ( wher)Tj [-7.69999 ]TJ (e it was. This ex)Tj [-10.69999 ]TJ (ample s)Tj [8.5 ]TJ (till)Tj [7.09999 ]TJ ( has an ambig)Tj [9.29998 ]TJ (uous grammar. )Tj [-10 ]TJ (Yacc will issue )Tj 
+ 0 -1.14999 TD
+ 0.00158 Tc
+ 0.27839 Tw
+ (shif)Tj [4.59999 ]TJ (t-)Tj [4.59999 ]TJ (r)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (duce)Tj [5.39999 ]TJ ( war)Tj [4.59999 ]TJ (n)Tj [1.59999 ]TJ (ing)Tj [11.59999 ]TJ (s)Tj [0.79998 ]TJ (, )Tj [-10 ]TJ (but will still pr)Tj [4.59999 ]TJ (oc)Tj [5.39999 ]TJ (e)Tj [5.39999 ]TJ (ss th)Tj [11.59999 ]TJ (e)Tj [5.39999 ]TJ ( gr)Tj [4.59999 ]TJ (a)Tj [5.39999 ]TJ (mma)Tj [5.39999 ]TJ (r using)Tj [11.59999 ]TJ ( shif)Tj [4.59999 ]TJ (t )Tj [-10 ]TJ (a)Tj [5.39999 ]TJ (s)Tj [0.79998 ]TJ ( the)Tj [5.39999 ]TJ ( de)Tj [5.39999 ]TJ (fa)Tj [5.39999 ]TJ (ult)Tj [-10.59999 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0 Tw
+ (operation. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 476.66629 Tm
+ 0.00039 Tc
+ 0.58639 Tw
+ (3.3 Practice, )Tj [586.39999 ]TJ (Part )Tj [578.89999 ]TJ (II)Tj [-7.5 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 456.26799 Tm
+ 0.00099 Tc
+ 0.17898 Tw
+ (I)Tj [14 ]TJ (n)Tj [1 ]TJ ( this se)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (tion we)Tj [4.79998 ]TJ ( will e)Tj [4.79998 ]TJ (x)Tj [-9 ]TJ (te)Tj [4.79998 ]TJ (nd the)Tj [4.79998 ]TJ ( c)Tj [4.79998 ]TJ (a)Tj [4.79998 ]TJ (l)Tj [-1.19999 ]TJ (c)Tj [4.79998 ]TJ (u)Tj [1 ]TJ (la)Tj [4.79998 ]TJ (tor)Tj [4 ]TJ ( f)Tj [4 ]TJ (r)Tj [-6 ]TJ (om the)Tj [4.79998 ]TJ ( pr)Tj [4 ]TJ (e)Tj [4.79998 ]TJ (v)Tj [1 ]TJ (ious se)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (tion to inc)Tj [4.79998 ]TJ (o)Tj [1 ]TJ (r)Tj [4 ]TJ (por)Tj [4 ]TJ (a)Tj [4.79998 ]TJ (t)Tj [-1.19999 ]TJ (e )Tj 
+ T*
+ 0.00048 Tc
+ 0.07949 Tw
+ (some)Tj [4.29998 ]TJ ( ne)Tj [4.29998 ]TJ (w f)Tj [3.5 ]TJ (unc)Tj [4.29998 ]TJ (tiona)Tj [4.29998 ]TJ (lit)Tj [-11.69999 ]TJ (y)Tj [20.5 ]TJ (.)Tj [0.5 ]TJ ( )Tj [-10 ]TJ (Ne)Tj [4.29998 ]TJ (w f)Tj [3.5 ]TJ (e)Tj [-5.69999 ]TJ (a)Tj [4.29998 ]TJ (t)Tj [-1.69999 ]TJ (ur)Tj [3.5 ]TJ (e)Tj [4.29998 ]TJ (s)Tj [-0.29998 ]TJ ( inc)Tj [4.29998 ]TJ (l)Tj [-1.69999 ]TJ (ude)Tj [4.29998 ]TJ ( a)Tj [4.29998 ]TJ (r)Tj [3.5 ]TJ (i)Tj [-11.69999 ]TJ (t)Tj [-1.69999 ]TJ (hme)Tj [4.29998 ]TJ (tic)Tj [4.29998 ]TJ ( ope)Tj [4.29998 ]TJ (r)Tj [3.5 ]TJ (a)Tj [4.29998 ]TJ (tor)Tj [3.5 ]TJ (s)Tj [-0.29998 ]TJ ( multip)Tj [10.5 ]TJ (l)Tj [-11.69999 ]TJ (y)Tj [20.5 ]TJ (, a)Tj [4.29998 ]TJ (nd divide)Tj [4.29998 ]TJ (. )Tj 
+ T*
+ -0.00138 Tc
+ 0.03138 Tw
+ (Parentheses m)Tj [-13.59999 ]TJ (a)Tj [-17.59999 ]TJ (y)Tj [18.59999 ]TJ ( be us)Tj [-12.19999 ]TJ (ed)Tj [-11.39999 ]TJ ( to over-)Tj [-8.39999 ]TJ (ride ope)Tj [-7.59999 ]TJ (rator p)Tj [-11.39999 ]TJ (r)Tj [1.59999 ]TJ (e)Tj [-7.59999 ]TJ (ceden)Tj [-11.39999 ]TJ (ce, )Tj [-10 ]TJ (and sin)Tj [-11.39999 ]TJ (g)Tj [8.59999 ]TJ (le-ch)Tj [-11.39999 ]TJ (a)Tj [2.39999 ]TJ (r)Tj [-8.39999 ]TJ (acter v)Tj [-11.39999 ]TJ (a)Tj [2.39999 ]TJ (riabl)Tj [-13.59999 ]TJ (e)Tj [2.39999 ]TJ (s )Tj 
+ T*
+ -0.00009 Tc
+ 0.14009 Tw
+ (ma)Tj [-6.29998 ]TJ (y)Tj [19.89999 ]TJ ( b)Tj [-10.09999 ]TJ (e)Tj [3.69999 ]TJ ( spe)Tj [-6.29998 ]TJ (c)Tj [3.69999 ]TJ (ified in )Tj [-10 ]TJ (assig)Tj [9.89999 ]TJ (n)Tj [-0.09999 ]TJ (ment statem)Tj [-12.29998 ]TJ (ents. The )Tj [-10 ]TJ (following)Tj [9.89999 ]TJ ( illustrates sam)Tj [-12.29998 ]TJ (p)Tj [-0.09999 ]TJ (le input and)Tj [-10.09999 ]TJ ( )Tj 
+ T*
+ -0.00028 Tc
+ 0.00028 Tw
+ (calculator output: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N176 1 Tf
+ 11.03909 0 0 11.03909 126.03019 375.27468 Tm
+ -0.00219 Tc
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ 0.59568 Tc
+ (3*\()Tj [597.89999 ]TJ (4+5)Tj [597.89999 ]TJ (\))Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ -0.00219 Tc
+ (calc)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ -0.00219 Tc
+ (27)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ 0.59568 Tc
+ (x=3*\()Tj [597.89999 ]TJ (5+4)Tj [597.89999 ]TJ (\))Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ -0.00219 Tc
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ 0.59568 Tc
+ (y=5)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ -0.00219 Tc
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ (x)Tj 
+ /N176 1 Tf
+ -4.18479 -1.11959 TD
+ -0.00219 Tc
+ (calc)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ -0.00219 Tc
+ (27)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ (y)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ -0.00219 Tc
+ (calc)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ (5)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ -0.00219 Tc
+ (user)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ -0.00219 Tc
+ (x)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ (2*y)Tj 
+ /N176 1 Tf
+ -4.18479 -1.13038 TD
+ (calc)Tj 
+ /N175 1 Tf
+ 2.39129 0 TD
+ 0 Tc
+ (:)Tj 
+ /N173 1 Tf
+ 1.79348 0 TD
+ -0.00219 Tc
+ (37)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 248.80529 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00228 Tc
+ 0.20228 Tw
+ (The l)Tj [-4.5 ]TJ (e)Tj [1.5 ]TJ (x)Tj [-12.29998 ]TJ (i)Tj [-4.5 ]TJ (cal)Tj [-4.5 ]TJ ( anal)Tj [-24.5 ]TJ (y)Tj [27.69999 ]TJ (z)Tj [-18.5 ]TJ (er r)Tj [-9.29998 ]TJ (e)Tj [1.5 ]TJ (t)Tj [-14.5 ]TJ (u)Tj [-2.29998 ]TJ (rns )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 236.30099 234.76649 Tm
+ -0.00219 Tc
+ 0 Tw
+ (VARIABLE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 289.09658 234.76649 Tm
+ -0.00099 Tc
+ 0.20098 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 317.17419 234.76649 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IN)Tj [-10.89999 ]TJ (TEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 363.49038 234.76649 Tm
+ -0.00099 Tc
+ 0.20098 Tw
+ ( tokens. F)Tj [5.09999 ]TJ (o)Tj [-1 ]TJ (r v)Tj [-11 ]TJ (a)Tj [2.79998 ]TJ (ri)Tj [-13.19999 ]TJ (ables, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 482.40049 234.76649 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 521.99708 234.76649 Tm
+ 0 Tc
+ ( )Tj 
+ -36 -1.20999 TD
+ -0.00219 Tc
+ 0.17219 Tw
+ (speci)Tj [-4.39999 ]TJ (fi)Tj [-4.39999 ]TJ (es an)Tj [-12.19999 ]TJ ( i)Tj [-4.39999 ]TJ (ndex)Tj [-12.19999 ]TJ ( t)Tj [-4.39999 ]TJ (o)Tj [-2.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 199.58399 220.24769 Tm
+ 0 Tw
+ (sym)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 219.38238 220.24769 Tm
+ -0.00039 Tc
+ 0.17039 Tw
+ (, our s)Tj [-21.19999 ]TJ (y)Tj [29.59999 ]TJ (mbol tabl)Tj [-12.59999 ]TJ (e. F)Tj [5.69999 ]TJ (o)Tj [-10.39999 ]TJ (r this program, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 412.92619 220.24769 Tm
+ -0.00219 Tc
+ 0 Tw
+ (sym)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 432.72459 220.24769 Tm
+ 0.00028 Tc
+ 0.16969 Tw
+ ( me)Tj [-5.89999 ]TJ (rel)Tj [-11.89999 ]TJ (y)Tj [20.29998 ]TJ ( )Tj [-10 ]TJ (holds the)Tj [-5.89999 ]TJ ( )Tj 
+ -28.55999 -1.19999 TD
+ -0.00219 Tc
+ 0.11219 Tw
+ (val)Tj [-4.39999 ]TJ (u)Tj [-2.19999 ]TJ (e of t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e associ)Tj [-4.39999 ]TJ (at)Tj [-4.39999 ]TJ (ed vari)Tj [-4.39999 ]TJ (abl)Tj [-4.39999 ]TJ (e)Tj [1.59999 ]TJ (. W)Tj [-8.39999 ]TJ (h)Tj [-2.19999 ]TJ (en )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 285.85679 205.84889 Tm
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 332.05299 205.84889 Tm
+ -0.00129 Tc
+ 0.11129 Tw
+ ( tokens are returned, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 438.00419 205.84889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y)Tj [-10.89999 ]TJ (ylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 477.72088 205.84889 Tm
+ -0.00028 Tc
+ 0.11029 Tw
+ ( contains )Tj 
+ -32.30999 -1.18998 TD
+ -0.00068 Tc
+ 0.00068 Tw
+ (the number scann)Tj [-10.69999 ]TJ (e)Tj [3.09999 ]TJ (d. He)Tj [-6.89999 ]TJ (r)Tj [-7.69999 ]TJ (e)Tj [3.09999 ]TJ ( is the input specificatio)Tj [-10.69999 ]TJ (n for lex)Tj [-10.69999 ]TJ (:)Tj [-2.69999 ]TJ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 18 18
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 18)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 684.72889 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 2.39129 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ ("y.tab.h")Tj 
+ -2.39129 -1.13038 TD
+ (%})Tj 
+ 0 -2.25 TD
+ (%%)Tj 
+ 2.39129 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (variables)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ ([a-z])Tj [-4184.79998 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (*yytext)Tj [-597.69999 ]TJ (-)Tj [-597.89999 ]TJ ('a';)Tj 
+ 0 -1.11959 TD
+ (return)Tj [-597.89999 ]TJ (VARIABLE;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (/*)Tj [-597.89999 ]TJ (integers)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ ([0-9]+)Tj [-3587 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (atoi\(yytext\);)Tj 
+ 0 -1.11959 TD
+ (return)Tj [-597.89999 ]TJ (INTEGER;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (/*)Tj [-597.89999 ]TJ (operators)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ ([-+\(\)=/*\\n])Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (*yytext;)Tj [-597.89999 ]TJ (})Tj 
+ 2.39129 -2.25 TD
+ (/*)Tj [-597.89999 ]TJ (skip)Tj [-597.89999 ]TJ (whitespace)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ ([)Tj [-597.89999 ]TJ (\\t])Tj [-4130.5 ]TJ (;)Tj 
+ 2.39129 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (anything)Tj [-597.89999 ]TJ (else)Tj [-597.89999 ]TJ (is)Tj [-597.89999 ]TJ (an)Tj [-597.89999 ]TJ (error)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (.)Tj [-8967.5 ]TJ (yyerror\("invalid)Tj [-597.89999 ]TJ (character"\);)Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ 0 -2.25 TD
+ (int)Tj [-597.89999 ]TJ (yywrap\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (1;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 284.20239 Tm
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00079 Tc
+ 0.15078 Tw
+ (The input specification )Tj [-10 ]TJ (for )Tj [-20 ]TJ (y)Tj [19.19999 ]TJ (a)Tj [3 ]TJ (c)Tj [-7 ]TJ (c)Tj [3 ]TJ ( follows. The to)Tj [-10.79998 ]TJ (kens for )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 376.68928 270.16349 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 422.88539 270.16349 Tm
+ -0.00099 Tc
+ 0.15098 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 449.88319 270.16349 Tm
+ -0.00219 Tc
+ 0 Tw
+ (VARIABLE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 502.67878 270.16349 Tm
+ -0.00358 Tc
+ 0.15359 Tw
+ ( are )Tj 
+ -34.38999 -1.20999 TD
+ 0.00219 Tc
+ 0.16778 Tw
+ (utilize)Tj [6 ]TJ (d)Tj [12.19999 ]TJ ( b)Tj [-7.79998 ]TJ (y)Tj [32.19999 ]TJ ( )Tj [-20 ]TJ (y)Tj [22.19999 ]TJ (a)Tj [-4 ]TJ (c)Tj [6 ]TJ (c)Tj [6 ]TJ ( to c)Tj [6 ]TJ (r)Tj [5.19999 ]TJ (e)Tj [6 ]TJ (a)Tj [6 ]TJ (t)Tj [-10 ]TJ (e)Tj [6 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 222.86209 255.64469 Tm
+ -0.00219 Tc
+ 0 Tw
+ (#defines)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 275.65769 255.64469 Tm
+ 0.00109 Tc
+ 0.16889 Tw
+ ( in )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 295.09609 255.64469 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.tab.)Tj [10.79998 ]TJ (h)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 341.17219 255.64469 Tm
+ 0.00048 Tc
+ 0.16949 Tw
+ ( f)Tj [3.5 ]TJ (o)Tj [0.5 ]TJ (r)Tj [3.5 ]TJ ( use)Tj [4.29998 ]TJ ( in le)Tj [14.29998 ]TJ (x)Tj [-9.5 ]TJ (.)Tj [0.5 ]TJ ( Th)Tj [10.5 ]TJ (is i)Tj [8.29998 ]TJ (s)Tj [-0.29998 ]TJ ( f)Tj [3.5 ]TJ (o)Tj [0.5 ]TJ (llowe)Tj [4.29998 ]TJ (d b)Tj [-9.5 ]TJ (y)Tj [20.5 ]TJ ( )Tj 
+ -20.92999 -1.20999 TD
+ 0.00219 Tc
+ 0.10778 Tw
+ (de)Tj [6 ]TJ (f)Tj [5.19999 ]TJ (i)Tj [0 ]TJ (nitions f)Tj [5.19999 ]TJ (o)Tj [2.19999 ]TJ (r)Tj [5.19999 ]TJ ( the ar)Tj [5.19999 ]TJ (ithme)Tj [6 ]TJ (tic)Tj [6 ]TJ ( ope)Tj [6 ]TJ (ra)Tj [6 ]TJ (tor)Tj [5.19999 ]TJ (s)Tj [1.39999 ]TJ (. We)Tj [6 ]TJ ( m)Tj [-10 ]TJ (a)Tj [-4 ]TJ (y)Tj [22.19999 ]TJ ( )Tj [-10 ]TJ (sp)Tj [-7.79998 ]TJ (e)Tj [6 ]TJ (c)Tj [6 ]TJ (i)Tj [0.19999 ]TJ (f)Tj [-14.79998 ]TJ (y)Tj [22.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 373.20959 241.12588 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%left)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 406.20678 241.12588 Tm
+ -0.00178 Tc
+ 0.11178 Tw
+ (, )Tj [-10 ]TJ (for l)Tj [-14 ]TJ (e)Tj [2 ]TJ (f)Tj [-8.79998 ]TJ (t)Tj [-3.89999 ]TJ (-associ)Tj [-4 ]TJ (at)Tj [-4 ]TJ (i)Tj [-4 ]TJ (v)Tj [-1.79998 ]TJ (e, o)Tj [-11.79998 ]TJ (r)Tj [1.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 226.72718 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%right)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 129.62989 226.72718 Tm
+ -0.00158 Tc
+ 0.03158 Tw
+ (, for ri)Tj [-3.79998 ]TJ (g)Tj [8.39999 ]TJ (h)Tj [-1.59999 ]TJ (t)Tj [-3.79998 ]TJ ( associ)Tj [-13.79998 ]TJ (at)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (v)Tj [-1.59999 ]TJ (e. The l)Tj [-3.79998 ]TJ (a)Tj [2.19999 ]TJ (st)Tj [-3.79998 ]TJ ( defi)Tj [-3.79998 ]TJ (ni)Tj [-3.79998 ]TJ (t)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (on )Tj [10 ]TJ (l)Tj [-3.79998 ]TJ (i)Tj [-3.79998 ]TJ (s)Tj [-2.39999 ]TJ (t)Tj [-3.79998 ]TJ (e)Tj [2.19999 ]TJ (d has t)Tj [-3.79998 ]TJ (h)Tj [-1.59999 ]TJ (e hi)Tj [-3.79998 ]TJ (g)Tj [8.39999 ]TJ (h)Tj [-1.59999 ]TJ (est)Tj [-3.79998 ]TJ ( preceden)Tj [-11.59999 ]TJ (ce. Thus,)Tj [-11.59999 ]TJ ( )Tj 
+ -3.29998 -1.18998 TD
+ -0.00028 Tc
+ 0.19029 Tw
+ (multiplication and div)Tj [9.69999 ]TJ (i)Tj [-2.5 ]TJ (si)Tj [7.5 ]TJ (on have hig)Tj [9.69999 ]TJ (h)Tj [-0.29998 ]TJ (e)Tj [-6.5 ]TJ (r)Tj [2.69999 ]TJ ( prec)Tj [-6.5 ]TJ (ede)Tj [-6.5 ]TJ (n)Tj [-0.29998 ]TJ (ce than addition and subtraction. All )Tj 
+ 0 -1.14999 TD
+ 0.00149 Tc
+ 0.43838 Tw
+ (f)Tj [4.5 ]TJ (our)Tj [4.5 ]TJ ( oper)Tj [4.5 ]TJ (a)Tj [5.29998 ]TJ (tor)Tj [4.5 ]TJ (s)Tj [0.69999 ]TJ ( )Tj [-10.09999 ]TJ (a)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (e le)Tj [5.29998 ]TJ (f)Tj [4.5 ]TJ (t)Tj [-10.59999 ]TJ (-)Tj [4.5 ]TJ (a)Tj [5.29998 ]TJ (ssoc)Tj [5.29998 ]TJ (i)Tj [-0.69999 ]TJ (a)Tj [5.29998 ]TJ (tive)Tj [5.29998 ]TJ (.)Tj [1.5 ]TJ ( )Tj [-10.09999 ]TJ (Using this simple)Tj [5.29998 ]TJ ( te)Tj [5.29998 ]TJ (c)Tj [5.29998 ]TJ (hnique)Tj [5.29998 ]TJ (, )Tj [-10.09999 ]TJ (we a)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (e a)Tj [5.29998 ]TJ (b)Tj [1.5 ]TJ (le to )Tj 
+ T*
+ -0.00048 Tc
+ 0.00048 Tw
+ (disambig)Tj [9.5 ]TJ (uate ou)Tj [-10.5 ]TJ (r )Tj [-10 ]TJ (g)Tj [9.5 ]TJ (r)Tj [2.5 ]TJ (amm)Tj [-12.69999 ]TJ (a)Tj [3.29998 ]TJ (r. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 159.05279 Tm
+ -0.00219 Tc
+ (%token)Tj [-597.89999 ]TJ (INTEGER)Tj [-597.89999 ]TJ (VARIABLE)Tj 
+ 0 -1.13038 TD
+ (%left)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ ('-')Tj 
+ T*
+ (%left)Tj [-597.89999 ]TJ ('*')Tj [-597.89999 ]TJ ('/')Tj 
+ 0 -2.26089 TD
+ (%{)Tj 
+ 2.39129 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (sym[26];)Tj 
+ -2.39129 -1.13038 TD
+ (%})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 19 19
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 19)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 698.52778 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%%)Tj 
+ 0 -2.26089 TD
+ (program:)Tj 
+ 4.78259 -1.11959 TD
+ (program)Tj [-597.89999 ]TJ (statement)Tj [-597.89999 ]TJ ('\\n')Tj 
+ 0 -1.13038 TD
+ 0 Tc
+ (|)Tj 
+ T*
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (statement:)Tj 
+ 4.78259 -1.13038 TD
+ (expr)Tj [-13152.29998 ]TJ ({)Tj [-597.89999 ]TJ (p)Tj [0.09999 ]TJ (rintf\("%d\\n",)Tj [-597.89999 ]TJ ($1\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (VARIABLE)Tj [-597.89999 ]TJ ('=')Tj [-597.89999 ]TJ (expr)Tj [-4184.79998 ]TJ ({)Tj [-597.89999 ]TJ (sym[$1])Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (expr:)Tj 
+ 4.78259 -1.13038 TD
+ (INTEGER)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (VARIABLE)Tj [-9565.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (sym[$1];)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('-')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.69999 ]TJ (-)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('*')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (*)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('/')Tj [-597.89999 ]TJ (expr)Tj [-6576.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (/)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-7174 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($2;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.25 TD
+ -0.00219 Tc
+ (%%)Tj 
+ 0 -2.26089 TD
+ (int)Tj [-597.89999 ]TJ (yyerror\(char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (fprintf\(stderr,)Tj [-597.89999 ]TJ ("%s\\n",)Tj [-597.89999 ]TJ (s\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.25 TD
+ -0.00219 Tc
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yyparse\(\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 20 20
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 20)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ -0.00109 Tc
+ 0.48989 Tw
+ (4. Calcu)Tj [-3.59999 ]TJ (l)Tj [-3.29998 ]TJ (ato)Tj [-3.59999 ]TJ (r)Tj [1.39999 ]TJ ( )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ 15.95869 0 0 15.95869 90.03318 659.05108 Tm
+ 0.00019 Tc
+ 0.58659 Tw
+ (4.1 Descrip)Tj [-5.5 ]TJ (tio)Tj [-5.5 ]TJ (n)Tj [2.09999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 638.65278 Tm
+ -0.00019 Tc
+ 0.23019 Tw
+ (This version of th)Tj [-10.19999 ]TJ (e c)Tj [-6.39999 ]TJ (a)Tj [3.59999 ]TJ (lculator is substantiall)Tj [-22.39999 ]TJ (y)Tj [19.79998 ]TJ ( )Tj [-10 ]TJ (more complex)Tj [-10.19999 ]TJ ( than pr)Tj [-7.19999 ]TJ (e)Tj [-6.39999 ]TJ (v)Tj [-0.19999 ]TJ (ious versions. )Tj 
+ 0 -1.14999 TD
+ -0.00059 Tc
+ 0.07058 Tw
+ (Major chan)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ (e)Tj [3.19999 ]TJ (s include c)Tj [-6.79998 ]TJ (ontrol constructs such as )Tj 
+ /N171 1 Tf
+ 20.37998 0 TD
+ 0.00158 Tc
+ 0 Tw
+ (if-)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (l)Tj [-0.59999 ]TJ (se)Tj 
+ /N231 1 Tf
+ 2.43998 0 TD
+ -0.00099 Tc
+ 0.07099 Tw
+ ( and )Tj 
+ /N171 1 Tf
+ 2.07998 0 TD
+ 0.00189 Tc
+ 0 Tw
+ (while)Tj 
+ /N231 1 Tf
+ 2.16999 0 TD
+ -0.00059 Tc
+ 0.07058 Tw
+ (. )Tj [-10 ]TJ (I)Tj [22.39999 ]TJ (n)Tj [-0.59999 ]TJ ( add)Tj [-10.59999 ]TJ (ition, a s)Tj [-11.39999 ]TJ (y)Tj [29.39999 ]TJ (ntax)Tj [-10.59999 ]TJ ( )Tj 
+ -27.06999 -1.14999 TD
+ -0.00099 Tc
+ 0.19099 Tw
+ (tree is constructed durin)Tj [-11 ]TJ (g)Tj [9 ]TJ ( parsin)Tj [-11 ]TJ (g)Tj [9 ]TJ (.)Tj [-1 ]TJ ( Afte)Tj [-7.19999 ]TJ (r parsin)Tj [-11 ]TJ (g, we walk the s)Tj [-11.79998 ]TJ (y)Tj [19 ]TJ (ntax)Tj [-11 ]TJ ( tree to produce )Tj 
+ T*
+ -0.00059 Tc
+ 0.00059 Tw
+ (output. Two versions of the tree w)Tj [-8.39999 ]TJ (a)Tj [3.19999 ]TJ (lk routine a)Tj [-6.79998 ]TJ (r)Tj [2.39999 ]TJ (e s)Tj [-11.39999 ]TJ (upplied: )Tj 
+ 1.5 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N172 1 Tf
+ 0 -1.22999 TD
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00199 Tc
+ 0.00199 Tw
+ (an i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ (t)Tj [-4.19999 ]TJ (e)Tj [1.79998 ]TJ (rpret)Tj [-14.19999 ]TJ (e)Tj [1.79998 ]TJ (r t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (at)Tj [-4.19999 ]TJ ( ex)Tj [-12 ]TJ (ecut)Tj [-14.19999 ]TJ (e)Tj [1.79998 ]TJ (s st)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (em)Tj [-4.19999 ]TJ (ent)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( duri)Tj [-4.19999 ]TJ (n)Tj [-12 ]TJ (g)Tj [8 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e t)Tj [-14.19999 ]TJ (r)Tj [1 ]TJ (ee w)Tj [-9.79998 ]TJ (a)Tj [1.79998 ]TJ (l)Tj [-4.19999 ]TJ (k, and )Tj 
+ /N172 1 Tf
+ -1.5 -1.21998 TD
+ 0 Tc
+ 0 Tw
+ (\001\002)Tj 
+ /N231 1 Tf
+ 1.5 0 TD
+ -0.00228 Tc
+ 0.00228 Tw
+ (a com)Tj [-4.5 ]TJ (p)Tj [-2.29998 ]TJ (i)Tj [-4.5 ]TJ (l)Tj [-4.5 ]TJ (e)Tj [1.5 ]TJ (r t)Tj [-4.5 ]TJ (h)Tj [-2.29998 ]TJ (at)Tj [-4.5 ]TJ ( )Tj [-10 ]TJ (g)Tj [7.69999 ]TJ (e)Tj [1.5 ]TJ (n)Tj [-12.29998 ]TJ (e)Tj [1.5 ]TJ (rat)Tj [-4.5 ]TJ (e)Tj [1.5 ]TJ (s)Tj [-13.09999 ]TJ ( code for )Tj [-10 ]TJ (a h)Tj [-22.29998 ]TJ (y)Tj [17.69999 ]TJ (pot)Tj [-4.5 ]TJ (het)Tj [-4.5 ]TJ (i)Tj [-4.5 ]TJ (cal)Tj [-4.5 ]TJ ( s)Tj [-13.09999 ]TJ (t)Tj [-4.5 ]TJ (ack-bas)Tj [-13.09999 ]TJ (ed m)Tj [-4.5 ]TJ (a)Tj [1.5 ]TJ (chi)Tj [-4.5 ]TJ (n)Tj [-2.29998 ]TJ (e. )Tj 
+ -1.5 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ -1.5 -1.14999 TD
+ 0.00158 Tc
+ -0.00158 Tw
+ (To ma)Tj [5.39999 ]TJ (ke)Tj [5.39999 ]TJ ( thing)Tj [11.59999 ]TJ (s)Tj [0.79998 ]TJ ( more)Tj [5.39999 ]TJ ( c)Tj [5.39999 ]TJ (o)Tj [1.59999 ]TJ (n)Tj [-8.39999 ]TJ (c)Tj [5.39999 ]TJ (r)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (te)Tj [5.39999 ]TJ (, h)Tj [-8.39999 ]TJ (e)Tj [5.39999 ]TJ (r)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ ( is a)Tj [5.39999 ]TJ ( s)Tj [-9.19999 ]TJ (a)Tj [5.39999 ]TJ (mple)Tj [5.39999 ]TJ ( prog)Tj [11.59999 ]TJ (ra)Tj [5.39999 ]TJ (m, )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 500.66429 Tm
+ 0.59568 Tc
+ (x=0)Tj [597.89999 ]TJ (;)Tj 
+ 0 -1.11959 TD
+ -0.00219 Tc
+ (while)Tj [-597.89999 ]TJ (\(x)Tj [-597.89999 ]TJ (<)Tj [-597.89999 ]TJ (3)Tj [0 ]TJ (\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (print)Tj [-597.89999 ]TJ (x;)Tj 
+ T*
+ 0.59568 Tc
+ (x=x+1)Tj [597.89999 ]TJ (;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 436.58969 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00059 Tc
+ 0.00059 Tw
+ (with output for the interpretive version, )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 396.99288 Tm
+ (0)Tj 
+ 0 -1.13038 TD
+ (1)Tj 
+ 0 -1.11959 TD
+ (2)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 357.87619 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00059 Tc
+ 0.00059 Tw
+ (and output for the compil)Tj [-12.79998 ]TJ (er version. )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 152.42808 319.59939 Tm
+ -0.00219 Tc
+ 0 Tw
+ (push)Tj [-1739.09999 ]TJ (0)Tj 
+ 0 -1.13038 TD
+ (pop)Tj [-2391.39999 ]TJ (x)Tj 
+ -2.39129 -1.13038 TD
+ (L000:)Tj 
+ 2.39129 -1.13038 TD
+ (push)Tj [-1793.5 ]TJ (x)Tj 
+ 0 -1.11959 TD
+ (push)Tj [-1739.19999 ]TJ (3)Tj 
+ 0 -1.13038 TD
+ (compLT)Tj 
+ T*
+ (jz)Tj [-1304.39999 ]TJ (L001)Tj 
+ T*
+ (push)Tj [-1793.5 ]TJ (x)Tj 
+ T*
+ (print)Tj 
+ T*
+ (push)Tj [-1793.5 ]TJ (x)Tj 
+ 0 -1.11959 TD
+ (push)Tj [-1793.5 ]TJ (1)Tj 
+ 0 -1.13038 TD
+ (add)Tj 
+ T*
+ (pop)Tj [-2391.39999 ]TJ (x)Tj 
+ T*
+ (jmp)Tj [-2391.39999 ]TJ (L000)Tj 
+ -2.39129 -1.13038 TD
+ (L001:)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 130.85508 Tm
+ 0 Tc
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 21 21
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 21)Tj 
+ 0 55.84999 TD
+ -0.00209 Tc
+ 1.25209 Tw
+ ( The )Tj 
+ 0 0 1 sc
+ 3.53999 0 TD
+ 0.00109 Tc
+ 0.23889 Tw
+ (inc)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (ude)Tj [4.89999 ]TJ ( f)Tj [4.09999 ]TJ (ile)Tj 
+ ET
+ 
+ 132.50999 707.88699 57.11499 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 189.62489 709.20689 Tm
+ 0 0 0 sc
+ -0.00178 Tc
+ 0.24179 Tw
+ ( cont)Tj [-4 ]TJ (ai)Tj [-14 ]TJ (ns decl)Tj [-4 ]TJ (ar)Tj [-8.79998 ]TJ (at)Tj [-4 ]TJ (i)Tj [-4 ]TJ (ons for t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (e )Tj [-10 ]TJ (s)Tj [-12.59999 ]TJ (y)Tj [18.19999 ]TJ (nt)Tj [-4 ]TJ (ax)Tj [-11.79998 ]TJ ( t)Tj [-4 ]TJ (r)Tj [1.19999 ]TJ (ee and s)Tj [-22.59999 ]TJ (y)Tj [18.19999 ]TJ (m)Tj [-4 ]TJ (bol)Tj [-14 ]TJ ( t)Tj [-4 ]TJ (a)Tj [2 ]TJ (bl)Tj [-4 ]TJ (e. The )Tj 
+ -8.29998 -1.16999 TD
+ 0.00009 Tc
+ 0.05989 Tw
+ (s)Tj [-10.69999 ]TJ (y)Tj [20.09999 ]TJ (mbol table, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 159.02738 695.16809 Tm
+ -0.00219 Tc
+ 0 Tw
+ (sym)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 178.82579 695.16809 Tm
+ -0.00099 Tc
+ 0.06098 Tw
+ (, allows for sing)Tj [9 ]TJ (le-)Tj [-8 ]TJ (c)Tj [2.79998 ]TJ (har)Tj [-8 ]TJ (acte)Tj [-7.19999 ]TJ (r)Tj [2 ]TJ ( var)Tj [-8 ]TJ (i)Tj [-3.19999 ]TJ (able names. A node in the s)Tj [-11.79998 ]TJ (y)Tj [19 ]TJ (ntax)Tj [-11 ]TJ ( tree)Tj [-7.19999 ]TJ ( )Tj 
+ -7.39999 -1.20999 TD
+ -0.00019 Tc
+ 0.11019 Tw
+ (ma)Tj [-6.39999 ]TJ (y)Tj [19.79998 ]TJ ( hold a )Tj [-10 ]TJ (constant \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 198.50408 680.64929 Tm
+ -0.00219 Tc
+ 0 Tw
+ (co)Tj [-10.89999 ]TJ (nNodeType)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 271.21809 680.64929 Tm
+ 0.00178 Tc
+ 0.10818 Tw
+ (\))Tj [4.79998 ]TJ (,)Tj [1.79998 ]TJ ( a)Tj [5.59999 ]TJ (n)Tj [1.79998 ]TJ ( ide)Tj [5.59999 ]TJ (n)Tj [1.79998 ]TJ (tif)Tj [4.79998 ]TJ (i)Tj [-10.39999 ]TJ (e)Tj [5.59999 ]TJ (r)Tj [4.79998 ]TJ ( \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 350.41149 680.64929 Tm
+ -0.00219 Tc
+ 0 Tw
+ (idNodeType)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 416.40599 680.64929 Tm
+ -0.00119 Tc
+ 0.11119 Tw
+ (\), o)Tj [-11.19999 ]TJ (r)Tj [1.79998 ]TJ ( an)Tj [-11.19999 ]TJ ( internal node )Tj 
+ -27.19999 -1.20999 TD
+ 0.00048 Tc
+ 0.03948 Tw
+ (with a)Tj [4.29998 ]TJ (n)Tj [0.5 ]TJ ( ope)Tj [4.29998 ]TJ (r)Tj [3.5 ]TJ (a)Tj [4.29998 ]TJ (tor)Tj [3.5 ]TJ ( \()Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 176.90589 666.13049 Tm
+ -0.00219 Tc
+ 0 Tw
+ (oprNo)Tj [-10.89999 ]TJ (deType)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 249.61988 666.13049 Tm
+ -0.00039 Tc
+ 0.04039 Tw
+ (\). Union )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 293.53619 666.13049 Tm
+ -0.00219 Tc
+ 0 Tw
+ (nodeType)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 346.33178 666.13049 Tm
+ -0.00178 Tc
+ 0.04179 Tw
+ ( encapsul)Tj [-4 ]TJ (a)Tj [2 ]TJ (t)Tj [-4 ]TJ (e)Tj [2 ]TJ (s al)Tj [-4 ]TJ (l)Tj [-4 ]TJ ( t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (re)Tj [-8 ]TJ (e vari)Tj [-4 ]TJ (ant)Tj [-4 ]TJ (s)Tj [-2.59999 ]TJ (,  and)Tj [-11.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 651.61169 Tm
+ -0.00219 Tc
+ 0 Tw
+ (nodeType.type)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 175.82598 651.61169 Tm
+ -0.00079 Tc
+ 0.00079 Tw
+ ( is used to determine which struc)Tj [-7 ]TJ (t)Tj [-3 ]TJ (ure we hav)Tj [-10.79998 ]TJ (e)Tj [3 ]TJ (. )Tj 
+ -7.14999 -1.20999 TD
+ -0.00209 Tc
+ 1.25209 Tw
+ ( The )Tj 
+ 0 0 1 sc
+ 3.35998 0 TD
+ 0.00059 Tc
+ 0.05938 Tw
+ (lex)Tj [-9.39999 ]TJ ( input file)Tj 
+ ET
+ 130.34999 635.77299 62.875 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 193.22459 637.09289 Tm
+ 0 0 0 sc
+ -0.00119 Tc
+ 0.06118 Tw
+ ( contai)Tj [-13.39999 ]TJ (ns patterns fo)Tj [-11.19999 ]TJ (r )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 300.13569 637.09289 Tm
+ -0.00219 Tc
+ 0 Tw
+ (VARIABL)Tj [-10.89999 ]TJ (E)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 353.05119 637.09289 Tm
+ -0.00099 Tc
+ 0.06098 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 377.76919 637.09289 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 423.96528 637.09289 Tm
+ 0.00039 Tc
+ 0.05958 Tw
+ ( tok)Tj [-9.59999 ]TJ (e)Tj [4.19999 ]TJ (ns. )Tj [-10 ]TJ (I)Tj [13.39999 ]TJ (n)Tj [-9.59999 ]TJ ( addition, )Tj 
+ -27.82998 -1.19999 TD
+ -0.00138 Tc
+ 0.36138 Tw
+ (tokens are defined fo)Tj [-11.39999 ]TJ (r)Tj [-8.39999 ]TJ ( 2-chara)Tj [-7.59999 ]TJ (c)Tj [2.39999 ]TJ (ter ope)Tj [-7.59999 ]TJ (rators )Tj [-10 ]TJ (such as )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 374.88938 622.69409 Tm
+ -0.00219 Tc
+ 0 Tw
+ (EQ)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 388.08828 622.69409 Tm
+ -0.00099 Tc
+ 0.36099 Tw
+ ( and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 420.00569 622.69409 Tm
+ -0.00219 Tc
+ 0 Tw
+ (NE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 433.20458 622.69409 Tm
+ -0.00099 Tc
+ 0.36099 Tw
+ (. S)Tj [5.09999 ]TJ (i)Tj [-3.19999 ]TJ (ng)Tj [9 ]TJ (le-)Tj [-8 ]TJ (c)Tj [2.79998 ]TJ (har)Tj [-8 ]TJ (acte)Tj [-7.19999 ]TJ (r)Tj [2 ]TJ ( )Tj 
+ -28.59999 -1.18998 TD
+ 0.00129 Tc
+ -0.00129 Tw
+ (ope)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ (a)Tj [5.09999 ]TJ (tor)Tj [4.29998 ]TJ (s)Tj [0.5 ]TJ ( ar)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ ( simpl)Tj [-10.89999 ]TJ (y)Tj [21.29998 ]TJ ( )Tj [-10 ]TJ (r)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ (tu)Tj [-8.69999 ]TJ (r)Tj [4.29998 ]TJ (n)Tj [1.29998 ]TJ (e)Tj [5.09999 ]TJ (d)Tj [1.39999 ]TJ ( a)Tj [5.09999 ]TJ (s)Tj [0.5 ]TJ ( the)Tj [5.09999 ]TJ (m)Tj [-0.89999 ]TJ (se)Tj [5.09999 ]TJ (lve)Tj [5.09999 ]TJ (s)Tj [0.5 ]TJ (. )Tj 
+ 0 -1.16999 TD
+ -0.00209 Tc
+ 1.25209 Tw
+ ( The )Tj 
+ 0 0 1 sc
+ 3.30999 0 TD
+ 0.00068 Tc
+ -0.00068 Tw
+ (y)Tj [20.69999 ]TJ (a)Tj [-5.5 ]TJ (c)Tj [-5.5 ]TJ (c)Tj [4.5 ]TJ ( input file)Tj 
+ ET
+ 129.75 593.05699 68.51399 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 198.26419 594.37649 Tm
+ 0 0 0 sc
+ -0.00039 Tc
+ 0.00039 Tw
+ ( defin)Tj [-10.39999 ]TJ (e)Tj [3.39999 ]TJ (s )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 238.94079 594.37649 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYSTYPE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 285.13688 594.37649 Tm
+ -0.00088 Tc
+ 0.00088 Tw
+ (, the t)Tj [-13.09999 ]TJ (y)Tj [19.09999 ]TJ (p)Tj [-10.89999 ]TJ (e)Tj [2.89999 ]TJ ( of )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 345.49189 594.37649 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 385.08859 594.37649 Tm
+ -0.00079 Tc
+ 0.00079 Tw
+ (, as )Tj 
+ -24.58999 -1.18998 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 568.09869 Tm
+ -0.00219 Tc
+ (%union)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (iValue;)Tj [-7336.89999 ]TJ (/*)Tj [-597.89999 ]TJ (integer)Tj [-597.89999 ]TJ (value)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (char)Tj [-597.89999 ]TJ (sIndex;)Tj [-6739.09999 ]TJ (/*)Tj [-597.89999 ]TJ (symbol)Tj [-597.89999 ]TJ (table)Tj [-597.89999 ]TJ (index)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (nodeType)Tj [-597.89999 ]TJ (*nPtr;)Tj [-4945.59999 ]TJ (/*)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (pointer)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (};)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 504.02398 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ 0.00099 Tc
+ -0.00099 Tw
+ (This c)Tj [4.79998 ]TJ (a)Tj [4.79998 ]TJ (u)Tj [1 ]TJ (se)Tj [4.79998 ]TJ (s the)Tj [4.79998 ]TJ ( f)Tj [4 ]TJ (o)Tj [1 ]TJ (llowin)Tj [-9 ]TJ (g)Tj [11 ]TJ ( to be)Tj [4.79998 ]TJ ( )Tj [-10 ]TJ (ge)Tj [4.79998 ]TJ (ne)Tj [4.79998 ]TJ (ra)Tj [4.79998 ]TJ (te)Tj [4.79998 ]TJ (d in )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 304.57528 489.98519 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.t)Tj [-10.89999 ]TJ (ab.h)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 350.89138 489.98519 Tm
+ 0.00219 Tc
+ (: )Tj 
+ -21.73999 -1.18998 TD
+ 0 Tc
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 463.70739 Tm
+ -0.00219 Tc
+ (typedef)Tj [-597.89999 ]TJ (union)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (iValue;)Tj [-7336.89999 ]TJ (/*)Tj [-597.89999 ]TJ (integer)Tj [-597.89999 ]TJ (value)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (char)Tj [-597.89999 ]TJ (sIndex;)Tj [-6739.09999 ]TJ (/*)Tj [-597.89999 ]TJ (symbol)Tj [-597.89999 ]TJ (table)Tj [-597.89999 ]TJ (index)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (nodeType)Tj [-597.89999 ]TJ (*nPtr;)Tj [-4945.59999 ]TJ (/*)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (pointer)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (YYSTYPE;)Tj 
+ 0 -1.11959 TD
+ (extern)Tj [-597.89999 ]TJ (YYSTYPE)Tj [-597.89999 ]TJ (yylval;)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 387.15368 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (Constants, variables, )Tj [-10 ]TJ (and)Tj [-10.5 ]TJ ( nodes c)Tj [-6.59999 ]TJ (a)Tj [3.29998 ]TJ (n b)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ ( r)Tj [-7.5 ]TJ (e)Tj [3.29998 ]TJ (pres)Tj [-11.29998 ]TJ (ente)Tj [-6.69999 ]TJ (d b)Tj [-10.5 ]TJ (y)Tj [19.5 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 351.61138 373.11489 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 391.20809 373.11489 Tm
+ -0.00068 Tc
+ 0.00068 Tw
+ ( in the)Tj [-6.89999 ]TJ ( pars)Tj [-11.5 ]TJ (e)Tj [-6.89999 ]TJ (r\222s value)Tj [-6.89999 ]TJ ( stack. )Tj 
+ -25.09999 -1.18998 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (Notice the t)Tj [-22.69999 ]TJ (y)Tj [19.5 ]TJ (pe de)Tj [-6.69999 ]TJ (finitions )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 333.03829 Tm
+ -0.00219 Tc
+ (%token)Tj [-597.89999 ]TJ (<iValue>)Tj [-597.89999 ]TJ (INTEGER)Tj 
+ 0 -1.13038 TD
+ (%type)Tj [-597.89999 ]TJ (<nPtr>)Tj [-597.89999 ]TJ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 306.28048 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ 0.00059 Tc
+ 0.20939 Tw
+ (This binds )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 148.46829 292.24159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (expr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 174.86608 292.24159 Tm
+ 0.00109 Tc
+ 0.20889 Tw
+ ( to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 195.26438 292.24159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (nP)Tj [10.79998 ]TJ (tr)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 221.54219 292.24159 Tm
+ -0.00059 Tc
+ 0.21058 Tw
+ (, and )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 252.85958 292.24159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 299.05578 292.24159 Tm
+ 0.00109 Tc
+ 0.20889 Tw
+ ( to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 319.45408 292.24159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (iValue)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 359.05079 292.24159 Tm
+ 0.00109 Tc
+ 0.20889 Tw
+ ( in the)Tj [4.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 399.60739 292.24159 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYSTYPE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 445.80349 292.24159 Tm
+ 0.00068 Tc
+ 0.20928 Tw
+ ( union. This is)Tj [9.89999 ]TJ ( )Tj 
+ -29.64999 -1.18998 TD
+ -0.00219 Tc
+ 0.00219 Tw
+ (requi)Tj [-4.39999 ]TJ (red so t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (at)Tj [-4.39999 ]TJ ( )Tj [-20 ]TJ (y)Tj [17.79998 ]TJ (a)Tj [-8.39999 ]TJ (cc )Tj [-10 ]TJ (can )Tj [-10 ]TJ (g)Tj [7.79998 ]TJ (e)Tj [1.59999 ]TJ (n)Tj [-12.19999 ]TJ (e)Tj [1.59999 ]TJ (rat)Tj [-14.39999 ]TJ (e)Tj [1.59999 ]TJ ( t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e co)Tj [-12.19999 ]TJ (rre)Tj [-8.39999 ]TJ (ct)Tj [-4.39999 ]TJ ( code)Tj [-8.39999 ]TJ (. For ex)Tj [-12.19999 ]TJ (am)Tj [-4.39999 ]TJ (pl)Tj [-4.39999 ]TJ (e, t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e rul)Tj [-4.39999 ]TJ (e)Tj [1.69999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 252.16499 Tm
+ -0.00219 Tc
+ (expr:)Tj [-597.89999 ]TJ (INTEGER)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (con\($1\);)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 237.88619 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00019 Tc
+ 0.08018 Tw
+ (should g)Tj [9.79998 ]TJ (e)Tj [3.59999 ]TJ (n)Tj [-10.19999 ]TJ (e)Tj [3.59999 ]TJ (rate)Tj [-6.39999 ]TJ ( the follo)Tj [-10.19999 ]TJ (wing)Tj [9.79998 ]TJ ( )Tj [-10 ]TJ (code. Note)Tj [-6.39999 ]TJ ( that )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 318.73408 223.84739 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yy)Tj [-10.89999 ]TJ (vsp[0])Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 371.64968 223.84739 Tm
+ -0.00109 Tc
+ 0.08108 Tw
+ ( addresses)Tj [-11.89999 ]TJ ( the to)Tj [-11.09999 ]TJ (p of the value )Tj 
+ -23.46998 -1.19999 TD
+ -0.00178 Tc
+ 0.00178 Tw
+ (st)Tj [-4 ]TJ (ack, or t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (e val)Tj [-4 ]TJ (u)Tj [-11.79998 ]TJ (e associ)Tj [-14 ]TJ (at)Tj [-4 ]TJ (ed wi)Tj [-4 ]TJ (t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 256.93919 209.44859 Tm
+ -0.00219 Tc
+ 0 Tw
+ (INTEGER)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 303.13539 209.44859 Tm
+ 0 Tc
+ (. )Tj 
+ -17.75999 -1.18998 TD
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 183.17079 Tm
+ -0.00219 Tc
+ (yylval.nPtr)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (con\(yyvsp[0].iValue\);)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 168.89199 Tm
+ 0 Tc
+ ( )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 22 22
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 22)Tj 
+ 0 55.84999 TD
+ -0.00028 Tc
+ 0.00028 Tw
+ (The unar)Tj [-17.29998 ]TJ (y)Tj [19.69999 ]TJ ( minus oper)Tj [-7.29998 ]TJ (a)Tj [3.5 ]TJ (to)Tj [-10.29998 ]TJ (r is g)Tj [9.69999 ]TJ (i)Tj [-2.5 ]TJ (ven hi)Tj [-12.5 ]TJ (g)Tj [9.69999 ]TJ (h)Tj [-0.29998 ]TJ (e)Tj [-6.5 ]TJ (r)Tj [2.69999 ]TJ ( priorit)Tj [-22.5 ]TJ (y)Tj [19.69999 ]TJ ( )Tj [-10 ]TJ (than binar)Tj [-17.29998 ]TJ (y)Tj [19.69999 ]TJ ( oper)Tj [-7.29998 ]TJ (a)Tj [3.5 ]TJ (tors as f)Tj [-7.29998 ]TJ (o)Tj [-0.29998 ]TJ (llows: )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 683.40908 Tm
+ -0.00219 Tc
+ (%left)Tj [-597.89999 ]TJ (GE)Tj [-597.89999 ]TJ (LE)Tj [-597.89999 ]TJ (EQ)Tj [-597.89999 ]TJ (NE)Tj [-597.89999 ]TJ ('>')Tj [-597.89999 ]TJ ('<')Tj 
+ 0 -1.13038 TD
+ (%left)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ ('-')Tj 
+ T*
+ (%left)Tj [-597.89999 ]TJ ('*')Tj [-597.89999 ]TJ ('/')Tj 
+ T*
+ (%nonassoc)Tj [-597.89999 ]TJ (UMINUS)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 631.81338 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00209 Tc
+ (The )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 111.87139 617.77449 Tm
+ -0.00219 Tc
+ (%nonassoc)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 171.26638 617.77449 Tm
+ 0.00109 Tc
+ 0.01889 Tw
+ ( indic)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ (es no a)Tj [4.89999 ]TJ (ssoc)Tj [4.89999 ]TJ (i)Tj [-1.09999 ]TJ (a)Tj [4.89999 ]TJ (tivit)Tj [-11.09999 ]TJ (y)Tj [21.09999 ]TJ ( is implie)Tj [4.89999 ]TJ (d. )Tj [-10 ]TJ (I)Tj [24.09999 ]TJ (t)Tj [-1.09999 ]TJ ( is )Tj [-10 ]TJ (f)Tj [4.09999 ]TJ (r)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (qu)Tj [-8.89999 ]TJ (e)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ (tl)Tj [-11.09999 ]TJ (y)Tj [21.09999 ]TJ ( us)Tj [-9.69999 ]TJ (e)Tj [4.89999 ]TJ (d)Tj [1.09999 ]TJ ( )Tj [-10 ]TJ (in c)Tj [4.89999 ]TJ (onjunc)Tj [4.89999 ]TJ (tion )Tj 
+ -6.76998 -1.20999 TD
+ 0.00059 Tc
+ 0 Tw
+ (with )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 114.39109 603.25569 Tm
+ -0.00219 Tc
+ (%prec)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 147.38839 603.25569 Tm
+ -0.00189 Tc
+ 0.00189 Tw
+ ( t)Tj [-4.09999 ]TJ (o)Tj [-1.89999 ]TJ ( speci)Tj [-4.09999 ]TJ (f)Tj [-8.89999 ]TJ (y)Tj [18.09999 ]TJ ( p)Tj [-11.89999 ]TJ (r)Tj [-8.89999 ]TJ (eced)Tj [-11.89999 ]TJ (ence o)Tj [-11.89999 ]TJ (f)Tj [1.09999 ]TJ ( a rul)Tj [-14.09999 ]TJ (e)Tj [1.89999 ]TJ (. Thus,)Tj [-11.89999 ]TJ ( we have )Tj 
+ -4.77999 -1.18998 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 576.97789 Tm
+ -0.00219 Tc
+ (expr:)Tj [-597.89999 ]TJ ('-')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (%prec)Tj [-597.89999 ]TJ (UMINUS)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (node\(UMINUS,)Tj [-597.89999 ]TJ (1,)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 562.69909 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00209 Tc
+ 0.02209 Tw
+ (i)Tj [-4.29998 ]TJ (ndi)Tj [-4.29998 ]TJ (cat)Tj [-4.29998 ]TJ (i)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ (g)Tj [7.89999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (at)Tj [-4.29998 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e)Tj [-8.29998 ]TJ ( pre)Tj [-8.29998 ]TJ (ced)Tj [-12.09999 ]TJ (ence o)Tj [-12.09999 ]TJ (f)Tj [0.89999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e rul)Tj [-14.29998 ]TJ (e)Tj [1.69999 ]TJ ( i)Tj [-4.29998 ]TJ (s)Tj [-2.89999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e sa)Tj [-8.29998 ]TJ (m)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ ( as t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e pr)Tj [-9.09999 ]TJ (ec)Tj [-8.29998 ]TJ (edenc)Tj [-8.29998 ]TJ (e)Tj [1.69999 ]TJ ( of )Tj [-10 ]TJ (t)Tj [-4.29998 ]TJ (oken )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 479.28079 548.66029 Tm
+ -0.00219 Tc
+ 0 Tw
+ (UMINUS)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 518.87739 548.66029 Tm
+ 0.00999 Tc
+ (. )Tj 
+ -35.73999 -1.20999 TD
+ -0.00079 Tc
+ 0.01078 Tw
+ (And, as de)Tj [-7 ]TJ (fined abov)Tj [-10.79998 ]TJ (e, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 203.78369 534.14149 Tm
+ -0.00219 Tc
+ 0 Tw
+ (U)Tj [-10.89999 ]TJ (MINUS)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 243.50039 534.14149 Tm
+ -0.00178 Tc
+ 0.01179 Tw
+ ( has hi)Tj [-14 ]TJ (g)Tj [8.19999 ]TJ (h)Tj [-1.79998 ]TJ (er p)Tj [-11.79998 ]TJ (r)Tj [1.19999 ]TJ (e)Tj [-8 ]TJ (ced)Tj [-11.79998 ]TJ (ence t)Tj [-4 ]TJ (h)Tj [-11.79998 ]TJ (an t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (e ot)Tj [-4 ]TJ (he)Tj [-8 ]TJ (r ope)Tj [-8 ]TJ (ra)Tj [-8 ]TJ (t)Tj [-4 ]TJ (o)Tj [-1.79998 ]TJ (rs. A si)Tj [-4 ]TJ (m)Tj [-4 ]TJ (i)Tj [-3.79998 ]TJ (l)Tj [-4 ]TJ (a)Tj [2 ]TJ (r )Tj 
+ -12.78999 -1.18998 TD
+ -0.00199 Tc
+ 0.08198 Tw
+ (t)Tj [-4.19999 ]TJ (echni)Tj [-4.19999 ]TJ (que i)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( us)Tj [-12.79998 ]TJ (ed t)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ ( )Tj [-10 ]TJ (rem)Tj [-14.19999 ]TJ (ove am)Tj [-4.19999 ]TJ (bi)Tj [-14.19999 ]TJ (g)Tj [8 ]TJ (u)Tj [-2 ]TJ (i)Tj [-4.19999 ]TJ (t)Tj [-14.19999 ]TJ (y)Tj [18 ]TJ ( )Tj [-10 ]TJ (associ)Tj [-14.19999 ]TJ (at)Tj [-4.19999 ]TJ (e)Tj [-8.19999 ]TJ (d)Tj [-2 ]TJ ( wi)Tj [-4.19999 ]TJ (t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e i)Tj [-4.19999 ]TJ (f)Tj [-8.79998 ]TJ (-el)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ (e)Tj [-8.19999 ]TJ ( st)Tj [-4.19999 ]TJ (at)Tj [-4.19999 ]TJ (em)Tj [-14.19999 ]TJ (ent)Tj [-4.19999 ]TJ ( \(se)Tj [-8.19999 ]TJ (e)Tj [1.79998 ]TJ ( )Tj 
+ 0 0 1 sc
+ 33.28999 0 TD
+ -0.01298 Tc
+ 0 Tw
+ (If)Tj [-20 ]TJ (-)Tj [-10 ]TJ (E)Tj [-12.19999 ]TJ (l)Tj [-15.19999 ]TJ (s)Tj [-13.79998 ]TJ (e)Tj [-9.19999 ]TJ ( )Tj 
+ ET
+ 
+ 489.47999 518.54299 32.51699 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 90.03318 506.06379 Tm
+ 0.00109 Tc
+ (Ambig)Tj [11.09999 ]TJ (u)Tj [1.09999 ]TJ (it)Tj [-11.09999 ]TJ (y)Tj 
+ ET
+ 90.03298 504.74398 51.83599 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 141.86889 506.06379 Tm
+ 0 0 0 sc
+ -0.00028 Tc
+ 0.00028 Tw
+ (, p. 35)Tj [-10.29998 ]TJ (\). )Tj 
+ -4.31999 -1.14999 TD
+ -0.00079 Tc
+ 0.15078 Tw
+ ( )Tj [-1100 ]TJ (The s)Tj [-11.59999 ]TJ (y)Tj [19.19999 ]TJ (ntax)Tj [-10.79998 ]TJ ( tree is constructed bottom-up, alloca)Tj [-7 ]TJ (ting)Tj [9.19999 ]TJ ( the leaf nodes wh)Tj [-10.79998 ]TJ (e)Tj [-7 ]TJ (n)Tj [-0.79998 ]TJ ( variables )Tj 
+ T*
+ -0.00138 Tc
+ 0.27139 Tw
+ (and integ)Tj [8.59999 ]TJ (e)Tj [-7.59999 ]TJ (rs are redu)Tj [-11.39999 ]TJ (ce)Tj [-7.59999 ]TJ (d. W)Tj [-7.59999 ]TJ (h)Tj [-1.39999 ]TJ (en operators are encounter)Tj [-8.39999 ]TJ (ed, a node is allocated and )Tj 
+ T*
+ -0.00088 Tc
+ 0.00088 Tw
+ (pointers to previousl)Tj [-13.09999 ]TJ (y)Tj [19.09999 ]TJ ( )Tj [-10 ]TJ (allocated nodes)Tj [-11.69999 ]TJ ( ar)Tj [-7.89999 ]TJ (e ente)Tj [-7.09999 ]TJ (red )Tj [-10 ]TJ (as oper)Tj [-7.89999 ]TJ (a)Tj [2.89999 ]TJ (nds. As statemen)Tj [-10.89999 ]TJ (ts are r)Tj [-7.89999 ]TJ (e)Tj [2.89999 ]TJ (duced)Tj [-10.89999 ]TJ (,)Tj [-10.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 450.62849 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 103.23208 450.62849 Tm
+ 0.00149 Tc
+ 0.11849 Tw
+ ( is c)Tj [5.29998 ]TJ (a)Tj [5.29998 ]TJ (lle)Tj [5.29998 ]TJ (d)Tj [-8.5 ]TJ ( to do)Tj [-8.5 ]TJ ( a)Tj [5.29998 ]TJ ( d)Tj [-8.5 ]TJ (e)Tj [5.29998 ]TJ (p)Tj [-8.5 ]TJ (t)Tj [-0.69999 ]TJ (h-)Tj [4.5 ]TJ (f)Tj [4.5 ]TJ (i)Tj [-0.69999 ]TJ (r)Tj [4.5 ]TJ (s)Tj [0.69999 ]TJ (t wa)Tj [5.29998 ]TJ (lk)Tj [-8.5 ]TJ ( of)Tj [4.5 ]TJ ( the s)Tj [-19.29998 ]TJ (y)Tj [21.5 ]TJ (nt)Tj [-10.69999 ]TJ (a)Tj [5.29998 ]TJ (x)Tj [-8.5 ]TJ ( tr)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (e)Tj [5.29998 ]TJ (.)Tj [1.5 ]TJ ( Sinc)Tj [5.29998 ]TJ (e the)Tj [5.29998 ]TJ ( t)Tj [-10.69999 ]TJ (r)Tj [4.5 ]TJ (e)Tj [5.29998 ]TJ (e)Tj [-4.69999 ]TJ ( w)Tj [-6.29998 ]TJ (a)Tj [5.29998 ]TJ (s c)Tj [5.29998 ]TJ (onstr)Tj [4.5 ]TJ (u)Tj [-8.5 ]TJ (c)Tj [5.5 ]TJ (te)Tj [5.29998 ]TJ (d )Tj 
+ -1.09999 -1.18998 TD
+ -0.00039 Tc
+ 0.02038 Tw
+ (bottom-up, a depth-)Tj [-7.39999 ]TJ (first )Tj [-10 ]TJ (walk visits nodes in th)Tj [-10.39999 ]TJ (e )Tj [-10 ]TJ (order th)Tj [-10.39999 ]TJ (at the)Tj [-16.59999 ]TJ (y)Tj [19.59999 ]TJ ( )Tj [-10 ]TJ (wer)Tj [-7.39999 ]TJ (e)Tj [3.39999 ]TJ ( ori)Tj [-12.59999 ]TJ (g)Tj [-0.39999 ]TJ (inall)Tj [-12.59999 ]TJ (y)Tj [19.59999 ]TJ ( )Tj [-10 ]TJ (allocated.)Tj [-10.39999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0.00119 Tc
+ 0.14878 Tw
+ (This r)Tj [4.19999 ]TJ (e)Tj [5 ]TJ (sults in ope)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (a)Tj [5 ]TJ (tor)Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ ( be)Tj [5 ]TJ (ing)Tj [11.19999 ]TJ ( a)Tj [5 ]TJ (pplie)Tj [5 ]TJ (d in the)Tj [5 ]TJ ( orde)Tj [5 ]TJ (r)Tj [4.19999 ]TJ ( tha)Tj [5 ]TJ (t)Tj [-1 ]TJ ( they)Tj [21.19999 ]TJ ( )Tj [-10 ]TJ (we)Tj [5 ]TJ (re)Tj [5 ]TJ ( e)Tj [5 ]TJ (n)Tj [1.19999 ]TJ (c)Tj [5 ]TJ (o)Tj [-8.79998 ]TJ (unte)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (e)Tj [5 ]TJ (d)Tj [1.19999 ]TJ ( dur)Tj [4.19999 ]TJ (in)Tj [-8.79998 ]TJ (g )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.32049 Tw
+ (parsing)Tj [9.5 ]TJ (.)Tj [-10.5 ]TJ ( Two ve)Tj [-6.69999 ]TJ (rsions of )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 227.66169 408.51199 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 240.86059 408.51199 Tm
+ -0.00099 Tc
+ 0.32099 Tw
+ (, an )Tj 
+ 0 0 1 sc
+ 2.32998 0 TD
+ 0.00119 Tc
+ 0.32879 Tw
+ (inte)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (p)Tj [-8.79998 ]TJ (r)Tj [4.19999 ]TJ (e)Tj [5 ]TJ (tive)Tj [5 ]TJ ( ve)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (s)Tj [0.39999 ]TJ (ion)Tj 
+ ET
+ 268.81799 407.19198 97.55198 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 366.37008 408.51199 Tm
+ 0 0 0 sc
+ -0.00059 Tc
+ 0.32058 Tw
+ (, and a)Tj [-6.79998 ]TJ ( )Tj 
+ 0 0 1 sc
+ 3.84999 0 TD
+ 0.00169 Tc
+ 0.31829 Tw
+ (c)Tj [5.5 ]TJ (o)Tj [1.69999 ]TJ (mpiler)Tj [4.69999 ]TJ ( ve)Tj [5.5 ]TJ (r)Tj [4.69999 ]TJ (s)Tj [0.89999 ]TJ (ion)Tj 
+ ET
+ 412.56599 407.19198 84.83299 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 497.39918 408.51199 Tm
+ 0 0 0 sc
+ 0.00619 Tc
+ 0.31379 Tw
+ (,)Tj [6.19999 ]TJ ( ar)Tj [9.19999 ]TJ (e )Tj 
+ -33.94999 -1.17999 TD
+ -0.00028 Tc
+ 0 Tw
+ (included. )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 23 23
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 23)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 687.24879 Tm
+ -0.00009 Tc
+ 0.58689 Tw
+ (4.2 Inclu)Tj [-5.79998 ]TJ (d)Tj [1.69999 ]TJ (e )Tj [586.39999 ]TJ (Fil)Tj [-8 ]TJ (e)Tj [-0.29998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 656.17138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (typedef)Tj [-597.89999 ]TJ (enum)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (typeCon,)Tj [-597.89999 ]TJ (typeId,)Tj [-597.89999 ]TJ (typeOpr)Tj [-597.89999 ]TJ (})Tj [-597.89999 ]TJ (nodeEnum;)Tj 
+ 0 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (constants)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (typedef)Tj [-597.89999 ]TJ (struct)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeEnum)Tj [-597.89999 ]TJ (type;)Tj [-8369.69999 ]TJ (/*)Tj [-597.89999 ]TJ (type)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (value;)Tj [-10760.89999 ]TJ (/*)Tj [-597.89999 ]TJ (value)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (constant)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (conNodeType;)Tj 
+ 0 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (identifiers)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (typedef)Tj [-597.89999 ]TJ (struct)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeEnum)Tj [-597.89999 ]TJ (type;)Tj [-8369.69999 ]TJ (/*)Tj [-597.89999 ]TJ (type)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (i;)Tj [-13152.29998 ]TJ (/*)Tj [-597.89999 ]TJ (subscript)Tj [-597.89999 ]TJ (to)Tj [-597.89999 ]TJ (ident)Tj [-597.89999 ]TJ (array)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (idNodeType;)Tj 
+ 0 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (operators)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (typedef)Tj [-597.89999 ]TJ (struct)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeEnum)Tj [-597.89999 ]TJ (type;)Tj [-8369.69999 ]TJ (/*)Tj [-597.89999 ]TJ (type)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (oper;)Tj [-11358.79998 ]TJ (/*)Tj [-597.89999 ]TJ (operator)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (nops;)Tj [-11358.79998 ]TJ (/*)Tj [-597.89999 ]TJ (number)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (operands)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (union)Tj [-597.89999 ]TJ (nodeTypeTag)Tj [-597.89999 ]TJ (*op[1];)Tj [-1793.5 ]TJ (/*)Tj [-597.89999 ]TJ (operands)Tj [-597.89999 ]TJ (\(expandable\))Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (oprNodeType;)Tj 
+ 0 -2.26089 TD
+ (typedef)Tj [-597.89999 ]TJ (union)Tj [-597.89999 ]TJ (nodeTypeTag)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeEnum)Tj [-597.89999 ]TJ (type;)Tj [-8369.69999 ]TJ (/*)Tj [-597.89999 ]TJ (type)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (conNodeType)Tj [-597.89999 ]TJ (con;)Tj [-7174 ]TJ (/*)Tj [-597.89999 ]TJ (constants)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (idNodeType)Tj [-597.89999 ]TJ (id;)Tj [-8369.69999 ]TJ (/*)Tj [-597.89999 ]TJ (identifiers)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (oprNodeType)Tj [-597.89999 ]TJ (opr;)Tj [-7174 ]TJ (/*)Tj [-597.89999 ]TJ (operators)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (nodeType;)Tj 
+ 0 -2.26089 TD
+ (extern)Tj [-597.89999 ]TJ (int)Tj [-597.89999 ]TJ (sym[26];)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 24 24
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 24)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 687.24879 Tm
+ -0.00048 Tc
+ 0.58729 Tw
+ (4.3 Lex )Tj [586.39999 ]TJ (In)Tj [-6.19999 ]TJ (pu)Tj [-6.19999 ]TJ (t )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 656.17138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ (<stdlib.h>)Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ ("calc3.h")Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ ("y.tab.h")Tj 
+ T*
+ (%})Tj 
+ 0 -2.25 TD
+ (%%)Tj 
+ 0 -2.26089 TD
+ ([a-z])Tj [-4184.79998 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval.sIndex)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (*yytext)Tj [-597.69999 ]TJ (-)Tj [-597.89999 ]TJ ('a';)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (VARIABLE;)Tj 
+ -2.39129 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ -7.17399 -2.26089 TD
+ -0.00219 Tc
+ ([0-9]+)Tj [-3587 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval.iValue)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (atoi\(yytext\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (INTEGER;)Tj 
+ -2.39138 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -7.17388 -2.25 TD
+ -0.00219 Tc
+ ([-\(\)<>=+*/;{}.])Tj [-597.89999 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (*yytext;)Tj 
+ -1.79348 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -7.77178 -2.26089 TD
+ -0.00219 Tc
+ (">=")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (GE;)Tj 
+ 0 -1.13038 TD
+ ("<=")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (LE;)Tj 
+ 0 -1.11959 TD
+ ("==")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (EQ;)Tj 
+ 0 -1.13038 TD
+ ("!=")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (NE;)Tj 
+ T*
+ ("while")Tj [-5380.5 ]TJ (return)Tj [-597.89999 ]TJ (WHILE;)Tj 
+ T*
+ ("if")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (IF;)Tj 
+ T*
+ ("else")Tj [-5978.29998 ]TJ (return)Tj [-597.79998 ]TJ (ELSE;)Tj 
+ T*
+ ("print")Tj [-5380.5 ]TJ (return)Tj [-597.89999 ]TJ (PRINT;)Tj 
+ 0 -2.25 TD
+ ([)Tj [-597.89999 ]TJ (\\t\\n]+)Tj [-4782.69999 ]TJ (;)Tj [-4184.79998 ]TJ (/)Tj [0 ]TJ (*)Tj [-597.89999 ]TJ (ignore)Tj [-597.89999 ]TJ (whitespace)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -2.26089 TD
+ (.)Tj [-8967.5 ]TJ (yyerror\("Unknown)Tj [-597.89999 ]TJ (character"\);)Tj 
+ 0 -1.13038 TD
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (yywrap\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (return)Tj [-597.89999 ]TJ (1;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 25 25
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 25)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 687.24879 Tm
+ -0.00009 Tc
+ 0.58689 Tw
+ (4.4 Yacc )Tj [586.39999 ]TJ (Inp)Tj [-5.79998 ]TJ (u)Tj [1.69999 ]TJ (t )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 656.17138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ (<stdio.h>)Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ (<stdlib.h>)Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ (<stdarg.h>)Tj 
+ T*
+ (#include)Tj [-597.79998 ]TJ ("calc3.h")Tj 
+ 0 -2.25 TD
+ (/*)Tj [-597.89999 ]TJ (prototypes)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (nodeType)Tj [-597.89999 ]TJ (*opr\(int)Tj [-597.89999 ]TJ (oper,)Tj [-597.89999 ]TJ (int)Tj [-597.89999 ]TJ (nops,)Tj [-597.89999 ]TJ (...\);)Tj 
+ T*
+ (nodeType)Tj [-597.89999 ]TJ (*id\(int)Tj [-597.89999 ]TJ (i\);)Tj 
+ T*
+ (nodeType)Tj [-597.89999 ]TJ (*con\(int)Tj [-597.89999 ]TJ (value\);)Tj 
+ T*
+ (void)Tj [-597.89999 ]TJ (freeNode\(nodeType)Tj [-597.89999 ]TJ (*p\);)Tj 
+ 0 -2.25 TD
+ (void)Tj [-597.89999 ]TJ (yyerror\(char)Tj [-597.89999 ]TJ (*s\);)Tj 
+ 0 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (sym[26];)Tj [-11956.59999 ]TJ (/*)Tj [-597.89999 ]TJ (symbol)Tj [-597.89999 ]TJ (table)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (%})Tj 
+ 0 -2.26089 TD
+ (%union)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (iValue;)Tj [-10163 ]TJ (/*)Tj [-597.89999 ]TJ (integer)Tj [-597.89999 ]TJ (value)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (char)Tj [-597.89999 ]TJ (sIndex;)Tj [-9565.29998 ]TJ (/*)Tj [-597.89999 ]TJ (symbol)Tj [-597.89999 ]TJ (table)Tj [-597.89999 ]TJ (index)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (nodeType)Tj [-597.89999 ]TJ (*nPtr;)Tj [-7771.79998 ]TJ (/*)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (pointer)Tj [-597.89999 ]TJ (*/)Tj 
+ -2.39129 -1.13038 TD
+ (};)Tj 
+ 0 -2.26089 TD
+ (%token)Tj [-597.89999 ]TJ (<iValue>)Tj [-597.89999 ]TJ (INTEGER)Tj 
+ 0 -1.13038 TD
+ (%token)Tj [-597.89999 ]TJ (<sIndex>)Tj [-597.89999 ]TJ (VARIABLE)Tj 
+ 0 -1.11959 TD
+ (%token)Tj [-597.89999 ]TJ (WHILE)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (PRINT)Tj 
+ 0 -1.13038 TD
+ (%nonassoc)Tj [-597.89999 ]TJ (IFX)Tj 
+ T*
+ (%nonassoc)Tj [-597.89999 ]TJ (ELSE)Tj 
+ 0 -2.26089 TD
+ (%left)Tj [-597.89999 ]TJ (GE)Tj [-597.89999 ]TJ (LE)Tj [-597.89999 ]TJ (EQ)Tj [-597.89999 ]TJ (NE)Tj [-597.89999 ]TJ ('>')Tj [-597.89999 ]TJ ('<')Tj 
+ 0 -1.13038 TD
+ (%left)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ ('-')Tj 
+ 0 -1.11959 TD
+ (%left)Tj [-597.89999 ]TJ ('*')Tj [-597.89999 ]TJ ('/')Tj 
+ 0 -1.13038 TD
+ (%nonassoc)Tj [-597.89999 ]TJ (UMINUS)Tj 
+ 0 -2.26089 TD
+ (%type)Tj [-597.89999 ]TJ (<nPtr>)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt_list)Tj 
+ T*
+ (%%)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 26 26
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 26)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 711.00679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (program:)Tj 
+ 4.78259 -1.13038 TD
+ (function)Tj [-9565.29998 ]TJ ({)Tj [-597.89999 ]TJ (exit\(0\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.25 TD
+ -0.00219 Tc
+ (function:)Tj 
+ 5.97828 -1.13038 TD
+ (function)Tj [-597.89999 ]TJ (stmt)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ (ex\($2\);)Tj [-597.89999 ]TJ (freeNode\($2\);)Tj [-597.89999 ]TJ (})Tj 
+ -1.19569 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (/)Tj [0 ]TJ (*)Tj [-597.89999 ]TJ (NULL)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (stmt:)Tj 
+ 5.97828 -1.11959 TD
+ (';')Tj [-11358.79998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(';',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ (NULL,)Tj [-597.89999 ]TJ (NULL\);)Tj [-597.89999 ]TJ (})Tj 
+ -1.19569 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';')Tj [-8369.69999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($1;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (PRINT)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';')Tj [-4782.69999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(PRINT,)Tj [-597.89999 ]TJ (1,)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (VARIABLE)Tj [-597.89999 ]TJ ('=')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';')Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('=',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ (id\($1\),)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.79998 ]TJ (WHILE)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj 
+ 4.78259 -1.13038 TD
+ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(WHILE,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($3,)Tj [-597.89999 ]TJ ($5\);)Tj [-597.89999 ]TJ (})Tj 
+ -4.78259 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (%prec)Tj [-597.89999 ]TJ (IFX)Tj 
+ 4.78259 -1.13038 TD
+ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(IF,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($3,)Tj [-597.89999 ]TJ ($5\);)Tj [-597.89999 ]TJ (})Tj 
+ -4.78259 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ 4.78259 -1.13038 TD
+ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(IF,)Tj [-597.89999 ]TJ (3,)Tj [-597.89999 ]TJ ($3,)Tj [-597.89999 ]TJ ($5,)Tj [-597.89999 ]TJ ($7\);)Tj [-597.69999 ]TJ (})Tj 
+ -4.78259 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ ('{')Tj [-597.89999 ]TJ (stmt_list)Tj [-597.89999 ]TJ ('}')Tj [-2989.19999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($2;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.25 TD
+ -0.00219 Tc
+ (stmt_list:)Tj 
+ 5.97828 -1.13038 TD
+ (stmt)Tj [-10761 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($1;)Tj [-597.89999 ]TJ (})Tj 
+ -1.19569 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (stmt_list)Tj [-597.89999 ]TJ (stmt)Tj [-4782.69999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(';',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (expr:)Tj 
+ 5.97828 -1.11959 TD
+ (INTEGER)Tj [-8967.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (con\($1\);)Tj [-597.89999 ]TJ (})Tj 
+ -1.19569 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (VARIABLE)Tj [-8369.69999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (id\($1\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ ('-')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (%prec)Tj [-597.89999 ]TJ (UMINUS)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(UMINUS,)Tj [-597.89999 ]TJ (1,)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('+',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('-')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('-',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('*')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.69999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('*',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('/')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('/',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('<')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('<',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('>')Tj [-597.89999 ]TJ (expr)Tj [-5380.5 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\('>',)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (GE)Tj [-597.89999 ]TJ (expr)Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(GE,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (LE)Tj [-597.89999 ]TJ (expr)Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(LE,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (NE)Tj [-597.89999 ]TJ (expr)Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(NE,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (EQ)Tj [-597.89999 ]TJ (expr)Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (opr\(EQ,)Tj [-597.89999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($3\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-5978.29998 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($2;)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ -4.78259 -2.26089 TD
+ -0.00219 Tc
+ (%%)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 27 27
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 27)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 711.00679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (nodeType)Tj [-597.89999 ]TJ (*con\(int)Tj [-597.89999 ]TJ (value\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeType)Tj [-597.89999 ]TJ (*p;)Tj 
+ 0 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (allocate)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (if)Tj [-597.89999 ]TJ (\(\(p)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (malloc\(sizeof\(conNodeType\)\)\))Tj [-597.89999 ]TJ (==)Tj [-597.89999 ]TJ (NULL\))Tj 
+ 2.39129 -1.13038 TD
+ (yyerror\("out)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (memory"\);)Tj 
+ -2.39129 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (copy)Tj [-597.89999 ]TJ (information)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (p->type)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (typeCon;)Tj 
+ T*
+ (p->con.value)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (value;)Tj 
+ 0 -2.25 TD
+ (return)Tj [-597.89999 ]TJ (p;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.26089 TD
+ -0.00219 Tc
+ (nodeType)Tj [-597.89999 ]TJ (*id\(int)Tj [-597.89999 ]TJ (i\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (nodeType)Tj [-597.89999 ]TJ (*p;)Tj 
+ 0 -2.25 TD
+ (/*)Tj [-597.89999 ]TJ (allocate)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (if)Tj [-597.89999 ]TJ (\(\(p)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (malloc\(sizeof\(idNodeType\)\)\))Tj [-597.89999 ]TJ (==)Tj [-597.89999 ]TJ (NULL\))Tj 
+ 2.39129 -1.13038 TD
+ (yyerror\("out)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (memory"\);)Tj 
+ -2.39129 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (copy)Tj [-597.89999 ]TJ (information)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (p->type)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (typeId;)Tj 
+ 0 -1.11959 TD
+ (p->id.i)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (i)Tj [0 ]TJ (;)Tj 
+ 0 -2.26089 TD
+ (return)Tj [-597.89999 ]TJ (p;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.26089 TD
+ -0.00219 Tc
+ (nodeType)Tj [-597.89999 ]TJ (*opr\(int)Tj [-597.89999 ]TJ (oper,)Tj [-597.79998 ]TJ (int)Tj [-597.89999 ]TJ (nops,)Tj [-597.89999 ]TJ (...\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (va_list)Tj [-597.89999 ]TJ (ap;)Tj 
+ 0 -1.13038 TD
+ (nodeType)Tj [-597.89999 ]TJ (*p;)Tj 
+ T*
+ (size_t)Tj [-597.89999 ]TJ (size;)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (i;)Tj 
+ 0 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (allocate)Tj [-597.89999 ]TJ (node)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.11959 TD
+ (size)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (sizeof\(oprNodeType\))Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ (\(nops)Tj [-597.69999 ]TJ (-)Tj [-597.89999 ]TJ (1)Tj [0 ]TJ (\))Tj [-597.89999 ]TJ (*)Tj [-597.89999 ]TJ (sizeof\(nodeType*\);)Tj 
+ 0 -1.13038 TD
+ (if)Tj [-597.89999 ]TJ (\(\(p)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (malloc\(size\)\))Tj [-597.89999 ]TJ (==)Tj [-597.89999 ]TJ (NULL\))Tj 
+ 2.39129 -1.13038 TD
+ (yyerror\("out)Tj [-597.89999 ]TJ (of)Tj [-597.89999 ]TJ (memory"\);)Tj 
+ -2.39129 -2.26089 TD
+ (/*)Tj [-597.89999 ]TJ (copy)Tj [-597.89999 ]TJ (information)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (p->type)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (typeOpr;)Tj 
+ 0 -1.11959 TD
+ (p->opr.oper)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (oper;)Tj 
+ 0 -1.13038 TD
+ (p->opr.nops)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (nops;)Tj 
+ T*
+ (va_start\(ap,)Tj [-597.89999 ]TJ (nops\);)Tj 
+ T*
+ (for)Tj [-597.89999 ]TJ (\(i)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (0)Tj [0 ]TJ (;)Tj [-597.89999 ]TJ (i)Tj [-597.89999 ]TJ (<)Tj [-597.89999 ]TJ (nops;)Tj [-597.89999 ]TJ (i++\))Tj 
+ 2.39129 -1.13038 TD
+ (p->opr.op[i])Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (va_arg\(ap,)Tj [-597.89999 ]TJ (nodeType*\);)Tj 
+ -2.39129 -1.13038 TD
+ (va_end\(ap\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (p;)Tj 
+ -2.39129 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 28 28
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 28)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 711.00679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (void)Tj [-597.89999 ]TJ (freeNode\(nodeType)Tj [-597.89999 ]TJ (*p\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (i;)Tj 
+ 0 -2.26089 TD
+ (if)Tj [-597.89999 ]TJ (\(!p\))Tj [-597.89999 ]TJ (return;)Tj 
+ 0 -1.11959 TD
+ (if)Tj [-597.89999 ]TJ (\(p->type)Tj [-597.89999 ]TJ (==)Tj [-597.89999 ]TJ (typeOpr\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ 0.59568 Tc
+ (f)Tj [597.89999 ]TJ (o)Tj [597.89999 ]TJ (r)Tj [0 ]TJ (\()Tj [597.89999 ]TJ (i=0)Tj [597.89999 ]TJ (;i<p)Tj 
+ 10.16299 0 TD
+ -0.00219 Tc
+ (->opr.nops;)Tj [-597.89999 ]TJ (i++\))Tj 
+ -7.77169 -1.13038 TD
+ (freeNode\(p->opr.op[i]\);)Tj 
+ -4.78259 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ T*
+ -0.00219 Tc
+ (free)Tj [-597.89999 ]TJ (\(p\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.25 TD
+ -0.00219 Tc
+ (void)Tj [-597.89999 ]TJ (yyerror\(char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (fprintf\(stdout,)Tj [-597.89999 ]TJ ("%s\\n",)Tj [-597.89999 ]TJ (s\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -2.26089 TD
+ -0.00219 Tc
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (yyparse\(\);)Tj 
+ 0 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 29 29
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 29)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 687.24879 Tm
+ 0.00019 Tc
+ 0.58659 Tw
+ (4.5 Interpre)Tj [-7.59999 ]TJ (ter )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 656.17138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (#include)Tj [-597.89999 ]TJ (<stdio.h>)Tj 
+ 0 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ ("calc3.h")Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ ("y.tab.h")Tj 
+ 0 -2.26089 TD
+ (int)Tj [-597.89999 ]TJ (ex\(nodeType)Tj [-597.89999 ]TJ (*p\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (if)Tj [-597.89999 ]TJ (\(!p\))Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ 0 -1.13038 TD
+ (switch\(p->type\))Tj [-597.89999 ]TJ ({)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (typeCon:)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (p->con.value;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (typeId:)Tj [-2989.19999 ]TJ (return)Tj [-597.89999 ]TJ (sym[p->id.i];)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (typeOpr:)Tj 
+ 2.39129 -1.13038 TD
+ (switch\(p->opr.oper\))Tj [-597.89999 ]TJ ({)Tj 
+ 0 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ (WHILE:)Tj [-1195.69999 ]TJ (while\(ex\(p->opr.op[0]\)\))Tj 
+ 10.16308 -1.13038 TD
+ (ex\(p->opr.op[1]\);)Tj 
+ -2.39129 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -7.77178 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (IF:)Tj [-2989.19999 ]TJ (if)Tj [-597.89999 ]TJ (\(ex\(p->opr.op[0]\)\))Tj 
+ 10.16308 -1.13038 TD
+ (ex\(p->opr.op[1]\);)Tj 
+ -2.39129 -1.13038 TD
+ (else)Tj [-597.89999 ]TJ (if)Tj [-597.69999 ]TJ (\(p->opr.nops)Tj [-597.89999 ]TJ (>)Tj [-597.89999 ]TJ (2)Tj [0 ]TJ (\))Tj 
+ 2.39129 -1.11959 TD
+ (ex\(p->opr.op[2]\);)Tj 
+ -2.39129 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -7.77178 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (PRINT:)Tj [-1195.69999 ]TJ (printf\("%d\\n",)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\)\);)Tj 
+ 7.77178 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ -7.77178 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (';':)Tj [-2391.39999 ]TJ (ex\(p->opr.op[0]\);)Tj 
+ 7.77178 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ -7.77178 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ ('=':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (sym[p->opr.op[0]->id.i])Tj [-597.89999 ]TJ (=)Tj 
+ 10.16308 -1.11959 TD
+ (ex\(p->opr.op[1]\);)Tj 
+ -10.16308 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (UMINUS:)Tj [-597.89999 ]TJ (return)Tj [-597.69999 ]TJ (-ex\(p->opr.op[0]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('+':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('-':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.79998 ]TJ (-)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('*':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (*)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('/':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (/)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ 0 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ ('<':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (<)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ 0 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ ('>':)Tj [-2391.39999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (>)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (GE:)Tj [-2989.19999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (>=)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (LE:)Tj [-2989.19999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (<=)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (NE:)Tj [-2989.19999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (!=)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (EQ:)Tj [-2989.19999 ]TJ (return)Tj [-597.89999 ]TJ (ex\(p->opr.op[0]\))Tj [-597.89999 ]TJ (==)Tj [-597.89999 ]TJ (ex\(p->opr.op[1]\);)Tj 
+ 0 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ -2.39129 -1.13038 TD
+ (})Tj 
+ -2.39129 -1.13038 TD
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 30 30
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 30)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 687.24879 Tm
+ 0.00028 Tc
+ 0.58648 Tw
+ (4.6 Com)Tj [-5.29998 ]TJ (p)Tj [2.09999 ]TJ (iler )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 656.17138 Tm
+ -0.00219 Tc
+ 0 Tw
+ (#include)Tj [-597.89999 ]TJ (<stdio.h>)Tj 
+ 0 -1.13038 TD
+ (#include)Tj [-597.89999 ]TJ ("calc3.h")Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ ("y.tab.h")Tj 
+ 0 -2.26089 TD
+ (static)Tj [-597.89999 ]TJ (int)Tj [-597.89999 ]TJ (lbl;)Tj 
+ 0 -2.25 TD
+ (int)Tj [-597.89999 ]TJ (ex\(nodeType)Tj [-597.89999 ]TJ (*p\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (lbl1,)Tj [-597.89999 ]TJ (lbl2;)Tj 
+ 0 -2.26089 TD
+ (if)Tj [-597.89999 ]TJ (\(!p\))Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (0;)Tj 
+ 0 -1.13038 TD
+ (switch\(p->type\))Tj [-597.89999 ]TJ ({)Tj 
+ 0 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ (typeCon:)Tj 
+ 2.39129 -1.13038 TD
+ (printf\("\\tpush\\t%d\\n",)Tj [-597.89999 ]TJ (p->con.value\);)Tj 
+ T*
+ (break;)Tj 
+ -2.39129 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (typeId:)Tj 
+ 2.39129 -1.13038 TD
+ (printf\("\\tpush\\t%c\\n",)Tj [-597.89999 ]TJ (p->id.i)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ('a'\);)Tj 
+ T*
+ (break;)Tj 
+ -2.39129 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ (typeOpr:)Tj 
+ 2.39129 -1.13038 TD
+ (switch\(p->opr.oper\))Tj [-597.89999 ]TJ ({)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (WHILE:)Tj 
+ 2.39129 -1.13038 TD
+ (printf\("L%03d:\\n",)Tj [-597.89999 ]TJ (lbl1)Tj [-597.89999 ]TJ (=)Tj [-597.79998 ]TJ (lbl++\);)Tj 
+ T*
+ (ex\(p->opr.op[0]\);)Tj 
+ T*
+ (printf\("\\tjz\\tL%03d\\n",)Tj [-597.89999 ]TJ (lbl2)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (lbl++\);)Tj 
+ T*
+ (ex\(p->opr.op[1]\);)Tj 
+ 0 -1.11959 TD
+ (printf\("\\tjmp\\tL%03d\\n",)Tj [-597.89999 ]TJ (lbl1\);)Tj 
+ 0 -1.13038 TD
+ (printf\("L%03d:\\n",)Tj [-597.89999 ]TJ (lbl2\);)Tj 
+ T*
+ (break;)Tj 
+ -2.39129 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (IF:)Tj 
+ 2.39129 -1.13038 TD
+ (ex\(p->opr.op[0]\);)Tj 
+ T*
+ (if)Tj [-597.89999 ]TJ (\(p->opr.nops)Tj [-597.89999 ]TJ (>)Tj [-597.89999 ]TJ (2)Tj [0 ]TJ (\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (/*)Tj [-597.89999 ]TJ (if)Tj [-597.89999 ]TJ (else)Tj [-597.89999 ]TJ (*/)Tj 
+ 0 -1.13038 TD
+ (printf\("\\tjz\\tL%03d\\n",)Tj [-597.89999 ]TJ (lbl1)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (lbl++\);)Tj 
+ T*
+ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (printf\("\\tjmp\\tL%03d\\n",)Tj [-597.89999 ]TJ (lbl2)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (lbl++\);)Tj 
+ T*
+ (printf\("L%03d:\\n",)Tj [-597.79998 ]TJ (lbl1\);)Tj 
+ T*
+ (ex\(p->opr.op[2]\);)Tj 
+ 0 -1.11959 TD
+ (printf\("L%03d:\\n",)Tj [-597.89999 ]TJ (lbl2\);)Tj 
+ -2.39129 -1.13038 TD
+ (})Tj [-597.89999 ]TJ (else)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (/*)Tj [-597.89999 ]TJ (if)Tj [-597.89999 ]TJ (*/)Tj 
+ T*
+ (printf\("\\tjz\\tL%03d\\n",)Tj [-597.89999 ]TJ (lbl1)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (lbl++\);)Tj 
+ T*
+ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (printf\("L%03d:\\n",)Tj [-597.89999 ]TJ (lbl1\);)Tj 
+ -2.39129 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ 0 -1.13038 TD
+ -0.00219 Tc
+ (break;)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 31 31
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 31)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 142.82908 711.00679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (case)Tj [-597.89999 ]TJ (PRINT:)Tj 
+ 2.39129 -1.13038 TD
+ (ex\(p->opr.op[0]\);)Tj 
+ T*
+ (printf\("\\tprint\\n"\);)Tj 
+ T*
+ (break;)Tj 
+ -2.39129 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ ('=':)Tj 
+ 2.39129 -1.13038 TD
+ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (printf\("\\tpop\\t%c\\n",)Tj [-597.89999 ]TJ (p->opr.op[0]->id.i)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ('a'\);)Tj 
+ T*
+ (break;)Tj 
+ -2.39129 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (UMINUS:)Tj 
+ 2.39129 -1.13038 TD
+ (ex\(p->opr.op[0]\);)Tj 
+ 0 -1.11959 TD
+ (printf\("\\tneg\\n"\);)Tj 
+ 0 -1.13038 TD
+ (break;)Tj 
+ -2.39129 -1.13038 TD
+ (default:)Tj 
+ 2.39129 -1.13038 TD
+ (ex\(p->opr.op[0]\);)Tj 
+ T*
+ (ex\(p->opr.op[1]\);)Tj 
+ T*
+ (switch\(p->opr.oper\))Tj [-597.89999 ]TJ ({)Tj 
+ 0 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ ('+':)Tj [-1793.5 ]TJ (printf\("\\tadd\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ 0 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ ('-':)Tj [-1793.5 ]TJ (printf\("\\tsub\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('*':)Tj [-1793.5 ]TJ (printf\("\\tmul\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('/':)Tj [-1793.5 ]TJ (printf\("\\tdiv\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('<':)Tj [-1793.5 ]TJ (printf\("\\tcompLT\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ ('>':)Tj [-1793.5 ]TJ (printf\("\\tcompGT\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (GE:)Tj [-2391.39999 ]TJ (printf\("\\tcompGE\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ 0 -1.11959 TD
+ (case)Tj [-597.89999 ]TJ (LE:)Tj [-2391.39999 ]TJ (printf\("\\tcompLE\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ 0 -1.13038 TD
+ (case)Tj [-597.89999 ]TJ (NE:)Tj [-2391.39999 ]TJ (printf\("\\tcompNE\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ (case)Tj [-597.89999 ]TJ (EQ:)Tj [-2391.39999 ]TJ (printf\("\\tcompEQ\\n"\);)Tj [-597.89999 ]TJ (break;)Tj 
+ T*
+ 0 Tc
+ (})Tj 
+ -2.39129 -1.13038 TD
+ (})Tj 
+ -2.39129 -1.13038 TD
+ (})Tj 
+ -2.39129 -1.11959 TD
+ (})Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 32 32
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 32)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ -0.00119 Tc
+ 0.48999 Tw
+ (5. Mo)Tj [-3.69999 ]TJ (re )Tj [486.59999 ]TJ (L)Tj [-3.69999 ]TJ (ex )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ 15.95869 0 0 15.95869 90.03318 659.05108 Tm
+ 0 Tc
+ 0.58679 Tw
+ (5.1 Strings )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 638.65278 Tm
+ 0.00138 Tc
+ 0.03858 Tw
+ (Quote)Tj [5.19999 ]TJ (d)Tj [1.39999 ]TJ ( str)Tj [4.39999 ]TJ (i)Tj [-0.79998 ]TJ (ng)Tj [11.39999 ]TJ (s fr)Tj [4.39999 ]TJ (e)Tj [5.19999 ]TJ (que)Tj [5.19999 ]TJ (ntl)Tj [-10.79998 ]TJ (y)Tj [21.39999 ]TJ ( )Tj [-10 ]TJ (a)Tj [5.19999 ]TJ (p)Tj [1.39999 ]TJ (p)Tj [-8.59999 ]TJ (e)Tj [5.19999 ]TJ (a)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ ( in pr)Tj [4.39999 ]TJ (o)Tj [-8.59999 ]TJ (g)Tj [1.39999 ]TJ (r)Tj [4.39999 ]TJ (a)Tj [5.19999 ]TJ (mming)Tj [11.39999 ]TJ ( la)Tj [5.19999 ]TJ (n)Tj [-8.59999 ]TJ (g)Tj [11.39999 ]TJ (u)Tj [-8.59999 ]TJ (a)Tj [-4.79998 ]TJ (g)Tj [11.39999 ]TJ (e)Tj [5.19999 ]TJ (s. Her)Tj [4.39999 ]TJ (e)Tj [5.19999 ]TJ ( is one wa)Tj [-14.79998 ]TJ (y)Tj [31.39999 ]TJ ( to ma)Tj [5.19999 ]TJ (t)Tj [-10.79998 ]TJ (c)Tj [5.19999 ]TJ (h a )Tj 
+ 0 -1.14999 TD
+ 0.00019 Tc
+ -0.00019 Tw
+ (string)Tj [10.19999 ]TJ ( in lex)Tj [-9.79998 ]TJ (:)Tj [-1.89999 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 599.05609 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 2.39129 -1.13038 TD
+ (char)Tj [-597.89999 ]TJ (*yylval;)Tj 
+ T*
+ (#include)Tj [-597.89999 ]TJ (<string.h>)Tj 
+ -2.39129 -1.13038 TD
+ (%})Tj 
+ T*
+ (%%)Tj 
+ 0 -1.11959 TD
+ (\\"[^"\\n]*["\\n])Tj [-597.89999 ]TJ ({)Tj 
+ 6.57609 -1.13038 TD
+ (yylval)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (strdup\(yytext+1\);)Tj 
+ T*
+ (if)Tj [-597.89999 ]TJ (\(yylval[yyleng-2])Tj [-597.89999 ]TJ (!=)Tj [-597.89999 ]TJ ('"'\))Tj 
+ 2.39129 -1.13038 TD
+ (warning\("improperly)Tj [-597.89999 ]TJ (terminated)Tj [-597.89999 ]TJ (string"\);)Tj 
+ -2.39129 -1.13038 TD
+ (else)Tj 
+ 2.39129 -1.13038 TD
+ (yylval[yyleng-2])Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (0)Tj [0 ]TJ (;)Tj 
+ -2.39129 -1.13038 TD
+ (printf\("found)Tj [-597.89999 ]TJ ('%s'\\n",)Tj [-597.89999 ]TJ (yylval\);)Tj 
+ -2.55439 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 435.26969 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00099 Tc
+ 0.33099 Tw
+ (The above ex)Tj [-11 ]TJ (ample en)Tj [-11 ]TJ (sures that string)Tj [9 ]TJ (s don\222t)Tj [-13.19999 ]TJ ( cross line boundaries,)Tj [-11 ]TJ ( and removes)Tj [-11.79998 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00059 Tc
+ 0.18058 Tw
+ (enclosing quotes. )Tj [-10 ]TJ (I)Tj [12.39999 ]TJ (f)Tj [-7.59999 ]TJ ( w)Tj [-8.39999 ]TJ (e)Tj [-6.79998 ]TJ ( wish to add)Tj [-10.59999 ]TJ ( esc)Tj [-6.79998 ]TJ (a)Tj [3.19999 ]TJ (pe s)Tj [-11.39999 ]TJ (e)Tj [-6.79998 ]TJ (quences, su)Tj [-10.59999 ]TJ (ch )Tj [-10 ]TJ (as )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 414.48609 407.43209 Tm
+ -0.00219 Tc
+ 0 Tw
+ (\\n)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 427.68499 407.43209 Tm
+ 0 Tc
+ 0.17999 Tw
+ ( or)Tj [-7 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 448.08329 407.43209 Tm
+ -0.00219 Tc
+ 0 Tw
+ (\\")Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 461.28219 407.43209 Tm
+ -0.00119 Tc
+ 0.18119 Tw
+ (, st)Tj [-3.39999 ]TJ (art)Tj [-3.39999 ]TJ ( st)Tj [-3.39999 ]TJ (at)Tj [-13.39999 ]TJ (es )Tj 
+ -30.93998 -1.18998 TD
+ 0.00228 Tc
+ -0.00228 Tw
+ (simplify)Tj [32.29998 ]TJ ( m)Tj [-9.89999 ]TJ (a)Tj [6.09999 ]TJ (tte)Tj [6.09999 ]TJ (r)Tj [5.29998 ]TJ (s)Tj [1.5 ]TJ (: )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.42959 367.35539 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 0 -1.13038 TD
+ (char)Tj [-597.89999 ]TJ (buf[100];)Tj 
+ T*
+ (char)Tj [-597.89999 ]TJ (*s;)Tj 
+ T*
+ (%})Tj 
+ 0 -1.11959 TD
+ (%x)Tj [-597.89999 ]TJ (STRING)Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ T*
+ (\\")Tj [-8369.69999 ]TJ ({)Tj [-597.89999 ]TJ (BEGIN)Tj [-597.89999 ]TJ (STRING)Tj 
+ 17.93489 0 TD
+ (;)Tj [-597.89999 ]TJ (s)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (buf;)Tj [-597.89999 ]TJ (})Tj 
+ -17.93489 -1.13038 TD
+ (<STRING>\\\\n)Tj [-2989.19999 ]TJ ({)Tj [-597.89999 ]TJ (*s++)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ('\\n';)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.11959 TD
+ (<STRING>\\\\t)Tj [-2989.19999 ]TJ ({)Tj [-597.89999 ]TJ (*s++)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ('\\t';)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (<STRING>\\\\\\")Tj [-2391.39999 ]TJ ({)Tj [-597.89999 ]TJ (*s++)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ('\\"';)Tj [-597.89999 ]TJ (})Tj 
+ T*
+ (<STRING>\\")Tj [-3587 ]TJ ({)Tj 
+ 10.76098 -1.13038 TD
+ 0.59568 Tc
+ (*)Tj [597.89999 ]TJ (s=0)Tj [597.89999 ]TJ (;)Tj 
+ T*
+ -0.00219 Tc
+ (BEGIN)Tj [-597.89999 ]TJ (0;)Tj 
+ T*
+ (printf\("found)Tj [-597.89999 ]TJ ('%s'\\n",)Tj [-597.89999 ]TJ (buf\);)Tj 
+ -1.19558 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -9.56529 -1.11959 TD
+ -0.00219 Tc
+ (<STRING>\\n)Tj [-3587 ]TJ ({)Tj [-597.89999 ]TJ (printf\("invalid)Tj [-597.89999 ]TJ (string"\);)Tj [-597.89999 ]TJ (exit\(1\);)Tj [-597.89999 ]TJ (})Tj 
+ 0 -1.13038 TD
+ (<STRING>.)Tj [-4184.79998 ]TJ ({)Tj [-597.89999 ]TJ (*s++)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (*yytext;)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 128.81529 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00189 Tc
+ 0.24189 Tw
+ (Ex)Tj [-11.89999 ]TJ (cl)Tj [-4.09999 ]TJ (usi)Tj [-4.09999 ]TJ (v)Tj [-1.89999 ]TJ (e st)Tj [-4.09999 ]TJ (art)Tj [-4.09999 ]TJ ( st)Tj [-4.09999 ]TJ (at)Tj [-4.09999 ]TJ (e )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 197.66419 114.77648 Tm
+ -0.00219 Tc
+ 0 Tw
+ (STRING)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 237.26089 114.77648 Tm
+ -0.00028 Tc
+ 0.24029 Tw
+ ( is defined in the)Tj [-6.5 ]TJ ( definition section. W)Tj [-6.5 ]TJ (h)Tj [-0.29998 ]TJ (en the sc)Tj [-6.5 ]TJ (anne)Tj [-6.5 ]TJ (r)Tj [-7.29998 ]TJ ( )Tj 
+ -12.26998 -1.20999 TD
+ -0.00099 Tc
+ 0.20098 Tw
+ (detects a quote, the )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 194.42449 100.25769 Tm
+ -0.00219 Tc
+ 0 Tw
+ (BE)Tj [-10.89999 ]TJ (GIN)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 227.54168 100.25769 Tm
+ 0.00138 Tc
+ 0.19859 Tw
+ ( ma)Tj [5.19999 ]TJ (c)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ (o shif)Tj [4.39999 ]TJ (ts le)Tj [5.19999 ]TJ (x)Tj [-8.59999 ]TJ ( in)Tj [11.39999 ]TJ (to the)Tj [5.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 363.85029 100.25769 Tm
+ -0.00219 Tc
+ 0 Tw
+ (STRING)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 403.44699 100.25769 Tm
+ 0.00048 Tc
+ 0.19949 Tw
+ ( state. )Tj [-10 ]TJ (L)Tj [21.29998 ]TJ (e)Tj [-5.69999 ]TJ (x)Tj [-9.5 ]TJ ( sta)Tj [-5.69999 ]TJ (y)Tj [30.5 ]TJ (s in the)Tj [-5.69999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 85.73889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (STRING)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 129.62989 85.73889 Tm
+ 0.00138 Tc
+ 0.03858 Tw
+ ( sta)Tj [5.19999 ]TJ (t)Tj [-0.79998 ]TJ (e)Tj [5.19999 ]TJ (,)Tj [1.39999 ]TJ ( re)Tj [5.19999 ]TJ (c)Tj [5.19999 ]TJ (o)Tj [-8.59999 ]TJ (g)Tj [11.39999 ]TJ (n)Tj [1.39999 ]TJ (izing)Tj [11.39999 ]TJ ( onl)Tj [-20.79998 ]TJ (y)Tj [21.39999 ]TJ ( p)Tj [-8.59999 ]TJ (a)Tj [5.19999 ]TJ (tte)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ (n)Tj [1.39999 ]TJ (s tha)Tj [5.19999 ]TJ (t)Tj [-0.79998 ]TJ ( b)Tj [-8.59999 ]TJ (e)Tj [-4.79998 ]TJ (g)Tj [11.39999 ]TJ (i)Tj [-10.79998 ]TJ (n with )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 364.69029 85.73889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (<STRING>)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 417.48588 85.73889 Tm
+ 0.00079 Tc
+ 0.03919 Tw
+ (, until a)Tj [4.59999 ]TJ (nothe)Tj [4.59999 ]TJ (r)Tj [3.79998 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 488.87989 85.73889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (BEGIN)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 521.99708 85.73889 Tm
+ 0 Tc
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 33 33
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 33)Tj 
+ 0 55.84999 TD
+ -0.00068 Tc
+ 0.12069 Tw
+ (is ex)Tj [-10.69999 ]TJ (ecuted. Thus, we have a mini-environment )Tj [-10 ]TJ (for scannin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ ( strin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ (s. W)Tj [-6.89999 ]TJ (h)Tj [-0.69999 ]TJ (en the trailing )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (quote is reco)Tj [-10.5 ]TJ (g)Tj [9.5 ]TJ (n)Tj [-0.5 ]TJ (iz)Tj [-6.69999 ]TJ (ed, we s)Tj [-11.29998 ]TJ (w)Tj [1.69999 ]TJ (itch back to state 0, the )Tj [-10 ]TJ (initial state. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 659.65109 Tm
+ 0.00009 Tc
+ 0.58668 Tw
+ (5.2 Reser)Tj [-16.79998 ]TJ (v)Tj [14.89999 ]TJ (e)Tj [-0.09999 ]TJ (d )Tj [586.39999 ]TJ (W)Tj [-10.89999 ]TJ (o)Tj [1.89999 ]TJ (rd)Tj [-5.59999 ]TJ (s )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 639.25268 Tm
+ 0.00119 Tc
+ 0.09878 Tw
+ (I)Tj [14.19999 ]TJ (f)Tj [4.19999 ]TJ ( )Tj [-20 ]TJ (y)Tj [21.19999 ]TJ (our)Tj [4.19999 ]TJ ( pr)Tj [4.19999 ]TJ (o)Tj [-8.79998 ]TJ (g)Tj [1.19999 ]TJ (r)Tj [4.19999 ]TJ (a)Tj [5 ]TJ (m ha)Tj [5 ]TJ (s a)Tj [5 ]TJ ( la)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (g)Tj [1.19999 ]TJ (e)Tj [5 ]TJ ( c)Tj [5 ]TJ (o)Tj [1.19999 ]TJ (lle)Tj [5 ]TJ (c)Tj [5 ]TJ (tion of)Tj [4.19999 ]TJ ( r)Tj [4.19999 ]TJ (e)Tj [5 ]TJ (se)Tj [5 ]TJ (r)Tj [4.19999 ]TJ (v)Tj [-8.79998 ]TJ (ed wor)Tj [4.19999 ]TJ (d)Tj [1.19999 ]TJ (s,  it)Tj [9 ]TJ ( is)Tj [10.39999 ]TJ ( mor)Tj [4.19999 ]TJ (e)Tj [5 ]TJ ( e)Tj [5 ]TJ (f)Tj [4.19999 ]TJ (f)Tj [4.19999 ]TJ (i)Tj [-1 ]TJ (c)Tj [5 ]TJ (i)Tj [-1 ]TJ (e)Tj [5 ]TJ (n)Tj [1.19999 ]TJ (t to le)Tj [5 ]TJ (t le)Tj [15 ]TJ (x )Tj 
+ T*
+ 0.00138 Tc
+ 0.22859 Tw
+ (simpl)Tj [-10.79998 ]TJ (y)Tj [21.39999 ]TJ ( ma)Tj [5.19999 ]TJ (tc)Tj [5.19999 ]TJ (h )Tj [-10 ]TJ (a)Tj [5.19999 ]TJ ( str)Tj [4.39999 ]TJ (i)Tj [-0.79998 ]TJ (n)Tj [-8.59999 ]TJ (g)Tj [11.39999 ]TJ (, )Tj [-10 ]TJ (a)Tj [5.19999 ]TJ (nd de)Tj [5.19999 ]TJ (ter)Tj [4.39999 ]TJ (mine)Tj [5.19999 ]TJ ( in )Tj [-20 ]TJ (y)Tj [21.39999 ]TJ (o)Tj [1.39999 ]TJ (u)Tj [-8.59999 ]TJ (r)Tj [4.39999 ]TJ ( )Tj [-10 ]TJ (own c)Tj [5.19999 ]TJ (ode whe)Tj [5.19999 ]TJ (t)Tj [-0.79998 ]TJ (h)Tj [-8.59999 ]TJ (e)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ ( it is)Tj [-9.39999 ]TJ ( a)Tj [5.19999 ]TJ ( v)Tj [-8.59999 ]TJ (a)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ (i)Tj [-0.79998 ]TJ (a)Tj [5.19999 ]TJ (b)Tj [1.39999 ]TJ (le or )Tj 
+ T*
+ -0.00119 Tc
+ 0.00119 Tw
+ (reserv)Tj [-11.19999 ]TJ (ed word. )Tj [-10 ]TJ (F)Tj [4.89999 ]TJ (o)Tj [-1.19999 ]TJ (r )Tj [-10 ]TJ (ex)Tj [-11.19999 ]TJ (ample, instead of codin)Tj [-11.19999 ]TJ (g)Tj [8.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 587.17709 Tm
+ -0.00219 Tc
+ 0 Tw
+ ("if")Tj [-7174 ]TJ (return)Tj [-597.89999 ]TJ (IF;)Tj 
+ 0 -1.13038 TD
+ ("then")Tj [-5978.29998 ]TJ (return)Tj [-597.89999 ]TJ (THEN;)Tj 
+ T*
+ ("else")Tj [-5978.29998 ]TJ (return)Tj [-597.89999 ]TJ (ELSE;)Tj 
+ 0 -2.25 TD
+ ({letter}\({letter}|{digit}\)*)Tj [-1195.69999 ]TJ ({)Tj 
+ 5.38049 -1.13038 TD
+ (yylval.id)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (symLookup\(yytext\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (IDENTIFIER;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 485.66558 Tm
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00279 Tc
+ (where )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 123.27038 471.62669 Tm
+ -0.00219 Tc
+ (symLookup)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 182.66549 471.62669 Tm
+ 0.00138 Tc
+ 0.08859 Tw
+ ( r)Tj [4.39999 ]TJ (e)Tj [5.19999 ]TJ (turns a)Tj [5.19999 ]TJ (n)Tj [1.39999 ]TJ ( inde)Tj [5.19999 ]TJ (x into)Tj [11.39999 ]TJ ( the)Tj [5.19999 ]TJ ( s)Tj [-9.39999 ]TJ (y)Tj [31.39999 ]TJ (m)Tj [-10.79998 ]TJ (bol ta)Tj [5.19999 ]TJ (ble)Tj [5.19999 ]TJ (,)Tj [1.39999 ]TJ ( it)Tj [9.19999 ]TJ ( is be)Tj [5.19999 ]TJ (tte)Tj [5.19999 ]TJ (r)Tj [4.39999 ]TJ ( to)Tj [11.39999 ]TJ ( )Tj [10 ]TJ (de)Tj [5.19999 ]TJ (te)Tj [5.19999 ]TJ (c)Tj [5.19999 ]TJ (t)Tj [-0.79998 ]TJ ( r)Tj [4.39999 ]TJ (e)Tj [5.19999 ]TJ (ser)Tj [4.39999 ]TJ (v)Tj [1.39999 ]TJ (e)Tj [5.19999 ]TJ (d)Tj [-8.59999 ]TJ ( )Tj 
+ -7.71998 -1.18998 TD
+ 0.00088 Tc
+ -0.00088 Tw
+ (wor)Tj [3.89999 ]TJ (d)Tj [0.89999 ]TJ (s a)Tj [4.69999 ]TJ (nd ide)Tj [4.69999 ]TJ (n)Tj [0.89999 ]TJ (tif)Tj [3.89999 ]TJ (ie)Tj [4.69999 ]TJ (r)Tj [3.89999 ]TJ (s)Tj [0.09999 ]TJ ( sim)Tj [-11.29998 ]TJ (u)Tj [0.89999 ]TJ (lta)Tj [4.69999 ]TJ (ne)Tj [4.69999 ]TJ (ousl)Tj [-11.29998 ]TJ (y)Tj [20.89999 ]TJ (, a)Tj [4.69999 ]TJ (s)Tj [0.09999 ]TJ ( )Tj [-10 ]TJ (f)Tj [3.89999 ]TJ (o)Tj [0.89999 ]TJ (llows: )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 432.86988 Tm
+ -0.00219 Tc
+ 0 Tw
+ ({letter}\({letter}|{digit}\)*)Tj [-1195.69999 ]TJ ({)Tj 
+ 5.38049 -1.11959 TD
+ (int)Tj [-597.89999 ]TJ (i;)Tj 
+ 0 -2.26089 TD
+ (if)Tj [-597.89999 ]TJ (\(\(i)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (resWord\(yytext\)\))Tj [-597.89999 ]TJ (!=)Tj [-597.89999 ]TJ (0\))Tj 
+ 2.39129 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (\(i\);)Tj 
+ -2.39129 -1.13038 TD
+ (yylval.id)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (symLookup\(yytext\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (\(IDENTIFIER\);)Tj 
+ -2.39129 -1.11959 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 331.47839 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.05049 Tw
+ (This technique sig)Tj [9.5 ]TJ (n)Tj [-0.5 ]TJ (ific)Tj [-6.69999 ]TJ (an)Tj [-10.5 ]TJ (tl)Tj [-12.69999 ]TJ (y)Tj [19.5 ]TJ ( redu)Tj [-10.5 ]TJ (ces the number o)Tj [-10.5 ]TJ (f)Tj [2.5 ]TJ ( states requir)Tj [-7.5 ]TJ (e)Tj [3.29998 ]TJ (d, and r)Tj [-7.5 ]TJ (e)Tj [3.29998 ]TJ (sults in smaller )Tj 
+ T*
+ -0.00119 Tc
+ 0.00119 Tw
+ (scanner t)Tj [-13.39999 ]TJ (a)Tj [2.59999 ]TJ (bles. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 268.12368 Tm
+ -0.00099 Tc
+ 0.58779 Tw
+ (5.3 Debu)Tj [-6.69999 ]TJ (ggi)Tj [-8.89999 ]TJ (ng )Tj [578.89999 ]TJ (Lex)Tj [-8.69999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 247.60539 Tm
+ 0.00158 Tc
+ 0.02839 Tw
+ (L)Tj [12.39999 ]TJ (e)Tj [5.39999 ]TJ (x)Tj [-8.39999 ]TJ ( ha)Tj [5.39999 ]TJ (s fa)Tj [5.39999 ]TJ (c)Tj [5.39999 ]TJ (ilitie)Tj [5.39999 ]TJ (s tha)Tj [5.39999 ]TJ (t)Tj [-0.59999 ]TJ ( e)Tj [5.39999 ]TJ (n)Tj [-8.39999 ]TJ (a)Tj [5.39999 ]TJ (b)Tj [1.59999 ]TJ (le)Tj [5.39999 ]TJ ( de)Tj [5.39999 ]TJ (bu)Tj [-8.39999 ]TJ (gg)Tj [11.59999 ]TJ (in)Tj [-8.39999 ]TJ (g)Tj [11.59999 ]TJ (.)Tj [1.59999 ]TJ ( This fe)Tj [5.39999 ]TJ (atur)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ ( ma)Tj [-14.59999 ]TJ (y)Tj [21.59999 ]TJ ( var)Tj [-15.39999 ]TJ (y)Tj [21.59999 ]TJ ( with dif)Tj [4.59999 ]TJ (f)Tj [4.59999 ]TJ (e)Tj [-4.59999 ]TJ (re)Tj [5.39999 ]TJ (nt ve)Tj [5.39999 ]TJ (r)Tj [4.59999 ]TJ (s)Tj [0.79998 ]TJ (ions of)Tj [4.59999 ]TJ ( )Tj 
+ T*
+ -0.00009 Tc
+ 0.10009 Tw
+ (lex)Tj [-10.09999 ]TJ (,)Tj [-0.09999 ]TJ ( so )Tj [-10 ]TJ (y)Tj [19.89999 ]TJ (ou should )Tj [-10 ]TJ (cons)Tj [-10.89999 ]TJ (ult documentation for)Tj [-7.09999 ]TJ ( de)Tj [-6.29998 ]TJ (tails. The cod)Tj [-10.09999 ]TJ (e)Tj [3.69999 ]TJ ( )Tj [-10 ]TJ (g)Tj [9.89999 ]TJ (e)Tj [3.69999 ]TJ (n)Tj [-10.09999 ]TJ (e)Tj [3.69999 ]TJ (r)Tj [-7.09999 ]TJ (a)Tj [3.69999 ]TJ (te)Tj [-6.29998 ]TJ (d b)Tj [-10.09999 ]TJ (y)Tj [19.89999 ]TJ ( )Tj [-10 ]TJ (lex)Tj [-10.09999 ]TJ ( in file )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 219.76768 Tm
+ -0.00219 Tc
+ 0 Tw
+ (lex.yy.c)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 142.82879 219.76768 Tm
+ -0.00178 Tc
+ 0.09179 Tw
+ ( i)Tj [-4 ]TJ (n)Tj [-1.79998 ]TJ (cl)Tj [-4 ]TJ (udes deb)Tj [-11.79998 ]TJ (ugg)Tj [8.19999 ]TJ (i)Tj [-4 ]TJ (n)Tj [-11.79998 ]TJ (g)Tj [8.19999 ]TJ ( st)Tj [-4 ]TJ (at)Tj [-4 ]TJ (em)Tj [-4 ]TJ (ent)Tj [-4 ]TJ (s)Tj [-2.59999 ]TJ ( t)Tj [-4 ]TJ (h)Tj [-1.79998 ]TJ (at)Tj [-4 ]TJ ( a)Tj [-8 ]TJ (r)Tj [1.19999 ]TJ (e enabl)Tj [-14 ]TJ (e)Tj [2 ]TJ (d b)Tj [-21.79998 ]TJ (y)Tj [28.19999 ]TJ ( sp)Tj [-11.79998 ]TJ (eci)Tj [-4 ]TJ (f)Tj [-18.79998 ]TJ (y)Tj [18.19999 ]TJ (i)Tj [-4 ]TJ (n)Tj [-11.79998 ]TJ (g com)Tj [-4 ]TJ (m)Tj [-4 ]TJ (a)Tj [2 ]TJ (nd-l)Tj [-4 ]TJ (i)Tj [-4 ]TJ (n)Tj [-1.79998 ]TJ (e )Tj 
+ -4.39999 -1.19999 TD
+ 0.00059 Tc
+ 0.21939 Tw
+ (option \223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 131.66969 205.36889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (-d)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 144.86859 205.36889 Tm
+ 0.00068 Tc
+ 0.21929 Tw
+ (\224)Tj [4.5 ]TJ (.)Tj [0.69999 ]TJ ( De)Tj [4.5 ]TJ (bu)Tj [-9.29998 ]TJ (g)Tj [10.69999 ]TJ ( out)Tj [-11.5 ]TJ (put may)Tj [20.69999 ]TJ ( be)Tj [4.5 ]TJ ( to)Tj [-9.29998 ]TJ (gg)Tj [10.69999 ]TJ (le)Tj [4.5 ]TJ (d on)Tj [-9.29998 ]TJ ( a)Tj [4.5 ]TJ (nd of)Tj [3.69999 ]TJ (f)Tj [3.69999 ]TJ ( b)Tj [-19.29998 ]TJ (y)Tj [20.69999 ]TJ ( se)Tj [4.5 ]TJ (ttin)Tj [-9.29998 ]TJ (g)Tj [10.69999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 433.08459 205.36889 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yy)Tj [-10.89999 ]TJ (_flex_debug)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 518.99739 205.36889 Tm
+ 0 Tc
+ (. )Tj 
+ -35.75 -1.18998 TD
+ -0.00048 Tc
+ 0.11048 Tw
+ (Output includes the rule)Tj [13.29998 ]TJ ( applied and corresponding)Tj [9.5 ]TJ ( matched tex)Tj [-10.5 ]TJ (t)Tj [-2.69999 ]TJ (. )Tj [-10 ]TJ (I)Tj [22.5 ]TJ (f)Tj [2.5 ]TJ ( )Tj [-10 ]TJ (y)Tj [19.5 ]TJ (o)Tj [-0.5 ]TJ (u)Tj [-10.5 ]TJ (\222)Tj [-7.5 ]TJ (re running)Tj [9.5 ]TJ ( lex)Tj [-10.5 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0.00048 Tw
+ (and )Tj [-10 ]TJ (y)Tj [19.5 ]TJ (a)Tj [-6.69999 ]TJ (c)Tj [-6.69999 ]TJ (c)Tj [3.29998 ]TJ ( together, sp)Tj [-10.5 ]TJ (ecif)Tj [-7.5 ]TJ (y)Tj [19.5 ]TJ ( )Tj [-10 ]TJ (the followin)Tj [-10.5 ]TJ (g)Tj [9.5 ]TJ ( in )Tj [-20 ]TJ (y)Tj [19.5 ]TJ (our )Tj [-20 ]TJ (y)Tj [9.5 ]TJ (acc input file: )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 152.81329 Tm
+ -0.00219 Tc
+ 0 Tw
+ (extern)Tj [-597.89999 ]TJ (int)Tj [-597.89999 ]TJ (yy_flex_debug;)Tj 
+ 0 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (yy_flex_debug)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (1)Tj [0 ]TJ (;)Tj 
+ T*
+ (yyparse\(\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 88.73858 Tm
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 34 34
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 34)Tj 
+ 0 55.84999 TD
+ -0.00039 Tc
+ 0.16038 Tw
+ (Alternativel)Tj [-22.59999 ]TJ (y)Tj [19.59999 ]TJ (,)Tj [-0.39999 ]TJ ( )Tj [-10 ]TJ (y)Tj [19.59999 ]TJ (ou ma)Tj [-16.59999 ]TJ (y)Tj [19.59999 ]TJ ( )Tj [-10 ]TJ (write )Tj [-10 ]TJ (y)Tj [19.59999 ]TJ (our own debu)Tj [-10.39999 ]TJ (g)Tj [9.59999 ]TJ ( c)Tj [-6.59999 ]TJ (ode b)Tj [-10.39999 ]TJ (y)Tj [19.59999 ]TJ ( definin)Tj [-10.39999 ]TJ (g)Tj [9.59999 ]TJ ( functio)Tj [-10.39999 ]TJ (ns that displa)Tj [-6.59999 ]TJ (y)Tj [29.59999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ -0.00189 Tc
+ 0.03189 Tw
+ (i)Tj [-4.09999 ]TJ (n)Tj [-1.89999 ]TJ (form)Tj [-4.09999 ]TJ (at)Tj [-4.09999 ]TJ (i)Tj [-4.09999 ]TJ (on for t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (e t)Tj [-4.09999 ]TJ (oken val)Tj [-4.09999 ]TJ (u)Tj [-1.89999 ]TJ (e, and each va)Tj [-8.09999 ]TJ (ri)Tj [-4.09999 ]TJ (ant)Tj [-4.09999 ]TJ ( of t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (e )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 361.45059 695.16809 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yylval)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 401.04719 695.16809 Tm
+ 0.00019 Tc
+ 0.02978 Tw
+ ( union. Th)Tj [10.19999 ]TJ (is is i)Tj [8 ]TJ (llustrated )Tj 
+ -25.91999 -1.20999 TD
+ -0.00199 Tc
+ 0.03189 Tw
+ (i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (e fol)Tj [-4.19999 ]TJ (l)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ (wi)Tj [-4.19999 ]TJ (ng ex)Tj [-12 ]TJ (am)Tj [-4.19999 ]TJ (pl)Tj [-4.19999 ]TJ (e. W)Tj [-8.19999 ]TJ (h)Tj [-2 ]TJ (en )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 249.85989 680.64929 Tm
+ -0.00219 Tc
+ 0 Tw
+ (DEBUG)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 282.85708 680.64929 Tm
+ -0.00099 Tc
+ 0.03099 Tw
+ ( is defined)Tj [-11 ]TJ (,)Tj [-1 ]TJ ( the debu)Tj [-11 ]TJ (g)Tj [9 ]TJ ( )Tj [-10 ]TJ (functions tak)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ ( ef)Tj [-8 ]TJ (fect, )Tj [-10 ]TJ (and )Tj [-10 ]TJ (a)Tj [-7.19999 ]TJ ( )Tj 
+ -16.06999 -1.18998 TD
+ 0.00109 Tw
+ (t)Tj [-3.29998 ]TJ (r)Tj [1.89999 ]TJ (ace o)Tj [-11.09999 ]TJ (f)Tj [1.89999 ]TJ ( t)Tj [-3.29998 ]TJ (okens and asso)Tj [-11.09999 ]TJ (c)Tj [-7.29998 ]TJ (i)Tj [-3.29998 ]TJ (at)Tj [-3.29998 ]TJ (ed val)Tj [-3.29998 ]TJ (u)Tj [-1.09999 ]TJ (es i)Tj [-3.29998 ]TJ (s)Tj [-1.89999 ]TJ ( di)Tj [-3.29998 ]TJ (spl)Tj [-3.29998 ]TJ (a)Tj [-7.29998 ]TJ (y)Tj [18.89999 ]TJ (e)Tj [-7.29998 ]TJ (d.)Tj [-11 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 640.57258 Tm
+ -0.00219 Tc
+ (%union)Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (ivalue;)Tj 
+ 0 -1.11959 TD
+ (...)Tj 
+ -2.39129 -1.13038 TD
+ (};)Tj 
+ 0 -2.26089 TD
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#ifdef)Tj [-597.89999 ]TJ (DEBUG)Tj 
+ 2.39129 -1.13038 TD
+ (int)Tj [-597.89999 ]TJ (dbgToken\(int)Tj [-597.89999 ]TJ (tok,)Tj [-597.89999 ]TJ (char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (printf\("token)Tj [-597.89999 ]TJ (%s\\n",)Tj [-597.89999 ]TJ (s\);)Tj 
+ 0 -1.13038 TD
+ (return)Tj [-597.89999 ]TJ (tok;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ T*
+ -0.00219 Tc
+ (int)Tj [-597.89999 ]TJ (dbgTokenIvalue\(int)Tj [-597.89999 ]TJ (tok,)Tj [-597.89999 ]TJ (char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (printf\("token)Tj [-597.89999 ]TJ (%s)Tj [-597.89999 ]TJ (\(%d\)\\n",)Tj [-597.89999 ]TJ (s,)Tj [-597.89999 ]TJ (yylval.ivalue\);)Tj 
+ T*
+ (return)Tj [-597.89999 ]TJ (tok;)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ 0 -1.11959 TD
+ -0.00219 Tc
+ (#define)Tj [-597.89999 ]TJ (RETURN\(x\))Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (dbgToken\(x,)Tj [-597.89999 ]TJ (#x\))Tj 
+ 0 -1.13038 TD
+ (#define)Tj [-597.89999 ]TJ (RETURN_ivalue\(x\))Tj [-597.89999 ]TJ (return)Tj [-597.89999 ]TJ (dbgTokenIvalue\(x,)Tj [-597.89999 ]TJ (#x\))Tj 
+ -2.39129 -1.13038 TD
+ (#else)Tj 
+ 2.39129 -1.13038 TD
+ (#define)Tj [-597.89999 ]TJ (RETURN\(x\))Tj [-597.89999 ]TJ (return\(x\))Tj 
+ T*
+ (#define)Tj [-597.89999 ]TJ (RETURN_ivalue\(x\))Tj [-597.89999 ]TJ (return\(x\))Tj 
+ -2.39129 -1.13038 TD
+ (#endif)Tj 
+ 0 -1.11959 TD
+ (%})Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ T*
+ ([0-9]+)Tj [-3587 ]TJ ({)Tj 
+ 9.56529 -1.13038 TD
+ (yylval.ivalue)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (atoi\(yytext\);)Tj 
+ 0 -1.11959 TD
+ (RETURN_ivalue\(INTEGER\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ -7.17399 -2.26089 TD
+ -0.00219 Tc
+ ("if")Tj [-4782.69999 ]TJ (RETURN\(IF\);)Tj 
+ 0 -1.13038 TD
+ ("else")Tj [-3587 ]TJ (RETURN\(ELSE\);)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 240.04609 Tm
+ 0 Tc
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 35 35
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 35)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ -0.00169 Tc
+ 0.49049 Tw
+ (6. Mo)Tj [-4.19999 ]TJ (re )Tj [506.59999 ]TJ (Y)Tj [52 ]TJ (acc )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ 15.95869 0 0 15.95869 90.03318 659.05108 Tm
+ -0.00028 Tc
+ 0.58709 Tw
+ (6.1 Recursi)Tj [-8.19999 ]TJ (on )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 638.65278 Tm
+ 0.00088 Tc
+ -0.00088 Tw
+ (Whe)Tj [4.69999 ]TJ (n)Tj [0.89999 ]TJ ( spe)Tj [4.69999 ]TJ (c)Tj [4.69999 ]TJ (i)Tj [-1.29998 ]TJ (f)Tj [-16.09999 ]TJ (y)Tj [30.89999 ]TJ (in)Tj [-9.09999 ]TJ (g)Tj [10.89999 ]TJ ( )Tj [-10 ]TJ (a)Tj [4.69999 ]TJ ( list, we)Tj [4.69999 ]TJ ( ma)Tj [-15.29998 ]TJ (y)Tj [20.89999 ]TJ ( do so using)Tj [10.89999 ]TJ ( lef)Tj [3.89999 ]TJ (t)Tj [-1.29998 ]TJ ( r)Tj [3.89999 ]TJ (e)Tj [-5.29998 ]TJ (c)Tj [4.69999 ]TJ (u)Tj [0.89999 ]TJ (r)Tj [3.89999 ]TJ (s)Tj [0.09999 ]TJ (ion, )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 612.85499 Tm
+ -0.00219 Tc
+ (list:)Tj 
+ 3.26089 -1.13038 TD
+ (item)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (list)Tj [-597.89999 ]TJ (',')Tj [-597.89999 ]TJ (item)Tj 
+ T*
+ 0 Tc
+ (;)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 561.13929 Tm
+ ( )Tj 
+ 0 -1.14999 TD
+ -0.00048 Tc
+ 0.00048 Tw
+ (or rig)Tj [9.5 ]TJ (h)Tj [-0.5 ]TJ (t r)Tj [-7.5 ]TJ (ecu)Tj [-10.5 ]TJ (rsion: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 521.54249 Tm
+ -0.00219 Tc
+ (list:)Tj 
+ 3.26089 -1.11959 TD
+ (item)Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (item)Tj [-597.89999 ]TJ (',')Tj [-597.89999 ]TJ (list)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 482.42579 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00169 Tc
+ 0.03829 Tw
+ (I)Tj [14.69999 ]TJ (f)Tj [-5.29998 ]TJ ( r)Tj [4.69999 ]TJ (i)Tj [-10.5 ]TJ (g)Tj [11.69999 ]TJ (h)Tj [1.69999 ]TJ (t )Tj [-10 ]TJ (r)Tj [4.69999 ]TJ (e)Tj [5.5 ]TJ (c)Tj [5.5 ]TJ (u)Tj [-8.29998 ]TJ (r)Tj [4.69999 ]TJ (s)Tj [0.89999 ]TJ (ion is use)Tj [5.5 ]TJ (d)Tj [1.69999 ]TJ (,)Tj [-8.29998 ]TJ ( a)Tj [5.5 ]TJ (ll ite)Tj [5.5 ]TJ (ms on the list a)Tj [5.5 ]TJ (r)Tj [4.69999 ]TJ (e )Tj [-10 ]TJ (pushe)Tj [5.5 ]TJ (d on the sta)Tj [5.5 ]TJ (c)Tj [5.5 ]TJ (k. )Tj [-10 ]TJ (Af)Tj [4.69999 ]TJ (t)Tj [-10.5 ]TJ (e)Tj [5.5 ]TJ (r)Tj [4.69999 ]TJ ( the la)Tj [5.5 ]TJ (st ite)Tj [5.5 ]TJ (m )Tj 
+ T*
+ -0.00079 Tc
+ 0.02079 Tw
+ (is pushed, we start redu)Tj [-10.79998 ]TJ (cing)Tj [9.19999 ]TJ (. W)Tj [-7 ]TJ (ith left recursion, )Tj [-10 ]TJ (we neve)Tj [-7 ]TJ (r have mor)Tj [-7.79998 ]TJ (e)Tj [3 ]TJ ( than)Tj [-10.79998 ]TJ ( three terms on)Tj [-10.79998 ]TJ ( )Tj 
+ T*
+ -0.00059 Tc
+ 0.06059 Tw
+ (the stack, sinc)Tj [-6.79998 ]TJ (e w)Tj [-8.39999 ]TJ (e)Tj [3.19999 ]TJ ( r)Tj [-7.59999 ]TJ (e)Tj [3.19999 ]TJ (duc)Tj [-6.79998 ]TJ (e as w)Tj [-8.39999 ]TJ (e)Tj [3.19999 ]TJ ( )Tj [-10 ]TJ (g)Tj [9.39999 ]TJ (o)Tj [-0.59999 ]TJ ( )Tj [-10 ]TJ (alon)Tj [-10.59999 ]TJ (g)Tj [9.39999 ]TJ (.)Tj [-0.59999 ]TJ ( F)Tj [5.5 ]TJ (o)Tj [-10.59999 ]TJ (r th)Tj [-10.59999 ]TJ (is reason, it is adv)Tj [-10.59999 ]TJ (a)Tj [3.19999 ]TJ (nta)Tj [-6.79998 ]TJ (g)Tj [9.39999 ]TJ (e)Tj [-6.79998 ]TJ (ous to use left)Tj [-12.79998 ]TJ ( )Tj 
+ T*
+ -0.00099 Tc
+ 0 Tw
+ (recursion. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 391.47338 Tm
+ -0.00019 Tc
+ 0.58699 Tw
+ (6.2 If-Else )Tj [563.89999 ]TJ (A)Tj [22.69999 ]TJ (m)Tj [-5.79998 ]TJ (b)Tj [-5.89999 ]TJ (i)Tj [-0.59999 ]TJ (gu)Tj [-5.89999 ]TJ (it)Tj [-5.5 ]TJ (y)Tj [14.59999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 371.07508 Tm
+ -0.00088 Tc
+ 0.10089 Tw
+ (A shift-redu)Tj [-10.89999 ]TJ (ce )Tj [-10 ]TJ (conflict t)Tj [-13.09999 ]TJ (h)Tj [-0.89999 ]TJ (at frequ)Tj [-10.89999 ]TJ (entl)Tj [-13.09999 ]TJ (y)Tj [19.09999 ]TJ ( )Tj [-10 ]TJ (occu)Tj [-10.89999 ]TJ (rs in)Tj [-10.89999 ]TJ (volves the )Tj 
+ /N171 1 Tf
+ 24.19999 0 TD
+ 0.00158 Tc
+ 0 Tw
+ (if-)Tj [4.59999 ]TJ (e)Tj [5.39999 ]TJ (l)Tj [-0.59999 ]TJ (se)Tj [5.39999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 2.79998 0 TD
+ 0.00068 Tc
+ 0.09928 Tw
+ (c)Tj [4.5 ]TJ (onstruc)Tj [4.5 ]TJ (t. Assume)Tj [4.5 ]TJ ( we)Tj [4.5 ]TJ ( )Tj 
+ -27 -1.14999 TD
+ -0.00068 Tw
+ (ha)Tj [4.5 ]TJ (ve)Tj [4.5 ]TJ ( the)Tj [4.5 ]TJ ( f)Tj [3.69999 ]TJ (o)Tj [0.69999 ]TJ (llowin)Tj [-9.29998 ]TJ (g)Tj [10.69999 ]TJ ( r)Tj [3.69999 ]TJ (u)Tj [0.69999 ]TJ (le)Tj [4.5 ]TJ (s:)Tj [-11.39999 ]TJ ( )Tj 
+ 3 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 331.47839 Tm
+ -0.00219 Tc
+ (stmt:)Tj 
+ 1.63038 -1.13038 TD
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.79998 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ 0.16308 -1.13038 TD
+ (...)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 108.03169 279.76269 Tm
+ 0 Tc
+ ( )Tj 
+ -1.5 -1.14999 TD
+ -0.00169 Tc
+ 0.00169 Tw
+ (and t)Tj [-3.89999 ]TJ (h)Tj [-1.69999 ]TJ (e fol)Tj [-3.89999 ]TJ (l)Tj [-3.89999 ]TJ (o)Tj [-1.69999 ]TJ (wi)Tj [-3.89999 ]TJ (ng)Tj [8.29998 ]TJ ( st)Tj [-13.89999 ]TJ (at)Tj [-3.89999 ]TJ (e:)Tj [-3.79998 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 240.16598 Tm
+ -0.00219 Tc
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 225.88719 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00048 Tc
+ 0.05049 Tw
+ (W)Tj [-6.69999 ]TJ (e)Tj [3.29998 ]TJ ( need to decide if )Tj [-10 ]TJ (we)Tj [-6.69999 ]TJ ( should shift the )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 291.73638 211.84838 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 318.13418 211.84838 Tm
+ -0.00149 Tc
+ 0.05149 Tw
+ (, or reduc)Tj [-7.69999 ]TJ (e the )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 392.04798 211.84838 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF)Tj [-652.19999 ]TJ (expr)Tj [-652.19999 ]TJ (s)Tj [-10.89999 ]TJ (tmt)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 472.56129 211.84838 Tm
+ 0.05218 Tw
+ ( at)Tj [-4.39999 ]TJ ( t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e t)Tj [-4.39999 ]TJ (op )Tj 
+ -31.87998 -1.17999 TD
+ -0.00088 Tc
+ 0.00088 Tw
+ (of the stack. )Tj [-10 ]TJ (I)Tj [12.09999 ]TJ (f)Tj [-7.89999 ]TJ ( we shift, t)Tj [-13.09999 ]TJ (h)Tj [-0.89999 ]TJ (en we hav)Tj [-10.89999 ]TJ (e)Tj [3.09999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 171.89169 Tm
+ -0.00219 Tc
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ 0 -1.13038 TD
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj 
+ T*
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 120.17599 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00189 Tc
+ 0.00189 Tw
+ (where the s)Tj [-12.69999 ]TJ (econd )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 176.18598 106.13719 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 202.58378 106.13719 Tm
+ -0.00068 Tc
+ 0.00068 Tw
+ ( i)Tj [-12.89999 ]TJ (s)Tj [-1.5 ]TJ ( paired with the second )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 327.97329 106.13719 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 341.17219 106.13719 Tm
+ -0.00138 Tc
+ 0.00138 Tw
+ (. )Tj [-10 ]TJ (I)Tj [11.59999 ]TJ (f)Tj [1.59999 ]TJ ( we )Tj [-10 ]TJ (reduc)Tj [-7.59999 ]TJ (e, we h)Tj [-11.39999 ]TJ (a)Tj [2.39999 ]TJ (v)Tj [-11.39999 ]TJ (e)Tj [2.5 ]TJ ( )Tj 
+ -20.92999 -1.18998 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.14999 TD
+ ( )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 36 36
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 36)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 711.00679 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ 0 -1.13038 TD
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.79998 ]TJ (.)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (stmt)Tj 
+ 0 -1.11959 TD
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (.)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 646.93209 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00109 Tc
+ 0.06109 Tw
+ (where)Tj [-7.29998 ]TJ ( the se)Tj [-7.29998 ]TJ (cond )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 178.46578 632.89329 Tm
+ -0.00219 Tc
+ 0 Tw
+ (ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 204.86358 632.89329 Tm
+ 0.00109 Tc
+ 0.05889 Tw
+ ( i)Tj [-11.09999 ]TJ (s)Tj [0.29998 ]TJ ( pa)Tj [4.89999 ]TJ (ir)Tj [4.09999 ]TJ (e)Tj [4.89999 ]TJ (d)Tj [1.09999 ]TJ ( )Tj [-10 ]TJ (with the)Tj [4.89999 ]TJ ( f)Tj [4.09999 ]TJ (i)Tj [-1.09999 ]TJ (r)Tj [4.09999 ]TJ (s)Tj [0.29998 ]TJ (t )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 320.65388 632.89329 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 333.97279 632.89329 Tm
+ 0.00129 Tc
+ 0.05868 Tw
+ (. Mode)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ (n)Tj [1.29998 ]TJ ( p)Tj [-8.69999 ]TJ (r)Tj [4.29998 ]TJ (o)Tj [-8.69999 ]TJ (g)Tj [11.29998 ]TJ (r)Tj [4.29998 ]TJ (a)Tj [5.09999 ]TJ (mmin)Tj [-8.69999 ]TJ (g)Tj [11.29998 ]TJ ( l)Tj [-10.89999 ]TJ (a)Tj [5.09999 ]TJ (ng)Tj [11.29998 ]TJ (u)Tj [-8.69999 ]TJ (a)Tj [-4.89999 ]TJ (g)Tj [11.29998 ]TJ (e)Tj [5.09999 ]TJ (s p)Tj [-8.69999 ]TJ (a)Tj [5.09999 ]TJ (ir )Tj 
+ -20.32998 -1.20999 TD
+ -0.00189 Tc
+ 0 Tw
+ (an )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 106.47178 618.37449 Tm
+ -0.00219 Tc
+ (ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 132.86959 618.37449 Tm
+ -0.00068 Tc
+ 0.18069 Tw
+ ( with the most)Tj [-12.89999 ]TJ ( rec)Tj [-6.89999 ]TJ (e)Tj [3.09999 ]TJ (nt unpaired)Tj [-10.69999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 294.61608 618.37449 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 307.81498 618.37449 Tm
+ -0.00068 Tc
+ 0.18069 Tw
+ (, so)Tj [-10.69999 ]TJ ( the forme)Tj [-6.89999 ]TJ (r)Tj [2.29998 ]TJ ( beh)Tj [-10.69999 ]TJ (a)Tj [3.09999 ]TJ (vior is ex)Tj [-10.69999 ]TJ (pected. This )Tj 
+ -18.14999 -1.18998 TD
+ -0.00088 Tc
+ 0.01089 Tw
+ (works well with )Tj [-20 ]TJ (y)Tj [19.09999 ]TJ (a)Tj [-7.09999 ]TJ (cc,)Tj [-10.89999 ]TJ ( since de)Tj [-7.09999 ]TJ (fault beh)Tj [-10.89999 ]TJ (a)Tj [2.89999 ]TJ (vior, wh)Tj [-10.89999 ]TJ (en a shift-)Tj [-7.89999 ]TJ (redu)Tj [-10.89999 ]TJ (ce )Tj [-10 ]TJ (conflict)Tj [-13.09999 ]TJ ( is encounte)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (ed,)Tj [-10.89999 ]TJ ( )Tj 
+ 0 -1.14999 TD
+ 0.00109 Tc
+ -0.00109 Tw
+ (is to shif)Tj [4.09999 ]TJ (t. )Tj 
+ T*
+ -0.00028 Tc
+ 0.05029 Tw
+ ( )Tj [-1200 ]TJ (Althoug)Tj [9.69999 ]TJ (h )Tj [-10 ]TJ (y)Tj [19.69999 ]TJ (a)Tj [-6.5 ]TJ (c)Tj [-6.5 ]TJ (c)Tj [3.5 ]TJ ( does the rig)Tj [9.69999 ]TJ (h)Tj [-0.29998 ]TJ (t thing)Tj [9.69999 ]TJ (,)Tj [-0.29998 ]TJ ( it also issues )Tj [10 ]TJ (a shift-reduc)Tj [-6.5 ]TJ (e warnin)Tj [-10.29998 ]TJ (g)Tj [9.69999 ]TJ ( messa)Tj [-6.5 ]TJ (g)Tj [9.69999 ]TJ (e)Tj [3.5 ]TJ (. To )Tj 
+ 0 -1.16999 TD
+ -0.00079 Tc
+ 0.00079 Tw
+ (remove the messa)Tj [-7 ]TJ (ge, )Tj [-10 ]TJ (g)Tj [9.19999 ]TJ (i)Tj [-3 ]TJ (v)Tj [-10.79998 ]TJ (e)Tj [3 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 216.98258 562.45919 Tm
+ -0.00219 Tc
+ 0 Tw
+ (IF-ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 263.17869 562.45919 Tm
+ -0.00189 Tc
+ 0.00189 Tw
+ ( a hi)Tj [-14.09999 ]TJ (g)Tj [8.09999 ]TJ (h)Tj [-1.89999 ]TJ (er p)Tj [-11.89999 ]TJ (r)Tj [1.09999 ]TJ (ec)Tj [-8.09999 ]TJ (edenc)Tj [-8.09999 ]TJ (e)Tj [1.89999 ]TJ ( t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (an t)Tj [-4.09999 ]TJ (h)Tj [-1.89999 ]TJ (e si)Tj [-4.09999 ]TJ (m)Tj [-4.09999 ]TJ (p)Tj [-1.89999 ]TJ (l)Tj [-4.09999 ]TJ (e)Tj [1.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 441.36389 562.45919 Tm
+ 0.00869 Tc
+ 0 Tw
+ (IF)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 454.68278 562.45919 Tm
+ -0.00189 Tc
+ 0.00189 Tw
+ ( st)Tj [-4.09999 ]TJ (at)Tj [-4.09999 ]TJ (em)Tj [-4.09999 ]TJ (ent)Tj [-4.09999 ]TJ (:)Tj [-4 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 537.50119 Tm
+ -0.00219 Tc
+ 0 Tw
+ (%nonassoc)Tj [-597.89999 ]TJ (IFX)Tj 
+ 0 -1.13038 TD
+ (%nonassoc)Tj [-597.89999 ]TJ (ELSE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 510.86338 Tm
+ 0 Tc
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 127.83018 498.86439 Tm
+ -0.00219 Tc
+ (stmt:)Tj 
+ 2.22828 -1.13038 TD
+ (IF)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (%prec)Tj [-597.89999 ]TJ (IFX)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 437.66958 Tm
+ 0.00059 Tc
+ 0.58619 Tw
+ (6.3 Error )Tj [586.39999 ]TJ (Message)Tj [-7.19999 ]TJ (s)Tj [-7.09999 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 417.27128 Tm
+ -0.00169 Tc
+ 0.25169 Tw
+ (A ni)Tj [-3.89999 ]TJ (ce com)Tj [-3.89999 ]TJ (p)Tj [-1.69999 ]TJ (i)Tj [-3.89999 ]TJ (l)Tj [-3.89999 ]TJ (e)Tj [2.09999 ]TJ (r )Tj [-10 ]TJ (g)Tj [8.29998 ]TJ (i)Tj [-3.89999 ]TJ (v)Tj [-11.69999 ]TJ (e)Tj [2.09999 ]TJ (s )Tj [-10 ]TJ (t)Tj [-3.89999 ]TJ (h)Tj [-1.69999 ]TJ (e user m)Tj [-3.89999 ]TJ (e)Tj [-7.89999 ]TJ (ani)Tj [-3.89999 ]TJ (ngful)Tj [-3.89999 ]TJ ( err)Tj [-8.69999 ]TJ (o)Tj [-1.69999 ]TJ (r m)Tj [-3.89999 ]TJ (e)Tj [2.09999 ]TJ (ssa)Tj [-7.89999 ]TJ (g)Tj [8.29998 ]TJ (e)Tj [2.09999 ]TJ (s. )Tj [-10 ]TJ (For )Tj [-10 ]TJ (ex)Tj [-11.69999 ]TJ (am)Tj [-3.89999 ]TJ (pl)Tj [-3.89999 ]TJ (e, not)Tj [-3.89999 ]TJ ( m)Tj [-3.89999 ]TJ (u)Tj [-1.69999 ]TJ (ch )Tj 
+ 0 -1.14999 TD
+ -0.00009 Tc
+ 0.00009 Tw
+ (information is conve)Tj [-16.29998 ]TJ (y)Tj [19.89999 ]TJ (e)Tj [3.69999 ]TJ (d )Tj [-10 ]TJ (b)Tj [-10.09999 ]TJ (y)Tj [19.89999 ]TJ ( the followin)Tj [-10.09999 ]TJ (g)Tj [9.89999 ]TJ ( messa)Tj [-6.29998 ]TJ (ge: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 377.67449 Tm
+ -0.00219 Tc
+ (syntax)Tj [-597.89999 ]TJ (error)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 363.39579 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ -0.00219 Tc
+ 0.00219 Tw
+ (I)Tj [10.79998 ]TJ (f)Tj [-9.19999 ]TJ ( we t)Tj [-4.39999 ]TJ (r)Tj [-9.19999 ]TJ (ack t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e l)Tj [-4.39999 ]TJ (i)Tj [-4.39999 ]TJ (n)Tj [-2.19999 ]TJ (e num)Tj [-4.39999 ]TJ (b)Tj [-12.19999 ]TJ (e)Tj [1.59999 ]TJ (r i)Tj [-4.39999 ]TJ (n)Tj [-2.19999 ]TJ ( l)Tj [-4.39999 ]TJ (e)Tj [1.59999 ]TJ (x)Tj [-12.19999 ]TJ (,)Tj [-2.19999 ]TJ ( t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (en we can )Tj [-10 ]TJ (at)Tj [-4.39999 ]TJ ( l)Tj [-4.39999 ]TJ (east)Tj [-4.39999 ]TJ ( g)Tj [7.79998 ]TJ (i)Tj [-4.39999 ]TJ (v)Tj [-12.19999 ]TJ (e)Tj [1.59999 ]TJ ( t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (e user )Tj [-10 ]TJ (a l)Tj [-4.39999 ]TJ (i)Tj [-4.39999 ]TJ (n)Tj [-2.19999 ]TJ (e n)Tj [-12.19999 ]TJ (u)Tj [-2.19999 ]TJ (m)Tj [-4.39999 ]TJ (b)Tj [-2.19999 ]TJ (er:)Tj [-4.09999 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 323.79899 Tm
+ -0.00219 Tc
+ (void)Tj [-597.89999 ]TJ (yyerror\(char)Tj [-597.89999 ]TJ (*s\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.13038 TD
+ (fprintf\(stderr,)Tj [-597.89999 ]TJ ("line)Tj [-597.89999 ]TJ (%d:)Tj [-597.89999 ]TJ (%s\\n",)Tj [-597.89999 ]TJ (yylineno,)Tj [-597.89999 ]TJ (s\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 284.68229 Tm
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00099 Tc
+ 0.08099 Tw
+ (W)Tj [-7.19999 ]TJ (h)Tj [-1 ]TJ (en )Tj [-10 ]TJ (y)Tj [19 ]TJ (a)Tj [-7.19999 ]TJ (cc)Tj [-7.19999 ]TJ ( discovers)Tj [-11.79998 ]TJ ( a )Tj [-10 ]TJ (parsing er)Tj [-8 ]TJ (ror, d)Tj [-11 ]TJ (e)Tj [2.79998 ]TJ (fault )Tj [-10 ]TJ (act)Tj [-13.19999 ]TJ (ion is to call )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 394.08779 270.64349 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyerror)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 440.28399 270.64349 Tm
+ -0.00068 Tc
+ 0.08068 Tw
+ (, )Tj [-10 ]TJ (and then r)Tj [-7.69999 ]TJ (e)Tj [3.09999 ]TJ (turn)Tj [-10.69999 ]TJ ( )Tj 
+ -29.18998 -1.20999 TD
+ -0.00199 Tc
+ 0 Tw
+ (from)Tj [-4.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 117.15089 256.12469 Tm
+ -0.00219 Tc
+ (yylex)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 150.14819 256.12469 Tm
+ -0.00099 Tc
+ 0.07099 Tw
+ ( with a return value of one. A more )Tj [10 ]TJ (g)Tj [9 ]TJ (r)Tj [-8 ]TJ (ace)Tj [-7.19999 ]TJ (ful action flushes the input stream)Tj [6.79998 ]TJ ( )Tj 
+ -5.00999 -1.18998 TD
+ 0.00109 Tc
+ -0.00109 Tw
+ (to a)Tj [4.89999 ]TJ ( sta)Tj [4.89999 ]TJ (t)Tj [-1.09999 ]TJ (e)Tj [4.89999 ]TJ (m)Tj [-1.09999 ]TJ (e)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ (t de)Tj [4.89999 ]TJ (limite)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (,)Tj [1.09999 ]TJ ( a)Tj [4.89999 ]TJ (nd c)Tj [4.89999 ]TJ (ontinue)Tj [4.89999 ]TJ (s to sc)Tj [4.89999 ]TJ (a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ (: )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 217.36788 Tm
+ -0.00219 Tc
+ 0 Tw
+ (stmt:)Tj 
+ 5.38049 -1.13038 TD
+ (';')Tj 
+ -0.59779 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';')Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (PRINT)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';')Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (VARIABLE)Tj [-597.89999 ]TJ ('=')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ (';)Tj 
+ 0 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (WHILE)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (%prec)Tj [-597.89999 ]TJ (IFX)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (I)Tj [0 ]TJ (F)Tj [-597.89999 ]TJ ('\(')Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('\)')Tj [-597.89999 ]TJ (stmt)Tj [-597.89999 ]TJ (ELSE)Tj [-597.89999 ]TJ (stmt)Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ ('{')Tj [-597.89999 ]TJ (stmt_list)Tj [-597.89999 ]TJ ('}')Tj 
+ T*
+ (|)Tj [-597.89999 ]TJ (error)Tj [-597.89999 ]TJ (';')Tj 
+ 0 -1.11959 TD
+ (|)Tj [-597.89999 ]TJ (error)Tj [-597.89999 ]TJ ('}')Tj 
+ 0 -1.13038 TD
+ 0 Tc
+ (;)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 37 37
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 37)Tj 
+ 0 55.82998 TD
+ -0.00209 Tc
+ 0 Tw
+ (The )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 113.31118 708.96688 Tm
+ -0.00219 Tc
+ (error)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 146.42849 708.96688 Tm
+ -0.00039 Tc
+ 0.14039 Tw
+ ( token is )Tj [-10 ]TJ (a s)Tj [-11.19999 ]TJ (p)Tj [-0.39999 ]TJ (ecial )Tj [-10 ]TJ (featur)Tj [-7.39999 ]TJ (e o)Tj [-10.39999 ]TJ (f)Tj [2.59999 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.59999 ]TJ (a)Tj [-6.59999 ]TJ (cc)Tj [-6.59999 ]TJ ( that will match)Tj [-10.39999 ]TJ ( all input )Tj [-10 ]TJ (until the token)Tj [-10.39999 ]TJ ( )Tj 
+ -4.69999 -1.20999 TD
+ 0.00059 Tc
+ 0 Tw
+ (f)Tj [3.59999 ]TJ (o)Tj [0.59999 ]TJ (llowing)Tj [10.59999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 140.06898 694.44808 Tm
+ -0.00219 Tc
+ (error)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 173.06619 694.44808 Tm
+ 0.04219 Tw
+ ( i)Tj [-4.39999 ]TJ (s)Tj [-3 ]TJ ( foun)Tj [-12.19999 ]TJ (d. For t)Tj [-4.39999 ]TJ (h)Tj [-2.19999 ]TJ (i)Tj [-4.39999 ]TJ (s)Tj [-3 ]TJ ( ex)Tj [-12.19999 ]TJ (am)Tj [-4.39999 ]TJ (pl)Tj [-4.39999 ]TJ (e, whe)Tj [-8.39999 ]TJ (n)Tj [-2.19999 ]TJ ( )Tj [-10 ]TJ (y)Tj [17.79998 ]TJ (a)Tj [-8.39999 ]TJ (cc d)Tj [-12.19999 ]TJ (e)Tj [1.59999 ]TJ (t)Tj [-4.39999 ]TJ (ect)Tj [-4.39999 ]TJ (s )Tj [-10 ]TJ (an er)Tj [-9.19999 ]TJ (ror i)Tj [-4.39999 ]TJ (n)Tj [-12.19999 ]TJ ( a st)Tj [-4.39999 ]TJ (at)Tj [-4.39999 ]TJ (em)Tj [-4.39999 ]TJ (ent)Tj [-4.39999 ]TJ ( i)Tj [-4.39999 ]TJ (t)Tj [-14.39999 ]TJ ( )Tj 
+ -6.91999 -1.20999 TD
+ 0.00169 Tc
+ -0.00169 Tw
+ (will c)Tj [5.5 ]TJ (a)Tj [5.5 ]TJ (ll )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 132.02969 679.92929 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yyerror)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 178.22579 679.92929 Tm
+ -0.00048 Tc
+ 0.00048 Tw
+ (, flush input up to the nex)Tj [-10.5 ]TJ (t)Tj [-2.69999 ]TJ ( semi)Tj [7.29998 ]TJ (colon or bra)Tj [-6.69999 ]TJ (ce, and )Tj [-10 ]TJ (resu)Tj [-10.5 ]TJ (me scannin)Tj [-10.5 ]TJ (g)Tj [9.5 ]TJ (. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 643.69239 Tm
+ -0.00039 Tc
+ 0.58718 Tw
+ (6.4 Inherit)Tj [-5.69999 ]TJ (e)Tj [-0.59999 ]TJ (d )Tj [571.39999 ]TJ (A)Tj [15 ]TJ (t)Tj [-5.69999 ]TJ (tri)Tj [-8.29998 ]TJ (b)Tj [-6.09999 ]TJ (utes )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 623.29409 Tm
+ -0.00149 Tc
+ 0.00149 Tw
+ (The ex)Tj [-11.5 ]TJ (am)Tj [-3.69999 ]TJ (pl)Tj [-3.69999 ]TJ (es so f)Tj [-8.5 ]TJ (a)Tj [2.29998 ]TJ (r hav)Tj [-11.5 ]TJ (e)Tj [-7.69999 ]TJ ( used )Tj 
+ /N171 1 Tf
+ 12.55999 0 TD
+ -0.00048 Tc
+ 0 Tw
+ (synthesized)Tj 
+ /N231 1 Tf
+ 4.55999 0 TD
+ -0.00099 Tc
+ 0.00099 Tw
+ ( attributes. At an)Tj [-21 ]TJ (y)Tj [19 ]TJ ( point in )Tj [-10 ]TJ (a s)Tj [-21.79998 ]TJ (y)Tj [19 ]TJ (nt)Tj [-13.19999 ]TJ (ax)Tj [-11 ]TJ ( tree we)Tj [-7.19999 ]TJ ( can)Tj [-11 ]TJ ( )Tj 
+ -17.11999 -1.14999 TD
+ -0.00059 Tc
+ 0.00059 Tw
+ (determine the attributes o)Tj [-10.59999 ]TJ (f)Tj [2.39999 ]TJ ( a node bas)Tj [-11.39999 ]TJ (e)Tj [3.19999 ]TJ (d on the attr)Tj [-7.59999 ]TJ (ibutes of its children. Consider the rule )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 583.69738 Tm
+ -0.00219 Tc
+ (expr:)Tj [-597.89999 ]TJ (expr)Tj [-597.89999 ]TJ ('+')Tj [-597.89999 ]TJ (expr)Tj [-6467.39999 ]TJ ({)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ ($)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($)Tj [0 ]TJ (1)Tj [-597.89999 ]TJ (+)Tj [-597.89999 ]TJ ($3;)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 569.41859 Tm
+ 0 Tc
+ ( )Tj 
+ T*
+ -0.00129 Tc
+ 0.10128 Tw
+ (Since we)Tj [-7.5 ]TJ ( ar)Tj [-8.29998 ]TJ (e p)Tj [-11.29998 ]TJ (a)Tj [2.5 ]TJ (rsin)Tj [-11.29998 ]TJ (g)Tj [8.69999 ]TJ ( bo)Tj [-11.29998 ]TJ (ttom-up, the values)Tj [-12.09999 ]TJ ( of b)Tj [-11.29998 ]TJ (o)Tj [-1.29998 ]TJ (th operands)Tj [-12.09999 ]TJ ( ar)Tj [-8.29998 ]TJ (e )Tj [-10 ]TJ (availab)Tj [-11.29998 ]TJ (l)Tj [-3.5 ]TJ (e, and )Tj [-10 ]TJ (we )Tj [-10 ]TJ (can)Tj [-11.29998 ]TJ ( )Tj 
+ T*
+ -0.00209 Tc
+ 0.11209 Tw
+ (det)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (rm)Tj [-4.29998 ]TJ (i)Tj [-4.29998 ]TJ (n)Tj [-2.09999 ]TJ (e t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e val)Tj [-4.29998 ]TJ (u)Tj [-2.09999 ]TJ (e asso)Tj [-12.09999 ]TJ (ci)Tj [-4.29998 ]TJ (at)Tj [-4.29998 ]TJ (ed wi)Tj [-4.29998 ]TJ (t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ ( t)Tj [-4.29998 ]TJ (h)Tj [-2.09999 ]TJ (e l)Tj [-4.29998 ]TJ (e)Tj [1.69999 ]TJ (ft)Tj [-4.09999 ]TJ (-hand)Tj [-12.09999 ]TJ ( si)Tj [-4.29998 ]TJ (de. An )Tj 
+ /N171 1 Tf
+ 24.40998 0 TD
+ 0.00119 Tc
+ 0 Tw
+ (inhe)Tj [5 ]TJ (rite)Tj [5 ]TJ (d)Tj 
+ /N231 1 Tf
+ 3.60998 0 TD
+ -0.00109 Tc
+ 0.11109 Tw
+ ( attribute of a node )Tj 
+ -28.01998 -1.14999 TD
+ -0.00068 Tc
+ 0.13069 Tw
+ (depends on)Tj [-10.69999 ]TJ ( the valu)Tj [-10.69999 ]TJ (e of)Tj [-7.69999 ]TJ ( a p)Tj [-10.69999 ]TJ (a)Tj [3.09999 ]TJ (rent o)Tj [-10.69999 ]TJ (r)Tj [2.29998 ]TJ ( sibling nod)Tj [-10.69999 ]TJ (e. The)Tj [-6.89999 ]TJ ( followin)Tj [-10.69999 ]TJ (g)Tj [9.29998 ]TJ ( )Tj [-10 ]TJ (g)Tj [9.29998 ]TJ (r)Tj [-7.69999 ]TJ (ammar de)Tj [-6.89999 ]TJ (fines )Tj [-10 ]TJ (a C)Tj [-13.69999 ]TJ ( )Tj 
+ T*
+ -0.00079 Tc
+ 0.00079 Tw
+ (variable de)Tj [-7 ]TJ (clar)Tj [-7.79998 ]TJ (ation: )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 488.42529 Tm
+ -0.00219 Tc
+ (decl:)Tj [-597.89999 ]TJ (type)Tj [-597.89999 ]TJ (varlist)Tj 
+ 0 -1.13038 TD
+ (type:)Tj [-597.89999 ]TJ (INT)Tj [-597.89999 ]TJ (|)Tj [-597.89999 ]TJ (FLOAT)Tj 
+ 0 -1.11959 TD
+ (varlist:)Tj 
+ 4.78259 -1.13038 TD
+ (VAR)Tj [-11358.69999 ]TJ ({)Tj [-597.89999 ]TJ (setType\($1,)Tj [-597.89999 ]TJ ($0\);)Tj [-597.89999 ]TJ (})Tj 
+ -0.32609 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (varlist)Tj [-597.89999 ]TJ (',')Tj [-597.89999 ]TJ (VAR)Tj [-3315.19999 ]TJ ({)Tj [-597.89999 ]TJ (setType\($3,)Tj [-597.89999 ]TJ ($0\);)Tj [-597.89999 ]TJ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 424.35069 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.14999 TD
+ 0.00039 Tc
+ -0.00039 Tw
+ (He)Tj [4.19999 ]TJ (r)Tj [3.39999 ]TJ (e)Tj [4.19999 ]TJ ( is a)Tj [4.19999 ]TJ ( s)Tj [-10.39999 ]TJ (a)Tj [4.19999 ]TJ (mple)Tj [4.19999 ]TJ ( pa)Tj [4.19999 ]TJ (r)Tj [3.39999 ]TJ (s)Tj [-10.39999 ]TJ (e)Tj [4.19999 ]TJ (:)Tj [-1.69999 ]TJ ( )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 384.75399 Tm
+ -0.00219 Tc
+ (.)Tj [-597.89999 ]TJ (INT)Tj [-597.89999 ]TJ (VAR)Tj 
+ 0 -1.13038 TD
+ (INT)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (VAR)Tj 
+ T*
+ (type)Tj [-597.89999 ]TJ (.)Tj [-597.89999 ]TJ (VAR)Tj 
+ 0 -1.11959 TD
+ (type)Tj [-597.89999 ]TJ (VAR)Tj [-597.89999 ]TJ (.)Tj 
+ 0 -1.13038 TD
+ (type)Tj [-597.89999 ]TJ (varlist)Tj [-597.89999 ]TJ (.)Tj 
+ T*
+ (decl)Tj [-597.89999 ]TJ (.)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 308.20028 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00248 Tc
+ 0.04249 Tw
+ (W)Tj [-8.69999 ]TJ (h)Tj [-2.5 ]TJ (en we redu)Tj [-12.5 ]TJ (ce )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 174.98609 294.16149 Tm
+ -0.00219 Tc
+ 0 Tw
+ (VAR)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 194.78448 294.16149 Tm
+ 0.00109 Tc
+ 0.03889 Tw
+ ( to )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 211.22309 294.16149 Tm
+ -0.00219 Tc
+ 0 Tw
+ (varlist)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 257.41918 294.16149 Tm
+ -0.00068 Tc
+ 0.04069 Tw
+ (, we should an)Tj [-10.69999 ]TJ (notate the s)Tj [-21.5 ]TJ (y)Tj [29.29998 ]TJ (m)Tj [-12.89999 ]TJ (bol table )Tj [-10 ]TJ (with the t)Tj [-12.89999 ]TJ (y)Tj [19.29998 ]TJ (pe)Tj [-6.89999 ]TJ ( of)Tj [-7.69999 ]TJ ( )Tj 
+ -13.94999 -1.18998 TD
+ -0.00079 Tc
+ 0.23078 Tw
+ (the variabl)Tj [-13 ]TJ (e)Tj [3 ]TJ (. How)Tj [-8.59999 ]TJ (e)Tj [3 ]TJ (ver,)Tj [-10.79998 ]TJ ( )Tj [-10 ]TJ (the t)Tj [-13 ]TJ (y)Tj [19.19999 ]TJ (p)Tj [-10.79998 ]TJ (e)Tj [3 ]TJ ( is buried)Tj [-10.79998 ]TJ ( in th)Tj [-10.79998 ]TJ (e stack. )Tj [-10 ]TJ (This problem i)Tj [-13 ]TJ (s)Tj [-1.59999 ]TJ ( resolved b)Tj [-20.79998 ]TJ (y)Tj [19.19999 ]TJ ( )Tj 
+ 0 -1.16999 TD
+ 0.00099 Tc
+ 0.11898 Tw
+ (inde)Tj [4.79998 ]TJ (x)Tj [-9 ]TJ (i)Tj [-1.19999 ]TJ (ng)Tj [11 ]TJ ( ba)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (k)Tj [1 ]TJ ( into the)Tj [4.79998 ]TJ ( sta)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (k. Re)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (a)Tj [4.79998 ]TJ (ll tha)Tj [4.79998 ]TJ (t)Tj [-1.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 295.21609 265.84388 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($1)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 308.41499 265.84388 Tm
+ 0.00099 Tc
+ 0.11898 Tw
+ ( de)Tj [4.79998 ]TJ (si)Tj [-11.19999 ]TJ (g)Tj [11 ]TJ (n)Tj [1 ]TJ (a)Tj [4.79998 ]TJ (t)Tj [-11.19999 ]TJ (e)Tj [4.79998 ]TJ (s)Tj [0.19999 ]TJ ( the)Tj [4.79998 ]TJ ( f)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (r)Tj [4 ]TJ (s)Tj [0.19999 ]TJ (t te)Tj [4.79998 ]TJ (r)Tj [4 ]TJ (m)Tj [-1.19999 ]TJ ( on the)Tj [4.79998 ]TJ ( r)Tj [4 ]TJ (i)Tj [-1.19999 ]TJ (g)Tj [11 ]TJ (h)Tj [1 ]TJ (t-)Tj [4 ]TJ (h)Tj [-9 ]TJ (a)Tj [4.79998 ]TJ (nd )Tj 
+ -18.19999 -1.20999 TD
+ -0.00079 Tc
+ 0.12078 Tw
+ (side. W)Tj [-7 ]TJ (e)Tj [3 ]TJ ( can index)Tj [-10.79998 ]TJ ( backwards, using)Tj [9.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 279.01739 251.32508 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($0)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 292.21629 251.32508 Tm
+ 0 Tc
+ (, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 299.65568 251.32508 Tm
+ -0.00219 Tc
+ ($-1)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 319.45408 251.32508 Tm
+ -0.00019 Tc
+ 0.12019 Tw
+ (, a)Tj [-6.39999 ]TJ (nd so on. )Tj [-10 ]TJ (I)Tj [22.79998 ]TJ (n)Tj [-0.19999 ]TJ ( this case, )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 447.36338 251.32508 Tm
+ 0.00869 Tc
+ 0 Tw
+ ($0)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 460.68229 251.32508 Tm
+ 0.00088 Tc
+ 0.11909 Tw
+ ( will do just)Tj [8.69999 ]TJ ( )Tj 
+ -30.88999 -1.20999 TD
+ -0.00079 Tc
+ 0.07078 Tw
+ (fine. )Tj [-10 ]TJ (I)Tj [12.19999 ]TJ (f)Tj [2.19999 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.19999 ]TJ (ou need to spec)Tj [-7 ]TJ (if)Tj [-7.79998 ]TJ (y)Tj [19.19999 ]TJ ( a token t)Tj [-23 ]TJ (y)Tj [19.19999 ]TJ (pe, the s)Tj [-21.59999 ]TJ (y)Tj [19.19999 ]TJ (ntax)Tj [-10.79998 ]TJ ( is )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 359.77069 236.80628 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($<tokentype>0)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 445.56349 236.80628 Tm
+ -0.00299 Tc
+ 0.06298 Tw
+ (,)Tj [7 ]TJ ( ang)Tj [7 ]TJ (l)Tj [-15.19999 ]TJ (e )Tj [-10 ]TJ (brack)Tj [-13 ]TJ (et)Tj [-5.19999 ]TJ (s)Tj [-13.79998 ]TJ ( )Tj 
+ -29.62998 -1.19999 TD
+ -0.00199 Tc
+ 0.21199 Tw
+ (i)Tj [-4.19999 ]TJ (n)Tj [-2 ]TJ (cl)Tj [-4.19999 ]TJ (uded. )Tj [-10 ]TJ (I)Tj [11 ]TJ (n)Tj [-2 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (i)Tj [-4.19999 ]TJ (s)Tj [-2.79998 ]TJ ( part)Tj [-4.19999 ]TJ (i)Tj [-4.19999 ]TJ (c)Tj [1.79998 ]TJ (u)Tj [-12 ]TJ (l)Tj [-4.19999 ]TJ (ar ex)Tj [-12 ]TJ (am)Tj [-4.19999 ]TJ (pl)Tj [-4.19999 ]TJ (e, car)Tj [-9 ]TJ (e m)Tj [-4.19999 ]TJ (u)Tj [-2 ]TJ (st)Tj [-4.19999 ]TJ ( be t)Tj [-4.19999 ]TJ (a)Tj [1.79998 ]TJ (ken t)Tj [-4.19999 ]TJ (o)Tj [-2 ]TJ ( ensur)Tj [-9 ]TJ (e)Tj [1.79998 ]TJ ( t)Tj [-4.19999 ]TJ (h)Tj [-2 ]TJ (at)Tj [-14.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 456.84259 222.40748 Tm
+ -0.00219 Tc
+ 0 Tw
+ (type)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 483.24038 222.40748 Tm
+ 0 Tc
+ ( )Tj 
+ /N171 1 Tf
+ 0.45999 0 TD
+ -0.00039 Tc
+ (always)Tj 
+ /N231 1 Tf
+ 2.76998 0 TD
+ 0 Tc
+ ( )Tj 
+ -36 -1.20999 TD
+ -0.00268 Tc
+ (preced)Tj [-12.69999 ]TJ (es )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 134.90939 207.88868 Tm
+ -0.00219 Tc
+ (varlist)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 181.10559 207.88868 Tm
+ 0 Tc
+ (. )Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 171.65168 Tm
+ -0.00088 Tc
+ 0.58769 Tw
+ (6.5 Embe)Tj [-8.69999 ]TJ (dde)Tj [-8.69999 ]TJ (d )Tj [571.39999 ]TJ (A)Tj [22 ]TJ (c)Tj [-8.69999 ]TJ (t)Tj [-6.19999 ]TJ (i)Tj [-8.79998 ]TJ (ons )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 151.13339 Tm
+ 0.00009 Tc
+ -0.00009 Tw
+ (Rules in )Tj [-10 ]TJ (y)Tj [20.09999 ]TJ (a)Tj [3.89999 ]TJ (c)Tj [-6.09999 ]TJ (c)Tj [3.89999 ]TJ ( ma)Tj [-16.09999 ]TJ (y)Tj [20.09999 ]TJ ( cont)Tj [-12.09999 ]TJ (ain embedded a)Tj [-6.09999 ]TJ (c)Tj [3.89999 ]TJ (tions: )Tj 
+ 0 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 125.33558 Tm
+ -0.00219 Tc
+ (list:)Tj [-597.89999 ]TJ (item1)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (do_item1\($1\);)Tj [-597.89999 ]TJ (})Tj [-597.89999 ]TJ (item2)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (do_item2\($3\);)Tj [-597.89999 ]TJ (})Tj [-597.89999 ]TJ (item3)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 111.17678 Tm
+ 0 Tc
+ ( )Tj 
+ 0 -1.16999 TD
+ 0.00099 Tc
+ 0.15899 Tw
+ (Note)Tj [4.79998 ]TJ ( tha)Tj [4.79998 ]TJ (t)Tj [-1.19999 ]TJ ( the)Tj [4.79998 ]TJ ( a)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (tions ta)Tj [14.79998 ]TJ (ke)Tj [4.79998 ]TJ ( a)Tj [4.79998 ]TJ ( slot in)Tj [11 ]TJ ( the)Tj [4.79998 ]TJ ( s)Tj [10.19999 ]TJ (t)Tj [-1.19999 ]TJ (a)Tj [4.79998 ]TJ (c)Tj [4.79998 ]TJ (k, so )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 338.53239 97.13789 Tm
+ -0.00219 Tc
+ 0 Tw
+ (do_item2)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 391.32809 97.13789 Tm
+ 0.00079 Tc
+ 0.15919 Tw
+ ( must)Tj [8.59999 ]TJ ( use)Tj [4.59999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 445.20359 97.13789 Tm
+ -0.00219 Tc
+ 0 Tw
+ ($3)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 458.40249 97.13789 Tm
+ -0.00279 Tc
+ 0.16279 Tw
+ ( t)Tj [-5 ]TJ (o)Tj [-2.79998 ]TJ ( referenc)Tj [-9 ]TJ (e )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 82.61918 Tm
+ -0.00219 Tc
+ 0 Tw
+ (item2)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 123.03039 82.61918 Tm
+ 0.00129 Tc
+ -0.00129 Tw
+ (. Ac)Tj [5.09999 ]TJ (tua)Tj [5.09999 ]TJ (l)Tj [-0.89999 ]TJ (l)Tj [-10.89999 ]TJ (y)Tj [21.29998 ]TJ (, this )Tj [-10 ]TJ (g)Tj [11.29998 ]TJ (r)Tj [-5.69999 ]TJ (amma)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ ( is tr)Tj [4.29998 ]TJ (a)Tj [5.09999 ]TJ (n)Tj [1.29998 ]TJ (sf)Tj [4.29998 ]TJ (or)Tj [4.29998 ]TJ (me)Tj [5.09999 ]TJ (d b)Tj [-18.69999 ]TJ (y)Tj [21.29998 ]TJ ( )Tj [-10 ]TJ (y)Tj [21.29998 ]TJ (acc)Tj [5.09999 ]TJ ( into the)Tj [5.09999 ]TJ ( f)Tj [4.29998 ]TJ (o)Tj [1.29998 ]TJ (llowin)Tj [-8.69999 ]TJ (g)Tj [11.29998 ]TJ (: )Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 38 38
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 38)Tj 
+ 0 55.84999 TD
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 697.20788 Tm
+ -0.00219 Tc
+ (list:)Tj [-597.89999 ]TJ (item1)Tj [-597.89999 ]TJ (_rule01)Tj [-597.89999 ]TJ (item2)Tj [-597.89999 ]TJ (_rule02)Tj [-597.89999 ]TJ (item3)Tj 
+ /N177 1 Tf
+ 0 -1.13038 TD
+ 0 Tc
+ (_)Tj 
+ /N173 1 Tf
+ 0.59779 0 TD
+ -0.00219 Tc
+ (rule01:)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (do_item1\($0\);)Tj [-597.89999 ]TJ (})Tj 
+ -0.59779 -1.13038 TD
+ (_rule02:)Tj [-597.89999 ]TJ ({)Tj [-597.89999 ]TJ (do_item2\($0\);)Tj [-597.89999 ]TJ (})Tj 
+ /N223 1 Tf
+ 15.95869 0 0 15.95869 90.03318 636.01298 Tm
+ -0.00079 Tc
+ 0.58758 Tw
+ (6.6 Debu)Tj [-6.5 ]TJ (ggi)Tj [-8.69999 ]TJ (ng )Tj [586.39999 ]TJ (Ya)Tj [-8.59999 ]TJ (c)Tj [-8.59999 ]TJ (c)Tj [-1 ]TJ ( )Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 615.61468 Tm
+ 0.00129 Tc
+ 0.07868 Tw
+ (Ya)Tj [5.09999 ]TJ (c)Tj [5.09999 ]TJ (c)Tj [-4.89999 ]TJ ( ha)Tj [5.09999 ]TJ (s fa)Tj [5.09999 ]TJ (c)Tj [5.09999 ]TJ (ilitie)Tj [5.09999 ]TJ (s tha)Tj [5.09999 ]TJ (t)Tj [-0.89999 ]TJ ( ena)Tj [5.09999 ]TJ (b)Tj [1.29998 ]TJ (le)Tj [5.09999 ]TJ ( de)Tj [5.09999 ]TJ (bu)Tj [-8.69999 ]TJ (gg)Tj [11.29998 ]TJ (in)Tj [-8.69999 ]TJ (g)Tj [11.29998 ]TJ (.)Tj [1.29998 ]TJ ( This )Tj [-10 ]TJ (f)Tj [4.29998 ]TJ (e)Tj [-4.89999 ]TJ (a)Tj [5.09999 ]TJ (t)Tj [-0.89999 ]TJ (ur)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ ( ma)Tj [-14.89999 ]TJ (y)Tj [21.29998 ]TJ ( v)Tj [-8.69999 ]TJ (a)Tj [5.09999 ]TJ (r)Tj [-15.69999 ]TJ (y)Tj [21.29998 ]TJ ( )Tj [-10 ]TJ (with dif)Tj [4.29998 ]TJ (f)Tj [-5.69999 ]TJ (e)Tj [5.09999 ]TJ (r)Tj [4.29998 ]TJ (e)Tj [5.09999 ]TJ (n)Tj [1.29998 ]TJ (t ver)Tj [4.29998 ]TJ (s)Tj [0.5 ]TJ (ions )Tj 
+ 0 -1.14999 TD
+ -0.00028 Tc
+ 0.05029 Tw
+ (of )Tj [-20 ]TJ (y)Tj [19.69999 ]TJ (a)Tj [3.5 ]TJ (c)Tj [-6.5 ]TJ (c)Tj [3.5 ]TJ (, so )Tj [-20 ]TJ (y)Tj [19.69999 ]TJ (ou should )Tj [-10 ]TJ (c)Tj [-6.5 ]TJ (onsult documentation for)Tj [-7.29998 ]TJ ( details. The )Tj [-10 ]TJ (code )Tj [-10 ]TJ (gener)Tj [-7.29998 ]TJ (a)Tj [-6.5 ]TJ (ted b)Tj [-10.29998 ]TJ (y)Tj [19.69999 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.69999 ]TJ (a)Tj [-6.5 ]TJ (c)Tj [-6.5 ]TJ (c)Tj [3.5 ]TJ ( in )Tj 
+ 0 -1.16999 TD
+ 0.00219 Tc
+ 0 Tw
+ (f)Tj [5.19999 ]TJ (ile)Tj [6 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 109.95149 587.77699 Tm
+ -0.00219 Tc
+ (y.tab.c)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 156.14768 587.77699 Tm
+ -0.00039 Tc
+ 0.08039 Tw
+ ( includes d)Tj [9.59999 ]TJ (e)Tj [3.39999 ]TJ (bugg)Tj [9.59999 ]TJ (in)Tj [-10.39999 ]TJ (g)Tj [9.59999 ]TJ ( statements that are enabled b)Tj [-20.39999 ]TJ (y)Tj [29.59999 ]TJ ( d)Tj [-10.39999 ]TJ (e)Tj [3.39999 ]TJ (finin)Tj [-10.39999 ]TJ (g)Tj [-0.39999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 454.56278 587.77699 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYDEBUG)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 500.75898 587.77699 Tm
+ -0.00099 Tc
+ 0.08099 Tw
+ ( and )Tj 
+ -34.22999 -1.18998 TD
+ 0.00109 Tc
+ 0.03889 Tw
+ (se)Tj [4.89999 ]TJ (tting)Tj [11.09999 ]TJ ( it to a)Tj [4.89999 ]TJ ( non)Tj [-8.89999 ]TJ (-)Tj [4.09999 ]TJ (z)Tj [-5.09999 ]TJ (e)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (o v)Tj [-8.89999 ]TJ (a)Tj [4.89999 ]TJ (lue)Tj [4.89999 ]TJ (.)Tj [1.09999 ]TJ ( This ma)Tj [-15.09999 ]TJ (y)Tj [21.09999 ]TJ ( )Tj [-10 ]TJ (a)Tj [4.89999 ]TJ (l)Tj [-1.09999 ]TJ (so be)Tj [4.89999 ]TJ ( d)Tj [-8.89999 ]TJ (one)Tj [4.89999 ]TJ ( b)Tj [-18.89999 ]TJ (y)Tj [21.09999 ]TJ ( spec)Tj [4.89999 ]TJ (if)Tj [-15.89999 ]TJ (y)Tj [31.09999 ]TJ (i)Tj [-1.09999 ]TJ (n)Tj [-8.89999 ]TJ (g)Tj [1.09999 ]TJ ( c)Tj [4.89999 ]TJ (o)Tj [1.09999 ]TJ (mm)Tj [-11.09999 ]TJ (a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ (d-)Tj [4.09999 ]TJ (line)Tj [4.89999 ]TJ ( option )Tj 
+ 0 -1.16999 TD
+ 0 Tc
+ 0 Tw
+ (\223)Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 95.31269 559.45939 Tm
+ -0.00219 Tc
+ (-t)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 108.51159 559.45939 Tm
+ 0.00268 Tc
+ 0.11729 Tw
+ (\224)Tj [6.5 ]TJ (.)Tj [2.69999 ]TJ ( With )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 149.78819 559.45939 Tm
+ -0.00219 Tc
+ 0 Tw
+ (YYDEBUG)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 195.98429 559.45939 Tm
+ 0.00109 Tc
+ 0.11889 Tw
+ ( prope)Tj [4.89999 ]TJ (r)Tj [4.09999 ]TJ (l)Tj [-11.09999 ]TJ (y)Tj [21.09999 ]TJ ( )Tj [-10 ]TJ (se)Tj [4.89999 ]TJ (t, d)Tj [-8.89999 ]TJ (e)Tj [4.89999 ]TJ (bu)Tj [-8.89999 ]TJ (g)Tj [11.09999 ]TJ ( output may)Tj [21.09999 ]TJ ( )Tj [-10 ]TJ (be)Tj [4.89999 ]TJ ( to)Tj [-8.89999 ]TJ (gg)Tj [11.09999 ]TJ (le)Tj [4.89999 ]TJ (d)Tj [-8.89999 ]TJ ( on a)Tj [4.89999 ]TJ (n)Tj [1.09999 ]TJ (d)Tj [-8.89999 ]TJ ( of)Tj [4.09999 ]TJ (f)Tj [4.09999 ]TJ ( b)Tj [-18.89999 ]TJ (y)Tj [21.09999 ]TJ ( s)Tj [-9.69999 ]TJ (e)Tj [4.89999 ]TJ (ttin)Tj [-8.89999 ]TJ (g )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 90.03318 544.94059 Tm
+ -0.00219 Tc
+ 0 Tw
+ (yydebug)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 136.22929 544.94059 Tm
+ -0.00048 Tc
+ 0.00048 Tw
+ (. Output includes tokens scann)Tj [-10.5 ]TJ (e)Tj [3.29998 ]TJ (d and sh)Tj [-10.5 ]TJ (ift/reduce )Tj [-10 ]TJ (actions. )Tj 
+ -3.84999 -1.17999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 518.78279 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#define)Tj [-597.89999 ]TJ (YYDEBUG)Tj [-597.89999 ]TJ (1)Tj 
+ T*
+ (%})Tj 
+ T*
+ (%%)Tj 
+ T*
+ (...)Tj 
+ T*
+ (%%)Tj 
+ T*
+ (int)Tj [-597.89999 ]TJ (main\(void\))Tj [-597.89999 ]TJ ({)Tj 
+ 2.39129 -1.11959 TD
+ (#if)Tj [-597.89999 ]TJ (YYDEBUG)Tj 
+ 2.39129 -1.13038 TD
+ (yydebug)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (1)Tj [0 ]TJ (;)Tj 
+ -2.39129 -1.13038 TD
+ (#endif)Tj 
+ T*
+ (yylex\(\);)Tj 
+ -2.39129 -1.13038 TD
+ 0 Tc
+ (})Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 367.35539 Tm
+ ( )Tj 
+ 0 -1.16999 TD
+ -0.00039 Tc
+ 0.19039 Tw
+ (I)Tj [12.59999 ]TJ (n)Tj [-0.39999 ]TJ ( )Tj [-10 ]TJ (addition, )Tj [-10 ]TJ (y)Tj [19.59999 ]TJ (ou can du)Tj [-10.39999 ]TJ (mp the parse states b)Tj [-10.39999 ]TJ (y)Tj [19.59999 ]TJ ( )Tj [-10 ]TJ (specif)Tj [-17.39999 ]TJ (y)Tj [19.59999 ]TJ (in)Tj [-10.39999 ]TJ (g)Tj [9.59999 ]TJ ( command-lin)Tj [-10.39999 ]TJ (e option ")Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 500.87899 353.31658 Tm
+ -0.00219 Tc
+ 0 Tw
+ (-v)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 514.07778 353.31658 Tm
+ -0.00819 Tc
+ (".)Tj [-18.19999 ]TJ ( )Tj 
+ -35.33999 -1.19999 TD
+ -0.00059 Tc
+ 0.10058 Tw
+ (States are dumped to fil)Tj [-12.79998 ]TJ (e)Tj [3.19999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 218.30249 338.91778 Tm
+ -0.00219 Tc
+ 0 Tw
+ (y.output)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 271.09809 338.91778 Tm
+ -0.00088 Tc
+ 0.10089 Tw
+ (, and a)Tj [-7.09999 ]TJ (r)Tj [2.09999 ]TJ (e of)Tj [-7.89999 ]TJ (ten useful when d)Tj [-10.89999 ]TJ (e)Tj [2.89999 ]TJ (bu)Tj [-10.89999 ]TJ (gg)Tj [9.09999 ]TJ (ing)Tj [9.09999 ]TJ ( a )Tj [-10 ]TJ (grammar)Tj [-7.89999 ]TJ (.)Tj [-10.89999 ]TJ ( )Tj 
+ -15.08999 -1.20999 TD
+ 0.25088 Tw
+ (Alternativel)Tj [-23.09999 ]TJ (y)Tj [19.09999 ]TJ (,)Tj [-0.89999 ]TJ ( )Tj [-20 ]TJ (y)Tj [19.09999 ]TJ (ou )Tj [-10 ]TJ (can )Tj [-10 ]TJ (write )Tj [-20 ]TJ (y)Tj [19.09999 ]TJ (our o)Tj [-10.89999 ]TJ (w)Tj [1.29998 ]TJ (n debu)Tj [-10.89999 ]TJ (g )Tj [-10 ]TJ (code b)Tj [-20.89999 ]TJ (y)Tj [19.09999 ]TJ ( d)Tj [-10.89999 ]TJ (e)Tj [2.89999 ]TJ (finin)Tj [-10.89999 ]TJ (g)Tj [9.09999 ]TJ ( a)Tj [-7.09999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 433.92449 324.39898 Tm
+ -0.00219 Tc
+ 0 Tw
+ (TR)Tj [-10.89999 ]TJ (ACE)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 467.04168 324.39898 Tm
+ -0.00169 Tc
+ 0.25169 Tw
+ ( m)Tj [-3.89999 ]TJ (acro, )Tj [-10 ]TJ (as )Tj 
+ -31.41999 -1.20999 TD
+ 0.00109 Tc
+ 0.21879 Tw
+ (illustr)Tj [4.09999 ]TJ (a)Tj [4.89999 ]TJ (te)Tj [4.89999 ]TJ (d be)Tj [4.89999 ]TJ (low. Whe)Tj [4.89999 ]TJ (n)Tj [-8.89999 ]TJ ( )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 216.02268 309.88018 Tm
+ -0.00219 Tc
+ 0 Tw
+ (DEBUG)Tj 
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 249.01989 309.88018 Tm
+ -0.00149 Tc
+ 0.22149 Tw
+ ( i)Tj [-3.69999 ]TJ (s)Tj [-2.29998 ]TJ ( defi)Tj [-3.69999 ]TJ (n)Tj [-11.5 ]TJ (e)Tj [2.29998 ]TJ (d, a t)Tj [-13.69999 ]TJ (r)Tj [-8.5 ]TJ (ace o)Tj [-11.5 ]TJ (f)Tj [1.5 ]TJ ( r)Tj [-8.5 ]TJ (e)Tj [2.29998 ]TJ (duct)Tj [-3.69999 ]TJ (i)Tj [-3.69999 ]TJ (ons, b)Tj [-21.5 ]TJ (y)Tj [18.5 ]TJ ( l)Tj [-3.69999 ]TJ (i)Tj [-13.69999 ]TJ (ne num)Tj [-3.69999 ]TJ (ber, i)Tj [-3.69999 ]TJ (s)Tj [-2.29998 ]TJ ( )Tj 
+ -13.25 -1.18998 TD
+ 0.00079 Tc
+ 0 Tw
+ (displa)Tj [-5.39999 ]TJ (y)Tj [20.79998 ]TJ (e)Tj [4.59999 ]TJ (d. )Tj 
+ /N173 1 Tf
+ 11.03909 0 0 11.03909 126.03019 271.12339 Tm
+ -0.00219 Tc
+ (%{)Tj 
+ 0 -1.13038 TD
+ (#ifdef)Tj [-597.89999 ]TJ (DEBUG)Tj 
+ T*
+ (#define)Tj [-597.89999 ]TJ (TRACE)Tj [-597.89999 ]TJ (printf\("reduce)Tj [-597.89999 ]TJ (at)Tj [-597.89999 ]TJ (line)Tj [-597.89999 ]TJ (%d\\n",)Tj [-597.89999 ]TJ (__LINE__\);)Tj 
+ 0 -1.11959 TD
+ (#else)Tj 
+ 0 -1.13038 TD
+ (#define)Tj [-597.89999 ]TJ (TRACE)Tj 
+ T*
+ (#endif)Tj 
+ T*
+ (%})Tj 
+ 0 -2.26089 TD
+ (%%)Tj 
+ 0 -2.25 TD
+ (statement_list:)Tj 
+ 5.97828 -1.13038 TD
+ (statement)Tj 
+ 3.58699 -1.13038 TD
+ ({)Tj [-597.89999 ]TJ (TRACE)Tj [-597.89999 ]TJ ($$)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ ($1;)Tj [-597.89999 ]TJ (})Tj 
+ -4.78259 -1.13038 TD
+ (|)Tj [-597.89999 ]TJ (statement_list)Tj [-597.89999 ]TJ (statement)Tj 
+ 4.78259 -1.13038 TD
+ ({)Tj [-597.89999 ]TJ (TRACE)Tj [-597.89999 ]TJ ($$)Tj [-597.89999 ]TJ (=)Tj [-597.89999 ]TJ (newNode\(';',)Tj [-597.69999 ]TJ (2,)Tj [-597.89999 ]TJ ($1,)Tj [-597.89999 ]TJ ($2\);)Tj [-597.89999 ]TJ (})Tj 
+ -4.78259 -1.13038 TD
+ 0 Tc
+ (;)Tj 
+ ET
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Page: 39 39
+ %%BeginPageSetup
+ userdict /pgsave save put
+ % Removing the following ten lines is illegal, subject to the Digital Copyright Act of 1998.
+ currentfile eexec
+ 087329a1c14f91c06b1beed88c3a017a57dc55b72c277c307a6dad3699d3
+ 7e17892296d7d6c6922fa0c5f42f128b79df36afc85b6fdb03e144d6ef74
+ 3ecd328b687f222274a77d79e6c485ff08bdbc5e61ca58e5c125176d5974
+ d0f16615e05ffaca44ab3a1e4ffb6c21823f8babbdadc183c8217b8b402d
+ 20f939f69910daf2801ce82493f35f170d31fcd898c4fe7cf03596daac2d
+ 55e0f71e44cd5c1f3dc3132f073c6a34973eab3171fb86168707f4e5c16b
+ e2ad87cdaf9ae7089ff83e958e17d6e20ee05dee82af02015d8cedea1ebb
+ 86284aa7
+ exec
+ 0 0 612 792 true PDF begin PDFVars begin AS end end
+ %%EndPageSetup
+ 0 0 612 792 RC
+ save
+ BT
+ /N231 1 Tf
+ 11.99899 0 0 11.99899 90.03318 39.06278 Tm
+ /N224 /ColorSpace findRes cs
+ 0 0 0 sc
+ /N232 /ExtGState findRes gsDI
+ 0 Tc
+ 17.25 Tw
+ ( 39)Tj 
+ /N223 1 Tf
+ 17.99848 0 0 17.99848 90.03318 703.44738 Tm
+ 0.00149 Tc
+ 0.48728 Tw
+ (7)Tj [4.29998 ]TJ (.)Tj [-0.69999 ]TJ ( Biblio)Tj [5.69999 ]TJ (gra)Tj [4.29998 ]TJ (phy)Tj [11 ]TJ ( )Tj 
+ ET
+ 
+ 88.59298 698.28799 434.84399 -0.47999 rf
+ BT
+ /N170 1 Tf
+ 11.99899 0 0 11.99899 90.03318 681.00929 Tm
+ -0.00219 Tc
+ 0 Tw
+ (Ah)Tj [-6.09999 ]TJ (o)Tj 
+ /N231 1 Tf
+ 1.77999 0 TD
+ -0.00048 Tc
+ 0.33049 Tw
+ (, Alfred)Tj [-10.5 ]TJ ( V., Ravi)Tj [-12.69999 ]TJ ( )Tj [-10 ]TJ (Sethi and J)Tj [-11.29998 ]TJ (e)Tj [3.29998 ]TJ (ffre)Tj [-16.69999 ]TJ (y)Tj [19.5 ]TJ ( )Tj [-10 ]TJ (D. )Tj [-10 ]TJ (Ullman [)Tj [-7.5 ]TJ (1986])Tj [-7.5 ]TJ (. )Tj 
+ 0 0 1 sc
+ 24.97999 0 TD
+ 0.00149 Tc
+ 0.32849 Tw
+ (Compi)Tj [9.29998 ]TJ (l)Tj [9.29998 ]TJ (e)Tj [5.29998 ]TJ (r)Tj [4.5 ]TJ (s)Tj [0.69999 ]TJ (, Pr)Tj [4.5 ]TJ (inic)Tj [5.29998 ]TJ (ple)Tj [5.29998 ]TJ (s)Tj [0.69999 ]TJ (,)Tj [-8.5 ]TJ ( )Tj 
+ ET
+ 411.12599 679.68899 110.87098 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 90.03318 667.21038 Tm
+ -0.00059 Tc
+ 0.00059 Tw
+ (Techniques and Tools)Tj 
+ ET
+ 90.03298 665.89099 105.83099 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 195.86428 667.21038 Tm
+ 0 0 0 sc
+ -0.00009 Tc
+ 0.00009 Tw
+ (. A)Tj [-7.89999 ]TJ (ddison-W)Tj [-6.29998 ]TJ (e)Tj [3.69999 ]TJ (sle)Tj [-6.29998 ]TJ (y)Tj [19.89999 ]TJ (, Readin)Tj [-10.09999 ]TJ (g)Tj [9.89999 ]TJ (,)Tj [-10.09999 ]TJ ( Massachusetts. )Tj 
+ -8.81999 -1.14999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N170 1 Tf
+ T*
+ 0.00389 Tc
+ (G)Tj [11.69999 ]TJ (a)Tj [3.89999 ]TJ (r)Tj [7.69999 ]TJ (dne)Tj [7.69999 ]TJ (r)Tj 
+ /N231 1 Tf
+ 3.70999 0 TD
+ -0.00009 Tc
+ 0.07998 Tw
+ (,)Tj [-10.09999 ]TJ ( J)Tj [-10.89999 ]TJ (im, Chris Ret)Tj [7.69999 ]TJ (t)Tj [-2.29998 ]TJ (erath and)Tj [-10.09999 ]TJ ( Eric)Tj [-6.29998 ]TJ ( Gisin [)Tj [-7.09999 ]TJ (1988])Tj [-7.09999 ]TJ (. MKS )Tj [-10.09999 ]TJ (L)Tj [20.69999 ]TJ (e)Tj [3.69999 ]TJ (x)Tj [-10.09999 ]TJ ( )Tj [-10.09999 ]TJ (&)Tj [7.69999 ]TJ ( Y)Tj [-7.89999 ]TJ (acc)Tj 
+ ET
+ 358.33099 638.29299 90.47198 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 448.80329 639.61268 Tm
+ -0.00248 Tc
+ 0.09249 Tw
+ (.)Tj [-12.5 ]TJ ( Mort)Tj [-4.69999 ]TJ (i)Tj [-4.69999 ]TJ (ce )Tj [10 ]TJ (K)Tj [-10.29998 ]TJ (e)Tj [1.29998 ]TJ (rn)Tj [-12.5 ]TJ ( )Tj 
+ -29.89999 -1.14999 TD
+ -0.00048 Tc
+ 0.01049 Tw
+ (S)Tj [-14.39999 ]TJ (y)Tj [19.5 ]TJ (stems I)Tj [12.5 ]TJ (n)Tj [-0.5 ]TJ (c., )Tj [10 ]TJ (W)Tj [-6.69999 ]TJ (a)Tj [3.29998 ]TJ (terloo, Ontario, )Tj [10 ]TJ (Canada. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N170 1 Tf
+ T*
+ 0.00119 Tc
+ (Johnson)Tj 
+ /N231 1 Tf
+ 3.56999 0 TD
+ 0.00009 Tc
+ 0.00988 Tw
+ (, Stephen )Tj [-10 ]TJ (C. [)Tj [-6.89999 ]TJ (1)Tj [0.09999 ]TJ (9)Tj [10.09999 ]TJ (75])Tj [-6.89999 ]TJ (. )Tj 
+ 0 0 1 sc
+ 8.36999 0 TD
+ -0.00239 Tc
+ 0.02239 Tw
+ (Yacc:)Tj [-4.59999 ]TJ ( Yet)Tj [-4.59999 ]TJ ( Anot)Tj [-4.59999 ]TJ (her C)Tj [-5.39999 ]TJ (o)Tj [-2.39999 ]TJ (m)Tj [-4.59999 ]TJ (p)Tj [-2.39999 ]TJ (i)Tj [-4.59999 ]TJ (l)Tj [-4.59999 ]TJ (e)Tj [1.39999 ]TJ (r C)Tj [-5.39999 ]TJ (o)Tj [-2.39999 ]TJ (m)Tj [-4.59999 ]TJ (p)Tj [-2.39999 ]TJ (i)Tj [-4.59999 ]TJ (l)Tj [-4.59999 ]TJ (e)Tj [1.39999 ]TJ (r)Tj 
+ ET
+ 233.30099 596.89599 188.02398 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 421.32559 598.21618 Tm
+ 0 0 0 sc
+ 0.00209 Tc
+ 0.01789 Tw
+ (. Co)Tj [12.09999 ]TJ (mputing)Tj [12.09999 ]TJ ( Sc)Tj [5.89999 ]TJ (ie)Tj [5.89999 ]TJ (nc)Tj [5.89999 ]TJ (e )Tj 
+ -27.60998 -1.14999 TD
+ 0.00059 Tc
+ 0.07939 Tw
+ (Te)Tj [4.39999 ]TJ (c)Tj [4.39999 ]TJ (hnic)Tj [4.39999 ]TJ (a)Tj [4.39999 ]TJ (l)Tj [-1.59999 ]TJ ( Re)Tj [4.39999 ]TJ (por)Tj [3.59999 ]TJ (t No. 32)Tj [-9.39999 ]TJ (, B)Tj [7.59999 ]TJ (e)Tj [4.39999 ]TJ (ll )Tj [-10 ]TJ (L)Tj [11.39999 ]TJ (a)Tj [4.39999 ]TJ (bor)Tj [3.59999 ]TJ (a)Tj [4.39999 ]TJ (t)Tj [-1.59999 ]TJ (or)Tj [3.59999 ]TJ (i)Tj [-11.59999 ]TJ (e)Tj [4.39999 ]TJ (s, Murr)Tj [3.59999 ]TJ (a)Tj [-15.59999 ]TJ (y)Tj [30.59999 ]TJ ( hill, Ne)Tj [4.39999 ]TJ (w J)Tj [-10.19999 ]TJ (e)Tj [4.39999 ]TJ (r)Tj [3.59999 ]TJ (s)Tj [-0.19999 ]TJ (e)Tj [-15.59999 ]TJ (y)Tj [20.59999 ]TJ (. A )Tj [-10 ]TJ (PDF)Tj [6.69999 ]TJ ( ve)Tj [4.39999 ]TJ (r)Tj [3.59999 ]TJ (s)Tj [-0.19999 ]TJ (ion is)Tj [9.79998 ]TJ ( )Tj 
+ T*
+ -0.00228 Tc
+ 0.00228 Tw
+ (avai)Tj [-4.5 ]TJ (l)Tj [-4.5 ]TJ (a)Tj [1.5 ]TJ (bl)Tj [-4.5 ]TJ (e at)Tj [-4.5 ]TJ ( eP)Tj [-6.19999 ]TJ (ap)Tj [-12.29998 ]TJ (erP)Tj [-6.19999 ]TJ (r)Tj [0.69999 ]TJ (ess.)Tj [-12.19999 ]TJ ( )Tj 
+ /N170 1 Tf
+ 0 -1.16999 TD
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ 0 -1.12998 TD
+ 0.00178 Tc
+ (Le)Tj [5.59999 ]TJ (sk, )Tj 
+ /N231 1 Tf
+ 2.68998 0 TD
+ 0.00019 Tc
+ 0.12979 Tw
+ (M. E. and E. Sch)Tj [-9.79998 ]TJ (midt [)Tj [-6.79998 ]TJ (1975)Tj [10.19999 ]TJ (])Tj [-6.79998 ]TJ (.)Tj [0.19999 ]TJ ( )Tj 
+ 0 0 1 sc
+ 12.84999 0 TD
+ -0.00239 Tc
+ 0.13238 Tw
+ (L)Tj [8.39999 ]TJ (e)Tj [1.39999 ]TJ (x)Tj [-12.39999 ]TJ ( \226 A )Tj [-10 ]TJ (L)Tj [8.39999 ]TJ (e)Tj [1.39999 ]TJ (x)Tj [-12.39999 ]TJ (i)Tj [-4.59999 ]TJ (cal)Tj [-4.59999 ]TJ ( Anal)Tj [-14.59999 ]TJ (y)Tj [17.59999 ]TJ (z)Tj [-8.59999 ]TJ (er )Tj [-10 ]TJ (Gene)Tj [-8.59999 ]TJ (rat)Tj [-14.59999 ]TJ (o)Tj [-2.39999 ]TJ (r)Tj 
+ ET
+ 276.49798 541.70098 183.94499 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 460.44229 543.02079 Tm
+ 0 0 0 sc
+ 0.00099 Tc
+ 0.12899 Tw
+ (. Computing)Tj [11 ]TJ ( )Tj 
+ -30.86999 -1.14999 TD
+ -0.00048 Tc
+ 0.13049 Tw
+ (Science Te)Tj [-6.69999 ]TJ (chnical Repo)Tj [-10.5 ]TJ (rt No. 39, B)Tj [6.5 ]TJ (e)Tj [3.29998 ]TJ (ll )Tj [-10 ]TJ (L)Tj [10.29998 ]TJ (a)Tj [3.29998 ]TJ (borato)Tj [-10.5 ]TJ (r)Tj [2.5 ]TJ (ies, Murra)Tj [-16.69999 ]TJ (y)Tj [19.5 ]TJ ( Hill, New )Tj [-10 ]TJ (J)Tj [-11.29998 ]TJ (e)Tj [3.29998 ]TJ (rse)Tj [-6.69999 ]TJ (y)Tj [19.5 ]TJ (. A PDF )Tj 
+ T*
+ -0.00178 Tc
+ 0.00178 Tw
+ (versi)Tj [-4 ]TJ (on i)Tj [-4 ]TJ (s)Tj [-2.59999 ]TJ ( avai)Tj [-4 ]TJ (l)Tj [-4 ]TJ (a)Tj [2 ]TJ (bl)Tj [-4 ]TJ (e at)Tj [-4 ]TJ ( )Tj [-10 ]TJ (eP)Tj [-5.69999 ]TJ (aperP)Tj [-5.69999 ]TJ (r)Tj [1.19999 ]TJ (ess. )Tj 
+ T*
+ 0 Tc
+ 0 Tw
+ ( )Tj 
+ /N170 1 Tf
+ T*
+ 0.00268 Tc
+ (Le)Tj [6.5 ]TJ (vine)Tj 
+ /N231 1 Tf
+ 2.88999 0 TD
+ -0.00019 Tc
+ 0.27018 Tw
+ (, J)Tj [-11 ]TJ (ohn )Tj [10 ]TJ (R., Ton)Tj [-10.19999 ]TJ (y)Tj [9.79998 ]TJ ( Mason and Dou)Tj [-10.19999 ]TJ (g)Tj [9.79998 ]TJ ( Bro)Tj [-10.19999 ]TJ (w)Tj [2 ]TJ (n [)Tj [-7.19999 ]TJ (1992])Tj [-7.19999 ]TJ (. )Tj 
+ 0 0 1 sc
+ 22.13999 0 TD
+ -0.02079 Tc
+ 0.29078 Tw
+ (Le)Tj [-17 ]TJ (x)Tj [-30.79998 ]TJ ( &)Tj [-13 ]TJ ( Y)Tj [-28.59999 ]TJ (a)Tj [-17 ]TJ (c)Tj [-27 ]TJ (c)Tj 
+ ET
+ 390.36799 486.50498 64.91499 -0.59999 rf
+ BT
+ 11.99899 0 0 11.99899 455.28269 487.82539 Tm
+ 0 0 0 sc
+ 0.00088 Tc
+ 0.26908 Tw
+ (. O\222)Tj [3.89999 ]TJ (Re)Tj [4.69999 ]TJ (ill)Tj [-11.29998 ]TJ (y)Tj [20.89999 ]TJ ( )Tj [-10 ]TJ (&)Tj [8.69999 ]TJ ( )Tj 
+ -30.43998 -1.14999 TD
+ -0.00028 Tc
+ 0.00028 Tw
+ (Associates, )Tj [-10 ]TJ (I)Tj [12.69999 ]TJ (n)Tj [-0.29998 ]TJ (c. Seb)Tj [-10.29998 ]TJ (a)Tj [3.5 ]TJ (stop)Tj [-10.29998 ]TJ (ol, California. )Tj 
+ ET
+ restore
+ PDFVars/TermAll get exec end end
+ userdict /pgsave get restore
+ showpage
+ %%PageTrailer
+ %%EndPage
+ %%Trailer
+ %%DocumentProcessColors: Cyan Magenta Yellow Black
+ %%DocumentNeededResources:
+ %%+ font Courier-Oblique
+ %%+ font Courier
+ %%+ font Courier-Bold
+ %%+ font Courier-BoldOblique
+ %%+ font Symbol
+ %%DocumentSuppliedResources:
+ %%+ font TimesNewRomanPS-ItalicMT
+ %%+ font Arial-ItalicMT
+ %%+ font TimesNewRomanPSMT
+ %%+ font TimesNewRomanPS-BoldMT
+ %%+ font ArialMT
+ %%+ font Arial-BoldMT
+ %%+ procset (Adobe Acrobat - PDF operators) 1.2 0
+ %%+ procset (Adobe Acrobat - type operators) 1.2 0
+ %%+ procset (Adobe Acrobat - general image support) 1.2 0
+ %%+ procset (Adobe Acrobat - monochrome image support) 1.2 0
+ %%+ procset (Adobe Acrobat - color image support) 1.2 0
+ %%+ procset (Adobe Acrobat - indexed color image support) 1.2 0
+ %%EOF


ossp-adm/autotools/libtool.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,7077 ----
+ <HTML>
+ <HEAD>
+ <!-- Created by texi2html 1.56k from libtool.texi on 10 July 2002 -->
+ 
+ <TITLE>Libtool</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>GNU Libtool</H1>
+ <H2>For version 1.4.2, 10 September 2001</H2>
+ <ADDRESS>Gordon Matzigkeit</ADDRESS>
+ <ADDRESS>Alexandre Oliva</ADDRESS>
+ <ADDRESS>Thomas Tanner</ADDRESS>
+ <ADDRESS>Gary V. Vaughan</ADDRESS>
+ <P>
+ <P><HR><P>
+ 
+ <P>
+ @dircategory GNU programming tools
+ * Libtool: (libtool).           Generic shared library support script.
+ 
+ 
+ <P>
+ @dircategory Individual utilities
+ * libtoolize: (libtool)Invoking libtoolize.     Adding libtool support.
+ 
+ 
+ <P>
+ Copyright (C) 1996-2000 Free Software Foundation, Inc.
+ 
+ 
+ <P>
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the no Invariant Sections, with no Front-Cover Texts,
+ and with no Back-Cover Texts.  A copy of the license is included in
+ the section entitled "GNU Free Documentation License".
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC1" HREF="libtool_toc.html#TOC1">Introduction</A></H1>
+ 
+ <P>
+ In the past, if a source code package developer wanted to take advantage
+ of the power of shared libraries, he needed to write custom support code
+ for each platform on which his package ran.  He also had to design a
+ configuration interface so that the package installer could choose what sort of
+ libraries were built.
+ 
+ 
+ <P>
+ GNU Libtool simplifies the developer's job by encapsulating both the
+ platform-specific dependencies, and the user interface, in a single
+ script.  GNU Libtool is designed so that the complete functionality of
+ each host type is available via a generic interface, but nasty quirks
+ are hidden from the programmer.
+ 
+ 
+ <P>
+ GNU Libtool's consistent interface is reassuring... users don't need
+ to read obscure documentation in order to have their favorite source
+ package build shared libraries.  They just run your package
+ <CODE>configure</CODE> script (or equivalent), and libtool does all the dirty
+ work.
+ 
+ 
+ <P>
+ There are several examples throughout this document.  All assume the
+ same environment: we want to build a library, <TT>`libhello'</TT>, in a
+ generic way.
+ 
+ 
+ <P>
+ <TT>`libhello'</TT> could be a shared library, a static library, or
+ both... whatever is available on the host system, as long as libtool
+ has been ported to it.
+ 
+ 
+ <P>
+ This chapter explains the original design philosophy of libtool.  Feel
+ free to skip to the next chapter, unless you are interested in history,
+ or want to write code to extend libtool in a consistent way.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC2" HREF="libtool_toc.html#TOC2">Motivation for writing libtool</A></H2>
+ 
+ <P>
+ <A NAME="IDX1"></A>
+ <A NAME="IDX2"></A>
+ Since early 1995, several different GNU developers have recognized the
+ importance of having shared library support for their packages.  The
+ primary motivation for such a change is to encourage modularity and
+ reuse of code (both conceptually and physically) in GNU programs.
+ 
+ 
+ <P>
+ Such a demand means that the way libraries are built in GNU packages
+ needs to be general, to allow for any library type the package installer
+ might want.  The problem is compounded by the absence of a standard
+ procedure for creating shared libraries on different platforms.
+ 
+ 
+ <P>
+ The following sections outline the major issues facing shared library
+ support in GNU, and how shared library support could be standardized
+ with libtool.
+ 
+ 
+ <P>
+ <A NAME="IDX3"></A>
+ <A NAME="IDX4"></A>
+ The following specifications were used in developing and evaluating this
+ system:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ The system must be as elegant as possible.
+ 
+ <LI>
+ 
+ The system must be fully integrated with the GNU Autoconf and Automake
+ utilities, so that it will be easy for GNU maintainers to use.  However,
+ the system must not require these tools, so that it can be used by
+ non-GNU packages.
+ 
+ <LI>
+ 
+ Portability to other (non-GNU) architectures and tools is desirable.
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC3" HREF="libtool_toc.html#TOC3">Implementation issues</A></H2>
+ 
+ <P>
+ <A NAME="IDX5"></A>
+ <A NAME="IDX6"></A>
+ The following issues need to be addressed in any reusable shared library
+ system, specifically libtool:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ The package installer should be able to control what sort of libraries
+ are built.
+ 
+ <LI>
+ 
+ It can be tricky to run dynamically linked programs whose libraries have
+ not yet been installed.  <CODE>LD_LIBRARY_PATH</CODE> must be set properly (if
+ it is supported), or programs fail to run.
+ 
+ <LI>
+ 
+ The system must operate consistently even on hosts which don't support
+ shared libraries.
+ 
+ <LI>
+ 
+ The commands required to build shared libraries may differ wildly from
+ host to host.  These need to be determined at configure time in
+ a consistent way.
+ 
+ <LI>
+ 
+ It is not always obvious with which suffix a shared library should be
+ installed.  This makes it difficult for <TT>`Makefile'</TT> rules, since they
+ generally assume that file names are the same from host to host.
+ 
+ <LI>
+ 
+ The system needs a simple library version number abstraction, so that
+ shared libraries can be upgraded in place.  The programmer should be
+ informed how to design the interfaces to the library to maximize binary
+ compatibility.
+ 
+ <LI>
+ 
+ The install <TT>`Makefile'</TT> target should warn the package installer to set
+ the proper environment variables (<CODE>LD_LIBRARY_PATH</CODE> or equivalent),
+ or run <CODE>ldconfig</CODE>.
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC4" HREF="libtool_toc.html#TOC4">Other implementations</A></H2>
+ 
+ <P>
+ Even before libtool was developed, many free software packages built and
+ installed their own shared libraries.  At first, these packages were
+ examined to avoid reinventing existing features.
+ 
+ 
+ <P>
+ Now it is clear that none of these packages have documented the details
+ of shared library systems that libtool requires.  So, other packages
+ have been more or less abandoned as influences.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC5" HREF="libtool_toc.html#TOC5">A postmortem analysis of other implementations</A></H2>
+ 
+ <P>
+ <A NAME="IDX7"></A>
+ <A NAME="IDX8"></A>
+ In all fairness, each of the implementations that were examined do the
+ job that they were intended to do, for a number of different host
+ systems.  However, none of these solutions seem to function well as a
+ generalized, reusable component.
+ 
+ 
+ <P>
+ <A NAME="IDX9"></A>
+ Most were too complex to use (much less modify) without understanding
+ exactly what the implementation does, and they were generally not
+ documented.
+ 
+ 
+ <P>
+ The main difficulty is that different vendors have different views of
+ what libraries are, and none of the packages which were examined seemed
+ to be confident enough to settle on a single paradigm that just
+ <EM>works</EM>.
+ 
+ 
+ <P>
+ Ideally, libtool would be a standard that would be implemented as series
+ of extensions and modifications to existing library systems to make them
+ work consistently.  However, it is not an easy task to convince
+ operating system developers to mend their evil ways, and people want to
+ build shared libraries right now, even on buggy, broken, confused
+ operating systems.
+ 
+ 
+ <P>
+ For this reason, libtool was designed as an independent shell script.
+ It isolates the problems and inconsistencies in library building that
+ plague <TT>`Makefile'</TT> writers by wrapping the compiler suite on
+ different platforms with a consistent, powerful interface.
+ 
+ 
+ <P>
+ With luck, libtool will be useful to and used by the GNU community, and
+ that the lessons that were learned in writing it will be taken up by
+ designers of future library systems.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC6" HREF="libtool_toc.html#TOC6">The libtool paradigm</A></H1>
+ 
+ <P>
+ At first, libtool was designed to support an arbitrary number of library
+ object types.  After libtool was ported to more platforms, a new
+ paradigm gradually developed for describing the relationship between
+ libraries and programs.
+ 
+ 
+ <P>
+ <A NAME="IDX10"></A>
+ <A NAME="IDX11"></A>
+ In summary, "libraries are programs with multiple entry points, and
+ more formally defined interfaces."
+ 
+ 
+ <P>
+ Version 0.7 of libtool was a complete redesign and rewrite of libtool to
+ reflect this new paradigm.  So far, it has proved to be successful:
+ libtool is simpler and more useful than before.
+ 
+ 
+ <P>
+ The best way to introduce the libtool paradigm is to contrast it with
+ the paradigm of existing library systems, with examples from each.  It
+ is a new way of thinking, so it may take a little time to absorb, but
+ when you understand it, the world becomes simpler.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC7" HREF="libtool_toc.html#TOC7">Using libtool</A></H1>
+ 
+ <P>
+ <A NAME="IDX12"></A>
+ <A NAME="IDX13"></A>
+ It makes little sense to talk about using libtool in your own packages
+ until you have seen how it makes your life simpler.  The examples in
+ this chapter introduce the main features of libtool by comparing the
+ standard library building procedure to libtool's operation on two
+ different platforms:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`a23'</SAMP>
+ <DD>
+ An Ultrix 4.2 platform with only static libraries.
+ 
+ <DT><SAMP>`burger'</SAMP>
+ <DD>
+ A NetBSD/i386 1.2 platform with shared libraries.
+ </DL>
+ 
+ <P>
+ You can follow these examples on your own platform, using the
+ preconfigured libtool script that was installed with libtool
+ (see section <A HREF="libtool.html#SEC26">Configuring libtool</A>).
+ 
+ 
+ <P>
+ Source files for the following examples are taken from the <TT>`demo'</TT>
+ subdirectory of the libtool distribution.  Assume that we are building a
+ library, <TT>`libhello'</TT>, out of the files <TT>`foo.c'</TT> and
+ <TT>`hello.c'</TT>.
+ 
+ 
+ <P>
+ Note that the <TT>`foo.c'</TT> source file uses the <CODE>cos</CODE> math library
+ function, which is usually found in the standalone math library, and not
+ the C library (see section `Trigonometric Functions' in <CITE>The GNU C Library Reference Manual</CITE>).  So, we need to add <KBD>-lm</KBD> to
+ the end of the link line whenever we link <TT>`foo.o'</TT> or <TT>`foo.lo'</TT>
+ into an executable or a library (see section <A HREF="libtool.html#SEC39">Inter-library dependencies</A>).
+ 
+ 
+ <P>
+ The same rule applies whenever you use functions that don't appear in
+ the standard C library... you need to add the appropriate
+ <KBD>-l<VAR>name</VAR></KBD> flag to the end of the link line when you link
+ against those objects.
+ 
+ 
+ <P>
+ After we have built that library, we want to create a program by linking
+ <TT>`main.o'</TT> against <TT>`libhello'</TT>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC8" HREF="libtool_toc.html#TOC8">Creating object files</A></H2>
+ 
+ <P>
+ <A NAME="IDX14"></A>
+ <A NAME="IDX15"></A>
+ To create an object file from a source file, the compiler is invoked
+ with the `-c' flag (and any other desired flags):
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gcc -g -O -c main.c</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ The above compiler command produces an object file, <TT>`main.o'</TT>, from
+ the source file <TT>`main.c'</TT>.
+ 
+ 
+ <P>
+ For most library systems, creating object files that become part of a
+ static library is as simple as creating object files that are linked to
+ form an executable:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gcc -g -O -c foo.c</KBD>
+ burger$ <KBD>gcc -g -O -c hello.c</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX16"></A>
+ <A NAME="IDX17"></A>
+ Shared libraries, however, may only be built from
+ <EM>position-independent code</EM> (PIC).  So, special flags must be passed
+ to the compiler to tell it to generate PIC rather than the standard
+ position-dependent code.
+ 
+ 
+ <P>
+ <A NAME="IDX18"></A>
+ <A NAME="IDX19"></A>
+ <A NAME="IDX20"></A>
+ Since this is a library implementation detail, libtool hides the
+ complexity of PIC compiler flags by using separate library object files
+ (which end in <SAMP>`.lo'</SAMP> instead of <SAMP>`.o'</SAMP>).  On systems without shared
+ libraries (or without special PIC compiler flags), these library object
+ files are identical to "standard" object files.
+ 
+ 
+ <P>
+ To create library object files for <TT>`foo.c'</TT> and <TT>`hello.c'</TT>,
+ simply invoke libtool with the standard compilation command as
+ arguments (see section <A HREF="libtool.html#SEC16">Compile mode</A>):
+ 
+ 
+ 
+ <PRE>
+ a23$ <KBD>libtool gcc -g -O -c foo.c</KBD>
+ gcc -g -O -c foo.c
+ echo timestamp &#62; foo.lo
+ a23$ <KBD>libtool gcc -g -O -c hello.c</KBD>
+ gcc -g -O -c hello.c
+ echo timestamp &#62; hello.lo
+ a23$
+ </PRE>
+ 
+ <P>
+ Note that libtool creates two files for each invocation.  The <SAMP>`.lo'</SAMP>
+ file is a library object, which may be built into a shared library, and
+ the <SAMP>`.o'</SAMP> file is a standard object file.  On <SAMP>`a23'</SAMP>, the
+ library objects are just timestamps, because only static libraries are
+ supported.
+ 
+ 
+ <P>
+ On shared library systems, libtool automatically inserts the PIC
+ generation flags into the compilation command, so that the library
+ object and the standard object differ:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -g -O -c foo.c</KBD>
+ gcc -g -O -c -fPIC -DPIC foo.c
+ mv -f foo.o foo.lo
+ gcc -g -O -c foo.c &#62;/dev/null 2&#62;&#38;1
+ burger$ <KBD>libtool gcc -g -O -c hello.c</KBD>
+ gcc -g -O -c -fPIC -DPIC hello.c
+ mv -f hello.o hello.lo
+ gcc -g -O -c hello.c &#62;/dev/null 2&#62;&#38;1
+ burger$
+ </PRE>
+ 
+ <P>
+ Notice that the second run of GCC has its output discarded.  This is
+ done so that compiler warnings aren't annoyingly duplicated.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC9" HREF="libtool_toc.html#TOC9">Linking libraries</A></H2>
+ 
+ <P>
+ <A NAME="IDX21"></A>
+ Without libtool, the programmer would invoke the <CODE>ar</CODE> command to
+ create a static library:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>ar cru libhello.a hello.o foo.o</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX22"></A>
+ But of course, that would be too simple, so many systems require that
+ you run the <CODE>ranlib</CODE> command on the resulting library (to give it
+ better karma, or something):
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>ranlib libhello.a</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ It seems more natural to use the C compiler for this task, given
+ libtool's "libraries are programs" approach.  So, on platforms without
+ shared libraries, libtool simply acts as a wrapper for the system
+ <CODE>ar</CODE> (and possibly <CODE>ranlib</CODE>) commands.
+ 
+ 
+ <P>
+ <A NAME="IDX23"></A>
+ <A NAME="IDX24"></A>
+ Again, the libtool library name differs from the standard name (it has a
+ <SAMP>`.la'</SAMP> suffix instead of a <SAMP>`.a'</SAMP> suffix).  The arguments to libtool are
+ the same ones you would use to produce an executable named
+ <TT>`libhello.la'</TT> with your compiler (see section <A HREF="libtool.html#SEC17">Link mode</A>):
+ 
+ 
+ 
+ <PRE>
+ a23$ <KBD>libtool gcc -g -O -o libhello.la foo.o hello.o</KBD>
+ libtool: cannot build libtool library `libhello.la' from non-libtool \
+                 objects
+ a23$
+ </PRE>
+ 
+ <P>
+ Aha!  Libtool caught a common error... trying to build a library
+ from standard objects instead of library objects.  This doesn't matter
+ for static libraries, but on shared library systems, it is of great
+ importance.
+ 
+ 
+ <P>
+ So, let's try again, this time with the library object files.  Remember
+ also that we need to add <KBD>-lm</KBD> to the link command line because
+ <TT>`foo.c'</TT> uses the <CODE>cos</CODE> math library function (see section <A HREF="libtool.html#SEC7">Using libtool</A>).
+ 
+ 
+ <P>
+ Another complication in building shared libraries is that we need to
+ specify the path to the directory in which they (eventually) will be
+ installed (in this case, <TT>`/usr/local/lib'</TT>)<A NAME="DOCF1" HREF="libtool_foot.html#FOOT1">(1)</A>:
+ 
+ 
+ 
+ <PRE>
+ a23$ <KBD>libtool gcc -g -O -o libhello.la foo.lo hello.lo \
+                 -rpath /usr/local/lib -lm</KBD>
+ mkdir .libs
+ ar cru .libs/libhello.a foo.o hello.o
+ ranlib .libs/libhello.a
+ creating libhello.la
+ a23$
+ </PRE>
+ 
+ <P>
+ Now, let's try the same trick on the shared library platform:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -g -O -o libhello.la foo.lo hello.lo \
+                 -rpath /usr/local/lib -lm</KBD>
+ mkdir .libs
+ ld -Bshareable -o .libs/libhello.so.0.0 foo.lo hello.lo -lm
+ ar cru .libs/libhello.a foo.o hello.o
+ ranlib .libs/libhello.a
+ creating libhello.la
+ burger$
+ </PRE>
+ 
+ <P>
+ Now that's significantly cooler... libtool just ran an obscure
+ <CODE>ld</CODE> command to create a shared library, as well as the static
+ library.
+ 
+ 
+ <P>
+ <A NAME="IDX25"></A>
+ Note how libtool creates extra files in the <TT>`.libs'</TT>
+ subdirectory, rather than the current directory.  This feature is to
+ make it easier to clean up the build directory, and to help ensure that
+ other programs fail horribly if you accidentally forget to use libtool
+ when you should.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC10" HREF="libtool_toc.html#TOC10">Linking executables</A></H2>
+ 
+ <P>
+ <A NAME="IDX26"></A>
+ If you choose at this point to <EM>install</EM> the library (put it in a
+ permanent location) before linking executables against it, then you
+ don't need to use libtool to do the linking.  Simply use the appropriate
+ <SAMP>`-L'</SAMP> and <SAMP>`-l'</SAMP> flags to specify the library's location.
+ 
+ 
+ <P>
+ <A NAME="IDX27"></A>
+ Some system linkers insist on encoding the full directory name of each
+ shared library in the resulting executable.  Libtool has to work around
+ this misfeature by special magic to ensure that only permanent directory
+ names are put into installed executables.
+ 
+ 
+ <P>
+ <A NAME="IDX28"></A>
+ <A NAME="IDX29"></A>
+ The importance of this bug must not be overlooked: it won't cause
+ programs to crash in obvious ways.  It creates a security hole,
+ and possibly even worse, if you are modifying the library source code
+ after you have installed the package, you will change the behaviour of
+ the installed programs!
+ 
+ 
+ <P>
+ So, if you want to link programs against the library before you install
+ it, you must use libtool to do the linking.
+ 
+ 
+ <P>
+ <A NAME="IDX30"></A>
+ Here's the old way of linking against an uninstalled library:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gcc -g -O -o hell.old main.o libhello.a -lm</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ Libtool's way is almost the same<A NAME="DOCF2" HREF="libtool_foot.html#FOOT2">(2)</A>
+ (see section <A HREF="libtool.html#SEC17">Link mode</A>):
+ 
+ 
+ 
+ <PRE>
+ a23$ <KBD>libtool gcc -g -O -o hell main.o libhello.la -lm</KBD>
+ gcc -g -O -o hell main.o ./.libs/libhello.a -lm
+ a23$
+ </PRE>
+ 
+ <P>
+ That looks too simple to be true.  All libtool did was transform
+ <TT>`libhello.la'</TT> to <TT>`./.libs/libhello.a'</TT>, but remember
+ that <SAMP>`a23'</SAMP> has no shared libraries.
+ 
+ 
+ <P>
+ On <SAMP>`burger'</SAMP> the situation is different:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -g -O -o hell main.o libhello.la -lm</KBD>
+ gcc -g -O -o .libs/hell main.o -L./.libs -R/usr/local/lib -lhello -lm
+ creating hell
+ burger$
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX31"></A>
+ 
+ 
+ <P>
+ Now assume <TT>`libhello.la'</TT> had already been installed, and you want
+ to link a new program with it.  You could figure out where it lives by
+ yourself, then run:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gcc -g -O -o test test.o -L/usr/local/lib -lhello</KBD>
+ </PRE>
+ 
+ <P>
+ However, unless <TT>`/usr/local/lib'</TT> is in the standard library search
+ path, you won't be able to run <CODE>test</CODE>.  However, if you use libtool
+ to link the already-installed libtool library, it will do The Right
+ Thing (TM) for you:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -g -O -o test test.o /usr/local/lib/libhello.la</KBD>
+ gcc -g -O -o .libs/test test.o -Wl,--rpath
+ -Wl,/usr/local/lib /usr/local/lib/libhello.a -lm
+ creating test
+ burger$
+ </PRE>
+ 
+ <P>
+ Note that libtool added the necessary run-time path flag, as well as
+ <SAMP>`-lm'</SAMP>, the library libhello.la depended upon.  Nice, huh?
+ 
+ 
+ <P>
+ Since libtool created a wrapper script, you should use libtool to
+ install it and debug it too.  However, since the program does not depend
+ on any uninstalled libtool library, it is probably usable even without
+ the wrapper script.  Libtool could probably be made smarter to avoid the
+ creation of the wrapper script in this case, but this is left as an
+ exercise for the reader.
+ 
+ 
+ <P>
+ <A NAME="IDX32"></A>
+ <A NAME="IDX33"></A>
+ Notice that the executable, <CODE>hell</CODE>, was actually created in the
+ <TT>`.libs'</TT> subdirectory.  Then, a wrapper script was created
+ in the current directory.
+ 
+ 
+ <P>
+ On NetBSD 1.2, libtool encodes the installation directory of
+ <TT>`libhello'</TT>, by using the <SAMP>`-R/usr/local/lib'</SAMP> compiler flag.
+ Then, the wrapper script guarantees that the executable finds the
+ correct shared library (the one in <TT>`./.libs'</TT>) until it is
+ properly installed.
+ 
+ 
+ <P>
+ Let's compare the two different programs:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>time ./hell.old</KBD>
+ Welcome to GNU Hell!
+ ** This is not GNU Hello.  There is no built-in mail reader. **
+         0.21 real         0.02 user         0.08 sys
+ burger$ <KBD>time ./hell</KBD>
+ Welcome to GNU Hell!
+ ** This is not GNU Hello.  There is no built-in mail reader. **
+         0.63 real         0.09 user         0.59 sys
+ burger$
+ </PRE>
+ 
+ <P>
+ The wrapper script takes significantly longer to execute, but at least
+ the results are correct, even though the shared library hasn't been
+ installed yet.
+ 
+ 
+ <P>
+ So, what about all the space savings that shared libraries are supposed
+ to yield?
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>ls -l hell.old libhello.a</KBD>
+ -rwxr-xr-x  1 gord  gord  15481 Nov 14 12:11 hell.old
+ -rw-r--r--  1 gord  gord   4274 Nov 13 18:02 libhello.a
+ burger$ <KBD>ls -l .libs/hell .libs/libhello.*</KBD>
+ -rwxr-xr-x  1 gord  gord  11647 Nov 14 12:10 .libs/hell
+ -rw-r--r--  1 gord  gord   4274 Nov 13 18:44 .libs/libhello.a
+ -rwxr-xr-x  1 gord  gord  12205 Nov 13 18:44 .libs/libhello.so.0.0
+ burger$
+ </PRE>
+ 
+ <P>
+ Well, that sucks.  Maybe I should just scrap this project and take up
+ basket weaving.
+ 
+ 
+ <P>
+ Actually, it just proves an important point: shared libraries incur
+ overhead because of their (relative) complexity.  In this situation, the
+ price of being dynamic is eight kilobytes, and the payoff is about four
+ kilobytes.  So, having a shared <TT>`libhello'</TT> won't be an advantage
+ until we link it against at least a few more programs.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC11" HREF="libtool_toc.html#TOC11">Debugging executables</A></H2>
+ 
+ <P>
+ If <TT>`hell'</TT> was a complicated program, you would certainly want to
+ test and debug it before installing it on your system.  In the above
+ section, you saw how the libtool wrapper script makes it possible to run
+ the program directly, but unfortunately, this mechanism interferes with
+ the debugger:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gdb hell</KBD>
+ GDB is free software and you are welcome to distribute copies of it
+  under certain conditions; type "show copying" to see the conditions.
+ There is no warranty for GDB; type "show warranty" for details.
+ GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc.
+ 
+ "hell": not in executable format: File format not recognized
+ 
+ (gdb) <KBD>quit</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ Sad.  It doesn't work because GDB doesn't know where the executable
+ lives.  So, let's try again, by invoking GDB directly on the executable:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>gdb .libs/hell</KBD>
+ trick:/home/src/libtool/demo$ gdb .libs/hell
+ GDB is free software and you are welcome to distribute copies of it
+  under certain conditions; type "show copying" to see the conditions.
+ There is no warranty for GDB; type "show warranty" for details.
+ GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc.
+ (gdb) <KBD>break main</KBD>
+ Breakpoint 1 at 0x8048547: file main.c, line 29.
+ (gdb) <KBD>run</KBD>
+ Starting program: /home/src/libtool/demo/.libs/hell
+ /home/src/libtool/demo/.libs/hell: can't load library 'libhello.so.2'
+ 
+ Program exited with code 020.
+ (gdb) <KBD>quit</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ Argh.  Now GDB complains because it cannot find the shared library that
+ <TT>`hell'</TT> is linked against.  So, we must use libtool in order to
+ properly set the library path and run the debugger.  Fortunately, we can
+ forget all about the <TT>`.libs'</TT> directory, and just run it on
+ the executable wrapper (see section <A HREF="libtool.html#SEC18">Execute mode</A>):
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gdb hell</KBD>
+ GDB is free software and you are welcome to distribute copies of it
+  under certain conditions; type "show copying" to see the conditions.
+ There is no warranty for GDB; type "show warranty" for details.
+ GDB 4.16 (i386-unknown-netbsd), (C) 1996 Free Software Foundation, Inc.
+ (gdb) <KBD>break main</KBD>
+ Breakpoint 1 at 0x8048547: file main.c, line 29.
+ (gdb) <KBD>run</KBD>
+ Starting program: /home/src/libtool/demo/.libs/hell
+ 
+ Breakpoint 1, main (argc=1, argv=0xbffffc40) at main.c:29
+ 29       printf ("Welcome to GNU Hell!\n");
+ (gdb) <KBD>quit</KBD>
+ The program is running.  Quit anyway (and kill it)? (y or n) <KBD>y</KBD>
+ burger$
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC12" HREF="libtool_toc.html#TOC12">Installing libraries</A></H2>
+ 
+ <P>
+ <A NAME="IDX34"></A>
+ Installing libraries on a non-libtool system is quite
+ straightforward... just copy them into place:<A NAME="DOCF3" HREF="libtool_foot.html#FOOT3">(3)</A>
+ 
+ 
+ <P>
+ <A NAME="IDX35"></A>
+ 
+ <PRE>
+ burger$ <KBD>su</KBD>
+ Password: <KBD>********</KBD>
+ burger# <KBD>cp libhello.a /usr/local/lib/libhello.a</KBD>
+ burger#
+ </PRE>
+ 
+ <P>
+ Oops, don't forget the <CODE>ranlib</CODE> command:
+ 
+ 
+ 
+ <PRE>
+ burger# <KBD>ranlib /usr/local/lib/libhello.a</KBD>
+ burger#
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX36"></A>
+ Libtool installation is quite simple, as well.  Just use the
+ <CODE>install</CODE> or <CODE>cp</CODE> command that you normally would
+ (see section <A HREF="libtool.html#SEC19">Install mode</A>):
+ 
+ 
+ 
+ <PRE>
+ a23# <KBD>libtool cp libhello.la /usr/local/lib/libhello.la</KBD>
+ cp libhello.la /usr/local/lib/libhello.la
+ cp .libs/libhello.a /usr/local/lib/libhello.a
+ ranlib /usr/local/lib/libhello.a
+ a23#
+ </PRE>
+ 
+ <P>
+ Note that the libtool library <TT>`libhello.la'</TT> is also installed, to
+ help libtool with uninstallation (see section <A HREF="libtool.html#SEC21">Uninstall mode</A>) and linking
+ (see section <A HREF="libtool.html#SEC10">Linking executables</A>) and to help programs with dlopening
+ (see section <A HREF="libtool.html#SEC40">Dlopened modules</A>).
+ 
+ 
+ <P>
+ Here is the shared library example:
+ 
+ 
+ 
+ <PRE>
+ burger# <KBD>libtool install -c libhello.la /usr/local/lib/libhello.la</KBD>
+ install -c .libs/libhello.so.0.0 /usr/local/lib/libhello.so.0.0
+ install -c libhello.la /usr/local/lib/libhello.la
+ install -c .libs/libhello.a /usr/local/lib/libhello.a
+ ranlib /usr/local/lib/libhello.a
+ burger#
+ </PRE>
+ 
+ <P>
+ <A NAME="IDX37"></A>
+ <A NAME="IDX38"></A>
+ It is safe to specify the <SAMP>`-s'</SAMP> (strip symbols) flag if you use a
+ BSD-compatible install program when installing libraries.
+ Libtool will either ignore the <SAMP>`-s'</SAMP> flag, or will run a program
+ that will strip only debugging and compiler symbols from the library.
+ 
+ 
+ <P>
+ Once the libraries have been put in place, there may be some additional
+ configuration that you need to do before using them.  First, you must
+ make sure that where the library is installed actually agrees with the
+ <SAMP>`-rpath'</SAMP> flag you used to build it.
+ 
+ 
+ <P>
+ <A NAME="IDX39"></A>
+ <A NAME="IDX40"></A>
+ <A NAME="IDX41"></A>
+ Then, running <SAMP>`libtool -n --finish <VAR>libdir</VAR>'</SAMP> can give you
+ further hints on what to do (see section <A HREF="libtool.html#SEC20">Finish mode</A>):
+ 
+ 
+ 
+ <PRE>
+ burger# <KBD>libtool -n --finish /usr/local/lib</KBD>
+ PATH="$PATH:/sbin" ldconfig -m /usr/local/lib
+ -----------------------------------------------------------------
+ Libraries have been installed in:
+    /usr/local/lib
+ 
+ To link against installed libraries in a given directory, LIBDIR,
+ you must use the `-LLIBDIR' flag during linking.
+ 
+  You will also need to do one of the following:
+    - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
+      during execution
+    - add LIBDIR to the `LD_RUN_PATH' environment variable
+      during linking
+    - use the `-RLIBDIR' linker flag
+ 
+ See any operating system documentation about shared libraries for
+ more information, such as the ld and ld.so manual pages.
+ -----------------------------------------------------------------
+ burger#
+ </PRE>
+ 
+ <P>
+ After you have completed these steps, you can go on to begin using the
+ installed libraries.  You may also install any executables that depend
+ on libraries you created.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC13" HREF="libtool_toc.html#TOC13">Installing executables</A></H2>
+ 
+ <P>
+ If you used libtool to link any executables against uninstalled libtool
+ libraries (see section <A HREF="libtool.html#SEC10">Linking executables</A>), you need to use libtool to
+ install the executables after the libraries have been installed
+ (see section <A HREF="libtool.html#SEC12">Installing libraries</A>).
+ 
+ 
+ <P>
+ So, for our Ultrix example, we would run:
+ 
+ 
+ 
+ <PRE>
+ a23# libtool install -c hell /usr/local/bin/hell
+ install -c hell /usr/local/bin/hell
+ a23#
+ </PRE>
+ 
+ <P>
+ On shared library systems, libtool just ignores the wrapper script and
+ installs the correct binary:
+ 
+ 
+ 
+ <PRE>
+ burger# libtool install -c hell /usr/local/bin/hell
+ install -c .libs/hell /usr/local/bin/hell
+ burger#
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC14" HREF="libtool_toc.html#TOC14">Linking static libraries</A></H2>
+ 
+ <P>
+ <A NAME="IDX42"></A>
+ <A NAME="IDX43"></A>
+ Why return to <CODE>ar</CODE> and <CODE>ranlib</CODE> silliness when you've had a
+ taste of libtool?  Well, sometimes it is desirable to create a static
+ archive that can never be shared.  The most frequent case is when you
+ have a set of object files that you use to build several different
+ programs.  You can create a "convenience library" out of those
+ objects, and link programs with the library, instead of listing all
+ object files for every program.  This technique is often used to
+ overcome GNU automake's lack of support for linking object files built
+ from sources in other directories, because it supports linking with
+ libraries from other directories.  This limitation applies to GNU
+ automake up to release 1.4; newer releases should support sources in
+ other directories.
+ 
+ 
+ <P>
+ If you just want to link this convenience library into programs, then
+ you could just ignore libtool entirely, and use the old <CODE>ar</CODE> and
+ <CODE>ranlib</CODE> commands (or the corresponding GNU automake
+ <SAMP>`_LIBRARIES'</SAMP> rules).  You can even install a convenience library
+ (but you probably don't want to) using libtool:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool ./install-sh -c libhello.a /local/lib/libhello.a</KBD>
+ ./install-sh -c libhello.a /local/lib/libhello.a
+ ranlib /local/lib/libhello.a
+ burger$
+ </PRE>
+ 
+ <P>
+ Using libtool for static library installation protects your library from
+ being accidentally stripped (if the installer used the <SAMP>`-s'</SAMP> flag),
+ as well as automatically running the correct <CODE>ranlib</CODE> command.
+ 
+ 
+ <P>
+ But libtool libraries are more than just collections of object files:
+ they can also carry library dependency information, which old archives
+ do not.  If you want to create a libtool static convenience library, you
+ can omit the <SAMP>`-rpath'</SAMP> flag and use <SAMP>`-static'</SAMP> to indicate that
+ you're only interested in a static library.  When you link a program
+ with such a library, libtool will actually link all object files and
+ dependency libraries into the program.
+ 
+ 
+ <P>
+ If you omit both <SAMP>`-rpath'</SAMP> and <SAMP>`-static'</SAMP>, libtool will create a
+ convenience library that can be used to create other libtool
+ libraries, even shared ones.  Just like in the static case, the library
+ behaves as an alias to a set of object files and dependency libraries,
+ but in this case the object files are suitable for inclusion in shared
+ libraries.  But be careful not to link a single convenience library,
+ directly or indirectly, into a single program or library, otherwise you
+ may get errors about symbol redefinitions.
+ 
+ 
+ <P>
+ When GNU automake is used, you should use <CODE>noinst_LTLIBRARIES</CODE>
+ instead of <CODE>lib_LTLIBRARIES</CODE> for convenience libraries, so that
+ the <SAMP>`-rpath'</SAMP> option is not passed when they are linked.
+ 
+ 
+ <P>
+ As a rule of thumb, link a libtool convenience library into at most one
+ libtool library, and never into a program, and link libtool static
+ convenience libraries only into programs, and only if you need to carry
+ library dependency information to the user of the static convenience
+ library.
+ 
+ 
+ <P>
+ <A NAME="IDX44"></A>
+ Another common situation where static linking is desirable is in
+ creating a standalone binary.  Use libtool to do the linking and add the
+ <SAMP>`-all-static'</SAMP> flag.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC15" HREF="libtool_toc.html#TOC15">Invoking <CODE>libtool</CODE></A></H1>
+ <P>
+ <A NAME="IDX45"></A>
+ <A NAME="IDX46"></A>
+ <A NAME="IDX47"></A>
+ <A NAME="IDX48"></A>
+ 
+ 
+ <P>
+ The <CODE>libtool</CODE> program has the following synopsis:
+ 
+ 
+ 
+ <PRE>
+ libtool [<VAR>option</VAR>]... [<VAR>mode-arg</VAR>]...
+ </PRE>
+ 
+ <P>
+ and accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`--config'</SAMP>
+ <DD>
+ Display libtool configuration variables and exit.
+ 
+ <DT><SAMP>`--debug'</SAMP>
+ <DD>
+ Dump a trace of shell script execution to standard output.  This
+ produces a lot of output, so you may wish to pipe it to <CODE>less</CODE> (or
+ <CODE>more</CODE>) or redirect to a file.
+ 
+ <DT><SAMP>`-n'</SAMP>
+ <DD>
+ <DT><SAMP>`--dry-run'</SAMP>
+ <DD>
+ Don't create, modify, or delete any files, just show what commands would
+ be executed by libtool.
+ 
+ <DT><SAMP>`--features'</SAMP>
+ <DD>
+ Display basic configuration options.  This provides a way for packages
+ to determine whether shared or static libraries will be built.
+ 
+ <DT><SAMP>`--finish'</SAMP>
+ <DD>
+ Same as <SAMP>`--mode=finish'</SAMP>.
+ 
+ <DT><SAMP>`--help'</SAMP>
+ <DD>
+ Display a help message and exit.  If <SAMP>`--mode=<VAR>mode</VAR>'</SAMP> is
+ specified, then detailed help for <VAR>mode</VAR> is
+ displayed.
+ 
+ <DT><SAMP>`--mode=<VAR>mode</VAR>'</SAMP>
+ <DD>
+ Use <VAR>mode</VAR> as the operation mode.  By default, the operation mode is
+ inferred from the <VAR>mode-args</VAR>.
+ 
+ If <VAR>mode</VAR> is specified, it must be one of the following:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`compile'</SAMP>
+ <DD>
+ Compile a source file into a libtool object.
+ 
+ <DT><SAMP>`execute'</SAMP>
+ <DD>
+ Automatically set the library path so that another program can use
+ uninstalled libtool-generated programs or libraries.
+ 
+ <DT><SAMP>`finish'</SAMP>
+ <DD>
+ Complete the installation of libtool libraries on the system.
+ 
+ <DT><SAMP>`install'</SAMP>
+ <DD>
+ Install libraries or executables.
+ 
+ <DT><SAMP>`link'</SAMP>
+ <DD>
+ Create a library or an executable.
+ 
+ <DT><SAMP>`uninstall'</SAMP>
+ <DD>
+ Delete installed libraries or executables.
+ 
+ <DT><SAMP>`clean'</SAMP>
+ <DD>
+ Delete uninstalled libraries or executables.
+ </DL>
+ 
+ <DT><SAMP>`--version'</SAMP>
+ <DD>
+ Print libtool version information and exit.
+ </DL>
+ 
+ <P>
+ The <VAR>mode-args</VAR> are a variable number of arguments, depending on the
+ selected operation mode.  In general, each <VAR>mode-arg</VAR> is interpreted
+ by programs libtool invokes, rather than libtool itself.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC16" HREF="libtool_toc.html#TOC16">Compile mode</A></H2>
+ <P>
+ <A NAME="IDX49"></A>
+ <A NAME="IDX50"></A>
+ 
+ 
+ <P>
+ For <EM>compile</EM> mode, <VAR>mode-args</VAR> is a compiler command to be used
+ in creating a `standard' object file.  These arguments should begin with
+ the name of the C compiler, and contain the <SAMP>`-c'</SAMP> compiler flag so
+ that only an object file is created.
+ 
+ 
+ <P>
+ Libtool determines the name of the output file by removing the directory
+ component from the source file name, then substituting the source code
+ suffix (e.g. <SAMP>`.c'</SAMP> for C source code) with the library object suffix,
+ <SAMP>`.lo'</SAMP>.
+ 
+ 
+ <P>
+ If shared libraries are being built, any necessary PIC generation flags
+ are substituted into the compilation command.
+ You can pass compiler and linker specific flags using <SAMP>`-Wc,<VAR>flag</VAR>'</SAMP>
+ and <SAMP>`-Xcompiler <VAR>flag</VAR>'</SAMP> or <SAMP>`-Wl,<VAR>flag</VAR>'</SAMP> and
+ <SAMP>`-Xlinker <VAR>flag</VAR>'</SAMP>, respectively.
+ 
+ 
+ <P>
+ If the <SAMP>`-static'</SAMP> option is given, then a <SAMP>`.o'</SAMP> file is built,
+ even if libtool was configured with <SAMP>`--disable-static'</SAMP>.
+ 
+ 
+ <P>
+ Note that the <SAMP>`-o'</SAMP> option is now fully supported.  It is emulated
+ on the platforms that don't support it (by locking and moving the
+ objects), so it is really easy to use libtool, just with minor
+ modifications to your Makefiles. Typing for example
+ 
+ <PRE>
+ libtool gcc -c foo/x.c -o foo/x.lo
+ </PRE>
+ 
+ <P>
+ will do what you expect.
+ 
+ 
+ <P>
+ Note, however, that, if the compiler does not support <SAMP>`-c'</SAMP> and
+ <SAMP>`-o'</SAMP>, it is impossible to compile <TT>`foo/x.c'</TT> without
+ overwriting an existing <TT>`./x.o'</TT>.  Therefore, if you do have a
+ source file <TT>`./x.c'</TT>, make sure you introduce dependencies in your
+ <TT>`Makefile'</TT> to make sure <TT>`./x.o'</TT> (or <TT>`./x.lo'</TT>) is
+ re-created after any sub-directory's <TT>`x.lo'</TT>:
+ 
+ <PRE>
+ x.o x.lo: foo/x.lo bar/x.lo
+ </PRE>
+ 
+ <P>
+ This will also ensure that make won't try to use a temporarily corrupted
+ <TT>`x.o'</TT> to create a program or library.  It may cause needless
+ recompilation on platforms that support <SAMP>`-c'</SAMP> and <SAMP>`-o'</SAMP>
+ together, but it's the only way to make it safe for those that don't.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC17" HREF="libtool_toc.html#TOC17">Link mode</A></H2>
+ <P>
+ <A NAME="IDX51"></A>
+ <A NAME="IDX52"></A>
+ 
+ 
+ <P>
+ <EM>Link</EM> mode links together object files (including library
+ objects) to form another library or to create an executable program.
+ 
+ 
+ <P>
+ <VAR>mode-args</VAR> consist of a command using the C compiler to create an
+ output file (with the <SAMP>`-o'</SAMP> flag) from several object files.
+ 
+ 
+ <P>
+ The following components of <VAR>mode-args</VAR> are treated specially:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`-all-static'</SAMP>
+ <DD>
+ <A NAME="IDX53"></A>
+  <A NAME="IDX54"></A>
+  
+ If <VAR>output-file</VAR> is a program, then do not link it against any
+ shared libraries at all.  If <VAR>output-file</VAR> is a library, then only
+ create a static library.
+ 
+ <DT><SAMP>`-avoid-version'</SAMP>
+ <DD>
+ Tries to avoid versioning (see section <A HREF="libtool.html#SEC32">Library interface versions</A>) for libraries and modules,
+ i.e. no version information is stored and no symbolic links are created.
+ If the platform requires versioning, this option has no effect.
+ 
+ <DT><SAMP>`-dlopen <VAR>file</VAR>'</SAMP>
+ <DD>
+ Same as <SAMP>`-dlpreopen <VAR>file</VAR>'</SAMP>, if native dlopening is not
+ supported on the host platform (see section <A HREF="libtool.html#SEC40">Dlopened modules</A>) or if
+ the program is linked with <SAMP>`-static'</SAMP> or <SAMP>`-all-static'</SAMP>.
+ Otherwise, no effect.  If <VAR>file</VAR> is <CODE>self</CODE> libtool will make
+ sure that the program can <CODE>dlopen</CODE> itself, either by enabling
+ <CODE>-export-dynamic</CODE> or by falling back to <SAMP>`-dlpreopen self'</SAMP>.
+ 
+ <DT><SAMP>`-dlpreopen <VAR>file</VAR>'</SAMP>
+ <DD>
+ Link <VAR>file</VAR> into the output program, and add its symbols to
+ <VAR>lt_preloaded_symbols</VAR> (see section <A HREF="libtool.html#SEC42">Dlpreopening</A>).  If <VAR>file</VAR> is
+ <CODE>self</CODE>, the symbols of the program itself will be added to
+ <VAR>lt_preloaded_symbols</VAR>.
+ If <VAR>file</VAR> is <CODE>force</CODE> libtool will make sure that
+ <VAR>lt_preloaded_symbols</VAR> is always <EM>defined</EM>, regardless of whether
+ it's empty or not.
+ 
+ <DT><SAMP>`-export-dynamic'</SAMP>
+ <DD>
+ Allow symbols from <VAR>output-file</VAR> to be resolved with <CODE>dlsym</CODE>
+ (see section <A HREF="libtool.html#SEC40">Dlopened modules</A>).
+ 
+ <DT><SAMP>`-export-symbols <VAR>symfile</VAR>'</SAMP>
+ <DD>
+ Tells the linker to export only the symbols listed in <VAR>symfile</VAR>.
+ The symbol file should end in <SAMP>`.sym'</SAMP> and must contain the name of one
+ symbol per line. This option has no effect on some platforms.
+ By default all symbols are exported.
+ 
+ <DT><SAMP>`-export-symbols-regex <VAR>regex</VAR>'</SAMP>
+ <DD>
+ Same as <SAMP>`-export-symbols'</SAMP>, except that only symbols matching
+ the regular expression <VAR>regex</VAR> are exported.
+ By default all symbols are exported.
+ 
+ <DT><SAMP>`-L<VAR>libdir</VAR>'</SAMP>
+ <DD>
+ Search <VAR>libdir</VAR> for required libraries that have already been
+ installed.
+ 
+ <DT><SAMP>`-l<VAR>name</VAR>'</SAMP>
+ <DD>
+ <VAR>output-file</VAR> requires the installed library <TT>`lib<VAR>name</VAR>'</TT>.
+ This option is required even when <VAR>output-file</VAR> is not an
+ executable.
+ 
+ <DT><SAMP>`-module'</SAMP>
+ <DD>
+ Creates a library that can be dlopened (see section <A HREF="libtool.html#SEC40">Dlopened modules</A>).
+ This option doesn't work for programs.
+ Module names don't need to be prefixed with 'lib'.
+ In order to prevent name clashes, however, 'libname' and 'name'
+ must not be used at the same time in your package.
+ 
+ <DT><SAMP>`-no-fast-install'</SAMP>
+ <DD>
+ Disable fast-install mode for the executable <VAR>output-file</VAR>.  Useful
+ if the program won't be necessarily installed.
+ 
+ <DT><SAMP>`-no-install'</SAMP>
+ <DD>
+ Link an executable <VAR>output-file</VAR> that can't be installed and
+ therefore doesn't need a wrapper script.  Useful if the program is only
+ used in the build tree, e.g., for testing or generating other files.
+ 
+ <DT><SAMP>`-no-undefined'</SAMP>
+ <DD>
+ Declare that <VAR>output-file</VAR> does not depend on any other libraries.
+ Some platforms cannot create shared libraries that depend on other
+ libraries (see section <A HREF="libtool.html#SEC39">Inter-library dependencies</A>).
+ 
+ <DT><SAMP>`-o <VAR>output-file</VAR>'</SAMP>
+ <DD>
+ Create <VAR>output-file</VAR> from the specified objects and libraries.
+ 
+ <DT><SAMP>`-release <VAR>release</VAR>'</SAMP>
+ <DD>
+ Specify that the library was generated by release <VAR>release</VAR> of your
+ package, so that users can easily tell which versions are newer than
+ others.  Be warned that no two releases of your package will be binary
+ compatible if you use this flag.  If you want binary compatibility, use
+ the <SAMP>`-version-info'</SAMP> flag instead (see section <A HREF="libtool.html#SEC32">Library interface versions</A>).
+ 
+ <DT><SAMP>`-rpath <VAR>libdir</VAR>'</SAMP>
+ <DD>
+ If <VAR>output-file</VAR> is a library, it will eventually be installed in
+ <VAR>libdir</VAR>.  If <VAR>output-file</VAR> is a program, add <VAR>libdir</VAR> to
+ the run-time path of the program.
+ 
+ <DT><SAMP>`-R <VAR>libdir</VAR>'</SAMP>
+ <DD>
+ If <VAR>output-file</VAR> is a program, add <VAR>libdir</VAR> to its run-time
+ path.  If <VAR>output-file</VAR> is a library, add -R<VAR>libdir</VAR> to its
+ <VAR>dependency_libs</VAR>, so that, whenever the library is linked into a
+ program, <VAR>libdir</VAR> will be added to its run-time path.
+ 
+ <DT><SAMP>`-static'</SAMP>
+ <DD>
+ If <VAR>output-file</VAR> is a program, then do not link it against any
+ uninstalled shared libtool libraries.  If <VAR>output-file</VAR> is a
+ library, then only create a static library.
+ 
+ <DT><SAMP>`-version-info <VAR>current</VAR>[:<VAR>revision</VAR>[:<VAR>age</VAR>]]'</SAMP>
+ <DD>
+ If <VAR>output-file</VAR> is a libtool library, use interface version
+ information <VAR>current</VAR>, <VAR>revision</VAR>, and <VAR>age</VAR> to build it
+ (see section <A HREF="libtool.html#SEC32">Library interface versions</A>).  Do <STRONG>not</STRONG> use this flag to specify package
+ release information, rather see the <SAMP>`-release'</SAMP> flag.
+ 
+ <DT><SAMP>`-Wl,<VAR>flag</VAR>'</SAMP>
+ <DD>
+ <DT><SAMP>`-Xlinker <VAR>flag</VAR>'</SAMP>
+ <DD>
+ Pass a linker specific flag directly to the linker.
+ </DL>
+ 
+ <P>
+ If the <VAR>output-file</VAR> ends in <SAMP>`.la'</SAMP>, then a libtool library is
+ created, which must be built only from library objects (<SAMP>`.lo'</SAMP> files).
+ The <SAMP>`-rpath'</SAMP> option is required.  In the current implementation,
+ libtool libraries may not depend on other uninstalled libtool libraries
+ (see section <A HREF="libtool.html#SEC39">Inter-library dependencies</A>).
+ 
+ 
+ <P>
+ If the <VAR>output-file</VAR> ends in <SAMP>`.a'</SAMP>, then a standard library is
+ created using <CODE>ar</CODE> and possibly <CODE>ranlib</CODE>.
+ 
+ 
+ <P>
+ <A NAME="IDX55"></A>
+ <A NAME="IDX56"></A>
+ If <VAR>output-file</VAR> ends in <SAMP>`.o'</SAMP> or <SAMP>`.lo'</SAMP>, then a reloadable object
+ file is created from the input files (generally using <SAMP>`ld -r'</SAMP>).
+ This method is often called <EM>partial linking</EM>.
+ 
+ 
+ <P>
+ Otherwise, an executable program is created.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC18" HREF="libtool_toc.html#TOC18">Execute mode</A></H2>
+ <P>
+ <A NAME="IDX57"></A>
+ <A NAME="IDX58"></A>
+ 
+ 
+ <P>
+ For <EM>execute</EM> mode, the library path is automatically set, then a
+ program is executed.
+ 
+ 
+ <P>
+ The first of the <VAR>mode-args</VAR> is treated as a program name, with the
+ rest as arguments to that program.
+ 
+ 
+ <P>
+ The following components of <VAR>mode-args</VAR> are treated specially:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`-dlopen <VAR>file</VAR>'</SAMP>
+ <DD>
+ Add the directory containing <VAR>file</VAR> to the library path.
+ </DL>
+ 
+ <P>
+ This mode sets the library path environment variable according to any
+ <SAMP>`-dlopen'</SAMP> flags.
+ 
+ 
+ <P>
+ If any of the <VAR>args</VAR> are libtool executable wrappers, then they are
+ translated into the name of their corresponding uninstalled binary, and
+ any of their required library directories are added to the library path.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC19" HREF="libtool_toc.html#TOC19">Install mode</A></H2>
+ <P>
+ <A NAME="IDX59"></A>
+ <A NAME="IDX60"></A>
+ 
+ 
+ <P>
+ In <EM>install</EM> mode, libtool interprets <VAR>mode-args</VAR> as an
+ installation command beginning with <CODE>cp</CODE>, or a BSD-compatible
+ <CODE>install</CODE> program.
+ 
+ 
+ <P>
+ The rest of the <VAR>mode-args</VAR> are interpreted as arguments to that
+ command.
+ 
+ 
+ <P>
+ The command is run, and any necessary unprivileged post-installation
+ commands are also completed.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC20" HREF="libtool_toc.html#TOC20">Finish mode</A></H2>
+ <P>
+ <A NAME="IDX61"></A>
+ <A NAME="IDX62"></A>
+ 
+ 
+ <P>
+ <EM>Finish</EM> mode helps system administrators install libtool libraries
+ so that they can be located and linked into user programs.
+ 
+ 
+ <P>
+ Each <VAR>mode-arg</VAR> is interpreted as the name of a library directory.
+ Running this command may require superuser privileges, so the
+ <SAMP>`--dry-run'</SAMP> option may be useful.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC21" HREF="libtool_toc.html#TOC21">Uninstall mode</A></H2>
+ <P>
+ <A NAME="IDX63"></A>
+ <A NAME="IDX64"></A>
+ 
+ 
+ <P>
+ <EM>Uninstall</EM> mode deletes installed libraries, executables and objects.
+ 
+ 
+ <P>
+ The first <VAR>mode-arg</VAR> is the name of the program to use to delete
+ files (typically <TT>`/bin/rm'</TT>).
+ 
+ 
+ <P>
+ The remaining <VAR>mode-args</VAR> are either flags for the deletion program
+ (beginning with a `-'), or the names of files to delete.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC22" HREF="libtool_toc.html#TOC22">Clean mode</A></H2>
+ <P>
+ <A NAME="IDX65"></A>
+ <A NAME="IDX66"></A>
+ 
+ 
+ <P>
+ <EM>Clean</EM> mode deletes uninstalled libraries, executables, objects
+ and libtool's temporary files associated with them.
+ 
+ 
+ <P>
+ The first <VAR>mode-arg</VAR> is the name of the program to use to delete
+ files (typically <TT>`/bin/rm'</TT>).
+ 
+ 
+ <P>
+ The remaining <VAR>mode-args</VAR> are either flags for the deletion program
+ (beginning with a `-'), or the names of files to delete.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC23" HREF="libtool_toc.html#TOC23">Integrating libtool with your package</A></H1>
+ 
+ <P>
+ This chapter describes how to integrate libtool with your packages so
+ that your users can install hassle-free shared libraries.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC24" HREF="libtool_toc.html#TOC24">Writing <TT>`Makefile'</TT> rules for libtool</A></H2>
+ <P>
+ <A NAME="IDX67"></A>
+ <A NAME="IDX68"></A>
+ <A NAME="IDX69"></A>
+ 
+ 
+ <P>
+ Libtool is fully integrated with Automake (see section `Introduction' in <CITE>The Automake Manual</CITE>), starting with Automake version 1.2.
+ 
+ 
+ <P>
+ If you want to use libtool in a regular <TT>`Makefile'</TT> (or
+ <TT>`Makefile.in'</TT>), you are on your own.  If you're not using Automake
+ 1.2, and you don't know how to incorporate libtool into your package you
+ need to do one of the following:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Download Automake (version 1.2 or later) from your nearest GNU mirror,
+ install it, and start using it.
+ 
+ <LI>
+ 
+ Learn how to write <TT>`Makefile'</TT> rules by hand.  They're sometimes complex,
+ but if you're clever enough to write rules for compiling your old
+ libraries, then you should be able to figure out new rules for libtool
+ libraries (hint: examine the <TT>`Makefile.in'</TT> in the <TT>`demo'</TT>
+ subdirectory of the libtool distribution... note especially that it
+ was automatically generated from the <TT>`Makefile.am'</TT> by Automake).
+ </OL>
+ 
+ 
+ 
+ <H2><A NAME="SEC25" HREF="libtool_toc.html#TOC25">Using Automake with libtool</A></H2>
+ 
+ <P>
+ <A NAME="IDX70"></A>
+ Libtool library support is implemented under the <SAMP>`LTLIBRARIES'</SAMP>
+ primary.
+ 
+ 
+ <P>
+ Here are some samples from the Automake <TT>`Makefile.am'</TT> in the
+ libtool distribution's <TT>`demo'</TT> subdirectory.
+ 
+ 
+ <P>
+ First, to link a program against a libtool library, just use the
+ <SAMP>`program_LDADD'</SAMP> variable:
+ 
+ 
+ 
+ <PRE>
+ bin_PROGRAMS = hell hell.debug
+ 
+ # Build hell from main.c and libhello.la
+ hell_SOURCES = main.c
+ hell_LDADD = libhello.la
+ 
+ # Create an easier-to-debug version of hell.
+ hell_debug_SOURCES = main.c
+ hell_debug_LDADD = libhello.la
+ hell_debug_LDFLAGS = -static
+ </PRE>
+ 
+ <P>
+ The flags <SAMP>`-dlopen'</SAMP> or <SAMP>`-dlpreopen'</SAMP> (see section <A HREF="libtool.html#SEC17">Link mode</A>) would
+ fit better in the <VAR>program_LDADD</VAR> variable.  Unfortunately, GNU
+ automake, up to release 1.4, doesn't accept these flags in a
+ <VAR>program_LDADD</VAR> variable, so you have the following alternatives:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ add them to <VAR>program_LDFLAGS</VAR>, and list the libraries in
+ <VAR>program_DEPENDENCIES</VAR>, then wait for a release of GNU automake that
+ accepts these flags where they belong;
+ 
+ <LI>
+ 
+ surround the flags between quotes, but then you must set
+ <VAR>program_DEPENDENCIES</VAR> too:
+ 
+ 
+ <PRE>
+ program_LDADD = "-dlopen" libfoo.la
+ program_DEPENDENCIES = libfoo.la
+ </PRE>
+ 
+ <LI>
+ 
+ set and <SAMP>`AC_SUBST'</SAMP> variables <VAR>DLOPEN</VAR> and <VAR>DLPREOPEN</VAR> in
+ <TT>`configure.in'</TT> and use <SAMP>`@DLOPEN@'</SAMP> and <SAMP>`@DLPREOPEN@'</SAMP>
+ as replacements for the explicit flags <SAMP>`-dlopen'</SAMP> and
+ <SAMP>`-dlpreopen'</SAMP> in <SAMP>`program_LDADD'</SAMP>.  Automake will discard
+ <SAMP>`AC_SUBST'</SAMP>ed variables from dependencies, so it will behave exactly
+ as we expect it to behave when it accepts these flags in
+ <SAMP>`program_LDADD'</SAMP>.  But hey!, this is ugly!
+ </UL>
+ 
+ <P>
+ You may use the <SAMP>`program_LDFLAGS'</SAMP> variable to stuff in any flags
+ you want to pass to libtool while linking <SAMP>`program'</SAMP> (such as
+ <SAMP>`-static'</SAMP> to avoid linking uninstalled shared libtool libraries).
+ 
+ 
+ <P>
+ Building a libtool library is almost as trivial... note the use of
+ <SAMP>`libhello_la_LDFLAGS'</SAMP> to pass the <SAMP>`-version-info'</SAMP>
+ (see section <A HREF="libtool.html#SEC32">Library interface versions</A>) option to libtool:
+ 
+ 
+ 
+ <PRE>
+ # Build a libtool library, libhello.la for installation in libdir.
+ lib_LTLIBRARIES = libhello.la
+ libhello_la_SOURCES = hello.c foo.c
+ libhello_la_LDFLAGS = -version-info 3:12:1
+ </PRE>
+ 
+ <P>
+ The <SAMP>`-rpath'</SAMP> option is passed automatically by Automake (except for
+ libraries listed as <CODE>noinst_LTLIBRARIES</CODE>), so you
+ should not specify it.
+ 
+ 
+ <P>
+ See section `The Automake Manual' in <CITE>The Automake Manual</CITE>, for more information.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC26" HREF="libtool_toc.html#TOC26">Configuring libtool</A></H2>
+ <P>
+ <A NAME="IDX71"></A>
+ 
+ 
+ <P>
+ Libtool requires intimate knowledge of your compiler suite and operating
+ system in order to be able to create shared libraries and link against
+ them properly.  When you install the libtool distribution, a
+ system-specific libtool script is installed into your binary directory.
+ 
+ 
+ <P>
+ However, when you distribute libtool with your own packages
+ (see section <A HREF="libtool.html#SEC28">Including libtool in your package</A>), you do not always know which compiler suite and
+ operating system are used to compile your package.
+ 
+ 
+ <P>
+ For this reason, libtool must be <EM>configured</EM> before it can be
+ used.  This idea should be familiar to anybody who has used a GNU
+ <CODE>configure</CODE> script.  <CODE>configure</CODE> runs a number of tests for
+ system features, then generates the <TT>`Makefiles'</TT> (and possibly a
+ <TT>`config.h'</TT> header file), after which you can run <CODE>make</CODE> and
+ build the package.
+ 
+ 
+ <P>
+ Libtool adds its own tests to your <CODE>configure</CODE> script in order to
+ generate a libtool script for the installer's host machine.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC27" HREF="libtool_toc.html#TOC27">The <CODE>AC_PROG_LIBTOOL</CODE> macro</A></H3>
+ 
+ <P>
+ If you are using GNU Autoconf (or Automake), you should add a call to
+ <CODE>AC_PROG_LIBTOOL</CODE> to your <TT>`configure.in'</TT> file.  This macro
+ adds many new tests to the <CODE>configure</CODE> script so that the generated
+ libtool script will understand the characteristics of the host:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_PROG_LIBTOOL</B>
+ <DD><A NAME="IDX72"></A>
+ <DT><U>Macro:</U> <B>AM_PROG_LIBTOOL</B>
+ <DD><A NAME="IDX73"></A>
+ Add support for the <SAMP>`--enable-shared'</SAMP> and <SAMP>`--disable-shared'</SAMP>
+ <CODE>configure</CODE> flags.<A NAME="DOCF4" HREF="libtool_foot.html#FOOT4">(4)</A>  <CODE>AM_PROG_LIBTOOL</CODE> was the
+ old name for this macro, and although supported at the moment is
+ deprecated.
+ 
+ 
+ <P>
+ By default, this macro turns on shared libraries if they are available,
+ and also enables static libraries if they don't conflict with the shared
+ libraries.  You can modify these defaults by calling either the
+ <CODE>AC_DISABLE_SHARED</CODE> or <CODE>AC_DISABLE_STATIC</CODE> macros:
+ 
+ 
+ 
+ <PRE>
+ # Turn off shared libraries during beta-testing, since they
+ # make the build process take too long.
+ AC_DISABLE_SHARED
+ AC_PROG_LIBTOOL
+ </PRE>
+ 
+ <P>
+ The user may specify modified forms of the configure flags
+ <SAMP>`--enable-shared'</SAMP> and <SAMP>`--enable-static'</SAMP> to choose whether
+ shared or static libraries are built based on the name of the package.
+ For example, to have shared <SAMP>`bfd'</SAMP> and <SAMP>`gdb'</SAMP> libraries built,
+ but not shared <SAMP>`libg++'</SAMP>, you can run all three <CODE>configure</CODE>
+ scripts as follows:
+ 
+ 
+ 
+ <PRE>
+ trick$ ./configure --enable-shared=bfd,gdb
+ </PRE>
+ 
+ <P>
+ In general, specifying <SAMP>`--enable-shared=<VAR>pkgs</VAR>'</SAMP> is the same as
+ configuring with <SAMP>`--enable-shared'</SAMP> every package named in the
+ comma-separated <VAR>pkgs</VAR> list, and every other package with
+ <SAMP>`--disable-shared'</SAMP>.  The <SAMP>`--enable-static=<VAR>pkgs</VAR>'</SAMP> flag
+ behaves similarly, but it uses <SAMP>`--enable-static'</SAMP> and
+ <SAMP>`--disable-static'</SAMP>. The same applies to the
+ <SAMP>`--enable-fast-install=<VAR>pkgs</VAR>'</SAMP> flag, which uses
+ <SAMP>`--enable-fast-install'</SAMP> and <SAMP>`--disable-fast-install'</SAMP>.
+ 
+ 
+ <P>
+ The package name <SAMP>`default'</SAMP> matches any packages which have not set
+ their name in the <CODE>PACKAGE</CODE> environment variable.
+ 
+ 
+ <P>
+ This macro also sets the shell variable <VAR>LIBTOOL_DEPS</VAR>, that you can
+ use to automatically update the libtool script if it becomes
+ out-of-date.  In order to do that, add to your <TT>`configure.in'</TT>:
+ 
+ 
+ 
+ <PRE>
+ AC_PROG_LIBTOOL
+ AC_SUBST(LIBTOOL_DEPS)
+ </PRE>
+ 
+ <P>
+ and, to <TT>`Makefile.in'</TT> or <TT>`Makefile.am'</TT>:
+ 
+ 
+ 
+ <PRE>
+ LIBTOOL_DEPS = @LIBTOOL_DEPS@
+ libtool: $(LIBTOOL_DEPS)
+         $(SHELL) ./config.status --recheck
+ </PRE>
+ 
+ <P>
+ If you are using GNU automake, you can omit the assignment, as automake
+ will take care of it.  You'll obviously have to create some dependency
+ on <TT>`libtool'</TT>.
+ 
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LIBTOOL_DLOPEN</B>
+ <DD><A NAME="IDX74"></A>
+ Enable checking for dlopen support. This macro should be used if
+ the package makes use of the <SAMP>`-dlopen'</SAMP> and <SAMP>`-dlpreopen'</SAMP> flags,
+ otherwise libtool will assume that the system does not support dlopening.
+ The macro must be called <STRONG>before</STRONG> <CODE>AC_PROG_LIBTOOL</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_LIBTOOL_WIN32_DLL</B>
+ <DD><A NAME="IDX75"></A>
+ This macro should be used if the package has been ported to build clean
+ dlls on win32 platforms.  Usually this means that any library data items
+ are exported with <CODE>__declspec(dllexport)</CODE> and imported with
+ <CODE>__declspec(dllimport)</CODE>.  If this macro is not used, libtool will
+ assume that the package libraries are not dll clean and will build only
+ static libraries on win32 hosts.
+ 
+ 
+ <P>
+ This macro must be called <STRONG>before</STRONG> <CODE>AC_PROG_LIBTOOL</CODE>, and
+ provision must be made to pass <SAMP>`-no-undefined'</SAMP> to <CODE>libtool</CODE>
+ in link mode from the package <CODE>Makefile</CODE>.  Naturally, if you pass
+ <SAMP>`-no-undefined'</SAMP>, you must ensure that all the library symbols
+ <STRONG>really are</STRONG> defined at link time!
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DISABLE_FAST_INSTALL</B>
+ <DD><A NAME="IDX76"></A>
+ Change the default behaviour for <CODE>AC_PROG_LIBTOOL</CODE> to disable
+ optimization for fast installation.  The user may still override this
+ default, depending on platform support, by specifying
+ <SAMP>`--enable-fast-install'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DISABLE_SHARED</B>
+ <DD><A NAME="IDX77"></A>
+ <DT><U>Macro:</U> <B>AM_DISABLE_SHARED</B>
+ <DD><A NAME="IDX78"></A>
+ Change the default behaviour for <CODE>AC_PROG_LIBTOOL</CODE> to disable
+ shared libraries.  The user may still override this default by
+ specifying <SAMP>`--enable-shared'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>AC_DISABLE_STATIC</B>
+ <DD><A NAME="IDX79"></A>
+ <DT><U>Macro:</U> <B>AM_DISABLE_STATIC</B>
+ <DD><A NAME="IDX80"></A>
+ Change the default behaviour for <CODE>AC_PROG_LIBTOOL</CODE> to disable
+ static libraries.  The user may still override this default by
+ specifying <SAMP>`--enable-static'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ The tests in <CODE>AC_PROG_LIBTOOL</CODE> also recognize the following
+ environment variables:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CC</B>
+ <DD><A NAME="IDX81"></A>
+ The C compiler that will be used by the generated <CODE>libtool</CODE>.  If
+ this is not set, <CODE>AC_PROG_LIBTOOL</CODE> will look for <CODE>gcc</CODE> or
+ <CODE>cc</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CFLAGS</B>
+ <DD><A NAME="IDX82"></A>
+ Compiler flags used to generate standard object files.  If this is not
+ set, <CODE>AC_PROG_LIBTOOL</CODE> will not use any such flags.  It affects
+ only the way <CODE>AC_PROG_LIBTOOL</CODE> runs tests, not the produced
+ <CODE>libtool</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CPPFLAGS</B>
+ <DD><A NAME="IDX83"></A>
+ C preprocessor flags.  If this is not set, <CODE>AC_PROG_LIBTOOL</CODE> will
+ not use any such flags.  It affects only the way <CODE>AC_PROG_LIBTOOL</CODE>
+ runs tests, not the produced <CODE>libtool</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LD</B>
+ <DD><A NAME="IDX84"></A>
+ The system linker to use (if the generated <CODE>libtool</CODE> requires one).
+ If this is not set, <CODE>AC_PROG_LIBTOOL</CODE> will try to find out what is
+ the linker used by <VAR>CC</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LDFLAGS</B>
+ <DD><A NAME="IDX85"></A>
+ The flags to be used by <CODE>libtool</CODE> when it links a program.  If
+ this is not set, <CODE>AC_PROG_LIBTOOL</CODE> will not use any such flags.  It
+ affects only the way <CODE>AC_PROG_LIBTOOL</CODE> runs tests, not the produced
+ <CODE>libtool</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LIBS</B>
+ <DD><A NAME="IDX86"></A>
+ The libraries to be used by <CODE>AC_PROG_LIBTOOL</CODE> when it links a
+ program.  If this is not set, <CODE>AC_PROG_LIBTOOL</CODE> will not use any
+ such flags.  It affects only the way <CODE>AC_PROG_LIBTOOL</CODE> runs tests,
+ not the produced <CODE>libtool</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>NM</B>
+ <DD><A NAME="IDX87"></A>
+ Program to use rather than checking for <CODE>nm</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>RANLIB</B>
+ <DD><A NAME="IDX88"></A>
+ Program to use rather than checking for <CODE>ranlib</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LN_S</B>
+ <DD><A NAME="IDX89"></A>
+ A command that creates a link of a program, a soft-link if possible, a
+ hard-link otherwise.  <CODE>AC_PROG_LIBTOOL</CODE> will check for a suitable
+ program if this variable is not set.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>DLLTOOL</B>
+ <DD><A NAME="IDX90"></A>
+ Program to use rather than checking for <CODE>dlltool</CODE>.  Only meaningful
+ for Cygwin/MS-Windows.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>OBJDUMP</B>
+ <DD><A NAME="IDX91"></A>
+ Program to use rather than checking for <CODE>objdump</CODE>.  Only meaningful
+ for Cygwin/MS-Windows.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>AS</B>
+ <DD><A NAME="IDX92"></A>
+ Program to use rather than checking for <CODE>as</CODE>.  Only used on
+ Cygwin/MS-Windows at the moment.
+ </DL>
+ 
+ 
+ <P>
+ <A NAME="IDX93"></A>
+ When you invoke the <CODE>libtoolize</CODE> program (see section <A HREF="libtool.html#SEC29">Invoking <CODE>libtoolize</CODE></A>), it will tell you where to find a definition of
+ <CODE>AC_PROG_LIBTOOL</CODE>.  If you use Automake, the <CODE>aclocal</CODE> program
+ will automatically add <CODE>AC_PROG_LIBTOOL</CODE> support to your
+ <CODE>configure</CODE> script.
+ 
+ 
+ <P>
+ Nevertheless, it is advisable to include a copy of <TT>`libtool.m4'</TT> in
+ <TT>`acinclude.m4'</TT>, so that, even if <TT>`aclocal.m4'</TT> and
+ <TT>`configure'</TT> are rebuilt for any reason, the appropriate libtool
+ macros will be used.  The alternative is to hope the user will have a
+ compatible version of <TT>`libtool.m4'</TT> installed and accessible for
+ <CODE>aclocal</CODE>.  This may lead to weird errors when versions don't
+ match.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC28" HREF="libtool_toc.html#TOC28">Including libtool in your package</A></H2>
+ 
+ <P>
+ In order to use libtool, you need to include the following files with
+ your package:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><TT>`config.guess'</TT>
+ <DD>
+ <A NAME="IDX94"></A>
+ Attempt to guess a canonical system name.
+ 
+ <DT><TT>`config.sub'</TT>
+ <DD>
+ <A NAME="IDX95"></A>
+ Canonical system name validation subroutine script.
+ 
+ <DT><TT>`ltmain.sh'</TT>
+ <DD>
+ <A NAME="IDX96"></A>
+ A generic script implementing basic libtool functionality.
+ </DL>
+ 
+ <P>
+ Note that the libtool script itself should <EM>not</EM> be included with
+ your package.  See section <A HREF="libtool.html#SEC26">Configuring libtool</A>.
+ 
+ 
+ <P>
+ You should use the <CODE>libtoolize</CODE> program, rather than manually
+ copying these files into your package.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC29" HREF="libtool_toc.html#TOC29">Invoking <CODE>libtoolize</CODE></A></H3>
+ <P>
+ <A NAME="IDX97"></A>
+ <A NAME="IDX98"></A>
+ <A NAME="IDX99"></A>
+ <A NAME="IDX100"></A>
+ 
+ 
+ <P>
+ The <CODE>libtoolize</CODE> program provides a standard way to add libtool
+ support to your package.  In the future, it may implement better usage
+ checking, or other features to make libtool even easier to use.
+ 
+ 
+ <P>
+ The <CODE>libtoolize</CODE> program has the following synopsis:
+ 
+ 
+ 
+ <PRE>
+ libtoolize [<VAR>option</VAR>]...
+ </PRE>
+ 
+ <P>
+ and accepts the following options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`--automake'</SAMP>
+ <DD>
+ Work silently, and assume that Automake libtool support is used.
+ 
+ <SAMP>`libtoolize --automake'</SAMP> is used by Automake to add libtool files to
+ your package, when <CODE>AC_PROG_LIBTOOL</CODE> appears in your
+ <TT>`configure.in'</TT>.
+ 
+ <DT><SAMP>`--copy'</SAMP>
+ <DD>
+ <DT><SAMP>`-c'</SAMP>
+ <DD>
+ Copy files from the libtool data directory rather than creating
+ symlinks.
+ 
+ <DT><SAMP>`--debug'</SAMP>
+ <DD>
+ Dump a trace of shell script execution to standard output.  This
+ produces a lot of output, so you may wish to pipe it to <CODE>less</CODE> (or
+ <CODE>more</CODE>) or redirect to a file.
+ 
+ <DT><SAMP>`--dry-run'</SAMP>
+ <DD>
+ <DT><SAMP>`-n'</SAMP>
+ <DD>
+ Don't run any commands that modify the file system, just print them
+ out.
+ 
+ <DT><SAMP>`--force'</SAMP>
+ <DD>
+ <DT><SAMP>`-f'</SAMP>
+ <DD>
+ Replace existing libtool files.  By default, <CODE>libtoolize</CODE> won't
+ overwrite existing files.
+ 
+ <DT><SAMP>`--help'</SAMP>
+ <DD>
+ Display a help message and exit.
+ 
+ <DT><SAMP>`--ltdl'</SAMP>
+ <DD>
+ Install libltdl in a subdirectory of your package.
+ 
+ <DT><SAMP>`--ltdl-tar'</SAMP>
+ <DD>
+ Add the file libltdl.tar.gz to your package.
+ 
+ <DT><SAMP>`--version'</SAMP>
+ <DD>
+ Print <CODE>libtoolize</CODE> version information and exit.
+ </DL>
+ 
+ <P>
+ <A NAME="IDX101"></A>
+ If <CODE>libtoolize</CODE> detects an explicit call to
+ <CODE>AC_CONFIG_AUX_DIR</CODE> (see section `The Autoconf Manual' in <CITE>The Autoconf Manual</CITE>) in your <TT>`configure.in'</TT>, it
+ will put the files in the specified directory.
+ 
+ 
+ <P>
+ <CODE>libtoolize</CODE> displays hints for adding libtool support to your
+ package, as well.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC30" HREF="libtool_toc.html#TOC30">Autoconf <SAMP>`.o'</SAMP> macros</A></H3>
+ 
+ <P>
+ The Autoconf package comes with a few macros that run tests, then set a
+ variable corresponding to the name of an object file.  Sometimes it is
+ necessary to use corresponding names for libtool objects.
+ 
+ 
+ <P>
+ Here are the names of variables that list libtool objects:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LTALLOCA</B>
+ <DD><A NAME="IDX102"></A>
+ <A NAME="IDX103"></A>
+ Substituted by <CODE>AC_FUNC_ALLOCA</CODE> (see section `The Autoconf Manual' in <CITE>The Autoconf Manual</CITE>).  Is either empty, or contains <SAMP>`alloca.lo'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LTLIBOBJS</B>
+ <DD><A NAME="IDX104"></A>
+ <A NAME="IDX105"></A>
+ Substituted by <CODE>AC_REPLACE_FUNCS</CODE> (see section `The Autoconf Manual' in <CITE>The Autoconf Manual</CITE>), and a few other functions.
+ </DL>
+ 
+ 
+ <P>
+ Unfortunately, the stable release of Autoconf (2.13, at the time of
+ this writing) does not have any way for libtool to provide support for
+ these variables.  So, if you depend on them, use the following code
+ immediately before the call to <CODE>AC_OUTPUT</CODE> in your
+ <TT>`configure.in'</TT>:
+ 
+ 
+ 
+ <PRE>
+ LTLIBOBJS=`echo "$LIBOBJS" | sed 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'`
+ AC_SUBST(LTLIBOBJS)
+ LTALLOCA=`echo "$ALLOCA" | sed 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'`
+ AC_SUBST(LTALLOCA)
+ AC_OUTPUT(...)
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC31" HREF="libtool_toc.html#TOC31">Static-only libraries</A></H2>
+ <P>
+ <A NAME="IDX106"></A>
+ <A NAME="IDX107"></A>
+ <A NAME="IDX108"></A>
+ <A NAME="IDX109"></A>
+ <A NAME="IDX110"></A>
+ <A NAME="IDX111"></A>
+ <A NAME="IDX112"></A>
+ <A NAME="IDX113"></A>
+ <A NAME="IDX114"></A>
+ 
+ 
+ <P>
+ When you are developing a package, it is often worthwhile to configure
+ your package with the <SAMP>`--disable-shared'</SAMP> flag, or to override the
+ defaults for <CODE>AC_PROG_LIBTOOL</CODE> by using the
+ <CODE>AC_DISABLE_SHARED</CODE> Autoconf macro (see section <A HREF="libtool.html#SEC27">The <CODE>AC_PROG_LIBTOOL</CODE> macro</A>).  This prevents libtool from building
+ shared libraries, which has several advantages:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ compilation is twice as fast, which can speed up your development cycle,
+ 
+ <LI>
+ 
+ debugging is easier because you don't need to deal with any complexities
+ added by shared libraries, and
+ 
+ <LI>
+ 
+ you can see how libtool behaves on static-only platforms.
+ </UL>
+ 
+ <P>
+ You may want to put a small note in your package <TT>`README'</TT> to let
+ other developers know that <SAMP>`--disable-shared'</SAMP> can save them time.
+ The following example note is taken from the GIMP<A NAME="DOCF5" HREF="libtool_foot.html#FOOT5">(5)</A> distribution <TT>`README'</TT>:
+ 
+ 
+ 
+ <PRE>
+ The GIMP uses GNU Libtool in order to build shared libraries on a
+ variety of systems. While this is very nice for making usable
+ binaries, it can be a pain when trying to debug a program. For that
+ reason, compilation of shared libraries can be turned off by
+ specifying the <SAMP>`--disable-shared'</SAMP> option to <TT>`configure'</TT>.
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC32" HREF="libtool_toc.html#TOC32">Library interface versions</A></H1>
+ <P>
+ <A NAME="IDX115"></A>
+ <A NAME="IDX116"></A>
+ <A NAME="IDX117"></A>
+ 
+ 
+ <P>
+ The most difficult issue introduced by shared libraries is that of
+ creating and resolving runtime dependencies.  Dependencies on programs
+ and libraries are often described in terms of a single name, such as
+ <CODE>sed</CODE>.  So, one may say "libtool depends on sed," and that is
+ good enough for most purposes.
+ 
+ 
+ <P>
+ However, when an interface changes regularly, we need to be more
+ specific: "Gnus 5.1 requires Emacs 19.28 or above."  Here, the
+ description of an interface consists of a name, and a "version
+ number."
+ 
+ 
+ <P>
+ Even that sort of description is not accurate enough for some purposes.
+ What if Emacs 20 changes enough to break Gnus 5.1?
+ 
+ 
+ <P>
+ The same problem exists in shared libraries: we require a formal version
+ system to describe the sorts of dependencies that programs have on
+ shared libraries, so that the dynamic linker can guarantee that programs
+ are linked only against libraries that provide the interface they
+ require.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC33" HREF="libtool_toc.html#TOC33">What are library interfaces?</A></H2>
+ <P>
+ <A NAME="IDX118"></A>
+ 
+ 
+ <P>
+ Interfaces for libraries may be any of the following (and more):
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ global variables: both names and types
+ 
+ <LI>
+ 
+ global functions: argument types and number, return types, and function names
+ 
+ <LI>
+ 
+ standard input, standard output, standard error, and file formats
+ 
+ <LI>
+ 
+ sockets, pipes, and other inter-process communication protocol formats
+ </UL>
+ 
+ <P>
+ Note that static functions do not count as interfaces, because they are
+ not directly available to the user of the library.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC34" HREF="libtool_toc.html#TOC34">Libtool's versioning system</A></H2>
+ <P>
+ <A NAME="IDX119"></A>
+ <A NAME="IDX120"></A>
+ <A NAME="IDX121"></A>
+ 
+ 
+ <P>
+ Libtool has its own formal versioning system.  It is not as flexible as
+ some, but it is definitely the simplest of the more powerful versioning
+ systems.
+ 
+ 
+ <P>
+ Think of a library as exporting several sets of interfaces, arbitrarily
+ represented by integers.  When a program is linked against a library, it
+ may use any subset of those interfaces.
+ 
+ 
+ <P>
+ Libtool's description of the interfaces that a program uses is simple:
+ it encodes the least and the greatest interface numbers in the resulting
+ binary (<VAR>first-interface</VAR>, <VAR>last-interface</VAR>).
+ 
+ 
+ <P>
+ The dynamic linker is guaranteed that if a library supports <EM>every</EM>
+ interface number between <VAR>first-interface</VAR> and <VAR>last-interface</VAR>,
+ then the program can be relinked against that library.
+ 
+ 
+ <P>
+ Note that this can cause problems because libtool's compatibility
+ requirements are actually stricter than is necessary.
+ 
+ 
+ <P>
+ Say <TT>`libhello'</TT> supports interfaces 5, 16, 17, 18, and 19, and that
+ libtool is used to link <TT>`test'</TT> against <TT>`libhello'</TT>.
+ 
+ 
+ <P>
+ Libtool encodes the numbers 5 and 19 in <TT>`test'</TT>, and the dynamic
+ linker will only link <TT>`test'</TT> against libraries that support
+ <EM>every</EM> interface between 5 and 19.  So, the dynamic linker refuses
+ to link <TT>`test'</TT> against <TT>`libhello'</TT>!
+ 
+ 
+ <P>
+ In order to eliminate this problem, libtool only allows libraries to
+ declare consecutive interface numbers.  So, <TT>`libhello'</TT> can declare at
+ most that it supports interfaces 16 through 19.  Then, the dynamic
+ linker will link <TT>`test'</TT> against <TT>`libhello'</TT>.
+ 
+ 
+ <P>
+ So, libtool library versions are described by three integers:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><VAR>current</VAR>
+ <DD>
+ The most recent interface number that this library implements.
+ 
+ <DT><VAR>revision</VAR>
+ <DD>
+ The implementation number of the <VAR>current</VAR> interface.
+ 
+ <DT><VAR>age</VAR>
+ <DD>
+ The difference between the newest and oldest interfaces that this
+ library implements.  In other words, the library implements all the
+ interface numbers in the range from number <CODE><VAR>current</VAR> -
+ <VAR>age</VAR></CODE> to <CODE><VAR>current</VAR></CODE>.
+ </DL>
+ 
+ <P>
+ If two libraries have identical <VAR>current</VAR> and <VAR>age</VAR> numbers,
+ then the dynamic linker chooses the library with the greater
+ <VAR>revision</VAR> number.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC35" HREF="libtool_toc.html#TOC35">Updating library version information</A></H2>
+ 
+ <P>
+ If you want to use libtool's versioning system, then you must specify
+ the version information to libtool using the <SAMP>`-version-info'</SAMP> flag
+ during link mode (see section <A HREF="libtool.html#SEC17">Link mode</A>).
+ 
+ 
+ <P>
+ This flag accepts an argument of the form
+ <SAMP>`<VAR>current</VAR>[:<VAR>revision</VAR>[:<VAR>age</VAR>]]'</SAMP>.  So, passing
+ <SAMP>`-version-info 3:12:1'</SAMP> sets <VAR>current</VAR> to 3, <VAR>revision</VAR> to
+ 12, and <VAR>age</VAR> to 1.
+ 
+ 
+ <P>
+ If either <VAR>revision</VAR> or <VAR>age</VAR> are omitted, they default to 0.
+ Also note that <VAR>age</VAR> must be less than or equal to the <VAR>current</VAR>
+ interface number.
+ 
+ 
+ <P>
+ Here are a set of rules to help you update your library version
+ information:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Start with version information of <SAMP>`0:0:0'</SAMP> for each libtool library.
+ 
+ <LI>
+ 
+ Update the version information only immediately before a public release
+ of your software.  More frequent updates are unnecessary, and only
+ guarantee that the current interface number gets larger faster.
+ 
+ <LI>
+ 
+ If the library source code has changed at all since the last update,
+ then increment <VAR>revision</VAR> (<SAMP>`<VAR>c</VAR>:<VAR>r</VAR>:<VAR>a</VAR>'</SAMP> becomes
+ <SAMP>`<VAR>c</VAR>:<EM>r+1</EM>:<VAR>a</VAR>'</SAMP>).
+ 
+ <LI>
+ 
+ If any interfaces have been added, removed, or changed since the last
+ update, increment <VAR>current</VAR>, and set <VAR>revision</VAR> to 0.
+ 
+ <LI>
+ 
+ If any interfaces have been added since the last public release, then
+ increment <VAR>age</VAR>.
+ 
+ <LI>
+ 
+ If any interfaces have been removed since the last public release, then
+ set <VAR>age</VAR> to 0.
+ </OL>
+ 
+ <P>
+ <STRONG><EM>Never</EM></STRONG> try to set the interface numbers so that they
+ correspond to the release number of your package.  This is an abuse that
+ only fosters misunderstanding of the purpose of library versions.
+ Instead, use the <SAMP>`-release'</SAMP> flag (see section <A HREF="libtool.html#SEC36">Managing release information</A>), but be
+ warned that every release of your package will not be binary compatible
+ with any other release.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC36" HREF="libtool_toc.html#TOC36">Managing release information</A></H2>
+ 
+ <P>
+ Often, people want to encode the name of the package release into the
+ shared library so that it is obvious to the user which package their
+ programs are linked against.  This convention is used especially on
+ GNU/Linux:
+ 
+ 
+ 
+ <PRE>
+ trick$ <KBD>ls /usr/lib/libbfd*</KBD>
+ /usr/lib/libbfd.a          /usr/lib/libbfd.so.2.7.0.2
+ /usr/lib/libbfd.so
+ trick$
+ </PRE>
+ 
+ <P>
+ On <SAMP>`trick'</SAMP>, <TT>`/usr/lib/libbfd.so'</TT> is a symbolic link to
+ <TT>`libbfd.so.2.7.0.2'</TT>, which was distributed as a part of
+ <SAMP>`binutils-2.7.0.2'</SAMP>.
+ 
+ 
+ <P>
+ Unfortunately, this convention conflicts directly with libtool's idea of
+ library interface versions, because the library interface rarely changes
+ at the same time that the release number does, and the library suffix is
+ never the same across all platforms.
+ 
+ 
+ <P>
+ So, in order to accommodate both views, you can use the <SAMP>`-release'</SAMP>
+ flag in order to set release information for libraries which you do not
+ want to use <SAMP>`-version-info'</SAMP>.  For the <TT>`libbfd'</TT> example, the
+ next release which uses libtool should be built with <SAMP>`-release
+ 2.9.0'</SAMP>, which will produce the following files on GNU/Linux:
+ 
+ 
+ 
+ <PRE>
+ trick$ <KBD>ls /usr/lib/libbfd*</KBD>
+ /usr/lib/libbfd-2.9.0.so     /usr/lib/libbfd.a
+ /usr/lib/libbfd.so
+ trick$
+ </PRE>
+ 
+ <P>
+ In this case, <TT>`/usr/lib/libbfd.so'</TT> is a symbolic link to
+ <TT>`libbfd-2.9.0.so'</TT>.  This makes it obvious that the user is dealing
+ with <SAMP>`binutils-2.9.0'</SAMP>, without compromising libtool's idea of
+ interface versions.
+ 
+ 
+ <P>
+ Note that this option causes a modification of the library name, so do
+ not use it unless you want to break binary compatibility with any past
+ library releases.  In general, you should only use <SAMP>`-release'</SAMP> for
+ package-internal libraries or for ones whose interfaces change very
+ frequently.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC37" HREF="libtool_toc.html#TOC37">Tips for interface design</A></H1>
+ <P>
+ <A NAME="IDX122"></A>
+ <A NAME="IDX123"></A>
+ 
+ 
+ <P>
+ Writing a good library interface takes a lot of practice and thorough
+ understanding of the problem that the library is intended to solve.
+ 
+ 
+ <P>
+ If you design a good interface, it won't have to change often, you won't
+ have to keep updating documentation, and users won't have to keep
+ relearning how to use the library.
+ 
+ 
+ <P>
+ Here is a brief list of tips for library interface design, which may
+ help you in your exploits:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>Plan ahead
+ <DD>
+ Try to make every interface truly minimal, so that you won't need to
+ delete entry points very often.
+ 
+ <DT>Avoid interface changes
+ <DD>
+ <A NAME="IDX124"></A>
+ Some people love redesigning and changing entry points just for the heck
+ of it (note: <EM>renaming</EM> a function is considered changing an entry
+ point).  Don't be one of those people.  If you must redesign an
+ interface, then try to leave compatibility functions behind so that
+ users don't need to rewrite their existing code.
+ 
+ <DT>Use opaque data types
+ <DD>
+ <A NAME="IDX125"></A>
+ The fewer data type definitions a library user has access to, the
+ better.  If possible, design your functions to accept a generic pointer
+ (which you can cast to an internal data type), and provide access
+ functions rather than allowing the library user to directly manipulate
+ the data.
+ That way, you have the freedom to change the data structures without
+ changing the interface.
+ 
+ This is essentially the same thing as using abstract data types and
+ inheritance in an object-oriented system.
+ 
+ <DT>Use header files
+ <DD>
+ <A NAME="IDX126"></A>
+ If you are careful to document each of your library's global functions
+ and variables in header files, and include them in your library source
+ files, then the compiler will let you know if you make any interface
+ changes by accident (see section <A HREF="libtool.html#SEC38">Writing C header files</A>).
+ 
+ <DT>Use the <CODE>static</CODE> keyword (or equivalent) whenever possible
+ <DD>
+ <A NAME="IDX127"></A>
+ The fewer global functions your library has, the more flexibility you'll
+ have in changing them.  Static functions and variables may change forms
+ as often as you like... your users cannot access them, so they
+ aren't interface changes.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC38" HREF="libtool_toc.html#TOC38">Writing C header files</A></H2>
+ <P>
+ <A NAME="IDX128"></A>
+ <A NAME="IDX129"></A>
+ <A NAME="IDX130"></A>
+ 
+ 
+ <P>
+ Writing portable C header files can be difficult, since they may be read
+ by different types of compilers:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>C++ compilers
+ <DD>
+ C++ compilers require that functions be declared with full prototypes,
+ since C++ is more strongly typed than C.  C functions and variables also
+ need to be declared with the <CODE>extern "C"</CODE> directive, so that the
+ names aren't mangled.  See section <A HREF="libtool.html#SEC54">Writing libraries for C++</A>, for other issues relevant
+ to using C++ with libtool.
+ 
+ <DT>ANSI C compilers
+ <DD>
+ ANSI C compilers are not as strict as C++ compilers, but functions
+ should be prototyped to avoid unnecessary warnings when the header file
+ is <CODE>#include</CODE>d.
+ 
+ <DT>non-ANSI C compilers
+ <DD>
+ Non-ANSI compilers will report errors if functions are prototyped.
+ </DL>
+ 
+ <P>
+ These complications mean that your library interface headers must use
+ some C preprocessor magic in order to be usable by each of the above
+ compilers.
+ 
+ 
+ <P>
+ <TT>`foo.h'</TT> in the <TT>`demo'</TT> subdirectory of the libtool distribution
+ serves as an example for how to write a header file that can be
+ safely installed in a system directory.
+ 
+ 
+ <P>
+ Here are the relevant portions of that file:
+ 
+ 
+ 
+ <PRE>
+ /* BEGIN_C_DECLS should be used at the beginning of your declarations,
+    so that C++ compilers don't mangle their names.  Use END_C_DECLS at
+    the end of C declarations. */
+ #undef BEGIN_C_DECLS
+ #undef END_C_DECLS
+ #ifdef __cplusplus
+ # define BEGIN_C_DECLS extern "C" {
+ # define END_C_DECLS }
+ #else
+ # define BEGIN_C_DECLS /* empty */
+ # define END_C_DECLS /* empty */
+ #endif
+ 
+ /* PARAMS is a macro used to wrap function prototypes, so that
+    compilers that don't understand ANSI C prototypes still work,
+    and ANSI C compilers can issue warnings about type mismatches. */
+ #undef PARAMS
+ #if defined (__STDC__) || defined (_AIX) \
+         || (defined (__mips) &#38;&#38; defined (_SYSTYPE_SVR4)) \
+         || defined(WIN32) || defined(__cplusplus)
+ # define PARAMS(protos) protos
+ #else
+ # define PARAMS(protos) ()
+ #endif
+ </PRE>
+ 
+ <P>
+ These macros are used in <TT>`foo.h'</TT> as follows:
+ 
+ 
+ 
+ <PRE>
+ #ifndef FOO_H
+ #define FOO_H 1
+ 
+ /* The above macro definitions. */
+ #include "..."
+ 
+ BEGIN_C_DECLS
+ 
+ int foo PARAMS((void));
+ int hello PARAMS((void));
+ 
+ END_C_DECLS
+ 
+ #endif /* !FOO_H */
+ </PRE>
+ 
+ <P>
+ Note that the <TT>`#ifndef FOO_H'</TT> prevents the body of <TT>`foo.h'</TT>
+ from being read more than once in a given compilation.
+ 
+ 
+ <P>
+ Also the only thing that must go outside the
+ <CODE>BEGIN_C_DECLS</CODE>/<CODE>END_C_DECLS</CODE> pair are <CODE>#include</CODE> lines.
+ Strictly speaking it is only C symbol names that need to be protected,
+ but your header files will be more maintainable if you have a single
+ pair of of these macros around the majority of the header contents.
+ 
+ 
+ <P>
+ You should use these definitions of <CODE>PARAMS</CODE>, <CODE>BEGIN_C_DECLS</CODE>,
+ and <CODE>END_C_DECLS</CODE> into your own headers.  Then, you may use them to
+ create header files that are valid for C++, ANSI, and non-ANSI
+ compilers<A NAME="DOCF6" HREF="libtool_foot.html#FOOT6">(6)</A>.
+ 
+ 
+ <P>
+ Do not be naive about writing portable code.  Following the tips given
+ above will help you miss the most obvious problems, but there are
+ definitely other subtle portability issues.  You may need to cope with
+ some of the following issues:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ Pre-ANSI compilers do not always support the <CODE>void *</CODE> generic
+ pointer type, and so need to use <CODE>char *</CODE> in its place.
+ 
+ <LI>
+ 
+ The <CODE>const</CODE>, <CODE>inline</CODE> and <CODE>signed</CODE> keywords are not
+ supported by some compilers, especially pre-ANSI compilers.
+ 
+ <LI>
+ 
+ The <CODE>long double</CODE> type is not supported by many compilers.
+ </UL>
+ 
+ 
+ 
+ <H1><A NAME="SEC39" HREF="libtool_toc.html#TOC39">Inter-library dependencies</A></H1>
+ <P>
+ <A NAME="IDX131"></A>
+ <A NAME="IDX132"></A>
+ 
+ 
+ <P>
+ By definition, every shared library system provides a way for
+ executables to depend on libraries, so that symbol resolution is
+ deferred until runtime.
+ 
+ 
+ <P>
+ An <EM>inter-library dependency</EM> is one in which a library depends on
+ other libraries.  For example, if the libtool library <TT>`libhello'</TT>
+ uses the <CODE>cos</CODE> function, then it has an inter-library dependency
+ on <TT>`libm'</TT>, the math library that implements <CODE>cos</CODE>.
+ 
+ 
+ <P>
+ Some shared library systems provide this feature in an
+ internally-consistent way: these systems allow chains of dependencies of
+ potentially infinite length.
+ 
+ 
+ <P>
+ However, most shared library systems are restricted in that they only
+ allow a single level of dependencies.  In these systems, programs may
+ depend on shared libraries, but shared libraries may not depend on other
+ shared libraries.
+ 
+ 
+ <P>
+ In any event, libtool provides a simple mechanism for you to declare
+ inter-library dependencies: for every library <TT>`lib<VAR>name</VAR>'</TT> that
+ your own library depends on, simply add a corresponding
+ <CODE>-l<VAR>name</VAR></CODE> option to the link line when you create your
+ library.  To make an example of our
+ <TT>`libhello'</TT> that depends on <TT>`libm'</TT>:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -g -O -o libhello.la foo.lo hello.lo \
+                 -rpath /usr/local/lib -lm</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ When you link a program against <TT>`libhello'</TT>, you don't need to
+ specify the same <SAMP>`-l'</SAMP> options again: libtool will do that for you,
+ in order to guarantee that all the required libraries are found.  This
+ restriction is only necessary to preserve compatibility with static
+ library systems and simple dynamic library systems.
+ 
+ 
+ <P>
+ Some platforms, such as AIX, do not even allow you this
+ flexibility.  In order to build a shared library, it must be entirely
+ self-contained (that is, have references only to symbols that are found
+ in the <SAMP>`.lo'</SAMP> files or the specified <SAMP>`-l'</SAMP> libraries), and you
+ need to specify the <VAR>-no-undefined</VAR> flag.  By default, libtool
+ builds only static libraries on these kinds of platforms.
+ 
+ 
+ <P>
+ The simple-minded inter-library dependency tracking code of libtool
+ releases prior to 1.2 was disabled because it was not clear when it was
+ possible to link one library with another, and complex failures would
+ occur.  A more complex implementation of this concept was re-introduced
+ before release 1.3, but it has not been ported to all platforms that
+ libtool supports.  The default, conservative behavior is to avoid
+ linking one library with another, introducing their inter-dependencies
+ only when a program is linked with them.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC40" HREF="libtool_toc.html#TOC40">Dlopened modules</A></H1>
+ <P>
+ <A NAME="IDX133"></A>
+ <A NAME="IDX134"></A>
+ <A NAME="IDX135"></A>
+ <A NAME="IDX136"></A>
+ <A NAME="IDX137"></A>
+ <A NAME="IDX138"></A>
+ <A NAME="IDX139"></A>
+ <A NAME="IDX140"></A>
+ 
+ 
+ <P>
+ It can sometimes be confusing to discuss <EM>dynamic linking</EM>, because
+ the term is used to refer to two different concepts:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Compiling and linking a program against a shared library, which is
+ resolved automatically at run time by the dynamic linker.  In this
+ process, dynamic linking is transparent to the application.
+ 
+ <LI>
+ 
+ The application calling functions such as <CODE>dlopen</CODE>,<A NAME="DOCF7" HREF="libtool_foot.html#FOOT7">(7)</A> which load
+ arbitrary, user-specified modules at runtime.  This type of dynamic
+ linking is explicitly controlled by the application.
+ </OL>
+ 
+ <P>
+ To mitigate confusion, this manual refers to the second type of dynamic
+ linking as <EM>dlopening</EM> a module.
+ 
+ 
+ <P>
+ The main benefit to dlopening object modules is the ability to access
+ compiled object code to extend your program, rather than using an
+ interpreted language.  In fact, dlopen calls are frequently used in
+ language interpreters to provide an efficient way to extend the
+ language.
+ 
+ 
+ <P>
+ As of version 1.4.2, libtool provides support for dlopened
+ modules.  However, you should indicate that your package is willing to
+ use such support, by using the macro <SAMP>`AC_LIBTOOL_DLOPEN'</SAMP> in
+ <TT>`configure.in'</TT>.  If this macro is not used (or it is used
+ <EM>after</EM> <SAMP>`AC_PROG_LIBTOOL'</SAMP>), libtool will assume no dlopening
+ mechanism is available, and will try to simulate it.
+ 
+ 
+ <P>
+ This chapter discusses how you as a dlopen application developer might
+ use libtool to generate dlopen-accessible modules.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC41" HREF="libtool_toc.html#TOC41">Building modules to dlopen</A></H2>
+ 
+ <P>
+ On some operating systems, a program symbol must be specially declared
+ in order to be dynamically resolved with the <CODE>dlsym</CODE> (or
+ equivalent) function.
+ 
+ 
+ <P>
+ Libtool provides the <SAMP>`-export-dynamic'</SAMP> and <SAMP>`-module'</SAMP>
+ link flags (see section <A HREF="libtool.html#SEC17">Link mode</A>), which do this declaration.
+ You need to use these flags if you are linking an application program that
+ dlopens other modules or a libtool library that will also be dlopened.
+ 
+ 
+ <P>
+ For example, if we wanted to build a shared library, <TT>`libhello'</TT>,
+ that would later be dlopened by an application, we would add
+ <SAMP>`-module'</SAMP> to the other link flags:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -module -o libhello.la foo.lo \
+                 hello.lo -rpath /usr/local/lib -lm</KBD>
+ burger$
+ </PRE>
+ 
+ <P>
+ If symbols from your <EM>executable</EM> are needed to satisfy unresolved
+ references in a library you want to dlopen you will have to use the flag
+ <SAMP>`-export-dynamic'</SAMP>.
+ You should use <SAMP>`-export-dynamic'</SAMP> while linking the executable that calls
+ dlopen:
+ 
+ 
+ 
+ <PRE>
+ burger$ <KBD>libtool gcc -export-dynamic -o hell-dlopener main.o</KBD>
+ burger$
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC42" HREF="libtool_toc.html#TOC42">Dlpreopening</A></H2>
+ 
+ <P>
+ Libtool provides special support for dlopening libtool object and
+ libtool library files, so that their symbols can be resolved <EM>even
+ on platforms without any <CODE>dlopen</CODE> and <CODE>dlsym</CODE>
+ functions</EM>.
+ 
+ 
+ <P>
+ Consider the following alternative ways of loading code into your
+ program, in order of increasing "laziness":
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Linking against object files that become part of the program executable,
+ whether or not they are referenced.  If an object file cannot be found,
+ then the linker refuses to create the executable.
+ 
+ <LI>
+ 
+ Declaring a static library to the linker, so that it is searched at link
+ time in order to satisfy any undefined references in the above object
+ files.  If the static library cannot be found, then the linker refuses
+ to link the executable.
+ 
+ <LI>
+ 
+ Declaring a shared library to the runtime linker, so that it is searched
+ at runtime in order to satisfy any undefined references in the above
+ files.  If the shared library cannot be found, then the dynamic linker
+ aborts the program before it runs.
+ 
+ <LI>
+ 
+ Dlopening a module, so that the application can resolve its own,
+ dynamically-computed references.  If there is an error opening the
+ module, or the module is not found, then the application can recover
+ without crashing.
+ </OL>
+ 
+ <P>
+ Libtool emulates <SAMP>`-dlopen'</SAMP> on static platforms by linking objects
+ into the program at compile time, and creating data structures that
+ represent the program's symbol table.
+ 
+ 
+ <P>
+ In order to use this feature, you must declare the objects you want your
+ application to dlopen by using the <SAMP>`-dlopen'</SAMP> or <SAMP>`-dlpreopen'</SAMP>
+ flags when you link your program (see section <A HREF="libtool.html#SEC17">Link mode</A>).
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Structure:</U> struct <B>lt_dlsymlist</B> <I>{ const char *<VAR>name</VAR>; lt_ptr <VAR>address</VAR>; }</I>
+ <DD><A NAME="IDX141"></A>
+ The <VAR>name</VAR> attribute is a null-terminated character string of the
+ symbol name, such as <CODE>"fprintf"</CODE>.  The <VAR>address</VAR> attribute is a
+ generic pointer to the appropriate object, such as <CODE>&#38;fprintf</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> const lt_dlsymlist * <B>lt_preloaded_symbols</B>
+ <DD><A NAME="IDX142"></A>
+ An array of <VAR>lt_symbol</VAR> structures, representing all the preloaded
+ symbols linked into the program. For each <SAMP>`-dlpreloaded'</SAMP> file
+ there is an element with the <VAR>name</VAR> of the file and a <VAR>address</VAR>
+ of <CODE>0</CODE>, followed by all symbols exported from this file.
+ For the executable itself the special name @PROGRAM@ is used.
+ The last element has a <VAR>name</VAR> and <VAR>address</VAR> of <CODE>0</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ Some compilers may allow identifiers which are not valid in ANSI C, such
+ as dollar signs.  Libtool only recognizes valid ANSI C symbols (an
+ initial ASCII letter or underscore, followed by zero or more ASCII
+ letters, digits, and underscores), so non-ANSI symbols will not appear
+ in <VAR>lt_preloaded_symbols</VAR>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC43" HREF="libtool_toc.html#TOC43">Finding the correct name to dlopen</A></H2>
+ <P>
+ <A NAME="IDX143"></A>
+ <A NAME="IDX144"></A>
+ 
+ 
+ <P>
+ After a library has been linked with <SAMP>`-module'</SAMP>, it can be dlopened.
+ Unfortunately, because of the variation in library names,
+ your package needs to determine the correct file to dlopen.
+ 
+ 
+ <P>
+ The most straightforward and flexible implementation is to determine the
+ name at runtime, by finding the installed <SAMP>`.la'</SAMP> file, and searching
+ it for the following lines:
+ 
+ 
+ 
+ <PRE>
+ # The name that we can <CODE>dlopen</CODE>.
+ dlname='<VAR>dlname</VAR>'
+ </PRE>
+ 
+ <P>
+ If <VAR>dlname</VAR> is empty, then the library cannot be dlopened.
+ Otherwise, it gives the dlname of the library.  So, if the library was
+ installed as <TT>`/usr/local/lib/libhello.la'</TT>, and the <VAR>dlname</VAR> was
+ <TT>`libhello.so.3'</TT>, then <TT>`/usr/local/lib/libhello.so.3'</TT> should be
+ dlopened.
+ 
+ 
+ <P>
+ If your program uses this approach, then it should search the
+ directories listed in the <CODE>LD_LIBRARY_PATH</CODE><A NAME="DOCF8" HREF="libtool_foot.html#FOOT8">(8)</A> environment variable, as well as
+ the directory where libraries will eventually be installed.  Searching
+ this variable (or equivalent) will guarantee that your program can find
+ its dlopened modules, even before installation, provided you have linked
+ them using libtool.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC44" HREF="libtool_toc.html#TOC44">Unresolved dlopen issues</A></H2>
+ <P>
+ <A NAME="IDX145"></A>
+ <A NAME="IDX146"></A>
+ <A NAME="IDX147"></A>
+ 
+ 
+ <P>
+ The following problems are not solved by using libtool's dlopen support:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ Dlopen functions are generally only available on shared library
+ platforms.  If you want your package to be portable to static platforms,
+ you have to use either libltdl (see section <A HREF="libtool.html#SEC45">Using libltdl</A>) or develop your
+ own alternatives to dlopening dynamic code.
+ Most reasonable solutions involve writing wrapper functions for the
+ <CODE>dlopen</CODE> family, which do package-specific tricks when dlopening
+ is unsupported or not available on a given platform.
+ 
+ <LI>
+ 
+ There are major differences in implementations of the <CODE>dlopen</CODE>
+ family of functions.  Some platforms do not even use the same function
+ names (notably HP-UX, with its <CODE>shl_load</CODE> family).
+ 
+ <LI>
+ 
+ The application developer must write a custom search function in order
+ to discover the correct module filename to supply to <CODE>dlopen</CODE>.
+ </UL>
+ 
+ 
+ 
+ <H1><A NAME="SEC45" HREF="libtool_toc.html#TOC45">Using libltdl</A></H1>
+ <P>
+ <A NAME="IDX148"></A>
+ <A NAME="IDX149"></A>
+ <A NAME="IDX150"></A>
+ <A NAME="IDX151"></A>
+ <A NAME="IDX152"></A>
+ <A NAME="IDX153"></A>
+ <A NAME="IDX154"></A>
+ <A NAME="IDX155"></A>
+ <A NAME="IDX156"></A>
+ <A NAME="IDX157"></A>
+ 
+ 
+ <P>
+ Libtool provides a small library, called <TT>`libltdl'</TT>, that aims at
+ hiding the various difficulties of dlopening libraries from programmers.
+ It consists of a header-file and a small C source file that can be
+ distributed with applications that need dlopening functionality.  On
+ some platforms, whose dynamic linkers are too limited for a simple
+ implementation of <TT>`libltdl'</TT> services, it requires GNU DLD, or it
+ will only emulate dynamic linking with libtool's dlpreopening mechanism.
+ 
+ 
+ <P>
+ libltdl supports currently the following dynamic linking mechanisms:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ <CODE>dlopen</CODE> (Solaris, Linux and various BSD flavors)
+ <LI>
+ 
+ <CODE>shl_load</CODE> (HP-UX)
+ <LI>
+ 
+ <CODE>LoadLibrary</CODE> (Win16 and Win32)
+ <LI>
+ 
+ <CODE>load_add_on</CODE> (BeOS)
+ <LI>
+ 
+ GNU DLD (emulates dynamic linking for static libraries)
+ <LI>
+ 
+ libtool's dlpreopen (see see section <A HREF="libtool.html#SEC42">Dlpreopening</A>)
+ </UL>
+ 
+ <P>
+ libltdl is licensed under the terms of the GNU Library General Public License,
+ with the following exception:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ As a special exception to the GNU Lesser General Public License,
+ if you distribute this file as part of a program or library that
+ is built using GNU libtool, you may include it under the same
+ distribution terms that you use for the rest of that program.
+ </BLOCKQUOTE>
+ 
+ 
+ 
+ <H2><A NAME="SEC46" HREF="libtool_toc.html#TOC46">How to use libltdl in your programs</A></H2>
+ 
+ <P>
+ The libltdl API is similar to the dlopen interface of Solaris and Linux,
+ which is very simple but powerful.
+ 
+ 
+ <P>
+ To use libltdl in your program you have to include the header file <TT>`ltdl.h'</TT>:
+ 
+ 
+ 
+ <PRE>
+ #include &#60;ltdl.h&#62;
+ </PRE>
+ 
+ <P>
+ The last release of libltdl used some symbols that violated the
+ POSIX namespace conventions.  These symbols are now deprecated,
+ and have been replaced by those described here.  If you have code that
+ relies on the old deprecated symbol names, defining
+ <SAMP>`LT_NON_POSIX_NAMESPACE'</SAMP> before you include <TT>`ltdl.h'</TT> provides
+ conversion macros.  Whichever set of symbols you use, the new api is
+ not binary compatible with the last, so you will need to recompile
+ your application in order to use this version of libltdl.
+ 
+ 
+ <P>
+ Note that libltdl is not threadsafe, i.e. a multithreaded application
+ has to use a mutex for libltdl.  It was reported that GNU/Linux's glibc
+ 2.0's <CODE>dlopen</CODE> with <SAMP>`RTLD_LAZY'</SAMP> (which libltdl uses by
+ default) is not thread-safe, but this problem is supposed to be fixed in
+ glibc 2.1.  On the other hand, <SAMP>`RTLD_NOW'</SAMP> was reported to introduce
+ problems in multi-threaded applications on FreeBSD.  Working around
+ these problems is left as an exercise for the reader; contributions are
+ certainly welcome.
+ 
+ 
+ <P>
+ The following types are defined in <TT>`ltdl.h'</TT>:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_ptr</B>
+ <DD><A NAME="IDX158"></A>
+ <CODE>lt_ptr</CODE> is a generic pointer.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_dlhandle</B>
+ <DD><A NAME="IDX159"></A>
+ <CODE>lt_dlhandle</CODE> is a module "handle".
+ Every lt_dlopened module has a handle associated with it.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_dlsymlist</B>
+ <DD><A NAME="IDX160"></A>
+ <CODE>lt_dlsymlist</CODE> is a symbol list for dlpreopened modules.
+ This structure is described in see section <A HREF="libtool.html#SEC42">Dlpreopening</A>.
+ </DL>
+ 
+ 
+ <P>
+ libltdl provides the following functions:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlinit</B> <I>(void)</I>
+ <DD><A NAME="IDX161"></A>
+ Initialize libltdl.
+ This function must be called before using libltdl
+ and may be called several times.
+ Return 0 on success, otherwise the number of errors.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlexit</B> <I>(void)</I>
+ <DD><A NAME="IDX162"></A>
+ Shut down libltdl and close all modules.
+ This function will only then shut down libltdl when it was called as
+ many times as <CODE>lt_dlinit</CODE> has been successfully called.
+ Return 0 on success, otherwise the number of errors.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_dlhandle <B>lt_dlopen</B> <I>(const char *<VAR>filename</VAR>)</I>
+ <DD><A NAME="IDX163"></A>
+ Open the module with the file name <VAR>filename</VAR> and return a
+ handle for it.  <CODE>lt_dlopen</CODE> is able to open libtool dynamic
+ modules, preloaded static modules, the program itself and
+ native dynamic libraries.
+ 
+ 
+ <P>
+ Unresolved symbols in the module are resolved using its dependency
+ libraries (not implemented yet) and previously dlopened modules.  If the
+ executable using this module was linked with the <CODE>-export-dynamic</CODE>
+ flag, then the global symbols in the executable will also be used to
+ resolve references in the module.
+ 
+ 
+ <P>
+ If <VAR>filename</VAR> is <CODE>NULL</CODE> and the program was linked with
+ <CODE>-export-dynamic</CODE> or <CODE>-dlopen self</CODE>, <CODE>lt_dlopen</CODE> will
+ return a handle for the program itself, which can be used to access its
+ symbols.
+ 
+ 
+ <P>
+ If libltdl cannot find the library and the file name <VAR>filename</VAR> does
+ not have a directory component it will additionally search in the
+ following search paths for the module (in the order as follows):
+ 
+ 
+ 
+ <OL>
+ <LI>user-defined search path:
+ 
+ This search path can be set by the program using the
+ functions <CODE>lt_dlsetsearchpath</CODE> and <CODE>lt_dladdsearchdir</CODE>.
+ 
+ <LI>libltdl's search path:
+ 
+ This search path is the value of the environment variable
+ <VAR>LTDL_LIBRARY_PATH</VAR>.
+ 
+ <LI>system library search path:
+ 
+ The system dependent library search path
+ (e.g. on Linux it is <VAR>LD_LIBRARY_PATH</VAR>).
+ </OL>
+ 
+ <P>
+ Each search path must be a colon-separated list of absolute directories,
+ for example, <CODE>"/usr/lib/mypkg:/lib/foo"</CODE>.
+ 
+ 
+ <P>
+ If the same module is loaded several times, the same handle is returned.
+ If <CODE>lt_dlopen</CODE> fails for any reason, it returns <CODE>NULL</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_dlhandle <B>lt_dlopenext</B> <I>(const char *<VAR>filename</VAR>)</I>
+ <DD><A NAME="IDX164"></A>
+ The same as <CODE>lt_dlopen</CODE>, except that it tries to append
+ different file name extensions to the file name.
+ If the file with the file name <VAR>filename</VAR> cannot be found
+ libltdl tries to append the following extensions:
+ 
+ 
+ 
+ <OL>
+ <LI>the libtool archive extension <SAMP>`.la'</SAMP>
+ 
+ <LI>the extension used for native dynamic libraries on the host platform,
+ 
+ e.g., <SAMP>`.so'</SAMP>, <SAMP>`.sl'</SAMP>, etc.
+ </OL>
+ 
+ <P>
+ This lookup strategy was designed to allow programs that don't
+ have knowledge about native dynamic libraries naming conventions
+ to be able to <CODE>dlopen</CODE> such libraries as well as libtool modules
+ transparently.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlclose</B> <I>(lt_dlhandle <VAR>handle</VAR>)</I>
+ <DD><A NAME="IDX165"></A>
+ Decrement the reference count on the module <VAR>handle</VAR>.
+ If it drops to zero and no other module depends on this module,
+ then the module is unloaded.
+ Return 0 on success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_ptr <B>lt_dlsym</B> <I>(lt_dlhandle <VAR>handle</VAR>, const char *<VAR>name</VAR>)</I>
+ <DD><A NAME="IDX166"></A>
+ Return the address in the module <VAR>handle</VAR>, where the symbol given
+ by the null-terminated string <VAR>name</VAR> is loaded.
+ If the symbol cannot be found, <CODE>NULL</CODE> is returned.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {const char *}lt_dlerror <B>(void)</B>
+ <DD><A NAME="IDX167"></A>
+ Return a human readable string describing the most
+ recent error that occurred from any of libltdl's functions.
+ Return <CODE>NULL</CODE> if no errors have occurred since initialization
+ or since it was last called.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlpreload</B> <I>(const lt_dlsymlist *<VAR>preloaded</VAR>)</I>
+ <DD><A NAME="IDX168"></A>
+ Register the list of preloaded modules <VAR>preloaded</VAR>.
+ If <VAR>preloaded</VAR> is <CODE>NULL</CODE>, then all previously registered
+ symbol lists, except the list set by <CODE>lt_dlpreload_default</CODE>,
+ are deleted. Return 0 on success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlpreload_default</B> <I>(const lt_dlsymlist *<VAR>preloaded</VAR>)</I>
+ <DD><A NAME="IDX169"></A>
+ Set the default list of preloaded modules to <VAR>preloaded</VAR>, which
+ won't be deleted by <CODE>lt_dlpreload</CODE>.  Note that this function does
+ <EM>not</EM> require libltdl to be initialized using <CODE>lt_dlinit</CODE> and
+ can be used in the program to register the default preloaded modules.
+ Instead of calling this function directly, most programs will use the
+ macro <CODE>LTDL_SET_PRELOADED_SYMBOLS</CODE>.
+ 
+ 
+ <P>
+ Return 0 on success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Macro:</U> <B>LTDL_SET_PRELOADED_SYMBOLS()</B>
+ <DD><A NAME="IDX170"></A>
+ Set the default list of preloaded symbols.
+ Should be used in your program to initialize libltdl's
+ list of preloaded modules.
+ 
+ 
+ 
+ <PRE>
+ #include &#60;ltdl.h&#62;
+ 
+ int main() {
+   /* ... */
+   LTDL_SET_PRELOADED_SYMBOLS();
+   /* ... */
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dladdsearchdir</B> <I>(const char *<VAR>search_dir</VAR>)</I>
+ <DD><A NAME="IDX171"></A>
+ Add the search directory <VAR>search_dir</VAR> to the user-defined library
+ search path. Return 0 on success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlsetsearchpath</B> <I>(const char *<VAR>search_path</VAR>)</I>
+ <DD><A NAME="IDX172"></A>
+ Replace the current user-defined library search path with
+ <VAR>search_path</VAR>, which must be a colon-separated list of absolute
+ directories.  Return 0 on success.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {const char *}lt_dlgetsearchpath <B>(void)</B>
+ <DD><A NAME="IDX173"></A>
+ Return the current user-defined library search path.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlmakeresident</B> <I>(lt_dlhandle <VAR>handle</VAR>)</I>
+ <DD><A NAME="IDX174"></A>
+ Mark a module so that it cannot be <SAMP>`lt_dlclose'</SAMP>d.  This can be
+ useful if a module implements some core functionality in your project,
+ which would cause your code to crash if removed.  Return 0 on success.
+ 
+ 
+ <P>
+ If you use <SAMP>`lt_dlopen (NULL)'</SAMP> to get a <VAR>handle</VAR> for the running
+ binary, that handle will always be marked as resident, and consequently
+ cannot be successfully <SAMP>`lt_dlclose'</SAMP>d.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlisresident</B> <I>(lt_dlhandle <VAR>handle</VAR>)</I>
+ <DD><A NAME="IDX175"></A>
+ Check whether a particular module has been marked as resident, returning 1
+ if it has or 0 otherwise.  If there is an error while executing this
+ function, return -1 and set an error message for retrieval with
+ <CODE>lt_dlerror</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> lt_ptr (*) (size_t <VAR>size</VAR>) <B>lt_dlmalloc</B>
+ <DD><A NAME="IDX176"></A>
+ <DT><U>Variable:</U> void (*) (lt_ptr <VAR>ptr</VAR>) <B>lt_dlfree</B>
+ <DD><A NAME="IDX177"></A>
+ These variables are set to <CODE>malloc</CODE> and <CODE>free</CODE>, by default,
+ but you can set them to any other functions that provides equivalent
+ functionality.  However, you must not modify their values after calling
+ any libltdl function other than <CODE>lt_dlpreopen_default</CODE> or the macro
+ <CODE>LTDL_SET_PRELOADED_SYMBOLS</CODE>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC47" HREF="libtool_toc.html#TOC47">Creating modules that can be <CODE>dlopen</CODE>ed</A></H2>
+ 
+ <P>
+ Libtool modules are like normal libtool libraries with a few exceptions:
+ 
+ 
+ <P>
+ You have to link the module with libtool's <SAMP>`-module'</SAMP> switch,
+ and you should link any program that is intended to dlopen the module with
+ <SAMP>`-dlopen modulename.la'</SAMP> so that libtool can dlpreopen the module
+ on platforms which don't support dlopening.  If the module depends on any
+ other libraries, make sure you specify them either when you link the module
+ or when you link programs that dlopen it.
+ If you want to disable see section <A HREF="libtool.html#SEC32">Library interface versions</A> for a specific module
+ you should link it with the <SAMP>`-avoid-version'</SAMP> switch.
+ Note that libtool modules don't need to have a "lib" prefix.
+ However, automake 1.4 or higher is required to build such modules.
+ 
+ 
+ <P>
+ Usually a set of modules provide the same interface, i.e, exports the same
+ symbols, so that a program can dlopen them without having to know more
+ about their internals.
+ In order to avoid symbol conflicts all exported symbols must be prefixed
+ with "modulename_LTX_" (<SAMP>`modulename'</SAMP> is the name of the module).
+ Internal symbols must be named in such a way that they won't conflict
+ with other modules, for example, by prefixing them with "_modulename_".
+ Although some platforms support having the same symbols defined more than
+ once it is generally not portable and it makes it impossible to dlpreopen
+ such modules.  libltdl will automatically cut the prefix off to get
+ the real name of the symbol.  Additionally, it supports modules which
+ don't use a prefix so that you can also dlopen non-libtool modules.
+ 
+ 
+ <P>
+ <TT>`foo1.c'</TT> gives an example of a portable libtool module.
+ Exported symbols are prefixed with "foo1_LTX_", internal symbols
+ with "_foo1_". Aliases are defined at the beginning so that the code
+ is more readable.
+ 
+ 
+ 
+ <PRE>
+ /* aliases for the exported symbols */
+ #define foo    foo1_LTX_foo
+ #define bar    foo1_LTX_bar
+ 
+ /* a global variable definition */
+ int bar = 1;
+ 
+ /* a private function */
+ int _foo1_helper() {
+   return bar;
+ }
+ 
+ /* an exported function */
+ int foo() {
+   return _foo1_helper();
+ }
+ </PRE>
+ 
+ <P>
+ The <TT>`Makefile.am'</TT> contains the necessary rules to build the
+ module <TT>`foo1.la'</TT>:
+ 
+ 
+ 
+ <PRE>
+ ...
+ lib_LTLIBRARIES = foo1.la
+ 
+ foo1_la_SOURCES = foo1.c
+ foo1_la_LDFLAGS = -module
+ ...
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC48" HREF="libtool_toc.html#TOC48">Using libtldl in a multi threaded environment</A></H2>
+ 
+ <P>
+ Using the <CODE>lt_dlmutex_register()</CODE> function, and by providing some
+ appropriate callback function definitions, libltdl can be used in a
+ multi-threaded environment.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> void <B>lt_dlmutex_lock</B> <I>(void)</I>
+ <DD><A NAME="IDX178"></A>
+ This is the type of a function pointer holding the address of a function
+ which will be called at the start of parts of the libltdl implementation
+ code which require a mutex lock.
+ 
+ 
+ <P>
+ Because libltdl is inherantly recursive, it is important that the
+ locking mechanism employed by these callback functions are reentrant, or
+ else strange problems will occur.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> void <B>lt_dlmutex_unlock</B> <I>(void)</I>
+ <DD><A NAME="IDX179"></A>
+ The type of a matching unlock function.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> void <B>lt_dlmutex_seterror</B> <I>(const char *<VAR>error</VAR>);</I>
+ <DD><A NAME="IDX180"></A>
+ Many of the functions in the libltdl API have a special return
+ value to indicate to the client that an error has occured.  Normally (in
+ single threaded applications) a string describing that error can be
+ retrieved from internal storage with <CODE>lt_dlerror()</CODE>.
+ 
+ 
+ <P>
+ A function of this type must be registered with the library in order for
+ it to work in a multi-threaded context.  The function should store any
+ error message passed in thread local storage.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> const char * <B>lt_dlmutex_geterror</B> <I>(void)</I>
+ <DD><A NAME="IDX181"></A>
+ The type of a matching callback function to retrieve the last stored
+ error message from thread local storage.
+ 
+ 
+ <P>
+ When regeistered correctly this function will be used by
+ <CODE>lt_dlerror())</CODE> from all threads to retrieve error messages for the
+ client.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlmutex_register</B> <I>(lt_dlmutex_lock *<VAR>lock</VAR>, lt_dlmutex_unlock *<VAR>unlock</VAR>, lt_dlmutex_set_error *<VAR>seterror</VAR>, lt_dlmutex_geterror *<VAR>geterror</VAR>)</I>
+ <DD><A NAME="IDX182"></A>
+ Use this function to register one of each of function ttypes described
+ above in preparation for multi-threaded use of libltdl.  All arguments
+ must be valid non-<CODE>NULL</CODE> function addresses, or else all
+ <CODE>NULL</CODE> to return to single threaded operation.
+ </DL>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC49" HREF="libtool_toc.html#TOC49">Data associated with loaded modules</A></H2>
+ 
+ <P>
+ Some of the internal information about each loaded module that is
+ maintained by libltdl is available to the user, in the form of this
+ structure:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> struct <B>lt_dlinfo</B> <I>{ char *<VAR>filename</VAR>; char *<VAR>name</VAR>; int <VAR>ref_count</VAR>; }</I>
+ <DD><A NAME="IDX183"></A>
+ <CODE>lt_dlinfo</CODE> is used to store information about a module.
+ The <VAR>filename</VAR> attribute is a null-terminated character string of
+ the real module file name.  If the module is a libtool module then
+ <VAR>name</VAR> is its module name (e.g. <CODE>"libfoo"</CODE> for
+ <CODE>"dir/libfoo.la"</CODE>), otherwise it is set to <CODE>NULL</CODE>.  The
+ <VAR>ref_count</VAR> attribute is a reference counter that describes how
+ often the same module is currently loaded.
+ </DL>
+ 
+ 
+ <P>
+ The following function will return a pointer to libltdl's internal copy
+ of this structure for the given <VAR>handle</VAR>:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> const lt_dlinfo * <B>lt_dlgetinfo</B> <I>(lt_dlhandle <VAR>handle</VAR>)</I>
+ <DD><A NAME="IDX184"></A>
+ Return a pointer to a struct that contains some information about
+ the module <VAR>handle</VAR>.  The contents of the struct must not be modified.
+ Return <CODE>NULL</CODE> on failure.
+ </DL>
+ 
+ 
+ <P>
+ Furthermore, in order to save you from having to keep a list of the
+ handles of all the modules you have loaded, these functions allow you to
+ iterate over libltdl's list of loaded modules:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlforeach</B> <I>(int (*<VAR>func</VAR>) (lt_dlhandle <VAR>handle</VAR>, lt_ptr <VAR>data</VAR>), lt_ptr <VAR>data</VAR>)</I>
+ <DD><A NAME="IDX185"></A>
+ For each loaded module call the function <VAR>func</VAR>.  The argument
+ <VAR>handle</VAR> is the handle of one of the loaded modules, <VAR>data</VAR> is
+ the <VAR>data</VAR> argument passed to <CODE>lt_dlforeach</CODE>.
+ As soon as <VAR>func</VAR> returns a non-zero value for one of the handles,
+ <CODE>lt_dlforeach</CODE> will stop calling <VAR>func</VAR> and immediately return 1.
+ Otherwise 0 is returned.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_dlhandle <B>lt_dlhandle_next</B> <I>(lt_dlhandle place)</I>
+ <DD><A NAME="IDX186"></A>
+ Iterate over the loaded module handles, returning the first handle in the
+ list if <VAR>place</VAR> is <CODE>NULL</CODE>, and the next one on subsequent calls.
+ If <VAR>place</VAR> is the last element in the list of loaded modules, this
+ function returns <CODE>NULL</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ Of course, you would still need to maintain your own list of loaded
+ module handles to parallel the list maintained by libltdl if there are
+ any other data that you need to associate with each handle for the
+ purposes of your application.  However, if you use the following
+ API calls to associate your application data with individual module
+ handles as they are loaded there is actually no need to do that.  You
+ must first obtain a unique caller id from libltdl which you subsequently
+ use to retrieve the data you stored earlier.  This allows for different
+ libraries that each wish to store their own data against loaded modules
+ to do so without interfering with one another's data.
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_dlcaller_id</B>
+ <DD><A NAME="IDX187"></A>
+ The opaque type used to hold individual data set keys.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_dlcaller_id <B>lt_dlcaller_register</B> <I>(void)</I>
+ <DD><A NAME="IDX188"></A>
+ Use this to obtain a unique key to store and retrieve individual sets of
+ per module data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_ptr <B>lt_dlcaller_set_data</B> <I>(lt_dlcaller_id <VAR>key</VAR>, lt_dlhandle <VAR>handle</VAR>, lt_ptr <VAR>data</VAR>)</I>
+ <DD><A NAME="IDX189"></A>
+ Set <VAR>data</VAR> as the set of data uniquely associated with <VAR>key</VAR> and
+ <VAR>handle</VAR> for later retrieval.  This function returns the <VAR>data</VAR>
+ previously associated with <VAR>key</VAR> and <VAR>handle</VAR> if any.  A result of
+ 0, may indicate that a diagnostic for the last error (if any) is available
+ from <CODE>lt_dlerror()</CODE>.
+ 
+ 
+ <P>
+ For example, to correctly remove some associated data:
+ 
+ 
+ 
+ <PRE>
+     lt_ptr stale = lt_dlcaller_set_data (key, handle, 0);
+     if (stale == NULL)
+       {
+         char *error_msg = lt_dlerror ();
+ 
+         if (error_msg != NULL)
+           {
+             my_error_handler (error_msg);
+             return STATUS_FAILED;
+           }
+       }
+     else
+       {
+         free (stale);
+       }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> lt_ptr <B>lt_dlcaller_get_data</B> <I>(lt_dlcaller_id <VAR>key</VAR>, lt_dlhandle <VAR>handle</VAR>)</I>
+ <DD><A NAME="IDX190"></A>
+ Return the address of the data associated with <VAR>key</VAR> and
+ <VAR>handle</VAR>, or else <CODE>NULL</CODE> if there is none.
+ </DL>
+ 
+ 
+ <P>
+ The preceding functions can be combined with <CODE>lt_dlforeach</CODE> to
+ implement search and apply operations without the need for your
+ application to track the modules that have been loaded and unloaded:
+ 
+ 
+ 
+ <PRE>
+ int
+ my_dlcaller_callback (lt_dlhandle handle, lt_ptr key_ptr)
+ {
+   struct my_module_data *my_data;
+ 
+   my_data = lt_dlcaller_get_data (handle, (lt_dlcaller_id) *key_ptr);
+ 
+   return process (my_data);
+ }
+ 
+ int
+ my_dlcaller_foreach (lt_dlcaller_id key)
+ {
+   lt_dlforeach (my_dlcaller_callback, (lt_ptr) &#38;key);
+ }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC50" HREF="libtool_toc.html#TOC50">How to create and register new module loaders</A></H2>
+ 
+ <P>
+ Sometimes libltdl's many ways of gaining access to modules are not
+ sufficient for the purposes of a project.  You can write your own
+ loader, and register it with libltdl so that <CODE>lt_dlopen</CODE> will be
+ able to use it.
+ 
+ 
+ <P>
+ Writing a loader involves writing at least three functions which can be
+ called  by <CODE>lt_dlopen</CODE>, <CODE>lt_dlsym</CODE> and <CODE>lt_dlclose</CODE>.
+ Optionally, you can provide a finalisation function to perform any
+ cleanup operations when <CODE>lt_dlexit</CODE> executes, and a symbol prefix
+ string which will be prepended to any symbols passed to <CODE>lt_dlsym</CODE>.
+ These functions must match the function pointer types below, after
+ which they can be allocated to an instance of <CODE>lt_user_dlloader</CODE>
+ and registered.
+ 
+ 
+ <P>
+ Registering the loader requires that you choose a name for it, so that it
+ can be recognised by <CODE>lt_dlloader_find</CODE> and removed with
+ <CODE>lt_dlloader_remove</CODE>.  The name you choose must be unique, and not
+ already in use by libltdl's builtin loaders:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>"dlopen"
+ <DD>
+ The system dynamic library loader, if one exists.
+ <DT>"dld"
+ <DD>
+ The GNU dld loader, if <TT>`libdld'</TT> was installed when libltdl was
+ built.
+ <DT>"dlpreload"
+ <DD>
+ The loader for <CODE>lt_dlopen</CODE>ing of preloaded static modules.
+ </DL>
+ 
+ <P>
+ The prefix "dl" is reserved for loaders supplied with future versions of
+ libltdl, so you should not use that for your own loader names.
+ 
+ 
+ <P>
+ The following types are defined in <TT>`ltdl.h'</TT>:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_module</B>
+ <DD><A NAME="IDX191"></A>
+ <CODE>lt_module</CODE> is a dlloader dependent module.
+ The dynamic module loader extensions communicate using these low
+ level types.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_dlloader</B>
+ <DD><A NAME="IDX192"></A>
+ <CODE>lt_dlloader</CODE> is a handle for module loader types.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> <B>lt_dlloader_data</B>
+ <DD><A NAME="IDX193"></A>
+ <CODE>lt_dlloader_data</CODE> is used for specifying loader instance data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> struct <B>lt_user_dlloader</B> <I>{const char *<VAR>sym_prefix</VAR>; lt_module_open *<VAR>module_open</VAR>;lt_module_close *<VAR>module_close</VAR>; lt_find_sym *<VAR>find_sym</VAR>; lt_dlloader_exit *<VAR>dlloader_exit</VAR>; lt_dlloader_data <VAR>dlloader_data</VAR>; }</I>
+ <DD><A NAME="IDX194"></A>
+ If you want to define a new way to open dynamic modules, and have the
+ <CODE>lt_dlopen</CODE> API use it, you need to instantiate one of these
+ structures and pass it to <CODE>lt_dlloader_add</CODE>.  You can pass whatever
+ you like in the <VAR>dlloader_data</VAR> field, and it will be passed back as
+ the value of the first parameter to each of the functions specified in
+ the function pointer fields.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> lt_module <B>lt_module_open</B> <I>(lt_user_data <VAR>loader_data</VAR>, const char *<VAR>filename</VAR>)</I>
+ <DD><A NAME="IDX195"></A>
+ The type of the loader function for an <CODE>lt_dlloader</CODE> module
+ loader.  The value set in the dlloader_data field of the <CODE>struct
+ lt_user_dlloader</CODE> structure will be passed into this function in the
+ <VAR>loader_data</VAR> parameter.  Implementation of such a function should
+ attempt to load the named module, and return an <CODE>lt_module</CODE>
+ suitable for passing in to the associated <CODE>lt_module_close</CODE> and
+ <CODE>lt_sym_find</CODE> function pointers.  If the function fails it should
+ return <CODE>NULL</CODE>, and set the error message with <CODE>lt_dlseterror</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> int <B>lt_module_close</B> <I>(lt_dlloader_data <VAR>loader_data</VAR>, lt_module <VAR>module</VAR>)</I>
+ <DD><A NAME="IDX196"></A>
+ The type of the unloader function for a user defined module loader.
+ Implementatation of such a function should attempt to release
+ any resources tied up by the <VAR>module</VAR> module, and then unload it
+ from memory.  If the function fails for some reason, set the error
+ message with <CODE>lt_dlseterror</CODE> and return non-zero.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> lt_ptr <B>lt_find_sym</B> <I>(lt_user_data <VAR>loader_data</VAR>, lt_module <VAR>module</VAR>, const char *<VAR>symbol</VAR>)</I>
+ <DD><A NAME="IDX197"></A>
+ The type of the symbol lookup function for a user defined module loader.
+ Implementation of such a function should return the address of the named
+ <VAR>symbol</VAR> in the module <VAR>module</VAR>, or else set the error message
+ with <CODE>lt_dlseterror</CODE> and return <CODE>NULL</CODE> if lookup fails.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Type:</U> int <B>lt_dlloader_exit</B> <I>(lt_user_data <VAR>loader_data</VAR>)</I>
+ <DD><A NAME="IDX198"></A>
+ The type of the finalisation function for a user defined module loader.
+ Implementation of such a function should free any resources associated
+ with the loader, including any user specified data in the
+ <CODE>dlloader_data</CODE> field of the <CODE>lt_user_dlloader</CODE>.  If non-<CODE>NULL</CODE>,
+ the function will be called by <CODE>lt_dlexit</CODE>, and
+ <CODE>lt_dlloader_remove</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ For example:
+ 
+ 
+ 
+ <PRE>
+ int
+ register_myloader (void)
+ {
+   lt_user_dlloader dlloader;
+ 
+   /* User modules are responsible for their own initialisation. */
+   if (myloader_init () != 0)
+     return MYLOADER_INIT_ERROR;
+ 
+   dlloader.sym_prefix    = NULL;
+   dlloader.module_open   = myloader_open;
+   dlloader.module_close  = myloader_close;
+   dlloader.find_sym      = myloader_find_sym.
+   dlloader.dlloader_exit = myloader_exit;
+   dlloader.dlloader_data = (lt_user_data)myloader_function;
+ 
+   /* Add my loader as the default module loader. */
+   if (lt_dlloader_add (lt_dlloader_next (NULL), &#38;dlloader, "myloader") != 0)
+     return ERROR;
+ 
+   return OK;
+ }
+ </PRE>
+ 
+ <P>
+ Note that if there is any initialisation required for the loader,
+ it must be performed manually before the loader is registered --
+ libltdl doesn't handle user loader initialisation.
+ 
+ 
+ <P>
+ Finalisation <EM>is</EM> handled by libltdl however, and it is important
+ to ensure the <CODE>dlloader_exit</CODE> callback releases any resources claimed
+ during the initialisation phase.
+ 
+ 
+ <P>
+ libltdl provides the following functions for writing your own module
+ loaders:
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlloader_add</B> <I>(lt_dlloader *<VAR>place</VAR>, lt_user_dlloader *<VAR>dlloader</VAR>, const char *<VAR>loader_name</VAR>)</I>
+ <DD><A NAME="IDX199"></A>
+ Add a new module loader to the list of all loaders, either as the
+ last loader (if <VAR>place</VAR> is <CODE>NULL</CODE>), else immediately before the
+ loader passed as <VAR>place</VAR>.  <VAR>loader_name</VAR> will be returned by
+ <CODE>lt_dlloader_name</CODE> if it is subsequently passed a newly
+ registered loader.  These <VAR>loader_name</VAR>s must be unique, or
+ <CODE>lt_dlloader_remove</CODE> and <CODE>lt_dlloader_find</CODE> cannot
+ work. Returns 0 for success.
+ 
+ 
+ 
+ <PRE>
+ {
+   /* Make myloader be the last one. */
+   if (lt_dlloader_add (NULL, myloader) != 0)
+     perror (lt_dlerror ());
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlloader_remove</B> <I>(const char *<VAR>loader_name</VAR>)</I>
+ <DD><A NAME="IDX200"></A>
+ Remove the loader identified by the unique name, <VAR>loader_name</VAR>.
+ Before this can succeed, all modules opened by the named loader must
+ have been closed.  Returns 0 for success, otherwise an error message can
+ be obtained from <CODE>lt_dlerror</CODE>.
+ 
+ 
+ 
+ <PRE>
+ {
+   /* Remove myloader. */
+   if (lt_dlloader_remove ("myloader") != 0)
+     perror (lt_dlerror ());
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {lt_dlloader *}lt_dlloader_next <B>(lt_dlloader *<VAR>place</VAR>)</B>
+ <DD><A NAME="IDX201"></A>
+ Iterate over the module loaders, returning the first loader if <VAR>place</VAR> is
+ <CODE>NULL</CODE>, and the next one on subsequent calls. The handle is for use with
+ <CODE>lt_dlloader_add</CODE>.
+ 
+ 
+ 
+ <PRE>
+ {
+   /* Make myloader be the first one. */
+   if (lt_dlloader_add (lt_dlloader_next (NULL), myloader) != 0)
+     return ERROR;
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {lt_dlloader *}lt_dlloader_find <B>(const char *<VAR>loader_name</VAR>)</B>
+ <DD><A NAME="IDX202"></A>
+ Return the first loader with a matching <VAR>loader_name</VAR> identifier, or else
+ <CODE>NULL</CODE>, if the identifier is not found.
+ 
+ 
+ <P>
+ The identifiers which may be used by libltdl itself, if the host
+ architecture supports them are <EM>dlopen</EM><A NAME="DOCF9" HREF="libtool_foot.html#FOOT9">(9)</A>, <EM>dld</EM> and <EM>dlpreload</EM>.
+ 
+ 
+ 
+ <PRE>
+ {
+   /* Add a user loader as the next module loader to be tried if
+      the standard dlopen loader were to fail when lt_dlopening. */
+   if (lt_dlloader_add (lt_dlloader_find ("dlopen"), myloader) != 0)
+     return ERROR;
+ }
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {const char *}lt_dlloader_name <B>(lt_dlloader *<VAR>place</VAR>)</B>
+ <DD><A NAME="IDX203"></A>
+ Return the identifying name of <VAR>PLACE</VAR>, as obtained from
+ <CODE>lt_dlloader_next</CODE> or <CODE>lt_dlloader_find</CODE>.  If this function fails,
+ it will return <CODE>NULL</CODE> and set an error for retrieval with
+ <CODE>lt_dlerror</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> {lt_user_data *}lt_dlloader_data <B>(lt_dlloader *<VAR>place</VAR>)</B>
+ <DD><A NAME="IDX204"></A>
+ Return the address of the <CODE>dlloader_data</CODE> of <VAR>PLACE</VAR>, as
+ obtained from <CODE>lt_dlloader_next</CODE> or <CODE>lt_dlloader_find</CODE>.  If
+ this function fails, it will return <CODE>NULL</CODE> and set an error for
+ retrieval with <CODE>lt_dlerror</CODE>.
+ </DL>
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC51" HREF="libtool_toc.html#TOC51">Error handling within user module loaders</A></H3>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dladderror</B> <I>(const char *<VAR>diagnostic</VAR>)</I>
+ <DD><A NAME="IDX205"></A>
+ This function allows you to integrate your own error messages into
+ <CODE>lt_dlerror</CODE>.  Pass in a suitable diagnostic message for return by
+ <CODE>lt_dlerror</CODE>, and an error identifier for use with
+ <CODE>lt_dlseterror</CODE> is returned.
+ 
+ 
+ <P>
+ If the allocation of an identifier fails, this function returns -1.
+ 
+ 
+ 
+ <PRE>
+ int myerror = lt_dladderror ("Doh!");
+ if (myerror &#60; 0)
+   perror (lt_dlerror ());
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Function:</U> int <B>lt_dlseterror</B> <I>(int <VAR>errorcode</VAR>)</I>
+ <DD><A NAME="IDX206"></A>
+ When writing your own module loaders, you should use this function to
+ raise errors so that they are propogated through the <CODE>lt_dlerror</CODE>
+ interface. All of the standard errors used by libltdl are declared in
+ <TT>`ltdl.h'</TT>, or you can add more of your own with
+ <CODE>lt_dladderror</CODE>.  This function returns 0 on success.
+ 
+ 
+ 
+ <PRE>
+ if (lt_dlseterror (LTDL_ERROR_NO_MEMORY) != 0)
+   perror (lt_dlerror ());
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC52" HREF="libtool_toc.html#TOC52">How to distribute libltdl with your package</A></H2>
+ 
+ <P>
+ Even though libltdl is installed together with libtool, you may wish to
+ include libltdl in the distribution of your package, for the convenience
+ of users of your package that don't have libtool or libltdl installed.
+ In this case, you must decide whether to manually add the <CODE>ltdl</CODE>
+ objects to your package, or else which flavor of libltdl you want to use:
+ a convenience library or an installable libtool library.
+ 
+ 
+ <P>
+ The most simplistic way to add <CODE>libltdl</CODE> to your package is to copy
+ the source files, <TT>`ltdl.c'</TT> and <TT>`ltdl.h'</TT>, to a source directory
+ withing your package and to build and link them along with the rest of
+ your sources.  To help you do this, the m4 macros for autoconf are
+ available in <TT>`ltdl.m4'</TT>.  You must ensure that they are available in
+ <TT>`aclocal.m4'</TT> before you run autoconf -- by appending the contents
+ of <TT>`ltdl.m4'</TT> to <TT>`acinclude.m4'</TT>, if you are using automake, or
+ to <TT>`aclocal.m4'</TT> if you are not.  Having made the macros available,
+ you must add a call to the <SAMP>`AC_LIB_LTDL'</SAMP> macro to your package's
+ <TT>`configure.in'</TT> to perform the configure time checks required to
+ build <TT>`ltdl.o'</TT> correctly.  This method has problems if you then try
+ to link the package binaries with an installed libltdl, or a library
+ which depends on libltdl: you may have problems with duplicate symbol
+ definitions.
+ 
+ 
+ <P>
+ One advantage of the convenience library is that it is not installed, so
+ the fact that you use libltdl will not be apparent to the user, and it
+ will not overwrite a pre-installed version of libltdl a user might have.
+ On the other hand, if you want to upgrade libltdl for any reason
+ (e.g. a bugfix) you'll have to recompile your package instead of just
+ replacing an installed version of libltdl.
+ However, if your programs or libraries are linked with other libraries
+ that use such a pre-installed version of libltdl, you may get linker
+ errors or run-time crashes.  Another problem is that you cannot link the
+ convenience library into more than one libtool library, then link a
+ single program with these libraries, because you may get duplicate
+ symbols. In general you can safely use the convenience library in programs
+ which don't depend on other libraries that might use libltdl too.
+ In order to enable this flavor of libltdl, you should add the
+ line <SAMP>`AC_LIBLTDL_CONVENIENCE'</SAMP> to your <TT>`configure.in'</TT>,
+ <EM>before</EM> <SAMP>`AC_PROG_LIBTOOL'</SAMP>.
+ 
+ 
+ <P>
+ In order to select the installable version of libltdl, you should add a
+ call of the macro <SAMP>`AC_LIBLTDL_INSTALLABLE'</SAMP> to your
+ <TT>`configure.in'</TT> <EM>before</EM> <SAMP>`AC_PROG_LIBTOOL'</SAMP>.  This macro
+ will check whether libltdl is already installed and, if not, request the
+ libltdl embedded in your package to be built and installed.  Note,
+ however, that no version checking is performed.  The user may override
+ the test and determine that the libltdl embedded must be installed,
+ regardless of the existence of another version, using the configure
+ switch <SAMP>`--enable-ltdl-install'</SAMP>.
+ 
+ 
+ <P>
+ In order to embed libltdl into your package, just add <SAMP>`--ltdl'</SAMP> to
+ the <CODE>libtoolize</CODE> command line. It will copy the libltdl sources
+ to a subdirectory <SAMP>`libltdl'</SAMP> in your package.
+ Both macros accept an optional argument to specify the location
+ of the <SAMP>`libltdl'</SAMP> directory. By the default both macros assume that it
+ is <SAMP>`${top_srcdir}/libltdl'</SAMP>.
+ 
+ 
+ <P>
+ Whatever macro you use, it is up to you to ensure that your
+ <TT>`configure.in'</TT> will configure libltdl, using
+ <SAMP>`AC_CONFIG_SUBDIRS'</SAMP>, and that your <TT>`Makefile'</TT>s will start
+ sub-makes within libltdl's directory, using automake's <VAR>SUBDIRS</VAR>,
+ for example.  Both macros define the shell variables <VAR>LIBLTDL</VAR>, to
+ the link flag that you should use to link with libltdl, and
+ <VAR>INCLTDL</VAR>, to the preprocessor flag that you should use to compile
+ with programs that include <TT>`ltdl.h'</TT>.  It is up to you to use
+ <SAMP>`AC_SUBST'</SAMP> to ensure that this variable will be available in
+ <TT>`Makefile'</TT>s, or add them to variables that are <SAMP>`AC_SUBST'</SAMP>ed by
+ default, such as <VAR>LIBS</VAR> and <VAR>CPPFLAGS</VAR>.
+ 
+ 
+ <P>
+ If you're using the convenience libltdl, <VAR>LIBLTDL</VAR> will be the
+ pathname for the convenience version of libltdl and <VAR>INCLTDL</VAR> will be
+ <SAMP>`-I'</SAMP> followed by the directory that contains libltdl, both starting
+ with <SAMP>`${top_builddir}/'</SAMP> or <SAMP>`${top_srcdir}/'</SAMP>, respectively.
+ 
+ 
+ <P>
+ If you request an installed version of libltdl and one is
+ found<A NAME="DOCF10" HREF="libtool_foot.html#FOOT10">(10)</A>, <VAR>LIBLTDL</VAR> will
+ be set to <SAMP>`-lltdl'</SAMP> and <VAR>INCLTDL</VAR> will be empty (which is just a
+ blind assumption that <TT>`ltdl.h'</TT> is somewhere in the include path if
+ libltdl is in the library path).  If an installable version of libltdl
+ must be built, its pathname, starting with <SAMP>`${top_builddir}/'</SAMP>,
+ will be stored in <VAR>LIBLTDL</VAR>, and <VAR>INCLTDL</VAR> will be set just like
+ in the case of convenience library.
+ 
+ 
+ <P>
+ So, when you want to link a program with libltdl, be it a convenience,
+ installed or installable library, just compile with <SAMP>`$(INCLTDL)'</SAMP>
+ and link it with <SAMP>`$(LIBLTDL)'</SAMP>, using libtool.
+ 
+ 
+ <P>
+ You should probably also add <SAMP>`AC_LIBTOOL_DLOPEN'</SAMP> to your
+ <TT>`configure.in'</TT> <EM>before</EM> <SAMP>`AC_PROG_LIBTOOL'</SAMP>, otherwise
+ libtool will assume no dlopening mechanism is supported, and revert to
+ dlpreopening, which is probably not what you want.
+ 
+ 
+ <P>
+ Avoid using the <CODE>-static</CODE> or <CODE>-all-static</CODE> switches when
+ linking programs with libltdl.  This will not work on all platforms,
+ because the dlopening functions may not be available for static linking.
+ 
+ 
+ <P>
+ The following example shows you how to embed the convenience libltdl in
+ your package.  In order to use the installable variant just replace
+ <SAMP>`AC_LIBLTDL_CONVENIENCE'</SAMP> with <SAMP>`AC_LIBLTDL_INSTALLABLE'</SAMP>.  We
+ assume that libltdl was embedded using <SAMP>`libtoolize --ltdl'</SAMP>.
+ 
+ 
+ <P>
+ configure.in:
+ 
+ <PRE>
+ ...
+ dnl Enable building of the convenience library
+ dnl and set LIBLTDL accordingly
+ AC_LIBLTDL_CONVENIENCE
+ dnl Substitute INCLTDL and LIBLTDL in the Makefiles
+ AC_SUBST(INCLTDL)
+ AC_SUBST(LIBLTDL)
+ dnl Check for dlopen support
+ AC_LIBTOOL_DLOPEN
+ dnl Configure libtool
+ AC_PROG_LIBTOOL
+ dnl Configure libltdl
+ AC_CONFIG_SUBDIRS(libltdl)
+ ...
+ </PRE>
+ 
+ <P>
+ Makefile.am:
+ 
+ <PRE>
+ ...
+ SUBDIRS = libltdl
+ 
+ INCLUDES = $(INCLTDL)
+ 
+ myprog_LDFLAGS = -export-dynamic
+ # The quotes around -dlopen below fool automake &#60;= 1.4 into accepting it
+ myprog_LDADD = $(LIBLTDL) "-dlopen" self "-dlopen" foo1.la
+ myprog_DEPENDENCIES = $(LIBLTDL) foo1.la
+ ...
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC53" HREF="libtool_toc.html#TOC53">Using libtool with other languages</A></H1>
+ <P>
+ <A NAME="IDX207"></A>
+ <A NAME="IDX208"></A>
+ <A NAME="IDX209"></A>
+ 
+ 
+ <P>
+ Libtool was first implemented in order to add support for writing shared
+ libraries in the C language.  However, over time, libtool is being
+ integrated with other languages, so that programmers are free to reap
+ the benefits of shared libraries in their favorite programming language.
+ 
+ 
+ <P>
+ This chapter describes how libtool interacts with other languages,
+ and what special considerations you need to make if you do not use C.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC54" HREF="libtool_toc.html#TOC54">Writing libraries for C++</A></H2>
+ <P>
+ <A NAME="IDX210"></A>
+ <A NAME="IDX211"></A>
+ <A NAME="IDX212"></A>
+ 
+ 
+ <P>
+ Creating libraries of C++ code should be a fairly straightforward
+ process, because its object files differ from C ones in only three ways:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Because of name mangling, C++ libraries are only usable by the C++
+ compiler that created them.  This decision was made by the designers of
+ C++ in order to protect users from conflicting implementations of
+ features such as constructors, exception handling, and RTTI.
+ 
+ <LI>
+ 
+ On some systems, the C++ compiler must take special actions for the
+ dynamic linker to run dynamic (i.e., run-time) initializers.  This means
+ that we should not call <TT>`ld'</TT> directly to link such libraries, and
+ we should use the C++ compiler instead.
+ 
+ <LI>
+ 
+ C++ compilers will link some Standard C++ library in by default, but
+ libtool does not know which are these libraries, so it cannot even run
+ the inter-library dependence analyzer to check how to link it in.
+ Therefore, running <TT>`ld'</TT> to link a C++ program or library is deemed
+ to fail.  However, running the C++ compiler directly may lead to
+ problems related with inter-library dependencies.
+ </OL>
+ 
+ <P>
+ The conclusion is that libtool is not ready for general use for C++
+ libraries.  You should avoid any global or static variable
+ initializations that would cause an "initializer element is not
+ constant" error if you compiled them with a standard C compiler.
+ 
+ 
+ <P>
+ There are other ways of working around this problem, but they are beyond
+ the scope of this manual.
+ 
+ 
+ <P>
+ Furthermore, you'd better find out, at configure time, what are the C++
+ Standard libraries that the C++ compiler will link in by default, and
+ explicitly list them in the link command line.  Hopefully, in the
+ future, libtool will be able to do this job by itself.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC55" HREF="libtool_toc.html#TOC55">Troubleshooting</A></H1>
+ <P>
+ <A NAME="IDX213"></A>
+ <A NAME="IDX214"></A>
+ <A NAME="IDX215"></A>
+ <A NAME="IDX216"></A>
+ 
+ 
+ <P>
+ Libtool is under constant development, changing to remain up-to-date
+ with modern operating systems.  If libtool doesn't work the way you
+ think it should on your platform, you should read this chapter to help
+ determine what the problem is, and how to resolve it.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC56" HREF="libtool_toc.html#TOC56">The libtool test suite</A></H2>
+ <P>
+ <A NAME="IDX217"></A>
+ 
+ 
+ <P>
+ Libtool comes with its own set of programs that test its capabilities,
+ and report obvious bugs in the libtool program.  These tests, too, are
+ constantly evolving, based on past problems with libtool, and known
+ deficiencies in other operating systems.
+ 
+ 
+ <P>
+ As described in the <TT>`INSTALL'</TT> file, you may run <KBD>make check</KBD>
+ after you have built libtool (possibly before you install it) in order
+ to make sure that it meets basic functional requirements.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC57" HREF="libtool_toc.html#TOC57">Description of test suite</A></H3>
+ 
+ <P>
+ Here is a list of the current programs in the test suite, and what they
+ test for:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><TT>`cdemo-conf.test'</TT>
+ <DD>
+ <DT><TT>`cdemo-exec.test'</TT>
+ <DD>
+ <DT><TT>`cdemo-make.test'</TT>
+ <DD>
+ <DT><TT>`cdemo-static.test'</TT>
+ <DD>
+ <DT><TT>`cdemo-shared.test'</TT>
+ <DD>
+ <A NAME="IDX218"></A>
+ <A NAME="IDX219"></A>
+ <A NAME="IDX220"></A>
+ <A NAME="IDX221"></A>
+ <A NAME="IDX222"></A>
+ These programs check to see that the <TT>`cdemo'</TT> subdirectory of the
+ libtool distribution can be configured and built correctly.
+ 
+ The <TT>`cdemo'</TT> subdirectory contains a demonstration of libtool
+ convenience libraries, a mechanism that allows build-time static
+ libraries to be created, in a way that their components can be later
+ linked into programs or other libraries, even shared ones.
+ 
+ The tests <TT>`cdemo-make.test'</TT> and <TT>`cdemo-exec.test'</TT> are executed
+ three times, under three different libtool configurations:
+ <TT>`cdemo-conf.test'</TT> configures <TT>`cdemo/libtool'</TT> to build both
+ static and shared libraries (the default for platforms that support
+ both), <TT>`cdemo-static.test'</TT> builds only static libraries
+ (<SAMP>`--disable-shared'</SAMP>), and <TT>`cdemo-shared.test'</TT> builds only
+ shared libraries (<SAMP>`--disable-static'</SAMP>).
+ 
+ <DT><TT>`demo-conf.test'</TT>
+ <DD>
+ <DT><TT>`demo-exec.test'</TT>
+ <DD>
+ <DT><TT>`demo-inst.test'</TT>
+ <DD>
+ <DT><TT>`demo-make.test'</TT>
+ <DD>
+ <DT><TT>`demo-unst.test'</TT>
+ <DD>
+ <DT><TT>`demo-static.test'</TT>
+ <DD>
+ <DT><TT>`demo-shared.test'</TT>
+ <DD>
+ <DT><TT>`demo-nofast.test'</TT>
+ <DD>
+ <DT><TT>`demo-pic.test'</TT>
+ <DD>
+ <DT><TT>`demo-nopic.test'</TT>
+ <DD>
+ <A NAME="IDX223"></A>
+ <A NAME="IDX224"></A>
+ <A NAME="IDX225"></A>
+ <A NAME="IDX226"></A>
+ <A NAME="IDX227"></A>
+ <A NAME="IDX228"></A>
+ <A NAME="IDX229"></A>
+ <A NAME="IDX230"></A>
+ <A NAME="IDX231"></A>
+ <A NAME="IDX232"></A>
+ These programs check to see that the <TT>`demo'</TT> subdirectory of the
+ libtool distribution can be configured, built, installed, and
+ uninstalled correctly.
+ 
+ The <TT>`demo'</TT> subdirectory contains a demonstration of a trivial
+ package that uses libtool.  The tests <TT>`demo-make.test'</TT>,
+ <TT>`demo-exec.test'</TT>, <TT>`demo-inst.test'</TT> and
+ <TT>`demo-unst.test'</TT> are executed four times, under four different
+ libtool configurations: <TT>`demo-conf.test'</TT> configures
+ <TT>`demo/libtool'</TT> to build both static and shared libraries,
+ <TT>`demo-static.test'</TT> builds only static libraries
+ (<SAMP>`--disable-shared'</SAMP>), and <TT>`demo-shared.test'</TT> builds only
+ shared libraries (<SAMP>`--disable-static'</SAMP>).
+ <TT>`demo-nofast.test'</TT> configures <TT>`demo/libtool'</TT> to
+ disable the fast-install mode (<SAMP>`--enable-fast-install=no'</SAMP>).
+ <TT>`demo-pic.test'</TT> configures <TT>`demo/libtool'</TT> to
+ prefer building PIC code (<SAMP>`--with-pic'</SAMP>), <TT>`demo-nopic.test'</TT>
+ to prefer non-PIC code (<SAMP>`--without-pic'</SAMP>).
+ 
+ <DT><TT>`deplibs.test'</TT>
+ <DD>
+ <A NAME="IDX233"></A>
+ Many systems cannot link static libraries into shared libraries.
+ libtool uses a <CODE>deplibs_check_method</CODE> to prevent such cases.
+ This tests checks whether libtool's <CODE>deplibs_check_method</CODE>
+ works properly.
+ 
+ <DT><TT>`hardcode.test'</TT>
+ <DD>
+ <A NAME="IDX234"></A>
+ On all systems with shared libraries, the location of the library can be
+ encoded in executables that are linked against it see section <A HREF="libtool.html#SEC10">Linking executables</A>.  This test checks the conditions under which your system
+ linker hardcodes the library location, and guarantees that they
+ correspond to libtool's own notion of how your linker behaves.
+ 
+ <DT><TT>`build-relink.test'</TT>
+ <DD>
+ <A NAME="IDX235"></A>
+ Checks whether variable <VAR>shlibpath_overrides_runpath</VAR> is properly
+ set.  If the test fails and <VAR>VERBOSE</VAR> is set, it will indicate what
+ the variable should have been set to.
+ 
+ <DT><TT>`noinst-link.test'</TT>
+ <DD>
+ <A NAME="IDX236"></A>
+ Checks whether libtool will not try to link with a previously installed
+ version of a library when it should be linking with a just-built one.
+ 
+ <DT><TT>`depdemo-conf.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-exec.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-inst.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-make.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-unst.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-static.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-shared.test'</TT>
+ <DD>
+ <DT><TT>`depdemo-nofast.test'</TT>
+ <DD>
+ <A NAME="IDX237"></A>
+ <A NAME="IDX238"></A>
+ <A NAME="IDX239"></A>
+ <A NAME="IDX240"></A>
+ <A NAME="IDX241"></A>
+ <A NAME="IDX242"></A>
+ <A NAME="IDX243"></A>
+ <A NAME="IDX244"></A>
+ These programs check to see that the <TT>`depdemo'</TT> subdirectory of the
+ libtool distribution can be configured, built, installed, and
+ uninstalled correctly.
+ 
+ The <TT>`depdemo'</TT> subdirectory contains a demonstration of inter-library
+ dependencies with libtool.  The test programs link some interdependent
+ libraries.
+ 
+ The tests <TT>`depdemo-make.test'</TT>, <TT>`depdemo-exec.test'</TT>,
+ <TT>`depdemo-inst.test'</TT> and <TT>`depdemo-unst.test'</TT> are executed
+ four times, under four different libtool configurations:
+ <TT>`depdemo-conf.test'</TT> configures <TT>`depdemo/libtool'</TT> to build both
+ static and shared libraries, <TT>`depdemo-static.test'</TT> builds only static
+ libraries (<SAMP>`--disable-shared'</SAMP>), and <TT>`depdemo-shared.test'</TT> builds
+ only shared libraries (<SAMP>`--disable-static'</SAMP>).
+ <TT>`depdemo-nofast.test'</TT> configures <TT>`depdemo/libtool'</TT> to
+ disable the fast-install mode (<SAMP>`--enable-fast-install=no'</SAMP>.
+ 
+ <DT><TT>`mdemo-conf.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-exec.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-inst.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-make.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-unst.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-static.test'</TT>
+ <DD>
+ <DT><TT>`mdemo-shared.test'</TT>
+ <DD>
+ <A NAME="IDX245"></A>
+ <A NAME="IDX246"></A>
+ <A NAME="IDX247"></A>
+ <A NAME="IDX248"></A>
+ <A NAME="IDX249"></A>
+ <A NAME="IDX250"></A>
+ <A NAME="IDX251"></A>
+ These programs check to see that the <TT>`mdemo'</TT> subdirectory of the
+ libtool distribution can be configured, built, installed, and
+ uninstalled correctly.
+ 
+ The <TT>`mdemo'</TT> subdirectory contains a demonstration of a package that
+ uses libtool and the system independent dlopen wrapper <TT>`libltdl'</TT> to
+ load modules.  The library <TT>`libltdl'</TT> provides a dlopen wrapper for
+ various platforms (Linux, Solaris, HP/UX etc.) including support for
+ dlpreopened modules (see section <A HREF="libtool.html#SEC42">Dlpreopening</A>).
+ 
+ The tests <TT>`mdemo-make.test'</TT>, <TT>`mdemo-exec.test'</TT>,
+ <TT>`mdemo-inst.test'</TT> and <TT>`mdemo-unst.test'</TT> are executed
+ three times, under three different libtool configurations:
+ <TT>`mdemo-conf.test'</TT> configures <TT>`mdemo/libtool'</TT> to build both
+ static and shared libraries, <TT>`mdemo-static.test'</TT> builds only static
+ libraries (<SAMP>`--disable-shared'</SAMP>), and <TT>`mdemo-shared.test'</TT> builds
+ only shared libraries (<SAMP>`--disable-static'</SAMP>).
+ 
+ <DT><TT>`dryrun.test'</TT>
+ <DD>
+ <A NAME="IDX252"></A>
+ This test checks whether libtool's <CODE>--dry-run</CODE> mode works properly.
+ 
+ <DT><TT>`assign.test'</TT>
+ <DD>
+ <A NAME="IDX253"></A>
+ Checks whether we don't put break or continue on the same
+ line as an assignment in the libtool script.
+ 
+ <DT><TT>`link.test'</TT>
+ <DD>
+ <A NAME="IDX254"></A>
+ This test guarantees that linking directly against a non-libtool static
+ library works properly.
+ 
+ <DT><TT>`link-2.test'</TT>
+ <DD>
+ <A NAME="IDX255"></A>
+ This test makes sure that files ending in <SAMP>`.lo'</SAMP> are never linked
+ directly into a program file.
+ 
+ <DT><TT>`nomode.test'</TT>
+ <DD>
+ <A NAME="IDX256"></A>
+ Check whether we can actually get help for libtool.
+ 
+ <DT><TT>`quote.test'</TT>
+ <DD>
+ <A NAME="IDX257"></A>
+ This program checks libtool's metacharacter quoting.
+ 
+ <DT><TT>`sh.test'</TT>
+ <DD>
+ <A NAME="IDX258"></A>
+ Checks whether a `test' command was forgotten in libtool.
+ 
+ <DT><TT>`suffix.test'</TT>
+ <DD>
+ <A NAME="IDX259"></A>
+ When other programming languages are used with libtool (see section <A HREF="libtool.html#SEC53">Using libtool with other languages</A>), the source files may end in suffixes other than <SAMP>`.c'</SAMP>.
+ This test validates that libtool can handle suffixes for all the file
+ types that it supports, and that it fails when the suffix is invalid.
+ 
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC58" HREF="libtool_toc.html#TOC58">When tests fail</A></H3>
+ <P>
+ <A NAME="IDX260"></A>
+ <A NAME="IDX261"></A>
+ 
+ 
+ <P>
+ Each of the above tests are designed to produce no output when they are
+ run via <KBD>make check</KBD>.  The exit status of each program tells the
+ <TT>`Makefile'</TT> whether or not the test succeeded.
+ 
+ 
+ <P>
+ If a test fails, it means that there is either a programming error in
+ libtool, or in the test program itself.
+ 
+ 
+ <P>
+ To investigate a particular test, you may run it directly, as you would
+ a normal program.  When the test is invoked in this way, it produces
+ output which may be useful in determining what the problem is.
+ 
+ 
+ <P>
+ Another way to have the test programs produce output is to set the
+ <VAR>VERBOSE</VAR> environment variable to <SAMP>`yes'</SAMP> before running them.
+ For example, <KBD>env VERBOSE=yes make check</KBD> runs all the tests, and
+ has each of them display debugging information.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC59" HREF="libtool_toc.html#TOC59">Reporting bugs</A></H2>
+ <P>
+ <A NAME="IDX262"></A>
+ <A NAME="IDX263"></A>
+ <A NAME="IDX264"></A>
+ 
+ 
+ <P>
+ If you think you have discovered a bug in libtool, you should think
+ twice: the libtool maintainer is notorious for passing the buck (or
+ maybe that should be "passing the bug").  Libtool was invented to fix
+ known deficiencies in shared library implementations, so, in a way, most
+ of the bugs in libtool are actually bugs in other operating systems.
+ However, the libtool maintainer would definitely be happy to add support
+ for somebody else's buggy operating system.  [I wish there was a good
+ way to do winking smiley-faces in Texinfo.]
+ 
+ 
+ <P>
+ Genuine bugs in libtool include problems with shell script portability,
+ documentation errors, and failures in the test suite (see section <A HREF="libtool.html#SEC56">The libtool test suite</A>).
+ 
+ 
+ <P>
+ First, check the documentation and help screens to make sure that the
+ behaviour you think is a problem is not already mentioned as a feature.
+ 
+ 
+ <P>
+ Then, you should read the Emacs guide to reporting bugs (see section `Reporting Bugs' in <CITE>The Emacs Manual</CITE>).  Some of the details
+ listed there are specific to Emacs, but the principle behind them is a
+ general one.
+ 
+ 
+ <P>
+ Finally, send a bug report to the libtool bug reporting address <A HREF="mailto:bug-libtool@gnu.org">bug-libtool@gnu.org</A> with any appropriate
+ <EM>facts</EM>, such as test suite output (see section <A HREF="libtool.html#SEC58">When tests fail</A>), all
+ the details needed to reproduce the bug, and a brief description of why
+ you think the behaviour is a bug.  Be sure to include the word
+ "libtool" in the subject line, as well as the version number you are
+ using (which can be found by typing <KBD>libtool --version</KBD>).
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC60" HREF="libtool_toc.html#TOC60">Maintenance notes for libtool</A></H1>
+ 
+ <P>
+ This chapter contains information that the libtool maintainer finds
+ important.  It will be of no use to you unless you are considering
+ porting libtool to new systems, or writing your own libtool.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC61" HREF="libtool_toc.html#TOC61">Porting libtool to new systems</A></H2>
+ 
+ <P>
+ Before you embark on porting libtool to an unsupported system, it is
+ worthwhile to send e-mail to the libtool mailing list <A HREF="mailto:libtool@gnu.org">libtool@gnu.org</A>, to make sure that you are
+ not duplicating existing work.
+ 
+ 
+ <P>
+ If you find that any porting documentation is missing, please complain!
+ Complaints with patches and improvements to the documentation, or to
+ libtool itself, are more than welcome.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC62" HREF="libtool_toc.html#TOC62">Information sources</A></H3>
+ 
+ <P>
+ Once it is clear that a new port is necessary, you'll generally need the
+ following information:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT>canonical system name
+ <DD>
+ You need the output of <CODE>config.guess</CODE> for this system, so that you
+ can make changes to the libtool configuration process without affecting
+ other systems.
+ 
+ <DT>man pages for <CODE>ld</CODE> and <CODE>cc</CODE>
+ <DD>
+ These generally describe what flags are used to generate PIC, to create
+ shared libraries, and to link against only static libraries.  You may
+ need to follow some cross references to find the information that is
+ required.
+ 
+ <DT>man pages for <CODE>ld.so</CODE>, <CODE>rtld</CODE>, or equivalent
+ <DD>
+ These are a valuable resource for understanding how shared libraries are
+ loaded on the system.
+ 
+ <DT>man page for <CODE>ldconfig</CODE>, or equivalent
+ <DD>
+ This page usually describes how to install shared libraries.
+ 
+ <DT>output from <KBD>ls -l /lib /usr/lib</KBD>
+ <DD>
+ This shows the naming convention for shared libraries on the system,
+ including which names should be symbolic links.
+ 
+ <DT>any additional documentation
+ <DD>
+ Some systems have special documentation on how to build and install
+ shared libraries.
+ </DL>
+ 
+ <P>
+ If you know how to program the Bourne shell, then you can complete the
+ port yourself; otherwise, you'll have to find somebody with the relevant
+ skills who will do the work.  People on the libtool mailing list are
+ usually willing to volunteer to help you with new ports, so you can send
+ the information to them.
+ 
+ 
+ <P>
+ To do the port yourself, you'll definitely need to modify the
+ <CODE>libtool.m4</CODE> macros in order to make platform-specific changes to
+ the configuration process.  You should search that file for the
+ <CODE>PORTME</CODE> keyword, which will give you some hints on what you'll
+ need to change.  In general, all that is involved is modifying the
+ appropriate configuration variables (see section <A HREF="libtool.html#SEC71"><CODE>libtool</CODE> script contents</A>).
+ 
+ 
+ <P>
+ Your best bet is to find an already-supported system that is similar to
+ yours, and make your changes based on that.  In some cases, however,
+ your system will differ significantly from every other supported system,
+ and it may be necessary to add new configuration variables, and modify
+ the <CODE>ltmain.in</CODE> script accordingly.  Be sure to write to the
+ mailing list before you make changes to <CODE>ltmain.in</CODE>, since they may
+ have advice on the most effective way of accomplishing what you want.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC63" HREF="libtool_toc.html#TOC63">Porting inter-library dependencies support</A></H3>
+ <P>
+ <A NAME="IDX265"></A>
+ <A NAME="IDX266"></A>
+ 
+ 
+ <P>
+ Since version 1.2c, libtool has re-introduced the ability to do
+ inter-library dependency on some platforms, thanks to a patch by Toshio
+ Kuratomi <A HREF="mailto:badger@prtr-13.ucsc.edu">badger@prtr-13.ucsc.edu</A>.  Here's a shortened version
+ of the message that contained his patch:
+ 
+ 
+ <P>
+ The basic architecture is this: in <TT>`libtool.m4'</TT>, the person who
+ writes libtool makes sure <SAMP>`$deplibs'</SAMP> is included in
+ <SAMP>`$archive_cmds'</SAMP> somewhere and also sets the variable
+ <SAMP>`$deplibs_check_method'</SAMP>, and maybe <SAMP>`$file_magic_cmd'</SAMP> when
+ <SAMP>`deplibs_check_method'</SAMP> is file_magic.
+ 
+ 
+ <P>
+ <SAMP>`deplibs_check_method'</SAMP> can be one of five things:
+ <DL COMPACT>
+ 
+ <DT><SAMP>`file_magic [<VAR>regex</VAR>]'</SAMP>
+ <DD>
+ <A NAME="IDX267"></A>
+ <A NAME="IDX268"></A>
+ <A NAME="IDX269"></A>
+ looks in the library link path for libraries that have the right
+ libname.  Then it runs <SAMP>`$file_magic_cmd'</SAMP> on the library and checks
+ for a match against <VAR>regex</VAR> using <CODE>egrep</CODE>.  When
+ <VAR>file_magic_test_file</VAR> is set by <TT>`libtool.m4'</TT>, it is used as an
+ argument to <SAMP>`$file_magic_cmd'</SAMP> in order to verify whether the
+ regular expression matches its output, and warn the user otherwise.
+ 
+ <DT><SAMP>`test_compile'</SAMP>
+ <DD>
+ <A NAME="IDX270"></A>
+ just checks whether it is possible to link a program out of a list of
+ libraries, and checks which of those are listed in the output of
+ <CODE>ldd</CODE>.  It is currently unused, and will probably be dropped in the
+ future.
+ 
+ <DT><SAMP>`pass_all'</SAMP>
+ <DD>
+ <A NAME="IDX271"></A>
+ will pass everything without any checking.  This may work on platforms
+ in which code is position-independent by default and inter-library
+ dependencies are properly supported by the dynamic linker, for example,
+ on DEC OSF/1 3 and 4.
+ 
+ <DT><SAMP>`none'</SAMP>
+ <DD>
+ <A NAME="IDX272"></A>
+ It causes deplibs to be reassigned deplibs="".  That way
+ <SAMP>`archive_cmds'</SAMP> can contain deplibs on all platforms, but not have
+ deplibs used unless needed.
+ 
+ <DT><SAMP>`unknown'</SAMP>
+ <DD>
+ <A NAME="IDX273"></A>
+ is the default for all systems unless overridden in <TT>`libtool.m4'</TT>.
+ It is the same as <SAMP>`none'</SAMP>, but it documents that we really don't
+ know what the correct value should be, and we welcome patches that
+ improve it.
+ </DL>
+ 
+ <P>
+ Then in <TT>`ltmain.in'</TT> we have the real workhorse: a little
+ initialization and postprocessing (to setup/release variables for use
+ with eval echo libname_spec etc.) and a case statement that decides
+ which method is being used.  This is the real code... I wish I could
+ condense it a little more, but I don't think I can without function
+ calls.  I've mostly optimized it (moved things out of loops, etc) but
+ there is probably some fat left.  I thought I should stop while I was
+ ahead, work on whatever bugs you discover, etc before thinking about
+ more than obvious optimizations.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC64" HREF="libtool_toc.html#TOC64">Tested platforms</A></H2>
+ 
+ <P>
+ This table describes when libtool was last known to be tested on
+ platforms where it claims to support shared libraries:
+ 
+ 
+ 
+ <PRE>
+ -------------------------------------------------------
+ canonical host name          compiler  libtool results
+   (tools versions)                     release
+ -------------------------------------------------------
+ alpha-dec-osf5.1               cc       1.3e     ok (1.910)
+ alpha-dec-osf4.0f               gcc      1.3e     ok (1.910)
+ alpha-dec-osf4.0f               cc       1.3e     ok (1.910)
+ alpha-dec-osf3.2                gcc      0.8      ok
+ alpha-dec-osf3.2                cc       0.8      ok
+ alpha-dec-osf2.1                gcc      1.2f     NS
+ alpha*-unknown-linux-gnu        gcc      1.3b     ok
+   (egcs-1.1.2, GNU ld 2.9.1.0.23)
+ hppa2.0w-hp-hpux11.00           cc       1.2f     ok
+ hppa2.0-hp-hpux10.20            cc       1.3.2    ok
+ hppa1.1-hp-hpux10.20            gcc      1.2f     ok
+ hppa1.1-hp-hpux10.20            cc       1.3c     ok (1.821)
+ hppa1.1-hp-hpux10.10            gcc      1.2f     ok
+ hppa1.1-hp-hpux10.10            cc       1.2f     ok
+ hppa1.1-hp-hpux9.07             gcc      1.2f     ok
+ hppa1.1-hp-hpux9.07             cc       1.2f     ok
+ hppa1.1-hp-hpux9.05             gcc      1.2f     ok
+ hppa1.1-hp-hpux9.05             cc       1.2f     ok
+ hppa1.1-hp-hpux9.01             gcc      1.2f     ok
+ hppa1.1-hp-hpux9.01             cc       1.2f     ok
+ i*86-*-beos                     gcc      1.2f     ok
+ i*86-*-bsdi4.0.1                gcc      1.3c     ok
+   (gcc-2.7.2.1)
+ i*86-*-bsdi4.0                  gcc      1.2f     ok
+ i*86-*-bsdi3.1                  gcc      1.2e     NS
+ i*86-*-bsdi3.0                  gcc      1.2e     NS
+ i*86-*-bsdi2.1                  gcc      1.2e     NS
+ i*86-pc-cygwin                  gcc      1.3b     NS
+   (egcs-1.1 stock b20.1 compiler)
+ i*86-*-dguxR4.20MU01            gcc      1.2      ok
+ i*86-*-freebsd4.3              gcc      1.3e     ok (1.912)
+ i*86-*-freebsdelf4.0            gcc      1.3c     ok
+   (egcs-1.1.2)
+ i*86-*-freebsdelf3.2            gcc      1.3c     ok
+   (gcc-2.7.2.1)
+ i*86-*-freebsdelf3.1            gcc      1.3c     ok
+   (gcc-2.7.2.1)
+ i*86-*-freebsdelf3.0            gcc      1.3c     ok
+ i*86-*-freebsd3.0               gcc      1.2e     ok
+ i*86-*-freebsd2.2.8             gcc      1.3c     ok
+   (gcc-2.7.2.1)
+ i*86-*-freebsd2.2.6             gcc      1.3b     ok
+   (egcs-1.1 &#38; gcc-2.7.2.1, native ld)
+ i*86-*-freebsd2.1.5             gcc      0.5      ok
+ i*86-*-netbsd1.5                gcc      1.3e     ok (1.901)
+   (egcs-1.1.2)
+ i*86-*-netbsd1.4                gcc      1.3c     ok
+   (egcs-1.1.1)
+ i*86-*-netbsd1.4.3A             gcc      1.3e     ok (1.901)
+ i*86-*-netbsd1.3.3              gcc      1.3c     ok
+   (gcc-2.7.2.2+myc2)
+ i*86-*-netbsd1.3.2              gcc      1.2e     ok
+ i*86-*-netbsd1.3I               gcc      1.2e     ok
+   (egcs 1.1?)
+ i*86-*-netbsd1.2                gcc      0.9g     ok
+ i*86-*-linux-gnu               gcc      1.3e     ok (1.901)
+   (Red Hat 7.0, gcc "2.96")
+ i*86-*-linux-gnu               gcc      1.4.2    ok
+   (SuSE 7.0, gcc 2.95.2)
+ i*86-*-linux-gnulibc1           gcc      1.2f     ok
+ i*86-*-openbsd2.5               gcc      1.3c     ok
+   (gcc-2.8.1)
+ i*86-*-openbsd2.4               gcc      1.3c     ok
+   (gcc-2.8.1)
+ i*86-*-solaris2.7               gcc      1.3b     ok
+   (egcs-1.1.2, native ld)
+ i*86-*-solaris2.6               gcc      1.2f     ok
+ i*86-*-solaris2.5.1             gcc      1.2f     ok
+ i*86-ncr-sysv4.3.03             gcc      1.2f     ok
+ i*86-ncr-sysv4.3.03             cc       1.2e     ok
+   (cc -Hnocopyr)
+ i*86-pc-sco3.2v5.0.5           cc       1.3c     ok
+ i*86-pc-sco3.2v5.0.5           gcc      1.3c     ok
+   (gcc 95q4c)
+ i*86-pc-sco3.2v5.0.5           gcc      1.3c     ok
+   (egcs-1.1.2)
+ i*86-sco-sysv5uw7.1.1          gcc      1.3e     ok (1.901)
+   (gcc-2.95.2, SCO linker)
+ i*86-UnixWare7.1.0-sysv5       cc       1.3c     ok
+ i*86-UnixWare7.1.0-sysv5       gcc      1.3c     ok
+   (egcs-1.1.1)
+ m68k-next-nextstep3             gcc      1.2f     NS
+ m68k-sun-sunos4.1.1             gcc      1.2f     NS
+   (gcc-2.5.7)
+ m88k-dg-dguxR4.12TMU01          gcc      1.2      ok
+ m88k-motorola-sysv4             gcc      1.3      ok
+   (egcs-1.1.2)
+ mips-sgi-irix6.5                gcc      1.2f     ok
+   (gcc-2.8.1)
+ mips-sgi-irix6.4                gcc      1.2f     ok
+ mips-sgi-irix6.3                gcc      1.3b     ok
+   (egcs-1.1.2, native ld)
+ mips-sgi-irix6.3                cc       1.3b     ok
+   (cc 7.0)
+ mips-sgi-irix6.2                gcc      1.2f     ok
+ mips-sgi-irix6.2                cc       0.9      ok
+ mips-sgi-irix5.3                gcc      1.2f     ok
+   (egcs-1.1.1)
+ mips-sgi-irix5.3                gcc      1.2f     NS
+   (gcc-2.6.3)
+ mips-sgi-irix5.3                cc       0.8      ok
+ mips-sgi-irix5.2                gcc      1.3b     ok
+   (egcs-1.1.2, native ld)
+ mips-sgi-irix5.2                cc       1.3b     ok
+   (cc 3.18)
+ mips-sni-sysv4                 cc       1.3.5    ok
+   (Siemens C-compiler)
+ mips-sni-sysv4                 gcc      1.3.5    ok
+   (gcc-2.7.2.3, GNU assembler 2.8.1, native ld) 
+ mipsel-unknown-openbsd2.1       gcc      1.0      ok
+ powerpc-ibm-aix4.3.1.0          gcc      1.2f     ok
+   (egcs-1.1.1)
+ powerpc-ibm-aix4.2.1.0          gcc      1.2f     ok
+   (egcs-1.1.1)
+ powerpc-ibm-aix4.1.5.0          gcc      1.2f     ok
+   (egcs-1.1.1)
+ powerpc-ibm-aix4.1.5.0          gcc      1.2f     NS
+   (gcc-2.8.1)
+ powerpc-ibm-aix4.1.4.0          gcc      1.0      ok
+ powerpc-ibm-aix4.1.4.0          xlc      1.0i     ok
+ rs6000-ibm-aix4.1.5.0           gcc      1.2f     ok
+   (gcc-2.7.2)
+ rs6000-ibm-aix4.1.4.0           gcc      1.2f     ok
+   (gcc-2.7.2)
+ rs6000-ibm-aix3.2.5             gcc      1.0i     ok
+ rs6000-ibm-aix3.2.5             xlc      1.0i     ok
+ sparc-sun-solaris2.8           gcc      1.4.2    ok
+   (gcc-2.95.2 &#38; native ld)
+ sparc-sun-solaris2.8           gcc      1.4.2    ok
+   (gcc-3.0.1 &#38; GNU ld 2.11.2)
+ sparc-sun-solaris2.7            gcc      1.3e     ok (1.913)
+   (gcc-2.95.3 &#38; native ld)
+ sparc-sun-solaris2.6            gcc      1.3e     ok (1.913)
+   (gcc-2.95.3 &#38; native ld)
+ sparc-sun-solaris2.5.1          gcc      1.4.2    ok
+   (gcc-2.95.1 &#38; GNU ld 2.9.1)
+ sparc-sun-solaris2.5            gcc      1.3b     ok
+   (egcs-1.1.2, GNU ld 2.9.1 &#38; native ld)
+ sparc-sun-solaris2.5            cc       1.3b     ok
+   (SC 3.0.1)
+ sparc-sun-solaris2.4            gcc      1.0a     ok
+ sparc-sun-solaris2.4            cc       1.0a     ok
+ sparc-sun-solaris2.3            gcc      1.2f     ok
+ sparc-sun-sunos4.1.4            gcc      1.2f     ok
+ sparc-sun-sunos4.1.4            cc       1.0f     ok
+ sparc-sun-sunos4.1.3_U1         gcc      1.2f     ok
+ sparc-sun-sunos4.1.3C           gcc      1.2f     ok
+ sparc-sun-sunos4.1.3            gcc      1.3b     ok
+   (egcs-1.1.2, GNU ld 2.9.1 &#38; native ld)
+ sparc-sun-sunos4.1.3            cc       1.3b     ok
+ sparc-unknown-bsdi4.0           gcc      1.2c     ok
+ sparc-unknown-linux-gnulibc1    gcc      1.2f     ok
+ sparc-unknown-linux-gnu         gcc      1.3b     ok
+   (egcs-1.1.2, GNU ld 2.9.1.0.23)
+ sparc64-unknown-linux-gnu       gcc      1.2f     ok
+ 
+ Notes:
+ - "ok" means "all tests passed".
+ - "NS" means "Not Shared", but OK for static libraries
+ </PRE>
+ 
+ <P>
+ Note: The vendor-distributed HP-UX <CODE>sed</CODE>(1) programs are horribly
+ broken, and cannot handle libtool's requirements, so users may report
+ unusual problems.  There is no workaround except to install a working
+ <CODE>sed</CODE> (such as GNU <CODE>sed</CODE>) on these systems.
+ 
+ 
+ <P>
+ Note: The vendor-distributed NCR MP-RAS <CODE>cc</CODE> programs emits
+ copyright on standard error that confuse tests on size of
+ <TT>`conftest.err'</TT>.  The workaround is to specify <CODE>CC</CODE>
+ when run <CODE>configure</CODE> with <KBD>CC='cc -Hnocopyr'</KBD>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC65" HREF="libtool_toc.html#TOC65">Platform quirks</A></H2>
+ 
+ <P>
+ This section is dedicated to the sanity of the libtool maintainers.  It
+ describes the programs that libtool uses, how they vary from system to
+ system, and how to test for them.
+ 
+ 
+ <P>
+ Because libtool is a shell script, it can be difficult to understand
+ just by reading it from top to bottom.  This section helps show why
+ libtool does things a certain way.  Combined with the scripts
+ themselves, you should have a better sense of how to improve libtool, or
+ write your own.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC66" HREF="libtool_toc.html#TOC66">References</A></H3>
+ 
+ <P>
+ The following is a list of valuable documentation references:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ SGI's IRIX Manual Pages, which can be found at
+ <A HREF="http://techpubs.sgi.com/cgi-bin/infosrch.cgi?cmd=browse&#38;db=man">http://techpubs.sgi.com/cgi-bin/infosrch.cgi?cmd=browse&#38;db=man</A>.
+ 
+ <LI>
+ 
+ Sun's free service area
+ (<A HREF="http://www.sun.com/service/online/free.html">http://www.sun.com/service/online/free.html</A>) and documentation
+ server (<A HREF="http://docs.sun.com/">http://docs.sun.com/</A>).
+ 
+ <LI>
+ 
+ Compaq's Tru64 UNIX online documentation is at
+ (<A HREF="http://tru64unix.compaq.com/faqs/publications/pub_page/doc_list.html">http://tru64unix.compaq.com/faqs/publications/pub_page/doc_list.html</A>)
+ with C++ documentation at
+ (<A HREF="http://tru64unix.compaq.com/cplus/docs/index.htm">http://tru64unix.compaq.com/cplus/docs/index.htm</A>).
+ 
+ <LI>
+ 
+ Hewlett-Packard has online documentation at
+ (<A HREF="http://docs.hp.com/index.html">http://docs.hp.com/index.html</A>).
+ 
+ <LI>
+ 
+ IBM has online documentation at
+ (<A HREF="http://www.rs6000.ibm.com/resource/aix_resource/Pubs/">http://www.rs6000.ibm.com/resource/aix_resource/Pubs/</A>).
+ </UL>
+ 
+ 
+ 
+ <H3><A NAME="SEC67" HREF="libtool_toc.html#TOC67">Compilers</A></H3>
+ 
+ <P>
+ The only compiler characteristics that affect libtool are the flags
+ needed (if any) to generate PIC objects.  In general, if a C compiler
+ supports certain PIC flags, then any derivative compilers support the
+ same flags.  Until there are some noteworthy exceptions to this rule,
+ this section will document only C compilers.
+ 
+ 
+ <P>
+ The following C compilers have standard command line options, regardless
+ of the platform:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>gcc</CODE>
+ <DD>
+ This is the GNU C compiler, which is also the system compiler for many
+ free operating systems (FreeBSD, GNU/Hurd, GNU/Linux, Lites, NetBSD, and
+ OpenBSD, to name a few).
+ 
+ The <SAMP>`-fpic'</SAMP> or <SAMP>`-fPIC'</SAMP> flags can be used to generate
+ position-independent code.  <SAMP>`-fPIC'</SAMP> is guaranteed to generate
+ working code, but the code is slower on m68k, m88k, and Sparc chips.
+ However, using <SAMP>`-fpic'</SAMP> on those chips imposes arbitrary size limits
+ on the shared libraries.
+ </DL>
+ 
+ <P>
+ The rest of this subsection lists compilers by the operating system that
+ they are bundled with:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>aix3*</CODE>
+ <DD>
+ <DT><CODE>aix4*</CODE>
+ <DD>
+ AIX compilers have no PIC flags, since AIX has been ported only to
+ PowerPC and RS/6000 chips. <A NAME="DOCF11" HREF="libtool_foot.html#FOOT11">(11)</A>
+ 
+ <DT><CODE>hpux10*</CODE>
+ <DD>
+ Use <SAMP>`+Z'</SAMP> to generate PIC.
+ 
+ <DT><CODE>osf3*</CODE>
+ <DD>
+ Digital/UNIX 3.x does not have PIC flags, at least not on the PowerPC
+ platform.
+ 
+ <DT><CODE>solaris2*</CODE>
+ <DD>
+ Use <SAMP>`-KPIC'</SAMP> to generate PIC.
+ 
+ <DT><CODE>sunos4*</CODE>
+ <DD>
+ Use <SAMP>`-PIC'</SAMP> to generate PIC.
+ </DL>
+ 
+ 
+ 
+ <H3><A NAME="SEC68" HREF="libtool_toc.html#TOC68">Reloadable objects</A></H3>
+ 
+ <P>
+ On all known systems, a reloadable object can be created by running
+ <KBD>ld -r -o <VAR>output</VAR>.o <VAR>input1</VAR>.o <VAR>input2</VAR>.o</KBD>.  This
+ reloadable object may be treated as exactly equivalent to other
+ objects.
+ 
+ 
+ 
+ 
+ <H3><A NAME="SEC69" HREF="libtool_toc.html#TOC69">Multiple dependencies</A></H3>
+ 
+ <P>
+ On most modern platforms the order that dependent libraries are listed
+ has no effect on object generation.  In theory, there are platforms
+ which require libraries which provide missing symbols to other libraries
+ to listed after those libraries whose symbols they provide.
+ 
+ 
+ <P>
+ Particularly, if a pair of static archives each resolve some of the
+ other's symbols, it might be necessary to list one of those archives
+ both before and after the other one.  Libtool does not currently cope
+ with this situation well, since dupicate libraries are removed from
+ thr link line.
+ 
+ 
+ <P>
+ If you find yourself developing on a host that requires you to list
+ libraries multiple times in order for it to generate correctly linked
+ objects, you can defeat libtool's removal algorithm like this:
+ 
+ 
+ 
+ <PRE>
+ $ libtool ... -lfoo -lbar -Wl,-lfoo
+ </PRE>
+ 
+ 
+ 
+ <H3><A NAME="SEC70" HREF="libtool_toc.html#TOC70">Archivers</A></H3>
+ 
+ <P>
+ On all known systems, building a static library can be accomplished by
+ running <KBD>ar cru lib<VAR>name</VAR>.a <VAR>obj1</VAR>.o <VAR>obj2</VAR>.o ...</KBD>,
+ where the <SAMP>`.a'</SAMP> file is the output library, and each <SAMP>`.o'</SAMP> file is an
+ object file.
+ 
+ 
+ <P>
+ On all known systems, if there is a program named <CODE>ranlib</CODE>, then it
+ must be used to "bless" the created library before linking against it,
+ with the <KBD>ranlib lib<VAR>name</VAR>.a</KBD> command.  Some systems, like Irix,
+ use the <CODE>ar ts</CODE> command, instead.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC71" HREF="libtool_toc.html#TOC71"><CODE>libtool</CODE> script contents</A></H2>
+ <P>
+ <A NAME="IDX274"></A>
+ <A NAME="IDX275"></A>
+ 
+ 
+ <P>
+ Since version 1.4, the <CODE>libtool</CODE> script is generated by
+ <CODE>configure</CODE> (see section <A HREF="libtool.html#SEC26">Configuring libtool</A>).  In earlier versions,
+ <CODE>configure</CODE> achieved this by calling a helper script called
+ <TT>`ltconfig'</TT>.  From libtool version 0.7 to 1.0, this script
+ simply set shell variables, then sourced the libtool backend,
+ <CODE>ltmain.sh</CODE>.  <CODE>ltconfig</CODE> from libtool version 1.1 through 1.3
+ inlined the contents of <CODE>ltmain.sh</CODE> into the generated
+ <CODE>libtool</CODE>, which improved performance on many systems.  The tests
+ that <TT>`ltconfig'</TT> used to perform are now kept in <TT>`libtool.m4'</TT>
+ where thay can be written using Autoconf.  This has the runtime
+ performance benefits of inlined <CODE>ltmain.sh</CODE>, <EM>and</EM> improves
+ the build time a little while considerably easing the amount of raw
+ shell code that used to need maintaining.
+ 
+ 
+ <P>
+ The convention used for naming variables which hold shell commands for
+ delayed evaluation, is to use the suffix <CODE>_cmd</CODE> where a single
+ line of valid shell script is needed, and the suffix <CODE>_cmds</CODE> where
+ multiple lines of shell script <STRONG>may</STRONG> be delayed for later
+ evaluation.  By convention, <CODE>_cmds</CODE> variables delimit the
+ evaluation units with the <CODE>~</CODE> character where necessary.
+ 
+ 
+ <P>
+ Here is a listing of each of the configuration variables, and how they
+ are used within <CODE>ltmain.sh</CODE> (see section <A HREF="libtool.html#SEC26">Configuring libtool</A>):
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>AR</B>
+ <DD><A NAME="IDX276"></A>
+ The name of the system library archiver.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>CC</B>
+ <DD><A NAME="IDX277"></A>
+ The name of the C compiler used to configure libtool.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>LD</B>
+ <DD><A NAME="IDX278"></A>
+ The name of the linker that libtool should use internally for reloadable
+ linking and possibly shared libraries.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>NM</B>
+ <DD><A NAME="IDX279"></A>
+ The name of a BSD-compatible <CODE>nm</CODE> program, which produces listings
+ of global symbols in one the following formats:
+ 
+ 
+ 
+ <PRE>
+ <VAR>address</VAR> C <VAR>global-variable-name</VAR>
+ <VAR>address</VAR> D <VAR>global-variable-name</VAR>
+ <VAR>address</VAR> T <VAR>global-function-name</VAR>
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>RANLIB</B>
+ <DD><A NAME="IDX280"></A>
+ Set to the name of the ranlib program, if any.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>allow_undefined_flag</B>
+ <DD><A NAME="IDX281"></A>
+ The flag that is used by <SAMP>`archive_cmds'</SAMP> in order to declare that
+ there will be unresolved symbols in the resulting shared library.
+ Empty, if no such flag is required.  Set to <SAMP>`unsupported'</SAMP> if there
+ is no way to generate a shared library with references to symbols that
+ aren't defined in that library.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>always_export_symbols</B>
+ <DD><A NAME="IDX282"></A>
+ Whether libtool should automatically generate a list of exported symbols
+ using <VAR>export_symbols_cmds</VAR> before linking an archive.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.  Default is <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>archive_cmds</B>
+ <DD><A NAME="IDX283"></A>
+ <DT><U>Variable:</U> <B>archive_expsym_cmds</B>
+ <DD><A NAME="IDX284"></A>
+ <DT><U>Variable:</U> <B>old_archive_cmds</B>
+ <DD><A NAME="IDX285"></A>
+ Commands used to create shared libraries, shared libraries with
+ <SAMP>`-export-symbols'</SAMP> and static libraries, respectively.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>old_archive_from_new_cmds</B>
+ <DD><A NAME="IDX286"></A>
+ If the shared library depends on a static library,
+ <SAMP>`old_archive_from_new_cmds'</SAMP> contains the commands used to create that
+ static library.  If this variable is not empty, <SAMP>`old_archive_cmds'</SAMP> is
+ not used.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>old_archive_from_expsyms_cmds</B>
+ <DD><A NAME="IDX287"></A>
+ If a static library must be created from the export symbol list in order to
+ correctly link with a shared library, <SAMP>`old_archive_from_expsyms_cmds'</SAMP>
+ contains the commands needed to create that static library.  When these
+ commands are executed, the variable <VAR>soname</VAR> contains the name of the
+ shared library in question, and the <VAR>$objdir/$newlib</VAR> contains the
+ path of the static library these commands should build.  After executing
+ these commands, libtool will proceed to link against <VAR>$objdir/$newlib</VAR>
+ instead of <VAR>soname</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>build_libtool_libs</B>
+ <DD><A NAME="IDX288"></A>
+ Whether libtool should build shared libraries on this system.  Set to
+ <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>build_old_libs</B>
+ <DD><A NAME="IDX289"></A>
+ Whether libtool should build static libraries on this system.  Set to
+ <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>compiler_c_o</B>
+ <DD><A NAME="IDX290"></A>
+ Whether the compiler supports the <CODE>-c</CODE> and <CODE>-o</CODE> options
+ simultaneously. Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>compiler_o_lo</B>
+ <DD><A NAME="IDX291"></A>
+ Whether the compiler supports compiling directly to a ".lo" file,
+ i.e whether object files do not have to have the suffix ".o".
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>dlopen_support</B>
+ <DD><A NAME="IDX292"></A>
+ Whether <CODE>dlopen</CODE> is supported on the platform.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>dlopen_self</B>
+ <DD><A NAME="IDX293"></A>
+ Whether it is possible to <CODE>dlopen</CODE> the executable itself.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>dlopen_self_static</B>
+ <DD><A NAME="IDX294"></A>
+ Whether it is possible to <CODE>dlopen</CODE> the executable itself, when it
+ is linked statically (<SAMP>`-all-static'</SAMP>).  Set to <SAMP>`yes'</SAMP> or
+ <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>echo</B>
+ <DD><A NAME="IDX295"></A>
+ An <CODE>echo</CODE> program which does not interpret backslashes as an
+ escape character.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>exclude_expsyms</B>
+ <DD><A NAME="IDX296"></A>
+ List of symbols that should not be listed in the preloaded symbols.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>export_dynamic_flag_spec</B>
+ <DD><A NAME="IDX297"></A>
+ Compiler link flag that allows a dlopened shared library to reference
+ symbols that are defined in the program.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>export_symbols_cmds</B>
+ <DD><A NAME="IDX298"></A>
+ Commands to extract exported symbols from <VAR>libobjs</VAR> to the
+ file <VAR>export_symbols</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>extract_expsyms_cmds</B>
+ <DD><A NAME="IDX299"></A>
+ Commands to extract the exported symbols list from a shared library.
+ These commands are executed if there is no file <VAR>$objdir/$soname-def</VAR>,
+ and should write the names of the exported symbols to that file, for
+ the use of <SAMP>`old_archive_from_expsyms_cmds'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>fast_install</B>
+ <DD><A NAME="IDX300"></A>
+ Determines whether libtool will privilege the installer or the
+ developer.  The assumption is that installers will seldom run programs
+ in the build tree, and the developer will seldom install.  This is only
+ meaningful on platforms in which <VAR>shlibpath_overrides_runpath</VAR> is
+ not <SAMP>`yes'</SAMP>, so <VAR>fast_install</VAR> will be set to <SAMP>`needless'</SAMP> in
+ this case.  If <VAR>fast_install</VAR> set to <SAMP>`yes'</SAMP>, libtool will create
+ programs that search for installed libraries, and, if a program is run
+ in the build tree, a new copy will be linked on-demand to use the
+ yet-to-be-installed libraries.  If set to <SAMP>`no'</SAMP>, libtool will create
+ programs that use the yet-to-be-installed libraries, and will link
+ a new copy of the program at install time.  The default value is
+ <SAMP>`yes'</SAMP> or <SAMP>`needless'</SAMP>, depending on platform and configuration
+ flags, and it can be turned from <SAMP>`yes'</SAMP> to <SAMP>`no'</SAMP> with the
+ configure flag <SAMP>`--disable-fast-install'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>finish_cmds</B>
+ <DD><A NAME="IDX301"></A>
+ Commands to tell the dynamic linker how to find shared libraries in a
+ specific directory.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>finish_eval</B>
+ <DD><A NAME="IDX302"></A>
+ Same as <VAR>finish_cmds</VAR>, except the commands are not displayed.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>fix_srcfile_path</B>
+ <DD><A NAME="IDX303"></A>
+ Expression to fix the shell variable $srcfile for the compiler.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>global_symbol_pipe</B>
+ <DD><A NAME="IDX304"></A>
+ A pipeline that takes the output of <VAR>NM</VAR>, and produces a listing of
+ raw symbols followed by their C names.  For example:
+ 
+ 
+ 
+ <PRE>
+ $ <KBD>eval "$NM progname | $global_symbol_pipe"</KBD>
+ D <VAR>symbol1</VAR> <VAR>C-symbol1</VAR>
+ T <VAR>symbol2</VAR> <VAR>C-symbol2</VAR>
+ C <VAR>symbol3</VAR> <VAR>C-symbol3</VAR>
+ ...
+ $
+ </PRE>
+ 
+ <P>
+ The first column contains the symbol type (used to tell data from code
+ on some platforms), but its meaning is system dependent.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>global_symbol_to_cdecl</B>
+ <DD><A NAME="IDX305"></A>
+ A pipeline that translates the output of <VAR>global_symbol_pipe</VAR> into
+ proper C declarations.  On platforms whose linkers differentiate code
+ from data, such as HP/UX, data symbols will be declared as such, and
+ code symbols will be declared as functions.  On platforms that don't
+ care, everything is assumed to be data.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_action</B>
+ <DD><A NAME="IDX306"></A>
+ Either <SAMP>`immediate'</SAMP> or <SAMP>`relink'</SAMP>, depending on whether shared
+ library paths can be hardcoded into executables before they are installed,
+ or if they need to be relinked.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_direct</B>
+ <DD><A NAME="IDX307"></A>
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>, depending on whether the linker
+ hardcodes directories if a library is directly specified on the command
+ line (such as <SAMP>`<VAR>dir</VAR>/lib<VAR>name</VAR>.a'</SAMP>) when
+ <VAR>hardcode_libdir_flag_spec</VAR> is specified.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_into_libs</B>
+ <DD><A NAME="IDX308"></A>
+ Whether the platform supports hardcoding of run-paths into libraries.
+ If enabled, linking of programs will be much simpler but libraries will
+ need to be relinked during installation.   Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_libdir_flag_spec</B>
+ <DD><A NAME="IDX309"></A>
+ Flag to hardcode a <VAR>libdir</VAR> variable into a binary, so that the
+ dynamic linker searches <VAR>libdir</VAR> for shared libraries at runtime.
+ If it is empty, libtool will try to use some other hardcoding mechanism.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_libdir_separator</B>
+ <DD><A NAME="IDX310"></A>
+ If the compiler only accepts a single <VAR>hardcode_libdir_flag</VAR>, then
+ this variable contains the string that should separate multiple
+ arguments to that flag.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_minus_L</B>
+ <DD><A NAME="IDX311"></A>
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>, depending on whether the linker
+ hardcodes directories specified by <SAMP>`-L'</SAMP> flags into the resulting
+ executable when <VAR>hardcode_libdir_flag_spec</VAR> is specified.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>hardcode_shlibpath_var</B>
+ <DD><A NAME="IDX312"></A>
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>, depending on whether the linker
+ hardcodes directories by writing the contents of <SAMP>`$shlibpath_var'</SAMP>
+ into the resulting executable when <VAR>hardcode_libdir_flag_spec</VAR> is
+ specified.  Set to <SAMP>`unsupported'</SAMP> if directories specified by
+ <SAMP>`$shlibpath_var'</SAMP> are searched at run time, but not at link time.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>host</B>
+ <DD><A NAME="IDX313"></A>
+ <DT><U>Variable:</U> <B>host_alias</B>
+ <DD><A NAME="IDX314"></A>
+ For information purposes, set to the specified and canonical names of
+ the system that libtool was configured for.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>include_expsyms</B>
+ <DD><A NAME="IDX315"></A>
+ List of symbols that must always be exported when using <VAR>export_symbols</VAR>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>libext</B>
+ <DD><A NAME="IDX316"></A>
+ The standard old archive suffix (normally "a").
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>libname_spec</B>
+ <DD><A NAME="IDX317"></A>
+ The format of a library name prefix.  On all Unix systems, static
+ libraries are called <SAMP>`lib<VAR>name</VAR>.a'</SAMP>, but on some systems (such
+ as OS/2 or MS-DOS), the library is just called <SAMP>`<VAR>name</VAR>.a'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>library_names_spec</B>
+ <DD><A NAME="IDX318"></A>
+ A list of shared library names.  The first is the name of the file,
+ the rest are symbolic links to the file.  The name in the list is
+ the file name that the linker finds when given <SAMP>`-l<VAR>name</VAR>'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>link_all_deplibs</B>
+ <DD><A NAME="IDX319"></A>
+ Whether libtool must link a program against all its dependency libraries.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.  Default is <SAMP>`unknown'</SAMP>, which is
+ a synonym for <SAMP>`yes'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>link_static_flag</B>
+ <DD><A NAME="IDX320"></A>
+ Linker flag (passed through the C compiler) used to prevent dynamic
+ linking.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>need_lib_prefix</B>
+ <DD><A NAME="IDX321"></A>
+ Whether libtool should automatically prefix module names with 'lib'.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.  By default, it is <SAMP>`unknown'</SAMP>, which
+ means the same as <SAMP>`yes'</SAMP>, but documents that we are not really sure
+ about it.
+ <SAMP>`yes'</SAMP> means that it is possible both to <CODE>dlopen</CODE> and to
+ link against a library without 'lib' prefix,
+ i.e. it requires <VAR>hardcode_direct</VAR> to be <SAMP>`yes'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>need_version</B>
+ <DD><A NAME="IDX322"></A>
+ Whether versioning is required for libraries, i.e. whether the
+ dynamic linker requires a version suffix for all libraries.
+ Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.  By default, it is <SAMP>`unknown'</SAMP>, which
+ means the same as <SAMP>`yes'</SAMP>, but documents that we are not really sure
+ about it.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>need_locks</B>
+ <DD><A NAME="IDX323"></A>
+ Whether files must be locked to prevent conflicts when compiling
+ simultaneously. Set to <SAMP>`yes'</SAMP> or <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>no_builtin_flag</B>
+ <DD><A NAME="IDX324"></A>
+ Compiler flag to disable builtin functions that conflict with declaring
+ external global symbols as <CODE>char</CODE>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>no_undefined_flag</B>
+ <DD><A NAME="IDX325"></A>
+ The flag that is used by <SAMP>`archive_cmds'</SAMP> in order to declare that
+ there will be no unresolved symbols in the resulting shared library.
+ Empty, if no such flag is required.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>objdir</B>
+ <DD><A NAME="IDX326"></A>
+ The name of the directory that contains temporary libtool files.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>objext</B>
+ <DD><A NAME="IDX327"></A>
+ The standard object file suffix (normally "o").
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>pic_flag</B>
+ <DD><A NAME="IDX328"></A>
+ Any additional compiler flags for building library object files.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>postinstall_cmds</B>
+ <DD><A NAME="IDX329"></A>
+ <DT><U>Variable:</U> <B>old_postinstall_cmds</B>
+ <DD><A NAME="IDX330"></A>
+ Commands run after installing a shared or static library, respectively.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>postuninstall_cmds</B>
+ <DD><A NAME="IDX331"></A>
+ <DT><U>Variable:</U> <B>old_postuninstall_cmds</B>
+ <DD><A NAME="IDX332"></A>
+ Commands run after uninstalling a shared or static library, respectively.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>reload_cmds</B>
+ <DD><A NAME="IDX333"></A>
+ <DT><U>Variable:</U> <B>reload_flag</B>
+ <DD><A NAME="IDX334"></A>
+ Commands to create a reloadable object.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>runpath_var</B>
+ <DD><A NAME="IDX335"></A>
+ The environment variable that tells the linker which directories to
+ hardcode in the resulting executable.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>shlibpath_overrides_runpath</B>
+ <DD><A NAME="IDX336"></A>
+ Indicates whether it is possible to override the hard-coded library
+ search path of a program with an environment variable.  If this is set
+ to no, libtool may have to create two copies of a program in the build
+ tree, one to be installed and one to be run in the build tree only.
+ When each of these copies is created depends on the value of
+ <CODE>fast_install</CODE>.  The default value is <SAMP>`unknown'</SAMP>, which is
+ equivalent to <SAMP>`no'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>shlibpath_var</B>
+ <DD><A NAME="IDX337"></A>
+ The environment variable that tells the dynamic linker where to find
+ shared libraries.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>soname_spec</B>
+ <DD><A NAME="IDX338"></A>
+ The name coded into shared libraries, if different from the real name of
+ the file.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>striplib</B>
+ <DD><A NAME="IDX339"></A>
+ <DT><U>Variable:</U> <B>old_striplib</B>
+ <DD><A NAME="IDX340"></A>
+ Command to strip a shared (<CODE>striplib</CODE>) or static (<CODE>old_striplib</CODE>)
+ library, respectively.  If these variables are empty, the strip flag
+ in the install mode will be ignored for libraries (see section <A HREF="libtool.html#SEC19">Install mode</A>).
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>sys_lib_dlsearch_path_spec</B>
+ <DD><A NAME="IDX341"></A>
+ Expression to get the run-time system library search path.  Directories
+ that appear in this list are never hard-coded into executables.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>sys_lib_search_path_spec</B>
+ <DD><A NAME="IDX342"></A>
+ Expression to get the compile-time system library search path.  This
+ variable is used by libtool when it has to test whether a certain
+ library is shared or static.  The directories listed in
+ <VAR>shlibpath_var</VAR> are automatically appended to this list, every time
+ libtool runs (i.e., not at configuration time), because some linkers use
+ this variable to extend the library search path.  Linker switches such
+ as <CODE>-L</CODE> also augment the search path.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>thread_safe_flag_spec</B>
+ <DD><A NAME="IDX343"></A>
+ Linker flag (passed through the C compiler) used to generate thread-safe
+ libraries.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>version_type</B>
+ <DD><A NAME="IDX344"></A>
+ The library version numbering type.  One of <SAMP>`libtool'</SAMP>,
+ <SAMP>`freebsd-aout'</SAMP>, <SAMP>`freebsd-elf'</SAMP>, <SAMP>`irix'</SAMP>, <SAMP>`linux'</SAMP>,
+ <SAMP>`osf'</SAMP>, <SAMP>`sunos'</SAMP>, <SAMP>`windows'</SAMP>, or <SAMP>`none'</SAMP>.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>whole_archive_flag_spec</B>
+ <DD><A NAME="IDX345"></A>
+ Compiler flag to generate shared objects from convenience archives.
+ </DL>
+ 
+ 
+ <P>
+ <DL>
+ <DT><U>Variable:</U> <B>wl</B>
+ <DD><A NAME="IDX346"></A>
+ The C compiler flag that allows libtool to pass a flag directly to the
+ linker.  Used as: <CODE>${wl}<VAR>some-flag</VAR></CODE>.
+ </DL>
+ 
+ 
+ <P>
+ Variables ending in <SAMP>`_cmds'</SAMP> or <SAMP>`_eval'</SAMP> contain a
+ <SAMP>`~'</SAMP>-separated list of commands that are <CODE>eval</CODE>ed one after
+ another.  If any of the commands return a nonzero exit status, libtool
+ generally exits with an error message.
+ 
+ 
+ <P>
+ Variables ending in <SAMP>`_spec'</SAMP> are <CODE>eval</CODE>ed before being used by
+ libtool.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC72" HREF="libtool_toc.html#TOC72">Cheap tricks</A></H2>
+ 
+ <P>
+ Here are a few tricks that you can use in order to make maintainership
+ easier:
+ 
+ 
+ 
+ <UL>
+ <LI>
+ 
+ When people report bugs, ask them to use the <SAMP>`--config'</SAMP>,
+ <SAMP>`--debug'</SAMP>, or <SAMP>`--features'</SAMP> flags, if you think they will help
+ you.  These flags are there to help you get information directly, rather
+ than having to trust second-hand observation.
+ 
+ <LI>
+ 
+ Rather than reconfiguring libtool every time I make a change to
+ <CODE>ltmain.in</CODE>, I keep a permanent <CODE>libtool</CODE> script in my
+ <VAR>PATH</VAR>, which sources <CODE>ltmain.in</CODE> directly.
+ 
+ The following steps describe how to create such a script, where
+ <CODE>/home/src/libtool</CODE> is the directory containing the libtool source
+ tree, <CODE>/home/src/libtool/libtool</CODE> is a libtool script that has been
+ configured for your platform, and <CODE>~/bin</CODE> is a directory in your
+ <VAR>PATH</VAR>:
+ 
+ 
+ <PRE>
+ trick$ cd ~/bin
+ trick$ sed '/^# ltmain\.sh/q' /home/src/libtool/libtool &#62; libtool
+ trick$ echo '. /home/src/libtool/ltmain.in' &#62;&#62; libtool
+ trick$ chmod +x libtool
+ trick$ libtool --version
+ ltmain.sh (GNU @PACKAGE@) @VERSION@@TIMESTAMP@
+ trick$
+ </PRE>
+ 
+ </UL>
+ 
+ <P>
+ The output of the final <SAMP>`libtool --version'</SAMP> command shows that the
+ <CODE>ltmain.in</CODE> script is being used directly.  Now, modify
+ <CODE>~/bin/libtool</CODE> or <CODE>/home/src/libtool/ltmain.in</CODE> directly in
+ order to test new changes without having to rerun <CODE>configure</CODE>.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC73" HREF="libtool_toc.html#TOC73">GNU Free Documentation License</A></H1>
+ 
+ <P>
+ Version 1.1, March 2000
+ 
+ 
+ 
+ <PRE>
+ Copyright (C) 2000  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.
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC74" HREF="libtool_toc.html#TOC74">Preamble</A></H2>
+ 
+ <P>
+ The purpose of this License is to make a manual, textbook, or other
+ written document "free" in the sense of freedom: to assure everyone
+ the effective freedom to copy and redistribute it, with or without
+ modifying it, either commercially or noncommercially.  Secondarily,
+ this License preserves for the author and publisher a way to get
+ credit for their work, while not being considered responsible for
+ modifications made by others.
+ 
+ 
+ <P>
+ This License is a kind of "copyleft", which means that derivative
+ works of the document must themselves be free in the same sense.  It
+ complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+ 
+ 
+ <P>
+ We have designed this License in order to use it for manuals for free
+ software, because free software needs free documentation: a free
+ program should come with manuals providing the same freedoms that the
+ software does.  But this License is not limited to software manuals;
+ it can be used for any textual work, regardless of subject matter or
+ whether it is published as a printed book.  We recommend this License
+ principally for works whose purpose is instruction or reference.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC75" HREF="libtool_toc.html#TOC75">APPLICABILITY AND DEFINITIONS</A></H2>
+ 
+ <P>
+ This License applies to any manual or other work that contains a
+ notice placed by the copyright holder saying it can be distributed
+ under the terms of this License.  The "Document", below, refers to any
+ such manual or work.  Any member of the public is a licensee, and is
+ addressed as "you".
+ 
+ 
+ <P>
+ A "Modified Version" of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+ 
+ 
+ <P>
+ A "Secondary Section" is a named appendix or a front-matter section of
+ the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document's overall subject
+ (or to related matters) and contains nothing that could fall directly
+ within that overall subject.  (For example, if the Document is in part a
+ textbook of mathematics, a Secondary Section may not explain any
+ mathematics.)  The relationship could be a matter of historical
+ connection with the subject or with related matters, or of legal,
+ commercial, philosophical, ethical or political position regarding
+ them.
+ 
+ 
+ <P>
+ The "Invariant Sections" are certain Secondary Sections whose titles
+ are designated, as being those of Invariant Sections, in the notice
+ that says that the Document is released under this License.
+ 
+ 
+ <P>
+ The "Cover Texts" are certain short passages of text that are listed,
+ as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+ the Document is released under this License.
+ 
+ 
+ <P>
+ A "Transparent" copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, whose contents can be viewed and edited directly and
+ straightforwardly with generic text editors or (for images composed of
+ pixels) generic paint programs or (for drawings) some widely available
+ drawing editor, and that is suitable for input to text formatters or
+ for automatic translation to a variety of formats suitable for input
+ to text formatters.  A copy made in an otherwise Transparent file
+ format whose markup has been designed to thwart or discourage
+ subsequent modification by readers is not Transparent.  A copy that is
+ not "Transparent" is called "Opaque".
+ 
+ 
+ <P>
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format, SGML
+ or XML using a publicly available DTD, and standard-conforming simple
+ HTML designed for human modification.  Opaque formats include
+ PostScript, PDF, proprietary formats that can be read and edited only
+ by proprietary word processors, SGML or XML for which the DTD and/or
+ processing tools are not generally available, and the
+ machine-generated HTML produced by some word processors for output
+ purposes only.
+ 
+ 
+ <P>
+ The "Title Page" means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the material
+ this License requires to appear in the title page.  For works in
+ formats which do not have any title page as such, "Title Page" means
+ the text near the most prominent appearance of the work's title,
+ preceding the beginning of the body of the text.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC76" HREF="libtool_toc.html#TOC76">VERBATIM COPYING</A></H2>
+ 
+ <P>
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License applies
+ to the Document are reproduced in all copies, and that you add no other
+ conditions whatsoever to those of this License.  You may not use
+ technical measures to obstruct or control the reading or further
+ copying of the copies you make or distribute.  However, you may accept
+ compensation in exchange for copies.  If you distribute a large enough
+ number of copies you must also follow the conditions in section 3.
+ 
+ 
+ <P>
+ You may also lend copies, under the same conditions stated above, and
+ you may publicly display copies.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC77" HREF="libtool_toc.html#TOC77">COPYING IN QUANTITY</A></H2>
+ 
+ <P>
+ If you publish printed copies of the Document numbering more than 100,
+ and the Document's license notice requires Cover Texts, you must enclose
+ the copies in covers that carry, clearly and legibly, all these Cover
+ Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+ the back cover.  Both covers must also clearly and legibly identify
+ you as the publisher of these copies.  The front cover must present
+ the full title with all words of the title equally prominent and
+ visible.  You may add other material on the covers in addition.
+ Copying with changes limited to the covers, as long as they preserve
+ the title of the Document and satisfy these conditions, can be treated
+ as verbatim copying in other respects.
+ 
+ 
+ <P>
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto adjacent
+ pages.
+ 
+ 
+ <P>
+ If you publish or distribute Opaque copies of the Document numbering
+ more than 100, you must either include a machine-readable Transparent
+ copy along with each Opaque copy, or state in or with each Opaque copy
+ a publicly-accessible computer-network location containing a complete
+ Transparent copy of the Document, free of added material, which the
+ general network-using public has access to download anonymously at no
+ charge using public-standard network protocols.  If you use the latter
+ option, you must take reasonably prudent steps, when you begin
+ distribution of Opaque copies in quantity, to ensure that this
+ Transparent copy will remain thus accessible at the stated location
+ until at least one year after the last time you distribute an Opaque
+ copy (directly or through your agents or retailers) of that edition to
+ the public.
+ 
+ 
+ <P>
+ It is requested, but not required, that you contact the authors of the
+ Document well before redistributing any large number of copies, to give
+ them a chance to provide you with an updated version of the Document.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC78" HREF="libtool_toc.html#TOC78">MODIFICATIONS</A></H2>
+ 
+ <P>
+ You may copy and distribute a Modified Version of the Document under
+ the conditions of sections 2 and 3 above, provided that you release
+ the Modified Version under precisely this License, with the Modified
+ Version filling the role of the Document, thus licensing distribution
+ and modification of the Modified Version to whoever possesses a copy
+ of it.  In addition, you must do these things in the Modified Version:
+ 
+ 
+ 
+ <OL>
+ <LI>
+ 
+ Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document).  You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+ 
+ <LI>
+ 
+  List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has less than five).
+ 
+ <LI>
+ 
+ State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+ 
+ <LI>
+ 
+  Preserve all the copyright notices of the Document.
+ 
+ <LI>
+ 
+ Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+ 
+ <LI>
+ 
+ Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+ 
+ <LI>
+ 
+ Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+ 
+ <LI>
+ 
+ Include an unaltered copy of this License.
+ 
+ <LI>
+ 
+ Preserve the section entitled "History", and its title, and add to
+ it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page.  If
+ there is no section entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+ 
+ <LI>
+ 
+ Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on.  These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+ 
+ <LI>
+ 
+ In any section entitled "Acknowledgements" or "Dedications",
+ preserve the section's title, and preserve in the section all the
+ substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+ 
+ <LI>
+ 
+ Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles.  Section numbers
+ or the equivalent are not considered part of the section titles.
+ 
+ <LI>
+ 
+ Delete any section entitled "Endorsements".  Such a section
+ may not be included in the Modified Version.
+ 
+ <LI>
+ 
+ Do not retitle any existing section as "Endorsements"
+ or to conflict in title with any Invariant Section.
+ </OL>
+ 
+ <P>
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no material
+ copied from the Document, you may at your option designate some or all
+ of these sections as invariant.  To do this, add their titles to the
+ list of Invariant Sections in the Modified Version's license notice.
+ These titles must be distinct from any other section titles.
+ 
+ 
+ <P>
+ You may add a section entitled "Endorsements", provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties--for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of a
+ standard.
+ 
+ 
+ <P>
+ You may add a passage of up to five words as a Front-Cover Text, and a
+ passage of up to 25 words as a Back-Cover Text, to the end of the list
+ of Cover Texts in the Modified Version.  Only one passage of
+ Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity.  If the Document already
+ includes a cover text for the same cover, previously added by you or
+ by arrangement made by the same entity you are acting on behalf of,
+ you may not add another; but you may replace the old one, on explicit
+ permission from the previous publisher that added the old one.
+ 
+ 
+ <P>
+ The author(s) and publisher(s) of the Document do not by this License
+ give permission to use their names for publicity for or to assert or
+ imply endorsement of any Modified Version.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC79" HREF="libtool_toc.html#TOC79">COMBINING DOCUMENTS</A></H2>
+ 
+ <P>
+ You may combine the Document with other documents released under this
+ License, under the terms defined in section 4 above for modified
+ versions, provided that you include in the combination all of the
+ Invariant Sections of all of the original documents, unmodified, and
+ list them all as Invariant Sections of your combined work in its
+ license notice.
+ 
+ 
+ <P>
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy.  If there are multiple Invariant Sections with the same name but
+ different contents, make the title of each such section unique by
+ adding at the end of it, in parentheses, the name of the original
+ author or publisher of that section if known, or else a unique number.
+ Make the same adjustment to the section titles in the list of
+ Invariant Sections in the license notice of the combined work.
+ 
+ 
+ <P>
+ In the combination, you must combine any sections entitled "History"
+ in the various original documents, forming one section entitled
+ "History"; likewise combine any sections entitled "Acknowledgements",
+ and any sections entitled "Dedications".  You must delete all sections
+ entitled "Endorsements."
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC80" HREF="libtool_toc.html#TOC80">COLLECTIONS OF DOCUMENTS</A></H2>
+ 
+ <P>
+ You may make a collection consisting of the Document and other documents
+ released under this License, and replace the individual copies of this
+ License in the various documents with a single copy that is included in
+ the collection, provided that you follow the rules of this License for
+ verbatim copying of each of the documents in all other respects.
+ 
+ 
+ <P>
+ You may extract a single document from such a collection, and distribute
+ it individually under this License, provided you insert a copy of this
+ License into the extracted document, and follow this License in all
+ other respects regarding verbatim copying of that document.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC81" HREF="libtool_toc.html#TOC81">AGGREGATION WITH INDEPENDENT WORKS</A></H2>
+ 
+ <P>
+ A compilation of the Document or its derivatives with other separate
+ and independent documents or works, in or on a volume of a storage or
+ distribution medium, does not as a whole count as a Modified Version
+ of the Document, provided no compilation copyright is claimed for the
+ compilation.  Such a compilation is called an "aggregate", and this
+ License does not apply to the other self-contained works thus compiled
+ with the Document, on account of their being thus compiled, if they
+ are not themselves derivative works of the Document.
+ 
+ 
+ <P>
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one quarter
+ of the entire aggregate, the Document's Cover Texts may be placed on
+ covers that surround only the Document within the aggregate.
+ Otherwise they must appear on covers around the whole aggregate.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC82" HREF="libtool_toc.html#TOC82">TRANSLATION</A></H2>
+ 
+ <P>
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section 4.
+ Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections.  You may include a
+ translation of this License provided that you also include the
+ original English version of this License.  In case of a disagreement
+ between the translation and the original English version of this
+ License, the original English version will prevail.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC83" HREF="libtool_toc.html#TOC83">TERMINATION</A></H2>
+ 
+ <P>
+ You may not copy, modify, sublicense, or distribute the Document except
+ as expressly provided for under this License.  Any other attempt to
+ copy, modify, sublicense or distribute the Document 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.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC84" HREF="libtool_toc.html#TOC84">FUTURE REVISIONS OF THIS LICENSE</A></H2>
+ 
+ <P>
+ The Free Software Foundation may publish new, revised versions
+ of the GNU Free Documentation 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.  See
+ http://www.gnu.org/copyleft/.
+ 
+ 
+ <P>
+ Each version of the License is given a distinguishing version number.
+ If the Document specifies that a particular numbered version of this
+ License "or any later version" applies to it, you have the option of
+ following the terms and conditions either of that specified version or
+ of any later version that has been published (not as a draft) by the
+ Free Software Foundation.  If the Document does not specify a version
+ number of this License, you may choose any version ever published (not
+ as a draft) by the Free Software Foundation.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC85" HREF="libtool_toc.html#TOC85">ADDENDUM: How to use this License for your documents</A></H2>
+ 
+ <P>
+ To use this License in a document you have written, include a copy of
+ the License in the document and put the following copyright and
+ license notices just after the title page:
+ 
+ 
+ 
+ <PRE>
+ Copyright (c)  YEAR  YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.1
+ or any later version published by the Free Software Foundation;
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+ </PRE>
+ 
+ <P>
+ If you have no Invariant Sections, write "with no Invariant Sections"
+ instead of saying which ones are invariant.  If you have no
+ Front-Cover Texts, write "no Front-Cover Texts" instead of
+ "Front-Cover Texts being LIST"; likewise for Back-Cover Texts.
+ 
+ 
+ <P>
+ If your document contains nontrivial examples of program code, we
+ recommend releasing these examples in parallel under your choice of
+ free software license, such as the GNU General Public License,
+ to permit their use in free software.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC86" HREF="libtool_toc.html#TOC86">Index</A></H1>
+ 
+ <P>
+ Jump to:
+ <A HREF="#cindex_(">(</A>
+ -
+ <A HREF="#cindex_.">.</A>
+ -
+ <A HREF="#cindex_a">a</A>
+ -
+ <A HREF="#cindex_b">b</A>
+ -
+ <A HREF="#cindex_c">c</A>
+ -
+ <A HREF="#cindex_d">d</A>
+ -
+ <A HREF="#cindex_e">e</A>
+ -
+ <A HREF="#cindex_f">f</A>
+ -
+ <A HREF="#cindex_g">g</A>
+ -
+ <A HREF="#cindex_h">h</A>
+ -
+ <A HREF="#cindex_i">i</A>
+ -
+ <A HREF="#cindex_l">l</A>
+ -
+ <A HREF="#cindex_m">m</A>
+ -
+ <A HREF="#cindex_n">n</A>
+ -
+ <A HREF="#cindex_o">o</A>
+ -
+ <A HREF="#cindex_p">p</A>
+ -
+ <A HREF="#cindex_q">q</A>
+ -
+ <A HREF="#cindex_r">r</A>
+ -
+ <A HREF="#cindex_s">s</A>
+ -
+ <A HREF="#cindex_t">t</A>
+ -
+ <A HREF="#cindex_u">u</A>
+ -
+ <A HREF="#cindex_v">v</A>
+ -
+ <A HREF="#cindex_w">w</A>
+ <P>
+ <H2><A NAME="cindex_(">(</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX202">(const char *<VAR>loader_name</VAR>)</A>
+ <LI><A HREF="libtool.html#IDX201">(lt_dlloader *<VAR>place</VAR>)</A>, <A HREF="libtool.html#IDX203">(lt_dlloader *<VAR>place</VAR>)</A>, <A HREF="libtool.html#IDX204">(lt_dlloader *<VAR>place</VAR>)</A>
+ <LI><A HREF="libtool.html#IDX167">(void)</A>, <A HREF="libtool.html#IDX173">(void)</A>
+ </DIR>
+ <H2><A NAME="cindex_.">.</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX24"><SAMP>`.la'</SAMP> files</A>
+ <LI><A HREF="libtool.html#IDX25"><TT>`.libs'</TT> subdirectory</A>
+ <LI><A HREF="libtool.html#IDX19"><SAMP>`.lo'</SAMP> files</A>
+ </DIR>
+ <H2><A NAME="cindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX101">AC_CONFIG_AUX_DIR</A>
+ <LI><A HREF="libtool.html#IDX76">AC_DISABLE_FAST_INSTALL</A>
+ <LI><A HREF="libtool.html#IDX77">AC_DISABLE_SHARED</A>
+ <LI><A HREF="libtool.html#IDX79">AC_DISABLE_STATIC</A>
+ <LI><A HREF="libtool.html#IDX103">AC_FUNC_ALLOCA</A>
+ <LI><A HREF="libtool.html#IDX74">AC_LIBTOOL_DLOPEN</A>
+ <LI><A HREF="libtool.html#IDX75">AC_LIBTOOL_WIN32_DLL</A>
+ <LI><A HREF="libtool.html#IDX72">AC_PROG_LIBTOOL</A>
+ <LI><A HREF="libtool.html#IDX105">AC_REPLACE_FUNCS</A>
+ <LI><A HREF="libtool.html#IDX93">aclocal</A>
+ <LI><A HREF="libtool.html#IDX281">allow_undefined_flag</A>
+ <LI><A HREF="libtool.html#IDX282">always_export_symbols</A>
+ <LI><A HREF="libtool.html#IDX78">AM_DISABLE_SHARED</A>
+ <LI><A HREF="libtool.html#IDX80">AM_DISABLE_STATIC</A>
+ <LI><A HREF="libtool.html#IDX73">AM_PROG_LIBTOOL</A>
+ <LI><A HREF="libtool.html#IDX140">application-level dynamic linking</A>, <A HREF="libtool.html#IDX157">application-level dynamic linking</A>
+ <LI><A HREF="libtool.html#IDX21">ar</A>
+ <LI><A HREF="libtool.html#IDX276">AR</A>
+ <LI><A HREF="libtool.html#IDX283">archive_cmds</A>
+ <LI><A HREF="libtool.html#IDX284">archive_expsym_cmds</A>
+ <LI><A HREF="libtool.html#IDX92">AS</A>
+ <LI><A HREF="libtool.html#IDX253">assign.test</A>
+ <LI><A HREF="libtool.html#IDX109">avoiding shared libraries</A>
+ </DIR>
+ <H2><A NAME="cindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX262">bug reports</A>
+ <LI><A HREF="libtool.html#IDX27">buggy system linkers</A>
+ <LI><A HREF="libtool.html#IDX29">bugs, subtle ones caused by buggy linkers</A>
+ <LI><A HREF="libtool.html#IDX235">build-relink.test</A>
+ <LI><A HREF="libtool.html#IDX288">build_libtool_libs</A>
+ <LI><A HREF="libtool.html#IDX289">build_old_libs</A>
+ </DIR>
+ <H2><A NAME="cindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX129">C header files, portable</A>
+ <LI><A HREF="libtool.html#IDX212">C++, pitfalls</A>
+ <LI><A HREF="libtool.html#IDX209">C++, using</A>
+ <LI><A HREF="libtool.html#IDX207">C, not using</A>
+ <LI><A HREF="libtool.html#IDX81">CC</A>, <A HREF="libtool.html#IDX277">CC</A>
+ <LI><A HREF="libtool.html#IDX218">cdemo-conf.test</A>
+ <LI><A HREF="libtool.html#IDX219">cdemo-exec.test</A>
+ <LI><A HREF="libtool.html#IDX220">cdemo-make.test</A>
+ <LI><A HREF="libtool.html#IDX222">cdemo-shared.test</A>
+ <LI><A HREF="libtool.html#IDX221">cdemo-static.test</A>
+ <LI><A HREF="libtool.html#IDX82">CFLAGS</A>
+ <LI><A HREF="libtool.html#IDX65">clean mode</A>
+ <LI><A HREF="libtool.html#IDX48">command options, libtool</A>
+ <LI><A HREF="libtool.html#IDX99">command options, libtoolize</A>
+ <LI><A HREF="libtool.html#IDX50">compile mode</A>
+ <LI><A HREF="libtool.html#IDX290">compiler_c_o</A>
+ <LI><A HREF="libtool.html#IDX291">compiler_o_lo</A>
+ <LI><A HREF="libtool.html#IDX14">compiling object files</A>
+ <LI><A HREF="libtool.html#IDX9">complexity of library systems</A>
+ <LI><A HREF="libtool.html#IDX94">config.guess</A>
+ <LI><A HREF="libtool.html#IDX95">config.sub</A>
+ <LI><A HREF="libtool.html#IDX71">configuring libtool</A>
+ <LI><A HREF="libtool.html#IDX43">convenience libraries</A>
+ <LI><A HREF="libtool.html#IDX83">CPPFLAGS</A>
+ </DIR>
+ <H2><A NAME="cindex_d">d</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX106">debugging libraries</A>
+ <LI><A HREF="libtool.html#IDX10">definition of libraries</A>
+ <LI><A HREF="libtool.html#IDX223">demo-conf.test</A>
+ <LI><A HREF="libtool.html#IDX224">demo-exec.test</A>
+ <LI><A HREF="libtool.html#IDX225">demo-inst.test</A>
+ <LI><A HREF="libtool.html#IDX226">demo-make.test</A>
+ <LI><A HREF="libtool.html#IDX230">demo-nofast.test</A>
+ <LI><A HREF="libtool.html#IDX232">demo-nopic.test</A>
+ <LI><A HREF="libtool.html#IDX231">demo-pic.test</A>
+ <LI><A HREF="libtool.html#IDX229">demo-shared.test</A>
+ <LI><A HREF="libtool.html#IDX228">demo-static.test</A>
+ <LI><A HREF="libtool.html#IDX227">demo-unst.test</A>
+ <LI><A HREF="libtool.html#IDX237">depdemo-conf.test</A>
+ <LI><A HREF="libtool.html#IDX238">depdemo-exec.test</A>
+ <LI><A HREF="libtool.html#IDX239">depdemo-inst.test</A>
+ <LI><A HREF="libtool.html#IDX240">depdemo-make.test</A>
+ <LI><A HREF="libtool.html#IDX244">depdemo-nofast.test</A>
+ <LI><A HREF="libtool.html#IDX243">depdemo-shared.test</A>
+ <LI><A HREF="libtool.html#IDX242">depdemo-static.test</A>
+ <LI><A HREF="libtool.html#IDX241">depdemo-unst.test</A>
+ <LI><A HREF="libtool.html#IDX131">dependencies between libraries</A>
+ <LI><A HREF="libtool.html#IDX116">dependency versioning</A>
+ <LI><A HREF="libtool.html#IDX233">deplibs.test</A>
+ <LI><A HREF="libtool.html#IDX266">deplibs_check_method</A>
+ <LI><A HREF="libtool.html#IDX6">design issues</A>
+ <LI><A HREF="libtool.html#IDX123">design of library interfaces</A>
+ <LI><A HREF="libtool.html#IDX2">design philosophy</A>
+ <LI><A HREF="libtool.html#IDX107">developing libraries</A>
+ <LI><A HREF="libtool.html#IDX135">dlclose</A>, <A HREF="libtool.html#IDX151">dlclose</A>
+ <LI><A HREF="libtool.html#IDX152">dlerror</A>
+ <LI><A HREF="libtool.html#IDX90">DLLTOOL</A>
+ <LI><A HREF="libtool.html#IDX133">dlopen</A>, <A HREF="libtool.html#IDX149">dlopen</A>
+ <LI><A HREF="libtool.html#IDX293">dlopen_self</A>
+ <LI><A HREF="libtool.html#IDX294">dlopen_self_static</A>
+ <LI><A HREF="libtool.html#IDX292">dlopen_support</A>
+ <LI><A HREF="libtool.html#IDX138">dlopening modules</A>, <A HREF="libtool.html#IDX155">dlopening modules</A>
+ <LI><A HREF="libtool.html#IDX146">dlopening, pitfalls</A>
+ <LI><A HREF="libtool.html#IDX134">dlsym</A>, <A HREF="libtool.html#IDX150">dlsym</A>
+ <LI><A HREF="libtool.html#IDX108">double-compilation, avoiding</A>
+ <LI><A HREF="libtool.html#IDX252">dryrun.test</A>
+ <LI><A HREF="libtool.html#IDX115">dynamic dependencies</A>
+ <LI><A HREF="libtool.html#IDX137">dynamic linking, applications</A>, <A HREF="libtool.html#IDX154">dynamic linking, applications</A>
+ <LI><A HREF="libtool.html#IDX144">dynamic modules, names</A>
+ </DIR>
+ <H2><A NAME="cindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX295">echo</A>
+ <LI><A HREF="libtool.html#IDX110">eliding shared libraries</A>
+ <LI><A HREF="libtool.html#IDX12">examples of using libtool</A>
+ <LI><A HREF="libtool.html#IDX296">exclude_expsyms</A>
+ <LI><A HREF="libtool.html#IDX57">execute mode</A>
+ <LI><A HREF="libtool.html#IDX297">export_dynamic_flag_spec</A>
+ <LI><A HREF="libtool.html#IDX298">export_symbols_cmds</A>
+ <LI><A HREF="libtool.html#IDX299">extract_expsyms_cmds</A>
+ </DIR>
+ <H2><A NAME="cindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX260">failed tests</A>
+ <LI><A HREF="libtool.html#IDX300">fast_install</A>
+ <LI><A HREF="libtool.html#IDX267">file_magic</A>
+ <LI><A HREF="libtool.html#IDX268">file_magic_cmd</A>
+ <LI><A HREF="libtool.html#IDX269">file_magic_test_file</A>
+ <LI><A HREF="libtool.html#IDX61">finish mode</A>
+ <LI><A HREF="libtool.html#IDX301">finish_cmds</A>
+ <LI><A HREF="libtool.html#IDX302">finish_eval</A>
+ <LI><A HREF="libtool.html#IDX303">fix_srcfile_path</A>
+ <LI><A HREF="libtool.html#IDX120">formal versioning</A>
+ </DIR>
+ <H2><A NAME="cindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX127">global functions</A>
+ <LI><A HREF="libtool.html#IDX304">global_symbol_pipe</A>
+ <LI><A HREF="libtool.html#IDX305">global_symbol_to_cdecl</A>
+ </DIR>
+ <H2><A NAME="cindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX234">hardcode.test</A>
+ <LI><A HREF="libtool.html#IDX306">hardcode_action</A>
+ <LI><A HREF="libtool.html#IDX307">hardcode_direct</A>
+ <LI><A HREF="libtool.html#IDX308">hardcode_into_libs</A>
+ <LI><A HREF="libtool.html#IDX309">hardcode_libdir_flag_spec</A>
+ <LI><A HREF="libtool.html#IDX310">hardcode_libdir_separator</A>
+ <LI><A HREF="libtool.html#IDX311">hardcode_minus_L</A>
+ <LI><A HREF="libtool.html#IDX312">hardcode_shlibpath_var</A>
+ <LI><A HREF="libtool.html#IDX126">header files</A>
+ <LI><A HREF="libtool.html#IDX313">host</A>
+ <LI><A HREF="libtool.html#IDX314">host_alias</A>
+ </DIR>
+ <H2><A NAME="cindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX274">implementation of libtool</A>
+ <LI><A HREF="libtool.html#IDX130">include files, portable</A>
+ <LI><A HREF="libtool.html#IDX315">include_expsyms</A>
+ <LI><A HREF="libtool.html#IDX36">install</A>
+ <LI><A HREF="libtool.html#IDX59">install mode</A>
+ <LI><A HREF="libtool.html#IDX40">installation, finishing</A>
+ <LI><A HREF="libtool.html#IDX132">inter-library dependencies</A>
+ <LI><A HREF="libtool.html#IDX265">inter-library dependency</A>
+ </DIR>
+ <H2><A NAME="cindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX208">languages, non-C</A>
+ <LI><A HREF="libtool.html#IDX84">LD</A>, <A HREF="libtool.html#IDX278">LD</A>
+ <LI><A HREF="libtool.html#IDX85">LDFLAGS</A>
+ <LI><A HREF="libtool.html#IDX316">libext</A>
+ <LI><A HREF="libtool.html#IDX148">libltdl</A>
+ <LI><A HREF="libtool.html#IDX317">libname_spec</A>
+ <LI><A HREF="libtool.html#IDX11">libraries, definition of</A>
+ <LI><A HREF="libtool.html#IDX41">libraries, finishing installation</A>
+ <LI><A HREF="libtool.html#IDX38">libraries, stripping</A>
+ <LI><A HREF="libtool.html#IDX118">library interfaces</A>
+ <LI><A HREF="libtool.html#IDX122">library interfaces, design</A>
+ <LI><A HREF="libtool.html#IDX18">library object file</A>
+ <LI><A HREF="libtool.html#IDX318">library_names_spec</A>
+ <LI><A HREF="libtool.html#IDX86">LIBS</A>
+ <LI><A HREF="libtool.html#IDX45">libtool</A>
+ <LI><A HREF="libtool.html#IDX46">libtool command options</A>
+ <LI><A HREF="libtool.html#IDX13">libtool examples</A>
+ <LI><A HREF="libtool.html#IDX275">libtool implementation</A>
+ <LI><A HREF="libtool.html#IDX23">libtool libraries</A>
+ <LI><A HREF="libtool.html#IDX119">libtool library versions</A>
+ <LI><A HREF="libtool.html#IDX4">libtool specifications</A>
+ <LI><A HREF="libtool.html#IDX97">libtoolize</A>
+ <LI><A HREF="libtool.html#IDX98">libtoolize command options</A>
+ <LI><A HREF="libtool.html#IDX51">link mode</A>
+ <LI><A HREF="libtool.html#IDX255">link-2.test</A>
+ <LI><A HREF="libtool.html#IDX254">link.test</A>
+ <LI><A HREF="libtool.html#IDX319">link_all_deplibs</A>
+ <LI><A HREF="libtool.html#IDX320">link_static_flag</A>
+ <LI><A HREF="libtool.html#IDX26">linking against installed libraries</A>
+ <LI><A HREF="libtool.html#IDX30">linking against uninstalled libraries</A>
+ <LI><A HREF="libtool.html#IDX31">linking with installed libtool libraries</A>
+ <LI><A HREF="libtool.html#IDX56">linking, partial</A>
+ <LI><A HREF="libtool.html#IDX89">LN_S</A>
+ <LI><A HREF="libtool.html#IDX205">lt_dladderror</A>
+ <LI><A HREF="libtool.html#IDX171">lt_dladdsearchdir</A>
+ <LI><A HREF="libtool.html#IDX190">lt_dlcaller_get_data</A>
+ <LI><A HREF="libtool.html#IDX187">lt_dlcaller_id</A>
+ <LI><A HREF="libtool.html#IDX188">lt_dlcaller_register</A>
+ <LI><A HREF="libtool.html#IDX189">lt_dlcaller_set_data</A>
+ <LI><A HREF="libtool.html#IDX165">lt_dlclose</A>
+ <LI><A HREF="libtool.html#IDX162">lt_dlexit</A>
+ <LI><A HREF="libtool.html#IDX185">lt_dlforeach</A>
+ <LI><A HREF="libtool.html#IDX177">lt_dlfree</A>
+ <LI><A HREF="libtool.html#IDX184">lt_dlgetinfo</A>
+ <LI><A HREF="libtool.html#IDX159">lt_dlhandle</A>
+ <LI><A HREF="libtool.html#IDX186">lt_dlhandle_next</A>
+ <LI><A HREF="libtool.html#IDX183">lt_dlinfo</A>
+ <LI><A HREF="libtool.html#IDX161">lt_dlinit</A>
+ <LI><A HREF="libtool.html#IDX175">lt_dlisresident</A>
+ <LI><A HREF="libtool.html#IDX192">lt_dlloader</A>
+ <LI><A HREF="libtool.html#IDX199">lt_dlloader_add</A>
+ <LI><A HREF="libtool.html#IDX193">lt_dlloader_data</A>
+ <LI><A HREF="libtool.html#IDX198">lt_dlloader_exit</A>
+ <LI><A HREF="libtool.html#IDX200">lt_dlloader_remove</A>
+ <LI><A HREF="libtool.html#IDX174">lt_dlmakeresident</A>
+ <LI><A HREF="libtool.html#IDX176">lt_dlmalloc</A>
+ <LI><A HREF="libtool.html#IDX181">lt_dlmutex_geterror</A>
+ <LI><A HREF="libtool.html#IDX178">lt_dlmutex_lock</A>
+ <LI><A HREF="libtool.html#IDX182">lt_dlmutex_register</A>
+ <LI><A HREF="libtool.html#IDX180">lt_dlmutex_seterror</A>
+ <LI><A HREF="libtool.html#IDX179">lt_dlmutex_unlock</A>
+ <LI><A HREF="libtool.html#IDX163">lt_dlopen</A>
+ <LI><A HREF="libtool.html#IDX164">lt_dlopenext</A>
+ <LI><A HREF="libtool.html#IDX168">lt_dlpreload</A>
+ <LI><A HREF="libtool.html#IDX169">lt_dlpreload_default</A>
+ <LI><A HREF="libtool.html#IDX206">lt_dlseterror</A>
+ <LI><A HREF="libtool.html#IDX172">lt_dlsetsearchpath</A>
+ <LI><A HREF="libtool.html#IDX166">lt_dlsym</A>
+ <LI><A HREF="libtool.html#IDX141">lt_dlsymlist</A>, <A HREF="libtool.html#IDX160">lt_dlsymlist</A>
+ <LI><A HREF="libtool.html#IDX197">lt_find_sym</A>
+ <LI><A HREF="libtool.html#IDX191">lt_module</A>
+ <LI><A HREF="libtool.html#IDX196">lt_module_close</A>
+ <LI><A HREF="libtool.html#IDX195">lt_module_open</A>
+ <LI><A HREF="libtool.html#IDX142">lt_preloaded_symbols</A>
+ <LI><A HREF="libtool.html#IDX158">lt_ptr</A>
+ <LI><A HREF="libtool.html#IDX194">lt_user_dlloader</A>
+ <LI><A HREF="libtool.html#IDX102">LTALLOCA</A>
+ <LI><A HREF="libtool.html#IDX170">LTDL_SET_PRELOADED_SYMBOLS()</A>
+ <LI><A HREF="libtool.html#IDX104">LTLIBOBJS</A>
+ <LI><A HREF="libtool.html#IDX70">LTLIBRARIES</A>
+ <LI><A HREF="libtool.html#IDX96">ltmain.sh</A>
+ </DIR>
+ <H2><A NAME="cindex_m">m</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX67">Makefile</A>
+ <LI><A HREF="libtool.html#IDX68">Makefile.am</A>
+ <LI><A HREF="libtool.html#IDX69">Makefile.in</A>
+ <LI><A HREF="libtool.html#IDX245">mdemo-conf.test</A>
+ <LI><A HREF="libtool.html#IDX246">mdemo-exec.test</A>
+ <LI><A HREF="libtool.html#IDX247">mdemo-inst.test</A>
+ <LI><A HREF="libtool.html#IDX248">mdemo-make.test</A>
+ <LI><A HREF="libtool.html#IDX251">mdemo-shared.test</A>
+ <LI><A HREF="libtool.html#IDX250">mdemo-static.test</A>
+ <LI><A HREF="libtool.html#IDX249">mdemo-unst.test</A>
+ <LI><A HREF="libtool.html#IDX66">mode, clean</A>
+ <LI><A HREF="libtool.html#IDX49">mode, compile</A>
+ <LI><A HREF="libtool.html#IDX58">mode, execute</A>
+ <LI><A HREF="libtool.html#IDX62">mode, finish</A>
+ <LI><A HREF="libtool.html#IDX60">mode, install</A>
+ <LI><A HREF="libtool.html#IDX52">mode, link</A>
+ <LI><A HREF="libtool.html#IDX64">mode, uninstall</A>
+ <LI><A HREF="libtool.html#IDX139">modules, dynamic</A>, <A HREF="libtool.html#IDX156">modules, dynamic</A>
+ <LI><A HREF="libtool.html#IDX1">motivation for writing libtool</A>
+ </DIR>
+ <H2><A NAME="cindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX143">names of dynamic modules</A>
+ <LI><A HREF="libtool.html#IDX321">need_lib_prefix</A>
+ <LI><A HREF="libtool.html#IDX323">need_locks</A>
+ <LI><A HREF="libtool.html#IDX322">need_version</A>
+ <LI><A HREF="libtool.html#IDX87">NM</A>, <A HREF="libtool.html#IDX279">NM</A>
+ <LI><A HREF="libtool.html#IDX324">no_builtin_flag</A>
+ <LI><A HREF="libtool.html#IDX325">no_undefined_flag</A>
+ <LI><A HREF="libtool.html#IDX236">noinst-link.test</A>
+ <LI><A HREF="libtool.html#IDX256">nomode.test</A>
+ <LI><A HREF="libtool.html#IDX272">none</A>
+ </DIR>
+ <H2><A NAME="cindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX326">objdir</A>
+ <LI><A HREF="libtool.html#IDX91">OBJDUMP</A>
+ <LI><A HREF="libtool.html#IDX15">object files, compiling</A>
+ <LI><A HREF="libtool.html#IDX20">object files, library</A>
+ <LI><A HREF="libtool.html#IDX327">objext</A>
+ <LI><A HREF="libtool.html#IDX285">old_archive_cmds</A>
+ <LI><A HREF="libtool.html#IDX287">old_archive_from_expsyms_cmds</A>
+ <LI><A HREF="libtool.html#IDX286">old_archive_from_new_cmds</A>
+ <LI><A HREF="libtool.html#IDX330">old_postinstall_cmds</A>
+ <LI><A HREF="libtool.html#IDX332">old_postuninstall_cmds</A>
+ <LI><A HREF="libtool.html#IDX340">old_striplib</A>
+ <LI><A HREF="libtool.html#IDX125">opaque data types</A>
+ <LI><A HREF="libtool.html#IDX47">options, libtool command</A>
+ <LI><A HREF="libtool.html#IDX100">options, libtoolize command</A>
+ <LI><A HREF="libtool.html#IDX7">other implementations, flaws in</A>
+ </DIR>
+ <H2><A NAME="cindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX55">partial linking</A>
+ <LI><A HREF="libtool.html#IDX271">pass_all</A>
+ <LI><A HREF="libtool.html#IDX17">PIC (position-independent code)</A>
+ <LI><A HREF="libtool.html#IDX328">pic_flag</A>
+ <LI><A HREF="libtool.html#IDX211">pitfalls using C++</A>
+ <LI><A HREF="libtool.html#IDX145">pitfalls with dlopen</A>
+ <LI><A HREF="libtool.html#IDX128">portable C headers</A>
+ <LI><A HREF="libtool.html#IDX16">position-independent code</A>
+ <LI><A HREF="libtool.html#IDX329">postinstall_cmds</A>
+ <LI><A HREF="libtool.html#IDX39">postinstallation</A>
+ <LI><A HREF="libtool.html#IDX331">postuninstall_cmds</A>
+ <LI><A HREF="libtool.html#IDX264">problem reports</A>
+ <LI><A HREF="libtool.html#IDX216">problems, blaming somebody else for</A>
+ <LI><A HREF="libtool.html#IDX214">problems, solving</A>
+ <LI><A HREF="libtool.html#IDX33">program wrapper scripts</A>
+ </DIR>
+ <H2><A NAME="cindex_q">q</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX257">quote.test</A>
+ </DIR>
+ <H2><A NAME="cindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX88">RANLIB</A>, <A HREF="libtool.html#IDX280">RANLIB</A>
+ <LI><A HREF="libtool.html#IDX22">ranlib</A>
+ <LI><A HREF="libtool.html#IDX333">reload_cmds</A>
+ <LI><A HREF="libtool.html#IDX334">reload_flag</A>
+ <LI><A HREF="libtool.html#IDX124">renaming interface functions</A>
+ <LI><A HREF="libtool.html#IDX263">reporting bugs</A>
+ <LI><A HREF="libtool.html#IDX8">reusability of library systems</A>
+ <LI><A HREF="libtool.html#IDX335">runpath_var</A>
+ </DIR>
+ <H2><A NAME="cindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX114">saving time</A>
+ <LI><A HREF="libtool.html#IDX28">security problems with buggy linkers</A>
+ <LI><A HREF="libtool.html#IDX258">sh.test</A>
+ <LI><A HREF="libtool.html#IDX112">shared libraries, not using</A>
+ <LI><A HREF="libtool.html#IDX117">shared library versions</A>
+ <LI><A HREF="libtool.html#IDX136">shl_load</A>, <A HREF="libtool.html#IDX153">shl_load</A>
+ <LI><A HREF="libtool.html#IDX336">shlibpath_overrides_runpath</A>
+ <LI><A HREF="libtool.html#IDX337">shlibpath_var</A>
+ <LI><A HREF="libtool.html#IDX215">solving problems</A>
+ <LI><A HREF="libtool.html#IDX338">soname_spec</A>
+ <LI><A HREF="libtool.html#IDX3">specifications for libtool</A>
+ <LI><A HREF="libtool.html#IDX44">standalone binaries</A>
+ <LI><A HREF="libtool.html#IDX42">static linking</A>
+ <LI><A HREF="libtool.html#IDX34">strip</A>
+ <LI><A HREF="libtool.html#IDX339">striplib</A>
+ <LI><A HREF="libtool.html#IDX37">stripping libraries</A>
+ <LI><A HREF="libtool.html#IDX35">su</A>
+ <LI><A HREF="libtool.html#IDX259">suffix.test</A>
+ <LI><A HREF="libtool.html#IDX341">sys_lib_dlsearch_path_spec</A>
+ <LI><A HREF="libtool.html#IDX342">sys_lib_search_path_spec</A>
+ </DIR>
+ <H2><A NAME="cindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX217">test suite</A>
+ <LI><A HREF="libtool.html#IDX270">test_compile</A>
+ <LI><A HREF="libtool.html#IDX261">tests, failed</A>
+ <LI><A HREF="libtool.html#IDX343">thread_safe_flag_spec</A>
+ <LI><A HREF="libtool.html#IDX113">time, saving</A>
+ <LI><A HREF="libtool.html#IDX5">tricky design issues</A>
+ <LI><A HREF="libtool.html#IDX210">trouble with C++</A>
+ <LI><A HREF="libtool.html#IDX147">trouble with dlopen</A>
+ <LI><A HREF="libtool.html#IDX213">troubleshooting</A>
+ </DIR>
+ <H2><A NAME="cindex_u">u</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX53">undefined symbols, allowing</A>
+ <LI><A HREF="libtool.html#IDX63">uninstall mode</A>
+ <LI><A HREF="libtool.html#IDX273">unknown</A>
+ <LI><A HREF="libtool.html#IDX54">unresolved symbols, allowing</A>
+ <LI><A HREF="libtool.html#IDX111">using shared libraries, not</A>
+ </DIR>
+ <H2><A NAME="cindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX344">version_type</A>
+ <LI><A HREF="libtool.html#IDX121">versioning, formal</A>
+ </DIR>
+ <H2><A NAME="cindex_w">w</A></H2>
+ <DIR>
+ <LI><A HREF="libtool.html#IDX345">whole_archive_flag_spec</A>
+ <LI><A HREF="libtool.html#IDX346">wl</A>
+ <LI><A HREF="libtool.html#IDX32">wrapper scripts for programs</A>
+ </DIR>
+ 
+ 
+ <P><HR><P>
+ This document was generated on 10 July 2002 using
+ <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+ </BODY>
+ </HTML>


ossp-adm/autotools/oper-code.zip is a binary file


ossp-adm/autotools/oper.pdf is a binary file


ossp-adm/autotools/shtool.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,856 ----
+ <HTML>
+ <HEAD>
+ <TITLE>shtool> - The GNU Portable Shell Tool</TITLE>
+ <LINK REV="made" HREF="mailto:root@en1.engelschall.com">
+ </HEAD>
+ 
+ <BODY>
+ 
+ <A NAME="__index__"></A>
+ <!-- INDEX BEGIN -->
+ 
+ <UL>
+ 
+        <LI><A HREF="#name">NAME</A></LI>
+        <LI><A HREF="#version">VERSION</A></LI>
+        <LI><A HREF="#synopsis">SYNOPSIS</A></LI>
+        <LI><A HREF="#description">DESCRIPTION</A></LI>
+        <UL>
+ 
+                <LI><A HREF="#context background">Context Background</A></LI>
+                <LI><A HREF="#maintainance problem">Maintainance Problem</A></LI>
+                <LI><A HREF="#the aesthetic problem">The Aesthetic Problem</A></LI>
+                <LI><A HREF="#filling the gap">Filling the gap</A></LI>
+                <LI><A HREF="#the goals in detail">The goals in detail</A></LI>
+        </UL>
+ 
+        <LI><A HREF="#global options">GLOBAL OPTIONS</A></LI>
+        <LI><A HREF="#commands">COMMANDS</A></LI>
+        <LI><A HREF="#command description">COMMAND DESCRIPTION</A></LI>
+        <LI><A HREF="#see also">SEE ALSO</A></LI>
+        <LI><A HREF="#history">HISTORY</A></LI>
+        <LI><A HREF="#author">AUTHOR</A></LI>
+ </UL>
+ <!-- INDEX END -->
+ 
+ <HR>
+ <P>
+ <HR>
+ <H1><A NAME="name">NAME</A></H1>
+ <P><STRONG>GNU shtool</STRONG> - The GNU Portable Shell Tool</P>
+ <P>
+ <HR>
+ <H1><A NAME="version">VERSION</A></H1>
+ <P>GNU shtool SHTOOL_VERSION_STR</P>
+ <P>
+ <HR>
+ <H1><A NAME="synopsis">SYNOPSIS</A></H1>
+ <P><STRONG>shtool</STRONG>
+ [ <EM>global_options</EM> ]
+ <EM>command</EM>
+ [ <EM>command_options</EM> ]
+ [ <EM>command_args</EM> ]</P>
+ <P>
+ <HR>
+ <H1><A NAME="description">DESCRIPTION</A></H1>
+ <P><STRONG>GNU shtool</STRONG> is a compilation of small but very stable and portable shell
+ scripts into a single shell tool. All ingredients were in successful use over
+ many years in various free software projects. The compiled <STRONG>shtool</STRONG> script is
+ intended to be used inside the source tree of those free software packages.
+ There it can take over various (usually non-portable) tasks related to the
+ building and installation of such packages.</P>
+ <P>
+ <H2><A NAME="context background">Context Background</A></H2>
+ <P>For the configuration, build and installation environment of modern free
+ software packages one nowadays uses GNU <STRONG>autoconf</STRONG> and friends (i.e.
+ usually <STRONG>autoconf</STRONG>, <STRONG>automake</STRONG> and <STRONG>libtool</STRONG>). <STRONG>Autoconf</STRONG> covers the
+ configuration, <STRONG>automake</STRONG> covers the generation of the build environment and
+ <STRONG>libtool</STRONG> covers most of a libraries build process. But at least when it
+ comes to the installation step one usually have to use a few auxiliary scripts
+ like <CODE>mkdir.sh</CODE>, <CODE>install.sh</CODE>, etc. These scripts are usually replacements
+ for system tools and are required mainly for portability reasons. The result
+ is usually an <CODE>etc/</CODE> subdirectory in the source tree where over time a
+ lot shell scripts accumulate.</P>
+ <P>
+ <H2><A NAME="maintainance problem">Maintainance Problem</A></H2>
+ <P>The problem with those <CODE>etc/</CODE> shell scripts starts if one has to maintain
+ <EM>lots</EM> of free software packages as it's the case for the author of <STRONG>shtool</STRONG>.
+ Then over time all <CODE>etc/</CODE> directories diverge and with every day it gets more
+ and more nasty to always keep them in sync. Especially if some scripts
+ were locally adjusted because no centralized maintainance location exists, of
+ course. For <STRONG>autoconf</STRONG> no such problem exists, because the resulting
+ <CODE>configure</CODE> script is generated on-the-fly. The same applies to <STRONG>automake</STRONG>
+ and the various <CODE>Makefile.in</CODE> files.</P>
+ <P>Only for <STRONG>libtool</STRONG> one always has to grab the latest copy. But because it's
+ just two files (<CODE>ltmain.sh</CODE> and <CODE>ltconfig</CODE>), keeping a source trees in sync
+ is not too complicated (especially not if using the handy <CODE>libtoolize</CODE>
+ program). But the <CODE>etc/</CODE> shell script mess is nasty, especially because there
+ is no master version on the net. Additionally everytime one starts a new
+ project, one has to establish a new source tree. For a GNU hacker it's
+ immediately clear that <STRONG>autoconf</STRONG> and friends are part of the game. But which
+ <CODE>etc/</CODE> shell scripts are needed this time? And from which existing source
+ tree to copy them from? Hmmm... the same procedure as last year?!</P>
+ <P>
+ <H2><A NAME="the aesthetic problem">The Aesthetic Problem</A></H2>
+ <P>When a free software package has a large source tree (say, more than 50 files
+ and especially with one or more subdirectories) it's usually no problem to
+ have an additional <CODE>etc/</CODE> subdirectory with some scripts. They then totally
+ go down. But for smaller packages, especially those living in a single source
+ directory (a degenerated tree), some people (like the author of <STRONG>shtool</STRONG>)
+ have aesthetic problems. Because it looks strange to them that 20% of the
+ files in the source tree are just auxiliary scripts. Sure, the actual amount
+ of script code even <STRONG>shtool</STRONG> cannot reduce, but <STRONG>shtool</STRONG> merges them
+ together into a single file and this way they optically totally disappear from
+ the source tree.</P>
+ <P>This is a pure aesthetical issue, of course. But keep in mind that hacking is
+ a piece of art. And a well layouted source tree is a piece of art for real
+ hackers, too.  Oh, and for those who really insist on a technical reason: it's
+ also easier to upgrade a single file than multiple files ;)</P>
+ <P>
+ <H2><A NAME="filling the gap">Filling the gap</A></H2>
+ <P>So, wouldn't it be nice to have a fourth package (beside <STRONG>autoconf</STRONG>,
+ <STRONG>automake</STRONG> and <STRONG>libtool</STRONG>) which fills the gap, i.e. which provides the
+ functionality of the old files in <CODE>etc/</CODE>, is maintained at a centralized
+ location and even consists of just a single (perhaps large) script one can
+ threat as a black box the same way one already does this for <STRONG>libtool</STRONG>?  The
+ author thought this <EM>would</EM> be actually very useful and the result is the
+ current GNU <STRONG>shtool</STRONG> package which at least successfully solved the above
+ problems of the author.</P>
+ <P>
+ <H2><A NAME="the goals in detail">The goals in detail</A></H2>
+ <P>To better understand the intentions behind <STRONG>shtool</STRONG> and to avoid confusion,
+ here are the original goals of the <STRONG>shtool</STRONG> script:</P>
+ <OL>
+ <LI><STRONG><A NAME="item_It_has_to_be_self%2Dcontained_and_reside_in_a_sing"><STRONG>1. It has to be self-contained and reside in a single file</STRONG></A></STRONG><BR>
+ 
+ This was achieved by compiling the resulting <STRONG>shtool</STRONG> script out of the
+ ingredient source scripts. The advantage is that <STRONG>shtool</STRONG> is still easily
+ maintainable, because one can test each script separately. But the final
+ functionality then resides in an all-in-one script which can be easily spread
+ over multiple source trees.
+ <P></P>
+ <LI><STRONG><A NAME="item_It_has_to_cover_all_functionality_of_the_old_scrip"><STRONG>2. It has to cover all functionality of the old scripts</STRONG></A></STRONG><BR>
+ 
+ This was achieved by (re)implementing really all functionality which
+ experience showed is important in source trees of typical free software
+ packages.
+ <P></P>
+ <LI><STRONG><A NAME="item_It_has_to_be_maximum_portable_over_all_Unix_flavor"><STRONG>3. It has to be maximum portable over all Unix flavors</STRONG></A></STRONG><BR>
+ 
+ This was achieved by basing the ingredient shell scripts only on well-proven
+ code which already survived practice in other projects over more than a few
+ months. Especially this means that a lot of complicated emulations are done to
+ avoid the use of unportable Unix programs (like <CODE>fmt</CODE>, <CODE>tr</CODE>, etc) or
+ unportable features of well-known Unix programs (like shell functions, special
+ <CODE>sed</CODE> features, etc. pp).  That's why <STRONG>shtool</STRONG>'s code sometimes looks crazy
+ and like overkill to you. Don't think this is because of the authors
+ crazyness. Instead it's most of the time mainly for portability reasons.
+ <P></P>
+ <LI><STRONG><A NAME="item_It_has_to_be_clean_and_fully_documented"><STRONG>4. It has to be clean and fully documented</STRONG></A></STRONG><BR>
+ 
+ This was achieved by reimplementing too ugly functionality from scratch and
+ cleaning up old shell script code plus writing this complete manual page.
+ <P></P>
+ <LI><STRONG><A NAME="item_It_has_to_stay_under_a_reasonable_and_common_licen"><STRONG>5. It has to stay under a reasonable and common license</STRONG></A></STRONG><BR>
+ 
+ This was achieved by placing the <STRONG>shtool</STRONG> package under the GNU General
+ Public License (GPL).  This way the <STRONG>shtool</STRONG> package itself is well protected
+ and is guarrantied to be kept free software, but the resulting <STRONG>shtool</STRONG>
+ script can be nevertheless <EM>used</EM> in <EM>all</EM> types of source trees.  Notice
+ here: given that one includes GNU <STRONG>shtool</STRONG> verbatim into an own source tree,
+ one is justified in saying that it remains separate from the own package, and
+ that this way one is simply just <EM>using</EM> <STRONG>shtool</STRONG>.  So, in this situation,
+ there is no requirement that the package itself is licensed under the GNU
+ General Public License in order to take advantage of <STRONG>shtool</STRONG>. Keep this in
+ mind ;)
+ <P></P>
+ <LI><STRONG><A NAME="item_It_has_to_be_modularized_for_flexibility_reasons"><STRONG>6. It has to be modularized for flexibility reasons</STRONG></A></STRONG><BR>
+ 
+ This was achieved by using an auxiliary tool <CODE>shtoolize(1)</CODE> which can be used to
+ build individual <CODE>shtool</CODE> scripts out of the ingredient shell scripts. This
+ way if one don't need all the available functionality one can assemble
+ together an individual <CODE>shtool</CODE> script.
+ <P></P></OL>
+ <P>
+ <HR>
+ <H1><A NAME="global options">GLOBAL OPTIONS</A></H1>
+ <P>The following <EM>global options</EM> are available for <STRONG>shtool</STRONG>. Any <EM>command</EM>s
+ are ignored if one of them is present on the <STRONG>shtool</STRONG> command line.</P>
+ <DL>
+ <DT><STRONG><A NAME="item_%2Dh%2C_%2D%2Dhelp"><STRONG>-h</STRONG>, <STRONG>--help</STRONG></A></STRONG><BR>
+ <DD>
+ Displays a short help page describing the usage of <STRONG>shtool</STRONG> and it's
+ ingredient <EM>command</EM>s in a compact way.
+ <P></P>
+ <DT><STRONG><A NAME="item_%2Dv%2C_%2D%2Dversion"><STRONG>-v</STRONG>, <STRONG>--version</STRONG></A></STRONG><BR>
+ <DD>
+ Displays the version number of <STRONG>shtool</STRONG>.
+ <P></P>
+ <DT><STRONG><A NAME="item_%2Dd%2C_%2D%2Ddebug"><STRONG>-d</STRONG>, <STRONG>--debug</STRONG></A></STRONG><BR>
+ <DD>
+ Displays shell trace messages for debugging purposes.
+ <P></P>
+ <DT><STRONG><A NAME="item_%2Dr%2C_%2D%2Drecreate"><STRONG>-r</STRONG>, <STRONG>--recreate</STRONG></A></STRONG><BR>
+ <DD>
+ Recreate the <STRONG>shtool</STRONG> script with its own individual <CODE>shtoolize(1)</CODE> call.
+ <P></P></DL>
+ <P>
+ <HR>
+ <H1><A NAME="commands">COMMANDS</A></H1>
+ <P>The following <EM>command</EM>s are provided by <STRONG>shtool</STRONG>. They are all called via
+ ``<CODE>shtool</CODE> <EM>command</EM>''. Any trailing <EM>command_options</EM> are specific to the
+ particular <EM>command</EM>. They are listed (here and also below) sorted by topic,
+ i.e. related commands are listed side-by-side.</P>
+ <DL>
+ <DT><STRONG><A NAME="item_echo"><STRONG>echo</STRONG></A></STRONG><BR>
+ <DD>
+ <A HREF="#item_echo"><CODE>echo(1)</CODE></A> style print command providing special expansion constructs (terminal
+ bold mode, environment details, date) and newline control.
+ <P></P>
+ <DT><STRONG><A NAME="item_mdate"><STRONG>mdate</STRONG></A></STRONG><BR>
+ <DD>
+ Pretty-prints the last modification time of a file or directory.
+ <P></P>
+ <DT><STRONG><A NAME="item_table"><STRONG>table</STRONG></A></STRONG><BR>
+ <DD>
+ Pretty-prints a field-separately list as a table.
+ <P></P>
+ <DT><STRONG><A NAME="item_prop"><STRONG>prop</STRONG></A></STRONG><BR>
+ <DD>
+ Display a processing indication though a running propeller.
+ <P></P>
+ <DT><STRONG><A NAME="item_move"><STRONG>move</STRONG></A></STRONG><BR>
+ <DD>
+ <CODE>mv(1)</CODE> style command, but can rename/move multiple files at once and allows
+ source files just to be deleted if contents didn't change.
+ <P></P>
+ <DT><STRONG><A NAME="item_install"><STRONG>install</STRONG></A></STRONG><BR>
+ <DD>
+ Install a program, script or datafile in a portable way.
+ <P></P>
+ <DT><STRONG><A NAME="item_mkdir"><STRONG>mkdir</STRONG></A></STRONG><BR>
+ <DD>
+ <A HREF="#item_mkdir"><CODE>mkdir(1)</CODE></A> style command providing support for auto-parent-dir creation,
+ directory permission control and smart skipping if directory already
+ exists.
+ <P></P>
+ <DT><STRONG><A NAME="item_mkln"><STRONG>mkln</STRONG></A></STRONG><BR>
+ <DD>
+ <CODE>ln(1)</CODE> style command providing automatic calculation and usage of relative
+ links if possible.
+ <P></P>
+ <DT><STRONG><A NAME="item_mkshadow"><STRONG>mkshadow</STRONG></A></STRONG><BR>
+ <DD>
+ Create a shadow source tree by the help of symbolic links.
+ <P></P>
+ <DT><STRONG><A NAME="item_fixperm"><STRONG>fixperm</STRONG></A></STRONG><BR>
+ <DD>
+ Fix file permissions inside a source tree by cleaning up the permission bits.
+ <P></P>
+ <DT><STRONG><A NAME="item_rotate"><STRONG>rotate</STRONG></A></STRONG><BR>
+ <DD>
+ Rotate a logfile.
+ <P></P>
+ <DT><STRONG><A NAME="item_tarball"><STRONG>tarball</STRONG></A></STRONG><BR>
+ <DD>
+ Roll standardized distribution tarballs.
+ <P></P>
+ <DT><STRONG><A NAME="item_subst"><STRONG>subst</STRONG></A></STRONG><BR>
+ <DD>
+ Apply <CODE>sed(1)</CODE> substitution operations.
+ <P></P>
+ <DT><STRONG><A NAME="item_guessos"><STRONG>guessos</STRONG></A></STRONG><BR>
+ <DD>
+ Simple operating system and platform architecture guesser which
+ determines a GNU <EM>platform-triple</EM> style identification string.
+ <P></P>
+ <DT><STRONG><A NAME="item_arx"><STRONG>arx</STRONG></A></STRONG><BR>
+ <DD>
+ Extended archive command which can even put existing archives into an archive.
+ <P></P>
+ <DT><STRONG><A NAME="item_slo"><STRONG>slo</STRONG></A></STRONG><BR>
+ <DD>
+ Separate linker options by library class.
+ <P></P>
+ <DT><STRONG><A NAME="item_scpp"><STRONG>scpp</STRONG></A></STRONG><BR>
+ <DD>
+ An additional C source file pre-processor for sharing <CODE>cpp(1)</CODE> code, internal
+ variables and internal functions.
+ <P></P>
+ <DT><STRONG><A NAME="item_version"><STRONG>version</STRONG></A></STRONG><BR>
+ <DD>
+ Maintain a version information file in either Text, C/C++, Perl or Python.
+ format.
+ <P></P>
+ <DT><STRONG><A NAME="item_path"><STRONG>path</STRONG></A></STRONG><BR>
+ <DD>
+ Deal with shell path variables.
+ <P></P></DL>
+ <P>
+ <HR>
+ <H1><A NAME="command description">COMMAND DESCRIPTION</A></H1>
+ <P>In the following the available <EM>commands</EM> and their corresponding
+ <EM>command_options</EM> are described in detail.</P>
+ <DL>
+ <DT><STRONG><A NAME="item_echo_%5B%2Dn%7C%2D%2Dnewline%5D_%5B%2De%7C%2D%2Dex"><STRONG>echo</STRONG> [<STRONG>-n</STRONG>|<STRONG>--newline</STRONG>] [<STRONG>-e</STRONG>|<STRONG>--expand</STRONG>] <EM>str</EM></A></STRONG><BR>
+ <DD>
+ This is an <A HREF="#item_echo"><CODE>echo(1)</CODE></A> style print command which provides special expansion
+ constructs (terminal bold mode, environment details, date) and newline
+ control.  Per default <EM>string</EM> is written to <EM>stdout</EM> followed by a newline
+ character (``<CODE>\n</CODE>''). When option ``<STRONG>-n</STRONG>'' is used this newline character is
+ left out.
+ <P>The <EM>str</EM> can contain special ``<STRONG>%</STRONG><EM>x</EM>'' constructs which which
+ are expanded before the output is written if option ``<STRONG>-e</STRONG>'' is
+ used. Currently the following constructs are recognized: ``<STRONG>%B</STRONG>''
+ for switching to terminal bold mode, ``<STRONG>%b</STRONG>'' for switching terminal
+ mode back to normal display mode, ``<STRONG>%u</STRONG>'' for the current user name,
+ ``<STRONG>%U</STRONG>'' for the current user id (numerical), ``<STRONG>%g</STRONG>'' for the current
+ group name, ``<STRONG>%G</STRONG>'' for the current group id (numerical), ``<STRONG>%h</STRONG>''
+ for the current hostname, ``<STRONG>%d</STRONG>'' for the current domain name,
+ ``<STRONG>%D</STRONG>'' for the current day of the month, ``<STRONG>%M</STRONG>'' for the current
+ month (numerical), ``<STRONG>%m</STRONG>'' for the current month name and ``<STRONG>%Y</STRONG>''
+ for the current year.</P>
+ <P>The trick of this command is that it provides a portable ``<STRONG>-n</STRONG>'' option and
+ hides the gory details needed to find out the environment details.</P>
+ <P>Examples:</P>
+ <PRE>
+  #   shell script
+  shtool echo -n -e &quot;Enter your name [%B%u%b]: &quot;; read name
+  shtool echo -e &quot;Your Email address might be %u@%h%d&quot;
+  shtool echo -e &quot;The current date is %D-%m-%Y&quot;</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_mdate_%5B%2Dn%7C%2D%2Dnewline%5D_%5B%2Dz%7C%2D%2Dz"><STRONG>mdate</STRONG> [<STRONG>-n</STRONG>|<STRONG>--newline</STRONG>] [<STRONG>-z</STRONG>|<STRONG>--zero</STRONG>] [<STRONG>-s</STRONG>|<STRONG>--shorten</STRONG>] [<STRONG>-d</STRONG>|<STRONG>--digits</STRONG>] [<STRONG>-f</STRONG>|<STRONG>--field-sep</STRONG> <EM>str</EM>] [<STRONG>-o</STRONG>|<STRONG>--order</STRONG> <EM>spec</EM>] <EM>path</EM></A></STRONG><BR>
+ <DD>
+ This command pretty-prints the last modification time of a file or directory
+ <EM>path</EM>. Option ``<STRONG>-n</STRONG>'' suppresses the output of a trailing newline
+ character, option ``<STRONG>-z</STRONG>'' pads numeric day (and optionally month) with a
+ leading zero, option ``<STRONG>-s</STRONG>'' shortens the months name to an abbreviation of
+ three characters, option ``<STRONG>-d</STRONG>'' replaces the month name with the
+ corresponding digits, option ``<STRONG>-f</STRONG>'' uses <EM>str</EM> as the field separator
+ (default is a single space character) and option ``<STRONG>-o</STRONG>'' specified the order
+ in which the fields are printed.
+ <P>The default for <EM>spec</EM> is ``<CODE>dmy</CODE>'' which means an output of ``&lt;day&gt; &lt;month&gt;
+ &lt;year&gt;''.  Any combination of the chars ``<CODE>d</CODE>'', ``<CODE>m</CODE>'' and ``<CODE>y</CODE>'' or
+ allowed for <EM>spec</EM>.</P>
+ <P>The trick of this command is that it provides a portable way to find out the
+ date of a file or directory while still allowing one to specify the format of
+ the date display.</P>
+ <P>Examples:</P>
+ <PRE>
+  #   shell script
+  shtool mdate -n /
+  shtool mdate -f '/' -z -d -o ymd foo.txt
+  shtool mdate -f '-' -s foo.txt</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_table_%5B%2DF%7C%2D%2Dfield%2Dsep_sep%5D_%5B%2Dw%7"><STRONG>table</STRONG> [<STRONG>-F</STRONG>|<STRONG>--field-sep</STRONG> <EM>sep</EM>] [<STRONG>-w</STRONG>|<STRONG>--width</STRONG> <EM>width</EM>] [<STRONG>-c</STRONG>|<STRONG>--columns</STRONG> <EM>cols</EM>] [<STRONG>-s</STRONG>|<STRONG>--strip</STRONG> <EM>strip</EM>] <EM>str</EM><STRONG>sep</STRONG><EM>str</EM>...</A></STRONG><BR>
+ <DD>
+ This pretty-prints a <EM>sep</EM>-separated list of <EM>str</EM>ings as a table.  Per
+ default a colon-separated list (<EM>sep</EM>=``:'') is pretty printed as a
+ three-column (&lt;cols&gt;=3) table no longer than 79 chars (<EM>strip</EM>=79) is
+ generated where each column is 15 characters wide (<EM>width</EM>=15).
+ <P>The trick of this command is that it avoids to use the unportable <CODE>tr(1)</CODE> and
+ <CODE>fmt(1)</CODE> commands and instead is based entirely on sh(1), <CODE>awk(1)</CODE> and <CODE>sed(1)</CODE>
+ functionality.</P>
+ <P>Example:</P>
+ <PRE>
+  #   shell script
+  shtool table -F , -w 5 -c 4 &quot;1,2,3,4,5,6,7,8,9,10,11,12&quot;</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_prop_%5B%2Dp%7C%2D%2Dprefix_str%5D"><STRONG>prop</STRONG> [<STRONG>-p</STRONG>|<STRONG>--prefix</STRONG> <EM>str</EM>]</A></STRONG><BR>
+ <DD>
+ This command displays a processing indication though a running propeller. The
+ option ``<STRONG>-p</STRONG>'' can be used to set a particular prefix <EM>str</EM> which is
+ displayed in front of the propeller. The default is no prefix string, i.e. the
+ propeller is at the left border of the terminal.  This command is intended to
+ be run at the end of a pipe (``<CODE>|</CODE>'') sequence where on <CODE>stdin</CODE>
+ logging/processing informations found.  For every line on <CODE>stdin</CODE> the
+ propeller cycles one step clock-wise.
+ <P>The trick of this command is that it provides a portable and easy to use way
+ to display such nice and psychologically important process indicators.</P>
+ <P>Example:</P>
+ <PRE>
+  #   shell script
+  configure 2&gt;&amp;1 |\
+      tee logfile |\
+      shtool prop -p &quot;Configuring sources&quot;</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_move_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%2Dtr"><STRONG>move</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-e</STRONG>|<STRONG>--expand</STRONG>] [<STRONG>-p</STRONG>|<STRONG>--preserve</STRONG>] <EM>src-file</EM> <EM>dst-file</EM></A></STRONG><BR>
+ <DD>
+ This is a <CODE>mv(1)</CODE> style command, but with two special features: First if
+ option ``<STRONG>-e</STRONG>'' (`expand') is used and an asterisk occurs somewhere in <EM>src</EM>
+ one can use ``<CODE>%</CODE><EM>n</EM>'' (where <EM>n</EM> is <CODE>1</CODE>,<CODE>2</CODE>,...) in <EM>dst-file</EM>. This is
+ useful for renaming multiple files at once.  Second, if option ``<STRONG>-p</STRONG>''
+ (for `preserve') is used and <EM>src-file</EM> and <EM>dst-file</EM> are byte-wise the
+ same it just deletes <EM>src-file</EM>. The intention is that the permissions and
+ time stamps on <EM>dst</EM> aren't changed which is important if <EM>dst-file</EM> is
+ used in conjunction with Makefiles.  Option ``<STRONG>-v</STRONG>'' (verbose) can be used to
+ enable the output of extra processing information. Option ``<STRONG>-t</STRONG>'' (trace)
+ can be used to enable the output of the essential shell commands which are
+ executed.
+ <P>The trick of this command is that it can rename multiple files at once and
+ preserves the timestamps if the contents isn't changed.</P>
+ <P>Examples:</P>
+ <PRE>
+  #   shell script
+  shtool move -v -e '*.txt' %1.asc</PRE>
+ <PRE>
+  #   Makefile
+  scanner.c: scanner.l
+      lex scanner.l
+      shtool move -t -p lex.yy.c scanner.c</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_install_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%2"><STRONG>install</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-c</STRONG>|<STRONG>--copy</STRONG>] [<STRONG>-C</STRONG>|<STRONG>--compare-copy</STRONG>] [<STRONG>-s</STRONG>|<STRONG>--strip</STRONG>] [<STRONG>-m</STRONG>|<STRONG>--mode</STRONG> <EM>mode</EM>] [<STRONG>-o</STRONG>|<STRONG>--owner</STRONG> <EM>owner</EM>] [<STRONG>-g</STRONG>|<STRONG>--group</STRONG> <EM>group</EM>] [<STRONG>-e</STRONG>|<STRONG>--exec</STRONG> <EM>sed-cmd</EM>] <EM>file</EM> <EM>path</EM></A></STRONG><BR>
+ <DD>
+ This command installs a program, script or datafile (dependent on <EM>mode</EM>) in
+ a portable way while providing all important options of the BSD <A HREF="#item_install"><CODE>install(1)</CODE></A>
+ command. Per default <EM>file</EM> is moved to the target <EM>path</EM>, but with option
+ ``<STRONG>-c</STRONG>'' <EM>file</EM> is copied. The target file is created with owner/group set
+ to the current active uid/gid, but if this script is called as root (uid 0)
+ the options ``<STRONG>-o</STRONG>'' and ``<STRONG>-g</STRONG>'' can be used to override this.
+ <P>Additionally program executables is stripped with <CODE>strip(1)</CODE> after
+ installation if option ``<STRONG>-s</STRONG>'' is used. Option ``<STRONG>-C</STRONG>'' is like
+ ``<STRONG>-c</STRONG>'', except if the destination file already exists and the files
+ are the same, the source is just removed. Option ``<STRONG>-e</STRONG>'' can be used
+ one or multiple times to apply one or more <CODE>sed(1)</CODE> commands on-the-fly
+ to the contents of the input <EM>file</EM> before the output file is created.
+ Option ``<STRONG>-v</STRONG>'' (verbose) can be used to enable the output of extra
+ processing information. Option ``<STRONG>-t</STRONG>'' (trace) can be used to enable
+ the output of the essential shell commands which are executed.</P>
+ <P>The trick of this command is that it provides the functionality of BSD
+ <A HREF="#item_install"><CODE>install(1)</CODE></A> in a portable emulated way.</P>
+ <P>Example:</P>
+ <PRE>
+  #   Makefile
+  install:
+       :
+      shtool install -c -s -m 4755 foo $(bindir)/
+      shtool install -c -m 644 foo.man $(mandir)/man1/foo.1
+      shtool install -c -m 644 -e &quot;s/@p@/$prefix/g&quot; foo.conf $(etcdir)/</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_mkdir_%5B%2Dt%7C%2D%2Dtrace%5D_%5B%2Df%7C%2D%2Dfor"><STRONG>mkdir</STRONG> [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-f</STRONG>|<STRONG>--force</STRONG>] [<STRONG>-p</STRONG>|<STRONG>--parents</STRONG>] [<STRONG>-m</STRONG>|<STRONG>--mode</STRONG> <EM>mode</EM>] <EM>dir</EM> [<EM>dir</EM> ...]</A></STRONG><BR>
+ <DD>
+ This is a <A HREF="#item_mkdir"><CODE>mkdir(1)</CODE></A> style command providing support for automatic parent
+ directory creation (if option ``<STRONG>-p</STRONG>'' is used), directory permission
+ control (with option ``<STRONG>-m</STRONG> <EM>mode</EM>'' where <EM>mode</EM> can be in any of
+ the formats specified to the <CODE>chmod(1)</CODE> command) and smart skipping if
+ <EM>dir</EM> already exists (triggered by the force option ``<STRONG>-f</STRONG>''). Option
+ ``<STRONG>-t</STRONG>'' (trace) can be used to enable the output of the essential
+ shell commands which are executed.
+ <P>The trick of this command is that it provides both a portable ``<STRONG>-p</STRONG>''
+ functionality and the ability to be smart if the directory already exists
+ which is important for installation procedures.</P>
+ <P>Example:</P>
+ <PRE>
+  #   Makefile
+  install:
+      shtool mkdir -f -p -m 755 $(bindir)
+      shtool mkdir -f -p -m 755 $(mandir)/man1
+       :</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_mkln_%5B%2Dt%7C%2D%2Dtrace%5D_%5B%2Df%7C%2D%2Dforc"><STRONG>mkln</STRONG> [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-f</STRONG>|<STRONG>--force</STRONG>] [<STRONG>-s</STRONG>|<STRONG>--symbolic</STRONG>] <EM>src-path</EM> [<EM>src-path</EM> ...] <EM>dst-path</EM></A></STRONG><BR>
+ <DD>
+ This is a <CODE>ln(1)</CODE> style command which provides automatic calculation and usage
+ of relative links if possible, i.e. usually if <EM>src-path</EM> and <EM>dst-path</EM>
+ are not absolute paths or at least they share a common prefix except the root
+ directory (``<CODE>/</CODE>''). When more than one <EM>src-path</EM> is specified, all of them
+ are linked into <EM>dst-path</EM>. Options ``<STRONG>-f</STRONG>'' and ``<STRONG>-s</STRONG>'' are similar to
+ ln(1), i.e.  they force the creation of the link (even if it exists) and
+ create a symbolic link instead of a hard-link.  Option ``<STRONG>-t</STRONG>'' (trace) can
+ be used to enable the output of the essential ``<CODE>ln</CODE>'' command which is
+ executed.
+ <P>The trick of this command is that it tried hard to calculate the paths to get
+ the maximum possible relative paths.</P>
+ <P>Example:</P>
+ <PRE>
+  #   shell script
+  shtool mkln -s foo/bar baz/quux</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_mkshadow_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%"><STRONG>mkshadow</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-a</STRONG>|<STRONG>--all</STRONG>] <EM>src-dir</EM> <EM>dst-dir</EM></A></STRONG><BR>
+ <DD>
+ This command creates a shadow tree of <EM>src-dir</EM> under <EM>dst-dir</EM> by
+ recreating the directory hierarchy of <EM>src-dir</EM> under <EM>dst-dir</EM> and by
+ creating the files of <EM>src-dir</EM> by linking them into the corresponding
+ directories under <EM>dst-dir</EM> via symbolic links. When <EM>src-dir</EM> can be
+ reached via relative paths from <EM>dst-dir</EM>, relative symbolic links are used,
+ too.
+ <P>Option ``<STRONG>-v</STRONG>'' (verbose) can be used to enable some displaying of processing
+ information.  Option ``<STRONG>-t</STRONG>'' (trace) can be used to display all commands
+ which are executed in order to construct <EM>dst-dir</EM>.  Option ``<STRONG>-a</STRONG>'' (all)
+ can be used to really shadow all files and directories in <EM>src-dir</EM>. Per
+ default CVS related files and directories, backup files, object files, etc.
+ are not shadowed.</P>
+ <P>The trick of this is that is provides such a high-level functionality with a
+ single command and hides all gory details.</P>
+ <P>Example:</P>
+ <PRE>
+  #   shell script
+  shtool mkshadow -v -a . /tmp/shadow</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_fixperm_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%2"><STRONG>fixperm</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] <EM>path</EM> [ <EM>path</EM> ... ]</A></STRONG><BR>
+ <DD>
+ This command fixes file permissions inside a source tree under <EM>path</EM> by
+ cleaning up the permission bits. It determines the cleaned up permission from
+ the already set bits. It's intended to be run before a tarball is rolled out
+ of the source tree. Option ``<STRONG>-v</STRONG>'' can be used to display some processing
+ information.  Option ``<STRONG>-t</STRONG>'' (trace) can be used to enable the output of the
+ essential shell commands which are executed.
+ <P>The trick is that this is more convenient that having to set the permissions
+ manually or with a large file list.</P>
+ <P>Example:</P>
+ <PRE>
+   #   Makefile.in
+   dist:
+       shtool fixperm -v *
+       ...</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_rotate_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%2D"><STRONG>rotate</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-f</STRONG>|<STRONG>--force</STRONG>] [<STRONG>-n</STRONG>|<STRONG>--num-files</STRONG> <EM>count</EM>] [<STRONG>-s</STRONG>|<STRONG>--min-size</STRONG> <EM>size</EM>] [<STRONG>-c</STRONG>|<STRONG>--copy</STRONG>] [<STRONG>-r</STRONG>|<STRONG>--remove</STRONG>] [<STRONG>-a</STRONG>|<STRONG>--archive-dir</STRONG> <EM>dir</EM>] [<STRONG>-z</STRONG>|<STRONG>--compress</STRONG> [<EM>tool</EM>:]<EM>level</EM>] [<STRONG>-b</STRONG>|<STRONG>--background</STRONG>] [<STRONG>-d</STRONG>|<STRONG>--delay</STRONG>] [<STRONG>-p</STRONG>|<STRONG>--pad</STRONG> <EM>len</EM>] [<STRONG>-o</STRONG>|<STRONG>--owner</STRONG> <EM>owner</EM>] [<STRONG>-g</STRONG>|<STRONG>--group</STRONG> <EM>group</EM>] [<STRONG>-m</STRONG>|<STRONG>--mode</STRONG> <EM>mode</EM>] [<STRONG>-M</STRONG>|<STRONG>--migrate</STRONG> <EM>cmd</EM>] [<STRONG>-P</STRONG>|<STRONG>--prolog</STRONG> <EM>cmd</EM>] [<STRONG>-E</STRONG>|<STRONG>--epilog</STRONG> <EM>cmd</EM>] <EM>file</EM> [...]</A></STRONG><BR>
+ <DD>
+ This command rotates a logfile <EM>file</EM> by subsequently creating up to
+ <EM>count</EM> (optionally compressed) archive files of it. Archive files are
+ named ``<EM>file</EM>.<EM>number</EM>[<EM>compress-suffix]</EM>'' where <EM>number</EM> is the
+ version number, 0 being the newest and ``<EM>count</EM>-1'' the oldest.
+ <P>A rotation step consists of the following steps: 1. remove archive file
+ number <EM>count</EM>-1; 2. move archive file number <EM>N</EM>-1 to <EM>N</EM> for <EM>N</EM>
+ counting from 1 to <EM>count</EM>-1; 3. move <EM>file</EM> to archive file number 0;
+ 4. creating a new and empty instance of <EM>file</EM>.</P>
+ <P>Option ``<STRONG>-s</STRONG>'' can be used to only start a rotation step if <EM>file</EM> is
+ at least <EM>size</EM> bytes long. The argument <EM>size</EM> can be specified also
+ with the trailing units <CODE>K</CODE> (kilo), <CODE>M</CODE> (mega) or <CODE>G</CODE> (giga).</P>
+ <P>Option ``<STRONG>-c</STRONG>'' changes the approach of moving <EM>file</EM> to archive file
+ number 0: instead of a move followed by the creation of a new <EM>file</EM>, a
+ copy is performed followed by a truncation of <EM>file</EM>. The difference is
+ that in the first case (the default), if an application has <EM>file</EM>
+ still opened, after the rotation step it will have archive file number
+ 0 opened and usually has to reopen the new <EM>file</EM>, while in the second
+ case the application can keep its open file handles to <EM>file</EM>. The
+ drawback of the second approach is that logfile entries are lost when
+ they are written to <EM>file</EM> between the execution of the copy and the
+ subsequent truncation operation.</P>
+ <P>Option ``<STRONG>-r</STRONG>'' removes <EM>file</EM> after rotation instead of providing a
+ new empty file. Option ``<STRONG>-a</STRONG>'' forces archive files to be created in
+ the separate directory <EM>dir</EM>.</P>
+ <P>Option ``<STRONG>-z</STRONG>'' enables compression of archive files with compression
+ level <EM>level</EM> (if option ``<STRONG>-b</STRONG>'' is present, compression takes place in
+ background). By default, the tools bzip2(1), <CODE>gzip(1)</CODE> and <CODE>compress(1)</CODE> are
+ searched for in <CODE>$PATH</CODE> (in this order), but one also can override this
+ by prefixing the compression level with one of the three particular tool
+ names. Option ``<STRONG>-d</STRONG>'' delays the compression of archive file number 0.
+ This is useful if option ``<STRONG>-c</STRONG>'' is not used, because an application
+ might still write to archive file 0 (through an open file handle).</P>
+ <P>Option ``<STRONG>-p</STRONG>'' enables padding with leading zeros in the <EM>number</EM>
+ part of the filename ``<EM>file</EM>.<EM>number</EM><EM>compress-suffix</EM>''. The default
+ padding <EM>len</EM> is 1. This is interesting if more than 10 archive files
+ are used, because it leads to still sorted directory listings.</P>
+ <P>Options ``<STRONG>-o</STRONG>'', ``<STRONG>-g</STRONG>'' and ``<STRONG>-m</STRONG>'' can be used to make sure that
+ the created files have particular file attributes. The valid arguments
+ are the same as for chown(1), <CODE>chgrp(1)</CODE> and chmod(1). Be aware that using
+ options ``<STRONG>-o</STRONG>'' and ``<STRONG>-g</STRONG>'' require root privileges.</P>
+ <P>Option ``<STRONG>-M</STRONG>'' allows one to execute a ``migration'' command just before
+ the archive file number <EM>count</EM>-1 is removed from the filesystem. The
+ specified <EM>cmd</EM> gets the archive filename as an argument appended.
+ Options ``<STRONG>-P</STRONG>'' (prolog) and ``<STRONG>-E</STRONG>'' (epilog) can be used to execute
+ commands before and after the rotation step. They are interesting in
+ conjunction with option ``<STRONG>-s</STRONG>'', because they are not executed at all
+ if it is decided that no rotation step is performed.</P>
+ <P>Option ``<STRONG>-f</STRONG>'' (force) can be used to allow the archive directory
+ (option ``<STRONG>-a</STRONG>'') to be silently created if it still does not exist and
+ that still not existing intermediate logfiles are silently skipped in
+ the rotation step.</P>
+ <P>Option ``<STRONG>-v</STRONG>'' (verbose) can be used to display the files which are
+ rotated. Option ``<STRONG>-t</STRONG>'' (trace) can be used to enable the output of
+ the essential shell commands which are executed for the rotation step.</P>
+ <P>Example:</P>
+ <PRE>
+   #   shell script
+   shtool rotate -n10 -s1M -zbzip2:9 -d -r /var/log/ap.access.log
+   shtool rotate -n5 -s128K -zbzip2:9 -d -r /var/log/ap.error.log
+   apachectl graceful</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_tarball_%5B%2Dt%7C%2D%2Dtrace%5D_%5B%2Dv%7C%2D%2Dv"><STRONG>tarball</STRONG> [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-o</STRONG>|<STRONG>--output</STRONG> <EM>tarball</EM>] [<STRONG>-c</STRONG>|<STRONG>--compress</STRONG> <EM>prog</EM>] [<STRONG>-u</STRONG>|<STRONG>--user</STRONG> <EM>user</EM>] [<STRONG>-g</STRONG>|<STRONG>--group</STRONG> <EM>group</EM>] [<STRONG>-e</STRONG>|<STRONG>--exclude</STRONG> <EM>pattern</EM>] <EM>path</EM> [<EM>path</EM> ...]</A></STRONG><BR>
+ <DD>
+ This command is for `rolling' distribution `tarballs', i.e. for the creation
+ of distribution files generated by `<CODE>tar</CODE>'. The important aspects of
+ standardized free software tarballs are: first they have to unpack into a
+ single top-level directory; second this top-level directory should correspond
+ to the tarball filename (i.e. a tarball `<CODE>foobar-0.8.15.tar</CODE>' per convention
+ unpacks into a top-level directory `<CODE>foobar-0.8.15/</CODE>'); third the files in
+ the tarball should be sorted to allow users to use the `<CODE>tar tvf -</CODE>' command
+ in a reasonable way; fourth the owner and group of the files in the tarball
+ for security reasons can be set to arbitrary names.
+ <P>The input files are given by the file or directory arguments <EM>path</EM>.
+ Directories are expanded before the comma-separated exclude (option <STRONG>-e</STRONG>)
+ <EM>pattern</EM>s (<STRONG>grep</STRONG> regular expressions) are used to filter the list.  The
+ default filter is ``<CODE>CVS,\\.cvsignore,\\.[oa]\$</CODE>''. Then the tarball is
+ created with its files owned by <EM>user</EM> (option <STRONG>-u</STRONG>) and <EM>group</EM> (option
+ <STRONG>-g</STRONG>). Finally the resulting tarball is piped through an optional compression
+ (option <STRONG>-c</STRONG>) program and written to the output file <EM>tarball</EM> (option
+ <STRONG>-o</STRONG>).  Option ``<STRONG>-v</STRONG>'' can be used to display the files which are stored in
+ the tarball. Option ``<STRONG>-t</STRONG>'' (trace) can be used to enable the output of the
+ essential shell commands which are executed.</P>
+ <P>The trick of this command is that it combines the complex process of rolling a
+ good tarball into a <EM>single</EM> command.</P>
+ <P>Example:</P>
+ <PRE>
+   #   Makefile.in
+   dist:
+       ...
+       V=`shtool version -d short ...'; \
+       shtool tarball -o foobar-$$V.tar.gz -c 'gzip -9' \
+                      -u bar -g gnu -e 'CVS,\.cvsignore' .</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_subst_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dt%7C%2D%2Dt"><STRONG>subst</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-n</STRONG>|<STRONG>--nop</STRONG>] [<STRONG>-s</STRONG>|<STRONG>--stealth</STRONG>] [<STRONG>-i</STRONG>|<STRONG>--interactive</STRONG>] [<STRONG>-b</STRONG>|<STRONG>--backup</STRONG> <EM>ext</EM>] [<STRONG>-e</STRONG>|<STRONG>--exec</STRONG> <EM>cmd</EM>] [<STRONG>-f</STRONG>|<STRONG>--file</STRONG> <EM>cmd-file</EM>] [<EM>file</EM>] [<EM>file</EM> ...]</A></STRONG><BR>
+ <DD>
+ This command applies one or more <CODE>sed(1)</CODE> substitution operations to
+ <EM>stdin</EM> or any number of files. The <CODE>sed(1)</CODE> operations are either
+ specified on the command line with option ``<STRONG>-e</STRONG>'' or are contained
+ in a file <EM>cmd-file</EM> and are specified with option ``<STRONG>-f</STRONG>''. The
+ original untouched <EM>file</EM> is usually overridden. If option ``<STRONG>-b</STRONG>''
+ is given and specifies a file extension, the original file is preserved
+ as ``<EM>file</EM>.<EM>ext</EM>''. If option ``<STRONG>-s</STRONG>'' (stealth) is specified,
+ the timestamp is preserved on <EM>file</EM>, too. Option ``<STRONG>-i</STRONG>'' enables
+ interactive mode where the user has to approve each operation. Option
+ ``<STRONG>-n</STRONG>'' (no operation) can be used to disable the actual execution of
+ the essential shell commands which would be executed. Option ``<STRONG>-t</STRONG>''
+ (trace) can be used to enable the output of the essential shell commands
+ which are executed. Option ``<STRONG>-v</STRONG>'' (verbose) can be used to display
+ the files which are patched.
+ <P>Example:</P>
+ <PRE>
+   #    interactive shell
+   shtool subst -i -e 's;(c) \([0-9]*\)-2000;(c) \1-2001;' *.[ch]</PRE>
+ <PRE>
+   #    RPM spec-file
+   %install
+       shtool subst -v -n \
+           -e 's;^\(prefix=\).*;\1 $RPM_BUILD_ROOT%{_prefix};g' \
+           -e 's;^\(sysconfdir=\).*;\1 $RPM_BUILD_ROOT%{_prefix}/etc;g' \
+           `find . -name Makefile -print`
+       make install</PRE>
+ <P></P>
+ <DT><STRONG><STRONG>guessos</STRONG></STRONG><BR>
+ <DD>
+ This command is a simple operating system and platform architecture guesser
+ which determines a so-called ``GNU <EM>platform-triple</EM>'' style identification
+ string ``<EM>arch</EM>-<EM>hardware</EM>-<EM>os</EM><EM>osversion</EM>''. For instance a FreeBSD 3.1
+ running on a Pentium II is identified as ``<CODE>i686-pc-freebsd3.1</CODE>''.  When you
+ need a more sophisticated platform guesser, use the GNU
+ <CODE>config.guess</CODE>/<CODE>config.sub</CODE> scripts, please.
+ <PRE>
+  #   configure.in
+  OS=`shtool guessos`</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_arx_%5B%2Dt%7C%2D%2Dtrace%5D_%5B%2DC%7C%2D%2Dcomma"><STRONG>arx</STRONG> [<STRONG>-t</STRONG>|<STRONG>--trace</STRONG>] [<STRONG>-C</STRONG>|<STRONG>--command</STRONG> <EM>cmd</EM>] <EM>op</EM> <EM>archive</EM> <EM>file</EM> [<EM>file</EM> ...]</A></STRONG><BR>
+ <DD>
+ This is a wrapper around the archive (``<CODE>ar</CODE>'') tool. It provides the ability
+ to create archives out of existing archives, i.e.  if one of <EM>file</EM> matches
+ ``<CODE>*.a</CODE>'' the archive member files of <EM>file</EM> are used instead of <EM>file</EM>
+ itself. When option ``<STRONG>-t</STRONG>'' (trace) is given <STRONG>arx</STRONG> shows the actually
+ involved shell commands. Option ``<STRONG>-C</STRONG>'' can be used to set the ``ar''
+ command to <EM>cmd</EM>.
+ <P>The trick of this command is the automatic handling of archive members which
+ is especially interesting if one wants to construct a (usually top-level)
+ library archive out of pre-build sub-library archives (usually staying inside
+ subdirs) in a large source tree.</P>
+ <P>Example:</P>
+ <PRE>
+  #   Makefile
+  AR=ar
+  RANLIB=ranlib
+    :
+  OBJS=foo.o bar.o
+  LIBS=baz/libbaz.a quux/libquux.a
+    :
+  libfoo.a: $(OBJS) $(LIBS)
+      shtool arx -C $(AR) rc libfoo.a $(OBJS) $(LIBS)
+      $(RANLIB) libfoo.a</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_slo_%5B%2Dp%7C%2D%2Dprefix_str%5D_%2D%2D_%2DLdir_%"><STRONG>slo</STRONG> [<STRONG>-p</STRONG>|<STRONG>--prefix</STRONG> <EM>str</EM>] -- <STRONG>-L</STRONG><EM>dir</EM> <STRONG>-l</STRONG><EM>lib</EM> [ <STRONG>-L</STRONG><EM>dir</EM> <STRONG>-l</STRONG><EM>lib</EM> ... ]</A></STRONG><BR>
+ <DD>
+ This command separates the linker options ``<STRONG>-L</STRONG>'' and ``<STRONG>-l</STRONG>'' by library
+ class. It's argument line can actually be an arbitrary command line where those
+ options are contained. <STRONG>slo</STRONG> parses these two options only and ignores the
+ remaining contents. The result is a trivial shell script on <CODE>stdout</CODE> which
+ defines six variables containing the ``<STRONG>-L</STRONG>'' and ``<STRONG>-l</STRONG>'' options sorted by
+ class:
+ <P>``<CODE>SLO_DIRS_OBJ</CODE>'' and ``<CODE>SLO_LIBS_OBJ</CODE>'' contains the ``<STRONG>-L</STRONG>'' and
+ ``<STRONG>-l</STRONG>'' options of static libraries,  ``<CODE>SLO_DIRS_PIC</CODE>'' and
+ ``<CODE>SLO_LIBS_PIC</CODE>'' contains the ``<STRONG>-L</STRONG>'' and ``<STRONG>-l</STRONG>'' options of static
+ libraries containing PIC (``Position Independent Code'') and
+ ``<CODE>SLO_DIRS_DSO</CODE>'' and ``<CODE>SLO_LIBS_DSO</CODE>'' contains the ``<STRONG>-L</STRONG>'' and
+ ``<STRONG>-l</STRONG>'' options of shared libraries. The <STRONG>-p</STRONG> option can be used to
+ change the default variable prefix from ``<CODE>SLO_</CODE>'' to <EM>str</EM>.</P>
+ <P>The intent of this separation is to provide a way between static and shared
+ libraries which is important if one wants to link custom DSOs against
+ libraries, because not all platforms all one to link these DSOs against shared
+ libraries. So one first has to separate out the shared libraries and link the
+ DSO only against the static libraries.  One can use this command also to just
+ sort the options.</P>
+ <P>Example:</P>
+ <PRE>
+   #   configure.in
+   LINK_STD=&quot;$LDFLAGS $LIBS&quot;
+   eval `shtool slo $LINK_STD`
+   LINK_DSO=&quot;$SLO_DIRS_OBJ $SLO_LIBS_OBJ $SLO_DIRS_PIC $SLO_LIBS_PIC&quot;
+     :</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_scpp_%5B%2Dv%7C%2D%2Dverbose%5D_%5B%2Dp%7C%2D%2Dpr"><STRONG>scpp</STRONG> [<STRONG>-v</STRONG>|<STRONG>--verbose</STRONG>] [<STRONG>-p</STRONG>|<STRONG>--preserve</STRONG>] [<STRONG>-f</STRONG>|<STRONG>--filter</STRONG> <EM>filter</EM>] [<STRONG>-o</STRONG>|<STRONG>--output</STRONG> <EM>ofile</EM>] [<STRONG>-t</STRONG>|<STRONG>--template</STRONG> <EM>tfile</EM>] [<STRONG>-M</STRONG>|<STRONG>--mark</STRONG> <EM>mark</EM>] [<STRONG>-D</STRONG>|<STRONG>--define</STRONG> <EM>dname</EM>] [<STRONG>-C</STRONG>|<STRONG>--class</STRONG> <EM>cname</EM>] <EM>file</EM> [<EM>file</EM> ...]</A></STRONG><BR>
+ <DD>
+ This command is an additional ANSI C source file pre-processor for sharing
+ <CODE>cpp(1)</CODE> code segments, internal variables and internal functions. The intention
+ for this comes from writing libraries in ANSI C. Here a common shared internal
+ header file is usually used for sharing information between the library
+ source files.
+ <P>The operation is to parse special constructs in <EM>file</EM>s, generate a few
+ things out of these constructs and insert them at position <EM>mark</EM> in <EM>tfile</EM>
+ by writing the output to <EM>ofile</EM>. Additionally the <EM>file</EM>s are never touched
+ or modified. Instead the constructs are removed later by the <CODE>cpp(1)</CODE> phase of
+ the build process. The only prerequisite is that every <EM>file</EM> has a
+ ``<CODE>#include &quot;</CODE><EM>ofile</EM><CODE>&quot;</CODE>'' at the top.</P>
+ <P>This command provides the following features: First it avoids namespace
+ pollution and reduces prototyping efforts for internal symbols by recognizing
+ functions and variables which are defined with the storage class identifier
+ ``<EM>cname</EM>''.  For instance if <EM>cname</EM> is ``intern'', a function ``<CODE>intern
+ void *foobar(int quux)</CODE>'' in one of the <EM>file</EM>s is translated into both a
+ ``<CODE>#define foobar __foobar</CODE>'' and a ``<CODE>extern void *foobar(int quux);</CODE>'' in
+ <EM>ofile</EM>. Additionally a global ``<CODE>#define</CODE> <EM>cname</EM> <CODE>/**/</CODE>'' is also
+ created in <EM>ofile</EM> to let the compiler silently ignore this additional
+ storage class identifier.</P>
+ <P>Second, the library source files usually want to share <CODE>typedef</CODE>s,
+ <CODE>#define</CODE>s, etc.  over the source file boundaries. To achieve this one can
+ either place this stuff manually into <EM>tfile</EM> or use the second feature of
+ <STRONG>scpp</STRONG>: All code in <EM>file</EM>s encapsulated with ``<CODE>#if </CODE><EM>dname</EM> ...
+ <CODE>#endif</CODE>'' is automatically copied to <EM>ofile</EM>. Additionally a global
+ ``<CODE>#define</CODE> <EM>dname</EM> <CODE>0</CODE>'' is also created in <EM>ofile</EM> to let the compiler
+ silently skip this parts (because it was already found in the header).</P>
+ <P>Option ``<STRONG>-v</STRONG>'' can be used to enable some processing output. Option
+ ``<STRONG>-p</STRONG>'' can be used to make the decision whether to overwrite <EM>ofile</EM>
+ independent of the generated ``#line'' lines. This is useful for
+ Makefiles if the real contents of <EM>ofile</EM> will not change, just
+ line numbers. Option ``<STRONG>-f</STRONG>'' (which can occur multiple times) can
+ be used to apply one or more pre-processing <CODE>sed(1)</CODE> <EM>filter</EM> commands
+ (usually of type ``<CODE>s/.../.../</CODE>'') to each input file before their
+ input is parsed.</P>
+ <P>Example:</P>
+ <PRE>
+   #   Makefile
+   SRCS=foo_bar.c foo_quux.c
+   foo_p.h: foo_p.h.in
+        shtool scpp -o foo_p.h -t foo_p.h.in \
+                    -M %%MARK%% -D cpp -C intern $(SRCS)</PRE>
+ <PRE>
+   /* foo_p.h.in */
+   #ifndef FOO_P_H
+   #define FOO_P_H
+   %%MARK%%
+   #endif /* FOO_P_H */</PRE>
+ <PRE>
+   /* foo_bar.c */
+   #include &quot;foo_p.h&quot;
+   #if cpp
+   #define OURS_INIT 4711
+   #endif
+   intern int ours;
+   static int myone = 0815;
+   intern int bar(void)
+   {
+       ours += myone;
+   }</PRE>
+ <PRE>
+   /* foo_quux.c */
+   #include &quot;foo_p.h&quot;
+   int main(int argc, char *argv[])
+   {
+       int i;
+       ours = OURS_INIT
+       for (i = 0; i &lt; 10; i++) {
+           bar();
+           printf(&quot;ours now %d\n&quot;, ours);
+       }
+       return 0;
+   }</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_version_%5B%2Dl%7C%2D%2Dlanguage_lang%5D_%5B%2Dn%7"><STRONG>version</STRONG> [<STRONG>-l</STRONG>|<STRONG>--language</STRONG> <EM>lang</EM>] [<STRONG>-n</STRONG>|<STRONG>--name</STRONG> <EM>name</EM>] [<STRONG>-p</STRONG>|<STRONG>--prefix</STRONG> <EM>prefix</EM>] [<STRONG>-s</STRONG>|<STRONG>--set</STRONG> <EM>version</EM>] [<STRONG>-e</STRONG>|<STRONG>--edit</STRONG>] [<STRONG>-i</STRONG>|<STRONG>--increase</STRONG> <EM>knob</EM>] [<STRONG>-d</STRONG>|<STRONG>--display</STRONG> <EM>type</EM>] <EM>file</EM></A></STRONG><BR>
+ <DD>
+ This command generates and maintains a version information
+ file <EM>file</EM> for program name <EM>name</EM> in either textual
+ (<EM>lang</EM>=``<CODE>txt</CODE>''), ANSI C (<EM>lang</EM>=``c''), Perl (<EM>lang</EM>=``perl'') or
+ Python (<EM>lang</EM>=``python'') language. The version is always described
+ with a triple &lt;<EM>version</EM>,<EM>revision</EM>,<EM>level</EM>&gt; and is
+ represented by a string which always matches the regular expression
+ ``<CODE>[0-9]+\.[0-9]+[sabp.][0-9]+</CODE>''. When the option ``<STRONG>-s</STRONG>'' is given,
+ the contents of <EM>file</EM> is overridden with the specified <EM>version</EM>.
+ <P>When option ``<STRONG>-i</STRONG>'' is used, the current version in <EM>file</EM> is updated
+ by increasing one element of the version where <EM>knob</EM> can be one of
+ the following: ``<CODE>v</CODE>'' for increasing the version by 1 (and resetting
+ revision and level to 0), ``<CODE>r</CODE>'' for increasing the revision by 1 (and
+ resetting level to 0) or ``<CODE>l</CODE>'' for increasing the level by 1.  Option
+ ``<STRONG>-e</STRONG>'' can be used to interactively enter a new version.</P>
+ <P>Unless option ``<STRONG>-e</STRONG>'', ``<STRONG>-i</STRONG>'' or ``<STRONG>-s</STRONG>'' is specified, the performed
+ action is to display the current version.  Option ``<STRONG>-d</STRONG>'' then can be used
+ to control the display type: ``<CODE>short</CODE>'' for a short version display, ``<CODE>long</CODE>''
+ for a longer version display, ``<CODE>hex</CODE>'' for a hexadecimal display of the version
+ and ``<CODE>libtool</CODE>'' for a format suitable for use with GNU libtool.</P>
+ <P>The hexadecimal format for a version <CODE>v.rtl</CODE> is <CODE>VVRRTLL</CODE> where <CODE>VV</CODE>
+ and <CODE>RR</CODE> directly correspond to <CODE>v</CODE> and <CODE>r</CODE>, <CODE>T</CODE> encodes the level
+ type as <CODE>9</CODE>, <CODE>2</CODE>, <CODE>1</CODE>, <CODE>0</CODE> (representing <CODE>s</CODE>, <CODE>p</CODE>/<CODE>.</CODE>, <CODE>b</CODE>, <CODE>a</CODE>
+ in this order) and <CODE>LL</CODE> is either directly corresponding to <CODE>l</CODE> or set
+ to <CODE>99</CODE> if level type is <CODE>s</CODE>.</P>
+ <P>Example:</P>
+ <PRE>
+  #   shell script
+  shtool version -l c -n FooBar -p foobar -s 1.2b3 version.c</PRE>
+ <PRE>
+  #   configure.in
+  V=`shtool version -l c -d long version.c`
+  echo &quot;Configuring FooBar, Version $V&quot;</PRE>
+ <P></P>
+ <DT><STRONG><A NAME="item_path_%5B%2Ds%7C%2D%2Dsuppress%5D_%5B%2Dr%7C%2D%2Dr"><STRONG>path</STRONG> [<STRONG>-s</STRONG>|<STRONG>--suppress</STRONG>] [<STRONG>-r</STRONG>|<STRONG>--reverse</STRONG>] [<STRONG>-d</STRONG>|<STRONG>--dirname</STRONG>] [<STRONG>-b</STRONG>|<STRONG>--basename</STRONG>] [<STRONG>-m</STRONG>|<STRONG>--magic</STRONG>] [<STRONG>-p</STRONG>|<STRONG>--path</STRONG> <EM>path</EM>] <EM>str</EM> [<EM>str</EM> ...]</A></STRONG><BR>
+ <DD>
+ This command deals with shell <CODE>$PATH</CODE> variables. It can find a program
+ executable in $PATH or <EM>path</EM> through one or more filenames (given by one or
+ more <EM>str</EM> arguments). The result is the absolute filesystem path to the
+ program displayed on <CODE>stdout</CODE> plus an exit code of 0 if it was really
+ found.
+ <P>The option ``<STRONG>-s</STRONG>'' can be used to suppress the output which is useful to
+ just test whether a program exists with the help of the return code.  The
+ option ``<STRONG>-m</STRONG>'' enables some magic where currently for the programs
+ ``<CODE>perl</CODE>'' and ``<CODE>cpp</CODE>'' an advanced magic search is done. The option
+ ``<STRONG>-r</STRONG>'' can be used to transform a forward path to a subdirectory into a
+ reverse path. Option ``<STRONG>-d</STRONG>'' and ``<STRONG>-b</STRONG>'' just output the directory or base
+ name of <EM>str</EM>.</P>
+ <P>Examples:</P>
+ <PRE>
+  #   shell script
+  awk=`shtool path -p &quot;${PATH}:.&quot; gawk nawk awk`
+  perl=`shtool path -m perl`
+  cpp=`shtool path -m cpp`
+  revpath=`shtool path -r path/to/subdir`</PRE>
+ <P></P></DL>
+ <P>
+ <HR>
+ <H1><A NAME="see also">SEE ALSO</A></H1>
+ <P>sh(1), cp(1), rm(1), mkdir(1), awk(1), sed(1).</P>
+ <P>
+ <HR>
+ <H1><A NAME="history">HISTORY</A></H1>
+ <P>Some scripts contained in GNU <STRONG>shtool</STRONG> were already written in 1994 by
+ <EM>Ralf S. Engelschall</EM> for use inside some private source trees. Then
+ they evolved into more elaborated versions over the years and were used
+ in various free software projects like ePerl, WML, iSelect, gFONT, etc.
+ They were complemented with other scripts from the author which he wrote
+ in March 1998 for the ``Apache Autoconf-style Interface'' (APACI) for
+ Apache 1.3. In April 1999 the <STRONG>shtool</STRONG> package was created out of the
+ accumulated master versions of the scripts and in June 1999 it entered
+ the status of an official GNU program and this way finally joined the
+ group of GNU <STRONG>autoconf</STRONG>, GNU <STRONG>automake</STRONG> and GNU <STRONG>libtool</STRONG>.</P>
+ <P>
+ <HR>
+ <H1><A NAME="author">AUTHOR</A></H1>
+ <PRE>
+  Ralf S. Engelschall
+  rse@engelschall.com
+  www.engelschall.com</PRE>
+ 
+ </BODY>
+ 
+ </HTML>


ossp-adm/autotools/treecc.html -> 1.1

*** /dev/null    Fri May  3 06:52:10 2024
--- -    Fri May  3 06:52:59 2024
***************
*** 0 ****
--- 1,3265 ----
+ <HTML>
+ <HEAD>
+ <!-- Created by texi2html 1.56k from treecc.texi on 11 June 2002 -->
+ 
+ <TITLE>Tree Compiler-Compiler</TITLE>
+ </HEAD>
+ <BODY>
+ <H1>Tree Compiler-Compiler</H1>
+ <P>
+ <P><HR><P>
+ 
+ 
+ <H1><A NAME="SEC1" HREF="treecc_toc.html#TOC1">Overview</A></H1>
+ <P>
+ <A NAME="IDX1"></A>
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC2" HREF="treecc_toc.html#TOC2">Introduction</A></H2>
+ 
+ <P>
+ Traditional compiler construction tools such as lex and yacc focus on
+ the lexical analysis and parsing phases of compilation.  But they
+ provide very little to support semantic analysis and code generation.
+ 
+ 
+ <P>
+ Yacc allows grammar rules to be tagged with semantic actions and values,
+ but it doesn't provide any routines that assist in the process of tree
+ building, semantic analysis, or code generation.  Because those processes
+ are language-specific, yacc leaves the details to the programmer.
+ 
+ 
+ <P>
+ Support for semantic analysis was also a lot simpler in the languages
+ that were prevalent when lex and yacc were devised.  C and Pascal
+ require declare before use, which allows the semantic information
+ about a statement to be determined within the parser at the point of
+ use.<A NAME="DOCF1" HREF="treecc_foot.html#FOOT1">(1)</A>  If extensive optimization
+ is not required, then code generation can also be performed within
+ the grammar, leading to a simple one-pass compiler structure.
+ 
+ 
+ <P>
+ Modern languages allow deferred declaration of methods, fields, and
+ types.  For example, Java allows a method to refer to a field that
+ is declared further down the .java source file.  A field can be
+ declared with a type whose class definition has not yet been parsed.
+ 
+ 
+ <P>
+ Hence, most of the semantic analysis that used to be performed inline
+ within a yacc grammar must now be performed after the entire program
+ has been parsed.  Tree building and walking is now more important
+ than it was in older declare before use languages.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC3" HREF="treecc_toc.html#TOC3">Tree walking: the need for something better</A></H2>
+ 
+ <P>
+ Building parse tree data structures and walking them is not terribly
+ difficult, but it is extremely time-consuming and error-prone.  A
+ modern programming language may have hundreds of node types, divided
+ into categories for statements, expressions, types, declarations, etc.
+ When a new programming language is being devised, new node types may
+ be added quite frequently.  This has ramifications in trying to manage
+ the code's complexity.<A NAME="DOCF2" HREF="treecc_foot.html#FOOT2">(2)</A>
+ 
+ 
+ <P>
+ For example, consider nodes that correspond to programming language
+ types in a C-like language.  There will be node types for integer
+ types, floating-point types, pointers, structures, functions, etc.
+ There will be semantic analysis routines for testing types for
+ equality, comparing types for coercions and casts, evaluating the
+ size of a type for memory layout purposes, determining if the type
+ falls into a general category such as "integer" or "pointer", etc.
+ 
+ 
+ <P>
+ Let's say we wanted to add a new "128-bit integer" type to this
+ language.  Adding a new node type is fairly straight-forward.
+ But we also need to track down every place in the code where the
+ compiler walks a type or deals with integers and add an appropriate
+ case for the new type.  This is very error-prone.  Such code is
+ likely to be split over many files, and good coding practices only
+ help to a certain extent.
+ 
+ 
+ <P>
+ This problem gets worse when new kinds of expressions and statements
+ are added to the language.  The change not only affects semantic
+ analysis, but also optimization and code generation.  Some compilers
+ use multiple passes over the tree to perform optimization, with
+ different algorithms used in each pass.  Code generation may use a
+ number of different strategies, depending upon how an expression or
+ statement is used.  If even one of these places is missed when the
+ new node type is added, then there is the potential for a very nasty
+ bug that may go unnoticed for months or years.
+ 
+ 
+ <P>
+ Object-oriented languages such as C++ can help a bit in constructing
+ robust tree structures.  The base class can declare abstract methods
+ for any semantic analysis, optimization, or code generation routine
+ that needs to be implemented for all members of the node category.
+ But another code maintainence problem arises.  What happens when
+ we want to add a new optimization pass in the future?  We must go
+ into hundreds of classes and implement the methods.
+ 
+ 
+ <P>
+ To avoid changing hundreds of classes, texts on Design Patterns
+ suggest using a Visitor pattern.  Then the new optimization pass
+ can be encapsulated in a visitor.  This would work, except for
+ the following drawback of visitor patterns, as described in Gamma,
+ et al:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ <EM>The Visitor pattern makes it hard to add new subclasses of
+ Element.  Each new ConcreteElement gives rise to a new abstract
+ operation on Visitor and a corresponding implementation in
+ every ConcreteVisitor class.</EM>
+ 
+ 
+ <P>
+ <EM>... The Visitor class hierarchy can be difficult to maintain
+ when new ConcreteElement classes are added frequently.  In such
+ cases, it's probably easier just to define operations on the
+ classes that make up the structure.</EM>
+ </BLOCKQUOTE>
+ 
+ <P>
+ That is, if we add a new node type in the future, we have a large
+ maintainence problem on our hands.  The solution is to scatter the
+ implementation through-out every class, which is the situation we
+ were trying to avoid by using the Visitor pattern.
+ 
+ 
+ <P>
+ Because compiler construction deals with a large set of rapidly
+ changing node types and operations, neither of the usual approaches
+ work very well.
+ 
+ 
+ <P>
+ The ideal programming language for designing compilers needs to have
+ some way to detect when the programmer forgets to implement an operation
+ for a new node type, and to ensure that a new operation covers all
+ existing node types adequately.  Existing OO languages do not perform
+ this kind of global error checking.  What few checking procedures they
+ have change the maintainence problem into a different problem of
+ similar complexity.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC4" HREF="treecc_toc.html#TOC4">Aspect-oriented programming</A></H2>
+ 
+ <P>
+ A new field in language design has emerged in recent years called
+ "Aspect-Oriented Programming" (AOP).  A good review of the field
+ can be found in the October 2001 issue of the <EM>Communications of
+ the ACM</EM>, and on the AspectJ Web site, <A HREF="http://www.aspectj.org/">http://www.aspectj.org/</A>.
+ 
+ 
+ <P>
+ The following excerpt from the introduction to the AOP section in the
+ CACM issue describes the essential aspects of AOP, and the difference
+ between OOP and AOP:
+ 
+ 
+ 
+ <BLOCKQUOTE>
+ <P>
+ <EM>AOP is based on the idea that computer systems are better programmed
+ by separately specifying the various concerns (properties or areas
+ of interest) of a system and some description of their relationships,
+ and then relying on mechanisms in the underlying AOP environment to
+ weave or compose them together into a coherent program. ...
+ While the tendancy in OOP's is to find commonality among classes
+ and push it up the inheritance tree, AOP attempts to realize
+ scattered concerns as first-class elements, and eject them
+ horizontally from the object structure.</EM>
+ </BLOCKQUOTE>
+ 
+ <P>
+ Aspect-orientation gives us some hope of solving our compiler
+ complexity problems.  We can view each operation on node types
+ (semantic analysis, optimization, code generation, etc) as an
+ "aspect" of the compiler's construction.  The AOP language weaves
+ these aspects with the node types to create the final compiler.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC5" HREF="treecc_toc.html#TOC5">The treecc approach</A></H2>
+ 
+ <P>
+ We don't really want to implement a new programming language
+ just for compiler construction.  Especially since the new language's
+ implementation would have all of the problems described above and would
+ therefore also be difficult to debug and maintain.
+ 
+ 
+ <P>
+ The approach that we take with "treecc" is similar to that used by
+ "yacc".  A simple rule-based language is devised that is used to describe
+ the intended behaviour declaratively.  Embedded code is used to provide
+ the specific implementation details.  A translator then converts the input
+ into source code that can be compiled in the usual fashion.
+ 
+ 
+ <P>
+ The translator is responsible for generating the tree building and
+ walking code, and for checking that all relevant operations have been
+ implemented on the node types.  Functions are provided that make
+ it easier to build and walk the tree data structures from within
+ a "yacc" grammar and other parts of the compiler.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC6" HREF="treecc_toc.html#TOC6">A simple example for expressions</A></H1>
+ <P>
+ <A NAME="IDX2"></A>
+ 
+ 
+ <P>
+ Consider the following yacc grammar for a simple expression language:
+ 
+ 
+ 
+ <PRE>
+ %token INT FLOAT
+ 
+ %%
+ 
+ expr: INT
+     | FLOAT
+     | '(' expr ')'
+     | expr '+' expr
+     | expr '-' expr
+     | expr '*' expr
+     | expr '/' expr
+     | '-' expr
+     ;
+ </PRE>
+ 
+ <P>
+ (We will ignore the problems of precedence and associativity and
+ assume that the reader is familiar with how to resolve such issues
+ in yacc grammars).
+ 
+ 
+ <P>
+ There are 7 types of nodes for this grammar: <SAMP>`intnum'</SAMP>, <SAMP>`floatnum'</SAMP>,
+ <SAMP>`plus'</SAMP>, <SAMP>`minus'</SAMP>, <SAMP>`multiply'</SAMP>, <SAMP>`divide'</SAMP>, and <SAMP>`negate'</SAMP>.
+ They are defined in treecc as follows:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef
+ 
+ %node binary expression %abstract =
+ {
+     expression *expr1;
+     expression *expr2;
+ }
+ 
+ %node unary expression %abstract =
+ {
+     expression *expr;
+ }
+ 
+ %node intnum expression =
+ {
+     int num;
+ }
+ 
+ %node floatnum expression =
+ {
+     float num;
+ }
+ 
+ %node plus binary
+ %node minus binary
+ %node multiply binary
+ %node divide binary
+ %node negate unary
+ </PRE>
+ 
+ <P>
+ We have introduced three extra node types that refer
+ to any expression, binary expressions, and unary expressions.  These
+ can be seen as superclasses in an OO-style framework.  We have
+ declared these node types as <SAMP>`abstract'</SAMP> because the yacc grammar
+ will not be permitted to create instances of these classes directly.
+ 
+ 
+ <P>
+ The <SAMP>`binary'</SAMP>, <SAMP>`unary'</SAMP>, <SAMP>`intnum'</SAMP>, and <SAMP>`floatnum'</SAMP>
+ node types have field definitions associated with them.  These have
+ a similar syntax to C <CODE>struct</CODE> declarations.
+ 
+ 
+ <P>
+ The yacc grammar is augmented as follows to build the parse tree:
+ 
+ 
+ 
+ <PRE>
+ %union {
+     expression *node;
+     int         inum;
+     float       fnum;
+ }
+ 
+ %token INT FLOAT
+ 
+ %type &#60;node&#62; expr
+ %type &#60;inum&#62; INT
+ %type &#60;fnum&#62; FLOAT
+ 
+ %%
+ 
+ expr: INT               { $$ = intnum_create($1); }
+     | FLOAT             { $$ = floatnum_create($1); }
+     | '(' expr ')'      { $$ = $2; }
+     | expr '+' expr     { $$ = plus_create($1, $3); }
+     | expr '-' expr     { $$ = minus_create($1, $3); }
+     | expr '*' expr     { $$ = multiply_create($1, $3); }
+     | expr '/' expr     { $$ = divide_create($1, $3); }
+     | '-' expr          { $$ = negate_create($2); }
+     ;
+ </PRE>
+ 
+ <P>
+ The treecc translator generates the <SAMP>`*_create'</SAMP> functions so that
+ the rest of the compiler can build the necessary data structures
+ on demand.  The parameters to the <SAMP>`*_create'</SAMP> functions
+ are identical in type and order to the members of the structure for
+ that node type.
+ 
+ 
+ <P>
+ Because <SAMP>`expression'</SAMP>, <SAMP>`binary'</SAMP>, and <SAMP>`unary'</SAMP> are abstract,
+ there will be no <SAMP>`*_create'</SAMP> functions associated with them.  This will
+ help the programmer catch certain kinds of errors.
+ 
+ 
+ <P>
+ The type that is returned from a <SAMP>`*_create'</SAMP> function is the first
+ superclass of the node that has a <SAMP>`%typedef'</SAMP> keyword associated with it;
+ <SAMP>`expression *'</SAMP> in this case.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC7" HREF="treecc_toc.html#TOC7">Storing extra information</A></H2>
+ 
+ <P>
+ Normally we will want to store extra information with a node beyond
+ that which is extracted by the yacc grammar.  In our expression
+ example, we probably want to store type information in the nodes
+ so that we can determine if the whole expression is integer or
+ floating point during semantic analysis.  We can add type information
+ to the <SAMP>`expression'</SAMP> node type as follows:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type;
+ }
+ </PRE>
+ 
+ <P>
+ The <SAMP>`%nocreate'</SAMP> flag indicates that the field should not be passed
+ to the <SAMP>`*_create'</SAMP> functions as a parameter.  i.e. it provides semantic
+ information that isn't present in the grammar.  When nodes are created,
+ any fields that are declared as <SAMP>`%nocreate'</SAMP> will be undefined in value.
+ A default value can be specified as follows:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type = {int_type};
+ }
+ </PRE>
+ 
+ <P>
+ Default values must be enclosed in <SAMP>`{'</SAMP> and <SAMP>`}'</SAMP> because they are
+ pieces of code in the underlying source language (C, C++, etc), instead
+ of tokens in the treecc syntax.  Any legitimate expression in the
+ underlying source language may be used.
+ 
+ 
+ <P>
+ We also need to arrange for <SAMP>`type_code'</SAMP> to be declared.  One way to
+ do this is by adding a <SAMP>`%decls'</SAMP> section to the front of the treecc
+ input file:
+ 
+ 
+ 
+ <PRE>
+ %decls %{
+ 
+ typedef enum
+ {
+     int_type,
+     float_type
+ 
+ } type_code;
+ 
+ %}
+ </PRE>
+ 
+ <P>
+ We could have introduced the definition by placing a <SAMP>`#include'</SAMP>
+ directive into the <SAMP>`%decls'</SAMP> section instead, or by defining a
+ treecc enumerated type:
+ 
+ 
+ 
+ <PRE>
+ %enum type_code =
+ {
+     int_type,
+     float_type
+ }
+ </PRE>
+ 
+ <P>
+ Now that we have these definitions, type-inferencing can be implemented
+ as follows:
+ 
+ 
+ 
+ <PRE>
+ %operation void infer_type(expression *e)
+ 
+ infer_type(binary)
+ {
+     infer_type(e-&#62;expr1);
+     infer_type(e-&#62;expr2);
+ 
+     if(e-&#62;expr1-&#62;type == float_type || e-&#62;expr2-&#62;type == float_type)
+     {
+         e-&#62;type = float_type;
+     }
+     else
+     {
+         e-&#62;type = int_type;
+     }
+ }
+ 
+ infer_type(unary)
+ {
+     infer_type(e-&#62;expr);
+     e-&#62;type = e-&#62;expr-&#62;type;
+ }
+ 
+ infer_type(intnum)
+ {
+     e-&#62;type = int_type;
+ }
+ </PRE>
+ 
+ <P>
+ This example demonstrates using the abstract node types <SAMP>`binary'</SAMP> and
+ <SAMP>`unary'</SAMP> to define operations on all subclasses.  The treecc translator
+ will generate code for a full C function called <SAMP>`infer_type'</SAMP> that
+ incorporates all of the cases.
+ 
+ 
+ <P>
+ But hang on a second!  What happened to <SAMP>`floatnum'</SAMP>?  Where did it
+ go?  It turns out that treecc will catch this.  It will report
+ an error to the effect that <SAMP>`node type `floatnum' is not handled in
+ operation `infer_type''</SAMP>.  Here is its definition:
+ 
+ 
+ 
+ <PRE>
+ infer_type(floatnum)
+ {
+     e-&#62;type = float_type;
+ }
+ </PRE>
+ 
+ <P>
+ As we can see, treecc has just caught a bug in the language
+ implementation and reported it to us as soon as we introduced it.
+ 
+ 
+ <P>
+ Let's now extend the language with a <SAMP>`power'</SAMP> operator:
+ 
+ 
+ 
+ <PRE>
+ yacc:
+ 
+ expr: expr '^' expr     { $$ = create_power($1, $3); }
+     ;
+ 
+ treecc:
+ 
+ %node power binary
+ </PRE>
+ 
+ <P>
+ That's all there is to it!  When treecc re-translates the input
+ file, it will modify the definition of <SAMP>`infer_type'</SAMP> to include the
+ extra case for <SAMP>`power'</SAMP> nodes.  Because <SAMP>`power'</SAMP> is a subclass of
+ <SAMP>`binary'</SAMP>, treecc already knows how to perform type inferencing for the
+ new node and it doesn't warn us about a missing declaration.
+ 
+ 
+ <P>
+ What if we wanted to restrict the second argument of <SAMP>`power'</SAMP> to be
+ an integer value?  We can add the following case to <SAMP>`infer_type'</SAMP>:
+ 
+ 
+ 
+ <PRE>
+ infer_type(power)
+ {
+     infer_type(e-&#62;expr1);
+     infer_type(e-&#62;expr2);
+ 
+     if(e-&#62;expr2-&#62;type != int_type)
+     {
+         error("second argument to `^' is not an integer");
+     }
+ 
+     e-&#62;type = e-&#62;expr1-&#62;type;
+ }
+ </PRE>
+ 
+ <P>
+ The translator now notices that there is a more specific implementation
+ of <SAMP>`infer_type'</SAMP> for <SAMP>`power'</SAMP>, and won't use the <SAMP>`binary'</SAMP>
+ case for it.
+ 
+ 
+ <P>
+ The most important thing to realise here is that the translator always
+ checks that there are sufficient declarations for <SAMP>`infer_type'</SAMP> to cover
+ all relevant node types.  If it detects a lack, it will immediately
+ raise an error to the user.  This allows tree coverage problems to
+ be found a lot sooner than with the traditional approach.
+ 
+ 
+ <P>
+ See section <A HREF="treecc.html#SEC23">Full expression example code</A>, for a complete listing of the above
+ example files.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC8" HREF="treecc_toc.html#TOC8">Invoking treecc from the command-line</A></H1>
+ <P>
+ <A NAME="IDX3"></A>
+ <A NAME="IDX4"></A>
+ 
+ 
+ <P>
+ The general form of treecc's command-line syntax is as follows:
+ 
+ 
+ 
+ <PRE>
+ treecc [OPTIONS] INPUT ...
+ </PRE>
+ 
+ <P>
+ Treecc accepts the following command-line options:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>-o FILE</CODE>
+ <DD>
+ <DT><CODE>--output FILE</CODE>
+ <DD>
+ Set the name of the output file to <SAMP>`FILE'</SAMP>.  If this option is not
+ supplied, then the name of the first input file will be used, with its
+ extension changed to <SAMP>`.c'</SAMP>.  If the input is standard input,
+ the default output file is <SAMP>`yy_tree.c'</SAMP>.
+ 
+ This option may be overridden using the <SAMP>`%output'</SAMP> keyword in
+ the input files.
+ 
+ <DT><CODE>-h FILE</CODE>
+ <DD>
+ <DT><CODE>--header FILE</CODE>
+ <DD>
+ Set the name of the header output file to <SAMP>`FILE'</SAMP>.  This is only
+ used for the C and C++ output languages.  If this option is not supplied,
+ then the name of the output file will be used, with its extension
+ changed to <SAMP>`.h'</SAMP>.  If the input is standard input, the default header
+ output file is <SAMP>`yy_tree.h'</SAMP>.
+ 
+ This option may be overriden using the <SAMP>`%header'</SAMP> keyword in the
+ input files.  If this option is used with a language that does not require
+ headers, it will be ignored.
+ 
+ <DT><CODE>-d DIR</CODE>
+ <DD>
+ <DT><CODE>--output-dir DIR</CODE>
+ <DD>
+ Set the name of the Java output directory to <SAMP>`DIR'</SAMP>.  This is only
+ used for the Java language.  If this option is not supplied, then the
+ directory corresponding to the first input file is used.  If the input
+ is standard input, the default is the current directory.
+ 
+ This option may be overriden using the <SAMP>`%outdir'</SAMP> keyword in the
+ input files.  If this option is used with a language other than Java,
+ it will be ignored.
+ 
+ <DT><CODE>-s DIR</CODE>
+ <DD>
+ <DT><CODE>--skeleton-dir DIR</CODE>
+ <DD>
+ Set the name of the directory that contains the skeleton files for the
+ C and C++ node memory managers to <SAMP>`DIR'</SAMP>.
+ 
+ <DT><CODE>-e EXT</CODE>
+ <DD>
+ <DT><CODE>--extension EXT</CODE>
+ <DD>
+ Change the default output file extension to <SAMP>`ext'</SAMP>, instead of
+ <SAMP>`.c'</SAMP>.  The value <SAMP>`ext'</SAMP> can have a leading dot, but this is
+ not required.
+ 
+ <DT><CODE>-f</CODE>
+ <DD>
+ <DT><CODE>--force-create</CODE>
+ <DD>
+ Treecc normally attempts to optimise the creation of output files
+ so that they are only modified if a non-trivial change has
+ occurred in the input.  This can reduce the number of source
+ code recompiles when treecc is used in combination with make.
+ 
+ This option forces the output files to be created, even if they
+ are the same as existing files with the same name.
+ 
+ The declaration <SAMP>`%option force'</SAMP> can be used in the input files
+ to achieve the same effect as this option.
+ 
+ <DT><CODE>-n</CODE>
+ <DD>
+ <DT><CODE>--no-output</CODE>
+ <DD>
+ Suppress the generation of output files.  Treecc parses the
+ input files, checks for errors, and then stops.
+ 
+ <DT><CODE>--help</CODE>
+ <DD>
+ Print a usage message for the treecc program.
+ 
+ <DT><CODE>-v</CODE>
+ <DD>
+ <DT><CODE>--version</CODE>
+ <DD>
+ Print the version of the treecc program.
+ 
+ <DT><CODE>--</CODE>
+ <DD>
+ Marks the end of the command-line options, and the beginning of
+ the input filenames.  You may need to use this if your filename
+ begins with <SAMP>`-'</SAMP>.  e.g. <SAMP>`treecc -- -input.tc'</SAMP>.  This is
+ not needed if the input is standard input: <SAMP>`treecc -'</SAMP>
+ is perfectly valid.
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC9" HREF="treecc_toc.html#TOC9">Syntax of input files</A></H1>
+ <P>
+ <A NAME="IDX5"></A>
+ 
+ 
+ <P>
+ Treecc input files consist of zero or more declarations that define
+ nodes, operations, options, etc.  The following sections describe each
+ of these elements.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC10" HREF="treecc_toc.html#TOC10">Node declarations</A></H2>
+ <P>
+ <A NAME="IDX6"></A>
+ <A NAME="IDX7"></A>
+ <A NAME="IDX8"></A>
+ 
+ 
+ <P>
+ Node types are defined using the <SAMP>`node'</SAMP> keyword in input files.
+ The general form of the declaration is:
+ 
+ 
+ 
+ <PRE>
+ %node NAME [ PNAME ] [ FLAGS ] [ = FIELDS ]
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`NAME'</SAMP>
+ <DD>
+ An identifier that is used to refer to the node type elsewhere
+ in the treecc definition.  It is also the name of the type that will be
+ visible to the programmer in literal code blocks.
+ 
+ <DT><SAMP>`PNAME'</SAMP>
+ <DD>
+ An identifier that refers to the parent node type that <SAMP>`NAME'</SAMP> inherits
+ from.  If <SAMP>`PNAME'</SAMP> is not supplied, then <SAMP>`NAME'</SAMP> is a top-level
+ declaration.  It is legal to supply a <SAMP>`PNAME'</SAMP> that has not yet
+ been defined in the input.
+ 
+ <DT><SAMP>`FLAGS'</SAMP>
+ <DD>
+ Any combination of <SAMP>`%abstract'</SAMP> and <SAMP>`%typedef'</SAMP>:
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%abstract'</SAMP>
+ <DD>
+ <A NAME="IDX9"></A>
+ The node type cannot be constructed by the programmer.  In addition,
+ the programmer does not need to define operation cases for this node
+ type if all subtypes have cases associated with them.
+ 
+ <DT><SAMP>`%typedef'</SAMP>
+ <DD>
+ <A NAME="IDX10"></A>
+ The node type is used as the common return type for node creation
+ functions.  Top-level declarations must have a <SAMP>`%typedef'</SAMP> keyword.
+ </DL>
+ </DL>
+ 
+ <P>
+ The <SAMP>`FIELDS'</SAMP> part of a node declaration defines the fields that
+ make up the node type.  Each field has the following general form:
+ 
+ 
+ 
+ <PRE>
+ [ %nocreate ] TYPE FNAME [ = VALUE ] ';'
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%nocreate'</SAMP>
+ <DD>
+ <A NAME="IDX11"></A>
+ The field is not used in the node's constructor.  When the node is
+ constructed, the value of this field will be undefined unless
+ <SAMP>`VALUE'</SAMP> is specified.
+ 
+ <DT><SAMP>`TYPE'</SAMP>
+ <DD>
+ The type that is associated with the field.  Types can be declared
+ using a subset of the C declaration syntax, augmented with some C++
+ and Java features.  See section <A HREF="treecc.html#SEC11">Types used in fields and parameters</A>, for more information.
+ 
+ <DT><SAMP>`FNAME'</SAMP>
+ <DD>
+ The name to associate with the field.  Treecc verifies that the field
+ does not currently exist in this node type, or in any of its ancestor
+ node types.
+ 
+ <DT><SAMP>`VALUE'</SAMP>
+ <DD>
+ The default value to assign to the field in the node's constructor.
+ This can only be used on fields that are declared with <SAMP>`%nocreate'</SAMP>.
+ The value must be enclosed in braces.  For example <SAMP>`{NULL}'</SAMP> would
+ be used to initialize a field with <SAMP>`NULL'</SAMP>.
+ 
+ The braces are required because the default value is expressed in
+ the underlying source language, and can use any of the usual constant
+ declaration features present in that language.
+ </DL>
+ 
+ <P>
+ When the output language is C, treecc creates a struct-based type
+ called <SAMP>`NAME'</SAMP> that contains the fields for <SAMP>`NAME'</SAMP> and 
+ all of its ancestor classes.  The type also contains some house-keeping
+ fields that are used internally by the generated code.  The following
+ is an example:
+ 
+ 
+ 
+ <PRE>
+ typedef struct binary__ binary;
+ struct binary__ {
+     const struct binary_vtable__ *vtable__;
+     int kind__;
+     char *filename__;
+     long linenum__;
+     type_code type;
+     expression * expr1;
+     expression * expr2;
+ };
+ </PRE>
+ 
+ <P>
+ The programmer should avoid using any identifier that
+ ends with <SAMP>`__'</SAMP>, because it may clash with house-keeping
+ identifiers that are generated by treecc.
+ 
+ 
+ <P>
+ When the output language is C++, Java, or C#, treecc creates a class
+ called <SAMP>`NAME'</SAMP>, that inherits from the class <SAMP>`PNAME'</SAMP>.
+ The field definitions for <SAMP>`NAME'</SAMP> are converted into public members
+ in the output.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC11" HREF="treecc_toc.html#TOC11">Types used in fields and parameters</A></H2>
+ <P>
+ <A NAME="IDX12"></A>
+ 
+ 
+ <P>
+ Types that are used in field and parameter declarations have a
+ syntax which is subset of features found in C, C++, and Java:
+ 
+ 
+ 
+ <PRE>
+ TypeAndName ::= Type [ IDENTIFIER ]
+ 
+ Type ::= TypeName
+        | Type '*'
+        | Type '&#38;'
+        | Type '[' ']'
+ 
+ TypeName ::= IDENTIFIER { IDENTIFIER }
+ </PRE>
+ 
+ <P>
+ Types are usually followed by an identifier that names the field or
+ parameter.  The name is required for fields and is optional for parameters.
+ For example <SAMP>`int'</SAMP> is usually equivalent to <SAMP>`int x'</SAMP> in parameter
+ declarations.
+ 
+ 
+ <P>
+ The following are some examples of using types:
+ 
+ 
+ 
+ <PRE>
+ int
+ int x
+ const char *str
+ expression *expr
+ Element[][] array
+ Item&#38;
+ unsigned int y
+ const Element
+ </PRE>
+ 
+ <P>
+ The grammar used by treecc is slightly ambiguous.  The last example above
+ declares a parameter called <SAMP>`Element'</SAMP>, that has type <SAMP>`const'</SAMP>.
+ The programmer probably intended to declare an anonymous parameter with type 
+ <SAMP>`const Element'</SAMP> instead.
+ 
+ 
+ <P>
+ This ambiguity is unavoidable given that treecc is not fully
+ aware of the underlying language's type system.  When treecc
+ sees a type that ends in a sequence of identifiers, it will
+ always interpret the last identifier as the field or parameter
+ name.  Thus, the programmer must write the following instead:
+ 
+ 
+ 
+ <PRE>
+ const Element e
+ </PRE>
+ 
+ <P>
+ Treecc cannot declare types using the full power of C's type system.
+ The most common forms of declarations are supported, and the rest
+ can usually be obtained by defining a <SAMP>`typedef'</SAMP> within a
+ literal code block.  See section <A HREF="treecc.html#SEC15">Literal code declarations</A>, for more information
+ on literal code blocks.
+ 
+ 
+ <P>
+ It is the responsibility of the programmer to use type constructs
+ that are supported by the underlying programming language.  Types such
+ as <SAMP>`const char *'</SAMP> will give an error when the output is compiled
+ with a Java compiler, for example.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC12" HREF="treecc_toc.html#TOC12">Enumerated type declarations</A></H2>
+ <P>
+ <A NAME="IDX13"></A>
+ <A NAME="IDX14"></A>
+ <A NAME="IDX15"></A>
+ 
+ 
+ <P>
+ Enumerated types are a special kind of node type that can be used
+ by the programmer for simple values that don't require a full abstract
+ syntax tree node.  The following is an example of defining a list
+ of the primitive machine types used in a Java virtual machine:
+ 
+ 
+ 
+ <PRE>
+ %enum JavaType =
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF
+ }
+ </PRE>
+ 
+ <P>
+ Enumerations are useful when writing code generators and type
+ inferencing routines.  The general form is:
+ 
+ 
+ 
+ <PRE>
+ %enum NAME = { VALUES }
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`NAME'</SAMP>
+ <DD>
+ An identifier to be used to name the enumerated type.  The name must
+ not have been previously used as a node type, an enumerated type, or
+ an enumerated value.
+ 
+ <DT><SAMP>`VALUES'</SAMP>
+ <DD>
+ A comma-separated list of identifiers that name the values within
+ the enumeration.  Each of the names must be unique, and must not have
+ been used previously as a node type, an enumerated type, or an
+ enumerated value.
+ </DL>
+ 
+ <P>
+ Logically, each enumerated value is a special node type that inherits from
+ a parent node type corresponding to the enumerated type <SAMP>`NAME'</SAMP>.
+ 
+ 
+ <P>
+ When the output language is C or C++, treecc generates an enumerated
+ typedef for <SAMP>`NAME'</SAMP> that contains the enumerated values in the
+ same order as was used in the input file.  The typedef name can be
+ used elsewhere in the code as the type of the enumeration.
+ 
+ 
+ <P>
+ When the output language is Java, treecc generates a class called
+ <SAMP>`NAME'</SAMP> that contains the enumerated values as integer constants.
+ Elsewhere in the code, the type <SAMP>`int'</SAMP> must be used to declare
+ variables of the enumerated type.  Enumerated values are referred
+ to as <SAMP>`NAME.VALUE'</SAMP>.  If the enumerated type is used as a trigger
+ parameter, then <SAMP>`NAME'</SAMP> must be used instead of <SAMP>`int'</SAMP>:
+ treecc will convert the type when the Java code is output.
+ 
+ 
+ <P>
+ When the output language is C#, treecc generates an enumerated value
+ type called <SAMP>`NAME'</SAMP> that contains the enumerated values as
+ members.  The C# type <SAMP>`NAME'</SAMP> can be used elsewhere in the code
+ as the type of the enumeration.  Enumerated values are referred to
+ as <SAMP>`NAME.VALUE'</SAMP>.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC13" HREF="treecc_toc.html#TOC13">Operation declarations</A></H2>
+ <P>
+ <A NAME="IDX16"></A>
+ <A NAME="IDX17"></A>
+ <A NAME="IDX18"></A>
+ <A NAME="IDX19"></A>
+ <A NAME="IDX20"></A>
+ 
+ 
+ <P>
+ Operations are declared in two parts: the declaration, and the
+ cases.  The declaration part defines the prototype for the
+ operation and the cases define how to handle specific kinds of
+ nodes for the operation.
+ 
+ 
+ <P>
+ Operations are defined over one or more trigger parameters.  Each
+ trigger parameter specifies a node type or an enumerated type that
+ is selected upon to determine what course of action to take.  The
+ following are some examples of operation declarations:
+ 
+ 
+ 
+ <PRE>
+ %operation void infer_type(expression *e)
+ %operation type_code common_type([type_code t1], [type_code t2])
+ </PRE>
+ 
+ <P>
+ Trigger parameters are specified by enclosing them in square
+ brackets.  If none of the parameters are enclosed in square
+ brackets, then treecc assumes that the first parameter is the
+ trigger.
+ 
+ 
+ <P>
+ The general form of an operation declaration is as follows:
+ 
+ 
+ 
+ <PRE>
+ %operation { %virtual | %inline | %split } RTYPE [CLASS::]NAME(PARAMS)
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%virtual'</SAMP>
+ <DD>
+ <A NAME="IDX21"></A>
+ Specifies that the operation is associated with a node type as
+ a virtual method.  There must be only one trigger parameter,
+ and it must be the first parameter.
+ 
+ Non-virtual operations are written to the output source files
+ as global functions.
+ 
+ <DT><SAMP>`%inline'</SAMP>
+ <DD>
+ <A NAME="IDX22"></A>
+ Optimise the generation of the operation code so that all cases
+ are inline within the code for the function itself.  This can
+ only be used with non-virtual operations, and may improve
+ code efficiency if there are lots of operation cases with a
+ small amount of code in each.
+ 
+ <DT><SAMP>`%split'</SAMP>
+ <DD>
+ <A NAME="IDX23"></A>
+ Split the generation of the multi-trigger operation code across
+ multiple functions, to reduce the size of each individual function.
+ It is sometimes necessary to split large <CODE>%inline</CODE> operations
+ to avoid compiler limits on function size.
+ 
+ <DT><SAMP>`RTYPE'</SAMP>
+ <DD>
+ The type of the return value for the operation.  This should be
+ <SAMP>`void'</SAMP> if the operation does not have a return value.
+ 
+ <DT><SAMP>`CLASS'</SAMP>
+ <DD>
+ The name of the class to place the operation's definition within.
+ This can only be used with non-virtual operations, and is
+ intended for languages such as Java and C# that cannot declare
+ methods outside of classes.  The class name will be ignored if
+ the output language is C.
+ 
+ If a class name is required, but the programmer did not supply it,
+ then <SAMP>`NAME'</SAMP> will be used as the default.  The exception to
+ this is the C# language: <SAMP>`CLASS'</SAMP> must always be supplied and
+ it must be different from <SAMP>`NAME'</SAMP>.  This is due to a "feature"
+ in some C# compilers that forbid a method with the same name as
+ its enclosing class.
+ 
+ <DT><SAMP>`NAME'</SAMP>
+ <DD>
+ The name of the operation.
+ 
+ <DT><SAMP>`PARAMS'</SAMP>
+ <DD>
+ The parameters to the operation.  Trigger parameters may be
+ enclosed in square brackets.  Trigger parameters must be
+ either node types or enumerated types.
+ </DL>
+ 
+ <P>
+ Once an operation has been declared, the programmer can specify
+ its cases anywhere in the input files.  It is not necessary that
+ the cases appear after the operation, or that they be contiguous
+ within the input files.  This permits the programmer to place
+ operation cases where they are logically required for maintainence
+ reasons.
+ 
+ 
+ <P>
+ There must be sufficient operation cases defined to cover every
+ possible combination of node types and enumerated values that
+ inherit from the specified trigger types.  An operation case
+ has the following general form:
+ 
+ 
+ 
+ <PRE>
+ NAME(TRIGGERS) [, NAME(TRIGGERS2) ...]
+ {
+     CODE
+ }
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`NAME'</SAMP>
+ <DD>
+ The name of the operation for which this case applies.
+ 
+ <DT><SAMP>`TRIGGERS'</SAMP>
+ <DD>
+ A comma-separated list of node types or enumerated values that
+ define the specific case that is handled by the following code.
+ 
+ <DT><SAMP>`CODE'</SAMP>
+ <DD>
+ Source code in the output source language that implements the
+ operation case.
+ </DL>
+ 
+ <P>
+ Multiple trigger combinations can be associated with a single
+ block of code, by listing them all, separated by commas.  For
+ example:
+ 
+ 
+ 
+ <PRE>
+ common_type(int_type, int_type)
+ {
+     return int_type;
+ }
+ 
+ common_type(int_type, float_type),
+ common_type(float_type, int_type),
+ common_type(float_type, float_type)
+ {
+     return float_type;
+ }
+ </PRE>
+ 
+ 
+ 
+ <H2><A NAME="SEC14" HREF="treecc_toc.html#TOC14">Options that modify treecc's behaviour</A></H2>
+ <P>
+ <A NAME="IDX24"></A>
+ <A NAME="IDX25"></A>
+ <A NAME="IDX26"></A>
+ 
+ 
+ <P>
+ "(*)" is used below to indicate an option that is enabled by default.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%option track_lines'</SAMP>
+ <DD>
+ <A NAME="IDX27"></A>
+ Enable the generation of code that can track the current filename and
+ line number when nodes are created.  See section <A HREF="treecc.html#SEC17">Tracking line numbers in source files</A>, for more
+ information. (*)
+ 
+ <DT><SAMP>`%option no_track_lines'</SAMP>
+ <DD>
+ <A NAME="IDX28"></A>
+ Disable the generation of code that performs line number tracking.
+ 
+ <DT><SAMP>`%option singletons'</SAMP>
+ <DD>
+ <A NAME="IDX29"></A>
+ Optimise the creation of singleton node types.  These are
+ node types without any fields.  Treecc can optimise the code
+ so that only one instance of a singleton node type exists in
+ the system.  This can speed up the creation of nodes for
+ constants within compilers. (*)
+ 
+ Singleton optimisations will have no effect if <SAMP>`track_lines'</SAMP>
+ is enabled, because line tracking uses special hidden fields in
+ every node.
+ 
+ <DT><SAMP>`%option no_singletons'</SAMP>
+ <DD>
+ <A NAME="IDX30"></A>
+ Disable the optimisation of singleton node types.
+ 
+ <DT><SAMP>`%option reentrant'</SAMP>
+ <DD>
+ <A NAME="IDX31"></A>
+ Enable the generation of reentrant code that does not rely
+ upon any global variables.  Separate copies of the compiler
+ state can be used safely in separate threads.  However, the
+ same copy of the compiler state cannot be used safely in two or
+ more threads.
+ 
+ <DT><SAMP>`%option no_reentrant'</SAMP>
+ <DD>
+ <A NAME="IDX32"></A>
+ Disable the generation of reentrant code.  The interface to
+ node management functions is simpler, but cannot be used
+ in a threaded environment. (*)
+ 
+ <DT><SAMP>`%option force'</SAMP>
+ <DD>
+ <A NAME="IDX33"></A>
+ Force output source files to be written, even if they are
+ unchanged.  This option can also be set using the <SAMP>`-f'</SAMP>
+ command-line option.
+ 
+ <DT><SAMP>`%option no_force'</SAMP>
+ <DD>
+ <A NAME="IDX34"></A>
+ Don't force output source files to be written if they are the
+ same as before. (*)
+ 
+ This option can help smooth integration of treecc with make.
+ Only those output files that have changed will be modified.
+ This reduces the number of files that the underlying source
+ language compiler must process after treecc is executed.
+ 
+ <DT><SAMP>`%option virtual_factory'</SAMP>
+ <DD>
+ <A NAME="IDX35"></A>
+ Use virtual methods in the node type factories, so that the
+ programmer can subclass the factory and provide new
+ implementations of node creation functions.  This option is
+ ignored for C, which does not use factories.
+ 
+ <DT><SAMP>`%option no_virtual_factory'</SAMP>
+ <DD>
+ <A NAME="IDX36"></A>
+ Don't use virtual methods in the node type factories. (*)
+ 
+ <DT><SAMP>`%option abstract_factory'</SAMP>
+ <DD>
+ <A NAME="IDX37"></A>
+ Use abstract virtual methods in the node type factories.
+ The programmer is responsible for subclassing the factory
+ to provide node creation functionality.
+ 
+ <DT><SAMP>`%option no_abstract_factory'</SAMP>
+ <DD>
+ <A NAME="IDX38"></A>
+ Don't use abstract virtual methods in the node type factories. (*)
+ 
+ <DT><SAMP>`%option kind_in_node'</SAMP>
+ <DD>
+ <A NAME="IDX39"></A>
+ Put the kind field in the node, for more efficient access at runtime. (*)
+ 
+ <DT><SAMP>`%option kind_in_vtable'</SAMP>
+ <DD>
+ <A NAME="IDX40"></A>
+ Put the kind field in the vtable, and not the node.  This saves some
+ memory, at the cost of slower access to the kind value at runtime.
+ This option only applies when the language is C.  The kind field is
+ always placed in the node in other languages, because it isn't possible
+ to modify the vtable.
+ 
+ <DT><SAMP>`%option prefix = PREFIX'</SAMP>
+ <DD>
+ <A NAME="IDX41"></A>
+ Specify the prefix to be used in output files in place of "yy".
+ 
+ <DT><SAMP>`%option state_type = NAME'</SAMP>
+ <DD>
+ <A NAME="IDX42"></A>
+ Specify the name of the state type.  The state type is generated
+ by treecc to perform centralised memory management and reentrancy
+ support.  The default value is <SAMP>`YYNODESTATE'</SAMP>.  If the output language
+ uses factories, then this will also be the name of the factory
+ base class.
+ 
+ <DT><SAMP>`%option namespace = NAME'</SAMP>
+ <DD>
+ <A NAME="IDX43"></A>
+ Specify the namespace to write definitions to in the output
+ source files.  This option is ignored when the output language
+ is C.
+ 
+ <DT><SAMP>`%option package = NAME'</SAMP>
+ <DD>
+ <A NAME="IDX44"></A>
+ Same as <SAMP>`%option namespace = NAME'</SAMP>.  Provided because <SAMP>`package'</SAMP>
+ is more natural for Java programmers.
+ 
+ <DT><SAMP>`%option base = NUM'</SAMP>
+ <DD>
+ <A NAME="IDX45"></A>
+ Specify the numeric base to use for allocating numeric values to
+ node types.  By default, node type allocation begins at 1.
+ 
+ <DT><SAMP>`%option lang = LANGUAGE'</SAMP>
+ <DD>
+ <A NAME="IDX46"></A>
+ Specify the output language.  Must be one of <CODE>"C"</CODE>, <CODE>"C++"</CODE>,
+ <CODE>"Java"</CODE>, or <CODE>"C#"</CODE>.  The default is <CODE>"C"</CODE>.
+ 
+ <DT><SAMP>`%option block_size = NUM'</SAMP>
+ <DD>
+ <A NAME="IDX47"></A>
+ Specify the size of the memory blocks to use in C and C++ node allocators.
+ 
+ <DT><SAMP>`%option strip_filenames'</SAMP>
+ <DD>
+ <A NAME="IDX48"></A>
+ Strip filenames down to their base name in <CODE>#line</CODE> directives.
+ i.e. strip off the directory component.  This can be helpful in
+ combination with the <CODE>%include %readonly</CODE> command when
+ treecc input files may processed from different directories,
+ causing common output files to change unexpectedly.
+ 
+ <DT><SAMP>`%option no_strip_filenames'</SAMP>
+ <DD>
+ <A NAME="IDX49"></A>
+ Don't strip filenames in <CODE>#line</CODE> directives. (*)
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC15" HREF="treecc_toc.html#TOC15">Literal code declarations</A></H2>
+ <P>
+ <A NAME="IDX50"></A>
+ 
+ 
+ <P>
+ Sometimes it is necessary to embed literal code within output <SAMP>`.h'</SAMP>
+ and source files.  Usually this is to <SAMP>`#include'</SAMP> definitions
+ from other files, or to define functions that cannot be easily expressed
+ as operations.
+ 
+ 
+ <P>
+ A literal code block is specified by enclosing it in <SAMP>`%{'</SAMP> and
+ <SAMP>`%}'</SAMP>.  The block can also be prefixed with the following flags:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%decls'</SAMP>
+ <DD>
+ <A NAME="IDX51"></A>
+ Write the literal code to the currently active declaration header file,
+ instead of the source file.
+ 
+ <DT><SAMP>`%both'</SAMP>
+ <DD>
+ <A NAME="IDX52"></A>
+ Write the literal code to both the currently active declaration header file
+ and the currently active source file.
+ 
+ <DT><SAMP>`%end'</SAMP>
+ <DD>
+ <A NAME="IDX53"></A>
+ Write the literal code to the end of the file, instead of the beginning.
+ </DL>
+ 
+ <P>
+ Another form of literal code block is one which begins with <SAMP>`%%'</SAMP> and
+ extends to the end of the current input file.  This form implicitly has
+ the <SAMP>`%end'</SAMP> flag.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC16" HREF="treecc_toc.html#TOC16">Changing input and output files</A></H2>
+ <P>
+ <A NAME="IDX54"></A>
+ 
+ 
+ <P>
+ Most treecc compiler definitions will be too large to be manageable
+ in a single input file.  They also will be too large to write to a
+ single output file, because that may overload the source language
+ compiler.
+ 
+ 
+ <P>
+ Multiple input files can be specified on the command-line, or
+ they can be explicitly included by other input files with
+ the following declarations:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%include [ %readonly ] FILENAME'</SAMP>
+ <DD>
+ <A NAME="IDX55"></A>
+ <A NAME="IDX56"></A>
+ <A NAME="IDX57"></A>
+ Include the contents of the specified file at the current point
+ within the current input file.  <SAMP>`FILENAME'</SAMP> is interpreted
+ relative to the name of the current input file.
+ 
+ If the <SAMP>`%readonly'</SAMP> keyword is supplied, then any output
+ files that are generated by the included file must be read-only.
+ That is, no changes are expected by performing the inclusion.
+ 
+ The <SAMP>`%readonly'</SAMP> keyword is useful for building compilers
+ in layers.  The programmer may group a large number of useful
+ node types and operations together that are independent of the
+ particulars of a given language.  The programmer then defines
+ language-specific compilers that "inherit" the common definitions.
+ 
+ Read-only inclusions ensure that any extensions that are added
+ by the language-specific parts do not "leak" into the common code.
+ </DL>
+ 
+ <P>
+ Output files can be changed using the follow declarations:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%header FILENAME'</SAMP>
+ <DD>
+ <A NAME="IDX58"></A>
+ <A NAME="IDX59"></A>
+ Change the currently active declaration header file to <SAMP>`FILENAME'</SAMP>,
+ which is interpreted relative to the current input file.  This option
+ has no effect for languages without header files (Java and C#).
+ 
+ Any node types and operations that are defined after a <SAMP>`%header'</SAMP>
+ declaration will be declared in <SAMP>`FILENAME'</SAMP>.
+ 
+ <DT><SAMP>`%output FILENAME'</SAMP>
+ <DD>
+ <A NAME="IDX60"></A>
+ <A NAME="IDX61"></A>
+ Change the currently active source file to <SAMP>`FILENAME'</SAMP>,
+ which is interpreted relative to the current input file.  This option
+ has no effect for languages that require a single class per file (Java).
+ 
+ Any node types and operations that are defined after a <SAMP>`%header'</SAMP>
+ declaration will have their implementations placed in <SAMP>`FILENAME'</SAMP>.
+ 
+ <DT><SAMP>`%outdir DIRNAME'</SAMP>
+ <DD>
+ <A NAME="IDX62"></A>
+ <A NAME="IDX63"></A>
+ Change the output source directory to <SAMP>`DIRNAME'</SAMP>.  This is only
+ used for Java, which requires that a single file be used for each class.
+ All classes are written to the specified directory.  By default,
+ <SAMP>`DIRNAME'</SAMP> is the current directory where treecc was invoked.
+ </DL>
+ 
+ <P>
+ When treecc generates the output source code, it must insert several
+ common house-keeping functions and classes into the code.  By default,
+ these are written to the first header and source files.  This can
+ be changed with the <SAMP>`%common'</SAMP> declaration:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`%common'</SAMP>
+ <DD>
+ <A NAME="IDX64"></A>
+ <A NAME="IDX65"></A>
+ Output the common house-keeping code to the currently active
+ declaration header file and the currently active source file.
+ This is typically used as follows:
+ 
+ 
+ <PRE>
+ %header "common.h"
+ %output "common.c"
+ %common
+ </PRE>
+ 
+ </DL>
+ 
+ 
+ 
+ <H1><A NAME="SEC17" HREF="treecc_toc.html#TOC17">Tracking line numbers in source files</A></H1>
+ <P>
+ <A NAME="IDX66"></A>
+ 
+ 
+ <P>
+ When compilers emit error messages to the programmer, it is generally
+ a good idea to indicate which file and which line gave rise to the
+ error.  Syntax errors can be emitted fairly easily because the parser
+ usually has access to the current line number.  However, semantic
+ errors are harder to report because the parser may no longer be
+ active when the error is detected.
+ 
+ 
+ <P>
+ Treecc can generate code that automatically keeps track of what line
+ in the source file was active when a node is created.  Every node
+ has two extra private fields that specify the name of the file and the
+ line number.  Semantic analysis routines can query this information
+ when reporting errors.
+ 
+ 
+ <P>
+ Because treecc is not aware of how to obtain this information, the
+ programmer must supply some additional functions.  See section <A HREF="treecc.html#SEC18">API's available in the generated output</A>,
+ for more information.
+ 
+ 
+ <P>
+ See section <A HREF="treecc.html#SEC18">API's available in the generated output</A>, for more information.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC18" HREF="treecc_toc.html#TOC18">API's available in the generated output</A></H1>
+ <P>
+ <A NAME="IDX67"></A>
+ 
+ 
+ <P>
+ The source code that is generated by treecc exports a number of
+ application programmer interfaces (API's) to the programmer.  These
+ can be used elsewhere in the compiler implementation to manipulate
+ abstract syntax trees.  The following sections describe the API's
+ for each of the output languages.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC19" HREF="treecc_toc.html#TOC19">C Language APIs</A></H2>
+ <P>
+ <A NAME="IDX68"></A>
+ 
+ 
+ <P>
+ In the C output language, each node type is converted into a <SAMP>`typedef'</SAMP>
+ that contains the node's fields, and the fields of its ancestor node
+ types.  The following example demonstrates how treecc node declarations
+ are converted into C source code:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type;
+ }
+ %node binary expression %abstract =
+ {
+     expression *expr1;
+     expression *expr2;
+ }
+ %node plus binary
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ typedef struct expression__ expression;
+ typedef struct binary__ binary;
+ typedef struct plus__ plus;
+ 
+ struct expression__ {
+     const struct expression_vtable__ *vtable__;
+     int kind__;
+     char *filename__;
+     long linenum__;
+     type_code type;
+ };
+ struct binary__ {
+     const struct binary_vtable__ *vtable__;
+     int kind__;
+     char *filename__;
+     long linenum__;
+     type_code type;
+     expression * expr1;
+     expression * expr2;
+ };
+ struct plus__ {
+     const struct plus_vtable__ *vtable__;
+     int kind__;
+     char *filename__;
+     long linenum__;
+     type_code type;
+     expression * expr1;
+     expression * expr2;
+ };
+ </PRE>
+ 
+ <P>
+ Programmers should avoid using any identifiers that end in
+ <SAMP>`__'</SAMP>.  Such identifiers are reserved for internal use by treecc
+ and its support routines.
+ 
+ 
+ <P>
+ For each non-abstract node type called <SAMP>`NAME'</SAMP>, treecc generates a
+ function called <SAMP>`NAME_create'</SAMP> that creates nodes of that type.
+ The general form of the function's prototype is as follows:
+ 
+ 
+ 
+ <PRE>
+ TYPE *NAME_create([YYNODESTATE *state,] PARAMS)
+ </PRE>
+ 
+ <DL COMPACT>
+ 
+ <DT><SAMP>`TYPE'</SAMP>
+ <DD>
+ The return node type, which is the nearest ancestor that has the
+ <SAMP>`%typedef'</SAMP> flag.
+ 
+ <DT><SAMP>`NAME'</SAMP>
+ <DD>
+ The name of the node type that is being created.
+ 
+ <DT><SAMP>`state'</SAMP>
+ <DD>
+ The system state, if reentrant code is being generated.
+ 
+ <DT><SAMP>`PARAMS'</SAMP>
+ <DD>
+ The create parameters, consisting of every field that does not
+ have the <SAMP>`%nocreate'</SAMP> flag.  The parameters appear in the
+ same order as the fields in the node types, from the top-most
+ ancestor down to the node type itself.  For example:
+ 
+ 
+ <PRE>
+ expression *plus_create(expression * expr1, expression * expr2);
+ </PRE>
+ 
+ </DL>
+ 
+ <P>
+ Enumerated types are converted into a C <SAMP>`typedef'</SAMP> with the
+ same name and values:
+ 
+ 
+ 
+ <PRE>
+ %enum JavaType =
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF
+ }
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ typedef enum
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF
+ 
+ } JavaType;
+ </PRE>
+ 
+ <P>
+ Virtual operations are converted into C macros that invoke the
+ correct vtable entry on a node type:
+ 
+ 
+ 
+ <PRE>
+ %operation %virtual void infer_type(expression *e)
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ #define infer_type(this__) \
+     ((*(((struct expression_vtable__ *) \
+         ((this__)-&#62;vtable__))-&#62;infer_type_v__)) \
+             ((expression *)(this__)))
+ </PRE>
+ 
+ <P>
+ Calls to <SAMP>`infer_type'</SAMP> can then be made with <SAMP>`infer_type(node)'</SAMP>.
+ 
+ 
+ <P>
+ Non-virtual operations are converted into C functions:
+ 
+ 
+ 
+ <PRE>
+ %operation void infer_type(expression *e)
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ extern void infer_type(expression *e);
+ </PRE>
+ 
+ <P>
+ Because virtual and non-virtual operations use a similar call syntax,
+ it is very easy to convert a virtual operation into a non-virtual
+ operation when the output language is C.  This isn't possible with
+ the other output languages.
+ 
+ 
+ <P>
+ Other house-keeping tasks are performed by the following functions
+ and macros.  Some of these must be supplied by the programmer.
+ The <SAMP>`state'</SAMP> parameter is required only if a reentrant compiler is
+ being built.
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>int yykind(ANY *node)</CODE>
+ <DD>
+ <A NAME="IDX69"></A>
+ Gets the numeric kind value associated with a particular node.
+ The kind value for node type <SAMP>`NAME'</SAMP> is called <SAMP>`NAME_kind'</SAMP>.
+ 
+ <DT><CODE>const char *yykindname(ANY *node)</CODE>
+ <DD>
+ <A NAME="IDX70"></A>
+ Gets the name of the node kind associated with a particular node.
+ This may be helpful for debugging and logging code.
+ 
+ <DT><CODE>int yyisa(ANY *node, type)</CODE>
+ <DD>
+ <A NAME="IDX71"></A>
+ Determines if <SAMP>`node'</SAMP> is an instance of the node type <SAMP>`type'</SAMP>.
+ 
+ <DT><CODE>char *yygetfilename(ANY *node)</CODE>
+ <DD>
+ <A NAME="IDX72"></A>
+ Gets the filename corresponding to where <SAMP>`node'</SAMP> was created
+ during parsing.  This macro is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>long yygetlinenum(ANY *node)</CODE>
+ <DD>
+ <A NAME="IDX73"></A>
+ Gets the line number corresponding to where <SAMP>`node'</SAMP> was created
+ during parsing.  This macro is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>void yysetfilename(ANY *node, char *value)</CODE>
+ <DD>
+ <A NAME="IDX74"></A>
+ Sets the filename associated with <SAMP>`node'</SAMP> to <SAMP>`value'</SAMP>.  The
+ string is not copied, so <SAMP>`value'</SAMP> must persist for the lifetime
+ of the node.  This macro will rarely be required, unless a node
+ corresponds to a different line than the current parse line.  This
+ macro is only generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>void yysetlinenum(ANY *node, long value)</CODE>
+ <DD>
+ <A NAME="IDX75"></A>
+ Sets the line number associated with <SAMP>`node'</SAMP> to <SAMP>`value'</SAMP>.
+ This macro will rarely be required, unless a node corresponds to a
+ different line than the current parse line.  This macro is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>char *yycurrfilename([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX76"></A>
+ Get the name of the current input file from the parser.  The pointer
+ that is returned from this function is stored as-is: the string is
+ not copied.  Therefore, the value must persist for at least as long
+ as the node will persist.  This function must be supplied by the programmer
+ if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>long yycurrlinenum([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX77"></A>
+ Get the number of the current input line from the parser.  This
+ function must be supplied by the programmer if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>void yynodeinit([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX78"></A>
+ Initializes the node memory manager.  If the system is reentrant, then
+ the node memory manager is <SAMP>`state'</SAMP>.  Otherwise a global node
+ memory manager is used.
+ 
+ <DT><CODE>void *yynodealloc([YYNODESTATE *state,] unsigned int size)</CODE>
+ <DD>
+ <A NAME="IDX79"></A>
+ Allocates a block of memory of <SAMP>`size'</SAMP> bytes in size from the
+ node memory manager.  This function is called automatically from
+ the node-specific <SAMP>`*_create'</SAMP> functions.  The programmer will
+ not normally need to call this function.
+ 
+ This function will return <CODE>NULL</CODE> if the system is out of
+ memory, or if <SAMP>`size'</SAMP> is too large to be allocated within
+ the node memory manager.  If the system is out of memory, then
+ <SAMP>`yynodealloc'</SAMP> will call <SAMP>`yynodefailed'</SAMP> prior to
+ returning <CODE>NULL</CODE>.
+ 
+ <DT><CODE>int yynodepush([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX80"></A>
+ Pushes the current node memory manager position.  The next time
+ <CODE>yynodepop</CODE> is called, the node memory manager will reset to
+ the pushed position.  This function returns zero if the system
+ is out of memory.
+ 
+ <DT><CODE>void yynodepop([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX81"></A>
+ Pops the current node memory manager position.  This function has
+ no effect if <CODE>yynodepush</CODE> was not called previously.
+ 
+ The <CODE>yynodepush</CODE> and <CODE>yynodepop</CODE> functions can be used
+ to perform a simple kind of garbage collection on nodes.  When
+ the parser enters a scope, it pushes the node memory manager
+ position.  After all definitions in the scope have been dealt
+ with, the parser pops the node memory manager to reclaim all
+ of the memory used.
+ 
+ <DT><CODE>void yynodeclear([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX82"></A>
+ Clears the entire node memory manager and returns it to the
+ state it had after calling <CODE>yynodeinit</CODE>.  This is typically
+ used upon program shutdown to free all remaining node memory.
+ 
+ <DT><CODE>void yynodefailed([YYNODESTATE *state])</CODE>
+ <DD>
+ <A NAME="IDX83"></A>
+ Called when <CODE>yynodealloc</CODE> or <CODE>yynodepush</CODE> detects that
+ the system is out of memory.  This function must be supplied by
+ the programmer.  The programmer may choose to exit to program
+ when the system is out of memory; in which case <CODE>yynodealloc</CODE>
+ will never return <CODE>NULL</CODE>.
+ </DL>
+ 
+ 
+ 
+ <H2><A NAME="SEC20" HREF="treecc_toc.html#TOC20">C++ Language APIs</A></H2>
+ <P>
+ <A NAME="IDX84"></A>
+ 
+ 
+ <P>
+ In the C++ output language, each node type is converted into a <SAMP>`class'</SAMP>
+ that contains the node's fields, virtual operations, and other house-keeping
+ definitions.  The following example demonstrates how treecc node declarations
+ are converted into C++ source code:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type;
+ }
+ %node binary expression %abstract =
+ {
+     expression *expr1;
+     expression *expr2;
+ }
+ %node plus binary
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ class expression
+ {
+ protected:
+ 
+     int kind__;
+     char *filename__;
+     long linenum__;
+ 
+ public:
+ 
+     int getKind() const { return kind__; }
+     const char *getFilename() const { return filename__; }
+     int getLinenum() const { return linenum__; }
+     void setFilename(char *filename) { filename__ = filename; }
+     void setLinenum(long linenum) { linenum__ = linenum; }
+ 
+     void *operator new(size_t);
+     void operator delete(void *, size_t);
+ 
+ protected:
+ 
+     expression();
+ 
+ public:
+ 
+     type_code type;
+ 
+     virtual int isA(int kind) const;
+     virtual const char *getKindName() const;
+ 
+ protected:
+ 
+     virtual ~expression();
+ 
+ };
+ 
+ class binary : public expression
+ {
+ protected:
+ 
+     binary(expression * expr1, expression * expr2);
+ 
+ public:
+ 
+     expression * expr1;
+     expression * expr2;
+ 
+     virtual int isA(int kind) const;
+     virtual const char *getKindName() const;
+ 
+ protected:
+ 
+     virtual ~binary();
+ 
+ };
+ 
+ class plus : public binary
+ {
+ public:
+ 
+     plus(expression * expr1, expression * expr2);
+ 
+ public:
+ 
+     virtual int isA(int kind) const;
+     virtual const char *getKindName() const;
+ 
+ protected:
+ 
+     virtual ~plus();
+ 
+ };
+ </PRE>
+ 
+ <P>
+ The following standard methods are available on every node type:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>int getKind()</CODE>
+ <DD>
+ <A NAME="IDX85"></A>
+ Gets the numeric kind value associated with a particular node.
+ The kind value for node type <SAMP>`NAME'</SAMP> is called <SAMP>`NAME_kind'</SAMP>.
+ 
+ <DT><CODE>virtual const char *getKindName()</CODE>
+ <DD>
+ <A NAME="IDX86"></A>
+ Gets the name of the node kind associated with a particular node.
+ This may be helpful for debugging and logging code.
+ 
+ <DT><CODE>virtual int isA(int kind)</CODE>
+ <DD>
+ <A NAME="IDX87"></A>
+ Determines if the node is a member of the node type that corresponds
+ to the numeric kind value <SAMP>`kind'</SAMP>.
+ 
+ <DT><CODE>const char *getFilename()</CODE>
+ <DD>
+ <A NAME="IDX88"></A>
+ Gets the filename corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>long getLinenum()</CODE>
+ <DD>
+ <A NAME="IDX89"></A>
+ Gets the line number corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>void setFilename(char *value)</CODE>
+ <DD>
+ <A NAME="IDX90"></A>
+ Sets the filename associated with the node to <SAMP>`value'</SAMP>.  The
+ string is not copied, so <SAMP>`value'</SAMP> must persist for the lifetime
+ of the node.  This method will rarely be required, unless a node
+ corresponds to a different line than the current parse line.  This
+ method is only generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>void setLinenum(long value)</CODE>
+ <DD>
+ <A NAME="IDX91"></A>
+ Sets the line number associated with the node to <SAMP>`value'</SAMP>.
+ This method will rarely be required, unless a node corresponds to a
+ different line than the current parse line.  This method is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ If the generated code is non-reentrant, then the constructor for the
+ class can be used to construct nodes of the specified node type.  The
+ constructor parameters are the same as the fields within the node type's
+ definition, except for <SAMP>`%nocreate'</SAMP> fields.
+ 
+ 
+ <P>
+ If the generated code is reentrant, then nodes cannot be constructed
+ using the C++ <SAMP>`new'</SAMP> operator.  The <SAMP>`*Create'</SAMP> methods
+ on the <SAMP>`YYNODESTATE'</SAMP> factory class must be used instead.
+ 
+ 
+ <P>
+ The <SAMP>`YYNODESTATE'</SAMP> class contains a number of house-keeping methods
+ that are used to manage nodes:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>static YYNODESTATE *getState()</CODE>
+ <DD>
+ <A NAME="IDX92"></A>
+ Gets the global <SAMP>`YYNODESTATE'</SAMP> instance that is being used by
+ non-reentrant code.  If an instance has not yet been created,
+ this method will create one.
+ 
+ When using non-reentrant code, the programmer will normally subclass
+ <SAMP>`YYNODESTATE'</SAMP>, override some of the methods below, and then
+ construct an instance of the subclass.  This constructed instance
+ will then be returned by future calls to <SAMP>`getState'</SAMP>.
+ 
+ <DT><CODE>void *alloc(size_t size)</CODE>
+ <DD>
+ <A NAME="IDX93"></A>
+ Allocates a block of memory of <SAMP>`size'</SAMP> bytes in size from the
+ node memory manager.  This function is called automatically from
+ the node-specific constructors and <SAMP>`*Create'</SAMP> methods.  The programmer
+ will not normally need to call this function.
+ 
+ This function will return <CODE>NULL</CODE> if the system is out of
+ memory, or if <SAMP>`size'</SAMP> is too large to be allocated within
+ the node memory manager.  If the system is out of memory, then
+ <SAMP>`alloc'</SAMP> will call <SAMP>`failed'</SAMP> prior to returning <CODE>NULL</CODE>.
+ 
+ <DT><CODE>int push()</CODE>
+ <DD>
+ <A NAME="IDX94"></A>
+ Pushes the current node memory manager position.  The next time
+ <CODE>pop</CODE> is called, the node memory manager will reset to
+ the pushed position.  This function returns zero if the system
+ is out of memory.
+ 
+ <DT><CODE>void pop()</CODE>
+ <DD>
+ <A NAME="IDX95"></A>
+ Pops the current node memory manager position.  This function has
+ no effect if <CODE>push</CODE> was not called previously.
+ 
+ The <CODE>push</CODE> and <CODE>pop</CODE> methods can be used
+ to perform a simple kind of garbage collection on nodes.  When
+ the parser enters a scope, it pushes the node memory manager
+ position.  After all definitions in the scope have been dealt
+ with, the parser pops the node memory manager to reclaim all
+ of the memory used.
+ 
+ <DT><CODE>void clear()</CODE>
+ <DD>
+ <A NAME="IDX96"></A>
+ Clears the entire node memory manager and returns it to the
+ state it had after construction.
+ 
+ <DT><CODE>virtual void failed()</CODE>
+ <DD>
+ <A NAME="IDX97"></A>
+ Called when <CODE>alloc</CODE> or <CODE>push</CODE> detects that
+ the system is out of memory.  This method is typically
+ overridden by the programmer in subclasses.  The programmer may
+ choose to exit to program when the system is out of memory; in
+ which case <CODE>alloc</CODE> will never return <CODE>NULL</CODE>.
+ 
+ <DT><CODE>virtual char *currFilename()</CODE>
+ <DD>
+ <A NAME="IDX98"></A>
+ Get the name of the current input file from the parser.  The pointer
+ that is returned from this function is stored as-is: the string is
+ not copied.  Therefore, the value must persist for at least as long
+ as the node will persist.  This method is usually overrriden by
+ the programmer in subclasses if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>virtual long currLinenum()</CODE>
+ <DD>
+ <A NAME="IDX99"></A>
+ Get the number of the current input line from the parser.  This
+ method is usually overridden by the programmer in subclasses
+ if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ The programmer will typically subclass <SAMP>`YYNODESTATE'</SAMP> to provide
+ additional functionality, and then create an instance of this class
+ to act as the node memory manager and node creation factory.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC21" HREF="treecc_toc.html#TOC21">Java Language APIs</A></H2>
+ <P>
+ <A NAME="IDX100"></A>
+ 
+ 
+ <P>
+ In the Java output language, each node type is converted into a <SAMP>`class'</SAMP>
+ that contains the node's fields, virtual operations, and other house-keeping
+ definitions.  The following example demonstrates how treecc node declarations
+ are converted into Java source code:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type;
+ }
+ %node binary expression %abstract =
+ {
+     expression expr1;
+     expression expr2;
+ }
+ %node plus binary
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public class expression
+ {
+     protected int kind__;
+     protected String filename__;
+     protected long linenum__;
+ 
+     public int getKind() { return kind__; }
+     public String getFilename() { return filename__; }
+     public long getLinenum() const { return linenum__; }
+     public void setFilename(String filename) { filename__ = filename; }
+     public void setLinenum(long linenum) { linenum__ = linenum; }
+ 
+     public static final int KIND = 1;
+ 
+     public type_code type;
+ 
+     protected expression()
+     {
+         this.kind__ = KIND;
+         this.filename__ = YYNODESTATE.getState().currFilename();
+         this.linenum__ = YYNODESTATE.getState().currLinenum();
+     }
+ 
+     public int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return 0;
+     }
+ 
+     public String getKindName()
+     {
+         return "expression";
+     }
+ }
+ 
+ public class binary extends expression
+ {
+     public static final int KIND = 2;
+ 
+     public expression expr1;
+     public expression expr2;
+ 
+     protected binary(expression expr1, expression expr2)
+     {
+         super();
+         this.kind__ = KIND;
+         this.expr1 = expr1;
+         this.expr2 = expr2;
+     }
+ 
+     public int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return super.isA(kind);
+     }
+ 
+     public String getKindName()
+     {
+         return "binary";
+     }
+ }
+ 
+ public class plus extends binary
+ {
+     public static final int KIND = 3;
+ 
+     public plus(expression expr1, expression expr2)
+     {
+         super(expr1, expr2);
+         this.kind__ = KIND;
+     }
+ 
+     public int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return super.isA(kind);
+     }
+ 
+     public String getKindName()
+     {
+         return "plus";
+     }
+ }
+ </PRE>
+ 
+ <P>
+ The following standard members are available on every node type:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>int KIND</CODE>
+ <DD>
+ <A NAME="IDX101"></A>
+ The kind value for the node type corresponding to this class.
+ 
+ <DT><CODE>int getKind()</CODE>
+ <DD>
+ <A NAME="IDX102"></A>
+ Gets the numeric kind value associated with a particular node.
+ The kind value for node type <SAMP>`NAME'</SAMP> is called <SAMP>`NAME.KIND'</SAMP>.
+ 
+ <DT><CODE>String getKindName()</CODE>
+ <DD>
+ <A NAME="IDX103"></A>
+ Gets the name of the node kind associated with a particular node.
+ This may be helpful for debugging and logging code.
+ 
+ <DT><CODE>int isA(int kind)</CODE>
+ <DD>
+ <A NAME="IDX104"></A>
+ Determines if the node is a member of the node type that corresponds
+ to the numeric kind value <SAMP>`kind'</SAMP>.
+ 
+ <DT><CODE>String getFilename()</CODE>
+ <DD>
+ <A NAME="IDX105"></A>
+ Gets the filename corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>long getLinenum()</CODE>
+ <DD>
+ <A NAME="IDX106"></A>
+ Gets the line number corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>void setFilename(String value)</CODE>
+ <DD>
+ <A NAME="IDX107"></A>
+ Sets the filename associated with the node to <SAMP>`value'</SAMP>.
+ This method will rarely be required, unless a node corresponds to
+ a different line than the current parse line.  This method is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>void setLinenum(long value)</CODE>
+ <DD>
+ <A NAME="IDX108"></A>
+ Sets the line number associated with the node to <SAMP>`value'</SAMP>.
+ This method will rarely be required, unless a node corresponds to a
+ different line than the current parse line.  This method is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ If the generated code is non-reentrant, then the constructor for the
+ class can be used to construct nodes of the specified node type.  The
+ constructor parameters are the same as the fields within the node type's
+ definition, except for <SAMP>`%nocreate'</SAMP> fields.
+ 
+ 
+ <P>
+ If the generated code is reentrant, then nodes cannot be constructed
+ using the Java <SAMP>`new'</SAMP> operator.  The <SAMP>`*Create'</SAMP> methods
+ on the <SAMP>`YYNODESTATE'</SAMP> factory class must be used instead.
+ 
+ 
+ <P>
+ Enumerated types are converted into a Java <SAMP>`class'</SAMP>:
+ 
+ 
+ 
+ <PRE>
+ %enum JavaType =
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF
+ }
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public class JavaType
+ {
+     public static final int JT_BYTE = 0;
+     public static final int JT_SHORT = 1;
+     public static final int JT_CHAR = 2;
+     public static final int JT_INT = 3;
+     public static final int JT_LONG = 4;
+     public static final int JT_FLOAT = 5;
+     public static final int JT_DOUBLE = 6;
+     public static final int JT_OBJECT_REF = 7;
+ }
+ </PRE>
+ 
+ <P>
+ References to enumerated types in fields and operation parameters
+ are replaced with the type <SAMP>`int'</SAMP>.
+ 
+ 
+ <P>
+ Virtual operations are converted into public methods on the Java
+ node classes.
+ 
+ 
+ <P>
+ Non-virtual operations are converted into a static method within
+ a class named for the operation.  For example,
+ 
+ 
+ 
+ <PRE>
+ %operation void InferType::infer_type(expression e)
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public class InferType
+ {
+     public static void infer_type(expression e)
+     {
+         ...
+     }
+ }
+ </PRE>
+ 
+ <P>
+ If the class name (<SAMP>`InferType'</SAMP> in the above example) is omitted,
+ then the name of the operation is used as both the class name and the
+ the method name.
+ 
+ 
+ <P>
+ The <SAMP>`YYNODESTATE'</SAMP> class contains a number of house-keeping methods
+ that are used to manage nodes:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>static YYNODESTATE getState()</CODE>
+ <DD>
+ <A NAME="IDX109"></A>
+ Gets the global <SAMP>`YYNODESTATE'</SAMP> instance that is being used by
+ non-reentrant code.  If an instance has not yet been created,
+ this method will create one.
+ 
+ When using non-reentrant code, the programmer will normally subclass
+ <SAMP>`YYNODESTATE'</SAMP>, override some of the methods below, and then
+ construct an instance of the subclass.  This constructed instance
+ will then be returned by future calls to <SAMP>`getState'</SAMP>.
+ 
+ This method will not be present if a reentrant system is being
+ generated.
+ 
+ <DT><CODE>String currFilename()</CODE>
+ <DD>
+ <A NAME="IDX110"></A>
+ Get the name of the current input file from the parser.  This method
+ is usually overrriden by the programmer in subclasses if
+ <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>long currLinenum()</CODE>
+ <DD>
+ <A NAME="IDX111"></A>
+ Get the number of the current input line from the parser.  This
+ method is usually overridden by the programmer in subclasses
+ if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ The programmer will typically subclass <SAMP>`YYNODESTATE'</SAMP> to provide
+ additional functionality, and then create an instance of this class
+ to act as the global state and node creation factory.
+ 
+ 
+ 
+ 
+ <H2><A NAME="SEC22" HREF="treecc_toc.html#TOC22">C# Language APIs</A></H2>
+ <P>
+ <A NAME="IDX112"></A>
+ 
+ 
+ <P>
+ In the C# output language, each node type is converted into a <SAMP>`class'</SAMP>
+ that contains the node's fields, virtual operations, and other house-keeping
+ definitions.  The following example demonstrates how treecc node declarations
+ are converted into C# source code:
+ 
+ 
+ 
+ <PRE>
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type;
+ }
+ %node binary expression %abstract =
+ {
+     expression expr1;
+     expression expr2;
+ }
+ %node plus binary
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public class expression
+ {
+     protected int kind__;
+     protected String filename__;
+     protected long linenum__;
+ 
+     public int getKind() { return kind__; }
+     public String getFilename() { return filename__; }
+     public long getLinenum() const { return linenum__; }
+     public void setFilename(String filename) { filename__ = filename; }
+     public void setLinenum(long linenum) { linenum__ = linenum; }
+ 
+     public const int KIND = 1;
+ 
+     public type_code type;
+ 
+     protected expression()
+     {
+         this.kind__ = KIND;
+         this.filename__ = YYNODESTATE.getState().currFilename();
+         this.linenum__ = YYNODESTATE.getState().currLinenum();
+     }
+ 
+     public virtual int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return 0;
+     }
+ 
+     public virtual String getKindName()
+     {
+         return "expression";
+     }
+ }
+ 
+ public class binary : expression
+ {
+     public const int KIND = 2;
+ 
+     public expression expr1;
+     public expression expr2;
+ 
+     protected binary(expression expr1, expression expr2)
+         : expression()
+     {
+         this.kind__ = KIND;
+         this.expr1 = expr1;
+         this.expr2 = expr2;
+     }
+ 
+     public override int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return base.isA(kind);
+     }
+ 
+     public override String getKindName()
+     {
+         return "binary";
+     }
+ }
+ 
+ public class plus : binary
+ {
+     public const int KIND = 5;
+ 
+     public plus(expression expr1, expression expr2)
+         : binary(expr1, expr2)
+     {
+         this.kind__ = KIND;
+     }
+ 
+     public override int isA(int kind)
+     {
+         if(kind == KIND)
+             return 1;
+         else
+             return base.isA(kind);
+     }
+ 
+     public override String getKindName()
+     {
+         return "plus";
+     }
+ }
+ </PRE>
+ 
+ <P>
+ The following standard members are available on every node type:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>const int KIND</CODE>
+ <DD>
+ <A NAME="IDX113"></A>
+ The kind value for the node type corresponding to this class.
+ 
+ <DT><CODE>int getKind()</CODE>
+ <DD>
+ <A NAME="IDX114"></A>
+ Gets the numeric kind value associated with a particular node.
+ The kind value for node type <SAMP>`NAME'</SAMP> is called <SAMP>`NAME.KIND'</SAMP>.
+ 
+ <DT><CODE>virtual String getKindName()</CODE>
+ <DD>
+ <A NAME="IDX115"></A>
+ Gets the name of the node kind associated with a particular node.
+ This may be helpful for debugging and logging code.
+ 
+ <DT><CODE>virtual int isA(int kind)</CODE>
+ <DD>
+ <A NAME="IDX116"></A>
+ Determines if the node is a member of the node type that corresponds
+ to the numeric kind value <SAMP>`kind'</SAMP>.
+ 
+ <DT><CODE>String getFilename()</CODE>
+ <DD>
+ <A NAME="IDX117"></A>
+ Gets the filename corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>long getLinenum()</CODE>
+ <DD>
+ <A NAME="IDX118"></A>
+ Gets the line number corresponding to where the node was created
+ during parsing.  This method is only generated if <SAMP>`%option track_lines'</SAMP>
+ was specified.
+ 
+ <DT><CODE>void setFilename(String value)</CODE>
+ <DD>
+ <A NAME="IDX119"></A>
+ Sets the filename associated with the node to <SAMP>`value'</SAMP>.
+ This method will rarely be required, unless a node corresponds to
+ a different line than the current parse line.  This method is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>void setLinenum(long value)</CODE>
+ <DD>
+ <A NAME="IDX120"></A>
+ Sets the line number associated with the node to <SAMP>`value'</SAMP>.
+ This method will rarely be required, unless a node corresponds to a
+ different line than the current parse line.  This method is only
+ generated if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ If the generated code is non-reentrant, then the constructor for the
+ class can be used to construct nodes of the specified node type.  The
+ constructor parameters are the same as the fields within the node type's
+ definition, except for <SAMP>`%nocreate'</SAMP> fields.
+ 
+ 
+ <P>
+ If the generated code is reentrant, then nodes cannot be constructed
+ using the C# <SAMP>`new'</SAMP> operator.  The <SAMP>`*Create'</SAMP> methods
+ on the <SAMP>`YYNODESTATE'</SAMP> factory class must be used instead.
+ 
+ 
+ <P>
+ Enumerated types are converted into a C# <SAMP>`enum'</SAMP> definition:
+ 
+ 
+ 
+ <PRE>
+ %enum JavaType =
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF
+ }
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public enum JavaType
+ {
+     JT_BYTE,
+     JT_SHORT,
+     JT_CHAR,
+     JT_INT,
+     JT_LONG,
+     JT_FLOAT,
+     JT_DOUBLE,
+     JT_OBJECT_REF,
+ }
+ </PRE>
+ 
+ <P>
+ Virtual operations are converted into public virtual methods on the C#
+ node classes.
+ 
+ 
+ <P>
+ Non-virtual operations are converted into a static method within
+ a class named for the operation.  For example,
+ 
+ 
+ 
+ <PRE>
+ %operation void InferType::infer_type(expression e)
+ </PRE>
+ 
+ <P>
+ becomes:
+ 
+ 
+ 
+ <PRE>
+ public class InferType
+ {
+     public static void infer_type(expression e)
+     {
+         ...
+     }
+ }
+ </PRE>
+ 
+ <P>
+ If the class name (<SAMP>`InferType'</SAMP> in the above example) is omitted,
+ then the name of the operation is used as both the class name and the
+ the method name.
+ 
+ 
+ <P>
+ The <SAMP>`YYNODESTATE'</SAMP> class contains a number of house-keeping methods
+ that are used to manage nodes:
+ 
+ 
+ <DL COMPACT>
+ 
+ <DT><CODE>static YYNODESTATE getState()</CODE>
+ <DD>
+ <A NAME="IDX121"></A>
+ Gets the global <SAMP>`YYNODESTATE'</SAMP> instance that is being used by
+ non-reentrant code.  If an instance has not yet been created,
+ this method will create one.
+ 
+ When using non-reentrant code, the programmer will normally subclass
+ <SAMP>`YYNODESTATE'</SAMP>, override some of the methods below, and then
+ construct an instance of the subclass.  This constructed instance
+ will then be returned by future calls to <SAMP>`getState'</SAMP>.
+ 
+ This method will not be present if a reentrant system is being
+ generated.
+ 
+ <DT><CODE>virtual String currFilename()</CODE>
+ <DD>
+ <A NAME="IDX122"></A>
+ Get the name of the current input file from the parser.  This method
+ is usually overrriden by the programmer in subclasses if
+ <SAMP>`%option track_lines'</SAMP> was specified.
+ 
+ <DT><CODE>virtual long currLinenum()</CODE>
+ <DD>
+ <A NAME="IDX123"></A>
+ Get the number of the current input line from the parser.  This
+ method is usually overridden by the programmer in subclasses
+ if <SAMP>`%option track_lines'</SAMP> was specified.
+ </DL>
+ 
+ <P>
+ The programmer will typically subclass <SAMP>`YYNODESTATE'</SAMP> to provide
+ additional functionality, and then create an instance of this class
+ to act as the global state and node creation factory.
+ 
+ 
+ 
+ 
+ <H1><A NAME="SEC23" HREF="treecc_toc.html#TOC23">Full expression example code</A></H1>
+ <P>
+ <A NAME="IDX124"></A>
+ 
+ 
+ <P>
+ The full treecc input file for the expression example is as follows:
+ 
+ 
+ 
+ <PRE>
+ %enum type_code =
+ {
+     int_type,
+     float_type
+ }
+ 
+ %node expression %abstract %typedef =
+ {
+     %nocreate type_code type = {int_type};
+ }
+ 
+ %node binary expression %abstract =
+ {
+     expression *expr1;
+     expression *expr2;
+ }
+ 
+ %node unary expression %abstract =
+ {
+     expression *expr;
+ }
+ 
+ %node intnum expression =
+ {
+     int num;
+ }
+ 
+ %node floatnum expression =
+ {
+     float num;
+ }
+ 
+ %node plus binary
+ %node minus binary
+ %node multiply binary
+ %node divide binary
+ %node power binary
+ %node negate unary
+ 
+ %operation void infer_type(expression *e)
+ 
+ infer_type(binary)
+ {
+     infer_type(e-&#62;expr1);
+     infer_type(e-&#62;expr2);
+ 
+     if(e-&#62;expr1-&#62;type == float_type || e-&#62;expr2-&#62;type == float_type)
+     {
+         e-&#62;type = float_type;
+     }
+     else
+     {
+         e-&#62;type = int_type;
+     }
+ }
+ 
+ infer_type(unary)
+ {
+     infer_type(e-&#62;expr);
+     e-&#62;type = e-&#62;expr-&#62;type;
+ }
+ 
+ infer_type(intnum)
+ {
+     e-&#62;type = int_type;
+ }
+ 
+ infer_type(floatnum)
+ {
+     e-&#62;type = float_type;
+ }
+ 
+ infer_type(power)
+ {
+     infer_type(e-&#62;expr1);
+     infer_type(e-&#62;expr2);
+ 
+     if(e-&#62;expr2-&#62;type != int_type)
+     {
+         error("second argument to `^' is not an integer");
+     }
+ 
+     e-&#62;type = e-&#62;expr1-&#62;type;
+ }
+ </PRE>
+ 
+ <P>
+ The full yacc grammar is as follows:
+ 
+ 
+ 
+ <PRE>
+ %union {
+     expression *node;
+     int         inum;
+     float       fnum;
+ }
+ 
+ %token INT FLOAT
+ 
+ %type &#60;node&#62; expr
+ %type &#60;inum&#62; INT
+ %type &#60;fnum&#62; FLOAT
+ 
+ %%
+ 
+ expr: INT               { $$ = intnum_create($1); }
+     | FLOAT             { $$ = floatnum_create($1); }
+     | '(' expr ')'      { $$ = $2; }
+     | expr '+' expr     { $$ = plus_create($1, $3); }
+     | expr '-' expr     { $$ = minus_create($1, $3); }
+     | expr '*' expr     { $$ = multiply_create($1, $3); }
+     | expr '/' expr     { $$ = divide_create($1, $3); }
+     | expr '^' expr     { $$ = power_create($1, $3); }
+     | '-' expr          { $$ = negate_create($2); }
+     ;
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC24" HREF="treecc_toc.html#TOC24">EBNF syntax for treecc input files</A></H1>
+ <P>
+ <A NAME="IDX125"></A>
+ 
+ 
+ <P>
+ The EBNF syntax for treecc input files uses the following
+ lexical tokens:
+ 
+ 
+ 
+ <PRE>
+ IDENTIFIER ::= &#60;A-Za-z_&#62; { &#60;A-Za-z0-9_&#62; }
+ 
+ STRING ::= '"' &#60;anything that does not include '"'&#62; '"'
+          | "'" &#60;anything that does not include "'"&#62; "'"
+ 
+ LITERAL_DEFNS ::= "%{" &#60;anything except "%}"&#62; "%}"
+ 
+ LITERAL_END ::= "%%" &#60;any character sequence until EOF&#62;
+ 
+ LITERAL_CODE ::= '{' &#60;anything with matched '{' and '}'&#62; '}'
+ </PRE>
+ 
+ <P>
+ In addition, anything that begins with "%" in the following syntax
+ is a lexical keyword.
+ 
+ 
+ <P>
+ The EBNF syntax is as follows:
+ 
+ 
+ 
+ <PRE>
+ File ::= { Declaration }
+ 
+ Declaration ::= Node
+               | Operation
+               | OperationCase
+               | Option
+               | Enum
+               | Literal
+               | Header
+               | Output
+               | Common
+               | Include
+ 
+ Node ::= %node IDENTIFIER [ IDENTIFIER ] { NodeFlag } [ '=' Fields ]
+ 
+ NodeFlag ::= %abstract | %typedef
+ 
+ Fields ::= '{' { Field } '}'
+ 
+ Field ::= [ %nocreate ] TypeAndName [ '=' LITERAL_CODE ] ';'
+ 
+ TypeAndName ::= Type [ IDENTIFIER ]
+ 
+ Type ::= TypeName
+        | Type '*'
+        | Type '&#38;'
+        | Type '[' ']'
+ 
+ TypeName ::= IDENTIFIER { IDENTIFIER }
+ 
+ Operation ::= %operation { OperFlag } Type
+                    [ ClassName ] IDENTIFIER '(' [ Params ] ')'
+                    [ '=' LITERAL_CODE ] [ ';' ]
+ 
+ OperFlag ::= %virtual | %inline | %split
+ 
+ ClassName ::= IDENTIFIER "::"
+ 
+ Params ::= Param { ',' Param }
+ 
+ Param ::= TypeAndName | '[' TypeAndName ']'
+ 
+ OperationCase ::= OperationHead { ',' OperationHead } LITERAL_CODE
+ 
+ OperationHead ::= IDENTIFIER '(' [ TypeList ] ')'
+ 
+ TypeList ::= IDENTIFIER { ',' IDENTIFIER }
+ 
+ Option ::= %option IDENTIFIER [ '=' Value ]
+ 
+ Value ::= IDENTIFIER | STRING
+ 
+ Enum ::= %enum IDENTIFIER '=' '{' EnumBody [ ',' ] '}'
+ 
+ EnumBody ::= IDENTIFIER { ',' IDENTIFIER }
+ 
+ Literal ::= { LiteralFlag } (LITERAL_DEFNS | LITERAL_END)
+ 
+ LiteralFlag ::= %both | %decls | %end
+ 
+ Header ::= %header STRING
+ 
+ Output ::= %output STRING
+ 
+ Common ::= %common
+ 
+ Include ::= %include [ %readonly ] STRING
+ 
+ </PRE>
+ 
+ 
+ 
+ <H1><A NAME="SEC25" HREF="treecc_toc.html#TOC25">Index</A></H1>
+ 
+ <P>
+ Jump to:
+ <A HREF="#cindex_%">%</A>
+ -
+ <A HREF="#cindex_a">a</A>
+ -
+ <A HREF="#cindex_b">b</A>
+ -
+ <A HREF="#cindex_c">c</A>
+ -
+ <A HREF="#cindex_e">e</A>
+ -
+ <A HREF="#cindex_f">f</A>
+ -
+ <A HREF="#cindex_g">g</A>
+ -
+ <A HREF="#cindex_h">h</A>
+ -
+ <A HREF="#cindex_i">i</A>
+ -
+ <A HREF="#cindex_j">j</A>
+ -
+ <A HREF="#cindex_k">k</A>
+ -
+ <A HREF="#cindex_l">l</A>
+ -
+ <A HREF="#cindex_n">n</A>
+ -
+ <A HREF="#cindex_o">o</A>
+ -
+ <A HREF="#cindex_p">p</A>
+ -
+ <A HREF="#cindex_r">r</A>
+ -
+ <A HREF="#cindex_s">s</A>
+ -
+ <A HREF="#cindex_t">t</A>
+ -
+ <A HREF="#cindex_v">v</A>
+ -
+ <A HREF="#cindex_y">y</A>
+ <P>
+ <H2><A NAME="cindex_%">%</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX9">%abstract keyword</A>
+ <LI><A HREF="treecc.html#IDX52">%both keyword</A>
+ <LI><A HREF="treecc.html#IDX65">%common keyword</A>
+ <LI><A HREF="treecc.html#IDX51">%decls keyword</A>
+ <LI><A HREF="treecc.html#IDX53">%end keyword</A>
+ <LI><A HREF="treecc.html#IDX15">%enum keyword</A>
+ <LI><A HREF="treecc.html#IDX59">%header keyword</A>
+ <LI><A HREF="treecc.html#IDX56">%include keyword</A>
+ <LI><A HREF="treecc.html#IDX22">%inline keyword</A>
+ <LI><A HREF="treecc.html#IDX11">%nocreate keyword</A>
+ <LI><A HREF="treecc.html#IDX7">%node keyword</A>
+ <LI><A HREF="treecc.html#IDX19">%operation keyword</A>
+ <LI><A HREF="treecc.html#IDX26">%option keyword</A>
+ <LI><A HREF="treecc.html#IDX63">%outdir keyword</A>
+ <LI><A HREF="treecc.html#IDX61">%output keyword</A>
+ <LI><A HREF="treecc.html#IDX57">%readonly keyword</A>
+ <LI><A HREF="treecc.html#IDX23">%split keyword</A>
+ <LI><A HREF="treecc.html#IDX10">%typedef keyword</A>
+ <LI><A HREF="treecc.html#IDX21">%virtual keyword</A>
+ </DIR>
+ <H2><A NAME="cindex_a">a</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX37">abstract_factory option</A>
+ <LI><A HREF="treecc.html#IDX93">alloc method (C++)</A>
+ </DIR>
+ <H2><A NAME="cindex_b">b</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX45">base option</A>
+ <LI><A HREF="treecc.html#IDX47">block_size option</A>
+ </DIR>
+ <H2><A NAME="cindex_c">c</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX68">C APIs</A>
+ <LI><A HREF="treecc.html#IDX112">C# APIs</A>
+ <LI><A HREF="treecc.html#IDX84">C++ APIs</A>
+ <LI><A HREF="treecc.html#IDX54">Changing files</A>
+ <LI><A HREF="treecc.html#IDX96">clear method (C++)</A>
+ <LI><A HREF="treecc.html#IDX4">Command-line options</A>
+ <LI><A HREF="treecc.html#IDX64">common declaration</A>
+ <LI><A HREF="treecc.html#IDX122">currFilename method (C#)</A>
+ <LI><A HREF="treecc.html#IDX98">currFilename method (C++)</A>
+ <LI><A HREF="treecc.html#IDX110">currFilename method (Java)</A>
+ <LI><A HREF="treecc.html#IDX123">currLinenum method (C#)</A>
+ <LI><A HREF="treecc.html#IDX99">currLinenum method (C++)</A>
+ <LI><A HREF="treecc.html#IDX111">currLinenum method (Java)</A>
+ </DIR>
+ <H2><A NAME="cindex_e">e</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX125">EBNF syntax</A>
+ <LI><A HREF="treecc.html#IDX14">enum declaration</A>
+ <LI><A HREF="treecc.html#IDX13">Enumerations</A>
+ <LI><A HREF="treecc.html#IDX2">Expression example</A>
+ </DIR>
+ <H2><A NAME="cindex_f">f</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX97">failed method (C++)</A>
+ <LI><A HREF="treecc.html#IDX8">Fields</A>
+ <LI><A HREF="treecc.html#IDX33">force option</A>
+ <LI><A HREF="treecc.html#IDX124">Full expression example</A>
+ </DIR>
+ <H2><A NAME="cindex_g">g</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX117">getFilename method (C#)</A>
+ <LI><A HREF="treecc.html#IDX88">getFilename method (C++)</A>
+ <LI><A HREF="treecc.html#IDX105">getFilename method (Java)</A>
+ <LI><A HREF="treecc.html#IDX114">getKind method (C#)</A>
+ <LI><A HREF="treecc.html#IDX85">getKind method (C++)</A>
+ <LI><A HREF="treecc.html#IDX102">getKind method (Java)</A>
+ <LI><A HREF="treecc.html#IDX115">getKindName method (C#)</A>
+ <LI><A HREF="treecc.html#IDX86">getKindName method (C++)</A>
+ <LI><A HREF="treecc.html#IDX103">getKindName method (Java)</A>
+ <LI><A HREF="treecc.html#IDX118">getLinenum method (C#)</A>
+ <LI><A HREF="treecc.html#IDX89">getLinenum method (C++)</A>
+ <LI><A HREF="treecc.html#IDX106">getLinenum method (Java)</A>
+ <LI><A HREF="treecc.html#IDX121">getState method (C#)</A>
+ <LI><A HREF="treecc.html#IDX92">getState method (C++)</A>
+ <LI><A HREF="treecc.html#IDX109">getState method (Java)</A>
+ </DIR>
+ <H2><A NAME="cindex_h">h</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX58">header declaration</A>
+ </DIR>
+ <H2><A NAME="cindex_i">i</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX55">include declaration</A>
+ <LI><A HREF="treecc.html#IDX3">Invoking treecc</A>
+ <LI><A HREF="treecc.html#IDX116">isA method (C#)</A>
+ <LI><A HREF="treecc.html#IDX87">isA method (C++)</A>
+ <LI><A HREF="treecc.html#IDX104">isA method (Java)</A>
+ </DIR>
+ <H2><A NAME="cindex_j">j</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX100">Java APIs</A>
+ </DIR>
+ <H2><A NAME="cindex_k">k</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX113">KIND field (C#)</A>
+ <LI><A HREF="treecc.html#IDX101">KIND field (Java)</A>
+ <LI><A HREF="treecc.html#IDX39">kind_in_node option</A>
+ <LI><A HREF="treecc.html#IDX40">kind_in_vtable option</A>
+ </DIR>
+ <H2><A NAME="cindex_l">l</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX46">lang option</A>
+ <LI><A HREF="treecc.html#IDX66">Line tracking</A>
+ <LI><A HREF="treecc.html#IDX50">Literal code</A>
+ </DIR>
+ <H2><A NAME="cindex_n">n</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX43">namespace option</A>
+ <LI><A HREF="treecc.html#IDX38">no_abstract_factory option</A>
+ <LI><A HREF="treecc.html#IDX34">no_force option</A>
+ <LI><A HREF="treecc.html#IDX32">no_reentrant option</A>
+ <LI><A HREF="treecc.html#IDX30">no_singletons option</A>
+ <LI><A HREF="treecc.html#IDX49">no_strip_filenames option</A>
+ <LI><A HREF="treecc.html#IDX28">no_track_lines option</A>
+ <LI><A HREF="treecc.html#IDX36">no_virtual_factory option</A>
+ <LI><A HREF="treecc.html#IDX6">Nodes</A>
+ </DIR>
+ <H2><A NAME="cindex_o">o</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX18">operation cases</A>
+ <LI><A HREF="treecc.html#IDX17">operation declarations</A>
+ <LI><A HREF="treecc.html#IDX16">Operations</A>
+ <LI><A HREF="treecc.html#IDX25">option declaration</A>
+ <LI><A HREF="treecc.html#IDX24">Options</A>
+ <LI><A HREF="treecc.html#IDX62">outdir declaration</A>
+ <LI><A HREF="treecc.html#IDX67">Output APIs</A>
+ <LI><A HREF="treecc.html#IDX60">output declaration</A>
+ <LI><A HREF="treecc.html#IDX1">Overview</A>
+ </DIR>
+ <H2><A NAME="cindex_p">p</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX44">package option</A>
+ <LI><A HREF="treecc.html#IDX95">pop method (C++)</A>
+ <LI><A HREF="treecc.html#IDX41">prefix option</A>
+ <LI><A HREF="treecc.html#IDX94">push method (C++)</A>
+ </DIR>
+ <H2><A NAME="cindex_r">r</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX31">reentrant option</A>
+ </DIR>
+ <H2><A NAME="cindex_s">s</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX119">setFilename method (C#)</A>
+ <LI><A HREF="treecc.html#IDX90">setFilename method (C++)</A>
+ <LI><A HREF="treecc.html#IDX107">setFilename method (Java)</A>
+ <LI><A HREF="treecc.html#IDX120">setLinenum method (C#)</A>
+ <LI><A HREF="treecc.html#IDX91">setLinenum method (C++)</A>
+ <LI><A HREF="treecc.html#IDX108">setLinenum method (Java)</A>
+ <LI><A HREF="treecc.html#IDX29">singletons option</A>
+ <LI><A HREF="treecc.html#IDX42">state_type option</A>
+ <LI><A HREF="treecc.html#IDX48">strip_filenames option</A>
+ <LI><A HREF="treecc.html#IDX5">Syntax</A>
+ </DIR>
+ <H2><A NAME="cindex_t">t</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX27">track_lines option</A>
+ <LI><A HREF="treecc.html#IDX20">trigger parameters</A>
+ <LI><A HREF="treecc.html#IDX12">Types</A>
+ </DIR>
+ <H2><A NAME="cindex_v">v</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX35">virtual_factory option</A>
+ </DIR>
+ <H2><A NAME="cindex_y">y</A></H2>
+ <DIR>
+ <LI><A HREF="treecc.html#IDX76">yycurrfilename function</A>
+ <LI><A HREF="treecc.html#IDX77">yycurrlinenum function</A>
+ <LI><A HREF="treecc.html#IDX72">yygetfilename macro</A>
+ <LI><A HREF="treecc.html#IDX73">yygetlinenum macro</A>
+ <LI><A HREF="treecc.html#IDX71">yyisa macro</A>
+ <LI><A HREF="treecc.html#IDX69">yykind macro</A>
+ <LI><A HREF="treecc.html#IDX70">yykindname macro</A>
+ <LI><A HREF="treecc.html#IDX79">yynodealloc function</A>
+ <LI><A HREF="treecc.html#IDX82">yynodeclear function</A>
+ <LI><A HREF="treecc.html#IDX83">yynodefailed function</A>
+ <LI><A HREF="treecc.html#IDX78">yynodeinit function</A>
+ <LI><A HREF="treecc.html#IDX81">yynodepop function</A>
+ <LI><A HREF="treecc.html#IDX80">yynodepush function</A>
+ <LI><A HREF="treecc.html#IDX74">yysetfilename macro</A>
+ <LI><A HREF="treecc.html#IDX75">yysetlinenum macro</A>
+ </DIR>
+ 
+ 
+ <P><HR><P>
+ This document was generated on 11 June 2002 using
+ <A HREF="http://wwwinfo.cern.ch/dis/texi2html/">texi2html</A>&nbsp;1.56k.
+ </BODY>
+ </HTML>


ossp-adm/autotools/treecc.pdf is a binary file


ossp-adm/autotools/yacc.pdf is a binary file

CVSTrac 2.0.1