readline-7.0/000775 000436 000024 00000000000 12764322765 013244 5ustar00chetstaff000000 000000 readline-7.0/doc/000775 000436 000024 00000000000 12764322772 014007 5ustar00chetstaff000000 000000 readline-7.0/examples/000775 000436 000024 00000000000 12764322771 015057 5ustar00chetstaff000000 000000 readline-7.0/support/000775 000436 000024 00000000000 12764322766 014761 5ustar00chetstaff000000 000000 readline-7.0/shlib/000775 000436 000024 00000000000 12764322766 014346 5ustar00chetstaff000000 000000 readline-7.0/COPYING000644 000436 000000 00000104513 11050304560 014250 0ustar00chetwheel000000 000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. 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. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey 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; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If 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 convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU 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 that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. 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. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS 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. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 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 3 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, see . Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: Copyright (C) This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . The GNU 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 Lesser General Public License instead of this License. But first, please read . readline-7.0/README000664 000436 000024 00000017534 12545254534 014131 0ustar00chetstaff000000 000000 Introduction ============ This is the Gnu Readline library, version 7.0. The Readline library provides a set of functions for use by applications that allow users to edit command lines as they are typed in. Both Emacs and vi editing modes are available. The Readline library includes additional functions to maintain a list of previously-entered command lines, to recall and perhaps reedit those lines, and perform csh-like history expansion on previous commands. The history facilites are also placed into a separate library, the History library, as part of the build process. The History library may be used without Readline in applications which desire its capabilities. The Readline library is free software, distributed under the terms of the [GNU] General Public License as published by the Free Software Foundation, version 3 of the License. For more information, see the file COPYING. To build the library, try typing `./configure', then `make'. The configuration process is automated, so no further intervention should be necessary. Readline builds with `gcc' by default if it is available. If you want to use `cc' instead, type CC=cc ./configure if you are using a Bourne-style shell. If you are not, the following may work: env CC=cc ./configure Read the file INSTALL in this directory for more information about how to customize and control the build process. The file rlconf.h contains C preprocessor defines that enable and disable certain Readline features. The special make target `everything' will build the static and shared libraries (if the target platform supports them) and the examples. Examples ======== There are several example programs that use Readline features in the examples directory. The `rl' program is of particular interest. It is a command-line interface to Readline, suitable for use in shell scripts in place of `read'. Shared Libraries ================ There is skeletal support for building shared versions of the Readline and History libraries. The configure script creates a Makefile in the `shlib' subdirectory, and typing `make shared' will cause shared versions of the Readline and History libraries to be built on supported platforms. If `configure' is given the `--enable-shared' option, it will attempt to build the shared libraries by default on supported platforms. Configure calls the script support/shobj-conf to test whether or not shared library creation is supported and to generate the values of variables that are substituted into shlib/Makefile. If you try to build shared libraries on an unsupported platform, `make' will display a message asking you to update support/shobj-conf for your platform. If you need to update support/shobj-conf, you will need to create a `stanza' for your operating system and compiler. The script uses the value of host_os and ${CC} as determined by configure. For instance, FreeBSD 4.2 with any version of gcc is identified as `freebsd4.2-gcc*'. In the stanza for your operating system-compiler pair, you will need to define several variables. They are: SHOBJ_CC The C compiler used to compile source files into shareable object files. This is normally set to the value of ${CC} by configure, and should not need to be changed. SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create position-independent code. If you are using gcc, this should probably be set to `-fpic'. SHOBJ_LD The link editor to be used to create the shared library from the object files created by $SHOBJ_CC. If you are using gcc, a value of `gcc' will probably work. SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation. If you are using gcc, `-shared' may be all that is necessary. These should be the flags needed for generic shared object creation. SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library creation. Many systems use the -R option to the link editor to embed a path within the library for run-time library searches. A reasonable value for such systems would be `-R$(libdir)'. SHLIB_LIBS Any additional libraries that shared libraries should be linked against when they are created. SHLIB_LIBPREF The prefix to use when generating the filename of the shared library. The default is `lib'; Cygwin uses `cyg'. SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when generating the filename of the shared library. Many systems use `so'; HP-UX uses `sl'. SHLIB_LIBVERSION The string to append to the filename to indicate the version of the shared library. It should begin with $(SHLIB_LIBSUFF), and possibly include version information that allows the run-time loader to load the version of the shared library appropriate for a particular program. Systems using shared libraries similar to SunOS 4.x use major and minor library version numbers; for those systems a value of `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate. Systems based on System V Release 4 don't use minor version numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems. Other Unix versions use different schemes. SHLIB_DLLVERSION The version number for shared libraries that determines API compatibility between readline versions and the underlying system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but can be overridden at configuration time by defining DLLVERSION in the environment. SHLIB_DOT The character used to separate the name of the shared library from the suffix and version information. The default is `.'; systems like Cygwin which don't separate version information from the library name should set this to the empty string. SHLIB_STATUS Set this to `supported' when you have defined the other necessary variables. Make uses this to determine whether or not shared library creation should be attempted. You should look at the existing stanzas in support/shobj-conf for ideas. Once you have updated support/shobj-conf, re-run configure and type `make shared'. The shared libraries will be created in the shlib subdirectory. If shared libraries are created, `make install' will install them. You may install only the shared libraries by running `make install-shared' from the top-level build directory. Running `make install' in the shlib subdirectory will also work. If you don't want to install any created shared libraries, run `make install-static'. Documentation ============= The documentation for the Readline and History libraries appears in the `doc' subdirectory. There are three texinfo files and a Unix-style manual page describing the facilities available in the Readline library. The texinfo files include both user and programmer's manuals. HTML versions of the manuals appear in the `doc' subdirectory as well. Usage ===== Our position on the use of Readline through a shared-library linking mechanism is that there is no legal difference between shared-library linking and static linking--either kind of linking combines various modules into a single larger work. The conditions for using Readline in a larger work are stated in section 3 of the GNU GPL. Reporting Bugs ============== Bug reports for Readline should be sent to: bug-readline@gnu.org When reporting a bug, please include the following information: * the version number and release status of Readline (e.g., 4.2-release) * the machine and OS that it is running on * a list of the compilation flags or the contents of `config.h', if appropriate * a description of the bug * a recipe for recreating the bug reliably * a fix for the bug if you have one! If you would like to contact the Readline maintainer directly, send mail to bash-maintainers@gnu.org. Since Readline is developed along with bash, the bug-bash@gnu.org mailing list (mirrored to the Usenet newsgroup gnu.bash.bug) often contains Readline bug reports and fixes. Chet Ramey chet.ramey@case.edu readline-7.0/MANIFEST000664 000436 000024 00000005434 12346113534 014367 0ustar00chetstaff000000 000000 # # Master distribution manifest for the standalone readline distribution # doc d examples d examples/autoconf d examples/rlfe d support d shlib d COPYING f README f MANIFEST f INSTALL f CHANGELOG f CHANGES f NEWS f USAGE f aclocal.m4 f config.h.in f configure f configure.ac f Makefile.in f readline.pc.in f ansi_stdlib.h f chardefs.h f colors.h f history.h f histlib.h f keymaps.h f parse-colors.h f posixdir.h f posixjmp.h f posixselect.h f posixstat.h f readline.h f rlconf.h f rldefs.h f rlmbutil.h f rlprivate.h f rlshell.h f rlstdc.h f rltty.h f rltypedefs.h f rlwinsize.h f tcap.h f tilde.h f xmalloc.h f bind.c f callback.c f colors.c f compat.c f complete.c f display.c f emacs_keymap.c f funmap.c f input.c f isearch.c f keymaps.c f kill.c f macro.c f mbutil.c f misc.c f nls.c f parens.c f parse-colors.c f readline.c f rltty.c f savestring.c f search.c f shell.c f signals.c f terminal.c f text.c f tilde.c f undo.c f util.c f vi_keymap.c f vi_mode.c f xfree.c f xmalloc.c f history.c f histexpand.c f histfile.c f histsearch.c f patchlevel f shlib/Makefile.in f support/config.guess f support/config.rpath f support/config.sub f support/install.sh f support/mkdirs f support/mkdist f support/mkinstalldirs f support/shobj-conf f support/shlib-install f support/wcwidth.c f doc/Makefile.in f doc/texinfo.tex f doc/version.texi f doc/fdl.texi f doc/rlman.texi f doc/rltech.texi f doc/rluser.texi f doc/rluserman.texi f doc/history.texi f doc/hstech.texi f doc/hsuser.texi f doc/readline.3 f doc/history.3 f doc/texi2dvi f doc/texi2html f examples/Makefile.in f examples/excallback.c f examples/fileman.c f examples/manexamp.c f examples/readlinebuf.h f examples/rl-fgets.c f examples/rlbasic.c f examples/rlcat.c f examples/rlevent.c f examples/rltest.c f examples/rl-callbacktest.c f examples/rl.c f examples/rlptytest.c f examples/rlversion.c f examples/histexamp.c f examples/hist_erasedups.c f examples/hist_purgecmd.c f examples/Inputrc f examples/autoconf/BASH_CHECK_LIB_TERMCAP f examples/autoconf/RL_LIB_READLINE_VERSION f examples/autoconf/wi_LIB_READLINE f examples/rlfe/ChangeLog f examples/rlfe/Makefile.in f examples/rlfe/README f examples/rlfe/config.h.in f examples/rlfe/configure f examples/rlfe/configure.in f examples/rlfe/extern.h f examples/rlfe/os.h f examples/rlfe/pty.c f examples/rlfe/rlfe.c f examples/rlfe/screen.h f examples/rlwrap-0.30.tar.gz f # formatted documentation, from MANIFEST.doc doc/readline.ps f doc/history.ps f doc/rluserman.ps f doc/readline.dvi f doc/history.dvi f doc/rluserman.dvi f doc/readline.info f doc/history.info f doc/rluserman.info f doc/readline.html f doc/history.html f doc/rluserman.html f doc/readline.0 f doc/history.0 f doc/readline_3.ps f doc/history_3.ps f doc/history.pdf f doc/readline.pdf f doc/rluserman.pdf f readline-7.0/INSTALL000664 000436 000024 00000030020 12545254551 014262 0ustar00chetstaff000000 000000 Basic Installation ================== These are installation instructions for Readline-7.0. The simplest way to compile readline is: 1. `cd' to the directory containing the readline source code and type `./configure' to configure readline for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes some time. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile readline and build the static readline and history libraries. If supported, the shared readline and history libraries will be built also. See below for instructions on compiling the other parts of the distribution. Typing `make everything' will cause the static and shared libraries (if supported) and the example programs to be built. 3. Type `make install' to install the static readline and history libraries, the readline include files, the documentation, and, if supported, the shared readline and history libraries. 4. You can remove the created libraries and object files from the build directory by typing `make clean'. To also remove the files that `configure' created (so you can compile readline for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the readline developers, and should be used with care. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in the build directory, and Makefiles in the `doc', `shlib', and `examples' subdirectories. It also creates a `config.h' file containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, a file `config.cache' that saves the results of its tests to speed up reconfiguring, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). If you need to do unusual things to compile readline, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to so they can be considered for the next release. If at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.in' is used to create `configure' by a program called `autoconf'. You only need `configure.in' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The readline `configure.in' requires autoconf version 2.50 or newer. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. You can give `configure' initial values for variables by setting them in the environment. Using a Bourne-compatible shell, you can do that on the command line like this: CC=c89 CFLAGS=-O2 LIBS=-lposix ./configure Or on systems that have the `env' program, you can do it like this: env CPPFLAGS=-I/usr/local/include LDFLAGS=-s ./configure Compiling For Multiple Architectures ==================================== You can compile readline for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not supports the `VPATH' variable, you have to compile readline for one architecture at a time in the source code directory. After you have installed readline for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the readline libraries in `/usr/local/lib', the include files in `/usr/local/include/readline', the man pages in `/usr/local/man', and the info files in `/usr/local/info'. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH' or by supplying a value for the DESTDIR variable when running `make install'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the readline Makefiles will use PATH as the prefix for installing the libraries. Documentation and other data files will still use the regular prefix. Specifying the System Type ========================== There may be some features `configure' can not figure out automatically, but need to determine by the type of host readline will run on. Usually `configure' can figure that out, but if it prints a message saying it can not guess the host type, give it the `--host=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name with three fields: CPU-COMPANY-SYSTEM (e.g., i386-unknown-freebsd4.2). See the file `config.sub' for the possible values of each field. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: the readline `configure' looks for a site script, but not all `configure' scripts do. Operation Controls ================== `configure' recognizes the following options to control how it operates. `--cache-file=FILE' Use and save the results of the tests in FILE instead of `./config.cache'. Set FILE to `/dev/null' to disable caching, for debugging `configure'. `--help' Print a summary of the options to `configure', and exit. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--version' Print the version of Autoconf used to generate the `configure' script, and exit. `configure' also accepts some other, not widely useful, options. Optional Features ================= The readline `configure' recognizes a single `--with-PACKAGE' option: `--with-curses' This tells readline that it can find the termcap library functions (tgetent, et al.) in the curses library, rather than a separate termcap library. Readline uses the termcap functions, but does not link with the termcap or curses library itself, allowing applications which link with readline the to choose an appropriate library. This option tells readline to link the example programs with the curses library rather than libtermcap. `configure' also recognizes two `--enable-FEATURE' options: `--enable-shared' Build the shared libraries by default on supported platforms. The default is `yes'. `--enable-static' Build the static libraries by default. The default is `yes'. Shared Libraries ================ There is support for building shared versions of the readline and history libraries. The configure script creates a Makefile in the `shlib' subdirectory, and typing `make shared' will cause shared versions of the readline and history libraries to be built on supported platforms. If `configure' is given the `--enable-shared' option, it will attempt to build the shared libraries by default on supported platforms. Configure calls the script support/shobj-conf to test whether or not shared library creation is supported and to generate the values of variables that are substituted into shlib/Makefile. If you try to build shared libraries on an unsupported platform, `make' will display a message asking you to update support/shobj-conf for your platform. If you need to update support/shobj-conf, you will need to create a `stanza' for your operating system and compiler. The script uses the value of host_os and ${CC} as determined by configure. For instance, FreeBSD 4.2 with any version of gcc is identified as `freebsd4.2-gcc*'. In the stanza for your operating system-compiler pair, you will need to define several variables. They are: SHOBJ_CC The C compiler used to compile source files into shareable object files. This is normally set to the value of ${CC} by configure, and should not need to be changed. SHOBJ_CFLAGS Flags to pass to the C compiler ($SHOBJ_CC) to create position-independent code. If you are using gcc, this should probably be set to `-fpic'. SHOBJ_LD The link editor to be used to create the shared library from the object files created by $SHOBJ_CC. If you are using gcc, a value of `gcc' will probably work. SHOBJ_LDFLAGS Flags to pass to SHOBJ_LD to enable shared object creation. If you are using gcc, `-shared' may be all that is necessary. These should be the flags needed for generic shared object creation. SHLIB_XLDFLAGS Additional flags to pass to SHOBJ_LD for shared library creation. Many systems use the -R option to the link editor to embed a path within the library for run-time library searches. A reasonable value for such systems would be `-R$(libdir)'. SHLIB_LIBS Any additional libraries that shared libraries should be linked against when they are created. SHLIB_LIBPREF The prefix to use when generating the filename of the shared library. The default is `lib'; Cygwin uses `cyg'. SHLIB_LIBSUFF The suffix to add to `libreadline' and `libhistory' when generating the filename of the shared library. Many systems use `so'; HP-UX uses `sl'. SHLIB_LIBVERSION The string to append to the filename to indicate the version of the shared library. It should begin with $(SHLIB_LIBSUFF), and possibly include version information that allows the run-time loader to load the version of the shared library appropriate for a particular program. Systems using shared libraries similar to SunOS 4.x use major and minor library version numbers; for those systems a value of `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' is appropriate. Systems based on System V Release 4 don't use minor version numbers; use `$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' on those systems. Other Unix versions use different schemes. SHLIB_DLLVERSION The version number for shared libraries that determines API compatibility between readline versions and the underlying system. Used only on Cygwin. Defaults to $SHLIB_MAJOR, but can be overridden at configuration time by defining DLLVERSION in the environment. SHLIB_DOT The character used to separate the name of the shared library from the suffix and version information. The default is `.'; systems like Cygwin which don't separate version information from the library name should set this to the empty string. SHLIB_STATUS Set this to `supported' when you have defined the other necessary variables. Make uses this to determine whether or not shared library creation should be attempted. If shared libraries are not supported, this will be set to `unsupported'. You should look at the existing stanzas in support/shobj-conf for ideas. Once you have updated support/shobj-conf, re-run configure and type `make shared' or `make'. The shared libraries will be created in the shlib subdirectory. If shared libraries are created, `make install' will install them. You may install only the shared libraries by running `make install-shared' from the top-level build directory. Running `make install' in the shlib subdirectory will also work. If you don't want to install any created shared libraries, run `make install-static'. readline-7.0/CHANGELOG000664 000436 000024 00000101275 12650434275 014456 0ustar00chetstaff000000 000000 [Readline-specific changelog. Descriptions of changes to the source are found in the bash changelog.] 6/9 --- Makefile.in - quote value of ${INSTALL_DATA} when passing it to makes in subdirectories 7/1 --- Makefile.in - don't pass INSTALL_DATA to a make in the `doc' subdirectory; let autoconf set the value itself in the Makefile - removed a stray `-' before $(RANLIB) in the `install' recipe doc/Makefile.in - add a VPATH assignment so the documentation is not remade if it's already up-to-date in the distribution configure.in - call AC_SUBST(LOCAL_LDFLAGS), since Makefile.in contains @LOCAL_LDFLAGS@ 7/9 --- config.h.in - add define lines for STRUCT_WINSIZE_IN_SYS_IOCTL and STRUCT_WINSIZE_IN_TERMIOS configure.in - call BASH_STRUCT_WINSIZE to look for the definition of `struct winsize' 7/17 ---- configure.in - call AC_MINIX config.h.in - add define line for AC_MINIX 7/18 ---- Makefile.in - add `install-shared' and `uninstall-shared' targets 8/4 --- Makefile.in - install and uninstall libhistory.a in the `install' and `uninstall' targets 9/4 --- configure.in - bumped LIBVERSION up to 2.1.1, indicating that this is patch level 1 to release 2.1 9/16 ---- Makefile.in - `make distclean' now descends into the `examples' subdir doc/Makefile.in - the `distclean' and `maintainer-clean' targets should remove Makefile examples/Makefile.in - added the various clean targets 4/2 --- configure.in - bumped LIBVERSION up to 2.2 4/18 ---- [readline-2.2 released] 4/20 ---- Makefile.in - make `libhistory.a' a dependency of `install' - fixed a typo in the recipe for `install' that copied libreadline.a to libhistory.old right after installing it 4/27 ---- doc/Makefile.in - install {readline,history}.info out of the source directory if they are not found in the current (build) directory -- only an issue if the libraries are built in a different directory than the source directory 5/1 --- support/shobj-conf - script from the bash distribution to do shared object and library configuration shlib/Makefile.in - new directory and makefile to handle building shared versions of libreadline and libhistory, controlled by support/shobj-conf 5/7 --- doc/Makefile.in - set SHELL to /bin/sh, rather than relying on make to be correct 5/14 ---- savestring.c - new file, moved from shell.c, for backwards compatibility Makefile.in, shlib/Makefile.in - make sure savestring.c is compiled and added to libreadline and libhistory [THERE ARE NO MORE #ifdef SHELL LINES IN THE C SOURCE FILES.] 5/15 ---- README - updated description of shared library creation for the new scheme [THERE ARE NO MORE #ifdef SHELL LINES IN ANY OF THE SOURCE FILES.] Makefile.in - bumped SHLIB_MAJOR up to 4 since we've augmented the library API - rlconf.h is now one of the installed headers, so applications can find out whether things like vi-mode are available in the installed libreadline 5/20 ---- configure.in - changed RL_LIBRARY_VERSION to 4.0 to match the version of the installed shared libraries 6/5 --- rlstdc.h - new file Makefile.in - rlstdc.h is now one of the installed headers 8/3 --- shlib/Makefile.in - made the suffix rule that creates xx.so from xx.c write the compiler output to `a.o', which is then mv'd to xx.so, because some compilers (Sun WSpro 4.2, for example) don't allow any suffixes other than `.o' for `cc -c' (not even `a.out') 9/15 ---- Makefile.in - AR and ARFLAGS are now substituted by configure, used in recipes that build the libraries configure.in - use AC_CHECK_PROG to check for ar - set ARFLAGS if it has not already been set in the environment 10/5 ---- Makefile.in - removed savestring.o from object file list 10/28 ----- shlib/Makefile.in - don't use a fixed filename in the .c.so suffix rule to avoid problems with parallel makes 12/21 ----- support/shlib-install - new script to install shared readline and history libraries shlib/Makefile.in - changed to call shlib-install for install and uninstall targets [readline-4.0-beta1 frozen] 12/22 ----- configure.in - call AC_SUBST for SHOBJ_XLDFLAGS and SHLIB_LIBS shlib/Makefile.in - SHOBJ_XLDFLAGS and SHLIB_LIBS are now substituted by configure - add $(SHLIB_LIBS) at end of command line that builds the shared libraries (currently needed only by AIX 4.2) 12/31 ----- MANIFEST, MANIFEST.doc - the TOC html files are no longer generated and no longer part of the distribution 2/18/1999 --------- configure.in - set MAKE_SHELL to /bin/sh and substitute into the Makefiles Makefile.in,{doc,examples,shlib}/Makefile.in - set SHELL from @MAKE_SHELL@ [readline-4.0 released] 3/11 ---- doc/Makefile.in - removed references to HTMLTOC, since separate HTML table-of-contents files are no longer created examples/Makefile.in - remove `*.exe' in clean target for MS-DOS Makefile.in - make `readline' target depend on ./libreadline.a - configure now substitutes TERMCAP_LIB into Makefile.in - use ${TERMCAP_LIB} instead of -ltermcap in recipe for `readline' - clean target now removes readline and readline.exe in case they get built configure.in - use `pwd.exe' to set BUILD_DIR on MS-DOS DJGPP 3/15 ---- support/shlib-install - Irix 5.x and Irix 6.x should install shared libraries like Solaris 2 - changes for installing on hp-ux 1[01].x 3/23 ---- configure.in - make sure that the $CC argument to shobj-conf is quoted 4/8 --- xmalloc.h, rlprivate.h, rlshell.h - new files Makefile.in,shlib/Makefile.in - add dependencies on xmalloc.h, rlshell.h - add xmalloc.h, rlprivate.h, rlshell.h to list of header files MANIFEST - add xmalloc.h, rlprivate.h, rlshell.h 4/9 --- Makefile.in,shlib/Makefile.in - add dependencies on rlprivate.h 4/13 ---- doc/Makefile.in - add variable, PSDVI, which is the desired resolution of the generated postscript files. Set to 300 because I don't have any 600-dpi printers - set LANGUAGE= before calling makeinfo, so messages are in English - add rluserman.{info,dvi,ps,html} to appropriate variables - add rules to create rluserman.{info,dvi,ps,html} - install and uninstall rluserman.info, but don't update the directory file in $(infodir) yet MANIFEST - add doc/rluserman.{texinfo,info,dvi,ps,html} 4/30 ---- configure.in - updated library version to 4.1 5/3 --- configure.in - SHLIB_MAJOR and SHLIB_MINOR shared library version numbers are constructed from $LIBRARY_VERSION and substituted into Makefiles 5/5 --- support/shlib-install - OSF/1 installs shared libraries like Solaris Makefile.in - broke the header file install and uninstall into two new targets: install-headers and uninstall-headers - install and uninstall depend on install-headers and uninstall-headers respectively - changed install-shared and uninstall-shared targets to depend on install-headers and uninstall-headers, respectively, so users may choose to install only the shared libraries. I'm not sure about the uninstall one yet -- maybe it should check whether or not the static libraries are installed and not remove the header files if they are 9/3 --- configure.in, config.h.in - added test for memmove (for later use) - changed version to 4.1-beta1 9/13 ---- examples/rlfe.c - Per Bothner's `rlfe' readline front-end program examples/Makefile.in - added rules to build rlfe 9/21 ---- support/shlib-install - changes to handle FreeBSD-3.x elf or a.out shared libraries, which have different semantics and need different naming conventions 1/24/2000 --------- doc/Makefile.in - remove *.bt and *.bts on `make clean' 2/4 --- configure.in - changed LIBVERSION to 4.1-beta5 3/17/2000 --------- [readline-4.1 released] 3/23 ---- Makefile.in - remove the `-t' argument to ranlib in the install recipe; some ranlibs don't have it and attempt to create a file named `-t' 3/27 ---- support/shlib-install - install shared libraries unwritable by anyone on HP-UX - changed symlinks to relative pathnames on all platforms shlib/Makefile.in - added missing `includedir' assignment, substituted by configure Makefile.in - added missing @SET_MAKE@ so configure can set $MAKE appropriately configure.in - add call to AC_PROG_MAKE_SET 8/30 ---- shlib/Makefile.in - change the soname bound into the shared libraries, so it includes only the major version number. If it includes the minor version, programs depending on it must be rebuilt (which may or may not be a bad thing) 9/6 --- examples/rlfe.c - add -l option to log input and output (-a option appends to logfile) - add -n option to set readline application name - add -v, -h options for version and help information - change a few things because getopt() is now used to parse arguments 9/12 ---- support/shlib-install - fix up the libname on HPUX 11 10/18 ----- configure.in - changed library version to 4.2-alpha 10/30 ----- configure.in - add -fsigned-char to LOCAL_CFLAGS for Linux running on the IBM S/390 Makefile.in - added new file, rltypedefs.h, installed by default with `make install' 11/2 ---- compat.c - new file, with backwards-compatibility function definitions Makefile.in,shlib/Makefile.in - make sure that compat.o/compat.so are built and linked apppropriately support/shobj-conf - picked up bash version, which means that shared libs built on linux and BSD/OS 4.x will have an soname that does not include the minor version number 11/13 ----- examples/rlfe.c - rlfe can perform filename completion for relative pathnames in the inferior process's context if the OS supports /proc/PID/cwd (linux does it OK, Solaris is slightly warped, none of the BSDs have it) 11/17/2000 ---------- [readline-4.2-alpha released] 11/27 ----- Makefile.in,shlib/Makefile.in - added dependencies for rltypedefs.h shlib/Makefile.in - changed dependencies on histlib.h to $(topdir)/histlib.h 1/22 ---- configure.in - changed release version to 4.2-beta 2/2 --- examples/Makefile.in - build histexamp as part of the examples 2/5 --- doc/Makefile.in - don't remove the dvi, postscript, html, info, and text `objects' on a `make distclean', only on a `make maintainer-clean' 3/6 --- doc/history.{0,3}, doc/history_3.ps - new manual page for history library doc/Makefile.in - rules to install and uninstall history.3 in ${man3dir} - rules to build history.0 and history_3.ps 4/2 --- configure.in - changed LIBVERSION to `4.2' 4/5 --- [readline-4.2 frozen] 4/9 --- [readline-4.2 released] 5/2 --- Makefile.in,{doc,examples,shlib}/Makefile.in - added support for DESTDIR installation root prefix, to support building packages doc/Makefile.in - add an info `dir' file entry for rluserman.info on `make install' - change man1ext to `.1' and man3ext to `.3' - install man pages with a $(man3ext) extension in the target directory - add support for installing html documentation if `htmldir' has a value Makefile.in - on `make install', install from the `shlib' directory, too - on `make uninstall', uninstall in the `doc' and `shlib' subdirectories, too support/shlib-install - add `freebsdelf*', `freebsdaout*', Hurd, `sysv4*', `sysv5*', `dgux*' targets for symlink creation 5/7 --- configure.in, config.h.in - check for , define HAVE_LIMITS_H if found 5/8 --- aclocal.m4 - pick up change to BASH_CHECK_LIB_TERMCAP that adds check for libtinfo (termcap-specific portion of ncurses-5.2) 5/9 --- configure.in - call AC_C_CONST to find out whether or not the compiler supports `const' config.h.in - placeholder for `const' define, if any 5/10 ---- configure.in - fix AC_CHECK_PROG(ar, ...) test to specify right value for the case where ar is not found; should produce a better error message 5/14 ---- configure.in,config.h.in - check for vsnprintf, define HAVE_VSNPRINTF if found 5/21 ---- configure.in, config.h.in - add checks for size_t, ssize_t 5/30 ---- configure.in - update autoconf to version 2.50, use in AC_PREREQ - changed AC_INIT to new flavor - added AC_CONFIG_SRCDIR - AC_CONFIG_HEADER -> AC_CONFIG_HEADERS - call AC_C_PROTOTYPES - AC_RETSIGTYPE -> AC_TYPE_SIGNAL 8/22 ---- configure.in - updated the version number to 4.2a Makefile.in,shlib/Makefile.in - make sure tilde.o is built -DREADLINE_LIBRARY when being built as part of the standalone library, so it picks up the right include files 8/23 ---- support/shlib-install - support for Darwin/MacOS X shared library installation 9/24 ---- examples/readlinebuf.h - a new file, a C++ streambuf interface that uses readline for I/O. Donated by Dimitris Vyzovitis 10/9 ---- configure.in - replaced call to BASH_HAVE_TIOCGWINSZ with AC_HEADER_TIOCGWINSZ [readline-4.2a-beta1 frozen] 10/15 ----- configure.in, config.h.in - check for , define HAVE_MEMORY_H if found - check for , define HAVE_STRINGS_H if found 10/18 ----- configure.in, config.h.in - check for isascii, define HAVE_ISASCII if found configure.in - changed the macro names from bash as appropriate: BASH_SIGNAL_CHECK -> BASH_SYS_SIGNAL_VINTAGE BASH_REINSTALL_SIGHANDLERS -> BASH_SYS_REINSTALL_SIGHANDLERS BASH_MISC_SPEED_T -> BASH_CHECK_SPEED_T 10/22 ----- configure.in - check for isxdigit with AC_CHECK_FUNCS config.h.in - new define for HAVE_ISXDIGIT 10/29 ----- configure.in, config.h.in - check for strpbrk with AC_CHECK_FUNCS, define HAVE_STRPBRK if found 11/1 ---- Makefile.in - make sure DESTDIR is passed to install and uninstall makes in subdirectories - when saving old copies of installed libraries, make sure we use DESTDIR for the old installation tree [readline-4.2a-rc1 frozen] 11/2 ---- Makefile.in, shlib/Makefile.in - don't put -I$(includedir) into CFLAGS 11/15 ----- [readline-4.2a released] 11/20 ----- examples/rlcat.c - new file examples/Makefile.in - changes for rlcat 11/28 ----- configure.in - default TERMCAP_LIB to -lcurses if $prefer_curses == yes (as when --with-curses is supplied) examples/Makefile.in - substitute @LDFLAGS@ in LDFLAGS assignment 11/29 ----- config.h.in - add necessary defines for multibyte include files and functions - add code to define HANDLE_MULTIBYTE if prerequisites are met configure.in - call BASH_CHECK_MULTIBYTE 12/14 ----- config.h.in - add #undef PROTOTYPES, filled in by AC_C_PROTOTYPES 12/17 ----- config.h.in - moved HANDLE_MULTIBYTE code to rlmbutil.h rlmbutil.h, mbutil.c - new files Makefile.in, shlib/Makefile.in - added rules for mbutil.c 12/20 ----- configure.in - added --enable-shared, --enable-static options to configure to say which libraries are built by default (both default to yes) - if SHLIB_STATUS == 'unsupported', turn off default shared library building - substitute new STATIC_TARGET, SHARED_TARGET, STATIC_INSTALL_TARGET, and SHARED_INSTALL_TARGET Makefile.in - `all' target now depends on (substituted) @STATIC_TARGET@ and @SHARED_TARGET@ - `install' target now depends on (substituted) @STATIC_INSTALL_TARGET@ and @SHARED_INSTALL_TARGET@ INSTALL, README - updated with new info about --enable-shared and --enable-static 1/10/2002 --------- configure.in - bumped the library version number to 4.3 1/24 ---- Makefile.in,shlib/Makefile.in - changes for new file, text.c, with character and text handling functions from readline.c 2/20 ---- {configure.config.h}.in - call AC_C_CHAR_UNSIGNED, define __CHAR_UNSIGNED__ if chars are unsigned by default 5/20 ---- doc/Makefile.in - new maybe-clean target that removes the generated documentation if the build directory differs from the source directory - distclean target now depends on maybe-clean 7/17 ---- [readline-4.3 released] 7/18 ---- shlib/Makefile.in - fix bad dependency: text.so: terminal.c, make it depend on text.c 8/7 --- support/shlib-install - break `linux' out into its own stanza: it seems that linux distributions are all moving to the following scheme: libreadline.so.4.3 installed version libreadline.so.4 -> libreadline.so.4.3 symlink libreadline.so -> libreadline.so.4 symlink 10/29 ----- support/shlib-install - change INSTALL_LINK[12] to use `&&' instead of `;' so it only tries the link if the cd succeeds; put ${echo} in there, too - use $LN instead of `ln -s' so it works on machines without symlinks - change special linux stanza to use cd before ln also - change to use $INSTALL_LINK1 and $INSTALL_LINK2 appropriately instead of explicit commands in various stanzas 2/1 --- config.h.in - add HAVE_MBRTOWC and HAVE_MBRLEN - add NO_MULTIBYTE_SUPPORT for new configure argument - add STDC_HEADERS configure.in - new argument --enable-multibyte (enabled by default), allows multibyte support to be turned off even on systems that support it - add check for ansi stdc headers with call to AC_HEADER_STDC 2/3 --- configure.in - add call to BASH_FUNC_CTYPE_NONASCII config.h.in - add CTYPE_NON_ASCII 2/20 ---- doc/manvers.texinfo - renamed to version.texi to match other GNU software - UPDATE-MONTH variable is now `UPDATED-MONTH' doc/{hist,rlman,rluserman}.texinfo - include version.texi doc/{rltech,rluser,hstech,hsuser}.texi - changed the suffix from `texinfo' to `texi' doc/Makefile.in - made appropriate changes for {{rl,hs}tech,{rl,hs}user}.texi doc/{rlman,rluserman}.texinfo - changed the suffix from `texinfo' to `texi' doc/hist.texinfo - renamed to history.texi to be more consistent 6/11 ---- shlib/Makefile.in - have configure substitute value of `@LDFLAGS@' into the assignment to SHLIB_XLDFLAGS 6/16 ---- configure.in - readline and history libraries are now at version 5.0 8/18 ---- support/shlib-install - support for FreeBSD-gnu (from Robert Millan) 12/4 ---- Makefile.in - add variables for localedir and the PACKAGE_* variables, auto-set by configure 12/9 ---- Makefile.in - use mkinstalldirs instead of mkdirs 4/22 ---- Makefile.in - separate doc install/uninstall out into two new targets: install-doc and uninstall-doc - make install-doc and uninstall-doc prerequisites of appropriate install and uninstall targets examples/rl-fgets.c - new example from Harold Levy that wraps fgets replacement functions that call readline in a shared library that can be interposed with LD_PRELOAD 7/27 ---- [readline-5.0 released] 11/15 ----- examples/rlfe/{ChangeLog,Makefile.in,README,config.h.in,configure,configure.in,extern.h,os.h,pty.c,rlfe.c,screen.h} - new version of rlfe, rlfe-0.4, from Per Bothner; now a standalone application 11/16 ----- shlib/Makefile.in - substitute TERMCAP_LIB in from configure configure.in - if SHLIB_LIBS doesn't include a termcap library (curses, ncurses, termcap, termlib), append the value of $TERMCAP_LIB to it 11/30 ----- configure.in - take out change from 11/16; it doesn't work for some systems (e.g., SunOS 4.x and Solaris 2.6) - add support for --enable-purify configure argument - pass TERMCAP_LIB in environment when calling shobj-conf examples/Makefile.in - add support for building examples with purify 1/23/2005 --------- configure.in - set BUILD_DIR to contain backslashes to escape any spaces in the directory name -- this is what make will accept in targets and prerequisites, so it's better than trying to use double quotes 2/25 ---- configure.in - change check for sys/ptem.h to include sys/stream.h if present, to avoid the `present but cannot be compiled' messages on Solaris and SVR4.2 (does anyone still use SVR4.2?) 5/7 --- configure.in - add cross-compiling support from the bash configure.in, which cygwin and mingw have apparently adopted - add check for pwd.h, fcntl.h - add checks for fcntl, kill system calls - add checks for getpw{ent,nam,uid} C library functions - pass a compile-time option through to Makefiles if cross-compiling config.h.in - add HAVE_PWD_H for , HAVE_FCNTL_H for - add HAVE_FCNTL, HAVE_KILL for respective system calls - add HAVE_GETPW{ENT,NAM,UID} for passwd functions Makefile.in,shlib/Makefile.in - @CROSS_COMPILE@ is substituted into DEFS (equal to -DCROSS_COMPILING if bash is being cross-compiled) 8/2 --- examples/Makefile.in - use $(READLINE_LIB) instead of -lreadline to get around MacOS X 10.4's preference for (incompatible) shared libraries over static libraries in the load path 8/11 ---- support/shobj-conf - new variable: SHLIB_LIBPREF, prefix for shared library name (defaults to `lib' - new variable: SHLIB_DLLVERSION, used on Cygwin to set the library version number - new variable: SHLIB_DOT, separator character between library name and suffix and version information (defaults to `.') - new stanza for cygwin to generate windows-compatible dll support/shlib-install - add new option `-b bindir' for systems like cygwin/windows that require it - new stanza for cygwin that installs a dll into $bindir and an implied link library into $libdir configure.in - substitute new variables from shobj-conf shlib/Makefile.in - substitute bindir, SHLIB_DOT, SHLIB_LIBPREF, SHLIB_DLLVERSION from configure - pass `-b $(bindir)' to shlib-install for install and uninstall targets - library names now use $SHLIB_LIBPREF and $SHLIB_DOT INSTALL,README - document new SHLIB_DOT, SHLIB_LIBPREF, and SHLIB_DLLVERSION variables 10/4 ---- [readline-5.1-beta1 frozen] 12/1 ---- configure.in - changed release status to `release' [readline-5.1 frozen] 12/9 ---- [readline-5.1 released] 12/14 ----- examples/rlfe/Makefile.in - add @LIBS@ to LIBS assignment to pick up extra libraries from configure 1/3/2006 -------- support/shlib-install - Install shared libraries with execute bit set on Linux 6/9 --- [readline-5.2-alpha frozen] 6/26 ---- configure.in - set CROSS_COMPILE to the empty string by default, so we don't inherit a random value from the environment 7/8 --- [readline-5.2-alpha released] [readline-5.2-beta released] 9/12 ---- config.h.in - add defines for wcscoll, iswctype, iswupper, iswlower, towupper, towlower functions - replace define for wctomb with one for wcrtomb - add defines for wchar_t, wint_t, wctype_t types 10/11 ----- [readline-5.2 released] 11/9 ---- examples/rlfe/{configure.in,Makefile.in,config.h.in,rlfe.c,pty.c} - portability fixes from Mike Frysinger 11/21 ----- Makefile.in - add `install-examples' and `uninstall-examples' targets examples/Makefile.in - add correct variables to build examples on Windows - add appropriate rules to install and uninstall example sources in $(datadir)/readline 11/27 ----- config.h.in - move #undef of HAVE_STRCOLL out of config.h.in, since autoconf tries to substitute it based on configure tests 4/27/2007 --------- examples/autoconf - new directory with example autoconf macros to detect readline and return information about the installed version 6/13 ---- support/shlib-install - changes to support AIX 5.x shared library installation 3/20/2008 --------- support/shlib-install - add support for NetBSD and Interix shared library installation 4/22 ---- support/wcwidth.c - updated implementation from 2007-05 7/18 ---- support/shlib-install - support for mingw32, contributed by Carlo Bramix 8/4 --- configure.in - changed to readline-6.0 8/18 ---- support/config.{guess,sub} - updated to newer versions from autoconf-2.62 distribution 3/5/2009 -------- support/shlib-install - take a new -V host_vendor argument - add ${host_vendor} to string tested in case statement for symlink creation section - add support for FreeBSD/gentoo, which uses Linux library naming scheme - change FreeBSD symlink rules, since FreeBSD 7+ has only ELF shared libraries. DragonflyBSD rules are the same. Fix from Timothy Redaelli shlib/Makefile.in - add definition of host_vendor, substituted by configure - add -V host_vendor argument to all invocations of shlib-install. Fix from Timothy Redaelli 3/10 ---- configure.in - add call to AC_SYS_LARGEFILE for readdir and largefile support on Linux config.h.in - add _FILE_OFFSET_BITS define 4/19 ---- Makefile.in - add targets for making and installing documentation required by GNU coding standards. Fix from Joseph Myers posixselect.h - pick up from bash. Inspired by Mike Frysinger 10/28 ----- support/shlib-install - decrease the default version of FreeBSD that installs shared libraries to 4.x. Advice from Peter Jeremy 12/18 ----- [readline-6.1-rc1 released] 12/23 ----- doc/Makefile.in - make sure $(topdir) is not ".." before removing all of the formatted documentation in `make distclean'. $(topdir) is set to `..' if readline is being built in the source directory. Fixes problem noticed by THOUMIN Damien 12/29 ----- [readline-6.1 frozen] 2/5/2010 -------- examples/Makefile.in - make sure to install example C files using $(srcdir)/$$f in case we're building outside the source directory. Bug report and fix from Peter Breitenlohner 7/25 ---- xfree.c - new file with xfree() implementation, moved from xmalloc.c 12/28 ----- {examples,shlib}/Makefile.in - Cygwin-based changes from Eric Blake 3/26/2011 --------- Makefile.in - don't ignore failures when building, installing, or cleaning in the shlib subdirectory. Sample patch from Mike Frysinger shlib/Makefile.in - split the install and uninstall targets into install-supported and install-unsupported targets that depend on the value of SHLIB_STATUS 4/2 --- {,shlib}/Makefile.in - add dependency for callback.o/callback.so on xmalloc.h. From Jan Kratochvil {,doc,examples,shlib}/Makefile.in - fix typo: htm target should be html. From Jan Kratochvil - remove `.' from VPATH. From Jan Kratochvil examples/rlfe/configure.in - quote AC_PROGRAM_SOURCE. From Jan Kratochvil 5/17 ---- config.h.in - WCWIDTH_BROKEN: new define, picked up from bash, defined on systems where wcwidth returns 1 for Unicode combining characters 11/28 ----- support/shlib-install - make sure solaris2 systems make the installed shared library executable. ldd warns about it otherwise. Bug and fix from Tim Mooney examples/hist_erasedups.c - new example program, shows how to erase duplicates from the history list examples/hist_purgecmd.c - new example program, shows how to remove all entries matching a string or pattern from the history list 1/12/2012 --------- colors.[ch],parse-colors.[ch]} - new files, part of color infrastructure support Makefile.in,shlib/Makefile.in - arrange to have colors.o and parse-colors.o added to library (static and shared versions) {configure,config.h}.in - check for stdbool.h, define HAVE_STDBOOL_H if found rldefs.h - COLOR_SUPPORT: if defined, compile in colors.c and parse-colors.c for color support 1/18 ---- {configure,config.h}.in - new check: check for AUDIT_USER_TTY defined in , define HAVE_DECL_AUDIT_USER_TTY if both are found 8/7 --- configure.in - AC_CANONICAL_BUILD: call to set the build_xxx variables - use $build_os instead of $host_os to decide when DJGPP should run `pwd.exe' to figure out the build directory. Report and fix from Yao Qi 8/29 ---- configure.ac - new name for configure.in MANIFEST,Makefile.in - configure.in -> configure.ac 1/5/2013 -------- configure.ac - move version number up to 6.3 1/31 ---- configure.ac - use AC_CHECK_TOOL instead of AC_CHECK_PROG to check for ar, since it will find $host-prefixed versions of utilities. Report and fix from Mike Frysinger 3/4 --- Makefile.in - PACKAGE_TARNAME, docdir: new variables substituted by autoconf - OTHER_DOCS,OTHER_INSTALLED_DOCS: new variables with auxiliary documentation files to be installed into $(docdir) - install: add new rule to install $(OTHER_DOCS) - uninstall: add new rule to uninstall $(docdir)/$(OTHER_INSTALLED_DOCS) 4/29 ---- Makefile.in - installdirs: make sure to create $(DESTDIR)$(docdir). Report from 1/27/2014 --------- Makefile.in - install-examples: should not depend on `shared', since the examples themselves are not built using shared libraries. Report from support/shobj-conf - [from bash] darwin: changed the install_name embedded into the shared library to contain only the major version number, not the minor one. The idea is that the minor versions should all be API/ABI compatible, and it is better to link automatically with the latest one. Idea from Max Horn 2/26/2014 --------- [readline-6.3 released] 3/14 ---- shlib/Makefile.in - fix typo in dependency list for vi_mode.so: it should not depend on just $(topdir). Report and fix from Natanael Copa 4/15 ---- {.,shlib,examples}/Makefile.in - make sure $(INCLUDES) appears before $(CPPFLAGS) in the various CFLAGS assignments so readline looks in its own source and build directories (INCLUDES) before some directories specified by the user or builder (CPPFLAGS). Report and fix from Max Horn 6/2 --- config.h.in - use correct symbols: HAVE_STRUCT_DIRENT_D_INO, HAVE_STRUCT_DIRENT_D_FILENO HAVE_STRUCT_DIRENT_D_NAMLEN. They don't really matter, but they are what posixdir.h looks for. Report from Ross Burton 6/11 ---- readline.pc.in - new file, config file for pkgconfig. Patch to add from Jirka Klimes {MANIFEST,configure.ac,Makefile.in} - readline.pc: changes to create file for pkgconfig 10/13 ----- doc/Makefile.in - readline.pdf, history.pdf, rluserman.pdf: use texi2dvi --pdf to generate these. Suggestion from Siep Kroonenberg 11/29 ----- config.h.in - HAVE_PSELECT: define if pselect(2) available configure.ac - check for pselect(2), define HAVE_PSELECT if found 12/29 ----- configure.ac - bump version number up to 6.4 1/6/2015 -------- configure.ac,config.h.in - look for ncurses/termcap.h, define HAVE_NCURSES_TERMCAP_H 4/20 ---- configure.ac - add template definitions set by AC_USE_SYSTEM_EXTENSIONS from a report from Andreas Schwab 4/24 ---- configure.ac,config.h.in - add check for sys/ioctl.h to AC_CHECK_HEADERS, define HAVE_SYS_IOCTL_H if found 5/29 ---- configure.ac - bump library version to 7.0 because of addition of rl_callback_sigcleanup 8/26 ---- configure.ac,Makefile.in,examples/Makefile.in - remove references to purify readline-7.0/CHANGES000664 000436 000024 00000200021 12757055401 014222 0ustar00chetstaff000000 000000 This document details the changes between this version, readline-7.0, and the previous version, readline-6.3. 1. Changes to Readline a. A bug that caused vi-mode `.' to be unable to redo `c', `d', and `y' commands with modifiers was fixed. b. Fixed a bug that caused callback mode to dump core when reading a multiple-key sequence (e.g., arrow keys). c. Fixed a bug that caused the redisplay code to erase some of the line when using horizontal scrolling with incremental search. d. Readline's input handler now performs signal processing if read(2) is interrupted by SIGALRM or SIGVTALRM. e. Fixed a problem with revert-all-at-newline freeing freed memory. f. Clarified the documentation for the history_quotes_inhibit_expansion variable to note that it inhibits scanning for the history comment character and that it only affects double-quoted strings. g. Fixed an off-by-one error in the prompt printed when performing searches. h. Use pselect(2), if available, to wait for input before calling read(2), so a SIGWINCH can interrupt it, since it doesn't interrupt read(2). i. Some memory leaks caused by signals interrupting filename completion have been fixed. j. Reading EOF twice on a non-empty line causes EOF to be returned, rather than the partial line. This can cause partial lines to be executed on SIGHUP, for example. k. Fixed a bug concerning deleting multibyte characters from the search string while performing an incremental search. l. Fixed a bug with tilde expanding directory names in filename completion. m. Fixed a bug that did not allow binding sequences beginning with a `\'. n. Fixed a redisplay bug involving incorrect line wrapping when the prompt contains a multibyte character in the last screen column. o. Fixed a bug that caused history expansion to disregard characters that are documented to delimit a history event specifier without requiring `:'. p. Fixed a bug that could cause reading past the end of a string when reading the value when binding the set of isearch terminators. q. Fixed a bug that caused readline commands that depend on knowing which key invoked them to misbehave when dispatching key sequences that are prefixes of other key bindings. r. Paren matching now works in vi insert mode. s. Colored completion prefixes are now displayed using a different color, less likely to collide with files. t. Fixed a bug that caused vi-mode character search to misbehave when running in callback mode. u. Fixed a bug that caused output to be delayed when input is coming from a macro in vi-mode. v. Fixed a bug that caused the vi-mode `.' command to misbehave when redoing a multi-key key sequence via a macro. w. Fixed a bug that caused problems with applications that supply their own input function when performing completion. x. When read returns -1/EIO when attempting to read a key, return an error instead of line termination back to the caller. y. Updated tty auditing feature based on patch from Red Hat. z. Fixed a bug that could cause the history library to crash on overflows introduced by malicious editing of timestamps in the history file. aa. The history file writing functions only attempt to create and use a backup history file if the history file exists and is a regular file. bb. Fixed an out-of-bounds read in readline's internal tilde expansion interface. cc. Fixed several redisplay bugs with prompt strings containing multibyte and non-visible characters whose physical length is longer than the screen width. dd. Fixed a redisplay bug with prompt strings containing invisible characters whose physical length exceeds the screen width and using incremental search. ee. Readline prints more descriptive error messages when it encounters errors while reading an inputrc file. ff. Fixed a bug in the character insertion code that attempts to optimize typeahead when it reads a character that is not bound to self-insert and resets the key sequence state. gg. When refreshing the line as the result of a key sequence, Readline attempts to redraw only the last line of a multiline prompt. hh. Fixed an issue that caused completion of git commands to display incorrectly when using colored-completion-prefix. ii. Fixed several redisplay bugs having to do with multibyte characters and invisible characters in prompt strings. jj. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was shorter than the mode string. 2. New Features in Readline a. The history truncation code now uses the same error recovery mechansim as the history writing code, and restores the old version of the history file on error. The error recovery mechanism handles symlinked history files. b. There is a new bindable variable, `enable-bracketed-paste', which enables support for a terminal's bracketed paste mode. c. The editing mode indicators can now be strings and are user-settable (new `emacs-mode-string', `vi-cmd-mode-string' and `vi-ins-mode-string' variables). Mode strings can contain invisible character sequences. Setting mode strings to null strings restores the defaults. d. Prompt expansion adds the mode string to the last line of a multi-line prompt (one with embedded newlines). e. There is a new bindable variable, `colored-completion-prefix', which, if set, causes the common prefix of a set of possible completions to be displayed in color. f. There is a new bindable command `vi-yank-pop', a vi-mode version of emacs- mode yank-pop. g. The redisplay code underwent several efficiency improvements for multibyte locales. h. The insert-char function attempts to batch-insert all pending typeahead that maps to self-insert, as long as it is coming from the terminal. i. rl_callback_sigcleanup: a new application function that can clean up and unset any state set by readline's callback mode. Intended to be used after a signal. j. If an incremental search string has its last character removed with DEL, the resulting empty search string no longer matches the previous line. k. If readline reads a history file that begins with `#' (or the value of the history comment character) and has enabled history timestamps, the history entries are assumed to be delimited by timestamps. This allows multi-line history entries. l. Readline now throws an error if it parses a key binding without a terminating `:' or whitespace. m. The default binding for ^W in vi mode now uses word boundaries specified by Posix (vi-unix-word-rubout is bindable command name). n. rl_clear_visible_line: new application-callable function; clears all screen lines occupied by the current visible readline line. o. rl_tty_set_echoing: application-callable function that controls whether or not readline thinks it is echoing terminal output. p. Handle >| and strings of digits preceding and following redirection specifications as single tokens when tokenizing the line for history expansion. q. Fixed a bug with displaying completions when the prefix display length is greater than the length of the completions to be displayed. r. The :p history modifier now applies to the entire line, so any expansion specifying :p causes the line to be printed instead of expanded. s. New application-callable function: rl_pending_signal(): returns the signal number of any signal readline has caught but not yet handled. t. New application-settable variable: rl_persistent_signal_handlers: if set to a non-zero value, readline will enable the readline-6.2 signal handler behavior in callback mode: handlers are installed when rl_callback_handler_install is called and removed removed when a complete line has been read. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.3, and the previous version, readline-6.2. 1. Changes to Readline a. Fixed a bug that did not allow the `dd', `cc', or `yy' vi editing mode commands to work on the entire line. b. Fixed a bug that caused redisplay problems with prompts longer than 128 characters and history searches. c. Fixed a bug that caused readline to try and run code to modify its idea of the screen size in a signal handler context upon receiving a SIGWINCH. d. Fixed a bug that caused the `meta' key to be enabled beyond the duration of an individual call top readline(). e. Added a workaround for a wcwidth bug in Mac OS X that caused readline's redisplay to mishandle zero-width combining characters. f. Fixed a bug that caused readline to `forget' part of a key sequence when a multiple-key sequence caused it to break out of an incremental search. g. Fixed bugs that caused readline to execute code in a signal handler context if interrupted while reading from the file system during completion. h. Fixed a bug that caused readline to `forget' part of a key sequence when reading an unbound multi-character key sequence. i. Fixed a bug that caused Readline's signal handlers to be installed beyond the bounds of a single call to readline(). j. Fixed a bug that caused the `.' command to not redo the most recent `R' command in vi mode. k. Fixed a bug that caused ignoring case in completion matches to result in readline using the wrong match. l. Paren matching now works in vi insert mode. m. Fix menu-completion to make show-all-if-ambiguous and menu-complete-display-prefix work together. n. Fixed a bug that didn't allow the `cc', `dd', or `yy' commands to be redone in vi editing mode. o. Fixed a bug that caused the filename comparison code to not compare multibyte characters correctly when using case-sensitive or case-mapping comparisons. p. Fixed the input reading loop to call the input hook function only when there is no terminal input available. q. Fixed a bug that caused binding a macro to a multi-character key sequence where the sequence and macro value share a common prefix to not perform the macro replacement. r. Fixed several redisplay errors with multibyte characters and prompts containing invisible characters when using horizontal scrolling. s. Fixed a bug that caused redisplay errors when trying to overwrite existing characters using multibyte characters. t. Fixed a bug in vi mode that caused the arrow keys to set the saved last vi-mode command to the wrong value. u. Fixed a bug that caused double-quoted strings to be scanned incorrectly when being used as the value of a readline variable assignment. v. Fixed a bug with vi mode that prevented `.' from repeating a command entered on a previous line (command). w. Fixed a bug that could cause completion to core dump if it was interrupted by a signal. x. Fixed a bug that could cause readline to crash and seg fault attempting to expand an empty history entry. y. Fixed a bug that caused display problems with multi-line prompts containing invisible characters on multiple lines. z. Fixed a bug that caused effects made by undoing changes to a history line to be discarded. 2. New Features in Readline a. Readline is now more responsive to SIGHUP and other fatal signals when reading input from the terminal or performing word completion but no longer attempts to run any not-allowable functions from a signal handler context. b. There are new bindable commands to search the history for the string of characters between the beginning of the line and the point (history-substring-search-forward, history-substring-search-backward) c. Readline allows quoted strings as the values of variables when setting them with `set'. As a side effect, trailing spaces and tabs are ignored when setting a string variable's value. d. The history library creates a backup of the history file when writing it and restores the backup on a write error. e. New application-settable variable: rl_filename_stat_hook: a function called with a filename before using it in a call to stat(2). Bash uses it to expand shell variables so things like $HOME/Downloads have a slash appended. f. New bindable function `print-last-kbd-macro', prints the most-recently- defined keyboard macro in a reusable format. g. New user-settable variable `colored-stats', enables use of colored text to denote file types when displaying possible completions (colored analog of visible-stats). h. New user-settable variable `keyseq-timout', acts as an inter-character timeout when reading input or incremental search strings. i. New application-callable function: rl_clear_history. Clears the history list and frees all readline-associated private data. j. New user-settable variable, show-mode-in-prompt, adds a characters to the beginning of the prompt indicating the current editing mode. k. New application-settable variable: rl_input_available_hook; function to be called when readline needs to check whether there is data available on its input source. The default hook checks rl_instream. l. Readline calls an application-set event hook (rl_signal_event_hook) after it gets a signal while reading input (read returns -1/EINTR but readline does not handle the signal immediately) to allow the application to handle or otherwise note it. Not currently called for SIGHUP or SIGTERM. m. If the user-settable variable `history-size' is set to a value less than 0, the history list size is unlimited. n. When creating shared libraries on Mac OS X, the pathname written into the library (install_name) no longer includes the minor version number. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.2, and the previous version, readline-6.1. 1. Changes to Readline a. Fixed a bug that caused the unconverted filename to be added to the list of completions when the application specified filename conversion functions. b. Fixed a bug that caused the wrong filename to be passed to opendir when the application has specified a filename dequoting function. c. Fixed a bug when repeating a character search in vi mode in the case where there was no search to repeat. d. When show-all-if-ambiguous is set, the completion routines no longer insert a common match prefix that is shorter than the text being completed. e. The full set of vi editing commands may now be used in callback mode. f. Fixed a bug that caused readline to not update its idea of the terminal dimensions while running in `no-echo' mode. h. Fixed a bug that caused readline to dump core if an application called rl_prep_terminal without setting rl_instream. i. Fixed a bug that caused meta-prefixed characters bound to incremental search forward or backward to not be recognized if they were typed subsequently. j. The incremental search code treats key sequences that map to the same functions as (default) ^G, ^W, and ^Y as equivalent to those characters. k. Fixed a bug in menu-complete that caused it to misbehave with large negative argument. l. Fixed a bug that caused vi-mode yank-last-arg to ring the bell when invoked at the end of the line. m. Fixed a bug that made an explicit argument of 0 to yank-last-arg behave as if it were a negative argument. n. Fixed a bug that caused directory names in words to be completed to not be dequoted correctly. 2. New Features in Readline a. The history library does not try to write the history filename in the current directory if $HOME is unset. This closes a potential security problem if the application does not specify a history filename. b. New bindable variable `completion-display-width' to set the number of columns used when displaying completions. c. New bindable variable `completion-case-map' to cause case-insensitive completion to treat `-' and `_' as identical. d. There are new bindable vi-mode command names to avoid readline's case- insensitive matching not allowing them to be bound separately. e. New bindable variable `menu-complete-display-prefix' causes the menu completion code to display the common prefix of the possible completions before cycling through the list, instead of after. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.1, and the previous version, readline-6.0. 1. Changes to Readline a. The SIGWINCH signal handler now avoids calling the redisplay code if one arrives while in the middle of redisplay. b. Changes to the timeout code to make sure that timeout values greater than one second are handled better. c. Fixed a bug in the redisplay code that was triggered by a prompt containing invisible characters exactly the width of the screen. d. Fixed a bug in the redisplay code encountered when running in horizontal scroll mode. e. Fixed a bug that prevented menu completion from properly completing filenames. f. Fixed a redisplay bug caused by a multibyte character causing a line to wrap. g. Fixed a bug that caused key sequences of two characters to not be recognized when a longer sequence identical in the first two characters was bound. h. Fixed a bug that caused history expansion to be attempted on $'...' single-quoted strings. i. Fixed a bug that caused incorrect redisplay when the prompt contained multibyte characters in an `invisible' sequence bracketed by \[ and \]. j. Fixed a bug that caused history expansion to short-circuit after encountering a multibyte character. k. Fixed a bug that caused applications using the callback interface to not react to SIGINT (or other signals) until another character arrived. 2. New Features in Readline a. New bindable function: menu-complete-backward. b. In the vi insertion keymap, C-n is now bound to menu-complete by default, and C-p to menu-complete-backward. c. When in vi command mode, repeatedly hitting ESC now does nothing, even when ESC introduces a bound key sequence. This is closer to how historical vi behaves. d. New bindable function: skip-csi-sequence. Can be used as a default to consume key sequences generated by keys like Home and End without having to bind all keys. e. New application-settable function: rl_filename_rewrite_hook. Can be used to rewite or modify filenames read from the file system before they are compared to the word to be completed. f. New bindable variable: skip-completed-text, active when completing in the middle of a word. If enabled, it means that characters in the completion that match characters in the remainder of the word are "skipped" rather than inserted into the line. g. The pre-readline-6.0 version of menu completion is available as "old-menu-complete" for users who do not like the readline-6.0 version. h. New bindable variable: echo-control-characters. If enabled, and the tty ECHOCTL bit is set, controls the echoing of characters corresponding to keyboard-generated signals. i. New bindable variable: enable-meta-key. Controls whether or not readline sends the smm/rmm sequences if the terminal indicates it has a meta key that enables eight-bit characters. ------------------------------------------------------------------------------- This document details the changes between this version, readline-6.0, and the previous version, readline-5.2. 1. Changes to Readline a. Fixed a number of redisplay errors in environments supporting multibyte characters. b. Fixed bugs in vi command mode that caused motion commands to inappropriately set the mark. c. When using the arrow keys in vi insertion mode, readline allows movement beyond the current end of the line (unlike command mode). d. Fixed bugs that caused readline to loop when the terminal has been taken away and reads return -1/EIO. e. Fixed bugs in redisplay occurring when displaying prompts containing invisible characters. f. Fixed a bug that caused the completion append character to not be reset to the default after an application-specified completion function changed it. g. Fixed a problem that caused incorrect positioning of the cursor while in emacs editing mode when moving forward at the end of a line while using a locale supporting multibyte characters. h. Fixed an off-by-one error that caused readline to drop every 511th character of buffered input. i. Fixed a bug that resulted in SIGTERM not being caught or cleaned up. j. Fixed redisplay bugs caused by multiline prompts with invisible characters or no characters following the final newline. k. Fixed redisplay bug caused by prompts consisting solely of invisible characters. l. Fixed a bug in the code that buffers characters received very quickly in succession which caused characters to be dropped. m. Fixed a bug that caused readline to reference uninitialized data structures if it received a SIGWINCH before completing initialzation. n. Fixed a bug that caused the vi-mode `last command' to be set incorrectly and therefore unrepeatable. o. Fixed a bug that caused readline to disable echoing when it was being used with an output file descriptor that was not a terminal. p. Readline now blocks SIGINT while manipulating internal data structures during redisplay. q. Fixed a bug in redisplay that caused readline to segfault when pasting a very long line (over 130,000 characters). r. Fixed bugs in redisplay when using prompts with no visible printing characters. s. Fixed a bug that caused redisplay errors when using prompts with invisible characters and numeric arguments to a command in a multibyte locale. t. Fixed a bug that caused redisplay errors when using prompts with invisible characters spanning more than two physical screen lines. 2. New Features in Readline a. A new variable, rl_sort_completion_matches; allows applications to inhibit match list sorting (but beware: some things don't work right if applications do this). b. A new variable, rl_completion_invoking_key; allows applications to discover the key that invoked rl_complete or rl_menu_complete. c. The functions rl_block_sigint and rl_release_sigint are now public and available to calling applications who want to protect critical sections (like redisplay). d. The functions rl_save_state and rl_restore_state are now public and available to calling applications; documented rest of readline's state flag values. e. A new user-settable variable, `history-size', allows setting the maximum number of entries in the history list. f. There is a new implementation of menu completion, with several improvements over the old; the most notable improvement is a better `completions browsing' mode. g. The menu completion code now uses the rl_menu_completion_entry_function variable, allowing applications to provide their own menu completion generators. h. There is support for replacing a prefix of a pathname with a `...' when displaying possible completions. This is controllable by setting the `completion-prefix-display-length' variable. Matches with a common prefix longer than this value have the common prefix replaced with `...'. i. There is a new `revert-all-at-newline' variable. If enabled, readline will undo all outstanding changes to all history lines when `accept-line' is executed. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.2, and the previous version, readline-5.1. 1. Changes to Readline a. Fixed a problem that caused segmentation faults when using readline in callback mode and typing consecutive DEL characters on an empty line. b. Fixed several redisplay problems with multibyte characters, all having to do with the different code paths and variable meanings between single-byte and multibyte character redisplay. c. Fixed a problem with key sequence translation when presented with the sequence \M-\C-x. d. Fixed a problem that prevented the `a' command in vi mode from being undone and redone properly. e. Fixed a problem that prevented empty inserts in vi mode from being undone properly. f. Fixed a problem that caused readline to initialize with an incorrect idea of whether or not the terminal can autowrap. g. Fixed output of key bindings (like bash `bind -p') to honor the setting of convert-meta and use \e where appropriate. h. Changed the default filename completion function to call the filename dequoting function if the directory completion hook isn't set. This means that any directory completion hooks need to dequote the directory name, since application-specific hooks need to know how the word was quoted, even if no other changes are made. i. Fixed a bug with creating the prompt for a non-interactive search string when there are non-printing characters in the primary prompt. j. Fixed a bug that caused prompts with invisible characters to be redrawn multiple times in a multibyte locale. k. Fixed a bug that could cause the key sequence scanning code to return the wrong function. l. Fixed a problem with the callback interface that caused it to fail when using multi-character keyboard macros. m. Fixed a bug that could cause a core dump when an edited history entry was re-executed under certain conditions. n. Fixed a bug that caused readline to reference freed memory when attmpting to display a portion of the prompt. o. Fixed a bug with prompt redisplay in a multi-byte locale to avoid redrawing the prompt and input line multiple times. p. Fixed history expansion to not be confused by here-string redirection. q. Readline no longer treats read errors by converting them to newlines, as it does with EOF. This caused partial lines to be returned from readline(). r. Fixed a redisplay bug that occurred in multibyte-capable locales when the prompt was one character longer than the screen width. 2. New Features in Readline a. Calling applications can now set the keyboard timeout to 0, allowing poll-like behavior. b. The value of SYS_INPUTRC (configurable at compilation time) is now used as the default last-ditch startup file. c. The history file reading functions now allow windows-like \r\n line terminators. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.1, and the previous version, readline-5.0. 1. Changes to Readline a. Fixed a bug that caused multiliine prompts to be wrapped and displayed incorrectly. b. Fixed a bug that caused ^P/^N in emacs mode to fail to display the current line correctly. c. Fixed a problem in computing the number of invisible characters on the first line of a prompt whose length exceeds the screen width. d. Fixed vi-mode searching so that failure preserves the current line rather than the last line in the history list. e. Fixed the vi-mode `~' command (change-case) to have the correct behavior at end-of-line when manipulating multibyte characters. f. Fixed the vi-mode `r' command (change-char) to have the correct behavior at end-of-line when manipulating multibyte characters. g. Fixed multiple bugs in the redisplay of multibyte characters: displaying prompts longer than the screen width containing multibyte characters, h. Fix the calculation of the number of physical characters in the prompt string when it contains multibyte characters. i. A non-zero value for the `rl_complete_suppress_append' variable now causes no `/' to be appended to a directory name. j. Fixed forward-word and backward-word to work when words contained multibyte characters. k. Fixed a bug in finding the delimiter of a `?' substring when performing history expansion in a locale that supports multibyte characters. l. Fixed a memory leak caused by not freeing the timestamp in a history entry. m. Fixed a bug that caused "\M-x" style key bindings to not obey the setting of the `convert-meta' variable. n. Fixed saving and restoring primary prompt when prompting for incremental and non-incremental searches; search prompts now display multibyte characters correctly. o. Fixed a bug that caused keys originally bound to self-insert but shadowed by a multi-character key sequence to not be inserted. p. Fixed code so rl_prep_term_function and rl_deprep_term_function aren't dereferenced if NULL (matching the documentation). q. Extensive changes to readline to add enough state so that commands requiring additional characters (searches, multi-key sequences, numeric arguments, commands requiring an additional specifier character like vi-mode change-char, etc.) work without synchronously waiting for additional input. r. Lots of changes so readline builds and runs on MinGW. s. Readline no longer tries to modify the terminal settings when running in callback mode. t. The Readline display code no longer sets the location of the last invisible character in the prompt if the \[\] sequence is empty. u. The `change-case' command now correctly changes the case of multibyte characters. v. Changes to the shared library construction scripts to deal with Windows DLL naming conventions for Cygwin. w. Fixed the redisplay code to avoid core dumps resulting from a poorly-timed SIGWINCH. x. Fixed the non-incremental search code in vi mode to dispose of any current undo list when copying a line from the history into the current editing buffer. y. Fixed a bug that caused reversing the incremental search direction to not work correctly. z. Fixed the vi-mode `U' command to only undo up to the first time insert mode was entered, as Posix specifies. aa. Fixed a bug in the vi-mode `r' command that left the cursor in the wrong place. bb. Fixed a redisplay bug caused by moving the cursor vertically to a line with invisible characters in the prompt in a multibyte locale. cc. Fixed a bug that could cause the terminal special chars to be bound in the wrong keymap in vi mode. 2. New Features in Readline a. The key sequence sent by the keypad `delete' key is now automatically bound to delete-char. b. A negative argument to menu-complete now cycles backward through the completion list. c. A new bindable readline variable: bind-tty-special-chars. If non-zero, readline will bind the terminal special characters to their readline equivalents when it's called (on by default). d. New bindable command: vi-rubout. Saves deleted text for possible reinsertion, as with any vi-mode `text modification' command; `X' is bound to this in vi command mode. e. If the rl_completion_query_items is set to a value < 0, readline never asks the user whether or not to view the possible completions. f. The `C-w' binding in incremental search now understands multibyte characters. g. New application-callable auxiliary function, rl_variable_value, returns a string corresponding to a readline variable's value. h. When parsing inputrc files and variable binding commands, the parser strips trailing whitespace from values assigned to boolean variables before checking them. i. A new external application-controllable variable that allows the LINES and COLUMNS environment variables to set the window size regardless of what the kernel returns. ------------------------------------------------------------------------------- This document details the changes between this version, readline-5.0, and the previous version, readline-4.3. 1. Changes to Readline a. Fixes to avoid core dumps because of null pointer references in the multibyte character code. b. Fix to avoid infinite recursion caused by certain key combinations. c. Fixed a bug that caused the vi-mode `last command' to be set incorrectly. d. Readline no longer tries to read ahead more than one line of input, even when more is available. e. Fixed the code that adjusts the point to not mishandle null wide characters. f. Fixed a bug in the history expansion `g' modifier that caused it to skip every other match. g. Fixed a bug that caused the prompt to overwrite previous output when the output doesn't contain a newline and the locale supports multibyte characters. This same change fixes the problem of readline redisplay slowing down dramatically as the line gets longer in multibyte locales. h. History traversal with arrow keys in vi insertion mode causes the cursor to be placed at the end of the new line, like in emacs mode. i. The locale initialization code does a better job of using the right precedence and defaulting when checking the appropriate environment variables. j. Fixed the history word tokenizer to handle <( and >( better when used as part of bash. k. The overwrite mode code received several bug fixes to improve undo. l. Many speedups to the multibyte character redisplay code. m. The callback character reading interface should not hang waiting to read keyboard input. n. Fixed a bug with redoing vi-mode `s' command. o. The code that initializes the terminal tracks changes made to the terminal special characters with stty(1) (or equivalent), so that these changes are reflected in the readline bindings. New application-callable function to make it work: rl_tty_unset_default_bindings(). p. Fixed a bug that could cause garbage to be inserted in the buffer when changing character case in vi mode when using a multibyte locale. q. Fixed a bug in the redisplay code that caused problems on systems supporting multibyte characters when moving between history lines when the new line has more glyphs but fewer bytes. r. Undo and redo now work better after exiting vi insertion mode. s. Make sure system calls are restarted after a SIGWINCH is received using SA_RESTART. t. Improvements to the code that displays possible completions when using multibyte characters. u. Fixed a problem when parsing nested if statements in inputrc files. v. The completer now takes multibyte characters into account when looking for quoted substrings on which to perform completion. w. The history search functions now perform better bounds checking on the history list. x. Change to history expansion functions to treat `^' as equivalent to word one, as the documention states. y. Some changes to the display code to improve display and redisplay of multibyte characters. z. Changes to speed up the multibyte character redisplay code. aa. Fixed a bug in the vi-mode `E' command that caused it to skip over the last character of a word if invoked while point was on the word's next-to-last character. bb. Fixed a bug that could cause incorrect filename quoting when case-insensitive completion was enabled and the word being completed contained backslashes quoting word break characters. cc. Fixed a bug in redisplay triggered when the prompt string contains invisible characters. dd. Fixed some display (and other) bugs encountered in multibyte locales when a non-ascii character was the last character on a line. ee. Fixed some display bugs caused by multibyte characters in prompt strings. ff. Fixed a problem with history expansion caused by non-whitespace characters used as history word delimiters. gg. Fixed a problem that could cause readline to refer to freed memory when moving between history lines while doing searches. hh. Improvements to the code that expands and displays prompt strings containing multibyte characters. ii. Fixed a problem with vi-mode not correctly remembering the numeric argument to the last `c'hange command for later use with `.'. jj. Fixed a bug in vi-mode that caused multi-digit count arguments to work incorrectly. kk. Fixed a problem in vi-mode that caused the last text modification command to not be remembered across different command lines. ll. Fixed problems with changing characters and changing case at the end of the line. mm. Fixed a problem with readline saving the contents of the current line before beginning a non-interactive search. nn. Fixed a problem with EOF detection when using rl_event_hook. oo. Fixed a problem with the vi mode `p' and `P' commands ignoring numeric arguments. 2. New Features in Readline a. History expansion has a new `a' modifier equivalent to the `g' modifier for compatibility with the BSD csh. b. History expansion has a new `G' modifier equivalent to the BSD csh `g' modifier, which performs a substitution once per word. c. All non-incremental search operations may now undo the operation of replacing the current line with the history line. d. The text inserted by an `a' command in vi mode can be reinserted with `.'. e. New bindable variable, `show-all-if-unmodified'. If set, the readline completer will list possible completions immediately if there is more than one completion and partial completion cannot be performed. f. There is a new application-callable `free_history_entry()' function. g. History list entries now contain timestamp information; the history file functions know how to read and write timestamp information associated with each entry. h. Four new key binding functions have been added: rl_bind_key_if_unbound() rl_bind_key_if_unbound_in_map() rl_bind_keyseq_if_unbound() rl_bind_keyseq_if_unbound_in_map() i. New application variable, rl_completion_quote_character, set to any quote character readline finds before it calls the application completion function. j. New application variable, rl_completion_suppress_quote, settable by an application completion function. If set to non-zero, readline does not attempt to append a closing quote to a completed word. k. New application variable, rl_completion_found_quote, set to a non-zero value if readline determines that the word to be completed is quoted. Set before readline calls any application completion function. l. New function hook, rl_completion_word_break_hook, called when readline needs to break a line into words when completion is attempted. Allows the word break characters to vary based on position in the line. m. New bindable command: unix-filename-rubout. Does the same thing as unix-word-rubout, but adds `/' to the set of word delimiters. n. When listing completions, directories have a `/' appended if the `mark-directories' option has been enabled. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.3, and the previous version, readline-4.2a. 1. Changes to Readline a. Fixed output of comment-begin character when listing variable values. b. Added some default key bindings for common escape sequences produced by HOME and END keys. c. Fixed the mark handling code to be more emacs-compatible. d. A bug was fixed in the code that prints possible completions to keep it from printing empty strings in certain circumstances. e. Change the key sequence printing code to print ESC as M\- if ESC is a meta-prefix character -- it's easier for users to understand than \e. f. Fixed unstifle_history() to return values that match the documentation. g. Fixed the event loop (rl_event_hook) to handle the case where the input file descriptor is invalidated. h. Fixed the prompt display code to work better when the application has a custom redisplay function. i. Changes to make reading and writing the history file a little faster, and to cope with huge history files without calling abort(3) from xmalloc. j. The vi-mode `S' and `s' commands are now undone correctly. k. Fixed a problem which caused the display to be messed up when the last line of a multi-line prompt (possibly containing invisible characters) was longer than the screen width. 2. New Features in Readline a. Support for key `subsequences': allows, e.g., ESC and ESC-a to both be bound to readline functions. Now the arrow keys may be used in vi insert mode. b. When listing completions, and the number of lines displayed is more than the screen length, readline uses an internal pager to display the results. This is controlled by the `page-completions' variable (default on). c. New code to handle editing and displaying multibyte characters. d. The behavior introduced in bash-2.05a of deciding whether or not to append a slash to a completed name that is a symlink to a directory has been made optional, controlled by the `mark-symlinked-directories' variable (default is the 2.05a behavior). e. The `insert-comment' command now acts as a toggle if given a numeric argument: if the first characters on the line don't specify a comment, insert one; if they do, delete the comment text f. New application-settable completion variable: rl_completion_mark_symlink_dirs, allows an application's completion function to temporarily override the user's preference for appending slashes to names which are symlinks to directories. g. New function available to application completion functions: rl_completion_mode, to tell how the completion function was invoked and decide which argument to supply to rl_complete_internal (to list completions, etc.). h. Readline now has an overwrite mode, toggled by the `overwrite-mode' bindable command, which could be bound to `Insert'. i. New application-settable completion variable: rl_completion_suppress_append, inhibits appending of rl_completion_append_character to completed words. j. New key bindings when reading an incremental search string: ^W yanks the currently-matched word out of the current line into the search string; ^Y yanks the rest of the current line into the search string, DEL or ^H deletes characters from the search string. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.2a, and the previous version, readline-4.2. 1. Changes to Readline a. More `const' and type casting fixes. b. Changed rl_message() to use vsnprintf(3) (if available) to fix buffer overflow problems. c. The completion code no longer appends a `/' or ` ' to a match when completing a symbolic link that resolves to a directory name, unless the match does not add anything to the word being completed. This means that a tab will complete the word up to the full name, but not add anything, and a subsequent tab will add a slash. d. Fixed a trivial typo that made the vi-mode `dT' command not work. e. Fixed the tty code so that ^S and ^Q can be inserted with rl_quoted_insert. f. Fixed the tty code so that ^V works more than once. g. Changed the use of __P((...)) for function prototypes to PARAMS((...)) because the use of __P in typedefs conflicted g++ and glibc. h. The completion code now attempts to do a better job of preserving the case of the word the user typed if ignoring case in completions. i. Readline defaults to not echoing the input and lets the terminal initialization code enable echoing if there is a controlling terminal. j. The key binding code now processes only two hex digits after a `\x' escape sequence, and the documentation was changed to note that the octal and hex escape sequences result in an eight-bit value rather than strict ASCII. k. Fixed a few places where negative array subscripts could have occurred. l. Fixed the vi-mode code to use a better method to determine the bounds of the array used to hold the marks, and to avoid out-of-bounds references. m. Fixed the defines in chardefs.h to work better when chars are signed. n. Fixed configure.in to use the new names for bash autoconf macros. o. Readline no longer attempts to define its own versions of some ctype macros if they are implemented as functions in libc but not as macros in . p. Fixed a problem where rl_backward could possibly set point to before the beginning of the line. q. Fixed Makefile to not put -I/usr/include into CFLAGS, since it can cause include file problems. 2. New Features in Readline a. Added extern declaration for rl_get_termcap to readline.h, making it a public function (it was always there, just not in readline.h). b. New #defines in readline.h: RL_READLINE_VERSION, currently 0x0402, RL_VERSION_MAJOR, currently 4, and RL_VERSION_MINOR, currently 2. c. New readline variable: rl_readline_version, mirrors RL_READLINE_VERSION. d. New bindable boolean readline variable: match-hidden-files. Controls completion of files beginning with a `.' (on Unix). Enabled by default. e. The history expansion code now allows any character to terminate a `:first-' modifier, like csh. f. The incremental search code remembers the last search string and uses it if ^R^R is typed without a search string. h. New bindable variable `history-preserve-point'. If set, the history code attempts to place the user at the same location on each history line retrived with previous-history or next-history. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.2, and the previous version, readline-4.1. 1. Changes to Readline a. When setting the terminal attributes on systems using `struct termio', readline waits for output to drain before changing the attributes. b. A fix was made to the history word tokenization code to avoid attempts to dereference a null pointer. c. Readline now defaults rl_terminal_name to $TERM if the calling application has left it unset, and tries to initialize with the resultant value. d. Instead of calling (*rl_getc_function)() directly to get input in certain places, readline now calls rl_read_key() consistently. e. Fixed a bug in the completion code that allowed a backslash to quote a single quote inside a single-quoted string. f. rl_prompt is no longer assigned directly from the argument to readline(), but uses memory allocated by readline. This allows constant strings to be passed to readline without problems arising when the prompt processing code wants to modify the string. g. Fixed a bug that caused non-interactive history searches to return the wrong line when performing multiple searches backward for the same string. h. Many variables, function arguments, and function return values are now declared `const' where appropriate, to improve behavior when linking with C++ code. i. The control character detection code now works better on systems where `char' is unsigned by default. j. The vi-mode numeric argument is now capped at 999999, just like emacs mode. k. The Function, CPFunction, CPPFunction, and VFunction typedefs have been replaced with a set of specific prototyped typedefs, though they are still in the readline header files for backwards compatibility. m. Nearly all of the (undocumented) internal global variables in the library now have an _rl_ prefix -- there were a number that did not, like screenheight, screenwidth, alphabetic, etc. n. The ding() convenience function has been renamed to rl_ding(), though the old function is still defined for backwards compatibility. o. The completion convenience functions filename_completion_function, username_completion_function, and completion_matches now have an rl_ prefix, though the old names are still defined for backwards compatibility. p. The functions shared by readline and bash (linkage is satisfied from bash when compiling with bash, and internally otherwise) now have an sh_ prefix. q. Changed the shared library creation procedure on Linux and BSD/OS 4.x so that the `soname' contains only the major version number rather than the major and minor numbers. r. Fixed a redisplay bug that occurred when the prompt spanned more than one physical line and contained invisible characters. s. Added a missing `includedir' variable to the Makefile. t. When installing the shared libraries, make sure symbolic links are relative. u. Added configure test so that it can set `${MAKE}' appropriately. v. Fixed a bug in rl_forward that could cause the point to be set to before the beginning of the line in vi mode. w. Fixed a bug in the callback read-char interface to make it work when a readline function pushes some input onto the input stream with rl_execute_next (like the incremental search functions). x. Fixed a file descriptor leak in the history file manipulation code that was tripped when attempting to truncate a non-regular file (like /dev/null). y. Changes to make all of the exported readline functions declared in readline.h have an rl_ prefix (rltty_set_default_bindings is now rl_tty_set_default_bindings, crlf is now rl_crlf, etc.) z. The formatted documentation included in the base readline distribution is no longer removed on a `make distclean'. aa. Some changes were made to avoid gcc warnings with -Wall. bb. rl_get_keymap_by_name now finds keymaps case-insensitively, so `set keymap EMACS' works. cc. The history file writing and truncation functions now return a useful status on error. dd. Fixed a bug that could cause applications to dereference a NULL pointer if a NULL second argument was passed to history_expand(). ee. If a hook function assigned to rl_event_hook sets rl_done to a non-zero value, rl_read_key() now immediately returns '\n' (which is assumed to be bound to accept-line). 2. New Features in Readline a. The blink timeout for paren matching is now settable by applications, via the rl_set_paren_blink_timeout() function. b. _rl_executing_macro has been renamed to rl_executing_macro, which means it's now part of the public interface. c. Readline has a new variable, rl_readline_state, which is a bitmap that encapsulates the current state of the library; intended for use by callbacks and hook functions. d. rlfe has a new -l option to log input and output (-a appends to logfile), a new -n option to set the readline application name, and -v and -h options for version and help information. e. rlfe can now perform filename completion for the inferior process if the OS has a /proc//cwd that can be read with readlink(2) to get the inferior's current working directory. f. A new file, rltypedefs.h, contains the new typedefs for function pointers and is installed by `make install'. g. New application-callable function rl_set_prompt(const char *prompt): expands its prompt string argument and sets rl_prompt to the result. h. New application-callable function rl_set_screen_size(int rows, int cols): public method for applications to set readline's idea of the screen dimensions. i. The history example program (examples/histexamp.c) is now built as one of the examples. j. The documentation has been updated to cover nearly all of the public functions and variables declared in readline.h. k. New function, rl_get_screen_size (int *rows, int *columns), returns readline's idea of the screen dimensions. l. The timeout in rl_gather_tyi (readline keyboard input polling function) is now settable via a function (rl_set_keyboard_input_timeout()). m. Renamed the max_input_history variable to history_max_entries; the old variable is maintained for backwards compatibility. n. The list of characters that separate words for the history tokenizer is now settable with a variable: history_word_delimiters. The default value is as before. o. There is a new history.3 manual page documenting the history library. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.1, and the previous version, readline-4.0. 1. Changes to Readline a. Changed the HTML documents so that the table-of-contents is no longer a separate file. b. Changes to the shared object configuration for: Irix 5.x, Irix 6.x, OSF/1. c. The shared library major and minor versions are now constructed automatically by configure and substituted into the makefiles. d. It's now possible to install the shared libraries separately from the static libraries. e. The history library tries to truncate the history file only if it is a regular file. f. A bug that caused _rl_dispatch to address negative array indices on systems with signed chars was fixed. g. rl-yank-nth-arg now leaves the history position the same as when it was called. h. Changes to the completion code to handle MS-DOS drive-letter:pathname filenames. i. Completion is now case-insensitive by default on MS-DOS. j. Fixes to the history file manipulation code for MS-DOS. k. Readline attempts to bind the arrow keys to appropriate defaults on MS-DOS. l. Some fixes were made to the redisplay code for better operation on MS-DOS. m. The quoted-insert code will now insert tty special chars like ^C. n. A bug was fixed that caused the display code to reference memory before the start of the prompt string. o. More support for __EMX__ (OS/2). p. A bug was fixed in readline's signal handling that could cause infinite recursion in signal handlers. q. A bug was fixed that caused the point to be less than zero when rl_forward was given a very large numeric argument. r. The vi-mode code now gets characters via the application-settable value of rl_getc_function rather than calling rl_getc directly. s. The history file code now uses O_BINARY mode when reading and writing the history file on cygwin32. t. Fixed a bug in the redisplay code for lines with more than 256 line breaks. u. A bug was fixed which caused invisible character markers to not be stripped from the prompt string if the terminal was in no-echo mode. v. Readline no longer tries to get the variables it needs for redisplay from the termcap entry if the calling application has specified its own redisplay function. Readline treats the terminal as `dumb' in this case. w. Fixes to the SIGWINCH code so that a multiple-line prompt with escape sequences is redrawn correctly. x. Changes to the install and install-shared targets so that the libraries and header files are installed separately. 2. New Features in Readline a. A new Readline `user manual' is in doc/rluserman.texinfo. b. Parentheses matching is now always compiled into readline, and enabled or disabled when the value of the `blink-matching-paren' variable is changed. c. MS-DOS systems now use ~/_inputrc as the last-ditch inputrc filename. d. MS-DOS systems now use ~/_history as the default history file. e. history-search-{forward,backward} now leave the point at the end of the line when the string to search for is empty, like {reverse,forward}-search-history. f. history-search-{forward,backward} now leave the last history line found in the readline buffer if the second or subsequent search fails. g. New function for use by applications: rl_on_new_line_with_prompt, used when an application displays the prompt itself before calling readline(). h. New variable for use by applications: rl_already_prompted. An application that displays the prompt itself before calling readline() must set this to a non-zero value. i. A new variable, rl_gnu_readline_p, always 1. The intent is that an application can verify whether or not it is linked with the `real' readline library or some substitute. j. Per Bothner's `rlfe' (pronounced `Ralphie') readline front-end program is included in the examples subdirectory, though it is not built by default. ------------------------------------------------------------------------------- This document details the changes between this version, readline-4.0, and the previous version, readline-2.2. 1. Changes to Readline a. The version number is now 4.0, to match the major and minor version numbers on the shared readline and history libraries. Future releases will maintain the identical numbering. b. Fixed a typo in the `make install' recipe that copied libreadline.a to libhistory.old right after installing it. c. The readline and history info files are now installed out of the source directory if they are not found in the build directory. d. The library no longer exports a function named `savestring' -- backwards compatibility be damned. e. There is no longer any #ifdef SHELL code in the source files. f. Some changes were made to the key binding code to fix memory leaks and better support Win32 systems. g. Fixed a silly typo in the paren matching code -- it's microseconds, not milliseconds. h. The readline library should be compilable by C++ compilers. i. The readline.h public header file now includes function prototypes for all readline functions, and some changes were made to fix errors in the source files uncovered by the use of prototypes. j. The maximum numeric argument is now clamped at 1000000. k. Fixes to rl_yank_last_arg to make it behave better. l. Fixed a bug in the display code that caused core dumps if the prompt string length exceeded 1024 characters. m. The menu completion code was fixed to properly insert a single completion if there is only one match. n. A bug was fixed that caused the display code to improperly display tabs after newlines. o. A fix was made to the completion code in which a typo caused the wrong value to be passed to the function that computed the longest common prefix of the list of matches. p. The completion code now checks the value of rl_filename_completion_desired, which is set by application-supplied completion functions to indicate that filename completion is being performed, to decide whether or not to call an application-supplied `ignore completions' function. q. Code was added to the history library to catch history substitutions using `&' without a previous history substitution or search having been performed. 2. New Features in Readline a. There is a new script, support/shobj-conf, to do system-specific shared object and library configuration. It generates variables for configure to substitute into makefiles. The README file provides a detailed explanation of the shared library creation process. b. Shared libraries and objects are now built in the `shlib' subdirectory. There is a shlib/Makefile.in to control the build process. `make shared' from the top-level directory is still the right way to build shared versions of the libraries. c. rlconf.h is now installed, so applications can find out which features have been compiled into the installed readline and history libraries. d. rlstdc.h is now an installed header file. e. Many changes to the signal handling: o Readline now catches SIGQUIT and cleans up the tty before returning; o A new variable, rl_catch_signals, is available to application writers to indicate to readline whether or not it should install its own signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU; o A new variable, rl_catch_sigwinch, is available to application writers to indicate to readline whether or not it should install its own signal handler for SIGWINCH, which will chain to the calling applications's SIGWINCH handler, if one is installed; o There is a new function, rl_free_line_state, for application signal handlers to call to free up the state associated with the current line after receiving a signal; o There is a new function, rl_cleanup_after_signal, to clean up the display and terminal state after receiving a signal; o There is a new function, rl_reset_after_signal, to reinitialize the terminal and display state after an application signal handler returns and readline continues f. There is a new function, rl_resize_terminal, to reset readline's idea of the screen size after a SIGWINCH. g. New public functions: rl_save_prompt and rl_restore_prompt. These were previously private functions with a `_' prefix. These functions are used when an application wants to write a message to the `message area' with rl_message and have the prompt restored correctly when the message is erased. h. New function hook: rl_pre_input_hook, called just before readline starts reading input, after initialization. i. New function hook: rl_display_matches_hook, called when readline would display the list of completion matches. The new function rl_display_match_list is what readline uses internally, and is available for use by application functions called via this hook. j. New bindable function, delete-char-or-list, like tcsh. k. A new variable, rl_erase_empty_line, which, if set by an application using readline, will cause readline to erase, prompt and all, lines on which the only thing typed was a newline. l. There is a new script, support/shlib-install, to install and uninstall the shared readline and history libraries. m. A new bindable variable, `isearch-terminators', which is a string containing the set of characters that should terminate an incremental search without being executed as a command. n. A new bindable function, forward-backward-delete-char. ------------------------------------------------------------------------------- This document details the changes between this version, readline-2.2, and the previous version, readline-2.1. 1. Changes to Readline a. Added a missing `extern' to a declaration in readline.h that kept readline from compiling cleanly on some systems. b. The history file is now opened with mode 0600 when it is written for better security. c. Changes were made to the SIGWINCH handling code so that prompt redisplay is done better. d. ^G now interrupts incremental searches correctly. e. A bug that caused a core dump when the set of characters to be quoted when completing words was empty was fixed. f. Fixed a problem in the readline test program rltest.c that caused a core dump. g. The code that handles parser directives in inputrc files now displays more error messages. h. The history expansion code was fixed so that the appearance of the history comment character at the beginning of a word inhibits history expansion for that word and the rest of the input line. i. The code that prints completion listings now behaves better if one or more of the filenames contains non-printable characters. j. The time delay when showing matching parentheses is now 0.5 seconds. 2. New Features in Readline a. There is now an option for `iterative' yank-last-arg handline, so a user can keep entering `M-.', yanking the last argument of successive history lines. b. New variable, `print-completions-horizontally', which causes completion matches to be displayed across the screen (like `ls -x') rather than up and down the screen (like `ls'). c. New variable, `completion-ignore-case', which causes filename completion and matching to be performed case-insensitively. d. There is a new bindable command, `magic-space', which causes history expansion to be performed on the current readline buffer and a space to be inserted into the result. e. There is a new bindable command, `menu-complete', which enables tcsh-like menu completion (successive executions of menu-complete insert a single completion match, cycling through the list of possible completions). f. There is a new bindable command, `paste-from-clipboard', for use on Win32 systems, to insert the text from the Win32 clipboard into the editing buffer. g. The key sequence translation code now understands printf-style backslash escape sequences, including \NNN octal escapes. These escape sequences may be used in key sequence definitions or macro values. h. An `$include' inputrc file parser directive has been added. readline-7.0/NEWS000664 000436 000024 00000030607 12650434135 013736 0ustar00chetstaff000000 000000 This is a terse description of the new features added to readline-7.0 since the release of readline-6.3. New Features in Readline a. The history truncation code now uses the same error recovery mechansim as the history writing code, and restores the old version of the history file on error. The error recovery mechanism handles symlinked history files. b. There is a new bindable variable, `enable-bracketed-paste', which enables support for a terminal's bracketed paste mode. c. The editing mode indicators can now be strings and are user-settable (new `emacs-mode-string', `vi-cmd-mode-string' and `vi-ins-mode-string' variables). Mode strings can contain invisible character sequences. Setting mode strings to null strings restores the defaults. d. Prompt expansion adds the mode string to the last line of a multi-line prompt (one with embedded newlines). e. There is a new bindable variable, `colored-completion-prefix', which, if set, causes the common prefix of a set of possible completions to be displayed in color. f. There is a new bindable command `vi-yank-pop', a vi-mode version of emacs- mode yank-pop. g. The redisplay code underwent several efficiency improvements for multibyte locales. h. The insert-char function attempts to batch-insert all pending typeahead that maps to self-insert, as long as it is coming from the terminal. i. rl_callback_sigcleanup: a new application function that can clean up and unset any state set by readline's callback mode. Intended to be used after a signal. j. If an incremental search string has its last character removed with DEL, the resulting empty search string no longer matches the previous line. k. If readline reads a history file that begins with `#' (or the value of the history comment character) and has enabled history timestamps, the history entries are assumed to be delimited by timestamps. This allows multi-line history entries. l. Readline now throws an error if it parses a key binding without a terminating `:' or whitespace. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-6.3 since the release of readline-6.2. New Features in Readline a. Readline is now more responsive to SIGHUP and other fatal signals when reading input from the terminal or performing word completion but no longer attempts to run any not-allowable functions from a signal handler context. b. There are new bindable commands to search the history for the string of characters between the beginning of the line and the point (history-substring-search-forward, history-substring-search-backward) c. Readline allows quoted strings as the values of variables when setting them with `set'. As a side effect, trailing spaces and tabs are ignored when setting a string variable's value. d. The history library creates a backup of the history file when writing it and restores the backup on a write error. e. New application-settable variable: rl_filename_stat_hook: a function called with a filename before using it in a call to stat(2). Bash uses it to expand shell variables so things like $HOME/Downloads have a slash appended. f. New bindable function `print-last-kbd-macro', prints the most-recently- defined keyboard macro in a reusable format. g. New user-settable variable `colored-stats', enables use of colored text to denote file types when displaying possible completions (colored analog of visible-stats). h. New user-settable variable `keyseq-timout', acts as an inter-character timeout when reading input or incremental search strings. i. New application-callable function: rl_clear_history. Clears the history list and frees all readline-associated private data. j. New user-settable variable, show-mode-in-prompt, adds a characters to the beginning of the prompt indicating the current editing mode. k. New application-settable variable: rl_input_available_hook; function to be called when readline detects there is data available on its input file descriptor. l. Readline calls an application-set event hook (rl_event_hook) after it gets a signal while reading input (read returns -1/EINTR but readline does not handle the signal immediately) to allow the application to handle or otherwise note it. m. If the user-settable variable `history-size' is set to a value less than 0, the history list size is unlimited. n. New application-settable variable: rl_signal_event_hook; function that is called when readline is reading terminal input and read(2) is interrupted by a signal. Currently not called for SIGHUP or SIGTERM. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-6.1 since the release of readline-6.0. New Features in Readline a. New bindable function: menu-complete-backward. b. In the vi insertion keymap, C-n is now bound to menu-complete by default, and C-p to menu-complete-backward. c. When in vi command mode, repeatedly hitting ESC now does nothing, even when ESC introduces a bound key sequence. This is closer to how historical vi behaves. d. New bindable function: skip-csi-sequence. Can be used as a default to consume key sequences generated by keys like Home and End without having to bind all keys. e. New application-settable function: rl_filename_rewrite_hook. Can be used to rewite or modify filenames read from the file system before they are compared to the word to be completed. f. New bindable variable: skip-completed-text, active when completing in the middle of a word. If enabled, it means that characters in the completion that match characters in the remainder of the word are "skipped" rather than inserted into the line. g. The pre-readline-6.0 version of menu completion is available as "old-menu-complete" for users who do not like the readline-6.0 version. h. New bindable variable: echo-control-characters. If enabled, and the tty ECHOCTL bit is set, controls the echoing of characters corresponding to keyboard-generated signals. i. New bindable variable: enable-meta-key. Controls whether or not readline sends the smm/rmm sequences if the terminal indicates it has a meta key that enables eight-bit characters. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-6.0 since the release of readline-5.2. New Features in Readline a. A new variable, rl_sort_completion_matches; allows applications to inhibit match list sorting (but beware: some things don't work right if applications do this). b. A new variable, rl_completion_invoking_key; allows applications to discover the key that invoked rl_complete or rl_menu_complete. c. The functions rl_block_sigint and rl_release_sigint are now public and available to calling applications who want to protect critical sections (like redisplay). d. The functions rl_save_state and rl_restore_state are now public and available to calling applications; documented rest of readline's state flag values. e. A new user-settable variable, `history-size', allows setting the maximum number of entries in the history list. f. There is a new implementation of menu completion, with several improvements over the old; the most notable improvement is a better `completions browsing' mode. g. The menu completion code now uses the rl_menu_completion_entry_function variable, allowing applications to provide their own menu completion generators. h. There is support for replacing a prefix of a pathname with a `...' when displaying possible completions. This is controllable by setting the `completion-prefix-display-length' variable. Matches with a common prefix longer than this value have the common prefix replaced with `...'. i. There is a new `revert-all-at-newline' variable. If enabled, readline will undo all outstanding changes to all history lines when `accept-line' is executed. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-5.2 since the release of readline-5.1. New Features in Readline a. Calling applications can now set the keyboard timeout to 0, allowing poll-like behavior. b. The value of SYS_INPUTRC (configurable at compilation time) is now used as the default last-ditch startup file. c. The history file reading functions now allow windows-like \r\n line terminators. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-5.1 since the release of readline-5.0. New Features in Readline a. The key sequence sent by the keypad `delete' key is now automatically bound to delete-char. b. A negative argument to menu-complete now cycles backward through the completion list. c. A new bindable readline variable: bind-tty-special-chars. If non-zero, readline will bind the terminal special characters to their readline equivalents when it's called (on by default). d. New bindable command: vi-rubout. Saves deleted text for possible reinsertion, as with any vi-mode `text modification' command; `X' is bound to this in vi command mode. e. If the rl_completion_query_items is set to a value < 0, readline never asks the user whether or not to view the possible completions. f. New application-callable auxiliary function, rl_variable_value, returns a string corresponding to a readline variable's value. g. When parsing inputrc files and variable binding commands, the parser strips trailing whitespace from values assigned to boolean variables before checking them. h. A new external application-controllable variable that allows the LINES and COLUMNS environment variables to set the window size regardless of what the kernel returns. ------------------------------------------------------------------------------- This is a terse description of the new features added to readline-5.0 since the release of readline-4.3. New Features in Readline a. History expansion has a new `a' modifier equivalent to the `g' modifier for compatibility with the BSD csh. b. History expansion has a new `G' modifier equivalent to the BSD csh `g' modifier, which performs a substitution once per word. c. All non-incremental search operations may now undo the operation of replacing the current line with the history line. d. The text inserted by an `a' command in vi mode can be reinserted with `.'. e. New bindable variable, `show-all-if-unmodified'. If set, the readline completer will list possible completions immediately if there is more than one completion and partial completion cannot be performed. f. There is a new application-callable `free_history_entry()' function. g. History list entries now contain timestamp information; the history file functions know how to read and write timestamp information associated with each entry. h. Four new key binding functions have been added: rl_bind_key_if_unbound() rl_bind_key_if_unbound_in_map() rl_bind_keyseq_if_unbound() rl_bind_keyseq_if_unbound_in_map() i. New application variable, rl_completion_quote_character, set to any quote character readline finds before it calls the application completion function. j. New application variable, rl_completion_suppress_quote, settable by an application completion function. If set to non-zero, readline does not attempt to append a closing quote to a completed word. k. New application variable, rl_completion_found_quote, set to a non-zero value if readline determines that the word to be completed is quoted. Set before readline calls any application completion function. l. New function hook, rl_completion_word_break_hook, called when readline needs to break a line into words when completion is attempted. Allows the word break characters to vary based on position in the line. m. New bindable command: unix-filename-rubout. Does the same thing as unix-word-rubout, but adds `/' to the set of word delimiters. n. When listing completions, directories have a `/' appended if the `mark-directories' option has been enabled. readline-7.0/USAGE000644 000436 000000 00000003751 06746073640 014030 0ustar00chetwheel000000 000000 From rms@gnu.org Thu Jul 22 20:37:55 1999 Flags: 10 Return-Path: rms@gnu.org Received: from arthur.INS.CWRU.Edu (root@arthur.INS.CWRU.Edu [129.22.8.215]) by odin.INS.CWRU.Edu with ESMTP (8.8.6+cwru/CWRU-2.4-ins) id UAA25349; Thu, 22 Jul 1999 20:37:54 -0400 (EDT) (from rms@gnu.org for ) Received: from nike.ins.cwru.edu (root@nike.INS.CWRU.Edu [129.22.8.219]) by arthur.INS.CWRU.Edu with ESMTP (8.8.8+cwru/CWRU-3.6) id UAA05311; Thu, 22 Jul 1999 20:37:51 -0400 (EDT) (from rms@gnu.org for ) Received: from pele.santafe.edu (pele.santafe.edu [192.12.12.119]) by nike.ins.cwru.edu with ESMTP (8.8.7/CWRU-2.5-bsdi) id UAA13350; Thu, 22 Jul 1999 20:37:50 -0400 (EDT) (from rms@gnu.org for ) Received: from wijiji.santafe.edu (wijiji [192.12.12.5]) by pele.santafe.edu (8.9.1/8.9.1) with ESMTP id SAA10831 for ; Thu, 22 Jul 1999 18:37:47 -0600 (MDT) Received: (from rms@localhost) by wijiji.santafe.edu (8.9.1b+Sun/8.9.1) id SAA01089; Thu, 22 Jul 1999 18:37:46 -0600 (MDT) Date: Thu, 22 Jul 1999 18:37:46 -0600 (MDT) Message-Id: <199907230037.SAA01089@wijiji.santafe.edu> X-Authentication-Warning: wijiji.santafe.edu: rms set sender to rms@gnu.org using -f From: Richard Stallman To: chet@nike.ins.cwru.edu Subject: Use of Readline Reply-to: rms@gnu.org I think Allbery's suggestion is a good one. So please add this text in a suitable place. Please don't put it in the GPL itself; that should be the same as the GPL everywhere else. Putting it in the README and/or the documentation would be a good idea. ====================================================================== Our position on the use of Readline through a shared-library linking mechanism is that there is no legal difference between shared-library linking and static linking--either kind of linking combines various modules into a single larger work. The conditions for using Readline in a larger work are stated in section 3 of the GNU GPL. readline-7.0/aclocal.m4000644 000436 000024 00000405666 12627577233 015123 0ustar00chetstaff000000 000000 dnl dnl Bash specific tests dnl dnl Some derived from PDKSH 5.1.3 autoconf tests dnl AC_DEFUN(BASH_C_LONG_LONG, [AC_CACHE_CHECK(for long long, ac_cv_c_long_long, [if test "$GCC" = yes; then ac_cv_c_long_long=yes else AC_TRY_RUN([ int main() { long long foo = 0; exit(sizeof(long long) < sizeof(long)); } ], ac_cv_c_long_long=yes, ac_cv_c_long_long=no) fi]) if test $ac_cv_c_long_long = yes; then AC_DEFINE(HAVE_LONG_LONG, 1, [Define if the `long long' type works.]) fi ]) dnl dnl This is very similar to AC_C_LONG_DOUBLE, with the fix for IRIX dnl (< changed to <=) added. dnl AC_DEFUN(BASH_C_LONG_DOUBLE, [AC_CACHE_CHECK(for long double, ac_cv_c_long_double, [if test "$GCC" = yes; then ac_cv_c_long_double=yes else AC_TRY_RUN([ int main() { /* The Stardent Vistra knows sizeof(long double), but does not support it. */ long double foo = 0.0; /* On Ultrix 4.3 cc, long double is 4 and double is 8. */ /* On IRIX 5.3, the compiler converts long double to double with a warning, but compiles this successfully. */ exit(sizeof(long double) <= sizeof(double)); } ], ac_cv_c_long_double=yes, ac_cv_c_long_double=no) fi]) if test $ac_cv_c_long_double = yes; then AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if the `long double' type works.]) fi ]) dnl dnl Check for . This is separated out so that it can be dnl AC_REQUIREd. dnl dnl BASH_HEADER_INTTYPES AC_DEFUN(BASH_HEADER_INTTYPES, [ AC_CHECK_HEADERS(inttypes.h) ]) dnl dnl check for typedef'd symbols in header files, but allow the caller to dnl specify the include files to be checked in addition to the default dnl dnl BASH_CHECK_TYPE(TYPE, HEADERS, DEFAULT[, VALUE-IF-FOUND]) AC_DEFUN(BASH_CHECK_TYPE, [ AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([BASH_HEADER_INTTYPES]) AC_MSG_CHECKING(for $1) AC_CACHE_VAL(bash_cv_type_$1, [AC_EGREP_CPP($1, [#include #if STDC_HEADERS #include #include #endif #if HAVE_INTTYPES_H #include #endif #if HAVE_STDINT_H #include #endif $2 ], bash_cv_type_$1=yes, bash_cv_type_$1=no)]) AC_MSG_RESULT($bash_cv_type_$1) ifelse($#, 4, [if test $bash_cv_type_$1 = yes; then AC_DEFINE($4) fi]) if test $bash_cv_type_$1 = no; then AC_DEFINE_UNQUOTED($1, $3) fi ]) dnl dnl BASH_CHECK_DECL(FUNC) dnl dnl Check for a declaration of FUNC in stdlib.h and inttypes.h like dnl AC_CHECK_DECL dnl AC_DEFUN(BASH_CHECK_DECL, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([BASH_HEADER_INTTYPES]) AC_CACHE_CHECK([for declaration of $1], bash_cv_decl_$1, [AC_TRY_LINK( [ #if STDC_HEADERS # include #endif #if HAVE_INTTYPES_H # include #endif ], [return !$1;], bash_cv_decl_$1=yes, bash_cv_decl_$1=no)]) bash_tr_func=HAVE_DECL_`echo $1 | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` if test $bash_cv_decl_$1 = yes; then AC_DEFINE_UNQUOTED($bash_tr_func, 1) else AC_DEFINE_UNQUOTED($bash_tr_func, 0) fi ]) AC_DEFUN(BASH_DECL_PRINTF, [AC_MSG_CHECKING(for declaration of printf in ) AC_CACHE_VAL(bash_cv_printf_declared, [AC_TRY_RUN([ #include #ifdef __STDC__ typedef int (*_bashfunc)(const char *, ...); #else typedef int (*_bashfunc)(); #endif main() { _bashfunc pf; pf = (_bashfunc) printf; exit(pf == 0); } ], bash_cv_printf_declared=yes, bash_cv_printf_declared=no, [AC_MSG_WARN(cannot check printf declaration if cross compiling -- defaulting to yes) bash_cv_printf_declared=yes] )]) AC_MSG_RESULT($bash_cv_printf_declared) if test $bash_cv_printf_declared = yes; then AC_DEFINE(PRINTF_DECLARED) fi ]) AC_DEFUN(BASH_DECL_SBRK, [AC_MSG_CHECKING(for declaration of sbrk in ) AC_CACHE_VAL(bash_cv_sbrk_declared, [AC_EGREP_HEADER(sbrk, unistd.h, bash_cv_sbrk_declared=yes, bash_cv_sbrk_declared=no)]) AC_MSG_RESULT($bash_cv_sbrk_declared) if test $bash_cv_sbrk_declared = yes; then AC_DEFINE(SBRK_DECLARED) fi ]) dnl dnl Check for sys_siglist[] or _sys_siglist[] dnl AC_DEFUN(BASH_DECL_UNDER_SYS_SIGLIST, [AC_MSG_CHECKING([for _sys_siglist in signal.h or unistd.h]) AC_CACHE_VAL(bash_cv_decl_under_sys_siglist, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H #include #endif], [ char *msg = _sys_siglist[2]; ], bash_cv_decl_under_sys_siglist=yes, bash_cv_decl_under_sys_siglist=no, [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no)])])dnl AC_MSG_RESULT($bash_cv_decl_under_sys_siglist) if test $bash_cv_decl_under_sys_siglist = yes; then AC_DEFINE(UNDER_SYS_SIGLIST_DECLARED) fi ]) AC_DEFUN(BASH_UNDER_SYS_SIGLIST, [AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST]) AC_MSG_CHECKING([for _sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_under_sys_siglist, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif #ifndef UNDER_SYS_SIGLIST_DECLARED extern char *_sys_siglist[]; #endif main() { char *msg = (char *)_sys_siglist[2]; exit(msg == 0); }], bash_cv_under_sys_siglist=yes, bash_cv_under_sys_siglist=no, [AC_MSG_WARN(cannot check for _sys_siglist[] if cross compiling -- defaulting to no) bash_cv_under_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_under_sys_siglist) if test $bash_cv_under_sys_siglist = yes; then AC_DEFINE(HAVE_UNDER_SYS_SIGLIST) fi ]) AC_DEFUN(BASH_SYS_SIGLIST, [AC_REQUIRE([AC_DECL_SYS_SIGLIST]) AC_MSG_CHECKING([for sys_siglist in system C library]) AC_CACHE_VAL(bash_cv_sys_siglist, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif #if !HAVE_DECL_SYS_SIGLIST extern char *sys_siglist[]; #endif main() { char *msg = sys_siglist[2]; exit(msg == 0); }], bash_cv_sys_siglist=yes, bash_cv_sys_siglist=no, [AC_MSG_WARN(cannot check for sys_siglist if cross compiling -- defaulting to no) bash_cv_sys_siglist=no])]) AC_MSG_RESULT($bash_cv_sys_siglist) if test $bash_cv_sys_siglist = yes; then AC_DEFINE(HAVE_SYS_SIGLIST) fi ]) dnl Check for the various permutations of sys_siglist and make sure we dnl compile in siglist.o if they're not defined AC_DEFUN(BASH_CHECK_SYS_SIGLIST, [ AC_REQUIRE([BASH_SYS_SIGLIST]) AC_REQUIRE([BASH_DECL_UNDER_SYS_SIGLIST]) AC_REQUIRE([BASH_FUNC_STRSIGNAL]) if test "$bash_cv_sys_siglist" = no && test "$bash_cv_under_sys_siglist" = no && test "$bash_cv_have_strsignal" = no; then SIGLIST_O=siglist.o else SIGLIST_O= fi AC_SUBST([SIGLIST_O]) ]) dnl Check for sys_errlist[] and sys_nerr, check for declaration AC_DEFUN(BASH_SYS_ERRLIST, [AC_MSG_CHECKING([for sys_errlist and sys_nerr]) AC_CACHE_VAL(bash_cv_sys_errlist, [AC_TRY_LINK([#include ], [extern char *sys_errlist[]; extern int sys_nerr; char *msg = sys_errlist[sys_nerr - 1];], bash_cv_sys_errlist=yes, bash_cv_sys_errlist=no)])dnl AC_MSG_RESULT($bash_cv_sys_errlist) if test $bash_cv_sys_errlist = yes; then AC_DEFINE(HAVE_SYS_ERRLIST) fi ]) dnl dnl Check if dup2() does not clear the close on exec flag dnl AC_DEFUN(BASH_FUNC_DUP2_CLOEXEC_CHECK, [AC_MSG_CHECKING(if dup2 fails to clear the close-on-exec flag) AC_CACHE_VAL(bash_cv_dup2_broken, [AC_TRY_RUN([ #include #include main() { int fd1, fd2, fl; fd1 = open("/dev/null", 2); if (fcntl(fd1, 2, 1) < 0) exit(1); fd2 = dup2(fd1, 1); if (fd2 < 0) exit(2); fl = fcntl(fd2, 1, 0); /* fl will be 1 if dup2 did not reset the close-on-exec flag. */ exit(fl != 1); } ], bash_cv_dup2_broken=yes, bash_cv_dup2_broken=no, [AC_MSG_WARN(cannot check dup2 if cross compiling -- defaulting to no) bash_cv_dup2_broken=no]) ]) AC_MSG_RESULT($bash_cv_dup2_broken) if test $bash_cv_dup2_broken = yes; then AC_DEFINE(DUP2_BROKEN) fi ]) AC_DEFUN(BASH_FUNC_STRSIGNAL, [AC_MSG_CHECKING([for the existence of strsignal]) AC_CACHE_VAL(bash_cv_have_strsignal, [AC_TRY_LINK([#include #include ], [char *s = (char *)strsignal(2);], bash_cv_have_strsignal=yes, bash_cv_have_strsignal=no)]) AC_MSG_RESULT($bash_cv_have_strsignal) if test $bash_cv_have_strsignal = yes; then AC_DEFINE(HAVE_STRSIGNAL) fi ]) dnl Check to see if opendir will open non-directories (not a nice thing) AC_DEFUN(BASH_FUNC_OPENDIR_CHECK, [AC_REQUIRE([AC_HEADER_DIRENT])dnl AC_MSG_CHECKING(if opendir() opens non-directories) AC_CACHE_VAL(bash_cv_opendir_not_robust, [AC_TRY_RUN([ #include #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ main() { DIR *dir; int fd, err; err = mkdir("bash-aclocal", 0700); if (err < 0) { perror("mkdir"); exit(1); } unlink("bash-aclocal/not_a_directory"); fd = open("bash-aclocal/not_a_directory", O_WRONLY|O_CREAT|O_EXCL, 0666); write(fd, "\n", 1); close(fd); dir = opendir("bash-aclocal/not_a_directory"); unlink("bash-aclocal/not_a_directory"); rmdir("bash-aclocal"); exit (dir == 0); }], bash_cv_opendir_not_robust=yes,bash_cv_opendir_not_robust=no, [AC_MSG_WARN(cannot check opendir if cross compiling -- defaulting to no) bash_cv_opendir_not_robust=no] )]) AC_MSG_RESULT($bash_cv_opendir_not_robust) if test $bash_cv_opendir_not_robust = yes; then AC_DEFINE(OPENDIR_NOT_ROBUST) fi ]) dnl AC_DEFUN(BASH_TYPE_SIGHANDLER, [AC_MSG_CHECKING([whether signal handlers are of type void]) AC_CACHE_VAL(bash_cv_void_sighandler, [AC_TRY_COMPILE([#include #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" #endif void (*signal ()) ();], [int i;], bash_cv_void_sighandler=yes, bash_cv_void_sighandler=no)])dnl AC_MSG_RESULT($bash_cv_void_sighandler) if test $bash_cv_void_sighandler = yes; then AC_DEFINE(VOID_SIGHANDLER) fi ]) dnl dnl A signed 16-bit integer quantity dnl AC_DEFUN(BASH_TYPE_BITS16_T, [ if test "$ac_cv_sizeof_short" = 2; then AC_CHECK_TYPE(bits16_t, short) elif test "$ac_cv_sizeof_char" = 2; then AC_CHECK_TYPE(bits16_t, char) else AC_CHECK_TYPE(bits16_t, short) fi ]) dnl dnl An unsigned 16-bit integer quantity dnl AC_DEFUN(BASH_TYPE_U_BITS16_T, [ if test "$ac_cv_sizeof_short" = 2; then AC_CHECK_TYPE(u_bits16_t, unsigned short) elif test "$ac_cv_sizeof_char" = 2; then AC_CHECK_TYPE(u_bits16_t, unsigned char) else AC_CHECK_TYPE(u_bits16_t, unsigned short) fi ]) dnl dnl A signed 32-bit integer quantity dnl AC_DEFUN(BASH_TYPE_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then AC_CHECK_TYPE(bits32_t, int) elif test "$ac_cv_sizeof_long" = 4; then AC_CHECK_TYPE(bits32_t, long) else AC_CHECK_TYPE(bits32_t, int) fi ]) dnl dnl An unsigned 32-bit integer quantity dnl AC_DEFUN(BASH_TYPE_U_BITS32_T, [ if test "$ac_cv_sizeof_int" = 4; then AC_CHECK_TYPE(u_bits32_t, unsigned int) elif test "$ac_cv_sizeof_long" = 4; then AC_CHECK_TYPE(u_bits32_t, unsigned long) else AC_CHECK_TYPE(u_bits32_t, unsigned int) fi ]) AC_DEFUN(BASH_TYPE_PTRDIFF_T, [ if test "$ac_cv_sizeof_int" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, int) elif test "$ac_cv_sizeof_long" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, long) elif test "$ac_cv_type_long_long" = yes && test "$ac_cv_sizeof_long_long" = "$ac_cv_sizeof_char_p"; then AC_CHECK_TYPE(ptrdiff_t, [long long]) else AC_CHECK_TYPE(ptrdiff_t, int) fi ]) dnl dnl A signed 64-bit quantity dnl AC_DEFUN(BASH_TYPE_BITS64_T, [ if test "$ac_cv_sizeof_char_p" = 8; then AC_CHECK_TYPE(bits64_t, char *) elif test "$ac_cv_sizeof_double" = 8; then AC_CHECK_TYPE(bits64_t, double) elif test -n "$ac_cv_type_long_long" && test "$ac_cv_sizeof_long_long" = 8; then AC_CHECK_TYPE(bits64_t, [long long]) elif test "$ac_cv_sizeof_long" = 8; then AC_CHECK_TYPE(bits64_t, long) else AC_CHECK_TYPE(bits64_t, double) fi ]) AC_DEFUN(BASH_TYPE_LONG_LONG, [ AC_CACHE_CHECK([for long long], bash_cv_type_long_long, [AC_TRY_LINK([ long long ll = 1; int i = 63;], [ long long llm = (long long) -1; return ll << i | ll >> i | llm / ll | llm % ll; ], bash_cv_type_long_long='long long', bash_cv_type_long_long='long')]) if test "$bash_cv_type_long_long" = 'long long'; then AC_DEFINE(HAVE_LONG_LONG, 1) fi ]) AC_DEFUN(BASH_TYPE_UNSIGNED_LONG_LONG, [ AC_CACHE_CHECK([for unsigned long long], bash_cv_type_unsigned_long_long, [AC_TRY_LINK([ unsigned long long ull = 1; int i = 63;], [ unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull; ], bash_cv_type_unsigned_long_long='unsigned long long', bash_cv_type_unsigned_long_long='unsigned long')]) if test "$bash_cv_type_unsigned_long_long" = 'unsigned long long'; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1) fi ]) dnl dnl Type of struct rlimit fields: some systems (OSF/1, NetBSD, RISC/os 5.0) dnl have a rlim_t, others (4.4BSD based systems) use quad_t, others use dnl long and still others use int (HP-UX 9.01, SunOS 4.1.3). To simplify dnl matters, this just checks for rlim_t, quad_t, or long. dnl AC_DEFUN(BASH_TYPE_RLIMIT, [AC_MSG_CHECKING(for size and type of struct rlimit fields) AC_CACHE_VAL(bash_cv_type_rlimit, [AC_TRY_COMPILE([#include #include ], [rlim_t xxx;], bash_cv_type_rlimit=rlim_t,[ AC_TRY_RUN([ #include #include #include main() { #ifdef HAVE_QUAD_T struct rlimit rl; if (sizeof(rl.rlim_cur) == sizeof(quad_t)) exit(0); #endif exit(1); }], bash_cv_type_rlimit=quad_t, bash_cv_type_rlimit=long, [AC_MSG_WARN(cannot check quad_t if cross compiling -- defaulting to long) bash_cv_type_rlimit=long])]) ]) AC_MSG_RESULT($bash_cv_type_rlimit) if test $bash_cv_type_rlimit = quad_t; then AC_DEFINE(RLIMTYPE, quad_t) elif test $bash_cv_type_rlimit = rlim_t; then AC_DEFINE(RLIMTYPE, rlim_t) fi ]) AC_DEFUN(BASH_TYPE_SIG_ATOMIC_T, [AC_CACHE_CHECK([for sig_atomic_t in signal.h], ac_cv_have_sig_atomic_t, [AC_TRY_LINK([ #include ],[ sig_atomic_t x; ], ac_cv_have_sig_atomic_t=yes, ac_cv_have_sig_atomic_t=no)]) if test "$ac_cv_have_sig_atomic_t" = "no" then AC_CHECK_TYPE(sig_atomic_t,int) fi ]) AC_DEFUN(BASH_FUNC_LSTAT, [dnl Cannot use AC_CHECK_FUNCS(lstat) because Linux defines lstat() as an dnl inline function in . AC_CACHE_CHECK([for lstat], bash_cv_func_lstat, [AC_TRY_LINK([ #include #include ],[ lstat(".",(struct stat *)0); ], bash_cv_func_lstat=yes, bash_cv_func_lstat=no)]) if test $bash_cv_func_lstat = yes; then AC_DEFINE(HAVE_LSTAT) fi ]) AC_DEFUN(BASH_FUNC_INET_ATON, [ AC_CACHE_CHECK([for inet_aton], bash_cv_func_inet_aton, [AC_TRY_LINK([ #include #include #include struct in_addr ap;], [ inet_aton("127.0.0.1", &ap); ], bash_cv_func_inet_aton=yes, bash_cv_func_inet_aton=no)]) if test $bash_cv_func_inet_aton = yes; then AC_DEFINE(HAVE_INET_ATON) else AC_LIBOBJ(inet_aton) fi ]) AC_DEFUN(BASH_FUNC_GETENV, [AC_MSG_CHECKING(to see if getenv can be redefined) AC_CACHE_VAL(bash_cv_getenv_redef, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H # include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif char * getenv (name) #if defined (__linux__) || defined (__bsdi__) || defined (convex) const char *name; #else char const *name; #endif /* !__linux__ && !__bsdi__ && !convex */ { return "42"; } main() { char *s; /* The next allows this program to run, but does not allow bash to link when it redefines getenv. I'm not really interested in figuring out why not. */ #if defined (NeXT) exit(1); #endif s = getenv("ABCDE"); exit(s == 0); /* force optimizer to leave getenv in */ } ], bash_cv_getenv_redef=yes, bash_cv_getenv_redef=no, [AC_MSG_WARN(cannot check getenv redefinition if cross compiling -- defaulting to yes) bash_cv_getenv_redef=yes] )]) AC_MSG_RESULT($bash_cv_getenv_redef) if test $bash_cv_getenv_redef = yes; then AC_DEFINE(CAN_REDEFINE_GETENV) fi ]) # We should check for putenv before calling this AC_DEFUN(BASH_FUNC_STD_PUTENV, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant putenv declaration], bash_cv_std_putenv, [AC_TRY_LINK([ #if STDC_HEADERS #include #include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif #ifdef PROTOTYPES extern int putenv (char *); #else extern int putenv (); #endif ], [return (putenv == 0);], bash_cv_std_putenv=yes, bash_cv_std_putenv=no )]) if test $bash_cv_std_putenv = yes; then AC_DEFINE(HAVE_STD_PUTENV) fi ]) # We should check for unsetenv before calling this AC_DEFUN(BASH_FUNC_STD_UNSETENV, [ AC_REQUIRE([AC_HEADER_STDC]) AC_REQUIRE([AC_C_PROTOTYPES]) AC_CACHE_CHECK([for standard-conformant unsetenv declaration], bash_cv_std_unsetenv, [AC_TRY_LINK([ #if STDC_HEADERS #include #include #endif #ifndef __STDC__ # ifndef const # define const # endif #endif #ifdef PROTOTYPES extern int unsetenv (const char *); #else extern int unsetenv (); #endif ], [return (unsetenv == 0);], bash_cv_std_unsetenv=yes, bash_cv_std_unsetenv=no )]) if test $bash_cv_std_unsetenv = yes; then AC_DEFINE(HAVE_STD_UNSETENV) fi ]) AC_DEFUN(BASH_FUNC_ULIMIT_MAXFDS, [AC_MSG_CHECKING(whether ulimit can substitute for getdtablesize) AC_CACHE_VAL(bash_cv_ulimit_maxfds, [AC_TRY_RUN([ main() { long maxfds = ulimit(4, 0L); exit (maxfds == -1L); } ], bash_cv_ulimit_maxfds=yes, bash_cv_ulimit_maxfds=no, [AC_MSG_WARN(cannot check ulimit if cross compiling -- defaulting to no) bash_cv_ulimit_maxfds=no] )]) AC_MSG_RESULT($bash_cv_ulimit_maxfds) if test $bash_cv_ulimit_maxfds = yes; then AC_DEFINE(ULIMIT_MAXFDS) fi ]) AC_DEFUN(BASH_FUNC_GETCWD, [AC_MSG_CHECKING([if getcwd() will dynamically allocate memory with 0 size]) AC_CACHE_VAL(bash_cv_getcwd_malloc, [AC_TRY_RUN([ #include #ifdef HAVE_UNISTD_H #include #endif main() { char *xpwd; xpwd = getcwd(0, 0); exit (xpwd == 0); } ], bash_cv_getcwd_malloc=yes, bash_cv_getcwd_malloc=no, [AC_MSG_WARN(cannot check whether getcwd allocates memory when cross-compiling -- defaulting to no) bash_cv_getcwd_malloc=no] )]) AC_MSG_RESULT($bash_cv_getcwd_malloc) if test $bash_cv_getcwd_malloc = no; then AC_DEFINE(GETCWD_BROKEN) AC_LIBOBJ(getcwd) fi ]) dnl dnl This needs BASH_CHECK_SOCKLIB, but since that's not called on every dnl system, we can't use AC_PREREQ dnl AC_DEFUN(BASH_FUNC_GETHOSTBYNAME, [if test "X$bash_cv_have_gethostbyname" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(for gethostbyname in socket library) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_have_gethostbyname, [AC_TRY_LINK([#include ], [ struct hostent *hp; hp = gethostbyname("localhost"); ], bash_cv_have_gethostbyname=yes, bash_cv_have_gethostbyname=no)] ) if test "X$_bash_needmsg" = Xyes; then AC_MSG_CHECKING(for gethostbyname in socket library) fi AC_MSG_RESULT($bash_cv_have_gethostbyname) if test "$bash_cv_have_gethostbyname" = yes; then AC_DEFINE(HAVE_GETHOSTBYNAME) fi ]) AC_DEFUN(BASH_FUNC_FNMATCH_EXTMATCH, [AC_MSG_CHECKING(if fnmatch does extended pattern matching with FNM_EXTMATCH) AC_CACHE_VAL(bash_cv_fnm_extmatch, [AC_TRY_RUN([ #include main() { #ifdef FNM_EXTMATCH exit (0); #else exit (1); #endif } ], bash_cv_fnm_extmatch=yes, bash_cv_fnm_extmatch=no, [AC_MSG_WARN(cannot check FNM_EXTMATCH if cross compiling -- defaulting to no) bash_cv_fnm_extmatch=no]) ]) AC_MSG_RESULT($bash_cv_fnm_extmatch) if test $bash_cv_fnm_extmatch = yes; then AC_DEFINE(HAVE_LIBC_FNM_EXTMATCH) fi ]) AC_DEFUN(BASH_FUNC_POSIX_SETJMP, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of POSIX-style sigsetjmp/siglongjmp) AC_CACHE_VAL(bash_cv_func_sigsetjmp, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H #include #endif #include #include #include main() { #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS) exit (1); #else int code; sigset_t set, oset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); /* save it */ code = sigsetjmp(xx, 1); if (code) exit(0); /* could get sigmask and compare to oset here. */ /* change it */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); /* and siglongjmp */ siglongjmp(xx, 10); exit(1); #endif }], bash_cv_func_sigsetjmp=present, bash_cv_func_sigsetjmp=missing, [AC_MSG_WARN(cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing) bash_cv_func_sigsetjmp=missing] )]) AC_MSG_RESULT($bash_cv_func_sigsetjmp) if test $bash_cv_func_sigsetjmp = present; then AC_DEFINE(HAVE_POSIX_SIGSETJMP) fi ]) AC_DEFUN(BASH_FUNC_STRCOLL, [ AC_MSG_CHECKING(whether or not strcoll and strcmp differ) AC_CACHE_VAL(bash_cv_func_strcoll_broken, [AC_TRY_RUN([ #include #if defined (HAVE_LOCALE_H) #include #endif main(c, v) int c; char *v[]; { int r1, r2; char *deflocale, *defcoll; #ifdef HAVE_SETLOCALE deflocale = setlocale(LC_ALL, ""); defcoll = setlocale(LC_COLLATE, ""); #endif #ifdef HAVE_STRCOLL /* These two values are taken from tests/glob-test. */ r1 = strcoll("abd", "aXd"); #else r1 = 0; #endif r2 = strcmp("abd", "aXd"); /* These two should both be greater than 0. It is permissible for a system to return different values, as long as the sign is the same. */ /* Exit with 1 (failure) if these two values are both > 0, since this tests whether strcoll(3) is broken with respect to strcmp(3) in the default locale. */ exit (r1 > 0 && r2 > 0); } ], bash_cv_func_strcoll_broken=yes, bash_cv_func_strcoll_broken=no, [AC_MSG_WARN(cannot check strcoll if cross compiling -- defaulting to no) bash_cv_func_strcoll_broken=no] )]) AC_MSG_RESULT($bash_cv_func_strcoll_broken) if test $bash_cv_func_strcoll_broken = yes; then AC_DEFINE(STRCOLL_BROKEN) fi ]) AC_DEFUN(BASH_FUNC_PRINTF_A_FORMAT, [AC_MSG_CHECKING([for printf floating point output in hex notation]) AC_CACHE_VAL(bash_cv_printf_a_format, [AC_TRY_RUN([ #include #include int main() { double y = 0.0; char abuf[1024]; sprintf(abuf, "%A", y); exit(strchr(abuf, 'P') == (char *)0); } ], bash_cv_printf_a_format=yes, bash_cv_printf_a_format=no, [AC_MSG_WARN(cannot check printf if cross compiling -- defaulting to no) bash_cv_printf_a_format=no] )]) AC_MSG_RESULT($bash_cv_printf_a_format) if test $bash_cv_printf_a_format = yes; then AC_DEFINE(HAVE_PRINTF_A_FORMAT) fi ]) AC_DEFUN(BASH_STRUCT_TERMIOS_LDISC, [ AC_CHECK_MEMBER(struct termios.c_line, AC_DEFINE(TERMIOS_LDISC), ,[ #include #include ]) ]) AC_DEFUN(BASH_STRUCT_TERMIO_LDISC, [ AC_CHECK_MEMBER(struct termio.c_line, AC_DEFINE(TERMIO_LDISC), ,[ #include #include ]) ]) dnl dnl Like AC_STRUCT_ST_BLOCKS, but doesn't muck with LIBOBJS dnl dnl sets bash_cv_struct_stat_st_blocks dnl dnl unused for now; we'll see how AC_CHECK_MEMBERS works dnl AC_DEFUN(BASH_STRUCT_ST_BLOCKS, [ AC_MSG_CHECKING([for struct stat.st_blocks]) AC_CACHE_VAL(bash_cv_struct_stat_st_blocks, [AC_TRY_COMPILE( [ #include #include ], [ main() { static struct stat a; if (a.st_blocks) return 0; return 0; } ], bash_cv_struct_stat_st_blocks=yes, bash_cv_struct_stat_st_blocks=no) ]) AC_MSG_RESULT($bash_cv_struct_stat_st_blocks) if test "$bash_cv_struct_stat_st_blocks" = "yes"; then AC_DEFINE(HAVE_STRUCT_STAT_ST_BLOCKS) fi ]) AC_DEFUN([BASH_CHECK_LIB_TERMCAP], [ if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(which library has the termcap functions) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_termcap_lib, [AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc, [AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo, [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses, [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses, bash_cv_termcap_lib=gnutermcap)])])])])]) if test "X$_bash_needmsg" = "Xyes"; then AC_MSG_CHECKING(which library has the termcap functions) fi AC_MSG_RESULT(using $bash_cv_termcap_lib) if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi ]) dnl dnl Check for the presence of getpeername in libsocket. dnl If libsocket is present, check for libnsl and add it to LIBS if dnl it's there, since most systems with libsocket require linking dnl with libnsl as well. This should only be called if getpeername dnl was not found in libc. dnl dnl NOTE: IF WE FIND GETPEERNAME, WE ASSUME THAT WE HAVE BIND/CONNECT dnl AS WELL dnl AC_DEFUN(BASH_CHECK_LIB_SOCKET, [ if test "X$bash_cv_have_socklib" = "X"; then _bash_needmsg= else AC_MSG_CHECKING(for socket library) _bash_needmsg=yes fi AC_CACHE_VAL(bash_cv_have_socklib, [AC_CHECK_LIB(socket, getpeername, bash_cv_have_socklib=yes, bash_cv_have_socklib=no, -lnsl)]) if test "X$_bash_needmsg" = Xyes; then AC_MSG_RESULT($bash_cv_have_socklib) _bash_needmsg= fi if test $bash_cv_have_socklib = yes; then # check for libnsl, add it to LIBS if present if test "X$bash_cv_have_libnsl" = "X"; then _bash_needmsg= else AC_MSG_CHECKING(for libnsl) _bash_needmsg=yes fi AC_CACHE_VAL(bash_cv_have_libnsl, [AC_CHECK_LIB(nsl, t_open, bash_cv_have_libnsl=yes, bash_cv_have_libnsl=no)]) if test "X$_bash_needmsg" = Xyes; then AC_MSG_RESULT($bash_cv_have_libnsl) _bash_needmsg= fi if test $bash_cv_have_libnsl = yes; then LIBS="-lsocket -lnsl $LIBS" else LIBS="-lsocket $LIBS" fi AC_DEFINE(HAVE_LIBSOCKET) AC_DEFINE(HAVE_GETPEERNAME) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_INO, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_ino) AC_CACHE_VAL(bash_cv_dirent_has_dino, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_ino; ], bash_cv_dirent_has_dino=yes, bash_cv_dirent_has_dino=no)]) AC_MSG_RESULT($bash_cv_dirent_has_dino) if test $bash_cv_dirent_has_dino = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_INO) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_FILENO, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_fileno) AC_CACHE_VAL(bash_cv_dirent_has_d_fileno, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_fileno; ], bash_cv_dirent_has_d_fileno=yes, bash_cv_dirent_has_d_fileno=no)]) AC_MSG_RESULT($bash_cv_dirent_has_d_fileno) if test $bash_cv_dirent_has_d_fileno = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_FILENO) fi ]) AC_DEFUN(BASH_STRUCT_DIRENT_D_NAMLEN, [AC_REQUIRE([AC_HEADER_DIRENT]) AC_MSG_CHECKING(for struct dirent.d_namlen) AC_CACHE_VAL(bash_cv_dirent_has_d_namlen, [AC_TRY_COMPILE([ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ ],[ struct dirent d; int z; z = d.d_namlen; ], bash_cv_dirent_has_d_namlen=yes, bash_cv_dirent_has_d_namlen=no)]) AC_MSG_RESULT($bash_cv_dirent_has_d_namlen) if test $bash_cv_dirent_has_d_namlen = yes; then AC_DEFINE(HAVE_STRUCT_DIRENT_D_NAMLEN) fi ]) AC_DEFUN(BASH_STRUCT_TIMEVAL, [AC_MSG_CHECKING(for struct timeval in sys/time.h and time.h) AC_CACHE_VAL(bash_cv_struct_timeval, [ AC_EGREP_HEADER(struct timeval, sys/time.h, bash_cv_struct_timeval=yes, AC_EGREP_HEADER(struct timeval, time.h, bash_cv_struct_timeval=yes, bash_cv_struct_timeval=no)) ]) AC_MSG_RESULT($bash_cv_struct_timeval) if test $bash_cv_struct_timeval = yes; then AC_DEFINE(HAVE_TIMEVAL) fi ]) AC_DEFUN(BASH_STRUCT_TIMEZONE, [AC_MSG_CHECKING(for struct timezone in sys/time.h and time.h) AC_CACHE_VAL(bash_cv_struct_timezone, [ AC_EGREP_HEADER(struct timezone, sys/time.h, bash_cv_struct_timezone=yes, AC_EGREP_HEADER(struct timezone, time.h, bash_cv_struct_timezone=yes, bash_cv_struct_timezone=no)) ]) AC_MSG_RESULT($bash_cv_struct_timezone) if test $bash_cv_struct_timezone = yes; then AC_DEFINE(HAVE_STRUCT_TIMEZONE) fi ]) AC_DEFUN(BASH_STRUCT_WINSIZE, [AC_MSG_CHECKING(for struct winsize in sys/ioctl.h and termios.h) AC_CACHE_VAL(bash_cv_struct_winsize_header, [AC_TRY_COMPILE([#include #include ], [struct winsize x;], bash_cv_struct_winsize_header=ioctl_h, [AC_TRY_COMPILE([#include #include ], [struct winsize x;], bash_cv_struct_winsize_header=termios_h, bash_cv_struct_winsize_header=other) ])]) if test $bash_cv_struct_winsize_header = ioctl_h; then AC_MSG_RESULT(sys/ioctl.h) AC_DEFINE(STRUCT_WINSIZE_IN_SYS_IOCTL) elif test $bash_cv_struct_winsize_header = termios_h; then AC_MSG_RESULT(termios.h) AC_DEFINE(STRUCT_WINSIZE_IN_TERMIOS) else AC_MSG_RESULT(not found) fi ]) dnl Check type of signal routines (posix, 4.2bsd, 4.1bsd or v7) AC_DEFUN(BASH_SYS_SIGNAL_VINTAGE, [AC_REQUIRE([AC_TYPE_SIGNAL]) AC_MSG_CHECKING(for type of signal functions) AC_CACHE_VAL(bash_cv_signal_vintage, [ AC_TRY_LINK([#include ],[ sigset_t ss; struct sigaction sa; sigemptyset(&ss); sigsuspend(&ss); sigaction(SIGINT, &sa, (struct sigaction *) 0); sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); ], bash_cv_signal_vintage=posix, [ AC_TRY_LINK([#include ], [ int mask = sigmask(SIGINT); sigsetmask(mask); sigblock(mask); sigpause(mask); ], bash_cv_signal_vintage=4.2bsd, [ AC_TRY_LINK([ #include RETSIGTYPE foo() { }], [ int mask = sigmask(SIGINT); sigset(SIGINT, foo); sigrelse(SIGINT); sighold(SIGINT); sigpause(SIGINT); ], bash_cv_signal_vintage=svr3, bash_cv_signal_vintage=v7 )] )] ) ]) AC_MSG_RESULT($bash_cv_signal_vintage) if test "$bash_cv_signal_vintage" = posix; then AC_DEFINE(HAVE_POSIX_SIGNALS) elif test "$bash_cv_signal_vintage" = "4.2bsd"; then AC_DEFINE(HAVE_BSD_SIGNALS) elif test "$bash_cv_signal_vintage" = svr3; then AC_DEFINE(HAVE_USG_SIGHOLD) fi ]) dnl Check if the pgrp of setpgrp() can't be the pid of a zombie process. AC_DEFUN(BASH_SYS_PGRP_SYNC, [AC_REQUIRE([AC_FUNC_GETPGRP]) AC_MSG_CHECKING(whether pgrps need synchronization) AC_CACHE_VAL(bash_cv_pgrp_pipe, [AC_TRY_RUN([ #ifdef HAVE_UNISTD_H # include #endif main() { # ifdef GETPGRP_VOID # define getpgID() getpgrp() # else # define getpgID() getpgrp(0) # define setpgid(x,y) setpgrp(x,y) # endif int pid1, pid2, fds[2]; int status; char ok; switch (pid1 = fork()) { case -1: exit(1); case 0: setpgid(0, getpid()); exit(0); } setpgid(pid1, pid1); sleep(2); /* let first child die */ if (pipe(fds) < 0) exit(2); switch (pid2 = fork()) { case -1: exit(3); case 0: setpgid(0, pid1); ok = getpgID() == pid1; write(fds[1], &ok, 1); exit(0); } setpgid(pid2, pid1); close(fds[1]); if (read(fds[0], &ok, 1) != 1) exit(4); wait(&status); wait(&status); exit(ok ? 0 : 5); } ], bash_cv_pgrp_pipe=no,bash_cv_pgrp_pipe=yes, [AC_MSG_WARN(cannot check pgrp synchronization if cross compiling -- defaulting to no) bash_cv_pgrp_pipe=no]) ]) AC_MSG_RESULT($bash_cv_pgrp_pipe) if test $bash_cv_pgrp_pipe = yes; then AC_DEFINE(PGRP_PIPE) fi ]) AC_DEFUN(BASH_SYS_REINSTALL_SIGHANDLERS, [AC_REQUIRE([AC_TYPE_SIGNAL]) AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING([if signal handlers must be reinstalled when invoked]) AC_CACHE_VAL(bash_cv_must_reinstall_sighandlers, [AC_TRY_RUN([ #include #ifdef HAVE_UNISTD_H #include #endif typedef RETSIGTYPE sigfunc(); int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * set_signal_handler(sig, handler) int sig; sigfunc *handler; { struct sigaction act, oact; act.sa_handler = handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigemptyset (&oact.sa_mask); sigaction (sig, &act, &oact); return (oact.sa_handler); } #else #define set_signal_handler(s, h) signal(s, h) #endif RETSIGTYPE sigint(s) int s; { nsigint++; } main() { nsigint = 0; set_signal_handler(SIGINT, sigint); kill((int)getpid(), SIGINT); kill((int)getpid(), SIGINT); exit(nsigint != 2); } ], bash_cv_must_reinstall_sighandlers=no, bash_cv_must_reinstall_sighandlers=yes, [AC_MSG_WARN(cannot check signal handling if cross compiling -- defaulting to no) bash_cv_must_reinstall_sighandlers=no] )]) AC_MSG_RESULT($bash_cv_must_reinstall_sighandlers) if test $bash_cv_must_reinstall_sighandlers = yes; then AC_DEFINE(MUST_REINSTALL_SIGHANDLERS) fi ]) dnl check that some necessary job control definitions are present AC_DEFUN(BASH_SYS_JOB_CONTROL_MISSING, [AC_REQUIRE([BASH_SYS_SIGNAL_VINTAGE]) AC_MSG_CHECKING(for presence of necessary job control definitions) AC_CACHE_VAL(bash_cv_job_control_missing, [AC_TRY_RUN([ #include #ifdef HAVE_SYS_WAIT_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include /* Add more tests in here as appropriate. */ main() { /* signal type */ #if !defined (HAVE_POSIX_SIGNALS) && !defined (HAVE_BSD_SIGNALS) exit(1); #endif /* signals and tty control. */ #if !defined (SIGTSTP) || !defined (SIGSTOP) || !defined (SIGCONT) exit (1); #endif /* process control */ #if !defined (WNOHANG) || !defined (WUNTRACED) exit(1); #endif /* Posix systems have tcgetpgrp and waitpid. */ #if defined (_POSIX_VERSION) && !defined (HAVE_TCGETPGRP) exit(1); #endif #if defined (_POSIX_VERSION) && !defined (HAVE_WAITPID) exit(1); #endif /* Other systems have TIOCSPGRP/TIOCGPRGP and wait3. */ #if !defined (_POSIX_VERSION) && !defined (HAVE_WAIT3) exit(1); #endif exit(0); }], bash_cv_job_control_missing=present, bash_cv_job_control_missing=missing, [AC_MSG_WARN(cannot check job control if cross-compiling -- defaulting to missing) bash_cv_job_control_missing=missing] )]) AC_MSG_RESULT($bash_cv_job_control_missing) if test $bash_cv_job_control_missing = missing; then AC_DEFINE(JOB_CONTROL_MISSING) fi ]) dnl check whether named pipes are present dnl this requires a previous check for mkfifo, but that is awkward to specify AC_DEFUN(BASH_SYS_NAMED_PIPES, [AC_MSG_CHECKING(for presence of named pipes) AC_CACHE_VAL(bash_cv_sys_named_pipes, [AC_TRY_RUN([ #include #include #ifdef HAVE_UNISTD_H #include #endif /* Add more tests in here as appropriate. */ main() { int fd, err; #if defined (HAVE_MKFIFO) exit (0); #endif #if !defined (S_IFIFO) && (defined (_POSIX_VERSION) && !defined (S_ISFIFO)) exit (1); #endif #if defined (NeXT) exit (1); #endif err = mkdir("bash-aclocal", 0700); if (err < 0) { perror ("mkdir"); exit(1); } fd = mknod ("bash-aclocal/sh-np-autoconf", 0666 | S_IFIFO, 0); if (fd == -1) { rmdir ("bash-aclocal"); exit (1); } close(fd); unlink ("bash-aclocal/sh-np-autoconf"); rmdir ("bash-aclocal"); exit(0); }], bash_cv_sys_named_pipes=present, bash_cv_sys_named_pipes=missing, [AC_MSG_WARN(cannot check for named pipes if cross-compiling -- defaulting to missing) bash_cv_sys_named_pipes=missing] )]) AC_MSG_RESULT($bash_cv_sys_named_pipes) if test $bash_cv_sys_named_pipes = missing; then AC_DEFINE(NAMED_PIPES_MISSING) fi ]) AC_DEFUN(BASH_SYS_DEFAULT_MAIL_DIR, [AC_MSG_CHECKING(for default mail directory) AC_CACHE_VAL(bash_cv_mail_dir, [if test -d /var/mail; then bash_cv_mail_dir=/var/mail elif test -d /var/spool/mail; then bash_cv_mail_dir=/var/spool/mail elif test -d /usr/mail; then bash_cv_mail_dir=/usr/mail elif test -d /usr/spool/mail; then bash_cv_mail_dir=/usr/spool/mail else bash_cv_mail_dir=unknown fi ]) AC_MSG_RESULT($bash_cv_mail_dir) AC_DEFINE_UNQUOTED(DEFAULT_MAIL_DIRECTORY, "$bash_cv_mail_dir") ]) AC_DEFUN(BASH_HAVE_TIOCGWINSZ, [AC_MSG_CHECKING(for TIOCGWINSZ in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocgwinsz_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = TIOCGWINSZ;], bash_cv_tiocgwinsz_in_ioctl=yes,bash_cv_tiocgwinsz_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_tiocgwinsz_in_ioctl) if test $bash_cv_tiocgwinsz_in_ioctl = yes; then AC_DEFINE(GWINSZ_IN_SYS_IOCTL) fi ]) AC_DEFUN(BASH_HAVE_TIOCSTAT, [AC_MSG_CHECKING(for TIOCSTAT in sys/ioctl.h) AC_CACHE_VAL(bash_cv_tiocstat_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = TIOCSTAT;], bash_cv_tiocstat_in_ioctl=yes,bash_cv_tiocstat_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_tiocstat_in_ioctl) if test $bash_cv_tiocstat_in_ioctl = yes; then AC_DEFINE(TIOCSTAT_IN_SYS_IOCTL) fi ]) AC_DEFUN(BASH_HAVE_FIONREAD, [AC_MSG_CHECKING(for FIONREAD in sys/ioctl.h) AC_CACHE_VAL(bash_cv_fionread_in_ioctl, [AC_TRY_COMPILE([#include #include ], [int x = FIONREAD;], bash_cv_fionread_in_ioctl=yes,bash_cv_fionread_in_ioctl=no)]) AC_MSG_RESULT($bash_cv_fionread_in_ioctl) if test $bash_cv_fionread_in_ioctl = yes; then AC_DEFINE(FIONREAD_IN_SYS_IOCTL) fi ]) dnl dnl See if speed_t is declared in . Some versions of linux dnl require a definition of speed_t each time is included, dnl but you can only get speed_t if you include (on some dnl versions) or (on others). dnl AC_DEFUN(BASH_CHECK_SPEED_T, [AC_MSG_CHECKING(for speed_t in sys/types.h) AC_CACHE_VAL(bash_cv_speed_t_in_sys_types, [AC_TRY_COMPILE([#include ], [speed_t x;], bash_cv_speed_t_in_sys_types=yes,bash_cv_speed_t_in_sys_types=no)]) AC_MSG_RESULT($bash_cv_speed_t_in_sys_types) if test $bash_cv_speed_t_in_sys_types = yes; then AC_DEFINE(SPEED_T_IN_SYS_TYPES) fi ]) AC_DEFUN(BASH_CHECK_GETPW_FUNCS, [AC_MSG_CHECKING(whether getpw functions are declared in pwd.h) AC_CACHE_VAL(bash_cv_getpw_declared, [AC_EGREP_CPP(getpwuid, [ #include #ifdef HAVE_UNISTD_H # include #endif #include ], bash_cv_getpw_declared=yes,bash_cv_getpw_declared=no)]) AC_MSG_RESULT($bash_cv_getpw_declared) if test $bash_cv_getpw_declared = yes; then AC_DEFINE(HAVE_GETPW_DECLS) fi ]) AC_DEFUN(BASH_CHECK_DEV_FD, [AC_MSG_CHECKING(whether /dev/fd is available) AC_CACHE_VAL(bash_cv_dev_fd, [bash_cv_dev_fd="" if test -d /dev/fd && (exec test -r /dev/fd/0 < /dev/null) ; then # check for systems like FreeBSD 5 that only provide /dev/fd/[012] if (exec test -r /dev/fd/3 3 #include ], [ int f; f = RLIMIT_DATA; ], bash_cv_kernel_rlimit=no, [AC_TRY_COMPILE([ #include #define _KERNEL #include #undef _KERNEL ], [ int f; f = RLIMIT_DATA; ], bash_cv_kernel_rlimit=yes, bash_cv_kernel_rlimit=no)] )]) AC_MSG_RESULT($bash_cv_kernel_rlimit) if test $bash_cv_kernel_rlimit = yes; then AC_DEFINE(RLIMIT_NEEDS_KERNEL) fi ]) dnl dnl Check for 64-bit off_t -- used for malloc alignment dnl dnl C does not allow duplicate case labels, so the compile will fail if dnl sizeof(off_t) is > 4. dnl AC_DEFUN(BASH_CHECK_OFF_T_64, [AC_CACHE_CHECK(for 64-bit off_t, bash_cv_off_t_64, AC_TRY_COMPILE([ #ifdef HAVE_UNISTD_H #include #endif #include ],[ switch (0) case 0: case (sizeof (off_t) <= 4):; ], bash_cv_off_t_64=no, bash_cv_off_t_64=yes)) if test $bash_cv_off_t_64 = yes; then AC_DEFINE(HAVE_OFF_T_64) fi]) AC_DEFUN(BASH_CHECK_RTSIGS, [AC_MSG_CHECKING(for unusable real-time signals due to large values) AC_CACHE_VAL(bash_cv_unusable_rtsigs, [AC_TRY_RUN([ #include #include #ifndef NSIG # define NSIG 64 #endif main () { int n_sigs = 2 * NSIG; #ifdef SIGRTMIN int rtmin = SIGRTMIN; #else int rtmin = 0; #endif exit(rtmin < n_sigs); }], bash_cv_unusable_rtsigs=yes, bash_cv_unusable_rtsigs=no, [AC_MSG_WARN(cannot check real-time signals if cross compiling -- defaulting to yes) bash_cv_unusable_rtsigs=yes] )]) AC_MSG_RESULT($bash_cv_unusable_rtsigs) if test $bash_cv_unusable_rtsigs = yes; then AC_DEFINE(UNUSABLE_RT_SIGNALS) fi ]) dnl dnl check for availability of multibyte characters and functions dnl dnl geez, I wish I didn't have to check for all of this stuff separately dnl AC_DEFUN(BASH_CHECK_MULTIBYTE, [ AC_CHECK_HEADERS(wctype.h) AC_CHECK_HEADERS(wchar.h) AC_CHECK_HEADERS(langinfo.h) AC_CHECK_HEADERS(mbstr.h) AC_CHECK_FUNC(mbrlen, AC_DEFINE(HAVE_MBRLEN)) AC_CHECK_FUNC(mbscasecmp, AC_DEFINE(HAVE_MBSCMP)) AC_CHECK_FUNC(mbscmp, AC_DEFINE(HAVE_MBSCMP)) AC_CHECK_FUNC(mbsnrtowcs, AC_DEFINE(HAVE_MBSNRTOWCS)) AC_CHECK_FUNC(mbsrtowcs, AC_DEFINE(HAVE_MBSRTOWCS)) AC_REPLACE_FUNCS(mbschr) AC_CHECK_FUNC(wcrtomb, AC_DEFINE(HAVE_WCRTOMB)) AC_CHECK_FUNC(wcscoll, AC_DEFINE(HAVE_WCSCOLL)) AC_CHECK_FUNC(wcsdup, AC_DEFINE(HAVE_WCSDUP)) AC_CHECK_FUNC(wcwidth, AC_DEFINE(HAVE_WCWIDTH)) AC_CHECK_FUNC(wctype, AC_DEFINE(HAVE_WCTYPE)) AC_REPLACE_FUNCS(wcswidth) dnl checks for both mbrtowc and mbstate_t AC_FUNC_MBRTOWC if test $ac_cv_func_mbrtowc = yes; then AC_DEFINE(HAVE_MBSTATE_T) fi AC_CHECK_FUNCS(iswlower iswupper towlower towupper iswctype) AC_CACHE_CHECK([for nl_langinfo and CODESET], bash_cv_langinfo_codeset, [AC_TRY_LINK( [#include ], [char* cs = nl_langinfo(CODESET);], bash_cv_langinfo_codeset=yes, bash_cv_langinfo_codeset=no)]) if test $bash_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET) fi dnl check for wchar_t in AC_CACHE_CHECK([for wchar_t in wchar.h], bash_cv_type_wchar_t, [AC_TRY_COMPILE( [#include ], [ wchar_t foo; foo = 0; ], bash_cv_type_wchar_t=yes, bash_cv_type_wchar_t=no)]) if test $bash_cv_type_wchar_t = yes; then AC_DEFINE(HAVE_WCHAR_T, 1, [systems should define this type here]) fi dnl check for wctype_t in AC_CACHE_CHECK([for wctype_t in wctype.h], bash_cv_type_wctype_t, [AC_TRY_COMPILE( [#include ], [ wctype_t foo; foo = 0; ], bash_cv_type_wctype_t=yes, bash_cv_type_wctype_t=no)]) if test $bash_cv_type_wctype_t = yes; then AC_DEFINE(HAVE_WCTYPE_T, 1, [systems should define this type here]) fi dnl check for wint_t in AC_CACHE_CHECK([for wint_t in wctype.h], bash_cv_type_wint_t, [AC_TRY_COMPILE( [#include ], [ wint_t foo; foo = 0; ], bash_cv_type_wint_t=yes, bash_cv_type_wint_t=no)]) if test $bash_cv_type_wint_t = yes; then AC_DEFINE(HAVE_WINT_T, 1, [systems should define this type here]) fi dnl check for broken wcwidth AC_CACHE_CHECK([for wcwidth broken with unicode combining characters], bash_cv_wcwidth_broken, [AC_TRY_RUN([ #include #include #include #include #include main(c, v) int c; char **v; { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); exit (w == 0); /* exit 0 if wcwidth broken */ } ], bash_cv_wcwidth_broken=yes, bash_cv_wcwidth_broken=no, bash_cv_wcwidth_broken=no)]) if test "$bash_cv_wcwidth_broken" = yes; then AC_DEFINE(WCWIDTH_BROKEN, 1, [wcwidth is usually not broken]) fi if test "$am_cv_func_iconv" = yes; then OLDLIBS="$LIBS" LIBS="$LIBS $LIBINTL $LIBICONV" AC_CHECK_FUNCS(locale_charset) LIBS="$OLDLIBS" fi ]) dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB dnl require: dnl AC_PROG_CC dnl BASH_CHECK_LIB_TERMCAP AC_DEFUN([RL_LIB_READLINE_VERSION], [ AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) AC_MSG_CHECKING([version of installed readline library]) # What a pain in the ass this is. # save cpp and ld options _save_CFLAGS="$CFLAGS" _save_LDFLAGS="$LDFLAGS" _save_LIBS="$LIBS" # Don't set ac_cv_rl_prefix if the caller has already assigned a value. This # allows the caller to do something like $_rl_prefix=$withval if the user # specifies --with-installed-readline=PREFIX as an argument to configure if test -z "$ac_cv_rl_prefix"; then test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix} fi eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib LIBS="$LIBS -lreadline ${TERMCAP_LIB}" CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" AC_CACHE_VAL(ac_cv_rl_version, [AC_TRY_RUN([ #include #include extern int rl_gnu_readline_p; main() { FILE *fp; fp = fopen("conftest.rlv", "w"); if (fp == 0) exit(1); if (rl_gnu_readline_p != 1) fprintf(fp, "0.0\n"); else fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0"); fclose(fp); exit(0); } ], ac_cv_rl_version=`cat conftest.rlv`, ac_cv_rl_version='0.0', ac_cv_rl_version='6.3')]) CFLAGS="$_save_CFLAGS" LDFLAGS="$_save_LDFLAGS" LIBS="$_save_LIBS" RL_MAJOR=0 RL_MINOR=0 # ( case "$ac_cv_rl_version" in 2*|3*|4*|5*|6*|7*|8*|9*) RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'` RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'` ;; esac # ((( case $RL_MAJOR in [[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;; [[0-9]]) _RL_MAJOR=0$RL_MAJOR ;; *) _RL_MAJOR=00 ;; esac # ((( case $RL_MINOR in [[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;; [[0-9]]) _RL_MINOR=0$RL_MINOR ;; *) _RL_MINOR=00 ;; esac RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" # Readline versions greater than 4.2 have these defines in readline.h if test $ac_cv_rl_version = '0.0' ; then AC_MSG_WARN([Could not test version of installed readline library.]) elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) else AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library]) AC_SUBST(RL_VERSION) AC_SUBST(RL_MAJOR) AC_SUBST(RL_MINOR) # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) fi ]) AC_DEFUN(BASH_FUNC_CTYPE_NONASCII, [ AC_MSG_CHECKING(whether the ctype macros accept non-ascii characters) AC_CACHE_VAL(bash_cv_func_ctype_nonascii, [AC_TRY_RUN([ #ifdef HAVE_LOCALE_H #include #endif #include #include main(c, v) int c; char *v[]; { char *deflocale; unsigned char x; int r1, r2; #ifdef HAVE_SETLOCALE /* We take a shot here. If that locale is not known, try the system default. We try this one because '\342' (226) is known to be a printable character in that locale. */ deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); if (deflocale == 0) deflocale = setlocale(LC_ALL, ""); #endif x = '\342'; r1 = isprint(x); x -= 128; r2 = isprint(x); exit (r1 == 0 || r2 == 0); } ], bash_cv_func_ctype_nonascii=yes, bash_cv_func_ctype_nonascii=no, [AC_MSG_WARN(cannot check ctype macros if cross compiling -- defaulting to no) bash_cv_func_ctype_nonascii=no] )]) AC_MSG_RESULT($bash_cv_func_ctype_nonascii) if test $bash_cv_func_ctype_nonascii = yes; then AC_DEFINE(CTYPE_NON_ASCII) fi ]) AC_DEFUN(BASH_CHECK_WCONTINUED, [ AC_MSG_CHECKING(whether WCONTINUED flag to waitpid is unavailable or available but broken) AC_CACHE_VAL(bash_cv_wcontinued_broken, [AC_TRY_RUN([ #include #include #include #include #ifndef errno extern int errno; #endif main() { int x; x = waitpid(-1, (int *)0, WNOHANG|WCONTINUED); if (x == -1 && errno == EINVAL) exit (1); else exit (0); } ], bash_cv_wcontinued_broken=no,bash_cv_wcontinued_broken=yes, [AC_MSG_WARN(cannot check WCONTINUED if cross compiling -- defaulting to no) bash_cv_wcontinued_broken=no] )]) AC_MSG_RESULT($bash_cv_wcontinued_broken) if test $bash_cv_wcontinued_broken = yes; then AC_DEFINE(WCONTINUED_BROKEN) fi ]) dnl dnl tests added for bashdb dnl AC_DEFUN([AM_PATH_LISPDIR], [AC_ARG_WITH(lispdir, AC_HELP_STRING([--with-lispdir], [override the default lisp directory]), [ lispdir="$withval" AC_MSG_CHECKING([where .elc files should go]) AC_MSG_RESULT([$lispdir])], [ # If set to t, that means we are running in a shell under Emacs. # If you have an Emacs named "t", then use the full path. test x"$EMACS" = xt && EMACS= AC_CHECK_PROGS(EMACS, emacs xemacs, no) if test $EMACS != "no"; then if test x${lispdir+set} != xset; then AC_CACHE_CHECK([where .elc files should go], [am_cv_lispdir], [dnl am_cv_lispdir=`$EMACS -batch -q -eval '(while load-path (princ (concat (car load-path) "\n")) (setq load-path (cdr load-path)))' | sed -n -e 's,/$,,' -e '/.*\/lib\/\(x\?emacs\/site-lisp\)$/{s,,${libdir}/\1,;p;q;}' -e '/.*\/share\/\(x\?emacs\/site-lisp\)$/{s,,${datadir}/\1,;p;q;}'` if test -z "$am_cv_lispdir"; then am_cv_lispdir='${datadir}/emacs/site-lisp' fi ]) lispdir="$am_cv_lispdir" fi fi ]) AC_SUBST(lispdir) ]) dnl dnl tests added for gettext dnl # codeset.m4 serial AM1 (gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset, [AC_TRY_LINK([#include ], [char* cs = nl_langinfo(CODESET);], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) # gettext.m4 serial 20 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define(gt_included_intl, ifelse([$1], [external], [no], [yes])) define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], [])) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Set USE_NLS. AM_NLS ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. dnl Add a version number to the cache macros. define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1))) define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc]) define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl]) AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc, [AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings], gt_cv_func_gnugettext_libc=yes, gt_cv_func_gnugettext_libc=no)]) if test "$gt_cv_func_gnugettext_libc" != "yes"; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], gt_cv_func_gnugettext_libintl, [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], gt_cv_func_gnugettext_libintl=yes, gt_cv_func_gnugettext_libintl=no) dnl Now see whether libintl exists and depends on libiconv. if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include ]ifelse([$2], [need-formatstring-macros], [#ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ], [])[extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias ();], [bindtextdomain ("", ""); return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" gt_cv_func_gnugettext_libintl=yes ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if test "$gt_cv_func_gnugettext_libc" = "yes" \ || { test "$gt_cv_func_gnugettext_libintl" = "yes" \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if test "$gt_cv_func_gnugettext_libintl" = "yes"; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([AC_ISC_POSIX])dnl AC_REQUIRE([AC_HEADER_STDC])dnl AC_REQUIRE([AC_C_CONST])dnl AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_OFF_T])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([jm_GLIBC21])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([jm_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \ stdlib.h string.h unistd.h sys/param.h]) AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \ geteuid getgid getuid mempcpy munmap putenv setenv setlocale localeconv stpcpy \ strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next \ __fsetlocking]) AM_ICONV AM_LANGINFO_CODESET if test $ac_cv_header_locale_h = yes; then AM_LC_MESSAGES fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) # glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([jm_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) # iconv.m4 serial AM4 (gettext-0.11.3) dnl Copyright (C) 2000-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK(for iconv, am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) # intdiv0.m4 serial 1 (gettext-0.11.3) dnl Copyright (C) 2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ AC_TRY_RUN([ #include #include static void #ifdef __cplusplus sigfpe_handler (int sig) #else sigfpe_handler (sig) int sig; #endif { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac ]) ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) # inttypes.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H if exists and doesn't clash with # . AC_DEFUN([gt_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h, [ AC_TRY_COMPILE( [#include #include ], [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no) ]) if test $gt_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1, [Define if exists and doesn't clash with .]) fi ]) # inttypes_h.m4 serial 5 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_inttypes_h=yes, jm_ac_cv_header_inttypes_h=no)]) if test $jm_ac_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # inttypes-pri.m4 serial 1 (gettext-0.11.4) dnl Copyright (C) 1997-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_REQUIRE([gt_HEADER_INTTYPES_H]) if test $gt_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) fi ]) # isc-posix.m4 serial 2 (gettext-0.11.2) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. # This file is not needed with autoconf-2.53 and newer. Remove it in 2005. # This test replaces the one in autoconf. # Currently this macro should have the same name as the autoconf macro # because gettext's gettext.m4 (distributed in the automake package) # still uses it. Otherwise, the use in gettext.m4 makes autoheader # give these diagnostics: # configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX # configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX undefine([AC_ISC_POSIX]) AC_DEFUN([AC_ISC_POSIX], [ dnl This test replaces the obsolescent AC_ISC_POSIX kludge. AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"]) ] ) # lcmessage.m4 serial 3 (gettext-0.11.3) dnl Copyright (C) 1995-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([AM_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)]) if test $am_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) # lib-ld.m4 serial 2 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. if $LD -v 2>&1 &5; then acl_cv_prog_gnu_ld=yes else acl_cv_prog_gnu_ld=no fi]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-1.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_ARG_WITH(gnu-ld, [ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then test "$with_gnu_ld" != no && break else test "$with_gnu_ld" != yes && break fi fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) # lib-link.m4 serial 4 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, dnl hardcode_direct, hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" libext="$acl_cv_libext" shlibext="$acl_cv_shlibext" hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" hardcode_direct="$acl_cv_hardcode_direct" hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib$1-prefix], [ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib$1-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= if test $use_additional = yes; then if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then found_dir="$additional_libdir" found_so="$additional_libdir/lib$name.$shlibext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi else if test -f "$additional_libdir/lib$name.$libext"; then found_dir="$additional_libdir" found_a="$additional_libdir/lib$name.$libext" if test -f "$additional_libdir/lib$name.la"; then found_la="$additional_libdir/lib$name.la" fi fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test "X$prefer_shared" = "Xyes" && test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then found_dir="$dir" found_so="$dir/lib$name.$shlibext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi else if test -f "$dir/lib$name.$libext"; then found_dir="$dir" found_a="$dir/lib$name.$libext" if test -f "$dir/lib$name.la"; then found_la="$dir/lib$name.la" fi fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */lib | */lib/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" done dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) # lib-prefix.m4 serial 2 (gettext-0.12) dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/lib" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/lib"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/lib"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) # nls.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) AC_DEFUN([AM_MKINSTALLDIRS], [ dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly dnl find the mkinstalldirs script in another subdir but $(top_srcdir). dnl Try to locate it. MKINSTALLDIRS= if test -n "$ac_aux_dir"; then case "$ac_aux_dir" in /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;; *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;; esac fi if test -z "$MKINSTALLDIRS"; then MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs" fi AC_SUBST(MKINSTALLDIRS) ]) # po.m4 serial 1 (gettext-0.12) dnl Copyright (C) 1995-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_MKINSTALLDIRS])dnl AC_REQUIRE([AM_NLS])dnl dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1], :) dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU msgfmt. if test "$GMSGFMT" != ":"; then dnl If it is no GNU msgfmt we define it as : so that the dnl Makefiles still can work. if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 && (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'` AC_MSG_RESULT( [found $GMSGFMT program is not GNU msgfmt; ignore it]) GMSGFMT=":" fi fi dnl This could go away some day; the PATH_PROG_WITH_TEST already does it. dnl Test whether we really found GNU xgettext. if test "$XGETTEXT" != ":"; then dnl If it is no GNU xgettext we define it as : so that the dnl Makefiles still can work. if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >/dev/null 2>&1 && (if $XGETTEXT --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then : ; else AC_MSG_RESULT( [found xgettext program is not GNU xgettext; ignore it]) XGETTEXT=":" fi dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po fi AC_OUTPUT_COMMANDS([ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= GMOFILES= UPDATEPOFILES= DUMMYPOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it # from automake. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) # progtest.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) # stdint_h.m4 serial 3 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([jm_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1;], jm_ac_cv_header_stdint_h=yes, jm_ac_cv_header_stdint_h=no)]) if test $jm_ac_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) # uintmax_t.m4 serial 7 (gettext-0.12) dnl Copyright (C) 1997-2003 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in or . AC_DEFUN([jm_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([jm_AC_HEADER_INTTYPES_H]) AC_REQUIRE([jm_AC_HEADER_STDINT_H]) if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG]) test $ac_cv_type_unsigned_long_long = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) else AC_DEFINE(HAVE_UINTMAX_T, 1, [Define if you have the 'uintmax_t' type in or .]) fi ]) # ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40) dnl Copyright (C) 1999-2002 Free Software Foundation, Inc. dnl This file is free software, distributed under the terms of the GNU dnl General Public License. As a special exception to the GNU General dnl Public License, this file may be distributed as part of a program dnl that contains a configuration script generated by Autoconf, under dnl the same distribution terms as the rest of that program. dnl From Paul Eggert. AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG], [ AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long, [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;], [unsigned long long ullmax = (unsigned long long) -1; return ull << i | ull >> i | ullmax / ull | ullmax % ull;], ac_cv_type_unsigned_long_long=yes, ac_cv_type_unsigned_long_long=no)]) if test $ac_cv_type_unsigned_long_long = yes; then AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1, [Define if you have the unsigned long long type.]) fi ]) dnl From gnulib AC_DEFUN([BASH_FUNC_FPURGE], [ AC_CHECK_FUNCS_ONCE([fpurge]) AC_CHECK_FUNCS_ONCE([__fpurge]) AC_CHECK_DECLS([fpurge], , , [#include ]) ]) AC_DEFUN([BASH_FUNC_SNPRINTF], [ AC_CHECK_FUNCS_ONCE([snprintf]) if test X$ac_cv_func_snprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant snprintf], [bash_cv_func_snprintf], [AC_TRY_RUN([ #include main() { int n; n = snprintf (0, 0, "%s", "0123456"); exit(n != 7); } ], bash_cv_func_snprintf=yes, bash_cv_func_snprintf=no, [AC_MSG_WARN([cannot check standard snprintf if cross-compiling]) bash_cv_func_snprintf=yes] )]) if test $bash_cv_func_snprintf = no; then ac_cv_func_snprintf=no fi fi if test $ac_cv_func_snprintf = no; then AC_DEFINE(HAVE_SNPRINTF, 0, [Define if you have a standard-conformant snprintf function.]) fi ]) AC_DEFUN([BASH_FUNC_VSNPRINTF], [ AC_CHECK_FUNCS_ONCE([vsnprintf]) if test X$ac_cv_func_vsnprintf = Xyes; then AC_CACHE_CHECK([for standard-conformant vsnprintf], [bash_cv_func_vsnprintf], [AC_TRY_RUN([ #if HAVE_STDARG_H #include #else #include #endif #include #include static int #if HAVE_STDARG_H foo(const char *fmt, ...) #else foo(format, va_alist) const char *format; va_dcl #endif { va_list args; int n; #if HAVE_STDARG_H va_start(args, fmt); #else va_start(args); #endif n = vsnprintf(0, 0, fmt, args); va_end (args); return n; } main() { int n; n = foo("%s", "0123456"); exit(n != 7); } ], bash_cv_func_vsnprintf=yes, bash_cv_func_vsnprintf=no, [AC_MSG_WARN([cannot check standard vsnprintf if cross-compiling]) bash_cv_func_vsnprintf=yes] )]) if test $bash_cv_func_vsnprintf = no; then ac_cv_func_vsnprintf=no fi fi if test $ac_cv_func_vsnprintf = no; then AC_DEFINE(HAVE_VSNPRINTF, 0, [Define if you have a standard-conformant vsnprintf function.]) fi ]) AC_DEFUN(BASH_STRUCT_WEXITSTATUS_OFFSET, [AC_MSG_CHECKING(for offset of exit status in return status from wait) AC_CACHE_VAL(bash_cv_wexitstatus_offset, [AC_TRY_RUN([ #include #include #include main(c, v) int c; char **v; { pid_t pid, p; int s, i, n; s = 0; pid = fork(); if (pid == 0) exit (42); /* wait for the process */ p = wait(&s); if (p != pid) exit (255); /* crack s */ for (i = 0; i < (sizeof(s) - 8); i++) { n = (s >> i) & 0xff; if (n == 42) exit (i); } exit (254); } ], bash_cv_wexitstatus_offset=0, bash_cv_wexitstatus_offset=$?, [AC_MSG_WARN(cannot check WEXITSTATUS offset if cross compiling -- defaulting to 0) bash_cv_wexitstatus_offset=0] )]) if test "$bash_cv_wexitstatus_offset" -gt 32 ; then AC_MSG_WARN(bad exit status from test program -- defaulting to 0) bash_cv_wexitstatus_offset=0 fi AC_MSG_RESULT($bash_cv_wexitstatus_offset) AC_DEFINE_UNQUOTED([WEXITSTATUS_OFFSET], [$bash_cv_wexitstatus_offset], [Offset of exit status in wait status word]) ]) readline-7.0/config.h.in000664 000436 000024 00000015321 12576347117 015270 0ustar00chetstaff000000 000000 /* config.h.in. Maintained by hand. */ /* Template definitions for autoconf */ #undef __EXTENSIONS__ #undef _ALL_SOURCE #undef _GNU_SOURCE #undef _POSIX_SOURCE #undef _POSIX_1_SOURCE #undef _POSIX_PTHREAD_SEMANTICS #undef _TANDEM_SOURCE #undef _MINIX /* Define NO_MULTIBYTE_SUPPORT to not compile in support for multibyte characters, even if the OS supports them. */ #undef NO_MULTIBYTE_SUPPORT #undef _FILE_OFFSET_BITS /* Define as the return type of signal handlers (int or void). */ #undef RETSIGTYPE #undef VOID_SIGHANDLER /* Characteristics of the compiler. */ #undef sig_atomic_t #undef size_t #undef ssize_t #undef const #undef volatile #undef PROTOTYPES #undef __PROTOTYPES #undef __CHAR_UNSIGNED__ /* Define if the `S_IS*' macros in do not work properly. */ #undef STAT_MACROS_BROKEN /* Define if you have the chown function. */ #undef HAVE_CHOWN /* Define if you have the fcntl function. */ #undef HAVE_FCNTL /* Define if you have the getpwent function. */ #undef HAVE_GETPWENT /* Define if you have the getpwnam function. */ #undef HAVE_GETPWNAM /* Define if you have the getpwuid function. */ #undef HAVE_GETPWUID /* Define if you have the isascii function. */ #undef HAVE_ISASCII /* Define if you have the iswctype function. */ #undef HAVE_ISWCTYPE /* Define if you have the iswlower function. */ #undef HAVE_ISWLOWER /* Define if you have the iswupper function. */ #undef HAVE_ISWUPPER /* Define if you have the isxdigit function. */ #undef HAVE_ISXDIGIT /* Define if you have the kill function. */ #undef HAVE_KILL /* Define if you have the lstat function. */ #undef HAVE_LSTAT /* Define if you have the mbrlen function. */ #undef HAVE_MBRLEN /* Define if you have the mbrtowc function. */ #undef HAVE_MBRTOWC /* Define if you have the mbsrtowcs function. */ #undef HAVE_MBSRTOWCS /* Define if you have the memmove function. */ #undef HAVE_MEMMOVE /* Define if you have the pselect function. */ #undef HAVE_PSELECT /* Define if you have the putenv function. */ #undef HAVE_PUTENV /* Define if you have the readlink function. */ #undef HAVE_READLINK /* Define if you have the select function. */ #undef HAVE_SELECT /* Define if you have the setenv function. */ #undef HAVE_SETENV /* Define if you have the setlocale function. */ #undef HAVE_SETLOCALE /* Define if you have the strcasecmp function. */ #undef HAVE_STRCASECMP /* Define if you have the strcoll function. */ #undef HAVE_STRCOLL #undef STRCOLL_BROKEN /* Define if you have the strpbrk function. */ #undef HAVE_STRPBRK /* Define if you have the tcgetattr function. */ #undef HAVE_TCGETATTR /* Define if you have the towlower function. */ #undef HAVE_TOWLOWER /* Define if you have the towupper function. */ #undef HAVE_TOWUPPER /* Define if you have the vsnprintf function. */ #undef HAVE_VSNPRINTF /* Define if you have the wcrtomb function. */ #undef HAVE_WCRTOMB /* Define if you have the wcscoll function. */ #undef HAVE_WCSCOLL /* Define if you have the wctype function. */ #undef HAVE_WCTYPE /* Define if you have the wcwidth function. */ #undef HAVE_WCWIDTH /* and whether it works */ #undef WCWIDTH_BROKEN #undef STDC_HEADERS /* Define if you have the header file. */ #undef HAVE_DIRENT_H /* Define if you have the header file. */ #undef HAVE_FCNTL_H /* Define if you have the header file. */ #undef HAVE_LANGINFO_H /* Define if you have the header file. */ #undef HAVE_LIBAUDIT_H /* Define if you have the header file. */ #undef HAVE_LIMITS_H /* Define if you have the header file. */ #undef HAVE_LOCALE_H /* Define if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have the header file. */ #undef HAVE_NDIR_H /* Define if you have the header file. */ #undef HAVE_NCURSES_TERMCAP_H /* Define if you have the header file. */ #undef HAVE_PWD_H /* Define if you have the header file. */ #undef HAVE_STDARG_H /* Define if you have the header file. */ #undef HAVE_STDBOOL_H /* Define if you have the header file. */ #undef HAVE_STDLIB_H /* Define if you have the header file. */ #undef HAVE_STRING_H /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #undef HAVE_SYS_DIR_H /* Define if you have the header file. */ #undef HAVE_SYS_FILE_H /* Define if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define if you have the header file. */ #undef HAVE_SYS_NDIR_H /* Define if you have the header file. */ #undef HAVE_SYS_PTE_H /* Define if you have the header file. */ #undef HAVE_SYS_PTEM_H /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define if you have the header file. */ #undef HAVE_SYS_STREAM_H /* Define if you have the header file. */ #undef HAVE_TERMCAP_H /* Define if you have the header file. */ #undef HAVE_TERMIO_H /* Define if you have the header file. */ #undef HAVE_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_VARARGS_H /* Define if you have the header file. */ #undef HAVE_WCHAR_H /* Define if you have the header file. */ #undef HAVE_WCTYPE_H #undef HAVE_MBSTATE_T /* Define if you have wchar_t in . */ #undef HAVE_WCHAR_T /* Define if you have wctype_t in . */ #undef HAVE_WCTYPE_T /* Define if you have wint_t in . */ #undef HAVE_WINT_T /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if you have and it defines AUDIT_USER_TTY */ #undef HAVE_DECL_AUDIT_USER_TTY /* Definitions pulled in from aclocal.m4. */ #undef VOID_SIGHANDLER #undef GWINSZ_IN_SYS_IOCTL #undef STRUCT_WINSIZE_IN_SYS_IOCTL #undef STRUCT_WINSIZE_IN_TERMIOS #undef TIOCSTAT_IN_SYS_IOCTL #undef FIONREAD_IN_SYS_IOCTL #undef SPEED_T_IN_SYS_TYPES #undef HAVE_GETPW_DECLS #undef HAVE_STRUCT_DIRENT_D_INO #undef HAVE_STRUCT_DIRENT_D_FILENO #undef HAVE_STRUCT_DIRENT_D_NAMLEN #undef HAVE_BSD_SIGNALS #undef HAVE_POSIX_SIGNALS #undef HAVE_USG_SIGHOLD #undef MUST_REINSTALL_SIGHANDLERS #undef HAVE_POSIX_SIGSETJMP #undef CTYPE_NON_ASCII /* modify settings or make new ones based on what autoconf tells us. */ /* Ultrix botches type-ahead when switching from canonical to non-canonical mode, at least through version 4.3 */ #if !defined (HAVE_TERMIOS_H) || !defined (HAVE_TCGETATTR) || defined (ultrix) # define TERMIOS_MISSING #endif /* VARARGS defines moved to rlstdc.h */ readline-7.0/configure000775 000436 000000 00000652557 12764101544 015160 0ustar00chetwheel000000 000000 #! /bin/sh # From configure.ac for Readline 7.0, version 2.81. # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for readline 7.0. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and $0: bug-readline@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='readline' PACKAGE_TARNAME='readline' PACKAGE_VERSION='7.0' PACKAGE_STRING='readline 7.0' PACKAGE_BUGREPORT='bug-readline@gnu.org' PACKAGE_URL='' ac_unique_file="readline.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS TERMCAP_LIB LIBVERSION ARFLAGS LOCAL_DEFS LOCAL_LDFLAGS LOCAL_CFLAGS BUILD_DIR SHARED_INSTALL_TARGET STATIC_INSTALL_TARGET SHARED_TARGET STATIC_TARGET SHLIB_MINOR SHLIB_MAJOR SHLIB_LIBS SHLIB_DLLVERSION SHLIB_LIBVERSION SHLIB_LIBSUFF SHLIB_LIBPREF SHLIB_DOT SHLIB_XLDFLAGS SHLIB_STATUS SHOBJ_STATUS SHOBJ_LIBS SHOBJ_XLDFLAGS SHOBJ_LDFLAGS SHOBJ_LD SHOBJ_CFLAGS SHOBJ_CC LIBOBJS MAKE_SHELL RANLIB AR INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC SET_MAKE CROSS_COMPILE host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_curses enable_multibyte enable_shared enable_static enable_largefile ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures readline 7.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/readline] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of readline 7.0:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-multibyte enable multibyte characters if OS supports them --enable-shared build shared libraries [[default=YES]] --enable-static build static libraries [[default=YES]] --disable-largefile omit support for large files Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-curses use the curses library instead of the termcap library Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to . _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF readline configure 7.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( $as_echo "## ----------------------------------- ## ## Report this to bug-readline@gnu.org ## ## ----------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES # --------------------------------------------- # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR # accordingly. ac_fn_c_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_decl cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by readline $as_me 7.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in ./support "$srcdir"/./support; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in ./support \"$srcdir\"/./support" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_config_headers="$ac_config_headers config.h" LIBVERSION=7.0 # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac opt_curses=no # Check whether --with-curses was given. if test "${with_curses+set}" = set; then : withval=$with_curses; opt_curses=$withval fi if test "$opt_curses" = "yes"; then prefer_curses=yes fi opt_multibyte=yes opt_static_libs=yes opt_shared_libs=yes # Check whether --enable-multibyte was given. if test "${enable_multibyte+set}" = set; then : enableval=$enable_multibyte; opt_multibyte=$enableval fi # Check whether --enable-shared was given. if test "${enable_shared+set}" = set; then : enableval=$enable_shared; opt_shared_libs=$enableval fi # Check whether --enable-static was given. if test "${enable_static+set}" = set; then : enableval=$enable_static; opt_static_libs=$enableval fi if test $opt_multibyte = no; then $as_echo "#define NO_MULTIBYTE_SUPPORT 1" >>confdefs.h fi CROSS_COMPILE= if test "x$cross_compiling" = "xyes"; then case "${host}" in *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin.cache ;; *-mingw*) cross_cache=${srcdir}/cross-build/mingw.cache ;; i[3456]86-*-beos*) cross_cache=${srcdir}/cross-build/x86-beos.cache ;; *) echo "configure: cross-compiling for $host is not supported" >&2 ;; esac if test -n "${cross_cache}" && test -r "${cross_cache}"; then echo "loading cross-build cache file ${cross_cache}" . ${cross_cache} fi unset cross_cache CROSS_COMPILE='-DCROSS_COMPILING' fi echo "" echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}" echo "" # We want these before the checks, so the checks can modify their values. test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = xyes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if ${ac_cv_safe_to_define___extensions__+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 $as_echo "$AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_AR+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 $as_echo "$ac_ct_AR" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_AR" = x; then AR="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR fi else AR="$ac_cv_prog_AR" fi test -n "$ARFLAGS" || ARFLAGS="cr" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi MAKE_SHELL=/bin/sh { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if ${ac_cv_c_const+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __cplusplus /* Ultrix mips cc rejects this sort of thing. */ typedef int charset[2]; const charset cs = { 0, 0 }; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this sort of thing. */ char tx; char *t = &tx; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this sort of thing, saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; } bx; struct s *b = &bx; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for function prototypes" >&5 $as_echo_n "checking for function prototypes... " >&6; } if test "$ac_cv_prog_cc_c89" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } $as_echo "#define PROTOTYPES 1" >>confdefs.h $as_echo "#define __PROTOTYPES 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether char is unsigned" >&5 $as_echo_n "checking whether char is unsigned... " >&6; } if ${ac_cv_c_char_unsigned+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { static int test_array [1 - 2 * !(((char) -1) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_char_unsigned=no else ac_cv_c_char_unsigned=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_char_unsigned" >&5 $as_echo "$ac_cv_c_char_unsigned" >&6; } if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then $as_echo "#define __CHAR_UNSIGNED__ 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working volatile" >&5 $as_echo_n "checking for working volatile... " >&6; } if ${ac_cv_c_volatile+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { volatile int x; int * volatile y = (int *) 0; return !x && !y; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_volatile=yes else ac_cv_c_volatile=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_volatile" >&5 $as_echo "$ac_cv_c_volatile" >&6; } if test $ac_cv_c_volatile = no; then $as_echo "#define volatile /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if ${ac_cv_type_signal+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default" if test "x$ac_cv_type_ssize_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define ssize_t int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 $as_echo_n "checking whether stat file-mode macros are broken... " >&6; } if ${ac_cv_header_stat_broken+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stat_broken=no else ac_cv_header_stat_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stat_broken" >&5 $as_echo "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then $as_echo "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi ac_header_dirent=no for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do as_ac_Header=`$as_echo "ac_cv_header_dirent_$ac_hdr" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_hdr that defines DIR" >&5 $as_echo_n "checking for $ac_hdr that defines DIR... " >&6; } if eval \${$as_ac_Header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include <$ac_hdr> int main () { if ((DIR *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$as_ac_Header=yes" else eval "$as_ac_Header=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$as_ac_Header { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_hdr" | $as_tr_cpp` 1 _ACEOF ac_header_dirent=$ac_hdr; break fi done # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. if test $ac_header_dirent = dirent.h; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' dir; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing opendir" >&5 $as_echo_n "checking for library containing opendir... " >&6; } if ${ac_cv_search_opendir+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char opendir (); int main () { return opendir (); ; return 0; } _ACEOF for ac_lib in '' x; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_opendir=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_opendir+:} false; then : break fi done if ${ac_cv_search_opendir+:} false; then : else ac_cv_search_opendir=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_opendir" >&5 $as_echo "$ac_cv_search_opendir" >&6; } ac_res=$ac_cv_search_opendir if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi fi for ac_func in fcntl kill lstat readlink do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in memmove pselect putenv select setenv setlocale \ strcasecmp strpbrk tcgetattr vsnprintf do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in isascii isxdigit do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpwent getpwnam getpwuid do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uid_t in sys/types.h" >&5 $as_echo_n "checking for uid_t in sys/types.h... " >&6; } if ${ac_cv_type_uid_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "uid_t" >/dev/null 2>&1; then : ac_cv_type_uid_t=yes else ac_cv_type_uid_t=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_uid_t" >&5 $as_echo "$ac_cv_type_uid_t" >&6; } if test $ac_cv_type_uid_t = no; then $as_echo "#define uid_t int" >>confdefs.h $as_echo "#define gid_t int" >>confdefs.h fi for ac_header in unistd.h do : ac_fn_c_check_header_mongrel "$LINENO" "unistd.h" "ac_cv_header_unistd_h" "$ac_includes_default" if test "x$ac_cv_header_unistd_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_UNISTD_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working chown" >&5 $as_echo_n "checking for working chown... " >&6; } if ${ac_cv_func_chown_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_chown_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include int main () { char *f = "conftest.chown"; struct stat before, after; if (creat (f, 0600) < 0) return 1; if (stat (f, &before) < 0) return 1; if (chown (f, (uid_t) -1, (gid_t) -1) == -1) return 1; if (stat (f, &after) < 0) return 1; return ! (before.st_uid == after.st_uid && before.st_gid == after.st_gid); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_chown_works=yes else ac_cv_func_chown_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.chown fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_chown_works" >&5 $as_echo "$ac_cv_func_chown_works" >&6; } if test $ac_cv_func_chown_works = yes; then $as_echo "#define HAVE_CHOWN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strcoll" >&5 $as_echo_n "checking for working strcoll... " >&6; } if ${ac_cv_func_strcoll_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_strcoll_works=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { return (strcoll ("abc", "def") >= 0 || strcoll ("ABC", "DEF") >= 0 || strcoll ("123", "456") >= 0) ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strcoll_works=yes else ac_cv_func_strcoll_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strcoll_works" >&5 $as_echo "$ac_cv_func_strcoll_works" >&6; } if test $ac_cv_func_strcoll_works = yes; then $as_echo "#define HAVE_STRCOLL 1" >>confdefs.h fi for ac_header in fcntl.h unistd.h stdlib.h varargs.h stdarg.h stdbool.h \ string.h strings.h \ limits.h locale.h pwd.h memory.h termcap.h termios.h termio.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/ioctl.h sys/pte.h sys/stream.h sys/select.h sys/file.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/ptem.h do : ac_fn_c_check_header_compile "$LINENO" "sys/ptem.h" "ac_cv_header_sys_ptem_h" " #if HAVE_SYS_STREAM_H # include #endif " if test "x$ac_cv_header_sys_ptem_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_PTEM_H 1 _ACEOF fi done # Check whether --enable-largefile was given. if test "${enable_largefile+set}" = set; then : enableval=$enable_largefile; fi if test "$enable_largefile" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 $as_echo_n "checking for special C compiler options needed for large files... " >&6; } if ${ac_cv_sys_largefile_CC+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : break fi rm -f core conftest.err conftest.$ac_objext CC="$CC -n32" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 $as_echo "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 $as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if ${ac_cv_sys_file_offset_bits+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _FILE_OFFSET_BITS 64 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 $as_echo "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits _ACEOF ;; esac rm -rf conftest* if test $ac_cv_sys_file_offset_bits = unknown; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 $as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; } if ${ac_cv_sys_large_files+:} false; then : $as_echo_n "(cached) " >&6 else while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _LARGE_FILES 1 #include /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 $as_echo "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) cat >>confdefs.h <<_ACEOF #define _LARGE_FILES $ac_cv_sys_large_files _ACEOF ;; esac rm -rf conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for type of signal functions" >&5 $as_echo_n "checking for type of signal functions... " >&6; } if ${bash_cv_signal_vintage+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { sigset_t ss; struct sigaction sa; sigemptyset(&ss); sigsuspend(&ss); sigaction(SIGINT, &sa, (struct sigaction *) 0); sigprocmask(SIG_BLOCK, &ss, (sigset_t *) 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=posix else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int mask = sigmask(SIGINT); sigsetmask(mask); sigblock(mask); sigpause(mask); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=4.2bsd else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include RETSIGTYPE foo() { } int main () { int mask = sigmask(SIGINT); sigset(SIGINT, foo); sigrelse(SIGINT); sighold(SIGINT); sigpause(SIGINT); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_signal_vintage=svr3 else bash_cv_signal_vintage=v7 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_signal_vintage" >&5 $as_echo "$bash_cv_signal_vintage" >&6; } if test "$bash_cv_signal_vintage" = posix; then $as_echo "#define HAVE_POSIX_SIGNALS 1" >>confdefs.h elif test "$bash_cv_signal_vintage" = "4.2bsd"; then $as_echo "#define HAVE_BSD_SIGNALS 1" >>confdefs.h elif test "$bash_cv_signal_vintage" = svr3; then $as_echo "#define HAVE_USG_SIGHOLD 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if signal handlers must be reinstalled when invoked" >&5 $as_echo_n "checking if signal handlers must be reinstalled when invoked... " >&6; } if ${bash_cv_must_reinstall_sighandlers+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check signal handling if cross compiling -- defaulting to no" >&2;} bash_cv_must_reinstall_sighandlers=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_UNISTD_H #include #endif typedef RETSIGTYPE sigfunc(); int nsigint; #ifdef HAVE_POSIX_SIGNALS sigfunc * set_signal_handler(sig, handler) int sig; sigfunc *handler; { struct sigaction act, oact; act.sa_handler = handler; act.sa_flags = 0; sigemptyset (&act.sa_mask); sigemptyset (&oact.sa_mask); sigaction (sig, &act, &oact); return (oact.sa_handler); } #else #define set_signal_handler(s, h) signal(s, h) #endif RETSIGTYPE sigint(s) int s; { nsigint++; } main() { nsigint = 0; set_signal_handler(SIGINT, sigint); kill((int)getpid(), SIGINT); kill((int)getpid(), SIGINT); exit(nsigint != 2); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_must_reinstall_sighandlers=no else bash_cv_must_reinstall_sighandlers=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_must_reinstall_sighandlers" >&5 $as_echo "$bash_cv_must_reinstall_sighandlers" >&6; } if test $bash_cv_must_reinstall_sighandlers = yes; then $as_echo "#define MUST_REINSTALL_SIGHANDLERS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for presence of POSIX-style sigsetjmp/siglongjmp" >&5 $as_echo_n "checking for presence of POSIX-style sigsetjmp/siglongjmp... " >&6; } if ${bash_cv_func_sigsetjmp+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&5 $as_echo "$as_me: WARNING: cannot check for sigsetjmp/siglongjmp if cross-compiling -- defaulting to missing" >&2;} bash_cv_func_sigsetjmp=missing else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_UNISTD_H #include #endif #include #include #include main() { #if !defined (_POSIX_VERSION) || !defined (HAVE_POSIX_SIGNALS) exit (1); #else int code; sigset_t set, oset; sigjmp_buf xx; /* get the mask */ sigemptyset(&set); sigemptyset(&oset); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &set); sigprocmask(SIG_BLOCK, (sigset_t *)NULL, &oset); /* save it */ code = sigsetjmp(xx, 1); if (code) exit(0); /* could get sigmask and compare to oset here. */ /* change it */ sigaddset(&set, SIGINT); sigprocmask(SIG_BLOCK, &set, (sigset_t *)NULL); /* and siglongjmp */ siglongjmp(xx, 10); exit(1); #endif } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_sigsetjmp=present else bash_cv_func_sigsetjmp=missing fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_sigsetjmp" >&5 $as_echo "$bash_cv_func_sigsetjmp" >&6; } if test $bash_cv_func_sigsetjmp = present; then $as_echo "#define HAVE_POSIX_SIGSETJMP 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lstat" >&5 $as_echo_n "checking for lstat... " >&6; } if ${bash_cv_func_lstat+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { lstat(".",(struct stat *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_func_lstat=yes else bash_cv_func_lstat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_lstat" >&5 $as_echo "$bash_cv_func_lstat" >&6; } if test $bash_cv_func_lstat = yes; then $as_echo "#define HAVE_LSTAT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether or not strcoll and strcmp differ" >&5 $as_echo_n "checking whether or not strcoll and strcmp differ... " >&6; } if ${bash_cv_func_strcoll_broken+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check strcoll if cross compiling -- defaulting to no" >&2;} bash_cv_func_strcoll_broken=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if defined (HAVE_LOCALE_H) #include #endif main(c, v) int c; char *v[]; { int r1, r2; char *deflocale, *defcoll; #ifdef HAVE_SETLOCALE deflocale = setlocale(LC_ALL, ""); defcoll = setlocale(LC_COLLATE, ""); #endif #ifdef HAVE_STRCOLL /* These two values are taken from tests/glob-test. */ r1 = strcoll("abd", "aXd"); #else r1 = 0; #endif r2 = strcmp("abd", "aXd"); /* These two should both be greater than 0. It is permissible for a system to return different values, as long as the sign is the same. */ /* Exit with 1 (failure) if these two values are both > 0, since this tests whether strcoll(3) is broken with respect to strcmp(3) in the default locale. */ exit (r1 > 0 && r2 > 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_strcoll_broken=yes else bash_cv_func_strcoll_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_strcoll_broken" >&5 $as_echo "$bash_cv_func_strcoll_broken" >&6; } if test $bash_cv_func_strcoll_broken = yes; then $as_echo "#define STRCOLL_BROKEN 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the ctype macros accept non-ascii characters" >&5 $as_echo_n "checking whether the ctype macros accept non-ascii characters... " >&6; } if ${bash_cv_func_ctype_nonascii+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&5 $as_echo "$as_me: WARNING: cannot check ctype macros if cross compiling -- defaulting to no" >&2;} bash_cv_func_ctype_nonascii=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef HAVE_LOCALE_H #include #endif #include #include main(c, v) int c; char *v[]; { char *deflocale; unsigned char x; int r1, r2; #ifdef HAVE_SETLOCALE /* We take a shot here. If that locale is not known, try the system default. We try this one because '\342' (226) is known to be a printable character in that locale. */ deflocale = setlocale(LC_ALL, "en_US.ISO8859-1"); if (deflocale == 0) deflocale = setlocale(LC_ALL, ""); #endif x = '\342'; r1 = isprint(x); x -= 128; r2 = isprint(x); exit (r1 == 0 || r2 == 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_func_ctype_nonascii=yes else bash_cv_func_ctype_nonascii=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_func_ctype_nonascii" >&5 $as_echo "$bash_cv_func_ctype_nonascii" >&6; } if test $bash_cv_func_ctype_nonascii = yes; then $as_echo "#define CTYPE_NON_ASCII 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getpw functions are declared in pwd.h" >&5 $as_echo_n "checking whether getpw functions are declared in pwd.h... " >&6; } if ${bash_cv_getpw_declared+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef HAVE_UNISTD_H # include #endif #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getpwuid" >/dev/null 2>&1; then : bash_cv_getpw_declared=yes else bash_cv_getpw_declared=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_getpw_declared" >&5 $as_echo "$bash_cv_getpw_declared" >&6; } if test $bash_cv_getpw_declared = yes; then $as_echo "#define HAVE_GETPW_DECLS 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_termios_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_termios_h=yes else ac_cv_sys_tiocgwinsz_in_termios_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 $as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } if ${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef TIOCGWINSZ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes else ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 $as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then $as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sig_atomic_t in signal.h" >&5 $as_echo_n "checking for sig_atomic_t in signal.h... " >&6; } if ${ac_cv_have_sig_atomic_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { sig_atomic_t x; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_have_sig_atomic_t=yes else ac_cv_have_sig_atomic_t=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_sig_atomic_t" >&5 $as_echo "$ac_cv_have_sig_atomic_t" >&6; } if test "$ac_cv_have_sig_atomic_t" = "no" then ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "$ac_includes_default" if test "x$ac_cv_type_sig_atomic_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define sig_atomic_t int _ACEOF fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether signal handlers are of type void" >&5 $as_echo_n "checking whether signal handlers are of type void... " >&6; } if ${bash_cv_void_sighandler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif #ifdef __cplusplus extern "C" #endif void (*signal ()) (); int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_void_sighandler=yes else bash_cv_void_sighandler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_void_sighandler" >&5 $as_echo "$bash_cv_void_sighandler" >&6; } if test $bash_cv_void_sighandler = yes; then $as_echo "#define VOID_SIGHANDLER 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for TIOCSTAT in sys/ioctl.h" >&5 $as_echo_n "checking for TIOCSTAT in sys/ioctl.h... " >&6; } if ${bash_cv_tiocstat_in_ioctl+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int x = TIOCSTAT; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_tiocstat_in_ioctl=yes else bash_cv_tiocstat_in_ioctl=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_tiocstat_in_ioctl" >&5 $as_echo "$bash_cv_tiocstat_in_ioctl" >&6; } if test $bash_cv_tiocstat_in_ioctl = yes; then $as_echo "#define TIOCSTAT_IN_SYS_IOCTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FIONREAD in sys/ioctl.h" >&5 $as_echo_n "checking for FIONREAD in sys/ioctl.h... " >&6; } if ${bash_cv_fionread_in_ioctl+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int x = FIONREAD; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_fionread_in_ioctl=yes else bash_cv_fionread_in_ioctl=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_fionread_in_ioctl" >&5 $as_echo "$bash_cv_fionread_in_ioctl" >&6; } if test $bash_cv_fionread_in_ioctl = yes; then $as_echo "#define FIONREAD_IN_SYS_IOCTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for speed_t in sys/types.h" >&5 $as_echo_n "checking for speed_t in sys/types.h... " >&6; } if ${bash_cv_speed_t_in_sys_types+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { speed_t x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_speed_t_in_sys_types=yes else bash_cv_speed_t_in_sys_types=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_speed_t_in_sys_types" >&5 $as_echo "$bash_cv_speed_t_in_sys_types" >&6; } if test $bash_cv_speed_t_in_sys_types = yes; then $as_echo "#define SPEED_T_IN_SYS_TYPES 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct winsize in sys/ioctl.h and termios.h" >&5 $as_echo_n "checking for struct winsize in sys/ioctl.h and termios.h... " >&6; } if ${bash_cv_struct_winsize_header+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct winsize x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_struct_winsize_header=ioctl_h else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { struct winsize x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_struct_winsize_header=termios_h else bash_cv_struct_winsize_header=other fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $bash_cv_struct_winsize_header = ioctl_h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: sys/ioctl.h" >&5 $as_echo "sys/ioctl.h" >&6; } $as_echo "#define STRUCT_WINSIZE_IN_SYS_IOCTL 1" >>confdefs.h elif test $bash_cv_struct_winsize_header = termios_h; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: termios.h" >&5 $as_echo "termios.h" >&6; } $as_echo "#define STRUCT_WINSIZE_IN_TERMIOS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 $as_echo "not found" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_ino" >&5 $as_echo_n "checking for struct dirent.d_ino... " >&6; } if ${bash_cv_dirent_has_dino+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ int main () { struct dirent d; int z; z = d.d_ino; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_dirent_has_dino=yes else bash_cv_dirent_has_dino=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_dino" >&5 $as_echo "$bash_cv_dirent_has_dino" >&6; } if test $bash_cv_dirent_has_dino = yes; then $as_echo "#define HAVE_STRUCT_DIRENT_D_INO 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for struct dirent.d_fileno" >&5 $as_echo_n "checking for struct dirent.d_fileno... " >&6; } if ${bash_cv_dirent_has_d_fileno+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef HAVE_UNISTD_H # include #endif /* HAVE_UNISTD_H */ #if defined(HAVE_DIRENT_H) # include #else # define dirent direct # ifdef HAVE_SYS_NDIR_H # include # endif /* SYSNDIR */ # ifdef HAVE_SYS_DIR_H # include # endif /* SYSDIR */ # ifdef HAVE_NDIR_H # include # endif #endif /* HAVE_DIRENT_H */ int main () { struct dirent d; int z; z = d.d_fileno; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_dirent_has_d_fileno=yes else bash_cv_dirent_has_d_fileno=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_dirent_has_d_fileno" >&5 $as_echo "$bash_cv_dirent_has_d_fileno" >&6; } if test $bash_cv_dirent_has_d_fileno = yes; then $as_echo "#define HAVE_STRUCT_DIRENT_D_FILENO 1" >>confdefs.h fi for ac_header in libaudit.h do : ac_fn_c_check_header_mongrel "$LINENO" "libaudit.h" "ac_cv_header_libaudit_h" "$ac_includes_default" if test "x$ac_cv_header_libaudit_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBAUDIT_H 1 _ACEOF fi done ac_fn_c_check_decl "$LINENO" "AUDIT_USER_TTY" "ac_cv_have_decl_AUDIT_USER_TTY" "#include " if test "x$ac_cv_have_decl_AUDIT_USER_TTY" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_AUDIT_USER_TTY $ac_have_decl _ACEOF case "$host_os" in aix*) prefer_curses=yes ;; esac if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 $as_echo_n "checking which library has the termcap functions... " >&6; } _bash_needmsg= fi if ${bash_cv_termcap_lib+:} false; then : $as_echo_n "(cached) " >&6 else ac_fn_c_check_func "$LINENO" "tgetent" "ac_cv_func_tgetent" if test "x$ac_cv_func_tgetent" = xyes; then : bash_cv_termcap_lib=libc else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltermcap" >&5 $as_echo_n "checking for tgetent in -ltermcap... " >&6; } if ${ac_cv_lib_termcap_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltermcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_termcap_tgetent=yes else ac_cv_lib_termcap_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_termcap_tgetent" >&5 $as_echo "$ac_cv_lib_termcap_tgetent" >&6; } if test "x$ac_cv_lib_termcap_tgetent" = xyes; then : bash_cv_termcap_lib=libtermcap else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -ltinfo" >&5 $as_echo_n "checking for tgetent in -ltinfo... " >&6; } if ${ac_cv_lib_tinfo_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ltinfo $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_tinfo_tgetent=yes else ac_cv_lib_tinfo_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_tinfo_tgetent" >&5 $as_echo "$ac_cv_lib_tinfo_tgetent" >&6; } if test "x$ac_cv_lib_tinfo_tgetent" = xyes; then : bash_cv_termcap_lib=libtinfo else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lcurses" >&5 $as_echo_n "checking for tgetent in -lcurses... " >&6; } if ${ac_cv_lib_curses_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lcurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_curses_tgetent=yes else ac_cv_lib_curses_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_curses_tgetent" >&5 $as_echo "$ac_cv_lib_curses_tgetent" >&6; } if test "x$ac_cv_lib_curses_tgetent" = xyes; then : bash_cv_termcap_lib=libcurses else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent in -lncurses" >&5 $as_echo_n "checking for tgetent in -lncurses... " >&6; } if ${ac_cv_lib_ncurses_tgetent+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lncurses $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char tgetent (); int main () { return tgetent (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ncurses_tgetent=yes else ac_cv_lib_ncurses_tgetent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ncurses_tgetent" >&5 $as_echo "$ac_cv_lib_ncurses_tgetent" >&6; } if test "x$ac_cv_lib_ncurses_tgetent" = xyes; then : bash_cv_termcap_lib=libncurses else bash_cv_termcap_lib=gnutermcap fi fi fi fi fi fi if test "X$_bash_needmsg" = "Xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking which library has the termcap functions" >&5 $as_echo_n "checking which library has the termcap functions... " >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: using $bash_cv_termcap_lib" >&5 $as_echo "using $bash_cv_termcap_lib" >&6; } if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then if test "$prefer_curses" = yes; then TERMCAP_LIB=-lcurses else TERMCAP_LIB=-ltermcap #default fi fi # Windows ncurses installation if test "$TERMCAP_LIB" = "-lncurses"; then for ac_header in ncurses/termcap.h do : ac_fn_c_check_header_mongrel "$LINENO" "ncurses/termcap.h" "ac_cv_header_ncurses_termcap_h" "$ac_includes_default" if test "x$ac_cv_header_ncurses_termcap_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_NCURSES_TERMCAP_H 1 _ACEOF fi done fi for ac_header in wctype.h do : ac_fn_c_check_header_mongrel "$LINENO" "wctype.h" "ac_cv_header_wctype_h" "$ac_includes_default" if test "x$ac_cv_header_wctype_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCTYPE_H 1 _ACEOF fi done for ac_header in wchar.h do : ac_fn_c_check_header_mongrel "$LINENO" "wchar.h" "ac_cv_header_wchar_h" "$ac_includes_default" if test "x$ac_cv_header_wchar_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WCHAR_H 1 _ACEOF fi done for ac_header in langinfo.h do : ac_fn_c_check_header_mongrel "$LINENO" "langinfo.h" "ac_cv_header_langinfo_h" "$ac_includes_default" if test "x$ac_cv_header_langinfo_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LANGINFO_H 1 _ACEOF fi done for ac_header in mbstr.h do : ac_fn_c_check_header_mongrel "$LINENO" "mbstr.h" "ac_cv_header_mbstr_h" "$ac_includes_default" if test "x$ac_cv_header_mbstr_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MBSTR_H 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "mbrlen" "ac_cv_func_mbrlen" if test "x$ac_cv_func_mbrlen" = xyes; then : $as_echo "#define HAVE_MBRLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscasecmp" "ac_cv_func_mbscasecmp" if test "x$ac_cv_func_mbscasecmp" = xyes; then : $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbscmp" "ac_cv_func_mbscmp" if test "x$ac_cv_func_mbscmp" = xyes; then : $as_echo "#define HAVE_MBSCMP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsnrtowcs" "ac_cv_func_mbsnrtowcs" if test "x$ac_cv_func_mbsnrtowcs" = xyes; then : $as_echo "#define HAVE_MBSNRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbsrtowcs" "ac_cv_func_mbsrtowcs" if test "x$ac_cv_func_mbsrtowcs" = xyes; then : $as_echo "#define HAVE_MBSRTOWCS 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbschr" "ac_cv_func_mbschr" if test "x$ac_cv_func_mbschr" = xyes; then : $as_echo "#define HAVE_MBSCHR 1" >>confdefs.h else case " $LIBOBJS " in *" mbschr.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS mbschr.$ac_objext" ;; esac fi ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" if test "x$ac_cv_func_wcrtomb" = xyes; then : $as_echo "#define HAVE_WCRTOMB 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcscoll" "ac_cv_func_wcscoll" if test "x$ac_cv_func_wcscoll" = xyes; then : $as_echo "#define HAVE_WCSCOLL 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcsdup" "ac_cv_func_wcsdup" if test "x$ac_cv_func_wcsdup" = xyes; then : $as_echo "#define HAVE_WCSDUP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcwidth" "ac_cv_func_wcwidth" if test "x$ac_cv_func_wcwidth" = xyes; then : $as_echo "#define HAVE_WCWIDTH 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wctype" "ac_cv_func_wctype" if test "x$ac_cv_func_wctype" = xyes; then : $as_echo "#define HAVE_WCTYPE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcswidth" "ac_cv_func_wcswidth" if test "x$ac_cv_func_wcswidth" = xyes; then : $as_echo "#define HAVE_WCSWIDTH 1" >>confdefs.h else case " $LIBOBJS " in *" wcswidth.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS wcswidth.$ac_objext" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc and mbstate_t are properly declared" >&5 $as_echo_n "checking whether mbrtowc and mbstate_t are properly declared... " >&6; } if ${ac_cv_func_mbrtowc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_mbrtowc=yes else ac_cv_func_mbrtowc=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mbrtowc" >&5 $as_echo "$ac_cv_func_mbrtowc" >&6; } if test $ac_cv_func_mbrtowc = yes; then $as_echo "#define HAVE_MBRTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbrtowc = yes; then $as_echo "#define HAVE_MBSTATE_T 1" >>confdefs.h fi for ac_func in iswlower iswupper towlower towupper iswctype do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if ${bash_cv_langinfo_codeset+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : bash_cv_langinfo_codeset=yes else bash_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_langinfo_codeset" >&5 $as_echo "$bash_cv_langinfo_codeset" >&6; } if test $bash_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t in wchar.h" >&5 $as_echo_n "checking for wchar_t in wchar.h... " >&6; } if ${bash_cv_type_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wchar_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wchar_t=yes else bash_cv_type_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wchar_t" >&5 $as_echo "$bash_cv_type_wchar_t" >&6; } if test $bash_cv_type_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t in wctype.h" >&5 $as_echo_n "checking for wctype_t in wctype.h... " >&6; } if ${bash_cv_type_wctype_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wctype_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wctype_t=yes else bash_cv_type_wctype_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wctype_t" >&5 $as_echo "$bash_cv_type_wctype_t" >&6; } if test $bash_cv_type_wctype_t = yes; then $as_echo "#define HAVE_WCTYPE_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t in wctype.h" >&5 $as_echo_n "checking for wint_t in wctype.h... " >&6; } if ${bash_cv_type_wint_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { wint_t foo; foo = 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : bash_cv_type_wint_t=yes else bash_cv_type_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_type_wint_t" >&5 $as_echo "$bash_cv_type_wint_t" >&6; } if test $bash_cv_type_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wcwidth broken with unicode combining characters" >&5 $as_echo_n "checking for wcwidth broken with unicode combining characters... " >&6; } if ${bash_cv_wcwidth_broken+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : bash_cv_wcwidth_broken=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include main(c, v) int c; char **v; { int w; setlocale(LC_ALL, "en_US.UTF-8"); w = wcwidth (0x0301); exit (w == 0); /* exit 0 if wcwidth broken */ } _ACEOF if ac_fn_c_try_run "$LINENO"; then : bash_cv_wcwidth_broken=yes else bash_cv_wcwidth_broken=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bash_cv_wcwidth_broken" >&5 $as_echo "$bash_cv_wcwidth_broken" >&6; } if test "$bash_cv_wcwidth_broken" = yes; then $as_echo "#define WCWIDTH_BROKEN 1" >>confdefs.h fi if test "$am_cv_func_iconv" = yes; then OLDLIBS="$LIBS" LIBS="$LIBS $LIBINTL $LIBICONV" for ac_func in locale_charset do : ac_fn_c_check_func "$LINENO" "locale_charset" "ac_cv_func_locale_charset" if test "x$ac_cv_func_locale_charset" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LOCALE_CHARSET 1 _ACEOF fi done LIBS="$OLDLIBS" fi case "$host_cpu" in *cray*) LOCAL_CFLAGS=-DCRAY ;; *s390*) LOCAL_CFLAGS=-fsigned-char ;; esac case "$host_os" in isc*) LOCAL_CFLAGS=-Disc386 ;; esac # shared library configuration section # # Shared object configuration section. These values are generated by # ${srcdir}/support/shobj-conf # if test -f ${srcdir}/support/shobj-conf; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking configuration for building shared libraries" >&5 $as_echo_n "checking configuration for building shared libraries... " >&6; } eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` # case "$SHLIB_LIBS" in # *curses*|*termcap*|*termlib*) ;; # *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;; # esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLIB_STATUS" >&5 $as_echo "$SHLIB_STATUS" >&6; } # SHLIB_STATUS is either `supported' or `unsupported'. If it's # `unsupported', turn off any default shared library building if test "$SHLIB_STATUS" = 'unsupported'; then opt_shared_libs=no fi # shared library versioning # quoted for m4 so I can use character classes SHLIB_MAJOR=`expr "$LIBVERSION" : '\([0-9]\)\..*'` SHLIB_MINOR=`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'` fi if test "$opt_static_libs" = "yes"; then STATIC_TARGET=static STATIC_INSTALL_TARGET=install-static fi if test "$opt_shared_libs" = "yes"; then SHARED_TARGET=shared SHARED_INSTALL_TARGET=install-shared fi case "$build_os" in msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file *) BUILD_DIR=`pwd` ;; esac case "$BUILD_DIR" in *\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; *) ;; esac ac_config_files="$ac_config_files Makefile doc/Makefile examples/Makefile shlib/Makefile readline.pc" ac_config_commands="$ac_config_commands default" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by readline $as_me 7.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ readline config.status 7.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; "shlib/Makefile") CONFIG_FILES="$CONFIG_FILES shlib/Makefile" ;; "readline.pc") CONFIG_FILES="$CONFIG_FILES readline.pc" ;; "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "default":C) # Makefile uses this timestamp file to record whether config.h is up to date. echo > stamp-h ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi readline-7.0/configure.ac000664 000436 000024 00000017122 12764101537 015525 0ustar00chetstaff000000 000000 dnl dnl Configure script for readline library dnl dnl report bugs to chet@po.cwru.edu dnl dnl Process this file with autoconf to produce a configure script. # Copyright (C) 1987-2016 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . AC_REVISION([for Readline 7.0, version 2.81]) AC_INIT(readline, 7.0, bug-readline@gnu.org) dnl make sure we are using a recent autoconf version AC_PREREQ(2.50) AC_CONFIG_SRCDIR(readline.h) AC_CONFIG_AUX_DIR(./support) AC_CONFIG_HEADERS(config.h) dnl update the value of RL_READLINE_VERSION in readline.h when this changes LIBVERSION=7.0 AC_CANONICAL_HOST AC_CANONICAL_BUILD dnl configure defaults opt_curses=no dnl arguments to configure AC_ARG_WITH(curses, AC_HELP_STRING([--with-curses], [use the curses library instead of the termcap library]), opt_curses=$withval) if test "$opt_curses" = "yes"; then prefer_curses=yes fi dnl option parsing for optional features opt_multibyte=yes opt_static_libs=yes opt_shared_libs=yes AC_ARG_ENABLE(multibyte, AC_HELP_STRING([--enable-multibyte], [enable multibyte characters if OS supports them]), opt_multibyte=$enableval) AC_ARG_ENABLE(shared, AC_HELP_STRING([--enable-shared], [build shared libraries [[default=YES]]]), opt_shared_libs=$enableval) AC_ARG_ENABLE(static, AC_HELP_STRING([--enable-static], [build static libraries [[default=YES]]]), opt_static_libs=$enableval) if test $opt_multibyte = no; then AC_DEFINE(NO_MULTIBYTE_SUPPORT) fi dnl load up the cross-building cache file -- add more cases and cache dnl files as necessary dnl Note that host and target machine are the same, and different than the dnl build machine. CROSS_COMPILE= if test "x$cross_compiling" = "xyes"; then case "${host}" in *-cygwin*) cross_cache=${srcdir}/cross-build/cygwin.cache ;; *-mingw*) cross_cache=${srcdir}/cross-build/mingw.cache ;; i[[3456]]86-*-beos*) cross_cache=${srcdir}/cross-build/x86-beos.cache ;; *) echo "configure: cross-compiling for $host is not supported" >&2 ;; esac if test -n "${cross_cache}" && test -r "${cross_cache}"; then echo "loading cross-build cache file ${cross_cache}" . ${cross_cache} fi unset cross_cache CROSS_COMPILE='-DCROSS_COMPILING' AC_SUBST(CROSS_COMPILE) fi echo "" echo "Beginning configuration for readline-$LIBVERSION for ${host_cpu}-${host_vendor}-${host_os}" echo "" # We want these before the checks, so the checks can modify their values. test -z "$CFLAGS" && CFLAGS=-g auto_cflags=1 AC_PROG_MAKE_SET AC_PROG_CC dnl AC_AIX AC_MINIX # If we're using gcc and the user hasn't specified CFLAGS, add -O to CFLAGS. test -n "$GCC" && test -n "$auto_cflags" && CFLAGS="$CFLAGS -O" AC_PROG_GCC_TRADITIONAL AC_PROG_INSTALL AC_CHECK_TOOL(AR, ar) dnl Set default for ARFLAGS, since autoconf does not have a macro for it. dnl This allows people to set it when running configure or make test -n "$ARFLAGS" || ARFLAGS="cr" AC_PROG_RANLIB MAKE_SHELL=/bin/sh AC_SUBST(MAKE_SHELL) AC_C_CONST AC_C_PROTOTYPES AC_C_CHAR_UNSIGNED AC_C_VOLATILE AC_TYPE_SIGNAL AC_TYPE_SIZE_T AC_CHECK_TYPE(ssize_t, int) AC_HEADER_STDC AC_HEADER_STAT AC_HEADER_DIRENT AC_CHECK_FUNCS(fcntl kill lstat readlink) AC_CHECK_FUNCS(memmove pselect putenv select setenv setlocale \ strcasecmp strpbrk tcgetattr vsnprintf) AC_CHECK_FUNCS(isascii isxdigit) AC_CHECK_FUNCS(getpwent getpwnam getpwuid) AC_FUNC_CHOWN AC_FUNC_STRCOLL AC_CHECK_HEADERS(fcntl.h unistd.h stdlib.h varargs.h stdarg.h stdbool.h \ string.h strings.h \ limits.h locale.h pwd.h memory.h termcap.h termios.h termio.h) AC_CHECK_HEADERS(sys/ioctl.h sys/pte.h sys/stream.h sys/select.h sys/file.h) AC_CHECK_HEADERS(sys/ptem.h,,, [[ #if HAVE_SYS_STREAM_H # include #endif ]]) AC_SYS_LARGEFILE BASH_SYS_SIGNAL_VINTAGE BASH_SYS_REINSTALL_SIGHANDLERS BASH_FUNC_POSIX_SETJMP BASH_FUNC_LSTAT BASH_FUNC_STRCOLL BASH_FUNC_CTYPE_NONASCII BASH_CHECK_GETPW_FUNCS AC_HEADER_TIOCGWINSZ BASH_TYPE_SIG_ATOMIC_T BASH_TYPE_SIGHANDLER BASH_HAVE_TIOCSTAT BASH_HAVE_FIONREAD BASH_CHECK_SPEED_T BASH_STRUCT_WINSIZE BASH_STRUCT_DIRENT_D_INO BASH_STRUCT_DIRENT_D_FILENO AC_CHECK_HEADERS(libaudit.h) AC_CHECK_DECLS([AUDIT_USER_TTY],,, [[#include ]]) dnl yuck case "$host_os" in aix*) prefer_curses=yes ;; esac BASH_CHECK_LIB_TERMCAP if test "$TERMCAP_LIB" = "./lib/termcap/libtermcap.a"; then if test "$prefer_curses" = yes; then TERMCAP_LIB=-lcurses else TERMCAP_LIB=-ltermcap #default fi fi # Windows ncurses installation if test "$TERMCAP_LIB" = "-lncurses"; then AC_CHECK_HEADERS(ncurses/termcap.h) fi BASH_CHECK_MULTIBYTE case "$host_cpu" in *cray*) LOCAL_CFLAGS=-DCRAY ;; *s390*) LOCAL_CFLAGS=-fsigned-char ;; esac case "$host_os" in isc*) LOCAL_CFLAGS=-Disc386 ;; esac # shared library configuration section # # Shared object configuration section. These values are generated by # ${srcdir}/support/shobj-conf # if test -f ${srcdir}/support/shobj-conf; then AC_MSG_CHECKING(configuration for building shared libraries) eval `TERMCAP_LIB=$TERMCAP_LIB ${CONFIG_SHELL-/bin/sh} ${srcdir}/support/shobj-conf -C "${CC}" -c ${host_cpu} -o ${host_os} -v ${host_vendor}` # case "$SHLIB_LIBS" in # *curses*|*termcap*|*termlib*) ;; # *) SHLIB_LIBS="$SHLIB_LIBS $TERMCAP_LIB" ;; # esac AC_SUBST(SHOBJ_CC) AC_SUBST(SHOBJ_CFLAGS) AC_SUBST(SHOBJ_LD) AC_SUBST(SHOBJ_LDFLAGS) AC_SUBST(SHOBJ_XLDFLAGS) AC_SUBST(SHOBJ_LIBS) AC_SUBST(SHOBJ_STATUS) AC_SUBST(SHLIB_STATUS) AC_SUBST(SHLIB_XLDFLAGS) AC_SUBST(SHLIB_DOT) AC_SUBST(SHLIB_LIBPREF) AC_SUBST(SHLIB_LIBSUFF) AC_SUBST(SHLIB_LIBVERSION) AC_SUBST(SHLIB_DLLVERSION) AC_SUBST(SHLIB_LIBS) AC_MSG_RESULT($SHLIB_STATUS) # SHLIB_STATUS is either `supported' or `unsupported'. If it's # `unsupported', turn off any default shared library building if test "$SHLIB_STATUS" = 'unsupported'; then opt_shared_libs=no fi # shared library versioning # quoted for m4 so I can use character classes SHLIB_MAJOR=[`expr "$LIBVERSION" : '\([0-9]\)\..*'`] SHLIB_MINOR=[`expr "$LIBVERSION" : '[0-9]\.\([0-9]\).*'`] AC_SUBST(SHLIB_MAJOR) AC_SUBST(SHLIB_MINOR) fi if test "$opt_static_libs" = "yes"; then STATIC_TARGET=static STATIC_INSTALL_TARGET=install-static fi if test "$opt_shared_libs" = "yes"; then SHARED_TARGET=shared SHARED_INSTALL_TARGET=install-shared fi AC_SUBST(STATIC_TARGET) AC_SUBST(SHARED_TARGET) AC_SUBST(STATIC_INSTALL_TARGET) AC_SUBST(SHARED_INSTALL_TARGET) case "$build_os" in msdosdjgpp*) BUILD_DIR=`pwd.exe` ;; # to prevent //d/path/file *) BUILD_DIR=`pwd` ;; esac case "$BUILD_DIR" in *\ *) BUILD_DIR=`echo "$BUILD_DIR" | sed 's: :\\\\ :g'` ;; *) ;; esac AC_SUBST(BUILD_DIR) AC_SUBST(CFLAGS) AC_SUBST(LOCAL_CFLAGS) AC_SUBST(LOCAL_LDFLAGS) AC_SUBST(LOCAL_DEFS) AC_SUBST(AR) AC_SUBST(ARFLAGS) AC_SUBST(host_cpu) AC_SUBST(host_os) AC_SUBST(LIBVERSION) AC_SUBST(TERMCAP_LIB) AC_OUTPUT([Makefile doc/Makefile examples/Makefile shlib/Makefile readline.pc], [ # Makefile uses this timestamp file to record whether config.h is up to date. echo > stamp-h ]) readline-7.0/Makefile.in000664 000436 000024 00000044250 12567345037 015314 0ustar00chetstaff000000 000000 ## -*- text -*- ## # Master Makefile for the GNU readline library. # Copyright (C) 1994-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline PACKAGE = @PACKAGE_NAME@ VERSION = @PACKAGE_VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_VERSION = @PACKAGE_VERSION@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ srcdir = @srcdir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ BUILD_DIR = @BUILD_DIR@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ RANLIB = @RANLIB@ AR = @AR@ ARFLAGS = @ARFLAGS@ RM = rm -f CP = cp MV = mv @SET_MAKE@ SHELL = @MAKE_SHELL@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ libdir = @libdir@ mandir = @mandir@ includedir = @includedir@ datadir = @datadir@ localedir = @localedir@ infodir = @infodir@ docdir = @docdir@ man3dir = $(mandir)/man3 # Support an alternate destination root directory for package building DESTDIR = # Programs to make tags files. ETAGS = etags CTAGS = ctags -tw CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ DEFS = @DEFS@ @CROSS_COMPILE@ LOCAL_DEFS = @LOCAL_DEFS@ TERMCAP_LIB = @TERMCAP_LIB@ # For libraries which include headers from other libraries. INCLUDES = -I. -I$(srcdir) XCCFLAGS = $(DEFS) $(LOCAL_DEFS) $(INCLUDES) $(CPPFLAGS) CCFLAGS = $(XCCFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) # could add -Werror here GCC_LINT_FLAGS = -ansi -Wall -Wshadow -Wpointer-arith -Wcast-qual \ -Wwrite-strings -Wstrict-prototypes \ -Wmissing-prototypes -Wno-implicit -pedantic GCC_LINT_CFLAGS = $(XCCFLAGS) $(GCC_LINT_FLAGS) @CFLAGS@ @LOCAL_CFLAGS@ .c.o: ${RM} $@ $(CC) -c $(CCFLAGS) $< # The name of the main library target. LIBRARY_NAME = libreadline.a STATIC_LIBS = libreadline.a libhistory.a # The C code source files for this library. CSOURCES = $(srcdir)/readline.c $(srcdir)/funmap.c $(srcdir)/keymaps.c \ $(srcdir)/vi_mode.c $(srcdir)/parens.c $(srcdir)/rltty.c \ $(srcdir)/complete.c $(srcdir)/bind.c $(srcdir)/isearch.c \ $(srcdir)/display.c $(srcdir)/signals.c $(srcdir)/emacs_keymap.c \ $(srcdir)/vi_keymap.c $(srcdir)/util.c $(srcdir)/kill.c \ $(srcdir)/undo.c $(srcdir)/macro.c $(srcdir)/input.c \ $(srcdir)/callback.c $(srcdir)/terminal.c $(srcdir)/xmalloc.c $(srcdir)/xfree.c \ $(srcdir)/history.c $(srcdir)/histsearch.c $(srcdir)/histexpand.c \ $(srcdir)/histfile.c $(srcdir)/nls.c $(srcdir)/search.c \ $(srcdir)/shell.c $(srcdir)/savestring.c $(srcdir)/tilde.c \ $(srcdir)/text.c $(srcdir)/misc.c $(srcdir)/compat.c \ $(srcdir)/mbutil.c # The header files for this library. HSOURCES = $(srcdir)/readline.h $(srcdir)/rldefs.h $(srcdir)/chardefs.h \ $(srcdir)/keymaps.h $(srcdir)/history.h $(srcdir)/histlib.h \ $(srcdir)/posixstat.h $(srcdir)/posixdir.h $(srcdir)/posixjmp.h \ $(srcdir)/tilde.h $(srcdir)/rlconf.h $(srcdir)/rltty.h \ $(srcdir)/ansi_stdlib.h $(srcdir)/tcap.h $(srcdir)/rlstdc.h \ $(srcdir)/xmalloc.h $(srcdir)/rlprivate.h $(srcdir)/rlshell.h \ $(srcdir)/rltypedefs.h $(srcdir)/rlmbutil.h \ $(srcdir)/colors.h $(srcdir)/parse-colors.h HISTOBJ = history.o histexpand.o histfile.o histsearch.o shell.o mbutil.o TILDEOBJ = tilde.o COLORSOBJ = colors.o parse-colors.o OBJECTS = readline.o vi_mode.o funmap.o keymaps.o parens.o search.o \ rltty.o complete.o bind.o isearch.o display.o signals.o \ util.o kill.o undo.o macro.o input.o callback.o terminal.o \ text.o nls.o misc.o $(HISTOBJ) $(TILDEOBJ) $(COLORSOBJ) \ xmalloc.o xfree.o compat.o # The texinfo files which document this library. DOCSOURCE = doc/rlman.texinfo doc/rltech.texinfo doc/rluser.texinfo DOCOBJECT = doc/readline.dvi DOCSUPPORT = doc/Makefile DOCUMENTATION = $(DOCSOURCE) $(DOCOBJECT) $(DOCSUPPORT) CREATED_MAKEFILES = Makefile doc/Makefile examples/Makefile shlib/Makefile CREATED_CONFIGURE = config.status config.h config.cache config.log \ stamp-config stamp-h readline.pc CREATED_TAGS = TAGS tags INSTALLED_HEADERS = readline.h chardefs.h keymaps.h history.h tilde.h \ rlstdc.h rlconf.h rltypedefs.h OTHER_DOCS = $(srcdir)/CHANGES $(srcdir)/INSTALL $(srcdir)/README OTHER_INSTALLED_DOCS = CHANGES INSTALL README ########################################################################## TARGETS = @STATIC_TARGET@ @SHARED_TARGET@ INSTALL_TARGETS = @STATIC_INSTALL_TARGET@ @SHARED_INSTALL_TARGET@ all: $(TARGETS) everything: all examples static: $(STATIC_LIBS) libreadline.a: $(OBJECTS) $(RM) $@ $(AR) $(ARFLAGS) $@ $(OBJECTS) -test -n "$(RANLIB)" && $(RANLIB) $@ libhistory.a: $(HISTOBJ) xmalloc.o xfree.o $(RM) $@ $(AR) $(ARFLAGS) $@ $(HISTOBJ) xmalloc.o xfree.o -test -n "$(RANLIB)" && $(RANLIB) $@ # Since tilde.c is shared between readline and bash, make sure we compile # it with the right flags when it's built as part of readline tilde.o: tilde.c rm -f $@ $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -c $(srcdir)/tilde.c readline: $(OBJECTS) readline.h rldefs.h chardefs.h ./libreadline.a $(CC) $(CCFLAGS) -DREADLINE_LIBRARY -o $@ $(top_srcdir)/examples/rl.c ./libreadline.a ${TERMCAP_LIB} lint: force $(MAKE) $(MFLAGS) CCFLAGS='$(GCC_LINT_CFLAGS)' static Makefile makefile: config.status $(srcdir)/Makefile.in CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status Makefiles makefiles: config.status $(srcdir)/Makefile.in @for mf in $(CREATED_MAKEFILES); do \ CONFIG_FILES=$$mf CONFIG_HEADERS= $(SHELL) ./config.status ; \ done config.status: configure $(SHELL) ./config.status --recheck config.h: stamp-h stamp-h: config.status $(srcdir)/config.h.in CONFIG_FILES= CONFIG_HEADERS=config.h ./config.status echo > $@ #$(srcdir)/configure: $(srcdir)/configure.ac ## Comment-me-out in distribution # cd $(srcdir) && autoconf ## Comment-me-out in distribution shared: force -test -d shlib || mkdir shlib ( cd shlib ; ${MAKE} ${MFLAGS} all ) documentation: force -test -d doc || mkdir doc -( cd doc && $(MAKE) $(MFLAGS) ) examples: force -test -d examples || mkdir examples -(cd examples && ${MAKE} ${MFLAGS} all ) force: install: $(INSTALL_TARGETS) install-headers: installdirs ${INSTALLED_HEADERS} for f in ${INSTALLED_HEADERS}; do \ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(includedir)/readline ; \ done uninstall-headers: -test -n "$(includedir)" && cd $(DESTDIR)$(includedir)/readline && \ ${RM} ${INSTALLED_HEADERS} maybe-uninstall-headers: uninstall-headers install-static: installdirs $(STATIC_LIBS) install-headers install-doc install-examples -$(MV) $(DESTDIR)$(libdir)/libreadline.a $(DESTDIR)$(libdir)/libreadline.old $(INSTALL_DATA) libreadline.a $(DESTDIR)$(libdir)/libreadline.a -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libreadline.a -$(MV) $(DESTDIR)$(libdir)/libhistory.a $(DESTDIR)$(libdir)/libhistory.old $(INSTALL_DATA) libhistory.a $(DESTDIR)$(libdir)/libhistory.a -test -n "$(RANLIB)" && $(RANLIB) $(DESTDIR)$(libdir)/libhistory.a installdirs: $(srcdir)/support/mkinstalldirs -$(SHELL) $(srcdir)/support/mkinstalldirs $(DESTDIR)$(includedir) \ $(DESTDIR)$(includedir)/readline $(DESTDIR)$(libdir) \ $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) $(DESTDIR)$(docdir) uninstall: uninstall-headers uninstall-doc uninstall-examples -test -n "$(DESTDIR)$(libdir)" && cd $(DESTDIR)$(libdir) && \ ${RM} libreadline.a libreadline.old libhistory.a libhistory.old $(SHARED_LIBS) -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-shared: installdirs install-headers shared install-doc ( cd shlib ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install ) uninstall-shared: maybe-uninstall-headers -( cd shlib; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-examples: installdirs install-headers -( cd examples ; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} install ) uninstall-examples: maybe-uninstall-headers -( cd examples; ${MAKE} ${MFLAGS} DESTDIR=${DESTDIR} uninstall ) install-doc: installdirs $(INSTALL_DATA) $(OTHER_DOCS) $(DESTDIR)$(docdir) -( if test -d doc ; then \ cd doc && \ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} install; \ fi ) uninstall-doc: -( cd $(DESTDIR)$(docdir) && ${RM} ${OTHER_INSTALLED_DOCS} ) -( if test -d doc ; then \ cd doc && \ ${MAKE} ${MFLAGS} infodir=$(infodir) DESTDIR=${DESTDIR} uninstall; \ fi ) TAGS: force -( cd $(srcdir) && $(ETAGS) $(CSOURCES) $(HSOURCES) ) tags: force -( cd $(srcdir) && $(CTAGS) $(CSOURCES) $(HSOURCES) ) clean: force $(RM) $(OBJECTS) $(STATIC_LIBS) $(RM) readline readline.exe ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) mostlyclean: clean ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) distclean maintainer-clean: clean ( cd shlib && $(MAKE) $(MFLAGS) $@ ) -( cd doc && $(MAKE) $(MFLAGS) $@ ) -( cd examples && $(MAKE) $(MFLAGS) $@ ) $(RM) Makefile $(RM) $(CREATED_CONFIGURE) $(RM) $(CREATED_TAGS) readline.pc: config.status $(srcdir)/readline.pc.in $(SHELL) config.status info dvi html pdf ps: -( cd doc && $(MAKE) $(MFLAGS) $@ ) install-info: install-dvi: install-html: install-pdf: install-ps: check: installcheck: dist: force @echo Readline distributions are created using $(srcdir)/support/mkdist. @echo Here is a sample of the necessary commands: @echo bash $(srcdir)/support/mkdist -m $(srcdir)/MANIFEST -s $(srcdir) -r $(RL_LIBRARY_NAME) $(RL_LIBRARY_VERSION) @echo tar cf $(RL_LIBRARY_NAME)-${RL_LIBRARY_VERSION}.tar ${RL_LIBRARY_NAME}-$(RL_LIBRARY_VERSION) @echo gzip $(RL_LIBRARY_NAME)-$(RL_LIBRARY_VERSION).tar # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Dependencies bind.o: ansi_stdlib.h posixstat.h bind.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h bind.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h bind.o: history.h callback.o: rlconf.h callback.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h callback.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h compat.o: ${BUILD_DIR}/config.h compat.o: rlstdc.h rltypedefs.h complete.o: ansi_stdlib.h posixdir.h posixstat.h complete.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h complete.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h display.o: ansi_stdlib.h posixstat.h display.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h display.o: tcap.h display.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h display.o: history.h rlstdc.h funmap.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h funmap.o: rlconf.h ansi_stdlib.h rlstdc.h funmap.o: ${BUILD_DIR}/config.h histexpand.o: ansi_stdlib.h histexpand.o: history.h histlib.h rlstdc.h rltypedefs.h histexpand.o: ${BUILD_DIR}/config.h histfile.o: ansi_stdlib.h histfile.o: history.h histlib.h rlstdc.h rltypedefs.h histfile.o: ${BUILD_DIR}/config.h history.o: ansi_stdlib.h history.o: history.h histlib.h rlstdc.h rltypedefs.h history.o: ${BUILD_DIR}/config.h histsearch.o: ansi_stdlib.h histsearch.o: history.h histlib.h rlstdc.h rltypedefs.h histsearch.o: ${BUILD_DIR}/config.h input.o: ansi_stdlib.h input.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h input.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h isearch.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h isearch.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h isearch.o: ansi_stdlib.h history.h rlstdc.h keymaps.o: emacs_keymap.c vi_keymap.c keymaps.o: keymaps.h rltypedefs.h chardefs.h rlconf.h ansi_stdlib.h keymaps.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h keymaps.o: ${BUILD_DIR}/config.h rlstdc.h kill.o: ansi_stdlib.h kill.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h kill.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h kill.o: history.h rlstdc.h macro.o: ansi_stdlib.h macro.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h macro.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h macro.o: history.h rlstdc.h mbutil.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h mbutil.o: readline.h keymaps.h rltypedefs.h chardefs.h rlstdc.h misc.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h misc.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h misc.o: history.h rlstdc.h ansi_stdlib.h nls.o: ansi_stdlib.h nls.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h nls.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h nls.o: history.h rlstdc.h parens.o: rlconf.h parens.o: ${BUILD_DIR}/config.h parens.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h readline.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h readline.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h readline.o: history.h rlstdc.h readline.o: posixstat.h ansi_stdlib.h posixjmp.h rltty.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h rltty.o: rltty.h rltty.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h savestring.o: ${BUILD_DIR}/config.h search.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h search.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h search.o: ansi_stdlib.h history.h rlstdc.h shell.o: ${BUILD_DIR}/config.h shell.o: ansi_stdlib.h signals.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h signals.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h signals.o: history.h rlstdc.h terminal.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h terminal.o: tcap.h terminal.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h terminal.o: history.h rlstdc.h text.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h text.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h text.o: history.h rlstdc.h ansi_stdlib.h tilde.o: ansi_stdlib.h tilde.o: ${BUILD_DIR}/config.h tilde.o: tilde.h undo.o: ansi_stdlib.h undo.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h undo.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h undo.o: history.h rlstdc.h util.o: posixjmp.h ansi_stdlib.h util.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h util.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h vi_mode.o: rldefs.h ${BUILD_DIR}/config.h rlconf.h vi_mode.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h vi_mode.o: history.h ansi_stdlib.h rlstdc.h xfree.o: ${BUILD_DIR}/config.h xfree.o: ansi_stdlib.h xmalloc.o: ${BUILD_DIR}/config.h xmalloc.o: ansi_stdlib.h colors.o: ${BUILD_DIR}/config.h colors.h colors.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h colors.o: rlconf.h colors.o: ansi_stdlib.h posixstat.h parse-colors.o: ${BUILD_DIR}/config.h colors.h parse-colors.h parse-colors.o: rldefs.h rlconf.h parse-colors.o: readline.h keymaps.h rltypedefs.h chardefs.h tilde.h rlstdc.h bind.o: rlshell.h histfile.o: rlshell.h nls.o: rlshell.h readline.o: rlshell.h shell.o: rlshell.h terminal.o: rlshell.h histexpand.o: rlshell.h bind.o: rlprivate.h callback.o: rlprivate.h complete.o: rlprivate.h display.o: rlprivate.h input.o: rlprivate.h isearch.o: rlprivate.h kill.o: rlprivate.h macro.o: rlprivate.h mbutil.o: rlprivate.h misc.o: rlprivate.h nls.o: rlprivate.h parens.o: rlprivate.h readline.o: rlprivate.h rltty.o: rlprivate.h search.o: rlprivate.h signals.o: rlprivate.h terminal.o: rlprivate.h text.o: rlprivate.h undo.o: rlprivate.h util.o: rlprivate.h vi_mode.o: rlprivate.h colors.o: rlprivate.h parse-colors.o: rlprivate.h bind.o: xmalloc.h callback.o: xmalloc.h complete.o: xmalloc.h display.o: xmalloc.h funmap.o: xmalloc.h histexpand.o: xmalloc.h histfile.o: xmalloc.h history.o: xmalloc.h input.o: xmalloc.h isearch.o: xmalloc.h keymaps.o: xmalloc.h kill.o: xmalloc.h macro.o: xmalloc.h mbutil.o: xmalloc.h misc.o: xmalloc.h readline.o: xmalloc.h savestring.o: xmalloc.h search.o: xmalloc.h shell.o: xmalloc.h terminal.o: xmalloc.h text.o: xmalloc.h tilde.o: xmalloc.h undo.o: xmalloc.h util.o: xmalloc.h vi_mode.o: xmalloc.h xfree.o: xmalloc.h xmalloc.o: xmalloc.h colors.o: xmalloc.h parse-colors.o: xmalloc.h complete.o: rlmbutil.h display.o: rlmbutil.h histexpand.o: rlmbutil.h input.o: rlmbutil.h isearch.o: rlmbutil.h mbutil.o: rlmbutil.h misc.o: rlmbutil.h readline.o: rlmbutil.h search.o: rlmbutil.h text.o: rlmbutil.h vi_mode.o: rlmbutil.h bind.o: $(srcdir)/bind.c callback.o: $(srcdir)/callback.c compat.o: $(srcdir)/compat.c complete.o: $(srcdir)/complete.c display.o: $(srcdir)/display.c funmap.o: $(srcdir)/funmap.c input.o: $(srcdir)/input.c isearch.o: $(srcdir)/isearch.c keymaps.o: $(srcdir)/keymaps.c $(srcdir)/emacs_keymap.c $(srcdir)/vi_keymap.c kill.o: $(srcdir)/kill.c macro.o: $(srcdir)/macro.c mbutil.o: $(srcdir)/mbutil.c misc.o: $(srcdir)/misc.c nls.o: $(srcdir)/nls.c parens.o: $(srcdir)/parens.c readline.o: $(srcdir)/readline.c rltty.o: $(srcdir)/rltty.c savestring.o: $(srcdir)/savestring.c search.o: $(srcdir)/search.c shell.o: $(srcdir)/shell.c signals.o: $(srcdir)/signals.c terminal.o: $(srcdir)/terminal.c text.o: $(srcdir)/text.c tilde.o: $(srcdir)/tilde.c undo.o: $(srcdir)/undo.c util.o: $(srcdir)/util.c vi_mode.o: $(srcdir)/vi_mode.c xfree.o: $(srcdir)/xfree.c xmalloc.o: $(srcdir)/xmalloc.c colors.o: $(srcdir)/parse-colors.c parse-colors.o: $(srcdir)/parse-colors.c histexpand.o: $(srcdir)/histexpand.c histfile.o: $(srcdir)/histfile.c history.o: $(srcdir)/history.c histsearch.o: $(srcdir)/histsearch.c bind.o: bind.c callback.o: callback.c compat.o: compat.c complete.o: complete.c display.o: display.c funmap.o: funmap.c input.o: input.c isearch.o: isearch.c keymaps.o: keymaps.c emacs_keymap.c vi_keymap.c kill.o: kill.c macro.o: macro.c mbutil.o: mbutil.c misc.o: misc.c nls.o: nls.c parens.o: parens.c readline.o: readline.c rltty.o: rltty.c savestring.o: savestring.c search.o: search.c shell.o: shell.c signals.o: signals.c terminal.o: terminal.c text.o: text.c tilde.o: tilde.c undo.o: undo.c util.o: util.c vi_mode.o: vi_mode.c xfree.o: xfree.c xmalloc.o: xmalloc.c histexpand.o: histexpand.c histfile.o: histfile.c history.o: history.c histsearch.o: histsearch.c readline-7.0/readline.pc.in000664 000436 000024 00000000502 12346114536 015744 0ustar00chetstaff000000 000000 prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: Readline Description: Gnu Readline library for command line editing URL: http://tiswww.cwru.edu/php/chet/readline/rltop.html Version: @LIBVERSION@ Requires.private: tinfo Libs: -L${libdir} -lreadline Cflags: -I${includedir}/readline readline-7.0/ansi_stdlib.h000664 000436 000024 00000002635 11050314314 015670 0ustar00chetstaff000000 000000 /* ansi_stdlib.h -- An ANSI Standard stdlib.h. */ /* A minimal stdlib.h containing extern declarations for those functions that bash uses. */ /* Copyright (C) 1993 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash 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 3 of the License, or (at your option) any later version. Bash 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 Bash. If not, see . */ #if !defined (_STDLIB_H_) #define _STDLIB_H_ 1 /* String conversion functions. */ extern int atoi (); extern double atof (); extern double strtod (); /* Memory allocation functions. */ /* Generic pointer type. */ #ifndef PTR_T #if defined (__STDC__) # define PTR_T void * #else # define PTR_T char * #endif #endif /* PTR_T */ extern PTR_T malloc (); extern PTR_T realloc (); extern void free (); /* Other miscellaneous functions. */ extern void abort (); extern void exit (); extern char *getenv (); extern void qsort (); #endif /* _STDLIB_H */ readline-7.0/chardefs.h000664 000436 000024 00000011131 12651440512 015153 0ustar00chetstaff000000 000000 /* chardefs.h -- Character definitions for readline. */ /* Copyright (C) 1994-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #ifndef _CHARDEFS_H_ #define _CHARDEFS_H_ #include #if defined (HAVE_CONFIG_H) # if defined (HAVE_STRING_H) # if ! defined (STDC_HEADERS) && defined (HAVE_MEMORY_H) # include # endif # include # endif /* HAVE_STRING_H */ # if defined (HAVE_STRINGS_H) # include # endif /* HAVE_STRINGS_H */ #else # include #endif /* !HAVE_CONFIG_H */ #ifndef whitespace #define whitespace(c) (((c) == ' ') || ((c) == '\t')) #endif #ifdef CTRL # undef CTRL #endif #ifdef UNCTRL # undef UNCTRL #endif /* Some character stuff. */ #define control_character_threshold 0x020 /* Smaller than this is control. */ #define control_character_mask 0x1f /* 0x20 - 1 */ #define meta_character_threshold 0x07f /* Larger than this is Meta. */ #define control_character_bit 0x40 /* 0x000000, must be off. */ #define meta_character_bit 0x080 /* x0000000, must be on. */ #define largest_char 255 /* Largest character value. */ #define CTRL_CHAR(c) ((c) < control_character_threshold && (((c) & 0x80) == 0)) #define META_CHAR(c) ((c) > meta_character_threshold && (c) <= largest_char) #define CTRL(c) ((c) & control_character_mask) #define META(c) ((c) | meta_character_bit) #define UNMETA(c) ((c) & (~meta_character_bit)) #define UNCTRL(c) _rl_to_upper(((c)|control_character_bit)) #if defined STDC_HEADERS || (!defined (isascii) && !defined (HAVE_ISASCII)) # define IN_CTYPE_DOMAIN(c) 1 #else # define IN_CTYPE_DOMAIN(c) isascii(c) #endif #if !defined (isxdigit) && !defined (HAVE_ISXDIGIT) && !defined (__cplusplus) # define isxdigit(c) (isdigit((unsigned char)(c)) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #if defined (CTYPE_NON_ASCII) # define NON_NEGATIVE(c) 1 #else # define NON_NEGATIVE(c) ((unsigned char)(c) == (c)) #endif /* Some systems define these; we want our definitions. */ #undef ISPRINT /* Beware: these only work with single-byte ASCII characters. */ #define ISALNUM(c) (IN_CTYPE_DOMAIN (c) && isalnum ((unsigned char)c)) #define ISALPHA(c) (IN_CTYPE_DOMAIN (c) && isalpha ((unsigned char)c)) #define ISDIGIT(c) (IN_CTYPE_DOMAIN (c) && isdigit ((unsigned char)c)) #define ISLOWER(c) (IN_CTYPE_DOMAIN (c) && islower ((unsigned char)c)) #define ISPRINT(c) (IN_CTYPE_DOMAIN (c) && isprint ((unsigned char)c)) #define ISUPPER(c) (IN_CTYPE_DOMAIN (c) && isupper ((unsigned char)c)) #define ISXDIGIT(c) (IN_CTYPE_DOMAIN (c) && isxdigit ((unsigned char)c)) #define _rl_lowercase_p(c) (NON_NEGATIVE(c) && ISLOWER(c)) #define _rl_uppercase_p(c) (NON_NEGATIVE(c) && ISUPPER(c)) #define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') #define _rl_pure_alphabetic(c) (NON_NEGATIVE(c) && ISALPHA(c)) #define ALPHABETIC(c) (NON_NEGATIVE(c) && ISALNUM(c)) #ifndef _rl_to_upper # define _rl_to_upper(c) (_rl_lowercase_p(c) ? toupper((unsigned char)c) : (c)) # define _rl_to_lower(c) (_rl_uppercase_p(c) ? tolower((unsigned char)c) : (c)) #endif #ifndef _rl_digit_value # define _rl_digit_value(x) ((x) - '0') #endif #ifndef _rl_isident # define _rl_isident(c) (ISALNUM(c) || (c) == '_') #endif #ifndef ISOCTAL # define ISOCTAL(c) ((c) >= '0' && (c) <= '7') #endif #define OCTVALUE(c) ((c) - '0') #define HEXVALUE(c) \ (((c) >= 'a' && (c) <= 'f') \ ? (c)-'a'+10 \ : (c) >= 'A' && (c) <= 'F' ? (c)-'A'+10 : (c)-'0') #ifndef NEWLINE #define NEWLINE '\n' #endif #ifndef RETURN #define RETURN CTRL('M') #endif #ifndef RUBOUT #define RUBOUT 0x7f #endif #ifndef TAB #define TAB '\t' #endif #ifdef ABORT_CHAR #undef ABORT_CHAR #endif #define ABORT_CHAR CTRL('G') #ifdef PAGE #undef PAGE #endif #define PAGE CTRL('L') #ifdef SPACE #undef SPACE #endif #define SPACE ' ' /* XXX - was 0x20 */ #ifdef ESC #undef ESC #endif #define ESC CTRL('[') #endif /* _CHARDEFS_H_ */ readline-7.0/colors.h000644 000436 000024 00000007017 12651440543 014707 0ustar00chetstaff000000 000000 /* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 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, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #ifndef _COLORS_H_ #define _COLORS_H_ #include // size_t #if defined(__TANDEM) && defined(HAVE_STDBOOL_H) && (__STDC_VERSION__ < 199901L) typedef int _Bool; #endif #if defined (HAVE_STDBOOL_H) # include // bool #else typedef int _rl_bool_t; #ifdef bool # undef bool #endif #define bool _rl_bool_t #ifndef true # define true 1 # define false 0 #endif #endif /* !HAVE_STDBOOL_H */ /* Null is a valid character in a color indicator (think about Epson printers, for example) so we have to use a length/buffer string type. */ struct bin_str { size_t len; const char *string; }; /* file type indicators (dir, sock, fifo, ...) Default value is initialized in parse-colors.c. It is then modified from the values of $LS_COLORS. */ extern struct bin_str _rl_color_indicator[]; /* The LS_COLORS variable is in a termcap-like format. */ typedef struct _color_ext_type { struct bin_str ext; /* The extension we're looking for */ struct bin_str seq; /* The sequence to output when we do */ struct _color_ext_type *next; /* Next in list */ } COLOR_EXT_TYPE; /* file extensions indicators (.txt, .log, .jpg, ...) Values are taken from $LS_COLORS in rl_parse_colors(). */ extern COLOR_EXT_TYPE *_rl_color_ext_list; #define FILETYPE_INDICATORS \ { \ C_ORPHAN, C_FIFO, C_CHR, C_DIR, C_BLK, C_FILE, \ C_LINK, C_SOCK, C_FILE, C_DIR \ } /* Whether we used any colors in the output so far. If so, we will need to restore the default color later. If not, we will need to call prep_non_filename_text before using color for the first time. */ enum indicator_no { C_LEFT, C_RIGHT, C_END, C_RESET, C_NORM, C_FILE, C_DIR, C_LINK, C_FIFO, C_SOCK, C_BLK, C_CHR, C_MISSING, C_ORPHAN, C_EXEC, C_DOOR, C_SETUID, C_SETGID, C_STICKY, C_OTHER_WRITABLE, C_STICKY_OTHER_WRITABLE, C_CAP, C_MULTIHARDLINK, C_CLR_TO_EOL }; #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif enum filetype { unknown, fifo, chardev, directory, blockdev, normal, symbolic_link, sock, whiteout, arg_directory }; /* Prefix color, currently same as socket */ #define C_PREFIX C_SOCK extern void _rl_put_indicator (const struct bin_str *ind); extern void _rl_set_normal_color (void); extern bool _rl_print_prefix_color (void); extern bool _rl_print_color_indicator (const char *f); extern void _rl_prep_non_filename_text (void); #endif /* !_COLORS_H_ */ readline-7.0/history.h000664 000436 000024 00000024603 12641025725 015111 0ustar00chetstaff000000 000000 /* history.h -- the names of functions that you can call in history. */ /* Copyright (C) 1989-2015 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ #ifndef _HISTORY_H_ #define _HISTORY_H_ #ifdef __cplusplus extern "C" { #endif #include /* XXX - for history timestamp code */ #if defined READLINE_LIBRARY # include "rlstdc.h" # include "rltypedefs.h" #else # include # include #endif #ifdef __STDC__ typedef void *histdata_t; #else typedef char *histdata_t; #endif /* The structure used to store a history entry. */ typedef struct _hist_entry { char *line; char *timestamp; /* char * rather than time_t for read/write */ histdata_t data; } HIST_ENTRY; /* Size of the history-library-managed space in history entry HS. */ #define HISTENT_BYTES(hs) (strlen ((hs)->line) + strlen ((hs)->timestamp)) /* A structure used to pass the current state of the history stuff around. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; /* Flag values for the `flags' member of HISTORY_STATE. */ #define HS_STIFLED 0x01 /* Initialization and state management. */ /* Begin a session in which the history functions might be used. This just initializes the interactive variables. */ extern void using_history PARAMS((void)); /* Return the current HISTORY_STATE of the history. */ extern HISTORY_STATE *history_get_history_state PARAMS((void)); /* Set the state of the current history array to STATE. */ extern void history_set_history_state PARAMS((HISTORY_STATE *)); /* Manage the history list. */ /* Place STRING at the end of the history list. The associated data field (if any) is set to NULL. */ extern void add_history PARAMS((const char *)); /* Change the timestamp associated with the most recent history entry to STRING. */ extern void add_history_time PARAMS((const char *)); /* A reasonably useless function, only here for completeness. WHICH is the magic number that tells us which element to delete. The elements are numbered from 0. */ extern HIST_ENTRY *remove_history PARAMS((int)); /* Allocate a history entry consisting of STRING and TIMESTAMP and return a pointer to it. */ extern HIST_ENTRY *alloc_history_entry PARAMS((char *, char *)); /* Copy the history entry H, but not the (opaque) data pointer */ extern HIST_ENTRY *copy_history_entry PARAMS((HIST_ENTRY *)); /* Free the history entry H and return any application-specific data associated with it. */ extern histdata_t free_history_entry PARAMS((HIST_ENTRY *)); /* Make the history entry at WHICH have LINE and DATA. This returns the old entry so you can dispose of the data. In the case of an invalid WHICH, a NULL pointer is returned. */ extern HIST_ENTRY *replace_history_entry PARAMS((int, const char *, histdata_t)); /* Clear the history list and start over. */ extern void clear_history PARAMS((void)); /* Stifle the history list, remembering only MAX number of entries. */ extern void stifle_history PARAMS((int)); /* Stop stifling the history. This returns the previous amount the history was stifled by. The value is positive if the history was stifled, negative if it wasn't. */ extern int unstifle_history PARAMS((void)); /* Return 1 if the history is stifled, 0 if it is not. */ extern int history_is_stifled PARAMS((void)); /* Information about the history list. */ /* Return a NULL terminated array of HIST_ENTRY which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NULL. */ extern HIST_ENTRY **history_list PARAMS((void)); /* Returns the number which says what history element we are now looking at. */ extern int where_history PARAMS((void)); /* Return the history entry at the current position, as determined by history_offset. If there is no entry there, return a NULL pointer. */ extern HIST_ENTRY *current_history PARAMS((void)); /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ extern HIST_ENTRY *history_get PARAMS((int)); /* Return the timestamp associated with the HIST_ENTRY * passed as an argument */ extern time_t history_get_time PARAMS((HIST_ENTRY *)); /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines. */ extern int history_total_bytes PARAMS((void)); /* Moving around the history list. */ /* Set the position in the history list to POS. */ extern int history_set_pos PARAMS((int)); /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer. */ extern HIST_ENTRY *previous_history PARAMS((void)); /* Move history_offset forward to the next item in the input_history, and return the a pointer to that entry. If there is no next entry, return a NULL pointer. */ extern HIST_ENTRY *next_history PARAMS((void)); /* Searching the history list. */ /* Search the history for STRING, starting at history_offset. If DIRECTION < 0, then the search is through previous entries, else through subsequent. If the string is found, then current_history () is the history entry, and the value of this function is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ extern int history_search PARAMS((const char *, int)); /* Search the history for STRING, starting at history_offset. The search is anchored: matching lines must begin with string. DIRECTION is as in history_search(). */ extern int history_search_prefix PARAMS((const char *, int)); /* Search for STRING in the history list, starting at POS, an absolute index into the list. DIR, if negative, says to search backwards from POS, else forwards. Returns the absolute index of the history element where STRING was found, or -1 otherwise. */ extern int history_search_pos PARAMS((const char *, int, int)); /* Managing the history file. */ /* Add the contents of FILENAME to the history list, a line at a time. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ extern int read_history PARAMS((const char *)); /* Read a range of lines from FILENAME, adding them to the history list. Start reading at the FROM'th line and end at the TO'th. If FROM is zero, start at the beginning. If TO is less than FROM, read until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ extern int read_history_range PARAMS((const char *, int, int)); /* Write the current history to FILENAME. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history (). */ extern int write_history PARAMS((const char *)); /* Append NELEMENT entries to FILENAME. The entries appended are from the end of the list minus NELEMENTs up to the end of the list. */ extern int append_history PARAMS((int, const char *)); /* Truncate the history file, leaving only the last NLINES lines. */ extern int history_truncate_file PARAMS((const char *, int)); /* History expansion. */ /* Expand the string STRING, placing the result into OUTPUT, a pointer to a string. Returns: 0) If no expansions took place (or, if the only change in the text was the de-slashifying of the history expansion character) 1) If expansions did take place -1) If there was an error in expansion. 2) If the returned line should just be printed. If an error occurred in expansion, then OUTPUT contains a descriptive error message. */ extern int history_expand PARAMS((char *, char **)); /* Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are broken up as in the shell. */ extern char *history_arg_extract PARAMS((int, int, const char *)); /* Return the text of the history event beginning at the current offset into STRING. Pass STRING with *INDEX equal to the history_expansion_char that begins this specification. DELIMITING_QUOTE is a character that is allowed to end the string specification for what to search for in addition to the normal characters `:', ` ', `\t', `\n', and sometimes `?'. */ extern char *get_history_event PARAMS((const char *, int *, int)); /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ extern char **history_tokenize PARAMS((const char *)); /* Exported history variables. */ extern int history_base; extern int history_length; extern int history_max_entries; extern int history_offset; extern int history_lines_read_from_file; extern int history_lines_written_to_file; extern char history_expansion_char; extern char history_subst_char; extern char *history_word_delimiters; extern char history_comment_char; extern char *history_no_expand_chars; extern char *history_search_delimiter_chars; extern int history_quotes_inhibit_expansion; extern int history_write_timestamps; /* These two are undocumented; the second is reserved for future use */ extern int history_multiline_entries; extern int history_file_version; /* Backwards compatibility */ extern int max_input_history; /* If set, this function is called to decide whether or not a particular history expansion should be treated as a special case for the calling application and not expanded. */ extern rl_linebuf_func_t *history_inhibit_expansion_function; #ifdef __cplusplus } #endif #endif /* !_HISTORY_H_ */ readline-7.0/histlib.h000664 000436 000024 00000004264 12706436470 015054 0ustar00chetstaff000000 000000 /* histlib.h -- internal definitions for the history library. */ /* Copyright (C) 1989-2009 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ #if !defined (_HISTLIB_H_) #define _HISTLIB_H_ #if defined (HAVE_STRING_H) # include #else # include #endif /* !HAVE_STRING_H */ #if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) #define STREQN(a, b, n) (((n) == 0) ? (1) \ : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif #ifndef savestring #define savestring(x) strcpy (xmalloc (1 + strlen (x)), (x)) #endif #ifndef whitespace #define whitespace(c) (((c) == ' ') || ((c) == '\t')) #endif #ifndef _rl_digit_p #define _rl_digit_p(c) ((c) >= '0' && (c) <= '9') #endif #ifndef _rl_digit_value #define _rl_digit_value(c) ((c) - '0') #endif #ifndef member # ifndef strchr extern char *strchr (); # endif #define member(c, s) ((c) ? ((char *)strchr ((s), (c)) != (char *)NULL) : 0) #endif #ifndef FREE # define FREE(x) if (x) free (x) #endif /* Possible history errors passed to hist_error. */ #define EVENT_NOT_FOUND 0 #define BAD_WORD_SPEC 1 #define SUBST_FAILED 2 #define BAD_MODIFIER 3 #define NO_PREV_SUBST 4 /* Possible definitions for history starting point specification. */ #define ANCHORED_SEARCH 1 #define NON_ANCHORED_SEARCH 0 /* Possible definitions for what style of writing the history file we want. */ #define HISTORY_APPEND 0 #define HISTORY_OVERWRITE 1 #endif /* !_HISTLIB_H_ */ readline-7.0/keymaps.h000644 000436 000000 00000006133 11414753776 015063 0ustar00chetwheel000000 000000 /* keymaps.h -- Manipulation of readline keymaps. */ /* Copyright (C) 1987, 1989, 1992 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #ifndef _KEYMAPS_H_ #define _KEYMAPS_H_ #ifdef __cplusplus extern "C" { #endif #if defined (READLINE_LIBRARY) # include "rlstdc.h" # include "chardefs.h" # include "rltypedefs.h" #else # include # include # include #endif /* A keymap contains one entry for each key in the ASCII set. Each entry consists of a type and a pointer. FUNCTION is the address of a function to run, or the address of a keymap to indirect through. TYPE says which kind of thing FUNCTION is. */ typedef struct _keymap_entry { char type; rl_command_func_t *function; } KEYMAP_ENTRY; /* This must be large enough to hold bindings for all of the characters in a desired character set (e.g, 128 for ASCII, 256 for ISO Latin-x, and so on) plus one for subsequence matching. */ #define KEYMAP_SIZE 257 #define ANYOTHERKEY KEYMAP_SIZE-1 typedef KEYMAP_ENTRY KEYMAP_ENTRY_ARRAY[KEYMAP_SIZE]; typedef KEYMAP_ENTRY *Keymap; /* The values that TYPE can have in a keymap entry. */ #define ISFUNC 0 #define ISKMAP 1 #define ISMACR 2 extern KEYMAP_ENTRY_ARRAY emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap; extern KEYMAP_ENTRY_ARRAY vi_insertion_keymap, vi_movement_keymap; /* Return a new, empty keymap. Free it with free() when you are done. */ extern Keymap rl_make_bare_keymap PARAMS((void)); /* Return a new keymap which is a copy of MAP. */ extern Keymap rl_copy_keymap PARAMS((Keymap)); /* Return a new keymap with the printing characters bound to rl_insert, the lowercase Meta characters bound to run their equivalents, and the Meta digits bound to produce numeric arguments. */ extern Keymap rl_make_keymap PARAMS((void)); /* Free the storage associated with a keymap. */ extern void rl_discard_keymap PARAMS((Keymap)); /* These functions actually appear in bind.c */ /* Return the keymap corresponding to a given name. Names look like `emacs' or `emacs-meta' or `vi-insert'. */ extern Keymap rl_get_keymap_by_name PARAMS((const char *)); /* Return the current keymap. */ extern Keymap rl_get_keymap PARAMS((void)); /* Set the current keymap to MAP. */ extern void rl_set_keymap PARAMS((Keymap)); #ifdef __cplusplus } #endif #endif /* _KEYMAPS_H_ */ readline-7.0/parse-colors.h000644 000436 000000 00000002777 11741616321 016020 0ustar00chetwheel000000 000000 /* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 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, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #ifndef _PARSE_COLORS_H_ #define _PARSE_COLORS_H_ #include "readline.h" #define LEN_STR_PAIR(s) sizeof (s) - 1, s void _rl_parse_colors (void); static const char *const indicator_name[]= { "lc", "rc", "ec", "rs", "no", "fi", "di", "ln", "pi", "so", "bd", "cd", "mi", "or", "ex", "do", "su", "sg", "st", "ow", "tw", "ca", "mh", "cl", NULL }; /* Buffer for color sequences */ static char *color_buf; #endif /* !_PARSE_COLORS_H_ */ readline-7.0/posixdir.h000664 000436 000024 00000004401 11726673644 015257 0ustar00chetstaff000000 000000 /* posixdir.h -- Posix directory reading includes and defines. */ /* Copyright (C) 1987,1991,2012 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash 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 3 of the License, or (at your option) any later version. Bash 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 Bash. If not, see . */ /* This file should be included instead of or . */ #if !defined (_POSIXDIR_H_) #define _POSIXDIR_H_ #if defined (HAVE_DIRENT_H) # include # if defined (HAVE_STRUCT_DIRENT_D_NAMLEN) # define D_NAMLEN(d) ((d)->d_namlen) # else # define D_NAMLEN(d) (strlen ((d)->d_name)) # endif /* !HAVE_STRUCT_DIRENT_D_NAMLEN */ #else # if defined (HAVE_SYS_NDIR_H) # include # endif # if defined (HAVE_SYS_DIR_H) # include # endif # if defined (HAVE_NDIR_H) # include # endif # if !defined (dirent) # define dirent direct # endif /* !dirent */ # define D_NAMLEN(d) ((d)->d_namlen) #endif /* !HAVE_DIRENT_H */ /* The bash code fairly consistenly uses d_fileno; make sure it's available */ #if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (HAVE_STRUCT_DIRENT_D_FILENO) # define d_fileno d_ino #endif /* Posix does not require that the d_ino field be present, and some systems do not provide it. */ #if !defined (HAVE_STRUCT_DIRENT_D_INO) || defined (BROKEN_DIRENT_D_INO) # define REAL_DIR_ENTRY(dp) 1 #else # define REAL_DIR_ENTRY(dp) (dp->d_ino != 0) #endif /* _POSIX_SOURCE */ #if defined (HAVE_STRUCT_DIRENT_D_INO) && !defined (BROKEN_DIRENT_D_INO) # define D_INO_AVAILABLE #endif /* Signal the rest of the code that it can safely use dirent.d_fileno */ #if defined (D_INO_AVAILABLE) || defined (HAVE_STRUCT_DIRENT_D_FILENO) # define D_FILENO_AVAILABLE 1 #endif #endif /* !_POSIXDIR_H_ */ readline-7.0/posixjmp.h000664 000436 000024 00000002577 12465654057 015301 0ustar00chetstaff000000 000000 /* posixjmp.h -- wrapper for setjmp.h with changes for POSIX systems. */ /* Copyright (C) 1987,1991-2015 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash 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 3 of the License, or (at your option) any later version. Bash 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 Bash. If not, see . */ #ifndef _POSIXJMP_H_ #define _POSIXJMP_H_ #include /* This *must* be included *after* config.h */ #if defined (HAVE_POSIX_SIGSETJMP) # define procenv_t sigjmp_buf # define setjmp_nosigs(x) sigsetjmp((x), 0) # define setjmp_sigs(x) sigsetjmp((x), 1) # define _rl_longjmp(x, n) siglongjmp((x), (n)) # define sh_longjmp(x, n) siglongjmp((x), (n)) #else # define procenv_t jmp_buf # define setjmp_nosigs setjmp # define setjmp_sigs setjmp # define _rl_longjmp(x, n) longjmp((x), (n)) # define sh_longjmp(x, n) longjmp((x), (n)) #endif #endif /* _POSIXJMP_H_ */ readline-7.0/posixselect.h000664 000436 000024 00000002524 11172654144 015751 0ustar00chetstaff000000 000000 /* posixselect.h -- wrapper for select(2) includes and definitions */ /* Copyright (C) 2009 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash 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 3 of the License, or (at your option) any later version. Bash 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 Bash. If not, see . */ #ifndef _POSIXSELECT_H_ #define _POSIXSELECT_H_ #if defined (FD_SET) && !defined (HAVE_SELECT) # define HAVE_SELECT 1 #endif #if defined (HAVE_SELECT) # if !defined (HAVE_SYS_SELECT_H) || !defined (M_UNIX) # include # endif #endif /* HAVE_SELECT */ #if defined (HAVE_SYS_SELECT_H) # include #endif #ifndef USEC_PER_SEC # define USEC_PER_SEC 1000000 #endif #define USEC_TO_TIMEVAL(us, tv) \ do { \ (tv).tv_sec = (us) / USEC_PER_SEC; \ (tv).tv_usec = (us) % USEC_PER_SEC; \ } while (0) #endif /* _POSIXSELECT_H_ */ readline-7.0/posixstat.h000664 000436 000024 00000010336 11050313766 015442 0ustar00chetstaff000000 000000 /* posixstat.h -- Posix stat(2) definitions for systems that don't have them. */ /* Copyright (C) 1987,1991 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. Bash 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 3 of the License, or (at your option) any later version. Bash 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 Bash. If not, see . */ /* This file should be included instead of . It relies on the local sys/stat.h to work though. */ #if !defined (_POSIXSTAT_H_) #define _POSIXSTAT_H_ #include #if defined (STAT_MACROS_BROKEN) # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISREG # undef S_ISLNK #endif /* STAT_MACROS_BROKEN */ /* These are guaranteed to work only on isc386 */ #if !defined (S_IFDIR) && !defined (S_ISDIR) # define S_IFDIR 0040000 #endif /* !S_IFDIR && !S_ISDIR */ #if !defined (S_IFMT) # define S_IFMT 0170000 #endif /* !S_IFMT */ /* Posix 1003.1 5.6.1.1 file types */ /* Some Posix-wannabe systems define _S_IF* macros instead of S_IF*, but do not provide the S_IS* macros that Posix requires. */ #if defined (_S_IFMT) && !defined (S_IFMT) #define S_IFMT _S_IFMT #endif #if defined (_S_IFIFO) && !defined (S_IFIFO) #define S_IFIFO _S_IFIFO #endif #if defined (_S_IFCHR) && !defined (S_IFCHR) #define S_IFCHR _S_IFCHR #endif #if defined (_S_IFDIR) && !defined (S_IFDIR) #define S_IFDIR _S_IFDIR #endif #if defined (_S_IFBLK) && !defined (S_IFBLK) #define S_IFBLK _S_IFBLK #endif #if defined (_S_IFREG) && !defined (S_IFREG) #define S_IFREG _S_IFREG #endif #if defined (_S_IFLNK) && !defined (S_IFLNK) #define S_IFLNK _S_IFLNK #endif #if defined (_S_IFSOCK) && !defined (S_IFSOCK) #define S_IFSOCK _S_IFSOCK #endif /* Test for each symbol individually and define the ones necessary (some systems claiming Posix compatibility define some but not all). */ #if defined (S_IFBLK) && !defined (S_ISBLK) #define S_ISBLK(m) (((m)&S_IFMT) == S_IFBLK) /* block device */ #endif #if defined (S_IFCHR) && !defined (S_ISCHR) #define S_ISCHR(m) (((m)&S_IFMT) == S_IFCHR) /* character device */ #endif #if defined (S_IFDIR) && !defined (S_ISDIR) #define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) /* directory */ #endif #if defined (S_IFREG) && !defined (S_ISREG) #define S_ISREG(m) (((m)&S_IFMT) == S_IFREG) /* file */ #endif #if defined (S_IFIFO) && !defined (S_ISFIFO) #define S_ISFIFO(m) (((m)&S_IFMT) == S_IFIFO) /* fifo - named pipe */ #endif #if defined (S_IFLNK) && !defined (S_ISLNK) #define S_ISLNK(m) (((m)&S_IFMT) == S_IFLNK) /* symbolic link */ #endif #if defined (S_IFSOCK) && !defined (S_ISSOCK) #define S_ISSOCK(m) (((m)&S_IFMT) == S_IFSOCK) /* socket */ #endif /* * POSIX 1003.1 5.6.1.2 File Modes */ #if !defined (S_IRWXU) # if !defined (S_IREAD) # define S_IREAD 00400 # define S_IWRITE 00200 # define S_IEXEC 00100 # endif /* S_IREAD */ # if !defined (S_IRUSR) # define S_IRUSR S_IREAD /* read, owner */ # define S_IWUSR S_IWRITE /* write, owner */ # define S_IXUSR S_IEXEC /* execute, owner */ # define S_IRGRP (S_IREAD >> 3) /* read, group */ # define S_IWGRP (S_IWRITE >> 3) /* write, group */ # define S_IXGRP (S_IEXEC >> 3) /* execute, group */ # define S_IROTH (S_IREAD >> 6) /* read, other */ # define S_IWOTH (S_IWRITE >> 6) /* write, other */ # define S_IXOTH (S_IEXEC >> 6) /* execute, other */ # endif /* !S_IRUSR */ # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* !S_IRWXU */ /* These are non-standard, but are used in builtins.c$symbolic_umask() */ #define S_IRUGO (S_IRUSR | S_IRGRP | S_IROTH) #define S_IWUGO (S_IWUSR | S_IWGRP | S_IWOTH) #define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif /* _POSIXSTAT_H_ */ readline-7.0/readline.h000664 000436 000120 00000114025 12742763712 015162 0ustar00chetadmin000000 000000 /* Readline.h -- the names of functions callable from within readline. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_READLINE_H_) #define _READLINE_H_ #ifdef __cplusplus extern "C" { #endif #if defined (READLINE_LIBRARY) # include "rlstdc.h" # include "rltypedefs.h" # include "keymaps.h" # include "tilde.h" #else # include # include # include # include #endif /* Hex-encoded Readline version number. */ #define RL_READLINE_VERSION 0x0700 /* Readline 7.0 */ #define RL_VERSION_MAJOR 7 #define RL_VERSION_MINOR 0 /* Readline data structures. */ /* Maintaining the state of undo. We remember individual deletes and inserts on a chain of things to do. */ /* The actions that undo knows how to undo. Notice that UNDO_DELETE means to insert some text, and UNDO_INSERT means to delete some text. I.e., the code tells undo what to undo, not how to undo it. */ enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; /* What an element of THE_UNDO_LIST looks like. */ typedef struct undo_list { struct undo_list *next; int start, end; /* Where the change took place. */ char *text; /* The text to insert, if undoing a delete. */ enum undo_code what; /* Delete, Insert, Begin, End. */ } UNDO_LIST; /* The current undo list for RL_LINE_BUFFER. */ extern UNDO_LIST *rl_undo_list; /* The data structure for mapping textual names to code addresses. */ typedef struct _funmap { const char *name; rl_command_func_t *function; } FUNMAP; extern FUNMAP **funmap; /* **************************************************************** */ /* */ /* Functions available to bind to key sequences */ /* */ /* **************************************************************** */ /* Bindable commands for numeric arguments. */ extern int rl_digit_argument PARAMS((int, int)); extern int rl_universal_argument PARAMS((int, int)); /* Bindable commands for moving the cursor. */ extern int rl_forward_byte PARAMS((int, int)); extern int rl_forward_char PARAMS((int, int)); extern int rl_forward PARAMS((int, int)); extern int rl_backward_byte PARAMS((int, int)); extern int rl_backward_char PARAMS((int, int)); extern int rl_backward PARAMS((int, int)); extern int rl_beg_of_line PARAMS((int, int)); extern int rl_end_of_line PARAMS((int, int)); extern int rl_forward_word PARAMS((int, int)); extern int rl_backward_word PARAMS((int, int)); extern int rl_refresh_line PARAMS((int, int)); extern int rl_clear_screen PARAMS((int, int)); extern int rl_skip_csi_sequence PARAMS((int, int)); extern int rl_arrow_keys PARAMS((int, int)); /* Bindable commands for inserting and deleting text. */ extern int rl_insert PARAMS((int, int)); extern int rl_quoted_insert PARAMS((int, int)); extern int rl_tab_insert PARAMS((int, int)); extern int rl_newline PARAMS((int, int)); extern int rl_do_lowercase_version PARAMS((int, int)); extern int rl_rubout PARAMS((int, int)); extern int rl_delete PARAMS((int, int)); extern int rl_rubout_or_delete PARAMS((int, int)); extern int rl_delete_horizontal_space PARAMS((int, int)); extern int rl_delete_or_show_completions PARAMS((int, int)); extern int rl_insert_comment PARAMS((int, int)); /* Bindable commands for changing case. */ extern int rl_upcase_word PARAMS((int, int)); extern int rl_downcase_word PARAMS((int, int)); extern int rl_capitalize_word PARAMS((int, int)); /* Bindable commands for transposing characters and words. */ extern int rl_transpose_words PARAMS((int, int)); extern int rl_transpose_chars PARAMS((int, int)); /* Bindable commands for searching within a line. */ extern int rl_char_search PARAMS((int, int)); extern int rl_backward_char_search PARAMS((int, int)); /* Bindable commands for readline's interface to the command history. */ extern int rl_beginning_of_history PARAMS((int, int)); extern int rl_end_of_history PARAMS((int, int)); extern int rl_get_next_history PARAMS((int, int)); extern int rl_get_previous_history PARAMS((int, int)); /* Bindable commands for managing the mark and region. */ extern int rl_set_mark PARAMS((int, int)); extern int rl_exchange_point_and_mark PARAMS((int, int)); /* Bindable commands to set the editing mode (emacs or vi). */ extern int rl_vi_editing_mode PARAMS((int, int)); extern int rl_emacs_editing_mode PARAMS((int, int)); /* Bindable commands to change the insert mode (insert or overwrite) */ extern int rl_overwrite_mode PARAMS((int, int)); /* Bindable commands for managing key bindings. */ extern int rl_re_read_init_file PARAMS((int, int)); extern int rl_dump_functions PARAMS((int, int)); extern int rl_dump_macros PARAMS((int, int)); extern int rl_dump_variables PARAMS((int, int)); /* Bindable commands for word completion. */ extern int rl_complete PARAMS((int, int)); extern int rl_possible_completions PARAMS((int, int)); extern int rl_insert_completions PARAMS((int, int)); extern int rl_old_menu_complete PARAMS((int, int)); extern int rl_menu_complete PARAMS((int, int)); extern int rl_backward_menu_complete PARAMS((int, int)); /* Bindable commands for killing and yanking text, and managing the kill ring. */ extern int rl_kill_word PARAMS((int, int)); extern int rl_backward_kill_word PARAMS((int, int)); extern int rl_kill_line PARAMS((int, int)); extern int rl_backward_kill_line PARAMS((int, int)); extern int rl_kill_full_line PARAMS((int, int)); extern int rl_unix_word_rubout PARAMS((int, int)); extern int rl_unix_filename_rubout PARAMS((int, int)); extern int rl_unix_line_discard PARAMS((int, int)); extern int rl_copy_region_to_kill PARAMS((int, int)); extern int rl_kill_region PARAMS((int, int)); extern int rl_copy_forward_word PARAMS((int, int)); extern int rl_copy_backward_word PARAMS((int, int)); extern int rl_yank PARAMS((int, int)); extern int rl_yank_pop PARAMS((int, int)); extern int rl_yank_nth_arg PARAMS((int, int)); extern int rl_yank_last_arg PARAMS((int, int)); extern int rl_bracketed_paste_begin PARAMS((int, int)); /* Not available unless _WIN32 is defined. */ #if defined (_WIN32) extern int rl_paste_from_clipboard PARAMS((int, int)); #endif /* Bindable commands for incremental searching. */ extern int rl_reverse_search_history PARAMS((int, int)); extern int rl_forward_search_history PARAMS((int, int)); /* Bindable keyboard macro commands. */ extern int rl_start_kbd_macro PARAMS((int, int)); extern int rl_end_kbd_macro PARAMS((int, int)); extern int rl_call_last_kbd_macro PARAMS((int, int)); extern int rl_print_last_kbd_macro PARAMS((int, int)); /* Bindable undo commands. */ extern int rl_revert_line PARAMS((int, int)); extern int rl_undo_command PARAMS((int, int)); /* Bindable tilde expansion commands. */ extern int rl_tilde_expand PARAMS((int, int)); /* Bindable terminal control commands. */ extern int rl_restart_output PARAMS((int, int)); extern int rl_stop_output PARAMS((int, int)); /* Miscellaneous bindable commands. */ extern int rl_abort PARAMS((int, int)); extern int rl_tty_status PARAMS((int, int)); /* Bindable commands for incremental and non-incremental history searching. */ extern int rl_history_search_forward PARAMS((int, int)); extern int rl_history_search_backward PARAMS((int, int)); extern int rl_history_substr_search_forward PARAMS((int, int)); extern int rl_history_substr_search_backward PARAMS((int, int)); extern int rl_noninc_forward_search PARAMS((int, int)); extern int rl_noninc_reverse_search PARAMS((int, int)); extern int rl_noninc_forward_search_again PARAMS((int, int)); extern int rl_noninc_reverse_search_again PARAMS((int, int)); /* Bindable command used when inserting a matching close character. */ extern int rl_insert_close PARAMS((int, int)); /* Not available unless READLINE_CALLBACKS is defined. */ extern void rl_callback_handler_install PARAMS((const char *, rl_vcpfunc_t *)); extern void rl_callback_read_char PARAMS((void)); extern void rl_callback_handler_remove PARAMS((void)); extern void rl_callback_sigcleanup PARAMS((void)); /* Things for vi mode. Not available unless readline is compiled -DVI_MODE. */ /* VI-mode bindable commands. */ extern int rl_vi_redo PARAMS((int, int)); extern int rl_vi_undo PARAMS((int, int)); extern int rl_vi_yank_arg PARAMS((int, int)); extern int rl_vi_fetch_history PARAMS((int, int)); extern int rl_vi_search_again PARAMS((int, int)); extern int rl_vi_search PARAMS((int, int)); extern int rl_vi_complete PARAMS((int, int)); extern int rl_vi_tilde_expand PARAMS((int, int)); extern int rl_vi_prev_word PARAMS((int, int)); extern int rl_vi_next_word PARAMS((int, int)); extern int rl_vi_end_word PARAMS((int, int)); extern int rl_vi_insert_beg PARAMS((int, int)); extern int rl_vi_append_mode PARAMS((int, int)); extern int rl_vi_append_eol PARAMS((int, int)); extern int rl_vi_eof_maybe PARAMS((int, int)); extern int rl_vi_insertion_mode PARAMS((int, int)); extern int rl_vi_insert_mode PARAMS((int, int)); extern int rl_vi_movement_mode PARAMS((int, int)); extern int rl_vi_arg_digit PARAMS((int, int)); extern int rl_vi_change_case PARAMS((int, int)); extern int rl_vi_put PARAMS((int, int)); extern int rl_vi_column PARAMS((int, int)); extern int rl_vi_delete_to PARAMS((int, int)); extern int rl_vi_change_to PARAMS((int, int)); extern int rl_vi_yank_to PARAMS((int, int)); extern int rl_vi_yank_pop PARAMS((int, int)); extern int rl_vi_rubout PARAMS((int, int)); extern int rl_vi_delete PARAMS((int, int)); extern int rl_vi_back_to_indent PARAMS((int, int)); extern int rl_vi_unix_word_rubout PARAMS((int, int)); extern int rl_vi_first_print PARAMS((int, int)); extern int rl_vi_char_search PARAMS((int, int)); extern int rl_vi_match PARAMS((int, int)); extern int rl_vi_change_char PARAMS((int, int)); extern int rl_vi_subst PARAMS((int, int)); extern int rl_vi_overstrike PARAMS((int, int)); extern int rl_vi_overstrike_delete PARAMS((int, int)); extern int rl_vi_replace PARAMS((int, int)); extern int rl_vi_set_mark PARAMS((int, int)); extern int rl_vi_goto_mark PARAMS((int, int)); /* VI-mode utility functions. */ extern int rl_vi_check PARAMS((void)); extern int rl_vi_domove PARAMS((int, int *)); extern int rl_vi_bracktype PARAMS((int)); extern void rl_vi_start_inserting PARAMS((int, int, int)); /* VI-mode pseudo-bindable commands, used as utility functions. */ extern int rl_vi_fWord PARAMS((int, int)); extern int rl_vi_bWord PARAMS((int, int)); extern int rl_vi_eWord PARAMS((int, int)); extern int rl_vi_fword PARAMS((int, int)); extern int rl_vi_bword PARAMS((int, int)); extern int rl_vi_eword PARAMS((int, int)); /* **************************************************************** */ /* */ /* Well Published Functions */ /* */ /* **************************************************************** */ /* Readline functions. */ /* Read a line of input. Prompt with PROMPT. A NULL PROMPT means none. */ extern char *readline PARAMS((const char *)); extern int rl_set_prompt PARAMS((const char *)); extern int rl_expand_prompt PARAMS((char *)); extern int rl_initialize PARAMS((void)); /* Undocumented; unused by readline */ extern int rl_discard_argument PARAMS((void)); /* Utility functions to bind keys to readline commands. */ extern int rl_add_defun PARAMS((const char *, rl_command_func_t *, int)); extern int rl_bind_key PARAMS((int, rl_command_func_t *)); extern int rl_bind_key_in_map PARAMS((int, rl_command_func_t *, Keymap)); extern int rl_unbind_key PARAMS((int)); extern int rl_unbind_key_in_map PARAMS((int, Keymap)); extern int rl_bind_key_if_unbound PARAMS((int, rl_command_func_t *)); extern int rl_bind_key_if_unbound_in_map PARAMS((int, rl_command_func_t *, Keymap)); extern int rl_unbind_function_in_map PARAMS((rl_command_func_t *, Keymap)); extern int rl_unbind_command_in_map PARAMS((const char *, Keymap)); extern int rl_bind_keyseq PARAMS((const char *, rl_command_func_t *)); extern int rl_bind_keyseq_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); extern int rl_bind_keyseq_if_unbound PARAMS((const char *, rl_command_func_t *)); extern int rl_bind_keyseq_if_unbound_in_map PARAMS((const char *, rl_command_func_t *, Keymap)); extern int rl_generic_bind PARAMS((int, const char *, char *, Keymap)); extern char *rl_variable_value PARAMS((const char *)); extern int rl_variable_bind PARAMS((const char *, const char *)); /* Backwards compatibility, use rl_bind_keyseq_in_map instead. */ extern int rl_set_key PARAMS((const char *, rl_command_func_t *, Keymap)); /* Backwards compatibility, use rl_generic_bind instead. */ extern int rl_macro_bind PARAMS((const char *, const char *, Keymap)); /* Undocumented in the texinfo manual; not really useful to programs. */ extern int rl_translate_keyseq PARAMS((const char *, char *, int *)); extern char *rl_untranslate_keyseq PARAMS((int)); extern rl_command_func_t *rl_named_function PARAMS((const char *)); extern rl_command_func_t *rl_function_of_keyseq PARAMS((const char *, Keymap, int *)); extern void rl_list_funmap_names PARAMS((void)); extern char **rl_invoking_keyseqs_in_map PARAMS((rl_command_func_t *, Keymap)); extern char **rl_invoking_keyseqs PARAMS((rl_command_func_t *)); extern void rl_function_dumper PARAMS((int)); extern void rl_macro_dumper PARAMS((int)); extern void rl_variable_dumper PARAMS((int)); extern int rl_read_init_file PARAMS((const char *)); extern int rl_parse_and_bind PARAMS((char *)); /* Functions for manipulating keymaps. */ extern Keymap rl_make_bare_keymap PARAMS((void)); extern Keymap rl_copy_keymap PARAMS((Keymap)); extern Keymap rl_make_keymap PARAMS((void)); extern void rl_discard_keymap PARAMS((Keymap)); extern void rl_free_keymap PARAMS((Keymap)); extern Keymap rl_get_keymap_by_name PARAMS((const char *)); extern char *rl_get_keymap_name PARAMS((Keymap)); extern void rl_set_keymap PARAMS((Keymap)); extern Keymap rl_get_keymap PARAMS((void)); /* Undocumented; used internally only. */ extern void rl_set_keymap_from_edit_mode PARAMS((void)); extern char *rl_get_keymap_name_from_edit_mode PARAMS((void)); /* Functions for manipulating the funmap, which maps command names to functions. */ extern int rl_add_funmap_entry PARAMS((const char *, rl_command_func_t *)); extern const char **rl_funmap_names PARAMS((void)); /* Undocumented, only used internally -- there is only one funmap, and this function may be called only once. */ extern void rl_initialize_funmap PARAMS((void)); /* Utility functions for managing keyboard macros. */ extern void rl_push_macro_input PARAMS((char *)); /* Functions for undoing, from undo.c */ extern void rl_add_undo PARAMS((enum undo_code, int, int, char *)); extern void rl_free_undo_list PARAMS((void)); extern int rl_do_undo PARAMS((void)); extern int rl_begin_undo_group PARAMS((void)); extern int rl_end_undo_group PARAMS((void)); extern int rl_modifying PARAMS((int, int)); /* Functions for redisplay. */ extern void rl_redisplay PARAMS((void)); extern int rl_on_new_line PARAMS((void)); extern int rl_on_new_line_with_prompt PARAMS((void)); extern int rl_forced_update_display PARAMS((void)); extern int rl_clear_visible_line PARAMS((void)); extern int rl_clear_message PARAMS((void)); extern int rl_reset_line_state PARAMS((void)); extern int rl_crlf PARAMS((void)); #if defined (USE_VARARGS) && defined (PREFER_STDARG) extern int rl_message (const char *, ...) __attribute__((__format__ (printf, 1, 2))); #else extern int rl_message (); #endif extern int rl_show_char PARAMS((int)); /* Undocumented in texinfo manual. */ extern int rl_character_len PARAMS((int, int)); extern void rl_redraw_prompt_last_line PARAMS((void)); /* Save and restore internal prompt redisplay information. */ extern void rl_save_prompt PARAMS((void)); extern void rl_restore_prompt PARAMS((void)); /* Modifying text. */ extern void rl_replace_line PARAMS((const char *, int)); extern int rl_insert_text PARAMS((const char *)); extern int rl_delete_text PARAMS((int, int)); extern int rl_kill_text PARAMS((int, int)); extern char *rl_copy_text PARAMS((int, int)); /* Terminal and tty mode management. */ extern void rl_prep_terminal PARAMS((int)); extern void rl_deprep_terminal PARAMS((void)); extern void rl_tty_set_default_bindings PARAMS((Keymap)); extern void rl_tty_unset_default_bindings PARAMS((Keymap)); extern int rl_reset_terminal PARAMS((const char *)); extern void rl_resize_terminal PARAMS((void)); extern void rl_set_screen_size PARAMS((int, int)); extern void rl_get_screen_size PARAMS((int *, int *)); extern void rl_reset_screen_size PARAMS((void)); extern char *rl_get_termcap PARAMS((const char *)); /* Functions for character input. */ extern int rl_stuff_char PARAMS((int)); extern int rl_execute_next PARAMS((int)); extern int rl_clear_pending_input PARAMS((void)); extern int rl_read_key PARAMS((void)); extern int rl_getc PARAMS((FILE *)); extern int rl_set_keyboard_input_timeout PARAMS((int)); /* `Public' utility functions . */ extern void rl_extend_line_buffer PARAMS((int)); extern int rl_ding PARAMS((void)); extern int rl_alphabetic PARAMS((int)); extern void rl_free PARAMS((void *)); /* Readline signal handling, from signals.c */ extern int rl_set_signals PARAMS((void)); extern int rl_clear_signals PARAMS((void)); extern void rl_cleanup_after_signal PARAMS((void)); extern void rl_reset_after_signal PARAMS((void)); extern void rl_free_line_state PARAMS((void)); extern int rl_pending_signal PARAMS((void)); extern void rl_echo_signal_char PARAMS((int)); extern int rl_set_paren_blink_timeout PARAMS((int)); /* History management functions. */ extern void rl_clear_history PARAMS((void)); /* Undocumented. */ extern int rl_maybe_save_line PARAMS((void)); extern int rl_maybe_unsave_line PARAMS((void)); extern int rl_maybe_replace_line PARAMS((void)); /* Completion functions. */ extern int rl_complete_internal PARAMS((int)); extern void rl_display_match_list PARAMS((char **, int, int)); extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); extern char *rl_username_completion_function PARAMS((const char *, int)); extern char *rl_filename_completion_function PARAMS((const char *, int)); extern int rl_completion_mode PARAMS((rl_command_func_t *)); #if 0 /* Backwards compatibility (compat.c). These will go away sometime. */ extern void free_undo_list PARAMS((void)); extern int maybe_save_line PARAMS((void)); extern int maybe_unsave_line PARAMS((void)); extern int maybe_replace_line PARAMS((void)); extern int ding PARAMS((void)); extern int alphabetic PARAMS((int)); extern int crlf PARAMS((void)); extern char **completion_matches PARAMS((char *, rl_compentry_func_t *)); extern char *username_completion_function PARAMS((const char *, int)); extern char *filename_completion_function PARAMS((const char *, int)); #endif /* **************************************************************** */ /* */ /* Well Published Variables */ /* */ /* **************************************************************** */ /* The version of this incarnation of the readline library. */ extern const char *rl_library_version; /* e.g., "4.2" */ extern int rl_readline_version; /* e.g., 0x0402 */ /* True if this is real GNU readline. */ extern int rl_gnu_readline_p; /* Flags word encapsulating the current readline state. */ extern unsigned long rl_readline_state; /* Says which editing mode readline is currently using. 1 means emacs mode; 0 means vi mode. */ extern int rl_editing_mode; /* Insert or overwrite mode for emacs mode. 1 means insert mode; 0 means overwrite mode. Reset to insert mode on each input line. */ extern int rl_insert_mode; /* The name of the calling program. You should initialize this to whatever was in argv[0]. It is used when parsing conditionals. */ extern const char *rl_readline_name; /* The prompt readline uses. This is set from the argument to readline (), and should not be assigned to directly. */ extern char *rl_prompt; /* The prompt string that is actually displayed by rl_redisplay. Public so applications can more easily supply their own redisplay functions. */ extern char *rl_display_prompt; /* The line buffer that is in use. */ extern char *rl_line_buffer; /* The location of point, and end. */ extern int rl_point; extern int rl_end; /* The mark, or saved cursor position. */ extern int rl_mark; /* Flag to indicate that readline has finished with the current input line and should return it. */ extern int rl_done; /* If set to a character value, that will be the next keystroke read. */ extern int rl_pending_input; /* Non-zero if we called this function from _rl_dispatch(). It's present so functions can find out whether they were called from a key binding or directly from an application. */ extern int rl_dispatching; /* Non-zero if the user typed a numeric argument before executing the current function. */ extern int rl_explicit_arg; /* The current value of the numeric argument specified by the user. */ extern int rl_numeric_arg; /* The address of the last command function Readline executed. */ extern rl_command_func_t *rl_last_func; /* The name of the terminal to use. */ extern const char *rl_terminal_name; /* The input and output streams. */ extern FILE *rl_instream; extern FILE *rl_outstream; /* If non-zero, Readline gives values of LINES and COLUMNS from the environment greater precedence than values fetched from the kernel when computing the screen dimensions. */ extern int rl_prefer_env_winsize; /* If non-zero, then this is the address of a function to call just before readline_internal () prints the first prompt. */ extern rl_hook_func_t *rl_startup_hook; /* If non-zero, this is the address of a function to call just before readline_internal_setup () returns and readline_internal starts reading input characters. */ extern rl_hook_func_t *rl_pre_input_hook; /* The address of a function to call periodically while Readline is awaiting character input, or NULL, for no event handling. */ extern rl_hook_func_t *rl_event_hook; /* The address of a function to call if a read is interrupted by a signal. */ extern rl_hook_func_t *rl_signal_event_hook; /* The address of a function to call if Readline needs to know whether or not there is data available from the current input source. */ extern rl_hook_func_t *rl_input_available_hook; /* The address of the function to call to fetch a character from the current Readline input stream */ extern rl_getc_func_t *rl_getc_function; extern rl_voidfunc_t *rl_redisplay_function; extern rl_vintfunc_t *rl_prep_term_function; extern rl_voidfunc_t *rl_deprep_term_function; /* Dispatch variables. */ extern Keymap rl_executing_keymap; extern Keymap rl_binding_keymap; extern int rl_executing_key; extern char *rl_executing_keyseq; extern int rl_key_sequence_length; /* Display variables. */ /* If non-zero, readline will erase the entire line, including any prompt, if the only thing typed on an otherwise-blank line is something bound to rl_newline. */ extern int rl_erase_empty_line; /* If non-zero, the application has already printed the prompt (rl_prompt) before calling readline, so readline should not output it the first time redisplay is done. */ extern int rl_already_prompted; /* A non-zero value means to read only this many characters rather than up to a character bound to accept-line. */ extern int rl_num_chars_to_read; /* The text of a currently-executing keyboard macro. */ extern char *rl_executing_macro; /* Variables to control readline signal handling. */ /* If non-zero, readline will install its own signal handlers for SIGINT, SIGTERM, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ extern int rl_catch_signals; /* If non-zero, readline will install a signal handler for SIGWINCH that also attempts to call any calling application's SIGWINCH signal handler. Note that the terminal is not cleaned up before the application's signal handler is called; use rl_cleanup_after_signal() to do that. */ extern int rl_catch_sigwinch; /* If non-zero, the readline SIGWINCH handler will modify LINES and COLUMNS in the environment. */ extern int rl_change_environment; /* Completion variables. */ /* Pointer to the generator function for completion_matches (). NULL means to use rl_filename_completion_function (), the default filename completer. */ extern rl_compentry_func_t *rl_completion_entry_function; /* Optional generator for menu completion. Default is rl_completion_entry_function (rl_filename_completion_function). */ extern rl_compentry_func_t *rl_menu_completion_entry_function; /* If rl_ignore_some_completions_function is non-NULL it is the address of a function to call after all of the possible matches have been generated, but before the actual completion is done to the input line. The function is called with one argument; a NULL terminated array of (char *). If your function removes any of the elements, they must be free()'ed. */ extern rl_compignore_func_t *rl_ignore_some_completions_function; /* Pointer to alternative function to create matches. Function is called with TEXT, START, and END. START and END are indices in RL_LINE_BUFFER saying what the boundaries of TEXT are. If this function exists and returns NULL then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ extern rl_completion_func_t *rl_attempted_completion_function; /* The basic list of characters that signal a break between words for the completer routine. The initial contents of this variable is what breaks words in the shell, i.e. "n\"\\'`@$>". */ extern const char *rl_basic_word_break_characters; /* The list of characters that signal a break between words for rl_complete_internal. The default list is the contents of rl_basic_word_break_characters. */ extern /*const*/ char *rl_completer_word_break_characters; /* Hook function to allow an application to set the completion word break characters before readline breaks up the line. Allows position-dependent word break characters. */ extern rl_cpvfunc_t *rl_completion_word_break_hook; /* List of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring rl_completer_word_break_characters are treated as any other character, unless they also appear within this list. */ extern const char *rl_completer_quote_characters; /* List of quote characters which cause a word break. */ extern const char *rl_basic_quote_characters; /* List of characters that need to be quoted in filenames by the completer. */ extern const char *rl_filename_quote_characters; /* List of characters that are word break characters, but should be left in TEXT when it is passed to the completion function. The shell uses this to help determine what kind of completing to do. */ extern const char *rl_special_prefixes; /* If non-zero, then this is the address of a function to call when completing on a directory name. The function is called with the address of a string (the current directory name) as an arg. It changes what is displayed when the possible completions are printed or inserted. The directory completion hook should perform any necessary dequoting. This function should return 1 if it modifies the directory name pointer passed as an argument. If the directory completion hook returns 0, it should not modify the directory name pointer passed as an argument. */ extern rl_icppfunc_t *rl_directory_completion_hook; /* If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike rl_directory_completion_hook, it only modifies the directory name used in opendir(2), not what is displayed when the possible completions are printed or inserted. If set, it takes precedence over rl_directory_completion_hook. The directory rewrite hook should perform any necessary dequoting. This function has the same return value properties as the directory_completion_hook. I'm not happy with how this works yet, so it's undocumented. I'm trying it in bash to see how well it goes. */ extern rl_icppfunc_t *rl_directory_rewrite_hook; /* If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. It should modify the directory name passed as an argument if appropriate, and return non-zero if it modifies the name. This should not worry about dequoting the filename; that has already happened by the time it gets here. */ extern rl_icppfunc_t *rl_filename_stat_hook; /* If non-zero, this is the address of a function to call when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should either return its first argument (if no conversion takes place) or newly-allocated memory. This can, for instance, convert filenames between character sets for comparison against what's typed at the keyboard. The returned value is what is added to the list of matches. The second argument is the length of the filename to be converted. */ extern rl_dequote_func_t *rl_filename_rewrite_hook; /* Backwards compatibility with previous versions of readline. */ #define rl_symbolic_link_hook rl_directory_completion_hook /* If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called instead of actually doing the display. It takes three arguments: (char **matches, int num_matches, int max_length) where MATCHES is the array of strings that matched, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. */ extern rl_compdisp_func_t *rl_completion_display_matches_hook; /* Non-zero means that the results of the matches are to be treated as filenames. This is ALWAYS zero on entry, and can only be changed within a completion entry finder function. */ extern int rl_filename_completion_desired; /* Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the filename contains any characters in rl_word_break_chars. This is ALWAYS non-zero on entry, and can only be changed within a completion entry finder function. */ extern int rl_filename_quoting_desired; /* Set to a function to quote a filename in an application-specific fashion. Called with the text to quote, the type of match found (single or multiple) and a pointer to the quoting character to be used, which the function can reset if desired. */ extern rl_quote_func_t *rl_filename_quoting_function; /* Function to call to remove quoting characters from a filename. Called before completion is attempted, so the embedded quotes do not interfere with matching names in the file system. */ extern rl_dequote_func_t *rl_filename_dequoting_function; /* Function to call to decide whether or not a word break character is quoted. If a character is quoted, it does not break words for the completer. */ extern rl_linebuf_func_t *rl_char_is_quoted_p; /* Non-zero means to suppress normal filename completion after the user-specified completion function has been called. */ extern int rl_attempted_completion_over; /* Set to a character describing the type of completion being attempted by rl_complete_internal; available for use by application completion functions. */ extern int rl_completion_type; /* Set to the last key used to invoke one of the completion functions */ extern int rl_completion_invoking_key; /* Up to this many items will be displayed in response to a possible-completions call. After that, we ask the user if she is sure she wants to see them all. The default value is 100. */ extern int rl_completion_query_items; /* Character appended to completed words when at the end of the line. The default is a space. Nothing is added if this is '\0'. */ extern int rl_completion_append_character; /* If set to non-zero by an application completion function, rl_completion_append_character will not be appended. */ extern int rl_completion_suppress_append; /* Set to any quote character readline thinks it finds before any application completion function is called. */ extern int rl_completion_quote_character; /* Set to a non-zero value if readline found quoting anywhere in the word to be completed; set before any application completion function is called. */ extern int rl_completion_found_quote; /* If non-zero, the completion functions don't append any closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ extern int rl_completion_suppress_quote; /* If non-zero, readline will sort the completion matches. On by default. */ extern int rl_sort_completion_matches; /* If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the mark-directories variable (which is user-settable). This exists so that application completion functions can override the user's preference (set via the mark-symlinked-directories variable) if appropriate. It's set to the value of _rl_complete_mark_symlink_dirs in rl_complete_internal before any application-specific completion function is called, so without that function doing anything, the user's preferences are honored. */ extern int rl_completion_mark_symlink_dirs; /* If non-zero, then disallow duplicates in the matches. */ extern int rl_ignore_completion_duplicates; /* If this is non-zero, completion is (temporarily) inhibited, and the completion character will be inserted as any other. */ extern int rl_inhibit_completion; /* Applications can set this to non-zero to have readline's signal handlers installed during the entire duration of reading a complete line, as in readline-6.2. This should be used with care, because it can result in readline receiving signals and not handling them until it's called again via rl_callback_read_char, thereby stealing them from the application. By default, signal handlers are only active while readline is active. */ extern int rl_persistent_signal_handlers; /* Input error; can be returned by (*rl_getc_function) if readline is reading a top-level command (RL_ISSTATE (RL_STATE_READCMD)). */ #define READERR (-2) /* Definitions available for use by readline clients. */ #define RL_PROMPT_START_IGNORE '\001' #define RL_PROMPT_END_IGNORE '\002' /* Possible values for do_replace argument to rl_filename_quoting_function, called by rl_complete_internal. */ #define NO_MATCH 0 #define SINGLE_MATCH 1 #define MULT_MATCH 2 /* Possible state values for rl_readline_state */ #define RL_STATE_NONE 0x000000 /* no state; before first call */ #define RL_STATE_INITIALIZING 0x0000001 /* initializing */ #define RL_STATE_INITIALIZED 0x0000002 /* initialization done */ #define RL_STATE_TERMPREPPED 0x0000004 /* terminal is prepped */ #define RL_STATE_READCMD 0x0000008 /* reading a command key */ #define RL_STATE_METANEXT 0x0000010 /* reading input after ESC */ #define RL_STATE_DISPATCHING 0x0000020 /* dispatching to a command */ #define RL_STATE_MOREINPUT 0x0000040 /* reading more input in a command function */ #define RL_STATE_ISEARCH 0x0000080 /* doing incremental search */ #define RL_STATE_NSEARCH 0x0000100 /* doing non-inc search */ #define RL_STATE_SEARCH 0x0000200 /* doing a history search */ #define RL_STATE_NUMERICARG 0x0000400 /* reading numeric argument */ #define RL_STATE_MACROINPUT 0x0000800 /* getting input from a macro */ #define RL_STATE_MACRODEF 0x0001000 /* defining keyboard macro */ #define RL_STATE_OVERWRITE 0x0002000 /* overwrite mode */ #define RL_STATE_COMPLETING 0x0004000 /* doing completion */ #define RL_STATE_SIGHANDLER 0x0008000 /* in readline sighandler */ #define RL_STATE_UNDOING 0x0010000 /* doing an undo */ #define RL_STATE_INPUTPENDING 0x0020000 /* rl_execute_next called */ #define RL_STATE_TTYCSAVED 0x0040000 /* tty special chars saved */ #define RL_STATE_CALLBACK 0x0080000 /* using the callback interface */ #define RL_STATE_VIMOTION 0x0100000 /* reading vi motion arg */ #define RL_STATE_MULTIKEY 0x0200000 /* reading multiple-key command */ #define RL_STATE_VICMDONCE 0x0400000 /* entered vi command mode at least once */ #define RL_STATE_CHARSEARCH 0x0800000 /* vi mode char search */ #define RL_STATE_REDISPLAYING 0x1000000 /* updating terminal display */ #define RL_STATE_DONE 0x2000000 /* done; accepted line */ #define RL_SETSTATE(x) (rl_readline_state |= (x)) #define RL_UNSETSTATE(x) (rl_readline_state &= ~(x)) #define RL_ISSTATE(x) (rl_readline_state & (x)) struct readline_state { /* line state */ int point; int end; int mark; int buflen; char *buffer; UNDO_LIST *ul; char *prompt; /* global state */ int rlstate; int done; Keymap kmap; /* input state */ rl_command_func_t *lastfunc; int insmode; int edmode; char *kseq; int kseqlen; int pendingin; FILE *inf; FILE *outf; char *macro; /* signal state */ int catchsigs; int catchsigwinch; /* search state */ /* completion state */ rl_compentry_func_t *entryfunc; rl_compentry_func_t *menuentryfunc; rl_compignore_func_t *ignorefunc; rl_completion_func_t *attemptfunc; char *wordbreakchars; /* options state */ /* hook state */ /* reserved for future expansion, so the struct size doesn't change */ char reserved[64]; }; extern int rl_save_state PARAMS((struct readline_state *)); extern int rl_restore_state PARAMS((struct readline_state *)); #ifdef __cplusplus } #endif #endif /* _READLINE_H_ */ readline-7.0/rlconf.h000664 000436 000024 00000005416 12651440304 014667 0ustar00chetstaff000000 000000 /* rlconf.h -- readline configuration definitions */ /* Copyright (C) 1992-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RLCONF_H_) #define _RLCONF_H_ /* Define this if you want the vi-mode editing available. */ #define VI_MODE /* Define this to get an indication of file type when listing completions. */ #define VISIBLE_STATS /* Define this to get support for colors when listing completions and in other places. */ #define COLOR_SUPPORT /* This definition is needed by readline.c, rltty.c, and signals.c. */ /* If on, then readline handles signals in a way that doesn't suck. */ #define HANDLE_SIGNALS /* Ugly but working hack for binding prefix meta. */ #define PREFIX_META_HACK /* The next-to-last-ditch effort file name for a user-specific init file. */ #define DEFAULT_INPUTRC "~/.inputrc" /* The ultimate last-ditch filenname for an init file -- system-wide. */ #define SYS_INPUTRC "/etc/inputrc" /* If defined, expand tabs to spaces. */ #define DISPLAY_TABS /* If defined, use the terminal escape sequence to move the cursor forward over a character when updating the line rather than rewriting it. */ /* #define HACK_TERMCAP_MOTION */ /* The string inserted by the `insert comment' command. */ #define RL_COMMENT_BEGIN_DEFAULT "#" /* Define this if you want code that allows readline to be used in an X `callback' style. */ #define READLINE_CALLBACKS /* Define this if you want the cursor to indicate insert or overwrite mode. */ /* #define CURSOR_MODE */ /* Define this if you want to enable code that talks to the Linux kernel tty auditing system. */ /* #define ENABLE_TTY_AUDIT_SUPPORT */ /* Defaults for the various editing mode indicators, inserted at the beginning of the last (maybe only) line of the prompt if show-mode-in-prompt is on */ #define RL_EMACS_MODESTR_DEFAULT "@" #define RL_EMACS_MODESTR_DEFLEN 1 #define RL_VI_INS_MODESTR_DEFAULT "(ins)" #define RL_VI_INS_MODESTR_DEFLEN 5 #define RL_VI_CMD_MODESTR_DEFAULT "(cmd)" #define RL_VI_CMD_MODESTR_DEFLEN 5 #endif /* _RLCONF_H_ */ readline-7.0/rldefs.h000664 000436 000024 00000011404 12211146044 014651 0ustar00chetstaff000000 000000 /* rldefs.h -- an attempt to isolate some of the system-specific defines for readline. This should be included after any files that define system-specific constants like _POSIX_VERSION or USG. */ /* Copyright (C) 1987-2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RLDEFS_H_) #define _RLDEFS_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif #include "rlstdc.h" #if defined (STRCOLL_BROKEN) # undef HAVE_STRCOLL #endif #if defined (_POSIX_VERSION) && !defined (TERMIOS_MISSING) # define TERMIOS_TTY_DRIVER #else # if defined (HAVE_TERMIO_H) # define TERMIO_TTY_DRIVER # else # if !defined (__MINGW32__) # define NEW_TTY_DRIVER # else # define NO_TTY_DRIVER # endif # endif #endif /* Posix macro to check file in statbuf for directory-ness. This requires that be included before this test. */ #if defined (S_IFDIR) && !defined (S_ISDIR) # define S_ISDIR(m) (((m)&S_IFMT) == S_IFDIR) #endif /* Decide which flavor of the header file describing the C library string functions to include and include it. */ #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ #if defined (PREFER_STDARG) # include #else # if defined (PREFER_VARARGS) # include # endif #endif #if defined (HAVE_STRCASECMP) #define _rl_stricmp strcasecmp #define _rl_strnicmp strncasecmp #else extern int _rl_stricmp PARAMS((const char *, const char *)); extern int _rl_strnicmp PARAMS((const char *, const char *, int)); #endif #if defined (HAVE_STRPBRK) && !defined (HAVE_MULTIBYTE) # define _rl_strpbrk(a,b) strpbrk((a),(b)) #else extern char *_rl_strpbrk PARAMS((const char *, const char *)); #endif #if !defined (emacs_mode) # define no_mode -1 # define vi_mode 0 # define emacs_mode 1 #endif #if !defined (RL_IM_INSERT) # define RL_IM_INSERT 1 # define RL_IM_OVERWRITE 0 # # define RL_IM_DEFAULT RL_IM_INSERT #endif /* If you cast map[key].function to type (Keymap) on a Cray, the compiler takes the value of map[key].function and divides it by 4 to convert between pointer types (pointers to functions and pointers to structs are different sizes). This is not what is wanted. */ #if defined (CRAY) # define FUNCTION_TO_KEYMAP(map, key) (Keymap)((int)map[key].function) # define KEYMAP_TO_FUNCTION(data) (rl_command_func_t *)((int)(data)) #else # define FUNCTION_TO_KEYMAP(map, key) (Keymap)(map[key].function) # define KEYMAP_TO_FUNCTION(data) (rl_command_func_t *)(data) #endif #ifndef savestring #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* Possible values for _rl_bell_preference. */ #define NO_BELL 0 #define AUDIBLE_BELL 1 #define VISIBLE_BELL 2 /* Definitions used when searching the line for characters. */ /* NOTE: it is necessary that opposite directions are inverses */ #define FTO 1 /* forward to */ #define BTO -1 /* backward to */ #define FFIND 2 /* forward find */ #define BFIND -2 /* backward find */ /* Possible values for the found_quote flags word used by the completion functions. It says what kind of (shell-like) quoting we found anywhere in the line. */ #define RL_QF_SINGLE_QUOTE 0x01 #define RL_QF_DOUBLE_QUOTE 0x02 #define RL_QF_BACKSLASH 0x04 #define RL_QF_OTHER_QUOTE 0x08 /* Default readline line buffer length. */ #define DEFAULT_BUFFER_SIZE 256 #if !defined (STREQ) #define STREQ(a, b) (((a)[0] == (b)[0]) && (strcmp ((a), (b)) == 0)) #define STREQN(a, b, n) (((n) == 0) ? (1) \ : ((a)[0] == (b)[0]) && (strncmp ((a), (b), (n)) == 0)) #endif #if !defined (RL_STRLEN) # define RL_STRLEN(s) (((s) && (s)[0]) ? ((s)[1] ? ((s)[2] ? strlen(s) : 2) : 1) : 0) #endif #if !defined (FREE) # define FREE(x) if (x) free (x) #endif #if !defined (SWAP) # define SWAP(s, e) do { int t; t = s; s = e; e = t; } while (0) #endif /* CONFIGURATION SECTION */ #include "rlconf.h" #endif /* !_RLDEFS_H_ */ readline-7.0/rlmbutil.h000644 000436 000024 00000015212 12651440313 015227 0ustar00chetstaff000000 000000 /* rlmbutil.h -- utility functions for multibyte characters. */ /* Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RL_MBUTIL_H_) #define _RL_MBUTIL_H_ #include "rlstdc.h" /************************************************/ /* check multibyte capability for I18N code */ /************************************************/ /* For platforms which support the ISO C amendement 1 functionality we support user defined character classes. */ /* Solaris 2.5 has a bug: must be included before . */ #if defined (HAVE_WCTYPE_H) && defined (HAVE_WCHAR_H) && defined (HAVE_LOCALE_H) # include # include # if defined (HAVE_ISWCTYPE) && \ defined (HAVE_ISWLOWER) && \ defined (HAVE_ISWUPPER) && \ defined (HAVE_MBSRTOWCS) && \ defined (HAVE_MBRTOWC) && \ defined (HAVE_MBRLEN) && \ defined (HAVE_TOWLOWER) && \ defined (HAVE_TOWUPPER) && \ defined (HAVE_WCHAR_T) && \ defined (HAVE_WCWIDTH) /* system is supposed to support XPG5 */ # define HANDLE_MULTIBYTE 1 # endif #endif /* If we don't want multibyte chars even on a system that supports them, let the configuring user turn multibyte support off. */ #if defined (NO_MULTIBYTE_SUPPORT) # undef HANDLE_MULTIBYTE #endif /* Some systems, like BeOS, have multibyte encodings but lack mbstate_t. */ #if HANDLE_MULTIBYTE && !defined (HAVE_MBSTATE_T) # define wcsrtombs(dest, src, len, ps) (wcsrtombs) (dest, src, len, 0) # define mbsrtowcs(dest, src, len, ps) (mbsrtowcs) (dest, src, len, 0) # define wcrtomb(s, wc, ps) (wcrtomb) (s, wc, 0) # define mbrtowc(pwc, s, n, ps) (mbrtowc) (pwc, s, n, 0) # define mbrlen(s, n, ps) (mbrlen) (s, n, 0) # define mbstate_t int #endif /* Make sure MB_LEN_MAX is at least 16 on systems that claim to be able to handle multibyte chars (some systems define MB_LEN_MAX as 1) */ #ifdef HANDLE_MULTIBYTE # include # if defined(MB_LEN_MAX) && (MB_LEN_MAX < 16) # undef MB_LEN_MAX # endif # if !defined (MB_LEN_MAX) # define MB_LEN_MAX 16 # endif #endif /************************************************/ /* end of multibyte capability checks for I18N */ /************************************************/ /* * Flags for _rl_find_prev_mbchar and _rl_find_next_mbchar: * * MB_FIND_ANY find any multibyte character * MB_FIND_NONZERO find a non-zero-width multibyte character */ #define MB_FIND_ANY 0x00 #define MB_FIND_NONZERO 0x01 extern int _rl_find_prev_mbchar PARAMS((char *, int, int)); extern int _rl_find_next_mbchar PARAMS((char *, int, int, int)); #ifdef HANDLE_MULTIBYTE extern int _rl_compare_chars PARAMS((char *, int, mbstate_t *, char *, int, mbstate_t *)); extern int _rl_get_char_len PARAMS((char *, mbstate_t *)); extern int _rl_adjust_point PARAMS((char *, int, mbstate_t *)); extern int _rl_read_mbchar PARAMS((char *, int)); extern int _rl_read_mbstring PARAMS((int, char *, int)); extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int)); extern wchar_t _rl_char_value PARAMS((char *, int)); extern int _rl_walphabetic PARAMS((wchar_t)); #define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc)) #define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc)) #define MB_NEXTCHAR(b,s,c,f) \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \ ? _rl_find_next_mbchar ((b), (s), (c), (f)) \ : ((s) + (c))) #define MB_PREVCHAR(b,s,f) \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \ ? _rl_find_prev_mbchar ((b), (s), (f)) \ : ((s) - 1)) #define MB_INVALIDCH(x) ((x) == (size_t)-1 || (x) == (size_t)-2) #define MB_NULLWCH(x) ((x) == 0) /* Try and shortcut the printable ascii characters to cut down the number of calls to a libc wcwidth() */ static inline int _rl_wcwidth (wc) wchar_t wc; { switch (wc) { case ' ': case '!': case '"': case '#': case '%': case '&': case '\'': case '(': case ')': case '*': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case ';': case '<': case '=': case '>': case '?': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case '[': case '\\': case ']': case '^': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': case '{': case '|': case '}': case '~': return 1; default: return wcwidth (wc); } } /* Unicode combining characters range from U+0300 to U+036F */ #define UNICODE_COMBINING_CHAR(x) ((x) >= 768 && (x) <= 879) #if defined (WCWIDTH_BROKEN) # define WCWIDTH(wc) ((_rl_utf8locale && UNICODE_COMBINING_CHAR(wc)) ? 0 : _rl_wcwidth(wc)) #else # define WCWIDTH(wc) _rl_wcwidth(wc) #endif #if defined (WCWIDTH_BROKEN) # define IS_COMBINING_CHAR(x) (WCWIDTH(x) == 0 && iswcntrl(x) == 0) #else # define IS_COMBINING_CHAR(x) (WCWIDTH(x) == 0) #endif #else /* !HANDLE_MULTIBYTE */ #undef MB_LEN_MAX #undef MB_CUR_MAX #define MB_LEN_MAX 1 #define MB_CUR_MAX 1 #define _rl_find_prev_mbchar(b, i, f) (((i) == 0) ? (i) : ((i) - 1)) #define _rl_find_next_mbchar(b, i1, i2, f) ((i1) + (i2)) #define _rl_char_value(buf,ind) ((buf)[(ind)]) #define _rl_walphabetic(c) (rl_alphabetic (c)) #define _rl_to_wupper(c) (_rl_to_upper (c)) #define _rl_to_wlower(c) (_rl_to_lower (c)) #define MB_NEXTCHAR(b,s,c,f) ((s) + (c)) #define MB_PREVCHAR(b,s,f) ((s) - 1) #define MB_INVALIDCH(x) (0) #define MB_NULLWCH(x) (0) #endif /* !HANDLE_MULTIBYTE */ extern int rl_byte_oriented; #endif /* _RL_MBUTIL_H_ */ readline-7.0/rlprivate.h000664 000436 000024 00000042273 12651440324 015420 0ustar00chetstaff000000 000000 /* rlprivate.h -- functions and variables global to the readline library, but not intended for use by applications. */ /* Copyright (C) 1999-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RL_PRIVATE_H_) #define _RL_PRIVATE_H_ #include "rlconf.h" /* for VISIBLE_STATS */ #include "rlstdc.h" #include "posixjmp.h" /* defines procenv_t */ /************************************************************************* * * * Convenience definitions * * * *************************************************************************/ #define EMACS_MODE() (rl_editing_mode == emacs_mode) #define VI_COMMAND_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) #define VI_INSERT_MODE() (rl_editing_mode == vi_mode && _rl_keymap == vi_insertion_keymap) #define RL_CHECK_SIGNALS() \ do { \ if (_rl_caught_signal) _rl_signal_handler (_rl_caught_signal); \ } while (0) #define RL_SIG_RECEIVED() (_rl_caught_signal != 0) #define RL_SIGINT_RECEIVED() (_rl_caught_signal == SIGINT) #define RL_SIGWINCH_RECEIVED() (_rl_caught_signal == SIGWINCH) #define CUSTOM_REDISPLAY_FUNC() (rl_redisplay_function != rl_redisplay) #define CUSTOM_INPUT_FUNC() (rl_getc_function != rl_getc) /************************************************************************* * * * Global structs undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /* search types */ #define RL_SEARCH_ISEARCH 0x01 /* incremental search */ #define RL_SEARCH_NSEARCH 0x02 /* non-incremental search */ #define RL_SEARCH_CSEARCH 0x04 /* intra-line char search */ /* search flags */ #define SF_REVERSE 0x01 #define SF_FOUND 0x02 #define SF_FAILED 0x04 #define SF_CHGKMAP 0x08 typedef struct __rl_search_context { int type; int sflags; char *search_string; int search_string_index; int search_string_size; char **lines; char *allocated_line; int hlen; int hindex; int save_point; int save_mark; int save_line; int last_found_line; char *prev_line_found; UNDO_LIST *save_undo_list; Keymap keymap; /* used when dispatching commands in search string */ Keymap okeymap; /* original keymap */ int history_pos; int direction; int prevc; int lastc; #if defined (HANDLE_MULTIBYTE) char mb[MB_LEN_MAX]; char pmb[MB_LEN_MAX]; #endif char *sline; int sline_len; int sline_index; char *search_terminators; } _rl_search_cxt; /* Callback data for reading numeric arguments */ #define NUM_SAWMINUS 0x01 #define NUM_SAWDIGITS 0x02 #define NUM_READONE 0x04 typedef int _rl_arg_cxt; /* A context for reading key sequences longer than a single character when using the callback interface. */ #define KSEQ_DISPATCHED 0x01 #define KSEQ_SUBSEQ 0x02 #define KSEQ_RECURSIVE 0x04 typedef struct __rl_keyseq_context { int flags; int subseq_arg; int subseq_retval; /* XXX */ int okey; Keymap dmap; Keymap oldmap; struct __rl_keyseq_context *ocxt; int childval; } _rl_keyseq_cxt; /* vi-mode commands that use result of motion command to define boundaries */ #define VIM_DELETE 0x01 #define VIM_CHANGE 0x02 #define VIM_YANK 0x04 /* various states for vi-mode commands that use motion commands. reflects RL_READLINE_STATE */ #define VMSTATE_READ 0x01 #define VMSTATE_NUMARG 0x02 typedef struct __rl_vimotion_context { int op; int state; int flags; /* reserved */ _rl_arg_cxt ncxt; int numeric_arg; int start, end; /* rl_point, rl_end */ int key, motion; /* initial key, motion command */ } _rl_vimotion_cxt; /* fill in more as needed */ /* `Generic' callback data and functions */ typedef struct __rl_callback_generic_arg { int count; int i1, i2; /* add here as needed */ } _rl_callback_generic_arg; typedef int _rl_callback_func_t PARAMS((_rl_callback_generic_arg *)); typedef void _rl_sigcleanup_func_t PARAMS((int, void *)); /************************************************************************* * * * Global functions undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /************************************************************************* * * * Global variables undocumented in texinfo manual and not in readline.h * * * *************************************************************************/ /* complete.c */ extern int rl_complete_with_tilde_expansion; #if defined (VISIBLE_STATS) extern int rl_visible_stats; #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) extern int _rl_colored_stats; extern int _rl_colored_completion_prefix; #endif /* readline.c */ extern int rl_line_buffer_len; extern int rl_arg_sign; extern int rl_visible_prompt_length; extern int rl_byte_oriented; /* display.c */ extern int rl_display_fixed; /* parens.c */ extern int rl_blink_matching_paren; /************************************************************************* * * * Global functions and variables unused and undocumented * * * *************************************************************************/ /* kill.c */ extern int rl_set_retained_kills PARAMS((int)); /* terminal.c */ extern void _rl_set_screen_size PARAMS((int, int)); /* undo.c */ extern int _rl_fix_last_undo_of_type PARAMS((int, int, int)); /* util.c */ extern char *_rl_savestring PARAMS((const char *)); /************************************************************************* * * * Functions and variables private to the readline library * * * *************************************************************************/ /* NOTE: Functions and variables prefixed with `_rl_' are pseudo-global: they are global so they can be shared between files in the readline library, but are not intended to be visible to readline callers. */ /************************************************************************* * Undocumented private functions * *************************************************************************/ #if defined(READLINE_CALLBACKS) /* readline.c */ extern void readline_internal_setup PARAMS((void)); extern char *readline_internal_teardown PARAMS((int)); extern int readline_internal_char PARAMS((void)); extern _rl_keyseq_cxt *_rl_keyseq_cxt_alloc PARAMS((void)); extern void _rl_keyseq_cxt_dispose PARAMS((_rl_keyseq_cxt *)); extern void _rl_keyseq_chain_dispose PARAMS((void)); extern int _rl_dispatch_callback PARAMS((_rl_keyseq_cxt *)); /* callback.c */ extern _rl_callback_generic_arg *_rl_callback_data_alloc PARAMS((int)); extern void _rl_callback_data_dispose PARAMS((_rl_callback_generic_arg *)); #endif /* READLINE_CALLBACKS */ /* bind.c */ extern char *_rl_untranslate_macro_value PARAMS((char *, int)); /* complete.c */ extern void _rl_reset_completion_state PARAMS((void)); extern char _rl_find_completion_word PARAMS((int *, int *)); extern void _rl_free_match_list PARAMS((char **)); /* display.c */ extern char *_rl_strip_prompt PARAMS((char *)); extern void _rl_reset_prompt PARAMS((void)); extern void _rl_move_cursor_relative PARAMS((int, const char *)); extern void _rl_move_vert PARAMS((int)); extern void _rl_save_prompt PARAMS((void)); extern void _rl_restore_prompt PARAMS((void)); extern char *_rl_make_prompt_for_search PARAMS((int)); extern void _rl_erase_at_end_of_line PARAMS((int)); extern void _rl_clear_to_eol PARAMS((int)); extern void _rl_clear_screen PARAMS((void)); extern void _rl_update_final PARAMS((void)); extern void _rl_redisplay_after_sigwinch PARAMS((void)); extern void _rl_clean_up_for_exit PARAMS((void)); extern void _rl_erase_entire_line PARAMS((void)); extern int _rl_current_display_line PARAMS((void)); /* input.c */ extern int _rl_any_typein PARAMS((void)); extern int _rl_input_available PARAMS((void)); extern int _rl_input_queued PARAMS((int)); extern void _rl_insert_typein PARAMS((int)); extern int _rl_unget_char PARAMS((int)); extern int _rl_pushed_input_available PARAMS((void)); /* isearch.c */ extern _rl_search_cxt *_rl_scxt_alloc PARAMS((int, int)); extern void _rl_scxt_dispose PARAMS((_rl_search_cxt *, int)); extern int _rl_isearch_dispatch PARAMS((_rl_search_cxt *, int)); extern int _rl_isearch_callback PARAMS((_rl_search_cxt *)); extern int _rl_isearch_cleanup PARAMS((_rl_search_cxt *, int)); extern int _rl_search_getchar PARAMS((_rl_search_cxt *)); /* kill.c */ #define BRACK_PASTE_PREF "\033[200~" #define BRACK_PASTE_SUFF "\033[201~" #define BRACK_PASTE_LAST '~' #define BRACK_PASTE_SLEN 6 #define BRACK_PASTE_INIT "\033[?2004h" #define BRACK_PASTE_FINI "\033[?2004l" /* macro.c */ extern void _rl_with_macro_input PARAMS((char *)); extern int _rl_next_macro_key PARAMS((void)); extern int _rl_prev_macro_key PARAMS((void)); extern void _rl_push_executing_macro PARAMS((void)); extern void _rl_pop_executing_macro PARAMS((void)); extern void _rl_add_macro_char PARAMS((int)); extern void _rl_kill_kbd_macro PARAMS((void)); /* misc.c */ extern int _rl_arg_overflow PARAMS((void)); extern void _rl_arg_init PARAMS((void)); extern int _rl_arg_getchar PARAMS((void)); extern int _rl_arg_callback PARAMS((_rl_arg_cxt)); extern void _rl_reset_argument PARAMS((void)); extern void _rl_start_using_history PARAMS((void)); extern int _rl_free_saved_history_line PARAMS((void)); extern void _rl_set_insert_mode PARAMS((int, int)); extern void _rl_revert_all_lines PARAMS((void)); /* nls.c */ extern int _rl_init_eightbit PARAMS((void)); /* parens.c */ extern void _rl_enable_paren_matching PARAMS((int)); /* readline.c */ extern void _rl_init_line_state PARAMS((void)); extern void _rl_set_the_line PARAMS((void)); extern int _rl_dispatch PARAMS((int, Keymap)); extern int _rl_dispatch_subseq PARAMS((int, Keymap, int)); extern void _rl_internal_char_cleanup PARAMS((void)); /* rltty.c */ extern int _rl_disable_tty_signals PARAMS((void)); extern int _rl_restore_tty_signals PARAMS((void)); /* search.c */ extern int _rl_nsearch_callback PARAMS((_rl_search_cxt *)); extern int _rl_nsearch_cleanup PARAMS((_rl_search_cxt *, int)); /* signals.c */ extern void _rl_signal_handler PARAMS((int)); extern void _rl_block_sigint PARAMS((void)); extern void _rl_release_sigint PARAMS((void)); extern void _rl_block_sigwinch PARAMS((void)); extern void _rl_release_sigwinch PARAMS((void)); /* terminal.c */ extern void _rl_get_screen_size PARAMS((int, int)); extern void _rl_sigwinch_resize_terminal PARAMS((void)); extern int _rl_init_terminal_io PARAMS((const char *)); #ifdef _MINIX extern void _rl_output_character_function PARAMS((int)); #else extern int _rl_output_character_function PARAMS((int)); #endif extern void _rl_output_some_chars PARAMS((const char *, int)); extern int _rl_backspace PARAMS((int)); extern void _rl_enable_meta_key PARAMS((void)); extern void _rl_disable_meta_key PARAMS((void)); extern void _rl_control_keypad PARAMS((int)); extern void _rl_set_cursor PARAMS((int, int)); /* text.c */ extern void _rl_fix_point PARAMS((int)); extern int _rl_replace_text PARAMS((const char *, int, int)); extern int _rl_forward_char_internal PARAMS((int)); extern int _rl_insert_char PARAMS((int, int)); extern int _rl_overwrite_char PARAMS((int, int)); extern int _rl_overwrite_rubout PARAMS((int, int)); extern int _rl_rubout_char PARAMS((int, int)); #if defined (HANDLE_MULTIBYTE) extern int _rl_char_search_internal PARAMS((int, int, char *, int)); #else extern int _rl_char_search_internal PARAMS((int, int, int)); #endif extern int _rl_set_mark_at_pos PARAMS((int)); /* undo.c */ extern UNDO_LIST *_rl_copy_undo_entry PARAMS((UNDO_LIST *)); extern UNDO_LIST *_rl_copy_undo_list PARAMS((UNDO_LIST *)); extern void _rl_free_undo_list PARAMS((UNDO_LIST *)); /* util.c */ #if defined (USE_VARARGS) && defined (PREFER_STDARG) extern void _rl_ttymsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_errmsg (const char *, ...) __attribute__((__format__ (printf, 1, 2))); extern void _rl_trace (const char *, ...) __attribute__((__format__ (printf, 1, 2))); #else extern void _rl_ttymsg (); extern void _rl_errmsg (); extern void _rl_trace (); #endif extern void _rl_audit_tty PARAMS((char *)); extern int _rl_tropen PARAMS((void)); extern int _rl_abort_internal PARAMS((void)); extern int _rl_null_function PARAMS((int, int)); extern char *_rl_strindex PARAMS((const char *, const char *)); extern int _rl_qsort_string_compare PARAMS((char **, char **)); extern int (_rl_uppercase_p) PARAMS((int)); extern int (_rl_lowercase_p) PARAMS((int)); extern int (_rl_pure_alphabetic) PARAMS((int)); extern int (_rl_digit_p) PARAMS((int)); extern int (_rl_to_lower) PARAMS((int)); extern int (_rl_to_upper) PARAMS((int)); extern int (_rl_digit_value) PARAMS((int)); /* vi_mode.c */ extern void _rl_vi_initialize_line PARAMS((void)); extern void _rl_vi_reset_last PARAMS((void)); extern void _rl_vi_set_last PARAMS((int, int, int)); extern int _rl_vi_textmod_command PARAMS((int)); extern int _rl_vi_motion_command PARAMS((int)); extern void _rl_vi_done_inserting PARAMS((void)); extern int _rl_vi_domove_callback PARAMS((_rl_vimotion_cxt *)); extern int _rl_vi_domove_motion_cleanup PARAMS((int, _rl_vimotion_cxt *)); /************************************************************************* * Undocumented private variables * *************************************************************************/ /* bind.c */ extern const char * const _rl_possible_control_prefixes[]; extern const char * const _rl_possible_meta_prefixes[]; /* callback.c */ extern _rl_callback_func_t *_rl_callback_func; extern _rl_callback_generic_arg *_rl_callback_data; /* complete.c */ extern int _rl_complete_show_all; extern int _rl_complete_show_unmodified; extern int _rl_complete_mark_directories; extern int _rl_complete_mark_symlink_dirs; extern int _rl_completion_prefix_display_length; extern int _rl_completion_columns; extern int _rl_print_completions_horizontally; extern int _rl_completion_case_fold; extern int _rl_completion_case_map; extern int _rl_match_hidden_files; extern int _rl_page_completions; extern int _rl_skip_completed_text; extern int _rl_menu_complete_prefix_first; /* display.c */ extern int _rl_vis_botlin; extern int _rl_last_c_pos; extern int _rl_suppress_redisplay; extern int _rl_want_redisplay; extern char *_rl_emacs_mode_str; extern int _rl_emacs_modestr_len; extern char *_rl_vi_ins_mode_str; extern int _rl_vi_ins_modestr_len; extern char *_rl_vi_cmd_mode_str; extern int _rl_vi_cmd_modestr_len; /* isearch.c */ extern char *_rl_isearch_terminators; extern _rl_search_cxt *_rl_iscxt; /* macro.c */ extern char *_rl_executing_macro; /* misc.c */ extern int _rl_history_preserve_point; extern int _rl_history_saved_point; extern _rl_arg_cxt _rl_argcxt; /* nls.c */ extern int _rl_utf8locale; /* readline.c */ extern int _rl_echoing_p; extern int _rl_horizontal_scroll_mode; extern int _rl_mark_modified_lines; extern int _rl_bell_preference; extern int _rl_meta_flag; extern int _rl_convert_meta_chars_to_ascii; extern int _rl_output_meta_chars; extern int _rl_bind_stty_chars; extern int _rl_revert_all_at_newline; extern int _rl_echo_control_chars; extern int _rl_show_mode_in_prompt; extern int _rl_enable_bracketed_paste; extern char *_rl_comment_begin; extern unsigned char _rl_parsing_conditionalized_out; extern Keymap _rl_keymap; extern FILE *_rl_in_stream; extern FILE *_rl_out_stream; extern int _rl_last_command_was_kill; extern int _rl_eof_char; extern procenv_t _rl_top_level; extern _rl_keyseq_cxt *_rl_kscxt; extern int _rl_keyseq_timeout; extern int _rl_executing_keyseq_size; /* search.c */ extern _rl_search_cxt *_rl_nscxt; /* signals.c */ extern int _rl_interrupt_immediately; extern int volatile _rl_caught_signal; extern _rl_sigcleanup_func_t *_rl_sigcleanup; extern void *_rl_sigcleanarg; extern int _rl_echoctl; extern int _rl_intr_char; extern int _rl_quit_char; extern int _rl_susp_char; /* terminal.c */ extern int _rl_enable_keypad; extern int _rl_enable_meta; extern char *_rl_term_clreol; extern char *_rl_term_clrpag; extern char *_rl_term_im; extern char *_rl_term_ic; extern char *_rl_term_ei; extern char *_rl_term_DC; extern char *_rl_term_up; extern char *_rl_term_dc; extern char *_rl_term_cr; extern char *_rl_term_IC; extern char *_rl_term_forward_char; extern int _rl_screenheight; extern int _rl_screenwidth; extern int _rl_screenchars; extern int _rl_terminal_can_insert; extern int _rl_term_autowrap; /* text.c */ extern int _rl_optimize_typeahead; /* undo.c */ extern int _rl_doing_an_undo; extern int _rl_undo_group_level; /* vi_mode.c */ extern int _rl_vi_last_command; extern int _rl_vi_redoing; extern _rl_vimotion_cxt *_rl_vimvcxt; #endif /* _RL_PRIVATE_H_ */ readline-7.0/rlshell.h000664 000436 000024 00000002352 11130207321 015034 0ustar00chetstaff000000 000000 /* rlshell.h -- utility functions normally provided by bash. */ /* Copyright (C) 1999-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RL_SHELL_H_) #define _RL_SHELL_H_ #include "rlstdc.h" extern char *sh_single_quote PARAMS((char *)); extern void sh_set_lines_and_columns PARAMS((int, int)); extern char *sh_get_env_value PARAMS((const char *)); extern char *sh_get_home_dir PARAMS((void)); extern int sh_unset_nodelay_mode PARAMS((int)); #endif /* _RL_SHELL_H_ */ readline-7.0/rlstdc.h000664 000436 000000 00000003453 11543433705 014677 0ustar00chetwheel000000 000000 /* stdc.h -- macros to make source compile on both ANSI C and K&R C compilers. */ /* Copyright (C) 1993-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RL_STDC_H_) #define _RL_STDC_H_ /* Adapted from BSD /usr/include/sys/cdefs.h. */ /* A function can be defined using prototypes and compile on both ANSI C and traditional C compilers with something like this: extern char *func PARAMS((char *, char *, int)); */ #if !defined (PARAMS) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define PARAMS(protos) protos # else # define PARAMS(protos) () # endif #endif #ifndef __attribute__ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) # define __attribute__(x) # endif #endif /* Moved from config.h.in because readline.h:rl_message depends on these defines. */ #if defined (__STDC__) && defined (HAVE_STDARG_H) # define PREFER_STDARG # define USE_VARARGS #else # if defined (HAVE_VARARGS_H) # define PREFER_VARARGS # define USE_VARARGS # endif #endif #endif /* !_RL_STDC_H_ */ readline-7.0/rltty.h000664 000436 000000 00000004743 11130207321 014546 0ustar00chetwheel000000 000000 /* rltty.h - tty driver-related definitions used by some library files. */ /* Copyright (C) 1995-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RLTTY_H_) #define _RLTTY_H_ /* Posix systems use termios and the Posix signal functions. */ #if defined (TERMIOS_TTY_DRIVER) # include #endif /* TERMIOS_TTY_DRIVER */ /* System V machines use termio. */ #if defined (TERMIO_TTY_DRIVER) # include # if !defined (TCOON) # define TCOON 1 # endif #endif /* TERMIO_TTY_DRIVER */ /* Other (BSD) machines use sgtty. */ #if defined (NEW_TTY_DRIVER) # include #endif #include "rlwinsize.h" /* Define _POSIX_VDISABLE if we are not using the `new' tty driver and it is not already defined. It is used both to determine if a special character is disabled and to disable certain special characters. Posix systems should set to 0, USG systems to -1. */ #if !defined (NEW_TTY_DRIVER) && !defined (_POSIX_VDISABLE) # if defined (_SVR4_VDISABLE) # define _POSIX_VDISABLE _SVR4_VDISABLE # else # if defined (_POSIX_VERSION) # define _POSIX_VDISABLE 0 # else /* !_POSIX_VERSION */ # define _POSIX_VDISABLE -1 # endif /* !_POSIX_VERSION */ # endif /* !_SVR4_DISABLE */ #endif /* !NEW_TTY_DRIVER && !_POSIX_VDISABLE */ typedef struct _rl_tty_chars { unsigned char t_eof; unsigned char t_eol; unsigned char t_eol2; unsigned char t_erase; unsigned char t_werase; unsigned char t_kill; unsigned char t_reprint; unsigned char t_intr; unsigned char t_quit; unsigned char t_susp; unsigned char t_dsusp; unsigned char t_start; unsigned char t_stop; unsigned char t_lnext; unsigned char t_flush; unsigned char t_status; } _RL_TTY_CHARS; #endif /* _RLTTY_H_ */ readline-7.0/rltypedefs.h000664 000436 000024 00000006171 12321534445 015570 0ustar00chetstaff000000 000000 /* rltypedefs.h -- Type declarations for readline functions. */ /* Copyright (C) 2000-2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #ifndef _RL_TYPEDEFS_H_ #define _RL_TYPEDEFS_H_ #ifdef __cplusplus extern "C" { #endif /* Old-style, attempt to mark as deprecated in some way people will notice. */ #if !defined (_FUNCTION_DEF) # define _FUNCTION_DEF #if defined(__GNUC__) || defined(__clang__) typedef int Function () __attribute__ ((deprecated)); typedef void VFunction () __attribute__ ((deprecated)); typedef char *CPFunction () __attribute__ ((deprecated)); typedef char **CPPFunction () __attribute__ ((deprecated)); #else typedef int Function (); typedef void VFunction (); typedef char *CPFunction (); typedef char **CPPFunction (); #endif #endif /* _FUNCTION_DEF */ /* New style. */ #if !defined (_RL_FUNCTION_TYPEDEF) # define _RL_FUNCTION_TYPEDEF /* Bindable functions */ typedef int rl_command_func_t PARAMS((int, int)); /* Typedefs for the completion system */ typedef char *rl_compentry_func_t PARAMS((const char *, int)); typedef char **rl_completion_func_t PARAMS((const char *, int, int)); typedef char *rl_quote_func_t PARAMS((char *, int, char *)); typedef char *rl_dequote_func_t PARAMS((char *, int)); typedef int rl_compignore_func_t PARAMS((char **)); typedef void rl_compdisp_func_t PARAMS((char **, int, int)); /* Type for input and pre-read hook functions like rl_event_hook */ typedef int rl_hook_func_t PARAMS((void)); /* Input function type */ typedef int rl_getc_func_t PARAMS((FILE *)); /* Generic function that takes a character buffer (which could be the readline line buffer) and an index into it (which could be rl_point) and returns an int. */ typedef int rl_linebuf_func_t PARAMS((char *, int)); /* `Generic' function pointer typedefs */ typedef int rl_intfunc_t PARAMS((int)); #define rl_ivoidfunc_t rl_hook_func_t typedef int rl_icpfunc_t PARAMS((char *)); typedef int rl_icppfunc_t PARAMS((char **)); typedef void rl_voidfunc_t PARAMS((void)); typedef void rl_vintfunc_t PARAMS((int)); typedef void rl_vcpfunc_t PARAMS((char *)); typedef void rl_vcppfunc_t PARAMS((char **)); typedef char *rl_cpvfunc_t PARAMS((void)); typedef char *rl_cpifunc_t PARAMS((int)); typedef char *rl_cpcpfunc_t PARAMS((char *)); typedef char *rl_cpcppfunc_t PARAMS((char **)); #endif /* _RL_FUNCTION_TYPEDEF */ #ifdef __cplusplus } #endif #endif /* _RL_TYPEDEFS_H_ */ readline-7.0/rlwinsize.h000664 000436 000000 00000004235 11130207321 015412 0ustar00chetwheel000000 000000 /* rlwinsize.h -- an attempt to isolate some of the system-specific defines for `struct winsize' and TIOCGWINSZ. */ /* Copyright (C) 1997-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RLWINSIZE_H_) #define _RLWINSIZE_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif /* Try to find the definitions of `struct winsize' and TIOGCWINSZ */ #if defined (GWINSZ_IN_SYS_IOCTL) && !defined (TIOCGWINSZ) # include #endif /* GWINSZ_IN_SYS_IOCTL && !TIOCGWINSZ */ #if defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL) # include #endif /* STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ /* Not in either of the standard places, look around. */ #if !defined (STRUCT_WINSIZE_IN_TERMIOS) && !defined (STRUCT_WINSIZE_IN_SYS_IOCTL) # if defined (HAVE_SYS_STREAM_H) # include # endif /* HAVE_SYS_STREAM_H */ # if defined (HAVE_SYS_PTEM_H) /* SVR4.2, at least, has it here */ # include # define _IO_PTEM_H /* work around SVR4.2 1.1.4 bug */ # endif /* HAVE_SYS_PTEM_H */ # if defined (HAVE_SYS_PTE_H) /* ??? */ # include # endif /* HAVE_SYS_PTE_H */ #endif /* !STRUCT_WINSIZE_IN_TERMIOS && !STRUCT_WINSIZE_IN_SYS_IOCTL */ #if defined (M_UNIX) && !defined (_SCO_DS) && !defined (tcflow) # define tcflow(fd, action) ioctl(fd, TCXONC, action) #endif #endif /* _RL_WINSIZE_H */ readline-7.0/tcap.h000664 000436 000024 00000003171 12651440357 014337 0ustar00chetstaff000000 000000 /* tcap.h -- termcap library functions and variables. */ /* Copyright (C) 1996-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_RLTCAP_H_) #define _RLTCAP_H_ #if defined (HAVE_CONFIG_H) # include "config.h" #endif #if defined (HAVE_TERMCAP_H) # if defined (__linux__) && !defined (SPEED_T_IN_SYS_TYPES) # include "rltty.h" # endif # include #elif defined (HAVE_NCURSES_TERMCAP_H) # include #else /* On Solaris2, sys/types.h #includes sys/reg.h, which #defines PC. Unfortunately, PC is a global variable used by the termcap library. */ #ifdef PC # undef PC #endif extern char PC; extern char *UP, *BC; extern short ospeed; extern int tgetent (); extern int tgetflag (); extern int tgetnum (); extern char *tgetstr (); extern int tputs (); extern char *tgoto (); #endif /* HAVE_TERMCAP_H */ #endif /* !_RLTCAP_H_ */ readline-7.0/tilde.h000664 000436 000000 00000005746 11130207325 014501 0ustar00chetwheel000000 000000 /* tilde.h: Externally available variables and function in libtilde.a. */ /* Copyright (C) 1992-2009 Free Software Foundation, Inc. This file contains the Readline Library (Readline), a set of routines for providing Emacs style line input to programs that ask for it. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_TILDE_H_) # define _TILDE_H_ #ifdef __cplusplus extern "C" { #endif /* A function can be defined using prototypes and compile on both ANSI C and traditional C compilers with something like this: extern char *func PARAMS((char *, char *, int)); */ #if !defined (PARAMS) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define PARAMS(protos) protos # else # define PARAMS(protos) () # endif #endif typedef char *tilde_hook_func_t PARAMS((char *)); /* If non-null, this contains the address of a function that the application wants called before trying the standard tilde expansions. The function is called with the text sans tilde, and returns a malloc()'ed string which is the expansion, or a NULL pointer if the expansion fails. */ extern tilde_hook_func_t *tilde_expansion_preexpansion_hook; /* If non-null, this contains the address of a function to call if the standard meaning for expanding a tilde fails. The function is called with the text (sans tilde, as in "foo"), and returns a malloc()'ed string which is the expansion, or a NULL pointer if there is no expansion. */ extern tilde_hook_func_t *tilde_expansion_failure_hook; /* When non-null, this is a NULL terminated array of strings which are duplicates for a tilde prefix. Bash uses this to expand `=~' and `:~'. */ extern char **tilde_additional_prefixes; /* When non-null, this is a NULL terminated array of strings which match the end of a username, instead of just "/". Bash sets this to `:' and `=~'. */ extern char **tilde_additional_suffixes; /* Return a new string which is the result of tilde expanding STRING. */ extern char *tilde_expand PARAMS((const char *)); /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. */ extern char *tilde_expand_word PARAMS((const char *)); /* Find the portion of the string beginning with ~ that should be expanded. */ extern char *tilde_find_word PARAMS((const char *, int, int *)); #ifdef __cplusplus } #endif #endif /* _TILDE_H_ */ readline-7.0/xmalloc.h000664 000436 000000 00000002440 11130207322 015020 0ustar00chetwheel000000 000000 /* xmalloc.h -- memory allocation that aborts on errors. */ /* Copyright (C) 1999-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (_XMALLOC_H_) #define _XMALLOC_H_ #if defined (READLINE_LIBRARY) # include "rlstdc.h" #else # include #endif #ifndef PTR_T #ifdef __STDC__ # define PTR_T void * #else # define PTR_T char * #endif #endif /* !PTR_T */ extern PTR_T xmalloc PARAMS((size_t)); extern PTR_T xrealloc PARAMS((void *, size_t)); extern void xfree PARAMS((void *)); #endif /* _XMALLOC_H_ */ readline-7.0/bind.c000644 000436 000120 00000200050 12746150023 014263 0ustar00chetadmin000000 000000 /* bind.c -- key binding and startup file support for the readline library. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #include #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #if !defined (errno) extern int errno; #endif /* !errno */ #include "posixstat.h" /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ /* Variables exported by this file. */ Keymap rl_binding_keymap; static int _rl_skip_to_delim PARAMS((char *, int, int)); #if defined (USE_VARARGS) && defined (PREFER_STDARG) static void _rl_init_file_error (const char *, ...) __attribute__((__format__ (printf, 1, 2))); #else static void _rl_init_file_error (); #endif static char *_rl_read_file PARAMS((char *, size_t *)); static int _rl_read_init_file PARAMS((const char *, int)); static int glean_key_from_name PARAMS((char *)); static int find_boolean_var PARAMS((const char *)); static int find_string_var PARAMS((const char *)); static char *_rl_get_string_variable_value PARAMS((const char *)); static int substring_member_of_array PARAMS((const char *, const char * const *)); static int currently_reading_init_file; /* used only in this file */ static int _rl_prefer_visible_bell = 1; /* **************************************************************** */ /* */ /* Binding keys */ /* */ /* **************************************************************** */ /* rl_add_defun (char *name, rl_command_func_t *function, int key) Add NAME to the list of named functions. Make FUNCTION be the function that gets called. If KEY is not -1, then bind it. */ int rl_add_defun (name, function, key) const char *name; rl_command_func_t *function; int key; { if (key != -1) rl_bind_key (key, function); rl_add_funmap_entry (name, function); return 0; } /* Bind KEY to FUNCTION. Returns non-zero if KEY is out of range. */ int rl_bind_key (key, function) int key; rl_command_func_t *function; { char keyseq[3]; int l; if (key < 0) return (key); if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii) { if (_rl_keymap[ESC].type == ISKMAP) { Keymap escmap; escmap = FUNCTION_TO_KEYMAP (_rl_keymap, ESC); key = UNMETA (key); escmap[key].type = ISFUNC; escmap[key].function = function; return (0); } return (key); } /* If it's bound to a function or macro, just overwrite. Otherwise we have to treat it as a key sequence so rl_generic_bind handles shadow keymaps for us. If we are binding '\' make sure to escape it so it makes it through the call to rl_translate_keyseq. */ if (_rl_keymap[key].type != ISKMAP) { _rl_keymap[key].type = ISFUNC; _rl_keymap[key].function = function; } else { l = 0; if (key == '\\') keyseq[l++] = '\\'; keyseq[l++] = key; keyseq[l] = '\0'; rl_bind_keyseq (keyseq, function); } rl_binding_keymap = _rl_keymap; return (0); } /* Bind KEY to FUNCTION in MAP. Returns non-zero in case of invalid KEY. */ int rl_bind_key_in_map (key, function, map) int key; rl_command_func_t *function; Keymap map; { int result; Keymap oldmap; oldmap = _rl_keymap; _rl_keymap = map; result = rl_bind_key (key, function); _rl_keymap = oldmap; return (result); } /* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right now, this is always used to attempt to bind the arrow keys, hence the check for rl_vi_movement_mode. */ int rl_bind_key_if_unbound_in_map (key, default_func, kmap) int key; rl_command_func_t *default_func; Keymap kmap; { char keyseq[2]; keyseq[0] = (unsigned char)key; keyseq[1] = '\0'; return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap)); } int rl_bind_key_if_unbound (key, default_func) int key; rl_command_func_t *default_func; { char keyseq[2]; keyseq[0] = (unsigned char)key; keyseq[1] = '\0'; return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap)); } /* Make KEY do nothing in the currently selected keymap. Returns non-zero in case of error. */ int rl_unbind_key (key) int key; { return (rl_bind_key (key, (rl_command_func_t *)NULL)); } /* Make KEY do nothing in MAP. Returns non-zero in case of error. */ int rl_unbind_key_in_map (key, map) int key; Keymap map; { return (rl_bind_key_in_map (key, (rl_command_func_t *)NULL, map)); } /* Unbind all keys bound to FUNCTION in MAP. */ int rl_unbind_function_in_map (func, map) rl_command_func_t *func; Keymap map; { register int i, rval; for (i = rval = 0; i < KEYMAP_SIZE; i++) { if (map[i].type == ISFUNC && map[i].function == func) { map[i].function = (rl_command_func_t *)NULL; rval = 1; } } return rval; } int rl_unbind_command_in_map (command, map) const char *command; Keymap map; { rl_command_func_t *func; func = rl_named_function (command); if (func == 0) return 0; return (rl_unbind_function_in_map (func, map)); } /* Bind the key sequence represented by the string KEYSEQ to FUNCTION, starting in the current keymap. This makes new keymaps as necessary. */ int rl_bind_keyseq (keyseq, function) const char *keyseq; rl_command_func_t *function; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, _rl_keymap)); } /* Bind the key sequence represented by the string KEYSEQ to FUNCTION. This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_bind_keyseq_in_map (keyseq, function, map) const char *keyseq; rl_command_func_t *function; Keymap map; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map)); } /* Backwards compatibility; equivalent to rl_bind_keyseq_in_map() */ int rl_set_key (keyseq, function, map) const char *keyseq; rl_command_func_t *function; Keymap map; { return (rl_generic_bind (ISFUNC, keyseq, (char *)function, map)); } /* Bind key sequence KEYSEQ to DEFAULT_FUNC if KEYSEQ is unbound. Right now, this is always used to attempt to bind the arrow keys, hence the check for rl_vi_movement_mode. */ int rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, kmap) const char *keyseq; rl_command_func_t *default_func; Keymap kmap; { rl_command_func_t *func; if (keyseq) { func = rl_function_of_keyseq (keyseq, kmap, (int *)NULL); #if defined (VI_MODE) if (!func || func == rl_do_lowercase_version || func == rl_vi_movement_mode) #else if (!func || func == rl_do_lowercase_version) #endif return (rl_bind_keyseq_in_map (keyseq, default_func, kmap)); else return 1; } return 0; } int rl_bind_keyseq_if_unbound (keyseq, default_func) const char *keyseq; rl_command_func_t *default_func; { return (rl_bind_keyseq_if_unbound_in_map (keyseq, default_func, _rl_keymap)); } /* Bind the key sequence represented by the string KEYSEQ to the string of characters MACRO. This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_macro_bind (keyseq, macro, map) const char *keyseq, *macro; Keymap map; { char *macro_keys; int macro_keys_len; macro_keys = (char *)xmalloc ((2 * strlen (macro)) + 1); if (rl_translate_keyseq (macro, macro_keys, ¯o_keys_len)) { xfree (macro_keys); return -1; } rl_generic_bind (ISMACR, keyseq, macro_keys, map); return 0; } /* Bind the key sequence represented by the string KEYSEQ to the arbitrary pointer DATA. TYPE says what kind of data is pointed to by DATA, right now this can be a function (ISFUNC), a macro (ISMACR), or a keymap (ISKMAP). This makes new keymaps as necessary. The initial place to do bindings is in MAP. */ int rl_generic_bind (type, keyseq, data, map) int type; const char *keyseq; char *data; Keymap map; { char *keys; int keys_len; register int i; KEYMAP_ENTRY k; k.function = 0; /* If no keys to bind to, exit right away. */ if (keyseq == 0 || *keyseq == 0) { if (type == ISMACR) xfree (data); return -1; } keys = (char *)xmalloc (1 + (2 * strlen (keyseq))); /* Translate the ASCII representation of KEYSEQ into an array of characters. Stuff the characters into KEYS, and the length of KEYS into KEYS_LEN. */ if (rl_translate_keyseq (keyseq, keys, &keys_len)) { xfree (keys); return -1; } /* Bind keys, making new keymaps as necessary. */ for (i = 0; i < keys_len; i++) { unsigned char uc = keys[i]; int ic; ic = uc; if (ic < 0 || ic >= KEYMAP_SIZE) { xfree (keys); return -1; } if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) { ic = UNMETA (ic); if (map[ESC].type == ISKMAP) map = FUNCTION_TO_KEYMAP (map, ESC); } if ((i + 1) < keys_len) { if (map[ic].type != ISKMAP) { /* We allow subsequences of keys. If a keymap is being created that will `shadow' an existing function or macro key binding, we save that keybinding into the ANYOTHERKEY index in the new map. The dispatch code will look there to find the function to execute if the subsequence is not matched. ANYOTHERKEY was chosen to be greater than UCHAR_MAX. */ k = map[ic]; map[ic].type = ISKMAP; map[ic].function = KEYMAP_TO_FUNCTION (rl_make_bare_keymap()); } map = FUNCTION_TO_KEYMAP (map, ic); /* The dispatch code will return this function if no matching key sequence is found in the keymap. This (with a little help from the dispatch code in readline.c) allows `a' to be mapped to something, `abc' to be mapped to something else, and the function bound to `a' to be executed when the user types `abx', leaving `bx' in the input queue. */ if (k.function && ((k.type == ISFUNC && k.function != rl_do_lowercase_version) || k.type == ISMACR)) { map[ANYOTHERKEY] = k; k.function = 0; } } else { if (map[ic].type == ISMACR) xfree ((char *)map[ic].function); else if (map[ic].type == ISKMAP) { map = FUNCTION_TO_KEYMAP (map, ic); ic = ANYOTHERKEY; /* If we're trying to override a keymap with a null function (e.g., trying to unbind it), we can't use a null pointer here because that's indistinguishable from having not been overridden. We use a special bindable function that does nothing. */ if (type == ISFUNC && data == 0) data = (char *)_rl_null_function; } map[ic].function = KEYMAP_TO_FUNCTION (data); map[ic].type = type; } rl_binding_keymap = map; } xfree (keys); return 0; } /* Translate the ASCII representation of SEQ, stuffing the values into ARRAY, an array of characters. LEN gets the final length of ARRAY. Return non-zero if there was an error parsing SEQ. */ int rl_translate_keyseq (seq, array, len) const char *seq; char *array; int *len; { register int i, c, l, temp; for (i = l = 0; c = seq[i]; i++) { if (c == '\\') { c = seq[++i]; if (c == 0) break; /* Handle \C- and \M- prefixes. */ if ((c == 'C' || c == 'M') && seq[i + 1] == '-') { /* Handle special case of backwards define. */ if (strncmp (&seq[i], "C-\\M-", 5) == 0) { array[l++] = ESC; /* ESC is meta-prefix */ i += 5; array[l++] = CTRL (_rl_to_upper (seq[i])); if (seq[i] == '\0') i--; } else if (c == 'M') { i++; /* seq[i] == '-' */ /* XXX - obey convert-meta setting */ if (_rl_convert_meta_chars_to_ascii && _rl_keymap[ESC].type == ISKMAP) array[l++] = ESC; /* ESC is meta-prefix */ else if (seq[i+1] == '\\' && seq[i+2] == 'C' && seq[i+3] == '-') { i += 4; temp = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i])); array[l++] = META (temp); } else { /* This doesn't yet handle things like \M-\a, which may or may not have any reasonable meaning. You're probably better off using straight octal or hex. */ i++; array[l++] = META (seq[i]); } } else if (c == 'C') { i += 2; /* Special hack for C-?... */ array[l++] = (seq[i] == '?') ? RUBOUT : CTRL (_rl_to_upper (seq[i])); } continue; } /* Translate other backslash-escaped characters. These are the same escape sequences that bash's `echo' and `printf' builtins handle, with the addition of \d -> RUBOUT. A backslash preceding a character that is not special is stripped. */ switch (c) { case 'a': array[l++] = '\007'; break; case 'b': array[l++] = '\b'; break; case 'd': array[l++] = RUBOUT; /* readline-specific */ break; case 'e': array[l++] = ESC; break; case 'f': array[l++] = '\f'; break; case 'n': array[l++] = NEWLINE; break; case 'r': array[l++] = RETURN; break; case 't': array[l++] = TAB; break; case 'v': array[l++] = 0x0B; break; case '\\': array[l++] = '\\'; break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': i++; for (temp = 2, c -= '0'; ISOCTAL ((unsigned char)seq[i]) && temp--; i++) c = (c * 8) + OCTVALUE (seq[i]); i--; /* auto-increment in for loop */ array[l++] = c & largest_char; break; case 'x': i++; for (temp = 2, c = 0; ISXDIGIT ((unsigned char)seq[i]) && temp--; i++) c = (c * 16) + HEXVALUE (seq[i]); if (temp == 2) c = 'x'; i--; /* auto-increment in for loop */ array[l++] = c & largest_char; break; default: /* backslashes before non-special chars just add the char */ array[l++] = c; break; /* the backslash is stripped */ } continue; } array[l++] = c; } *len = l; array[l] = '\0'; return (0); } static int _rl_isescape (c) int c; { switch (c) { case '\007': case '\b': case '\f': case '\n': case '\r': case TAB: case 0x0b: return (1); default: return (0); } } static int _rl_escchar (c) int c; { switch (c) { case '\007': return ('a'); case '\b': return ('b'); case '\f': return ('f'); case '\n': return ('n'); case '\r': return ('r'); case TAB: return ('t'); case 0x0b: return ('v'); default: return (c); } } char * rl_untranslate_keyseq (seq) int seq; { static char kseq[16]; int i, c; i = 0; c = seq; if (META_CHAR (c)) { kseq[i++] = '\\'; kseq[i++] = 'M'; kseq[i++] = '-'; c = UNMETA (c); } else if (c == ESC) { kseq[i++] = '\\'; c = 'e'; } else if (CTRL_CHAR (c)) { kseq[i++] = '\\'; kseq[i++] = 'C'; kseq[i++] = '-'; c = _rl_to_lower (UNCTRL (c)); } else if (c == RUBOUT) { kseq[i++] = '\\'; kseq[i++] = 'C'; kseq[i++] = '-'; c = '?'; } if (c == ESC) { kseq[i++] = '\\'; c = 'e'; } else if (c == '\\' || c == '"') { kseq[i++] = '\\'; } kseq[i++] = (unsigned char) c; kseq[i] = '\0'; return kseq; } char * _rl_untranslate_macro_value (seq, use_escapes) char *seq; int use_escapes; { char *ret, *r, *s; int c; r = ret = (char *)xmalloc (7 * strlen (seq) + 1); for (s = seq; *s; s++) { c = *s; if (META_CHAR (c)) { *r++ = '\\'; *r++ = 'M'; *r++ = '-'; c = UNMETA (c); } else if (c == ESC) { *r++ = '\\'; c = 'e'; } else if (CTRL_CHAR (c)) { *r++ = '\\'; if (use_escapes && _rl_isescape (c)) c = _rl_escchar (c); else { *r++ = 'C'; *r++ = '-'; c = _rl_to_lower (UNCTRL (c)); } } else if (c == RUBOUT) { *r++ = '\\'; *r++ = 'C'; *r++ = '-'; c = '?'; } if (c == ESC) { *r++ = '\\'; c = 'e'; } else if (c == '\\' || c == '"') *r++ = '\\'; *r++ = (unsigned char)c; } *r = '\0'; return ret; } /* Return a pointer to the function that STRING represents. If STRING doesn't have a matching function, then a NULL pointer is returned. */ rl_command_func_t * rl_named_function (string) const char *string; { register int i; rl_initialize_funmap (); for (i = 0; funmap[i]; i++) if (_rl_stricmp (funmap[i]->name, string) == 0) return (funmap[i]->function); return ((rl_command_func_t *)NULL); } /* Return the function (or macro) definition which would be invoked via KEYSEQ if executed in MAP. If MAP is NULL, then the current keymap is used. TYPE, if non-NULL, is a pointer to an int which will receive the type of the object pointed to. One of ISFUNC (function), ISKMAP (keymap), or ISMACR (macro). */ rl_command_func_t * rl_function_of_keyseq (keyseq, map, type) const char *keyseq; Keymap map; int *type; { register int i; if (map == 0) map = _rl_keymap; for (i = 0; keyseq && keyseq[i]; i++) { unsigned char ic = keyseq[i]; if (META_CHAR (ic) && _rl_convert_meta_chars_to_ascii) { if (map[ESC].type == ISKMAP) { map = FUNCTION_TO_KEYMAP (map, ESC); ic = UNMETA (ic); } /* XXX - should we just return NULL here, since this obviously doesn't match? */ else { if (type) *type = map[ESC].type; return (map[ESC].function); } } if (map[ic].type == ISKMAP) { /* If this is the last key in the key sequence, return the map. */ if (keyseq[i + 1] == '\0') { if (type) *type = ISKMAP; return (map[ic].function); } else map = FUNCTION_TO_KEYMAP (map, ic); } /* If we're not at the end of the key sequence, and the current key is bound to something other than a keymap, then the entire key sequence is not bound. */ else if (map[ic].type != ISKMAP && keyseq[i+1]) return ((rl_command_func_t *)NULL); else /* map[ic].type != ISKMAP && keyseq[i+1] == 0 */ { if (type) *type = map[ic].type; return (map[ic].function); } } return ((rl_command_func_t *) NULL); } /* The last key bindings file read. */ static char *last_readline_init_file = (char *)NULL; /* The file we're currently reading key bindings from. */ static const char *current_readline_init_file; static int current_readline_init_include_level; static int current_readline_init_lineno; /* Read FILENAME into a locally-allocated buffer and return the buffer. The size of the buffer is returned in *SIZEP. Returns NULL if any errors were encountered. */ static char * _rl_read_file (filename, sizep) char *filename; size_t *sizep; { struct stat finfo; size_t file_size; char *buffer; int i, file; if ((stat (filename, &finfo) < 0) || (file = open (filename, O_RDONLY, 0666)) < 0) return ((char *)NULL); file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { if (file >= 0) close (file); #if defined (EFBIG) errno = EFBIG; #endif return ((char *)NULL); } /* Read the file into BUFFER. */ buffer = (char *)xmalloc (file_size + 1); i = read (file, buffer, file_size); close (file); if (i < 0) { xfree (buffer); return ((char *)NULL); } RL_CHECK_SIGNALS (); buffer[i] = '\0'; if (sizep) *sizep = i; return (buffer); } /* Re-read the current keybindings file. */ int rl_re_read_init_file (count, ignore) int count, ignore; { int r; r = rl_read_init_file ((const char *)NULL); rl_set_keymap_from_edit_mode (); return r; } /* Do key bindings from a file. If FILENAME is NULL it defaults to the first non-null filename from this list: 1. the filename used for the previous call 2. the value of the shell variable `INPUTRC' 3. ~/.inputrc 4. /etc/inputrc If the file existed and could be opened and read, 0 is returned, otherwise errno is returned. */ int rl_read_init_file (filename) const char *filename; { /* Default the filename. */ if (filename == 0) filename = last_readline_init_file; if (filename == 0) filename = sh_get_env_value ("INPUTRC"); if (filename == 0 || *filename == 0) { filename = DEFAULT_INPUTRC; /* Try to read DEFAULT_INPUTRC; fall back to SYS_INPUTRC on failure */ if (_rl_read_init_file (filename, 0) == 0) return 0; filename = SYS_INPUTRC; } #if defined (__MSDOS__) if (_rl_read_init_file (filename, 0) == 0) return 0; filename = "~/_inputrc"; #endif return (_rl_read_init_file (filename, 0)); } static int _rl_read_init_file (filename, include_level) const char *filename; int include_level; { register int i; char *buffer, *openname, *line, *end; size_t file_size; current_readline_init_file = filename; current_readline_init_include_level = include_level; openname = tilde_expand (filename); buffer = _rl_read_file (openname, &file_size); xfree (openname); RL_CHECK_SIGNALS (); if (buffer == 0) return (errno); if (include_level == 0 && filename != last_readline_init_file) { FREE (last_readline_init_file); last_readline_init_file = savestring (filename); } currently_reading_init_file = 1; /* Loop over the lines in the file. Lines that start with `#' are comments; all other lines are commands for readline initialization. */ current_readline_init_lineno = 1; line = buffer; end = buffer + file_size; while (line < end) { /* Find the end of this line. */ for (i = 0; line + i != end && line[i] != '\n'; i++); #if defined (__CYGWIN__) /* ``Be liberal in what you accept.'' */ if (line[i] == '\n' && line[i-1] == '\r') line[i - 1] = '\0'; #endif /* Mark end of line. */ line[i] = '\0'; /* Skip leading whitespace. */ while (*line && whitespace (*line)) { line++; i--; } /* If the line is not a comment, then parse it. */ if (*line && *line != '#') rl_parse_and_bind (line); /* Move to the next line. */ line += i + 1; current_readline_init_lineno++; } xfree (buffer); currently_reading_init_file = 0; return (0); } static void #if defined (PREFER_STDARG) _rl_init_file_error (const char *format, ...) #else _rl_init_file_error (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif fprintf (stderr, "readline: "); if (currently_reading_init_file) fprintf (stderr, "%s: line %d: ", current_readline_init_file, current_readline_init_lineno); vfprintf (stderr, format, args); fprintf (stderr, "\n"); fflush (stderr); va_end (args); } /* **************************************************************** */ /* */ /* Parser Directives */ /* */ /* **************************************************************** */ typedef int _rl_parser_func_t PARAMS((char *)); /* Things that mean `Control'. */ const char * const _rl_possible_control_prefixes[] = { "Control-", "C-", "CTRL-", (const char *)NULL }; const char * const _rl_possible_meta_prefixes[] = { "Meta", "M-", (const char *)NULL }; /* Conditionals. */ /* Calling programs set this to have their argv[0]. */ const char *rl_readline_name = "other"; /* Stack of previous values of parsing_conditionalized_out. */ static unsigned char *if_stack = (unsigned char *)NULL; static int if_stack_depth; static int if_stack_size; /* Push _rl_parsing_conditionalized_out, and set parser state based on ARGS. */ static int parser_if (args) char *args; { register int i; /* Push parser state. */ if (if_stack_depth + 1 >= if_stack_size) { if (!if_stack) if_stack = (unsigned char *)xmalloc (if_stack_size = 20); else if_stack = (unsigned char *)xrealloc (if_stack, if_stack_size += 20); } if_stack[if_stack_depth++] = _rl_parsing_conditionalized_out; /* If parsing is turned off, then nothing can turn it back on except for finding the matching endif. In that case, return right now. */ if (_rl_parsing_conditionalized_out) return 0; /* Isolate first argument. */ for (i = 0; args[i] && !whitespace (args[i]); i++); if (args[i]) args[i++] = '\0'; /* Handle "$if term=foo" and "$if mode=emacs" constructs. If this isn't term=foo, or mode=emacs, then check to see if the first word in ARGS is the same as the value stored in rl_readline_name. */ if (rl_terminal_name && _rl_strnicmp (args, "term=", 5) == 0) { char *tem, *tname; /* Terminals like "aaa-60" are equivalent to "aaa". */ tname = savestring (rl_terminal_name); tem = strchr (tname, '-'); if (tem) *tem = '\0'; /* Test the `long' and `short' forms of the terminal name so that if someone has a `sun-cmd' and does not want to have bindings that will be executed if the terminal is a `sun', they can put `$if term=sun-cmd' into their .inputrc. */ _rl_parsing_conditionalized_out = _rl_stricmp (args + 5, tname) && _rl_stricmp (args + 5, rl_terminal_name); xfree (tname); } #if defined (VI_MODE) else if (_rl_strnicmp (args, "mode=", 5) == 0) { int mode; if (_rl_stricmp (args + 5, "emacs") == 0) mode = emacs_mode; else if (_rl_stricmp (args + 5, "vi") == 0) mode = vi_mode; else mode = no_mode; _rl_parsing_conditionalized_out = mode != rl_editing_mode; } #endif /* VI_MODE */ /* Check to see if the first word in ARGS is the same as the value stored in rl_readline_name. */ else if (_rl_stricmp (args, rl_readline_name) == 0) _rl_parsing_conditionalized_out = 0; else _rl_parsing_conditionalized_out = 1; return 0; } /* Invert the current parser state if there is anything on the stack. */ static int parser_else (args) char *args; { register int i; if (if_stack_depth == 0) { _rl_init_file_error ("$else found without matching $if"); return 0; } #if 0 /* Check the previous (n - 1) levels of the stack to make sure that we haven't previously turned off parsing. */ for (i = 0; i < if_stack_depth - 1; i++) #else /* Check the previous (n) levels of the stack to make sure that we haven't previously turned off parsing. */ for (i = 0; i < if_stack_depth; i++) #endif if (if_stack[i] == 1) return 0; /* Invert the state of parsing if at top level. */ _rl_parsing_conditionalized_out = !_rl_parsing_conditionalized_out; return 0; } /* Terminate a conditional, popping the value of _rl_parsing_conditionalized_out from the stack. */ static int parser_endif (args) char *args; { if (if_stack_depth) _rl_parsing_conditionalized_out = if_stack[--if_stack_depth]; else _rl_init_file_error ("$endif without matching $if"); return 0; } static int parser_include (args) char *args; { const char *old_init_file; char *e; int old_line_number, old_include_level, r; if (_rl_parsing_conditionalized_out) return (0); old_init_file = current_readline_init_file; old_line_number = current_readline_init_lineno; old_include_level = current_readline_init_include_level; e = strchr (args, '\n'); if (e) *e = '\0'; r = _rl_read_init_file ((const char *)args, old_include_level + 1); current_readline_init_file = old_init_file; current_readline_init_lineno = old_line_number; current_readline_init_include_level = old_include_level; return r; } /* Associate textual names with actual functions. */ static const struct { const char * const name; _rl_parser_func_t *function; } parser_directives [] = { { "if", parser_if }, { "endif", parser_endif }, { "else", parser_else }, { "include", parser_include }, { (char *)0x0, (_rl_parser_func_t *)0x0 } }; /* Handle a parser directive. STATEMENT is the line of the directive without any leading `$'. */ static int handle_parser_directive (statement) char *statement; { register int i; char *directive, *args; /* Isolate the actual directive. */ /* Skip whitespace. */ for (i = 0; whitespace (statement[i]); i++); directive = &statement[i]; for (; statement[i] && !whitespace (statement[i]); i++); if (statement[i]) statement[i++] = '\0'; for (; statement[i] && whitespace (statement[i]); i++); args = &statement[i]; /* Lookup the command, and act on it. */ for (i = 0; parser_directives[i].name; i++) if (_rl_stricmp (directive, parser_directives[i].name) == 0) { (*parser_directives[i].function) (args); return (0); } /* display an error message about the unknown parser directive */ _rl_init_file_error ("%s: unknown parser directive", directive); return (1); } /* Start at STRING[START] and look for DELIM. Return I where STRING[I] == DELIM or STRING[I] == 0. DELIM is usually a double quote. */ static int _rl_skip_to_delim (string, start, delim) char *string; int start, delim; { int i, c, passc; for (i = start,passc = 0; c = string[i]; i++) { if (passc) { passc = 0; if (c == 0) break; continue; } if (c == '\\') { passc = 1; continue; } if (c == delim) break; } return i; } /* Read the binding command from STRING and perform it. A key binding command looks like: Keyname: function-name\0, a variable binding command looks like: set variable value. A new-style keybinding looks like "\C-x\C-x": exchange-point-and-mark. */ int rl_parse_and_bind (string) char *string; { char *funname, *kname; register int c, i; int key, equivalency, foundmod, foundsep; while (string && whitespace (*string)) string++; if (string == 0 || *string == 0 || *string == '#') return 0; /* If this is a parser directive, act on it. */ if (*string == '$') { handle_parser_directive (&string[1]); return 0; } /* If we aren't supposed to be parsing right now, then we're done. */ if (_rl_parsing_conditionalized_out) return 0; i = 0; /* If this keyname is a complex key expression surrounded by quotes, advance to after the matching close quote. This code allows the backslash to quote characters in the key expression. */ if (*string == '"') { i = _rl_skip_to_delim (string, 1, '"'); /* If we didn't find a closing quote, abort the line. */ if (string[i] == '\0') { _rl_init_file_error ("%s: no closing `\"' in key binding", string); return 1; } else i++; /* skip past closing double quote */ } /* Advance to the colon (:) or whitespace which separates the two objects. */ for (; (c = string[i]) && c != ':' && c != ' ' && c != '\t'; i++ ); equivalency = (c == ':' && string[i + 1] == '='); foundsep = c != 0; /* Mark the end of the command (or keyname). */ if (string[i]) string[i++] = '\0'; /* If doing assignment, skip the '=' sign as well. */ if (equivalency) string[i++] = '\0'; /* If this is a command to set a variable, then do that. */ if (_rl_stricmp (string, "set") == 0) { char *var, *value, *e; int s; var = string + i; /* Make VAR point to start of variable name. */ while (*var && whitespace (*var)) var++; /* Make VALUE point to start of value string. */ value = var; while (*value && whitespace (*value) == 0) value++; if (*value) *value++ = '\0'; while (*value && whitespace (*value)) value++; /* Strip trailing whitespace from values of boolean variables. */ if (find_boolean_var (var) >= 0) { /* remove trailing whitespace */ remove_trailing: e = value + strlen (value) - 1; while (e >= value && whitespace (*e)) e--; e++; /* skip back to whitespace or EOS */ if (*e && e >= value) *e = '\0'; } else if ((i = find_string_var (var)) >= 0) { /* Allow quoted strings in variable values */ if (*value == '"') { i = _rl_skip_to_delim (value, 1, *value); value[i] = '\0'; value++; /* skip past the quote */ } else goto remove_trailing; } rl_variable_bind (var, value); return 0; } /* Skip any whitespace between keyname and funname. */ for (; string[i] && whitespace (string[i]); i++); funname = &string[i]; /* Now isolate funname. For straight function names just look for whitespace, since that will signify the end of the string. But this could be a macro definition. In that case, the string is quoted, so skip to the matching delimiter. We allow the backslash to quote the delimiter characters in the macro body. */ /* This code exists to allow whitespace in macro expansions, which would otherwise be gobbled up by the next `for' loop.*/ /* XXX - it may be desirable to allow backslash quoting only if " is the quoted string delimiter, like the shell. */ if (*funname == '\'' || *funname == '"') { i = _rl_skip_to_delim (string, i+1, *funname); if (string[i]) i++; } /* Advance to the end of the string. */ for (; string[i] && whitespace (string[i]) == 0; i++); /* No extra whitespace at the end of the string. */ string[i] = '\0'; /* Handle equivalency bindings here. Make the left-hand side be exactly whatever the right-hand evaluates to, including keymaps. */ if (equivalency) { return 0; } if (foundsep == 0) { _rl_init_file_error ("%s: no key sequence terminator", string); return 1; } /* If this is a new-style key-binding, then do the binding with rl_bind_keyseq (). Otherwise, let the older code deal with it. */ if (*string == '"') { char *seq; register int j, k, passc; seq = (char *)xmalloc (1 + strlen (string)); for (j = 1, k = passc = 0; string[j]; j++) { /* Allow backslash to quote characters, but leave them in place. This allows a string to end with a backslash quoting another backslash, or with a backslash quoting a double quote. The backslashes are left in place for rl_translate_keyseq (). */ if (passc || (string[j] == '\\')) { seq[k++] = string[j]; passc = !passc; continue; } if (string[j] == '"') break; seq[k++] = string[j]; } seq[k] = '\0'; /* Binding macro? */ if (*funname == '\'' || *funname == '"') { j = strlen (funname); /* Remove the delimiting quotes from each end of FUNNAME. */ if (j && funname[j - 1] == *funname) funname[j - 1] = '\0'; rl_macro_bind (seq, &funname[1], _rl_keymap); } else rl_bind_keyseq (seq, rl_named_function (funname)); xfree (seq); return 0; } /* Get the actual character we want to deal with. */ kname = strrchr (string, '-'); if (kname == 0) kname = string; else kname++; key = glean_key_from_name (kname); /* Add in control and meta bits. */ foundmod = 0; if (substring_member_of_array (string, _rl_possible_control_prefixes)) { key = CTRL (_rl_to_upper (key)); foundmod = 1; } if (substring_member_of_array (string, _rl_possible_meta_prefixes)) { key = META (key); foundmod = 1; } if (foundmod == 0 && kname != string) { _rl_init_file_error ("%s: unknown key modifier", string); return 1; } /* Temporary. Handle old-style keyname with macro-binding. */ if (*funname == '\'' || *funname == '"') { char useq[2]; int fl = strlen (funname); useq[0] = key; useq[1] = '\0'; if (fl && funname[fl - 1] == *funname) funname[fl - 1] = '\0'; rl_macro_bind (useq, &funname[1], _rl_keymap); } #if defined (PREFIX_META_HACK) /* Ugly, but working hack to keep prefix-meta around. */ else if (_rl_stricmp (funname, "prefix-meta") == 0) { char seq[2]; seq[0] = key; seq[1] = '\0'; rl_generic_bind (ISKMAP, seq, (char *)emacs_meta_keymap, _rl_keymap); } #endif /* PREFIX_META_HACK */ else rl_bind_key (key, rl_named_function (funname)); return 0; } /* Simple structure for boolean readline variables (i.e., those that can have one of two values; either "On" or 1 for truth, or "Off" or 0 for false. */ #define V_SPECIAL 0x1 static const struct { const char * const name; int *value; int flags; } boolean_varlist [] = { { "bind-tty-special-chars", &_rl_bind_stty_chars, 0 }, { "blink-matching-paren", &rl_blink_matching_paren, V_SPECIAL }, { "byte-oriented", &rl_byte_oriented, 0 }, #if defined (COLOR_SUPPORT) { "colored-completion-prefix",&_rl_colored_completion_prefix, 0 }, { "colored-stats", &_rl_colored_stats, 0 }, #endif { "completion-ignore-case", &_rl_completion_case_fold, 0 }, { "completion-map-case", &_rl_completion_case_map, 0 }, { "convert-meta", &_rl_convert_meta_chars_to_ascii, 0 }, { "disable-completion", &rl_inhibit_completion, 0 }, { "echo-control-characters", &_rl_echo_control_chars, 0 }, { "enable-bracketed-paste", &_rl_enable_bracketed_paste, 0 }, { "enable-keypad", &_rl_enable_keypad, 0 }, { "enable-meta-key", &_rl_enable_meta, 0 }, { "expand-tilde", &rl_complete_with_tilde_expansion, 0 }, { "history-preserve-point", &_rl_history_preserve_point, 0 }, { "horizontal-scroll-mode", &_rl_horizontal_scroll_mode, 0 }, { "input-meta", &_rl_meta_flag, 0 }, { "mark-directories", &_rl_complete_mark_directories, 0 }, { "mark-modified-lines", &_rl_mark_modified_lines, 0 }, { "mark-symlinked-directories", &_rl_complete_mark_symlink_dirs, 0 }, { "match-hidden-files", &_rl_match_hidden_files, 0 }, { "menu-complete-display-prefix", &_rl_menu_complete_prefix_first, 0 }, { "meta-flag", &_rl_meta_flag, 0 }, { "output-meta", &_rl_output_meta_chars, 0 }, { "page-completions", &_rl_page_completions, 0 }, { "prefer-visible-bell", &_rl_prefer_visible_bell, V_SPECIAL }, { "print-completions-horizontally", &_rl_print_completions_horizontally, 0 }, { "revert-all-at-newline", &_rl_revert_all_at_newline, 0 }, { "show-all-if-ambiguous", &_rl_complete_show_all, 0 }, { "show-all-if-unmodified", &_rl_complete_show_unmodified, 0 }, { "show-mode-in-prompt", &_rl_show_mode_in_prompt, 0 }, { "skip-completed-text", &_rl_skip_completed_text, 0 }, #if defined (VISIBLE_STATS) { "visible-stats", &rl_visible_stats, 0 }, #endif /* VISIBLE_STATS */ { (char *)NULL, (int *)NULL, 0 } }; static int find_boolean_var (name) const char *name; { register int i; for (i = 0; boolean_varlist[i].name; i++) if (_rl_stricmp (name, boolean_varlist[i].name) == 0) return i; return -1; } /* Hooks for handling special boolean variables, where a function needs to be called or another variable needs to be changed when they're changed. */ static void hack_special_boolean_var (i) int i; { const char *name; name = boolean_varlist[i].name; if (_rl_stricmp (name, "blink-matching-paren") == 0) _rl_enable_paren_matching (rl_blink_matching_paren); else if (_rl_stricmp (name, "prefer-visible-bell") == 0) { if (_rl_prefer_visible_bell) _rl_bell_preference = VISIBLE_BELL; else _rl_bell_preference = AUDIBLE_BELL; } else if (_rl_stricmp (name, "show-mode-in-prompt") == 0) _rl_reset_prompt (); } typedef int _rl_sv_func_t PARAMS((const char *)); /* These *must* correspond to the array indices for the appropriate string variable. (Though they're not used right now.) */ #define V_BELLSTYLE 0 #define V_COMBEGIN 1 #define V_EDITMODE 2 #define V_ISRCHTERM 3 #define V_KEYMAP 4 #define V_STRING 1 #define V_INT 2 /* Forward declarations */ static int sv_bell_style PARAMS((const char *)); static int sv_combegin PARAMS((const char *)); static int sv_dispprefix PARAMS((const char *)); static int sv_compquery PARAMS((const char *)); static int sv_compwidth PARAMS((const char *)); static int sv_editmode PARAMS((const char *)); static int sv_emacs_modestr PARAMS((const char *)); static int sv_histsize PARAMS((const char *)); static int sv_isrchterm PARAMS((const char *)); static int sv_keymap PARAMS((const char *)); static int sv_seqtimeout PARAMS((const char *)); static int sv_viins_modestr PARAMS((const char *)); static int sv_vicmd_modestr PARAMS((const char *)); static const struct { const char * const name; int flags; _rl_sv_func_t *set_func; } string_varlist[] = { { "bell-style", V_STRING, sv_bell_style }, { "comment-begin", V_STRING, sv_combegin }, { "completion-display-width", V_INT, sv_compwidth }, { "completion-prefix-display-length", V_INT, sv_dispprefix }, { "completion-query-items", V_INT, sv_compquery }, { "editing-mode", V_STRING, sv_editmode }, { "emacs-mode-string", V_STRING, sv_emacs_modestr }, { "history-size", V_INT, sv_histsize }, { "isearch-terminators", V_STRING, sv_isrchterm }, { "keymap", V_STRING, sv_keymap }, { "keyseq-timeout", V_INT, sv_seqtimeout }, { "vi-cmd-mode-string", V_STRING, sv_vicmd_modestr }, { "vi-ins-mode-string", V_STRING, sv_viins_modestr }, { (char *)NULL, 0, (_rl_sv_func_t *)0 } }; static int find_string_var (name) const char *name; { register int i; for (i = 0; string_varlist[i].name; i++) if (_rl_stricmp (name, string_varlist[i].name) == 0) return i; return -1; } /* A boolean value that can appear in a `set variable' command is true if the value is null or empty, `on' (case-insensitive), or "1". Any other values result in 0 (false). */ static int bool_to_int (value) const char *value; { return (value == 0 || *value == '\0' || (_rl_stricmp (value, "on") == 0) || (value[0] == '1' && value[1] == '\0')); } char * rl_variable_value (name) const char *name; { register int i; /* Check for simple variables first. */ i = find_boolean_var (name); if (i >= 0) return (*boolean_varlist[i].value ? "on" : "off"); i = find_string_var (name); if (i >= 0) return (_rl_get_string_variable_value (string_varlist[i].name)); /* Unknown variable names return NULL. */ return 0; } int rl_variable_bind (name, value) const char *name, *value; { register int i; int v; /* Check for simple variables first. */ i = find_boolean_var (name); if (i >= 0) { *boolean_varlist[i].value = bool_to_int (value); if (boolean_varlist[i].flags & V_SPECIAL) hack_special_boolean_var (i); return 0; } i = find_string_var (name); /* For the time being, string names without a handler function are simply ignored. */ if (i < 0 || string_varlist[i].set_func == 0) { if (i < 0) _rl_init_file_error ("%s: unknown variable name", name); return 0; } v = (*string_varlist[i].set_func) (value); return v; } static int sv_editmode (value) const char *value; { if (_rl_strnicmp (value, "vi", 2) == 0) { #if defined (VI_MODE) _rl_keymap = vi_insertion_keymap; rl_editing_mode = vi_mode; #endif /* VI_MODE */ return 0; } else if (_rl_strnicmp (value, "emacs", 5) == 0) { _rl_keymap = emacs_standard_keymap; rl_editing_mode = emacs_mode; return 0; } return 1; } static int sv_combegin (value) const char *value; { if (value && *value) { FREE (_rl_comment_begin); _rl_comment_begin = savestring (value); return 0; } return 1; } static int sv_dispprefix (value) const char *value; { int nval = 0; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } _rl_completion_prefix_display_length = nval; return 0; } static int sv_compquery (value) const char *value; { int nval = 100; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } rl_completion_query_items = nval; return 0; } static int sv_compwidth (value) const char *value; { int nval = -1; if (value && *value) nval = atoi (value); _rl_completion_columns = nval; return 0; } static int sv_histsize (value) const char *value; { int nval; nval = 500; if (value && *value) { nval = atoi (value); if (nval < 0) { unstifle_history (); return 0; } } stifle_history (nval); return 0; } static int sv_keymap (value) const char *value; { Keymap kmap; kmap = rl_get_keymap_by_name (value); if (kmap) { rl_set_keymap (kmap); return 0; } return 1; } static int sv_seqtimeout (value) const char *value; { int nval; nval = 0; if (value && *value) { nval = atoi (value); if (nval < 0) nval = 0; } _rl_keyseq_timeout = nval; return 0; } static int sv_bell_style (value) const char *value; { if (value == 0 || *value == '\0') _rl_bell_preference = AUDIBLE_BELL; else if (_rl_stricmp (value, "none") == 0 || _rl_stricmp (value, "off") == 0) _rl_bell_preference = NO_BELL; else if (_rl_stricmp (value, "audible") == 0 || _rl_stricmp (value, "on") == 0) _rl_bell_preference = AUDIBLE_BELL; else if (_rl_stricmp (value, "visible") == 0) _rl_bell_preference = VISIBLE_BELL; else return 1; return 0; } static int sv_isrchterm (value) const char *value; { int beg, end, delim; char *v; if (value == 0) return 1; /* Isolate the value and translate it into a character string. */ v = savestring (value); FREE (_rl_isearch_terminators); if (v[0] == '"' || v[0] == '\'') { delim = v[0]; for (beg = end = 1; v[end] && v[end] != delim; end++) ; } else { for (beg = end = 0; v[end] && whitespace (v[end]) == 0; end++) ; } v[end] = '\0'; /* The value starts at v + beg. Translate it into a character string. */ _rl_isearch_terminators = (char *)xmalloc (2 * strlen (v) + 1); rl_translate_keyseq (v + beg, _rl_isearch_terminators, &end); _rl_isearch_terminators[end] = '\0'; xfree (v); return 0; } extern char *_rl_emacs_mode_str; static int sv_emacs_modestr (value) const char *value; { if (value && *value) { FREE (_rl_emacs_mode_str); _rl_emacs_mode_str = (char *)xmalloc (2 * strlen (value) + 1); rl_translate_keyseq (value, _rl_emacs_mode_str, &_rl_emacs_modestr_len); _rl_emacs_mode_str[_rl_emacs_modestr_len] = '\0'; return 0; } else if (value) { FREE (_rl_emacs_mode_str); _rl_emacs_mode_str = (char *)xmalloc (1); _rl_emacs_mode_str[_rl_emacs_modestr_len = 0] = '\0'; return 0; } else if (value == 0) { FREE (_rl_emacs_mode_str); _rl_emacs_mode_str = 0; /* prompt_modestr does the right thing */ _rl_emacs_modestr_len = 0; return 0; } return 1; } static int sv_viins_modestr (value) const char *value; { if (value && *value) { FREE (_rl_vi_ins_mode_str); _rl_vi_ins_mode_str = (char *)xmalloc (2 * strlen (value) + 1); rl_translate_keyseq (value, _rl_vi_ins_mode_str, &_rl_vi_ins_modestr_len); _rl_vi_ins_mode_str[_rl_vi_ins_modestr_len] = '\0'; return 0; } else if (value) { FREE (_rl_vi_ins_mode_str); _rl_vi_ins_mode_str = (char *)xmalloc (1); _rl_vi_ins_mode_str[_rl_vi_ins_modestr_len = 0] = '\0'; return 0; } else if (value == 0) { FREE (_rl_vi_ins_mode_str); _rl_vi_ins_mode_str = 0; /* prompt_modestr does the right thing */ _rl_vi_ins_modestr_len = 0; return 0; } return 1; } static int sv_vicmd_modestr (value) const char *value; { if (value && *value) { FREE (_rl_vi_cmd_mode_str); _rl_vi_cmd_mode_str = (char *)xmalloc (2 * strlen (value) + 1); rl_translate_keyseq (value, _rl_vi_cmd_mode_str, &_rl_vi_cmd_modestr_len); _rl_vi_cmd_mode_str[_rl_vi_cmd_modestr_len] = '\0'; return 0; } else if (value) { FREE (_rl_vi_cmd_mode_str); _rl_vi_cmd_mode_str = (char *)xmalloc (1); _rl_vi_cmd_mode_str[_rl_vi_cmd_modestr_len = 0] = '\0'; return 0; } else if (value == 0) { FREE (_rl_vi_cmd_mode_str); _rl_vi_cmd_mode_str = 0; /* prompt_modestr does the right thing */ _rl_vi_cmd_modestr_len = 0; return 0; } return 1; } /* Return the character which matches NAME. For example, `Space' returns ' '. */ typedef struct { const char * const name; int value; } assoc_list; static const assoc_list name_key_alist[] = { { "DEL", 0x7f }, { "ESC", '\033' }, { "Escape", '\033' }, { "LFD", '\n' }, { "Newline", '\n' }, { "RET", '\r' }, { "Return", '\r' }, { "Rubout", 0x7f }, { "SPC", ' ' }, { "Space", ' ' }, { "Tab", 0x09 }, { (char *)0x0, 0 } }; static int glean_key_from_name (name) char *name; { register int i; for (i = 0; name_key_alist[i].name; i++) if (_rl_stricmp (name, name_key_alist[i].name) == 0) return (name_key_alist[i].value); return (*(unsigned char *)name); /* XXX was return (*name) */ } /* Auxiliary functions to manage keymaps. */ static const struct { const char * const name; Keymap map; } keymap_names[] = { { "emacs", emacs_standard_keymap }, { "emacs-standard", emacs_standard_keymap }, { "emacs-meta", emacs_meta_keymap }, { "emacs-ctlx", emacs_ctlx_keymap }, #if defined (VI_MODE) { "vi", vi_movement_keymap }, { "vi-move", vi_movement_keymap }, { "vi-command", vi_movement_keymap }, { "vi-insert", vi_insertion_keymap }, #endif /* VI_MODE */ { (char *)0x0, (Keymap)0x0 } }; Keymap rl_get_keymap_by_name (name) const char *name; { register int i; for (i = 0; keymap_names[i].name; i++) if (_rl_stricmp (name, keymap_names[i].name) == 0) return (keymap_names[i].map); return ((Keymap) NULL); } char * rl_get_keymap_name (map) Keymap map; { register int i; for (i = 0; keymap_names[i].name; i++) if (map == keymap_names[i].map) return ((char *)keymap_names[i].name); return ((char *)NULL); } void rl_set_keymap (map) Keymap map; { if (map) _rl_keymap = map; } Keymap rl_get_keymap () { return (_rl_keymap); } void rl_set_keymap_from_edit_mode () { if (rl_editing_mode == emacs_mode) _rl_keymap = emacs_standard_keymap; #if defined (VI_MODE) else if (rl_editing_mode == vi_mode) _rl_keymap = vi_insertion_keymap; #endif /* VI_MODE */ } char * rl_get_keymap_name_from_edit_mode () { if (rl_editing_mode == emacs_mode) return "emacs"; #if defined (VI_MODE) else if (rl_editing_mode == vi_mode) return "vi"; #endif /* VI_MODE */ else return "none"; } /* **************************************************************** */ /* */ /* Key Binding and Function Information */ /* */ /* **************************************************************** */ /* Each of the following functions produces information about the state of keybindings and functions known to Readline. The info is always printed to rl_outstream, and in such a way that it can be read back in (i.e., passed to rl_parse_and_bind ()). */ /* Print the names of functions known to Readline. */ void rl_list_funmap_names () { register int i; const char **funmap_names; funmap_names = rl_funmap_names (); if (!funmap_names) return; for (i = 0; funmap_names[i]; i++) fprintf (rl_outstream, "%s\n", funmap_names[i]); xfree (funmap_names); } static char * _rl_get_keyname (key) int key; { char *keyname; int i, c; keyname = (char *)xmalloc (8); c = key; /* Since this is going to be used to write out keysequence-function pairs for possible inclusion in an inputrc file, we don't want to do any special meta processing on KEY. */ #if 1 /* XXX - Experimental */ /* We might want to do this, but the old version of the code did not. */ /* If this is an escape character, we don't want to do any more processing. Just add the special ESC key sequence and return. */ if (c == ESC) { keyname[0] = '\\'; keyname[1] = 'e'; keyname[2] = '\0'; return keyname; } #endif /* RUBOUT is translated directly into \C-? */ if (key == RUBOUT) { keyname[0] = '\\'; keyname[1] = 'C'; keyname[2] = '-'; keyname[3] = '?'; keyname[4] = '\0'; return keyname; } i = 0; /* Now add special prefixes needed for control characters. This can potentially change C. */ if (CTRL_CHAR (c)) { keyname[i++] = '\\'; keyname[i++] = 'C'; keyname[i++] = '-'; c = _rl_to_lower (UNCTRL (c)); } /* XXX experimental code. Turn the characters that are not ASCII or ISO Latin 1 (128 - 159) into octal escape sequences (\200 - \237). This changes C. */ if (c >= 128 && c <= 159) { keyname[i++] = '\\'; keyname[i++] = '2'; c -= 128; keyname[i++] = (c / 8) + '0'; c = (c % 8) + '0'; } /* Now, if the character needs to be quoted with a backslash, do that. */ if (c == '\\' || c == '"') keyname[i++] = '\\'; /* Now add the key, terminate the string, and return it. */ keyname[i++] = (char) c; keyname[i] = '\0'; return keyname; } /* Return a NULL terminated array of strings which represent the key sequences that are used to invoke FUNCTION in MAP. */ char ** rl_invoking_keyseqs_in_map (function, map) rl_command_func_t *function; Keymap map; { register int key; char **result; int result_index, result_size; result = (char **)NULL; result_index = result_size = 0; for (key = 0; key < KEYMAP_SIZE; key++) { switch (map[key].type) { case ISMACR: /* Macros match, if, and only if, the pointers are identical. Thus, they are treated exactly like functions in here. */ case ISFUNC: /* If the function in the keymap is the one we are looking for, then add the current KEY to the list of invoking keys. */ if (map[key].function == function) { char *keyname; keyname = _rl_get_keyname (key); if (result_index + 2 > result_size) { result_size += 10; result = (char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index++] = keyname; result[result_index] = (char *)NULL; } break; case ISKMAP: { char **seqs; register int i; /* Find the list of keyseqs in this map which have FUNCTION as their target. Add the key sequences found to RESULT. */ if (map[key].function) seqs = rl_invoking_keyseqs_in_map (function, FUNCTION_TO_KEYMAP (map, key)); else break; if (seqs == 0) break; for (i = 0; seqs[i]; i++) { char *keyname = (char *)xmalloc (6 + strlen (seqs[i])); if (key == ESC) { /* If ESC is the meta prefix and we're converting chars with the eighth bit set to ESC-prefixed sequences, then we can use \M-. Otherwise we need to use the sequence for ESC. */ if (_rl_convert_meta_chars_to_ascii && map[ESC].type == ISKMAP) sprintf (keyname, "\\M-"); else sprintf (keyname, "\\e"); } else if (CTRL_CHAR (key)) sprintf (keyname, "\\C-%c", _rl_to_lower (UNCTRL (key))); else if (key == RUBOUT) sprintf (keyname, "\\C-?"); else if (key == '\\' || key == '"') { keyname[0] = '\\'; keyname[1] = (char) key; keyname[2] = '\0'; } else { keyname[0] = (char) key; keyname[1] = '\0'; } strcat (keyname, seqs[i]); xfree (seqs[i]); if (result_index + 2 > result_size) { result_size += 10; result = (char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index++] = keyname; result[result_index] = (char *)NULL; } xfree (seqs); } break; } } return (result); } /* Return a NULL terminated array of strings which represent the key sequences that can be used to invoke FUNCTION using the current keymap. */ char ** rl_invoking_keyseqs (function) rl_command_func_t *function; { return (rl_invoking_keyseqs_in_map (function, _rl_keymap)); } /* Print all of the functions and their bindings to rl_outstream. If PRINT_READABLY is non-zero, then print the output in such a way that it can be read back in. */ void rl_function_dumper (print_readably) int print_readably; { register int i; const char **names; const char *name; names = rl_funmap_names (); fprintf (rl_outstream, "\n"); for (i = 0; name = names[i]; i++) { rl_command_func_t *function; char **invokers; function = rl_named_function (name); invokers = rl_invoking_keyseqs_in_map (function, _rl_keymap); if (print_readably) { if (!invokers) fprintf (rl_outstream, "# %s (not bound)\n", name); else { register int j; for (j = 0; invokers[j]; j++) { fprintf (rl_outstream, "\"%s\": %s\n", invokers[j], name); xfree (invokers[j]); } xfree (invokers); } } else { if (!invokers) fprintf (rl_outstream, "%s is not bound to any keys\n", name); else { register int j; fprintf (rl_outstream, "%s can be found on ", name); for (j = 0; invokers[j] && j < 5; j++) { fprintf (rl_outstream, "\"%s\"%s", invokers[j], invokers[j + 1] ? ", " : ".\n"); } if (j == 5 && invokers[j]) fprintf (rl_outstream, "...\n"); for (j = 0; invokers[j]; j++) xfree (invokers[j]); xfree (invokers); } } } xfree (names); } /* Print all of the current functions and their bindings to rl_outstream. If an explicit argument is given, then print the output in such a way that it can be read back in. */ int rl_dump_functions (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_function_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } static void _rl_macro_dumper_internal (print_readably, map, prefix) int print_readably; Keymap map; char *prefix; { register int key; char *keyname, *out; int prefix_len; for (key = 0; key < KEYMAP_SIZE; key++) { switch (map[key].type) { case ISMACR: keyname = _rl_get_keyname (key); out = _rl_untranslate_macro_value ((char *)map[key].function, 0); if (print_readably) fprintf (rl_outstream, "\"%s%s\": \"%s\"\n", prefix ? prefix : "", keyname, out ? out : ""); else fprintf (rl_outstream, "%s%s outputs %s\n", prefix ? prefix : "", keyname, out ? out : ""); xfree (keyname); xfree (out); break; case ISFUNC: break; case ISKMAP: prefix_len = prefix ? strlen (prefix) : 0; if (key == ESC) { keyname = (char *)xmalloc (3 + prefix_len); if (prefix) strcpy (keyname, prefix); keyname[prefix_len] = '\\'; keyname[prefix_len + 1] = 'e'; keyname[prefix_len + 2] = '\0'; } else { keyname = _rl_get_keyname (key); if (prefix) { out = (char *)xmalloc (strlen (keyname) + prefix_len + 1); strcpy (out, prefix); strcpy (out + prefix_len, keyname); xfree (keyname); keyname = out; } } _rl_macro_dumper_internal (print_readably, FUNCTION_TO_KEYMAP (map, key), keyname); xfree (keyname); break; } } } void rl_macro_dumper (print_readably) int print_readably; { _rl_macro_dumper_internal (print_readably, _rl_keymap, (char *)NULL); } int rl_dump_macros (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_macro_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } static char * _rl_get_string_variable_value (name) const char *name; { static char numbuf[32]; char *ret; if (_rl_stricmp (name, "bell-style") == 0) { switch (_rl_bell_preference) { case NO_BELL: return "none"; case VISIBLE_BELL: return "visible"; case AUDIBLE_BELL: default: return "audible"; } } else if (_rl_stricmp (name, "comment-begin") == 0) return (_rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT); else if (_rl_stricmp (name, "completion-display-width") == 0) { sprintf (numbuf, "%d", _rl_completion_columns); return (numbuf); } else if (_rl_stricmp (name, "completion-prefix-display-length") == 0) { sprintf (numbuf, "%d", _rl_completion_prefix_display_length); return (numbuf); } else if (_rl_stricmp (name, "completion-query-items") == 0) { sprintf (numbuf, "%d", rl_completion_query_items); return (numbuf); } else if (_rl_stricmp (name, "editing-mode") == 0) return (rl_get_keymap_name_from_edit_mode ()); else if (_rl_stricmp (name, "history-size") == 0) { sprintf (numbuf, "%d", history_is_stifled() ? history_max_entries : 0); return (numbuf); } else if (_rl_stricmp (name, "isearch-terminators") == 0) { if (_rl_isearch_terminators == 0) return 0; ret = _rl_untranslate_macro_value (_rl_isearch_terminators, 0); if (ret) { strncpy (numbuf, ret, sizeof (numbuf) - 1); xfree (ret); numbuf[sizeof(numbuf) - 1] = '\0'; } else numbuf[0] = '\0'; return numbuf; } else if (_rl_stricmp (name, "keymap") == 0) { ret = rl_get_keymap_name (_rl_keymap); if (ret == 0) ret = rl_get_keymap_name_from_edit_mode (); return (ret ? ret : "none"); } else if (_rl_stricmp (name, "keyseq-timeout") == 0) { sprintf (numbuf, "%d", _rl_keyseq_timeout); return (numbuf); } else if (_rl_stricmp (name, "emacs-mode-string") == 0) return (_rl_emacs_mode_str ? _rl_emacs_mode_str : RL_EMACS_MODESTR_DEFAULT); else if (_rl_stricmp (name, "vi-cmd-mode-string") == 0) return (_rl_vi_cmd_mode_str ? _rl_vi_cmd_mode_str : RL_VI_CMD_MODESTR_DEFAULT); else if (_rl_stricmp (name, "vi-ins-mode-string") == 0) return (_rl_vi_ins_mode_str ? _rl_vi_ins_mode_str : RL_VI_INS_MODESTR_DEFAULT); else return (0); } void rl_variable_dumper (print_readably) int print_readably; { int i; char *v; for (i = 0; boolean_varlist[i].name; i++) { if (print_readably) fprintf (rl_outstream, "set %s %s\n", boolean_varlist[i].name, *boolean_varlist[i].value ? "on" : "off"); else fprintf (rl_outstream, "%s is set to `%s'\n", boolean_varlist[i].name, *boolean_varlist[i].value ? "on" : "off"); } for (i = 0; string_varlist[i].name; i++) { v = _rl_get_string_variable_value (string_varlist[i].name); if (v == 0) /* _rl_isearch_terminators can be NULL */ continue; if (print_readably) fprintf (rl_outstream, "set %s %s\n", string_varlist[i].name, v); else fprintf (rl_outstream, "%s is set to `%s'\n", string_varlist[i].name, v); } } /* Print all of the current variables and their values to rl_outstream. If an explicit argument is given, then print the output in such a way that it can be read back in. */ int rl_dump_variables (count, key) int count, key; { if (rl_dispatching) fprintf (rl_outstream, "\r\n"); rl_variable_dumper (rl_explicit_arg); rl_on_new_line (); return (0); } /* Return non-zero if any members of ARRAY are a substring in STRING. */ static int substring_member_of_array (string, array) const char *string; const char * const *array; { while (*array) { if (_rl_strindex (string, *array)) return (1); array++; } return (0); } readline-7.0/callback.c000664 000436 000120 00000024052 12742763700 015123 0ustar00chetadmin000000 000000 /* callback.c -- functions to use readline as an X `callback' mechanism. */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include "rlconf.h" #if defined (READLINE_CALLBACKS) #include #ifdef HAVE_STDLIB_H # include #else # include "ansi_stdlib.h" #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" /* Private data for callback registration functions. See comments in rl_callback_read_char for more details. */ _rl_callback_func_t *_rl_callback_func = 0; _rl_callback_generic_arg *_rl_callback_data = 0; /* Applications can set this to non-zero to have readline's signal handlers installed during the entire duration of reading a complete line, as in readline-6.2. This should be used with care, because it can result in readline receiving signals and not handling them until it's called again via rl_callback_read_char, thereby stealing them from the application. By default, signal handlers are only active while readline is active. */ int rl_persistent_signal_handlers = 0; /* **************************************************************** */ /* */ /* Callback Readline Functions */ /* */ /* **************************************************************** */ /* Allow using readline in situations where a program may have multiple things to handle at once, and dispatches them via select(). Call rl_callback_handler_install() with the prompt and a function to call whenever a complete line of input is ready. The user must then call rl_callback_read_char() every time some input is available, and rl_callback_read_char() will call the user's function with the complete text read in at each end of line. The terminal is kept prepped all the time, except during calls to the user's function. Signal handlers are only installed when the application calls back into readline, so readline doesn't `steal' signals from the application. */ rl_vcpfunc_t *rl_linefunc; /* user callback function */ static int in_handler; /* terminal_prepped and signals set? */ /* Make sure the terminal is set up, initialize readline, and prompt. */ static void _rl_callback_newline () { rl_initialize (); if (in_handler == 0) { in_handler = 1; if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); #if defined (HANDLE_SIGNALS) if (rl_persistent_signal_handlers) rl_set_signals (); #endif } readline_internal_setup (); RL_CHECK_SIGNALS (); } /* Install a readline handler, set up the terminal, and issue the prompt. */ void rl_callback_handler_install (prompt, linefunc) const char *prompt; rl_vcpfunc_t *linefunc; { rl_set_prompt (prompt); RL_SETSTATE (RL_STATE_CALLBACK); rl_linefunc = linefunc; _rl_callback_newline (); } #if defined (HANDLE_SIGNALS) #define CALLBACK_READ_RETURN() \ do { \ if (rl_persistent_signal_handlers == 0) \ rl_clear_signals (); \ return; \ } while (0) #else #define CALLBACK_READ_RETURN() return #endif /* Read one character, and dispatch to the handler if it ends the line. */ void rl_callback_read_char () { char *line; int eof, jcode; static procenv_t olevel; if (rl_linefunc == NULL) { _rl_errmsg ("readline_callback_read_char() called with no handler!"); abort (); } memcpy ((void *)olevel, (void *)_rl_top_level, sizeof (procenv_t)); #if defined (HAVE_POSIX_SIGSETJMP) jcode = sigsetjmp (_rl_top_level, 0); #else jcode = setjmp (_rl_top_level); #endif if (jcode) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; memcpy ((void *)_rl_top_level, (void *)olevel, sizeof (procenv_t)); CALLBACK_READ_RETURN (); } #if defined (HANDLE_SIGNALS) /* Install signal handlers only when readline has control. */ if (rl_persistent_signal_handlers == 0) rl_set_signals (); #endif do { RL_CHECK_SIGNALS (); if (RL_ISSTATE (RL_STATE_ISEARCH)) { eof = _rl_isearch_callback (_rl_iscxt); if (eof == 0 && (RL_ISSTATE (RL_STATE_ISEARCH) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) rl_callback_read_char (); CALLBACK_READ_RETURN (); } else if (RL_ISSTATE (RL_STATE_NSEARCH)) { eof = _rl_nsearch_callback (_rl_nscxt); CALLBACK_READ_RETURN (); } #if defined (VI_MODE) /* States that can occur while in state VIMOTION have to be checked before RL_STATE_VIMOTION */ else if (RL_ISSTATE (RL_STATE_CHARSEARCH)) { int k; k = _rl_callback_data->i2; eof = (*_rl_callback_func) (_rl_callback_data); /* If the function `deregisters' itself, make sure the data is cleaned up. */ if (_rl_callback_func == 0) /* XXX - just sanity check */ { if (_rl_callback_data) { _rl_callback_data_dispose (_rl_callback_data); _rl_callback_data = 0; } } /* Messy case where vi motion command can be char search */ if (RL_ISSTATE (RL_STATE_VIMOTION)) { _rl_vi_domove_motion_cleanup (k, _rl_vimvcxt); _rl_internal_char_cleanup (); CALLBACK_READ_RETURN (); } _rl_internal_char_cleanup (); } else if (RL_ISSTATE (RL_STATE_VIMOTION)) { eof = _rl_vi_domove_callback (_rl_vimvcxt); /* Should handle everything, including cleanup, numeric arguments, and turning off RL_STATE_VIMOTION */ if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) _rl_internal_char_cleanup (); CALLBACK_READ_RETURN (); } #endif else if (RL_ISSTATE (RL_STATE_NUMERICARG)) { eof = _rl_arg_callback (_rl_argcxt); if (eof == 0 && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) && RL_ISSTATE (RL_STATE_INPUTPENDING)) rl_callback_read_char (); /* XXX - this should handle _rl_last_command_was_kill better */ else if (RL_ISSTATE (RL_STATE_NUMERICARG) == 0) _rl_internal_char_cleanup (); CALLBACK_READ_RETURN (); } else if (RL_ISSTATE (RL_STATE_MULTIKEY)) { eof = _rl_dispatch_callback (_rl_kscxt); /* For now */ while ((eof == -1 || eof == -2) && RL_ISSTATE (RL_STATE_MULTIKEY) && _rl_kscxt && (_rl_kscxt->flags & KSEQ_DISPATCHED)) eof = _rl_dispatch_callback (_rl_kscxt); if (RL_ISSTATE (RL_STATE_MULTIKEY) == 0) { _rl_internal_char_cleanup (); _rl_want_redisplay = 1; } } else if (_rl_callback_func) { /* This allows functions that simply need to read an additional character (like quoted-insert) to register a function to be called when input is available. _rl_callback_data is a pointer to a struct that has the argument count originally passed to the registering function and space for any additional parameters. */ eof = (*_rl_callback_func) (_rl_callback_data); /* If the function `deregisters' itself, make sure the data is cleaned up. */ if (_rl_callback_func == 0) { if (_rl_callback_data) { _rl_callback_data_dispose (_rl_callback_data); _rl_callback_data = 0; } _rl_internal_char_cleanup (); } } else eof = readline_internal_char (); RL_CHECK_SIGNALS (); if (rl_done == 0 && _rl_want_redisplay) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; } if (rl_done) { line = readline_internal_teardown (eof); if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif in_handler = 0; (*rl_linefunc) (line); /* If the user did not clear out the line, do it for him. */ if (rl_line_buffer[0]) _rl_init_line_state (); /* Redisplay the prompt if readline_handler_{install,remove} not called. */ if (in_handler == 0 && rl_linefunc) _rl_callback_newline (); } } while (rl_pending_input || _rl_pushed_input_available () || RL_ISSTATE (RL_STATE_MACROINPUT)); CALLBACK_READ_RETURN (); } /* Remove the handler, and make sure the terminal is in its normal state. */ void rl_callback_handler_remove () { rl_linefunc = NULL; RL_UNSETSTATE (RL_STATE_CALLBACK); RL_CHECK_SIGNALS (); if (in_handler) { in_handler = 0; if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif } } _rl_callback_generic_arg * _rl_callback_data_alloc (count) int count; { _rl_callback_generic_arg *arg; arg = (_rl_callback_generic_arg *)xmalloc (sizeof (_rl_callback_generic_arg)); arg->count = count; arg->i1 = arg->i2 = 0; return arg; } void _rl_callback_data_dispose (arg) _rl_callback_generic_arg *arg; { xfree (arg); } /* Make sure that this agrees with cases in rl_callback_read_char */ void rl_callback_sigcleanup () { if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) return; if (RL_ISSTATE (RL_STATE_ISEARCH)) _rl_isearch_cleanup (_rl_iscxt, 0); else if (RL_ISSTATE (RL_STATE_NSEARCH)) _rl_nsearch_cleanup (_rl_nscxt, 0); else if (RL_ISSTATE (RL_STATE_VIMOTION)) RL_UNSETSTATE (RL_STATE_VIMOTION); else if (RL_ISSTATE (RL_STATE_NUMERICARG)) { _rl_argcxt = 0; RL_UNSETSTATE (RL_STATE_NUMERICARG); } else if (RL_ISSTATE (RL_STATE_MULTIKEY)) RL_UNSETSTATE (RL_STATE_MULTIKEY); if (RL_ISSTATE (RL_STATE_CHARSEARCH)) RL_UNSETSTATE (RL_STATE_CHARSEARCH); _rl_callback_func = 0; } #endif readline-7.0/colors.c000644 000436 000024 00000017104 12651440530 014674 0ustar00chetstaff000000 000000 /* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012, 2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 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, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include "rlconf.h" #include #include "posixstat.h" // stat related macros (S_ISREG, ...) #include // S_ISUID // strlen() #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ // abort() #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "readline.h" #include "rldefs.h" #ifdef COLOR_SUPPORT #include "xmalloc.h" #include "colors.h" static bool is_colored (enum indicator_no type); static void restore_default_color (void); COLOR_EXT_TYPE *_rl_color_ext_list = 0; /* Output a color indicator (which may contain nulls). */ void _rl_put_indicator (const struct bin_str *ind) { fwrite (ind->string, ind->len, 1, rl_outstream); } static bool is_colored (enum indicator_no colored_filetype) { size_t len = _rl_color_indicator[colored_filetype].len; char const *s = _rl_color_indicator[colored_filetype].string; return ! (len == 0 || (len == 1 && strncmp (s, "0", 1) == 0) || (len == 2 && strncmp (s, "00", 2) == 0)); } static void restore_default_color (void) { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } void _rl_set_normal_color (void) { if (is_colored (C_NORM)) { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_NORM]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } } bool _rl_print_prefix_color (void) { struct bin_str *s; /* What do we want to use for the prefix? Let's try cyan first, see colors.h */ s = &_rl_color_indicator[C_PREFIX]; if (s->string != NULL) { if (is_colored (C_NORM)) restore_default_color (); _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (s); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); return 0; } else return 1; } /* Returns whether any color sequence was printed. */ bool _rl_print_color_indicator (const char *f) { enum indicator_no colored_filetype; COLOR_EXT_TYPE *ext; /* Color extension */ size_t len; /* Length of name */ const char* name; char *filename; struct stat astat, linkstat; mode_t mode; int linkok; /* 1 == ok, 0 == dangling symlink, -1 == missing */ int stat_ok; name = f; /* This should already have undergone tilde expansion */ filename = 0; if (rl_filename_stat_hook) { filename = savestring (f); (*rl_filename_stat_hook) (&filename); name = filename; } #if defined (HAVE_LSTAT) stat_ok = lstat(name, &astat); #else stat_ok = stat(name, &astat); #endif if (stat_ok == 0) { mode = astat.st_mode; #if defined (HAVE_LSTAT) if (S_ISLNK (mode)) { linkok = stat (name, &linkstat) == 0; if (linkok && strncmp (_rl_color_indicator[C_LINK].string, "target", 6) == 0) mode = linkstat.st_mode; } else #endif linkok = 1; } else linkok = -1; /* Is this a nonexistent file? If so, linkok == -1. */ if (linkok == -1 && _rl_color_indicator[C_MISSING].string != NULL) colored_filetype = C_MISSING; else if (linkok == 0 && S_ISLNK(mode) && _rl_color_indicator[C_ORPHAN].string != NULL) colored_filetype = C_ORPHAN; /* dangling symlink */ else if(stat_ok != 0) { static enum indicator_no filetype_indicator[] = FILETYPE_INDICATORS; colored_filetype = filetype_indicator[normal]; //f->filetype]; } else { if (S_ISREG (mode)) { colored_filetype = C_FILE; if ((mode & S_ISUID) != 0 && is_colored (C_SETUID)) colored_filetype = C_SETUID; else if ((mode & S_ISGID) != 0 && is_colored (C_SETGID)) colored_filetype = C_SETGID; else if (is_colored (C_CAP) && 0) //f->has_capability) colored_filetype = C_CAP; else if ((mode & S_IXUGO) != 0 && is_colored (C_EXEC)) colored_filetype = C_EXEC; else if ((1 < astat.st_nlink) && is_colored (C_MULTIHARDLINK)) colored_filetype = C_MULTIHARDLINK; } else if (S_ISDIR (mode)) { colored_filetype = C_DIR; #if defined (S_ISVTX) if ((mode & S_ISVTX) && (mode & S_IWOTH) && is_colored (C_STICKY_OTHER_WRITABLE)) colored_filetype = C_STICKY_OTHER_WRITABLE; else #endif if ((mode & S_IWOTH) != 0 && is_colored (C_OTHER_WRITABLE)) colored_filetype = C_OTHER_WRITABLE; #if defined (S_ISVTX) else if ((mode & S_ISVTX) != 0 && is_colored (C_STICKY)) colored_filetype = C_STICKY; #endif } else if (S_ISLNK (mode)) colored_filetype = C_LINK; else if (S_ISFIFO (mode)) colored_filetype = C_FIFO; else if (S_ISSOCK (mode)) colored_filetype = C_SOCK; else if (S_ISBLK (mode)) colored_filetype = C_BLK; else if (S_ISCHR (mode)) colored_filetype = C_CHR; else { /* Classify a file of some other type as C_ORPHAN. */ colored_filetype = C_ORPHAN; } } /* Check the file's suffix only if still classified as C_FILE. */ ext = NULL; if (colored_filetype == C_FILE) { /* Test if NAME has a recognized suffix. */ len = strlen (name); name += len; /* Pointer to final \0. */ for (ext = _rl_color_ext_list; ext != NULL; ext = ext->next) { if (ext->ext.len <= len && strncmp (name - ext->ext.len, ext->ext.string, ext->ext.len) == 0) break; } } free (filename); /* NULL or savestring return value */ { const struct bin_str *const s = ext ? &(ext->seq) : &_rl_color_indicator[colored_filetype]; if (s->string != NULL) { /* Need to reset so not dealing with attribute combinations */ if (is_colored (C_NORM)) restore_default_color (); _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (s); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); return 0; } else return 1; } } void _rl_prep_non_filename_text (void) { if (_rl_color_indicator[C_END].string != NULL) _rl_put_indicator (&_rl_color_indicator[C_END]); else { _rl_put_indicator (&_rl_color_indicator[C_LEFT]); _rl_put_indicator (&_rl_color_indicator[C_RESET]); _rl_put_indicator (&_rl_color_indicator[C_RIGHT]); } } #endif /* COLOR_SUPPORT */ readline-7.0/compat.c000664 000436 000000 00000004555 11130207320 014646 0ustar00chetwheel000000 000000 /* compat.c -- backwards compatibility functions. */ /* Copyright (C) 2000-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "rlstdc.h" #include "rltypedefs.h" extern void rl_free_undo_list PARAMS((void)); extern int rl_maybe_save_line PARAMS((void)); extern int rl_maybe_unsave_line PARAMS((void)); extern int rl_maybe_replace_line PARAMS((void)); extern int rl_crlf PARAMS((void)); extern int rl_ding PARAMS((void)); extern int rl_alphabetic PARAMS((int)); extern char **rl_completion_matches PARAMS((const char *, rl_compentry_func_t *)); extern char *rl_username_completion_function PARAMS((const char *, int)); extern char *rl_filename_completion_function PARAMS((const char *, int)); /* Provide backwards-compatible entry points for old function names. */ void free_undo_list () { rl_free_undo_list (); } int maybe_replace_line () { return rl_maybe_replace_line (); } int maybe_save_line () { return rl_maybe_save_line (); } int maybe_unsave_line () { return rl_maybe_unsave_line (); } int ding () { return rl_ding (); } int crlf () { return rl_crlf (); } int alphabetic (c) int c; { return rl_alphabetic (c); } char ** completion_matches (s, f) const char *s; rl_compentry_func_t *f; { return rl_completion_matches (s, f); } char * username_completion_function (s, i) const char *s; int i; { return rl_username_completion_function (s, i); } char * filename_completion_function (s, i) const char *s; int i; { return rl_filename_completion_function (s, i); } readline-7.0/complete.c000644 000436 000120 00000255774 12707254464 015221 0ustar00chetadmin000000 000000 /* complete.c -- filename completion for readline. */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_SYS_FILE_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include #if !defined (errno) extern int errno; #endif /* !errno */ #if defined (HAVE_PWD_H) #include #endif #include "posixdir.h" #include "posixstat.h" /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "xmalloc.h" #include "rlprivate.h" #if defined (COLOR_SUPPORT) # include "colors.h" #endif #ifdef __STDC__ typedef int QSFUNC (const void *, const void *); #else typedef int QSFUNC (); #endif #ifdef HAVE_LSTAT # define LSTAT lstat #else # define LSTAT stat #endif /* Unix version of a hidden file. Could be different on other systems. */ #define HIDDEN_FILE(fname) ((fname)[0] == '.') /* Most systems don't declare getpwent in if _POSIX_SOURCE is defined. */ #if defined (HAVE_GETPWENT) && (!defined (HAVE_GETPW_DECLS) || defined (_POSIX_SOURCE)) extern struct passwd *getpwent PARAMS((void)); #endif /* HAVE_GETPWENT && (!HAVE_GETPW_DECLS || _POSIX_SOURCE) */ /* If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called instead of actually doing the display. It takes three arguments: (char **matches, int num_matches, int max_length) where MATCHES is the array of strings that matched, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. */ rl_compdisp_func_t *rl_completion_display_matches_hook = (rl_compdisp_func_t *)NULL; #if defined (VISIBLE_STATS) || defined (COLOR_SUPPORT) # if !defined (X_OK) # define X_OK 1 # endif #endif #if defined (VISIBLE_STATS) static int stat_char PARAMS((char *)); #endif #if defined (COLOR_SUPPORT) static int colored_stat_start PARAMS((const char *)); static void colored_stat_end PARAMS((void)); static int colored_prefix_start PARAMS((void)); static void colored_prefix_end PARAMS((void)); #endif static int path_isdir PARAMS((const char *)); static char *rl_quote_filename PARAMS((char *, int, char *)); static void _rl_complete_sigcleanup PARAMS((int, void *)); static void set_completion_defaults PARAMS((int)); static int get_y_or_n PARAMS((int)); static int _rl_internal_pager PARAMS((int)); static char *printable_part PARAMS((char *)); static int fnwidth PARAMS((const char *)); static int fnprint PARAMS((const char *, int, const char *)); static int print_filename PARAMS((char *, char *, int)); static char **gen_completion_matches PARAMS((char *, int, int, rl_compentry_func_t *, int, int)); static char **remove_duplicate_matches PARAMS((char **)); static void insert_match PARAMS((char *, int, int, char *)); static int append_to_match PARAMS((char *, int, int, int)); static void insert_all_matches PARAMS((char **, int, char *)); static int complete_fncmp PARAMS((const char *, int, const char *, int)); static void display_matches PARAMS((char **)); static int compute_lcd_of_matches PARAMS((char **, int, const char *)); static int postprocess_matches PARAMS((char ***, int)); static int complete_get_screenwidth PARAMS((void)); static char *make_quoted_replacement PARAMS((char *, int, char *)); /* **************************************************************** */ /* */ /* Completion matching, from readline's point of view. */ /* */ /* **************************************************************** */ /* Variables known only to the readline library. */ /* If non-zero, non-unique completions always show the list of matches. */ int _rl_complete_show_all = 0; /* If non-zero, non-unique completions show the list of matches, unless it is not possible to do partial completion and modify the line. */ int _rl_complete_show_unmodified = 0; /* If non-zero, completed directory names have a slash appended. */ int _rl_complete_mark_directories = 1; /* If non-zero, the symlinked directory completion behavior introduced in readline-4.2a is disabled, and symlinks that point to directories have a slash appended (subject to the value of _rl_complete_mark_directories). This is user-settable via the mark-symlinked-directories variable. */ int _rl_complete_mark_symlink_dirs = 0; /* If non-zero, completions are printed horizontally in alphabetical order, like `ls -x'. */ int _rl_print_completions_horizontally; /* Non-zero means that case is not significant in filename completion. */ #if (defined (__MSDOS__) && !defined (__DJGPP__)) || (defined (_WIN32) && !defined (__CYGWIN__)) int _rl_completion_case_fold = 1; #else int _rl_completion_case_fold = 0; #endif /* Non-zero means that `-' and `_' are equivalent when comparing filenames for completion. */ int _rl_completion_case_map = 0; /* If zero, don't match hidden files (filenames beginning with a `.' on Unix) when doing filename completion. */ int _rl_match_hidden_files = 1; /* Length in characters of a common prefix replaced with an ellipsis (`...') when displaying completion matches. Matches whose printable portion has more than this number of displaying characters in common will have the common display prefix replaced with an ellipsis. */ int _rl_completion_prefix_display_length = 0; /* The readline-private number of screen columns to use when displaying matches. If < 0 or > _rl_screenwidth, it is ignored. */ int _rl_completion_columns = -1; /* Global variables available to applications using readline. */ #if defined (VISIBLE_STATS) /* Non-zero means add an additional character to each filename displayed during listing completion iff rl_filename_completion_desired which helps to indicate the type of file being listed. */ int rl_visible_stats = 0; #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) /* Non-zero means to use colors to indicate file type when listing possible completions. The colors used are taken from $LS_COLORS, if set. */ int _rl_colored_stats = 0; /* Non-zero means to use a color (currently magenta) to indicate the common prefix of a set of possible word completions. */ int _rl_colored_completion_prefix = 0; #endif /* If non-zero, when completing in the middle of a word, don't insert characters from the match that match characters following point in the word. This means, for instance, completing when the cursor is after the `e' in `Makefile' won't result in `Makefilefile'. */ int _rl_skip_completed_text = 0; /* If non-zero, menu completion displays the common prefix first in the cycle of possible completions instead of the last. */ int _rl_menu_complete_prefix_first = 0; /* If non-zero, then this is the address of a function to call when completing on a directory name. The function is called with the address of a string (the current directory name) as an arg. */ rl_icppfunc_t *rl_directory_completion_hook = (rl_icppfunc_t *)NULL; rl_icppfunc_t *rl_directory_rewrite_hook = (rl_icppfunc_t *)NULL; rl_icppfunc_t *rl_filename_stat_hook = (rl_icppfunc_t *)NULL; /* If non-zero, this is the address of a function to call when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should either return its first argument (if no conversion takes place) or newly-allocated memory. This can, for instance, convert filenames between character sets for comparison against what's typed at the keyboard. The returned value is what is added to the list of matches. The second argument is the length of the filename to be converted. */ rl_dequote_func_t *rl_filename_rewrite_hook = (rl_dequote_func_t *)NULL; /* Non-zero means readline completion functions perform tilde expansion. */ int rl_complete_with_tilde_expansion = 0; /* Pointer to the generator function for completion_matches (). NULL means to use rl_filename_completion_function (), the default filename completer. */ rl_compentry_func_t *rl_completion_entry_function = (rl_compentry_func_t *)NULL; /* Pointer to generator function for rl_menu_complete (). NULL means to use *rl_completion_entry_function (see above). */ rl_compentry_func_t *rl_menu_completion_entry_function = (rl_compentry_func_t *)NULL; /* Pointer to alternative function to create matches. Function is called with TEXT, START, and END. START and END are indices in RL_LINE_BUFFER saying what the boundaries of TEXT are. If this function exists and returns NULL then call the value of rl_completion_entry_function to try to match, otherwise use the array of strings returned. */ rl_completion_func_t *rl_attempted_completion_function = (rl_completion_func_t *)NULL; /* Non-zero means to suppress normal filename completion after the user-specified completion function has been called. */ int rl_attempted_completion_over = 0; /* Set to a character indicating the type of completion being performed by rl_complete_internal, available for use by application completion functions. */ int rl_completion_type = 0; /* Up to this many items will be displayed in response to a possible-completions call. After that, we ask the user if she is sure she wants to see them all. A negative value means don't ask. */ int rl_completion_query_items = 100; int _rl_page_completions = 1; /* The basic list of characters that signal a break between words for the completer routine. The contents of this variable is what breaks words in the shell, i.e. " \t\n\"\\'`@$><=" */ const char *rl_basic_word_break_characters = " \t\n\"\\'`@$><=;|&{("; /* }) */ /* List of basic quoting characters. */ const char *rl_basic_quote_characters = "\"'"; /* The list of characters that signal a break between words for rl_complete_internal. The default list is the contents of rl_basic_word_break_characters. */ /*const*/ char *rl_completer_word_break_characters = (/*const*/ char *)NULL; /* Hook function to allow an application to set the completion word break characters before readline breaks up the line. Allows position-dependent word break characters. */ rl_cpvfunc_t *rl_completion_word_break_hook = (rl_cpvfunc_t *)NULL; /* List of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring rl_completer_word_break_characters are treated as any other character, unless they also appear within this list. */ const char *rl_completer_quote_characters = (const char *)NULL; /* List of characters that should be quoted in filenames by the completer. */ const char *rl_filename_quote_characters = (const char *)NULL; /* List of characters that are word break characters, but should be left in TEXT when it is passed to the completion function. The shell uses this to help determine what kind of completing to do. */ const char *rl_special_prefixes = (const char *)NULL; /* If non-zero, then disallow duplicates in the matches. */ int rl_ignore_completion_duplicates = 1; /* Non-zero means that the results of the matches are to be treated as filenames. This is ALWAYS zero on entry, and can only be changed within a completion entry finder function. */ int rl_filename_completion_desired = 0; /* Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the filename contains any characters in rl_filename_quote_chars. This is ALWAYS non-zero on entry, and can only be changed within a completion entry finder function. */ int rl_filename_quoting_desired = 1; /* This function, if defined, is called by the completer when real filename completion is done, after all the matching names have been generated. It is passed a (char**) known as matches in the code below. It consists of a NULL-terminated array of pointers to potential matching strings. The 1st element (matches[0]) is the maximal substring that is common to all matches. This function can re-arrange the list of matches as required, but all elements of the array must be free()'d if they are deleted. The main intent of this function is to implement FIGNORE a la SunOS csh. */ rl_compignore_func_t *rl_ignore_some_completions_function = (rl_compignore_func_t *)NULL; /* Set to a function to quote a filename in an application-specific fashion. Called with the text to quote, the type of match found (single or multiple) and a pointer to the quoting character to be used, which the function can reset if desired. */ rl_quote_func_t *rl_filename_quoting_function = rl_quote_filename; /* Function to call to remove quoting characters from a filename. Called before completion is attempted, so the embedded quotes do not interfere with matching names in the file system. Readline doesn't do anything with this; it's set only by applications. */ rl_dequote_func_t *rl_filename_dequoting_function = (rl_dequote_func_t *)NULL; /* Function to call to decide whether or not a word break character is quoted. If a character is quoted, it does not break words for the completer. */ rl_linebuf_func_t *rl_char_is_quoted_p = (rl_linebuf_func_t *)NULL; /* If non-zero, the completion functions don't append anything except a possible closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ int rl_completion_suppress_append = 0; /* Character appended to completed words when at the end of the line. The default is a space. */ int rl_completion_append_character = ' '; /* If non-zero, the completion functions don't append any closing quote. This is set to 0 by rl_complete_internal and may be changed by an application-specific completion function. */ int rl_completion_suppress_quote = 0; /* Set to any quote character readline thinks it finds before any application completion function is called. */ int rl_completion_quote_character; /* Set to a non-zero value if readline found quoting anywhere in the word to be completed; set before any application completion function is called. */ int rl_completion_found_quote; /* If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the mark-directories variable (which is user-settable). This exists so that application completion functions can override the user's preference (set via the mark-symlinked-directories variable) if appropriate. It's set to the value of _rl_complete_mark_symlink_dirs in rl_complete_internal before any application-specific completion function is called, so without that function doing anything, the user's preferences are honored. */ int rl_completion_mark_symlink_dirs; /* If non-zero, inhibit completion (temporarily). */ int rl_inhibit_completion; /* Set to the last key used to invoke one of the completion functions */ int rl_completion_invoking_key; /* If non-zero, sort the completion matches. On by default. */ int rl_sort_completion_matches = 1; /* Variables local to this file. */ /* Local variable states what happened during the last completion attempt. */ static int completion_changed_buffer; /* The result of the query to the user about displaying completion matches */ static int completion_y_or_n; static int _rl_complete_display_matches_interrupt = 0; /*************************************/ /* */ /* Bindable completion functions */ /* */ /*************************************/ /* Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see rl_completion_matches ()). The default is to do filename completion. */ int rl_complete (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; if (rl_inhibit_completion) return (_rl_insert_char (ignore, invoking_key)); else if (rl_last_func == rl_complete && !completion_changed_buffer) return (rl_complete_internal ('?')); else if (_rl_complete_show_all) return (rl_complete_internal ('!')); else if (_rl_complete_show_unmodified) return (rl_complete_internal ('@')); else return (rl_complete_internal (TAB)); } /* List the possible completions. See description of rl_complete (). */ int rl_possible_completions (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; return (rl_complete_internal ('?')); } int rl_insert_completions (ignore, invoking_key) int ignore, invoking_key; { rl_completion_invoking_key = invoking_key; return (rl_complete_internal ('*')); } /* Return the correct value to pass to rl_complete_internal performing the same tests as rl_complete. This allows consecutive calls to an application's completion function to list possible completions and for an application-specific completion function to honor the show-all-if-ambiguous readline variable. */ int rl_completion_mode (cfunc) rl_command_func_t *cfunc; { if (rl_last_func == cfunc && !completion_changed_buffer) return '?'; else if (_rl_complete_show_all) return '!'; else if (_rl_complete_show_unmodified) return '@'; else return TAB; } /************************************/ /* */ /* Completion utility functions */ /* */ /************************************/ /* Reset readline state on a signal or other event. */ void _rl_reset_completion_state () { rl_completion_found_quote = 0; rl_completion_quote_character = 0; } static void _rl_complete_sigcleanup (sig, ptr) int sig; void *ptr; { if (sig == SIGINT) /* XXX - for now */ { _rl_free_match_list ((char **)ptr); _rl_complete_display_matches_interrupt = 1; } } /* Set default values for readline word completion. These are the variables that application completion functions can change or inspect. */ static void set_completion_defaults (what_to_do) int what_to_do; { /* Only the completion entry function can change these. */ rl_filename_completion_desired = 0; rl_filename_quoting_desired = 1; rl_completion_type = what_to_do; rl_completion_suppress_append = rl_completion_suppress_quote = 0; rl_completion_append_character = ' '; /* The completion entry function may optionally change this. */ rl_completion_mark_symlink_dirs = _rl_complete_mark_symlink_dirs; /* Reset private state. */ _rl_complete_display_matches_interrupt = 0; } /* The user must press "y" or "n". Non-zero return means "y" pressed. */ static int get_y_or_n (for_pager) int for_pager; { int c; /* For now, disable pager in callback mode, until we later convert to state driven functions. Have to wait until next major version to add new state definition, since it will change value of RL_STATE_DONE. */ #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) return 1; #endif for (;;) { RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c == 'y' || c == 'Y' || c == ' ') return (1); if (c == 'n' || c == 'N' || c == RUBOUT) return (0); if (c == ABORT_CHAR || c < 0) _rl_abort_internal (); if (for_pager && (c == NEWLINE || c == RETURN)) return (2); if (for_pager && (c == 'q' || c == 'Q')) return (0); rl_ding (); } } static int _rl_internal_pager (lines) int lines; { int i; fprintf (rl_outstream, "--More--"); fflush (rl_outstream); i = get_y_or_n (1); _rl_erase_entire_line (); if (i == 0) return -1; else if (i == 2) return (lines - 1); else return 0; } static int path_isdir (filename) const char *filename; { struct stat finfo; return (stat (filename, &finfo) == 0 && S_ISDIR (finfo.st_mode)); } #if defined (VISIBLE_STATS) /* Return the character which best describes FILENAME. `@' for symbolic links `/' for directories `*' for executables `=' for sockets `|' for FIFOs `%' for character special devices `#' for block special devices */ static int stat_char (filename) char *filename; { struct stat finfo; int character, r; char *f; const char *fn; /* Short-circuit a //server on cygwin, since that will always behave as a directory. */ #if __CYGWIN__ if (filename[0] == '/' && filename[1] == '/' && strchr (filename+2, '/') == 0) return '/'; #endif f = 0; if (rl_filename_stat_hook) { f = savestring (filename); (*rl_filename_stat_hook) (&f); fn = f; } else fn = filename; #if defined (HAVE_LSTAT) && defined (S_ISLNK) r = lstat (fn, &finfo); #else r = stat (fn, &finfo); #endif if (r == -1) return (0); character = 0; if (S_ISDIR (finfo.st_mode)) character = '/'; #if defined (S_ISCHR) else if (S_ISCHR (finfo.st_mode)) character = '%'; #endif /* S_ISCHR */ #if defined (S_ISBLK) else if (S_ISBLK (finfo.st_mode)) character = '#'; #endif /* S_ISBLK */ #if defined (S_ISLNK) else if (S_ISLNK (finfo.st_mode)) character = '@'; #endif /* S_ISLNK */ #if defined (S_ISSOCK) else if (S_ISSOCK (finfo.st_mode)) character = '='; #endif /* S_ISSOCK */ #if defined (S_ISFIFO) else if (S_ISFIFO (finfo.st_mode)) character = '|'; #endif else if (S_ISREG (finfo.st_mode)) { #if defined (_WIN32) && !defined (__CYGWIN__) char *ext; /* Windows doesn't do access and X_OK; check file extension instead */ ext = strrchr (fn, '.'); if (ext && (_rl_stricmp (ext, ".exe") == 0 || _rl_stricmp (ext, ".cmd") == 0 || _rl_stricmp (ext, ".bat") == 0 || _rl_stricmp (ext, ".com") == 0)) character = '*'; #else if (access (filename, X_OK) == 0) character = '*'; #endif } xfree (f); return (character); } #endif /* VISIBLE_STATS */ #if defined (COLOR_SUPPORT) static int colored_stat_start (filename) const char *filename; { _rl_set_normal_color (); return (_rl_print_color_indicator (filename)); } static void colored_stat_end () { _rl_prep_non_filename_text (); _rl_put_indicator (&_rl_color_indicator[C_CLR_TO_EOL]); } static int colored_prefix_start () { _rl_set_normal_color (); return (_rl_print_prefix_color ()); } static void colored_prefix_end () { colored_stat_end (); /* for now */ } #endif /* Return the portion of PATHNAME that should be output when listing possible completions. If we are hacking filename completion, we are only interested in the basename, the portion following the final slash. Otherwise, we return what we were passed. Since printing empty strings is not very informative, if we're doing filename completion, and the basename is the empty string, we look for the previous slash and return the portion following that. If there's no previous slash, we just return what we were passed. */ static char * printable_part (pathname) char *pathname; { char *temp, *x; if (rl_filename_completion_desired == 0) /* don't need to do anything */ return (pathname); temp = strrchr (pathname, '/'); #if defined (__MSDOS__) || defined (_WIN32) if (temp == 0 && ISALPHA ((unsigned char)pathname[0]) && pathname[1] == ':') temp = pathname + 1; #endif if (temp == 0 || *temp == '\0') return (pathname); else if (temp[1] == 0 && temp == pathname) return (pathname); /* If the basename is NULL, we might have a pathname like '/usr/src/'. Look for a previous slash and, if one is found, return the portion following that slash. If there's no previous slash, just return the pathname we were passed. */ else if (temp[1] == '\0') { for (x = temp - 1; x > pathname; x--) if (*x == '/') break; return ((*x == '/') ? x + 1 : pathname); } else return ++temp; } /* Compute width of STRING when displayed on screen by print_filename */ static int fnwidth (string) const char *string; { int width, pos; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; int left, w; size_t clen; wchar_t wc; left = strlen (string) + 1; memset (&ps, 0, sizeof (mbstate_t)); #endif width = pos = 0; while (string[pos]) { if (CTRL_CHAR (string[pos]) || string[pos] == RUBOUT) { width += 2; pos++; } else { #if defined (HANDLE_MULTIBYTE) clen = mbrtowc (&wc, string + pos, left - pos, &ps); if (MB_INVALIDCH (clen)) { width++; pos++; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (clen)) break; else { pos += clen; w = WCWIDTH (wc); width += (w >= 0) ? w : 1; } #else width++; pos++; #endif } } return width; } #define ELLIPSIS_LEN 3 static int fnprint (to_print, prefix_bytes, real_pathname) const char *to_print; int prefix_bytes; const char *real_pathname; { int printed_len, w; const char *s; int common_prefix_len, print_len; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; const char *end; size_t tlen; int width; wchar_t wc; print_len = strlen (to_print); end = to_print + print_len + 1; memset (&ps, 0, sizeof (mbstate_t)); #endif printed_len = common_prefix_len = 0; /* Don't print only the ellipsis if the common prefix is one of the possible completions. Only cut off prefix_bytes if we're going to be printing the ellipsis, which takes precedence over coloring the completion prefix (see print_filename() below). */ if (_rl_completion_prefix_display_length > 0 && prefix_bytes >= print_len) prefix_bytes = 0; #if defined (COLOR_SUPPORT) if (_rl_colored_stats && (prefix_bytes == 0 || _rl_colored_completion_prefix <= 0)) colored_stat_start (real_pathname); #endif if (prefix_bytes && _rl_completion_prefix_display_length > 0) { char ellipsis; ellipsis = (to_print[prefix_bytes] == '.') ? '_' : '.'; for (w = 0; w < ELLIPSIS_LEN; w++) putc (ellipsis, rl_outstream); printed_len = ELLIPSIS_LEN; } #if defined (COLOR_SUPPORT) else if (prefix_bytes && _rl_colored_completion_prefix > 0) { common_prefix_len = prefix_bytes; prefix_bytes = 0; /* XXX - print color indicator start here */ colored_prefix_start (); } #endif s = to_print + prefix_bytes; while (*s) { if (CTRL_CHAR (*s)) { putc ('^', rl_outstream); putc (UNCTRL (*s), rl_outstream); printed_len += 2; s++; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif } else if (*s == RUBOUT) { putc ('^', rl_outstream); putc ('?', rl_outstream); printed_len += 2; s++; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif } else { #if defined (HANDLE_MULTIBYTE) tlen = mbrtowc (&wc, s, end - s, &ps); if (MB_INVALIDCH (tlen)) { tlen = 1; width = 1; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tlen)) break; else { w = WCWIDTH (wc); width = (w >= 0) ? w : 1; } fwrite (s, 1, tlen, rl_outstream); s += tlen; printed_len += width; #else putc (*s, rl_outstream); s++; printed_len++; #endif } if (common_prefix_len > 0 && (s - to_print) >= common_prefix_len) { #if defined (COLOR_SUPPORT) /* printed bytes = s - to_print */ /* printed bytes should never be > but check for paranoia's sake */ colored_prefix_end (); if (_rl_colored_stats) colored_stat_start (real_pathname); /* XXX - experiment */ #endif common_prefix_len = 0; } } #if defined (COLOR_SUPPORT) /* XXX - unconditional for now */ if (_rl_colored_stats) colored_stat_end (); #endif return printed_len; } /* Output TO_PRINT to rl_outstream. If VISIBLE_STATS is defined and we are using it, check for and output a single character for `special' filenames. Return the number of characters we output. */ static int print_filename (to_print, full_pathname, prefix_bytes) char *to_print, *full_pathname; int prefix_bytes; { int printed_len, extension_char, slen, tlen; char *s, c, *new_full_pathname, *dn; extension_char = 0; #if defined (COLOR_SUPPORT) /* Defer printing if we want to prefix with a color indicator */ if (_rl_colored_stats == 0 || rl_filename_completion_desired == 0) #endif printed_len = fnprint (to_print, prefix_bytes, to_print); if (rl_filename_completion_desired && ( #if defined (VISIBLE_STATS) rl_visible_stats || #endif #if defined (COLOR_SUPPORT) _rl_colored_stats || #endif _rl_complete_mark_directories)) { /* If to_print != full_pathname, to_print is the basename of the path passed. In this case, we try to expand the directory name before checking for the stat character. */ if (to_print != full_pathname) { /* Terminate the directory name. */ c = to_print[-1]; to_print[-1] = '\0'; /* If setting the last slash in full_pathname to a NUL results in full_pathname being the empty string, we are trying to complete files in the root directory. If we pass a null string to the bash directory completion hook, for example, it will expand it to the current directory. We just want the `/'. */ if (full_pathname == 0 || *full_pathname == 0) dn = "/"; else if (full_pathname[0] != '/') dn = full_pathname; else if (full_pathname[1] == 0) dn = "//"; /* restore trailing slash to `//' */ else if (full_pathname[1] == '/' && full_pathname[2] == 0) dn = "/"; /* don't turn /// into // */ else dn = full_pathname; s = tilde_expand (dn); if (rl_directory_completion_hook) (*rl_directory_completion_hook) (&s); slen = strlen (s); tlen = strlen (to_print); new_full_pathname = (char *)xmalloc (slen + tlen + 2); strcpy (new_full_pathname, s); if (s[slen - 1] == '/') slen--; else new_full_pathname[slen] = '/'; new_full_pathname[slen] = '/'; strcpy (new_full_pathname + slen + 1, to_print); #if defined (VISIBLE_STATS) if (rl_visible_stats) extension_char = stat_char (new_full_pathname); else #endif if (_rl_complete_mark_directories) { dn = 0; if (rl_directory_completion_hook == 0 && rl_filename_stat_hook) { dn = savestring (new_full_pathname); (*rl_filename_stat_hook) (&dn); xfree (new_full_pathname); new_full_pathname = dn; } if (path_isdir (new_full_pathname)) extension_char = '/'; } /* Move colored-stats code inside fnprint() */ #if defined (COLOR_SUPPORT) if (_rl_colored_stats) printed_len = fnprint (to_print, prefix_bytes, new_full_pathname); #endif xfree (new_full_pathname); to_print[-1] = c; } else { s = tilde_expand (full_pathname); #if defined (VISIBLE_STATS) if (rl_visible_stats) extension_char = stat_char (s); else #endif if (_rl_complete_mark_directories && path_isdir (s)) extension_char = '/'; /* Move colored-stats code inside fnprint() */ #if defined (COLOR_SUPPORT) if (_rl_colored_stats) printed_len = fnprint (to_print, prefix_bytes, s); #endif } xfree (s); if (extension_char) { putc (extension_char, rl_outstream); printed_len++; } } return printed_len; } static char * rl_quote_filename (s, rtype, qcp) char *s; int rtype; char *qcp; { char *r; r = (char *)xmalloc (strlen (s) + 2); *r = *rl_completer_quote_characters; strcpy (r + 1, s); if (qcp) *qcp = *rl_completer_quote_characters; return r; } /* Find the bounds of the current word for completion purposes, and leave rl_point set to the end of the word. This function skips quoted substrings (characters between matched pairs of characters in rl_completer_quote_characters). First we try to find an unclosed quoted substring on which to do matching. If one is not found, we use the word break characters to find the boundaries of the current word. We call an application-specific function to decide whether or not a particular word break character is quoted; if that function returns a non-zero result, the character does not break a word. This function returns the opening quote character if we found an unclosed quoted substring, '\0' otherwise. FP, if non-null, is set to a value saying which (shell-like) quote characters we found (single quote, double quote, or backslash) anywhere in the string. DP, if non-null, is set to the value of the delimiter character that caused a word break. */ char _rl_find_completion_word (fp, dp) int *fp, *dp; { int scan, end, found_quote, delimiter, pass_next, isbrk; char quote_char, *brkchars; end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; brkchars = 0; if (rl_completion_word_break_hook) brkchars = (*rl_completion_word_break_hook) (); if (brkchars == 0) brkchars = rl_completer_word_break_characters; if (rl_completer_quote_characters) { /* We have a list of characters which can be used in pairs to quote substrings for the completer. Try to find the start of an unclosed quoted substring. */ /* FOUND_QUOTE is set so we know what kind of quotes we found. */ for (scan = pass_next = 0; scan < end; scan = MB_NEXTCHAR (rl_line_buffer, scan, 1, MB_FIND_ANY)) { if (pass_next) { pass_next = 0; continue; } /* Shell-like semantics for single quotes -- don't allow backslash to quote anything in single quotes, especially not the closing quote. If you don't like this, take out the check on the value of quote_char. */ if (quote_char != '\'' && rl_line_buffer[scan] == '\\') { pass_next = 1; found_quote |= RL_QF_BACKSLASH; continue; } if (quote_char != '\0') { /* Ignore everything until the matching close quote char. */ if (rl_line_buffer[scan] == quote_char) { /* Found matching close. Abandon this substring. */ quote_char = '\0'; rl_point = end; } } else if (strchr (rl_completer_quote_characters, rl_line_buffer[scan])) { /* Found start of a quoted substring. */ quote_char = rl_line_buffer[scan]; rl_point = scan + 1; /* Shell-like quoting conventions. */ if (quote_char == '\'') found_quote |= RL_QF_SINGLE_QUOTE; else if (quote_char == '"') found_quote |= RL_QF_DOUBLE_QUOTE; else found_quote |= RL_QF_OTHER_QUOTE; } } } if (rl_point == end && quote_char == '\0') { /* We didn't find an unclosed quoted substring upon which to do completion, so use the word break characters to find the substring on which to complete. */ while (rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_ANY)) { scan = rl_line_buffer[rl_point]; if (strchr (brkchars, scan) == 0) continue; /* Call the application-specific function to tell us whether this word break character is quoted and should be skipped. */ if (rl_char_is_quoted_p && found_quote && (*rl_char_is_quoted_p) (rl_line_buffer, rl_point)) continue; /* Convoluted code, but it avoids an n^2 algorithm with calls to char_is_quoted. */ break; } } /* If we are at an unquoted word break, then advance past it. */ scan = rl_line_buffer[rl_point]; /* If there is an application-specific function to say whether or not a character is quoted and we found a quote character, let that function decide whether or not a character is a word break, even if it is found in rl_completer_word_break_characters. Don't bother if we're at the end of the line, though. */ if (scan) { if (rl_char_is_quoted_p) isbrk = (found_quote == 0 || (*rl_char_is_quoted_p) (rl_line_buffer, rl_point) == 0) && strchr (brkchars, scan) != 0; else isbrk = strchr (brkchars, scan) != 0; if (isbrk) { /* If the character that caused the word break was a quoting character, then remember it as the delimiter. */ if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, scan) && (end - rl_point) > 1) delimiter = scan; /* If the character isn't needed to determine something special about what kind of completion to perform, then advance past it. */ if (rl_special_prefixes == 0 || strchr (rl_special_prefixes, scan) == 0) rl_point++; } } if (fp) *fp = found_quote; if (dp) *dp = delimiter; return (quote_char); } static char ** gen_completion_matches (text, start, end, our_func, found_quote, quote_char) char *text; int start, end; rl_compentry_func_t *our_func; int found_quote, quote_char; { char **matches; rl_completion_found_quote = found_quote; rl_completion_quote_character = quote_char; /* If the user wants to TRY to complete, but then wants to give up and use the default completion function, they set the variable rl_attempted_completion_function. */ if (rl_attempted_completion_function) { matches = (*rl_attempted_completion_function) (text, start, end); if (RL_SIG_RECEIVED()) { _rl_free_match_list (matches); matches = 0; RL_CHECK_SIGNALS (); } if (matches || rl_attempted_completion_over) { rl_attempted_completion_over = 0; return (matches); } } /* XXX -- filename dequoting moved into rl_filename_completion_function */ /* rl_completion_matches will check for signals as well to avoid a long delay while reading a directory. */ matches = rl_completion_matches (text, our_func); if (RL_SIG_RECEIVED()) { _rl_free_match_list (matches); matches = 0; RL_CHECK_SIGNALS (); } return matches; } /* Filter out duplicates in MATCHES. This frees up the strings in MATCHES. */ static char ** remove_duplicate_matches (matches) char **matches; { char *lowest_common; int i, j, newlen; char dead_slot; char **temp_array; /* Sort the items. */ for (i = 0; matches[i]; i++) ; /* Sort the array without matches[0], since we need it to stay in place no matter what. */ if (i && rl_sort_completion_matches) qsort (matches+1, i-1, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); /* Remember the lowest common denominator for it may be unique. */ lowest_common = savestring (matches[0]); for (i = newlen = 0; matches[i + 1]; i++) { if (strcmp (matches[i], matches[i + 1]) == 0) { xfree (matches[i]); matches[i] = (char *)&dead_slot; } else newlen++; } /* We have marked all the dead slots with (char *)&dead_slot. Copy all the non-dead entries into a new array. */ temp_array = (char **)xmalloc ((3 + newlen) * sizeof (char *)); for (i = j = 1; matches[i]; i++) { if (matches[i] != (char *)&dead_slot) temp_array[j++] = matches[i]; } temp_array[j] = (char *)NULL; if (matches[0] != (char *)&dead_slot) xfree (matches[0]); /* Place the lowest common denominator back in [0]. */ temp_array[0] = lowest_common; /* If there is one string left, and it is identical to the lowest common denominator, then the LCD is the string to insert. */ if (j == 2 && strcmp (temp_array[0], temp_array[1]) == 0) { xfree (temp_array[1]); temp_array[1] = (char *)NULL; } return (temp_array); } /* Find the common prefix of the list of matches, and put it into matches[0]. */ static int compute_lcd_of_matches (match_list, matches, text) char **match_list; int matches; const char *text; { register int i, c1, c2, si; int low; /* Count of max-matched characters. */ int lx; char *dtext; /* dequoted TEXT, if needed */ #if defined (HANDLE_MULTIBYTE) int v; size_t v1, v2; mbstate_t ps1, ps2; wchar_t wc1, wc2; #endif /* If only one match, just use that. Otherwise, compare each member of the list with the next, finding out where they stop matching. */ if (matches == 1) { match_list[0] = match_list[1]; match_list[1] = (char *)NULL; return 1; } for (i = 1, low = 100000; i < matches; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { memset (&ps1, 0, sizeof (mbstate_t)); memset (&ps2, 0, sizeof (mbstate_t)); } #endif if (_rl_completion_case_fold) { for (si = 0; (c1 = _rl_to_lower(match_list[i][si])) && (c2 = _rl_to_lower(match_list[i + 1][si])); si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { v1 = mbrtowc(&wc1, match_list[i]+si, strlen (match_list[i]+si), &ps1); v2 = mbrtowc (&wc2, match_list[i+1]+si, strlen (match_list[i+1]+si), &ps2); if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (c1 != c2) /* do byte comparison */ break; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); if (wc1 != wc2) break; else if (v1 > 1) si += v1 - 1; } else #endif if (c1 != c2) break; } else { for (si = 0; (c1 = match_list[i][si]) && (c2 = match_list[i + 1][si]); si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { mbstate_t ps_back; ps_back = ps1; if (!_rl_compare_chars (match_list[i], si, &ps1, match_list[i+1], si, &ps2)) break; else if ((v = _rl_get_char_len (&match_list[i][si], &ps_back)) > 1) si += v - 1; } else #endif if (c1 != c2) break; } if (low > si) low = si; } /* If there were multiple matches, but none matched up to even the first character, and the user typed something, use that as the value of matches[0]. */ if (low == 0 && text && *text) { match_list[0] = (char *)xmalloc (strlen (text) + 1); strcpy (match_list[0], text); } else { match_list[0] = (char *)xmalloc (low + 1); /* XXX - this might need changes in the presence of multibyte chars */ /* If we are ignoring case, try to preserve the case of the string the user typed in the face of multiple matches differing in case. */ if (_rl_completion_case_fold) { /* We're making an assumption here: IF we're completing filenames AND the application has defined a filename dequoting function AND we found a quote character AND the application has requested filename quoting THEN we assume that TEXT was dequoted before checking against the file system and needs to be dequoted here before we check against the list of matches FI */ dtext = (char *)NULL; if (rl_filename_completion_desired && rl_filename_dequoting_function && rl_completion_found_quote && rl_filename_quoting_desired) { dtext = (*rl_filename_dequoting_function) ((char *)text, rl_completion_quote_character); text = dtext; } /* sort the list to get consistent answers. */ qsort (match_list+1, matches, sizeof(char *), (QSFUNC *)_rl_qsort_string_compare); si = strlen (text); lx = (si <= low) ? si : low; /* check shorter of text and matches */ /* Try to preserve the case of what the user typed in the presence of multiple matches: check each match for something that matches what the user typed taking case into account; use it up to common length of matches if one is found. If not, just use first match. */ for (i = 1; i <= matches; i++) if (strncmp (match_list[i], text, lx) == 0) { strncpy (match_list[0], match_list[i], low); break; } /* no casematch, use first entry */ if (i > matches) strncpy (match_list[0], match_list[1], low); FREE (dtext); } else strncpy (match_list[0], match_list[1], low); match_list[0][low] = '\0'; } return matches; } static int postprocess_matches (matchesp, matching_filenames) char ***matchesp; int matching_filenames; { char *t, **matches, **temp_matches; int nmatch, i; matches = *matchesp; if (matches == 0) return 0; /* It seems to me that in all the cases we handle we would like to ignore duplicate possibilities. Scan for the text to insert being identical to the other completions. */ if (rl_ignore_completion_duplicates) { temp_matches = remove_duplicate_matches (matches); xfree (matches); matches = temp_matches; } /* If we are matching filenames, then here is our chance to do clever processing by re-examining the list. Call the ignore function with the array as a parameter. It can munge the array, deleting matches as it desires. */ if (rl_ignore_some_completions_function && matching_filenames) { for (nmatch = 1; matches[nmatch]; nmatch++) ; (void)(*rl_ignore_some_completions_function) (matches); if (matches == 0 || matches[0] == 0) { FREE (matches); *matchesp = (char **)0; return 0; } else { /* If we removed some matches, recompute the common prefix. */ for (i = 1; matches[i]; i++) ; if (i > 1 && i < nmatch) { t = matches[0]; compute_lcd_of_matches (matches, i - 1, t); FREE (t); } } } *matchesp = matches; return (1); } static int complete_get_screenwidth () { int cols; char *envcols; cols = _rl_completion_columns; if (cols >= 0 && cols <= _rl_screenwidth) return cols; envcols = getenv ("COLUMNS"); if (envcols && *envcols) cols = atoi (envcols); if (cols >= 0 && cols <= _rl_screenwidth) return cols; return _rl_screenwidth; } /* A convenience function for displaying a list of strings in columnar format on readline's output stream. MATCHES is the list of strings, in argv format, LEN is the number of strings in MATCHES, and MAX is the length of the longest string in MATCHES. */ void rl_display_match_list (matches, len, max) char **matches; int len, max; { int count, limit, printed_len, lines, cols; int i, j, k, l, common_length, sind; char *temp, *t; /* Find the length of the prefix common to all items: length as displayed characters (common_length) and as a byte index into the matches (sind) */ common_length = sind = 0; if (_rl_completion_prefix_display_length > 0) { t = printable_part (matches[0]); /* check again in case of /usr/src/ */ temp = rl_filename_completion_desired ? strrchr (t, '/') : 0; common_length = temp ? fnwidth (temp) : fnwidth (t); sind = temp ? strlen (temp) : strlen (t); if (common_length > max || sind > max) common_length = sind = 0; if (common_length > _rl_completion_prefix_display_length && common_length > ELLIPSIS_LEN) max -= common_length - ELLIPSIS_LEN; else common_length = sind = 0; } #if defined (COLOR_SUPPORT) else if (_rl_colored_completion_prefix > 0) { t = printable_part (matches[0]); temp = rl_filename_completion_desired ? strrchr (t, '/') : 0; common_length = temp ? fnwidth (temp) : fnwidth (t); sind = temp ? RL_STRLEN (temp+1) : RL_STRLEN (t); /* want portion after final slash */ if (common_length > max || sind > max) common_length = sind = 0; } #endif /* How many items of MAX length can we fit in the screen window? */ cols = complete_get_screenwidth (); max += 2; limit = cols / max; if (limit != 1 && (limit * max == cols)) limit--; /* If cols == 0, limit will end up -1 */ if (cols < _rl_screenwidth && limit < 0) limit = 1; /* Avoid a possible floating exception. If max > cols, limit will be 0 and a divide-by-zero fault will result. */ if (limit == 0) limit = 1; /* How many iterations of the printing loop? */ count = (len + (limit - 1)) / limit; /* Watch out for special case. If LEN is less than LIMIT, then just do the inner printing loop. 0 < len <= limit implies count = 1. */ /* Sort the items if they are not already sorted. */ if (rl_ignore_completion_duplicates == 0 && rl_sort_completion_matches) qsort (matches + 1, len, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); rl_crlf (); lines = 0; if (_rl_print_completions_horizontally == 0) { /* Print the sorted items, up-and-down alphabetically, like ls. */ for (i = 1; i <= count; i++) { for (j = 0, l = i; j < limit; j++) { if (l > len || matches[l] == 0) break; else { temp = printable_part (matches[l]); printed_len = print_filename (temp, matches[l], sind); if (j + 1 < limit) { if (max <= printed_len) putc (' ', rl_outstream); else for (k = 0; k < max - printed_len; k++) putc (' ', rl_outstream); } } l += count; } rl_crlf (); #if defined (SIGWINCH) if (RL_SIG_RECEIVED () && RL_SIGWINCH_RECEIVED() == 0) #else if (RL_SIG_RECEIVED ()) #endif return; lines++; if (_rl_page_completions && lines >= (_rl_screenheight - 1) && i < count) { lines = _rl_internal_pager (lines); if (lines < 0) return; } } } else { /* Print the sorted items, across alphabetically, like ls -x. */ for (i = 1; matches[i]; i++) { temp = printable_part (matches[i]); printed_len = print_filename (temp, matches[i], sind); /* Have we reached the end of this line? */ #if defined (SIGWINCH) if (RL_SIG_RECEIVED () && RL_SIGWINCH_RECEIVED() == 0) #else if (RL_SIG_RECEIVED ()) #endif return; if (matches[i+1]) { if (limit == 1 || (i && (limit > 1) && (i % limit) == 0)) { rl_crlf (); lines++; if (_rl_page_completions && lines >= _rl_screenheight - 1) { lines = _rl_internal_pager (lines); if (lines < 0) return; } } else if (max <= printed_len) putc (' ', rl_outstream); else for (k = 0; k < max - printed_len; k++) putc (' ', rl_outstream); } } rl_crlf (); } } /* Display MATCHES, a list of matching filenames in argv format. This handles the simple case -- a single match -- first. If there is more than one match, we compute the number of strings in the list and the length of the longest string, which will be needed by the display function. If the application wants to handle displaying the list of matches itself, it sets RL_COMPLETION_DISPLAY_MATCHES_HOOK to the address of a function, and we just call it. If we're handling the display ourselves, we just call rl_display_match_list. We also check that the list of matches doesn't exceed the user-settable threshold, and ask the user if he wants to see the list if there are more matches than RL_COMPLETION_QUERY_ITEMS. */ static void display_matches (matches) char **matches; { int len, max, i; char *temp; /* Move to the last visible line of a possibly-multiple-line command. */ _rl_move_vert (_rl_vis_botlin); /* Handle simple case first. What if there is only one answer? */ if (matches[1] == 0) { temp = printable_part (matches[0]); rl_crlf (); print_filename (temp, matches[0], 0); rl_crlf (); rl_forced_update_display (); rl_display_fixed = 1; return; } /* There is more than one answer. Find out how many there are, and find the maximum printed length of a single entry. */ for (max = 0, i = 1; matches[i]; i++) { temp = printable_part (matches[i]); len = fnwidth (temp); if (len > max) max = len; } len = i - 1; /* If the caller has defined a display hook, then call that now. */ if (rl_completion_display_matches_hook) { (*rl_completion_display_matches_hook) (matches, len, max); return; } /* If there are many items, then ask the user if she really wants to see them all. */ if (rl_completion_query_items > 0 && len >= rl_completion_query_items) { rl_crlf (); fprintf (rl_outstream, "Display all %d possibilities? (y or n)", len); fflush (rl_outstream); if ((completion_y_or_n = get_y_or_n (0)) == 0) { rl_crlf (); rl_forced_update_display (); rl_display_fixed = 1; return; } } rl_display_match_list (matches, len, max); rl_forced_update_display (); rl_display_fixed = 1; } static char * make_quoted_replacement (match, mtype, qc) char *match; int mtype; char *qc; /* Pointer to quoting character, if any */ { int should_quote, do_replace; char *replacement; /* If we are doing completion on quoted substrings, and any matches contain any of the completer_word_break_characters, then auto- matically prepend the substring with a quote character (just pick the first one from the list of such) if it does not already begin with a quote string. FIXME: Need to remove any such automatically inserted quote character when it no longer is necessary, such as if we change the string we are completing on and the new set of matches don't require a quoted substring. */ replacement = match; should_quote = match && rl_completer_quote_characters && rl_filename_completion_desired && rl_filename_quoting_desired; if (should_quote) should_quote = should_quote && (!qc || !*qc || (rl_completer_quote_characters && strchr (rl_completer_quote_characters, *qc))); if (should_quote) { /* If there is a single match, see if we need to quote it. This also checks whether the common prefix of several matches needs to be quoted. */ should_quote = rl_filename_quote_characters ? (_rl_strpbrk (match, rl_filename_quote_characters) != 0) : 0; do_replace = should_quote ? mtype : NO_MATCH; /* Quote the replacement, since we found an embedded word break character in a potential match. */ if (do_replace != NO_MATCH && rl_filename_quoting_function) replacement = (*rl_filename_quoting_function) (match, do_replace, qc); } return (replacement); } static void insert_match (match, start, mtype, qc) char *match; int start, mtype; char *qc; { char *replacement, *r; char oqc; int end, rlen; oqc = qc ? *qc : '\0'; replacement = make_quoted_replacement (match, mtype, qc); /* Now insert the match. */ if (replacement) { rlen = strlen (replacement); /* Don't double an opening quote character. */ if (qc && *qc && start && rl_line_buffer[start - 1] == *qc && replacement[0] == *qc) start--; /* If make_quoted_replacement changed the quoting character, remove the opening quote and insert the (fully-quoted) replacement. */ else if (qc && (*qc != oqc) && start && rl_line_buffer[start - 1] == oqc && replacement[0] != oqc) start--; end = rl_point - 1; /* Don't double a closing quote character */ if (qc && *qc && end && rl_line_buffer[rl_point] == *qc && replacement[rlen - 1] == *qc) end++; if (_rl_skip_completed_text) { r = replacement; while (start < rl_end && *r && rl_line_buffer[start] == *r) { start++; r++; } if (start <= end || *r) _rl_replace_text (r, start, end); rl_point = start + strlen (r); } else _rl_replace_text (replacement, start, end); if (replacement != match) xfree (replacement); } } /* Append any necessary closing quote and a separator character to the just-inserted match. If the user has specified that directories should be marked by a trailing `/', append one of those instead. The default trailing character is a space. Returns the number of characters appended. If NONTRIVIAL_MATCH is set, we test for a symlink (if the OS has them) and don't add a suffix for a symlink to a directory. A nontrivial match is one that actually adds to the word being completed. The variable rl_completion_mark_symlink_dirs controls this behavior (it's initially set to the what the user has chosen, indicated by the value of _rl_complete_mark_symlink_dirs, but may be modified by an application's completion function). */ static int append_to_match (text, delimiter, quote_char, nontrivial_match) char *text; int delimiter, quote_char, nontrivial_match; { char temp_string[4], *filename, *fn; int temp_string_index, s; struct stat finfo; temp_string_index = 0; if (quote_char && rl_point && rl_completion_suppress_quote == 0 && rl_line_buffer[rl_point - 1] != quote_char) temp_string[temp_string_index++] = quote_char; if (delimiter) temp_string[temp_string_index++] = delimiter; else if (rl_completion_suppress_append == 0 && rl_completion_append_character) temp_string[temp_string_index++] = rl_completion_append_character; temp_string[temp_string_index++] = '\0'; if (rl_filename_completion_desired) { filename = tilde_expand (text); if (rl_filename_stat_hook) { fn = savestring (filename); (*rl_filename_stat_hook) (&fn); xfree (filename); filename = fn; } s = (nontrivial_match && rl_completion_mark_symlink_dirs == 0) ? LSTAT (filename, &finfo) : stat (filename, &finfo); if (s == 0 && S_ISDIR (finfo.st_mode)) { if (_rl_complete_mark_directories /* && rl_completion_suppress_append == 0 */) { /* This is clumsy. Avoid putting in a double slash if point is at the end of the line and the previous character is a slash. */ if (rl_point && rl_line_buffer[rl_point] == '\0' && rl_line_buffer[rl_point - 1] == '/') ; else if (rl_line_buffer[rl_point] != '/') rl_insert_text ("/"); } } #ifdef S_ISLNK /* Don't add anything if the filename is a symlink and resolves to a directory. */ else if (s == 0 && S_ISLNK (finfo.st_mode) && path_isdir (filename)) ; #endif else { if (rl_point == rl_end && temp_string_index) rl_insert_text (temp_string); } xfree (filename); } else { if (rl_point == rl_end && temp_string_index) rl_insert_text (temp_string); } return (temp_string_index); } static void insert_all_matches (matches, point, qc) char **matches; int point; char *qc; { int i; char *rp; rl_begin_undo_group (); /* remove any opening quote character; make_quoted_replacement will add it back. */ if (qc && *qc && point && rl_line_buffer[point - 1] == *qc) point--; rl_delete_text (point, rl_point); rl_point = point; if (matches[1]) { for (i = 1; matches[i]; i++) { rp = make_quoted_replacement (matches[i], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[i]) xfree (rp); } } else { rp = make_quoted_replacement (matches[0], SINGLE_MATCH, qc); rl_insert_text (rp); rl_insert_text (" "); if (rp != matches[0]) xfree (rp); } rl_end_undo_group (); } void _rl_free_match_list (matches) char **matches; { register int i; if (matches == 0) return; for (i = 0; matches[i]; i++) xfree (matches[i]); xfree (matches); } /* Complete the word at or before point. WHAT_TO_DO says what to do with the completion. `?' means list the possible completions. TAB means do standard completion. `*' means insert all of the possible completions. `!' means to do standard completion, and list all possible completions if there is more than one. `@' means to do standard completion, and list all possible completions if there is more than one and partial completion is not possible. */ int rl_complete_internal (what_to_do) int what_to_do; { char **matches; rl_compentry_func_t *our_func; int start, end, delimiter, found_quote, i, nontrivial_lcd; char *text, *saved_line_buffer; char quote_char; #if 1 int tlen, mlen; #endif RL_SETSTATE(RL_STATE_COMPLETING); set_completion_defaults (what_to_do); saved_line_buffer = rl_line_buffer ? savestring (rl_line_buffer) : (char *)NULL; our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); start = rl_point; rl_point = end; text = rl_copy_text (start, end); matches = gen_completion_matches (text, start, end, our_func, found_quote, quote_char); /* nontrivial_lcd is set if the common prefix adds something to the word being completed. */ nontrivial_lcd = matches && strcmp (text, matches[0]) != 0; if (what_to_do == '!' || what_to_do == '@') tlen = strlen (text); xfree (text); if (matches == 0) { rl_ding (); FREE (saved_line_buffer); completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); return (0); } /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ i = rl_filename_completion_desired; if (postprocess_matches (&matches, i) == 0) { rl_ding (); FREE (saved_line_buffer); completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); return (0); } switch (what_to_do) { case TAB: case '!': case '@': /* Insert the first match with proper quoting. */ if (what_to_do == TAB) { if (*matches[0]) insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); } else if (*matches[0] && matches[1] == 0) /* should we perform the check only if there are multiple matches? */ insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); else if (*matches[0]) /* what_to_do != TAB && multiple matches */ { mlen = *matches[0] ? strlen (matches[0]) : 0; if (mlen >= tlen) insert_match (matches[0], start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); } /* If there are more matches, ring the bell to indicate. If we are in vi mode, Posix.2 says to not ring the bell. If the `show-all-if-ambiguous' variable is set, display all the matches immediately. Otherwise, if this was the only match, and we are hacking files, check the file to see if it was a directory. If so, and the `mark-directories' variable is set, add a '/' to the name. If not, and we are at the end of the line, then add a space. */ if (matches[1]) { if (what_to_do == '!') { display_matches (matches); break; } else if (what_to_do == '@') { if (nontrivial_lcd == 0) display_matches (matches); break; } else if (rl_editing_mode != vi_mode) rl_ding (); /* There are other matches remaining. */ } else append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); break; case '*': insert_all_matches (matches, start, "e_char); break; case '?': if (rl_completion_display_matches_hook == 0) { _rl_sigcleanup = _rl_complete_sigcleanup; _rl_sigcleanarg = matches; _rl_complete_display_matches_interrupt = 0; } display_matches (matches); if (_rl_complete_display_matches_interrupt) { matches = 0; /* already freed by rl_complete_sigcleanup */ _rl_complete_display_matches_interrupt = 0; if (rl_signal_event_hook) (*rl_signal_event_hook) (); /* XXX */ } _rl_sigcleanup = 0; _rl_sigcleanarg = 0; break; default: _rl_ttymsg ("bad value %d for what_to_do in rl_complete", what_to_do); rl_ding (); FREE (saved_line_buffer); RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_free_match_list (matches); _rl_reset_completion_state (); return 1; } _rl_free_match_list (matches); /* Check to see if the line has changed through all of this manipulation. */ if (saved_line_buffer) { completion_changed_buffer = strcmp (rl_line_buffer, saved_line_buffer) != 0; xfree (saved_line_buffer); } RL_UNSETSTATE(RL_STATE_COMPLETING); _rl_reset_completion_state (); RL_CHECK_SIGNALS (); return 0; } /***************************************************************/ /* */ /* Application-callable completion match generator functions */ /* */ /***************************************************************/ /* Return an array of (char *) which is a list of completions for TEXT. If there are no completions, return a NULL pointer. The first entry in the returned array is the substitution for TEXT. The remaining entries are the possible completions. The array is terminated with a NULL pointer. ENTRY_FUNCTION is a function of two args, and returns a (char *). The first argument is TEXT. The second is a state argument; it should be zero on the first call, and non-zero on subsequent calls. It returns a NULL pointer to the caller when there are no more matches. */ char ** rl_completion_matches (text, entry_function) const char *text; rl_compentry_func_t *entry_function; { register int i; /* Number of slots in match_list. */ int match_list_size; /* The list of matches. */ char **match_list; /* Number of matches actually found. */ int matches; /* Temporary string binder. */ char *string; matches = 0; match_list_size = 10; match_list = (char **)xmalloc ((match_list_size + 1) * sizeof (char *)); match_list[1] = (char *)NULL; while (string = (*entry_function) (text, matches)) { if (RL_SIG_RECEIVED ()) { /* Start at 1 because we don't set matches[0] in this function. Only free the list members if we're building match list from rl_filename_completion_function, since we know that doesn't free the strings it returns. */ if (entry_function == rl_filename_completion_function) { for (i = 1; match_list[i]; i++) xfree (match_list[i]); } xfree (match_list); match_list = 0; match_list_size = 0; matches = 0; RL_CHECK_SIGNALS (); } if (matches + 1 >= match_list_size) match_list = (char **)xrealloc (match_list, ((match_list_size += 10) + 1) * sizeof (char *)); if (match_list == 0) return (match_list); match_list[++matches] = string; match_list[matches + 1] = (char *)NULL; } /* If there were any matches, then look through them finding out the lowest common denominator. That then becomes match_list[0]. */ if (matches) compute_lcd_of_matches (match_list, matches, text); else /* There were no matches. */ { xfree (match_list); match_list = (char **)NULL; } return (match_list); } /* A completion function for usernames. TEXT contains a partial username preceded by a random character (usually `~'). */ char * rl_username_completion_function (text, state) const char *text; int state; { #if defined (__WIN32__) || defined (__OPENNT) return (char *)NULL; #else /* !__WIN32__ && !__OPENNT) */ static char *username = (char *)NULL; static struct passwd *entry; static int namelen, first_char, first_char_loc; char *value; if (state == 0) { FREE (username); first_char = *text; first_char_loc = first_char == '~'; username = savestring (&text[first_char_loc]); namelen = strlen (username); #if defined (HAVE_GETPWENT) setpwent (); #endif } #if defined (HAVE_GETPWENT) while (entry = getpwent ()) { /* Null usernames should result in all users as possible completions. */ if (namelen == 0 || (STREQN (username, entry->pw_name, namelen))) break; } #endif if (entry == 0) { #if defined (HAVE_GETPWENT) endpwent (); #endif return ((char *)NULL); } else { value = (char *)xmalloc (2 + strlen (entry->pw_name)); *value = *text; strcpy (value + first_char_loc, entry->pw_name); if (first_char == '~') rl_filename_completion_desired = 1; return (value); } #endif /* !__WIN32__ && !__OPENNT */ } /* Return non-zero if CONVFN matches FILENAME up to the length of FILENAME (FILENAME_LEN). If _rl_completion_case_fold is set, compare without regard to the alphabetic case of characters. If _rl_completion_case_map is set, make `-' and `_' equivalent. CONVFN is the possibly-converted directory entry; FILENAME is what the user typed. */ static int complete_fncmp (convfn, convlen, filename, filename_len) const char *convfn; int convlen; const char *filename; int filename_len; { register char *s1, *s2; int d, len; #if defined (HANDLE_MULTIBYTE) size_t v1, v2; mbstate_t ps1, ps2; wchar_t wc1, wc2; #endif #if defined (HANDLE_MULTIBYTE) memset (&ps1, 0, sizeof (mbstate_t)); memset (&ps2, 0, sizeof (mbstate_t)); #endif if (filename_len == 0) return 1; if (convlen < filename_len) return 0; len = filename_len; s1 = (char *)convfn; s2 = (char *)filename; /* Otherwise, if these match up to the length of filename, then it is a match. */ if (_rl_completion_case_fold && _rl_completion_case_map) { /* Case-insensitive comparison treating _ and - as equivalent */ #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { do { v1 = mbrtowc (&wc1, s1, convlen, &ps1); v2 = mbrtowc (&wc2, s2, filename_len, &ps2); if (v1 == 0 && v2 == 0) return 1; else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (*s1 != *s2) /* do byte comparison */ return 0; else if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) return 0; s1++; s2++; len--; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); s1 += v1; s2 += v1; len -= v1; if ((wc1 == L'-' || wc1 == L'_') && (wc2 == L'-' || wc2 == L'_')) continue; if (wc1 != wc2) return 0; } while (len != 0); } else #endif { do { d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* *s1 == [-_] && *s2 == [-_] */ if ((*s1 == '-' || *s1 == '_') && (*s2 == '-' || *s2 == '_')) d = 0; if (d != 0) return 0; s1++; s2++; /* already checked convlen >= filename_len */ } while (--len != 0); } return 1; } else if (_rl_completion_case_fold) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { do { v1 = mbrtowc (&wc1, s1, convlen, &ps1); v2 = mbrtowc (&wc2, s2, filename_len, &ps2); if (v1 == 0 && v2 == 0) return 1; else if (MB_INVALIDCH (v1) || MB_INVALIDCH (v2)) { if (*s1 != *s2) /* do byte comparison */ return 0; s1++; s2++; len--; continue; } wc1 = towlower (wc1); wc2 = towlower (wc2); if (wc1 != wc2) return 0; s1 += v1; s2 += v1; len -= v1; } while (len != 0); return 1; } else #endif if ((_rl_to_lower (convfn[0]) == _rl_to_lower (filename[0])) && (convlen >= filename_len) && (_rl_strnicmp (filename, convfn, filename_len) == 0)) return 1; } else { if ((convfn[0] == filename[0]) && (convlen >= filename_len) && (strncmp (filename, convfn, filename_len) == 0)) return 1; } return 0; } /* Okay, now we write the entry_function for filename completion. In the general case. Note that completion in the shell is a little different because of all the pathnames that must be followed when looking up the completion for a command. */ char * rl_filename_completion_function (text, state) const char *text; int state; { static DIR *directory = (DIR *)NULL; static char *filename = (char *)NULL; static char *dirname = (char *)NULL; static char *users_dirname = (char *)NULL; static int filename_len; char *temp, *dentry, *convfn; int dirlen, dentlen, convlen; int tilde_dirname; struct dirent *entry; /* If we don't have any state, then do some initialization. */ if (state == 0) { /* If we were interrupted before closing the directory or reading all of its contents, close it. */ if (directory) { closedir (directory); directory = (DIR *)NULL; } FREE (dirname); FREE (filename); FREE (users_dirname); filename = savestring (text); if (*text == 0) text = "."; dirname = savestring (text); temp = strrchr (dirname, '/'); #if defined (__MSDOS__) || defined (_WIN32) /* special hack for //X/... */ if (dirname[0] == '/' && dirname[1] == '/' && ISALPHA ((unsigned char)dirname[2]) && dirname[3] == '/') temp = strrchr (dirname + 3, '/'); #endif if (temp) { strcpy (filename, ++temp); *temp = '\0'; } #if defined (__MSDOS__) || (defined (_WIN32) && !defined (__CYGWIN__)) /* searches from current directory on the drive */ else if (ISALPHA ((unsigned char)dirname[0]) && dirname[1] == ':') { strcpy (filename, dirname + 2); dirname[2] = '\0'; } #endif else { dirname[0] = '.'; dirname[1] = '\0'; } /* We aren't done yet. We also support the "~user" syntax. */ /* Save the version of the directory that the user typed, dequoting it if necessary. */ if (rl_completion_found_quote && rl_filename_dequoting_function) users_dirname = (*rl_filename_dequoting_function) (dirname, rl_completion_quote_character); else users_dirname = savestring (dirname); tilde_dirname = 0; if (*dirname == '~') { temp = tilde_expand (dirname); xfree (dirname); dirname = temp; tilde_dirname = 1; } /* We have saved the possibly-dequoted version of the directory name the user typed. Now transform the directory name we're going to pass to opendir(2). The directory rewrite hook modifies only the directory name; the directory completion hook modifies both the directory name passed to opendir(2) and the version the user typed. Both the directory completion and rewrite hooks should perform any necessary dequoting. The hook functions return 1 if they modify the directory name argument. If either hook returns 0, it should not modify the directory name pointer passed as an argument. */ if (rl_directory_rewrite_hook) (*rl_directory_rewrite_hook) (&dirname); else if (rl_directory_completion_hook && (*rl_directory_completion_hook) (&dirname)) { xfree (users_dirname); users_dirname = savestring (dirname); } else if (tilde_dirname == 0 && rl_completion_found_quote && rl_filename_dequoting_function) { /* delete single and double quotes */ xfree (dirname); dirname = savestring (users_dirname); } directory = opendir (dirname); /* Now dequote a non-null filename. FILENAME will not be NULL, but may be empty. */ if (*filename && rl_completion_found_quote && rl_filename_dequoting_function) { /* delete single and double quotes */ temp = (*rl_filename_dequoting_function) (filename, rl_completion_quote_character); xfree (filename); filename = temp; } filename_len = strlen (filename); rl_filename_completion_desired = 1; } /* At this point we should entertain the possibility of hacking wildcarded filenames, like /usr/man/man/te. If the directory name contains globbing characters, then build an array of directories, and then map over that list while completing. */ /* *** UNIMPLEMENTED *** */ /* Now that we have some state, we can read the directory. */ entry = (struct dirent *)NULL; while (directory && (entry = readdir (directory))) { convfn = dentry = entry->d_name; convlen = dentlen = D_NAMLEN (entry); if (rl_filename_rewrite_hook) { convfn = (*rl_filename_rewrite_hook) (dentry, dentlen); convlen = (convfn == dentry) ? dentlen : strlen (convfn); } /* Special case for no filename. If the user has disabled the `match-hidden-files' variable, skip filenames beginning with `.'. All other entries except "." and ".." match. */ if (filename_len == 0) { if (_rl_match_hidden_files == 0 && HIDDEN_FILE (convfn)) continue; if (convfn[0] != '.' || (convfn[1] && (convfn[1] != '.' || convfn[2]))) break; } else { if (complete_fncmp (convfn, convlen, filename, filename_len)) break; } } if (entry == 0) { if (directory) { closedir (directory); directory = (DIR *)NULL; } if (dirname) { xfree (dirname); dirname = (char *)NULL; } if (filename) { xfree (filename); filename = (char *)NULL; } if (users_dirname) { xfree (users_dirname); users_dirname = (char *)NULL; } return (char *)NULL; } else { /* dirname && (strcmp (dirname, ".") != 0) */ if (dirname && (dirname[0] != '.' || dirname[1])) { if (rl_complete_with_tilde_expansion && *users_dirname == '~') { dirlen = strlen (dirname); temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry)); strcpy (temp, dirname); /* Canonicalization cuts off any final slash present. We may need to add it back. */ if (dirname[dirlen - 1] != '/') { temp[dirlen++] = '/'; temp[dirlen] = '\0'; } } else { dirlen = strlen (users_dirname); temp = (char *)xmalloc (2 + dirlen + D_NAMLEN (entry)); strcpy (temp, users_dirname); /* Make sure that temp has a trailing slash here. */ if (users_dirname[dirlen - 1] != '/') temp[dirlen++] = '/'; } strcpy (temp + dirlen, convfn); } else temp = savestring (convfn); if (convfn != dentry) xfree (convfn); return (temp); } } /* An initial implementation of a menu completion function a la tcsh. The first time (if the last readline command was not rl_old_menu_complete), we generate the list of matches. This code is very similar to the code in rl_complete_internal -- there should be a way to combine the two. Then, for each item in the list of matches, we insert the match in an undoable fashion, with the appropriate character appended (this happens on the second and subsequent consecutive calls to rl_old_menu_complete). When we hit the end of the match list, we restore the original unmatched text, ring the bell, and reset the counter to zero. */ int rl_old_menu_complete (count, invoking_key) int count, invoking_key; { rl_compentry_func_t *our_func; int matching_filenames, found_quote; static char *orig_text; static char **matches = (char **)0; static int match_list_index = 0; static int match_list_size = 0; static int orig_start, orig_end; static char quote_char; static int delimiter; /* The first time through, we generate the list of matches and set things up to insert them. */ if (rl_last_func != rl_old_menu_complete) { /* Clean up from previous call, if any. */ FREE (orig_text); if (matches) _rl_free_match_list (matches); match_list_index = match_list_size = 0; matches = (char **)NULL; rl_completion_invoking_key = invoking_key; RL_SETSTATE(RL_STATE_COMPLETING); /* Only the completion entry function can change these. */ set_completion_defaults ('%'); our_func = rl_menu_completion_entry_function; if (our_func == 0) our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ orig_end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); orig_start = rl_point; rl_point = orig_end; orig_text = rl_copy_text (orig_start, orig_end); matches = gen_completion_matches (orig_text, orig_start, orig_end, our_func, found_quote, quote_char); /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ matching_filenames = rl_filename_completion_desired; if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) { rl_ding (); FREE (matches); matches = (char **)0; FREE (orig_text); orig_text = (char *)0; completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); return (0); } RL_UNSETSTATE(RL_STATE_COMPLETING); for (match_list_size = 0; matches[match_list_size]; match_list_size++) ; /* matches[0] is lcd if match_list_size > 1, but the circular buffer code below should take care of it. */ if (match_list_size > 1 && _rl_complete_show_all) display_matches (matches); } /* Now we have the list of matches. Replace the text between rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with matches[match_list_index], and add any necessary closing char. */ if (matches == 0 || match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; completion_changed_buffer = 0; return (0); } match_list_index += count; if (match_list_index < 0) { while (match_list_index < 0) match_list_index += match_list_size; } else match_list_index %= match_list_size; if (match_list_index == 0 && match_list_size > 1) { rl_ding (); insert_match (orig_text, orig_start, MULT_MATCH, "e_char); } else { insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, "e_char); append_to_match (matches[match_list_index], delimiter, quote_char, strcmp (orig_text, matches[match_list_index])); } completion_changed_buffer = 1; return (0); } int rl_menu_complete (count, ignore) int count, ignore; { rl_compentry_func_t *our_func; int matching_filenames, found_quote; static char *orig_text; static char **matches = (char **)0; static int match_list_index = 0; static int match_list_size = 0; static int nontrivial_lcd = 0; static int full_completion = 0; /* set to 1 if menu completion should reinitialize on next call */ static int orig_start, orig_end; static char quote_char; static int delimiter, cstate; /* The first time through, we generate the list of matches and set things up to insert them. */ if ((rl_last_func != rl_menu_complete && rl_last_func != rl_backward_menu_complete) || full_completion) { /* Clean up from previous call, if any. */ FREE (orig_text); if (matches) _rl_free_match_list (matches); match_list_index = match_list_size = 0; matches = (char **)NULL; full_completion = 0; RL_SETSTATE(RL_STATE_COMPLETING); /* Only the completion entry function can change these. */ set_completion_defaults ('%'); our_func = rl_menu_completion_entry_function; if (our_func == 0) our_func = rl_completion_entry_function ? rl_completion_entry_function : rl_filename_completion_function; /* We now look backwards for the start of a filename/variable word. */ orig_end = rl_point; found_quote = delimiter = 0; quote_char = '\0'; if (rl_point) /* This (possibly) changes rl_point. If it returns a non-zero char, we know we have an open quote. */ quote_char = _rl_find_completion_word (&found_quote, &delimiter); orig_start = rl_point; rl_point = orig_end; orig_text = rl_copy_text (orig_start, orig_end); matches = gen_completion_matches (orig_text, orig_start, orig_end, our_func, found_quote, quote_char); nontrivial_lcd = matches && strcmp (orig_text, matches[0]) != 0; /* If we are matching filenames, the attempted completion function will have set rl_filename_completion_desired to a non-zero value. The basic rl_filename_completion_function does this. */ matching_filenames = rl_filename_completion_desired; if (matches == 0 || postprocess_matches (&matches, matching_filenames) == 0) { rl_ding (); FREE (matches); matches = (char **)0; FREE (orig_text); orig_text = (char *)0; completion_changed_buffer = 0; RL_UNSETSTATE(RL_STATE_COMPLETING); return (0); } RL_UNSETSTATE(RL_STATE_COMPLETING); for (match_list_size = 0; matches[match_list_size]; match_list_size++) ; if (match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; match_list_index = 0; completion_changed_buffer = 0; return (0); } /* matches[0] is lcd if match_list_size > 1, but the circular buffer code below should take care of it. */ if (*matches[0]) { insert_match (matches[0], orig_start, matches[1] ? MULT_MATCH : SINGLE_MATCH, "e_char); orig_end = orig_start + strlen (matches[0]); completion_changed_buffer = STREQ (orig_text, matches[0]) == 0; } if (match_list_size > 1 && _rl_complete_show_all) { display_matches (matches); /* If there are so many matches that the user has to be asked whether or not he wants to see the matches, menu completion is unwieldy. */ if (rl_completion_query_items > 0 && match_list_size >= rl_completion_query_items) { rl_ding (); FREE (matches); matches = (char **)0; full_completion = 1; return (0); } else if (_rl_menu_complete_prefix_first) { rl_ding (); return (0); } } else if (match_list_size <= 1) { append_to_match (matches[0], delimiter, quote_char, nontrivial_lcd); full_completion = 1; return (0); } else if (_rl_menu_complete_prefix_first && match_list_size > 1) { rl_ding (); return (0); } } /* Now we have the list of matches. Replace the text between rl_line_buffer[orig_start] and rl_line_buffer[rl_point] with matches[match_list_index], and add any necessary closing char. */ if (matches == 0 || match_list_size == 0) { rl_ding (); FREE (matches); matches = (char **)0; completion_changed_buffer = 0; return (0); } match_list_index += count; if (match_list_index < 0) { while (match_list_index < 0) match_list_index += match_list_size; } else match_list_index %= match_list_size; if (match_list_index == 0 && match_list_size > 1) { rl_ding (); insert_match (matches[0], orig_start, MULT_MATCH, "e_char); } else { insert_match (matches[match_list_index], orig_start, SINGLE_MATCH, "e_char); append_to_match (matches[match_list_index], delimiter, quote_char, strcmp (orig_text, matches[match_list_index])); } completion_changed_buffer = 1; return (0); } int rl_backward_menu_complete (count, key) int count, key; { /* Positive arguments to backward-menu-complete translate into negative arguments for menu-complete, and vice versa. */ return (rl_menu_complete (-count, key)); } readline-7.0/display.c000644 000436 000120 00000270702 12746451675 015050 0ustar00chetadmin000000 000000 /* display.c -- readline redisplay facility. */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #include "posixstat.h" #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #ifdef __MSDOS__ # include #endif /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Termcap library stuff. */ #include "tcap.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ static void update_line PARAMS((char *, char *, int, int, int, int)); static void space_to_eol PARAMS((int)); static void delete_chars PARAMS((int)); static void insert_some_chars PARAMS((char *, int, int)); static void open_some_spaces PARAMS((int)); static void cr PARAMS((void)); static void redraw_prompt PARAMS((char *)); /* Values for FLAGS */ #define PMT_MULTILINE 0x01 static char *expand_prompt PARAMS((char *, int, int *, int *, int *, int *)); /* State of visible and invisible lines. */ struct line_state { char *line; int *lbreaks; int lbsize; #if defined (HANDLE_MULTIBYTE) int wbsize; int *wrapped_line; #endif }; /* The line display buffers. One is the line currently displayed on the screen. The other is the line about to be displayed. */ static struct line_state line_state_array[2]; static struct line_state *line_state_visible = &line_state_array[0]; static struct line_state *line_state_invisible = &line_state_array[1]; static int line_structures_initialized = 0; /* Backwards-compatible names. */ #define inv_lbreaks (line_state_invisible->lbreaks) #define inv_lbsize (line_state_invisible->lbsize) #define vis_lbreaks (line_state_visible->lbreaks) #define vis_lbsize (line_state_visible->lbsize) #define visible_line (line_state_visible->line) #define invisible_line (line_state_invisible->line) #if defined (HANDLE_MULTIBYTE) static int _rl_col_width PARAMS((const char *, int, int, int)); #else # define _rl_col_width(l, s, e, f) (((e) <= (s)) ? 0 : (e) - (s)) #endif /* Heuristic used to decide whether it is faster to move from CUR to NEW by backing up or outputting a carriage return and moving forward. CUR and NEW are either both buffer positions or absolute screen positions. */ #define CR_FASTER(new, cur) (((new) + 1) < ((cur) - (new))) /* _rl_last_c_pos is an absolute cursor position in multibyte locales and a buffer index in others. This macro is used when deciding whether the current cursor position is in the middle of a prompt string containing invisible characters. XXX - might need to take `modmark' into account. */ /* XXX - only valid when tested against _rl_last_c_pos; buffer indices need to use prompt_last_invisible directly. */ #define PROMPT_ENDING_INDEX \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) ? prompt_physical_chars : prompt_last_invisible+1) /* **************************************************************** */ /* */ /* Display stuff */ /* */ /* **************************************************************** */ /* This is the stuff that is hard for me. I never seem to write good display routines in C. Let's see how I do this time. */ /* (PWP) Well... Good for a simple line updater, but totally ignores the problems of input lines longer than the screen width. update_line and the code that calls it makes a multiple line, automatically wrapping line update. Careful attention needs to be paid to the vertical position variables. */ /* Keep two buffers; one which reflects the current contents of the screen, and the other to draw what we think the new contents should be. Then compare the buffers, and make whatever changes to the screen itself that we should. Finally, make the buffer that we just drew into be the one which reflects the current contents of the screen, and place the cursor where it belongs. Commands that want to can fix the display themselves, and then let this function know that the display has been fixed by setting the RL_DISPLAY_FIXED variable. This is good for efficiency. */ /* Application-specific redisplay function. */ rl_voidfunc_t *rl_redisplay_function = rl_redisplay; /* Global variables declared here. */ /* What YOU turn on when you have handled all redisplay yourself. */ int rl_display_fixed = 0; int _rl_suppress_redisplay = 0; int _rl_want_redisplay = 0; /* The stuff that gets printed out before the actual text of the line. This is usually pointing to rl_prompt. */ char *rl_display_prompt = (char *)NULL; /* Variables used to include the editing mode in the prompt. */ char *_rl_emacs_mode_str; int _rl_emacs_modestr_len; char *_rl_vi_ins_mode_str; int _rl_vi_ins_modestr_len; char *_rl_vi_cmd_mode_str; int _rl_vi_cmd_modestr_len; /* Pseudo-global variables declared here. */ /* The visible cursor position. If you print some text, adjust this. */ /* NOTE: _rl_last_c_pos is used as a buffer index when not in a locale supporting multibyte characters, and an absolute cursor position when in such a locale. This is an artifact of the donated multibyte support. Care must be taken when modifying its value. */ int _rl_last_c_pos = 0; int _rl_last_v_pos = 0; static int cpos_adjusted; static int cpos_buffer_position; static int displaying_prompt_first_line; static int prompt_multibyte_chars; /* Number of lines currently on screen minus 1. */ int _rl_vis_botlin = 0; static int _rl_inv_botlin = 0; /* Variables used only in this file. */ /* The last left edge of text that was displayed. This is used when doing horizontal scrolling. It shifts in thirds of a screenwidth. */ static int last_lmargin; /* A buffer for `modeline' messages. */ static char *msg_buf = 0; static int msg_bufsiz = 0; /* Non-zero forces the redisplay even if we thought it was unnecessary. */ static int forced_display; /* Default and initial buffer size. Can grow. */ static int line_size = 1024; /* Variables to keep track of the expanded prompt string, which may include invisible characters. */ static char *local_prompt, *local_prompt_prefix; static int local_prompt_len; static int prompt_visible_length, prompt_prefix_length; /* The number of invisible characters in the line currently being displayed on the screen. */ static int visible_wrap_offset; /* The number of invisible characters in the prompt string. Static so it can be shared between rl_redisplay and update_line */ static int wrap_offset; /* The index of the last invisible character in the prompt string. */ static int prompt_last_invisible; /* The length (buffer offset) of the first line of the last (possibly multi-line) buffer displayed on the screen. */ static int visible_first_line_len; /* Number of invisible characters on the first physical line of the prompt. Only valid when the number of physical characters in the prompt exceeds (or is equal to) _rl_screenwidth. */ static int prompt_invis_chars_first_line; static int prompt_last_screen_line; static int prompt_physical_chars; /* set to a non-zero value by rl_redisplay if we are marking modified history lines and the current line is so marked. */ static int modmark; /* Variables to save and restore prompt and display information. */ /* These are getting numerous enough that it's time to create a struct. */ static char *saved_local_prompt; static char *saved_local_prefix; static int saved_last_invisible; static int saved_visible_length; static int saved_prefix_length; static int saved_local_length; static int saved_invis_chars_first_line; static int saved_physical_chars; /* Return a string indicating the editing mode, for use in the prompt. */ static char * prompt_modestr (lenp) int *lenp; { if (rl_editing_mode == emacs_mode) { if (lenp) *lenp = _rl_emacs_mode_str ? _rl_emacs_modestr_len : RL_EMACS_MODESTR_DEFLEN; return _rl_emacs_mode_str ? _rl_emacs_mode_str : RL_EMACS_MODESTR_DEFAULT; } else if (_rl_keymap == vi_insertion_keymap) { if (lenp) *lenp = _rl_vi_ins_mode_str ? _rl_vi_ins_modestr_len : RL_VI_INS_MODESTR_DEFLEN; return _rl_vi_ins_mode_str ? _rl_vi_ins_mode_str : RL_VI_INS_MODESTR_DEFAULT; /* vi insert mode */ } else { if (lenp) *lenp = _rl_vi_cmd_mode_str ? _rl_vi_cmd_modestr_len : RL_VI_CMD_MODESTR_DEFLEN; return _rl_vi_cmd_mode_str ? _rl_vi_cmd_mode_str : RL_VI_CMD_MODESTR_DEFAULT; /* vi command mode */ } } /* Expand the prompt string S and return the number of visible characters in *LP, if LP is not null. This is currently more-or-less a placeholder for expansion. LIP, if non-null is a place to store the index of the last invisible character in the returned string. NIFLP, if non-zero, is a place to store the number of invisible characters in the first prompt line. The previous are used as byte counts -- indexes into a character buffer. */ /* Current implementation: \001 (^A) start non-visible characters \002 (^B) end non-visible characters all characters except \001 and \002 (following a \001) are copied to the returned string; all characters except those between \001 and \002 are assumed to be `visible'. */ /* Possible values for FLAGS: PMT_MULTILINE caller indicates that this is part of a multiline prompt */ static char * expand_prompt (pmt, flags, lp, lip, niflp, vlp) char *pmt; int flags; int *lp, *lip, *niflp, *vlp; { char *r, *ret, *p, *igstart, *nprompt, *ms; int l, rl, last, ignoring, ninvis, invfl, invflset, ind, pind, physchars; int mlen; /* We only expand the mode string for the last line of a multiline prompt (a prompt with embedded newlines). */ ms = (((pmt == rl_prompt) ^ (flags & PMT_MULTILINE)) && _rl_show_mode_in_prompt) ? prompt_modestr (&mlen) : 0; if (ms) { l = strlen (pmt); nprompt = (char *)xmalloc (l + mlen + 1); memcpy (nprompt, ms, mlen); strcpy (nprompt + mlen, pmt); } else nprompt = pmt; /* Short-circuit if we can. */ if ((MB_CUR_MAX <= 1 || rl_byte_oriented) && strchr (nprompt, RL_PROMPT_START_IGNORE) == 0) { r = (nprompt == pmt) ? savestring (pmt) : nprompt; if (lp) *lp = strlen (r); if (lip) *lip = 0; if (niflp) *niflp = 0; if (vlp) *vlp = lp ? *lp : strlen (r); return r; } l = strlen (nprompt); /* XXX */ r = ret = (char *)xmalloc (l + 1); rl = physchars = 0; /* mode string now part of nprompt */ invfl = 0; /* invisible chars in first line of prompt */ invflset = 0; /* we only want to set invfl once */ igstart = 0; for (ignoring = last = ninvis = 0, p = nprompt; p && *p; p++) { /* This code strips the invisible character string markers RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE */ if (ignoring == 0 && *p == RL_PROMPT_START_IGNORE) /* XXX - check ignoring? */ { ignoring = 1; igstart = p; continue; } else if (ignoring && *p == RL_PROMPT_END_IGNORE) { ignoring = 0; if (p != (igstart + 1)) last = r - ret - 1; continue; } else { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { pind = p - nprompt; ind = _rl_find_next_mbchar (nprompt, pind, 1, MB_FIND_NONZERO); l = ind - pind; while (l--) *r++ = *p++; if (!ignoring) { /* rl ends up being assigned to prompt_visible_length, which is the number of characters in the buffer that contribute to characters on the screen, which might not be the same as the number of physical characters on the screen in the presence of multibyte characters */ rl += ind - pind; physchars += _rl_col_width (nprompt, pind, ind, 0); } else ninvis += ind - pind; p--; /* compensate for later increment */ } else #endif { *r++ = *p; if (!ignoring) { rl++; /* visible length byte counter */ physchars++; } else ninvis++; /* invisible chars byte counter */ } if (invflset == 0 && rl >= _rl_screenwidth) { invfl = ninvis; invflset = 1; } } } if (rl < _rl_screenwidth) invfl = ninvis; *r = '\0'; if (lp) *lp = rl; if (lip) *lip = last; if (niflp) *niflp = invfl; if (vlp) *vlp = physchars; if (nprompt != pmt) free (nprompt); return ret; } /* Just strip out RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE from PMT and return the rest of PMT. */ char * _rl_strip_prompt (pmt) char *pmt; { char *ret; ret = expand_prompt (pmt, 0, (int *)NULL, (int *)NULL, (int *)NULL, (int *)NULL); return ret; } void _rl_reset_prompt () { rl_visible_prompt_length = rl_expand_prompt (rl_prompt); } /* * Expand the prompt string into the various display components, if * necessary. * * local_prompt = expanded last line of string in rl_display_prompt * (portion after the final newline) * local_prompt_prefix = portion before last newline of rl_display_prompt, * expanded via expand_prompt * prompt_visible_length = number of visible characters in local_prompt * prompt_prefix_length = number of visible characters in local_prompt_prefix * * This function is called once per call to readline(). It may also be * called arbitrarily to expand the primary prompt. * * The return value is the number of visible characters on the last line * of the (possibly multi-line) prompt. */ int rl_expand_prompt (prompt) char *prompt; { char *p, *t; int c; /* Clear out any saved values. */ FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; prompt_last_invisible = prompt_invis_chars_first_line = 0; prompt_visible_length = prompt_physical_chars = 0; if (prompt == 0 || *prompt == 0) return (0); p = strrchr (prompt, '\n'); if (p == 0) { /* The prompt is only one logical line, though it might wrap. */ local_prompt = expand_prompt (prompt, 0, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)0; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; return (prompt_visible_length); } else { /* The prompt spans multiple lines. */ t = ++p; local_prompt = expand_prompt (p, PMT_MULTILINE, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); c = *t; *t = '\0'; /* The portion of the prompt string up to and including the final newline is now null-terminated. */ local_prompt_prefix = expand_prompt (prompt, PMT_MULTILINE, &prompt_prefix_length, (int *)NULL, (int *)NULL, (int *)NULL); *t = c; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; return (prompt_prefix_length); } } /* Initialize the VISIBLE_LINE and INVISIBLE_LINE arrays, and their associated arrays of line break markers. MINSIZE is the minimum size of VISIBLE_LINE and INVISIBLE_LINE; if it is greater than LINE_SIZE, LINE_SIZE is increased. If the lines have already been allocated, this ensures that they can hold at least MINSIZE characters. */ static void init_line_structures (minsize) int minsize; { register int n; if (invisible_line == 0) /* initialize it */ { if (line_size < minsize) line_size = minsize; visible_line = (char *)xmalloc (line_size); invisible_line = (char *)xmalloc (line_size); } else if (line_size < minsize) /* ensure it can hold MINSIZE chars */ { line_size *= 2; if (line_size < minsize) line_size = minsize; visible_line = (char *)xrealloc (visible_line, line_size); invisible_line = (char *)xrealloc (invisible_line, line_size); } for (n = minsize; n < line_size; n++) { visible_line[n] = 0; invisible_line[n] = 1; } if (vis_lbreaks == 0) { /* should be enough. */ inv_lbsize = vis_lbsize = 256; #if defined (HANDLE_MULTIBYTE) line_state_visible->wbsize = vis_lbsize; line_state_visible->wrapped_line = (int *)xmalloc (line_state_visible->wbsize * sizeof (int)); line_state_invisible->wbsize = inv_lbsize; line_state_invisible->wrapped_line = (int *)xmalloc (line_state_invisible->wbsize * sizeof (int)); #endif inv_lbreaks = (int *)xmalloc (inv_lbsize * sizeof (int)); vis_lbreaks = (int *)xmalloc (vis_lbsize * sizeof (int)); inv_lbreaks[0] = vis_lbreaks[0] = 0; } line_structures_initialized = 1; } /* Basic redisplay algorithm. */ void rl_redisplay () { register int in, out, c, linenum, cursor_linenum; register char *line; int inv_botlin, lb_botlin, lb_linenum, o_cpos; int newlines, lpos, temp, n0, num, prompt_lines_estimate; char *prompt_this_line; int mb_cur_max = MB_CUR_MAX; #if defined (HANDLE_MULTIBYTE) wchar_t wc; size_t wc_bytes; int wc_width; mbstate_t ps; int _rl_wrapped_multicolumn = 0; #endif if (_rl_echoing_p == 0) return; /* Block keyboard interrupts because this function manipulates global data structures. */ _rl_block_sigint (); RL_SETSTATE (RL_STATE_REDISPLAYING); if (!rl_display_prompt) rl_display_prompt = ""; if (line_structures_initialized == 0) { init_line_structures (0); rl_on_new_line (); } /* Draw the line into the buffer. */ cpos_buffer_position = -1; prompt_multibyte_chars = prompt_visible_length - prompt_physical_chars; line = invisible_line; out = inv_botlin = 0; /* Mark the line as modified or not. We only do this for history lines. */ modmark = 0; if (_rl_mark_modified_lines && current_history () && rl_undo_list) { line[out++] = '*'; line[out] = '\0'; modmark = 1; } /* If someone thought that the redisplay was handled, but the currently visible line has a different modification state than the one about to become visible, then correct the caller's misconception. */ if (visible_line[0] != invisible_line[0]) rl_display_fixed = 0; /* If the prompt to be displayed is the `primary' readline prompt (the one passed to readline()), use the values we have already expanded. If not, use what's already in rl_display_prompt. WRAP_OFFSET is the number of non-visible characters in the prompt string. */ if (rl_display_prompt == rl_prompt || local_prompt) { if (local_prompt_prefix && forced_display) _rl_output_some_chars (local_prompt_prefix, strlen (local_prompt_prefix)); if (local_prompt_len > 0) { temp = local_prompt_len + out + 2; if (temp >= line_size) { line_size = (temp + 1024) - (temp % 1024); visible_line = (char *)xrealloc (visible_line, line_size); line = invisible_line = (char *)xrealloc (invisible_line, line_size); } strncpy (line + out, local_prompt, local_prompt_len); out += local_prompt_len; } line[out] = '\0'; wrap_offset = local_prompt_len - prompt_visible_length; } else { int pmtlen; prompt_this_line = strrchr (rl_display_prompt, '\n'); if (!prompt_this_line) prompt_this_line = rl_display_prompt; else { prompt_this_line++; pmtlen = prompt_this_line - rl_display_prompt; /* temp var */ if (forced_display) { _rl_output_some_chars (rl_display_prompt, pmtlen); /* Make sure we are at column zero even after a newline, regardless of the state of terminal output processing. */ if (pmtlen < 2 || prompt_this_line[-2] != '\r') cr (); } } prompt_physical_chars = pmtlen = strlen (prompt_this_line); temp = pmtlen + out + 2; if (temp >= line_size) { line_size = (temp + 1024) - (temp % 1024); visible_line = (char *)xrealloc (visible_line, line_size); line = invisible_line = (char *)xrealloc (invisible_line, line_size); } strncpy (line + out, prompt_this_line, pmtlen); out += pmtlen; line[out] = '\0'; wrap_offset = prompt_invis_chars_first_line = 0; } #define CHECK_INV_LBREAKS() \ do { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ } while (0) #if defined (HANDLE_MULTIBYTE) #define CHECK_LPOS() \ do { \ lpos++; \ if (lpos >= _rl_screenwidth) \ { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ inv_lbreaks[++newlines] = out; \ if (newlines >= (line_state_invisible->wbsize - 1)) \ { \ line_state_invisible->wbsize *= 2; \ line_state_invisible->wrapped_line = (int *)xrealloc (line_state_invisible->wrapped_line, line_state_invisible->wbsize * sizeof(int)); \ } \ line_state_invisible->wrapped_line[newlines] = _rl_wrapped_multicolumn; \ lpos = 0; \ } \ } while (0) #else #define CHECK_LPOS() \ do { \ lpos++; \ if (lpos >= _rl_screenwidth) \ { \ if (newlines >= (inv_lbsize - 2)) \ { \ inv_lbsize *= 2; \ inv_lbreaks = (int *)xrealloc (inv_lbreaks, inv_lbsize * sizeof (int)); \ } \ inv_lbreaks[++newlines] = out; \ lpos = 0; \ } \ } while (0) #endif /* inv_lbreaks[i] is where line i starts in the buffer. */ inv_lbreaks[newlines = 0] = 0; /* lpos is a physical cursor position, so it needs to be adjusted by the number of invisible characters in the prompt, per line */ lpos = prompt_physical_chars + modmark; #if defined (HANDLE_MULTIBYTE) memset (line_state_invisible->wrapped_line, 0, line_state_invisible->wbsize * sizeof (int)); num = 0; #endif /* prompt_invis_chars_first_line is the number of invisible characters in the first physical line of the prompt. wrap_offset - prompt_invis_chars_first_line is the number of invis chars on the second (or, more generally, last) line. */ /* This is zero-based, used to set the newlines */ prompt_lines_estimate = lpos / _rl_screenwidth; /* what if lpos is already >= _rl_screenwidth before we start drawing the contents of the command line? */ while (lpos >= _rl_screenwidth) { int z, p; int nocorrect, wadjust; nocorrect = 0; /* Adjust depending on the invisible characters in the line. We use a heuristic based on experience: invisible characters nearly always appear in the first and last lines of the prompt */ wadjust = (newlines == 0) ? prompt_invis_chars_first_line : ((newlines == prompt_lines_estimate) ? wrap_offset : prompt_invis_chars_first_line); /* fix from Darin Johnson for prompt string with invisible characters that is longer than the screen width. The prompt_invis_chars_first_line variable could be made into an array saying how many invisible characters there are per line, but that's probably too much work for the benefit gained. How many people have prompts that exceed two physical lines? Additional logic fix from Edward Catmur */ #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) { nocorrect = 1; n0 = num; temp = local_prompt_len; while (num < temp) { /* This has to take invisible characters in the prompt into account. */ z = _rl_col_width (local_prompt, n0, num, 1) - wadjust; if (z > _rl_screenwidth) { num = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); break; } else if (z == _rl_screenwidth) { /* If we are in the middle or at the end of a multibyte character, we want to move to the start, then find out where it ends so we know where to insert the newline. If this isn't a multibyte character, its the same as num++ */ p = _rl_find_prev_mbchar (local_prompt, num, MB_FIND_ANY); num = _rl_find_next_mbchar (local_prompt, p, 1, MB_FIND_ANY); break; } num++; } temp = num; } else #endif /* !HANDLE_MULTIBYTE */ temp = ((newlines + 1) * _rl_screenwidth); /* Now account for invisible characters in the current line. */ /* XXX - this assumes that the invisible characters may be split, but only between the first and the last lines. */ if (nocorrect == 0) temp += wadjust; inv_lbreaks[++newlines] = temp; #if defined (HANDLE_MULTIBYTE) /* lpos is a physical cursor position, so it needs to take the invisible characters into account. */ if (mb_cur_max > 1 && rl_byte_oriented == 0 && prompt_multibyte_chars > 0) lpos -= _rl_col_width (local_prompt, n0, num, 1) - wadjust; else #endif lpos -= _rl_screenwidth; /* all physical cursor positions */ } prompt_last_screen_line = newlines; /* Draw the rest of the line (after the prompt) into invisible_line, keeping track of where the cursor is (cpos_buffer_position), the number of the line containing the cursor (lb_linenum), the last line number (lb_botlin and inv_botlin). It maintains an array of line breaks for display (inv_lbreaks). This handles expanding tabs for display and displaying meta characters. */ lb_linenum = 0; #if defined (HANDLE_MULTIBYTE) in = 0; if (mb_cur_max > 1 && rl_byte_oriented == 0) { memset (&ps, 0, sizeof (mbstate_t)); /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ wc_bytes = mbrtowc (&wc, rl_line_buffer, rl_end, &ps); } else wc_bytes = 1; while (in < rl_end) #else for (in = 0; in < rl_end; in++) #endif { c = (unsigned char)rl_line_buffer[in]; #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { if (MB_INVALIDCH (wc_bytes)) { /* Byte sequence is invalid or shortened. Assume that the first byte represents a character. */ wc_bytes = 1; /* Assume that a character occupies a single column. */ wc_width = 1; memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (wc_bytes)) break; /* Found '\0' */ else { temp = WCWIDTH (wc); wc_width = (temp >= 0) ? temp : 1; } } #endif if (out + 8 >= line_size) /* XXX - 8 for \t */ { line_size *= 2; visible_line = (char *)xrealloc (visible_line, line_size); invisible_line = (char *)xrealloc (invisible_line, line_size); line = invisible_line; } if (in == rl_point) { cpos_buffer_position = out; lb_linenum = newlines; } #if defined (HANDLE_MULTIBYTE) if (META_CHAR (c) && _rl_output_meta_chars == 0) /* XXX - clean up */ #else if (META_CHAR (c)) #endif { if (_rl_output_meta_chars == 0) { sprintf (line + out, "\\%o", c); if (lpos + 4 >= _rl_screenwidth) { temp = _rl_screenwidth - lpos; CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp; lpos = 4 - temp; } else lpos += 4; out += 4; } else { line[out++] = c; CHECK_LPOS(); } } #if defined (DISPLAY_TABS) else if (c == '\t') { register int newout; #if 0 newout = (out | (int)7) + 1; #else newout = out + 8 - lpos % 8; #endif temp = newout - out; if (lpos + temp >= _rl_screenwidth) { register int temp2; temp2 = _rl_screenwidth - lpos; CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out + temp2; lpos = temp - temp2; while (out < newout) line[out++] = ' '; } else { while (out < newout) line[out++] = ' '; lpos += temp; } } #endif else if (c == '\n' && _rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) { line[out++] = '\0'; /* XXX - sentinel */ CHECK_INV_LBREAKS (); inv_lbreaks[++newlines] = out; lpos = 0; } else if (CTRL_CHAR (c) || c == RUBOUT) { line[out++] = '^'; CHECK_LPOS(); line[out++] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; CHECK_LPOS(); } else { #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { register int i; _rl_wrapped_multicolumn = 0; if (_rl_screenwidth < lpos + wc_width) for (i = lpos; i < _rl_screenwidth; i++) { /* The space will be removed in update_line() */ line[out++] = ' '; _rl_wrapped_multicolumn++; CHECK_LPOS(); } if (in == rl_point) { cpos_buffer_position = out; lb_linenum = newlines; } for (i = in; i < in+wc_bytes; i++) line[out++] = rl_line_buffer[i]; for (i = 0; i < wc_width; i++) CHECK_LPOS(); } else { line[out++] = c; CHECK_LPOS(); } #else line[out++] = c; CHECK_LPOS(); #endif } #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { in += wc_bytes; /* XXX - what if wc_bytes ends up <= 0? check for MB_INVALIDCH */ wc_bytes = mbrtowc (&wc, rl_line_buffer + in, rl_end - in, &ps); } else in++; #endif } line[out] = '\0'; if (cpos_buffer_position < 0) { cpos_buffer_position = out; lb_linenum = newlines; } inv_botlin = lb_botlin = _rl_inv_botlin = newlines; CHECK_INV_LBREAKS (); inv_lbreaks[newlines+1] = out; cursor_linenum = lb_linenum; /* CPOS_BUFFER_POSITION == position in buffer where cursor should be placed. CURSOR_LINENUM == line number where the cursor should be placed. */ /* PWP: now is when things get a bit hairy. The visible and invisible line buffers are really multiple lines, which would wrap every (screenwidth - 1) characters. Go through each in turn, finding the changed region and updating it. The line order is top to bottom. */ /* If we can move the cursor up and down, then use multiple lines, otherwise, let long lines display in a single terminal line, and horizontally scroll it. */ displaying_prompt_first_line = 1; if (_rl_horizontal_scroll_mode == 0 && _rl_term_up && *_rl_term_up) { int nleft, pos, changed_screen_line, tx; if (!rl_display_fixed || forced_display) { forced_display = 0; /* If we have more than a screenful of material to display, then only display a screenful. We should display the last screen, not the first. */ if (out >= _rl_screenchars) { #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) out = _rl_find_prev_mbchar (line, _rl_screenchars, MB_FIND_ANY); else #endif out = _rl_screenchars - 1; } /* The first line is at character position 0 in the buffer. The second and subsequent lines start at inv_lbreaks[N], offset by OFFSET (which has already been calculated above). */ #define INVIS_FIRST() (prompt_physical_chars > _rl_screenwidth ? prompt_invis_chars_first_line : wrap_offset) #define WRAP_OFFSET(line, offset) ((line == 0) \ ? (offset ? INVIS_FIRST() : 0) \ : ((line == prompt_last_screen_line) ? wrap_offset-prompt_invis_chars_first_line : 0)) #define W_OFFSET(line, offset) ((line) == 0 ? offset : 0) #define VIS_LLEN(l) ((l) > _rl_vis_botlin ? 0 : (vis_lbreaks[l+1] - vis_lbreaks[l])) #define INV_LLEN(l) (inv_lbreaks[l+1] - inv_lbreaks[l]) #define VIS_CHARS(line) (visible_line + vis_lbreaks[line]) #define VIS_LINE(line) ((line) > _rl_vis_botlin) ? "" : VIS_CHARS(line) #define INV_LINE(line) (invisible_line + inv_lbreaks[line]) #define OLD_CPOS_IN_PROMPT() (cpos_adjusted == 0 && \ _rl_last_c_pos != o_cpos && \ _rl_last_c_pos > wrap_offset && \ o_cpos < prompt_last_invisible) /* For each line in the buffer, do the updating display. */ for (linenum = 0; linenum <= inv_botlin; linenum++) { /* This can lead us astray if we execute a program that changes the locale from a non-multibyte to a multibyte one. */ o_cpos = _rl_last_c_pos; cpos_adjusted = 0; update_line (VIS_LINE(linenum), INV_LINE(linenum), linenum, VIS_LLEN(linenum), INV_LLEN(linenum), inv_botlin); /* update_line potentially changes _rl_last_c_pos, but doesn't take invisible characters into account, since _rl_last_c_pos is an absolute cursor position in a multibyte locale. See if compensating here is the right thing, or if we have to change update_line itself. There are several cases in which update_line adjusts _rl_last_c_pos itself (so it can pass _rl_move_cursor_relative accurate values); it communicates this back by setting cpos_adjusted. If we assume that _rl_last_c_pos is correct (an absolute cursor position) each time update_line is called, then we can assume in our calculations that o_cpos does not need to be adjusted by wrap_offset. */ if (linenum == 0 && (mb_cur_max > 1 && rl_byte_oriented == 0) && OLD_CPOS_IN_PROMPT()) _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && (mb_cur_max > 1 && rl_byte_oriented == 0) && cpos_adjusted == 0 && _rl_last_c_pos != o_cpos && _rl_last_c_pos > (prompt_last_invisible - _rl_screenwidth - prompt_invis_chars_first_line)) _rl_last_c_pos -= (wrap_offset-prompt_invis_chars_first_line); /* If this is the line with the prompt, we might need to compensate for invisible characters in the new line. Do this only if there is not more than one new line (which implies that we completely overwrite the old visible line) and the new line is shorter than the old. Make sure we are at the end of the new line before clearing. */ if (linenum == 0 && inv_botlin == 0 && _rl_last_c_pos == out && (wrap_offset > visible_wrap_offset) && (_rl_last_c_pos < visible_first_line_len)) { if (mb_cur_max > 1 && rl_byte_oriented == 0) nleft = _rl_screenwidth - _rl_last_c_pos; else nleft = _rl_screenwidth + wrap_offset - _rl_last_c_pos; if (nleft) _rl_clear_to_eol (nleft); } #if 0 /* This segment is intended to handle the case where the prompt has invisible characters on the second line and the new line to be displayed needs to clear the rest of the old characters out (e.g., when printing the i-search prompt). In general, the case of the new line being shorter than the old. Incomplete */ else if (linenum == prompt_last_screen_line && prompt_physical_chars > _rl_screenwidth && wrap_offset != prompt_invis_chars_first_line && _rl_last_c_pos == out && #endif /* Since the new first line is now visible, save its length. */ if (linenum == 0) visible_first_line_len = (inv_botlin > 0) ? inv_lbreaks[1] : out - wrap_offset; } /* We may have deleted some lines. If so, clear the left over blank ones at the bottom out. */ if (_rl_vis_botlin > inv_botlin) { char *tt; for (; linenum <= _rl_vis_botlin; linenum++) { tt = VIS_CHARS (linenum); _rl_move_vert (linenum); _rl_move_cursor_relative (0, tt); _rl_clear_to_eol ((linenum == _rl_vis_botlin) ? strlen (tt) : _rl_screenwidth); } } _rl_vis_botlin = inv_botlin; /* CHANGED_SCREEN_LINE is set to 1 if we have moved to a different screen line during this redisplay. */ changed_screen_line = _rl_last_v_pos != cursor_linenum; if (changed_screen_line) { _rl_move_vert (cursor_linenum); /* If we moved up to the line with the prompt using _rl_term_up, the physical cursor position on the screen stays the same, but the buffer position needs to be adjusted to account for invisible characters. */ if ((mb_cur_max == 1 || rl_byte_oriented) && cursor_linenum == 0 && wrap_offset) _rl_last_c_pos += wrap_offset; } /* We have to reprint the prompt if it contains invisible characters, since it's not generally OK to just reprint the characters from the current cursor position. But we only need to reprint it if the cursor is before the last invisible character in the prompt string. */ nleft = prompt_visible_length + wrap_offset; if (cursor_linenum == 0 && wrap_offset > 0 && _rl_last_c_pos > 0 && #if 0 _rl_last_c_pos <= PROMPT_ENDING_INDEX && local_prompt) #else _rl_last_c_pos < PROMPT_ENDING_INDEX && local_prompt) #endif { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else if (_rl_term_cr) tputs (_rl_term_cr, 1, _rl_output_character_function); #endif if (modmark) _rl_output_some_chars ("*", 1); _rl_output_some_chars (local_prompt, nleft); if (mb_cur_max > 1 && rl_byte_oriented == 0) _rl_last_c_pos = _rl_col_width (local_prompt, 0, nleft, 1) - wrap_offset + modmark; else _rl_last_c_pos = nleft + modmark; } /* Where on that line? And where does that line start in the buffer? */ pos = inv_lbreaks[cursor_linenum]; /* nleft == number of characters in the line buffer between the start of the line and the desired cursor position. */ nleft = cpos_buffer_position - pos; /* NLEFT is now a number of characters in a buffer. When in a multibyte locale, however, _rl_last_c_pos is an absolute cursor position that doesn't take invisible characters in the prompt into account. We use a fudge factor to compensate. */ /* Since _rl_backspace() doesn't know about invisible characters in the prompt, and there's no good way to tell it, we compensate for those characters here and call _rl_backspace() directly. */ if (wrap_offset && cursor_linenum == 0 && nleft < _rl_last_c_pos) { /* TX == new physical cursor position in multibyte locale. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) tx = _rl_col_width (&visible_line[pos], 0, nleft, 1) - visible_wrap_offset; else tx = nleft; if (tx >= 0 && _rl_last_c_pos > tx) { _rl_backspace (_rl_last_c_pos - tx); /* XXX */ _rl_last_c_pos = tx; } } /* We need to note that in a multibyte locale we are dealing with _rl_last_c_pos as an absolute cursor position, but moving to a point specified by a buffer position (NLEFT) that doesn't take invisible characters into account. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) _rl_move_cursor_relative (nleft, &invisible_line[pos]); else if (nleft != _rl_last_c_pos) _rl_move_cursor_relative (nleft, &invisible_line[pos]); } } else /* Do horizontal scrolling. */ { #define M_OFFSET(margin, offset) ((margin) == 0 ? offset : 0) int lmargin, ndisp, nleft, phys_c_pos, t; /* Always at top line. */ _rl_last_v_pos = 0; /* Compute where in the buffer the displayed line should start. This will be LMARGIN. */ /* The number of characters that will be displayed before the cursor. */ ndisp = cpos_buffer_position - wrap_offset; nleft = prompt_visible_length + wrap_offset; /* Where the new cursor position will be on the screen. This can be longer than SCREENWIDTH; if it is, lmargin will be adjusted. */ phys_c_pos = cpos_buffer_position - (last_lmargin ? last_lmargin : wrap_offset); t = _rl_screenwidth / 3; /* If the number of characters had already exceeded the screenwidth, last_lmargin will be > 0. */ /* If the number of characters to be displayed is more than the screen width, compute the starting offset so that the cursor is about two-thirds of the way across the screen. */ if (phys_c_pos > _rl_screenwidth - 2) { lmargin = cpos_buffer_position - (2 * t); if (lmargin < 0) lmargin = 0; /* If the left margin would be in the middle of a prompt with invisible characters, don't display the prompt at all. */ if (wrap_offset && lmargin > 0 && lmargin < nleft) lmargin = nleft; } else if (ndisp < _rl_screenwidth - 2) /* XXX - was -1 */ lmargin = 0; else if (phys_c_pos < 1) { /* If we are moving back towards the beginning of the line and the last margin is no longer correct, compute a new one. */ lmargin = ((cpos_buffer_position - 1) / t) * t; /* XXX */ if (wrap_offset && lmargin > 0 && lmargin < nleft) lmargin = nleft; } else lmargin = last_lmargin; displaying_prompt_first_line = lmargin < nleft; /* If the first character on the screen isn't the first character in the display line, indicate this with a special character. */ if (lmargin > 0) line[lmargin] = '<'; /* If SCREENWIDTH characters starting at LMARGIN do not encompass the whole line, indicate that with a special character at the right edge of the screen. If LMARGIN is 0, we need to take the wrap offset into account. */ t = lmargin + M_OFFSET (lmargin, wrap_offset) + _rl_screenwidth; if (t < out) line[t - 1] = '>'; if (rl_display_fixed == 0 || forced_display || lmargin != last_lmargin) { forced_display = 0; o_cpos = _rl_last_c_pos; cpos_adjusted = 0; update_line (&visible_line[last_lmargin], &invisible_line[lmargin], 0, _rl_screenwidth + visible_wrap_offset, _rl_screenwidth + (lmargin ? 0 : wrap_offset), 0); if ((mb_cur_max > 1 && rl_byte_oriented == 0) && displaying_prompt_first_line && OLD_CPOS_IN_PROMPT()) _rl_last_c_pos -= prompt_invis_chars_first_line; /* XXX - was wrap_offset */ /* If the visible new line is shorter than the old, but the number of invisible characters is greater, and we are at the end of the new line, we need to clear to eol. */ t = _rl_last_c_pos - M_OFFSET (lmargin, wrap_offset); if ((M_OFFSET (lmargin, wrap_offset) > visible_wrap_offset) && (_rl_last_c_pos == out) && displaying_prompt_first_line && t < visible_first_line_len) { nleft = _rl_screenwidth - t; _rl_clear_to_eol (nleft); } visible_first_line_len = out - lmargin - M_OFFSET (lmargin, wrap_offset); if (visible_first_line_len > _rl_screenwidth) visible_first_line_len = _rl_screenwidth; _rl_move_cursor_relative (cpos_buffer_position - lmargin, &invisible_line[lmargin]); last_lmargin = lmargin; } } fflush (rl_outstream); /* Swap visible and non-visible lines. */ { struct line_state *vtemp = line_state_visible; line_state_visible = line_state_invisible; line_state_invisible = vtemp; rl_display_fixed = 0; /* If we are displaying on a single line, and last_lmargin is > 0, we are not displaying any invisible characters, so set visible_wrap_offset to 0. */ if (_rl_horizontal_scroll_mode && last_lmargin) visible_wrap_offset = 0; else visible_wrap_offset = wrap_offset; } RL_UNSETSTATE (RL_STATE_REDISPLAYING); _rl_release_sigint (); } /* PWP: update_line() is based on finding the middle difference of each line on the screen; vis: /old first difference /beginning of line | /old last same /old EOL v v v v old: eddie> Oh, my little gruntle-buggy is to me, as lurgid as new: eddie> Oh, my little buggy says to me, as lurgid as ^ ^ ^ ^ \beginning of line | \new last same \new end of line \new first difference All are character pointers for the sake of speed. Special cases for no differences, as well as for end of line additions must be handled. Could be made even smarter, but this works well enough */ static void update_line (old, new, current_line, omax, nmax, inv_botlin) register char *old, *new; int current_line, omax, nmax, inv_botlin; { register char *ofd, *ols, *oe, *nfd, *nls, *ne; int temp, lendiff, wsatend, od, nd, twidth, o_cpos; int current_invis_chars; int col_lendiff, col_temp; int bytes_to_insert; int mb_cur_max = MB_CUR_MAX; #if defined (HANDLE_MULTIBYTE) mbstate_t ps_new, ps_old; int new_offset, old_offset; #endif /* If we're at the right edge of a terminal that supports xn, we're ready to wrap around, so do so. This fixes problems with knowing the exact cursor position and cut-and-paste with certain terminal emulators. In this calculation, TEMP is the physical screen position of the cursor. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) temp = _rl_last_c_pos; else temp = _rl_last_c_pos - WRAP_OFFSET (_rl_last_v_pos, visible_wrap_offset); if (temp == _rl_screenwidth && _rl_term_autowrap && !_rl_horizontal_scroll_mode && _rl_last_v_pos == current_line - 1) { #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { wchar_t wc; mbstate_t ps; int tempwidth, bytes; size_t ret; /* This fixes only double-column characters, but if the wrapped character consumes more than three columns, spaces will be inserted in the string buffer. */ if (current_line < line_state_visible->wbsize && line_state_visible->wrapped_line[current_line] > 0) _rl_clear_to_eol (line_state_visible->wrapped_line[current_line]); memset (&ps, 0, sizeof (mbstate_t)); ret = mbrtowc (&wc, new, mb_cur_max, &ps); if (MB_INVALIDCH (ret)) { tempwidth = 1; ret = 1; } else if (MB_NULLWCH (ret)) tempwidth = 0; else tempwidth = WCWIDTH (wc); if (tempwidth > 0) { int count, i; bytes = ret; for (count = 0; count < bytes; count++) putc (new[count], rl_outstream); _rl_last_c_pos = tempwidth; _rl_last_v_pos++; memset (&ps, 0, sizeof (mbstate_t)); ret = mbrtowc (&wc, old, mb_cur_max, &ps); if (ret != 0 && bytes != 0) { if (MB_INVALIDCH (ret)) ret = 1; memmove (old+bytes, old+ret, strlen (old+ret)); memcpy (old, new, bytes); /* Fix up indices if we copy data from one line to another */ omax += bytes - ret; for (i = current_line+1; i <= inv_botlin+1; i++) vis_lbreaks[i] += bytes - ret; } } else { putc (' ', rl_outstream); _rl_last_c_pos = 1; _rl_last_v_pos++; if (old[0] && new[0]) old[0] = new[0]; } } else #endif { if (new[0]) putc (new[0], rl_outstream); else putc (' ', rl_outstream); _rl_last_c_pos = 1; _rl_last_v_pos++; if (old[0] && new[0]) old[0] = new[0]; } } /* Find first difference. */ #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { /* See if the old line is a subset of the new line, so that the only change is adding characters. */ temp = (omax < nmax) ? omax : nmax; if (memcmp (old, new, temp) == 0) /* adding at the end */ { new_offset = old_offset = temp; ofd = old + temp; nfd = new + temp; } else { memset (&ps_new, 0, sizeof(mbstate_t)); memset (&ps_old, 0, sizeof(mbstate_t)); if (omax == nmax && STREQN (new, old, omax)) { old_offset = omax; new_offset = nmax; ofd = old + omax; nfd = new + nmax; } else { new_offset = old_offset = 0; for (ofd = old, nfd = new; (ofd - old < omax) && *ofd && _rl_compare_chars(old, old_offset, &ps_old, new, new_offset, &ps_new); ) { old_offset = _rl_find_next_mbchar (old, old_offset, 1, MB_FIND_ANY); new_offset = _rl_find_next_mbchar (new, new_offset, 1, MB_FIND_ANY); ofd = old + old_offset; nfd = new + new_offset; } } } } else #endif for (ofd = old, nfd = new; (ofd - old < omax) && *ofd && (*ofd == *nfd); ofd++, nfd++) ; /* Move to the end of the screen line. ND and OD are used to keep track of the distance between ne and new and oe and old, respectively, to move a subtraction out of each loop. */ for (od = ofd - old, oe = ofd; od < omax && *oe; oe++, od++); for (nd = nfd - new, ne = nfd; nd < nmax && *ne; ne++, nd++); /* If no difference, continue to next line. */ if (ofd == oe && nfd == ne) return; #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0 && _rl_utf8locale) { wchar_t wc; mbstate_t ps = { 0 }; int t; /* If the first character in the difference is a zero-width character, assume it's a combining character and back one up so the two base characters no longer compare equivalently. */ t = mbrtowc (&wc, ofd, mb_cur_max, &ps); if (t > 0 && UNICODE_COMBINING_CHAR (wc) && WCWIDTH (wc) == 0) { old_offset = _rl_find_prev_mbchar (old, ofd - old, MB_FIND_ANY); new_offset = _rl_find_prev_mbchar (new, nfd - new, MB_FIND_ANY); ofd = old + old_offset; /* equal by definition */ nfd = new + new_offset; } } #endif wsatend = 1; /* flag for trailing whitespace */ #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) { ols = old + _rl_find_prev_mbchar (old, oe - old, MB_FIND_ANY); nls = new + _rl_find_prev_mbchar (new, ne - new, MB_FIND_ANY); while ((ols > ofd) && (nls > nfd)) { memset (&ps_old, 0, sizeof (mbstate_t)); memset (&ps_new, 0, sizeof (mbstate_t)); #if 0 /* On advice from jir@yamato.ibm.com */ _rl_adjust_point (old, ols - old, &ps_old); _rl_adjust_point (new, nls - new, &ps_new); #endif if (_rl_compare_chars (old, ols - old, &ps_old, new, nls - new, &ps_new) == 0) break; if (*ols == ' ') wsatend = 0; ols = old + _rl_find_prev_mbchar (old, ols - old, MB_FIND_ANY); nls = new + _rl_find_prev_mbchar (new, nls - new, MB_FIND_ANY); } } else { #endif /* HANDLE_MULTIBYTE */ ols = oe - 1; /* find last same */ nls = ne - 1; while ((ols > ofd) && (nls > nfd) && (*ols == *nls)) { if (*ols != ' ') wsatend = 0; ols--; nls--; } #if defined (HANDLE_MULTIBYTE) } #endif if (wsatend) { ols = oe; nls = ne; } #if defined (HANDLE_MULTIBYTE) /* This may not work for stateful encoding, but who cares? To handle stateful encoding properly, we have to scan each string from the beginning and compare. */ else if (_rl_compare_chars (ols, 0, NULL, nls, 0, NULL) == 0) #else else if (*ols != *nls) #endif { if (*ols) /* don't step past the NUL */ { if (mb_cur_max > 1 && rl_byte_oriented == 0) ols = old + _rl_find_next_mbchar (old, ols - old, 1, MB_FIND_ANY); else ols++; } if (*nls) { if (mb_cur_max > 1 && rl_byte_oriented == 0) nls = new + _rl_find_next_mbchar (new, nls - new, 1, MB_FIND_ANY); else nls++; } } /* count of invisible characters in the current invisible line. */ current_invis_chars = W_OFFSET (current_line, wrap_offset); if (_rl_last_v_pos != current_line) { _rl_move_vert (current_line); /* We have moved up to a new screen line. This line may or may not have invisible characters on it, but we do our best to recalculate visible_wrap_offset based on what we know. */ if (current_line == 0) visible_wrap_offset = prompt_invis_chars_first_line; /* XXX */ if ((mb_cur_max == 1 || rl_byte_oriented) && current_line == 0 && visible_wrap_offset) _rl_last_c_pos += visible_wrap_offset; } /* If this is the first line and there are invisible characters in the prompt string, and the prompt string has not changed, and the current cursor position is before the last invisible character in the prompt, and the index of the character to move to is past the end of the prompt string, then redraw the entire prompt string. We can only do this reliably if the terminal supports a `cr' capability. This can also happen if the prompt string has changed, and the first difference in the line is in the middle of the prompt string, after a sequence of invisible characters (worst case) and before the end of the prompt. In this case, we have to redraw the entire prompt string so that the entire sequence of invisible characters is drawn. We need to handle the worst case, when the difference is after (or in the middle of) a sequence of invisible characters that changes the text color and before the sequence that restores the text color to normal. Then we have to make sure that the lines still differ -- if they don't, we can return immediately. This is not an efficiency hack -- there is a problem with redrawing portions of the prompt string if they contain terminal escape sequences (like drawing the `unbold' sequence without a corresponding `bold') that manifests itself on certain terminals. */ lendiff = local_prompt_len; if (lendiff > nmax) lendiff = nmax; od = ofd - old; /* index of first difference in visible line */ nd = nfd - new; /* nd, od are buffer indexes */ if (current_line == 0 && !_rl_horizontal_scroll_mode && _rl_term_cr && lendiff > prompt_visible_length && _rl_last_c_pos > 0 && (((od > 0 || nd > 0) && (od <= prompt_last_invisible || nd <= prompt_last_invisible)) || ((od >= lendiff) && _rl_last_c_pos < PROMPT_ENDING_INDEX))) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif if (modmark) _rl_output_some_chars ("*", 1); _rl_output_some_chars (local_prompt, lendiff); if (mb_cur_max > 1 && rl_byte_oriented == 0) { /* We take wrap_offset into account here so we can pass correct information to _rl_move_cursor_relative. */ _rl_last_c_pos = _rl_col_width (local_prompt, 0, lendiff, 1) - wrap_offset + modmark; cpos_adjusted = 1; } else _rl_last_c_pos = lendiff + modmark; /* Now if we have printed the prompt string because the first difference was within the prompt, see if we need to recompute where the lines differ. Check whether where we are now is past the last place where the old and new lines are the same and short-circuit now if we are. */ if ((od <= prompt_last_invisible || nd <= prompt_last_invisible) && omax == nmax && lendiff > (ols-old) && lendiff > (nls-new)) return; /* XXX - we need to fix up our calculations if we are now past the old ofd/nfd and the prompt length (or line length) has changed. We punt on the problem and do a dumb update. We'd like to be able to just output the prompt from the beginning of the line up to the first difference, but you don't know the number of invisible characters in that case. This needs a lot of work to be efficient. */ if ((od <= prompt_last_invisible || nd <= prompt_last_invisible)) { nfd = new + lendiff; /* number of characters we output above */ nd = lendiff; /* Do a dumb update and return */ temp = ne - nfd; if (temp > 0) { _rl_output_some_chars (nfd, temp); if (mb_cur_max > 1 && rl_byte_oriented == 0) _rl_last_c_pos += _rl_col_width (new, nd, ne - new, 1); else _rl_last_c_pos += temp; } if (nmax < omax) goto clear_rest_of_line; /* XXX */ else return; } } o_cpos = _rl_last_c_pos; /* When this function returns, _rl_last_c_pos is correct, and an absolute cursor position in multibyte mode, but a buffer index when not in a multibyte locale. */ _rl_move_cursor_relative (od, old); #if defined (HANDLE_MULTIBYTE) /* We need to indicate that the cursor position is correct in the presence of invisible characters in the prompt string. Let's see if setting this when we make sure we're at the end of the drawn prompt string works. */ if (current_line == 0 && mb_cur_max > 1 && rl_byte_oriented == 0 && (_rl_last_c_pos > 0 || o_cpos > 0) && _rl_last_c_pos == prompt_physical_chars) cpos_adjusted = 1; #endif /* if (len (new) > len (old)) lendiff == difference in buffer (bytes) col_lendiff == difference on screen (columns) When not using multibyte characters, these are equal */ lendiff = (nls - nfd) - (ols - ofd); if (mb_cur_max > 1 && rl_byte_oriented == 0) col_lendiff = _rl_col_width (new, nfd - new, nls - new, 1) - _rl_col_width (old, ofd - old, ols - old, 1); else col_lendiff = lendiff; /* If we are changing the number of invisible characters in a line, and the spot of first difference is before the end of the invisible chars, lendiff needs to be adjusted. */ if (current_line == 0 && /* !_rl_horizontal_scroll_mode && */ current_invis_chars != visible_wrap_offset) { if (mb_cur_max > 1 && rl_byte_oriented == 0) { lendiff += visible_wrap_offset - current_invis_chars; col_lendiff += visible_wrap_offset - current_invis_chars; } else { lendiff += visible_wrap_offset - current_invis_chars; col_lendiff = lendiff; } } /* We use temp as a count of the number of bytes from the first difference to the end of the new line. col_temp is the corresponding number of screen columns. A `dumb' update moves to the spot of first difference and writes TEMP bytes. */ /* Insert (diff (len (old), len (new)) ch. */ temp = ne - nfd; if (mb_cur_max > 1 && rl_byte_oriented == 0) col_temp = _rl_col_width (new, nfd - new, ne - new, 1); else col_temp = temp; /* how many bytes from the new line buffer to write to the display */ bytes_to_insert = nls - nfd; /* col_lendiff > 0 if we are adding characters to the line */ if (col_lendiff > 0) /* XXX - was lendiff */ { /* Non-zero if we're increasing the number of lines. */ int gl = current_line >= _rl_vis_botlin && inv_botlin > _rl_vis_botlin; /* If col_lendiff is > 0, implying that the new string takes up more screen real estate than the old, but lendiff is < 0, meaning that it takes fewer bytes, we need to just output the characters starting from the first difference. These will overwrite what is on the display, so there's no reason to do a smart update. This can really only happen in a multibyte environment. */ if (lendiff < 0) { _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* XXX - was _rl_col_width (nfd, 0, temp, 1); */ /* If nfd begins before any invisible characters in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if (current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } return; } /* Sometimes it is cheaper to print the characters rather than use the terminal's capabilities. If we're growing the number of lines, make sure we actually cause the new line to wrap around on auto-wrapping terminals. */ else if (_rl_terminal_can_insert && ((2 * col_temp) >= col_lendiff || _rl_term_IC) && (!_rl_term_autowrap || !gl)) { /* If lendiff > prompt_visible_length and _rl_last_c_pos == 0 and _rl_horizontal_scroll_mode == 1, inserting the characters with _rl_term_IC or _rl_term_ic will screw up the screen because of the invisible characters. We need to just draw them. */ /* The same thing happens if we're trying to draw before the last invisible character in the prompt string or we're increasing the number of invisible characters in the line and we're not drawing the entire prompt string. */ if (*ols && ((_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 && lendiff > prompt_visible_length && current_invis_chars > 0) == 0) && (((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == 0 && wrap_offset && ((nfd - new) <= prompt_last_invisible) && (col_lendiff < prompt_visible_length)) == 0) && (visible_wrap_offset >= current_invis_chars)) { open_some_spaces (col_lendiff); _rl_output_some_chars (nfd, bytes_to_insert); if (mb_cur_max > 1 && rl_byte_oriented == 0) _rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1); else _rl_last_c_pos += bytes_to_insert; } else if ((mb_cur_max == 1 || rl_byte_oriented != 0) && *ols == 0 && lendiff > 0) { /* At the end of a line the characters do not have to be "inserted". They can just be placed on the screen. */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; return; } else /* just write from first difference to end of new line */ { _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* If nfd begins before the last invisible character in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if ((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } return; } if (bytes_to_insert > lendiff) { /* If nfd begins before the last invisible character in the prompt, adjust _rl_last_c_pos to account for wrap_offset and set cpos_adjusted to let the caller know. */ if ((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == 0 && displaying_prompt_first_line && wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } } else { /* cannot insert chars, write to EOL */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* If we're in a multibyte locale and were before the last invisible char in the current line (which implies we just output some invisible characters) we need to adjust _rl_last_c_pos, since it represents a physical character position. */ /* The current_line*rl_screenwidth+prompt_invis_chars_first_line is a crude attempt to compute how far into the new line buffer we are. It doesn't work well in the face of multibyte characters and needs to be rethought. XXX */ if ((mb_cur_max > 1 && rl_byte_oriented == 0) && current_line == prompt_last_screen_line && wrap_offset && displaying_prompt_first_line && wrap_offset != prompt_invis_chars_first_line && ((nfd-new) < (prompt_last_invisible-(current_line*_rl_screenwidth+prompt_invis_chars_first_line)))) { _rl_last_c_pos -= wrap_offset - prompt_invis_chars_first_line; cpos_adjusted = 1; } } } else /* Delete characters from line. */ { /* If possible and inexpensive to use terminal deletion, then do so. */ if (_rl_term_dc && (2 * col_temp) >= -col_lendiff) { /* If all we're doing is erasing the invisible characters in the prompt string, don't bother. It screws up the assumptions about what's on the screen. */ if (_rl_horizontal_scroll_mode && _rl_last_c_pos == 0 && displaying_prompt_first_line && -lendiff == visible_wrap_offset) col_lendiff = 0; /* If we have moved lmargin and we're shrinking the line, we've already moved the cursor to the first character of the new line, so deleting -col_lendiff characters will mess up the cursor position calculation */ if (_rl_horizontal_scroll_mode && displaying_prompt_first_line == 0 && col_lendiff && _rl_last_c_pos < -col_lendiff) col_lendiff = 0; if (col_lendiff) delete_chars (-col_lendiff); /* delete (diff) characters */ /* Copy (new) chars to screen from first diff to last match, overwriting what is there. */ if (bytes_to_insert > 0) { /* If nfd begins at the prompt, or before the invisible characters in the prompt, we need to adjust _rl_last_c_pos in a multibyte locale to account for the wrap offset and set cpos_adjusted accordingly. */ _rl_output_some_chars (nfd, bytes_to_insert); if (mb_cur_max > 1 && rl_byte_oriented == 0) { _rl_last_c_pos += _rl_col_width (nfd, 0, bytes_to_insert, 1); if (current_line == 0 && wrap_offset && displaying_prompt_first_line && _rl_last_c_pos > wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } else _rl_last_c_pos += bytes_to_insert; /* XXX - we only want to do this if we are at the end of the line so we move there with _rl_move_cursor_relative */ if (_rl_horizontal_scroll_mode && ((oe-old) > (ne-new))) { _rl_move_cursor_relative (ne-new, new); goto clear_rest_of_line; } } } /* Otherwise, print over the existing material. */ else { if (temp > 0) { /* If nfd begins at the prompt, or before the invisible characters in the prompt, we need to adjust _rl_last_c_pos in a multibyte locale to account for the wrap offset and set cpos_adjusted accordingly. */ _rl_output_some_chars (nfd, temp); _rl_last_c_pos += col_temp; /* XXX */ if (mb_cur_max > 1 && rl_byte_oriented == 0) { if (current_line == 0 && wrap_offset && displaying_prompt_first_line && _rl_last_c_pos > wrap_offset && ((nfd - new) <= prompt_last_invisible)) { _rl_last_c_pos -= wrap_offset; cpos_adjusted = 1; } } } clear_rest_of_line: lendiff = (oe - old) - (ne - new); if (mb_cur_max > 1 && rl_byte_oriented == 0) col_lendiff = _rl_col_width (old, 0, oe - old, 1) - _rl_col_width (new, 0, ne - new, 1); else col_lendiff = lendiff; /* If we've already printed over the entire width of the screen, including the old material, then col_lendiff doesn't matter and space_to_eol will insert too many spaces. XXX - maybe we should adjust col_lendiff based on the difference between _rl_last_c_pos and _rl_screenwidth */ if (col_lendiff && ((mb_cur_max == 1 || rl_byte_oriented) || (_rl_last_c_pos < _rl_screenwidth))) { if (_rl_term_autowrap && current_line < inv_botlin) space_to_eol (col_lendiff); else _rl_clear_to_eol (col_lendiff); } } } } /* Tell the update routines that we have moved onto a new (empty) line. */ int rl_on_new_line () { if (visible_line) visible_line[0] = '\0'; _rl_last_c_pos = _rl_last_v_pos = 0; _rl_vis_botlin = last_lmargin = 0; if (vis_lbreaks) vis_lbreaks[0] = vis_lbreaks[1] = 0; visible_wrap_offset = 0; return 0; } /* Clear all screen lines occupied by the current readline line buffer (visible line) */ int rl_clear_visible_line () { int curr_line; /* Make sure we move to column 0 so we clear the entire line */ #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; /* Move to the last screen line of the current visible line */ _rl_move_vert (_rl_vis_botlin); /* And erase screen lines going up to line 0 (first visible line) */ for (curr_line = _rl_last_v_pos; curr_line >= 0; curr_line--) { _rl_move_vert (curr_line); _rl_clear_to_eol (0); } return 0; } /* Tell the update routines that we have moved onto a new line with the prompt already displayed. Code originally from the version of readline distributed with CLISP. rl_expand_prompt must have already been called (explicitly or implicitly). This still doesn't work exactly right. */ int rl_on_new_line_with_prompt () { int prompt_size, i, l, real_screenwidth, newlines; char *prompt_last_line, *lprompt; /* Initialize visible_line and invisible_line to ensure that they can hold the already-displayed prompt. */ prompt_size = strlen (rl_prompt) + 1; init_line_structures (prompt_size); /* Make sure the line structures hold the already-displayed prompt for redisplay. */ lprompt = local_prompt ? local_prompt : rl_prompt; strcpy (visible_line, lprompt); strcpy (invisible_line, lprompt); /* If the prompt contains newlines, take the last tail. */ prompt_last_line = strrchr (rl_prompt, '\n'); if (!prompt_last_line) prompt_last_line = rl_prompt; l = strlen (prompt_last_line); if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) _rl_last_c_pos = _rl_col_width (prompt_last_line, 0, l, 1); /* XXX */ else _rl_last_c_pos = l; /* Dissect prompt_last_line into screen lines. Note that here we have to use the real screenwidth. Readline's notion of screenwidth might be one less, see terminal.c. */ real_screenwidth = _rl_screenwidth + (_rl_term_autowrap ? 0 : 1); _rl_last_v_pos = l / real_screenwidth; /* If the prompt length is a multiple of real_screenwidth, we don't know whether the cursor is at the end of the last line, or already at the beginning of the next line. Output a newline just to be safe. */ if (l > 0 && (l % real_screenwidth) == 0) _rl_output_some_chars ("\n", 1); last_lmargin = 0; newlines = 0; i = 0; while (i <= l) { _rl_vis_botlin = newlines; vis_lbreaks[newlines++] = i; i += real_screenwidth; } vis_lbreaks[newlines] = l; visible_wrap_offset = 0; rl_display_prompt = rl_prompt; /* XXX - make sure it's set */ return 0; } /* Actually update the display, period. */ int rl_forced_update_display () { register char *temp; if (visible_line) { temp = visible_line; while (*temp) *temp++ = '\0'; } rl_on_new_line (); forced_display++; (*rl_redisplay_function) (); return 0; } /* Redraw only the last line of a multi-line prompt. */ void rl_redraw_prompt_last_line () { char *t; t = strrchr (rl_display_prompt, '\n'); if (t) redraw_prompt (++t); else rl_forced_update_display (); } /* Move the cursor from _rl_last_c_pos to NEW, which are buffer indices. (Well, when we don't have multibyte characters, _rl_last_c_pos is a buffer index.) DATA is the contents of the screen line of interest; i.e., where the movement is being done. DATA is always the visible line or the invisible line */ void _rl_move_cursor_relative (new, data) int new; const char *data; { register int i; int woff; /* number of invisible chars on current line */ int cpos, dpos; /* current and desired cursor positions */ int adjust; int in_invisline; int mb_cur_max = MB_CUR_MAX; woff = WRAP_OFFSET (_rl_last_v_pos, wrap_offset); cpos = _rl_last_c_pos; if (cpos == 0 && cpos == new) return; #if defined (HANDLE_MULTIBYTE) /* If we have multibyte characters, NEW is indexed by the buffer point in a multibyte string, but _rl_last_c_pos is the display position. In this case, NEW's display position is not obvious and must be calculated. We need to account for invisible characters in this line, as long as we are past them and they are counted by _rl_col_width. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) { adjust = 1; /* Try to short-circuit common cases and eliminate a bunch of multibyte character function calls. */ /* 1. prompt string */ if (new == local_prompt_len && memcmp (data, local_prompt, new) == 0) { dpos = prompt_physical_chars; cpos_adjusted = 1; adjust = 0; } /* 2. prompt_string + line contents */ else if (new > local_prompt_len && local_prompt && memcmp (data, local_prompt, local_prompt_len) == 0) { dpos = prompt_physical_chars + _rl_col_width (data, local_prompt_len, new, 1); cpos_adjusted = 1; adjust = 0; } else dpos = _rl_col_width (data, 0, new, 1); if (displaying_prompt_first_line == 0) adjust = 0; /* yet another special case: printing the last line of a prompt with multibyte characters and invisible characters whose printable length exceeds the screen width with the last invisible character (prompt_last_invisible) in the last line. IN_INVISLINE is the offset of DATA in invisible_line */ in_invisline = 0; if (data > invisible_line && data < invisible_line+inv_lbreaks[_rl_inv_botlin+1]) in_invisline = data - invisible_line; /* Use NEW when comparing against the last invisible character in the prompt string, since they're both buffer indices and DPOS is a desired display position. */ /* NEW is relative to the current displayed line, while PROMPT_LAST_INVISIBLE is relative to the entire (wrapped) line. Need a way to reconcile these two variables by turning NEW into a buffer position relative to the start of the line */ if (adjust && ((new > prompt_last_invisible) || /* XXX - don't use woff here */ (new+in_invisline > prompt_last_invisible) || /* invisible line */ (prompt_physical_chars >= _rl_screenwidth && /* visible line */ _rl_last_v_pos == prompt_last_screen_line && wrap_offset >= woff && dpos >= woff && new > (prompt_last_invisible-(vis_lbreaks[_rl_last_v_pos])-wrap_offset)))) /* XXX last comparison might need to be >= */ { dpos -= woff; /* Since this will be assigned to _rl_last_c_pos at the end (more precisely, _rl_last_c_pos == dpos when this function returns), let the caller know. */ cpos_adjusted = 1; } } else #endif dpos = new; /* If we don't have to do anything, then return. */ if (cpos == dpos) return; /* It may be faster to output a CR, and then move forwards instead of moving backwards. */ /* i == current physical cursor position. */ #if defined (HANDLE_MULTIBYTE) if (mb_cur_max > 1 && rl_byte_oriented == 0) i = _rl_last_c_pos; else #endif i = _rl_last_c_pos - woff; if (dpos == 0 || CR_FASTER (dpos, _rl_last_c_pos) || (_rl_term_autowrap && i == _rl_screenwidth)) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif /* !__MSDOS__ */ cpos = _rl_last_c_pos = 0; } if (cpos < dpos) { /* Move the cursor forward. We do it by printing the command to move the cursor forward if there is one, else print that portion of the output buffer again. Which is cheaper? */ /* The above comment is left here for posterity. It is faster to print one character (non-control) than to print a control sequence telling the terminal to move forward one character. That kind of control is for people who don't know what the data is underneath the cursor. */ /* However, we need a handle on where the current display position is in the buffer for the immediately preceding comment to be true. In multibyte locales, we don't currently have that info available. Without it, we don't know where the data we have to display begins in the buffer and we have to go back to the beginning of the screen line. In this case, we can use the terminal sequence to move forward if it's available. */ if (mb_cur_max > 1 && rl_byte_oriented == 0) { if (_rl_term_forward_char) { for (i = cpos; i < dpos; i++) tputs (_rl_term_forward_char, 1, _rl_output_character_function); } else { tputs (_rl_term_cr, 1, _rl_output_character_function); for (i = 0; i < new; i++) putc (data[i], rl_outstream); } } else for (i = cpos; i < new; i++) putc (data[i], rl_outstream); } #if defined (HANDLE_MULTIBYTE) /* NEW points to the buffer point, but _rl_last_c_pos is the display point. The byte length of the string is probably bigger than the column width of the string, which means that if NEW == _rl_last_c_pos, then NEW's display point is less than _rl_last_c_pos. */ #endif else if (cpos > dpos) _rl_backspace (cpos - dpos); _rl_last_c_pos = dpos; } /* PWP: move the cursor up or down. */ void _rl_move_vert (to) int to; { register int delta, i; if (_rl_last_v_pos == to || to > _rl_screenheight) return; if ((delta = to - _rl_last_v_pos) > 0) { for (i = 0; i < delta; i++) putc ('\n', rl_outstream); #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; } else { /* delta < 0 */ #ifdef __DJGPP__ int row, col; fflush (rl_outstream); ScreenGetCursor (&row, &col); ScreenSetCursor (row + delta, col); i = -delta; #else if (_rl_term_up && *_rl_term_up) for (i = 0; i < -delta; i++) tputs (_rl_term_up, 1, _rl_output_character_function); #endif /* !__DJGPP__ */ } _rl_last_v_pos = to; /* Now TO is here */ } /* Physically print C on rl_outstream. This is for functions which know how to optimize the display. Return the number of characters output. */ int rl_show_char (c) int c; { int n = 1; if (META_CHAR (c) && (_rl_output_meta_chars == 0)) { fprintf (rl_outstream, "M-"); n += 2; c = UNMETA (c); } #if defined (DISPLAY_TABS) if ((CTRL_CHAR (c) && c != '\t') || c == RUBOUT) #else if (CTRL_CHAR (c) || c == RUBOUT) #endif /* !DISPLAY_TABS */ { fprintf (rl_outstream, "C-"); n += 2; c = CTRL_CHAR (c) ? UNCTRL (c) : '?'; } putc (c, rl_outstream); fflush (rl_outstream); return n; } int rl_character_len (c, pos) register int c, pos; { unsigned char uc; uc = (unsigned char)c; if (META_CHAR (uc)) return ((_rl_output_meta_chars == 0) ? 4 : 1); if (uc == '\t') { #if defined (DISPLAY_TABS) return (((pos | 7) + 1) - pos); #else return (2); #endif /* !DISPLAY_TABS */ } if (CTRL_CHAR (c) || c == RUBOUT) return (2); return ((ISPRINT (uc)) ? 1 : 2); } /* How to print things in the "echo-area". The prompt is treated as a mini-modeline. */ static int msg_saved_prompt = 0; #if defined (USE_VARARGS) int #if defined (PREFER_STDARG) rl_message (const char *format, ...) #else rl_message (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (HAVE_VSNPRINTF) int bneed; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif if (msg_buf == 0) msg_buf = xmalloc (msg_bufsiz = 128); #if defined (HAVE_VSNPRINTF) bneed = vsnprintf (msg_buf, msg_bufsiz, format, args); if (bneed >= msg_bufsiz - 1) { msg_bufsiz = bneed + 1; msg_buf = xrealloc (msg_buf, msg_bufsiz); va_end (args); #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif vsnprintf (msg_buf, msg_bufsiz - 1, format, args); } #else vsprintf (msg_buf, format, args); msg_buf[msg_bufsiz - 1] = '\0'; /* overflow? */ #endif va_end (args); if (saved_local_prompt == 0) { rl_save_prompt (); msg_saved_prompt = 1; } else if (local_prompt != saved_local_prompt) { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = (char *)NULL; } rl_display_prompt = msg_buf; local_prompt = expand_prompt (msg_buf, 0, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; (*rl_redisplay_function) (); return 0; } #else /* !USE_VARARGS */ int rl_message (format, arg1, arg2) char *format; { if (msg_buf == 0) msg_buf = xmalloc (msg_bufsiz = 128); sprintf (msg_buf, format, arg1, arg2); msg_buf[msg_bufsiz - 1] = '\0'; /* overflow? */ rl_display_prompt = msg_buf; if (saved_local_prompt == 0) { rl_save_prompt (); msg_saved_prompt = 1; } else if (local_prompt != saved_local_prompt) { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = (char *)NULL; } local_prompt = expand_prompt (msg_buf, 0, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; (*rl_redisplay_function) (); return 0; } #endif /* !USE_VARARGS */ /* How to clear things from the "echo-area". */ int rl_clear_message () { rl_display_prompt = rl_prompt; if (msg_saved_prompt) { rl_restore_prompt (); msg_saved_prompt = 0; } (*rl_redisplay_function) (); return 0; } int rl_reset_line_state () { rl_on_new_line (); rl_display_prompt = rl_prompt ? rl_prompt : ""; forced_display = 1; return 0; } void rl_save_prompt () { saved_local_prompt = local_prompt; saved_local_prefix = local_prompt_prefix; saved_prefix_length = prompt_prefix_length; saved_local_length = local_prompt_len; saved_last_invisible = prompt_last_invisible; saved_visible_length = prompt_visible_length; saved_invis_chars_first_line = prompt_invis_chars_first_line; saved_physical_chars = prompt_physical_chars; local_prompt = local_prompt_prefix = (char *)0; local_prompt_len = 0; prompt_last_invisible = prompt_visible_length = prompt_prefix_length = 0; prompt_invis_chars_first_line = prompt_physical_chars = 0; } void rl_restore_prompt () { FREE (local_prompt); FREE (local_prompt_prefix); local_prompt = saved_local_prompt; local_prompt_prefix = saved_local_prefix; local_prompt_len = saved_local_length; prompt_prefix_length = saved_prefix_length; prompt_last_invisible = saved_last_invisible; prompt_visible_length = saved_visible_length; prompt_invis_chars_first_line = saved_invis_chars_first_line; prompt_physical_chars = saved_physical_chars; /* can test saved_local_prompt to see if prompt info has been saved. */ saved_local_prompt = saved_local_prefix = (char *)0; saved_local_length = 0; saved_last_invisible = saved_visible_length = saved_prefix_length = 0; saved_invis_chars_first_line = saved_physical_chars = 0; } char * _rl_make_prompt_for_search (pchar) int pchar; { int len; char *pmt, *p; rl_save_prompt (); /* We've saved the prompt, and can do anything with the various prompt strings we need before they're restored. We want the unexpanded portion of the prompt string after any final newline. */ p = rl_prompt ? strrchr (rl_prompt, '\n') : 0; if (p == 0) { len = (rl_prompt && *rl_prompt) ? strlen (rl_prompt) : 0; pmt = (char *)xmalloc (len + 2); if (len) strcpy (pmt, rl_prompt); pmt[len] = pchar; pmt[len+1] = '\0'; } else { p++; len = strlen (p); pmt = (char *)xmalloc (len + 2); if (len) strcpy (pmt, p); pmt[len] = pchar; pmt[len+1] = '\0'; } /* will be overwritten by expand_prompt, called from rl_message */ prompt_physical_chars = saved_physical_chars + 1; return pmt; } /* Quick redisplay hack when erasing characters at the end of the line. */ void _rl_erase_at_end_of_line (l) int l; { register int i; _rl_backspace (l); for (i = 0; i < l; i++) putc (' ', rl_outstream); _rl_backspace (l); for (i = 0; i < l; i++) visible_line[--_rl_last_c_pos] = '\0'; rl_display_fixed++; } /* Clear to the end of the line. COUNT is the minimum number of character spaces to clear, */ void _rl_clear_to_eol (count) int count; { #ifndef __MSDOS__ if (_rl_term_clreol) tputs (_rl_term_clreol, 1, _rl_output_character_function); else #endif if (count) space_to_eol (count); } /* Clear to the end of the line using spaces. COUNT is the minimum number of character spaces to clear, */ static void space_to_eol (count) int count; { register int i; for (i = 0; i < count; i++) putc (' ', rl_outstream); _rl_last_c_pos += count; } void _rl_clear_screen () { #ifndef __DJGPP__ if (_rl_term_clrpag) tputs (_rl_term_clrpag, 1, _rl_output_character_function); else rl_crlf (); #else ScreenClear (); ScreenSetCursor (0, 0); #endif /* __DJGPP__ */ } /* Insert COUNT characters from STRING to the output stream at column COL. */ static void insert_some_chars (string, count, col) char *string; int count, col; { open_some_spaces (col); _rl_output_some_chars (string, count); } /* Insert COL spaces, keeping the cursor at the same position. We follow the ncurses documentation and use either im/ei with explicit spaces, or IC/ic by itself. We assume there will either be ei or we don't need to use it. */ static void open_some_spaces (col) int col; { #if !defined (__MSDOS__) && (!defined (__MINGW32__) || defined (NCURSES_VERSION)) char *buffer; register int i; /* If IC is defined, then we do not have to "enter" insert mode. */ if (_rl_term_IC) { buffer = tgoto (_rl_term_IC, 0, col); tputs (buffer, 1, _rl_output_character_function); } else if (_rl_term_im && *_rl_term_im) { tputs (_rl_term_im, 1, _rl_output_character_function); /* just output the desired number of spaces */ for (i = col; i--; ) _rl_output_character_function (' '); /* If there is a string to turn off insert mode, use it now. */ if (_rl_term_ei && *_rl_term_ei) tputs (_rl_term_ei, 1, _rl_output_character_function); /* and move back the right number of spaces */ _rl_backspace (col); } else if (_rl_term_ic && *_rl_term_ic) { /* If there is a special command for inserting characters, then use that first to open up the space. */ for (i = col; i--; ) tputs (_rl_term_ic, 1, _rl_output_character_function); } #endif /* !__MSDOS__ && (!__MINGW32__ || NCURSES_VERSION)*/ } /* Delete COUNT characters from the display line. */ static void delete_chars (count) int count; { if (count > _rl_screenwidth) /* XXX */ return; #if !defined (__MSDOS__) && (!defined (__MINGW32__) || defined (NCURSES_VERSION)) if (_rl_term_DC && *_rl_term_DC) { char *buffer; buffer = tgoto (_rl_term_DC, count, count); tputs (buffer, count, _rl_output_character_function); } else { if (_rl_term_dc && *_rl_term_dc) while (count--) tputs (_rl_term_dc, 1, _rl_output_character_function); } #endif /* !__MSDOS__ && (!__MINGW32__ || NCURSES_VERSION)*/ } void _rl_update_final () { int full_lines; full_lines = 0; /* If the cursor is the only thing on an otherwise-blank last line, compensate so we don't print an extra CRLF. */ if (_rl_vis_botlin && _rl_last_c_pos == 0 && visible_line[vis_lbreaks[_rl_vis_botlin]] == 0) { _rl_vis_botlin--; full_lines = 1; } _rl_move_vert (_rl_vis_botlin); /* If we've wrapped lines, remove the final xterm line-wrap flag. */ if (full_lines && _rl_term_autowrap && (VIS_LLEN(_rl_vis_botlin) == _rl_screenwidth)) { char *last_line; last_line = &visible_line[vis_lbreaks[_rl_vis_botlin]]; cpos_buffer_position = -1; /* don't know where we are in buffer */ _rl_move_cursor_relative (_rl_screenwidth - 1, last_line); /* XXX */ _rl_clear_to_eol (0); putc (last_line[_rl_screenwidth - 1], rl_outstream); } _rl_vis_botlin = 0; rl_crlf (); fflush (rl_outstream); rl_display_fixed++; } /* Move to the start of the current line. */ static void cr () { if (_rl_term_cr) { #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; } } /* Redraw the last line of a multi-line prompt that may possibly contain terminal escape sequences. Called with the cursor at column 0 of the line to draw the prompt on. */ static void redraw_prompt (t) char *t; { char *oldp; oldp = rl_display_prompt; rl_save_prompt (); rl_display_prompt = t; local_prompt = expand_prompt (t, PMT_MULTILINE, &prompt_visible_length, &prompt_last_invisible, &prompt_invis_chars_first_line, &prompt_physical_chars); local_prompt_prefix = (char *)NULL; local_prompt_len = local_prompt ? strlen (local_prompt) : 0; rl_forced_update_display (); rl_display_prompt = oldp; rl_restore_prompt(); } /* Redisplay the current line after a SIGWINCH is received. */ void _rl_redisplay_after_sigwinch () { char *t; /* Clear the last line (assuming that the screen size change will result in either more or fewer characters on that line only) and put the cursor at column 0. Make sure the right thing happens if we have wrapped to a new screen line. */ if (_rl_term_cr) { _rl_move_vert (_rl_vis_botlin); #if defined (__MSDOS__) putc ('\r', rl_outstream); #else tputs (_rl_term_cr, 1, _rl_output_character_function); #endif _rl_last_c_pos = 0; #if defined (__MSDOS__) space_to_eol (_rl_screenwidth); putc ('\r', rl_outstream); #else if (_rl_term_clreol) tputs (_rl_term_clreol, 1, _rl_output_character_function); else { space_to_eol (_rl_screenwidth); tputs (_rl_term_cr, 1, _rl_output_character_function); } #endif if (_rl_last_v_pos > 0) _rl_move_vert (0); } else rl_crlf (); /* Redraw only the last line of a multi-line prompt. */ t = strrchr (rl_display_prompt, '\n'); if (t) redraw_prompt (++t); else rl_forced_update_display (); } void _rl_clean_up_for_exit () { if (_rl_echoing_p) { if (_rl_vis_botlin > 0) /* minor optimization plus bug fix */ _rl_move_vert (_rl_vis_botlin); _rl_vis_botlin = 0; fflush (rl_outstream); rl_restart_output (1, 0); } } void _rl_erase_entire_line () { cr (); _rl_clear_to_eol (0); cr (); fflush (rl_outstream); } void _rl_ttyflush () { fflush (rl_outstream); } /* return the `current display line' of the cursor -- the number of lines to move up to get to the first screen line of the current readline line. */ int _rl_current_display_line () { int ret, nleft; /* Find out whether or not there might be invisible characters in the editing buffer. */ if (rl_display_prompt == rl_prompt) nleft = _rl_last_c_pos - _rl_screenwidth - rl_visible_prompt_length; else nleft = _rl_last_c_pos - _rl_screenwidth; if (nleft > 0) ret = 1 + nleft / _rl_screenwidth; else ret = 0; return ret; } #if defined (HANDLE_MULTIBYTE) /* Calculate the number of screen columns occupied by STR from START to END. In the case of multibyte characters with stateful encoding, we have to scan from the beginning of the string to take the state into account. */ static int _rl_col_width (str, start, end, flags) const char *str; int start, end, flags; { wchar_t wc; mbstate_t ps; int tmp, point, width, max; if (end <= start) return 0; if (MB_CUR_MAX == 1 || rl_byte_oriented) /* this can happen in some cases where it's inconvenient to check */ return (end - start); memset (&ps, 0, sizeof (mbstate_t)); point = 0; max = end; /* Try to short-circuit common cases. The adjustment to remove wrap_offset is done by the caller. */ /* 1. prompt string */ if (flags && start == 0 && end == local_prompt_len && memcmp (str, local_prompt, local_prompt_len) == 0) return (prompt_physical_chars + wrap_offset); /* 2. prompt string + line contents */ else if (flags && start == 0 && local_prompt_len > 0 && end > local_prompt_len && local_prompt && memcmp (str, local_prompt, local_prompt_len) == 0) { tmp = prompt_physical_chars + wrap_offset; /* XXX - try to call ourselves recursively with non-prompt portion */ tmp += _rl_col_width (str, local_prompt_len, end, flags); return (tmp); } while (point < start) { tmp = mbrlen (str + point, max, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* In this case, the bytes are invalid or too short to compose a multibyte character, so we assume that the first byte represents a single character. */ point++; max--; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* Found '\0' */ else { point += tmp; max -= tmp; } } /* If START is not a byte that starts a character, then POINT will be greater than START. In this case, assume that (POINT - START) gives a byte count that is the number of columns of difference. */ width = point - start; while (point < end) { tmp = mbrtowc (&wc, str + point, max, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* In this case, the bytes are invalid or too short to compose a multibyte character, so we assume that the first byte represents a single character. */ point++; max--; /* and assume that the byte occupies a single column. */ width++; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* Found '\0' */ else { point += tmp; max -= tmp; tmp = WCWIDTH(wc); width += (tmp >= 0) ? tmp : 1; } } width += point - end; return width; } #endif /* HANDLE_MULTIBYTE */ readline-7.0/emacs_keymap.c000664 000436 000024 00000111413 11130207320 016016 0ustar00chetstaff000000 000000 /* emacs_keymap.c -- the keymap for emacs_mode in readline (). */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (BUFSIZ) #include #endif /* !BUFSIZ */ #include "readline.h" /* An array of function pointers, one for each possible key. If the type byte is ISKMAP, then the pointer is the address of a keymap. */ KEYMAP_ENTRY_ARRAY emacs_standard_keymap = { /* Control keys. */ { ISFUNC, rl_set_mark }, /* Control-@ */ { ISFUNC, rl_beg_of_line }, /* Control-a */ { ISFUNC, rl_backward_char }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, rl_delete }, /* Control-d */ { ISFUNC, rl_end_of_line }, /* Control-e */ { ISFUNC, rl_forward_char }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, rl_rubout }, /* Control-h */ { ISFUNC, rl_complete }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, rl_clear_screen }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_get_next_history }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, rl_get_previous_history }, /* Control-p */ { ISFUNC, rl_quoted_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_unix_word_rubout }, /* Control-w */ { ISKMAP, (rl_command_func_t *)emacs_ctlx_keymap }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISKMAP, (rl_command_func_t *)emacs_meta_keymap }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, rl_char_search }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_undo_command }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_insert }, /* SPACE */ { ISFUNC, rl_insert }, /* ! */ { ISFUNC, rl_insert }, /* " */ { ISFUNC, rl_insert }, /* # */ { ISFUNC, rl_insert }, /* $ */ { ISFUNC, rl_insert }, /* % */ { ISFUNC, rl_insert }, /* & */ { ISFUNC, rl_insert }, /* ' */ { ISFUNC, rl_insert }, /* ( */ { ISFUNC, rl_insert }, /* ) */ { ISFUNC, rl_insert }, /* * */ { ISFUNC, rl_insert }, /* + */ { ISFUNC, rl_insert }, /* , */ { ISFUNC, rl_insert }, /* - */ { ISFUNC, rl_insert }, /* . */ { ISFUNC, rl_insert }, /* / */ /* Regular digits. */ { ISFUNC, rl_insert }, /* 0 */ { ISFUNC, rl_insert }, /* 1 */ { ISFUNC, rl_insert }, /* 2 */ { ISFUNC, rl_insert }, /* 3 */ { ISFUNC, rl_insert }, /* 4 */ { ISFUNC, rl_insert }, /* 5 */ { ISFUNC, rl_insert }, /* 6 */ { ISFUNC, rl_insert }, /* 7 */ { ISFUNC, rl_insert }, /* 8 */ { ISFUNC, rl_insert }, /* 9 */ /* A little more punctuation. */ { ISFUNC, rl_insert }, /* : */ { ISFUNC, rl_insert }, /* ; */ { ISFUNC, rl_insert }, /* < */ { ISFUNC, rl_insert }, /* = */ { ISFUNC, rl_insert }, /* > */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_insert }, /* A */ { ISFUNC, rl_insert }, /* B */ { ISFUNC, rl_insert }, /* C */ { ISFUNC, rl_insert }, /* D */ { ISFUNC, rl_insert }, /* E */ { ISFUNC, rl_insert }, /* F */ { ISFUNC, rl_insert }, /* G */ { ISFUNC, rl_insert }, /* H */ { ISFUNC, rl_insert }, /* I */ { ISFUNC, rl_insert }, /* J */ { ISFUNC, rl_insert }, /* K */ { ISFUNC, rl_insert }, /* L */ { ISFUNC, rl_insert }, /* M */ { ISFUNC, rl_insert }, /* N */ { ISFUNC, rl_insert }, /* O */ { ISFUNC, rl_insert }, /* P */ { ISFUNC, rl_insert }, /* Q */ { ISFUNC, rl_insert }, /* R */ { ISFUNC, rl_insert }, /* S */ { ISFUNC, rl_insert }, /* T */ { ISFUNC, rl_insert }, /* U */ { ISFUNC, rl_insert }, /* V */ { ISFUNC, rl_insert }, /* W */ { ISFUNC, rl_insert }, /* X */ { ISFUNC, rl_insert }, /* Y */ { ISFUNC, rl_insert }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_insert }, /* [ */ { ISFUNC, rl_insert }, /* \ */ { ISFUNC, rl_insert }, /* ] */ { ISFUNC, rl_insert }, /* ^ */ { ISFUNC, rl_insert }, /* _ */ { ISFUNC, rl_insert }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_insert }, /* a */ { ISFUNC, rl_insert }, /* b */ { ISFUNC, rl_insert }, /* c */ { ISFUNC, rl_insert }, /* d */ { ISFUNC, rl_insert }, /* e */ { ISFUNC, rl_insert }, /* f */ { ISFUNC, rl_insert }, /* g */ { ISFUNC, rl_insert }, /* h */ { ISFUNC, rl_insert }, /* i */ { ISFUNC, rl_insert }, /* j */ { ISFUNC, rl_insert }, /* k */ { ISFUNC, rl_insert }, /* l */ { ISFUNC, rl_insert }, /* m */ { ISFUNC, rl_insert }, /* n */ { ISFUNC, rl_insert }, /* o */ { ISFUNC, rl_insert }, /* p */ { ISFUNC, rl_insert }, /* q */ { ISFUNC, rl_insert }, /* r */ { ISFUNC, rl_insert }, /* s */ { ISFUNC, rl_insert }, /* t */ { ISFUNC, rl_insert }, /* u */ { ISFUNC, rl_insert }, /* v */ { ISFUNC, rl_insert }, /* w */ { ISFUNC, rl_insert }, /* x */ { ISFUNC, rl_insert }, /* y */ { ISFUNC, rl_insert }, /* z */ /* Final punctuation. */ { ISFUNC, rl_insert }, /* { */ { ISFUNC, rl_insert }, /* | */ { ISFUNC, rl_insert }, /* } */ { ISFUNC, rl_insert }, /* ~ */ { ISFUNC, rl_rubout }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Pure 8-bit characters (128 - 159). These might be used in some character sets. */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ /* ISO Latin-1 characters (160 - 255) */ { ISFUNC, rl_insert }, /* No-break space */ { ISFUNC, rl_insert }, /* Inverted exclamation mark */ { ISFUNC, rl_insert }, /* Cent sign */ { ISFUNC, rl_insert }, /* Pound sign */ { ISFUNC, rl_insert }, /* Currency sign */ { ISFUNC, rl_insert }, /* Yen sign */ { ISFUNC, rl_insert }, /* Broken bar */ { ISFUNC, rl_insert }, /* Section sign */ { ISFUNC, rl_insert }, /* Diaeresis */ { ISFUNC, rl_insert }, /* Copyright sign */ { ISFUNC, rl_insert }, /* Feminine ordinal indicator */ { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Not sign */ { ISFUNC, rl_insert }, /* Soft hyphen */ { ISFUNC, rl_insert }, /* Registered sign */ { ISFUNC, rl_insert }, /* Macron */ { ISFUNC, rl_insert }, /* Degree sign */ { ISFUNC, rl_insert }, /* Plus-minus sign */ { ISFUNC, rl_insert }, /* Superscript two */ { ISFUNC, rl_insert }, /* Superscript three */ { ISFUNC, rl_insert }, /* Acute accent */ { ISFUNC, rl_insert }, /* Micro sign */ { ISFUNC, rl_insert }, /* Pilcrow sign */ { ISFUNC, rl_insert }, /* Middle dot */ { ISFUNC, rl_insert }, /* Cedilla */ { ISFUNC, rl_insert }, /* Superscript one */ { ISFUNC, rl_insert }, /* Masculine ordinal indicator */ { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */ { ISFUNC, rl_insert }, /* Vulgar fraction one half */ { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */ { ISFUNC, rl_insert }, /* Inverted questionk mark */ { ISFUNC, rl_insert }, /* Latin capital letter a with grave */ { ISFUNC, rl_insert }, /* Latin capital letter a with acute */ { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */ { ISFUNC, rl_insert }, /* Latin capital letter ae */ { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin capital letter e with grave */ { ISFUNC, rl_insert }, /* Latin capital letter e with acute */ { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter i with grave */ { ISFUNC, rl_insert }, /* Latin capital letter i with acute */ { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with grave */ { ISFUNC, rl_insert }, /* Latin capital letter o with acute */ { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */ { ISFUNC, rl_insert }, /* Multiplication sign */ { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */ { ISFUNC, rl_insert }, /* Latin capital letter u with grave */ { ISFUNC, rl_insert }, /* Latin capital letter u with acute */ { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */ { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */ { ISFUNC, rl_insert }, /* Latin small letter a with grave */ { ISFUNC, rl_insert }, /* Latin small letter a with acute */ { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter a with tilde */ { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter a with ring above */ { ISFUNC, rl_insert }, /* Latin small letter ae */ { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin small letter e with grave */ { ISFUNC, rl_insert }, /* Latin small letter e with acute */ { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter i with grave */ { ISFUNC, rl_insert }, /* Latin small letter i with acute */ { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter n with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with grave */ { ISFUNC, rl_insert }, /* Latin small letter o with acute */ { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter o with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */ { ISFUNC, rl_insert }, /* Division sign */ { ISFUNC, rl_insert }, /* Latin small letter o with stroke */ { ISFUNC, rl_insert }, /* Latin small letter u with grave */ { ISFUNC, rl_insert }, /* Latin small letter u with acute */ { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter y with acute */ { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */ { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */ #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY emacs_meta_keymap = { /* Meta keys. Just like above, but the high bit is set. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-f */ { ISFUNC, rl_abort }, /* Meta-Control-g */ { ISFUNC, rl_backward_kill_word }, /* Meta-Control-h */ { ISFUNC, rl_tab_insert }, /* Meta-Control-i */ { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-l */ { ISFUNC, rl_vi_editing_mode }, /* Meta-Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-q */ { ISFUNC, rl_revert_line }, /* Meta-Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-x */ { ISFUNC, rl_yank_nth_arg }, /* Meta-Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-z */ { ISFUNC, rl_complete }, /* Meta-Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-\ */ { ISFUNC, rl_backward_char_search }, /* Meta-Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_set_mark }, /* Meta-SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-" */ { ISFUNC, rl_insert_comment }, /* Meta-# */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-$ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-% */ { ISFUNC, rl_tilde_expand }, /* Meta-& */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-) */ { ISFUNC, rl_insert_completions }, /* Meta-* */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-+ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-, */ { ISFUNC, rl_digit_argument }, /* Meta-- */ { ISFUNC, rl_yank_last_arg}, /* Meta-. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-/ */ /* Regular digits. */ { ISFUNC, rl_digit_argument }, /* Meta-0 */ { ISFUNC, rl_digit_argument }, /* Meta-1 */ { ISFUNC, rl_digit_argument }, /* Meta-2 */ { ISFUNC, rl_digit_argument }, /* Meta-3 */ { ISFUNC, rl_digit_argument }, /* Meta-4 */ { ISFUNC, rl_digit_argument }, /* Meta-5 */ { ISFUNC, rl_digit_argument }, /* Meta-6 */ { ISFUNC, rl_digit_argument }, /* Meta-7 */ { ISFUNC, rl_digit_argument }, /* Meta-8 */ { ISFUNC, rl_digit_argument }, /* Meta-9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-: */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-; */ { ISFUNC, rl_beginning_of_history }, /* Meta-< */ { ISFUNC, rl_possible_completions }, /* Meta-= */ { ISFUNC, rl_end_of_history }, /* Meta-> */ { ISFUNC, rl_possible_completions }, /* Meta-? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-@ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* Meta-A */ { ISFUNC, rl_do_lowercase_version }, /* Meta-B */ { ISFUNC, rl_do_lowercase_version }, /* Meta-C */ { ISFUNC, rl_do_lowercase_version }, /* Meta-D */ { ISFUNC, rl_do_lowercase_version }, /* Meta-E */ { ISFUNC, rl_do_lowercase_version }, /* Meta-F */ { ISFUNC, rl_do_lowercase_version }, /* Meta-G */ { ISFUNC, rl_do_lowercase_version }, /* Meta-H */ { ISFUNC, rl_do_lowercase_version }, /* Meta-I */ { ISFUNC, rl_do_lowercase_version }, /* Meta-J */ { ISFUNC, rl_do_lowercase_version }, /* Meta-K */ { ISFUNC, rl_do_lowercase_version }, /* Meta-L */ { ISFUNC, rl_do_lowercase_version }, /* Meta-M */ { ISFUNC, rl_do_lowercase_version }, /* Meta-N */ { ISFUNC, rl_do_lowercase_version }, /* Meta-O */ { ISFUNC, rl_do_lowercase_version }, /* Meta-P */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Q */ { ISFUNC, rl_do_lowercase_version }, /* Meta-R */ { ISFUNC, rl_do_lowercase_version }, /* Meta-S */ { ISFUNC, rl_do_lowercase_version }, /* Meta-T */ { ISFUNC, rl_do_lowercase_version }, /* Meta-U */ { ISFUNC, rl_do_lowercase_version }, /* Meta-V */ { ISFUNC, rl_do_lowercase_version }, /* Meta-W */ { ISFUNC, rl_do_lowercase_version }, /* Meta-X */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Y */ { ISFUNC, rl_do_lowercase_version }, /* Meta-Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-[ */ /* was rl_arrow_keys */ { ISFUNC, rl_delete_horizontal_space }, /* Meta-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-^ */ { ISFUNC, rl_yank_last_arg }, /* Meta-_ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-a */ { ISFUNC, rl_backward_word }, /* Meta-b */ { ISFUNC, rl_capitalize_word }, /* Meta-c */ { ISFUNC, rl_kill_word }, /* Meta-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-e */ { ISFUNC, rl_forward_word }, /* Meta-f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-k */ { ISFUNC, rl_downcase_word }, /* Meta-l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-m */ { ISFUNC, rl_noninc_forward_search }, /* Meta-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-o */ /* was rl_arrow_keys */ { ISFUNC, rl_noninc_reverse_search }, /* Meta-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-q */ { ISFUNC, rl_revert_line }, /* Meta-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-s */ { ISFUNC, rl_transpose_words }, /* Meta-t */ { ISFUNC, rl_upcase_word }, /* Meta-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-x */ { ISFUNC, rl_yank_pop }, /* Meta-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-{ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-| */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Meta-} */ { ISFUNC, rl_tilde_expand }, /* Meta-~ */ { ISFUNC, rl_backward_kill_word }, /* Meta-rubout */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY emacs_ctlx_keymap = { /* Control keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-q */ { ISFUNC, rl_re_read_init_file }, /* Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-t */ { ISFUNC, rl_undo_command }, /* Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-w */ { ISFUNC, rl_exchange_point_and_mark }, /* Control-x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, (rl_command_func_t *)0x0 }, /* # */ { ISFUNC, (rl_command_func_t *)0x0 }, /* $ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* % */ { ISFUNC, (rl_command_func_t *)0x0 }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, rl_start_kbd_macro }, /* ( */ { ISFUNC, rl_end_kbd_macro }, /* ) */ { ISFUNC, (rl_command_func_t *)0x0 }, /* * */ { ISFUNC, (rl_command_func_t *)0x0 }, /* + */ { ISFUNC, (rl_command_func_t *)0x0 }, /* , */ { ISFUNC, (rl_command_func_t *)0x0 }, /* - */ { ISFUNC, (rl_command_func_t *)0x0 }, /* . */ { ISFUNC, (rl_command_func_t *)0x0 }, /* / */ /* Regular digits. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 0 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 1 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 2 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 3 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 4 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 5 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 6 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 7 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 8 */ { ISFUNC, (rl_command_func_t *)0x0 }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, (rl_command_func_t *)0x0 }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* A */ { ISFUNC, rl_do_lowercase_version }, /* B */ { ISFUNC, rl_do_lowercase_version }, /* C */ { ISFUNC, rl_do_lowercase_version }, /* D */ { ISFUNC, rl_do_lowercase_version }, /* E */ { ISFUNC, rl_do_lowercase_version }, /* F */ { ISFUNC, rl_do_lowercase_version }, /* G */ { ISFUNC, rl_do_lowercase_version }, /* H */ { ISFUNC, rl_do_lowercase_version }, /* I */ { ISFUNC, rl_do_lowercase_version }, /* J */ { ISFUNC, rl_do_lowercase_version }, /* K */ { ISFUNC, rl_do_lowercase_version }, /* L */ { ISFUNC, rl_do_lowercase_version }, /* M */ { ISFUNC, rl_do_lowercase_version }, /* N */ { ISFUNC, rl_do_lowercase_version }, /* O */ { ISFUNC, rl_do_lowercase_version }, /* P */ { ISFUNC, rl_do_lowercase_version }, /* Q */ { ISFUNC, rl_do_lowercase_version }, /* R */ { ISFUNC, rl_do_lowercase_version }, /* S */ { ISFUNC, rl_do_lowercase_version }, /* T */ { ISFUNC, rl_do_lowercase_version }, /* U */ { ISFUNC, rl_do_lowercase_version }, /* V */ { ISFUNC, rl_do_lowercase_version }, /* W */ { ISFUNC, rl_do_lowercase_version }, /* X */ { ISFUNC, rl_do_lowercase_version }, /* Y */ { ISFUNC, rl_do_lowercase_version }, /* Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* [ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* _ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* d */ { ISFUNC, rl_call_last_kbd_macro }, /* e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, (rl_command_func_t *)0x0 }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ~ */ { ISFUNC, rl_backward_kill_line }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; readline-7.0/funmap.c000664 000436 000120 00000022445 12664417673 014671 0ustar00chetadmin000000 000000 /* funmap.c -- attach names to functions. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if !defined (BUFSIZ) #include #endif /* BUFSIZ */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "rlconf.h" #include "readline.h" #include "xmalloc.h" #ifdef __STDC__ typedef int QSFUNC (const void *, const void *); #else typedef int QSFUNC (); #endif extern int _rl_qsort_string_compare PARAMS((char **, char **)); FUNMAP **funmap; static int funmap_size; static int funmap_entry; /* After initializing the function map, this is the index of the first program specific function. */ int funmap_program_specific_entry_start; static const FUNMAP default_funmap[] = { { "abort", rl_abort }, { "accept-line", rl_newline }, { "arrow-key-prefix", rl_arrow_keys }, { "backward-byte", rl_backward_byte }, { "backward-char", rl_backward_char }, { "backward-delete-char", rl_rubout }, { "backward-kill-line", rl_backward_kill_line }, { "backward-kill-word", rl_backward_kill_word }, { "backward-word", rl_backward_word }, { "beginning-of-history", rl_beginning_of_history }, { "beginning-of-line", rl_beg_of_line }, { "bracketed-paste-begin", rl_bracketed_paste_begin }, { "call-last-kbd-macro", rl_call_last_kbd_macro }, { "capitalize-word", rl_capitalize_word }, { "character-search", rl_char_search }, { "character-search-backward", rl_backward_char_search }, { "clear-screen", rl_clear_screen }, { "complete", rl_complete }, { "copy-backward-word", rl_copy_backward_word }, { "copy-forward-word", rl_copy_forward_word }, { "copy-region-as-kill", rl_copy_region_to_kill }, { "delete-char", rl_delete }, { "delete-char-or-list", rl_delete_or_show_completions }, { "delete-horizontal-space", rl_delete_horizontal_space }, { "digit-argument", rl_digit_argument }, { "do-lowercase-version", rl_do_lowercase_version }, { "downcase-word", rl_downcase_word }, { "dump-functions", rl_dump_functions }, { "dump-macros", rl_dump_macros }, { "dump-variables", rl_dump_variables }, { "emacs-editing-mode", rl_emacs_editing_mode }, { "end-kbd-macro", rl_end_kbd_macro }, { "end-of-history", rl_end_of_history }, { "end-of-line", rl_end_of_line }, { "exchange-point-and-mark", rl_exchange_point_and_mark }, { "forward-backward-delete-char", rl_rubout_or_delete }, { "forward-byte", rl_forward_byte }, { "forward-char", rl_forward_char }, { "forward-search-history", rl_forward_search_history }, { "forward-word", rl_forward_word }, { "history-search-backward", rl_history_search_backward }, { "history-search-forward", rl_history_search_forward }, { "history-substring-search-backward", rl_history_substr_search_backward }, { "history-substring-search-forward", rl_history_substr_search_forward }, { "insert-comment", rl_insert_comment }, { "insert-completions", rl_insert_completions }, { "kill-whole-line", rl_kill_full_line }, { "kill-line", rl_kill_line }, { "kill-region", rl_kill_region }, { "kill-word", rl_kill_word }, { "menu-complete", rl_menu_complete }, { "menu-complete-backward", rl_backward_menu_complete }, { "next-history", rl_get_next_history }, { "non-incremental-forward-search-history", rl_noninc_forward_search }, { "non-incremental-reverse-search-history", rl_noninc_reverse_search }, { "non-incremental-forward-search-history-again", rl_noninc_forward_search_again }, { "non-incremental-reverse-search-history-again", rl_noninc_reverse_search_again }, { "old-menu-complete", rl_old_menu_complete }, { "overwrite-mode", rl_overwrite_mode }, #if defined (_WIN32) { "paste-from-clipboard", rl_paste_from_clipboard }, #endif { "possible-completions", rl_possible_completions }, { "previous-history", rl_get_previous_history }, { "print-last-kbd-macro", rl_print_last_kbd_macro }, { "quoted-insert", rl_quoted_insert }, { "re-read-init-file", rl_re_read_init_file }, { "redraw-current-line", rl_refresh_line}, { "reverse-search-history", rl_reverse_search_history }, { "revert-line", rl_revert_line }, { "self-insert", rl_insert }, { "set-mark", rl_set_mark }, { "skip-csi-sequence", rl_skip_csi_sequence }, { "start-kbd-macro", rl_start_kbd_macro }, { "tab-insert", rl_tab_insert }, { "tilde-expand", rl_tilde_expand }, { "transpose-chars", rl_transpose_chars }, { "transpose-words", rl_transpose_words }, { "tty-status", rl_tty_status }, { "undo", rl_undo_command }, { "universal-argument", rl_universal_argument }, { "unix-filename-rubout", rl_unix_filename_rubout }, { "unix-line-discard", rl_unix_line_discard }, { "unix-word-rubout", rl_unix_word_rubout }, { "upcase-word", rl_upcase_word }, { "yank", rl_yank }, { "yank-last-arg", rl_yank_last_arg }, { "yank-nth-arg", rl_yank_nth_arg }, { "yank-pop", rl_yank_pop }, #if defined (VI_MODE) { "vi-append-eol", rl_vi_append_eol }, { "vi-append-mode", rl_vi_append_mode }, { "vi-arg-digit", rl_vi_arg_digit }, { "vi-back-to-indent", rl_vi_back_to_indent }, { "vi-backward-bigword", rl_vi_bWord }, { "vi-backward-word", rl_vi_bword }, { "vi-bWord", rl_vi_bWord }, { "vi-bword", rl_vi_bword }, { "vi-change-case", rl_vi_change_case }, { "vi-change-char", rl_vi_change_char }, { "vi-change-to", rl_vi_change_to }, { "vi-char-search", rl_vi_char_search }, { "vi-column", rl_vi_column }, { "vi-complete", rl_vi_complete }, { "vi-delete", rl_vi_delete }, { "vi-delete-to", rl_vi_delete_to }, { "vi-eWord", rl_vi_eWord }, { "vi-editing-mode", rl_vi_editing_mode }, { "vi-end-bigword", rl_vi_eWord }, { "vi-end-word", rl_vi_end_word }, { "vi-eof-maybe", rl_vi_eof_maybe }, { "vi-eword", rl_vi_eword }, { "vi-fWord", rl_vi_fWord }, { "vi-fetch-history", rl_vi_fetch_history }, { "vi-first-print", rl_vi_first_print }, { "vi-forward-bigword", rl_vi_fWord }, { "vi-forward-word", rl_vi_fword }, { "vi-fword", rl_vi_fword }, { "vi-goto-mark", rl_vi_goto_mark }, { "vi-insert-beg", rl_vi_insert_beg }, { "vi-insertion-mode", rl_vi_insert_mode }, { "vi-match", rl_vi_match }, { "vi-movement-mode", rl_vi_movement_mode }, { "vi-next-word", rl_vi_next_word }, { "vi-overstrike", rl_vi_overstrike }, { "vi-overstrike-delete", rl_vi_overstrike_delete }, { "vi-prev-word", rl_vi_prev_word }, { "vi-put", rl_vi_put }, { "vi-redo", rl_vi_redo }, { "vi-replace", rl_vi_replace }, { "vi-rubout", rl_vi_rubout }, { "vi-search", rl_vi_search }, { "vi-search-again", rl_vi_search_again }, { "vi-set-mark", rl_vi_set_mark }, { "vi-subst", rl_vi_subst }, { "vi-tilde-expand", rl_vi_tilde_expand }, { "vi-unix-word-rubout", rl_vi_unix_word_rubout }, { "vi-yank-arg", rl_vi_yank_arg }, { "vi-yank-pop", rl_vi_yank_pop }, { "vi-yank-to", rl_vi_yank_to }, #endif /* VI_MODE */ {(char *)NULL, (rl_command_func_t *)NULL } }; int rl_add_funmap_entry (name, function) const char *name; rl_command_func_t *function; { if (funmap_entry + 2 >= funmap_size) { funmap_size += 64; funmap = (FUNMAP **)xrealloc (funmap, funmap_size * sizeof (FUNMAP *)); } funmap[funmap_entry] = (FUNMAP *)xmalloc (sizeof (FUNMAP)); funmap[funmap_entry]->name = name; funmap[funmap_entry]->function = function; funmap[++funmap_entry] = (FUNMAP *)NULL; return funmap_entry; } static int funmap_initialized; /* Make the funmap contain all of the default entries. */ void rl_initialize_funmap () { register int i; if (funmap_initialized) return; for (i = 0; default_funmap[i].name; i++) rl_add_funmap_entry (default_funmap[i].name, default_funmap[i].function); funmap_initialized = 1; funmap_program_specific_entry_start = i; } /* Produce a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free () the array when you done, but not the pointers. */ const char ** rl_funmap_names () { const char **result; int result_size, result_index; /* Make sure that the function map has been initialized. */ rl_initialize_funmap (); for (result_index = result_size = 0, result = (const char **)NULL; funmap[result_index]; result_index++) { if (result_index + 2 > result_size) { result_size += 20; result = (const char **)xrealloc (result, result_size * sizeof (char *)); } result[result_index] = funmap[result_index]->name; result[result_index + 1] = (char *)NULL; } qsort (result, result_index, sizeof (char *), (QSFUNC *)_rl_qsort_string_compare); return (result); } readline-7.0/input.c000644 000436 000024 00000036424 12761313173 014544 0ustar00chetstaff000000 000000 /* input.c -- character input functions for readline. */ /* Copyright (C) 1994-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include "posixselect.h" #if defined (FIONREAD_IN_SYS_IOCTL) # include #endif #include #include #if !defined (errno) extern int errno; #endif /* !errno */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" /* What kind of non-blocking I/O do we have? */ #if !defined (O_NDELAY) && defined (O_NONBLOCK) # define O_NDELAY O_NONBLOCK /* Posix style */ #endif /* Non-null means it is a pointer to a function to run while waiting for character input. */ rl_hook_func_t *rl_event_hook = (rl_hook_func_t *)NULL; /* A function to call if a read(2) is interrupted by a signal. */ rl_hook_func_t *rl_signal_event_hook = (rl_hook_func_t *)NULL; /* A function to replace _rl_input_available for applications using the callback interface. */ rl_hook_func_t *rl_input_available_hook = (rl_hook_func_t *)NULL; rl_getc_func_t *rl_getc_function = rl_getc; static int _keyboard_input_timeout = 100000; /* 0.1 seconds; it's in usec */ static int ibuffer_space PARAMS((void)); static int rl_get_char PARAMS((int *)); static int rl_gather_tyi PARAMS((void)); /* Windows isatty returns true for every character device, including the null device, so we need to perform additional checks. */ #if defined (_WIN32) && !defined (__CYGWIN__) #include #define WIN32_LEAN_AND_MEAN 1 #include int win32_isatty (int fd) { return (_isatty (fd) ? ((((long) (HANDLE) _get_osfhandle (fd)) & 3) == 3) : 0); } #define isatty(x) win32_isatty(x) #endif /* **************************************************************** */ /* */ /* Character Input Buffering */ /* */ /* **************************************************************** */ static int pop_index, push_index; static unsigned char ibuffer[512]; static int ibuffer_len = sizeof (ibuffer) - 1; #define any_typein (push_index != pop_index) int _rl_any_typein () { return any_typein; } int _rl_pushed_input_available () { return (push_index != pop_index); } /* Return the amount of space available in the buffer for stuffing characters. */ static int ibuffer_space () { if (pop_index > push_index) return (pop_index - push_index - 1); else return (ibuffer_len - (push_index - pop_index)); } /* Get a key from the buffer of characters to be read. Return the key in KEY. Result is non-zero if there was a key, or 0 if there wasn't. */ static int rl_get_char (key) int *key; { if (push_index == pop_index) return (0); *key = ibuffer[pop_index++]; #if 0 if (pop_index >= ibuffer_len) #else if (pop_index > ibuffer_len) #endif pop_index = 0; return (1); } /* Stuff KEY into the *front* of the input buffer. Returns non-zero if successful, zero if there is no space left in the buffer. */ int _rl_unget_char (key) int key; { if (ibuffer_space ()) { pop_index--; if (pop_index < 0) pop_index = ibuffer_len; ibuffer[pop_index] = key; return (1); } return (0); } /* If a character is available to be read, then read it and stuff it into IBUFFER. Otherwise, just return. Returns number of characters read (0 if none available) and -1 on error (EIO). */ static int rl_gather_tyi () { int tty; register int tem, result; int chars_avail, k; char input; #if defined(HAVE_SELECT) fd_set readfds, exceptfds; struct timeval timeout; #endif chars_avail = 0; input = 0; tty = fileno (rl_instream); #if defined (HAVE_SELECT) FD_ZERO (&readfds); FD_ZERO (&exceptfds); FD_SET (tty, &readfds); FD_SET (tty, &exceptfds); USEC_TO_TIMEVAL (_keyboard_input_timeout, timeout); result = select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout); if (result <= 0) return 0; /* Nothing to read. */ #endif result = -1; errno = 0; #if defined (FIONREAD) result = ioctl (tty, FIONREAD, &chars_avail); if (result == -1 && errno == EIO) return -1; if (result == -1) chars_avail = 0; #endif #if defined (O_NDELAY) if (result == -1) { tem = fcntl (tty, F_GETFL, 0); fcntl (tty, F_SETFL, (tem | O_NDELAY)); chars_avail = read (tty, &input, 1); fcntl (tty, F_SETFL, tem); if (chars_avail == -1 && errno == EAGAIN) return 0; if (chars_avail == -1 && errno == EIO) return -1; if (chars_avail == 0) /* EOF */ { rl_stuff_char (EOF); return (0); } } #endif /* O_NDELAY */ #if defined (__MINGW32__) /* Use getch/_kbhit to check for available console input, in the same way that we read it normally. */ chars_avail = isatty (tty) ? _kbhit () : 0; result = 0; #endif /* If there's nothing available, don't waste time trying to read something. */ if (chars_avail <= 0) return 0; tem = ibuffer_space (); if (chars_avail > tem) chars_avail = tem; /* One cannot read all of the available input. I can only read a single character at a time, or else programs which require input can be thwarted. If the buffer is larger than one character, I lose. Damn! */ if (tem < ibuffer_len) chars_avail = 0; if (result != -1) { while (chars_avail--) { RL_CHECK_SIGNALS (); k = (*rl_getc_function) (rl_instream); if (rl_stuff_char (k) == 0) break; /* some problem; no more room */ if (k == NEWLINE || k == RETURN) break; } } else { if (chars_avail) rl_stuff_char (input); } return 1; } int rl_set_keyboard_input_timeout (u) int u; { int o; o = _keyboard_input_timeout; if (u >= 0) _keyboard_input_timeout = u; return (o); } /* Is there input available to be read on the readline input file descriptor? Only works if the system has select(2) or FIONREAD. Uses the value of _keyboard_input_timeout as the timeout; if another readline function wants to specify a timeout and not leave it up to the user, it should use _rl_input_queued(timeout_value_in_microseconds) instead. */ int _rl_input_available () { #if defined(HAVE_SELECT) fd_set readfds, exceptfds; struct timeval timeout; #endif #if !defined (HAVE_SELECT) && defined(FIONREAD) int chars_avail; #endif int tty; if (rl_input_available_hook) return (*rl_input_available_hook) (); tty = fileno (rl_instream); #if defined (HAVE_SELECT) FD_ZERO (&readfds); FD_ZERO (&exceptfds); FD_SET (tty, &readfds); FD_SET (tty, &exceptfds); timeout.tv_sec = 0; timeout.tv_usec = _keyboard_input_timeout; return (select (tty + 1, &readfds, (fd_set *)NULL, &exceptfds, &timeout) > 0); #else #if defined (FIONREAD) if (ioctl (tty, FIONREAD, &chars_avail) == 0) return (chars_avail); #endif #endif #if defined (__MINGW32__) if (isatty (tty)) return (_kbhit ()); #endif return 0; } int _rl_input_queued (t) int t; { int old_timeout, r; old_timeout = rl_set_keyboard_input_timeout (t); r = _rl_input_available (); rl_set_keyboard_input_timeout (old_timeout); return r; } void _rl_insert_typein (c) int c; { int key, t, i; char *string; i = key = 0; string = (char *)xmalloc (ibuffer_len + 1); string[i++] = (char) c; while ((t = rl_get_char (&key)) && _rl_keymap[key].type == ISFUNC && _rl_keymap[key].function == rl_insert) string[i++] = key; if (t) _rl_unget_char (key); string[i] = '\0'; rl_insert_text (string); xfree (string); } /* Add KEY to the buffer of characters to be read. Returns 1 if the character was stuffed correctly; 0 otherwise. */ int rl_stuff_char (key) int key; { if (ibuffer_space () == 0) return 0; if (key == EOF) { key = NEWLINE; rl_pending_input = EOF; RL_SETSTATE (RL_STATE_INPUTPENDING); } ibuffer[push_index++] = key; #if 0 if (push_index >= ibuffer_len) #else if (push_index > ibuffer_len) #endif push_index = 0; return 1; } /* Make C be the next command to be executed. */ int rl_execute_next (c) int c; { rl_pending_input = c; RL_SETSTATE (RL_STATE_INPUTPENDING); return 0; } /* Clear any pending input pushed with rl_execute_next() */ int rl_clear_pending_input () { rl_pending_input = 0; RL_UNSETSTATE (RL_STATE_INPUTPENDING); return 0; } /* **************************************************************** */ /* */ /* Character Input */ /* */ /* **************************************************************** */ /* Read a key, including pending input. */ int rl_read_key () { int c, r; if (rl_pending_input) { c = rl_pending_input; rl_clear_pending_input (); } else { /* If input is coming from a macro, then use that. */ if (c = _rl_next_macro_key ()) return (c); /* If the user has an event function, then call it periodically. */ if (rl_event_hook) { while (rl_event_hook) { if (rl_get_char (&c) != 0) break; if ((r = rl_gather_tyi ()) < 0) /* XXX - EIO */ { rl_done = 1; return (errno == EIO ? (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF) : '\n'); } else if (r > 0) /* read something */ continue; RL_CHECK_SIGNALS (); if (rl_done) /* XXX - experimental */ return ('\n'); (*rl_event_hook) (); } } else { if (rl_get_char (&c) == 0) c = (*rl_getc_function) (rl_instream); /* fprintf(stderr, "rl_read_key: calling RL_CHECK_SIGNALS: _rl_caught_signal = %d", _rl_caught_signal); */ RL_CHECK_SIGNALS (); } } return (c); } int rl_getc (stream) FILE *stream; { int result; unsigned char c; #if defined (HAVE_PSELECT) sigset_t empty_set; fd_set readfds; #endif while (1) { RL_CHECK_SIGNALS (); /* We know at this point that _rl_caught_signal == 0 */ #if defined (__MINGW32__) if (isatty (fileno (stream))) return (_getch ()); /* "There is no error return." */ #endif result = 0; #if defined (HAVE_PSELECT) sigemptyset (&empty_set); FD_ZERO (&readfds); FD_SET (fileno (stream), &readfds); result = pselect (fileno (stream) + 1, &readfds, NULL, NULL, NULL, &empty_set); #endif if (result >= 0) result = read (fileno (stream), &c, sizeof (unsigned char)); if (result == sizeof (unsigned char)) return (c); /* If zero characters are returned, then the file that we are reading from is empty! Return EOF in that case. */ if (result == 0) return (EOF); #if defined (__BEOS__) if (errno == EINTR) continue; #endif #if defined (EWOULDBLOCK) # define X_EWOULDBLOCK EWOULDBLOCK #else # define X_EWOULDBLOCK -99 #endif #if defined (EAGAIN) # define X_EAGAIN EAGAIN #else # define X_EAGAIN -99 #endif if (errno == X_EWOULDBLOCK || errno == X_EAGAIN) { if (sh_unset_nodelay_mode (fileno (stream)) < 0) return (EOF); continue; } #undef X_EWOULDBLOCK #undef X_EAGAIN /* fprintf(stderr, "rl_getc: result = %d errno = %d\n", result, errno); */ handle_error: /* If the error that we received was EINTR, then try again, this is simply an interrupted system call to read (). We allow the read to be interrupted if we caught SIGHUP, SIGTERM, or any of the other signals readline treats specially. If the application sets an event hook, call it for other signals. Otherwise (not EINTR), some error occurred, also signifying EOF. */ if (errno != EINTR) return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); /* fatal signals of interest */ #if defined (SIGHUP) else if (_rl_caught_signal == SIGHUP || _rl_caught_signal == SIGTERM) #else else if (_rl_caught_signal == SIGTERM) #endif return (RL_ISSTATE (RL_STATE_READCMD) ? READERR : EOF); /* keyboard-generated signals of interest */ #if defined (SIGQUIT) else if (_rl_caught_signal == SIGINT || _rl_caught_signal == SIGQUIT) #else else if (_rl_caught_signal == SIGINT) #endif RL_CHECK_SIGNALS (); /* non-keyboard-generated signals of interest */ #if defined (SIGWINCH) else if (_rl_caught_signal == SIGWINCH) RL_CHECK_SIGNALS (); #endif /* SIGWINCH */ #if defined (SIGALRM) else if (_rl_caught_signal == SIGALRM # if defined (SIGVTALRM) || _rl_caught_signal == SIGVTALRM # endif ) RL_CHECK_SIGNALS (); #endif /* SIGALRM */ if (rl_signal_event_hook) (*rl_signal_event_hook) (); } } #if defined (HANDLE_MULTIBYTE) /* read multibyte char */ int _rl_read_mbchar (mbchar, size) char *mbchar; int size; { int mb_len, c; size_t mbchar_bytes_length; wchar_t wc; mbstate_t ps, ps_back; memset(&ps, 0, sizeof (mbstate_t)); memset(&ps_back, 0, sizeof (mbstate_t)); mb_len = 0; while (mb_len < size) { RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) break; mbchar[mb_len++] = c; mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps); if (mbchar_bytes_length == (size_t)(-1)) break; /* invalid byte sequence for the current locale */ else if (mbchar_bytes_length == (size_t)(-2)) { /* shorted bytes */ ps = ps_back; continue; } else if (mbchar_bytes_length == 0) { mbchar[0] = '\0'; /* null wide character */ mb_len = 1; break; } else if (mbchar_bytes_length > (size_t)(0)) break; } return mb_len; } /* Read a multibyte-character string whose first character is FIRST into the buffer MB of length MLEN. Returns the last character read, which may be FIRST. Used by the search functions, among others. Very similar to _rl_read_mbchar. */ int _rl_read_mbstring (first, mb, mlen) int first; char *mb; int mlen; { int i, c; mbstate_t ps; c = first; memset (mb, 0, mlen); for (i = 0; c >= 0 && i < mlen; i++) { mb[i] = (char)c; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_get_char_len (mb, &ps) == -2) { /* Read more for multibyte character */ RL_SETSTATE (RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE (RL_STATE_MOREINPUT); } else break; } return c; } #endif /* HANDLE_MULTIBYTE */ readline-7.0/isearch.c000664 000436 000024 00000056336 12641025633 015027 0ustar00chetstaff000000 000000 /* isearch.c - incremental searching */ /* **************************************************************** */ /* */ /* I-Search and Searching */ /* */ /* **************************************************************** */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* Variables exported to other files in the readline library. */ char *_rl_isearch_terminators = (char *)NULL; _rl_search_cxt *_rl_iscxt = 0; /* Variables imported from other files in the readline library. */ extern HIST_ENTRY *_rl_saved_line_for_history; static int rl_search_history PARAMS((int, int)); static _rl_search_cxt *_rl_isearch_init PARAMS((int)); static void _rl_isearch_fini PARAMS((_rl_search_cxt *)); /* Last line found by the current incremental search, so we don't `find' identical lines many times in a row. Now part of isearch context. */ /* static char *prev_line_found; */ /* Last search string and its length. */ static char *last_isearch_string; static int last_isearch_string_len; static char * const default_isearch_terminators = "\033\012"; _rl_search_cxt * _rl_scxt_alloc (type, flags) int type, flags; { _rl_search_cxt *cxt; cxt = (_rl_search_cxt *)xmalloc (sizeof (_rl_search_cxt)); cxt->type = type; cxt->sflags = flags; cxt->search_string = 0; cxt->search_string_size = cxt->search_string_index = 0; cxt->lines = 0; cxt->allocated_line = 0; cxt->hlen = cxt->hindex = 0; cxt->save_point = rl_point; cxt->save_mark = rl_mark; cxt->save_line = where_history (); cxt->last_found_line = cxt->save_line; cxt->prev_line_found = 0; cxt->save_undo_list = 0; cxt->keymap = _rl_keymap; cxt->okeymap = _rl_keymap; cxt->history_pos = 0; cxt->direction = 0; cxt->prevc = cxt->lastc = 0; cxt->sline = 0; cxt->sline_len = cxt->sline_index = 0; cxt->search_terminators = 0; return cxt; } void _rl_scxt_dispose (cxt, flags) _rl_search_cxt *cxt; int flags; { FREE (cxt->search_string); FREE (cxt->allocated_line); FREE (cxt->lines); xfree (cxt); } /* Search backwards through the history looking for a string which is typed interactively. Start with the current line. */ int rl_reverse_search_history (sign, key) int sign, key; { return (rl_search_history (-sign, key)); } /* Search forwards through the history looking for a string which is typed interactively. Start with the current line. */ int rl_forward_search_history (sign, key) int sign, key; { return (rl_search_history (sign, key)); } /* Display the current state of the search in the echo-area. SEARCH_STRING contains the string that is being searched for, DIRECTION is zero for forward, or non-zero for reverse, WHERE is the history list number of the current line. If it is -1, then this line is the starting one. */ static void rl_display_search (search_string, flags, where) char *search_string; int flags, where; { char *message; int msglen, searchlen; searchlen = (search_string && *search_string) ? strlen (search_string) : 0; message = (char *)xmalloc (searchlen + 64); msglen = 0; #if defined (NOTDEF) if (where != -1) { sprintf (message, "[%d]", where + history_base); msglen = strlen (message); } #endif /* NOTDEF */ message[msglen++] = '('; if (flags & SF_FAILED) { strcpy (message + msglen, "failed "); msglen += 7; } if (flags & SF_REVERSE) { strcpy (message + msglen, "reverse-"); msglen += 8; } strcpy (message + msglen, "i-search)`"); msglen += 10; if (search_string) { strcpy (message + msglen, search_string); msglen += searchlen; } strcpy (message + msglen, "': "); rl_message ("%s", message); xfree (message); (*rl_redisplay_function) (); } static _rl_search_cxt * _rl_isearch_init (direction) int direction; { _rl_search_cxt *cxt; register int i; HIST_ENTRY **hlist; cxt = _rl_scxt_alloc (RL_SEARCH_ISEARCH, 0); if (direction < 0) cxt->sflags |= SF_REVERSE; cxt->search_terminators = _rl_isearch_terminators ? _rl_isearch_terminators : default_isearch_terminators; /* Create an array of pointers to the lines that we want to search. */ hlist = history_list (); rl_maybe_replace_line (); i = 0; if (hlist) for (i = 0; hlist[i]; i++); /* Allocate space for this many lines, +1 for the current input line, and remember those lines. */ cxt->lines = (char **)xmalloc ((1 + (cxt->hlen = i)) * sizeof (char *)); for (i = 0; i < cxt->hlen; i++) cxt->lines[i] = hlist[i]->line; if (_rl_saved_line_for_history) cxt->lines[i] = _rl_saved_line_for_history->line; else { /* Keep track of this so we can free it. */ cxt->allocated_line = (char *)xmalloc (1 + strlen (rl_line_buffer)); strcpy (cxt->allocated_line, &rl_line_buffer[0]); cxt->lines[i] = cxt->allocated_line; } cxt->hlen++; /* The line where we start the search. */ cxt->history_pos = cxt->save_line; rl_save_prompt (); /* Initialize search parameters. */ cxt->search_string = (char *)xmalloc (cxt->search_string_size = 128); cxt->search_string[cxt->search_string_index = 0] = '\0'; /* Normalize DIRECTION into 1 or -1. */ cxt->direction = (direction >= 0) ? 1 : -1; cxt->sline = rl_line_buffer; cxt->sline_len = strlen (cxt->sline); cxt->sline_index = rl_point; _rl_iscxt = cxt; /* save globally */ return cxt; } static void _rl_isearch_fini (cxt) _rl_search_cxt *cxt; { /* First put back the original state. */ strcpy (rl_line_buffer, cxt->lines[cxt->save_line]); rl_restore_prompt (); /* Save the search string for possible later use. */ FREE (last_isearch_string); last_isearch_string = cxt->search_string; last_isearch_string_len = cxt->search_string_index; cxt->search_string = 0; if (cxt->last_found_line < cxt->save_line) rl_get_previous_history (cxt->save_line - cxt->last_found_line, 0); else rl_get_next_history (cxt->last_found_line - cxt->save_line, 0); /* If the string was not found, put point at the end of the last matching line. If last_found_line == orig_line, we didn't find any matching history lines at all, so put point back in its original position. */ if (cxt->sline_index < 0) { if (cxt->last_found_line == cxt->save_line) cxt->sline_index = cxt->save_point; else cxt->sline_index = strlen (rl_line_buffer); rl_mark = cxt->save_mark; } rl_point = cxt->sline_index; /* Don't worry about where to put the mark here; rl_get_previous_history and rl_get_next_history take care of it. */ rl_clear_message (); } int _rl_search_getchar (cxt) _rl_search_cxt *cxt; { int c; /* Read a key and decide how to proceed. */ RL_SETSTATE(RL_STATE_MOREINPUT); c = cxt->lastc = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); #if defined (HANDLE_MULTIBYTE) /* This ends up with C (and LASTC) being set to the last byte of the multibyte character. In most cases c == lastc == mb[0] */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) c = cxt->lastc = _rl_read_mbstring (cxt->lastc, cxt->mb, MB_LEN_MAX); #endif RL_CHECK_SIGNALS (); return c; } #define ENDSRCH_CHAR(c) \ ((CTRL_CHAR (c) || META_CHAR (c) || (c) == RUBOUT) && ((c) != CTRL ('G'))) /* Process just-read character C according to isearch context CXT. Return -1 if the caller should just free the context and return, 0 if we should break out of the loop, and 1 if we should continue to read characters. */ int _rl_isearch_dispatch (cxt, c) _rl_search_cxt *cxt; int c; { int n, wstart, wlen, limit, cval; rl_command_func_t *f; f = (rl_command_func_t *)NULL; if (c < 0) { cxt->sflags |= SF_FAILED; cxt->history_pos = cxt->last_found_line; return -1; } /* If we are moving into a new keymap, modify cxt->keymap and go on. This can be a problem if c == ESC and we want to terminate the incremental search, so we check */ if (c >= 0 && cxt->keymap[c].type == ISKMAP && strchr (cxt->search_terminators, cxt->lastc) == 0) { /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000. If we don't get any additional input and this keymap shadows another function, process that key as if it was all we read. */ if (_rl_keyseq_timeout > 0 && RL_ISSTATE (RL_STATE_CALLBACK) == 0 && RL_ISSTATE (RL_STATE_INPUTPENDING) == 0 && _rl_pushed_input_available () == 0 && ((Keymap)(cxt->keymap[c].function))[ANYOTHERKEY].function && _rl_input_queued (_rl_keyseq_timeout*1000) == 0) goto add_character; cxt->okeymap = cxt->keymap; cxt->keymap = FUNCTION_TO_KEYMAP (cxt->keymap, c); cxt->sflags |= SF_CHGKMAP; /* XXX - we should probably save this sequence, so we can do something useful if this doesn't end up mapping to a command we interpret here. Right now we just save the most recent character that caused the index into a new keymap. */ cxt->prevc = c; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->mb[1] == 0) { cxt->pmb[0] = c; /* XXX should be == cxt->mb[0] */ cxt->pmb[1] = '\0'; } else memcpy (cxt->pmb, cxt->mb, sizeof (cxt->pmb)); } #endif return 1; } add_character: /* Translate the keys we do something with to opcodes. */ if (c >= 0 && cxt->keymap[c].type == ISFUNC) { f = cxt->keymap[c].function; if (f == rl_reverse_search_history) cxt->lastc = (cxt->sflags & SF_REVERSE) ? -1 : -2; else if (f == rl_forward_search_history) cxt->lastc = (cxt->sflags & SF_REVERSE) ? -2 : -1; else if (f == rl_rubout) cxt->lastc = -3; else if (c == CTRL ('G') || f == rl_abort) cxt->lastc = -4; else if (c == CTRL ('W') || f == rl_unix_word_rubout) /* XXX */ cxt->lastc = -5; else if (c == CTRL ('Y') || f == rl_yank) /* XXX */ cxt->lastc = -6; } /* If we changed the keymap earlier while translating a key sequence into a command, restore it now that we've succeeded. */ if (cxt->sflags & SF_CHGKMAP) { cxt->keymap = cxt->okeymap; cxt->sflags &= ~SF_CHGKMAP; /* If we indexed into a new keymap, but didn't map to a command that affects the search (lastc > 0), and the character that mapped to a new keymap would have ended the search (ENDSRCH_CHAR(cxt->prevc)), handle that now as if the previous char would have ended the search and we would have read the current character. */ /* XXX - should we check cxt->mb? */ if (cxt->lastc > 0 && ENDSRCH_CHAR (cxt->prevc)) { rl_stuff_char (cxt->lastc); rl_execute_next (cxt->prevc); /* XXX - do we insert everything in cxt->pmb? */ return (0); } /* Otherwise, if the current character is mapped to self-insert or nothing (i.e., not an editing command), and the previous character was a keymap index, then we need to insert both the previous character and the current character into the search string. */ else if (cxt->lastc > 0 && cxt->prevc > 0 && cxt->keymap[cxt->prevc].type == ISKMAP && (f == 0 || f == rl_insert)) { /* Make lastc be the next character read */ /* XXX - do we insert everything in cxt->mb? */ rl_execute_next (cxt->lastc); /* Dispatch on the previous character (insert into search string) */ cxt->lastc = cxt->prevc; #if defined (HANDLE_MULTIBYTE) /* Have to overwrite cxt->mb here because dispatch uses it below */ if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->pmb[1] == 0) { cxt->mb[0] = cxt->lastc; /* == cxt->prevc */ cxt->mb[1] = '\0'; } else memcpy (cxt->mb, cxt->pmb, sizeof (cxt->mb)); } #endif cxt->prevc = 0; } else if (cxt->lastc > 0 && cxt->prevc > 0 && f && f != rl_insert) { rl_stuff_char (cxt->lastc); rl_execute_next (cxt->prevc); /* XXX - do we insert everything in cxt->pmb? */ return (0); } } /* The characters in isearch_terminators (set from the user-settable variable isearch-terminators) are used to terminate the search but not subsequently execute the character as a command. The default value is "\033\012" (ESC and C-J). */ if (cxt->lastc > 0 && strchr (cxt->search_terminators, cxt->lastc)) { /* ESC still terminates the search, but if there is pending input or if input arrives within 0.1 seconds (on systems with select(2)) it is used as a prefix character with rl_execute_next. WATCH OUT FOR THIS! This is intended to allow the arrow keys to be used like ^F and ^B are used to terminate the search and execute the movement command. XXX - since _rl_input_available depends on the application- settable keyboard timeout value, this could alternatively use _rl_input_queued(100000) */ if (cxt->lastc == ESC && (_rl_pushed_input_available () || _rl_input_available ())) rl_execute_next (ESC); return (0); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { if (cxt->lastc >= 0 && (cxt->mb[0] && cxt->mb[1] == '\0') && ENDSRCH_CHAR (cxt->lastc)) { /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); return (0); } } else #endif if (cxt->lastc >= 0 && ENDSRCH_CHAR (cxt->lastc)) { /* This sets rl_pending_input to LASTC; it will be picked up the next time rl_read_key is called. */ rl_execute_next (cxt->lastc); return (0); } /* Now dispatch on the character. `Opcodes' affect the search string or state. Other characters are added to the string. */ switch (cxt->lastc) { /* search again */ case -1: if (cxt->search_string_index == 0) { if (last_isearch_string) { cxt->search_string_size = 64 + last_isearch_string_len; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); strcpy (cxt->search_string, last_isearch_string); cxt->search_string_index = last_isearch_string_len; rl_display_search (cxt->search_string, cxt->sflags, -1); break; } return (1); } else if (cxt->sflags & SF_REVERSE) cxt->sline_index--; else if (cxt->sline_index != cxt->sline_len) cxt->sline_index++; else rl_ding (); break; /* switch directions */ case -2: cxt->direction = -cxt->direction; if (cxt->direction < 0) cxt->sflags |= SF_REVERSE; else cxt->sflags &= ~SF_REVERSE; break; /* delete character from search string. */ case -3: /* C-H, DEL */ /* This is tricky. To do this right, we need to keep a stack of search positions for the current search, with sentinels marking the beginning and end. But this will do until we have a real isearch-undo. */ if (cxt->search_string_index == 0) rl_ding (); else if (MB_CUR_MAX == 1 || rl_byte_oriented) cxt->search_string[--cxt->search_string_index] = '\0'; else { wstart = _rl_find_prev_mbchar (cxt->search_string, cxt->search_string_index, MB_FIND_NONZERO); if (wstart >= 0) cxt->search_string[cxt->search_string_index = wstart] = '\0'; else cxt->search_string[cxt->search_string_index = 0] = '\0'; } if (cxt->search_string_index == 0) rl_ding (); break; case -4: /* C-G, abort */ rl_replace_line (cxt->lines[cxt->save_line], 0); rl_point = cxt->save_point; rl_mark = cxt->save_mark; rl_restore_prompt(); rl_clear_message (); return -1; case -5: /* C-W */ /* skip over portion of line we already matched and yank word */ wstart = rl_point + cxt->search_string_index; if (wstart >= rl_end) { rl_ding (); break; } /* if not in a word, move to one. */ cval = _rl_char_value (rl_line_buffer, wstart); if (_rl_walphabetic (cval) == 0) { rl_ding (); break; } n = MB_NEXTCHAR (rl_line_buffer, wstart, 1, MB_FIND_NONZERO);; while (n < rl_end) { cval = _rl_char_value (rl_line_buffer, n); if (_rl_walphabetic (cval) == 0) break; n = MB_NEXTCHAR (rl_line_buffer, n, 1, MB_FIND_NONZERO);; } wlen = n - wstart + 1; if (cxt->search_string_index + wlen + 1 >= cxt->search_string_size) { cxt->search_string_size += wlen + 1; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } for (; wstart < n; wstart++) cxt->search_string[cxt->search_string_index++] = rl_line_buffer[wstart]; cxt->search_string[cxt->search_string_index] = '\0'; break; case -6: /* C-Y */ /* skip over portion of line we already matched and yank rest */ wstart = rl_point + cxt->search_string_index; if (wstart >= rl_end) { rl_ding (); break; } n = rl_end - wstart + 1; if (cxt->search_string_index + n + 1 >= cxt->search_string_size) { cxt->search_string_size += n + 1; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } for (n = wstart; n < rl_end; n++) cxt->search_string[cxt->search_string_index++] = rl_line_buffer[n]; cxt->search_string[cxt->search_string_index] = '\0'; break; /* Add character to search string and continue search. */ default: if (cxt->search_string_index + 2 >= cxt->search_string_size) { cxt->search_string_size += 128; cxt->search_string = (char *)xrealloc (cxt->search_string, cxt->search_string_size); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int j, l; if (cxt->mb[0] == 0 || cxt->mb[1] == 0) cxt->search_string[cxt->search_string_index++] = cxt->mb[0]; else for (j = 0, l = RL_STRLEN (cxt->mb); j < l; ) cxt->search_string[cxt->search_string_index++] = cxt->mb[j++]; } else #endif cxt->search_string[cxt->search_string_index++] = cxt->lastc; /* XXX - was c instead of lastc */ cxt->search_string[cxt->search_string_index] = '\0'; break; } for (cxt->sflags &= ~(SF_FOUND|SF_FAILED);; ) { if (cxt->search_string_index == 0) { cxt->sflags |= SF_FAILED; break; } limit = cxt->sline_len - cxt->search_string_index + 1; /* Search the current line. */ while ((cxt->sflags & SF_REVERSE) ? (cxt->sline_index >= 0) : (cxt->sline_index < limit)) { if (STREQN (cxt->search_string, cxt->sline + cxt->sline_index, cxt->search_string_index)) { cxt->sflags |= SF_FOUND; break; } else cxt->sline_index += cxt->direction; } if (cxt->sflags & SF_FOUND) break; /* Move to the next line, but skip new copies of the line we just found and lines shorter than the string we're searching for. */ do { /* Move to the next line. */ cxt->history_pos += cxt->direction; /* At limit for direction? */ if ((cxt->sflags & SF_REVERSE) ? (cxt->history_pos < 0) : (cxt->history_pos == cxt->hlen)) { cxt->sflags |= SF_FAILED; break; } /* We will need these later. */ cxt->sline = cxt->lines[cxt->history_pos]; cxt->sline_len = strlen (cxt->sline); } while ((cxt->prev_line_found && STREQ (cxt->prev_line_found, cxt->lines[cxt->history_pos])) || (cxt->search_string_index > cxt->sline_len)); if (cxt->sflags & SF_FAILED) break; /* Now set up the line for searching... */ cxt->sline_index = (cxt->sflags & SF_REVERSE) ? cxt->sline_len - cxt->search_string_index : 0; } if (cxt->sflags & SF_FAILED) { /* We cannot find the search string. Ding the bell. */ rl_ding (); cxt->history_pos = cxt->last_found_line; rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos); return 1; } /* We have found the search string. Just display it. But don't actually move there in the history list until the user accepts the location. */ if (cxt->sflags & SF_FOUND) { cxt->prev_line_found = cxt->lines[cxt->history_pos]; rl_replace_line (cxt->lines[cxt->history_pos], 0); rl_point = cxt->sline_index; cxt->last_found_line = cxt->history_pos; rl_display_search (cxt->search_string, cxt->sflags, (cxt->history_pos == cxt->save_line) ? -1 : cxt->history_pos); } return 1; } int _rl_isearch_cleanup (cxt, r) _rl_search_cxt *cxt; int r; { if (r >= 0) _rl_isearch_fini (cxt); _rl_scxt_dispose (cxt, 0); _rl_iscxt = 0; RL_UNSETSTATE(RL_STATE_ISEARCH); return (r != 0); } /* Search through the history looking for an interactively typed string. This is analogous to i-search. We start the search in the current line. DIRECTION is which direction to search; >= 0 means forward, < 0 means backwards. */ static int rl_search_history (direction, invoking_key) int direction, invoking_key; { _rl_search_cxt *cxt; /* local for now, but saved globally */ int c, r; RL_SETSTATE(RL_STATE_ISEARCH); cxt = _rl_isearch_init (direction); rl_display_search (cxt->search_string, cxt->sflags, -1); /* If we are using the callback interface, all we do is set up here and return. The key is that we leave RL_STATE_ISEARCH set. */ if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); r = -1; for (;;) { c = _rl_search_getchar (cxt); /* We might want to handle EOF here (c == 0) */ r = _rl_isearch_dispatch (cxt, cxt->lastc); if (r <= 0) break; } /* The searching is over. The user may have found the string that she was looking for, or else she may have exited a failing search. If LINE_INDEX is -1, then that shows that the string searched for was not found. We use this to determine where to place rl_point. */ return (_rl_isearch_cleanup (cxt, r)); } #if defined (READLINE_CALLBACKS) /* Called from the callback functions when we are ready to read a key. The callback functions know to call this because RL_ISSTATE(RL_STATE_ISEARCH). If _rl_isearch_dispatch finishes searching, this function is responsible for turning off RL_STATE_ISEARCH, which it does using _rl_isearch_cleanup. */ int _rl_isearch_callback (cxt) _rl_search_cxt *cxt; { int c, r; c = _rl_search_getchar (cxt); /* We might want to handle EOF here */ r = _rl_isearch_dispatch (cxt, cxt->lastc); return (r <= 0) ? _rl_isearch_cleanup (cxt, r) : 0; } #endif readline-7.0/keymaps.c000664 000436 000000 00000007344 11423126040 015037 0ustar00chetwheel000000 000000 /* keymaps.c -- Functions and keymaps for the GNU Readline library. */ /* Copyright (C) 1988,1989-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* for FILE * definition for readline.h */ #include "readline.h" #include "rlconf.h" #include "emacs_keymap.c" #if defined (VI_MODE) #include "vi_keymap.c" #endif #include "xmalloc.h" /* **************************************************************** */ /* */ /* Functions for manipulating Keymaps. */ /* */ /* **************************************************************** */ /* Return a new, empty keymap. Free it with free() when you are done. */ Keymap rl_make_bare_keymap () { register int i; Keymap keymap; keymap = (Keymap)xmalloc (KEYMAP_SIZE * sizeof (KEYMAP_ENTRY)); for (i = 0; i < KEYMAP_SIZE; i++) { keymap[i].type = ISFUNC; keymap[i].function = (rl_command_func_t *)NULL; } #if 0 for (i = 'A'; i < ('Z' + 1); i++) { keymap[i].type = ISFUNC; keymap[i].function = rl_do_lowercase_version; } #endif return (keymap); } /* Return a new keymap which is a copy of MAP. Just copies pointers, does not copy text of macros or descend into child keymaps. */ Keymap rl_copy_keymap (map) Keymap map; { register int i; Keymap temp; temp = rl_make_bare_keymap (); for (i = 0; i < KEYMAP_SIZE; i++) { temp[i].type = map[i].type; temp[i].function = map[i].function; } return (temp); } /* Return a new keymap with the printing characters bound to rl_insert, the uppercase Meta characters bound to run their lowercase equivalents, and the Meta digits bound to produce numeric arguments. */ Keymap rl_make_keymap () { register int i; Keymap newmap; newmap = rl_make_bare_keymap (); /* All ASCII printing characters are self-inserting. */ for (i = ' '; i < 127; i++) newmap[i].function = rl_insert; newmap[TAB].function = rl_insert; newmap[RUBOUT].function = rl_rubout; /* RUBOUT == 127 */ newmap[CTRL('H')].function = rl_rubout; #if KEYMAP_SIZE > 128 /* Printing characters in ISO Latin-1 and some 8-bit character sets. */ for (i = 128; i < 256; i++) newmap[i].function = rl_insert; #endif /* KEYMAP_SIZE > 128 */ return (newmap); } /* Free the storage associated with MAP. */ void rl_discard_keymap (map) Keymap map; { int i; if (map == 0) return; for (i = 0; i < KEYMAP_SIZE; i++) { switch (map[i].type) { case ISFUNC: break; case ISKMAP: rl_discard_keymap ((Keymap)map[i].function); xfree ((char *)map[i].function); break; case ISMACR: xfree ((char *)map[i].function); break; } } } /* Convenience function that discards, then frees, MAP. */ void rl_free_keymap (map) Keymap map; { rl_discard_keymap (map); xfree ((char *)map); } readline-7.0/kill.c000644 000436 000024 00000042000 12651440605 014322 0ustar00chetstaff000000 000000 /* kill.c -- kill ring management. */ /* Copyright (C) 1994-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* **************************************************************** */ /* */ /* Killing Mechanism */ /* */ /* **************************************************************** */ /* What we assume for a max number of kills. */ #define DEFAULT_MAX_KILLS 10 /* The real variable to look at to find out when to flush kills. */ static int rl_max_kills = DEFAULT_MAX_KILLS; /* Where to store killed text. */ static char **rl_kill_ring = (char **)NULL; /* Where we are in the kill ring. */ static int rl_kill_index; /* How many slots we have in the kill ring. */ static int rl_kill_ring_length; static int _rl_copy_to_kill_ring PARAMS((char *, int)); static int region_kill_internal PARAMS((int)); static int _rl_copy_word_as_kill PARAMS((int, int)); static int rl_yank_nth_arg_internal PARAMS((int, int, int)); /* How to say that you only want to save a certain amount of kill material. */ int rl_set_retained_kills (num) int num; { return 0; } /* Add TEXT to the kill ring, allocating a new kill ring slot as necessary. This uses TEXT directly, so the caller must not free it. If APPEND is non-zero, and the last command was a kill, the text is appended to the current kill ring slot, otherwise prepended. */ static int _rl_copy_to_kill_ring (text, append) char *text; int append; { char *old, *new; int slot; /* First, find the slot to work with. */ if (_rl_last_command_was_kill == 0 || rl_kill_ring == 0) { /* Get a new slot. */ if (rl_kill_ring == 0) { /* If we don't have any defined, then make one. */ rl_kill_ring = (char **) xmalloc (((rl_kill_ring_length = 1) + 1) * sizeof (char *)); rl_kill_ring[slot = 0] = (char *)NULL; } else { /* We have to add a new slot on the end, unless we have exceeded the max limit for remembering kills. */ slot = rl_kill_ring_length; if (slot == rl_max_kills) { register int i; xfree (rl_kill_ring[0]); for (i = 0; i < slot; i++) rl_kill_ring[i] = rl_kill_ring[i + 1]; } else { slot = rl_kill_ring_length += 1; rl_kill_ring = (char **)xrealloc (rl_kill_ring, slot * sizeof (char *)); } rl_kill_ring[--slot] = (char *)NULL; } } else slot = rl_kill_ring_length - 1; /* If the last command was a kill, prepend or append. */ if (_rl_last_command_was_kill && rl_editing_mode != vi_mode) { old = rl_kill_ring[slot]; new = (char *)xmalloc (1 + strlen (old) + strlen (text)); if (append) { strcpy (new, old); strcat (new, text); } else { strcpy (new, text); strcat (new, old); } xfree (old); xfree (text); rl_kill_ring[slot] = new; } else rl_kill_ring[slot] = text; rl_kill_index = slot; return 0; } /* The way to kill something. This appends or prepends to the last kill, if the last command was a kill command. if FROM is less than TO, then the text is appended, otherwise prepended. If the last command was not a kill command, then a new slot is made for this kill. */ int rl_kill_text (from, to) int from, to; { char *text; /* Is there anything to kill? */ if (from == to) { _rl_last_command_was_kill++; return 0; } text = rl_copy_text (from, to); /* Delete the copied text from the line. */ rl_delete_text (from, to); _rl_copy_to_kill_ring (text, from < to); _rl_last_command_was_kill++; return 0; } /* Now REMEMBER! In order to do prepending or appending correctly, kill commands always make rl_point's original position be the FROM argument, and rl_point's extent be the TO argument. */ /* **************************************************************** */ /* */ /* Killing Commands */ /* */ /* **************************************************************** */ /* Delete the word at point, saving the text in the kill ring. */ int rl_kill_word (count, key) int count, key; { int orig_point; if (count < 0) return (rl_backward_kill_word (-count, key)); else { orig_point = rl_point; rl_forward_word (count, key); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); rl_point = orig_point; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Rubout the word before point, placing it on the kill ring. */ int rl_backward_kill_word (count, ignore) int count, ignore; { int orig_point; if (count < 0) return (rl_kill_word (-count, ignore)); else { orig_point = rl_point; rl_backward_word (count, ignore); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Kill from here to the end of the line. If DIRECTION is negative, kill back to the line start instead. */ int rl_kill_line (direction, ignore) int direction, ignore; { int orig_point; if (direction < 0) return (rl_backward_kill_line (1, ignore)); else { orig_point = rl_point; rl_end_of_line (1, ignore); if (orig_point != rl_point) rl_kill_text (orig_point, rl_point); rl_point = orig_point; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Kill backwards to the start of the line. If DIRECTION is negative, kill forwards to the line end instead. */ int rl_backward_kill_line (direction, ignore) int direction, ignore; { int orig_point; if (direction < 0) return (rl_kill_line (1, ignore)); else { if (rl_point == 0) rl_ding (); else { orig_point = rl_point; rl_beg_of_line (1, ignore); if (rl_point != orig_point) rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } } return 0; } /* Kill the whole line, no matter where point is. */ int rl_kill_full_line (count, ignore) int count, ignore; { rl_begin_undo_group (); rl_point = 0; rl_kill_text (rl_point, rl_end); rl_mark = 0; rl_end_undo_group (); return 0; } /* The next two functions mimic unix line editing behaviour, except they save the deleted text on the kill ring. This is safer than not saving it, and since we have a ring, nobody should get screwed. */ /* This does what C-w does in Unix. We can't prevent people from using behaviour that they expect. */ int rl_unix_word_rubout (count, key) int count, key; { int orig_point; if (rl_point == 0) rl_ding (); else { orig_point = rl_point; if (count <= 0) count = 1; while (count--) { while (rl_point && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; while (rl_point && (whitespace (rl_line_buffer[rl_point - 1]) == 0)) rl_point--; } rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* This deletes one filename component in a Unix pathname. That is, it deletes backward to directory separator (`/') or whitespace. */ int rl_unix_filename_rubout (count, key) int count, key; { int orig_point, c; if (rl_point == 0) rl_ding (); else { orig_point = rl_point; if (count <= 0) count = 1; while (count--) { c = rl_line_buffer[rl_point - 1]; while (rl_point && (whitespace (c) || c == '/')) { rl_point--; c = rl_line_buffer[rl_point - 1]; } while (rl_point && (whitespace (c) == 0) && c != '/') { rl_point--; c = rl_line_buffer[rl_point - 1]; } } rl_kill_text (orig_point, rl_point); if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Here is C-u doing what Unix does. You don't *have* to use these key-bindings. We have a choice of killing the entire line, or killing from where we are to the start of the line. We choose the latter, because if you are a Unix weenie, then you haven't backspaced into the line at all, and if you aren't, then you know what you are doing. */ int rl_unix_line_discard (count, key) int count, key; { if (rl_point == 0) rl_ding (); else { rl_kill_text (rl_point, 0); rl_point = 0; if (rl_editing_mode == emacs_mode) rl_mark = rl_point; } return 0; } /* Copy the text in the `region' to the kill ring. If DELETE is non-zero, delete the text from the line as well. */ static int region_kill_internal (delete) int delete; { char *text; if (rl_mark != rl_point) { text = rl_copy_text (rl_point, rl_mark); if (delete) rl_delete_text (rl_point, rl_mark); _rl_copy_to_kill_ring (text, rl_point < rl_mark); } _rl_last_command_was_kill++; return 0; } /* Copy the text in the region to the kill ring. */ int rl_copy_region_to_kill (count, ignore) int count, ignore; { return (region_kill_internal (0)); } /* Kill the text between the point and mark. */ int rl_kill_region (count, ignore) int count, ignore; { int r, npoint; npoint = (rl_point < rl_mark) ? rl_point : rl_mark; r = region_kill_internal (1); _rl_fix_point (1); rl_point = npoint; return r; } /* Copy COUNT words to the kill ring. DIR says which direction we look to find the words. */ static int _rl_copy_word_as_kill (count, dir) int count, dir; { int om, op, r; om = rl_mark; op = rl_point; if (dir > 0) rl_forward_word (count, 0); else rl_backward_word (count, 0); rl_mark = rl_point; if (dir > 0) rl_backward_word (count, 0); else rl_forward_word (count, 0); r = region_kill_internal (0); rl_mark = om; rl_point = op; return r; } int rl_copy_forward_word (count, key) int count, key; { if (count < 0) return (rl_copy_backward_word (-count, key)); return (_rl_copy_word_as_kill (count, 1)); } int rl_copy_backward_word (count, key) int count, key; { if (count < 0) return (rl_copy_forward_word (-count, key)); return (_rl_copy_word_as_kill (count, -1)); } /* Yank back the last killed text. This ignores arguments. */ int rl_yank (count, ignore) int count, ignore; { if (rl_kill_ring == 0) { _rl_abort_internal (); return 1; } _rl_set_mark_at_pos (rl_point); rl_insert_text (rl_kill_ring[rl_kill_index]); return 0; } /* If the last command was yank, or yank_pop, and the text just before point is identical to the current kill item, then delete that text from the line, rotate the index down, and yank back some other text. */ int rl_yank_pop (count, key) int count, key; { int l, n; if (((rl_last_func != rl_yank_pop) && (rl_last_func != rl_yank)) || !rl_kill_ring) { _rl_abort_internal (); return 1; } l = strlen (rl_kill_ring[rl_kill_index]); n = rl_point - l; if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l)) { rl_delete_text (n, rl_point); rl_point = n; rl_kill_index--; if (rl_kill_index < 0) rl_kill_index = rl_kill_ring_length - 1; rl_yank (1, 0); return 0; } else { _rl_abort_internal (); return 1; } } #if defined (VI_MODE) int rl_vi_yank_pop (count, key) int count, key; { int l, n; if (((rl_last_func != rl_vi_yank_pop) && (rl_last_func != rl_vi_put)) || !rl_kill_ring) { _rl_abort_internal (); return 1; } l = strlen (rl_kill_ring[rl_kill_index]); n = rl_point - l; if (n >= 0 && STREQN (rl_line_buffer + n, rl_kill_ring[rl_kill_index], l)) { rl_delete_text (n, rl_point); rl_point = n; rl_kill_index--; if (rl_kill_index < 0) rl_kill_index = rl_kill_ring_length - 1; rl_vi_put (1, 'p'); return 0; } else { _rl_abort_internal (); return 1; } } #endif /* VI_MODE */ /* Yank the COUNTh argument from the previous history line, skipping HISTORY_SKIP lines before looking for the `previous line'. */ static int rl_yank_nth_arg_internal (count, ignore, history_skip) int count, ignore, history_skip; { register HIST_ENTRY *entry; char *arg; int i, pos; pos = where_history (); if (history_skip) { for (i = 0; i < history_skip; i++) entry = previous_history (); } entry = previous_history (); history_set_pos (pos); if (entry == 0) { rl_ding (); return 1; } arg = history_arg_extract (count, count, entry->line); if (!arg || !*arg) { rl_ding (); FREE (arg); return 1; } rl_begin_undo_group (); _rl_set_mark_at_pos (rl_point); #if defined (VI_MODE) /* Vi mode always inserts a space before yanking the argument, and it inserts it right *after* rl_point. */ if (rl_editing_mode == vi_mode) { rl_vi_append_mode (1, ignore); rl_insert_text (" "); } #endif /* VI_MODE */ rl_insert_text (arg); xfree (arg); rl_end_undo_group (); return 0; } /* Yank the COUNTth argument from the previous history line. */ int rl_yank_nth_arg (count, ignore) int count, ignore; { return (rl_yank_nth_arg_internal (count, ignore, 0)); } /* Yank the last argument from the previous history line. This `knows' how rl_yank_nth_arg treats a count of `$'. With an argument, this behaves the same as rl_yank_nth_arg. */ int rl_yank_last_arg (count, key) int count, key; { static int history_skip = 0; static int explicit_arg_p = 0; static int count_passed = 1; static int direction = 1; static int undo_needed = 0; int retval; if (rl_last_func != rl_yank_last_arg) { history_skip = 0; explicit_arg_p = rl_explicit_arg; count_passed = count; direction = 1; } else { if (undo_needed) rl_do_undo (); if (count < 0) /* XXX - was < 1 */ direction = -direction; history_skip += direction; if (history_skip < 0) history_skip = 0; } if (explicit_arg_p) retval = rl_yank_nth_arg_internal (count_passed, key, history_skip); else retval = rl_yank_nth_arg_internal ('$', key, history_skip); undo_needed = retval == 0; return retval; } /* Having read the special escape sequence denoting the beginning of a `bracketed paste' sequence, read the rest of the pasted input until the closing sequence and insert the pasted text as a single unit without interpretation. */ int rl_bracketed_paste_begin (count, key) int count, key; { int retval, c; size_t len, cap; char *buf; retval = 1; len = 0; buf = xmalloc (cap = 64); RL_SETSTATE (RL_STATE_MOREINPUT); while ((c = rl_read_key ()) >= 0) { if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (c); if (c == '\r') /* XXX */ c = '\n'; if (len == cap) buf = xrealloc (buf, cap *= 2); buf[len++] = c; if (len >= BRACK_PASTE_SLEN && c == BRACK_PASTE_LAST && STREQN (buf + len - BRACK_PASTE_SLEN, BRACK_PASTE_SUFF, BRACK_PASTE_SLEN)) { len -= BRACK_PASTE_SLEN; break; } } RL_UNSETSTATE (RL_STATE_MOREINPUT); if (c >= 0) { if (len == cap) buf = xrealloc (buf, cap + 1); buf[len] = '\0'; retval = rl_insert_text (buf); } xfree (buf); return (retval); } /* A special paste command for Windows users.. */ #if defined (_WIN32) #include int rl_paste_from_clipboard (count, key) int count, key; { char *data, *ptr; int len; if (OpenClipboard (NULL) == 0) return (0); data = (char *)GetClipboardData (CF_TEXT); if (data) { ptr = strchr (data, '\r'); if (ptr) { len = ptr - data; ptr = (char *)xmalloc (len + 1); ptr[len] = '\0'; strncpy (ptr, data, len); } else ptr = data; _rl_set_mark_at_pos (rl_point); rl_insert_text (ptr); if (ptr != data) xfree (ptr); CloseClipboard (); } return (0); } #endif /* _WIN32 */ readline-7.0/macro.c000664 000436 000024 00000016470 12315365467 014517 0ustar00chetstaff000000 000000 /* macro.c -- keyboard macros for readline. */ /* Copyright (C) 1994-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" /* **************************************************************** */ /* */ /* Hacking Keyboard Macros */ /* */ /* **************************************************************** */ /* The currently executing macro string. If this is non-zero, then it is a malloc ()'ed string where input is coming from. */ char *rl_executing_macro = (char *)NULL; /* The offset in the above string to the next character to be read. */ static int executing_macro_index; /* The current macro string being built. Characters get stuffed in here by add_macro_char (). */ static char *current_macro = (char *)NULL; /* The size of the buffer allocated to current_macro. */ static int current_macro_size; /* The index at which characters are being added to current_macro. */ static int current_macro_index; /* A structure used to save nested macro strings. It is a linked list of string/index for each saved macro. */ struct saved_macro { struct saved_macro *next; char *string; int sindex; }; /* The list of saved macros. */ static struct saved_macro *macro_list = (struct saved_macro *)NULL; /* Set up to read subsequent input from STRING. STRING is free ()'ed when we are done with it. */ void _rl_with_macro_input (string) char *string; { _rl_push_executing_macro (); rl_executing_macro = string; executing_macro_index = 0; RL_SETSTATE(RL_STATE_MACROINPUT); } /* Return the next character available from a macro, or 0 if there are no macro characters. */ int _rl_next_macro_key () { int c; if (rl_executing_macro == 0) return (0); if (rl_executing_macro[executing_macro_index] == 0) { _rl_pop_executing_macro (); return (_rl_next_macro_key ()); } #if defined (READLINE_CALLBACKS) c = rl_executing_macro[executing_macro_index++]; if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_READCMD|RL_STATE_MOREINPUT) && rl_executing_macro[executing_macro_index] == 0) _rl_pop_executing_macro (); return c; #else return (rl_executing_macro[executing_macro_index++]); #endif } int _rl_prev_macro_key () { if (rl_executing_macro == 0) return (0); if (executing_macro_index == 0) return (0); executing_macro_index--; return (rl_executing_macro[executing_macro_index]); } /* Save the currently executing macro on a stack of saved macros. */ void _rl_push_executing_macro () { struct saved_macro *saver; saver = (struct saved_macro *)xmalloc (sizeof (struct saved_macro)); saver->next = macro_list; saver->sindex = executing_macro_index; saver->string = rl_executing_macro; macro_list = saver; } /* Discard the current macro, replacing it with the one on the top of the stack of saved macros. */ void _rl_pop_executing_macro () { struct saved_macro *macro; FREE (rl_executing_macro); rl_executing_macro = (char *)NULL; executing_macro_index = 0; if (macro_list) { macro = macro_list; rl_executing_macro = macro_list->string; executing_macro_index = macro_list->sindex; macro_list = macro_list->next; xfree (macro); } if (rl_executing_macro == 0) RL_UNSETSTATE(RL_STATE_MACROINPUT); } /* Add a character to the macro being built. */ void _rl_add_macro_char (c) int c; { if (current_macro_index + 1 >= current_macro_size) { if (current_macro == 0) current_macro = (char *)xmalloc (current_macro_size = 25); else current_macro = (char *)xrealloc (current_macro, current_macro_size += 25); } current_macro[current_macro_index++] = c; current_macro[current_macro_index] = '\0'; } void _rl_kill_kbd_macro () { if (current_macro) { xfree (current_macro); current_macro = (char *) NULL; } current_macro_size = current_macro_index = 0; FREE (rl_executing_macro); rl_executing_macro = (char *) NULL; executing_macro_index = 0; RL_UNSETSTATE(RL_STATE_MACRODEF); } /* Begin defining a keyboard macro. Keystrokes are recorded as they are executed. End the definition with rl_end_kbd_macro (). If a numeric argument was explicitly typed, then append this definition to the end of the existing macro, and start by re-executing the existing macro. */ int rl_start_kbd_macro (ignore1, ignore2) int ignore1, ignore2; { if (RL_ISSTATE (RL_STATE_MACRODEF)) { _rl_abort_internal (); return 1; } if (rl_explicit_arg) { if (current_macro) _rl_with_macro_input (savestring (current_macro)); } else current_macro_index = 0; RL_SETSTATE(RL_STATE_MACRODEF); return 0; } /* Stop defining a keyboard macro. A numeric argument says to execute the macro right now, that many times, counting the definition as the first time. */ int rl_end_kbd_macro (count, ignore) int count, ignore; { if (RL_ISSTATE (RL_STATE_MACRODEF) == 0) { _rl_abort_internal (); return 1; } current_macro_index -= rl_key_sequence_length; current_macro[current_macro_index] = '\0'; RL_UNSETSTATE(RL_STATE_MACRODEF); return (rl_call_last_kbd_macro (--count, 0)); } /* Execute the most recently defined keyboard macro. COUNT says how many times to execute it. */ int rl_call_last_kbd_macro (count, ignore) int count, ignore; { if (current_macro == 0) _rl_abort_internal (); if (RL_ISSTATE (RL_STATE_MACRODEF)) { rl_ding (); /* no recursive macros */ current_macro[--current_macro_index] = '\0'; /* erase this char */ return 0; } while (count--) _rl_with_macro_input (savestring (current_macro)); return 0; } int rl_print_last_kbd_macro (count, ignore) int count, ignore; { char *m; if (current_macro == 0) { rl_ding (); return 0; } m = _rl_untranslate_macro_value (current_macro, 1); rl_crlf (); printf ("%s", m); fflush (stdout); rl_crlf (); FREE (m); rl_forced_update_display (); rl_display_fixed = 1; return 0; } void rl_push_macro_input (macro) char *macro; { _rl_with_macro_input (macro); } readline-7.0/mbutil.c000644 000436 000024 00000021472 12651440615 014676 0ustar00chetstaff000000 000000 /* mbutil.c -- readline multibyte character utility functions */ /* Copyright (C) 2001-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixjmp.h" #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (TIOCSTAT_IN_SYS_IOCTL) # include #endif /* TIOCSTAT_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" /* Declared here so it can be shared between the readline and history libraries. */ #if defined (HANDLE_MULTIBYTE) int rl_byte_oriented = 0; #else int rl_byte_oriented = 1; #endif /* Ditto */ int _rl_utf8locale = 0; /* **************************************************************** */ /* */ /* Multibyte Character Utility Functions */ /* */ /* **************************************************************** */ #if defined(HANDLE_MULTIBYTE) static int _rl_find_next_mbchar_internal (string, seed, count, find_non_zero) char *string; int seed, count, find_non_zero; { size_t tmp, len; mbstate_t ps; int point; wchar_t wc; tmp = 0; memset(&ps, 0, sizeof (mbstate_t)); if (seed < 0) seed = 0; if (count <= 0) return seed; point = seed + _rl_adjust_point (string, seed, &ps); /* if this is true, means that seed was not pointing to a byte indicating the beginning of a multibyte character. Correct the point and consume one char. */ if (seed < point) count--; while (count > 0) { len = strlen (string + point); if (len == 0) break; tmp = mbrtowc (&wc, string+point, len, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* invalid bytes. assume a byte represents a character */ point++; count--; /* reset states. */ memset(&ps, 0, sizeof(mbstate_t)); } else if (MB_NULLWCH (tmp)) break; /* found wide '\0' */ else { /* valid bytes */ point += tmp; if (find_non_zero) { if (WCWIDTH (wc) == 0) continue; else count--; } else count--; } } if (find_non_zero) { tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); while (MB_NULLWCH (tmp) == 0 && MB_INVALIDCH (tmp) == 0 && WCWIDTH (wc) == 0) { point += tmp; tmp = mbrtowc (&wc, string + point, strlen (string + point), &ps); } } return point; } /*static*/ int _rl_find_prev_mbchar_internal (string, seed, find_non_zero) char *string; int seed, find_non_zero; { mbstate_t ps; int prev, non_zero_prev, point, length; size_t tmp; wchar_t wc; memset(&ps, 0, sizeof(mbstate_t)); length = strlen(string); if (seed < 0) return 0; else if (length < seed) return length; prev = non_zero_prev = point = 0; while (point < seed) { tmp = mbrtowc (&wc, string + point, length - point, &ps); if (MB_INVALIDCH ((size_t)tmp)) { /* in this case, bytes are invalid or shorted to compose multibyte char, so assume that the first byte represents a single character anyway. */ tmp = 1; /* clear the state of the byte sequence, because in this case effect of mbstate is undefined */ memset(&ps, 0, sizeof (mbstate_t)); /* Since we're assuming that this byte represents a single non-zero-width character, don't forget about it. */ prev = point; } else if (MB_NULLWCH (tmp)) break; /* Found '\0' char. Can this happen? */ else { if (find_non_zero) { if (WCWIDTH (wc) != 0) prev = point; } else prev = point; } point += tmp; } return prev; } /* return the number of bytes parsed from the multibyte sequence starting at src, if a non-L'\0' wide character was recognized. It returns 0, if a L'\0' wide character was recognized. It returns (size_t)(-1), if an invalid multibyte sequence was encountered. It returns (size_t)(-2) if it couldn't parse a complete multibyte character. */ int _rl_get_char_len (src, ps) char *src; mbstate_t *ps; { size_t tmp; tmp = mbrlen((const char *)src, (size_t)strlen (src), ps); if (tmp == (size_t)(-2)) { /* shorted to compose multibyte char */ if (ps) memset (ps, 0, sizeof(mbstate_t)); return -2; } else if (tmp == (size_t)(-1)) { /* invalid to compose multibyte char */ /* initialize the conversion state */ if (ps) memset (ps, 0, sizeof(mbstate_t)); return -1; } else if (tmp == (size_t)0) return 0; else return (int)tmp; } /* compare the specified two characters. If the characters matched, return 1. Otherwise return 0. */ int _rl_compare_chars (buf1, pos1, ps1, buf2, pos2, ps2) char *buf1; int pos1; mbstate_t *ps1; char *buf2; int pos2; mbstate_t *ps2; { int i, w1, w2; if ((w1 = _rl_get_char_len (&buf1[pos1], ps1)) <= 0 || (w2 = _rl_get_char_len (&buf2[pos2], ps2)) <= 0 || (w1 != w2) || (buf1[pos1] != buf2[pos2])) return 0; for (i = 1; i < w1; i++) if (buf1[pos1+i] != buf2[pos2+i]) return 0; return 1; } /* adjust pointed byte and find mbstate of the point of string. adjusted point will be point <= adjusted_point, and returns differences of the byte(adjusted_point - point). if point is invalied (point < 0 || more than string length), it returns -1 */ int _rl_adjust_point (string, point, ps) char *string; int point; mbstate_t *ps; { size_t tmp = 0; int length; int pos = 0; length = strlen(string); if (point < 0) return -1; if (length < point) return -1; while (pos < point) { tmp = mbrlen (string + pos, length - pos, ps); if (MB_INVALIDCH ((size_t)tmp)) { /* in this case, bytes are invalid or shorted to compose multibyte char, so assume that the first byte represents a single character anyway. */ pos++; /* clear the state of the byte sequence, because in this case effect of mbstate is undefined */ if (ps) memset (ps, 0, sizeof (mbstate_t)); } else if (MB_NULLWCH (tmp)) pos++; else pos += tmp; } return (pos - point); } int _rl_is_mbchar_matched (string, seed, end, mbchar, length) char *string; int seed, end; char *mbchar; int length; { int i; if ((end - seed) < length) return 0; for (i = 0; i < length; i++) if (string[seed + i] != mbchar[i]) return 0; return 1; } wchar_t _rl_char_value (buf, ind) char *buf; int ind; { size_t tmp; wchar_t wc; mbstate_t ps; int l; if (MB_LEN_MAX == 1 || rl_byte_oriented) return ((wchar_t) buf[ind]); l = strlen (buf); if (ind >= l - 1) return ((wchar_t) buf[ind]); memset (&ps, 0, sizeof (mbstate_t)); tmp = mbrtowc (&wc, buf + ind, l - ind, &ps); if (MB_INVALIDCH (tmp) || MB_NULLWCH (tmp)) return ((wchar_t) buf[ind]); return wc; } #endif /* HANDLE_MULTIBYTE */ /* Find next `count' characters started byte point of the specified seed. If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte characters. */ #undef _rl_find_next_mbchar int _rl_find_next_mbchar (string, seed, count, flags) char *string; int seed, count, flags; { #if defined (HANDLE_MULTIBYTE) return _rl_find_next_mbchar_internal (string, seed, count, flags); #else return (seed + count); #endif } /* Find previous character started byte point of the specified seed. Returned point will be point <= seed. If flags is MB_FIND_NONZERO, we look for non-zero-width multibyte characters. */ #undef _rl_find_prev_mbchar int _rl_find_prev_mbchar (string, seed, flags) char *string; int seed, flags; { #if defined (HANDLE_MULTIBYTE) return _rl_find_prev_mbchar_internal (string, seed, flags); #else return ((seed == 0) ? seed : seed - 1); #endif } readline-7.0/misc.c000644 000436 000024 00000040537 12706436511 014341 0ustar00chetstaff000000 000000 /* misc.c -- miscellaneous bindable readline functions. */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" static int rl_digit_loop PARAMS((void)); static void _rl_history_set_point PARAMS((void)); /* Forward declarations used in this file */ void _rl_free_history_entry PARAMS((HIST_ENTRY *)); /* If non-zero, rl_get_previous_history and rl_get_next_history attempt to preserve the value of rl_point from line to line. */ int _rl_history_preserve_point = 0; _rl_arg_cxt _rl_argcxt; /* Saved target point for when _rl_history_preserve_point is set. Special value of -1 means that point is at the end of the line. */ int _rl_history_saved_point = -1; /* **************************************************************** */ /* */ /* Numeric Arguments */ /* */ /* **************************************************************** */ int _rl_arg_overflow () { if (rl_numeric_arg > 1000000) { _rl_argcxt = 0; rl_explicit_arg = rl_numeric_arg = 0; rl_ding (); rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); return 1; } return 0; } void _rl_arg_init () { rl_save_prompt (); _rl_argcxt = 0; RL_SETSTATE(RL_STATE_NUMERICARG); } int _rl_arg_getchar () { int c; rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); return c; } /* Process C as part of the current numeric argument. Return -1 if the argument should be aborted, 0 if we should not read any more chars, and 1 if we should continue to read chars. */ int _rl_arg_dispatch (cxt, c) _rl_arg_cxt cxt; int c; { int key, r; key = c; /* If we see a key bound to `universal-argument' after seeing digits, it ends the argument but is otherwise ignored. */ if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) { if ((cxt & NUM_SAWDIGITS) == 0) { rl_numeric_arg *= 4; return 1; } else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_argcxt |= NUM_READONE; return 0; /* XXX */ } else { RL_SETSTATE(RL_STATE_MOREINPUT); key = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); if (key < 0) return -1; return (_rl_dispatch (key, _rl_keymap)); } } c = UNMETA (c); if (_rl_digit_p (c)) { r = _rl_digit_value (c); rl_numeric_arg = rl_explicit_arg ? (rl_numeric_arg * 10) + r : r; rl_explicit_arg = 1; _rl_argcxt |= NUM_SAWDIGITS; } else if (c == '-' && rl_explicit_arg == 0) { rl_numeric_arg = 1; _rl_argcxt |= NUM_SAWMINUS; rl_arg_sign = -1; } else { /* Make M-- command equivalent to M--1 command. */ if ((_rl_argcxt & NUM_SAWMINUS) && rl_numeric_arg == 1 && rl_explicit_arg == 0) rl_explicit_arg = 1; rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); r = _rl_dispatch (key, _rl_keymap); if (RL_ISSTATE (RL_STATE_CALLBACK)) { /* At worst, this will cause an extra redisplay. Otherwise, we have to wait until the next character comes in. */ if (rl_done == 0) (*rl_redisplay_function) (); r = 0; } return r; } return 1; } /* Handle C-u style numeric args, as well as M--, and M-digits. */ static int rl_digit_loop () { int c, r; while (1) { if (_rl_arg_overflow ()) return 1; c = _rl_arg_getchar (); if (c < 0) { _rl_abort_internal (); return -1; } r = _rl_arg_dispatch (_rl_argcxt, c); if (r <= 0 || (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) break; } return r; } /* Create a default argument. */ void _rl_reset_argument () { rl_numeric_arg = rl_arg_sign = 1; rl_explicit_arg = 0; _rl_argcxt = 0; } /* Start a numeric argument with initial value KEY */ int rl_digit_argument (ignore, key) int ignore, key; { _rl_arg_init (); if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_arg_dispatch (_rl_argcxt, key); rl_message ("(arg: %d) ", rl_arg_sign * rl_numeric_arg); return 0; } else { rl_execute_next (key); return (rl_digit_loop ()); } } /* C-u, universal argument. Multiply the current argument by 4. Read a key. If the key has nothing to do with arguments, then dispatch on it. If the key is the abort character then abort. */ int rl_universal_argument (count, key) int count, key; { _rl_arg_init (); rl_numeric_arg *= 4; return (RL_ISSTATE (RL_STATE_CALLBACK) ? 0 : rl_digit_loop ()); } int _rl_arg_callback (cxt) _rl_arg_cxt cxt; { int c, r; c = _rl_arg_getchar (); if (c < 0) return (1); /* EOF */ if (_rl_argcxt & NUM_READONE) { _rl_argcxt &= ~NUM_READONE; rl_restore_prompt (); rl_clear_message (); RL_UNSETSTATE(RL_STATE_NUMERICARG); rl_execute_next (c); return 0; } r = _rl_arg_dispatch (cxt, c); return (r != 1); } /* What to do when you abort reading an argument. */ int rl_discard_argument () { rl_ding (); rl_clear_message (); _rl_reset_argument (); return 0; } /* **************************************************************** */ /* */ /* History Utilities */ /* */ /* **************************************************************** */ /* We already have a history library, and that is what we use to control the history features of readline. This is our local interface to the history mechanism. */ /* While we are editing the history, this is the saved version of the original line. */ HIST_ENTRY *_rl_saved_line_for_history = (HIST_ENTRY *)NULL; /* Set the history pointer back to the last entry in the history. */ void _rl_start_using_history () { using_history (); if (_rl_saved_line_for_history) _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } /* Free the contents (and containing structure) of a HIST_ENTRY. */ void _rl_free_history_entry (entry) HIST_ENTRY *entry; { if (entry == 0) return; FREE (entry->line); FREE (entry->timestamp); xfree (entry); } /* Perhaps put back the current line if it has changed. */ int rl_maybe_replace_line () { HIST_ENTRY *temp; temp = current_history (); /* If the current line has changed, save the changes. */ if (temp && ((UNDO_LIST *)(temp->data) != rl_undo_list)) { temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list); xfree (temp->line); FREE (temp->timestamp); xfree (temp); } return 0; } /* Restore the _rl_saved_line_for_history if there is one. */ int rl_maybe_unsave_line () { if (_rl_saved_line_for_history) { /* Can't call with `1' because rl_undo_list might point to an undo list from a history entry, as in rl_replace_from_history() below. */ rl_replace_line (_rl_saved_line_for_history->line, 0); rl_undo_list = (UNDO_LIST *)_rl_saved_line_for_history->data; _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; rl_point = rl_end; /* rl_replace_line sets rl_end */ } else rl_ding (); return 0; } /* Save the current line in _rl_saved_line_for_history. */ int rl_maybe_save_line () { if (_rl_saved_line_for_history == 0) { _rl_saved_line_for_history = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); _rl_saved_line_for_history->line = savestring (rl_line_buffer); _rl_saved_line_for_history->timestamp = (char *)NULL; _rl_saved_line_for_history->data = (char *)rl_undo_list; } return 0; } int _rl_free_saved_history_line () { if (_rl_saved_line_for_history) { _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } return 0; } static void _rl_history_set_point () { rl_point = (_rl_history_preserve_point && _rl_history_saved_point != -1) ? _rl_history_saved_point : rl_end; if (rl_point > rl_end) rl_point = rl_end; #if defined (VI_MODE) if (rl_editing_mode == vi_mode && _rl_keymap != vi_insertion_keymap) rl_point = 0; #endif /* VI_MODE */ if (rl_editing_mode == emacs_mode) rl_mark = (rl_point == rl_end ? 0 : rl_end); } void rl_replace_from_history (entry, flags) HIST_ENTRY *entry; int flags; /* currently unused */ { /* Can't call with `1' because rl_undo_list might point to an undo list from a history entry, just like we're setting up here. */ rl_replace_line (entry->line, 0); rl_undo_list = (UNDO_LIST *)entry->data; rl_point = rl_end; rl_mark = 0; #if defined (VI_MODE) if (rl_editing_mode == vi_mode) { rl_point = 0; rl_mark = rl_end; } #endif } /* Process and free undo lists attached to each history entry prior to the current entry, inclusive, reverting each line to its saved state. This is destructive, and state about the current line is lost. This is not intended to be called while actively editing, and the current line is not assumed to have been added to the history list. */ void _rl_revert_all_lines () { int hpos; HIST_ENTRY *entry; UNDO_LIST *ul, *saved_undo_list; char *lbuf; lbuf = savestring (rl_line_buffer); saved_undo_list = rl_undo_list; hpos = where_history (); entry = (hpos == history_length) ? previous_history () : current_history (); while (entry) { if (ul = (UNDO_LIST *)entry->data) { if (ul == saved_undo_list) saved_undo_list = 0; /* Set up rl_line_buffer and other variables from history entry */ rl_replace_from_history (entry, 0); /* entry->line is now current */ entry->data = 0; /* entry->data is now current undo list */ /* Undo all changes to this history entry */ while (rl_undo_list) rl_do_undo (); /* And copy the reverted line back to the history entry, preserving the timestamp. */ FREE (entry->line); entry->line = savestring (rl_line_buffer); } entry = previous_history (); } /* Restore history state */ rl_undo_list = saved_undo_list; /* may have been set to null */ history_set_pos (hpos); /* reset the line buffer */ rl_replace_line (lbuf, 0); _rl_set_the_line (); /* and clean up */ xfree (lbuf); } /* Free the history list, including private readline data and take care of pointer aliases to history data. Resets rl_undo_list if it points to an UNDO_LIST * saved as some history entry's data member. This should not be called while editing is active. */ void rl_clear_history () { HIST_ENTRY **hlist, *hent; register int i; UNDO_LIST *ul, *saved_undo_list; saved_undo_list = rl_undo_list; hlist = history_list (); /* direct pointer, not copy */ for (i = 0; i < history_length; i++) { hent = hlist[i]; if (ul = (UNDO_LIST *)hent->data) { if (ul == saved_undo_list) saved_undo_list = 0; _rl_free_undo_list (ul); hent->data = 0; } _rl_free_history_entry (hent); } history_offset = history_length = 0; rl_undo_list = saved_undo_list; /* should be NULL */ } /* **************************************************************** */ /* */ /* History Commands */ /* */ /* **************************************************************** */ /* Meta-< goes to the start of the history. */ int rl_beginning_of_history (count, key) int count, key; { return (rl_get_previous_history (1 + where_history (), key)); } /* Meta-> goes to the end of the history. (The current line). */ int rl_end_of_history (count, key) int count, key; { rl_maybe_replace_line (); using_history (); rl_maybe_unsave_line (); return 0; } /* Move down to the next history line. */ int rl_get_next_history (count, key) int count, key; { HIST_ENTRY *temp; if (count < 0) return (rl_get_previous_history (-count, key)); if (count == 0) return 0; rl_maybe_replace_line (); /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; temp = (HIST_ENTRY *)NULL; while (count) { temp = next_history (); if (!temp) break; --count; } if (temp == 0) rl_maybe_unsave_line (); else { rl_replace_from_history (temp, 0); _rl_history_set_point (); } return 0; } /* Get the previous item out of our interactive history, making it the current line. If there is no previous history, just ding. */ int rl_get_previous_history (count, key) int count, key; { HIST_ENTRY *old_temp, *temp; if (count < 0) return (rl_get_next_history (-count, key)); if (count == 0) return 0; /* either not saved by rl_newline or at end of line, so set appropriately. */ if (_rl_history_saved_point == -1 && (rl_point || rl_end)) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; /* If we don't have a line saved, then save this one. */ rl_maybe_save_line (); /* If the current line has changed, save the changes. */ rl_maybe_replace_line (); temp = old_temp = (HIST_ENTRY *)NULL; while (count) { temp = previous_history (); if (temp == 0) break; old_temp = temp; --count; } /* If there was a large argument, and we moved back to the start of the history, that is not an error. So use the last value found. */ if (!temp && old_temp) temp = old_temp; if (temp == 0) rl_ding (); else { rl_replace_from_history (temp, 0); _rl_history_set_point (); } return 0; } /* **************************************************************** */ /* */ /* Editing Modes */ /* */ /* **************************************************************** */ /* How to toggle back and forth between editing modes. */ int rl_vi_editing_mode (count, key) int count, key; { #if defined (VI_MODE) _rl_set_insert_mode (RL_IM_INSERT, 1); /* vi mode ignores insert mode */ rl_editing_mode = vi_mode; rl_vi_insert_mode (1, key); #endif /* VI_MODE */ return 0; } int rl_emacs_editing_mode (count, key) int count, key; { rl_editing_mode = emacs_mode; _rl_set_insert_mode (RL_IM_INSERT, 1); /* emacs mode default is insert mode */ _rl_keymap = emacs_standard_keymap; if (_rl_show_mode_in_prompt) _rl_reset_prompt (); return 0; } /* Function for the rest of the library to use to set insert/overwrite mode. */ void _rl_set_insert_mode (im, force) int im, force; { #ifdef CURSOR_MODE _rl_set_cursor (im, force); #endif rl_insert_mode = im; } /* Toggle overwrite mode. A positive explicit argument selects overwrite mode. A negative or zero explicit argument selects insert mode. */ int rl_overwrite_mode (count, key) int count, key; { if (rl_explicit_arg == 0) _rl_set_insert_mode (rl_insert_mode ^ 1, 0); else if (count > 0) _rl_set_insert_mode (RL_IM_OVERWRITE, 0); else _rl_set_insert_mode (RL_IM_INSERT, 0); return 0; } readline-7.0/nls.c000664 000436 000000 00000014745 12116711256 014176 0ustar00chetwheel000000 000000 /* nls.c -- skeletal internationalization code. */ /* Copyright (C) 1996-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #if defined (HAVE_LANGINFO_CODESET) # include #endif #include #include "rldefs.h" #include "readline.h" #include "rlshell.h" #include "rlprivate.h" static int utf8locale PARAMS((char *)); #if !defined (HAVE_SETLOCALE) /* A list of legal values for the LANG or LC_CTYPE environment variables. If a locale name in this list is the value for the LC_ALL, LC_CTYPE, or LANG environment variable (using the first of those with a value), readline eight-bit mode is enabled. */ static char *legal_lang_values[] = { "iso88591", "iso88592", "iso88593", "iso88594", "iso88595", "iso88596", "iso88597", "iso88598", "iso88599", "iso885910", "koi8r", 0 }; static char *normalize_codeset PARAMS((char *)); #endif /* !HAVE_SETLOCALE */ static char *find_codeset PARAMS((char *, size_t *)); static char *_rl_get_locale_var PARAMS((const char *)); static char * _rl_get_locale_var (v) const char *v; { char *lspec; lspec = sh_get_env_value ("LC_ALL"); if (lspec == 0 || *lspec == 0) lspec = sh_get_env_value (v); if (lspec == 0 || *lspec == 0) lspec = sh_get_env_value ("LANG"); return lspec; } static int utf8locale (lspec) char *lspec; { char *cp; size_t len; #if HAVE_LANGINFO_CODESET cp = nl_langinfo (CODESET); return (STREQ (cp, "UTF-8") || STREQ (cp, "utf8")); #else cp = find_codeset (lspec, &len); if (cp == 0 || len < 4 || len > 5) return 0; return ((len == 5) ? strncmp (cp, "UTF-8", len) == 0 : strncmp (cp, "utf8", 4) == 0); #endif } /* Check for LC_ALL, LC_CTYPE, and LANG and use the first with a value to decide the defaults for 8-bit character input and output. Returns 1 if we set eight-bit mode. */ int _rl_init_eightbit () { /* If we have setlocale(3), just check the current LC_CTYPE category value, and go into eight-bit mode if it's not C or POSIX. */ #if defined (HAVE_SETLOCALE) char *lspec, *t; /* Set the LC_CTYPE locale category from environment variables. */ lspec = _rl_get_locale_var ("LC_CTYPE"); /* Since _rl_get_locale_var queries the right environment variables, we query the current locale settings with setlocale(), and, if that doesn't return anything, we set lspec to the empty string to force the subsequent call to setlocale() to define the `native' environment. */ if (lspec == 0 || *lspec == 0) lspec = setlocale (LC_CTYPE, (char *)NULL); if (lspec == 0) lspec = ""; t = setlocale (LC_CTYPE, lspec); if (t && *t) _rl_utf8locale = utf8locale (t); if (t && *t && (t[0] != 'C' || t[1]) && (STREQ (t, "POSIX") == 0)) { _rl_meta_flag = 1; _rl_convert_meta_chars_to_ascii = 0; _rl_output_meta_chars = 1; return (1); } else return (0); #else /* !HAVE_SETLOCALE */ char *lspec, *t; int i; /* We don't have setlocale. Finesse it. Check the environment for the appropriate variables and set eight-bit mode if they have the right values. */ lspec = _rl_get_locale_var ("LC_CTYPE"); if (lspec == 0 || (t = normalize_codeset (lspec)) == 0) return (0); for (i = 0; t && legal_lang_values[i]; i++) if (STREQ (t, legal_lang_values[i])) { _rl_meta_flag = 1; _rl_convert_meta_chars_to_ascii = 0; _rl_output_meta_chars = 1; break; } xfree (t); return (legal_lang_values[i] ? 1 : 0); #endif /* !HAVE_SETLOCALE */ } #if !defined (HAVE_SETLOCALE) static char * normalize_codeset (codeset) char *codeset; { size_t namelen, i; int len, all_digits; char *wp, *retval; codeset = find_codeset (codeset, &namelen); if (codeset == 0) return (codeset); all_digits = 1; for (len = 0, i = 0; i < namelen; i++) { if (ISALNUM ((unsigned char)codeset[i])) { len++; all_digits &= _rl_digit_p (codeset[i]); } } retval = (char *)malloc ((all_digits ? 3 : 0) + len + 1); if (retval == 0) return ((char *)0); wp = retval; /* Add `iso' to beginning of an all-digit codeset */ if (all_digits) { *wp++ = 'i'; *wp++ = 's'; *wp++ = 'o'; } for (i = 0; i < namelen; i++) if (ISALPHA ((unsigned char)codeset[i])) *wp++ = _rl_to_lower (codeset[i]); else if (_rl_digit_p (codeset[i])) *wp++ = codeset[i]; *wp = '\0'; return retval; } #endif /* !HAVE_SETLOCALE */ /* Isolate codeset portion of locale specification. */ static char * find_codeset (name, lenp) char *name; size_t *lenp; { char *cp, *language, *result; cp = language = name; result = (char *)0; while (*cp && *cp != '_' && *cp != '@' && *cp != '+' && *cp != ',') cp++; /* This does not make sense: language has to be specified. As an exception we allow the variable to contain only the codeset name. Perhaps there are funny codeset names. */ if (language == cp) { *lenp = strlen (language); result = language; } else { /* Next is the territory. */ if (*cp == '_') do ++cp; while (*cp && *cp != '.' && *cp != '@' && *cp != '+' && *cp != ',' && *cp != '_'); /* Now, finally, is the codeset. */ result = cp; if (*cp == '.') do ++cp; while (*cp && *cp != '@'); if (cp - result > 2) { result++; *lenp = cp - result; } else { *lenp = strlen (language); result = language; } } return result; } readline-7.0/parens.c000664 000436 000024 00000011450 12651440636 014672 0ustar00chetstaff000000 000000 /* parens.c -- implementation of matching parentheses feature. */ /* Copyright (C) 1987, 1989, 1992-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #include "rlconf.h" #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #include "posixselect.h" #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if !defined (strchr) && !defined (__STDC__) extern char *strchr (), *strrchr (); #endif /* !strchr && !__STDC__ */ #include "readline.h" #include "rlprivate.h" static int find_matching_open PARAMS((char *, int, int)); /* Non-zero means try to blink the matching open parenthesis when the close parenthesis is inserted. */ int rl_blink_matching_paren = 0; static int _paren_blink_usec = 500000; /* Change emacs_standard_keymap to have bindings for paren matching when ON_OR_OFF is 1, change them back to self_insert when ON_OR_OFF == 0. */ void _rl_enable_paren_matching (on_or_off) int on_or_off; { if (on_or_off) { /* ([{ */ rl_bind_key_in_map (')', rl_insert_close, emacs_standard_keymap); rl_bind_key_in_map (']', rl_insert_close, emacs_standard_keymap); rl_bind_key_in_map ('}', rl_insert_close, emacs_standard_keymap); #if defined (VI_MODE) /* ([{ */ rl_bind_key_in_map (')', rl_insert_close, vi_insertion_keymap); rl_bind_key_in_map (']', rl_insert_close, vi_insertion_keymap); rl_bind_key_in_map ('}', rl_insert_close, vi_insertion_keymap); #endif } else { /* ([{ */ rl_bind_key_in_map (')', rl_insert, emacs_standard_keymap); rl_bind_key_in_map (']', rl_insert, emacs_standard_keymap); rl_bind_key_in_map ('}', rl_insert, emacs_standard_keymap); #if defined (VI_MODE) /* ([{ */ rl_bind_key_in_map (')', rl_insert, vi_insertion_keymap); rl_bind_key_in_map (']', rl_insert, vi_insertion_keymap); rl_bind_key_in_map ('}', rl_insert, vi_insertion_keymap); #endif } } int rl_set_paren_blink_timeout (u) int u; { int o; o = _paren_blink_usec; if (u > 0) _paren_blink_usec = u; return (o); } int rl_insert_close (count, invoking_key) int count, invoking_key; { if (rl_explicit_arg || !rl_blink_matching_paren) _rl_insert_char (count, invoking_key); else { #if defined (HAVE_SELECT) int orig_point, match_point, ready; struct timeval timer; fd_set readfds; _rl_insert_char (1, invoking_key); (*rl_redisplay_function) (); match_point = find_matching_open (rl_line_buffer, rl_point - 2, invoking_key); /* Emacs might message or ring the bell here, but I don't. */ if (match_point < 0) return 1; FD_ZERO (&readfds); FD_SET (fileno (rl_instream), &readfds); USEC_TO_TIMEVAL (_paren_blink_usec, timer); orig_point = rl_point; rl_point = match_point; (*rl_redisplay_function) (); ready = select (1, &readfds, (fd_set *)NULL, (fd_set *)NULL, &timer); rl_point = orig_point; #else /* !HAVE_SELECT */ _rl_insert_char (count, invoking_key); #endif /* !HAVE_SELECT */ } return 0; } static int find_matching_open (string, from, closer) char *string; int from, closer; { register int i; int opener, level, delimiter; switch (closer) { case ']': opener = '['; break; case '}': opener = '{'; break; case ')': opener = '('; break; default: return (-1); } level = 1; /* The closer passed in counts as 1. */ delimiter = 0; /* Delimited state unknown. */ for (i = from; i > -1; i--) { if (delimiter && (string[i] == delimiter)) delimiter = 0; else if (rl_basic_quote_characters && strchr (rl_basic_quote_characters, string[i])) delimiter = string[i]; else if (!delimiter && (string[i] == closer)) level++; else if (!delimiter && (string[i] == opener)) level--; if (!level) break; } return (i); } readline-7.0/parse-colors.c000644 000436 000120 00000031437 12252727344 016003 0ustar00chetadmin000000 000000 /* `dir', `vdir' and `ls' directory listing programs for GNU. Modified by Chet Ramey for Readline. Copyright (C) 1985, 1988, 1990-1991, 1995-2010, 2012 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 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, see . */ /* Written by Richard Stallman and David MacKenzie. */ /* Color support by Peter Anvin and Dennis Flaherty based on original patches by Greg Lee . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include // strdup() / strcpy() #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ // abort() #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "rldefs.h" // STREQ, savestring #include "readline.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #include "colors.h" #include "parse-colors.h" #if defined (COLOR_SUPPORT) static bool get_funky_string (char **dest, const char **src, bool equals_end, size_t *output_count); struct bin_str _rl_color_indicator[] = { { LEN_STR_PAIR ("\033[") }, // lc: Left of color sequence { LEN_STR_PAIR ("m") }, // rc: Right of color sequence { 0, NULL }, // ec: End color (replaces lc+no+rc) { LEN_STR_PAIR ("0") }, // rs: Reset to ordinary colors { 0, NULL }, // no: Normal { 0, NULL }, // fi: File: default { LEN_STR_PAIR ("01;34") }, // di: Directory: bright blue { LEN_STR_PAIR ("01;36") }, // ln: Symlink: bright cyan { LEN_STR_PAIR ("33") }, // pi: Pipe: yellow/brown { LEN_STR_PAIR ("01;35") }, // so: Socket: bright magenta { LEN_STR_PAIR ("01;33") }, // bd: Block device: bright yellow { LEN_STR_PAIR ("01;33") }, // cd: Char device: bright yellow { 0, NULL }, // mi: Missing file: undefined { 0, NULL }, // or: Orphaned symlink: undefined { LEN_STR_PAIR ("01;32") }, // ex: Executable: bright green { LEN_STR_PAIR ("01;35") }, // do: Door: bright magenta { LEN_STR_PAIR ("37;41") }, // su: setuid: white on red { LEN_STR_PAIR ("30;43") }, // sg: setgid: black on yellow { LEN_STR_PAIR ("37;44") }, // st: sticky: black on blue { LEN_STR_PAIR ("34;42") }, // ow: other-writable: blue on green { LEN_STR_PAIR ("30;42") }, // tw: ow w/ sticky: black on green { LEN_STR_PAIR ("30;41") }, // ca: black on red { 0, NULL }, // mh: disabled by default { LEN_STR_PAIR ("\033[K") }, // cl: clear to end of line }; /* Parse a string as part of the LS_COLORS variable; this may involve decoding all kinds of escape characters. If equals_end is set an unescaped equal sign ends the string, otherwise only a : or \0 does. Set *OUTPUT_COUNT to the number of bytes output. Return true if successful. The resulting string is *not* null-terminated, but may contain embedded nulls. Note that both dest and src are char **; on return they point to the first free byte after the array and the character that ended the input string, respectively. */ static bool get_funky_string (char **dest, const char **src, bool equals_end, size_t *output_count) { char num; /* For numerical codes */ size_t count; /* Something to count with */ enum { ST_GND, ST_BACKSLASH, ST_OCTAL, ST_HEX, ST_CARET, ST_END, ST_ERROR } state; const char *p; char *q; p = *src; /* We don't want to double-indirect */ q = *dest; /* the whole darn time. */ count = 0; /* No characters counted in yet. */ num = 0; state = ST_GND; /* Start in ground state. */ while (state < ST_END) { switch (state) { case ST_GND: /* Ground state (no escapes) */ switch (*p) { case ':': case '\0': state = ST_END; /* End of string */ break; case '\\': state = ST_BACKSLASH; /* Backslash scape sequence */ ++p; break; case '^': state = ST_CARET; /* Caret escape */ ++p; break; case '=': if (equals_end) { state = ST_END; /* End */ break; } /* else fall through */ default: *(q++) = *(p++); ++count; break; } break; case ST_BACKSLASH: /* Backslash escaped character */ switch (*p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': state = ST_OCTAL; /* Octal sequence */ num = *p - '0'; break; case 'x': case 'X': state = ST_HEX; /* Hex sequence */ num = 0; break; case 'a': /* Bell */ num = '\a'; break; case 'b': /* Backspace */ num = '\b'; break; case 'e': /* Escape */ num = 27; break; case 'f': /* Form feed */ num = '\f'; break; case 'n': /* Newline */ num = '\n'; break; case 'r': /* Carriage return */ num = '\r'; break; case 't': /* Tab */ num = '\t'; break; case 'v': /* Vtab */ num = '\v'; break; case '?': /* Delete */ num = 127; break; case '_': /* Space */ num = ' '; break; case '\0': /* End of string */ state = ST_ERROR; /* Error! */ break; default: /* Escaped character like \ ^ : = */ num = *p; break; } if (state == ST_BACKSLASH) { *(q++) = num; ++count; state = ST_GND; } ++p; break; case ST_OCTAL: /* Octal sequence */ if (*p < '0' || *p > '7') { *(q++) = num; ++count; state = ST_GND; } else num = (num << 3) + (*(p++) - '0'); break; case ST_HEX: /* Hex sequence */ switch (*p) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': num = (num << 4) + (*(p++) - '0'); break; case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': num = (num << 4) + (*(p++) - 'a') + 10; break; case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': num = (num << 4) + (*(p++) - 'A') + 10; break; default: *(q++) = num; ++count; state = ST_GND; break; } break; case ST_CARET: /* Caret escape */ state = ST_GND; /* Should be the next state... */ if (*p >= '@' && *p <= '~') { *(q++) = *(p++) & 037; ++count; } else if (*p == '?') { *(q++) = 127; ++count; } else state = ST_ERROR; break; default: /* should we ? */ /* abort (); no, we should not */ state = ST_ERROR; break; } } *dest = q; *src = p; *output_count = count; return state != ST_ERROR; } #endif /* COLOR_SUPPORT */ void _rl_parse_colors() { #if defined (COLOR_SUPPORT) const char *p; /* Pointer to character being parsed */ char *buf; /* color_buf buffer pointer */ int state; /* State of parser */ int ind_no; /* Indicator number */ char label[3]; /* Indicator label */ COLOR_EXT_TYPE *ext; /* Extension we are working on */ p = sh_get_env_value ("LS_COLORS"); if (p == 0 || *p == '\0') { _rl_color_ext_list = NULL; return; } ext = NULL; strcpy (label, "??"); /* This is an overly conservative estimate, but any possible LS_COLORS string will *not* generate a color_buf longer than itself, so it is a safe way of allocating a buffer in advance. */ buf = color_buf = savestring (p); state = 1; while (state > 0) { switch (state) { case 1: /* First label character */ switch (*p) { case ':': ++p; break; case '*': /* Allocate new extension block and add to head of linked list (this way a later definition will override an earlier one, which can be useful for having terminal-specific defs override global). */ ext = (COLOR_EXT_TYPE *)xmalloc (sizeof *ext); ext->next = _rl_color_ext_list; _rl_color_ext_list = ext; ++p; ext->ext.string = buf; state = (get_funky_string (&buf, &p, true, &ext->ext.len) ? 4 : -1); break; case '\0': state = 0; /* Done! */ break; default: /* Assume it is file type label */ label[0] = *(p++); state = 2; break; } break; case 2: /* Second label character */ if (*p) { label[1] = *(p++); state = 3; } else state = -1; /* Error */ break; case 3: /* Equal sign after indicator label */ state = -1; /* Assume failure... */ if (*(p++) == '=')/* It *should* be... */ { for (ind_no = 0; indicator_name[ind_no] != NULL; ++ind_no) { if (STREQ (label, indicator_name[ind_no])) { _rl_color_indicator[ind_no].string = buf; state = (get_funky_string (&buf, &p, false, &_rl_color_indicator[ind_no].len) ? 1 : -1); break; } } if (state == -1) { _rl_errmsg ("LS_COLORS: unrecognized prefix: %s", label); /* recover from an unrecognized prefix */ while (p && *p && *p != ':') p++; if (p && *p == ':') state = 1; else if (p && *p == 0) state = 0; } } break; case 4: /* Equal sign after *.ext */ if (*(p++) == '=') { ext->seq.string = buf; state = (get_funky_string (&buf, &p, false, &ext->seq.len) ? 1 : -1); } else state = -1; /* XXX - recover here as with an unrecognized prefix? */ if (state == -1 && ext->ext.string) _rl_errmsg ("LS_COLORS: syntax error: %s", ext->ext.string); break; } } if (state < 0) { COLOR_EXT_TYPE *e; COLOR_EXT_TYPE *e2; _rl_errmsg ("unparsable value for LS_COLORS environment variable"); free (color_buf); for (e = _rl_color_ext_list; e != NULL; /* empty */) { e2 = e; e = e->next; free (e2); } _rl_color_ext_list = NULL; _rl_colored_stats = 0; /* can't have colored stats without colors */ } #else /* !COLOR_SUPPORT */ ; #endif /* !COLOR_SUPPORT */ } readline-7.0/readline.c000664 000436 000120 00000117426 12705757120 015160 0ustar00chetadmin000000 000000 /* readline.c -- a general facility for reading lines of input with emacs style editing and completion. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "posixstat.h" #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include #include "posixjmp.h" #include #if !defined (errno) extern int errno; #endif /* !errno */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (__EMX__) # define INCL_DOSPROCESS # include #endif /* __EMX__ */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #ifndef RL_LIBRARY_VERSION # define RL_LIBRARY_VERSION "5.1" #endif #ifndef RL_READLINE_VERSION # define RL_READLINE_VERSION 0x0501 #endif extern void _rl_free_history_entry PARAMS((HIST_ENTRY *)); #if defined (COLOR_SUPPORT) extern void _rl_parse_colors PARAMS((void)); /* XXX */ #endif /* Forward declarations used in this file. */ static char *readline_internal PARAMS((void)); static void readline_initialize_everything PARAMS((void)); static void bind_arrow_keys_internal PARAMS((Keymap)); static void bind_arrow_keys PARAMS((void)); static void bind_bracketed_paste_prefix PARAMS((void)); static void readline_default_bindings PARAMS((void)); static void reset_default_bindings PARAMS((void)); static int _rl_subseq_result PARAMS((int, Keymap, int, int)); static int _rl_subseq_getchar PARAMS((int)); /* **************************************************************** */ /* */ /* Line editing input utility */ /* */ /* **************************************************************** */ const char *rl_library_version = RL_LIBRARY_VERSION; int rl_readline_version = RL_READLINE_VERSION; /* True if this is `real' readline as opposed to some stub substitute. */ int rl_gnu_readline_p = 1; /* A pointer to the keymap that is currently in use. By default, it is the standard emacs keymap. */ Keymap _rl_keymap = emacs_standard_keymap; /* The current style of editing. */ int rl_editing_mode = emacs_mode; /* The current insert mode: input (the default) or overwrite */ int rl_insert_mode = RL_IM_DEFAULT; /* Non-zero if we called this function from _rl_dispatch(). It's present so functions can find out whether they were called from a key binding or directly from an application. */ int rl_dispatching; /* Non-zero if the previous command was a kill command. */ int _rl_last_command_was_kill = 0; /* The current value of the numeric argument specified by the user. */ int rl_numeric_arg = 1; /* Non-zero if an argument was typed. */ int rl_explicit_arg = 0; /* Temporary value used while generating the argument. */ int rl_arg_sign = 1; /* Non-zero means we have been called at least once before. */ static int rl_initialized; #if 0 /* If non-zero, this program is running in an EMACS buffer. */ static int running_in_emacs; #endif /* Flags word encapsulating the current readline state. */ unsigned long rl_readline_state = RL_STATE_NONE; /* The current offset in the current input line. */ int rl_point; /* Mark in the current input line. */ int rl_mark; /* Length of the current input line. */ int rl_end; /* Make this non-zero to return the current input_line. */ int rl_done; /* The last function executed by readline. */ rl_command_func_t *rl_last_func = (rl_command_func_t *)NULL; /* Top level environment for readline_internal (). */ procenv_t _rl_top_level; /* The streams we interact with. */ FILE *_rl_in_stream, *_rl_out_stream; /* The names of the streams that we do input and output to. */ FILE *rl_instream = (FILE *)NULL; FILE *rl_outstream = (FILE *)NULL; /* Non-zero means echo characters as they are read. Defaults to no echo; set to 1 if there is a controlling terminal, we can get its attributes, and the attributes include `echo'. Look at rltty.c:prepare_terminal_settings for the code that sets it. */ int _rl_echoing_p = 0; /* Current prompt. */ char *rl_prompt = (char *)NULL; int rl_visible_prompt_length = 0; /* Set to non-zero by calling application if it has already printed rl_prompt and does not want readline to do it the first time. */ int rl_already_prompted = 0; /* The number of characters read in order to type this complete command. */ int rl_key_sequence_length = 0; /* If non-zero, then this is the address of a function to call just before readline_internal_setup () prints the first prompt. */ rl_hook_func_t *rl_startup_hook = (rl_hook_func_t *)NULL; /* If non-zero, this is the address of a function to call just before readline_internal_setup () returns and readline_internal starts reading input characters. */ rl_hook_func_t *rl_pre_input_hook = (rl_hook_func_t *)NULL; /* What we use internally. You should always refer to RL_LINE_BUFFER. */ static char *the_line; /* The character that can generate an EOF. Really read from the terminal driver... just defaulted here. */ int _rl_eof_char = CTRL ('D'); /* Non-zero makes this the next keystroke to read. */ int rl_pending_input = 0; /* Pointer to a useful terminal name. */ const char *rl_terminal_name = (const char *)NULL; /* Non-zero means to always use horizontal scrolling in line display. */ int _rl_horizontal_scroll_mode = 0; /* Non-zero means to display an asterisk at the starts of history lines which have been modified. */ int _rl_mark_modified_lines = 0; /* The style of `bell' notification preferred. This can be set to NO_BELL, AUDIBLE_BELL, or VISIBLE_BELL. */ int _rl_bell_preference = AUDIBLE_BELL; /* String inserted into the line by rl_insert_comment (). */ char *_rl_comment_begin; /* Keymap holding the function currently being executed. */ Keymap rl_executing_keymap; /* Keymap we're currently using to dispatch. */ Keymap _rl_dispatching_keymap; /* Non-zero means to erase entire line, including prompt, on empty input lines. */ int rl_erase_empty_line = 0; /* Non-zero means to read only this many characters rather than up to a character bound to accept-line. */ int rl_num_chars_to_read; /* Line buffer and maintenance. */ char *rl_line_buffer = (char *)NULL; int rl_line_buffer_len = 0; /* Key sequence `contexts' */ _rl_keyseq_cxt *_rl_kscxt = 0; int rl_executing_key; char *rl_executing_keyseq = 0; int _rl_executing_keyseq_size = 0; /* Timeout (specified in milliseconds) when reading characters making up an ambiguous multiple-key sequence */ int _rl_keyseq_timeout = 500; #define RESIZE_KEYSEQ_BUFFER() \ do \ { \ if (rl_key_sequence_length + 2 >= _rl_executing_keyseq_size) \ { \ _rl_executing_keyseq_size += 16; \ rl_executing_keyseq = xrealloc (rl_executing_keyseq, _rl_executing_keyseq_size); \ } \ } \ while (0); /* Forward declarations used by the display, termcap, and history code. */ /* **************************************************************** */ /* */ /* `Forward' declarations */ /* */ /* **************************************************************** */ /* Non-zero means do not parse any lines other than comments and parser directives. */ unsigned char _rl_parsing_conditionalized_out = 0; /* Non-zero means to convert characters with the meta bit set to escape-prefixed characters so we can indirect through emacs_meta_keymap or vi_escape_keymap. */ int _rl_convert_meta_chars_to_ascii = 1; /* Non-zero means to output characters with the meta bit set directly rather than as a meta-prefixed escape sequence. */ int _rl_output_meta_chars = 0; /* Non-zero means to look at the termios special characters and bind them to equivalent readline functions at startup. */ int _rl_bind_stty_chars = 1; /* Non-zero means to go through the history list at every newline (or whenever rl_done is set and readline returns) and revert each line to its initial state. */ int _rl_revert_all_at_newline = 0; /* Non-zero means to honor the termios ECHOCTL bit and echo control characters corresponding to keyboard-generated signals. */ int _rl_echo_control_chars = 1; /* Non-zero means to prefix the displayed prompt with a character indicating the editing mode: @ for emacs, : for vi-command, + for vi-insert. */ int _rl_show_mode_in_prompt = 0; /* Non-zero means to attempt to put the terminal in `bracketed paste mode', where it will prefix pasted text with an escape sequence and send another to mark the end of the paste. */ int _rl_enable_bracketed_paste = 0; /* **************************************************************** */ /* */ /* Top Level Functions */ /* */ /* **************************************************************** */ /* Non-zero means treat 0200 bit in terminal input as Meta bit. */ int _rl_meta_flag = 0; /* Forward declaration */ /* Set up the prompt and expand it. Called from readline() and rl_callback_handler_install (). */ int rl_set_prompt (prompt) const char *prompt; { FREE (rl_prompt); rl_prompt = prompt ? savestring (prompt) : (char *)NULL; rl_display_prompt = rl_prompt ? rl_prompt : ""; rl_visible_prompt_length = rl_expand_prompt (rl_prompt); return 0; } /* Read a line of input. Prompt with PROMPT. An empty PROMPT means none. A return value of NULL means that EOF was encountered. */ char * readline (prompt) const char *prompt; { char *value; #if 0 int in_callback; #endif /* If we are at EOF return a NULL string. */ if (rl_pending_input == EOF) { rl_clear_pending_input (); return ((char *)NULL); } #if 0 /* If readline() is called after installing a callback handler, temporarily turn off the callback state to avoid ensuing messiness. Patch supplied by the gdb folks. XXX -- disabled. This can be fooled and readline left in a strange state by a poorly-timed longjmp. */ if (in_callback = RL_ISSTATE (RL_STATE_CALLBACK)) RL_UNSETSTATE (RL_STATE_CALLBACK); #endif rl_set_prompt (prompt); rl_initialize (); if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); #if defined (HANDLE_SIGNALS) rl_set_signals (); #endif value = readline_internal (); if (rl_deprep_term_function) (*rl_deprep_term_function) (); #if defined (HANDLE_SIGNALS) rl_clear_signals (); #endif #if 0 if (in_callback) RL_SETSTATE (RL_STATE_CALLBACK); #endif #if HAVE_DECL_AUDIT_USER_TTY && defined (HAVE_LIBAUDIT_H) && defined (ENABLE_TTY_AUDIT_SUPPORT) if (value) _rl_audit_tty (value); #endif return (value); } #if defined (READLINE_CALLBACKS) # define STATIC_CALLBACK #else # define STATIC_CALLBACK static #endif STATIC_CALLBACK void readline_internal_setup () { char *nprompt; _rl_in_stream = rl_instream; _rl_out_stream = rl_outstream; /* Enable the meta key only for the duration of readline(), if this terminal has one and the terminal has been initialized */ if (_rl_enable_meta & RL_ISSTATE (RL_STATE_TERMPREPPED)) _rl_enable_meta_key (); if (rl_startup_hook) (*rl_startup_hook) (); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) rl_vi_insertion_mode (1, 'i'); /* don't want to reset last */ #endif /* VI_MODE */ /* If we're not echoing, we still want to at least print a prompt, because rl_redisplay will not do it for us. If the calling application has a custom redisplay function, though, let that function handle it. */ if (_rl_echoing_p == 0 && rl_redisplay_function == rl_redisplay) { if (rl_prompt && rl_already_prompted == 0) { nprompt = _rl_strip_prompt (rl_prompt); fprintf (_rl_out_stream, "%s", nprompt); fflush (_rl_out_stream); xfree (nprompt); } } else { if (rl_prompt && rl_already_prompted) rl_on_new_line_with_prompt (); else rl_on_new_line (); (*rl_redisplay_function) (); } if (rl_pre_input_hook) (*rl_pre_input_hook) (); RL_CHECK_SIGNALS (); } STATIC_CALLBACK char * readline_internal_teardown (eof) int eof; { char *temp; HIST_ENTRY *entry; RL_CHECK_SIGNALS (); /* Restore the original of this history line, iff the line that we are editing was originally in the history, AND the line has changed. */ entry = current_history (); if (entry && rl_undo_list) { temp = savestring (the_line); rl_revert_line (1, 0); entry = replace_history_entry (where_history (), the_line, (histdata_t)NULL); _rl_free_history_entry (entry); strcpy (the_line, temp); xfree (temp); } if (_rl_revert_all_at_newline) _rl_revert_all_lines (); /* At any rate, it is highly likely that this line has an undo list. Get rid of it now. */ if (rl_undo_list) rl_free_undo_list (); /* Disable the meta key, if this terminal has one and we were told to use it. The check whether or not we sent the enable string is in _rl_disable_meta_key(); the flag is set in _rl_enable_meta_key */ _rl_disable_meta_key (); /* Restore normal cursor, if available. */ _rl_set_insert_mode (RL_IM_INSERT, 0); return (eof ? (char *)NULL : savestring (the_line)); } void _rl_internal_char_cleanup () { #if defined (VI_MODE) /* In vi mode, when you exit insert mode, the cursor moves back over the previous character. We explicitly check for that here. */ if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap) rl_vi_check (); #endif /* VI_MODE */ if (rl_num_chars_to_read && rl_end >= rl_num_chars_to_read) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; rl_newline (1, '\n'); } if (rl_done == 0) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; } /* If the application writer has told us to erase the entire line if the only character typed was something bound to rl_newline, do so. */ if (rl_erase_empty_line && rl_done && rl_last_func == rl_newline && rl_point == 0 && rl_end == 0) _rl_erase_entire_line (); } STATIC_CALLBACK int #if defined (READLINE_CALLBACKS) readline_internal_char () #else readline_internal_charloop () #endif { static int lastc, eof_found; int c, code, lk; lastc = EOF; #if !defined (READLINE_CALLBACKS) eof_found = 0; while (rl_done == 0) { #endif lk = _rl_last_command_was_kill; #if defined (HAVE_POSIX_SIGSETJMP) code = sigsetjmp (_rl_top_level, 0); #else code = setjmp (_rl_top_level); #endif if (code) { (*rl_redisplay_function) (); _rl_want_redisplay = 0; /* If we get here, we're not being called from something dispatched from _rl_callback_read_char(), which sets up its own value of _rl_top_level (saving and restoring the old, of course), so we can just return here. */ if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); } if (rl_pending_input == 0) { /* Then initialize the argument and number of keys read. */ _rl_reset_argument (); rl_executing_keyseq[rl_key_sequence_length = 0] = '\0'; } RL_SETSTATE(RL_STATE_READCMD); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_READCMD); /* look at input.c:rl_getc() for the circumstances under which this will be returned; punt immediately on read error without converting it to a newline; assume that rl_read_key has already called the signal handler. */ if (c == READERR) { #if defined (READLINE_CALLBACKS) RL_SETSTATE(RL_STATE_DONE); return (rl_done = 1); #else eof_found = 1; break; #endif } /* EOF typed to a non-blank line is ^D the first time, EOF the second time in a row. This won't return any partial line read from the tty. If we want to change this, to force any existing line to be returned when read(2) reads EOF, for example, this is the place to change. */ if (c == EOF && rl_end) { if (RL_SIG_RECEIVED ()) { RL_CHECK_SIGNALS (); if (rl_signal_event_hook) (*rl_signal_event_hook) (); /* XXX */ } /* XXX - reading two consecutive EOFs returns EOF */ if (RL_ISSTATE (RL_STATE_TERMPREPPED)) { if (lastc == _rl_eof_char || lastc == EOF) rl_end = 0; else c = _rl_eof_char; } else c = NEWLINE; } /* The character _rl_eof_char typed to blank line, and not as the previous character is interpreted as EOF. This doesn't work when READLINE_CALLBACKS is defined, so hitting a series of ^Ds will erase all the chars on the line and then return EOF. */ if (((c == _rl_eof_char && lastc != c) || c == EOF) && rl_end == 0) { #if defined (READLINE_CALLBACKS) RL_SETSTATE(RL_STATE_DONE); return (rl_done = 1); #else eof_found = 1; break; #endif } lastc = c; _rl_dispatch ((unsigned char)c, _rl_keymap); RL_CHECK_SIGNALS (); /* If there was no change in _rl_last_command_was_kill, then no kill has taken place. Note that if input is pending we are reading a prefix command, so nothing has changed yet. */ if (rl_pending_input == 0 && lk == _rl_last_command_was_kill) _rl_last_command_was_kill = 0; _rl_internal_char_cleanup (); #if defined (READLINE_CALLBACKS) return 0; #else } return (eof_found); #endif } #if defined (READLINE_CALLBACKS) static int readline_internal_charloop () { int eof = 1; while (rl_done == 0) eof = readline_internal_char (); return (eof); } #endif /* READLINE_CALLBACKS */ /* Read a line of input from the global rl_instream, doing output on the global rl_outstream. If rl_prompt is non-null, then that is our prompt. */ static char * readline_internal () { int eof; readline_internal_setup (); eof = readline_internal_charloop (); return (readline_internal_teardown (eof)); } void _rl_init_line_state () { rl_point = rl_end = rl_mark = 0; the_line = rl_line_buffer; the_line[0] = 0; } void _rl_set_the_line () { the_line = rl_line_buffer; } #if defined (READLINE_CALLBACKS) _rl_keyseq_cxt * _rl_keyseq_cxt_alloc () { _rl_keyseq_cxt *cxt; cxt = (_rl_keyseq_cxt *)xmalloc (sizeof (_rl_keyseq_cxt)); cxt->flags = cxt->subseq_arg = cxt->subseq_retval = 0; cxt->okey = 0; cxt->ocxt = _rl_kscxt; cxt->childval = 42; /* sentinel value */ return cxt; } void _rl_keyseq_cxt_dispose (cxt) _rl_keyseq_cxt *cxt; { xfree (cxt); } void _rl_keyseq_chain_dispose () { _rl_keyseq_cxt *cxt; while (_rl_kscxt) { cxt = _rl_kscxt; _rl_kscxt = _rl_kscxt->ocxt; _rl_keyseq_cxt_dispose (cxt); } } #endif static int _rl_subseq_getchar (key) int key; { int k; if (key == ESC) RL_SETSTATE(RL_STATE_METANEXT); RL_SETSTATE(RL_STATE_MOREINPUT); k = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (key == ESC) RL_UNSETSTATE(RL_STATE_METANEXT); return k; } #if defined (READLINE_CALLBACKS) int _rl_dispatch_callback (cxt) _rl_keyseq_cxt *cxt; { int nkey, r; /* For now */ /* The first time this context is used, we want to read input and dispatch on it. When traversing the chain of contexts back `up', we want to use the value from the next context down. We're simulating recursion using a chain of contexts. */ if ((cxt->flags & KSEQ_DISPATCHED) == 0) { nkey = _rl_subseq_getchar (cxt->okey); if (nkey < 0) { _rl_abort_internal (); return -1; } r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg); cxt->flags |= KSEQ_DISPATCHED; } else r = cxt->childval; /* For now */ if (r != -3) /* don't do this if we indicate there will be other matches */ r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ)); RL_CHECK_SIGNALS (); /* We only treat values < 0 specially to simulate recursion. */ if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ { _rl_keyseq_chain_dispose (); RL_UNSETSTATE (RL_STATE_MULTIKEY); return r; } if (r != -3) /* magic value that says we added to the chain */ _rl_kscxt = cxt->ocxt; if (_rl_kscxt) _rl_kscxt->childval = r; if (r != -3) _rl_keyseq_cxt_dispose (cxt); return r; } #endif /* READLINE_CALLBACKS */ /* Do the command associated with KEY in MAP. If the associated command is really a keymap, then read another key, and dispatch into that map. */ int _rl_dispatch (key, map) register int key; Keymap map; { _rl_dispatching_keymap = map; return _rl_dispatch_subseq (key, map, 0); } int _rl_dispatch_subseq (key, map, got_subseq) register int key; Keymap map; int got_subseq; { int r, newkey; char *macro; rl_command_func_t *func; #if defined (READLINE_CALLBACKS) _rl_keyseq_cxt *cxt; #endif if (META_CHAR (key) && _rl_convert_meta_chars_to_ascii) { if (map[ESC].type == ISKMAP) { if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (ESC); RESIZE_KEYSEQ_BUFFER (); rl_executing_keyseq[rl_key_sequence_length++] = ESC; map = FUNCTION_TO_KEYMAP (map, ESC); key = UNMETA (key); return (_rl_dispatch (key, map)); } else rl_ding (); return 0; } if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (key); r = 0; switch (map[key].type) { case ISFUNC: func = map[key].function; if (func) { /* Special case rl_do_lowercase_version (). */ if (func == rl_do_lowercase_version) /* Should we do anything special if key == ANYOTHERKEY? */ return (_rl_dispatch (_rl_to_lower ((unsigned char)key), map)); rl_executing_keymap = map; rl_executing_key = key; RESIZE_KEYSEQ_BUFFER(); rl_executing_keyseq[rl_key_sequence_length++] = key; rl_executing_keyseq[rl_key_sequence_length] = '\0'; rl_dispatching = 1; RL_SETSTATE(RL_STATE_DISPATCHING); r = (*func) (rl_numeric_arg * rl_arg_sign, key); RL_UNSETSTATE(RL_STATE_DISPATCHING); rl_dispatching = 0; /* If we have input pending, then the last command was a prefix command. Don't change the state of rl_last_func. Otherwise, remember the last command executed in this variable. */ if (rl_pending_input == 0 && map[key].function != rl_digit_argument) rl_last_func = map[key].function; RL_CHECK_SIGNALS (); } else if (map[ANYOTHERKEY].function) { /* OK, there's no function bound in this map, but there is a shadow function that was overridden when the current keymap was created. Return -2 to note that. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); return -2; } else if (got_subseq) { /* Return -1 to note that we're in a subsequence, but we don't have a matching key, nor was one overridden. This means we need to back up the recursion chain and find the last subsequence that is bound to a function. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); return -1; } else { #if defined (READLINE_CALLBACKS) RL_UNSETSTATE (RL_STATE_MULTIKEY); _rl_keyseq_chain_dispose (); #endif _rl_abort_internal (); return -1; } break; case ISKMAP: if (map[key].function != 0) { #if defined (VI_MODE) /* The only way this test will be true is if a subsequence has been bound starting with ESC, generally the arrow keys. What we do is check whether there's input in the queue, which there generally will be if an arrow key has been pressed, and, if there's not, just dispatch to (what we assume is) rl_vi_movement_mode right away. This is essentially an input test with a zero timeout (by default) or a timeout determined by the value of `keyseq-timeout' */ /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000 */ if (rl_editing_mode == vi_mode && key == ESC && map == vi_insertion_keymap && (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available () == 0 && _rl_input_queued ((_rl_keyseq_timeout > 0) ? _rl_keyseq_timeout*1000 : 0) == 0) return (_rl_dispatch (ANYOTHERKEY, FUNCTION_TO_KEYMAP (map, key))); #endif RESIZE_KEYSEQ_BUFFER (); rl_executing_keyseq[rl_key_sequence_length++] = key; _rl_dispatching_keymap = FUNCTION_TO_KEYMAP (map, key); /* Allocate new context here. Use linked contexts (linked through cxt->ocxt) to simulate recursion */ #if defined (READLINE_CALLBACKS) # if defined (VI_MODE) /* If we're redoing a vi mode command and we know there is a shadowed function corresponding to this key, just call it -- all the redoable vi mode commands already have all the input they need, and rl_vi_redo assumes that one call to rl_dispatch is sufficient to complete the command. */ if (_rl_vi_redoing && RL_ISSTATE (RL_STATE_CALLBACK) && map[ANYOTHERKEY].function != 0) return (_rl_subseq_result (-2, map, key, got_subseq)); # endif if (RL_ISSTATE (RL_STATE_CALLBACK)) { /* Return 0 only the first time, to indicate success to _rl_callback_read_char. The rest of the time, we're called from _rl_dispatch_callback, so we return -3 to indicate special handling is necessary. */ r = RL_ISSTATE (RL_STATE_MULTIKEY) ? -3 : 0; cxt = _rl_keyseq_cxt_alloc (); if (got_subseq) cxt->flags |= KSEQ_SUBSEQ; cxt->okey = key; cxt->oldmap = map; cxt->dmap = _rl_dispatching_keymap; cxt->subseq_arg = got_subseq || cxt->dmap[ANYOTHERKEY].function; RL_SETSTATE (RL_STATE_MULTIKEY); _rl_kscxt = cxt; return r; /* don't indicate immediate success */ } #endif /* Tentative inter-character timeout for potential multi-key sequences? If no input within timeout, abort sequence and act as if we got non-matching input. */ /* _rl_keyseq_timeout specified in milliseconds; _rl_input_queued takes microseconds, so multiply by 1000 */ if (_rl_keyseq_timeout > 0 && (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available () == 0 && _rl_dispatching_keymap[ANYOTHERKEY].function && _rl_input_queued (_rl_keyseq_timeout*1000) == 0) return (_rl_subseq_result (-2, map, key, got_subseq)); newkey = _rl_subseq_getchar (key); if (newkey < 0) { _rl_abort_internal (); return -1; } r = _rl_dispatch_subseq (newkey, _rl_dispatching_keymap, got_subseq || map[ANYOTHERKEY].function); return _rl_subseq_result (r, map, key, got_subseq); } else { _rl_abort_internal (); /* XXX */ return -1; } break; case ISMACR: if (map[key].function != 0) { rl_executing_keyseq[rl_key_sequence_length] = '\0'; macro = savestring ((char *)map[key].function); _rl_with_macro_input (macro); return 0; } break; } #if defined (VI_MODE) if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && key != ANYOTHERKEY && _rl_dispatching_keymap == vi_movement_keymap && _rl_vi_textmod_command (key)) _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); #endif return (r); } static int _rl_subseq_result (r, map, key, got_subseq) int r; Keymap map; int key, got_subseq; { Keymap m; int type, nt; rl_command_func_t *func, *nf; if (r == -2) /* We didn't match anything, and the keymap we're indexed into shadowed a function previously bound to that prefix. Call the function. The recursive call to _rl_dispatch_subseq has already taken care of pushing any necessary input back onto the input queue with _rl_unget_char. */ { m = _rl_dispatching_keymap; type = m[ANYOTHERKEY].type; func = m[ANYOTHERKEY].function; if (type == ISFUNC && func == rl_do_lowercase_version) r = _rl_dispatch (_rl_to_lower ((unsigned char)key), map); else if (type == ISFUNC) { /* If we shadowed a function, whatever it is, we somehow need a keymap with map[key].func == shadowed-function. Let's use this one. Then we can dispatch using the original key, since there are commands (e.g., in vi mode) for which it matters. */ nt = m[key].type; nf = m[key].function; m[key].type = type; m[key].function = func; /* Don't change _rl_dispatching_keymap, set it here */ _rl_dispatching_keymap = map; /* previous map */ r = _rl_dispatch_subseq (key, m, 0); m[key].type = nt; m[key].function = nf; } else /* We probably shadowed a keymap, so keep going. */ r = _rl_dispatch (ANYOTHERKEY, m); } else if (r && map[ANYOTHERKEY].function) { /* We didn't match (r is probably -1), so return something to tell the caller that it should try ANYOTHERKEY for an overridden function. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); _rl_dispatching_keymap = map; return -2; } else if (r && got_subseq) { /* OK, back up the chain. */ if (RL_ISSTATE (RL_STATE_MACROINPUT)) _rl_prev_macro_key (); else _rl_unget_char (key); _rl_dispatching_keymap = map; return -1; } return r; } /* **************************************************************** */ /* */ /* Initializations */ /* */ /* **************************************************************** */ /* Initialize readline (and terminal if not already). */ int rl_initialize () { /* If we have never been called before, initialize the terminal and data structures. */ if (!rl_initialized) { RL_SETSTATE(RL_STATE_INITIALIZING); readline_initialize_everything (); RL_UNSETSTATE(RL_STATE_INITIALIZING); rl_initialized++; RL_SETSTATE(RL_STATE_INITIALIZED); } /* Initialize the current line information. */ _rl_init_line_state (); /* We aren't done yet. We haven't even gotten started yet! */ rl_done = 0; RL_UNSETSTATE(RL_STATE_DONE); /* Tell the history routines what is going on. */ _rl_start_using_history (); /* Make the display buffer match the state of the line. */ rl_reset_line_state (); /* No such function typed yet. */ rl_last_func = (rl_command_func_t *)NULL; /* Parsing of key-bindings begins in an enabled state. */ _rl_parsing_conditionalized_out = 0; #if defined (VI_MODE) if (rl_editing_mode == vi_mode) _rl_vi_initialize_line (); #endif /* Each line starts in insert mode (the default). */ _rl_set_insert_mode (RL_IM_DEFAULT, 1); return 0; } #if 0 #if defined (__EMX__) static void _emx_build_environ () { TIB *tibp; PIB *pibp; char *t, **tp; int c; DosGetInfoBlocks (&tibp, &pibp); t = pibp->pib_pchenv; for (c = 1; *t; c++) t += strlen (t) + 1; tp = environ = (char **)xmalloc ((c + 1) * sizeof (char *)); t = pibp->pib_pchenv; while (*t) { *tp++ = t; t += strlen (t) + 1; } *tp = 0; } #endif /* __EMX__ */ #endif /* Initialize the entire state of the world. */ static void readline_initialize_everything () { #if 0 #if defined (__EMX__) if (environ == 0) _emx_build_environ (); #endif #endif #if 0 /* Find out if we are running in Emacs -- UNUSED. */ running_in_emacs = sh_get_env_value ("EMACS") != (char *)0; #endif /* Set up input and output if they are not already set up. */ if (!rl_instream) rl_instream = stdin; if (!rl_outstream) rl_outstream = stdout; /* Bind _rl_in_stream and _rl_out_stream immediately. These values may change, but they may also be used before readline_internal () is called. */ _rl_in_stream = rl_instream; _rl_out_stream = rl_outstream; /* Allocate data structures. */ if (rl_line_buffer == 0) rl_line_buffer = (char *)xmalloc (rl_line_buffer_len = DEFAULT_BUFFER_SIZE); /* Initialize the terminal interface. */ if (rl_terminal_name == 0) rl_terminal_name = sh_get_env_value ("TERM"); _rl_init_terminal_io (rl_terminal_name); /* Bind tty characters to readline functions. */ readline_default_bindings (); /* Initialize the function names. */ rl_initialize_funmap (); /* Decide whether we should automatically go into eight-bit mode. */ _rl_init_eightbit (); /* Read in the init file. */ rl_read_init_file ((char *)NULL); /* XXX */ if (_rl_horizontal_scroll_mode && _rl_term_autowrap) { _rl_screenwidth--; _rl_screenchars -= _rl_screenheight; } /* Override the effect of any `set keymap' assignments in the inputrc file. */ rl_set_keymap_from_edit_mode (); /* Try to bind a common arrow key prefix, if not already bound. */ bind_arrow_keys (); /* Bind the bracketed paste prefix assuming that the user will enable it on terminals that support it. */ bind_bracketed_paste_prefix (); /* If the completion parser's default word break characters haven't been set yet, then do so now. */ if (rl_completer_word_break_characters == (char *)NULL) rl_completer_word_break_characters = (char *)rl_basic_word_break_characters; #if defined (COLOR_SUPPORT) if (_rl_colored_stats || _rl_colored_completion_prefix) _rl_parse_colors (); #endif rl_executing_keyseq = malloc (_rl_executing_keyseq_size = 16); if (rl_executing_keyseq) rl_executing_keyseq[0] = '\0'; } /* If this system allows us to look at the values of the regular input editing characters, then bind them to their readline equivalents, iff the characters are not bound to keymaps. */ static void readline_default_bindings () { if (_rl_bind_stty_chars) rl_tty_set_default_bindings (_rl_keymap); } /* Reset the default bindings for the terminal special characters we're interested in back to rl_insert and read the new ones. */ static void reset_default_bindings () { if (_rl_bind_stty_chars) { rl_tty_unset_default_bindings (_rl_keymap); rl_tty_set_default_bindings (_rl_keymap); } } /* Bind some common arrow key sequences in MAP. */ static void bind_arrow_keys_internal (map) Keymap map; { Keymap xkeymap; xkeymap = _rl_keymap; _rl_keymap = map; #if defined (__MSDOS__) rl_bind_keyseq_if_unbound ("\033[0A", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033[0B", rl_backward_char); rl_bind_keyseq_if_unbound ("\033[0C", rl_forward_char); rl_bind_keyseq_if_unbound ("\033[0D", rl_get_next_history); #endif rl_bind_keyseq_if_unbound ("\033[A", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033[B", rl_get_next_history); rl_bind_keyseq_if_unbound ("\033[C", rl_forward_char); rl_bind_keyseq_if_unbound ("\033[D", rl_backward_char); rl_bind_keyseq_if_unbound ("\033[H", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\033[F", rl_end_of_line); rl_bind_keyseq_if_unbound ("\033OA", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\033OB", rl_get_next_history); rl_bind_keyseq_if_unbound ("\033OC", rl_forward_char); rl_bind_keyseq_if_unbound ("\033OD", rl_backward_char); rl_bind_keyseq_if_unbound ("\033OH", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\033OF", rl_end_of_line); #if defined (__MINGW32__) rl_bind_keyseq_if_unbound ("\340H", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\340P", rl_get_next_history); rl_bind_keyseq_if_unbound ("\340M", rl_forward_char); rl_bind_keyseq_if_unbound ("\340K", rl_backward_char); rl_bind_keyseq_if_unbound ("\340G", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\340O", rl_end_of_line); rl_bind_keyseq_if_unbound ("\340S", rl_delete); rl_bind_keyseq_if_unbound ("\340R", rl_overwrite_mode); /* These may or may not work because of the embedded NUL. */ rl_bind_keyseq_if_unbound ("\\000H", rl_get_previous_history); rl_bind_keyseq_if_unbound ("\\000P", rl_get_next_history); rl_bind_keyseq_if_unbound ("\\000M", rl_forward_char); rl_bind_keyseq_if_unbound ("\\000K", rl_backward_char); rl_bind_keyseq_if_unbound ("\\000G", rl_beg_of_line); rl_bind_keyseq_if_unbound ("\\000O", rl_end_of_line); rl_bind_keyseq_if_unbound ("\\000S", rl_delete); rl_bind_keyseq_if_unbound ("\\000R", rl_overwrite_mode); #endif _rl_keymap = xkeymap; } /* Try and bind the common arrow key prefixes after giving termcap and the inputrc file a chance to bind them and create `real' keymaps for the arrow key prefix. */ static void bind_arrow_keys () { bind_arrow_keys_internal (emacs_standard_keymap); #if defined (VI_MODE) bind_arrow_keys_internal (vi_movement_keymap); /* Unbind vi_movement_keymap[ESC] to allow users to repeatedly hit ESC in vi command mode while still allowing the arrow keys to work. */ if (vi_movement_keymap[ESC].type == ISKMAP) rl_bind_keyseq_in_map ("\033", (rl_command_func_t *)NULL, vi_movement_keymap); bind_arrow_keys_internal (vi_insertion_keymap); #endif } static void bind_bracketed_paste_prefix () { Keymap xkeymap; xkeymap = _rl_keymap; _rl_keymap = emacs_standard_keymap; rl_bind_keyseq_if_unbound (BRACK_PASTE_PREF, rl_bracketed_paste_begin); _rl_keymap = vi_insertion_keymap; rl_bind_keyseq_if_unbound (BRACK_PASTE_PREF, rl_bracketed_paste_begin); _rl_keymap = xkeymap; } /* **************************************************************** */ /* */ /* Saving and Restoring Readline's state */ /* */ /* **************************************************************** */ int rl_save_state (sp) struct readline_state *sp; { if (sp == 0) return -1; sp->point = rl_point; sp->end = rl_end; sp->mark = rl_mark; sp->buffer = rl_line_buffer; sp->buflen = rl_line_buffer_len; sp->ul = rl_undo_list; sp->prompt = rl_prompt; sp->rlstate = rl_readline_state; sp->done = rl_done; sp->kmap = _rl_keymap; sp->lastfunc = rl_last_func; sp->insmode = rl_insert_mode; sp->edmode = rl_editing_mode; sp->kseq = rl_executing_keyseq; sp->kseqlen = rl_key_sequence_length; sp->inf = rl_instream; sp->outf = rl_outstream; sp->pendingin = rl_pending_input; sp->macro = rl_executing_macro; sp->catchsigs = rl_catch_signals; sp->catchsigwinch = rl_catch_sigwinch; sp->entryfunc = rl_completion_entry_function; sp->menuentryfunc = rl_menu_completion_entry_function; sp->ignorefunc = rl_ignore_some_completions_function; sp->attemptfunc = rl_attempted_completion_function; sp->wordbreakchars = rl_completer_word_break_characters; return (0); } int rl_restore_state (sp) struct readline_state *sp; { if (sp == 0) return -1; rl_point = sp->point; rl_end = sp->end; rl_mark = sp->mark; the_line = rl_line_buffer = sp->buffer; rl_line_buffer_len = sp->buflen; rl_undo_list = sp->ul; rl_prompt = sp->prompt; rl_readline_state = sp->rlstate; rl_done = sp->done; _rl_keymap = sp->kmap; rl_last_func = sp->lastfunc; rl_insert_mode = sp->insmode; rl_editing_mode = sp->edmode; rl_executing_keyseq = sp->kseq; rl_key_sequence_length = sp->kseqlen; rl_instream = sp->inf; rl_outstream = sp->outf; rl_pending_input = sp->pendingin; rl_executing_macro = sp->macro; rl_catch_signals = sp->catchsigs; rl_catch_sigwinch = sp->catchsigwinch; rl_completion_entry_function = sp->entryfunc; rl_menu_completion_entry_function = sp->menuentryfunc; rl_ignore_some_completions_function = sp->ignorefunc; rl_attempted_completion_function = sp->attemptfunc; rl_completer_word_break_characters = sp->wordbreakchars; return (0); } readline-7.0/rltty.c000644 000436 000120 00000055734 12705761703 014556 0ustar00chetadmin000000 000000 /* rltty.c -- functions to prepare and restore the terminal for readline's use. */ /* Copyright (C) 1992-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #include "rldefs.h" #include "rltty.h" #if defined (HAVE_SYS_IOCTL_H) # include /* include for declaration of ioctl */ #endif #include "readline.h" #include "rlprivate.h" #if !defined (errno) extern int errno; #endif /* !errno */ rl_vintfunc_t *rl_prep_term_function = rl_prep_terminal; rl_voidfunc_t *rl_deprep_term_function = rl_deprep_terminal; static void set_winsize PARAMS((int)); /* **************************************************************** */ /* */ /* Saving and Restoring the TTY */ /* */ /* **************************************************************** */ /* Non-zero means that the terminal is in a prepped state. There are several flags that are OR'd in to denote whether or not we have sent various init strings to the terminal. */ #define TPX_PREPPED 0x01 #define TPX_BRACKPASTE 0x02 #define TPX_METAKEY 0x04 static int terminal_prepped; static _RL_TTY_CHARS _rl_tty_chars, _rl_last_tty_chars; /* If non-zero, means that this process has called tcflow(fd, TCOOFF) and output is suspended. */ #if defined (__ksr1__) static int ksrflow; #endif /* Dummy call to force a backgrounded readline to stop before it tries to get the tty settings. */ static void set_winsize (tty) int tty; { #if defined (TIOCGWINSZ) struct winsize w; if (ioctl (tty, TIOCGWINSZ, &w) == 0) (void) ioctl (tty, TIOCSWINSZ, &w); #endif /* TIOCGWINSZ */ } #if defined (NO_TTY_DRIVER) /* Nothing */ #elif defined (NEW_TTY_DRIVER) /* Values for the `flags' field of a struct bsdtty. This tells which elements of the struct bsdtty have been fetched from the system and are valid. */ #define SGTTY_SET 0x01 #define LFLAG_SET 0x02 #define TCHARS_SET 0x04 #define LTCHARS_SET 0x08 struct bsdtty { struct sgttyb sgttyb; /* Basic BSD tty driver information. */ int lflag; /* Local mode flags, like LPASS8. */ #if defined (TIOCGETC) struct tchars tchars; /* Terminal special characters, including ^S and ^Q. */ #endif #if defined (TIOCGLTC) struct ltchars ltchars; /* 4.2 BSD editing characters */ #endif int flags; /* Bitmap saying which parts of the struct are valid. */ }; #define TIOTYPE struct bsdtty static TIOTYPE otio; static void save_tty_chars PARAMS((TIOTYPE *)); static int _get_tty_settings PARAMS((int, TIOTYPE *)); static int get_tty_settings PARAMS((int, TIOTYPE *)); static int _set_tty_settings PARAMS((int, TIOTYPE *)); static int set_tty_settings PARAMS((int, TIOTYPE *)); static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *)); static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *)); static void save_tty_chars (tiop) TIOTYPE *tiop; { _rl_last_tty_chars = _rl_tty_chars; if (tiop->flags & SGTTY_SET) { _rl_tty_chars.t_erase = tiop->sgttyb.sg_erase; _rl_tty_chars.t_kill = tiop->sgttyb.sg_kill; } if (tiop->flags & TCHARS_SET) { _rl_intr_char = _rl_tty_chars.t_intr = tiop->tchars.t_intrc; _rl_quit_char = _rl_tty_chars.t_quit = tiop->tchars.t_quitc; _rl_tty_chars.t_start = tiop->tchars.t_startc; _rl_tty_chars.t_stop = tiop->tchars.t_stopc; _rl_tty_chars.t_eof = tiop->tchars.t_eofc; _rl_tty_chars.t_eol = '\n'; _rl_tty_chars.t_eol2 = tiop->tchars.t_brkc; } if (tiop->flags & LTCHARS_SET) { _rl_susp_char = _rl_tty_chars.t_susp = tiop->ltchars.t_suspc; _rl_tty_chars.t_dsusp = tiop->ltchars.t_dsuspc; _rl_tty_chars.t_reprint = tiop->ltchars.t_rprntc; _rl_tty_chars.t_flush = tiop->ltchars.t_flushc; _rl_tty_chars.t_werase = tiop->ltchars.t_werasc; _rl_tty_chars.t_lnext = tiop->ltchars.t_lnextc; } _rl_tty_chars.t_status = -1; } static int get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { set_winsize (tty); tiop->flags = tiop->lflag = 0; errno = 0; if (ioctl (tty, TIOCGETP, &(tiop->sgttyb)) < 0) return -1; tiop->flags |= SGTTY_SET; #if defined (TIOCLGET) if (ioctl (tty, TIOCLGET, &(tiop->lflag)) == 0) tiop->flags |= LFLAG_SET; #endif #if defined (TIOCGETC) if (ioctl (tty, TIOCGETC, &(tiop->tchars)) == 0) tiop->flags |= TCHARS_SET; #endif #if defined (TIOCGLTC) if (ioctl (tty, TIOCGLTC, &(tiop->ltchars)) == 0) tiop->flags |= LTCHARS_SET; #endif return 0; } static int set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { if (tiop->flags & SGTTY_SET) { ioctl (tty, TIOCSETN, &(tiop->sgttyb)); tiop->flags &= ~SGTTY_SET; } _rl_echoing_p = 1; #if defined (TIOCLSET) if (tiop->flags & LFLAG_SET) { ioctl (tty, TIOCLSET, &(tiop->lflag)); tiop->flags &= ~LFLAG_SET; } #endif #if defined (TIOCSETC) if (tiop->flags & TCHARS_SET) { ioctl (tty, TIOCSETC, &(tiop->tchars)); tiop->flags &= ~TCHARS_SET; } #endif #if defined (TIOCSLTC) if (tiop->flags & LTCHARS_SET) { ioctl (tty, TIOCSLTC, &(tiop->ltchars)); tiop->flags &= ~LTCHARS_SET; } #endif return 0; } static void prepare_terminal_settings (meta_flag, oldtio, tiop) int meta_flag; TIOTYPE oldtio, *tiop; { _rl_echoing_p = (oldtio.sgttyb.sg_flags & ECHO); _rl_echoctl = (oldtio.sgttyb.sg_flags & ECHOCTL); /* Copy the original settings to the structure we're going to use for our settings. */ tiop->sgttyb = oldtio.sgttyb; tiop->lflag = oldtio.lflag; #if defined (TIOCGETC) tiop->tchars = oldtio.tchars; #endif #if defined (TIOCGLTC) tiop->ltchars = oldtio.ltchars; #endif tiop->flags = oldtio.flags; /* First, the basic settings to put us into character-at-a-time, no-echo input mode. */ tiop->sgttyb.sg_flags &= ~(ECHO | CRMOD); tiop->sgttyb.sg_flags |= CBREAK; /* If this terminal doesn't care how the 8th bit is used, then we can use it for the meta-key. If only one of even or odd parity is specified, then the terminal is using parity, and we cannot. */ #if !defined (ANYP) # define ANYP (EVENP | ODDP) #endif if (((oldtio.sgttyb.sg_flags & ANYP) == ANYP) || ((oldtio.sgttyb.sg_flags & ANYP) == 0)) { tiop->sgttyb.sg_flags |= ANYP; /* Hack on local mode flags if we can. */ #if defined (TIOCLGET) # if defined (LPASS8) tiop->lflag |= LPASS8; # endif /* LPASS8 */ #endif /* TIOCLGET */ } #if defined (TIOCGETC) # if defined (USE_XON_XOFF) /* Get rid of terminal output start and stop characters. */ tiop->tchars.t_stopc = -1; /* C-s */ tiop->tchars.t_startc = -1; /* C-q */ /* If there is an XON character, bind it to restart the output. */ if (oldtio.tchars.t_startc != -1) rl_bind_key (oldtio.tchars.t_startc, rl_restart_output); # endif /* USE_XON_XOFF */ /* If there is an EOF char, bind _rl_eof_char to it. */ if (oldtio.tchars.t_eofc != -1) _rl_eof_char = oldtio.tchars.t_eofc; # if defined (NO_KILL_INTR) /* Get rid of terminal-generated SIGQUIT and SIGINT. */ tiop->tchars.t_quitc = -1; /* C-\ */ tiop->tchars.t_intrc = -1; /* C-c */ # endif /* NO_KILL_INTR */ #endif /* TIOCGETC */ #if defined (TIOCGLTC) /* Make the interrupt keys go away. Just enough to make people happy. */ tiop->ltchars.t_dsuspc = -1; /* C-y */ tiop->ltchars.t_lnextc = -1; /* C-v */ #endif /* TIOCGLTC */ } #else /* !defined (NEW_TTY_DRIVER) */ #if !defined (VMIN) # define VMIN VEOF #endif #if !defined (VTIME) # define VTIME VEOL #endif #if defined (TERMIOS_TTY_DRIVER) # define TIOTYPE struct termios # define DRAIN_OUTPUT(fd) tcdrain (fd) # define GETATTR(tty, tiop) (tcgetattr (tty, tiop)) # ifdef M_UNIX # define SETATTR(tty, tiop) (tcsetattr (tty, TCSANOW, tiop)) # else # define SETATTR(tty, tiop) (tcsetattr (tty, TCSADRAIN, tiop)) # endif /* !M_UNIX */ #else # define TIOTYPE struct termio # define DRAIN_OUTPUT(fd) # define GETATTR(tty, tiop) (ioctl (tty, TCGETA, tiop)) # define SETATTR(tty, tiop) (ioctl (tty, TCSETAW, tiop)) #endif /* !TERMIOS_TTY_DRIVER */ static TIOTYPE otio; static void save_tty_chars PARAMS((TIOTYPE *)); static int _get_tty_settings PARAMS((int, TIOTYPE *)); static int get_tty_settings PARAMS((int, TIOTYPE *)); static int _set_tty_settings PARAMS((int, TIOTYPE *)); static int set_tty_settings PARAMS((int, TIOTYPE *)); static void prepare_terminal_settings PARAMS((int, TIOTYPE, TIOTYPE *)); static void set_special_char PARAMS((Keymap, TIOTYPE *, int, rl_command_func_t *)); static void _rl_bind_tty_special_chars PARAMS((Keymap, TIOTYPE)); #if defined (FLUSHO) # define OUTPUT_BEING_FLUSHED(tp) (tp->c_lflag & FLUSHO) #else # define OUTPUT_BEING_FLUSHED(tp) 0 #endif static void save_tty_chars (tiop) TIOTYPE *tiop; { _rl_last_tty_chars = _rl_tty_chars; _rl_tty_chars.t_eof = tiop->c_cc[VEOF]; _rl_tty_chars.t_eol = tiop->c_cc[VEOL]; #ifdef VEOL2 _rl_tty_chars.t_eol2 = tiop->c_cc[VEOL2]; #endif _rl_tty_chars.t_erase = tiop->c_cc[VERASE]; #ifdef VWERASE _rl_tty_chars.t_werase = tiop->c_cc[VWERASE]; #endif _rl_tty_chars.t_kill = tiop->c_cc[VKILL]; #ifdef VREPRINT _rl_tty_chars.t_reprint = tiop->c_cc[VREPRINT]; #endif _rl_intr_char = _rl_tty_chars.t_intr = tiop->c_cc[VINTR]; _rl_quit_char = _rl_tty_chars.t_quit = tiop->c_cc[VQUIT]; #ifdef VSUSP _rl_susp_char = _rl_tty_chars.t_susp = tiop->c_cc[VSUSP]; #endif #ifdef VDSUSP _rl_tty_chars.t_dsusp = tiop->c_cc[VDSUSP]; #endif #ifdef VSTART _rl_tty_chars.t_start = tiop->c_cc[VSTART]; #endif #ifdef VSTOP _rl_tty_chars.t_stop = tiop->c_cc[VSTOP]; #endif #ifdef VLNEXT _rl_tty_chars.t_lnext = tiop->c_cc[VLNEXT]; #endif #ifdef VDISCARD _rl_tty_chars.t_flush = tiop->c_cc[VDISCARD]; #endif #ifdef VSTATUS _rl_tty_chars.t_status = tiop->c_cc[VSTATUS]; #endif } #if defined (_AIX) || defined (_AIX41) /* Currently this is only used on AIX */ static void rltty_warning (msg) char *msg; { _rl_errmsg ("warning: %s", msg); } #endif #if defined (_AIX) void setopost(tp) TIOTYPE *tp; { if ((tp->c_oflag & OPOST) == 0) { _rl_errmsg ("warning: turning on OPOST for terminal\r"); tp->c_oflag |= OPOST|ONLCR; } } #endif static int _get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { int ioctl_ret; while (1) { ioctl_ret = GETATTR (tty, tiop); if (ioctl_ret < 0) { if (errno != EINTR) return -1; else continue; } if (OUTPUT_BEING_FLUSHED (tiop)) { #if defined (FLUSHO) _rl_errmsg ("warning: turning off output flushing"); tiop->c_lflag &= ~FLUSHO; break; #else continue; #endif } break; } return 0; } static int get_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { set_winsize (tty); errno = 0; if (_get_tty_settings (tty, tiop) < 0) return -1; #if defined (_AIX) setopost(tiop); #endif return 0; } static int _set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { while (SETATTR (tty, tiop) < 0) { if (errno != EINTR) return -1; errno = 0; } return 0; } static int set_tty_settings (tty, tiop) int tty; TIOTYPE *tiop; { if (_set_tty_settings (tty, tiop) < 0) return -1; #if 0 #if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) if (ksrflow) { ksrflow = 0; tcflow (tty, TCOON); } # else /* !ksr1 */ tcflow (tty, TCOON); /* Simulate a ^Q. */ # endif /* !ksr1 */ #else ioctl (tty, TCXONC, 1); /* Simulate a ^Q. */ #endif /* !TERMIOS_TTY_DRIVER */ #endif /* 0 */ return 0; } static void prepare_terminal_settings (meta_flag, oldtio, tiop) int meta_flag; TIOTYPE oldtio, *tiop; { _rl_echoing_p = (oldtio.c_lflag & ECHO); #if defined (ECHOCTL) _rl_echoctl = (oldtio.c_lflag & ECHOCTL); #endif tiop->c_lflag &= ~(ICANON | ECHO); if ((unsigned char) oldtio.c_cc[VEOF] != (unsigned char) _POSIX_VDISABLE) _rl_eof_char = oldtio.c_cc[VEOF]; #if defined (USE_XON_XOFF) #if defined (IXANY) tiop->c_iflag &= ~(IXON | IXANY); #else /* `strict' Posix systems do not define IXANY. */ tiop->c_iflag &= ~IXON; #endif /* IXANY */ #endif /* USE_XON_XOFF */ /* Only turn this off if we are using all 8 bits. */ if (((tiop->c_cflag & CSIZE) == CS8) || meta_flag) tiop->c_iflag &= ~(ISTRIP | INPCK); /* Make sure we differentiate between CR and NL on input. */ tiop->c_iflag &= ~(ICRNL | INLCR); #if !defined (HANDLE_SIGNALS) tiop->c_lflag &= ~ISIG; #else tiop->c_lflag |= ISIG; #endif tiop->c_cc[VMIN] = 1; tiop->c_cc[VTIME] = 0; #if defined (FLUSHO) if (OUTPUT_BEING_FLUSHED (tiop)) { tiop->c_lflag &= ~FLUSHO; oldtio.c_lflag &= ~FLUSHO; } #endif /* Turn off characters that we need on Posix systems with job control, just to be sure. This includes ^Y and ^V. This should not really be necessary. */ #if defined (TERMIOS_TTY_DRIVER) && defined (_POSIX_VDISABLE) #if defined (VLNEXT) tiop->c_cc[VLNEXT] = _POSIX_VDISABLE; #endif #if defined (VDSUSP) tiop->c_cc[VDSUSP] = _POSIX_VDISABLE; #endif #endif /* TERMIOS_TTY_DRIVER && _POSIX_VDISABLE */ } #endif /* !NEW_TTY_DRIVER */ /* Put the terminal in CBREAK mode so that we can detect key presses. */ #if defined (NO_TTY_DRIVER) void rl_prep_terminal (meta_flag) int meta_flag; { _rl_echoing_p = 1; } void rl_deprep_terminal () { } #else /* ! NO_TTY_DRIVER */ void rl_prep_terminal (meta_flag) int meta_flag; { int tty, nprep; TIOTYPE tio; if (terminal_prepped) return; /* Try to keep this function from being INTerrupted. */ _rl_block_sigint (); tty = rl_instream ? fileno (rl_instream) : fileno (stdin); if (get_tty_settings (tty, &tio) < 0) { #if defined (ENOTSUP) /* MacOS X and Linux, at least, lie about the value of errno if tcgetattr fails. */ if (errno == ENOTTY || errno == EINVAL || errno == ENOTSUP) #else if (errno == ENOTTY || errno == EINVAL) #endif _rl_echoing_p = 1; /* XXX */ _rl_release_sigint (); return; } otio = tio; if (_rl_bind_stty_chars) { #if defined (VI_MODE) /* If editing in vi mode, make sure we restore the bindings in the insertion keymap no matter what keymap we ended up in. */ if (rl_editing_mode == vi_mode) rl_tty_unset_default_bindings (vi_insertion_keymap); else #endif rl_tty_unset_default_bindings (_rl_keymap); } save_tty_chars (&otio); RL_SETSTATE(RL_STATE_TTYCSAVED); if (_rl_bind_stty_chars) { #if defined (VI_MODE) /* If editing in vi mode, make sure we set the bindings in the insertion keymap no matter what keymap we ended up in. */ if (rl_editing_mode == vi_mode) _rl_bind_tty_special_chars (vi_insertion_keymap, tio); else #endif _rl_bind_tty_special_chars (_rl_keymap, tio); } prepare_terminal_settings (meta_flag, otio, &tio); if (set_tty_settings (tty, &tio) < 0) { _rl_release_sigint (); return; } if (_rl_enable_keypad) _rl_control_keypad (1); nprep = TPX_PREPPED; if (_rl_enable_bracketed_paste) { fprintf (rl_outstream, BRACK_PASTE_INIT); nprep |= TPX_BRACKPASTE; } fflush (rl_outstream); terminal_prepped = nprep; RL_SETSTATE(RL_STATE_TERMPREPPED); _rl_release_sigint (); } /* Restore the terminal's normal settings and modes. */ void rl_deprep_terminal () { int tty; if (terminal_prepped == 0) return; /* Try to keep this function from being interrupted. */ _rl_block_sigint (); tty = rl_instream ? fileno (rl_instream) : fileno (stdin); if (terminal_prepped & TPX_BRACKPASTE) fprintf (rl_outstream, BRACK_PASTE_FINI); if (_rl_enable_keypad) _rl_control_keypad (0); fflush (rl_outstream); if (set_tty_settings (tty, &otio) < 0) { _rl_release_sigint (); return; } terminal_prepped = 0; RL_UNSETSTATE(RL_STATE_TERMPREPPED); _rl_release_sigint (); } #endif /* !NO_TTY_DRIVER */ /* Set readline's idea of whether or not it is echoing output to the terminal, returning the old value. */ int rl_tty_set_echoing (u) int u; { int o; o = _rl_echoing_p; _rl_echoing_p = u; return o; } /* **************************************************************** */ /* */ /* Bogus Flow Control */ /* */ /* **************************************************************** */ int rl_restart_output (count, key) int count, key; { #if defined (__MINGW32__) return 0; #else /* !__MING32__ */ int fildes = fileno (rl_outstream); #if defined (TIOCSTART) #if defined (apollo) ioctl (&fildes, TIOCSTART, 0); #else ioctl (fildes, TIOCSTART, 0); #endif /* apollo */ #else /* !TIOCSTART */ # if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) if (ksrflow) { ksrflow = 0; tcflow (fildes, TCOON); } # else /* !ksr1 */ tcflow (fildes, TCOON); /* Simulate a ^Q. */ # endif /* !ksr1 */ # else /* !TERMIOS_TTY_DRIVER */ # if defined (TCXONC) ioctl (fildes, TCXONC, TCOON); # endif /* TCXONC */ # endif /* !TERMIOS_TTY_DRIVER */ #endif /* !TIOCSTART */ return 0; #endif /* !__MINGW32__ */ } int rl_stop_output (count, key) int count, key; { #if defined (__MINGW32__) return 0; #else int fildes = fileno (rl_instream); #if defined (TIOCSTOP) # if defined (apollo) ioctl (&fildes, TIOCSTOP, 0); # else ioctl (fildes, TIOCSTOP, 0); # endif /* apollo */ #else /* !TIOCSTOP */ # if defined (TERMIOS_TTY_DRIVER) # if defined (__ksr1__) ksrflow = 1; # endif /* ksr1 */ tcflow (fildes, TCOOFF); # else # if defined (TCXONC) ioctl (fildes, TCXONC, TCOON); # endif /* TCXONC */ # endif /* !TERMIOS_TTY_DRIVER */ #endif /* !TIOCSTOP */ return 0; #endif /* !__MINGW32__ */ } /* **************************************************************** */ /* */ /* Default Key Bindings */ /* */ /* **************************************************************** */ #if !defined (NO_TTY_DRIVER) #define SET_SPECIAL(sc, func) set_special_char(kmap, &ttybuff, sc, func) #endif #if defined (NO_TTY_DRIVER) #define SET_SPECIAL(sc, func) #define RESET_SPECIAL(c) #elif defined (NEW_TTY_DRIVER) static void set_special_char (kmap, tiop, sc, func) Keymap kmap; TIOTYPE *tiop; int sc; rl_command_func_t *func; { if (sc != -1 && kmap[(unsigned char)sc].type == ISFUNC) kmap[(unsigned char)sc].function = func; } #define RESET_SPECIAL(c) \ if (c != -1 && kmap[(unsigned char)c].type == ISFUNC) \ kmap[(unsigned char)c].function = rl_insert; static void _rl_bind_tty_special_chars (kmap, ttybuff) Keymap kmap; TIOTYPE ttybuff; { if (ttybuff.flags & SGTTY_SET) { SET_SPECIAL (ttybuff.sgttyb.sg_erase, rl_rubout); SET_SPECIAL (ttybuff.sgttyb.sg_kill, rl_unix_line_discard); } # if defined (TIOCGLTC) if (ttybuff.flags & LTCHARS_SET) { SET_SPECIAL (ttybuff.ltchars.t_werasc, rl_unix_word_rubout); SET_SPECIAL (ttybuff.ltchars.t_lnextc, rl_quoted_insert); } # endif /* TIOCGLTC */ } #else /* !NEW_TTY_DRIVER */ static void set_special_char (kmap, tiop, sc, func) Keymap kmap; TIOTYPE *tiop; int sc; rl_command_func_t *func; { unsigned char uc; uc = tiop->c_cc[sc]; if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) kmap[uc].function = func; } /* used later */ #define RESET_SPECIAL(uc) \ if (uc != (unsigned char)_POSIX_VDISABLE && kmap[uc].type == ISFUNC) \ kmap[uc].function = rl_insert; static void _rl_bind_tty_special_chars (kmap, ttybuff) Keymap kmap; TIOTYPE ttybuff; { SET_SPECIAL (VERASE, rl_rubout); SET_SPECIAL (VKILL, rl_unix_line_discard); # if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER) SET_SPECIAL (VLNEXT, rl_quoted_insert); # endif /* VLNEXT && TERMIOS_TTY_DRIVER */ # if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER) # if defined (VI_MODE) if (rl_editing_mode == vi_mode) SET_SPECIAL (VWERASE, rl_vi_unix_word_rubout); else # endif SET_SPECIAL (VWERASE, rl_unix_word_rubout); # endif /* VWERASE && TERMIOS_TTY_DRIVER */ } #endif /* !NEW_TTY_DRIVER */ /* Set the system's default editing characters to their readline equivalents in KMAP. Should be static, now that we have rl_tty_set_default_bindings. */ void rltty_set_default_bindings (kmap) Keymap kmap; { #if !defined (NO_TTY_DRIVER) TIOTYPE ttybuff; int tty; tty = fileno (rl_instream); if (get_tty_settings (tty, &ttybuff) == 0) _rl_bind_tty_special_chars (kmap, ttybuff); #endif } /* New public way to set the system default editing chars to their readline equivalents. */ void rl_tty_set_default_bindings (kmap) Keymap kmap; { rltty_set_default_bindings (kmap); } /* Rebind all of the tty special chars that readline worries about back to self-insert. Call this before saving the current terminal special chars with save_tty_chars(). This only works on POSIX termios or termio systems. */ void rl_tty_unset_default_bindings (kmap) Keymap kmap; { /* Don't bother before we've saved the tty special chars at least once. */ if (RL_ISSTATE(RL_STATE_TTYCSAVED) == 0) return; RESET_SPECIAL (_rl_tty_chars.t_erase); RESET_SPECIAL (_rl_tty_chars.t_kill); # if defined (VLNEXT) && defined (TERMIOS_TTY_DRIVER) RESET_SPECIAL (_rl_tty_chars.t_lnext); # endif /* VLNEXT && TERMIOS_TTY_DRIVER */ # if defined (VWERASE) && defined (TERMIOS_TTY_DRIVER) RESET_SPECIAL (_rl_tty_chars.t_werase); # endif /* VWERASE && TERMIOS_TTY_DRIVER */ } #if defined (HANDLE_SIGNALS) #if defined (NEW_TTY_DRIVER) || defined (NO_TTY_DRIVER) int _rl_disable_tty_signals () { return 0; } int _rl_restore_tty_signals () { return 0; } #else static TIOTYPE sigstty, nosigstty; static int tty_sigs_disabled = 0; int _rl_disable_tty_signals () { if (tty_sigs_disabled) return 0; if (_get_tty_settings (fileno (rl_instream), &sigstty) < 0) return -1; nosigstty = sigstty; nosigstty.c_lflag &= ~ISIG; nosigstty.c_iflag &= ~IXON; if (_set_tty_settings (fileno (rl_instream), &nosigstty) < 0) return (_set_tty_settings (fileno (rl_instream), &sigstty)); tty_sigs_disabled = 1; return 0; } int _rl_restore_tty_signals () { int r; if (tty_sigs_disabled == 0) return 0; r = _set_tty_settings (fileno (rl_instream), &sigstty); if (r == 0) tty_sigs_disabled = 0; return r; } #endif /* !NEW_TTY_DRIVER */ #endif /* HANDLE_SIGNALS */ readline-7.0/savestring.c000664 000436 000000 00000002412 11425731104 015547 0ustar00chetwheel000000 000000 /* savestring.c - function version of savestring for backwards compatibility */ /* Copyright (C) 1998,2003 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #include #ifdef HAVE_STRING_H # include #endif #include "xmalloc.h" /* Backwards compatibility, now that savestring has been removed from all `public' readline header files. */ char * savestring (s) const char *s; { char *ret; ret = (char *)xmalloc (strlen (s) + 1); strcpy (ret, s); return ret; } readline-7.0/search.c000664 000436 000024 00000040251 12651440343 014643 0ustar00chetstaff000000 000000 /* search.c - code for non-incremental searching in emacs and vi modes. */ /* Copyright (C) 1992-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #if defined (HAVE_UNISTD_H) # include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "histlib.h" #include "rlprivate.h" #include "xmalloc.h" #ifdef abs # undef abs #endif #define abs(x) (((x) >= 0) ? (x) : -(x)) _rl_search_cxt *_rl_nscxt = 0; extern HIST_ENTRY *_rl_saved_line_for_history; /* Functions imported from the rest of the library. */ extern void _rl_free_history_entry PARAMS((HIST_ENTRY *)); static char *noninc_search_string = (char *) NULL; static int noninc_history_pos; static char *prev_line_found = (char *) NULL; static int rl_history_search_len; static int rl_history_search_pos; static int rl_history_search_flags; static char *history_search_string; static int history_string_size; static void make_history_line_current PARAMS((HIST_ENTRY *)); static int noninc_search_from_pos PARAMS((char *, int, int)); static int noninc_dosearch PARAMS((char *, int)); static int noninc_search PARAMS((int, int)); static int rl_history_search_internal PARAMS((int, int)); static void rl_history_search_reinit PARAMS((int)); static _rl_search_cxt *_rl_nsearch_init PARAMS((int, int)); static void _rl_nsearch_abort PARAMS((_rl_search_cxt *)); static int _rl_nsearch_dispatch PARAMS((_rl_search_cxt *, int)); /* Make the data from the history entry ENTRY be the contents of the current line. This doesn't do anything with rl_point; the caller must set it. */ static void make_history_line_current (entry) HIST_ENTRY *entry; { _rl_replace_text (entry->line, 0, rl_end); _rl_fix_point (1); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) /* POSIX.2 says that the `U' command doesn't affect the copy of any command lines to the edit line. We're going to implement that by making the undo list start after the matching line is copied to the current editing buffer. */ rl_free_undo_list (); #endif if (_rl_saved_line_for_history) _rl_free_history_entry (_rl_saved_line_for_history); _rl_saved_line_for_history = (HIST_ENTRY *)NULL; } /* Search the history list for STRING starting at absolute history position POS. If STRING begins with `^', the search must match STRING at the beginning of a history line, otherwise a full substring match is performed for STRING. DIR < 0 means to search backwards through the history list, DIR >= 0 means to search forward. */ static int noninc_search_from_pos (string, pos, dir) char *string; int pos, dir; { int ret, old; if (pos < 0) return -1; old = where_history (); if (history_set_pos (pos) == 0) return -1; RL_SETSTATE(RL_STATE_SEARCH); if (*string == '^') ret = history_search_prefix (string + 1, dir); else ret = history_search (string, dir); RL_UNSETSTATE(RL_STATE_SEARCH); if (ret != -1) ret = where_history (); history_set_pos (old); return (ret); } /* Search for a line in the history containing STRING. If DIR is < 0, the search is backwards through previous entries, else through subsequent entries. Returns 1 if the search was successful, 0 otherwise. */ static int noninc_dosearch (string, dir) char *string; int dir; { int oldpos, pos; HIST_ENTRY *entry; if (string == 0 || *string == '\0' || noninc_history_pos < 0) { rl_ding (); return 0; } pos = noninc_search_from_pos (string, noninc_history_pos + dir, dir); if (pos == -1) { /* Search failed, current history position unchanged. */ rl_maybe_unsave_line (); rl_clear_message (); rl_point = 0; rl_ding (); return 0; } noninc_history_pos = pos; oldpos = where_history (); history_set_pos (noninc_history_pos); entry = current_history (); /* will never be NULL after successful search */ #if defined (VI_MODE) if (rl_editing_mode != vi_mode) #endif history_set_pos (oldpos); make_history_line_current (entry); rl_point = 0; rl_mark = rl_end; rl_clear_message (); return 1; } static _rl_search_cxt * _rl_nsearch_init (dir, pchar) int dir, pchar; { _rl_search_cxt *cxt; char *p; cxt = _rl_scxt_alloc (RL_SEARCH_NSEARCH, 0); if (dir < 0) cxt->sflags |= SF_REVERSE; /* not strictly needed */ cxt->direction = dir; cxt->history_pos = cxt->save_line; rl_maybe_save_line (); /* Clear the undo list, since reading the search string should create its own undo list, and the whole list will end up being freed when we finish reading the search string. */ rl_undo_list = 0; /* Use the line buffer to read the search string. */ rl_line_buffer[0] = 0; rl_end = rl_point = 0; p = _rl_make_prompt_for_search (pchar ? pchar : ':'); rl_message ("%s", p); xfree (p); RL_SETSTATE(RL_STATE_NSEARCH); _rl_nscxt = cxt; return cxt; } int _rl_nsearch_cleanup (cxt, r) _rl_search_cxt *cxt; int r; { _rl_scxt_dispose (cxt, 0); _rl_nscxt = 0; RL_UNSETSTATE(RL_STATE_NSEARCH); return (r != 1); } static void _rl_nsearch_abort (cxt) _rl_search_cxt *cxt; { rl_maybe_unsave_line (); rl_clear_message (); rl_point = cxt->save_point; rl_mark = cxt->save_mark; rl_restore_prompt (); RL_UNSETSTATE (RL_STATE_NSEARCH); } /* Process just-read character C according to search context CXT. Return -1 if the caller should abort the search, 0 if we should break out of the loop, and 1 if we should continue to read characters. */ static int _rl_nsearch_dispatch (cxt, c) _rl_search_cxt *cxt; int c; { switch (c) { case CTRL('W'): rl_unix_word_rubout (1, c); break; case CTRL('U'): rl_unix_line_discard (1, c); break; case RETURN: case NEWLINE: return 0; case CTRL('H'): case RUBOUT: if (rl_point == 0) { _rl_nsearch_abort (cxt); return -1; } _rl_rubout_char (1, c); break; case CTRL('C'): case CTRL('G'): rl_ding (); _rl_nsearch_abort (cxt); return -1; default: #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (cxt->mb); else #endif _rl_insert_char (1, c); break; } (*rl_redisplay_function) (); return 1; } /* Perform one search according to CXT, using NONINC_SEARCH_STRING. Return -1 if the search should be aborted, any other value means to clean up using _rl_nsearch_cleanup (). Returns 1 if the search was successful, 0 otherwise. */ static int _rl_nsearch_dosearch (cxt) _rl_search_cxt *cxt; { rl_mark = cxt->save_mark; /* If rl_point == 0, we want to re-use the previous search string and start from the saved history position. If there's no previous search string, punt. */ if (rl_point == 0) { if (noninc_search_string == 0) { rl_ding (); rl_restore_prompt (); RL_UNSETSTATE (RL_STATE_NSEARCH); return -1; } } else { /* We want to start the search from the current history position. */ noninc_history_pos = cxt->save_line; FREE (noninc_search_string); noninc_search_string = savestring (rl_line_buffer); /* If we don't want the subsequent undo list generated by the search matching a history line to include the contents of the search string, we need to clear rl_line_buffer here. For now, we just clear the undo list generated by reading the search string. (If the search fails, the old undo list will be restored by rl_maybe_unsave_line.) */ rl_free_undo_list (); } rl_restore_prompt (); return (noninc_dosearch (noninc_search_string, cxt->direction)); } /* Search non-interactively through the history list. DIR < 0 means to search backwards through the history of previous commands; otherwise the search is for commands subsequent to the current position in the history list. PCHAR is the character to use for prompting when reading the search string; if not specified (0), it defaults to `:'. */ static int noninc_search (dir, pchar) int dir; int pchar; { _rl_search_cxt *cxt; int c, r; cxt = _rl_nsearch_init (dir, pchar); if (RL_ISSTATE (RL_STATE_CALLBACK)) return (0); /* Read the search string. */ r = 0; while (1) { c = _rl_search_getchar (cxt); if (c == 0) break; r = _rl_nsearch_dispatch (cxt, c); if (r < 0) return 1; else if (r == 0) break; } r = _rl_nsearch_dosearch (cxt); return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1)); } /* Search forward through the history list for a string. If the vi-mode code calls this, KEY will be `?'. */ int rl_noninc_forward_search (count, key) int count, key; { return noninc_search (1, (key == '?') ? '?' : 0); } /* Reverse search the history list for a string. If the vi-mode code calls this, KEY will be `/'. */ int rl_noninc_reverse_search (count, key) int count, key; { return noninc_search (-1, (key == '/') ? '/' : 0); } /* Search forward through the history list for the last string searched for. If there is no saved search string, abort. */ int rl_noninc_forward_search_again (count, key) int count, key; { int r; if (!noninc_search_string) { rl_ding (); return (1); } r = noninc_dosearch (noninc_search_string, 1); return (r != 1); } /* Reverse search in the history list for the last string searched for. If there is no saved search string, abort. */ int rl_noninc_reverse_search_again (count, key) int count, key; { int r; if (!noninc_search_string) { rl_ding (); return (1); } r = noninc_dosearch (noninc_search_string, -1); return (r != 1); } #if defined (READLINE_CALLBACKS) int _rl_nsearch_callback (cxt) _rl_search_cxt *cxt; { int c, r; c = _rl_search_getchar (cxt); r = _rl_nsearch_dispatch (cxt, c); if (r != 0) return 1; r = _rl_nsearch_dosearch (cxt); return ((r >= 0) ? _rl_nsearch_cleanup (cxt, r) : (r != 1)); } #endif static int rl_history_search_internal (count, dir) int count, dir; { HIST_ENTRY *temp; int ret, oldpos; char *t; rl_maybe_save_line (); temp = (HIST_ENTRY *)NULL; /* Search COUNT times through the history for a line matching history_search_string. If history_search_string[0] == '^', the line must match from the start; otherwise any substring can match. When this loop finishes, TEMP, if non-null, is the history line to copy into the line buffer. */ while (count) { RL_CHECK_SIGNALS (); ret = noninc_search_from_pos (history_search_string, rl_history_search_pos + dir, dir); if (ret == -1) break; /* Get the history entry we found. */ rl_history_search_pos = ret; oldpos = where_history (); history_set_pos (rl_history_search_pos); temp = current_history (); /* will never be NULL after successful search */ history_set_pos (oldpos); /* Don't find multiple instances of the same line. */ if (prev_line_found && STREQ (prev_line_found, temp->line)) continue; prev_line_found = temp->line; count--; } /* If we didn't find anything at all, return. */ if (temp == 0) { rl_maybe_unsave_line (); rl_ding (); /* If you don't want the saved history line (last match) to show up in the line buffer after the search fails, change the #if 0 to #if 1 */ #if 0 if (rl_point > rl_history_search_len) { rl_point = rl_end = rl_history_search_len; rl_line_buffer[rl_end] = '\0'; rl_mark = 0; } #else rl_point = rl_history_search_len; /* rl_maybe_unsave_line changes it */ rl_mark = rl_end; #endif return 1; } /* Copy the line we found into the current line buffer. */ make_history_line_current (temp); if (rl_history_search_flags & ANCHORED_SEARCH) rl_point = rl_history_search_len; /* easy case */ else { t = strstr (rl_line_buffer, history_search_string); rl_point = t ? (int)(t - rl_line_buffer) + rl_history_search_len : rl_end; } rl_mark = rl_end; return 0; } static void rl_history_search_reinit (flags) int flags; { int sind; rl_history_search_pos = where_history (); rl_history_search_len = rl_point; rl_history_search_flags = flags; prev_line_found = (char *)NULL; if (rl_point) { /* Allocate enough space for anchored and non-anchored searches */ if (rl_history_search_len >= history_string_size - 2) { history_string_size = rl_history_search_len + 2; history_search_string = (char *)xrealloc (history_search_string, history_string_size); } sind = 0; if (flags & ANCHORED_SEARCH) history_search_string[sind++] = '^'; strncpy (history_search_string + sind, rl_line_buffer, rl_point); history_search_string[rl_point + sind] = '\0'; } _rl_free_saved_history_line (); } /* Search forward in the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. The search is anchored to the beginning of the history line. */ int rl_history_search_forward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_search_forward && rl_last_func != rl_history_search_backward) rl_history_search_reinit (ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_next_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1)); } /* Search backward through the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. */ int rl_history_search_backward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_search_forward && rl_last_func != rl_history_search_backward) rl_history_search_reinit (ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_previous_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1)); } /* Search forward in the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. The search succeeds if the search string is present anywhere in the history line. */ int rl_history_substr_search_forward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_substr_search_forward && rl_last_func != rl_history_substr_search_backward) rl_history_search_reinit (NON_ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_next_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? 1 : -1)); } /* Search backward through the history for the string of characters from the start of the line to rl_point. This is a non-incremental search. */ int rl_history_substr_search_backward (count, ignore) int count, ignore; { if (count == 0) return (0); if (rl_last_func != rl_history_substr_search_forward && rl_last_func != rl_history_substr_search_backward) rl_history_search_reinit (NON_ANCHORED_SEARCH); if (rl_history_search_len == 0) return (rl_get_previous_history (count, ignore)); return (rl_history_search_internal (abs (count), (count > 0) ? -1 : 1)); } readline-7.0/shell.c000664 000436 000024 00000011276 12120105134 014475 0ustar00chetstaff000000 000000 /* shell.c -- readline utility functions that are normally provided by bash when readline is linked as part of the shell. */ /* Copyright (C) 1997-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_STRING_H) # include #else # include #endif /* !HAVE_STRING_H */ #if defined (HAVE_LIMITS_H) # include #endif #if defined (HAVE_FCNTL_H) #include #endif #if defined (HAVE_PWD_H) #include #endif #include #include "rlstdc.h" #include "rlshell.h" #include "rldefs.h" #include "xmalloc.h" #if defined (HAVE_GETPWUID) && !defined (HAVE_GETPW_DECLS) extern struct passwd *getpwuid PARAMS((uid_t)); #endif /* HAVE_GETPWUID && !HAVE_GETPW_DECLS */ #ifndef NULL # define NULL 0 #endif #ifndef CHAR_BIT # define CHAR_BIT 8 #endif /* Nonzero if the integer type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Bound on length of the string representing an integer value of type T. Subtract one for the sign bit if T is signed; 302 / 1000 is log10 (2) rounded up; add one for integer division truncation; add one more for a minus sign if t is signed. */ #define INT_STRLEN_BOUND(t) \ ((sizeof (t) * CHAR_BIT - TYPE_SIGNED (t)) * 302 / 1000 \ + 1 + TYPE_SIGNED (t)) /* All of these functions are resolved from bash if we are linking readline as part of bash. */ /* Does shell-like quoting using single quotes. */ char * sh_single_quote (string) char *string; { register int c; char *result, *r, *s; result = (char *)xmalloc (3 + (4 * strlen (string))); r = result; *r++ = '\''; for (s = string; s && (c = *s); s++) { *r++ = c; if (c == '\'') { *r++ = '\\'; /* insert escaped single quote */ *r++ = '\''; *r++ = '\''; /* start new quoted string */ } } *r++ = '\''; *r = '\0'; return (result); } /* Set the environment variables LINES and COLUMNS to lines and cols, respectively. */ static char setenv_buf[INT_STRLEN_BOUND (int) + 1]; static char putenv_buf1[INT_STRLEN_BOUND (int) + 6 + 1]; /* sizeof("LINES=") == 6 */ static char putenv_buf2[INT_STRLEN_BOUND (int) + 8 + 1]; /* sizeof("COLUMNS=") == 8 */ void sh_set_lines_and_columns (lines, cols) int lines, cols; { #if defined (HAVE_SETENV) sprintf (setenv_buf, "%d", lines); setenv ("LINES", setenv_buf, 1); sprintf (setenv_buf, "%d", cols); setenv ("COLUMNS", setenv_buf, 1); #else /* !HAVE_SETENV */ # if defined (HAVE_PUTENV) sprintf (putenv_buf1, "LINES=%d", lines); putenv (putenv_buf1); sprintf (putenv_buf2, "COLUMNS=%d", cols); putenv (putenv_buf2); # endif /* HAVE_PUTENV */ #endif /* !HAVE_SETENV */ } char * sh_get_env_value (varname) const char *varname; { return ((char *)getenv (varname)); } char * sh_get_home_dir () { static char *home_dir = (char *)NULL; struct passwd *entry; if (home_dir) return (home_dir); home_dir = (char *)NULL; #if defined (HAVE_GETPWUID) # if defined (__TANDEM) entry = getpwnam (getlogin ()); # else entry = getpwuid (getuid ()); # endif if (entry) home_dir = savestring (entry->pw_dir); #endif #if defined (HAVE_GETPWENT) endpwent (); /* some systems need this */ #endif return (home_dir); } #if !defined (O_NDELAY) # if defined (FNDELAY) # define O_NDELAY FNDELAY # endif #endif int sh_unset_nodelay_mode (fd) int fd; { #if defined (HAVE_FCNTL) int flags, bflags; if ((flags = fcntl (fd, F_GETFL, 0)) < 0) return -1; bflags = 0; #ifdef O_NONBLOCK bflags |= O_NONBLOCK; #endif #ifdef O_NDELAY bflags |= O_NDELAY; #endif if (flags & bflags) { flags &= ~bflags; return (fcntl (fd, F_SETFL, flags)); } #endif return 0; } readline-7.0/signals.c000644 000436 000024 00000046003 12760033003 015025 0ustar00chetstaff000000 000000 /* signals.c -- signal handling support for readline. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include /* Just for NULL. Yuck. */ #include #include #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ /* System-specific feature definitions and include files. */ #include "rldefs.h" #if defined (GWINSZ_IN_SYS_IOCTL) # include #endif /* GWINSZ_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #if defined (HANDLE_SIGNALS) #if !defined (RETSIGTYPE) # if defined (VOID_SIGHANDLER) # define RETSIGTYPE void # else # define RETSIGTYPE int # endif /* !VOID_SIGHANDLER */ #endif /* !RETSIGTYPE */ #if defined (VOID_SIGHANDLER) # define SIGHANDLER_RETURN return #else # define SIGHANDLER_RETURN return (0) #endif /* This typedef is equivalent to the one for Function; it allows us to say SigHandler *foo = signal (SIGKILL, SIG_IGN); */ typedef RETSIGTYPE SigHandler (); #if defined (HAVE_POSIX_SIGNALS) typedef struct sigaction sighandler_cxt; # define rl_sigaction(s, nh, oh) sigaction(s, nh, oh) #else typedef struct { SigHandler *sa_handler; int sa_mask, sa_flags; } sighandler_cxt; # define sigemptyset(m) #endif /* !HAVE_POSIX_SIGNALS */ #ifndef SA_RESTART # define SA_RESTART 0 #endif static SigHandler *rl_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); static void rl_maybe_set_sighandler PARAMS((int, SigHandler *, sighandler_cxt *)); static void rl_maybe_restore_sighandler PARAMS((int, sighandler_cxt *)); static RETSIGTYPE rl_signal_handler PARAMS((int)); static RETSIGTYPE _rl_handle_signal PARAMS((int)); /* Exported variables for use by applications. */ /* If non-zero, readline will install its own signal handlers for SIGINT, SIGTERM, SIGHUP, SIGQUIT, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU. */ int rl_catch_signals = 1; /* If non-zero, readline will install a signal handler for SIGWINCH. */ #ifdef SIGWINCH int rl_catch_sigwinch = 1; #else int rl_catch_sigwinch = 0; /* for the readline state struct in readline.c */ #endif /* Private variables. */ int _rl_interrupt_immediately = 0; int volatile _rl_caught_signal = 0; /* should be sig_atomic_t, but that requires including everywhere */ /* If non-zero, print characters corresponding to received signals as long as the user has indicated his desire to do so (_rl_echo_control_chars). */ int _rl_echoctl = 0; int _rl_intr_char = 0; int _rl_quit_char = 0; int _rl_susp_char = 0; static int signals_set_flag; static int sigwinch_set_flag; /* **************************************************************** */ /* */ /* Signal Handling */ /* */ /* **************************************************************** */ static sighandler_cxt old_int, old_term, old_hup, old_alrm, old_quit; #if defined (SIGTSTP) static sighandler_cxt old_tstp, old_ttou, old_ttin; #endif #if defined (SIGWINCH) static sighandler_cxt old_winch; #endif _rl_sigcleanup_func_t *_rl_sigcleanup; void *_rl_sigcleanarg; /* Readline signal handler functions. */ /* Called from RL_CHECK_SIGNALS() macro */ RETSIGTYPE _rl_signal_handler (sig) int sig; { _rl_caught_signal = 0; /* XXX */ #if defined (SIGWINCH) if (sig == SIGWINCH) { rl_resize_terminal (); /* XXX - experimental for now */ /* Call a signal hook because though we called the original signal handler in rl_sigwinch_handler below, we will not resend the signal to ourselves. */ if (rl_signal_event_hook) (*rl_signal_event_hook) (); } else #endif _rl_handle_signal (sig); SIGHANDLER_RETURN; } static RETSIGTYPE rl_signal_handler (sig) int sig; { if (_rl_interrupt_immediately) { _rl_interrupt_immediately = 0; _rl_handle_signal (sig); } else _rl_caught_signal = sig; SIGHANDLER_RETURN; } static RETSIGTYPE _rl_handle_signal (sig) int sig; { #if defined (HAVE_POSIX_SIGNALS) sigset_t set; #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) long omask; # else /* !HAVE_BSD_SIGNALS */ sighandler_cxt dummy_cxt; /* needed for rl_set_sighandler call */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ RL_SETSTATE(RL_STATE_SIGHANDLER); #if !defined (HAVE_BSD_SIGNALS) && !defined (HAVE_POSIX_SIGNALS) /* Since the signal will not be blocked while we are in the signal handler, ignore it until rl_clear_signals resets the catcher. */ # if defined (SIGALRM) if (sig == SIGINT || sig == SIGALRM) # else if (sig == SIGINT) # endif rl_set_sighandler (sig, SIG_IGN, &dummy_cxt); #endif /* !HAVE_BSD_SIGNALS && !HAVE_POSIX_SIGNALS */ /* If there's a sig cleanup function registered, call it and `deregister' the cleanup function to avoid multiple calls */ if (_rl_sigcleanup) { (*_rl_sigcleanup) (sig, _rl_sigcleanarg); _rl_sigcleanup = 0; _rl_sigcleanarg = 0; } switch (sig) { case SIGINT: _rl_reset_completion_state (); rl_free_line_state (); #if defined (READLINE_CALLBACKS) rl_callback_sigcleanup (); #endif /* FALLTHROUGH */ #if defined (SIGTSTP) case SIGTSTP: case SIGTTIN: # if defined (HAVE_POSIX_SIGNALS) /* Block SIGTTOU so we can restore the terminal settings to something sane without stopping on SIGTTOU if we have been placed into the background. Even trying to get the current terminal pgrp with tcgetpgrp() will generate SIGTTOU, so we don't bother. Don't bother doing this if we've been stopped on SIGTTOU; it's aready too late. */ sigemptyset (&set); sigaddset (&set, SIGTTOU); sigprocmask (SIG_BLOCK, &set, (sigset_t *)NULL); # endif case SIGTTOU: #endif /* SIGTSTP */ case SIGTERM: #if defined (SIGHUP) case SIGHUP: #endif #if defined (SIGALRM) case SIGALRM: #endif #if defined (SIGQUIT) case SIGQUIT: #endif rl_echo_signal_char (sig); rl_cleanup_after_signal (); #if defined (HAVE_POSIX_SIGNALS) /* Unblock SIGTTOU blocked above */ if (sig == SIGTTIN || sig == SIGTSTP) sigprocmask (SIG_UNBLOCK, &set, (sigset_t *)NULL); sigemptyset (&set); sigprocmask (SIG_BLOCK, (sigset_t *)NULL, &set); sigdelset (&set, sig); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) omask = sigblock (0); # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #if defined (__EMX__) signal (sig, SIG_ACK); #endif #if defined (HAVE_KILL) kill (getpid (), sig); #else raise (sig); /* assume we have raise */ #endif /* Let the signal that we just sent through. */ #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &set, (sigset_t *)NULL); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) sigsetmask (omask & ~(sigmask (sig))); # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ rl_reset_after_signal (); } RL_UNSETSTATE(RL_STATE_SIGHANDLER); SIGHANDLER_RETURN; } #if defined (SIGWINCH) static RETSIGTYPE rl_sigwinch_handler (sig) int sig; { SigHandler *oh; #if defined (MUST_REINSTALL_SIGHANDLERS) sighandler_cxt dummy_winch; /* We don't want to change old_winch -- it holds the state of SIGWINCH disposition set by the calling application. We need this state because we call the application's SIGWINCH handler after updating our own idea of the screen size. */ rl_set_sighandler (SIGWINCH, rl_sigwinch_handler, &dummy_winch); #endif RL_SETSTATE(RL_STATE_SIGHANDLER); _rl_caught_signal = sig; /* If another sigwinch handler has been installed, call it. */ oh = (SigHandler *)old_winch.sa_handler; if (oh && oh != (SigHandler *)SIG_IGN && oh != (SigHandler *)SIG_DFL) (*oh) (sig); RL_UNSETSTATE(RL_STATE_SIGHANDLER); SIGHANDLER_RETURN; } #endif /* SIGWINCH */ /* Functions to manage signal handling. */ #if !defined (HAVE_POSIX_SIGNALS) static int rl_sigaction (sig, nh, oh) int sig; sighandler_cxt *nh, *oh; { oh->sa_handler = signal (sig, nh->sa_handler); return 0; } #endif /* !HAVE_POSIX_SIGNALS */ /* Set up a readline-specific signal handler, saving the old signal information in OHANDLER. Return the old signal handler, like signal(). */ static SigHandler * rl_set_sighandler (sig, handler, ohandler) int sig; SigHandler *handler; sighandler_cxt *ohandler; { sighandler_cxt old_handler; #if defined (HAVE_POSIX_SIGNALS) struct sigaction act; act.sa_handler = handler; # if defined (SIGWINCH) act.sa_flags = (sig == SIGWINCH) ? SA_RESTART : 0; # else act.sa_flags = 0; # endif /* SIGWINCH */ sigemptyset (&act.sa_mask); sigemptyset (&ohandler->sa_mask); sigaction (sig, &act, &old_handler); #else old_handler.sa_handler = (SigHandler *)signal (sig, handler); #endif /* !HAVE_POSIX_SIGNALS */ /* XXX -- assume we have memcpy */ /* If rl_set_signals is called twice in a row, don't set the old handler to rl_signal_handler, because that would cause infinite recursion. */ if (handler != rl_signal_handler || old_handler.sa_handler != rl_signal_handler) memcpy (ohandler, &old_handler, sizeof (sighandler_cxt)); return (ohandler->sa_handler); } /* Set disposition of SIG to HANDLER, returning old state in OHANDLER. Don't change disposition if OHANDLER indicates the signal was ignored. */ static void rl_maybe_set_sighandler (sig, handler, ohandler) int sig; SigHandler *handler; sighandler_cxt *ohandler; { sighandler_cxt dummy; SigHandler *oh; sigemptyset (&dummy.sa_mask); dummy.sa_flags = 0; oh = rl_set_sighandler (sig, handler, ohandler); if (oh == (SigHandler *)SIG_IGN) rl_sigaction (sig, ohandler, &dummy); } /* Set the disposition of SIG to HANDLER, if HANDLER->sa_handler indicates the signal was not being ignored. MUST only be called for signals whose disposition was changed using rl_maybe_set_sighandler or for which the SIG_IGN check was performed inline (e.g., SIGALRM below). */ static void rl_maybe_restore_sighandler (sig, handler) int sig; sighandler_cxt *handler; { sighandler_cxt dummy; sigemptyset (&dummy.sa_mask); dummy.sa_flags = 0; if (handler->sa_handler != SIG_IGN) rl_sigaction (sig, handler, &dummy); } int rl_set_signals () { sighandler_cxt dummy; SigHandler *oh; #if defined (HAVE_POSIX_SIGNALS) static int sigmask_set = 0; static sigset_t bset, oset; #endif #if defined (HAVE_POSIX_SIGNALS) if (rl_catch_signals && sigmask_set == 0) { sigemptyset (&bset); sigaddset (&bset, SIGINT); sigaddset (&bset, SIGTERM); #if defined (SIGHUP) sigaddset (&bset, SIGHUP); #endif #if defined (SIGQUIT) sigaddset (&bset, SIGQUIT); #endif #if defined (SIGALRM) sigaddset (&bset, SIGALRM); #endif #if defined (SIGTSTP) sigaddset (&bset, SIGTSTP); #endif #if defined (SIGTTIN) sigaddset (&bset, SIGTTIN); #endif #if defined (SIGTTOU) sigaddset (&bset, SIGTTOU); #endif sigmask_set = 1; } #endif /* HAVE_POSIX_SIGNALS */ if (rl_catch_signals && signals_set_flag == 0) { #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&oset); sigprocmask (SIG_BLOCK, &bset, &oset); #endif rl_maybe_set_sighandler (SIGINT, rl_signal_handler, &old_int); rl_maybe_set_sighandler (SIGTERM, rl_signal_handler, &old_term); #if defined (SIGHUP) rl_maybe_set_sighandler (SIGHUP, rl_signal_handler, &old_hup); #endif #if defined (SIGQUIT) rl_maybe_set_sighandler (SIGQUIT, rl_signal_handler, &old_quit); #endif #if defined (SIGALRM) oh = rl_set_sighandler (SIGALRM, rl_signal_handler, &old_alrm); if (oh == (SigHandler *)SIG_IGN) rl_sigaction (SIGALRM, &old_alrm, &dummy); #if defined (HAVE_POSIX_SIGNALS) && defined (SA_RESTART) /* If the application using readline has already installed a signal handler with SA_RESTART, SIGALRM will cause reads to be restarted automatically, so readline should just get out of the way. Since we tested for SIG_IGN above, we can just test for SIG_DFL here. */ if (oh != (SigHandler *)SIG_DFL && (old_alrm.sa_flags & SA_RESTART)) rl_sigaction (SIGALRM, &old_alrm, &dummy); #endif /* HAVE_POSIX_SIGNALS */ #endif /* SIGALRM */ #if defined (SIGTSTP) rl_maybe_set_sighandler (SIGTSTP, rl_signal_handler, &old_tstp); #endif /* SIGTSTP */ #if defined (SIGTTOU) rl_maybe_set_sighandler (SIGTTOU, rl_signal_handler, &old_ttou); #endif /* SIGTTOU */ #if defined (SIGTTIN) rl_maybe_set_sighandler (SIGTTIN, rl_signal_handler, &old_ttin); #endif /* SIGTTIN */ signals_set_flag = 1; #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &oset, (sigset_t *)NULL); #endif } #if defined (SIGWINCH) if (rl_catch_sigwinch && sigwinch_set_flag == 0) { rl_maybe_set_sighandler (SIGWINCH, rl_sigwinch_handler, &old_winch); sigwinch_set_flag = 1; } #endif /* SIGWINCH */ return 0; } int rl_clear_signals () { sighandler_cxt dummy; if (rl_catch_signals && signals_set_flag == 1) { sigemptyset (&dummy.sa_mask); /* Since rl_maybe_set_sighandler doesn't override a SIG_IGN handler, we should in theory not have to restore a handler where old_xxx.sa_handler == SIG_IGN. That's what rl_maybe_restore_sighandler does. Fewer system calls should reduce readline's per-line overhead */ rl_maybe_restore_sighandler (SIGINT, &old_int); rl_maybe_restore_sighandler (SIGTERM, &old_term); #if defined (SIGHUP) rl_maybe_restore_sighandler (SIGHUP, &old_hup); #endif #if defined (SIGQUIT) rl_maybe_restore_sighandler (SIGQUIT, &old_quit); #endif #if defined (SIGALRM) rl_maybe_restore_sighandler (SIGALRM, &old_alrm); #endif #if defined (SIGTSTP) rl_maybe_restore_sighandler (SIGTSTP, &old_tstp); #endif /* SIGTSTP */ #if defined (SIGTTOU) rl_maybe_restore_sighandler (SIGTTOU, &old_ttou); #endif /* SIGTTOU */ #if defined (SIGTTIN) rl_maybe_restore_sighandler (SIGTTIN, &old_ttin); #endif /* SIGTTIN */ signals_set_flag = 0; } #if defined (SIGWINCH) if (rl_catch_sigwinch && sigwinch_set_flag == 1) { sigemptyset (&dummy.sa_mask); rl_sigaction (SIGWINCH, &old_winch, &dummy); sigwinch_set_flag = 0; } #endif return 0; } /* Clean up the terminal and readline state after catching a signal, before resending it to the calling application. */ void rl_cleanup_after_signal () { _rl_clean_up_for_exit (); if (rl_deprep_term_function) (*rl_deprep_term_function) (); rl_clear_pending_input (); rl_clear_signals (); } /* Reset the terminal and readline state after a signal handler returns. */ void rl_reset_after_signal () { if (rl_prep_term_function) (*rl_prep_term_function) (_rl_meta_flag); rl_set_signals (); } /* Free up the readline variable line state for the current line (undo list, any partial history entry, any keyboard macros in progress, and any numeric arguments in process) after catching a signal, before calling rl_cleanup_after_signal(). */ void rl_free_line_state () { register HIST_ENTRY *entry; rl_free_undo_list (); entry = current_history (); if (entry) entry->data = (char *)NULL; _rl_kill_kbd_macro (); rl_clear_message (); _rl_reset_argument (); } int rl_pending_signal () { return (_rl_caught_signal); } #endif /* HANDLE_SIGNALS */ /* **************************************************************** */ /* */ /* SIGINT Management */ /* */ /* **************************************************************** */ #if defined (HAVE_POSIX_SIGNALS) static sigset_t sigint_set, sigint_oset; static sigset_t sigwinch_set, sigwinch_oset; #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) static int sigint_oldmask; static int sigwinch_oldmask; # endif /* HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ static int sigint_blocked; static int sigwinch_blocked; /* Cause SIGINT to not be delivered until the corresponding call to release_sigint(). */ void _rl_block_sigint () { if (sigint_blocked) return; sigint_blocked = 1; } /* Allow SIGINT to be delivered. */ void _rl_release_sigint () { if (sigint_blocked == 0) return; sigint_blocked = 0; RL_CHECK_SIGNALS (); } /* Cause SIGWINCH to not be delivered until the corresponding call to release_sigwinch(). */ void _rl_block_sigwinch () { if (sigwinch_blocked) return; #if defined (SIGWINCH) #if defined (HAVE_POSIX_SIGNALS) sigemptyset (&sigwinch_set); sigemptyset (&sigwinch_oset); sigaddset (&sigwinch_set, SIGWINCH); sigprocmask (SIG_BLOCK, &sigwinch_set, &sigwinch_oset); #else /* !HAVE_POSIX_SIGNALS */ # if defined (HAVE_BSD_SIGNALS) sigwinch_oldmask = sigblock (sigmask (SIGWINCH)); # else /* !HAVE_BSD_SIGNALS */ # if defined (HAVE_USG_SIGHOLD) sighold (SIGWINCH); # endif /* HAVE_USG_SIGHOLD */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #endif /* SIGWINCH */ sigwinch_blocked = 1; } /* Allow SIGWINCH to be delivered. */ void _rl_release_sigwinch () { if (sigwinch_blocked == 0) return; #if defined (SIGWINCH) #if defined (HAVE_POSIX_SIGNALS) sigprocmask (SIG_SETMASK, &sigwinch_oset, (sigset_t *)NULL); #else # if defined (HAVE_BSD_SIGNALS) sigsetmask (sigwinch_oldmask); # else /* !HAVE_BSD_SIGNALS */ # if defined (HAVE_USG_SIGHOLD) sigrelse (SIGWINCH); # endif /* HAVE_USG_SIGHOLD */ # endif /* !HAVE_BSD_SIGNALS */ #endif /* !HAVE_POSIX_SIGNALS */ #endif /* SIGWINCH */ sigwinch_blocked = 0; } /* **************************************************************** */ /* */ /* Echoing special control characters */ /* */ /* **************************************************************** */ void rl_echo_signal_char (sig) int sig; { char cstr[3]; int cslen, c; if (_rl_echoctl == 0 || _rl_echo_control_chars == 0) return; switch (sig) { case SIGINT: c = _rl_intr_char; break; #if defined (SIGQUIT) case SIGQUIT: c = _rl_quit_char; break; #endif #if defined (SIGTSTP) case SIGTSTP: c = _rl_susp_char; break; #endif default: return; } if (CTRL_CHAR (c) || c == RUBOUT) { cstr[0] = '^'; cstr[1] = CTRL_CHAR (c) ? UNCTRL (c) : '?'; cstr[cslen = 2] = '\0'; } else { cstr[0] = c; cstr[cslen = 1] = '\0'; } _rl_output_some_chars (cstr, cslen); } readline-7.0/terminal.c000664 000436 000024 00000047542 12651440365 015227 0ustar00chetstaff000000 000000 /* terminal.c -- controlling the terminal with termcap. */ /* Copyright (C) 1996-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include "posixstat.h" #include #if defined (HAVE_SYS_FILE_H) # include #endif /* HAVE_SYS_FILE_H */ #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #ifdef __MSDOS__ # include #endif #include "rltty.h" #if defined (HAVE_SYS_IOCTL_H) # include /* include for declaration of ioctl */ #endif #include "tcap.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" #if defined (__MINGW32__) # include # include static void _win_get_screensize PARAMS((int *, int *)); #endif #if defined (__EMX__) static void _emx_get_screensize PARAMS((int *, int *)); #endif /* If the calling application sets this to a non-zero value, readline will use the $LINES and $COLUMNS environment variables to set its idea of the window size before interrogating the kernel. */ int rl_prefer_env_winsize = 0; /* If this is non-zero, readline will set LINES and COLUMNS in the environment when it handles SIGWINCH. */ int rl_change_environment = 1; /* **************************************************************** */ /* */ /* Terminal and Termcap */ /* */ /* **************************************************************** */ #ifndef __MSDOS__ static char *term_buffer = (char *)NULL; static char *term_string_buffer = (char *)NULL; #endif static int tcap_initialized; #if !defined (__linux__) && !defined (NCURSES_VERSION) # if defined (__EMX__) || defined (NEED_EXTERN_PC) extern # endif /* __EMX__ || NEED_EXTERN_PC */ char PC, *BC, *UP; #endif /* !__linux__ && !NCURSES_VERSION */ /* Some strings to control terminal actions. These are output by tputs (). */ char *_rl_term_clreol; char *_rl_term_clrpag; char *_rl_term_cr; char *_rl_term_backspace; char *_rl_term_goto; char *_rl_term_pc; /* Non-zero if we determine that the terminal can do character insertion. */ int _rl_terminal_can_insert = 0; /* How to insert characters. */ char *_rl_term_im; char *_rl_term_ei; char *_rl_term_ic; char *_rl_term_ip; char *_rl_term_IC; /* How to delete characters. */ char *_rl_term_dc; char *_rl_term_DC; char *_rl_term_forward_char; /* How to go up a line. */ char *_rl_term_up; /* A visible bell; char if the terminal can be made to flash the screen. */ static char *_rl_visible_bell; /* Non-zero means the terminal can auto-wrap lines. */ int _rl_term_autowrap = -1; /* Non-zero means that this terminal has a meta key. */ static int term_has_meta; /* The sequences to write to turn on and off the meta key, if this terminal has one. */ static char *_rl_term_mm; static char *_rl_term_mo; /* The key sequences output by the arrow keys, if this terminal has any. */ static char *_rl_term_ku; static char *_rl_term_kd; static char *_rl_term_kr; static char *_rl_term_kl; /* How to initialize and reset the arrow keys, if this terminal has any. */ static char *_rl_term_ks; static char *_rl_term_ke; /* The key sequences sent by the Home and End keys, if any. */ static char *_rl_term_kh; static char *_rl_term_kH; static char *_rl_term_at7; /* @7 */ /* Delete key */ static char *_rl_term_kD; /* Insert key */ static char *_rl_term_kI; /* Cursor control */ static char *_rl_term_vs; /* very visible */ static char *_rl_term_ve; /* normal */ static void bind_termcap_arrow_keys PARAMS((Keymap)); /* Variables that hold the screen dimensions, used by the display code. */ int _rl_screenwidth, _rl_screenheight, _rl_screenchars; /* Non-zero means the user wants to enable the keypad. */ int _rl_enable_keypad; /* Non-zero means the user wants to enable a meta key. */ int _rl_enable_meta = 1; #if defined (__EMX__) static void _emx_get_screensize (swp, shp) int *swp, *shp; { int sz[2]; _scrsize (sz); if (swp) *swp = sz[0]; if (shp) *shp = sz[1]; } #endif #if defined (__MINGW32__) static void _win_get_screensize (swp, shp) int *swp, *shp; { HANDLE hConOut; CONSOLE_SCREEN_BUFFER_INFO scr; hConOut = GetStdHandle (STD_OUTPUT_HANDLE); if (hConOut != INVALID_HANDLE_VALUE) { if (GetConsoleScreenBufferInfo (hConOut, &scr)) { *swp = scr.dwSize.X; *shp = scr.srWindow.Bottom - scr.srWindow.Top + 1; } } } #endif /* Get readline's idea of the screen size. TTY is a file descriptor open to the terminal. If IGNORE_ENV is true, we do not pay attention to the values of $LINES and $COLUMNS. The tests for TERM_STRING_BUFFER being non-null serve to check whether or not we have initialized termcap. */ void _rl_get_screen_size (tty, ignore_env) int tty, ignore_env; { char *ss; #if defined (TIOCGWINSZ) struct winsize window_size; #endif /* TIOCGWINSZ */ int wr, wc; wr = wc = -1; #if defined (TIOCGWINSZ) if (ioctl (tty, TIOCGWINSZ, &window_size) == 0) { wc = (int) window_size.ws_col; wr = (int) window_size.ws_row; } #endif /* TIOCGWINSZ */ #if defined (__EMX__) _emx_get_screensize (&wc, &wr); #elif defined (__MINGW32__) _win_get_screensize (&wc, &wr); #endif if (ignore_env || rl_prefer_env_winsize == 0) { _rl_screenwidth = wc; _rl_screenheight = wr; } else _rl_screenwidth = _rl_screenheight = -1; /* Environment variable COLUMNS overrides setting of "co" if IGNORE_ENV is unset. If we prefer the environment, check it first before assigning the value returned by the kernel. */ if (_rl_screenwidth <= 0) { if (ignore_env == 0 && (ss = sh_get_env_value ("COLUMNS"))) _rl_screenwidth = atoi (ss); if (_rl_screenwidth <= 0) _rl_screenwidth = wc; #if defined (__DJGPP__) if (_rl_screenwidth <= 0) _rl_screenwidth = ScreenCols (); #else if (_rl_screenwidth <= 0 && term_string_buffer) _rl_screenwidth = tgetnum ("co"); #endif } /* Environment variable LINES overrides setting of "li" if IGNORE_ENV is unset. */ if (_rl_screenheight <= 0) { if (ignore_env == 0 && (ss = sh_get_env_value ("LINES"))) _rl_screenheight = atoi (ss); if (_rl_screenheight <= 0) _rl_screenheight = wr; #if defined (__DJGPP__) if (_rl_screenheight <= 0) _rl_screenheight = ScreenRows (); #else if (_rl_screenheight <= 0 && term_string_buffer) _rl_screenheight = tgetnum ("li"); #endif } /* If all else fails, default to 80x24 terminal. */ if (_rl_screenwidth <= 1) _rl_screenwidth = 80; if (_rl_screenheight <= 0) _rl_screenheight = 24; /* If we're being compiled as part of bash, set the environment variables $LINES and $COLUMNS to new values. Otherwise, just do a pair of putenv () or setenv () calls. */ if (rl_change_environment) sh_set_lines_and_columns (_rl_screenheight, _rl_screenwidth); if (_rl_term_autowrap == 0) _rl_screenwidth--; _rl_screenchars = _rl_screenwidth * _rl_screenheight; } void _rl_set_screen_size (rows, cols) int rows, cols; { if (_rl_term_autowrap == -1) _rl_init_terminal_io (rl_terminal_name); if (rows > 0) _rl_screenheight = rows; if (cols > 0) { _rl_screenwidth = cols; if (_rl_term_autowrap == 0) _rl_screenwidth--; } if (rows > 0 || cols > 0) _rl_screenchars = _rl_screenwidth * _rl_screenheight; } void rl_set_screen_size (rows, cols) int rows, cols; { _rl_set_screen_size (rows, cols); } void rl_get_screen_size (rows, cols) int *rows, *cols; { if (rows) *rows = _rl_screenheight; if (cols) *cols = _rl_screenwidth; } void rl_reset_screen_size () { _rl_get_screen_size (fileno (rl_instream), 0); } void _rl_sigwinch_resize_terminal () { _rl_get_screen_size (fileno (rl_instream), 1); } void rl_resize_terminal () { _rl_get_screen_size (fileno (rl_instream), 1); if (_rl_echoing_p) { if (CUSTOM_REDISPLAY_FUNC ()) rl_forced_update_display (); else if (RL_ISSTATE(RL_STATE_REDISPLAYING) == 0) _rl_redisplay_after_sigwinch (); } } struct _tc_string { const char * const tc_var; char **tc_value; }; /* This should be kept sorted, just in case we decide to change the search algorithm to something smarter. */ static const struct _tc_string tc_strings[] = { { "@7", &_rl_term_at7 }, { "DC", &_rl_term_DC }, { "IC", &_rl_term_IC }, { "ce", &_rl_term_clreol }, { "cl", &_rl_term_clrpag }, { "cr", &_rl_term_cr }, { "dc", &_rl_term_dc }, { "ei", &_rl_term_ei }, { "ic", &_rl_term_ic }, { "im", &_rl_term_im }, { "kD", &_rl_term_kD }, /* delete */ { "kH", &_rl_term_kH }, /* home down ?? */ { "kI", &_rl_term_kI }, /* insert */ { "kd", &_rl_term_kd }, { "ke", &_rl_term_ke }, /* end keypad mode */ { "kh", &_rl_term_kh }, /* home */ { "kl", &_rl_term_kl }, { "kr", &_rl_term_kr }, { "ks", &_rl_term_ks }, /* start keypad mode */ { "ku", &_rl_term_ku }, { "le", &_rl_term_backspace }, { "mm", &_rl_term_mm }, { "mo", &_rl_term_mo }, { "nd", &_rl_term_forward_char }, { "pc", &_rl_term_pc }, { "up", &_rl_term_up }, { "vb", &_rl_visible_bell }, { "vs", &_rl_term_vs }, { "ve", &_rl_term_ve }, }; #define NUM_TC_STRINGS (sizeof (tc_strings) / sizeof (struct _tc_string)) /* Read the desired terminal capability strings into BP. The capabilities are described in the TC_STRINGS table. */ static void get_term_capabilities (bp) char **bp; { #if !defined (__DJGPP__) /* XXX - doesn't DJGPP have a termcap library? */ register int i; for (i = 0; i < NUM_TC_STRINGS; i++) *(tc_strings[i].tc_value) = tgetstr ((char *)tc_strings[i].tc_var, bp); #endif tcap_initialized = 1; } int _rl_init_terminal_io (terminal_name) const char *terminal_name; { const char *term; char *buffer; int tty, tgetent_ret; term = terminal_name ? terminal_name : sh_get_env_value ("TERM"); _rl_term_clrpag = _rl_term_cr = _rl_term_clreol = (char *)NULL; tty = rl_instream ? fileno (rl_instream) : 0; if (term == 0) term = "dumb"; #ifdef __MSDOS__ _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; _rl_term_mm = _rl_term_mo = (char *)NULL; _rl_terminal_can_insert = term_has_meta = _rl_term_autowrap = 0; _rl_term_cr = "\r"; _rl_term_clreol = _rl_term_clrpag = _rl_term_backspace = (char *)NULL; _rl_term_goto = _rl_term_pc = _rl_term_ip = (char *)NULL; _rl_term_ks = _rl_term_ke =_rl_term_vs = _rl_term_ve = (char *)NULL; _rl_term_kh = _rl_term_kH = _rl_term_at7 = _rl_term_kI = (char *)NULL; #if defined(HACK_TERMCAP_MOTION) _rl_term_forward_char = (char *)NULL; #endif _rl_get_screen_size (tty, 0); #else /* !__MSDOS__ */ /* I've separated this out for later work on not calling tgetent at all if the calling application has supplied a custom redisplay function, (and possibly if the application has supplied a custom input function). */ if (CUSTOM_REDISPLAY_FUNC()) { tgetent_ret = -1; } else { if (term_string_buffer == 0) term_string_buffer = (char *)xmalloc(2032); if (term_buffer == 0) term_buffer = (char *)xmalloc(4080); buffer = term_string_buffer; tgetent_ret = tgetent (term_buffer, term); } if (tgetent_ret <= 0) { FREE (term_string_buffer); FREE (term_buffer); buffer = term_buffer = term_string_buffer = (char *)NULL; _rl_term_autowrap = 0; /* used by _rl_get_screen_size */ /* Allow calling application to set default height and width, using rl_set_screen_size */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) { #if defined (__EMX__) _emx_get_screensize (&_rl_screenwidth, &_rl_screenheight); _rl_screenwidth--; #else /* !__EMX__ */ _rl_get_screen_size (tty, 0); #endif /* !__EMX__ */ } /* Defaults. */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) { _rl_screenwidth = 79; _rl_screenheight = 24; } /* Everything below here is used by the redisplay code (tputs). */ _rl_screenchars = _rl_screenwidth * _rl_screenheight; _rl_term_cr = "\r"; _rl_term_im = _rl_term_ei = _rl_term_ic = _rl_term_IC = (char *)NULL; _rl_term_up = _rl_term_dc = _rl_term_DC = _rl_visible_bell = (char *)NULL; _rl_term_ku = _rl_term_kd = _rl_term_kl = _rl_term_kr = (char *)NULL; _rl_term_kh = _rl_term_kH = _rl_term_kI = _rl_term_kD = (char *)NULL; _rl_term_ks = _rl_term_ke = _rl_term_at7 = (char *)NULL; _rl_term_mm = _rl_term_mo = (char *)NULL; _rl_term_ve = _rl_term_vs = (char *)NULL; _rl_term_forward_char = (char *)NULL; _rl_terminal_can_insert = term_has_meta = 0; /* Reasonable defaults for tgoto(). Readline currently only uses tgoto if _rl_term_IC or _rl_term_DC is defined, but just in case we change that later... */ PC = '\0'; BC = _rl_term_backspace = "\b"; UP = _rl_term_up; return 0; } get_term_capabilities (&buffer); /* Set up the variables that the termcap library expects the application to provide. */ PC = _rl_term_pc ? *_rl_term_pc : 0; BC = _rl_term_backspace; UP = _rl_term_up; if (!_rl_term_cr) _rl_term_cr = "\r"; _rl_term_autowrap = tgetflag ("am") && tgetflag ("xn"); /* Allow calling application to set default height and width, using rl_set_screen_size */ if (_rl_screenwidth <= 0 || _rl_screenheight <= 0) _rl_get_screen_size (tty, 0); /* "An application program can assume that the terminal can do character insertion if *any one of* the capabilities `IC', `im', `ic' or `ip' is provided." But we can't do anything if only `ip' is provided, so... */ _rl_terminal_can_insert = (_rl_term_IC || _rl_term_im || _rl_term_ic); /* Check to see if this terminal has a meta key and clear the capability variables if there is none. */ term_has_meta = tgetflag ("km") != 0; if (term_has_meta == 0) _rl_term_mm = _rl_term_mo = (char *)NULL; #endif /* !__MSDOS__ */ /* Attempt to find and bind the arrow keys. Do not override already bound keys in an overzealous attempt, however. */ bind_termcap_arrow_keys (emacs_standard_keymap); #if defined (VI_MODE) bind_termcap_arrow_keys (vi_movement_keymap); bind_termcap_arrow_keys (vi_insertion_keymap); #endif /* VI_MODE */ return 0; } /* Bind the arrow key sequences from the termcap description in MAP. */ static void bind_termcap_arrow_keys (map) Keymap map; { Keymap xkeymap; xkeymap = _rl_keymap; _rl_keymap = map; rl_bind_keyseq_if_unbound (_rl_term_ku, rl_get_previous_history); rl_bind_keyseq_if_unbound (_rl_term_kd, rl_get_next_history); rl_bind_keyseq_if_unbound (_rl_term_kr, rl_forward_char); rl_bind_keyseq_if_unbound (_rl_term_kl, rl_backward_char); rl_bind_keyseq_if_unbound (_rl_term_kh, rl_beg_of_line); /* Home */ rl_bind_keyseq_if_unbound (_rl_term_at7, rl_end_of_line); /* End */ rl_bind_keyseq_if_unbound (_rl_term_kD, rl_delete); _rl_keymap = xkeymap; } char * rl_get_termcap (cap) const char *cap; { register int i; if (tcap_initialized == 0) return ((char *)NULL); for (i = 0; i < NUM_TC_STRINGS; i++) { if (tc_strings[i].tc_var[0] == cap[0] && strcmp (tc_strings[i].tc_var, cap) == 0) return *(tc_strings[i].tc_value); } return ((char *)NULL); } /* Re-initialize the terminal considering that the TERM/TERMCAP variable has changed. */ int rl_reset_terminal (terminal_name) const char *terminal_name; { _rl_screenwidth = _rl_screenheight = 0; _rl_init_terminal_io (terminal_name); return 0; } /* A function for the use of tputs () */ #ifdef _MINIX void _rl_output_character_function (c) int c; { putc (c, _rl_out_stream); } #else /* !_MINIX */ int _rl_output_character_function (c) int c; { return putc (c, _rl_out_stream); } #endif /* !_MINIX */ /* Write COUNT characters from STRING to the output stream. */ void _rl_output_some_chars (string, count) const char *string; int count; { fwrite (string, 1, count, _rl_out_stream); } /* Move the cursor back. */ int _rl_backspace (count) int count; { register int i; #ifndef __MSDOS__ if (_rl_term_backspace) for (i = 0; i < count; i++) tputs (_rl_term_backspace, 1, _rl_output_character_function); else #endif for (i = 0; i < count; i++) putc ('\b', _rl_out_stream); return 0; } /* Move to the start of the next line. */ int rl_crlf () { #if defined (NEW_TTY_DRIVER) || defined (__MINT__) if (_rl_term_cr) tputs (_rl_term_cr, 1, _rl_output_character_function); #endif /* NEW_TTY_DRIVER || __MINT__ */ putc ('\n', _rl_out_stream); return 0; } /* Ring the terminal bell. */ int rl_ding () { if (_rl_echoing_p) { switch (_rl_bell_preference) { case NO_BELL: default: break; case VISIBLE_BELL: if (_rl_visible_bell) { #ifdef __DJGPP__ ScreenVisualBell (); #else tputs (_rl_visible_bell, 1, _rl_output_character_function); #endif break; } /* FALLTHROUGH */ case AUDIBLE_BELL: fprintf (stderr, "\007"); fflush (stderr); break; } return (0); } return (-1); } /* **************************************************************** */ /* */ /* Controlling the Meta Key and Keypad */ /* */ /* **************************************************************** */ static int enabled_meta = 0; /* flag indicating we enabled meta mode */ void _rl_enable_meta_key () { #if !defined (__DJGPP__) if (term_has_meta && _rl_term_mm) { tputs (_rl_term_mm, 1, _rl_output_character_function); enabled_meta = 1; } #endif } void _rl_disable_meta_key () { #if !defined (__DJGPP__) if (term_has_meta && _rl_term_mo && enabled_meta) { tputs (_rl_term_mo, 1, _rl_output_character_function); enabled_meta = 0; } #endif } void _rl_control_keypad (on) int on; { #if !defined (__DJGPP__) if (on && _rl_term_ks) tputs (_rl_term_ks, 1, _rl_output_character_function); else if (!on && _rl_term_ke) tputs (_rl_term_ke, 1, _rl_output_character_function); #endif } /* **************************************************************** */ /* */ /* Controlling the Cursor */ /* */ /* **************************************************************** */ /* Set the cursor appropriately depending on IM, which is one of the insert modes (insert or overwrite). Insert mode gets the normal cursor. Overwrite mode gets a very visible cursor. Only does anything if we have both capabilities. */ void _rl_set_cursor (im, force) int im, force; { #ifndef __MSDOS__ if (_rl_term_ve && _rl_term_vs) { if (force || im != rl_insert_mode) { if (im == RL_IM_OVERWRITE) tputs (_rl_term_vs, 1, _rl_output_character_function); else tputs (_rl_term_ve, 1, _rl_output_character_function); } } #endif } readline-7.0/text.c000664 000436 000024 00000115545 12660427742 014403 0ustar00chetstaff000000 000000 /* text.c -- text handling commands for readline. */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # include #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_LOCALE_H) # include #endif #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (__EMX__) # define INCL_DOSPROCESS # include #endif /* __EMX__ */ /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "rlshell.h" #include "xmalloc.h" /* Forward declarations. */ static int rl_change_case PARAMS((int, int)); static int _rl_char_search PARAMS((int, int, int)); #if defined (READLINE_CALLBACKS) static int _rl_insert_next_callback PARAMS((_rl_callback_generic_arg *)); static int _rl_char_search_callback PARAMS((_rl_callback_generic_arg *)); #endif /* The largest chunk of text that can be inserted in one call to rl_insert_text. Text blocks larger than this are divided. */ #define TEXT_COUNT_MAX 1024 int _rl_optimize_typeahead = 1; /* rl_insert tries to read typeahead */ /* **************************************************************** */ /* */ /* Insert and Delete */ /* */ /* **************************************************************** */ /* Insert a string of text into the line at point. This is the only way that you should do insertion. _rl_insert_char () calls this function. Returns the number of characters inserted. */ int rl_insert_text (string) const char *string; { register int i, l; l = (string && *string) ? strlen (string) : 0; if (l == 0) return 0; if (rl_end + l >= rl_line_buffer_len) rl_extend_line_buffer (rl_end + l); for (i = rl_end; i >= rl_point; i--) rl_line_buffer[i + l] = rl_line_buffer[i]; strncpy (rl_line_buffer + rl_point, string, l); /* Remember how to undo this if we aren't undoing something. */ if (_rl_doing_an_undo == 0) { /* If possible and desirable, concatenate the undos. */ if ((l == 1) && rl_undo_list && (rl_undo_list->what == UNDO_INSERT) && (rl_undo_list->end == rl_point) && (rl_undo_list->end - rl_undo_list->start < 20)) rl_undo_list->end++; else rl_add_undo (UNDO_INSERT, rl_point, rl_point + l, (char *)NULL); } rl_point += l; rl_end += l; rl_line_buffer[rl_end] = '\0'; return l; } /* Delete the string between FROM and TO. FROM is inclusive, TO is not. Returns the number of characters deleted. */ int rl_delete_text (from, to) int from, to; { register char *text; register int diff, i; /* Fix it if the caller is confused. */ if (from > to) SWAP (from, to); /* fix boundaries */ if (to > rl_end) { to = rl_end; if (from > to) from = to; } if (from < 0) from = 0; text = rl_copy_text (from, to); /* Some versions of strncpy() can't handle overlapping arguments. */ diff = to - from; for (i = from; i < rl_end - diff; i++) rl_line_buffer[i] = rl_line_buffer[i + diff]; /* Remember how to undo this delete. */ if (_rl_doing_an_undo == 0) rl_add_undo (UNDO_DELETE, from, to, text); else xfree (text); rl_end -= diff; rl_line_buffer[rl_end] = '\0'; return (diff); } /* Fix up point so that it is within the line boundaries after killing text. If FIX_MARK_TOO is non-zero, the mark is forced within line boundaries also. */ #define _RL_FIX_POINT(x) \ do { \ if (x > rl_end) \ x = rl_end; \ else if (x < 0) \ x = 0; \ } while (0) void _rl_fix_point (fix_mark_too) int fix_mark_too; { _RL_FIX_POINT (rl_point); if (fix_mark_too) _RL_FIX_POINT (rl_mark); } #undef _RL_FIX_POINT /* Replace the contents of the line buffer between START and END with TEXT. The operation is undoable. To replace the entire line in an undoable mode, use _rl_replace_text(text, 0, rl_end); */ int _rl_replace_text (text, start, end) const char *text; int start, end; { int n; n = 0; rl_begin_undo_group (); if (start <= end) rl_delete_text (start, end + 1); rl_point = start; if (*text) n = rl_insert_text (text); rl_end_undo_group (); return n; } /* Replace the current line buffer contents with TEXT. If CLEAR_UNDO is non-zero, we free the current undo list. */ void rl_replace_line (text, clear_undo) const char *text; int clear_undo; { int len; len = strlen (text); if (len >= rl_line_buffer_len) rl_extend_line_buffer (len); strcpy (rl_line_buffer, text); rl_end = len; if (clear_undo) rl_free_undo_list (); _rl_fix_point (1); } /* **************************************************************** */ /* */ /* Readline character functions */ /* */ /* **************************************************************** */ /* This is not a gap editor, just a stupid line input routine. No hair is involved in writing any of the functions, and none should be. */ /* Note that: rl_end is the place in the string that we would place '\0'; i.e., it is always safe to place '\0' there. rl_point is the place in the string where the cursor is. Sometimes this is the same as rl_end. Any command that is called interactively receives two arguments. The first is a count: the numeric arg passed to this command. The second is the key which invoked this command. */ /* **************************************************************** */ /* */ /* Movement Commands */ /* */ /* **************************************************************** */ /* Note that if you `optimize' the display for these functions, you cannot use said functions in other functions which do not do optimizing display. I.e., you will have to update the data base for rl_redisplay, and you might as well let rl_redisplay do that job. */ /* Move forward COUNT bytes. */ int rl_forward_byte (count, key) int count, key; { if (count < 0) return (rl_backward_byte (-count, key)); if (count > 0) { int end, lend; end = rl_point + count; #if defined (VI_MODE) lend = rl_end > 0 ? rl_end - (VI_COMMAND_MODE()) : rl_end; #else lend = rl_end; #endif if (end > lend) { rl_point = lend; rl_ding (); } else rl_point = end; } if (rl_end < 0) rl_end = 0; return 0; } int _rl_forward_char_internal (count) int count; { int point; #if defined (HANDLE_MULTIBYTE) point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); #if defined (VI_MODE) if (point >= rl_end && VI_COMMAND_MODE()) point = _rl_find_prev_mbchar (rl_line_buffer, rl_end, MB_FIND_NONZERO); #endif if (rl_end < 0) rl_end = 0; #else point = rl_point + count; if (point > rl_end) point = rl_end; #endif return (point); } #if defined (HANDLE_MULTIBYTE) /* Move forward COUNT characters. */ int rl_forward_char (count, key) int count, key; { int point; if (MB_CUR_MAX == 1 || rl_byte_oriented) return (rl_forward_byte (count, key)); if (count < 0) return (rl_backward_char (-count, key)); if (count > 0) { if (rl_point == rl_end && EMACS_MODE()) { rl_ding (); return 0; } point = _rl_forward_char_internal (count); if (rl_point == point) rl_ding (); rl_point = point; } return 0; } #else /* !HANDLE_MULTIBYTE */ int rl_forward_char (count, key) int count, key; { return (rl_forward_byte (count, key)); } #endif /* !HANDLE_MULTIBYTE */ /* Backwards compatibility. */ int rl_forward (count, key) int count, key; { return (rl_forward_char (count, key)); } /* Move backward COUNT bytes. */ int rl_backward_byte (count, key) int count, key; { if (count < 0) return (rl_forward_byte (-count, key)); if (count > 0) { if (rl_point < count) { rl_point = 0; rl_ding (); } else rl_point -= count; } if (rl_point < 0) rl_point = 0; return 0; } #if defined (HANDLE_MULTIBYTE) /* Move backward COUNT characters. */ int rl_backward_char (count, key) int count, key; { int point; if (MB_CUR_MAX == 1 || rl_byte_oriented) return (rl_backward_byte (count, key)); if (count < 0) return (rl_forward_char (-count, key)); if (count > 0) { point = rl_point; while (count > 0 && point > 0) { point = _rl_find_prev_mbchar (rl_line_buffer, point, MB_FIND_NONZERO); count--; } if (count > 0) { rl_point = 0; rl_ding (); } else rl_point = point; } return 0; } #else int rl_backward_char (count, key) int count, key; { return (rl_backward_byte (count, key)); } #endif /* Backwards compatibility. */ int rl_backward (count, key) int count, key; { return (rl_backward_char (count, key)); } /* Move to the beginning of the line. */ int rl_beg_of_line (count, key) int count, key; { rl_point = 0; return 0; } /* Move to the end of the line. */ int rl_end_of_line (count, key) int count, key; { rl_point = rl_end; return 0; } /* Move forward a word. We do what Emacs does. Handles multibyte chars. */ int rl_forward_word (count, key) int count, key; { int c; if (count < 0) return (rl_backward_word (-count, key)); while (count) { if (rl_point == rl_end) return 0; /* If we are not in a word, move forward until we are in one. Then, move forward until we hit a non-alphabetic character. */ c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c) == 0) { rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (rl_point < rl_end) { c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c)) break; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); } } if (rl_point == rl_end) return 0; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (rl_point < rl_end) { c = _rl_char_value (rl_line_buffer, rl_point); if (_rl_walphabetic (c) == 0) break; rl_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); } --count; } return 0; } /* Move backward a word. We do what Emacs does. Handles multibyte chars. */ int rl_backward_word (count, key) int count, key; { int c, p; if (count < 0) return (rl_forward_word (-count, key)); while (count) { if (rl_point == 0) return 0; /* Like rl_forward_word (), except that we look at the characters just before point. */ p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c) == 0) { rl_point = p; while (rl_point > 0) { p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c)) break; rl_point = p; } } while (rl_point) { p = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); c = _rl_char_value (rl_line_buffer, p); if (_rl_walphabetic (c) == 0) break; else rl_point = p; } --count; } return 0; } /* Clear the current line. Numeric argument to C-l does this. */ int rl_refresh_line (ignore1, ignore2) int ignore1, ignore2; { int curr_line; curr_line = _rl_current_display_line (); _rl_move_vert (curr_line); _rl_move_cursor_relative (0, rl_line_buffer); /* XXX is this right */ _rl_clear_to_eol (0); /* arg of 0 means to not use spaces */ rl_redraw_prompt_last_line (); rl_display_fixed = 1; return 0; } /* C-l typed to a line without quoting clears the screen, and then reprints the prompt and the current input line. Given a numeric arg, redraw only the current line. */ int rl_clear_screen (count, key) int count, key; { if (rl_explicit_arg) { rl_refresh_line (count, key); return 0; } _rl_clear_screen (); /* calls termcap function to clear screen */ rl_forced_update_display (); rl_display_fixed = 1; return 0; } int rl_skip_csi_sequence (count, key) int count, key; { int ch; RL_SETSTATE (RL_STATE_MOREINPUT); do ch = rl_read_key (); while (ch >= 0x20 && ch < 0x40); RL_UNSETSTATE (RL_STATE_MOREINPUT); return (ch < 0); } int rl_arrow_keys (count, c) int count, c; { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (ch < 0) return (1); switch (_rl_to_upper (ch)) { case 'A': rl_get_previous_history (count, ch); break; case 'B': rl_get_next_history (count, ch); break; case 'C': if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_forward_char (count, ch); else rl_forward_byte (count, ch); break; case 'D': if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_backward_char (count, ch); else rl_backward_byte (count, ch); break; default: rl_ding (); } return 0; } /* **************************************************************** */ /* */ /* Text commands */ /* */ /* **************************************************************** */ #ifdef HANDLE_MULTIBYTE static char pending_bytes[MB_LEN_MAX]; static int pending_bytes_length = 0; static mbstate_t ps = {0}; #endif /* Insert the character C at the current location, moving point forward. If C introduces a multibyte sequence, we read the whole sequence and then insert the multibyte char into the line buffer. */ int _rl_insert_char (count, c) int count, c; { register int i; char *string; #ifdef HANDLE_MULTIBYTE int string_size; char incoming[MB_LEN_MAX + 1]; int incoming_length = 0; mbstate_t ps_back; static int stored_count = 0; #endif if (count <= 0) return 0; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX == 1 || rl_byte_oriented) { incoming[0] = c; incoming[1] = '\0'; incoming_length = 1; } else { wchar_t wc; size_t ret; if (stored_count <= 0) stored_count = count; else count = stored_count; ps_back = ps; pending_bytes[pending_bytes_length++] = c; ret = mbrtowc (&wc, pending_bytes, pending_bytes_length, &ps); if (ret == (size_t)-2) { /* Bytes too short to compose character, try to wait for next byte. Restore the state of the byte sequence, because in this case the effect of mbstate is undefined. */ ps = ps_back; return 1; } else if (ret == (size_t)-1) { /* Invalid byte sequence for the current locale. Treat first byte as a single character. */ incoming[0] = pending_bytes[0]; incoming[1] = '\0'; incoming_length = 1; pending_bytes_length--; memmove (pending_bytes, pending_bytes + 1, pending_bytes_length); /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else if (ret == (size_t)0) { incoming[0] = '\0'; incoming_length = 0; pending_bytes_length--; /* Clear the state of the byte sequence, because in this case the effect of mbstate is undefined. */ memset (&ps, 0, sizeof (mbstate_t)); } else { /* We successfully read a single multibyte character. */ memcpy (incoming, pending_bytes, pending_bytes_length); incoming[pending_bytes_length] = '\0'; incoming_length = pending_bytes_length; pending_bytes_length = 0; } } #endif /* HANDLE_MULTIBYTE */ /* If we can optimize, then do it. But don't let people crash readline because of extra large arguments. */ if (count > 1 && count <= TEXT_COUNT_MAX) { #if defined (HANDLE_MULTIBYTE) string_size = count * incoming_length; string = (char *)xmalloc (1 + string_size); i = 0; while (i < string_size) { strncpy (string + i, incoming, incoming_length); i += incoming_length; } incoming_length = 0; stored_count = 0; #else /* !HANDLE_MULTIBYTE */ string = (char *)xmalloc (1 + count); for (i = 0; i < count; i++) string[i] = c; #endif /* !HANDLE_MULTIBYTE */ string[i] = '\0'; rl_insert_text (string); xfree (string); return 0; } if (count > TEXT_COUNT_MAX) { int decreaser; #if defined (HANDLE_MULTIBYTE) string_size = incoming_length * TEXT_COUNT_MAX; string = (char *)xmalloc (1 + string_size); i = 0; while (i < string_size) { strncpy (string + i, incoming, incoming_length); i += incoming_length; } while (count) { decreaser = (count > TEXT_COUNT_MAX) ? TEXT_COUNT_MAX : count; string[decreaser*incoming_length] = '\0'; rl_insert_text (string); count -= decreaser; } xfree (string); incoming_length = 0; stored_count = 0; #else /* !HANDLE_MULTIBYTE */ char str[TEXT_COUNT_MAX+1]; for (i = 0; i < TEXT_COUNT_MAX; i++) str[i] = c; while (count) { decreaser = (count > TEXT_COUNT_MAX ? TEXT_COUNT_MAX : count); str[decreaser] = '\0'; rl_insert_text (str); count -= decreaser; } #endif /* !HANDLE_MULTIBYTE */ return 0; } if (MB_CUR_MAX == 1 || rl_byte_oriented) { /* We are inserting a single character. If there is pending input, then make a string of all of the pending characters that are bound to rl_insert, and insert them all. Don't do this if we're current reading input from a macro. */ if ((RL_ISSTATE (RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available ()) _rl_insert_typein (c); else { /* Inserting a single character. */ char str[2]; str[1] = '\0'; str[0] = c; rl_insert_text (str); } } #if defined (HANDLE_MULTIBYTE) else { rl_insert_text (incoming); stored_count = 0; } #endif return 0; } /* Overwrite the character at point (or next COUNT characters) with C. If C introduces a multibyte character sequence, read the entire sequence before starting the overwrite loop. */ int _rl_overwrite_char (count, c) int count, c; { int i; #if defined (HANDLE_MULTIBYTE) char mbkey[MB_LEN_MAX]; int k; /* Read an entire multibyte character sequence to insert COUNT times. */ if (count > 0 && MB_CUR_MAX > 1 && rl_byte_oriented == 0) k = _rl_read_mbstring (c, mbkey, MB_LEN_MAX); #endif rl_begin_undo_group (); for (i = 0; i < count; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (mbkey); else #endif _rl_insert_char (1, c); if (rl_point < rl_end) rl_delete (1, c); } rl_end_undo_group (); return 0; } int rl_insert (count, c) int count, c; { int r, n, x; r = (rl_insert_mode == RL_IM_INSERT) ? _rl_insert_char (count, c) : _rl_overwrite_char (count, c); /* XXX -- attempt to batch-insert pending input that maps to self-insert */ x = 0; n = (unsigned short)-2; while (_rl_optimize_typeahead && (RL_ISSTATE (RL_STATE_INPUTPENDING|RL_STATE_MACROINPUT) == 0) && _rl_pushed_input_available () == 0 && _rl_input_queued (0) && (n = rl_read_key ()) > 0 && _rl_keymap[(unsigned char)n].type == ISFUNC && _rl_keymap[(unsigned char)n].function == rl_insert) { r = (rl_insert_mode == RL_IM_INSERT) ? _rl_insert_char (1, n) : _rl_overwrite_char (1, n); /* _rl_insert_char keeps its own set of pending characters to compose a complete multibyte character, and only returns 1 if it sees a character that's part of a multibyte character but too short to complete one. We can try to read another character in the hopes that we will get the next one or just punt. Right now we try to read another character. We don't want to call rl_insert_next if _rl_insert_char has already stored the character in the pending_bytes array because that will result in doubled input. */ n = (unsigned short)-2; x++; /* count of bytes of typeahead read, currently unused */ if (r == 1) /* read partial multibyte character */ continue; if (rl_done || r != 0) break; } if (n != (unsigned short)-2) /* -2 = sentinel value for having inserted N */ { /* setting rl_pending_input inhibits setting rl_last_func so we do it ourselves here */ rl_last_func = rl_insert; _rl_reset_argument (); rl_executing_keyseq[rl_key_sequence_length = 0] = '\0'; r = rl_execute_next (n); } return r; } /* Insert the next typed character verbatim. */ static int _rl_insert_next (count) int count; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return 1; if (RL_ISSTATE (RL_STATE_MACRODEF)) _rl_add_macro_char (c); #if defined (HANDLE_SIGNALS) if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) _rl_restore_tty_signals (); #endif return (_rl_insert_char (count, c)); } #if defined (READLINE_CALLBACKS) static int _rl_insert_next_callback (data) _rl_callback_generic_arg *data; { int count; count = data->count; /* Deregister function, let rl_callback_read_char deallocate data */ _rl_callback_func = 0; _rl_want_redisplay = 1; return _rl_insert_next (count); } #endif int rl_quoted_insert (count, key) int count, key; { /* Let's see...should the callback interface futz with signal handling? */ #if defined (HANDLE_SIGNALS) if (RL_ISSTATE (RL_STATE_CALLBACK) == 0) _rl_disable_tty_signals (); #endif #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_func = _rl_insert_next_callback; return (0); } #endif return _rl_insert_next (count); } /* Insert a tab character. */ int rl_tab_insert (count, key) int count, key; { return (_rl_insert_char (count, '\t')); } /* What to do when a NEWLINE is pressed. We accept the whole line. KEY is the key that invoked this command. I guess it could have meaning in the future. */ int rl_newline (count, key) int count, key; { rl_done = 1; if (_rl_history_preserve_point) _rl_history_saved_point = (rl_point == rl_end) ? -1 : rl_point; RL_SETSTATE(RL_STATE_DONE); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) { _rl_vi_done_inserting (); if (_rl_vi_textmod_command (_rl_vi_last_command) == 0) /* XXX */ _rl_vi_reset_last (); } #endif /* VI_MODE */ /* If we've been asked to erase empty lines, suppress the final update, since _rl_update_final calls rl_crlf(). */ if (rl_erase_empty_line && rl_point == 0 && rl_end == 0) return 0; if (_rl_echoing_p) _rl_update_final (); return 0; } /* What to do for some uppercase characters, like meta characters, and some characters appearing in emacs_ctlx_keymap. This function is just a stub, you bind keys to it and the code in _rl_dispatch () is special cased. */ int rl_do_lowercase_version (ignore1, ignore2) int ignore1, ignore2; { return 0; } /* This is different from what vi does, so the code's not shared. Emacs rubout in overwrite mode has one oddity: it replaces a control character that's displayed as two characters (^X) with two spaces. */ int _rl_overwrite_rubout (count, key) int count, key; { int opoint; int i, l; if (rl_point == 0) { rl_ding (); return 1; } opoint = rl_point; /* L == number of spaces to insert */ for (i = l = 0; i < count; i++) { rl_backward_char (1, key); l += rl_character_len (rl_line_buffer[rl_point], rl_point); /* not exactly right */ } rl_begin_undo_group (); if (count > 1 || rl_explicit_arg) rl_kill_text (opoint, rl_point); else rl_delete_text (opoint, rl_point); /* Emacs puts point at the beginning of the sequence of spaces. */ if (rl_point < rl_end) { opoint = rl_point; _rl_insert_char (l, ' '); rl_point = opoint; } rl_end_undo_group (); return 0; } /* Rubout the character behind point. */ int rl_rubout (count, key) int count, key; { if (count < 0) return (rl_delete (-count, key)); if (!rl_point) { rl_ding (); return 1; } if (rl_insert_mode == RL_IM_OVERWRITE) return (_rl_overwrite_rubout (count, key)); return (_rl_rubout_char (count, key)); } int _rl_rubout_char (count, key) int count, key; { int orig_point; unsigned char c; /* Duplicated code because this is called from other parts of the library. */ if (count < 0) return (rl_delete (-count, key)); if (rl_point == 0) { rl_ding (); return 1; } orig_point = rl_point; if (count > 1 || rl_explicit_arg) { rl_backward_char (count, key); rl_kill_text (orig_point, rl_point); } else if (MB_CUR_MAX == 1 || rl_byte_oriented) { c = rl_line_buffer[--rl_point]; rl_delete_text (rl_point, orig_point); /* The erase-at-end-of-line hack is of questionable merit now. */ if (rl_point == rl_end && ISPRINT ((unsigned char)c) && _rl_last_c_pos) { int l; l = rl_character_len (c, rl_point); _rl_erase_at_end_of_line (l); } } else { rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); rl_delete_text (rl_point, orig_point); } return 0; } /* Delete the character under the cursor. Given a numeric argument, kill that many characters instead. */ int rl_delete (count, key) int count, key; { int xpoint; if (count < 0) return (_rl_rubout_char (-count, key)); if (rl_point == rl_end) { rl_ding (); return 1; } if (count > 1 || rl_explicit_arg) { xpoint = rl_point; if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_forward_char (count, key); else rl_forward_byte (count, key); rl_kill_text (xpoint, rl_point); rl_point = xpoint; } else { xpoint = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); rl_delete_text (rl_point, xpoint); } return 0; } /* Delete the character under the cursor, unless the insertion point is at the end of the line, in which case the character behind the cursor is deleted. COUNT is obeyed and may be used to delete forward or backward that many characters. */ int rl_rubout_or_delete (count, key) int count, key; { if (rl_end != 0 && rl_point == rl_end) return (_rl_rubout_char (count, key)); else return (rl_delete (count, key)); } /* Delete all spaces and tabs around point. */ int rl_delete_horizontal_space (count, ignore) int count, ignore; { int start; while (rl_point && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; start = rl_point; while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (start != rl_point) { rl_delete_text (start, rl_point); rl_point = start; } if (rl_point < 0) rl_point = 0; return 0; } /* Like the tcsh editing function delete-char-or-list. The eof character is caught before this is invoked, so this really does the same thing as delete-char-or-list-or-eof, as long as it's bound to the eof character. */ int rl_delete_or_show_completions (count, key) int count, key; { if (rl_end != 0 && rl_point == rl_end) return (rl_possible_completions (count, key)); else return (rl_delete (count, key)); } #ifndef RL_COMMENT_BEGIN_DEFAULT #define RL_COMMENT_BEGIN_DEFAULT "#" #endif /* Turn the current line into a comment in shell history. A K*rn shell style function. */ int rl_insert_comment (count, key) int count, key; { char *rl_comment_text; int rl_comment_len; rl_beg_of_line (1, key); rl_comment_text = _rl_comment_begin ? _rl_comment_begin : RL_COMMENT_BEGIN_DEFAULT; if (rl_explicit_arg == 0) rl_insert_text (rl_comment_text); else { rl_comment_len = strlen (rl_comment_text); if (STREQN (rl_comment_text, rl_line_buffer, rl_comment_len)) rl_delete_text (rl_point, rl_point + rl_comment_len); else rl_insert_text (rl_comment_text); } (*rl_redisplay_function) (); rl_newline (1, '\n'); return (0); } /* **************************************************************** */ /* */ /* Changing Case */ /* */ /* **************************************************************** */ /* The three kinds of things that we know how to do. */ #define UpCase 1 #define DownCase 2 #define CapCase 3 /* Uppercase the word at point. */ int rl_upcase_word (count, key) int count, key; { return (rl_change_case (count, UpCase)); } /* Lowercase the word at point. */ int rl_downcase_word (count, key) int count, key; { return (rl_change_case (count, DownCase)); } /* Upcase the first letter, downcase the rest. */ int rl_capitalize_word (count, key) int count, key; { return (rl_change_case (count, CapCase)); } /* The meaty function. Change the case of COUNT words, performing OP on them. OP is one of UpCase, DownCase, or CapCase. If a negative argument is given, leave point where it started, otherwise, leave it where it moves to. */ static int rl_change_case (count, op) int count, op; { int start, next, end; int inword, c, nc, nop; #if defined (HANDLE_MULTIBYTE) wchar_t wc, nwc; char mb[MB_LEN_MAX+1]; int mlen; size_t m; mbstate_t mps; #endif start = rl_point; rl_forward_word (count, 0); end = rl_point; if (op != UpCase && op != DownCase && op != CapCase) { rl_ding (); return 1; } if (count < 0) SWAP (start, end); #if defined (HANDLE_MULTIBYTE) memset (&mps, 0, sizeof (mbstate_t)); #endif /* We are going to modify some text, so let's prepare to undo it. */ rl_modifying (start, end); inword = 0; while (start < end) { c = _rl_char_value (rl_line_buffer, start); /* This assumes that the upper and lower case versions are the same width. */ next = MB_NEXTCHAR (rl_line_buffer, start, 1, MB_FIND_NONZERO); if (_rl_walphabetic (c) == 0) { inword = 0; start = next; continue; } if (op == CapCase) { nop = inword ? DownCase : UpCase; inword = 1; } else nop = op; if (MB_CUR_MAX == 1 || rl_byte_oriented || isascii ((unsigned char)c)) { nc = (nop == UpCase) ? _rl_to_upper (c) : _rl_to_lower (c); rl_line_buffer[start] = nc; } #if defined (HANDLE_MULTIBYTE) else { m = mbrtowc (&wc, rl_line_buffer + start, end - start, &mps); if (MB_INVALIDCH (m)) wc = (wchar_t)rl_line_buffer[start]; else if (MB_NULLWCH (m)) wc = L'\0'; nwc = (nop == UpCase) ? _rl_to_wupper (wc) : _rl_to_wlower (wc); if (nwc != wc) /* just skip unchanged characters */ { mlen = wcrtomb (mb, nwc, &mps); if (mlen > 0) mb[mlen] = '\0'; /* Assume the same width */ strncpy (rl_line_buffer + start, mb, mlen); } } #endif start = next; } rl_point = end; return 0; } /* **************************************************************** */ /* */ /* Transposition */ /* */ /* **************************************************************** */ /* Transpose the words at point. If point is at the end of the line, transpose the two words before point. */ int rl_transpose_words (count, key) int count, key; { char *word1, *word2; int w1_beg, w1_end, w2_beg, w2_end; int orig_point = rl_point; if (!count) return 0; /* Find the two words. */ rl_forward_word (count, key); w2_end = rl_point; rl_backward_word (1, key); w2_beg = rl_point; rl_backward_word (count, key); w1_beg = rl_point; rl_forward_word (1, key); w1_end = rl_point; /* Do some check to make sure that there really are two words. */ if ((w1_beg == w2_beg) || (w2_beg < w1_end)) { rl_ding (); rl_point = orig_point; return 1; } /* Get the text of the words. */ word1 = rl_copy_text (w1_beg, w1_end); word2 = rl_copy_text (w2_beg, w2_end); /* We are about to do many insertions and deletions. Remember them as one operation. */ rl_begin_undo_group (); /* Do the stuff at word2 first, so that we don't have to worry about word1 moving. */ rl_point = w2_beg; rl_delete_text (w2_beg, w2_end); rl_insert_text (word1); rl_point = w1_beg; rl_delete_text (w1_beg, w1_end); rl_insert_text (word2); /* This is exactly correct since the text before this point has not changed in length. */ rl_point = w2_end; /* I think that does it. */ rl_end_undo_group (); xfree (word1); xfree (word2); return 0; } /* Transpose the characters at point. If point is at the end of the line, then transpose the characters before point. */ int rl_transpose_chars (count, key) int count, key; { #if defined (HANDLE_MULTIBYTE) char *dummy; int i; #else char dummy[2]; #endif int char_length, prev_point; if (count == 0) return 0; if (!rl_point || rl_end < 2) { rl_ding (); return 1; } rl_begin_undo_group (); if (rl_point == rl_end) { rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); count = 1; } prev_point = rl_point; rl_point = MB_PREVCHAR (rl_line_buffer, rl_point, MB_FIND_NONZERO); #if defined (HANDLE_MULTIBYTE) char_length = prev_point - rl_point; dummy = (char *)xmalloc (char_length + 1); for (i = 0; i < char_length; i++) dummy[i] = rl_line_buffer[rl_point + i]; dummy[i] = '\0'; #else dummy[0] = rl_line_buffer[rl_point]; dummy[char_length = 1] = '\0'; #endif rl_delete_text (rl_point, rl_point + char_length); rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); _rl_fix_point (0); rl_insert_text (dummy); rl_end_undo_group (); #if defined (HANDLE_MULTIBYTE) xfree (dummy); #endif return 0; } /* **************************************************************** */ /* */ /* Character Searching */ /* */ /* **************************************************************** */ int #if defined (HANDLE_MULTIBYTE) _rl_char_search_internal (count, dir, smbchar, len) int count, dir; char *smbchar; int len; #else _rl_char_search_internal (count, dir, schar) int count, dir, schar; #endif { int pos, inc; #if defined (HANDLE_MULTIBYTE) int prepos; #endif if (dir == 0) return 1; pos = rl_point; inc = (dir < 0) ? -1 : 1; while (count) { if ((dir < 0 && pos <= 0) || (dir > 0 && pos >= rl_end)) { rl_ding (); return 1; } #if defined (HANDLE_MULTIBYTE) pos = (inc > 0) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY) : _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY); #else pos += inc; #endif do { #if defined (HANDLE_MULTIBYTE) if (_rl_is_mbchar_matched (rl_line_buffer, pos, rl_end, smbchar, len)) #else if (rl_line_buffer[pos] == schar) #endif { count--; if (dir < 0) rl_point = (dir == BTO) ? _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY) : pos; else rl_point = (dir == FTO) ? _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY) : pos; break; } #if defined (HANDLE_MULTIBYTE) prepos = pos; #endif } #if defined (HANDLE_MULTIBYTE) while ((dir < 0) ? (pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY)) != prepos : (pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY)) != prepos); #else while ((dir < 0) ? pos-- : ++pos < rl_end); #endif } return (0); } /* Search COUNT times for a character read from the current input stream. FDIR is the direction to search if COUNT is non-negative; otherwise the search goes in BDIR. So much is dependent on HANDLE_MULTIBYTE that there are two separate versions of this function. */ #if defined (HANDLE_MULTIBYTE) static int _rl_char_search (count, fdir, bdir) int count, fdir, bdir; { char mbchar[MB_LEN_MAX]; int mb_len; mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX); if (mb_len <= 0) return 1; if (count < 0) return (_rl_char_search_internal (-count, bdir, mbchar, mb_len)); else return (_rl_char_search_internal (count, fdir, mbchar, mb_len)); } #else /* !HANDLE_MULTIBYTE */ static int _rl_char_search (count, fdir, bdir) int count, fdir, bdir; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return 1; if (count < 0) return (_rl_char_search_internal (-count, bdir, c)); else return (_rl_char_search_internal (count, fdir, c)); } #endif /* !HANDLE_MULTIBYTE */ #if defined (READLINE_CALLBACKS) static int _rl_char_search_callback (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_char_search (data->count, data->i1, data->i2)); } #endif int rl_char_search (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = FFIND; _rl_callback_data->i2 = BFIND; _rl_callback_func = _rl_char_search_callback; return (0); } #endif return (_rl_char_search (count, FFIND, BFIND)); } int rl_backward_char_search (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = BFIND; _rl_callback_data->i2 = FFIND; _rl_callback_func = _rl_char_search_callback; return (0); } #endif return (_rl_char_search (count, BFIND, FFIND)); } /* **************************************************************** */ /* */ /* The Mark and the Region. */ /* */ /* **************************************************************** */ /* Set the mark at POSITION. */ int _rl_set_mark_at_pos (position) int position; { if (position > rl_end) return 1; rl_mark = position; return 0; } /* A bindable command to set the mark. */ int rl_set_mark (count, key) int count, key; { return (_rl_set_mark_at_pos (rl_explicit_arg ? count : rl_point)); } /* Exchange the position of mark and point. */ int rl_exchange_point_and_mark (count, key) int count, key; { if (rl_mark > rl_end) rl_mark = -1; if (rl_mark == -1) { rl_ding (); return 1; } else SWAP (rl_point, rl_mark); return 0; } readline-7.0/tilde.c000664 000436 000024 00000032044 12710377556 014513 0ustar00chetstaff000000 000000 /* tilde.c -- Tilde expansion code (~/foo := $HOME/foo). */ /* Copyright (C) 1988-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #if defined (HAVE_PWD_H) #include #endif #include "tilde.h" #if defined (TEST) || defined (STATIC_MALLOC) static void *xmalloc (), *xrealloc (); #else # include "xmalloc.h" #endif /* TEST || STATIC_MALLOC */ #if !defined (HAVE_GETPW_DECLS) # if defined (HAVE_GETPWUID) extern struct passwd *getpwuid PARAMS((uid_t)); # endif # if defined (HAVE_GETPWNAM) extern struct passwd *getpwnam PARAMS((const char *)); # endif #endif /* !HAVE_GETPW_DECLS */ #if !defined (savestring) #define savestring(x) strcpy ((char *)xmalloc (1 + strlen (x)), (x)) #endif /* !savestring */ #if !defined (NULL) # if defined (__STDC__) # define NULL ((void *) 0) # else # define NULL 0x0 # endif /* !__STDC__ */ #endif /* !NULL */ /* If being compiled as part of bash, these will be satisfied from variables.o. If being compiled as part of readline, they will be satisfied from shell.o. */ extern char *sh_get_home_dir PARAMS((void)); extern char *sh_get_env_value PARAMS((const char *)); /* The default value of tilde_additional_prefixes. This is set to whitespace preceding a tilde so that simple programs which do not perform any word separation get desired behaviour. */ static const char *default_prefixes[] = { " ~", "\t~", (const char *)NULL }; /* The default value of tilde_additional_suffixes. This is set to whitespace or newline so that simple programs which do not perform any word separation get desired behaviour. */ static const char *default_suffixes[] = { " ", "\n", (const char *)NULL }; /* If non-null, this contains the address of a function that the application wants called before trying the standard tilde expansions. The function is called with the text sans tilde, and returns a malloc()'ed string which is the expansion, or a NULL pointer if the expansion fails. */ tilde_hook_func_t *tilde_expansion_preexpansion_hook = (tilde_hook_func_t *)NULL; /* If non-null, this contains the address of a function to call if the standard meaning for expanding a tilde fails. The function is called with the text (sans tilde, as in "foo"), and returns a malloc()'ed string which is the expansion, or a NULL pointer if there is no expansion. */ tilde_hook_func_t *tilde_expansion_failure_hook = (tilde_hook_func_t *)NULL; /* When non-null, this is a NULL terminated array of strings which are duplicates for a tilde prefix. Bash uses this to expand `=~' and `:~'. */ char **tilde_additional_prefixes = (char **)default_prefixes; /* When non-null, this is a NULL terminated array of strings which match the end of a username, instead of just "/". Bash sets this to `:' and `=~'. */ char **tilde_additional_suffixes = (char **)default_suffixes; static int tilde_find_prefix PARAMS((const char *, int *)); static int tilde_find_suffix PARAMS((const char *)); static char *isolate_tilde_prefix PARAMS((const char *, int *)); static char *glue_prefix_and_suffix PARAMS((char *, const char *, int)); /* Find the start of a tilde expansion in STRING, and return the index of the tilde which starts the expansion. Place the length of the text which identified this tilde starter in LEN, excluding the tilde itself. */ static int tilde_find_prefix (string, len) const char *string; int *len; { register int i, j, string_len; register char **prefixes; prefixes = tilde_additional_prefixes; string_len = strlen (string); *len = 0; if (*string == '\0' || *string == '~') return (0); if (prefixes) { for (i = 0; i < string_len; i++) { for (j = 0; prefixes[j]; j++) { if (strncmp (string + i, prefixes[j], strlen (prefixes[j])) == 0) { *len = strlen (prefixes[j]) - 1; return (i + *len); } } } } return (string_len); } /* Find the end of a tilde expansion in STRING, and return the index of the character which ends the tilde definition. */ static int tilde_find_suffix (string) const char *string; { register int i, j, string_len; register char **suffixes; suffixes = tilde_additional_suffixes; string_len = strlen (string); for (i = 0; i < string_len; i++) { #if defined (__MSDOS__) if (string[i] == '/' || string[i] == '\\' /* || !string[i] */) #else if (string[i] == '/' /* || !string[i] */) #endif break; for (j = 0; suffixes && suffixes[j]; j++) { if (strncmp (string + i, suffixes[j], strlen (suffixes[j])) == 0) return (i); } } return (i); } /* Return a new string which is the result of tilde expanding STRING. */ char * tilde_expand (string) const char *string; { char *result; int result_size, result_index; result_index = result_size = 0; if (result = strchr (string, '~')) result = (char *)xmalloc (result_size = (strlen (string) + 16)); else result = (char *)xmalloc (result_size = (strlen (string) + 1)); /* Scan through STRING expanding tildes as we come to them. */ while (1) { register int start, end; char *tilde_word, *expansion; int len; /* Make START point to the tilde which starts the expansion. */ start = tilde_find_prefix (string, &len); /* Copy the skipped text into the result. */ if ((result_index + start + 1) > result_size) result = (char *)xrealloc (result, 1 + (result_size += (start + 20))); strncpy (result + result_index, string, start); result_index += start; /* Advance STRING to the starting tilde. */ string += start; /* Make END be the index of one after the last character of the username. */ end = tilde_find_suffix (string); /* If both START and END are zero, we are all done. */ if (!start && !end) break; /* Expand the entire tilde word, and copy it into RESULT. */ tilde_word = (char *)xmalloc (1 + end); strncpy (tilde_word, string, end); tilde_word[end] = '\0'; string += end; expansion = tilde_expand_word (tilde_word); if (expansion == 0) expansion = tilde_word; else xfree (tilde_word); len = strlen (expansion); #ifdef __CYGWIN__ /* Fix for Cygwin to prevent ~user/xxx from expanding to //xxx when $HOME for `user' is /. On cygwin, // denotes a network drive. */ if (len > 1 || *expansion != '/' || *string != '/') #endif { if ((result_index + len + 1) > result_size) result = (char *)xrealloc (result, 1 + (result_size += (len + 20))); strcpy (result + result_index, expansion); result_index += len; } xfree (expansion); } result[result_index] = '\0'; return (result); } /* Take FNAME and return the tilde prefix we want expanded. If LENP is non-null, the index of the end of the prefix into FNAME is returned in the location it points to. */ static char * isolate_tilde_prefix (fname, lenp) const char *fname; int *lenp; { char *ret; int i; ret = (char *)xmalloc (strlen (fname)); #if defined (__MSDOS__) for (i = 1; fname[i] && fname[i] != '/' && fname[i] != '\\'; i++) #else for (i = 1; fname[i] && fname[i] != '/'; i++) #endif ret[i - 1] = fname[i]; ret[i - 1] = '\0'; if (lenp) *lenp = i; return ret; } #if 0 /* Public function to scan a string (FNAME) beginning with a tilde and find the portion of the string that should be passed to the tilde expansion function. Right now, it just calls tilde_find_suffix and allocates new memory, but it can be expanded to do different things later. */ char * tilde_find_word (fname, flags, lenp) const char *fname; int flags, *lenp; { int x; char *r; x = tilde_find_suffix (fname); if (x == 0) { r = savestring (fname); if (lenp) *lenp = 0; } else { r = (char *)xmalloc (1 + x); strncpy (r, fname, x); r[x] = '\0'; if (lenp) *lenp = x; } return r; } #endif /* Return a string that is PREFIX concatenated with SUFFIX starting at SUFFIND. */ static char * glue_prefix_and_suffix (prefix, suffix, suffind) char *prefix; const char *suffix; int suffind; { char *ret; int plen, slen; plen = (prefix && *prefix) ? strlen (prefix) : 0; slen = strlen (suffix + suffind); ret = (char *)xmalloc (plen + slen + 1); if (plen) strcpy (ret, prefix); strcpy (ret + plen, suffix + suffind); return ret; } /* Do the work of tilde expansion on FILENAME. FILENAME starts with a tilde. If there is no expansion, call tilde_expansion_failure_hook. This always returns a newly-allocated string, never static storage. */ char * tilde_expand_word (filename) const char *filename; { char *dirname, *expansion, *username; int user_len; struct passwd *user_entry; if (filename == 0) return ((char *)NULL); if (*filename != '~') return (savestring (filename)); /* A leading `~/' or a bare `~' is *always* translated to the value of $HOME or the home directory of the current user, regardless of any preexpansion hook. */ if (filename[1] == '\0' || filename[1] == '/') { /* Prefix $HOME to the rest of the string. */ expansion = sh_get_env_value ("HOME"); #if defined (_WIN32) if (expansion == 0) expansion = sh_get_env_value ("APPDATA"); #endif /* If there is no HOME variable, look up the directory in the password database. */ if (expansion == 0) expansion = sh_get_home_dir (); return (glue_prefix_and_suffix (expansion, filename, 1)); } username = isolate_tilde_prefix (filename, &user_len); if (tilde_expansion_preexpansion_hook) { expansion = (*tilde_expansion_preexpansion_hook) (username); if (expansion) { dirname = glue_prefix_and_suffix (expansion, filename, user_len); xfree (username); xfree (expansion); return (dirname); } } /* No preexpansion hook, or the preexpansion hook failed. Look in the password database. */ dirname = (char *)NULL; #if defined (HAVE_GETPWNAM) user_entry = getpwnam (username); #else user_entry = 0; #endif if (user_entry == 0) { /* If the calling program has a special syntax for expanding tildes, and we couldn't find a standard expansion, then let them try. */ if (tilde_expansion_failure_hook) { expansion = (*tilde_expansion_failure_hook) (username); if (expansion) { dirname = glue_prefix_and_suffix (expansion, filename, user_len); xfree (expansion); } } /* If we don't have a failure hook, or if the failure hook did not expand the tilde, return a copy of what we were passed. */ if (dirname == 0) dirname = savestring (filename); } #if defined (HAVE_GETPWENT) else dirname = glue_prefix_and_suffix (user_entry->pw_dir, filename, user_len); #endif xfree (username); #if defined (HAVE_GETPWENT) endpwent (); #endif return (dirname); } #if defined (TEST) #undef NULL #include main (argc, argv) int argc; char **argv; { char *result, line[512]; int done = 0; while (!done) { printf ("~expand: "); fflush (stdout); if (!gets (line)) strcpy (line, "done"); if ((strcmp (line, "done") == 0) || (strcmp (line, "quit") == 0) || (strcmp (line, "exit") == 0)) { done = 1; break; } result = tilde_expand (line); printf (" --> %s\n", result); free (result); } exit (0); } static void memory_error_and_abort (); static void * xmalloc (bytes) size_t bytes; { void *temp = (char *)malloc (bytes); if (!temp) memory_error_and_abort (); return (temp); } static void * xrealloc (pointer, bytes) void *pointer; int bytes; { void *temp; if (!pointer) temp = malloc (bytes); else temp = realloc (pointer, bytes); if (!temp) memory_error_and_abort (); return (temp); } static void memory_error_and_abort () { fprintf (stderr, "readline: out of virtual memory\n"); abort (); } /* * Local variables: * compile-command: "gcc -g -DTEST -o tilde tilde.c" * end: */ #endif /* TEST */ readline-7.0/undo.c000664 000436 000024 00000016674 12651440450 014356 0ustar00chetstaff000000 000000 /* undo.c - manage list of changes to lines, offering opportunity to undo them */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include /* System-specific feature definitions and include files. */ #include "rldefs.h" /* Some standard library routines. */ #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" extern void _hs_replace_history_data PARAMS((int, histdata_t *, histdata_t *)); /* Non-zero tells rl_delete_text and rl_insert_text to not add to the undo list. */ int _rl_doing_an_undo = 0; /* How many unclosed undo groups we currently have. */ int _rl_undo_group_level = 0; /* The current undo list for THE_LINE. */ UNDO_LIST *rl_undo_list = (UNDO_LIST *)NULL; /* **************************************************************** */ /* */ /* Undo, and Undoing */ /* */ /* **************************************************************** */ static UNDO_LIST * alloc_undo_entry (what, start, end, text) enum undo_code what; int start, end; char *text; { UNDO_LIST *temp; temp = (UNDO_LIST *)xmalloc (sizeof (UNDO_LIST)); temp->what = what; temp->start = start; temp->end = end; temp->text = text; temp->next = (UNDO_LIST *)NULL; return temp; } /* Remember how to undo something. Concatenate some undos if that seems right. */ void rl_add_undo (what, start, end, text) enum undo_code what; int start, end; char *text; { UNDO_LIST *temp; temp = alloc_undo_entry (what, start, end, text); temp->next = rl_undo_list; rl_undo_list = temp; } /* Free an UNDO_LIST */ void _rl_free_undo_list (ul) UNDO_LIST *ul; { UNDO_LIST *release; while (ul) { release = ul; ul = ul->next; if (release->what == UNDO_DELETE) xfree (release->text); xfree (release); } } /* Free the existing undo list. */ void rl_free_undo_list () { UNDO_LIST *release, *orig_list; orig_list = rl_undo_list; _rl_free_undo_list (rl_undo_list); rl_undo_list = (UNDO_LIST *)NULL; _hs_replace_history_data (-1, (histdata_t *)orig_list, (histdata_t *)NULL); } UNDO_LIST * _rl_copy_undo_entry (entry) UNDO_LIST *entry; { UNDO_LIST *new; new = alloc_undo_entry (entry->what, entry->start, entry->end, (char *)NULL); new->text = entry->text ? savestring (entry->text) : 0; return new; } UNDO_LIST * _rl_copy_undo_list (head) UNDO_LIST *head; { UNDO_LIST *list, *new, *roving, *c; if (head == 0) return head; list = head; new = 0; while (list) { c = _rl_copy_undo_entry (list); if (new == 0) roving = new = c; else { roving->next = c; roving = roving->next; } list = list->next; } roving->next = 0; return new; } /* Undo the next thing in the list. Return 0 if there is nothing to undo, or non-zero if there was. */ int rl_do_undo () { UNDO_LIST *release; int waiting_for_begin, start, end; HIST_ENTRY *cur, *temp; #define TRANS(i) ((i) == -1 ? rl_point : ((i) == -2 ? rl_end : (i))) start = end = waiting_for_begin = 0; do { if (rl_undo_list == 0) return (0); _rl_doing_an_undo = 1; RL_SETSTATE(RL_STATE_UNDOING); /* To better support vi-mode, a start or end value of -1 means rl_point, and a value of -2 means rl_end. */ if (rl_undo_list->what == UNDO_DELETE || rl_undo_list->what == UNDO_INSERT) { start = TRANS (rl_undo_list->start); end = TRANS (rl_undo_list->end); } switch (rl_undo_list->what) { /* Undoing deletes means inserting some text. */ case UNDO_DELETE: rl_point = start; rl_insert_text (rl_undo_list->text); xfree (rl_undo_list->text); break; /* Undoing inserts means deleting some text. */ case UNDO_INSERT: rl_delete_text (start, end); rl_point = start; break; /* Undoing an END means undoing everything 'til we get to a BEGIN. */ case UNDO_END: waiting_for_begin++; break; /* Undoing a BEGIN means that we are done with this group. */ case UNDO_BEGIN: if (waiting_for_begin) waiting_for_begin--; else rl_ding (); break; } _rl_doing_an_undo = 0; RL_UNSETSTATE(RL_STATE_UNDOING); release = rl_undo_list; rl_undo_list = rl_undo_list->next; /* If we are editing a history entry, make sure the change is replicated in the history entry's line */ cur = current_history (); if (cur && cur->data && (UNDO_LIST *)cur->data == release) { temp = replace_history_entry (where_history (), rl_line_buffer, (histdata_t)rl_undo_list); xfree (temp->line); FREE (temp->timestamp); xfree (temp); } _hs_replace_history_data (-1, (histdata_t *)release, (histdata_t *)rl_undo_list); xfree (release); } while (waiting_for_begin); return (1); } #undef TRANS int _rl_fix_last_undo_of_type (type, start, end) int type, start, end; { UNDO_LIST *rl; for (rl = rl_undo_list; rl; rl = rl->next) { if (rl->what == type) { rl->start = start; rl->end = end; return 0; } } return 1; } /* Begin a group. Subsequent undos are undone as an atomic operation. */ int rl_begin_undo_group () { rl_add_undo (UNDO_BEGIN, 0, 0, 0); _rl_undo_group_level++; return 0; } /* End an undo group started with rl_begin_undo_group (). */ int rl_end_undo_group () { rl_add_undo (UNDO_END, 0, 0, 0); _rl_undo_group_level--; return 0; } /* Save an undo entry for the text from START to END. */ int rl_modifying (start, end) int start, end; { if (start > end) { SWAP (start, end); } if (start != end) { char *temp = rl_copy_text (start, end); rl_begin_undo_group (); rl_add_undo (UNDO_DELETE, start, end, temp); rl_add_undo (UNDO_INSERT, start, end, (char *)NULL); rl_end_undo_group (); } return 0; } /* Revert the current line to its previous state. */ int rl_revert_line (count, key) int count, key; { if (rl_undo_list == 0) rl_ding (); else { while (rl_undo_list) rl_do_undo (); #if defined (VI_MODE) if (rl_editing_mode == vi_mode) rl_point = rl_mark = 0; /* rl_end should be set correctly */ #endif } return 0; } /* Do some undoing of things that were done. */ int rl_undo_command (count, key) int count, key; { if (count < 0) return 0; /* Nothing to do. */ while (count) { if (rl_do_undo ()) count--; else { rl_ding (); break; } } return 0; } readline-7.0/util.c000664 000436 000024 00000027746 12641025747 014377 0ustar00chetstaff000000 000000 /* util.c -- readline utility functions */ /* Copyright (C) 1987-2015 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixjmp.h" #if defined (HAVE_UNISTD_H) # include /* for _POSIX_VERSION */ #endif /* HAVE_UNISTD_H */ #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include #include /* System-specific feature definitions and include files. */ #include "rldefs.h" #include "rlmbutil.h" #if defined (TIOCSTAT_IN_SYS_IOCTL) # include #endif /* TIOCSTAT_IN_SYS_IOCTL */ /* Some standard library routines. */ #include "readline.h" #include "rlprivate.h" #include "xmalloc.h" #include "rlshell.h" /* **************************************************************** */ /* */ /* Utility Functions */ /* */ /* **************************************************************** */ /* Return 0 if C is not a member of the class of characters that belong in words, or 1 if it is. */ int _rl_allow_pathname_alphabetic_chars = 0; static const char * const pathname_alphabetic_chars = "/-_=~.#$"; int rl_alphabetic (c) int c; { if (ALPHABETIC (c)) return (1); return (_rl_allow_pathname_alphabetic_chars && strchr (pathname_alphabetic_chars, c) != NULL); } #if defined (HANDLE_MULTIBYTE) int _rl_walphabetic (wchar_t wc) { int c; if (iswalnum (wc)) return (1); c = wc & 0177; return (_rl_allow_pathname_alphabetic_chars && strchr (pathname_alphabetic_chars, c) != NULL); } #endif /* How to abort things. */ int _rl_abort_internal () { rl_ding (); rl_clear_message (); _rl_reset_argument (); rl_clear_pending_input (); RL_UNSETSTATE (RL_STATE_MACRODEF); while (rl_executing_macro) _rl_pop_executing_macro (); RL_UNSETSTATE (RL_STATE_MULTIKEY); /* XXX */ rl_last_func = (rl_command_func_t *)NULL; _rl_longjmp (_rl_top_level, 1); return (0); } int rl_abort (count, key) int count, key; { return (_rl_abort_internal ()); } int _rl_null_function (count, key) int count, key; { return 0; } int rl_tty_status (count, key) int count, key; { #if defined (TIOCSTAT) ioctl (1, TIOCSTAT, (char *)0); rl_refresh_line (count, key); #else rl_ding (); #endif return 0; } /* Return a copy of the string between FROM and TO. FROM is inclusive, TO is not. */ char * rl_copy_text (from, to) int from, to; { register int length; char *copy; /* Fix it if the caller is confused. */ if (from > to) SWAP (from, to); length = to - from; copy = (char *)xmalloc (1 + length); strncpy (copy, rl_line_buffer + from, length); copy[length] = '\0'; return (copy); } /* Increase the size of RL_LINE_BUFFER until it has enough space to hold LEN characters. */ void rl_extend_line_buffer (len) int len; { while (len >= rl_line_buffer_len) { rl_line_buffer_len += DEFAULT_BUFFER_SIZE; rl_line_buffer = (char *)xrealloc (rl_line_buffer, rl_line_buffer_len); } _rl_set_the_line (); } /* A function for simple tilde expansion. */ int rl_tilde_expand (ignore, key) int ignore, key; { register int start, end; char *homedir, *temp; int len; end = rl_point; start = end - 1; if (rl_point == rl_end && rl_line_buffer[rl_point] == '~') { homedir = tilde_expand ("~"); _rl_replace_text (homedir, start, end); xfree (homedir); return (0); } else if (start >= 0 && rl_line_buffer[start] != '~') { for (; !whitespace (rl_line_buffer[start]) && start >= 0; start--) ; start++; } else if (start < 0) start = 0; end = start; do end++; while (whitespace (rl_line_buffer[end]) == 0 && end < rl_end); if (whitespace (rl_line_buffer[end]) || end >= rl_end) end--; /* If the first character of the current word is a tilde, perform tilde expansion and insert the result. If not a tilde, do nothing. */ if (rl_line_buffer[start] == '~') { len = end - start + 1; temp = (char *)xmalloc (len + 1); strncpy (temp, rl_line_buffer + start, len); temp[len] = '\0'; homedir = tilde_expand (temp); xfree (temp); _rl_replace_text (homedir, start, end); xfree (homedir); } return (0); } #if defined (USE_VARARGS) void #if defined (PREFER_STDARG) _rl_ttymsg (const char *format, ...) #else _rl_ttymsg (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); fflush (stderr); va_end (args); rl_forced_update_display (); } void #if defined (PREFER_STDARG) _rl_errmsg (const char *format, ...) #else _rl_errmsg (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif fprintf (stderr, "readline: "); vfprintf (stderr, format, args); fprintf (stderr, "\n"); fflush (stderr); va_end (args); } #else /* !USE_VARARGS */ void _rl_ttymsg (format, arg1, arg2) char *format; { fprintf (stderr, "readline: "); fprintf (stderr, format, arg1, arg2); fprintf (stderr, "\n"); rl_forced_update_display (); } void _rl_errmsg (format, arg1, arg2) char *format; { fprintf (stderr, "readline: "); fprintf (stderr, format, arg1, arg2); fprintf (stderr, "\n"); } #endif /* !USE_VARARGS */ /* **************************************************************** */ /* */ /* String Utility Functions */ /* */ /* **************************************************************** */ /* Determine if s2 occurs in s1. If so, return a pointer to the match in s1. The compare is case insensitive. */ char * _rl_strindex (s1, s2) register const char *s1, *s2; { register int i, l, len; for (i = 0, l = strlen (s2), len = strlen (s1); (len - i) >= l; i++) if (_rl_strnicmp (s1 + i, s2, l) == 0) return ((char *) (s1 + i)); return ((char *)NULL); } #ifndef HAVE_STRPBRK /* Find the first occurrence in STRING1 of any character from STRING2. Return a pointer to the character in STRING1. */ char * _rl_strpbrk (string1, string2) const char *string1, *string2; { register const char *scan; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; register int i, v; memset (&ps, 0, sizeof (mbstate_t)); #endif for (; *string1; string1++) { for (scan = string2; *scan; scan++) { if (*string1 == *scan) return ((char *)string1); } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { v = _rl_get_char_len (string1, &ps); if (v > 1) string1 += v - 1; /* -1 to account for auto-increment in loop */ } #endif } return ((char *)NULL); } #endif #if !defined (HAVE_STRCASECMP) /* Compare at most COUNT characters from string1 to string2. Case doesn't matter (strncasecmp). */ int _rl_strnicmp (string1, string2, count) const char *string1; const char *string2; int count; { register const char *s1; register const char *s2; register int d; if (count <= 0 || (string1 == string2)) return 0; s1 = string1; s2 = string2; do { d = _rl_to_lower (*s1) - _rl_to_lower (*s2); /* XXX - cast to unsigned char? */ if (d != 0) return d; if (*s1++ == '\0') break; s2++; } while (--count != 0); return (0); } /* strcmp (), but caseless (strcasecmp). */ int _rl_stricmp (string1, string2) const char *string1; const char *string2; { register const char *s1; register const char *s2; register int d; s1 = string1; s2 = string2; if (s1 == s2) return 0; while ((d = _rl_to_lower (*s1) - _rl_to_lower (*s2)) == 0) { if (*s1++ == '\0') return 0; s2++; } return (d); } #endif /* !HAVE_STRCASECMP */ /* Stupid comparison routine for qsort () ing strings. */ int _rl_qsort_string_compare (s1, s2) char **s1, **s2; { #if defined (HAVE_STRCOLL) return (strcoll (*s1, *s2)); #else int result; result = **s1 - **s2; if (result == 0) result = strcmp (*s1, *s2); return result; #endif } /* Function equivalents for the macros defined in chardefs.h. */ #define FUNCTION_FOR_MACRO(f) int (f) (c) int c; { return f (c); } FUNCTION_FOR_MACRO (_rl_digit_p) FUNCTION_FOR_MACRO (_rl_digit_value) FUNCTION_FOR_MACRO (_rl_lowercase_p) FUNCTION_FOR_MACRO (_rl_pure_alphabetic) FUNCTION_FOR_MACRO (_rl_to_lower) FUNCTION_FOR_MACRO (_rl_to_upper) FUNCTION_FOR_MACRO (_rl_uppercase_p) /* A convenience function, to force memory deallocation to be performed by readline. DLLs on Windows apparently require this. */ void rl_free (mem) void *mem; { if (mem) free (mem); } /* Backwards compatibility, now that savestring has been removed from all `public' readline header files. */ #undef _rl_savestring char * _rl_savestring (s) const char *s; { return (strcpy ((char *)xmalloc (1 + (int)strlen (s)), (s))); } #if defined (DEBUG) #if defined (USE_VARARGS) static FILE *_rl_tracefp; void #if defined (PREFER_STDARG) _rl_trace (const char *format, ...) #else _rl_trace (va_alist) va_dcl #endif { va_list args; #if defined (PREFER_VARARGS) char *format; #endif #if defined (PREFER_STDARG) va_start (args, format); #else va_start (args); format = va_arg (args, char *); #endif if (_rl_tracefp == 0) _rl_tropen (); vfprintf (_rl_tracefp, format, args); fprintf (_rl_tracefp, "\n"); fflush (_rl_tracefp); va_end (args); } int _rl_tropen () { char fnbuf[128], *x; if (_rl_tracefp) fclose (_rl_tracefp); #if defined (_WIN32) && !defined (__CYGWIN__) x = sh_get_env_value ("TEMP"); if (x == 0) x = "."; #else x = "/var/tmp"; #endif sprintf (fnbuf, "%s/rltrace.%ld", x, (long)getpid()); unlink(fnbuf); _rl_tracefp = fopen (fnbuf, "w+"); return _rl_tracefp != 0; } int _rl_trclose () { int r; r = fclose (_rl_tracefp); _rl_tracefp = 0; return r; } void _rl_settracefp (fp) FILE *fp; { _rl_tracefp = fp; } #endif #endif /* DEBUG */ #if HAVE_DECL_AUDIT_USER_TTY && defined (HAVE_LIBAUDIT_H) && defined (ENABLE_TTY_AUDIT_SUPPORT) #include #include #include #include /* Report STRING to the audit system. */ void _rl_audit_tty (string) char *string; { struct audit_message req; struct sockaddr_nl addr; size_t size; int fd; fd = socket (PF_NETLINK, SOCK_RAW, NETLINK_AUDIT); if (fd < 0) return; size = strlen (string) + 1; if (NLMSG_SPACE (size) > MAX_AUDIT_MESSAGE_LENGTH) return; memset (&req, 0, sizeof(req)); req.nlh.nlmsg_len = NLMSG_SPACE (size); req.nlh.nlmsg_type = AUDIT_USER_TTY; req.nlh.nlmsg_flags = NLM_F_REQUEST; req.nlh.nlmsg_seq = 0; if (size && string) memcpy (NLMSG_DATA(&req.nlh), string, size); memset (&addr, 0, sizeof(addr)); addr.nl_family = AF_NETLINK; addr.nl_pid = 0; addr.nl_groups = 0; sendto (fd, &req, req.nlh.nlmsg_len, 0, (struct sockaddr*)&addr, sizeof(addr)); close (fd); } #endif readline-7.0/vi_keymap.c000664 000436 000120 00000107261 12664461223 015355 0ustar00chetadmin000000 000000 /* vi_keymap.c -- the keymap for vi_mode in readline (). */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if !defined (BUFSIZ) #include #endif /* !BUFSIZ */ #include "readline.h" #if 0 extern KEYMAP_ENTRY_ARRAY vi_escape_keymap; #endif /* The keymap arrays for handling vi mode. */ KEYMAP_ENTRY_ARRAY vi_movement_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, rl_vi_eof_maybe }, /* Control-d */ { ISFUNC, rl_emacs_editing_mode }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, rl_abort }, /* Control-g */ { ISFUNC, rl_backward_char }, /* Control-h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, rl_clear_screen }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_get_next_history }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, rl_get_previous_history }, /* Control-p */ { ISFUNC, rl_quoted_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_vi_unix_word_rubout }, /* Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-[ */ /* vi_escape_keymap */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_forward_char }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, rl_insert_comment }, /* # */ { ISFUNC, rl_end_of_line }, /* $ */ { ISFUNC, rl_vi_match }, /* % */ { ISFUNC, rl_vi_tilde_expand }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ) */ { ISFUNC, rl_vi_complete }, /* * */ { ISFUNC, rl_get_next_history}, /* + */ { ISFUNC, rl_vi_char_search }, /* , */ { ISFUNC, rl_get_previous_history }, /* - */ { ISFUNC, rl_vi_redo }, /* . */ { ISFUNC, rl_vi_search }, /* / */ /* Regular digits. */ { ISFUNC, rl_beg_of_line }, /* 0 */ { ISFUNC, rl_vi_arg_digit }, /* 1 */ { ISFUNC, rl_vi_arg_digit }, /* 2 */ { ISFUNC, rl_vi_arg_digit }, /* 3 */ { ISFUNC, rl_vi_arg_digit }, /* 4 */ { ISFUNC, rl_vi_arg_digit }, /* 5 */ { ISFUNC, rl_vi_arg_digit }, /* 6 */ { ISFUNC, rl_vi_arg_digit }, /* 7 */ { ISFUNC, rl_vi_arg_digit }, /* 8 */ { ISFUNC, rl_vi_arg_digit }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, rl_vi_char_search }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, rl_vi_complete }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, rl_vi_search }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_vi_append_eol }, /* A */ { ISFUNC, rl_vi_prev_word}, /* B */ { ISFUNC, rl_vi_change_to }, /* C */ { ISFUNC, rl_vi_delete_to }, /* D */ { ISFUNC, rl_vi_end_word }, /* E */ { ISFUNC, rl_vi_char_search }, /* F */ { ISFUNC, rl_vi_fetch_history }, /* G */ { ISFUNC, (rl_command_func_t *)0x0 }, /* H */ { ISFUNC, rl_vi_insert_beg }, /* I */ { ISFUNC, (rl_command_func_t *)0x0 }, /* J */ { ISFUNC, (rl_command_func_t *)0x0 }, /* K */ { ISFUNC, (rl_command_func_t *)0x0 }, /* L */ { ISFUNC, (rl_command_func_t *)0x0 }, /* M */ { ISFUNC, rl_vi_search_again }, /* N */ { ISFUNC, (rl_command_func_t *)0x0 }, /* O */ { ISFUNC, rl_vi_put }, /* P */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Q */ { ISFUNC, rl_vi_replace }, /* R */ { ISFUNC, rl_vi_subst }, /* S */ { ISFUNC, rl_vi_char_search }, /* T */ { ISFUNC, rl_revert_line }, /* U */ { ISFUNC, (rl_command_func_t *)0x0 }, /* V */ { ISFUNC, rl_vi_next_word }, /* W */ { ISFUNC, rl_vi_rubout }, /* X */ { ISFUNC, rl_vi_yank_to }, /* Y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Z */ /* Some more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* [ */ { ISFUNC, rl_vi_complete }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, rl_vi_first_print }, /* ^ */ { ISFUNC, rl_vi_yank_arg }, /* _ */ { ISFUNC, rl_vi_goto_mark }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_vi_append_mode }, /* a */ { ISFUNC, rl_vi_prev_word }, /* b */ { ISFUNC, rl_vi_change_to }, /* c */ { ISFUNC, rl_vi_delete_to }, /* d */ { ISFUNC, rl_vi_end_word }, /* e */ { ISFUNC, rl_vi_char_search }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, rl_backward_char }, /* h */ { ISFUNC, rl_vi_insert_mode }, /* i */ { ISFUNC, rl_get_next_history }, /* j */ { ISFUNC, rl_get_previous_history }, /* k */ { ISFUNC, rl_forward_char }, /* l */ { ISFUNC, rl_vi_set_mark }, /* m */ { ISFUNC, rl_vi_search_again }, /* n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* o */ { ISFUNC, rl_vi_put }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, rl_vi_change_char }, /* r */ { ISFUNC, rl_vi_subst }, /* s */ { ISFUNC, rl_vi_char_search }, /* t */ { ISFUNC, rl_vi_undo }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, rl_vi_next_word }, /* w */ { ISFUNC, rl_vi_delete }, /* x */ { ISFUNC, rl_vi_yank_to }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, rl_vi_column }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, rl_vi_change_case }, /* ~ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; KEYMAP_ENTRY_ARRAY vi_insertion_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, rl_insert }, /* Control-a */ { ISFUNC, rl_insert }, /* Control-b */ { ISFUNC, rl_insert }, /* Control-c */ { ISFUNC, rl_vi_eof_maybe }, /* Control-d */ { ISFUNC, rl_insert }, /* Control-e */ { ISFUNC, rl_insert }, /* Control-f */ { ISFUNC, rl_insert }, /* Control-g */ { ISFUNC, rl_rubout }, /* Control-h */ { ISFUNC, rl_complete }, /* Control-i */ { ISFUNC, rl_newline }, /* Control-j */ { ISFUNC, rl_insert }, /* Control-k */ { ISFUNC, rl_insert }, /* Control-l */ { ISFUNC, rl_newline }, /* Control-m */ { ISFUNC, rl_menu_complete}, /* Control-n */ { ISFUNC, rl_insert }, /* Control-o */ { ISFUNC, rl_backward_menu_complete }, /* Control-p */ { ISFUNC, rl_insert }, /* Control-q */ { ISFUNC, rl_reverse_search_history }, /* Control-r */ { ISFUNC, rl_forward_search_history }, /* Control-s */ { ISFUNC, rl_transpose_chars }, /* Control-t */ { ISFUNC, rl_unix_line_discard }, /* Control-u */ { ISFUNC, rl_quoted_insert }, /* Control-v */ { ISFUNC, rl_vi_unix_word_rubout }, /* Control-w */ { ISFUNC, rl_insert }, /* Control-x */ { ISFUNC, rl_yank }, /* Control-y */ { ISFUNC, rl_insert }, /* Control-z */ { ISFUNC, rl_vi_movement_mode }, /* Control-[ */ { ISFUNC, rl_insert }, /* Control-\ */ { ISFUNC, rl_insert }, /* Control-] */ { ISFUNC, rl_insert }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, rl_insert }, /* SPACE */ { ISFUNC, rl_insert }, /* ! */ { ISFUNC, rl_insert }, /* " */ { ISFUNC, rl_insert }, /* # */ { ISFUNC, rl_insert }, /* $ */ { ISFUNC, rl_insert }, /* % */ { ISFUNC, rl_insert }, /* & */ { ISFUNC, rl_insert }, /* ' */ { ISFUNC, rl_insert }, /* ( */ { ISFUNC, rl_insert }, /* ) */ { ISFUNC, rl_insert }, /* * */ { ISFUNC, rl_insert }, /* + */ { ISFUNC, rl_insert }, /* , */ { ISFUNC, rl_insert }, /* - */ { ISFUNC, rl_insert }, /* . */ { ISFUNC, rl_insert }, /* / */ /* Regular digits. */ { ISFUNC, rl_insert }, /* 0 */ { ISFUNC, rl_insert }, /* 1 */ { ISFUNC, rl_insert }, /* 2 */ { ISFUNC, rl_insert }, /* 3 */ { ISFUNC, rl_insert }, /* 4 */ { ISFUNC, rl_insert }, /* 5 */ { ISFUNC, rl_insert }, /* 6 */ { ISFUNC, rl_insert }, /* 7 */ { ISFUNC, rl_insert }, /* 8 */ { ISFUNC, rl_insert }, /* 9 */ /* A little more punctuation. */ { ISFUNC, rl_insert }, /* : */ { ISFUNC, rl_insert }, /* ; */ { ISFUNC, rl_insert }, /* < */ { ISFUNC, rl_insert }, /* = */ { ISFUNC, rl_insert }, /* > */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_insert }, /* A */ { ISFUNC, rl_insert }, /* B */ { ISFUNC, rl_insert }, /* C */ { ISFUNC, rl_insert }, /* D */ { ISFUNC, rl_insert }, /* E */ { ISFUNC, rl_insert }, /* F */ { ISFUNC, rl_insert }, /* G */ { ISFUNC, rl_insert }, /* H */ { ISFUNC, rl_insert }, /* I */ { ISFUNC, rl_insert }, /* J */ { ISFUNC, rl_insert }, /* K */ { ISFUNC, rl_insert }, /* L */ { ISFUNC, rl_insert }, /* M */ { ISFUNC, rl_insert }, /* N */ { ISFUNC, rl_insert }, /* O */ { ISFUNC, rl_insert }, /* P */ { ISFUNC, rl_insert }, /* Q */ { ISFUNC, rl_insert }, /* R */ { ISFUNC, rl_insert }, /* S */ { ISFUNC, rl_insert }, /* T */ { ISFUNC, rl_insert }, /* U */ { ISFUNC, rl_insert }, /* V */ { ISFUNC, rl_insert }, /* W */ { ISFUNC, rl_insert }, /* X */ { ISFUNC, rl_insert }, /* Y */ { ISFUNC, rl_insert }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_insert }, /* [ */ { ISFUNC, rl_insert }, /* \ */ { ISFUNC, rl_insert }, /* ] */ { ISFUNC, rl_insert }, /* ^ */ { ISFUNC, rl_insert }, /* _ */ { ISFUNC, rl_insert }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, rl_insert }, /* a */ { ISFUNC, rl_insert }, /* b */ { ISFUNC, rl_insert }, /* c */ { ISFUNC, rl_insert }, /* d */ { ISFUNC, rl_insert }, /* e */ { ISFUNC, rl_insert }, /* f */ { ISFUNC, rl_insert }, /* g */ { ISFUNC, rl_insert }, /* h */ { ISFUNC, rl_insert }, /* i */ { ISFUNC, rl_insert }, /* j */ { ISFUNC, rl_insert }, /* k */ { ISFUNC, rl_insert }, /* l */ { ISFUNC, rl_insert }, /* m */ { ISFUNC, rl_insert }, /* n */ { ISFUNC, rl_insert }, /* o */ { ISFUNC, rl_insert }, /* p */ { ISFUNC, rl_insert }, /* q */ { ISFUNC, rl_insert }, /* r */ { ISFUNC, rl_insert }, /* s */ { ISFUNC, rl_insert }, /* t */ { ISFUNC, rl_insert }, /* u */ { ISFUNC, rl_insert }, /* v */ { ISFUNC, rl_insert }, /* w */ { ISFUNC, rl_insert }, /* x */ { ISFUNC, rl_insert }, /* y */ { ISFUNC, rl_insert }, /* z */ /* Final punctuation. */ { ISFUNC, rl_insert }, /* { */ { ISFUNC, rl_insert }, /* | */ { ISFUNC, rl_insert }, /* } */ { ISFUNC, rl_insert }, /* ~ */ { ISFUNC, rl_rubout }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Pure 8-bit characters (128 - 159). These might be used in some character sets. */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ { ISFUNC, rl_insert }, /* ? */ /* ISO Latin-1 characters (160 - 255) */ { ISFUNC, rl_insert }, /* No-break space */ { ISFUNC, rl_insert }, /* Inverted exclamation mark */ { ISFUNC, rl_insert }, /* Cent sign */ { ISFUNC, rl_insert }, /* Pound sign */ { ISFUNC, rl_insert }, /* Currency sign */ { ISFUNC, rl_insert }, /* Yen sign */ { ISFUNC, rl_insert }, /* Broken bar */ { ISFUNC, rl_insert }, /* Section sign */ { ISFUNC, rl_insert }, /* Diaeresis */ { ISFUNC, rl_insert }, /* Copyright sign */ { ISFUNC, rl_insert }, /* Feminine ordinal indicator */ { ISFUNC, rl_insert }, /* Left pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Not sign */ { ISFUNC, rl_insert }, /* Soft hyphen */ { ISFUNC, rl_insert }, /* Registered sign */ { ISFUNC, rl_insert }, /* Macron */ { ISFUNC, rl_insert }, /* Degree sign */ { ISFUNC, rl_insert }, /* Plus-minus sign */ { ISFUNC, rl_insert }, /* Superscript two */ { ISFUNC, rl_insert }, /* Superscript three */ { ISFUNC, rl_insert }, /* Acute accent */ { ISFUNC, rl_insert }, /* Micro sign */ { ISFUNC, rl_insert }, /* Pilcrow sign */ { ISFUNC, rl_insert }, /* Middle dot */ { ISFUNC, rl_insert }, /* Cedilla */ { ISFUNC, rl_insert }, /* Superscript one */ { ISFUNC, rl_insert }, /* Masculine ordinal indicator */ { ISFUNC, rl_insert }, /* Right pointing double angle quotation mark */ { ISFUNC, rl_insert }, /* Vulgar fraction one quarter */ { ISFUNC, rl_insert }, /* Vulgar fraction one half */ { ISFUNC, rl_insert }, /* Vulgar fraction three quarters */ { ISFUNC, rl_insert }, /* Inverted questionk mark */ { ISFUNC, rl_insert }, /* Latin capital letter a with grave */ { ISFUNC, rl_insert }, /* Latin capital letter a with acute */ { ISFUNC, rl_insert }, /* Latin capital letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter a with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter a with ring above */ { ISFUNC, rl_insert }, /* Latin capital letter ae */ { ISFUNC, rl_insert }, /* Latin capital letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin capital letter e with grave */ { ISFUNC, rl_insert }, /* Latin capital letter e with acute */ { ISFUNC, rl_insert }, /* Latin capital letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter i with grave */ { ISFUNC, rl_insert }, /* Latin capital letter i with acute */ { ISFUNC, rl_insert }, /* Latin capital letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin capital letter n with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with grave */ { ISFUNC, rl_insert }, /* Latin capital letter o with acute */ { ISFUNC, rl_insert }, /* Latin capital letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter o with tilde */ { ISFUNC, rl_insert }, /* Latin capital letter o with diaeresis */ { ISFUNC, rl_insert }, /* Multiplication sign */ { ISFUNC, rl_insert }, /* Latin capital letter o with stroke */ { ISFUNC, rl_insert }, /* Latin capital letter u with grave */ { ISFUNC, rl_insert }, /* Latin capital letter u with acute */ { ISFUNC, rl_insert }, /* Latin capital letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin capital letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin capital letter Y with acute */ { ISFUNC, rl_insert }, /* Latin capital letter thorn (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter sharp s (German) */ { ISFUNC, rl_insert }, /* Latin small letter a with grave */ { ISFUNC, rl_insert }, /* Latin small letter a with acute */ { ISFUNC, rl_insert }, /* Latin small letter a with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter a with tilde */ { ISFUNC, rl_insert }, /* Latin small letter a with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter a with ring above */ { ISFUNC, rl_insert }, /* Latin small letter ae */ { ISFUNC, rl_insert }, /* Latin small letter c with cedilla */ { ISFUNC, rl_insert }, /* Latin small letter e with grave */ { ISFUNC, rl_insert }, /* Latin small letter e with acute */ { ISFUNC, rl_insert }, /* Latin small letter e with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter e with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter i with grave */ { ISFUNC, rl_insert }, /* Latin small letter i with acute */ { ISFUNC, rl_insert }, /* Latin small letter i with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter i with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter eth (Icelandic) */ { ISFUNC, rl_insert }, /* Latin small letter n with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with grave */ { ISFUNC, rl_insert }, /* Latin small letter o with acute */ { ISFUNC, rl_insert }, /* Latin small letter o with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter o with tilde */ { ISFUNC, rl_insert }, /* Latin small letter o with diaeresis */ { ISFUNC, rl_insert }, /* Division sign */ { ISFUNC, rl_insert }, /* Latin small letter o with stroke */ { ISFUNC, rl_insert }, /* Latin small letter u with grave */ { ISFUNC, rl_insert }, /* Latin small letter u with acute */ { ISFUNC, rl_insert }, /* Latin small letter u with circumflex */ { ISFUNC, rl_insert }, /* Latin small letter u with diaeresis */ { ISFUNC, rl_insert }, /* Latin small letter y with acute */ { ISFUNC, rl_insert }, /* Latin small letter thorn (Icelandic) */ { ISFUNC, rl_insert } /* Latin small letter y with diaeresis */ #endif /* KEYMAP_SIZE > 128 */ }; /* Unused for the time being. */ #if 0 KEYMAP_ENTRY_ARRAY vi_escape_keymap = { /* The regular control keys come first. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-@ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-h */ { ISFUNC, rl_tab_insert}, /* Control-i */ { ISFUNC, rl_emacs_editing_mode}, /* Control-j */ { ISFUNC, rl_kill_line }, /* Control-k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-l */ { ISFUNC, rl_emacs_editing_mode}, /* Control-m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-n */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-z */ { ISFUNC, rl_vi_movement_mode }, /* Control-[ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-\ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* Control-^ */ { ISFUNC, rl_vi_undo }, /* Control-_ */ /* The start of printing characters. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* SPACE */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ! */ { ISFUNC, (rl_command_func_t *)0x0 }, /* " */ { ISFUNC, (rl_command_func_t *)0x0 }, /* # */ { ISFUNC, (rl_command_func_t *)0x0 }, /* $ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* % */ { ISFUNC, (rl_command_func_t *)0x0 }, /* & */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ' */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ( */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ) */ { ISFUNC, (rl_command_func_t *)0x0 }, /* * */ { ISFUNC, (rl_command_func_t *)0x0 }, /* + */ { ISFUNC, (rl_command_func_t *)0x0 }, /* , */ { ISFUNC, (rl_command_func_t *)0x0 }, /* - */ { ISFUNC, (rl_command_func_t *)0x0 }, /* . */ { ISFUNC, (rl_command_func_t *)0x0 }, /* / */ /* Regular digits. */ { ISFUNC, rl_vi_arg_digit }, /* 0 */ { ISFUNC, rl_vi_arg_digit }, /* 1 */ { ISFUNC, rl_vi_arg_digit }, /* 2 */ { ISFUNC, rl_vi_arg_digit }, /* 3 */ { ISFUNC, rl_vi_arg_digit }, /* 4 */ { ISFUNC, rl_vi_arg_digit }, /* 5 */ { ISFUNC, rl_vi_arg_digit }, /* 6 */ { ISFUNC, rl_vi_arg_digit }, /* 7 */ { ISFUNC, rl_vi_arg_digit }, /* 8 */ { ISFUNC, rl_vi_arg_digit }, /* 9 */ /* A little more punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* : */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ; */ { ISFUNC, (rl_command_func_t *)0x0 }, /* < */ { ISFUNC, (rl_command_func_t *)0x0 }, /* = */ { ISFUNC, (rl_command_func_t *)0x0 }, /* > */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ? */ { ISFUNC, (rl_command_func_t *)0x0 }, /* @ */ /* Uppercase alphabet. */ { ISFUNC, rl_do_lowercase_version }, /* A */ { ISFUNC, rl_do_lowercase_version }, /* B */ { ISFUNC, rl_do_lowercase_version }, /* C */ { ISFUNC, rl_do_lowercase_version }, /* D */ { ISFUNC, rl_do_lowercase_version }, /* E */ { ISFUNC, rl_do_lowercase_version }, /* F */ { ISFUNC, rl_do_lowercase_version }, /* G */ { ISFUNC, rl_do_lowercase_version }, /* H */ { ISFUNC, rl_do_lowercase_version }, /* I */ { ISFUNC, rl_do_lowercase_version }, /* J */ { ISFUNC, rl_do_lowercase_version }, /* K */ { ISFUNC, rl_do_lowercase_version }, /* L */ { ISFUNC, rl_do_lowercase_version }, /* M */ { ISFUNC, rl_do_lowercase_version }, /* N */ { ISFUNC, rl_do_lowercase_version }, /* O */ { ISFUNC, rl_do_lowercase_version }, /* P */ { ISFUNC, rl_do_lowercase_version }, /* Q */ { ISFUNC, rl_do_lowercase_version }, /* R */ { ISFUNC, rl_do_lowercase_version }, /* S */ { ISFUNC, rl_do_lowercase_version }, /* T */ { ISFUNC, rl_do_lowercase_version }, /* U */ { ISFUNC, rl_do_lowercase_version }, /* V */ { ISFUNC, rl_do_lowercase_version }, /* W */ { ISFUNC, rl_do_lowercase_version }, /* X */ { ISFUNC, rl_do_lowercase_version }, /* Y */ { ISFUNC, rl_do_lowercase_version }, /* Z */ /* Some more punctuation. */ { ISFUNC, rl_arrow_keys }, /* [ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* \ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ] */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ^ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* _ */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ` */ /* Lowercase alphabet. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* a */ { ISFUNC, (rl_command_func_t *)0x0 }, /* b */ { ISFUNC, (rl_command_func_t *)0x0 }, /* c */ { ISFUNC, (rl_command_func_t *)0x0 }, /* d */ { ISFUNC, (rl_command_func_t *)0x0 }, /* e */ { ISFUNC, (rl_command_func_t *)0x0 }, /* f */ { ISFUNC, (rl_command_func_t *)0x0 }, /* g */ { ISFUNC, (rl_command_func_t *)0x0 }, /* h */ { ISFUNC, (rl_command_func_t *)0x0 }, /* i */ { ISFUNC, (rl_command_func_t *)0x0 }, /* j */ { ISFUNC, (rl_command_func_t *)0x0 }, /* k */ { ISFUNC, (rl_command_func_t *)0x0 }, /* l */ { ISFUNC, (rl_command_func_t *)0x0 }, /* m */ { ISFUNC, (rl_command_func_t *)0x0 }, /* n */ { ISFUNC, rl_arrow_keys }, /* o */ { ISFUNC, (rl_command_func_t *)0x0 }, /* p */ { ISFUNC, (rl_command_func_t *)0x0 }, /* q */ { ISFUNC, (rl_command_func_t *)0x0 }, /* r */ { ISFUNC, (rl_command_func_t *)0x0 }, /* s */ { ISFUNC, (rl_command_func_t *)0x0 }, /* t */ { ISFUNC, (rl_command_func_t *)0x0 }, /* u */ { ISFUNC, (rl_command_func_t *)0x0 }, /* v */ { ISFUNC, (rl_command_func_t *)0x0 }, /* w */ { ISFUNC, (rl_command_func_t *)0x0 }, /* x */ { ISFUNC, (rl_command_func_t *)0x0 }, /* y */ { ISFUNC, (rl_command_func_t *)0x0 }, /* z */ /* Final punctuation. */ { ISFUNC, (rl_command_func_t *)0x0 }, /* { */ { ISFUNC, (rl_command_func_t *)0x0 }, /* | */ { ISFUNC, (rl_command_func_t *)0x0 }, /* } */ { ISFUNC, (rl_command_func_t *)0x0 }, /* ~ */ { ISFUNC, rl_backward_kill_word }, /* RUBOUT */ #if KEYMAP_SIZE > 128 /* Undefined keys. */ { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 }, { ISFUNC, (rl_command_func_t *)0x0 } #endif /* KEYMAP_SIZE > 128 */ }; #endif readline-7.0/vi_mode.c000644 000436 000120 00000143555 12664646056 015030 0ustar00chetadmin000000 000000 /* vi_mode.c -- A vi emulation mode for Bash. Derived from code written by Jeff Sparkes (jsparkes@bnr.ca). */ /* Copyright (C) 1987-2016 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY /* **************************************************************** */ /* */ /* VI Emulation Mode */ /* */ /* **************************************************************** */ #include "rlconf.h" #if defined (VI_MODE) #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # include #endif #include /* Some standard library routines. */ #include "rldefs.h" #include "rlmbutil.h" #include "readline.h" #include "history.h" #include "rlprivate.h" #include "xmalloc.h" #ifndef member #define member(c, s) ((c) ? (char *)strchr ((s), (c)) != (char *)NULL : 0) #endif int _rl_vi_last_command = 'i'; /* default `.' puts you in insert mode */ _rl_vimotion_cxt *_rl_vimvcxt = 0; /* Non-zero indicates we are redoing a vi-mode command with `.' */ int _rl_vi_redoing; /* Non-zero means enter insertion mode. */ static int _rl_vi_doing_insert; /* Command keys which do movement for xxx_to commands. */ static const char * const vi_motion = " hl^$0ftFT;,%wbeWBE|`"; /* Keymap used for vi replace characters. Created dynamically since rarely used. */ static Keymap vi_replace_map; /* The number of characters inserted in the last replace operation. */ static int vi_replace_count; /* If non-zero, we have text inserted after a c[motion] command that put us implicitly into insert mode. Some people want this text to be attached to the command so that it is `redoable' with `.'. */ static int vi_continued_command; static char *vi_insert_buffer; static int vi_insert_buffer_size; static int _rl_vi_last_repeat = 1; static int _rl_vi_last_arg_sign = 1; static int _rl_vi_last_motion; #if defined (HANDLE_MULTIBYTE) static char _rl_vi_last_search_mbchar[MB_LEN_MAX]; static int _rl_vi_last_search_mblen; #else static int _rl_vi_last_search_char; #endif static int _rl_vi_last_replacement; static int _rl_vi_last_key_before_insert; /* Text modification commands. These are the `redoable' commands. */ static const char * const vi_textmod = "_*\\AaIiCcDdPpYyRrSsXx~"; /* Arrays for the saved marks. */ static int vi_mark_chars['z' - 'a' + 1]; static void _rl_vi_replace_insert PARAMS((int)); static void _rl_vi_save_replace PARAMS((void)); static void _rl_vi_stuff_insert PARAMS((int)); static void _rl_vi_save_insert PARAMS((UNDO_LIST *)); static void vi_save_insert_buffer PARAMS ((int, int)); static void _rl_vi_backup PARAMS((void)); static int _rl_vi_arg_dispatch PARAMS((int)); static int rl_digit_loop1 PARAMS((void)); static int _rl_vi_set_mark PARAMS((void)); static int _rl_vi_goto_mark PARAMS((void)); static void _rl_vi_append_forward PARAMS((int)); static int _rl_vi_callback_getchar PARAMS((char *, int)); #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_set_mark PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_goto_mark PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_change_char PARAMS((_rl_callback_generic_arg *)); static int _rl_vi_callback_char_search PARAMS((_rl_callback_generic_arg *)); #endif static int rl_domove_read_callback PARAMS((_rl_vimotion_cxt *)); static int rl_domove_motion_callback PARAMS((_rl_vimotion_cxt *)); static int rl_vi_domove_getchar PARAMS((_rl_vimotion_cxt *)); static int vi_change_dispatch PARAMS((_rl_vimotion_cxt *)); static int vi_delete_dispatch PARAMS((_rl_vimotion_cxt *)); static int vi_yank_dispatch PARAMS((_rl_vimotion_cxt *)); static int vidomove_dispatch PARAMS((_rl_vimotion_cxt *)); void _rl_vi_initialize_line () { register int i, n; n = sizeof (vi_mark_chars) / sizeof (vi_mark_chars[0]); for (i = 0; i < n; i++) vi_mark_chars[i] = -1; RL_UNSETSTATE(RL_STATE_VICMDONCE); } void _rl_vi_reset_last () { _rl_vi_last_command = 'i'; _rl_vi_last_repeat = 1; _rl_vi_last_arg_sign = 1; _rl_vi_last_motion = 0; } void _rl_vi_set_last (key, repeat, sign) int key, repeat, sign; { _rl_vi_last_command = key; _rl_vi_last_repeat = repeat; _rl_vi_last_arg_sign = sign; } /* A convenience function that calls _rl_vi_set_last to save the last command information and enters insertion mode. */ void rl_vi_start_inserting (key, repeat, sign) int key, repeat, sign; { _rl_vi_set_last (key, repeat, sign); rl_vi_insertion_mode (1, key); } /* Is the command C a VI mode text modification command? */ int _rl_vi_textmod_command (c) int c; { return (member (c, vi_textmod)); } int _rl_vi_motion_command (c) int c; { return (member (c, vi_motion)); } static void _rl_vi_replace_insert (count) int count; { int nchars; nchars = strlen (vi_insert_buffer); rl_begin_undo_group (); while (count--) /* nchars-1 to compensate for _rl_replace_text using `end+1' in call to rl_delete_text */ _rl_replace_text (vi_insert_buffer, rl_point, rl_point+nchars-1); rl_end_undo_group (); } static void _rl_vi_stuff_insert (count) int count; { rl_begin_undo_group (); while (count--) rl_insert_text (vi_insert_buffer); rl_end_undo_group (); } /* Bound to `.'. Called from command mode, so we know that we have to redo a text modification command. The default for _rl_vi_last_command puts you back into insert mode. */ int rl_vi_redo (count, c) int count, c; { int r; if (rl_explicit_arg == 0) { rl_numeric_arg = _rl_vi_last_repeat; rl_arg_sign = _rl_vi_last_arg_sign; } r = 0; _rl_vi_redoing = 1; /* If we're redoing an insert with `i', stuff in the inserted text and do not go into insertion mode. */ if (_rl_vi_last_command == 'i' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_stuff_insert (count); /* And back up point over the last character inserted. */ if (rl_point > 0) _rl_vi_backup (); } else if (_rl_vi_last_command == 'R' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_replace_insert (count); /* And back up point over the last character inserted. */ if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `I', but move to the beginning of the line like the `I' command does. */ else if (_rl_vi_last_command == 'I' && vi_insert_buffer && *vi_insert_buffer) { rl_beg_of_line (1, 'I'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `a', but move forward a character first like the `a' command does. */ else if (_rl_vi_last_command == 'a' && vi_insert_buffer && *vi_insert_buffer) { _rl_vi_append_forward ('a'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } /* Ditto for redoing an insert with `A', but move to the end of the line like the `A' command does. */ else if (_rl_vi_last_command == 'A' && vi_insert_buffer && *vi_insert_buffer) { rl_end_of_line (1, 'A'); _rl_vi_stuff_insert (count); if (rl_point > 0) _rl_vi_backup (); } else r = _rl_dispatch (_rl_vi_last_command, _rl_keymap); _rl_vi_redoing = 0; return (r); } /* A placeholder for further expansion. */ int rl_vi_undo (count, key) int count, key; { return (rl_undo_command (count, key)); } /* Yank the nth arg from the previous line into this line at point. */ int rl_vi_yank_arg (count, key) int count, key; { /* Readline thinks that the first word on a line is the 0th, while vi thinks the first word on a line is the 1st. Compensate. */ if (rl_explicit_arg) rl_yank_nth_arg (count - 1, 0); else rl_yank_nth_arg ('$', 0); return (0); } /* With an argument, move back that many history lines, else move to the beginning of history. */ int rl_vi_fetch_history (count, c) int count, c; { int wanted; /* Giving an argument of n means we want the nth command in the history file. The command number is interpreted the same way that the bash `history' command does it -- that is, giving an argument count of 450 to this command would get the command listed as number 450 in the output of `history'. */ if (rl_explicit_arg) { wanted = history_base + where_history () - count; if (wanted <= 0) rl_beginning_of_history (0, 0); else rl_get_previous_history (wanted, c); } else rl_beginning_of_history (count, 0); return (0); } /* Search again for the last thing searched for. */ int rl_vi_search_again (count, key) int count, key; { switch (key) { case 'n': rl_noninc_reverse_search_again (count, key); break; case 'N': rl_noninc_forward_search_again (count, key); break; } return (0); } /* Do a vi style search. */ int rl_vi_search (count, key) int count, key; { switch (key) { case '?': _rl_free_saved_history_line (); rl_noninc_forward_search (count, key); break; case '/': _rl_free_saved_history_line (); rl_noninc_reverse_search (count, key); break; default: rl_ding (); break; } return (0); } /* Completion, from vi's point of view. */ int rl_vi_complete (ignore, key) int ignore, key; { if ((rl_point < rl_end) && (!whitespace (rl_line_buffer[rl_point]))) { if (!whitespace (rl_line_buffer[rl_point + 1])) rl_vi_end_word (1, 'E'); rl_point++; } if (key == '*') rl_complete_internal ('*'); /* Expansion and replacement. */ else if (key == '=') rl_complete_internal ('?'); /* List possible completions. */ else if (key == '\\') rl_complete_internal (TAB); /* Standard Readline completion. */ else rl_complete (0, key); if (key == '*' || key == '\\') rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } /* Tilde expansion for vi mode. */ int rl_vi_tilde_expand (ignore, key) int ignore, key; { rl_tilde_expand (0, key); rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } /* Previous word in vi mode. */ int rl_vi_prev_word (count, key) int count, key; { if (count < 0) return (rl_vi_next_word (-count, key)); if (rl_point == 0) { rl_ding (); return (0); } if (_rl_uppercase_p (key)) rl_vi_bWord (count, key); else rl_vi_bword (count, key); return (0); } /* Next word in vi mode. */ int rl_vi_next_word (count, key) int count, key; { if (count < 0) return (rl_vi_prev_word (-count, key)); if (rl_point >= (rl_end - 1)) { rl_ding (); return (0); } if (_rl_uppercase_p (key)) rl_vi_fWord (count, key); else rl_vi_fword (count, key); return (0); } /* Move to the end of the ?next? word. */ int rl_vi_end_word (count, key) int count, key; { if (count < 0) { rl_ding (); return 1; } if (_rl_uppercase_p (key)) rl_vi_eWord (count, key); else rl_vi_eword (count, key); return (0); } /* Move forward a word the way that 'W' does. */ int rl_vi_fWord (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { /* Skip until whitespace. */ while (!whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; /* Now skip whitespace. */ while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } return (0); } int rl_vi_bWord (count, ignore) int count, ignore; { while (count-- && rl_point > 0) { /* If we are at the start of a word, move back to whitespace so we will go back to the start of the previous word. */ if (!whitespace (rl_line_buffer[rl_point]) && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; while (rl_point > 0 && whitespace (rl_line_buffer[rl_point])) rl_point--; if (rl_point > 0) { while (--rl_point >= 0 && !whitespace (rl_line_buffer[rl_point])); rl_point++; } } return (0); } int rl_vi_eWord (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { if (!whitespace (rl_line_buffer[rl_point])) rl_point++; /* Move to the next non-whitespace character (to the start of the next word). */ while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (rl_point && rl_point < rl_end) { /* Skip whitespace. */ while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; /* Skip until whitespace. */ while (rl_point < rl_end && !whitespace (rl_line_buffer[rl_point])) rl_point++; /* Move back to the last character of the word. */ rl_point--; } } return (0); } int rl_vi_fword (count, ignore) int count, ignore; { while (count-- && rl_point < (rl_end - 1)) { /* Move to white space (really non-identifer). */ if (_rl_isident (rl_line_buffer[rl_point])) { while (_rl_isident (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } else /* if (!whitespace (rl_line_buffer[rl_point])) */ { while (!_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } /* Move past whitespace. */ while (whitespace (rl_line_buffer[rl_point]) && rl_point < rl_end) rl_point++; } return (0); } int rl_vi_bword (count, ignore) int count, ignore; { while (count-- && rl_point > 0) { int last_is_ident; /* If we are at the start of a word, move back to whitespace so we will go back to the start of the previous word. */ if (!whitespace (rl_line_buffer[rl_point]) && whitespace (rl_line_buffer[rl_point - 1])) rl_point--; /* If this character and the previous character are `opposite', move back so we don't get messed up by the rl_point++ down there in the while loop. Without this code, words like `l;' screw up the function. */ last_is_ident = _rl_isident (rl_line_buffer[rl_point - 1]); if ((_rl_isident (rl_line_buffer[rl_point]) && !last_is_ident) || (!_rl_isident (rl_line_buffer[rl_point]) && last_is_ident)) rl_point--; while (rl_point > 0 && whitespace (rl_line_buffer[rl_point])) rl_point--; if (rl_point > 0) { if (_rl_isident (rl_line_buffer[rl_point])) while (--rl_point >= 0 && _rl_isident (rl_line_buffer[rl_point])); else while (--rl_point >= 0 && !_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point])); rl_point++; } } return (0); } int rl_vi_eword (count, ignore) int count, ignore; { while (count-- && rl_point < rl_end - 1) { if (!whitespace (rl_line_buffer[rl_point])) rl_point++; while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; if (rl_point < rl_end) { if (_rl_isident (rl_line_buffer[rl_point])) while (++rl_point < rl_end && _rl_isident (rl_line_buffer[rl_point])); else while (++rl_point < rl_end && !_rl_isident (rl_line_buffer[rl_point]) && !whitespace (rl_line_buffer[rl_point])); } rl_point--; } return (0); } int rl_vi_insert_beg (count, key) int count, key; { rl_beg_of_line (1, key); rl_vi_insert_mode (1, key); return (0); } static void _rl_vi_append_forward (key) int key; { int point; if (rl_point < rl_end) { if (MB_CUR_MAX == 1 || rl_byte_oriented) rl_point++; else { point = rl_point; #if 0 rl_forward_char (1, key); #else rl_point = _rl_forward_char_internal (1); #endif if (point == rl_point) rl_point = rl_end; } } } int rl_vi_append_mode (count, key) int count, key; { _rl_vi_append_forward (key); rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } int rl_vi_append_eol (count, key) int count, key; { rl_end_of_line (1, key); rl_vi_append_mode (1, key); return (0); } /* What to do in the case of C-d. */ int rl_vi_eof_maybe (count, c) int count, c; { return (rl_newline (1, '\n')); } /* Insertion mode stuff. */ /* Switching from one mode to the other really just involves switching keymaps. */ int rl_vi_insertion_mode (count, key) int count, key; { _rl_keymap = vi_insertion_keymap; _rl_vi_last_key_before_insert = key; if (_rl_show_mode_in_prompt) _rl_reset_prompt (); return (0); } int rl_vi_insert_mode (count, key) int count, key; { rl_vi_start_inserting (key, 1, rl_arg_sign); return (0); } static void vi_save_insert_buffer (start, len) int start, len; { /* Same code as _rl_vi_save_insert below */ if (len >= vi_insert_buffer_size) { vi_insert_buffer_size += (len + 32) - (len % 32); vi_insert_buffer = (char *)xrealloc (vi_insert_buffer, vi_insert_buffer_size); } strncpy (vi_insert_buffer, rl_line_buffer + start, len - 1); vi_insert_buffer[len-1] = '\0'; } static void _rl_vi_save_replace () { int len, start, end; UNDO_LIST *up; up = rl_undo_list; if (up == 0 || up->what != UNDO_END || vi_replace_count <= 0) { if (vi_insert_buffer_size >= 1) vi_insert_buffer[0] = '\0'; return; } /* Let's try it the quick and easy way for now. This should essentially accommodate every UNDO_INSERT and save the inserted text to vi_insert_buffer */ end = rl_point; start = end - vi_replace_count + 1; len = vi_replace_count + 1; vi_save_insert_buffer (start, len); } static void _rl_vi_save_insert (up) UNDO_LIST *up; { int len, start, end; if (up == 0 || up->what != UNDO_INSERT) { if (vi_insert_buffer_size >= 1) vi_insert_buffer[0] = '\0'; return; } start = up->start; end = up->end; len = end - start + 1; vi_save_insert_buffer (start, len); } void _rl_vi_done_inserting () { if (_rl_vi_doing_insert) { /* The `C', `s', and `S' commands set this. */ rl_end_undo_group (); /* Now, the text between rl_undo_list->next->start and rl_undo_list->next->end is what was inserted while in insert mode. It gets copied to VI_INSERT_BUFFER because it depends on absolute indices into the line which may change (though they probably will not). */ _rl_vi_doing_insert = 0; if (_rl_vi_last_key_before_insert == 'R') _rl_vi_save_replace (); /* Half the battle */ else _rl_vi_save_insert (rl_undo_list->next); vi_continued_command = 1; } else { if (rl_undo_list && (_rl_vi_last_key_before_insert == 'i' || _rl_vi_last_key_before_insert == 'a' || _rl_vi_last_key_before_insert == 'I' || _rl_vi_last_key_before_insert == 'A')) _rl_vi_save_insert (rl_undo_list); /* XXX - Other keys probably need to be checked. */ else if (_rl_vi_last_key_before_insert == 'C') rl_end_undo_group (); while (_rl_undo_group_level > 0) rl_end_undo_group (); vi_continued_command = 0; } } int rl_vi_movement_mode (count, key) int count, key; { if (rl_point > 0) rl_backward_char (1, key); _rl_keymap = vi_movement_keymap; _rl_vi_done_inserting (); /* This is how POSIX.2 says `U' should behave -- everything up until the first time you go into command mode should not be undone. */ if (RL_ISSTATE (RL_STATE_VICMDONCE) == 0) rl_free_undo_list (); if (_rl_show_mode_in_prompt) _rl_reset_prompt (); RL_SETSTATE (RL_STATE_VICMDONCE); return (0); } int rl_vi_arg_digit (count, c) int count, c; { if (c == '0' && rl_numeric_arg == 1 && !rl_explicit_arg) return (rl_beg_of_line (1, c)); else return (rl_digit_argument (count, c)); } /* Change the case of the next COUNT characters. */ #if defined (HANDLE_MULTIBYTE) static int _rl_vi_change_mbchar_case (count) int count; { wchar_t wc; char mb[MB_LEN_MAX+1]; int mlen, p; size_t m; mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_adjust_point (rl_line_buffer, rl_point, &ps) > 0) count--; while (count-- && rl_point < rl_end) { m = mbrtowc (&wc, rl_line_buffer + rl_point, rl_end - rl_point, &ps); if (MB_INVALIDCH (m)) wc = (wchar_t)rl_line_buffer[rl_point]; else if (MB_NULLWCH (m)) wc = L'\0'; if (iswupper (wc)) wc = towlower (wc); else if (iswlower (wc)) wc = towupper (wc); else { /* Just skip over chars neither upper nor lower case */ rl_forward_char (1, 0); continue; } /* Vi is kind of strange here. */ if (wc) { p = rl_point; mlen = wcrtomb (mb, wc, &ps); if (mlen >= 0) mb[mlen] = '\0'; rl_begin_undo_group (); rl_vi_delete (1, 0); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; /* XXX - should we advance more than 1 for mbchar? */ rl_insert_text (mb); rl_end_undo_group (); rl_vi_check (); } else rl_forward_char (1, 0); } return 0; } #endif int rl_vi_change_case (count, ignore) int count, ignore; { int c, p; /* Don't try this on an empty line. */ if (rl_point >= rl_end) return (0); c = 0; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) return (_rl_vi_change_mbchar_case (count)); #endif while (count-- && rl_point < rl_end) { if (_rl_uppercase_p (rl_line_buffer[rl_point])) c = _rl_to_lower (rl_line_buffer[rl_point]); else if (_rl_lowercase_p (rl_line_buffer[rl_point])) c = _rl_to_upper (rl_line_buffer[rl_point]); else { /* Just skip over characters neither upper nor lower case. */ rl_forward_char (1, c); continue; } /* Vi is kind of strange here. */ if (c) { p = rl_point; rl_begin_undo_group (); rl_vi_delete (1, c); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; _rl_insert_char (1, c); rl_end_undo_group (); rl_vi_check (); } else rl_forward_char (1, c); } return (0); } int rl_vi_put (count, key) int count, key; { if (!_rl_uppercase_p (key) && (rl_point + 1 <= rl_end)) rl_point = _rl_find_next_mbchar (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO); while (count--) rl_yank (1, key); rl_backward_char (1, key); return (0); } static void _rl_vi_backup () { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point--; } int rl_vi_check () { if (rl_point && rl_point == rl_end) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point--; } return (0); } int rl_vi_column (count, key) int count, key; { if (count > rl_end) rl_end_of_line (1, key); else rl_point = count - 1; return (0); } /* Process C as part of the current numeric argument. Return -1 if the argument should be aborted, 0 if we should not read any more chars, and 1 if we should continue to read chars. */ static int _rl_vi_arg_dispatch (c) int c; { int key; key = c; if (c >= 0 && _rl_keymap[c].type == ISFUNC && _rl_keymap[c].function == rl_universal_argument) { rl_numeric_arg *= 4; return 1; } c = UNMETA (c); if (_rl_digit_p (c)) { if (rl_explicit_arg) rl_numeric_arg = (rl_numeric_arg * 10) + _rl_digit_value (c); else rl_numeric_arg = _rl_digit_value (c); rl_explicit_arg = 1; return 1; /* keep going */ } else { rl_clear_message (); rl_stuff_char (key); return 0; /* done */ } } /* A simplified loop for vi. Don't dispatch key at end. Don't recognize minus sign? Should this do rl_save_prompt/rl_restore_prompt? */ static int rl_digit_loop1 () { int c, r; while (1) { if (_rl_arg_overflow ()) return 1; c = _rl_arg_getchar (); r = _rl_vi_arg_dispatch (c); if (r <= 0) break; } RL_UNSETSTATE(RL_STATE_NUMERICARG); return (0); } static void _rl_mvcxt_init (m, op, key) _rl_vimotion_cxt *m; int op, key; { m->op = op; m->state = m->flags = 0; m->ncxt = 0; m->numeric_arg = -1; m->start = rl_point; m->end = rl_end; m->key = key; m->motion = -1; } static _rl_vimotion_cxt * _rl_mvcxt_alloc (op, key) int op, key; { _rl_vimotion_cxt *m; m = xmalloc (sizeof (_rl_vimotion_cxt)); _rl_mvcxt_init (m, op, key); return m; } static void _rl_mvcxt_dispose (m) _rl_vimotion_cxt *m; { xfree (m); } static int rl_domove_motion_callback (m) _rl_vimotion_cxt *m; { int c; _rl_vi_last_motion = c = m->motion; /* Append a blank character temporarily so that the motion routines work right at the end of the line. Original value of rl_end is saved as m->end. */ rl_line_buffer[rl_end++] = ' '; rl_line_buffer[rl_end] = '\0'; _rl_dispatch (c, _rl_keymap); #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { /* Messy case where char search can be vi motion command; see rest of details in callback.c. vi_char_search and callback_char_search just set and unset the CHARSEARCH state. This is where any vi motion command that needs to set its own state should be handled, with any corresponding code to manage that state in callback.c */ if (RL_ISSTATE (RL_STATE_CHARSEARCH)) return 0; else return (_rl_vi_domove_motion_cleanup (c, m)); } #endif return (_rl_vi_domove_motion_cleanup (c, m)); } int _rl_vi_domove_motion_cleanup (c, m) int c; _rl_vimotion_cxt *m; { int r; /* Remove the blank that we added in rl_domove_motion_callback. */ rl_end = m->end; rl_line_buffer[rl_end] = '\0'; if (rl_point > rl_end) rl_point = rl_end; /* No change in position means the command failed. */ if (rl_mark == rl_point) { RL_UNSETSTATE (RL_STATE_VIMOTION); return (-1); } /* rl_vi_f[wW]ord () leaves the cursor on the first character of the next word. If we are not at the end of the line, and we are on a non-whitespace character, move back one (presumably to whitespace). */ if ((_rl_to_upper (c) == 'W') && rl_point < rl_end && rl_point > rl_mark && !whitespace (rl_line_buffer[rl_point])) rl_point--; /* If cw or cW, back up to the end of a word, so the behaviour of ce or cE is the actual result. Brute-force, no subtlety. */ if (m->key == 'c' && rl_point >= rl_mark && (_rl_to_upper (c) == 'W')) { /* Don't move farther back than where we started. */ while (rl_point > rl_mark && whitespace (rl_line_buffer[rl_point])) rl_point--; /* Posix.2 says that if cw or cW moves the cursor towards the end of the line, the character under the cursor should be deleted. */ if (rl_point == rl_mark) rl_point++; else { /* Move past the end of the word so that the kill doesn't remove the last letter of the previous word. Only do this if we are not at the end of the line. */ if (rl_point >= 0 && rl_point < (rl_end - 1) && !whitespace (rl_line_buffer[rl_point])) rl_point++; } } if (rl_mark < rl_point) SWAP (rl_point, rl_mark); #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) (*rl_redisplay_function)(); /* make sure motion is displayed */ #endif r = vidomove_dispatch (m); return (r); } #define RL_VIMOVENUMARG() (RL_ISSTATE (RL_STATE_VIMOTION) && RL_ISSTATE (RL_STATE_NUMERICARG)) static int rl_domove_read_callback (m) _rl_vimotion_cxt *m; { int c, save; c = m->motion; if (member (c, vi_motion)) { #if defined (READLINE_CALLBACKS) /* If we just read a vi-mode motion command numeric argument, turn off the `reading numeric arg' state */ if (RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) RL_UNSETSTATE (RL_STATE_NUMERICARG); #endif /* Should do everything, including turning off RL_STATE_VIMOTION */ return (rl_domove_motion_callback (m)); } else if (m->key == c && (m->key == 'd' || m->key == 'y' || m->key == 'c')) { rl_mark = rl_end; rl_beg_of_line (1, c); _rl_vi_last_motion = c; RL_UNSETSTATE (RL_STATE_VIMOTION); return (vidomove_dispatch (m)); } #if defined (READLINE_CALLBACKS) /* XXX - these need to handle rl_universal_argument bindings */ /* Reading vi motion char continuing numeric argument */ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_VIMOVENUMARG()) { return (_rl_vi_arg_dispatch (c)); } /* Readine vi motion char starting numeric argument */ else if (_rl_digit_p (c) && RL_ISSTATE (RL_STATE_CALLBACK) && RL_ISSTATE (RL_STATE_VIMOTION) && (RL_ISSTATE (RL_STATE_NUMERICARG) == 0)) { RL_SETSTATE (RL_STATE_NUMERICARG); return (_rl_vi_arg_dispatch (c)); } #endif else if (_rl_digit_p (c)) { /* This code path taken when not in callback mode */ save = rl_numeric_arg; rl_numeric_arg = _rl_digit_value (c); rl_explicit_arg = 1; RL_SETSTATE (RL_STATE_NUMERICARG); rl_digit_loop1 (); rl_numeric_arg *= save; c = rl_vi_domove_getchar (m); if (c < 0) { m->motion = 0; return -1; } m->motion = c; return (rl_domove_motion_callback (m)); } else { RL_UNSETSTATE (RL_STATE_VIMOTION); RL_UNSETSTATE (RL_STATE_NUMERICARG); return (1); } } static int rl_vi_domove_getchar (m) _rl_vimotion_cxt *m; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); return c; } #if defined (READLINE_CALLBACKS) int _rl_vi_domove_callback (m) _rl_vimotion_cxt *m; { int c, r; m->motion = c = rl_vi_domove_getchar (m); if (c < 0) return 1; /* EOF */ r = rl_domove_read_callback (m); return ((r == 0) ? r : 1); /* normalize return values */ } #endif /* This code path taken when not in callback mode. */ int rl_vi_domove (x, ignore) int x, *ignore; { int r; _rl_vimotion_cxt *m; m = _rl_vimvcxt; *ignore = m->motion = rl_vi_domove_getchar (m); if (m->motion < 0) { m->motion = 0; return -1; } return (rl_domove_read_callback (m)); } static int vi_delete_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. */ if (((strchr (" l|h^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; rl_kill_text (rl_point, rl_mark); return (0); } int rl_vi_delete_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_DELETE, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing && _rl_vi_last_motion != 'd') /* `dd' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing) /* handle redoing `dd' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vi_change_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. c[wW] are handled by special-case code in rl_vi_domove(), and already leave the mark at the correct location. */ if (((strchr (" l|hwW^0bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; /* The cursor never moves with c[wW]. */ if ((_rl_to_upper (m->motion) == 'W') && rl_point < m->start) rl_point = m->start; if (_rl_vi_redoing) { if (vi_insert_buffer && *vi_insert_buffer) rl_begin_undo_group (); rl_delete_text (rl_point, rl_mark); if (vi_insert_buffer && *vi_insert_buffer) { rl_insert_text (vi_insert_buffer); rl_end_undo_group (); } } else { rl_begin_undo_group (); /* to make the `u' command work */ rl_kill_text (rl_point, rl_mark); /* `C' does not save the text inserted for undoing or redoing. */ if (_rl_uppercase_p (m->key) == 0) _rl_vi_doing_insert = 1; /* XXX -- TODO -- use m->numericarg? */ rl_vi_start_inserting (m->key, rl_numeric_arg, rl_arg_sign); } return (0); } int rl_vi_change_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_CHANGE, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing && _rl_vi_last_motion != 'c') /* `cc' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing) /* handle redoing `cc' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; /* normalize return value */ } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vi_yank_dispatch (m) _rl_vimotion_cxt *m; { /* These are the motion commands that do not require adjusting the mark. */ if (((strchr (" l|h^0%bBFT`", m->motion) == 0) && (rl_point >= m->start)) && (rl_mark < rl_end)) rl_mark++; rl_begin_undo_group (); rl_kill_text (rl_point, rl_mark); rl_end_undo_group (); rl_do_undo (); rl_point = m->start; return (0); } int rl_vi_yank_to (count, key) int count, key; { int c, r; _rl_vimvcxt = _rl_mvcxt_alloc (VIM_YANK, key); _rl_vimvcxt->start = rl_point; rl_mark = rl_point; if (_rl_uppercase_p (key)) { _rl_vimvcxt->motion = '$'; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing && _rl_vi_last_motion != 'y') /* `yy' is special */ { _rl_vimvcxt->motion = _rl_vi_last_motion; r = rl_domove_motion_callback (_rl_vimvcxt); } else if (_rl_vi_redoing) /* handle redoing `yy' here */ { _rl_vimvcxt->motion = _rl_vi_last_motion; rl_mark = rl_end; rl_beg_of_line (1, key); RL_UNSETSTATE (RL_STATE_VIMOTION); r = vidomove_dispatch (_rl_vimvcxt); } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { RL_SETSTATE (RL_STATE_VIMOTION); return (0); } #endif else r = rl_vi_domove (key, &c); if (r < 0) { rl_ding (); r = -1; } _rl_mvcxt_dispose (_rl_vimvcxt); _rl_vimvcxt = 0; return r; } static int vidomove_dispatch (m) _rl_vimotion_cxt *m; { int r; switch (m->op) { case VIM_DELETE: r = vi_delete_dispatch (m); break; case VIM_CHANGE: r = vi_change_dispatch (m); break; case VIM_YANK: r = vi_yank_dispatch (m); break; default: _rl_errmsg ("vidomove_dispatch: unknown operator %d", m->op); r = 1; break; } RL_UNSETSTATE (RL_STATE_VIMOTION); return r; } int rl_vi_rubout (count, key) int count, key; { int opoint; if (count < 0) return (rl_vi_delete (-count, key)); if (rl_point == 0) { rl_ding (); return 1; } opoint = rl_point; if (count > 1 && MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_backward_char (count, key); else if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_point = _rl_find_prev_mbchar (rl_line_buffer, rl_point, MB_FIND_NONZERO); else rl_point -= count; if (rl_point < 0) rl_point = 0; rl_kill_text (rl_point, opoint); return (0); } int rl_vi_delete (count, key) int count, key; { int end; if (count < 0) return (rl_vi_rubout (-count, key)); if (rl_end == 0) { rl_ding (); return 1; } if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) end = _rl_find_next_mbchar (rl_line_buffer, rl_point, count, MB_FIND_NONZERO); else end = rl_point + count; if (end >= rl_end) end = rl_end; rl_kill_text (rl_point, end); if (rl_point > 0 && rl_point == rl_end) rl_backward_char (1, key); return (0); } /* This does what Posix specifies vi-mode C-w to do: using whitespace and punctuation characters as the word boundaries. */ #define vi_unix_word_boundary(c) (whitespace(c) || ispunct(c)) int rl_vi_unix_word_rubout (count, key) int count, key; { int orig_point; if (rl_point == 0) rl_ding (); else { orig_point = rl_point; if (count <= 0) count = 1; while (count--) { /* This isn't quite what ksh93 does but it seems to match what the Posix description of sh specifies, with a few accommodations for sequences of whitespace characters between words and at the end of the line. */ /* Skip over whitespace at the end of the line as a special case */ if (rl_point > 0 && (rl_line_buffer[rl_point] == 0) && whitespace (rl_line_buffer[rl_point - 1])) while (--rl_point > 0 && whitespace (rl_line_buffer[rl_point])) ; /* If we're at the start of a word, move back to word boundary so we move back to the `preceding' word */ if (rl_point > 0 && (vi_unix_word_boundary (rl_line_buffer[rl_point]) == 0) && vi_unix_word_boundary (rl_line_buffer[rl_point - 1])) rl_point--; /* If we are at a word boundary (whitespace/punct), move backward past a sequence of word boundary characters. If we are at the end of a word (non-word boundary), move back to a word boundary */ if (rl_point > 0 && vi_unix_word_boundary (rl_line_buffer[rl_point])) while (rl_point && vi_unix_word_boundary (rl_line_buffer[rl_point - 1])) rl_point--; else if (rl_point > 0 && vi_unix_word_boundary (rl_line_buffer[rl_point]) == 0) while (rl_point && (vi_unix_word_boundary (rl_line_buffer[rl_point - 1]) == 0)) rl_point--; } rl_kill_text (orig_point, rl_point); } return 0; } int rl_vi_back_to_indent (count, key) int count, key; { rl_beg_of_line (1, key); while (rl_point < rl_end && whitespace (rl_line_buffer[rl_point])) rl_point++; return (0); } int rl_vi_first_print (count, key) int count, key; { return (rl_vi_back_to_indent (1, key)); } static int _rl_cs_dir, _rl_cs_orig_dir; #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_char_search (data) _rl_callback_generic_arg *data; { int c; #if defined (HANDLE_MULTIBYTE) c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); #else RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); #endif if (c <= 0) { RL_UNSETSTATE (RL_STATE_CHARSEARCH); return -1; } #if !defined (HANDLE_MULTIBYTE) _rl_vi_last_search_char = c; #endif _rl_callback_func = 0; _rl_want_redisplay = 1; RL_UNSETSTATE (RL_STATE_CHARSEARCH); #if defined (HANDLE_MULTIBYTE) return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_mbchar, _rl_vi_last_search_mblen)); #else return (_rl_char_search_internal (data->count, _rl_cs_dir, _rl_vi_last_search_char)); #endif } #endif int rl_vi_char_search (count, key) int count, key; { int c; #if defined (HANDLE_MULTIBYTE) static char *target; static int tlen; #else static char target; #endif if (key == ';' || key == ',') { if (_rl_cs_orig_dir == 0) return 1; #if defined (HANDLE_MULTIBYTE) if (_rl_vi_last_search_mblen == 0) return 1; #else if (_rl_vi_last_search_char == 0) return 1; #endif _rl_cs_dir = (key == ';') ? _rl_cs_orig_dir : -_rl_cs_orig_dir; } else { switch (key) { case 't': _rl_cs_orig_dir = _rl_cs_dir = FTO; break; case 'T': _rl_cs_orig_dir = _rl_cs_dir = BTO; break; case 'f': _rl_cs_orig_dir = _rl_cs_dir = FFIND; break; case 'F': _rl_cs_orig_dir = _rl_cs_dir = BFIND; break; } if (_rl_vi_redoing) { /* set target and tlen below */ } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_data->i1 = _rl_cs_dir; _rl_callback_data->i2 = key; _rl_callback_func = _rl_vi_callback_char_search; RL_SETSTATE (RL_STATE_CHARSEARCH); return (0); } #endif else { #if defined (HANDLE_MULTIBYTE) c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX); if (c <= 0) return -1; _rl_vi_last_search_mblen = c; #else RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; _rl_vi_last_search_char = c; #endif } } #if defined (HANDLE_MULTIBYTE) target = _rl_vi_last_search_mbchar; tlen = _rl_vi_last_search_mblen; #else target = _rl_vi_last_search_char; #endif #if defined (HANDLE_MULTIBYTE) return (_rl_char_search_internal (count, _rl_cs_dir, target, tlen)); #else return (_rl_char_search_internal (count, _rl_cs_dir, target)); #endif } /* Match brackets */ int rl_vi_match (ignore, key) int ignore, key; { int count = 1, brack, pos, tmp, pre; pos = rl_point; if ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0) { if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0) { pre = rl_point; rl_forward_char (1, key); if (pre == rl_point) break; } } else while ((brack = rl_vi_bracktype (rl_line_buffer[rl_point])) == 0 && rl_point < rl_end - 1) rl_forward_char (1, key); if (brack <= 0) { rl_point = pos; rl_ding (); return 1; } } pos = rl_point; if (brack < 0) { while (count) { tmp = pos; if (MB_CUR_MAX == 1 || rl_byte_oriented) pos--; else { pos = _rl_find_prev_mbchar (rl_line_buffer, pos, MB_FIND_ANY); if (tmp == pos) pos--; } if (pos >= 0) { int b = rl_vi_bracktype (rl_line_buffer[pos]); if (b == -brack) count--; else if (b == brack) count++; } else { rl_ding (); return 1; } } } else { /* brack > 0 */ while (count) { if (MB_CUR_MAX == 1 || rl_byte_oriented) pos++; else pos = _rl_find_next_mbchar (rl_line_buffer, pos, 1, MB_FIND_ANY); if (pos < rl_end) { int b = rl_vi_bracktype (rl_line_buffer[pos]); if (b == -brack) count--; else if (b == brack) count++; } else { rl_ding (); return 1; } } } rl_point = pos; return (0); } int rl_vi_bracktype (c) int c; { switch (c) { case '(': return 1; case ')': return -1; case '[': return 2; case ']': return -2; case '{': return 3; case '}': return -3; default: return 0; } } static int _rl_vi_change_char (count, c, mb) int count, c; char *mb; { int p; if (c == '\033' || c == CTRL ('C')) return -1; rl_begin_undo_group (); while (count-- && rl_point < rl_end) { p = rl_point; rl_vi_delete (1, c); if (rl_point < p) /* Did we retreat at EOL? */ rl_point++; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) rl_insert_text (mb); else #endif _rl_insert_char (1, c); } /* The cursor shall be left on the last character changed. */ rl_backward_char (1, c); rl_end_undo_group (); return (0); } static int _rl_vi_callback_getchar (mb, mlen) char *mb; int mlen; { int c; RL_SETSTATE(RL_STATE_MOREINPUT); c = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (c < 0) return -1; #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) c = _rl_read_mbstring (c, mb, mlen); #endif return c; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_change_char (data) _rl_callback_generic_arg *data; { int c; char mb[MB_LEN_MAX]; _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); if (c < 0) return -1; _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_change_char (data->count, c, mb)); } #endif int rl_vi_change_char (count, key) int count, key; { int c; char mb[MB_LEN_MAX]; if (_rl_vi_redoing) { c = _rl_vi_last_replacement; mb[0] = c; mb[1] = '\0'; } #if defined (READLINE_CALLBACKS) else if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = _rl_callback_data_alloc (count); _rl_callback_func = _rl_vi_callback_change_char; return (0); } #endif else _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX); if (c < 0) return -1; return (_rl_vi_change_char (count, c, mb)); } int rl_vi_subst (count, key) int count, key; { /* If we are redoing, rl_vi_change_to will stuff the last motion char */ if (_rl_vi_redoing == 0) rl_stuff_char ((key == 'S') ? 'c' : 'l'); /* `S' == `cc', `s' == `cl' */ return (rl_vi_change_to (count, 'c')); } int rl_vi_overstrike (count, key) int count, key; { if (_rl_vi_doing_insert == 0) { _rl_vi_doing_insert = 1; rl_begin_undo_group (); } if (count > 0) { _rl_overwrite_char (count, key); vi_replace_count += count; } return (0); } int rl_vi_overstrike_delete (count, key) int count, key; { int i, s; for (i = 0; i < count; i++) { if (vi_replace_count == 0) { rl_ding (); break; } s = rl_point; if (rl_do_undo ()) vi_replace_count--; if (rl_point == s) rl_backward_char (1, key); } if (vi_replace_count == 0 && _rl_vi_doing_insert) { rl_end_undo_group (); rl_do_undo (); _rl_vi_doing_insert = 0; } return (0); } int rl_vi_replace (count, key) int count, key; { int i; vi_replace_count = 0; if (vi_replace_map == 0) { vi_replace_map = rl_make_bare_keymap (); for (i = 0; i < ' '; i++) if (vi_insertion_keymap[i].type == ISFUNC) vi_replace_map[i].function = vi_insertion_keymap[i].function; for (i = ' '; i < KEYMAP_SIZE; i++) vi_replace_map[i].function = rl_vi_overstrike; vi_replace_map[RUBOUT].function = rl_vi_overstrike_delete; /* Make sure these are what we want. */ vi_replace_map[ESC].function = rl_vi_movement_mode; vi_replace_map[RETURN].function = rl_newline; vi_replace_map[NEWLINE].function = rl_newline; /* If the normal vi insertion keymap has ^H bound to erase, do the same here. Probably should remove the assignment to RUBOUT up there, but I don't think it will make a difference in real life. */ if (vi_insertion_keymap[CTRL ('H')].type == ISFUNC && vi_insertion_keymap[CTRL ('H')].function == rl_rubout) vi_replace_map[CTRL ('H')].function = rl_vi_overstrike_delete; } rl_vi_start_inserting (key, 1, rl_arg_sign); _rl_vi_last_key_before_insert = key; _rl_keymap = vi_replace_map; return (0); } #if 0 /* Try to complete the word we are standing on or the word that ends with the previous character. A space matches everything. Word delimiters are space and ;. */ int rl_vi_possible_completions() { int save_pos = rl_point; if (rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';') { while (rl_point < rl_end && rl_line_buffer[rl_point] != ' ' && rl_line_buffer[rl_point] != ';') rl_point++; } else if (rl_line_buffer[rl_point - 1] == ';') { rl_ding (); return (0); } rl_possible_completions (); rl_point = save_pos; return (0); } #endif /* Functions to save and restore marks. */ static int _rl_vi_set_mark () { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ { rl_ding (); return 1; } ch -= 'a'; vi_mark_chars[ch] = rl_point; return 0; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_set_mark (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_set_mark ()); } #endif int rl_vi_set_mark (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = 0; _rl_callback_func = _rl_vi_callback_set_mark; return (0); } #endif return (_rl_vi_set_mark ()); } static int _rl_vi_goto_mark () { int ch; RL_SETSTATE(RL_STATE_MOREINPUT); ch = rl_read_key (); RL_UNSETSTATE(RL_STATE_MOREINPUT); if (ch == '`') { rl_point = rl_mark; return 0; } else if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */ { rl_ding (); return 1; } ch -= 'a'; if (vi_mark_chars[ch] == -1) { rl_ding (); return 1; } rl_point = vi_mark_chars[ch]; return 0; } #if defined (READLINE_CALLBACKS) static int _rl_vi_callback_goto_mark (data) _rl_callback_generic_arg *data; { _rl_callback_func = 0; _rl_want_redisplay = 1; return (_rl_vi_goto_mark ()); } #endif int rl_vi_goto_mark (count, key) int count, key; { #if defined (READLINE_CALLBACKS) if (RL_ISSTATE (RL_STATE_CALLBACK)) { _rl_callback_data = 0; _rl_callback_func = _rl_vi_callback_goto_mark; return (0); } #endif return (_rl_vi_goto_mark ()); } #endif /* VI_MODE */ readline-7.0/xfree.c000664 000436 000024 00000003003 11423124177 014501 0ustar00chetstaff000000 000000 /* xfree.c -- safe version of free that ignores attempts to free NUL */ /* Copyright (C) 1991-2010 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) #include #endif #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "xmalloc.h" /* **************************************************************** */ /* */ /* Memory Deallocation. */ /* */ /* **************************************************************** */ /* Use this as the function to call when adding unwind protects so we don't need to know what free() returns. */ void xfree (string) PTR_T string; { if (string) free (string); } readline-7.0/xmalloc.c000664 000436 000000 00000004014 11423124212 015013 0ustar00chetwheel000000 000000 /* xmalloc.c -- safe versions of malloc and realloc */ /* Copyright (C) 1991-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) #include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #include "xmalloc.h" /* **************************************************************** */ /* */ /* Memory Allocation and Deallocation. */ /* */ /* **************************************************************** */ static void memory_error_and_abort (fname) char *fname; { fprintf (stderr, "%s: out of virtual memory\n", fname); exit (2); } /* Return a pointer to free()able block of memory large enough to hold BYTES number of bytes. If the memory cannot be allocated, print an error message and abort. */ PTR_T xmalloc (bytes) size_t bytes; { PTR_T temp; temp = malloc (bytes); if (temp == 0) memory_error_and_abort ("xmalloc"); return (temp); } PTR_T xrealloc (pointer, bytes) PTR_T pointer; size_t bytes; { PTR_T temp; temp = pointer ? realloc (pointer, bytes) : malloc (bytes); if (temp == 0) memory_error_and_abort ("xrealloc"); return (temp); } readline-7.0/history.c000664 000436 000024 00000033111 12640302167 015073 0ustar00chetstaff000000 000000 /* history.c -- standalone history library */ /* Copyright (C) 1989-2015 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions you can call. I think I have done that. */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #include #include "history.h" #include "histlib.h" #include "xmalloc.h" #if !defined (errno) extern int errno; #endif /* How big to make the_history when we first allocate it. */ #define DEFAULT_HISTORY_INITIAL_SIZE 502 /* The number of slots to increase the_history by. */ #define DEFAULT_HISTORY_GROW_SIZE 50 static char *hist_inittime PARAMS((void)); /* **************************************************************** */ /* */ /* History Functions */ /* */ /* **************************************************************** */ /* An array of HIST_ENTRY. This is where we store the history. */ static HIST_ENTRY **the_history = (HIST_ENTRY **)NULL; /* Non-zero means that we have enforced a limit on the amount of history that we save. */ static int history_stifled; /* The current number of slots allocated to the input_history. */ static int history_size; /* If HISTORY_STIFLED is non-zero, then this is the maximum number of entries to remember. */ int history_max_entries; int max_input_history; /* backwards compatibility */ /* The current location of the interactive history pointer. Just makes life easier for outside callers. */ int history_offset; /* The number of strings currently stored in the history list. */ int history_length; /* The logical `base' of the history array. It defaults to 1. */ int history_base = 1; /* Return the current HISTORY_STATE of the history. */ HISTORY_STATE * history_get_history_state () { HISTORY_STATE *state; state = (HISTORY_STATE *)xmalloc (sizeof (HISTORY_STATE)); state->entries = the_history; state->offset = history_offset; state->length = history_length; state->size = history_size; state->flags = 0; if (history_stifled) state->flags |= HS_STIFLED; return (state); } /* Set the state of the current history array to STATE. */ void history_set_history_state (state) HISTORY_STATE *state; { the_history = state->entries; history_offset = state->offset; history_length = state->length; history_size = state->size; if (state->flags & HS_STIFLED) history_stifled = 1; } /* Begin a session in which the history functions might be used. This initializes interactive variables. */ void using_history () { history_offset = history_length; } /* Return the number of bytes that the primary history entries are using. This just adds up the lengths of the_history->lines and the associated timestamps. */ int history_total_bytes () { register int i, result; for (i = result = 0; the_history && the_history[i]; i++) result += HISTENT_BYTES (the_history[i]); return (result); } /* Returns the magic number which says what history element we are looking at now. In this implementation, it returns history_offset. */ int where_history () { return (history_offset); } /* Make the current history item be the one at POS, an absolute index. Returns zero if POS is out of range, else non-zero. */ int history_set_pos (pos) int pos; { if (pos > history_length || pos < 0 || !the_history) return (0); history_offset = pos; return (1); } /* Return the current history array. The caller has to be careful, since this is the actual array of data, and could be bashed or made corrupt easily. The array is terminated with a NULL pointer. */ HIST_ENTRY ** history_list () { return (the_history); } /* Return the history entry at the current position, as determined by history_offset. If there is no entry there, return a NULL pointer. */ HIST_ENTRY * current_history () { return ((history_offset == history_length) || the_history == 0) ? (HIST_ENTRY *)NULL : the_history[history_offset]; } /* Back up history_offset to the previous history entry, and return a pointer to that entry. If there is no previous entry then return a NULL pointer. */ HIST_ENTRY * previous_history () { return history_offset ? the_history[--history_offset] : (HIST_ENTRY *)NULL; } /* Move history_offset forward to the next history entry, and return a pointer to that entry. If there is no next entry then return a NULL pointer. */ HIST_ENTRY * next_history () { return (history_offset == history_length) ? (HIST_ENTRY *)NULL : the_history[++history_offset]; } /* Return the history entry which is logically at OFFSET in the history array. OFFSET is relative to history_base. */ HIST_ENTRY * history_get (offset) int offset; { int local_index; local_index = offset - history_base; return (local_index >= history_length || local_index < 0 || the_history == 0) ? (HIST_ENTRY *)NULL : the_history[local_index]; } HIST_ENTRY * alloc_history_entry (string, ts) char *string; char *ts; { HIST_ENTRY *temp; temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); temp->line = string ? savestring (string) : string; temp->data = (char *)NULL; temp->timestamp = ts; return temp; } time_t history_get_time (hist) HIST_ENTRY *hist; { char *ts; time_t t; if (hist == 0 || hist->timestamp == 0) return 0; ts = hist->timestamp; if (ts[0] != history_comment_char) return 0; errno = 0; t = (time_t) strtol (ts + 1, (char **)NULL, 10); /* XXX - should use strtol() here */ if (errno == ERANGE) return (time_t)0; return t; } static char * hist_inittime () { time_t t; char ts[64], *ret; t = (time_t) time ((time_t *)0); #if defined (HAVE_VSNPRINTF) /* assume snprintf if vsnprintf exists */ snprintf (ts, sizeof (ts) - 1, "X%lu", (unsigned long) t); #else sprintf (ts, "X%lu", (unsigned long) t); #endif ret = savestring (ts); ret[0] = history_comment_char; return ret; } /* Place STRING at the end of the history list. The data field is set to NULL. */ void add_history (string) const char *string; { HIST_ENTRY *temp; if (history_stifled && (history_length == history_max_entries)) { register int i; /* If the history is stifled, and history_length is zero, and it equals history_max_entries, we don't save items. */ if (history_length == 0) return; /* If there is something in the slot, then remove it. */ if (the_history[0]) (void) free_history_entry (the_history[0]); /* Copy the rest of the entries, moving down one slot. Copy includes trailing NULL. */ #if 0 for (i = 0; i < history_length; i++) the_history[i] = the_history[i + 1]; #else memmove (the_history, the_history + 1, history_length * sizeof (HIST_ENTRY *)); #endif history_base++; } else { if (history_size == 0) { if (history_stifled && history_max_entries > 0) history_size = history_max_entries + 2; else history_size = DEFAULT_HISTORY_INITIAL_SIZE; the_history = (HIST_ENTRY **)xmalloc (history_size * sizeof (HIST_ENTRY *)); history_length = 1; } else { if (history_length == (history_size - 1)) { history_size += DEFAULT_HISTORY_GROW_SIZE; the_history = (HIST_ENTRY **) xrealloc (the_history, history_size * sizeof (HIST_ENTRY *)); } history_length++; } } temp = alloc_history_entry ((char *)string, hist_inittime ()); the_history[history_length] = (HIST_ENTRY *)NULL; the_history[history_length - 1] = temp; } /* Change the time stamp of the most recent history entry to STRING. */ void add_history_time (string) const char *string; { HIST_ENTRY *hs; if (string == 0 || history_length < 1) return; hs = the_history[history_length - 1]; FREE (hs->timestamp); hs->timestamp = savestring (string); } /* Free HIST and return the data so the calling application can free it if necessary and desired. */ histdata_t free_history_entry (hist) HIST_ENTRY *hist; { histdata_t x; if (hist == 0) return ((histdata_t) 0); FREE (hist->line); FREE (hist->timestamp); x = hist->data; xfree (hist); return (x); } HIST_ENTRY * copy_history_entry (hist) HIST_ENTRY *hist; { HIST_ENTRY *ret; char *ts; if (hist == 0) return hist; ret = alloc_history_entry (hist->line, (char *)NULL); ts = hist->timestamp ? savestring (hist->timestamp) : hist->timestamp; ret->timestamp = ts; ret->data = hist->data; return ret; } /* Make the history entry at WHICH have LINE and DATA. This returns the old entry so you can dispose of the data. In the case of an invalid WHICH, a NULL pointer is returned. */ HIST_ENTRY * replace_history_entry (which, line, data) int which; const char *line; histdata_t data; { HIST_ENTRY *temp, *old_value; if (which < 0 || which >= history_length) return ((HIST_ENTRY *)NULL); temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); old_value = the_history[which]; temp->line = savestring (line); temp->data = data; temp->timestamp = savestring (old_value->timestamp); the_history[which] = temp; return (old_value); } /* Append LINE to the history line at offset WHICH, adding a newline to the end of the current line first. This can be used to construct multi-line history entries while reading lines from the history file. */ void _hs_append_history_line (which, line) int which; const char *line; { HIST_ENTRY *hent; size_t newlen, curlen; char *newline; hent = the_history[which]; curlen = strlen (hent->line); newlen = curlen + strlen (line) + 2; newline = realloc (hent->line, newlen); if (newline) { hent->line = newline; hent->line[curlen++] = '\n'; strcpy (hent->line + curlen, line); } } /* Replace the DATA in the specified history entries, replacing OLD with NEW. WHICH says which one(s) to replace: WHICH == -1 means to replace all of the history entries where entry->data == OLD; WHICH == -2 means to replace the `newest' history entry where entry->data == OLD; and WHICH >= 0 means to replace that particular history entry's data, as long as it matches OLD. */ void _hs_replace_history_data (which, old, new) int which; histdata_t *old, *new; { HIST_ENTRY *entry; register int i, last; if (which < -2 || which >= history_length || history_length == 0 || the_history == 0) return; if (which >= 0) { entry = the_history[which]; if (entry && entry->data == old) entry->data = new; return; } last = -1; for (i = 0; i < history_length; i++) { entry = the_history[i]; if (entry == 0) continue; if (entry->data == old) { last = i; if (which == -1) entry->data = new; } } if (which == -2 && last >= 0) { entry = the_history[last]; entry->data = new; /* XXX - we don't check entry->old */ } } /* Remove history element WHICH from the history. The removed element is returned to you so you can free the line, data, and containing structure. */ HIST_ENTRY * remove_history (which) int which; { HIST_ENTRY *return_value; register int i; if (which < 0 || which >= history_length || history_length == 0 || the_history == 0) return ((HIST_ENTRY *)NULL); return_value = the_history[which]; for (i = which; i < history_length; i++) the_history[i] = the_history[i + 1]; history_length--; return (return_value); } /* Stifle the history list, remembering only MAX number of lines. */ void stifle_history (max) int max; { register int i, j; if (max < 0) max = 0; if (history_length > max) { /* This loses because we cannot free the data. */ for (i = 0, j = history_length - max; i < j; i++) free_history_entry (the_history[i]); history_base = i; for (j = 0, i = history_length - max; j < max; i++, j++) the_history[j] = the_history[i]; the_history[j] = (HIST_ENTRY *)NULL; history_length = j; } history_stifled = 1; max_input_history = history_max_entries = max; } /* Stop stifling the history. This returns the previous maximum number of history entries. The value is positive if the history was stifled, negative if it wasn't. */ int unstifle_history () { if (history_stifled) { history_stifled = 0; return (history_max_entries); } else return (-history_max_entries); } int history_is_stifled () { return (history_stifled); } void clear_history () { register int i; /* This loses because we cannot free the data. */ for (i = 0; i < history_length; i++) { free_history_entry (the_history[i]); the_history[i] = (HIST_ENTRY *)NULL; } history_offset = history_length = 0; } readline-7.0/histexpand.c000644 000436 000024 00000121734 12753063711 015554 0ustar00chetstaff000000 000000 /* histexpand.c -- history expansion. */ /* Copyright (C) 1989-2015 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifndef _MINIX # include # endif # include #endif #include "rlmbutil.h" #include "history.h" #include "histlib.h" #include "chardefs.h" #include "rlshell.h" #include "xmalloc.h" #define HISTORY_WORD_DELIMITERS " \t\n;&()|<>" #define HISTORY_QUOTE_CHARACTERS "\"'`" #define HISTORY_EVENT_DELIMITERS "^$*%-" #define slashify_in_quotes "\\`\"$" typedef int _hist_search_func_t PARAMS((const char *, int)); static char error_pointer; static char *subst_lhs; static char *subst_rhs; static int subst_lhs_len; static int subst_rhs_len; /* Characters that delimit history event specifications and separate event specifications from word designators. Static for now */ static char *history_event_delimiter_chars = HISTORY_EVENT_DELIMITERS; static char *get_history_word_specifier PARAMS((char *, char *, int *)); static int history_tokenize_word PARAMS((const char *, int)); static char **history_tokenize_internal PARAMS((const char *, int, int *)); static char *history_substring PARAMS((const char *, int, int)); static void freewords PARAMS((char **, int)); static char *history_find_word PARAMS((char *, int)); static char *quote_breaks PARAMS((char *)); /* Variables exported by this file. */ /* The character that represents the start of a history expansion request. This is usually `!'. */ char history_expansion_char = '!'; /* The character that invokes word substitution if found at the start of a line. This is usually `^'. */ char history_subst_char = '^'; /* During tokenization, if this character is seen as the first character of a word, then it, and all subsequent characters upto a newline are ignored. For a Bourne shell, this should be '#'. Bash special cases the interactive comment character to not be a comment delimiter. */ char history_comment_char = '\0'; /* The list of characters which inhibit the expansion of text if found immediately following history_expansion_char. */ char *history_no_expand_chars = " \t\n\r="; /* If set to a non-zero value, single quotes inhibit history expansion. The default is 0. */ int history_quotes_inhibit_expansion = 0; /* Used to split words by history_tokenize_internal. */ char *history_word_delimiters = HISTORY_WORD_DELIMITERS; /* If set, this points to a function that is called to verify that a particular history expansion should be performed. */ rl_linebuf_func_t *history_inhibit_expansion_function; /* **************************************************************** */ /* */ /* History Expansion */ /* */ /* **************************************************************** */ /* Hairy history expansion on text, not tokens. This is of general use, and thus belongs in this library. */ /* The last string searched for by a !?string? search. */ static char *search_string; /* The last string matched by a !?string? search. */ static char *search_match; /* Return the event specified at TEXT + OFFSET modifying OFFSET to point to after the event specifier. Just a pointer to the history line is returned; NULL is returned in the event of a bad specifier. You pass STRING with *INDEX equal to the history_expansion_char that begins this specification. DELIMITING_QUOTE is a character that is allowed to end the string specification for what to search for in addition to the normal characters `:', ` ', `\t', `\n', and sometimes `?'. So you might call this function like: line = get_history_event ("!echo:p", &index, 0); */ char * get_history_event (string, caller_index, delimiting_quote) const char *string; int *caller_index; int delimiting_quote; { register int i; register char c; HIST_ENTRY *entry; int which, sign, local_index, substring_okay; _hist_search_func_t *search_func; char *temp; /* The event can be specified in a number of ways. !! the previous command !n command line N !-n current command-line minus N !str the most recent command starting with STR !?str[?] the most recent command containing STR All values N are determined via HISTORY_BASE. */ i = *caller_index; if (string[i] != history_expansion_char) return ((char *)NULL); /* Move on to the specification. */ i++; sign = 1; substring_okay = 0; #define RETURN_ENTRY(e, w) \ return ((e = history_get (w)) ? e->line : (char *)NULL) /* Handle !! case. */ if (string[i] == history_expansion_char) { i++; which = history_base + (history_length - 1); *caller_index = i; RETURN_ENTRY (entry, which); } /* Hack case of numeric line specification. */ if (string[i] == '-') { sign = -1; i++; } if (_rl_digit_p (string[i])) { /* Get the extent of the digits and compute the value. */ for (which = 0; _rl_digit_p (string[i]); i++) which = (which * 10) + _rl_digit_value (string[i]); *caller_index = i; if (sign < 0) which = (history_length + history_base) - which; RETURN_ENTRY (entry, which); } /* This must be something to search for. If the spec begins with a '?', then the string may be anywhere on the line. Otherwise, the string must be found at the start of a line. */ if (string[i] == '?') { substring_okay++; i++; } /* Only a closing `?' or a newline delimit a substring search string. */ for (local_index = i; c = string[i]; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); /* These produce warnings because we're passing a const string to a function that takes a non-const string. */ _rl_adjust_point ((char *)string, i, &ps); if ((v = _rl_get_char_len ((char *)string + i, &ps)) > 1) { i += v - 1; continue; } } #endif /* HANDLE_MULTIBYTE */ if ((!substring_okay && (whitespace (c) || c == ':' || (history_event_delimiter_chars && member (c, history_event_delimiter_chars)) || (history_search_delimiter_chars && member (c, history_search_delimiter_chars)) || string[i] == delimiting_quote)) || string[i] == '\n' || (substring_okay && string[i] == '?')) break; } which = i - local_index; temp = (char *)xmalloc (1 + which); if (which) strncpy (temp, string + local_index, which); temp[which] = '\0'; if (substring_okay && string[i] == '?') i++; *caller_index = i; #define FAIL_SEARCH() \ do { \ history_offset = history_length; xfree (temp) ; return (char *)NULL; \ } while (0) /* If there is no search string, try to use the previous search string, if one exists. If not, fail immediately. */ if (*temp == '\0' && substring_okay) { if (search_string) { xfree (temp); temp = savestring (search_string); } else FAIL_SEARCH (); } search_func = substring_okay ? history_search : history_search_prefix; while (1) { local_index = (*search_func) (temp, -1); if (local_index < 0) FAIL_SEARCH (); if (local_index == 0 || substring_okay) { entry = current_history (); if (entry == 0) FAIL_SEARCH (); history_offset = history_length; /* If this was a substring search, then remember the string that we matched for word substitution. */ if (substring_okay) { FREE (search_string); search_string = temp; FREE (search_match); search_match = history_find_word (entry->line, local_index); } else xfree (temp); return (entry->line); } if (history_offset) history_offset--; else FAIL_SEARCH (); } #undef FAIL_SEARCH #undef RETURN_ENTRY } /* Function for extracting single-quoted strings. Used for inhibiting history expansion within single quotes. */ /* Extract the contents of STRING as if it is enclosed in single quotes. SINDEX, when passed in, is the offset of the character immediately following the opening single quote; on exit, SINDEX is left pointing to the closing single quote. FLAGS currently used to allow backslash to escape a single quote (e.g., for bash $'...'). */ static void hist_string_extract_single_quoted (string, sindex, flags) char *string; int *sindex, flags; { register int i; for (i = *sindex; string[i] && string[i] != '\''; i++) { if ((flags & 1) && string[i] == '\\' && string[i+1]) i++; } *sindex = i; } static char * quote_breaks (s) char *s; { register char *p, *r; char *ret; int len = 3; for (p = s; p && *p; p++, len++) { if (*p == '\'') len += 3; else if (whitespace (*p) || *p == '\n') len += 2; } r = ret = (char *)xmalloc (len); *r++ = '\''; for (p = s; p && *p; ) { if (*p == '\'') { *r++ = '\''; *r++ = '\\'; *r++ = '\''; *r++ = '\''; p++; } else if (whitespace (*p) || *p == '\n') { *r++ = '\''; *r++ = *p++; *r++ = '\''; } else *r++ = *p++; } *r++ = '\''; *r = '\0'; return ret; } static char * hist_error(s, start, current, errtype) char *s; int start, current, errtype; { char *temp; const char *emsg; int ll, elen; ll = current - start; switch (errtype) { case EVENT_NOT_FOUND: emsg = "event not found"; elen = 15; break; case BAD_WORD_SPEC: emsg = "bad word specifier"; elen = 18; break; case SUBST_FAILED: emsg = "substitution failed"; elen = 19; break; case BAD_MODIFIER: emsg = "unrecognized history modifier"; elen = 29; break; case NO_PREV_SUBST: emsg = "no previous substitution"; elen = 24; break; default: emsg = "unknown expansion error"; elen = 23; break; } temp = (char *)xmalloc (ll + elen + 3); strncpy (temp, s + start, ll); temp[ll] = ':'; temp[ll + 1] = ' '; strcpy (temp + ll + 2, emsg); return (temp); } /* Get a history substitution string from STR starting at *IPTR and return it. The length is returned in LENPTR. A backslash can quote the delimiter. If the string is the empty string, the previous pattern is used. If there is no previous pattern for the lhs, the last history search string is used. If IS_RHS is 1, we ignore empty strings and set the pattern to "" anyway. subst_lhs is not changed if the lhs is empty; subst_rhs is allowed to be set to the empty string. */ static char * get_subst_pattern (str, iptr, delimiter, is_rhs, lenptr) char *str; int *iptr, delimiter, is_rhs, *lenptr; { register int si, i, j, k; char *s; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; #endif s = (char *)NULL; i = *iptr; #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); _rl_adjust_point (str, i, &ps); #endif for (si = i; str[si] && str[si] != delimiter; si++) #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; if ((v = _rl_get_char_len (str + si, &ps)) > 1) si += v - 1; else if (str[si] == '\\' && str[si + 1] == delimiter) si++; } else #endif /* HANDLE_MULTIBYTE */ if (str[si] == '\\' && str[si + 1] == delimiter) si++; if (si > i || is_rhs) { s = (char *)xmalloc (si - i + 1); for (j = 0, k = i; k < si; j++, k++) { /* Remove a backslash quoting the search string delimiter. */ if (str[k] == '\\' && str[k + 1] == delimiter) k++; s[j] = str[k]; } s[j] = '\0'; if (lenptr) *lenptr = j; } i = si; if (str[i]) i++; *iptr = i; return s; } static void postproc_subst_rhs () { char *new; int i, j, new_size; new = (char *)xmalloc (new_size = subst_rhs_len + subst_lhs_len); for (i = j = 0; i < subst_rhs_len; i++) { if (subst_rhs[i] == '&') { if (j + subst_lhs_len >= new_size) new = (char *)xrealloc (new, (new_size = new_size * 2 + subst_lhs_len)); strcpy (new + j, subst_lhs); j += subst_lhs_len; } else { /* a single backslash protects the `&' from lhs interpolation */ if (subst_rhs[i] == '\\' && subst_rhs[i + 1] == '&') i++; if (j >= new_size) new = (char *)xrealloc (new, new_size *= 2); new[j++] = subst_rhs[i]; } } new[j] = '\0'; xfree (subst_rhs); subst_rhs = new; subst_rhs_len = j; } /* Expand the bulk of a history specifier starting at STRING[START]. Returns 0 if everything is OK, -1 if an error occurred, and 1 if the `p' modifier was supplied and the caller should just print the returned string. Returns the new index into string in *END_INDEX_PTR, and the expanded specifier in *RET_STRING. */ static int history_expand_internal (string, start, qc, end_index_ptr, ret_string, current_line) char *string; int start, qc, *end_index_ptr; char **ret_string; char *current_line; /* for !# */ { int i, n, starting_index; int substitute_globally, subst_bywords, want_quotes, print_only; char *event, *temp, *result, *tstr, *t, c, *word_spec; int result_len; #if defined (HANDLE_MULTIBYTE) mbstate_t ps; memset (&ps, 0, sizeof (mbstate_t)); #endif result = (char *)xmalloc (result_len = 128); i = start; /* If it is followed by something that starts a word specifier, then !! is implied as the event specifier. */ if (member (string[i + 1], ":$*%^")) { char fake_s[3]; int fake_i = 0; i++; fake_s[0] = fake_s[1] = history_expansion_char; fake_s[2] = '\0'; event = get_history_event (fake_s, &fake_i, 0); } else if (string[i + 1] == '#') { i += 2; event = current_line; } else event = get_history_event (string, &i, qc); if (event == 0) { *ret_string = hist_error (string, start, i, EVENT_NOT_FOUND); xfree (result); return (-1); } /* If a word specifier is found, then do what that requires. */ starting_index = i; word_spec = get_history_word_specifier (string, event, &i); /* There is no such thing as a `malformed word specifier'. However, it is possible for a specifier that has no match. In that case, we complain. */ if (word_spec == (char *)&error_pointer) { *ret_string = hist_error (string, starting_index, i, BAD_WORD_SPEC); xfree (result); return (-1); } /* If no word specifier, than the thing of interest was the event. */ temp = word_spec ? savestring (word_spec) : savestring (event); FREE (word_spec); /* Perhaps there are other modifiers involved. Do what they say. */ want_quotes = substitute_globally = subst_bywords = print_only = 0; starting_index = i; while (string[i] == ':') { c = string[i + 1]; if (c == 'g' || c == 'a') { substitute_globally = 1; i++; c = string[i + 1]; } else if (c == 'G') { subst_bywords = 1; i++; c = string[i + 1]; } switch (c) { default: *ret_string = hist_error (string, i+1, i+2, BAD_MODIFIER); xfree (result); xfree (temp); return -1; case 'q': want_quotes = 'q'; break; case 'x': want_quotes = 'x'; break; /* :p means make this the last executed line. So we return an error state after adding this line to the history. */ case 'p': print_only++; break; /* :t discards all but the last part of the pathname. */ case 't': tstr = strrchr (temp, '/'); if (tstr) { tstr++; t = savestring (tstr); xfree (temp); temp = t; } break; /* :h discards the last part of a pathname. */ case 'h': tstr = strrchr (temp, '/'); if (tstr) *tstr = '\0'; break; /* :r discards the suffix. */ case 'r': tstr = strrchr (temp, '.'); if (tstr) *tstr = '\0'; break; /* :e discards everything but the suffix. */ case 'e': tstr = strrchr (temp, '.'); if (tstr) { t = savestring (tstr); xfree (temp); temp = t; } break; /* :s/this/that substitutes `that' for the first occurrence of `this'. :gs/this/that substitutes `that' for each occurrence of `this'. :& repeats the last substitution. :g& repeats the last substitution globally. */ case '&': case 's': { char *new_event; int delimiter, failed, si, l_temp, ws, we; if (c == 's') { if (i + 2 < (int)strlen (string)) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { _rl_adjust_point (string, i + 2, &ps); if (_rl_get_char_len (string + i + 2, &ps) > 1) delimiter = 0; else delimiter = string[i + 2]; } else #endif /* HANDLE_MULTIBYTE */ delimiter = string[i + 2]; } else break; /* no search delimiter */ i += 3; t = get_subst_pattern (string, &i, delimiter, 0, &subst_lhs_len); /* An empty substitution lhs with no previous substitution uses the last search string as the lhs. */ if (t) { FREE (subst_lhs); subst_lhs = t; } else if (!subst_lhs) { if (search_string && *search_string) { subst_lhs = savestring (search_string); subst_lhs_len = strlen (subst_lhs); } else { subst_lhs = (char *) NULL; subst_lhs_len = 0; } } FREE (subst_rhs); subst_rhs = get_subst_pattern (string, &i, delimiter, 1, &subst_rhs_len); /* If `&' appears in the rhs, it's supposed to be replaced with the lhs. */ if (member ('&', subst_rhs)) postproc_subst_rhs (); } else i += 2; /* If there is no lhs, the substitution can't succeed. */ if (subst_lhs_len == 0) { *ret_string = hist_error (string, starting_index, i, NO_PREV_SUBST); xfree (result); xfree (temp); return -1; } l_temp = strlen (temp); /* Ignore impossible cases. */ if (subst_lhs_len > l_temp) { *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); xfree (result); xfree (temp); return (-1); } /* Find the first occurrence of THIS in TEMP. */ /* Substitute SUBST_RHS for SUBST_LHS in TEMP. There are three cases to consider: 1. substitute_globally == subst_bywords == 0 2. substitute_globally == 1 && subst_bywords == 0 3. substitute_globally == 0 && subst_bywords == 1 In the first case, we substitute for the first occurrence only. In the second case, we substitute for every occurrence. In the third case, we tokenize into words and substitute the first occurrence of each word. */ si = we = 0; for (failed = 1; (si + subst_lhs_len) <= l_temp; si++) { /* First skip whitespace and find word boundaries if we're past the end of the word boundary we found the last time. */ if (subst_bywords && si > we) { for (; temp[si] && whitespace (temp[si]); si++) ; ws = si; we = history_tokenize_word (temp, si); } if (STREQN (temp+si, subst_lhs, subst_lhs_len)) { int len = subst_rhs_len - subst_lhs_len + l_temp; new_event = (char *)xmalloc (1 + len); strncpy (new_event, temp, si); strncpy (new_event + si, subst_rhs, subst_rhs_len); strncpy (new_event + si + subst_rhs_len, temp + si + subst_lhs_len, l_temp - (si + subst_lhs_len)); new_event[len] = '\0'; xfree (temp); temp = new_event; failed = 0; if (substitute_globally) { /* Reported to fix a bug that causes it to skip every other match when matching a single character. Was si += subst_rhs_len previously. */ si += subst_rhs_len - 1; l_temp = strlen (temp); substitute_globally++; continue; } else if (subst_bywords) { si = we; l_temp = strlen (temp); continue; } else break; } } if (substitute_globally > 1) { substitute_globally = 0; continue; /* don't want to increment i */ } if (failed == 0) continue; /* don't want to increment i */ *ret_string = hist_error (string, starting_index, i, SUBST_FAILED); xfree (result); xfree (temp); return (-1); } } i += 2; } /* Done with modifiers. */ /* Believe it or not, we have to back the pointer up by one. */ --i; if (want_quotes) { char *x; if (want_quotes == 'q') x = sh_single_quote (temp); else if (want_quotes == 'x') x = quote_breaks (temp); else x = savestring (temp); xfree (temp); temp = x; } n = strlen (temp); if (n >= result_len) result = (char *)xrealloc (result, n + 2); strcpy (result, temp); xfree (temp); *end_index_ptr = i; *ret_string = result; return (print_only); } /* Expand the string STRING, placing the result into OUTPUT, a pointer to a string. Returns: -1) If there was an error in expansion. 0) If no expansions took place (or, if the only change in the text was the de-slashifying of the history expansion character) 1) If expansions did take place 2) If the `p' modifier was given and the caller should print the result If an error occurred in expansion, then OUTPUT contains a descriptive error message. */ #define ADD_STRING(s) \ do \ { \ int sl = strlen (s); \ j += sl; \ if (j >= result_len) \ { \ while (j >= result_len) \ result_len += 128; \ result = (char *)xrealloc (result, result_len); \ } \ strcpy (result + j - sl, s); \ } \ while (0) #define ADD_CHAR(c) \ do \ { \ if (j >= result_len - 1) \ result = (char *)xrealloc (result, result_len += 64); \ result[j++] = c; \ result[j] = '\0'; \ } \ while (0) int history_expand (hstring, output) char *hstring; char **output; { register int j; int i, r, l, passc, cc, modified, eindex, only_printing, dquote, squote, flag; char *string; /* The output string, and its length. */ int result_len; char *result; #if defined (HANDLE_MULTIBYTE) char mb[MB_LEN_MAX]; mbstate_t ps; #endif /* Used when adding the string. */ char *temp; if (output == 0) return 0; /* Setting the history expansion character to 0 inhibits all history expansion. */ if (history_expansion_char == 0) { *output = savestring (hstring); return (0); } /* Prepare the buffer for printing error messages. */ result = (char *)xmalloc (result_len = 256); result[0] = '\0'; only_printing = modified = 0; l = strlen (hstring); /* Grovel the string. Only backslash and single quotes can quote the history escape character. We also handle arg specifiers. */ /* Before we grovel forever, see if the history_expansion_char appears anywhere within the text. */ /* The quick substitution character is a history expansion all right. That is to say, "^this^that^" is equivalent to "!!:s^this^that^", and in fact, that is the substitution that we do. */ if (hstring[0] == history_subst_char) { string = (char *)xmalloc (l + 5); string[0] = string[1] = history_expansion_char; string[2] = ':'; string[3] = 's'; strcpy (string + 4, hstring); l += 4; } else { #if defined (HANDLE_MULTIBYTE) memset (&ps, 0, sizeof (mbstate_t)); #endif string = hstring; /* If not quick substitution, still maybe have to do expansion. */ /* `!' followed by one of the characters in history_no_expand_chars is NOT an expansion. */ for (i = dquote = squote = 0; string[i]; i++) { #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int v; v = _rl_get_char_len (string + i, &ps); if (v > 1) { i += v - 1; continue; } } #endif /* HANDLE_MULTIBYTE */ cc = string[i + 1]; /* The history_comment_char, if set, appearing at the beginning of a word signifies that the rest of the line should not have history expansion performed on it. Skip the rest of the line and break out of the loop. */ if (history_comment_char && string[i] == history_comment_char && dquote == 0 && (i == 0 || member (string[i - 1], history_word_delimiters))) { while (string[i]) i++; break; } else if (string[i] == history_expansion_char) { if (cc == 0 || member (cc, history_no_expand_chars)) continue; /* DQUOTE won't be set unless history_quotes_inhibit_expansion is set. The idea here is to treat double-quoted strings the same as the word outside double quotes; in effect making the double quote part of history_no_expand_chars when DQUOTE is set. */ else if (dquote && cc == '"') continue; /* If the calling application has set history_inhibit_expansion_function to a function that checks for special cases that should not be history expanded, call the function and skip the expansion if it returns a non-zero value. */ else if (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i)) continue; else break; } /* Shell-like quoting: allow backslashes to quote double quotes inside a double-quoted string. */ else if (dquote && string[i] == '\\' && cc == '"') i++; /* More shell-like quoting: if we're paying attention to single quotes and letting them quote the history expansion character, then we need to pay attention to double quotes, because single quotes are not special inside double-quoted strings. */ else if (history_quotes_inhibit_expansion && string[i] == '"') { dquote = 1 - dquote; } else if (dquote == 0 && history_quotes_inhibit_expansion && string[i] == '\'') { /* If this is bash, single quotes inhibit history expansion. */ flag = (i > 0 && string[i - 1] == '$'); i++; hist_string_extract_single_quoted (string, &i, flag); } else if (history_quotes_inhibit_expansion && string[i] == '\\') { /* If this is bash, allow backslashes to quote single quotes and the history expansion character. */ if (cc == '\'' || cc == history_expansion_char) i++; } } if (string[i] != history_expansion_char) { xfree (result); *output = savestring (string); return (0); } } /* Extract and perform the substitution. */ for (passc = dquote = squote = i = j = 0; i < l; i++) { int qc, tchar = string[i]; if (passc) { passc = 0; ADD_CHAR (tchar); continue; } #if defined (HANDLE_MULTIBYTE) if (MB_CUR_MAX > 1 && rl_byte_oriented == 0) { int k, c; c = tchar; memset (mb, 0, sizeof (mb)); for (k = 0; k < MB_LEN_MAX; k++) { mb[k] = (char)c; memset (&ps, 0, sizeof (mbstate_t)); if (_rl_get_char_len (mb, &ps) == -2) c = string[++i]; else break; } if (strlen (mb) > 1) { ADD_STRING (mb); continue; } } #endif /* HANDLE_MULTIBYTE */ if (tchar == history_expansion_char) tchar = -3; else if (tchar == history_comment_char) tchar = -2; switch (tchar) { default: ADD_CHAR (string[i]); break; case '\\': passc++; ADD_CHAR (tchar); break; case '"': dquote = 1 - dquote; ADD_CHAR (tchar); break; case '\'': { /* If history_quotes_inhibit_expansion is set, single quotes inhibit history expansion, otherwise they are treated like double quotes. */ if (squote) { squote = 0; ADD_CHAR (tchar); } else if (dquote == 0 && history_quotes_inhibit_expansion) { int quote, slen; flag = (i > 0 && string[i - 1] == '$'); quote = i++; hist_string_extract_single_quoted (string, &i, flag); slen = i - quote + 2; temp = (char *)xmalloc (slen); strncpy (temp, string + quote, slen); temp[slen - 1] = '\0'; ADD_STRING (temp); xfree (temp); } else if (dquote == 0 && squote == 0 && history_quotes_inhibit_expansion == 0) { squote = 1; ADD_CHAR (string[i]); } else ADD_CHAR (string[i]); break; } case -2: /* history_comment_char */ if ((dquote == 0 || history_quotes_inhibit_expansion == 0) && (i == 0 || member (string[i - 1], history_word_delimiters))) { temp = (char *)xmalloc (l - i + 1); strcpy (temp, string + i); ADD_STRING (temp); xfree (temp); i = l; } else ADD_CHAR (string[i]); break; case -3: /* history_expansion_char */ cc = string[i + 1]; /* If the history_expansion_char is followed by one of the characters in history_no_expand_chars, then it is not a candidate for expansion of any kind. */ if (cc == 0 || member (cc, history_no_expand_chars) || (dquote && cc == '"') || (history_inhibit_expansion_function && (*history_inhibit_expansion_function) (string, i))) { ADD_CHAR (string[i]); break; } #if defined (NO_BANG_HASH_MODIFIERS) /* There is something that is listed as a `word specifier' in csh documentation which means `the expanded text to this point'. That is not a word specifier, it is an event specifier. If we don't want to allow modifiers with `!#', just stick the current output line in again. */ if (cc == '#') { if (result) { temp = (char *)xmalloc (1 + strlen (result)); strcpy (temp, result); ADD_STRING (temp); xfree (temp); } i++; break; } #endif qc = squote ? '\'' : (dquote ? '"' : 0); r = history_expand_internal (string, i, qc, &eindex, &temp, result); if (r < 0) { *output = temp; xfree (result); if (string != hstring) xfree (string); return -1; } else { if (temp) { modified++; if (*temp) ADD_STRING (temp); xfree (temp); } only_printing += r == 1; i = eindex; } break; } } *output = result; if (string != hstring) xfree (string); if (only_printing) { #if 0 add_history (result); #endif return (2); } return (modified != 0); } /* Return a consed string which is the word specified in SPEC, and found in FROM. NULL is returned if there is no spec. The address of ERROR_POINTER is returned if the word specified cannot be found. CALLER_INDEX is the offset in SPEC to start looking; it is updated to point to just after the last character parsed. */ static char * get_history_word_specifier (spec, from, caller_index) char *spec, *from; int *caller_index; { register int i = *caller_index; int first, last; int expecting_word_spec = 0; char *result; /* The range of words to return doesn't exist yet. */ first = last = 0; result = (char *)NULL; /* If we found a colon, then this *must* be a word specification. If it isn't, then it is an error. */ if (spec[i] == ':') { i++; expecting_word_spec++; } /* Handle special cases first. */ /* `%' is the word last searched for. */ if (spec[i] == '%') { *caller_index = i + 1; return (search_match ? savestring (search_match) : savestring ("")); } /* `*' matches all of the arguments, but not the command. */ if (spec[i] == '*') { *caller_index = i + 1; result = history_arg_extract (1, '$', from); return (result ? result : savestring ("")); } /* `$' is last arg. */ if (spec[i] == '$') { *caller_index = i + 1; return (history_arg_extract ('$', '$', from)); } /* Try to get FIRST and LAST figured out. */ if (spec[i] == '-') first = 0; else if (spec[i] == '^') { first = 1; i++; } else if (_rl_digit_p (spec[i]) && expecting_word_spec) { for (first = 0; _rl_digit_p (spec[i]); i++) first = (first * 10) + _rl_digit_value (spec[i]); } else return ((char *)NULL); /* no valid `first' for word specifier */ if (spec[i] == '^' || spec[i] == '*') { last = (spec[i] == '^') ? 1 : '$'; /* x* abbreviates x-$ */ i++; } else if (spec[i] != '-') last = first; else { i++; if (_rl_digit_p (spec[i])) { for (last = 0; _rl_digit_p (spec[i]); i++) last = (last * 10) + _rl_digit_value (spec[i]); } else if (spec[i] == '$') { i++; last = '$'; } #if 0 else if (!spec[i] || spec[i] == ':') /* check against `:' because there could be a modifier separator */ #else else /* csh seems to allow anything to terminate the word spec here, leaving it as an abbreviation. */ #endif last = -1; /* x- abbreviates x-$ omitting word `$' */ } *caller_index = i; if (last >= first || last == '$' || last < 0) result = history_arg_extract (first, last, from); return (result ? result : (char *)&error_pointer); } /* Extract the args specified, starting at FIRST, and ending at LAST. The args are taken from STRING. If either FIRST or LAST is < 0, then make that arg count from the right (subtract from the number of tokens, so that FIRST = -1 means the next to last token on the line). If LAST is `$' the last arg from STRING is used. */ char * history_arg_extract (first, last, string) int first, last; const char *string; { register int i, len; char *result; int size, offset; char **list; /* XXX - think about making history_tokenize return a struct array, each struct in array being a string and a length to avoid the calls to strlen below. */ if ((list = history_tokenize (string)) == NULL) return ((char *)NULL); for (len = 0; list[len]; len++) ; if (last < 0) last = len + last - 1; if (first < 0) first = len + first - 1; if (last == '$') last = len - 1; if (first == '$') first = len - 1; last++; if (first >= len || last > len || first < 0 || last < 0 || first > last) result = ((char *)NULL); else { for (size = 0, i = first; i < last; i++) size += strlen (list[i]) + 1; result = (char *)xmalloc (size + 1); result[0] = '\0'; for (i = first, offset = 0; i < last; i++) { strcpy (result + offset, list[i]); offset += strlen (list[i]); if (i + 1 < last) { result[offset++] = ' '; result[offset] = 0; } } } for (i = 0; i < len; i++) xfree (list[i]); xfree (list); return (result); } static int history_tokenize_word (string, ind) const char *string; int ind; { register int i, j; int delimiter, nestdelim, delimopen; i = ind; delimiter = nestdelim = 0; if (member (string[i], "()\n")) { i++; return i; } if (ISDIGIT (string[i])) { j = i; while (string[j] && ISDIGIT (string[j])) j++; if (string[j] == 0) return (j); if (string[j] == '<' || string[j] == '>') i = j; /* digit sequence is a file descriptor */ else { i = j; goto get_word; /* digit sequence is part of a word */ } } if (member (string[i], "<>;&|$")) { int peek = string[i + 1]; if (peek == string[i] && peek != '$') { if (peek == '<' && string[i + 2] == '-') i++; else if (peek == '<' && string[i + 2] == '<') i++; i += 2; return i; } else if (peek == '&' && (string[i] == '>' || string[i] == '<')) { j = i + 2; while (string[j] && ISDIGIT (string[j])) /* file descriptor */ j++; if (string[j] =='-') /* <&[digits]-, >&[digits]- */ j++; return j; } else if ((peek == '>' && string[i] == '&') || (peek == '|' && string[i] == '>')) { i += 2; return i; } /* XXX - separated out for later -- bash-4.2 */ else if ((peek == '(' && (string[i] == '>' || string[i] == '<')) || /* ) */ (peek == '(' && string[i] == '$')) /*)*/ { i += 2; delimopen = '('; delimiter = ')'; nestdelim = 1; goto get_word; } #if 0 else if (peek == '\'' && string[i] == '$') { i += 2; /* XXX */ return i; } #endif if (string[i] != '$') { i++; return i; } } /* same code also used for $(...)/<(...)/>(...) above */ if (member (string[i], "!@?+*")) { int peek = string[i + 1]; if (peek == '(') /*)*/ { /* Shell extended globbing patterns */ i += 2; delimopen = '('; delimiter = ')'; /* XXX - not perfect */ nestdelim = 1; } } get_word: /* Get word from string + i; */ if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) delimiter = string[i++]; for (; string[i]; i++) { if (string[i] == '\\' && string[i + 1] == '\n') { i++; continue; } if (string[i] == '\\' && delimiter != '\'' && (delimiter != '"' || member (string[i], slashify_in_quotes))) { i++; continue; } /* delimiter must be set and set to something other than a quote if nestdelim is set, so these tests are safe. */ if (nestdelim && string[i] == delimopen) { nestdelim++; continue; } if (nestdelim && string[i] == delimiter) { nestdelim--; if (nestdelim == 0) delimiter = 0; continue; } if (delimiter && string[i] == delimiter) { delimiter = 0; continue; } if (delimiter == 0 && (member (string[i], history_word_delimiters))) break; if (delimiter == 0 && member (string[i], HISTORY_QUOTE_CHARACTERS)) delimiter = string[i]; } return i; } static char * history_substring (string, start, end) const char *string; int start, end; { register int len; register char *result; len = end - start; result = (char *)xmalloc (len + 1); strncpy (result, string + start, len); result[len] = '\0'; return result; } /* Parse STRING into tokens and return an array of strings. If WIND is not -1 and INDP is not null, we also want the word surrounding index WIND. The position in the returned array of strings is returned in *INDP. */ static char ** history_tokenize_internal (string, wind, indp) const char *string; int wind, *indp; { char **result; register int i, start, result_index, size; /* If we're searching for a string that's not part of a word (e.g., " "), make sure we set *INDP to a reasonable value. */ if (indp && wind != -1) *indp = -1; /* Get a token, and stuff it into RESULT. The tokens are split exactly where the shell would split them. */ for (i = result_index = size = 0, result = (char **)NULL; string[i]; ) { /* Skip leading whitespace. */ for (; string[i] && whitespace (string[i]); i++) ; if (string[i] == 0 || string[i] == history_comment_char) return (result); start = i; i = history_tokenize_word (string, start); /* If we have a non-whitespace delimiter character (which would not be skipped by the loop above), use it and any adjacent delimiters to make a separate field. Any adjacent white space will be skipped the next time through the loop. */ if (i == start && history_word_delimiters) { i++; while (string[i] && member (string[i], history_word_delimiters)) i++; } /* If we are looking for the word in which the character at a particular index falls, remember it. */ if (indp && wind != -1 && wind >= start && wind < i) *indp = result_index; if (result_index + 2 >= size) result = (char **)xrealloc (result, ((size += 10) * sizeof (char *))); result[result_index++] = history_substring (string, start, i); result[result_index] = (char *)NULL; } return (result); } /* Return an array of tokens, much as the shell might. The tokens are parsed out of STRING. */ char ** history_tokenize (string) const char *string; { return (history_tokenize_internal (string, -1, (int *)NULL)); } /* Free members of WORDS from START to an empty string */ static void freewords (words, start) char **words; int start; { register int i; for (i = start; words[i]; i++) xfree (words[i]); } /* Find and return the word which contains the character at index IND in the history line LINE. Used to save the word matched by the last history !?string? search. */ static char * history_find_word (line, ind) char *line; int ind; { char **words, *s; int i, wind; words = history_tokenize_internal (line, ind, &wind); if (wind == -1 || words == 0) { if (words) freewords (words, 0); FREE (words); return ((char *)NULL); } s = words[wind]; for (i = 0; i < wind; i++) xfree (words[i]); freewords (words, wind + 1); xfree (words); return s; } readline-7.0/histfile.c000644 000436 000024 00000050135 12651440153 015204 0ustar00chetstaff000000 000000 /* histfile.c - functions to manipulate the history file. */ /* Copyright (C) 1989-2016 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ /* The goal is to make the implementation transparent, so that you don't have to know what data types are used, just what functions you can call. I think I have done that. */ #define READLINE_LIBRARY #if defined (__TANDEM) # include #endif #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_LIMITS_H) # include #endif #include #if ! defined (_MINIX) && defined (HAVE_SYS_FILE_H) # include #endif #include "posixstat.h" #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # include #endif #include #if defined (__EMX__) # undef HAVE_MMAP #endif #ifdef HISTORY_USE_MMAP # include # ifdef MAP_FILE # define MAP_RFLAGS (MAP_FILE|MAP_PRIVATE) # define MAP_WFLAGS (MAP_FILE|MAP_SHARED) # else # define MAP_RFLAGS MAP_PRIVATE # define MAP_WFLAGS MAP_SHARED # endif # ifndef MAP_FAILED # define MAP_FAILED ((void *)-1) # endif #endif /* HISTORY_USE_MMAP */ /* If we're compiling for __EMX__ (OS/2) or __CYGWIN__ (cygwin32 environment on win 95/98/nt), we want to open files with O_BINARY mode so that there is no \n -> \r\n conversion performed. On other systems, we don't want to mess around with O_BINARY at all, so we ensure that it's defined to 0. */ #if defined (__EMX__) || defined (__CYGWIN__) # ifndef O_BINARY # define O_BINARY 0 # endif #else /* !__EMX__ && !__CYGWIN__ */ # undef O_BINARY # define O_BINARY 0 #endif /* !__EMX__ && !__CYGWIN__ */ #include #if !defined (errno) extern int errno; #endif /* !errno */ #include "history.h" #include "histlib.h" #include "rlshell.h" #include "xmalloc.h" #if !defined (PATH_MAX) # define PATH_MAX 1024 /* default */ #endif extern void _hs_append_history_line PARAMS((int, const char *)); /* history file version; currently unused */ int history_file_version = 1; /* If non-zero, we write timestamps to the history file in history_do_write() */ int history_write_timestamps = 0; /* If non-zero, we assume that a history file that starts with a timestamp uses timestamp-delimited entries and can include multi-line history entries. Used by read_history_range */ int history_multiline_entries = 0; /* Immediately after a call to read_history() or read_history_range(), this will return the number of lines just read from the history file in that call. */ int history_lines_read_from_file = 0; /* Immediately after a call to write_history() or history_do_write(), this will return the number of lines just written to the history file in that call. This also works with history_truncate_file. */ int history_lines_written_to_file = 0; /* Does S look like the beginning of a history timestamp entry? Placeholder for more extensive tests. */ #define HIST_TIMESTAMP_START(s) (*(s) == history_comment_char && isdigit ((unsigned char)(s)[1]) ) static char *history_backupfile PARAMS((const char *)); static char *history_tempfile PARAMS((const char *)); static int histfile_backup PARAMS((const char *, const char *)); static int histfile_restore PARAMS((const char *, const char *)); /* Return the string that should be used in the place of this filename. This only matters when you don't specify the filename to read_history (), or write_history (). */ static char * history_filename (filename) const char *filename; { char *return_val; const char *home; int home_len; return_val = filename ? savestring (filename) : (char *)NULL; if (return_val) return (return_val); home = sh_get_env_value ("HOME"); #if defined (_WIN32) if (home == 0) home = sh_get_env_value ("APPDATA"); #endif if (home == 0) return (NULL); else home_len = strlen (home); return_val = (char *)xmalloc (2 + home_len + 8); /* strlen(".history") == 8 */ strcpy (return_val, home); return_val[home_len] = '/'; #if defined (__MSDOS__) strcpy (return_val + home_len + 1, "_history"); #else strcpy (return_val + home_len + 1, ".history"); #endif return (return_val); } static char * history_backupfile (filename) const char *filename; { const char *fn; char *ret, linkbuf[PATH_MAX+1]; size_t len; ssize_t n; struct stat fs; fn = filename; #if defined (HAVE_READLINK) /* Follow symlink to avoid backing up symlink itself; call will fail if not a symlink */ if ((n = readlink (filename, linkbuf, sizeof (linkbuf) - 1)) > 0) { linkbuf[n] = '\0'; fn = linkbuf; } #endif len = strlen (fn); ret = xmalloc (len + 2); strcpy (ret, fn); ret[len] = '-'; ret[len+1] = '\0'; return ret; } static char * history_tempfile (filename) const char *filename; { const char *fn; char *ret, linkbuf[PATH_MAX+1]; size_t len; ssize_t n; struct stat fs; int pid; fn = filename; #if defined (HAVE_READLINK) /* Follow symlink so tempfile created in the same directory as any symlinked history file; call will fail if not a symlink */ if ((n = readlink (filename, linkbuf, sizeof (linkbuf) - 1)) > 0) { linkbuf[n] = '\0'; fn = linkbuf; } #endif len = strlen (fn); ret = xmalloc (len + 11); strcpy (ret, fn); pid = (int)getpid (); /* filename-PID.tmp */ ret[len] = '-'; ret[len+1] = (pid / 10000 % 10) + '0'; ret[len+2] = (pid / 1000 % 10) + '0'; ret[len+3] = (pid / 100 % 10) + '0'; ret[len+4] = (pid / 10 % 10) + '0'; ret[len+5] = (pid % 10) + '0'; strcpy (ret + len + 6, ".tmp"); return ret; } /* Add the contents of FILENAME to the history list, a line at a time. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ int read_history (filename) const char *filename; { return (read_history_range (filename, 0, -1)); } /* Read a range of lines from FILENAME, adding them to the history list. Start reading at the FROM'th line and end at the TO'th. If FROM is zero, start at the beginning. If TO is less than FROM, read until the end of the file. If FILENAME is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. */ int read_history_range (filename, from, to) const char *filename; int from, to; { register char *line_start, *line_end, *p; char *input, *buffer, *bufend, *last_ts; int file, current_line, chars_read, has_timestamps, reset_comment_char; struct stat finfo; size_t file_size; #if defined (EFBIG) int overflow_errno = EFBIG; #elif defined (EOVERFLOW) int overflow_errno = EOVERFLOW; #else int overflow_errno = EIO; #endif history_lines_read_from_file = 0; buffer = last_ts = (char *)NULL; input = history_filename (filename); file = input ? open (input, O_RDONLY|O_BINARY, 0666) : -1; if ((file < 0) || (fstat (file, &finfo) == -1)) goto error_and_exit; file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { errno = overflow_errno; goto error_and_exit; } #ifdef HISTORY_USE_MMAP /* We map read/write and private so we can change newlines to NULs without affecting the underlying object. */ buffer = (char *)mmap (0, file_size, PROT_READ|PROT_WRITE, MAP_RFLAGS, file, 0); if ((void *)buffer == MAP_FAILED) { errno = overflow_errno; goto error_and_exit; } chars_read = file_size; #else buffer = (char *)malloc (file_size + 1); if (buffer == 0) { errno = overflow_errno; goto error_and_exit; } chars_read = read (file, buffer, file_size); #endif if (chars_read < 0) { error_and_exit: if (errno != 0) chars_read = errno; else chars_read = EIO; if (file >= 0) close (file); FREE (input); #ifndef HISTORY_USE_MMAP FREE (buffer); #endif return (chars_read); } close (file); /* Set TO to larger than end of file if negative. */ if (to < 0) to = chars_read; /* Start at beginning of file, work to end. */ bufend = buffer + chars_read; current_line = 0; /* Heuristic: the history comment character rarely changes, so assume we have timestamps if the buffer starts with `#[:digit:]' and temporarily set history_comment_char so timestamp parsing works right */ reset_comment_char = 0; if (history_comment_char == '\0' && buffer[0] == '#' && isdigit ((unsigned char)buffer[1])) { history_comment_char = '#'; reset_comment_char = 1; } has_timestamps = HIST_TIMESTAMP_START (buffer); history_multiline_entries += has_timestamps && history_write_timestamps; /* Skip lines until we are at FROM. */ for (line_start = line_end = buffer; line_end < bufend && current_line < from; line_end++) if (*line_end == '\n') { p = line_end + 1; /* If we see something we think is a timestamp, continue with this line. We should check more extensively here... */ if (HIST_TIMESTAMP_START(p) == 0) current_line++; line_start = p; } /* If there are lines left to gobble, then gobble them now. */ for (line_end = line_start; line_end < bufend; line_end++) if (*line_end == '\n') { /* Change to allow Windows-like \r\n end of line delimiter. */ if (line_end > line_start && line_end[-1] == '\r') line_end[-1] = '\0'; else *line_end = '\0'; if (*line_start) { if (HIST_TIMESTAMP_START(line_start) == 0) { if (last_ts == NULL && history_multiline_entries) _hs_append_history_line (history_length - 1, line_start); else add_history (line_start); if (last_ts) { add_history_time (last_ts); last_ts = NULL; } } else { last_ts = line_start; current_line--; } } current_line++; if (current_line >= to) break; line_start = line_end + 1; } history_lines_read_from_file = current_line; if (reset_comment_char) history_comment_char = '\0'; FREE (input); #ifndef HISTORY_USE_MMAP FREE (buffer); #else munmap (buffer, file_size); #endif return (0); } /* Save FILENAME to BACK, handling case where FILENAME is a symlink (e.g., ~/.bash_history -> .histfiles/.bash_history.$HOSTNAME) */ static int histfile_backup (filename, back) const char *filename; const char *back; { #if defined (HAVE_READLINK) char linkbuf[PATH_MAX+1]; ssize_t n; /* Follow to target of symlink to avoid renaming symlink itself */ if ((n = readlink (filename, linkbuf, sizeof (linkbuf) - 1)) > 0) { linkbuf[n] = '\0'; return (rename (linkbuf, back)); } #endif return (rename (filename, back)); } /* Restore ORIG from BACKUP handling case where ORIG is a symlink (e.g., ~/.bash_history -> .histfiles/.bash_history.$HOSTNAME) */ static int histfile_restore (backup, orig) const char *backup; const char *orig; { #if defined (HAVE_READLINK) char linkbuf[PATH_MAX+1]; ssize_t n; /* Follow to target of symlink to avoid renaming symlink itself */ if ((n = readlink (orig, linkbuf, sizeof (linkbuf) - 1)) > 0) { linkbuf[n] = '\0'; return (rename (backup, linkbuf)); } #endif return (rename (backup, orig)); } /* Truncate the history file FNAME, leaving only LINES trailing lines. If FNAME is NULL, then use ~/.history. Writes a new file and renames it to the original name. Returns 0 on success, errno on failure. */ int history_truncate_file (fname, lines) const char *fname; int lines; { char *buffer, *filename, *tempname, *bp, *bp1; /* bp1 == bp+1 */ int file, chars_read, rv, orig_lines, exists, r; struct stat finfo; size_t file_size; history_lines_written_to_file = 0; buffer = (char *)NULL; filename = history_filename (fname); tempname = 0; file = filename ? open (filename, O_RDONLY|O_BINARY, 0666) : -1; rv = exists = 0; /* Don't try to truncate non-regular files. */ if (file == -1 || fstat (file, &finfo) == -1) { rv = errno; if (file != -1) close (file); goto truncate_exit; } exists = 1; if (S_ISREG (finfo.st_mode) == 0) { close (file); #ifdef EFTYPE rv = EFTYPE; #else rv = EINVAL; #endif goto truncate_exit; } file_size = (size_t)finfo.st_size; /* check for overflow on very large files */ if (file_size != finfo.st_size || file_size + 1 < file_size) { close (file); #if defined (EFBIG) rv = errno = EFBIG; #elif defined (EOVERFLOW) rv = errno = EOVERFLOW; #else rv = errno = EINVAL; #endif goto truncate_exit; } buffer = (char *)malloc (file_size + 1); if (buffer == 0) { rv = errno; close (file); goto truncate_exit; } chars_read = read (file, buffer, file_size); close (file); if (chars_read <= 0) { rv = (chars_read < 0) ? errno : 0; goto truncate_exit; } orig_lines = lines; /* Count backwards from the end of buffer until we have passed LINES lines. bp1 is set funny initially. But since bp[1] can't be a comment character (since it's off the end) and *bp can't be both a newline and the history comment character, it should be OK. */ for (bp1 = bp = buffer + chars_read - 1; lines && bp > buffer; bp--) { if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) lines--; bp1 = bp; } /* If this is the first line, then the file contains exactly the number of lines we want to truncate to, so we don't need to do anything. It's the first line if we don't find a newline between the current value of i and 0. Otherwise, write from the start of this line until the end of the buffer. */ for ( ; bp > buffer; bp--) { if (*bp == '\n' && HIST_TIMESTAMP_START(bp1) == 0) { bp++; break; } bp1 = bp; } /* Write only if there are more lines in the file than we want to truncate to. */ if (bp <= buffer) { rv = 0; /* No-op if LINES == 0 at this point */ history_lines_written_to_file = orig_lines - lines; goto truncate_exit; } tempname = history_tempfile (filename); if ((file = open (tempname, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0600)) != -1) { if (write (file, bp, chars_read - (bp - buffer)) < 0) rv = errno; if (close (file) < 0 && rv == 0) rv = errno; } else rv = errno; truncate_exit: FREE (buffer); history_lines_written_to_file = orig_lines - lines; if (rv == 0 && filename && tempname) rv = histfile_restore (tempname, filename); if (rv != 0) { if (tempname) unlink (tempname); history_lines_written_to_file = 0; } /* Make sure the new filename is owned by the same user as the old. If one user is running this, it's a no-op. If the shell is running after sudo with a shared history file, we don't want to leave the history file owned by root. */ if (rv == 0 && exists) r = chown (filename, finfo.st_uid, finfo.st_gid); xfree (filename); FREE (tempname); return rv; } /* Workhorse function for writing history. Writes the last NELEMENT entries from the history list to FILENAME. OVERWRITE is non-zero if you wish to replace FILENAME with the entries. */ static int history_do_write (filename, nelements, overwrite) const char *filename; int nelements, overwrite; { register int i; char *output, *tempname, *histname; int file, mode, rv, exists; struct stat finfo; #ifdef HISTORY_USE_MMAP size_t cursize; history_lines_written_to_file = 0; mode = overwrite ? O_RDWR|O_CREAT|O_TRUNC|O_BINARY : O_RDWR|O_APPEND|O_BINARY; #else mode = overwrite ? O_WRONLY|O_CREAT|O_TRUNC|O_BINARY : O_WRONLY|O_APPEND|O_BINARY; #endif histname = history_filename (filename); exists = histname ? (stat (histname, &finfo) == 0) : 0; tempname = (overwrite && exists && S_ISREG (finfo.st_mode)) ? history_tempfile (histname) : 0; output = tempname ? tempname : histname; file = output ? open (output, mode, 0600) : -1; rv = 0; if (file == -1) { rv = errno; FREE (histname); FREE (tempname); return (rv); } #ifdef HISTORY_USE_MMAP cursize = overwrite ? 0 : lseek (file, 0, SEEK_END); #endif if (nelements > history_length) nelements = history_length; /* Build a buffer of all the lines to write, and write them in one syscall. Suggested by Peter Ho (peter@robosts.oxford.ac.uk). */ { HIST_ENTRY **the_history; /* local */ register int j; int buffer_size; char *buffer; the_history = history_list (); /* Calculate the total number of bytes to write. */ for (buffer_size = 0, i = history_length - nelements; i < history_length; i++) #if 0 buffer_size += 2 + HISTENT_BYTES (the_history[i]); #else { if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0]) buffer_size += strlen (the_history[i]->timestamp) + 1; buffer_size += strlen (the_history[i]->line) + 1; } #endif /* Allocate the buffer, and fill it. */ #ifdef HISTORY_USE_MMAP if (ftruncate (file, buffer_size+cursize) == -1) goto mmap_error; buffer = (char *)mmap (0, buffer_size, PROT_READ|PROT_WRITE, MAP_WFLAGS, file, cursize); if ((void *)buffer == MAP_FAILED) { mmap_error: rv = errno; close (file); if (tempname) unlink (tempname); FREE (histname); FREE (tempname); return rv; } #else buffer = (char *)malloc (buffer_size); if (buffer == 0) { rv = errno; close (file); if (tempname) unlink (tempname); FREE (histname); FREE (tempname); return rv; } #endif for (j = 0, i = history_length - nelements; i < history_length; i++) { if (history_write_timestamps && the_history[i]->timestamp && the_history[i]->timestamp[0]) { strcpy (buffer + j, the_history[i]->timestamp); j += strlen (the_history[i]->timestamp); buffer[j++] = '\n'; } strcpy (buffer + j, the_history[i]->line); j += strlen (the_history[i]->line); buffer[j++] = '\n'; } #ifdef HISTORY_USE_MMAP if (msync (buffer, buffer_size, MS_ASYNC) != 0 || munmap (buffer, buffer_size) != 0) rv = errno; #else if (write (file, buffer, buffer_size) < 0) rv = errno; xfree (buffer); #endif } history_lines_written_to_file = nelements; if (close (file) < 0 && rv == 0) rv = errno; if (rv == 0 && histname && tempname) rv = histfile_restore (tempname, histname); if (rv != 0) { if (tempname) unlink (tempname); history_lines_written_to_file = 0; } /* Make sure the new filename is owned by the same user as the old. If one user is running this, it's a no-op. If the shell is running after sudo with a shared history file, we don't want to leave the history file owned by root. */ if (rv == 0 && exists) mode = chown (histname, finfo.st_uid, finfo.st_gid); FREE (histname); FREE (tempname); return (rv); } /* Append NELEMENT entries to FILENAME. The entries appended are from the end of the list minus NELEMENTs up to the end of the list. */ int append_history (nelements, filename) int nelements; const char *filename; { return (history_do_write (filename, nelements, HISTORY_APPEND)); } /* Overwrite FILENAME with the current history. If FILENAME is NULL, then write the history list to ~/.history. Values returned are as in read_history ().*/ int write_history (filename) const char *filename; { return (history_do_write (filename, history_length, HISTORY_OVERWRITE)); } readline-7.0/histsearch.c000664 000436 000024 00000011400 11130207321 015511 0ustar00chetstaff000000 000000 /* histsearch.c -- searching the history list. */ /* Copyright (C) 1989, 1992-2009 Free Software Foundation, Inc. This file contains the GNU History Library (History), a set of routines for managing the text of previously typed lines. History 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 3 of the License, or (at your option) any later version. History 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 History. If not, see . */ #define READLINE_LIBRARY #if defined (HAVE_CONFIG_H) # include #endif #include #if defined (HAVE_STDLIB_H) # include #else # include "ansi_stdlib.h" #endif /* HAVE_STDLIB_H */ #if defined (HAVE_UNISTD_H) # ifdef _MINIX # include # endif # include #endif #include "history.h" #include "histlib.h" /* The list of alternate characters that can delimit a history search string. */ char *history_search_delimiter_chars = (char *)NULL; static int history_search_internal PARAMS((const char *, int, int)); /* Search the history for STRING, starting at history_offset. If DIRECTION < 0, then the search is through previous entries, else through subsequent. If ANCHORED is non-zero, the string must appear at the beginning of a history line, otherwise, the string may appear anywhere in the line. If the string is found, then current_history () is the history entry, and the value of this function is the offset in the line of that history entry that the string was found in. Otherwise, nothing is changed, and a -1 is returned. */ static int history_search_internal (string, direction, anchored) const char *string; int direction, anchored; { register int i, reverse; register char *line; register int line_index; int string_len; HIST_ENTRY **the_history; /* local */ i = history_offset; reverse = (direction < 0); /* Take care of trivial cases first. */ if (string == 0 || *string == '\0') return (-1); if (!history_length || ((i >= history_length) && !reverse)) return (-1); if (reverse && (i >= history_length)) i = history_length - 1; #define NEXT_LINE() do { if (reverse) i--; else i++; } while (0) the_history = history_list (); string_len = strlen (string); while (1) { /* Search each line in the history list for STRING. */ /* At limit for direction? */ if ((reverse && i < 0) || (!reverse && i == history_length)) return (-1); line = the_history[i]->line; line_index = strlen (line); /* If STRING is longer than line, no match. */ if (string_len > line_index) { NEXT_LINE (); continue; } /* Handle anchored searches first. */ if (anchored == ANCHORED_SEARCH) { if (STREQN (string, line, string_len)) { history_offset = i; return (0); } NEXT_LINE (); continue; } /* Do substring search. */ if (reverse) { line_index -= string_len; while (line_index >= 0) { if (STREQN (string, line + line_index, string_len)) { history_offset = i; return (line_index); } line_index--; } } else { register int limit; limit = line_index - string_len + 1; line_index = 0; while (line_index < limit) { if (STREQN (string, line + line_index, string_len)) { history_offset = i; return (line_index); } line_index++; } } NEXT_LINE (); } } /* Do a non-anchored search for STRING through the history in DIRECTION. */ int history_search (string, direction) const char *string; int direction; { return (history_search_internal (string, direction, NON_ANCHORED_SEARCH)); } /* Do an anchored search for string through the history in DIRECTION. */ int history_search_prefix (string, direction) const char *string; int direction; { return (history_search_internal (string, direction, ANCHORED_SEARCH)); } /* Search for STRING in the history list. DIR is < 0 for searching backwards. POS is an absolute index into the history list at which point to begin searching. */ int history_search_pos (string, dir, pos) const char *string; int dir, pos; { int ret, old; old = where_history (); history_set_pos (pos); if (history_search (string, dir) == -1) { history_set_pos (old); return (-1); } ret = where_history (); history_set_pos (old); return ret; } readline-7.0/patchlevel000664 000436 000024 00000000061 12603464617 015306 0ustar00chetstaff000000 000000 # Do not edit -- exists only for use by patch 0 readline-7.0/shlib/Makefile.in000664 000436 000024 00000044554 12550566466 016427 0ustar00chetstaff000000 000000 ## -*- text -*- ## # Makefile for the GNU readline library shared library support. # # Copyright (C) 1998-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . PACKAGE = @PACKAGE_NAME@ VERSION = @PACKAGE_VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_VERSION = @PACKAGE_VERSION@ RL_LIBRARY_VERSION = @LIBVERSION@ RL_LIBRARY_NAME = readline datarootdir = @datarootdir@ srcdir = @srcdir@ VPATH = @top_srcdir@ topdir = @top_srcdir@ BUILD_DIR = @BUILD_DIR@ INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ CC = @CC@ RANLIB = @RANLIB@ AR = @AR@ ARFLAGS = @ARFLAGS@ RM = rm -f CP = cp MV = mv LN = ln SHELL = @MAKE_SHELL@ host_os = @host_os@ host_vendor = @host_vendor@ prefix = @prefix@ exec_prefix = @exec_prefix@ includedir = @includedir@ bindir = @bindir@ libdir = @libdir@ datadir = @datadir@ localedir = @localedir@ # Support an alternate destination root directory for package building DESTDIR = CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ LDFLAGS = @LDFLAGS@ @LOCAL_LDFLAGS@ @CFLAGS@ DEFS = @DEFS@ @CROSS_COMPILE@ LOCAL_DEFS = @LOCAL_DEFS@ # # These values are generated for configure by ${topdir}/support/shobj-conf. # If your system is not supported by that script, but includes facilities for # dynamic loading of shared objects, please update the script and send the # changes to bash-maintainers@gnu.org. # SHOBJ_CC = @SHOBJ_CC@ SHOBJ_CFLAGS = @SHOBJ_CFLAGS@ SHOBJ_LD = @SHOBJ_LD@ SHOBJ_LDFLAGS = @SHOBJ_LDFLAGS@ SHOBJ_XLDFLAGS = @SHOBJ_XLDFLAGS@ SHOBJ_LIBS = @SHOBJ_LIBS@ SHLIB_XLDFLAGS = @LDFLAGS@ @SHLIB_XLDFLAGS@ SHLIB_LIBS = @SHLIB_LIBS@ SHLIB_DOT = @SHLIB_DOT@ SHLIB_LIBPREF = @SHLIB_LIBPREF@ SHLIB_LIBSUFF = @SHLIB_LIBSUFF@ SHLIB_LIBVERSION = @SHLIB_LIBVERSION@ SHLIB_DLLVERSION = @SHLIB_DLLVERSION@ SHLIB_STATUS = @SHLIB_STATUS@ TERMCAP_LIB = @TERMCAP_LIB@ # shared library versioning SHLIB_MAJOR= @SHLIB_MAJOR@ # shared library systems like SVR4's do not use minor versions SHLIB_MINOR= .@SHLIB_MINOR@ # For libraries which include headers from other libraries. INCLUDES = -I. -I.. -I$(topdir) CCFLAGS = $(DEFS) $(LOCAL_DEFS) $(INCLUDES) $(CPPFLAGS) $(LOCAL_CFLAGS) $(CFLAGS) .SUFFIXES: .so .c.so: ${RM} $@ $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -o $*.o $< $(MV) $*.o $@ # The name of the main library target. SHARED_READLINE = $(SHLIB_LIBPREF)readline$(SHLIB_DOT)$(SHLIB_LIBVERSION) SHARED_HISTORY = $(SHLIB_LIBPREF)history$(SHLIB_DOT)$(SHLIB_LIBVERSION) SHARED_LIBS = $(SHARED_READLINE) $(SHARED_HISTORY) # The C code source files for this library. CSOURCES = $(topdir)/readline.c $(topdir)/funmap.c $(topdir)/keymaps.c \ $(topdir)/vi_mode.c $(topdir)/parens.c $(topdir)/rltty.c \ $(topdir)/complete.c $(topdir)/bind.c $(topdir)/isearch.c \ $(topdir)/display.c $(topdir)/signals.c $(topdir)/emacs_keymap.c \ $(topdir)/vi_keymap.c $(topdir)/util.c $(topdir)/kill.c \ $(topdir)/undo.c $(topdir)/macro.c $(topdir)/input.c \ $(topdir)/callback.c $(topdir)/terminal.c $(topdir)/xmalloc.c $(topdir)/xfree.c \ $(topdir)/history.c $(topdir)/histsearch.c $(topdir)/histexpand.c \ $(topdir)/histfile.c $(topdir)/nls.c $(topdir)/search.c \ $(topdir)/shell.c $(topdir)/savestring.c $(topdir)/tilde.c \ $(topdir)/text.c $(topdir)/misc.c $(topdir)/compat.c \ $(topdir)/colors.c $(topdir)/parse-colors.c \ $(topdir)/mbutil.c # The header files for this library. HSOURCES = $(topdir)/readline.h $(topdir)/rldefs.h $(topdir)/chardefs.h \ $(topdir)/keymaps.h $(topdir)/history.h $(topdir)/histlib.h \ $(topdir)/posixstat.h $(topdir)/posixdir.h $(topdir)/posixjmp.h \ $(topdir)/tilde.h $(topdir)/rlconf.h $(topdir)/rltty.h \ $(topdir)/ansi_stdlib.h $(topdir)/tcap.h $(topdir)/rlstdc.h \ $(topdir)/xmalloc.h $(topdir)/rlprivate.h $(topdir)/rlshell.h \ $(topdir)/rltypedefs.h $(topdir)/rlmbutil.h \ $(topdir)/colors.h $(topdir)/parse-colors.h SHARED_HISTOBJ = history.so histexpand.so histfile.so histsearch.so shell.so \ mbutil.so SHARED_TILDEOBJ = tilde.so SHARED_COLORSOBJ = colors.so parse-colors.so SHARED_OBJ = readline.so vi_mode.so funmap.so keymaps.so parens.so search.so \ rltty.so complete.so bind.so isearch.so display.so signals.so \ util.so kill.so undo.so macro.so input.so callback.so terminal.so \ text.so nls.so misc.so \ $(SHARED_HISTOBJ) $(SHARED_TILDEOBJ) $(SHARED_COLORSOBJ) \ xmalloc.so xfree.so compat.so ########################################################################## all: $(SHLIB_STATUS) supported: $(SHARED_LIBS) unsupported: @echo "Your system and compiler (${host_os}-${CC}) are not supported by the" @echo "${topdir}/support/shobj-conf script." @echo "If your operating system provides facilities for creating" @echo "shared libraries, please update the script and re-run configure." @echo "Please send the changes you made to bash-maintainers@gnu.org" @echo "for inclusion in future bash and readline releases." $(SHARED_READLINE): $(SHARED_OBJ) $(RM) $@ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_OBJ) $(SHLIB_LIBS) $(SHARED_HISTORY): $(SHARED_HISTOBJ) xmalloc.so xfree.so $(RM) $@ $(SHOBJ_LD) ${SHOBJ_LDFLAGS} ${SHLIB_XLDFLAGS} -o $@ $(SHARED_HISTOBJ) xmalloc.so xfree.so $(SHLIB_LIBS) # Since tilde.c is shared between readline and bash, make sure we compile # it with the right flags when it's built as part of readline tilde.so: tilde.c ${RM} $@ $(SHOBJ_CC) -c $(CCFLAGS) $(SHOBJ_CFLAGS) -DREADLINE_LIBRARY -c -o tilde.o $(topdir)/tilde.c $(MV) tilde.o $@ installdirs: $(topdir)/support/mkdirs -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(libdir) -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(bindir) install-supported: installdirs $(SHLIB_STATUS) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_HISTORY) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -i "$(INSTALL_DATA)" $(SHARED_READLINE) @echo install: you may need to run ldconfig install-unsupported: @echo install: shared libraries not supported install: install-$(SHLIB_STATUS) uninstall-supported: $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_HISTORY) $(SHELL) $(topdir)/support/shlib-install -O $(host_os) -V $(host_vendor) -d $(DESTDIR)$(libdir) -b $(DESTDIR)$(bindir) -U $(SHARED_READLINE) @echo uninstall: you may need to run ldconfig uninstall-unsupported: @echo uninstall: shared libraries not supported uninstall: uninstall-$(SHLIB_STATUS) clean mostlyclean: force $(RM) $(SHARED_OBJ) $(SHARED_LIBS) distclean maintainer-clean: clean $(RM) Makefile force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: # Dependencies bind.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h bind.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h bind.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h bind.so: $(topdir)/rltypedefs.h bind.so: $(topdir)/tilde.h $(topdir)/history.h compat.so: ${BUILD_DIR}/config.h compat.so: $(topdir)/rlstdc.h $(topdir)/rltypedefs.h callback.so: $(topdir)/rlconf.h callback.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h callback.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h callback.so: $(topdir)/rltypedefs.h callback.so: $(topdir)/tilde.h complete.so: $(topdir)/ansi_stdlib.h $(topdir)/posixdir.h $(topdir)/posixstat.h complete.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h complete.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h complete.so: $(topdir)/rltypedefs.h complete.so: $(topdir)/tilde.h display.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h display.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h display.so: $(topdir)/tcap.h display.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h display.so: $(topdir)/rltypedefs.h display.so: $(topdir)/tilde.h $(topdir)/history.h funmap.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h funmap.so: $(topdir)/rltypedefs.h funmap.so: $(topdir)/rlconf.h $(topdir)/ansi_stdlib.h funmap.so: ${BUILD_DIR}/config.h $(topdir)/tilde.h histexpand.so: $(topdir)/ansi_stdlib.h histexpand.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histexpand.so: ${BUILD_DIR}/config.h histfile.so: $(topdir)/ansi_stdlib.h histfile.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histfile.so: ${BUILD_DIR}/config.h history.so: $(topdir)/ansi_stdlib.h history.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h history.so: ${BUILD_DIR}/config.h histsearch.so: $(topdir)/ansi_stdlib.h histsearch.so: $(topdir)/history.h $(topdir)/histlib.h $(topdir)/rltypedefs.h histsearch.so: ${BUILD_DIR}/config.h input.so: $(topdir)/ansi_stdlib.h input.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h input.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h input.so: $(topdir)/rltypedefs.h input.so: $(topdir)/tilde.h isearch.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h isearch.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h isearch.so: $(topdir)/rltypedefs.h isearch.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h keymaps.so: $(topdir)/keymaps.h $(topdir)/chardefs.h $(topdir)/rlconf.h keymaps.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h keymaps.so: $(topdir)/rltypedefs.h keymaps.so: ${BUILD_DIR}/config.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h kill.so: $(topdir)/ansi_stdlib.h kill.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h kill.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h kill.so: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rltypedefs.h macro.so: $(topdir)/ansi_stdlib.h macro.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h macro.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h macro.so: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rltypedefs.h mbutil.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h mbutil.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h mbutil.so: $(topdir)/chardefs.h $(topdir)/rlstdc.h misc.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h misc.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h misc.so: $(topdir)/rltypedefs.h misc.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h nls.so: $(topdir)/ansi_stdlib.h nls.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h nls.o: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h nls.o: $(topdir)/rltypedefs.h nls.o: $(topdir)/tilde.h $(topdir)/history.h $(topdir)/rlstdc.h parens.so: $(topdir)/rlconf.h ${BUILD_DIR}/config.h parens.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h parens.so: $(topdir)/rltypedefs.h parens.so: $(topdir)/tilde.h rltty.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h rltty.so: $(topdir)/rltty.h $(topdir)/tilde.h rltty.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h rltty.so: $(topdir)/rltypedefs.h savestring.so: ${BUILD_DIR}/config.h search.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h search.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h search.so: $(topdir)/ansi_stdlib.h $(topdir)/history.h $(topdir)/tilde.h search.so: $(topdir)/rltypedefs.h signals.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h signals.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h signals.so: $(topdir)/history.h $(topdir)/tilde.h signals.so: $(topdir)/rltypedefs.h terminal.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h terminal.so: $(topdir)/tcap.h terminal.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h terminal.so: $(topdir)/tilde.h $(topdir)/history.h terminal.so: $(topdir)/rltypedefs.h text.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h text.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h text.so: $(topdir)/rltypedefs.h text.so: $(topdir)/history.h $(topdir)/tilde.h $(topdir)/ansi_stdlib.h tilde.so: $(topdir)/ansi_stdlib.h ${BUILD_DIR}/config.h $(topdir)/tilde.h undo.so: $(topdir)/ansi_stdlib.h undo.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h undo.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h undo.so: $(topdir)/rltypedefs.h undo.so: $(topdir)/tilde.h $(topdir)/history.h util.so: $(topdir)/posixjmp.h $(topdir)/ansi_stdlib.h util.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h util.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h util.so: $(topdir)/rltypedefs.h $(topdir)/tilde.h vi_mode.so: $(topdir)/rldefs.h ${BUILD_DIR}/config.h $(topdir)/rlconf.h vi_mode.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/chardefs.h vi_mode.so: $(topdir)/history.h $(topdir)/ansi_stdlib.h $(topdir)/tilde.h vi_mode.so: $(topdir)/rltypedefs.h xfree.so: ${BUILD_DIR}/config.h xfree.so: $(topdir)/ansi_stdlib.h xmalloc.so: ${BUILD_DIR}/config.h xmalloc.so: $(topdir)/ansi_stdlib.h bind.so: $(topdir)/rlshell.h histfile.so: $(topdir)/rlshell.h nls.so: $(topdir)/rlshell.h readline.so: $(topdir)/rlshell.h shell.so: $(topdir)/rlshell.h terminal.so: $(topdir)/rlshell.h histexpand.so: $(topdir)/rlshell.h colors.so: $(BUILD_DIR)/config.h $(topdir)/colors.h colors.so: $(topdir)/rlconf.h colors.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h colors.so: $(topdir)/chardefs.h $(topdir)/tilde.h $(topdir)/rlstdc.h colors.so: $(topdir)/ansi_stdlib.h $(topdir)/posixstat.h parse-colors.so: $(BUILD_DIR)/config.h $(topdir)/colors.h $(topdir)/parse-colors.h parse-colors.so: $(topdir)/rldefs.h $(topdir)/rlconf.h parse-colors.so: $(topdir)/readline.h $(topdir)/keymaps.h $(topdir)/rltypedefs.h parse-colors.so: $(topdir)/chardefs.h $(topdir)/tilde.h $(topdir)/rlstdc.h bind.so: $(topdir)/rlprivate.h callback.so: $(topdir)/rlprivate.h complete.so: $(topdir)/rlprivate.h display.so: $(topdir)/rlprivate.h input.so: $(topdir)/rlprivate.h isearch.so: $(topdir)/rlprivate.h kill.so: $(topdir)/rlprivate.h macro.so: $(topdir)/rlprivate.h mbutil.so: $(topdir)/rlprivate.h misc.so: $(topdir)/rlprivate.h nls.so: $(topdir)/rlprivate.h parens.so: $(topdir)/rlprivate.h readline.so: $(topdir)/rlprivate.h rltty.so: $(topdir)/rlprivate.h search.so: $(topdir)/rlprivate.h signals.so: $(topdir)/rlprivate.h terminal.so: $(topdir)/rlprivate.h text.so: $(topdir)/rlprivate.h undo.so: $(topdir)/rlprivate.h util.so: $(topdir)/rlprivate.h vi_mode.so: $(topdir)/rlprivate.h colors.so: $(topdir)/rlprivate.h parse-colors.so: $(topdir)/rlprivate.h bind.so: $(topdir)/xmalloc.h callback.so: $(topdir)/xmalloc.h complete.so: $(topdir)/xmalloc.h display.so: $(topdir)/xmalloc.h funmap.so: $(topdir)/xmalloc.h histexpand.so: $(topdir)/xmalloc.h histfile.so: $(topdir)/xmalloc.h history.so: $(topdir)/xmalloc.h input.so: $(topdir)/xmalloc.h isearch.so: $(topdir)/xmalloc.h keymaps.so: $(topdir)/xmalloc.h kill.so: $(topdir)/xmalloc.h macro.so: $(topdir)/xmalloc.h mbutil.so: $(topdir)/xmalloc.h misc.so: $(topdir)/xmalloc.h readline.so: $(topdir)/xmalloc.h savestring.so: $(topdir)/xmalloc.h search.so: $(topdir)/xmalloc.h shell.so: $(topdir)/xmalloc.h terminal.so: $(topdir)/xmalloc.h text.so: $(topdir)/xmalloc.h tilde.so: $(topdir)/xmalloc.h undo.so: $(topdir)/xmalloc.h util.so: $(topdir)/xmalloc.h vi_mode.so: $(topdir)/xmalloc.h xfree.so: $(topdir)/xmalloc.h xmalloc.so: $(topdir)/xmalloc.h colors.so: $(topdir)/xmalloc.h parse-colors.so: $(topdir)/xmalloc.h complete.so: $(topdir)/rlmbutil.h display.so: $(topdir)/rlmbutil.h histexpand.so: $(topdir)/rlmbutil.h input.so: $(topdir)/rlmbutil.h isearch.so: $(topdir)/rlmbutil.h mbutil.so: $(topdir)/rlmbutil.h misc.so: $(topdir)/rlmbutil.h readline.so: $(topdir)/rlmbutil.h search.so: $(topdir)/rlmbutil.h text.so: $(topdir)/rlmbutil.h vi_mode.so: $(topdir)/rlmbutil.h colors.so: $(topdir)/rlmbutil.h parse-colors.so: $(topdir)/rlmbutil.h bind.so: $(topdir)/bind.c callback.so: $(topdir)/callback.c compat.so: $(topdir)/compat.c complete.so: $(topdir)/complete.c display.so: $(topdir)/display.c funmap.so: $(topdir)/funmap.c input.so: $(topdir)/input.c isearch.so: $(topdir)/isearch.c keymaps.so: $(topdir)/keymaps.c $(topdir)/emacs_keymap.c $(topdir)/vi_keymap.c kill.so: $(topdir)/kill.c macro.so: $(topdir)/macro.c mbutil.so: $(topdir)/mbutil.c misc.so: $(topdir)/mbutil.c nls.so: $(topdir)/nls.c parens.so: $(topdir)/parens.c readline.so: $(topdir)/readline.c rltty.so: $(topdir)/rltty.c savestring.so: $(topdir)/savestring.c search.so: $(topdir)/search.c shell.so: $(topdir)/shell.c signals.so: $(topdir)/signals.c terminal.so: $(topdir)/terminal.c text.so: $(topdir)/text.c tilde.so: $(topdir)/tilde.c undo.so: $(topdir)/undo.c util.so: $(topdir)/util.c vi_mode.so: $(topdir)/vi_mode.c xfree.so: $(topdir)/xfree.c xmalloc.so: $(topdir)/xmalloc.c histexpand.so: $(topdir)/histexpand.c histfile.so: $(topdir)/histfile.c history.so: $(topdir)/history.c histsearch.so: $(topdir)/histsearch.c bind.so: bind.c callback.so: callback.c comapt.so: compat.c complete.so: complete.c display.so: display.c funmap.so: funmap.c input.so: input.c isearch.so: isearch.c keymaps.so: keymaps.c emacs_keymap.c vi_keymap.c kill.so: kill.c macro.so: macro.c mbutil.so: mbutil.c misc.so: misc.c nls.so: nls.c parens.so: parens.c readline.so: readline.c rltty.so: rltty.c savestring.so: savestring.c search.so: search.c signals.so: signals.c shell.so: shell.c terminal.so: terminal.c text.so: text.c tilde.so: tilde.c undo.so: undo.c util.so: util.c vi_mode.so: vi_mode.c xfree.so: xfree.c xmalloc.so: xmalloc.c colors.so: colors.c parse-colors.so: parse-colors.c histexpand.so: histexpand.c histfile.so: histfile.c history.so: history.c histsearch.so: histsearch.c readline-7.0/support/config.guess000644 000436 000024 00000131355 12253665151 017273 0ustar00chetstaff000000 000000 #! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-11-29' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches with a ChangeLog entry to config-patches@gnu.org. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; or1k:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; or32:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: readline-7.0/support/config.rpath000664 000436 000000 00000035112 11053015105 017233 0ustar00chetwheel000000 000000 #! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2003 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except M$VC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux*) case $CC in icc|ecc) wl='-Wl,' ;; ccc) wl='-Wl,' ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; sco3.2v5*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) wl='-Wl,' ;; sysv4*MP*) ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we can use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris* | sysv5*) if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = yes; then # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 hardcode_direct=yes else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi4*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) if $CC -v 2>&1 | grep 'Apple' >/dev/null ; then hardcode_direct=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10* | hpux11*) if test "$with_gnu_ld" = no; then case "$host_cpu" in hppa*64*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=no ;; ia64*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=no # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; *) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; sco3.2v5*) ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4.2uw2*) hardcode_direct=yes hardcode_minus_L=no ;; sysv5OpenUNIX8* | sysv5UnixWare7* | sysv5uw[78]* | unixware7*) ;; sysv5*) hardcode_libdir_flag_spec= ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. libname_spec='lib$name' case "$host_os" in aix3*) ;; aix4* | aix5*) ;; amigaos*) ;; beos*) ;; bsdi4*) ;; cygwin* | mingw* | pw32*) shrext=.dll ;; darwin* | rhapsody*) shrext=.dylib ;; dgux*) ;; freebsd1*) ;; freebsd*) ;; gnu*) ;; hpux9* | hpux10* | hpux11*) case "$host_cpu" in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac ;; irix5* | irix6* | nonstopux*) case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux*) ;; netbsd*) ;; newsos6) ;; nto-qnx) ;; openbsd*) ;; os2*) libname_spec='$name' shrext=.dll ;; osf3* | osf4* | osf5*) ;; sco3.2v5*) ;; solaris*) ;; sunos4*) ;; sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ;; sysv4*MP*) ;; uts4*) ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: readline-7.0/support/install.sh000755 000436 000000 00000012343 07457107124 016752 0ustar00chetwheel000000 000000 #!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5. # # $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # This script is compatible with the BSD install script, but was written # from scratch. # # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" tranformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 readline-7.0/support/mkdirs000775 000436 000000 00000002165 11050551141 016151 0ustar00chetwheel000000 000000 #! /bin/sh # # mkdirs - a work-alike for `mkdir -p' # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2002 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . for dir do test -d "$dir" && continue tomake=$dir while test -n "$dir" ; do # dir=${dir%/*} # dir=`expr "$dir" ':' '\(/.*\)/[^/]*'` if dir=`expr "$dir" ':' '\(.*\)/[^/]*'`; then tomake="$dir $tomake" else dir= fi done for d in $tomake do test -d "$d" && continue echo mkdir "$d" mkdir "$d" done done exit 0 readline-7.0/support/mkdist000775 000436 000000 00000005145 12116703576 016173 0ustar00chetwheel000000 000000 #! /bin/bash - # # mkdist - make a distribution directory from a master manifest file # # usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version # # SRCDIR defaults to src # MANIFEST defaults to $SRCDIR/MANIFEST # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2002 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . # SRCDIR=src ROOTNAME=bash usage() { echo usage: mkdist [-m manifest] [-s srcdir] [-r rootname] [-t] [-v] version 1>&2 exit 2 } vmsg() { if [ -n "$verbose" ]; then echo mkdist: "$@" fi } while getopts m:s:r:tv name do case $name in m) MANIFEST=$OPTARG ;; s) SRCDIR=$OPTARG ;; r) ROOTNAME=$OPTARG ;; t) maketar=yes ;; v) verbose=yes ;; ?) usage ;; esac done : ${MANIFEST:=$SRCDIR/MANIFEST} vmsg using $MANIFEST shift $(( $OPTIND - 1 )) if [ $# -lt 1 ]; then usage fi version=$1 newdir=${ROOTNAME}-$version tarfile=${newdir}.tar vmsg creating distribution for $ROOTNAME version $version in $newdir if [ ! -d $newdir ]; then mkdir $newdir || { echo $0: cannot make directory $newdir 1>&2 ; exit 1; } fi dirmode=755 filmode=644 while read fname type mode do [ -z "$fname" ] && continue case "$fname" in \#*) continue ;; esac case "$type" in d) mkdir $newdir/$fname ;; f) cp -p $SRCDIR/$fname $newdir/$fname ;; s) ln -s $mode $newdir/$fname ; mode= ;; # symlink l) ln $mode $newdir/$fname ; mode= ;; # hard link *) echo "unknown file type $type" 1>&2 ;; esac if [ -n "$mode" ]; then chmod $mode $newdir/$fname fi done < $MANIFEST # cut off the `-alpha' in something like `2.0-alpha', leaving just the # numeric version #version=${version%%-*} #case "$version" in #*.*.*) vers=${version%.*} ;; #*.*) vers=${version} ;; #esac #echo $vers > $newdir/.distribution #case "$version" in #*.*.*) plevel=${version##*.} ;; #*) plevel=0 ;; #esac #[ -z "$plevel" ] && plevel=0 #echo ${plevel} > $newdir/.patchlevel vmsg $newdir created if [ -n "$maketar" ]; then tar cf ${tarfile} $newdir gzip $tarfile vmsg ${tarfile}.gz created fi exit 0 readline-7.0/support/mkinstalldirs000555 000436 000000 00000003704 07765404276 017564 0ustar00chetwheel000000 000000 #! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case $1 in -h | --help | --h*) # -h for help echo "$usage" 1>&2 exit 0 ;; -m) # -m PERM arg shift test $# -eq 0 && { echo "$usage" 1>&2; exit 1; } dirmode=$1 shift ;; --) # stop option processing shift break ;; -*) # unknown option echo "$usage" 1>&2 exit 1 ;; *) # first non-opt arg break ;; esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case $pathcomp in -*) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 2 # End: # mkinstalldirs ends here readline-7.0/support/shobj-conf000664 000436 000120 00000034550 12302524445 016707 0ustar00chetadmin000000 000000 #! /bin/sh # # shobj-conf -- output a series of variable assignments to be substituted # into a Makefile by configure which specify system-dependent # information for creating shared objects that may be loaded # into bash with `enable -f' # # usage: shobj-conf [-C compiler] -c host_cpu -o host_os -v host_vendor # # Chet Ramey # chet@po.cwru.edu # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is part of GNU Bash, the Bourne Again SHell. # # 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 3 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, see . # # # defaults # SHOBJ_STATUS=supported SHLIB_STATUS=supported SHOBJ_CC=cc SHOBJ_CFLAGS= SHOBJ_LD= SHOBJ_LDFLAGS= SHOBJ_XLDFLAGS= SHOBJ_LIBS= SHLIB_XLDFLAGS= SHLIB_LIBS= SHLIB_DOT='.' SHLIB_LIBPREF='lib' SHLIB_LIBSUFF='so' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF)' SHLIB_DLLVERSION='$(SHLIB_MAJOR)' PROGNAME=`basename $0` USAGE="$PROGNAME [-C compiler] -c host_cpu -o host_os -v host_vendor" while [ $# -gt 0 ]; do case "$1" in -C) shift; SHOBJ_CC="$1"; shift ;; -c) shift; host_cpu="$1"; shift ;; -o) shift; host_os="$1"; shift ;; -v) shift; host_vendor="$1"; shift ;; *) echo "$USAGE" >&2 ; exit 2;; esac done case "${host_os}-${SHOBJ_CC}-${host_vendor}" in nsk-cc-tandem) SHOBJ_CFLAGS=-Wglobalized case `uname -m` in NSR*) SHOBJ_CFLAGS="${SHOBJ_CFLAGS} -Wcall_shared" # default on TNS/E, needed on TNS/R SHOBJ_LD=/usr/bin/ld # for TNS/R ;; NSE*|NEO*) SHOBJ_LD=/usr/bin/eld ;; esac SHOBJ_LDFLAGS='-shared -bglobalized -unres_symbols ignore' ;; sunos4*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos4*) SHOBJ_CFLAGS=-pic SHOBJ_LD=/usr/bin/ld SHOBJ_LDFLAGS='-assert pure-text' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; sunos5*-*gcc*|solaris2*-*gcc*) SHOBJ_LD='${CC}' ld_used=`gcc -print-prog-name=ld` if ${ld_used} -V 2>&1 | grep GNU >/dev/null 2>&1; then # This line works for the GNU ld SHOBJ_LDFLAGS='-shared -Wl,-h,$@' # http://sourceware.org/ml/binutils/2001-08/msg00361.html SHOBJ_CFLAGS=-fPIC else # This line works for the Solaris linker in /usr/ccs/bin/ld SHOBJ_LDFLAGS='-shared -Wl,-i -Wl,-h,$@' SHOBJ_CFLAGS=-fpic fi # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sunos5*|solaris2*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=/usr/ccs/bin/ld SHOBJ_LDFLAGS='-G -dy -z text -i -h $@' # SHLIB_XLDFLAGS='-R $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # All versions of Linux (including Gentoo/FreeBSD) or the semi-mythical GNU Hurd. linux*-*|gnu*-*|k*bsd*-gnu-*|freebsd*-gentoo) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir) -Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; freebsd2*) SHOBJ_CFLAGS=-fpic SHOBJ_LD=ld SHOBJ_LDFLAGS='-x -Bshareable' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; # FreeBSD-3.x ELF freebsd3*|freebsdaout*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' else SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' fi ;; # FreeBSD-4.x and later have only ELF freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # Darwin/MacOS X darwin*) # Common definitions for all darwin/mac os x versions SHOBJ_CFLAGS='-fno-common' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_MAJOR)$(SHLIB_MINOR).$(SHLIB_LIBSUFF)' SHLIB_LIBSUFF='dylib' # unused at this time SHLIB_SONAME='$(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF)' case "${host_os}" in # Darwin versions 1, 5, 6, 7 correspond to Mac OS X 10.0, 10.1, 10.2, # and 10.3, respectively. darwin[1-7].*) SHOBJ_STATUS=unsupported SHOBJ_LDFLAGS='-dynamic' SHLIB_XLDFLAGS='-arch_only `/usr/bin/arch` -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; # Darwin 8 == Mac OS X 10.4; Mac OS X 10.N == Darwin N+4 *) case "${host_os}" in darwin[89]*|darwin1[012]*) SHOBJ_ARCHFLAGS='-arch_only `/usr/bin/arch`' ;; *) # Mac OS X 10.9 (Mavericks) and later SHOBJ_ARCHFLAGS= # for 32 and 64bit universal library #SHOBJ_ARCHFLAGS='-arch i386 -arch x86_64' #SHOBJ_CFLAGS=${SHOBJ_CFLAGS}' -arch i386 -arch x86_64' ;; esac SHOBJ_LDFLAGS="-dynamiclib -dynamic -undefined dynamic_lookup ${SHOBJ_ARCHFLAGS}" SHLIB_XLDFLAGS="-dynamiclib ${SHOBJ_ARCHFLAGS}"' -install_name $(libdir)/`echo $@ | sed "s:\\..*::"`.$(SHLIB_MAJOR).$(SHLIB_LIBSUFF) -current_version $(SHLIB_MAJOR)$(SHLIB_MINOR) -compatibility_version $(SHLIB_MAJOR) -v' ;; esac SHLIB_LIBS='-lncurses' # see if -lcurses works on MacOS X 10.1 ;; openbsd*|netbsd*|mirbsd*) SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_XLDFLAGS='-R$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; bsdi2*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.2.1.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi3*) SHOBJ_CC=shlicc2 SHOBJ_CFLAGS= SHOBJ_LD=ld SHOBJ_LDFLAGS=-r SHOBJ_LIBS=-lc_s.3.0.0 # BSD/OS 2.x and 3.x `shared libraries' are too much of a pain in # the ass -- they require changing {/usr/lib,etc}/shlib.map on # each system, and the library creation process is byzantine SHLIB_STATUS=unsupported ;; bsdi4*) # BSD/OS 4.x now supports ELF and SunOS-style dynamically-linked # shared libraries. gcc 2.x is the standard compiler, and the # `normal' gcc options should work as they do in Linux. SHOBJ_CFLAGS=-fPIC SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-soname,`basename $@ $(SHLIB_MINOR)`' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)$(SHLIB_MINOR)' ;; osf*-*gcc*) # Fix to use gcc linker driver from bfischer@TechFak.Uni-Bielefeld.DE SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; osf*) SHOBJ_LD=ld SHOBJ_LDFLAGS='-shared -soname $@ -expect_unresolved "*"' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*-*gcc*|aix[5-9].*-*gcc*) # lightly tested by jik@cisco.com SHOBJ_CFLAGS=-fpic SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; aix4.[2-9]*|aix[5-9].*) SHOBJ_CFLAGS=-K SHOBJ_LD='ld' SHOBJ_LDFLAGS='-bdynamic -bnoentry -bexpall' SHOBJ_XLDFLAGS='-G' SHLIB_XLDFLAGS='-bM:SRE' SHLIB_LIBS='-lcurses -lc' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; # # THE FOLLOWING ARE UNTESTED -- and some may not support the dlopen interface # irix[56]*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-soname,$@' SHLIB_XLDFLAGS='-Wl,-rpath,$(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; irix[56]*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld # SHOBJ_LDFLAGS='-call_shared -hidden_symbol -no_unresolved -soname $@' # Change from David Kaelbling . If you have problems, # remove the `-no_unresolved' SHOBJ_LDFLAGS='-shared -no_unresolved -soname $@' SHLIB_XLDFLAGS='-rpath $(libdir)' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux9*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # if you have problems linking here, moving the `-Wl,+h,$@' from # SHLIB_XLDFLAGS to SHOBJ_LDFLAGS has been reported to work SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s' SHLIB_XLDFLAGS='-Wl,+h,$@ -Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux10*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*-*gcc*) # must use gcc; the bundled cc cannot compile PIC code SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' # SHOBJ_LDFLAGS='-shared -Wl,-b -Wl,-B,symbolic -Wl,+s -Wl,+std -Wl,+h,$@' SHOBJ_LDFLAGS='-shared -fpic -Wl,-b -Wl,+s -Wl,+h,$@' SHLIB_XLDFLAGS='-Wl,+b,$(libdir)' SHLIB_LIBSUFF='sl' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; hpux11*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported # If you are using the HP ANSI C compiler, you can uncomment and use # this code (I have not tested it) # SHOBJ_STATUS=supported # SHLIB_STATUS=supported # # SHOBJ_CFLAGS='+z' # SHOBJ_LD='ld' # SHOBJ_LDFLAGS='-b +s +h $@' # # SHLIB_XLDFLAGS='+b $(libdir)' # SHLIB_LIBSUFF='sl' # SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*-*gcc*) SHOBJ_CFLAGS=-shared SHOBJ_LDFLAGS='-shared -h $@' SHOBJ_LD='${CC}' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv4*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-dy -z text -G -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*-*gcc*) SHOBJ_CFLAGS='-fpic' # DEFAULTS TO ELF SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sco3.2v5*) SHOBJ_CFLAGS='-K pic -b elf' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -b elf -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*-*gcc*) SHOBJ_CFLAGS='-fpic' SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5uw7*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5UnixWare*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; sysv5OpenUNIX*) SHOBJ_CFLAGS='-K PIC' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -z text -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; dgux*) SHOBJ_CFLAGS='-K pic' SHOBJ_LD=ld SHOBJ_LDFLAGS='-G -dy -h $@' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; msdos*) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; cygwin*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBPREF='cyg' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; mingw*) SHOBJ_LD='$(CC)' SHOBJ_LDFLAGS='-shared -Wl,--enable-auto-import -Wl,--enable-auto-image-base -Wl,--export-all -Wl,--out-implib=$(@).a' SHLIB_LIBSUFF='dll' SHLIB_LIBVERSION='$(SHLIB_DLLVERSION).$(SHLIB_LIBSUFF)' SHLIB_LIBS='$(TERMCAP_LIB)' SHLIB_DOT= # For official cygwin releases, DLLVERSION will be defined in the # environment of configure, and will be incremented any time the API # changes in a non-backwards compatible manner. Otherwise, it is just # SHLIB_MAJOR. if [ -n "$DLLVERSION" ] ; then SHLIB_DLLVERSION="$DLLVERSION" fi ;; # # Rely on correct gcc configuration for everything else # *-*gcc*) SHOBJ_CFLAGS=-fpic SHOBJ_LD='${CC}' SHOBJ_LDFLAGS='-shared' SHLIB_LIBVERSION='$(SHLIB_LIBSUFF).$(SHLIB_MAJOR)' ;; *) SHOBJ_STATUS=unsupported SHLIB_STATUS=unsupported ;; esac echo SHOBJ_CC=\'"$SHOBJ_CC"\' echo SHOBJ_CFLAGS=\'"$SHOBJ_CFLAGS"\' echo SHOBJ_LD=\'"$SHOBJ_LD"\' echo SHOBJ_LDFLAGS=\'"$SHOBJ_LDFLAGS"\' echo SHOBJ_XLDFLAGS=\'"$SHOBJ_XLDFLAGS"\' echo SHOBJ_LIBS=\'"$SHOBJ_LIBS"\' echo SHLIB_XLDFLAGS=\'"$SHLIB_XLDFLAGS"\' echo SHLIB_LIBS=\'"$SHLIB_LIBS"\' echo SHLIB_DOT=\'"$SHLIB_DOT"\' echo SHLIB_LIBPREF=\'"$SHLIB_LIBPREF"\' echo SHLIB_LIBSUFF=\'"$SHLIB_LIBSUFF"\' echo SHLIB_LIBVERSION=\'"$SHLIB_LIBVERSION"\' echo SHLIB_DLLVERSION=\'"$SHLIB_DLLVERSION"\' echo SHOBJ_STATUS=\'"$SHOBJ_STATUS"\' echo SHLIB_STATUS=\'"$SHLIB_STATUS"\' exit 0 readline-7.0/support/shlib-install000755 000436 000024 00000012014 11777104520 017435 0ustar00chetstaff000000 000000 #! /bin/sh # # shlib-install - install a shared library and do any necessary host-specific # post-installation configuration (like ldconfig) # # usage: shlib-install [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library # # Chet Ramey # chet@po.cwru.edu # # defaults # INSTALLDIR=/usr/local/lib LDCONFIG=ldconfig PROGNAME=`basename $0` USAGE="$PROGNAME [-D] -O host_os [-V host_vendor] -d installation-dir [-b bin-dir] -i install-prog [-U] library" # process options while [ $# -gt 0 ]; do case "$1" in -O) shift; host_os="$1"; shift ;; -V) shift; host_vendor="$1"; shift ;; -d) shift; INSTALLDIR="$1"; shift ;; -b) shift; BINDIR="$1" ; shift ;; -i) shift; INSTALLPROG="$1" ; shift ;; -D) echo=echo ; shift ;; -U) uninstall=true ; shift ;; -*) echo "$USAGE" >&2 ; exit 2;; *) break ;; esac done # set install target name LIBNAME="$1" if [ -z "$LIBNAME" ]; then echo "$USAGE" >&2 exit 2 fi OLDSUFF=old MV=mv RM="rm -f" LN="ln -s" # pre-install if [ -z "$uninstall" ]; then ${echo} $RM ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$INSTALLDIR/$LIBNAME" ]; then ${echo} $MV $INSTALLDIR/$LIBNAME ${INSTALLDIR}/${LIBNAME}.${OLDSUFF} fi fi # install/uninstall if [ -z "$uninstall" ] ; then ${echo} eval ${INSTALLPROG} $LIBNAME ${INSTALLDIR}/${LIBNAME} else ${echo} ${RM} ${INSTALLDIR}/${LIBNAME} fi # post-install/uninstall # HP-UX and Darwin/MacOS X require that a shared library have execute permission # Linux does, too, and ldd warns about it. Solaris doesn't seem to mind, # but ldd still warns about it. # Cygwin installs both a dll (which must go in $BINDIR) and an implicit # link library (in $libdir) case "$host_os" in hpux*|darwin*|macosx*|linux*|solaris2*) if [ -z "$uninstall" ]; then chmod 555 ${INSTALLDIR}/${LIBNAME} fi ;; cygwin*|mingw*) IMPLIBNAME=`echo ${LIBNAME} \ | sed -e 's,^cyg,lib,' -e 's,[0-9]*.dll$,.dll.a,'` if [ -z "$uninstall" ]; then ${echo} $RM ${BINDIR}/${LIBNAME}.${OLDSUFF} if [ -f "$BINDIR/$LIBNAME" ]; then ${echo} $MV $BINDIR/$LIBNAME $BINDIR/$LIBNAME.$OLDSUFF fi ${echo} $MV ${INSTALLDIR}/${LIBNAME} ${BINDIR}/${LIBNAME} ${echo} chmod a+x ${BINDIR}/${LIBNAME} ${echo} eval ${INSTALLPROG} ${LIBNAME}.a \ ${INSTALLDIR}/${IMPLIBNAME} else ${echo} ${RM} ${BINDIR}/${LIBNAME} ${echo} ${RM} ${INSTALLDIR}/${IMPLIBNAME} fi ;; *) ;; esac case "$LIBNAME" in *.*.[0-9].[0-9]) # libname.so.M.N LINK2=`echo $LIBNAME | sed 's:\(.*\..*\.[0-9]\)\.[0-9]:\1:'` # libname.so.M LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]\.[0-9]:\1:'` # libname.so ;; *.*.[0-9]) # libname.so.M LINK1=`echo $LIBNAME | sed 's:\(.*\..*\)\.[0-9]:\1:'` # libname.so ;; *.[0-9]) # libname.M LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]:\1:'` # libname ;; *.[0-9].[0-9].dylib) # libname.M.N.dylib LINK2=`echo $LIBNAME | sed 's:\(.*\.[0-9]\)\.[0-9]:\1:'` # libname.M.dylib LINK1=`echo $LIBNAME | sed 's:\(.*\)\.[0-9]\.[0-9]:\1:'` # libname.dylib esac INSTALL_LINK1='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK1' INSTALL_LINK2='${echo} cd $INSTALLDIR && ${echo} ${LN} $LIBNAME $LINK2' # # Create symlinks to the installed library. This section is incomplete. # case "$host_os-$host_vendor" in *linux*|freebsd*-gentoo) # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then ${echo} cd $INSTALLDIR && ${echo} ${LN} $LINK2 $LINK1 fi ;; bsdi4*|*gnu*|darwin*|macosx*|netbsd*|mirbsd*) # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; solaris2*|aix4.[2-9]*|aix[5-9]*|osf*|irix[56]*|sysv[45]*|dgux*|interix*) # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; # FreeBSD 3.x and above can have either a.out or ELF shared libraries freebsd3*|freebsdaout*) if [ -x /usr/bin/objformat ] && [ "`/usr/bin/objformat`" = "elf" ]; then # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi else # libname.so.M -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK2 if [ -z "$uninstall" ]; then eval $INSTALL_LINK2 fi # libname.so -> libname.so.M.N ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi fi ;; freebsd[4-9]*|freebsd1[0-9]*|freebsdelf*|dragonfly*) # libname.so -> libname.so.M ${echo} ${RM} ${INSTALLDIR}/$LINK1 if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; hpux1*) # libname.sl -> libname.M ${echo} ${RM} ${INSTALLDIR}/$LINK1.sl if [ -z "$uninstall" ]; then eval $INSTALL_LINK1 fi ;; cygwin*|mingw*) # Links to .dlls don't work. Hence shobj-conf used DLLVERSION.dll # instead of so.SHLIB_MAJOR.SHLIB_MINOR. The postinstall above # took care of everything else. ;; *) ;; esac exit 0 readline-7.0/support/wcwidth.c000644 000436 000000 00000033245 11050046526 016556 0ustar00chetwheel000000 000000 /* * This is an implementation of wcwidth() and wcswidth() (defined in * IEEE Std 1002.1-2001) for Unicode. * * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html * * In fixed-width output devices, Latin characters all occupy a single * "cell" position of equal width, whereas ideographic CJK characters * occupy two such cells. Interoperability between terminal-line * applications and (teletype-style) character terminals using the * UTF-8 encoding requires agreement on which character should advance * the cursor by how many cell positions. No established formal * standards exist at present on which Unicode character shall occupy * how many cell positions on character terminals. These routines are * a first attempt of defining such behavior based on simple rules * applied to data provided by the Unicode Consortium. * * For some graphical characters, the Unicode standard explicitly * defines a character-cell width via the definition of the East Asian * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. * In all these cases, there is no ambiguity about which width a * terminal shall use. For characters in the East Asian Ambiguous (A) * class, the width choice depends purely on a preference of backward * compatibility with either historic CJK or Western practice. * Choosing single-width for these characters is easy to justify as * the appropriate long-term solution, as the CJK practice of * displaying these characters as double-width comes from historic * implementation simplicity (8-bit encoded characters were displayed * single-width and 16-bit ones double-width, even for Greek, * Cyrillic, etc.) and not any typographic considerations. * * Much less clear is the choice of width for the Not East Asian * (Neutral) class. Existing practice does not dictate a width for any * of these characters. It would nevertheless make sense * typographically to allocate two character cells to characters such * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be * represented adequately with a single-width glyph. The following * routines at present merely assign a single-cell width to all * neutral characters, in the interest of simplicity. This is not * entirely satisfactory and should be reconsidered before * establishing a formal standard in this area. At the moment, the * decision which Not East Asian (Neutral) characters should be * represented by double-width glyphs cannot yet be answered by * applying a simple rule from the Unicode database content. Setting * up a proper standard for the behavior of UTF-8 character terminals * will require a careful analysis not only of each Unicode character, * but also of each presentation form, something the author of these * routines has avoided to do so far. * * http://www.unicode.org/unicode/reports/tr11/ * * Markus Kuhn -- 2007-05-26 (Unicode 5.0) * * Permission to use, copy, modify, and distribute this software * for any purpose and without fee is hereby granted. The author * disclaims all warranties with regard to this software. * * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c */ #ifdef __GO32__ # include #endif #include struct interval { int first; int last; }; /* auxiliary function for binary search in interval table */ static int bisearch(wchar_t ucs, const struct interval *table, int max) { int min = 0; int mid; if (ucs < table[0].first || ucs > table[max].last) return 0; while (max >= min) { mid = (min + max) / 2; if (ucs > table[mid].last) min = mid + 1; else if (ucs < table[mid].first) max = mid - 1; else return 1; } return 0; } /* The following two functions define the column width of an ISO 10646 * character as follows: * * - The null character (U+0000) has a column width of 0. * * - Other C0/C1 control characters and DEL will lead to a return * value of -1. * * - Non-spacing and enclosing combining characters (general * category code Mn or Me in the Unicode database) have a * column width of 0. * * - SOFT HYPHEN (U+00AD) has a column width of 1. * * - Other format characters (general category code Cf in the Unicode * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. * * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) * have a column width of 0. * * - Spacing characters in the East Asian Wide (W) or East Asian * Full-width (F) category as defined in Unicode Technical * Report #11 have a column width of 2. * * - All remaining characters (including all printable * ISO 8859-1 and WGL4 characters, Unicode control characters, * etc.) have a column width of 1. * * This implementation assumes that wchar_t characters are encoded * in ISO 10646. */ int mk_wcwidth(wchar_t ucs) { /* sorted list of non-overlapping intervals of non-spacing characters */ /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ static const struct interval combining[] = { { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; /* test for 8-bit control characters */ if (ucs == 0) return 0; if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) return -1; /* binary search in table of non-spacing characters */ if (bisearch(ucs, combining, sizeof(combining) / sizeof(struct interval) - 1)) return 0; /* if we arrive here, ucs is not a combining or C0/C1 control character */ return 1 + (ucs >= 0x1100 && (ucs <= 0x115f || /* Hangul Jamo init. consonants */ ucs == 0x2329 || ucs == 0x232a || (ucs >= 0x2e80 && ucs <= 0xa4cf && ucs != 0x303f) || /* CJK ... Yi */ (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ (ucs >= 0xffe0 && ucs <= 0xffe6) || (ucs >= 0x20000 && ucs <= 0x2fffd) || (ucs >= 0x30000 && ucs <= 0x3fffd))); } int mk_wcswidth(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth(*pwcs)) < 0) return -1; else width += w; return width; } /* * The following functions are the same as mk_wcwidth() and * mk_wcswidth(), except that spacing characters in the East Asian * Ambiguous (A) category as defined in Unicode Technical Report #11 * have a column width of 2. This variant might be useful for users of * CJK legacy encodings who want to migrate to UCS without changing * the traditional terminal character-width behaviour. It is not * otherwise recommended for general use. */ int mk_wcwidth_cjk(wchar_t ucs) { /* sorted list of non-overlapping intervals of East Asian Ambiguous * characters, generated by "uniset +WIDTH-A -cat=Me -cat=Mn -cat=Cf c" */ static const struct interval ambiguous[] = { { 0x00A1, 0x00A1 }, { 0x00A4, 0x00A4 }, { 0x00A7, 0x00A8 }, { 0x00AA, 0x00AA }, { 0x00AE, 0x00AE }, { 0x00B0, 0x00B4 }, { 0x00B6, 0x00BA }, { 0x00BC, 0x00BF }, { 0x00C6, 0x00C6 }, { 0x00D0, 0x00D0 }, { 0x00D7, 0x00D8 }, { 0x00DE, 0x00E1 }, { 0x00E6, 0x00E6 }, { 0x00E8, 0x00EA }, { 0x00EC, 0x00ED }, { 0x00F0, 0x00F0 }, { 0x00F2, 0x00F3 }, { 0x00F7, 0x00FA }, { 0x00FC, 0x00FC }, { 0x00FE, 0x00FE }, { 0x0101, 0x0101 }, { 0x0111, 0x0111 }, { 0x0113, 0x0113 }, { 0x011B, 0x011B }, { 0x0126, 0x0127 }, { 0x012B, 0x012B }, { 0x0131, 0x0133 }, { 0x0138, 0x0138 }, { 0x013F, 0x0142 }, { 0x0144, 0x0144 }, { 0x0148, 0x014B }, { 0x014D, 0x014D }, { 0x0152, 0x0153 }, { 0x0166, 0x0167 }, { 0x016B, 0x016B }, { 0x01CE, 0x01CE }, { 0x01D0, 0x01D0 }, { 0x01D2, 0x01D2 }, { 0x01D4, 0x01D4 }, { 0x01D6, 0x01D6 }, { 0x01D8, 0x01D8 }, { 0x01DA, 0x01DA }, { 0x01DC, 0x01DC }, { 0x0251, 0x0251 }, { 0x0261, 0x0261 }, { 0x02C4, 0x02C4 }, { 0x02C7, 0x02C7 }, { 0x02C9, 0x02CB }, { 0x02CD, 0x02CD }, { 0x02D0, 0x02D0 }, { 0x02D8, 0x02DB }, { 0x02DD, 0x02DD }, { 0x02DF, 0x02DF }, { 0x0391, 0x03A1 }, { 0x03A3, 0x03A9 }, { 0x03B1, 0x03C1 }, { 0x03C3, 0x03C9 }, { 0x0401, 0x0401 }, { 0x0410, 0x044F }, { 0x0451, 0x0451 }, { 0x2010, 0x2010 }, { 0x2013, 0x2016 }, { 0x2018, 0x2019 }, { 0x201C, 0x201D }, { 0x2020, 0x2022 }, { 0x2024, 0x2027 }, { 0x2030, 0x2030 }, { 0x2032, 0x2033 }, { 0x2035, 0x2035 }, { 0x203B, 0x203B }, { 0x203E, 0x203E }, { 0x2074, 0x2074 }, { 0x207F, 0x207F }, { 0x2081, 0x2084 }, { 0x20AC, 0x20AC }, { 0x2103, 0x2103 }, { 0x2105, 0x2105 }, { 0x2109, 0x2109 }, { 0x2113, 0x2113 }, { 0x2116, 0x2116 }, { 0x2121, 0x2122 }, { 0x2126, 0x2126 }, { 0x212B, 0x212B }, { 0x2153, 0x2154 }, { 0x215B, 0x215E }, { 0x2160, 0x216B }, { 0x2170, 0x2179 }, { 0x2190, 0x2199 }, { 0x21B8, 0x21B9 }, { 0x21D2, 0x21D2 }, { 0x21D4, 0x21D4 }, { 0x21E7, 0x21E7 }, { 0x2200, 0x2200 }, { 0x2202, 0x2203 }, { 0x2207, 0x2208 }, { 0x220B, 0x220B }, { 0x220F, 0x220F }, { 0x2211, 0x2211 }, { 0x2215, 0x2215 }, { 0x221A, 0x221A }, { 0x221D, 0x2220 }, { 0x2223, 0x2223 }, { 0x2225, 0x2225 }, { 0x2227, 0x222C }, { 0x222E, 0x222E }, { 0x2234, 0x2237 }, { 0x223C, 0x223D }, { 0x2248, 0x2248 }, { 0x224C, 0x224C }, { 0x2252, 0x2252 }, { 0x2260, 0x2261 }, { 0x2264, 0x2267 }, { 0x226A, 0x226B }, { 0x226E, 0x226F }, { 0x2282, 0x2283 }, { 0x2286, 0x2287 }, { 0x2295, 0x2295 }, { 0x2299, 0x2299 }, { 0x22A5, 0x22A5 }, { 0x22BF, 0x22BF }, { 0x2312, 0x2312 }, { 0x2460, 0x24E9 }, { 0x24EB, 0x254B }, { 0x2550, 0x2573 }, { 0x2580, 0x258F }, { 0x2592, 0x2595 }, { 0x25A0, 0x25A1 }, { 0x25A3, 0x25A9 }, { 0x25B2, 0x25B3 }, { 0x25B6, 0x25B7 }, { 0x25BC, 0x25BD }, { 0x25C0, 0x25C1 }, { 0x25C6, 0x25C8 }, { 0x25CB, 0x25CB }, { 0x25CE, 0x25D1 }, { 0x25E2, 0x25E5 }, { 0x25EF, 0x25EF }, { 0x2605, 0x2606 }, { 0x2609, 0x2609 }, { 0x260E, 0x260F }, { 0x2614, 0x2615 }, { 0x261C, 0x261C }, { 0x261E, 0x261E }, { 0x2640, 0x2640 }, { 0x2642, 0x2642 }, { 0x2660, 0x2661 }, { 0x2663, 0x2665 }, { 0x2667, 0x266A }, { 0x266C, 0x266D }, { 0x266F, 0x266F }, { 0x273D, 0x273D }, { 0x2776, 0x277F }, { 0xE000, 0xF8FF }, { 0xFFFD, 0xFFFD }, { 0xF0000, 0xFFFFD }, { 0x100000, 0x10FFFD } }; /* binary search in table of non-spacing characters */ if (bisearch(ucs, ambiguous, sizeof(ambiguous) / sizeof(struct interval) - 1)) return 2; return mk_wcwidth(ucs); } int mk_wcswidth_cjk(const wchar_t *pwcs, size_t n) { int w, width = 0; for (;*pwcs && n-- > 0; pwcs++) if ((w = mk_wcwidth_cjk(*pwcs)) < 0) return -1; else width += w; return width; } readline-7.0/examples/autoconf/000775 000436 000024 00000000000 12764322770 016674 5ustar00chetstaff000000 000000 readline-7.0/examples/rlfe/000775 000436 000024 00000000000 12764322771 016007 5ustar00chetstaff000000 000000 readline-7.0/examples/Makefile.in000664 000436 000024 00000011770 12707671032 017124 0ustar00chetstaff000000 000000 # # This is the Makefile for the readline examples subdirectory. # # Copyright (C) 1994,2008,2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . RL_LIBRARY_VERSION = @LIBVERSION@ SHELL = @MAKE_SHELL@ RM = rm -f prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ bindir = @bindir@ srcdir = @srcdir@ datadir = @datadir@ VPATH = @srcdir@ top_srcdir = @top_srcdir@ #BUILD_DIR = . BUILD_DIR = @BUILD_DIR@ installdir = $(datadir)/readline INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ EXEEXT = @EXEEXT@ OBJEXT = @OBJEXT@ # Support an alternate destination root directory for package building DESTDIR = DEFS = @DEFS@ CC = @CC@ CFLAGS = @CFLAGS@ LOCAL_CFLAGS = @LOCAL_CFLAGS@ -DREADLINE_LIBRARY -DRL_LIBRARY_VERSION='"$(RL_LIBRARY_VERSION)"' CPPFLAGS = @CPPFLAGS@ INCLUDES = -I$(srcdir) -I$(top_srcdir) -I.. CCFLAGS = $(DEFS) $(LOCAL_CFLAGS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) LDFLAGS = -g -L.. @LDFLAGS@ READLINE_LIB = ../libreadline.a HISTORY_LIB = ../libhistory.a TERMCAP_LIB = @TERMCAP_LIB@ .c.o: ${RM} $@ $(CC) $(CCFLAGS) -c $< SOURCES = excallback.c fileman.c histexamp.c manexamp.c rl-fgets.c rl.c \ rlbasic.c rlcat.c rlevent.c rlptytest.c rltest.c rlversion.c \ rl-callbacktest.c hist_erasedups.c hist_purgecmd.c EXECUTABLES = fileman$(EXEEXT) rltest$(EXEEXT) rl$(EXEEXT) rlcat$(EXEEXT) \ rlevent$(EXEEXT) rlversion$(EXEEXT) histexamp$(EXEEXT) \ rl-callbacktest$(EXEEXT) rlbasic$(EXEEXT) \ hist_erasedups$(EXEEXT) hist_purgecmd$(EXEEXT) OBJECTS = fileman.o rltest.o rl.o rlevent.o rlcat.o rlversion.o histexamp.o \ rl-callbacktest.o rlbasic.o hist_erasedups.o hist_purgecmd.o OTHEREXE = rlptytest$(EXEEXT) OTHEROBJ = rlptytest.o all: $(EXECUTABLES) everything: all check: rlversion$(EXEEXT) @echo Readline version: `rlversion$(EXEEXT)` installdirs: -$(SHELL) $(top_srcdir)/support/mkdirs $(DESTDIR)$(installdir) install: installdirs @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(installdir) ; \ done uninstall: @for f in $(SOURCES); do \ $(RM) $(DESTDIR)$(installdir)/$$f ; \ done -rmdir $(DESTDIR)$(installdir) rl$(EXEEXT): rl.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rl.o $(READLINE_LIB) $(TERMCAP_LIB) rlbasic$(EXEEXT): rlbasic.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlbasic.o $(READLINE_LIB) $(TERMCAP_LIB) rlcat$(EXEEXT): rlcat.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlcat.o $(READLINE_LIB) $(TERMCAP_LIB) rlevent$(EXEEXT): rlevent.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlevent.o $(READLINE_LIB) $(TERMCAP_LIB) fileman$(EXEEXT): fileman.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ fileman.o $(READLINE_LIB) $(TERMCAP_LIB) rltest$(EXEEXT): rltest.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rltest.o $(READLINE_LIB) $(TERMCAP_LIB) rl-callbacktest$(EXEEXT): rl-callbacktest.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rl-callbacktest.o $(READLINE_LIB) $(TERMCAP_LIB) rlptytest$(EXEEXT): rlptytest.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlptytest.o $(READLINE_LIB) $(TERMCAP_LIB) $(LIBUTIL) rlversion$(EXEEXT): rlversion.o $(READLINE_LIB) $(CC) $(LDFLAGS) -o $@ rlversion.o $(READLINE_LIB) $(TERMCAP_LIB) histexamp$(EXEEXT): histexamp.o $(HISTORY_LIB) $(CC) $(LDFLAGS) -o $@ histexamp.o -lhistory $(TERMCAP_LIB) hist_erasedups$(EXEEXT): hist_erasedups.o $(HISTORY_LIB) $(CC) $(LDFLAGS) -o $@ hist_erasedups.o -lhistory $(TERMCAP_LIB) hist_purgecmd$(EXEEXT): hist_purgecmd.o $(HISTORY_LIB) $(CC) $(LDFLAGS) -o $@ hist_purgecmd.o -lhistory $(TERMCAP_LIB) clean mostlyclean: $(RM) $(OBJECTS) $(OTHEROBJ) $(RM) $(EXECUTABLES) $(OTHEREXE) *.exe distclean maintainer-clean: clean $(RM) Makefile fileman.o: fileman.c rltest.o: rltest.c rl.o: rl.c rlversion.o: rlversion.c histexamp.o: histexamp.c hist_erasedups.o: hist_erasedups.c hist_purgecmd.o: hist_purgecmd.c rlbasic.o: rlbasic.c rlcat.o: rlcat.c rlptytest.o: rlptytest.c rl-callbacktest.o: rl-callbacktest.c fileman.o: $(top_srcdir)/readline.h rltest.o: $(top_srcdir)/readline.h rl.o: $(top_srcdir)/readline.h rlversion.o: $(top_srcdir)/readline.h histexamp.o: $(top_srcdir)/history.h hist_erasedups.o: $(top_srcdir)/history.h hist_purgecmd.o: $(top_srcdir)/history.h rlbasic.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h rlcat.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h rlptytest.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h rl-callbacktest.o: $(top_srcdir)/readline.h $(top_srcdir)/history.h readline-7.0/examples/excallback.c000644 000436 000024 00000013260 11605321745 017305 0ustar00chetstaff000000 000000 /* From: Jeff Solomon Date: Fri, 9 Apr 1999 10:13:27 -0700 (PDT) To: chet@po.cwru.edu Subject: new readline example Message-ID: <14094.12094.527305.199695@mrclean.Stanford.EDU> Chet, I've been using readline 4.0. Specifically, I've been using the perl version Term::ReadLine::Gnu. It works great. Anyway, I've been playing around the alternate interface and I wanted to contribute a little C program, callback.c, to you that you could use as an example of the alternate interface in the /examples directory of the readline distribution. My example shows how, using the alternate interface, you can interactively change the prompt (which is very nice imo). Also, I point out that you must roll your own terminal setting when using the alternate interface because readline depreps (using your parlance) the terminal while in the user callback. I try to demostrate what I mean with an example. I've included the program below. To compile, I just put the program in the examples directory and made the appropriate changes to the EXECUTABLES and OBJECTS line and added an additional target 'callback'. I compiled on my Sun Solaris2.6 box using Sun's cc. Let me know what you think. Jeff */ /* Copyright (C) 1999 Jeff Solomon */ #if defined (HAVE_CONFIG_H) #include #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include /* xxx - should make this more general */ #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif /* This little examples demonstrates the alternate interface to using readline. * In the alternate interface, the user maintains control over program flow and * only calls readline when STDIN is readable. Using the alternate interface, * you can do anything else while still using readline (like talking to a * network or another program) without blocking. * * Specifically, this program highlights two importants features of the * alternate interface. The first is the ability to interactively change the * prompt, which can't be done using the regular interface since rl_prompt is * read-only. * * The second feature really highlights a subtle point when using the alternate * interface. That is, readline will not alter the terminal when inside your * callback handler. So let's so, your callback executes a user command that * takes a non-trivial amount of time to complete (seconds). While your * executing the command, the user continues to type keystrokes and expects them * to be re-echoed on the new prompt when it returns. Unfortunately, the default * terminal configuration doesn't do this. After the prompt returns, the user * must hit one additional keystroke and then will see all of his previous * keystrokes. To illustrate this, compile and run this program. Type "sleep" at * the prompt and then type "bar" before the prompt returns (you have 3 * seconds). Notice how "bar" is re-echoed on the prompt after the prompt * returns? This is what you expect to happen. Now comment out the 4 lines below * the line that says COMMENT LINE BELOW. Recompile and rerun the program and do * the same thing. When the prompt returns, you should not see "bar". Now type * "f", see how "barf" magically appears? This behavior is un-expected and not * desired. */ void process_line(char *line); int change_prompt(void); char *get_prompt(void); int prompt = 1; char prompt_buf[40], line_buf[256]; tcflag_t old_lflag; cc_t old_vtime; struct termios term; int main() { fd_set fds; /* Adjust the terminal slightly before the handler is installed. Disable * canonical mode processing and set the input character time flag to be * non-blocking. */ if( tcgetattr(STDIN_FILENO, &term) < 0 ) { perror("tcgetattr"); exit(1); } old_lflag = term.c_lflag; old_vtime = term.c_cc[VTIME]; term.c_lflag &= ~ICANON; term.c_cc[VTIME] = 1; /* COMMENT LINE BELOW - see above */ if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { perror("tcsetattr"); exit(1); } rl_add_defun("change-prompt", change_prompt, CTRL('t')); rl_callback_handler_install(get_prompt(), process_line); while(1) { FD_ZERO(&fds); FD_SET(fileno(stdin), &fds); if( select(FD_SETSIZE, &fds, NULL, NULL, NULL) < 0) { perror("select"); exit(1); } if( FD_ISSET(fileno(stdin), &fds) ) { rl_callback_read_char(); } } } void process_line(char *line) { if( line == NULL ) { fprintf(stderr, "\n", line); /* reset the old terminal setting before exiting */ term.c_lflag = old_lflag; term.c_cc[VTIME] = old_vtime; if( tcsetattr(STDIN_FILENO, TCSANOW, &term) < 0 ) { perror("tcsetattr"); exit(1); } exit(0); } if( strcmp(line, "sleep") == 0 ) { sleep(3); } else { fprintf(stderr, "|%s|\n", line); } free (line); } int change_prompt(void) { /* toggle the prompt variable */ prompt = !prompt; /* save away the current contents of the line */ strcpy(line_buf, rl_line_buffer); /* install a new handler which will change the prompt and erase the current line */ rl_callback_handler_install(get_prompt(), process_line); /* insert the old text on the new line */ rl_insert_text(line_buf); /* redraw the current line - this is an undocumented function. It invokes the * redraw-current-line command. */ rl_refresh_line(0, 0); } char * get_prompt(void) { /* The prompts can even be different lengths! */ sprintf(prompt_buf, "%s", prompt ? "Hit ctrl-t to toggle prompt> " : "Pretty cool huh?> "); return prompt_buf; } readline-7.0/examples/fileman.c000664 000436 000024 00000026564 12560672553 016653 0ustar00chetstaff000000 000000 /* fileman.c - file manager example for readline library. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ /* fileman.c -- A tiny application which demonstrates how to use the GNU Readline library. This application interactively allows users to manipulate files and their modes. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif extern char *xmalloc PARAMS((size_t)); void initialize_readline PARAMS((void)); void too_dangerous PARAMS((char *)); int execute_line PARAMS((char *)); int valid_argument PARAMS((char *, char *)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *func; /* Function to call to do the job. */ char *doc; /* Documentation for this function. */ } COMMAND; COMMAND commands[] = { { "cd", com_cd, "Change to directory DIR" }, { "delete", com_delete, "Delete FILE" }, { "help", com_help, "Display this text" }, { "?", com_help, "Synonym for `help'" }, { "list", com_list, "List files in DIR" }, { "ls", com_list, "Synonym for `list'" }, { "pwd", com_pwd, "Print the current working directory" }, { "quit", com_quit, "Quit using Fileman" }, { "rename", com_rename, "Rename FILE to NEWNAME" }, { "stat", com_stat, "Print out statistics on FILE" }, { "view", com_view, "View the contents of FILE" }, { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL } }; /* Forward declarations. */ char *stripwhite (); COMMAND *find_command (); /* The name of this program, as taken from argv[0]. */ char *progname; /* When non-zero, this global means the user is done using this program. */ int done; char * dupstr (s) char *s; { char *r; r = xmalloc (strlen (s) + 1); strcpy (r, s); return (r); } int main (argc, argv) int argc; char **argv; { char *line, *s; progname = argv[0]; initialize_readline (); /* Bind our completer. */ /* Loop reading and executing lines until the user quits. */ for ( ; done == 0; ) { line = readline ("FileMan: "); if (!line) break; /* Remove leading and trailing whitespace from the line. Then, if there is anything left, add it to the history list and execute it. */ s = stripwhite (line); if (*s) { add_history (s); execute_line (s); } free (line); } exit (0); } /* Execute a command line. */ int execute_line (line) char *line; { register int i; COMMAND *command; char *word; /* Isolate the command word. */ i = 0; while (line[i] && whitespace (line[i])) i++; word = line + i; while (line[i] && !whitespace (line[i])) i++; if (line[i]) line[i++] = '\0'; command = find_command (word); if (!command) { fprintf (stderr, "%s: No such command for FileMan.\n", word); return (-1); } /* Get argument to command, if any. */ while (whitespace (line[i])) i++; word = line + i; /* Call the function. */ return ((*(command->func)) (word)); } /* Look up NAME as the name of a command, and return a pointer to that command. Return a NULL pointer if NAME isn't a command name. */ COMMAND * find_command (name) char *name; { register int i; for (i = 0; commands[i].name; i++) if (strcmp (name, commands[i].name) == 0) return (&commands[i]); return ((COMMAND *)NULL); } /* Strip whitespace from the start and end of STRING. Return a pointer into STRING. */ char * stripwhite (string) char *string; { register char *s, *t; for (s = string; whitespace (*s); s++) ; if (*s == 0) return (s); t = s + strlen (s) - 1; while (t > s && whitespace (*t)) t--; *++t = '\0'; return s; } /* **************************************************************** */ /* */ /* Interface to Readline Completion */ /* */ /* **************************************************************** */ char *command_generator PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ void initialize_readline () { /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "FileMan"; /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = fileman_completion; } /* Attempt to complete on the contents of TEXT. START and END bound the region of rl_line_buffer that contains the word to complete. TEXT is the word to complete. We can use the entire contents of rl_line_buffer in case we want to do some simple parsing. Return the array of matches, or NULL if there aren't any. */ char ** fileman_completion (text, start, end) const char *text; int start, end; { char **matches; matches = (char **)NULL; /* If this word is at the start of the line, then it is a command to complete. Otherwise it is the name of a file in the current directory. */ if (start == 0) matches = rl_completion_matches (text, command_generator); return (matches); } /* Generator function for command completion. STATE lets us know whether to start from scratch; without any state (i.e. STATE == 0), then we start at the top of the list. */ char * command_generator (text, state) const char *text; int state; { static int list_index, len; char *name; /* If this is a new word to complete, initialize now. This includes saving the length of TEXT for efficiency, and initializing the index variable to 0. */ if (!state) { list_index = 0; len = strlen (text); } /* Return the next name which partially matches from the command list. */ while (name = commands[list_index].name) { list_index++; if (strncmp (name, text, len) == 0) return (dupstr(name)); } /* If no names matched, then return NULL. */ return ((char *)NULL); } /* **************************************************************** */ /* */ /* FileMan Commands */ /* */ /* **************************************************************** */ /* String to pass to system (). This is for the LIST, VIEW and RENAME commands. */ static char syscom[1024]; /* List the file(s) named in arg. */ int com_list (arg) char *arg; { if (!arg) arg = ""; sprintf (syscom, "ls -FClg %s", arg); return (system (syscom)); } int com_view (arg) char *arg; { if (!valid_argument ("view", arg)) return 1; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif return (system (syscom)); } int com_rename (arg) char *arg; { too_dangerous ("rename"); return (1); } int com_stat (arg) char *arg; { struct stat finfo; if (!valid_argument ("stat", arg)) return (1); if (stat (arg, &finfo) == -1) { perror (arg); return (1); } printf ("Statistics for `%s':\n", arg); printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, finfo.st_nlink, (finfo.st_nlink == 1) ? "" : "s", finfo.st_size, (finfo.st_size == 1) ? "" : "s"); printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); printf (" Last access at: %s", ctime (&finfo.st_atime)); printf (" Last modified at: %s", ctime (&finfo.st_mtime)); return (0); } int com_delete (arg) char *arg; { too_dangerous ("delete"); return (1); } /* Print out help for ARG, or for all of the commands if ARG is not present. */ int com_help (arg) char *arg; { register int i; int printed = 0; for (i = 0; commands[i].name; i++) { if (!*arg || (strcmp (arg, commands[i].name) == 0)) { printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); printed++; } } if (!printed) { printf ("No commands match `%s'. Possibilties are:\n", arg); for (i = 0; commands[i].name; i++) { /* Print in six columns. */ if (printed == 6) { printed = 0; printf ("\n"); } printf ("%s\t", commands[i].name); printed++; } if (printed) printf ("\n"); } return (0); } /* Change to the directory ARG. */ int com_cd (arg) char *arg; { if (chdir (arg) == -1) { perror (arg); return 1; } com_pwd (""); return (0); } /* Print out the current working directory. */ int com_pwd (ignore) char *ignore; { char dir[1024], *s; s = getcwd (dir, sizeof(dir) - 1); if (s == 0) { printf ("Error getting pwd: %s\n", dir); return 1; } printf ("Current directory is %s\n", dir); return 0; } /* The user wishes to quit using this program. Just set DONE non-zero. */ int com_quit (arg) char *arg; { done = 1; return (0); } /* Function which tells you that you can't do this. */ void too_dangerous (caller) char *caller; { fprintf (stderr, "%s: Too dangerous for me to distribute. Write it yourself.\n", caller); } /* Return non-zero if ARG is a valid argument for CALLER, else print an error message and return zero. */ int valid_argument (caller, arg) char *caller, *arg; { if (!arg || !*arg) { fprintf (stderr, "%s: Argument required.\n", caller); return (0); } return (1); } readline-7.0/examples/manexamp.c000664 000436 000024 00000006344 11130207321 017013 0ustar00chetstaff000000 000000 /* manexamp.c -- The examples which appear in the documentation are here. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #include #include /* **************************************************************** */ /* */ /* How to Emulate gets () */ /* */ /* **************************************************************** */ /* A static variable for holding the line. */ static char *line_read = (char *)NULL; /* Read a string, and return a pointer to it. Returns NULL on EOF. */ char * rl_gets () { /* If the buffer has already been allocated, return the memory to the free pool. */ if (line_read) { free (line_read); line_read = (char *)NULL; } /* Get a line from the user. */ line_read = readline (""); /* If the line has any text in it, save it on the history. */ if (line_read && *line_read) add_history (line_read); return (line_read); } /* **************************************************************** */ /* */ /* Writing a Function to be Called by Readline. */ /* */ /* **************************************************************** */ /* Invert the case of the COUNT following characters. */ invert_case_line (count, key) int count, key; { register int start, end; start = rl_point; if (count < 0) { direction = -1; count = -count; } else direction = 1; /* Find the end of the range to modify. */ end = start + (count * direction); /* Force it to be within range. */ if (end > rl_end) end = rl_end; else if (end < 0) end = -1; if (start > end) { int temp = start; start = end; end = temp; } if (start == end) return; /* Tell readline that we are modifying the line, so save the undo information. */ rl_modifying (start, end); for (; start != end; start += direction) { if (_rl_uppercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_lower (rl_line_buffer[start]); else if (_rl_lowercase_p (rl_line_buffer[start])) rl_line_buffer[start] = _rl_to_upper (rl_line_buffer[start]); } /* Move point to on top of the last character changed. */ rl_point = end - direction; } readline-7.0/examples/readlinebuf.h000644 000436 000000 00000006555 11053014510 017467 0ustar00chetwheel000000 000000 /******************************************************************************* * $Revision: 1.2 $ * $Date: 2001/09/11 06:19:36 $ * $Author: vyzo $ * * Contents: A streambuf which uses the GNU readline library for line I/O * (c) 2001 by Dimitris Vyzovitis [vyzo@media.mit.edu] * * 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 * ******************************************************************************/ #ifndef _READLINEBUF_H_ #define _READLINEBUF_H_ #include #include #include #include #include #include #include #if (defined __GNUC__) && (__GNUC__ < 3) #include #else #include using std::streamsize; using std::streambuf; #endif class readlinebuf : public streambuf { public: #if (defined __GNUC__) && (__GNUC__ < 3) typedef char char_type; typedef int int_type; typedef streampos pos_type; typedef streamoff off_type; #endif static const int_type eof = EOF; // this is -1 static const int_type not_eof = 0; private: const char* prompt_; bool history_; char* line_; int low_; int high_; protected: virtual int_type showmanyc() const { return high_ - low_; } virtual streamsize xsgetn( char_type* buf, streamsize n ) { int rd = n > (high_ - low_)? (high_ - low_) : n; memcpy( buf, line_, rd ); low_ += rd; if ( rd < n ) { low_ = high_ = 0; free( line_ ); // free( NULL ) is a noop line_ = readline( prompt_ ); if ( line_ ) { high_ = strlen( line_ ); if ( history_ && high_ ) add_history( line_ ); rd += xsgetn( buf + rd, n - rd ); } } return rd; } virtual int_type underflow() { if ( high_ == low_ ) { low_ = high_ = 0; free( line_ ); // free( NULL ) is a noop line_ = readline( prompt_ ); if ( line_ ) { high_ = strlen( line_ ); if ( history_ && high_ ) add_history( line_ ); } } if ( low_ < high_ ) return line_[low_]; else return eof; } virtual int_type uflow() { int_type c = underflow(); if ( c != eof ) ++low_; return c; } virtual int_type pbackfail( int_type c = eof ) { if ( low_ > 0 ) --low_; else if ( c != eof ) { if ( high_ > 0 ) { char* nl = (char*)realloc( line_, high_ + 1 ); if ( nl ) { line_ = (char*)memcpy( nl + 1, line_, high_ ); high_ += 1; line_[0] = char( c ); } else return eof; } else { assert( !line_ ); line_ = (char*)malloc( sizeof( char ) ); *line_ = char( c ); high_ = 1; } } else return eof; return not_eof; } public: readlinebuf( const char* prompt = NULL, bool history = true ) : prompt_( prompt ), history_( history ), line_( NULL ), low_( 0 ), high_( 0 ) { setbuf( 0, 0 ); } }; #endif readline-7.0/examples/rl-fgets.c000644 000436 000024 00000025613 10042030201 016716 0ustar00chetstaff000000 000000 /* Date: Tue, 16 Mar 2004 19:38:40 -0800 From: Harold Levy Subject: fgets(stdin) --> readline() redirector To: chet@po.cwru.edu Hi Chet, Here is something you may find useful enough to include in the readline distribution. It is a shared library that redirects calls to fgets(stdin) to readline() via LD_PRELOAD, and it supports a custom prompt and list of command names. Many people have asked me for this file, so I thought I'd pass it your way in hope of just including it with readline to begin with. Best Regards, -Harold */ /****************************************************************************** ******************************************************************************* FILE NAME: fgets.c TARGET: libfgets.so AUTHOR: Harold Levy VERSION: 1.0 hlevy@synopsys.com ABSTRACT: Customize fgets() behavior via LD_PRELOAD in the following ways: -- If fgets(stdin) is called, redirect to GNU readline() to obtain command-line editing, file-name completion, history, etc. -- A list of commands for command-name completion can be configured by setting the environment-variable FGETS_COMMAND_FILE to a file containing the list of commands to be used. -- Command-line editing with readline() works best when the prompt string is known; you can set this with the FGETS_PROMPT environment variable. -- There special strings that libfgets will interpret as internal commands: _fgets_reset_ reset the command list _fgets_dump_ dump status _fgets_debug_ toggle debug messages HOW TO BUILD: Here are examples of how to build libfgets.so on various platforms; you will have to add -I and -L flags to configure access to the readline header and library files. (32-bit builds with gcc) AIX: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lreadline -ltermcap HP-UX: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldld -lreadline Linux: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lreadline SunOS: gcc -fPIC fgets.c -shared -o libfgets.so -lc -ldl -lgen -lreadline (64-bit builds without gcc) SunOS: SUNWspro/bin/cc -D_LARGEFILE64_SOURCE=1 -xtarget=ultra -xarch=v9 \ -KPIC fgets.c -Bdynamic -lc -ldl -lgen -ltermcap -lreadline HOW TO USE: Different operating systems have different levels of support for the LD_PRELOAD concept. The generic method for 32-bit platforms is to put libtermcap.so, libfgets.so, and libreadline.so (with absolute paths) in the LD_PRELOAD environment variable, and to put their parent directories in the LD_LIBRARY_PATH environment variable. Unfortunately there is no generic method for 64-bit platforms; e.g. for 64-bit SunOS, you would have to build both 32-bit and 64-bit libfgets and libreadline libraries, and use the LD_FLAGS_32 and LD_FLAGS_64 environment variables with preload and library_path configurations (a mix of 32-bit and 64-bit calls are made under 64-bit SunOS). EXAMPLE WRAPPER: Here is an example shell script wrapper around the program "foo" that uses fgets() for command-line input: #!/bin/csh #### replace this with the libtermcap.so directory: set dir1 = "/usr/lib" #### replace this with the libfgets.so directory: set dir2 = "/usr/fgets" #### replace this with the libreadline.so directory: set dir3 = "/usr/local/lib" set lib1 = "${dir1}/libtermcap.so" set lib2 = "${dir2}/libfgets.so" set lib3 = "${dir3}/libreadline.so" if ( "${?LD_PRELOAD}" ) then setenv LD_PRELOAD "${lib1}:${lib2}:${lib3}:${LD_PRELOAD}" else setenv LD_PRELOAD "${lib1}:${lib2}:${lib3}" endif if ( "${?LD_LIBRARY_PATH}" ) then setenv LD_LIBRARY_PATH "${dir1}:${dir2}:${dir3}:${LD_LIBRARY_PATH}" else setenv LD_LIBRARY_PATH "${dir1}:${dir2}:${dir3}" endif setenv FGETS_COMMAND_FILE "${dir2}/foo.commands" setenv FGETS_PROMPT "foo> " exec "foo" $* Copyright (C)2003-2004 Harold Levy. This code links to the GNU readline library, and as such is bound by the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 or (at your option) any later version. The GNU General Public License is often shipped with GNU software, and is generally kept in a file called COPYING or LICENSE. If you do not have a copy of the license, write to the Free Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. 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. ******************************************************************************* ******************************************************************************/ #include #include #include #include #include #include #include /* for dynamically connecting to the native fgets() */ #if defined(RTLD_NEXT) #define REAL_LIBC RTLD_NEXT #else #define REAL_LIBC ((void *) -1L) #endif typedef char * ( * fgets_t ) ( char * s, int n, FILE * stream ) ; /* private data */ /* -- writeable data is stored in the shared library's data segment -- every process that uses the shared library gets a private memory copy of its entire data segment -- static data in the shared library is not copied to the application -- only read-only (i.e. 'const') data is stored in the shared library's text segment */ static char ** my_fgets_names = NULL ; static int my_fgets_number_of_names = 0 ; static int my_fgets_debug_flag = 0 ; /* invoked with _fgets_reset_ */ static void my_fgets_reset ( void ) { if ( my_fgets_names && (my_fgets_number_of_names > 0) ) { int i ; if ( my_fgets_debug_flag ) { printf ( "libfgets: removing command list\n" ) ; } for ( i = 0 ; i < my_fgets_number_of_names ; i ++ ) { if ( my_fgets_names[i] ) free ( my_fgets_names[i] ) ; } free ( my_fgets_names ) ; } my_fgets_names = NULL ; my_fgets_number_of_names = 0 ; } /* invoked with _fgets_dump_ */ static void my_fgets_dump ( void ) { char * s ; printf ( "\n" ) ; s = getenv ( "FGETS_PROMPT" ) ; printf ( "FGETS_PROMPT = %s\n", s ? s : "" ) ; s = getenv ( "FGETS_COMMAND_FILE" ) ; printf ( "FGETS_COMMAND_FILE = %s\n", s ? s : "" ) ; printf ( "debug flag = %d\n", my_fgets_debug_flag ) ; printf ( "#commands = %d\n", my_fgets_number_of_names ) ; if ( my_fgets_debug_flag ) { if ( my_fgets_names && (my_fgets_number_of_names > 0) ) { int i ; for ( i = 0 ; i < my_fgets_number_of_names ; i ++ ) { printf ( "%s\n", my_fgets_names[i] ) ; } } } printf ( "\n" ) ; } /* invoked with _fgets_debug_ */ static void my_fgets_debug_toggle ( void ) { my_fgets_debug_flag = my_fgets_debug_flag ? 0 : 1 ; if ( my_fgets_debug_flag ) { printf ( "libfgets: debug flag = %d\n", my_fgets_debug_flag ) ; } } /* read the command list if needed, return the i-th name */ static char * my_fgets_lookup ( int index ) { if ( (! my_fgets_names) || (! my_fgets_number_of_names) ) { char * fname ; FILE * fp ; fgets_t _fgets ; int i ; char buf1[256], buf2[256] ; fname = getenv ( "FGETS_COMMAND_FILE" ) ; if ( ! fname ) { if ( my_fgets_debug_flag ) { printf ( "libfgets: empty or unset FGETS_COMMAND_FILE\n" ) ; } return NULL ; } fp = fopen ( fname, "r" ) ; if ( ! fp ) { if ( my_fgets_debug_flag ) { printf ( "libfgets: cannot open '%s' for reading\n", fname ) ; } return NULL ; } _fgets = (fgets_t) dlsym ( REAL_LIBC, "fgets" ) ; if ( ! _fgets ) { fprintf ( stderr, "libfgets: failed to dynamically link to native fgets()\n" ) ; return NULL ; } for ( i = 0 ; _fgets(buf1,255,fp) ; i ++ ) ; if ( ! i ) { fclose(fp) ; return NULL ; } my_fgets_names = (char**) calloc ( i, sizeof(char*) ) ; rewind ( fp ) ; i = 0 ; while ( _fgets(buf1,255,fp) ) { buf1[255] = 0 ; if ( 1 == sscanf(buf1,"%s",buf2) ) { my_fgets_names[i] = strdup(buf2) ; i ++ ; } } fclose ( fp ) ; my_fgets_number_of_names = i ; if ( my_fgets_debug_flag ) { printf ( "libfgets: successfully read %d commands\n", i ) ; } } if ( index < my_fgets_number_of_names ) { return my_fgets_names[index] ; } else { return NULL ; } } /* generate a list of partial name matches for readline() */ static char * my_fgets_generator ( const char * text, int state ) { static int list_index, len ; char * name ; if ( ! state ) { list_index = 0 ; len = strlen ( text ) ; } while ( ( name = my_fgets_lookup(list_index) ) ) { list_index ++ ; if ( ! strncmp ( name, text, len ) ) { return ( strdup ( name ) ) ; } } return ( NULL ) ; } /* partial name completion callback for readline() */ static char ** my_fgets_completion ( const char * text, int start, int end ) { char ** matches ; matches = NULL ; if ( ! start ) { matches = rl_completion_matches ( text, my_fgets_generator ) ; } return ( matches ) ; } /* fgets() intercept */ char * fgets ( char * s, int n, FILE * stream ) { if ( ! s ) return NULL ; if ( stream == stdin ) { char * prompt ; char * my_fgets_line ; rl_already_prompted = 1 ; rl_attempted_completion_function = my_fgets_completion ; rl_catch_signals = 1 ; rl_catch_sigwinch = 1 ; rl_set_signals () ; prompt = getenv ( "FGETS_PROMPT" ) ; for ( my_fgets_line = 0 ; ! my_fgets_line ; my_fgets_line=readline(prompt) ) ; if ( ! strncmp(my_fgets_line, "_fgets_reset_", 13) ) { my_fgets_reset () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } if ( ! strncmp(my_fgets_line, "_fgets_dump_", 12) ) { my_fgets_dump () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } if ( ! strncmp(my_fgets_line, "_fgets_debug_", 13) ) { my_fgets_debug_toggle () ; free ( my_fgets_line ) ; strcpy ( s, "\n" ) ; return ( s ) ; } (void) strncpy ( s, my_fgets_line, n-1 ) ; (void) strcat ( s, "\n" ) ; if ( *my_fgets_line ) add_history ( my_fgets_line ) ; free ( my_fgets_line ) ; return ( s ) ; } else { static fgets_t _fgets ; _fgets = (fgets_t) dlsym ( REAL_LIBC, "fgets" ) ; if ( ! _fgets ) { fprintf ( stderr, "libfgets: failed to dynamically link to native fgets()\n" ) ; strcpy ( s, "\n" ) ; return ( s ) ; } return ( _fgets ( s, n, stream ) ) ; } } readline-7.0/examples/rlbasic.c000664 000436 000024 00000000713 12560672062 016636 0ustar00chetstaff000000 000000 #include #include #include #include #if defined (READLINE_LIBRARY) # include "readline.h" # include "history.h" #else # include # include #endif int main (int c, char **v) { char *input; for (;;) { input = readline ((char *)NULL); if (input == 0) break; printf ("%s\n", input); if (strcmp (input, "exit") == 0) break; free (input); } exit (0); } readline-7.0/examples/rlcat.c000664 000436 000024 00000006343 11130207321 016311 0ustar00chetstaff000000 000000 /* * rlcat - cat(1) using readline * * usage: rlcat */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #ifdef HAVE_UNISTD_H # include #endif #include #include "posixstat.h" #include #include #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifndef errno extern int errno; #endif #if defined (READLINE_LIBRARY) # include "readline.h" # include "history.h" #else # include # include #endif extern int optind; extern char *optarg; static int stdcat(); static char *progname; static int vflag; static void usage() { fprintf (stderr, "%s: usage: %s [-vEVN] [filename]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp; int opt, Vflag, Nflag; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; vflag = Vflag = Nflag = 0; while ((opt = getopt(argc, argv, "vEVN")) != EOF) { switch (opt) { case 'v': vflag = 1; break; case 'V': Vflag = 1; break; case 'E': Vflag = 0; break; case 'N': Nflag = 1; break; default: usage (); exit (2); } } argc -= optind; argv += optind; if (isatty(0) == 0 || argc || Nflag) return stdcat(argc, argv); rl_variable_bind ("editing-mode", Vflag ? "vi" : "emacs"); while (temp = readline ("")) { if (*temp) add_history (temp); printf ("%s\n", temp); } return (ferror (stdout)); } static int fcopy(fp) FILE *fp; { int c; char *x; while ((c = getc(fp)) != EOF) { if (vflag && isascii ((unsigned char)c) && isprint((unsigned char)c) == 0) { x = rl_untranslate_keyseq (c); if (fputs (x, stdout) != 0) return 1; } else if (putchar (c) == EOF) return 1; } return (ferror (stdout)); } int stdcat (argc, argv) int argc; char **argv; { int i, fd, r; char *s; FILE *fp; if (argc == 0) return (fcopy(stdin)); for (i = 0, r = 1; i < argc; i++) { if (*argv[i] == '-' && argv[i][1] == 0) fp = stdin; else { fp = fopen (argv[i], "r"); if (fp == 0) { fprintf (stderr, "%s: %s: cannot open: %s\n", progname, argv[i], strerror(errno)); continue; } } r = fcopy (fp); if (fp != stdin) fclose(fp); } return r; } readline-7.0/examples/rlevent.c000664 000436 000000 00000006337 11130707432 016671 0ustar00chetwheel000000 000000 /* * rl - command-line interface to read a line from the standard input * (or another fd) using readline. * * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #if defined (READLINE_LIBRARY) # include "posixstat.h" # include "readline.h" # include "history.h" #else # include # include # include #endif extern int optind; extern char *optarg; #if !defined (strchr) && !defined (__STDC__) extern char *strrchr(); #endif static char *progname; static char *deftext; static int event_hook () { fprintf (stderr, "ding!\n"); sleep (1); return 0; } static int set_deftext () { if (deftext) { rl_insert_text (deftext); deftext = (char *)NULL; rl_startup_hook = (rl_hook_func_t *)NULL; } return 0; } static void usage() { fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp, *prompt; struct stat sb; int opt, fd, nch; FILE *ifp; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; /* defaults */ prompt = "readline$ "; fd = nch = 0; deftext = (char *)0; while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) { switch (opt) { case 'p': prompt = optarg; break; case 'u': fd = atoi(optarg); if (fd < 0) { fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); exit (2); } break; case 'd': deftext = optarg; break; case 'n': nch = atoi(optarg); if (nch < 0) { fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); exit (2); } break; default: usage (); exit (2); } } if (fd != 0) { if (fstat (fd, &sb) < 0) { fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); exit (1); } ifp = fdopen (fd, "r"); rl_instream = ifp; } if (deftext && *deftext) rl_startup_hook = set_deftext; if (nch > 0) rl_num_chars_to_read = nch; rl_event_hook = event_hook; temp = readline (prompt); /* Test for EOF. */ if (temp == 0) exit (1); printf ("%s\n", temp); exit (0); } readline-7.0/examples/rltest.c000664 000436 000024 00000004142 11130207321 016514 0ustar00chetstaff000000 000000 /* **************************************************************** */ /* */ /* Testing Readline */ /* */ /* **************************************************************** */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) #include #endif #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif extern HIST_ENTRY **history_list (); main () { char *temp, *prompt; int done; temp = (char *)NULL; prompt = "readline$ "; done = 0; while (!done) { temp = readline (prompt); /* Test for EOF. */ if (!temp) exit (1); /* If there is anything on the line, print it and remember it. */ if (*temp) { fprintf (stderr, "%s\r\n", temp); add_history (temp); } /* Check for `command' that we handle. */ if (strcmp (temp, "quit") == 0) done = 1; if (strcmp (temp, "list") == 0) { HIST_ENTRY **list; register int i; list = history_list (); if (list) { for (i = 0; list[i]; i++) fprintf (stderr, "%d: %s\r\n", i, list[i]->line); } } free (temp); } exit (0); } readline-7.0/examples/rl-callbacktest.c000664 000436 000024 00000004770 12707672653 020306 0ustar00chetstaff000000 000000 /* Standard include files. stdio.h is required. */ #include #include #include #include /* Used for select(2) */ #include #include #include #include #include /* Standard readline include files. */ #if defined (READLINE_LIBRARY) # include "readline.h" # include "history.h" #else # include # include #endif extern int errno; static void cb_linehandler (char *); static void signandler (int); int running, sigwinch_received; const char *prompt = "rltest$ "; /* Handle SIGWINCH and window size changes when readline is not active and reading a character. */ static void sighandler (int sig) { sigwinch_received = 1; } /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) { /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) { if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; } else { if (*line) add_history (line); printf ("input line: %s\n", line); free (line); } } int main (int c, char **v) { fd_set fds; int r; setlocale (LC_ALL, ""); /* Handle SIGWINCH */ signal (SIGWINCH, sighandler); /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) { FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0 && errno != EINTR) { perror ("rltest: select"); rl_callback_handler_remove (); break; } if (sigwinch_received) { rl_resize_terminal (); sigwinch_received = 0; } if (r < 0) continue; if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); } printf ("rltest: Event loop has exited\n"); return 0; } readline-7.0/examples/rl.c000664 000436 000024 00000006177 12560672153 015647 0ustar00chetstaff000000 000000 /* * rl - command-line interface to read a line from the standard input * (or another fd) using readline. * * usage: rl [-p prompt] [-u unit] [-d default] [-n nchars] */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #include #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #if defined (READLINE_LIBRARY) # include "posixstat.h" # include "readline.h" # include "history.h" #else # include # include # include #endif extern int optind; extern char *optarg; #if !defined (strchr) && !defined (__STDC__) extern char *strrchr(); #endif static char *progname; static char *deftext; static int set_deftext () { if (deftext) { rl_insert_text (deftext); deftext = (char *)NULL; rl_startup_hook = (rl_hook_func_t *)NULL; } return 0; } static void usage() { fprintf (stderr, "%s: usage: %s [-p prompt] [-u unit] [-d default] [-n nchars]\n", progname, progname); } int main (argc, argv) int argc; char **argv; { char *temp, *prompt; struct stat sb; int opt, fd, nch; FILE *ifp; progname = strrchr(argv[0], '/'); if (progname == 0) progname = argv[0]; else progname++; /* defaults */ prompt = "readline$ "; fd = nch = 0; deftext = (char *)0; while ((opt = getopt(argc, argv, "p:u:d:n:")) != EOF) { switch (opt) { case 'p': prompt = optarg; break; case 'u': fd = atoi(optarg); if (fd < 0) { fprintf (stderr, "%s: bad file descriptor `%s'\n", progname, optarg); exit (2); } break; case 'd': deftext = optarg; break; case 'n': nch = atoi(optarg); if (nch < 0) { fprintf (stderr, "%s: bad value for -n: `%s'\n", progname, optarg); exit (2); } break; default: usage (); exit (2); } } if (fd != 0) { if (fstat (fd, &sb) < 0) { fprintf (stderr, "%s: %d: bad file descriptor\n", progname, fd); exit (1); } ifp = fdopen (fd, "r"); rl_instream = ifp; } if (deftext && *deftext) rl_startup_hook = set_deftext; if (nch > 0) rl_num_chars_to_read = nch; temp = readline (prompt); /* Test for EOF. */ if (temp == 0) exit (1); printf ("%s\n", temp); exit (0); } readline-7.0/examples/rlptytest.c000644 000436 000024 00000014736 12707670364 017307 0ustar00chetstaff000000 000000 /* * * Another test harness for the readline callback interface. * * Author: Bob Rossi */ #if defined (HAVE_CONFIG_H) #include #endif #include #include #include #include #include #include #include #if 1 /* LINUX */ #include #else #include #endif #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif /** * Master/Slave PTY used to keep readline off of stdin/stdout. */ static int masterfd = -1; static int slavefd; void sigint (s) int s; { tty_reset (STDIN_FILENO); close (masterfd); close (slavefd); printf ("\n"); exit (0); } void sigwinch (s) int s; { rl_resize_terminal (); } static int user_input() { int size; const int MAX = 1024; char *buf = (char *)malloc(MAX+1); size = read (STDIN_FILENO, buf, MAX); if (size == -1) return -1; size = write (masterfd, buf, size); if (size == -1) return -1; return 0; } static int readline_input() { const int MAX = 1024; char *buf = (char *)malloc(MAX+1); int size; size = read (masterfd, buf, MAX); if (size == -1) { free( buf ); buf = NULL; return -1; } buf[size] = 0; /* Display output from readline */ if ( size > 0 ) fprintf(stderr, "%s", buf); free( buf ); buf = NULL; return 0; } static void rlctx_send_user_command(char *line) { /* This happens when rl_callback_read_char gets EOF */ if ( line == NULL ) return; if (strcmp (line, "exit") == 0) { tty_reset (STDIN_FILENO); close (masterfd); close (slavefd); printf ("\n"); exit (0); } /* Don't add the enter command */ if ( line && *line != '\0' ) add_history(line); } static void custom_deprep_term_function () { } static int init_readline (int inputfd, int outputfd) { FILE *inputFILE, *outputFILE; inputFILE = fdopen (inputfd, "r"); if (!inputFILE) return -1; outputFILE = fdopen (outputfd, "w"); if (!outputFILE) return -1; rl_instream = inputFILE; rl_outstream = outputFILE; /* Tell readline what the prompt is if it needs to put it back */ rl_callback_handler_install("(rltest): ", rlctx_send_user_command); /* Set the terminal type to dumb so the output of readline can be * understood by tgdb */ if ( rl_reset_terminal("dumb") == -1 ) return -1; /* For some reason, readline can not deprep the terminal. * However, it doesn't matter because no other application is working on * the terminal besides readline */ rl_deprep_term_function = custom_deprep_term_function; using_history(); read_history(".history"); return 0; } static int main_loop(void) { fd_set rset; int max; max = (masterfd > STDIN_FILENO) ? masterfd : STDIN_FILENO; max = (max > slavefd) ? max : slavefd; for (;;) { /* Reset the fd_set, and watch for input from GDB or stdin */ FD_ZERO(&rset); FD_SET(STDIN_FILENO, &rset); FD_SET(slavefd, &rset); FD_SET(masterfd, &rset); /* Wait for input */ if (select(max + 1, &rset, NULL, NULL, NULL) == -1) { if (errno == EINTR) continue; else return -1; } /* Input received through the pty: Handle it * Wrote to masterfd, slave fd has that input, alert readline to read it. */ if (FD_ISSET(slavefd, &rset)) rl_callback_read_char(); /* Input received through the pty. * Readline read from slavefd, and it wrote to the masterfd. */ if (FD_ISSET(masterfd, &rset)) if ( readline_input() == -1 ) return -1; /* Input received: Handle it, write to masterfd (input to readline) */ if (FD_ISSET(STDIN_FILENO, &rset)) if ( user_input() == -1 ) return -1; } return 0; } /* The terminal attributes before calling tty_cbreak */ static struct termios save_termios; static struct winsize size; static enum { RESET, TCBREAK } ttystate = RESET; /* tty_cbreak: Sets terminal to cbreak mode. Also known as noncanonical mode. * 1. Signal handling is still turned on, so the user can still type those. * 2. echo is off * 3. Read in one char at a time. * * fd - The file descriptor of the terminal * * Returns: 0 on sucess, -1 on error */ int tty_cbreak(int fd){ struct termios buf; int ttysavefd = -1; if(tcgetattr(fd, &save_termios) < 0) return -1; buf = save_termios; buf.c_lflag &= ~(ECHO | ICANON); buf.c_iflag &= ~(ICRNL | INLCR); buf.c_cc[VMIN] = 1; buf.c_cc[VTIME] = 0; #if defined (VLNEXT) && defined (_POSIX_VDISABLE) buf.c_cc[VLNEXT] = _POSIX_VDISABLE; #endif #if defined (VDSUSP) && defined (_POSIX_VDISABLE) buf.c_cc[VDSUSP] = _POSIX_VDISABLE; #endif /* enable flow control; only stty start char can restart output */ #if 0 buf.c_iflag |= (IXON|IXOFF); #ifdef IXANY buf.c_iflag &= ~IXANY; #endif #endif /* disable flow control; let ^S and ^Q through to pty */ buf.c_iflag &= ~(IXON|IXOFF); #ifdef IXANY buf.c_iflag &= ~IXANY; #endif if(tcsetattr(fd, TCSAFLUSH, &buf) < 0) return -1; ttystate = TCBREAK; ttysavefd = fd; /* set size */ if(ioctl(fd, TIOCGWINSZ, (char *)&size) < 0) return -1; #ifdef DEBUG err_msg("%d rows and %d cols\n", size.ws_row, size.ws_col); #endif return (0); } int tty_off_xon_xoff (int fd) { struct termios buf; int ttysavefd = -1; if(tcgetattr(fd, &buf) < 0) return -1; buf.c_iflag &= ~(IXON|IXOFF); if(tcsetattr(fd, TCSAFLUSH, &buf) < 0) return -1; return 0; } /* tty_reset: Sets the terminal attributes back to their previous state. * PRE: tty_cbreak must have already been called. * * fd - The file descrioptor of the terminal to reset. * * Returns: 0 on success, -1 on error */ int tty_reset(int fd) { if(ttystate != TCBREAK) return (0); if(tcsetattr(fd, TCSAFLUSH, &save_termios) < 0) return (-1); ttystate = RESET; return 0; } int main() { int val; val = openpty (&masterfd, &slavefd, NULL, NULL, NULL); if (val == -1) return -1; val = tty_off_xon_xoff (masterfd); if (val == -1) return -1; signal (SIGWINCH, sigwinch); signal (SIGINT, sigint); val = init_readline (slavefd, slavefd); if (val == -1) return -1; val = tty_cbreak (STDIN_FILENO); if (val == -1) return -1; val = main_loop (); tty_reset (STDIN_FILENO); if (val == -1) return -1; return 0; } readline-7.0/examples/rlversion.c000664 000436 000024 00000002413 12560672072 017242 0ustar00chetstaff000000 000000 /* * rlversion -- print out readline's version number */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #if defined (HAVE_CONFIG_H) # include #endif #include #include #include "posixstat.h" #ifdef HAVE_STDLIB_H # include #else extern void exit(); #endif #ifdef READLINE_LIBRARY # include "readline.h" #else # include #endif int main() { printf ("%s\n", rl_library_version ? rl_library_version : "unknown"); exit (0); } readline-7.0/examples/histexamp.c000664 000436 000024 00000005511 11130207321 017202 0ustar00chetstaff000000 000000 /* histexamp.c - history library example program. */ /* Copyright (C) 1987-2009 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include main (argc, argv) int argc; char **argv; { char line[1024], *t; int len, done; line[0] = 0; done = 0; using_history (); while (!done) { printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) { len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; } if (!t) strcpy (line, "quit"); if (line[0]) { char *expansion; int result; using_history (); result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); } if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) { register HIST_ENTRY **the_list; register int i; time_t tt; char timestr[128]; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) { tt = history_get_time (the_list[i]); if (tt) strftime (timestr, sizeof (timestr), "%a %R", localtime(&tt)); else strcpy (timestr, "??"); printf ("%d: %s: %s\n", i + history_base, timestr, the_list[i]->line); } } else if (strncmp (line, "delete", 6) == 0) { int which; if ((sscanf (line + 6, "%d", &which)) == 1) { HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else { free (entry->line); free (entry); } } else { fprintf (stderr, "non-numeric arg given to `delete'\n"); } } } } readline-7.0/examples/hist_erasedups.c000644 000436 000024 00000005221 12706436613 020240 0ustar00chetstaff000000 000000 /* hist_erasedups -- remove all duplicate entries from history file */ /* Copyright (C) 2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #ifndef READLINE_LIBRARY #define READLINE_LIBRARY 1 #endif #include #include #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) #define STREQN(a, b, n) ((n == 0) ? (1) \ : ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)) static void usage() { fprintf (stderr, "hist_erasedups: usage: hist_erasedups [-t] [filename]\n"); exit (2); } int main (argc, argv) int argc; char **argv; { char *fn; int r; while ((r = getopt (argc, argv, "t")) != -1) { switch (r) { case 't': history_write_timestamps = 1; break; default: usage (); } } argv += optind; argc -= optind; fn = argc ? argv[0] : getenv ("HISTFILE"); if (fn == 0) { fprintf (stderr, "hist_erasedups: no history file\n"); usage (); } if ((r = read_history (fn)) != 0) { fprintf (stderr, "hist_erasedups: read_history: %s: %s\n", fn, strerror (r)); exit (1); } hist_erasedups (); if ((r = write_history (fn)) != 0) { fprintf (stderr, "hist_erasedups: write_history: %s: %s\n", fn, strerror (r)); exit (1); } exit (0); } int hist_erasedups () { int r, n; HIST_ENTRY *h, *temp; using_history (); while (h = previous_history ()) { r = where_history (); for (n = 0; n < r; n++) { temp = history_get (n+history_base); if (STREQ (h->line, temp->line)) { remove_history (n); r--; /* have to get one fewer now */ n--; /* compensate for above increment */ history_offset--; /* moving backwards in history list */ } } } using_history (); return r; } readline-7.0/examples/hist_purgecmd.c000644 000436 000024 00000006406 12706436563 020065 0ustar00chetstaff000000 000000 /* hist_purgecmd -- remove all instances of command or pattern from history file */ /* Copyright (C) 2011 Free Software Foundation, Inc. This file is part of the GNU Readline Library (Readline), a library for reading lines of text with interactive input and history editing. Readline 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 3 of the License, or (at your option) any later version. Readline 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 Readline. If not, see . */ #ifndef READLINE_LIBRARY #define READLINE_LIBRARY 1 #endif #include #include #include #include #ifdef READLINE_LIBRARY # include "history.h" #else # include #endif #include #define STREQ(a, b) ((a)[0] == (b)[0] && strcmp(a, b) == 0) #define STREQN(a, b, n) ((n == 0) ? (1) \ : ((a)[0] == (b)[0] && strncmp(a, b, n) == 0)) #define PURGE_REGEXP 0x01 static void usage() { fprintf (stderr, "hist_purgecmd: usage: hist_purgecmd [-r] [-t] [-f filename] command-spec\n"); exit (2); } int main (argc, argv) int argc; char **argv; { char *fn; int r, flags; flags = 0; fn = 0; while ((r = getopt (argc, argv, "f:rt")) != -1) { switch (r) { case 'f': fn = optarg; break; case 'r': flags |= PURGE_REGEXP; break; case 't': history_write_timestamps = 1; break; default: usage (); } } argv += optind; argc -= optind; if (fn == 0) fn = getenv ("HISTFILE"); if (fn == 0) { fprintf (stderr, "hist_purgecmd: no history file\n"); usage (); } if ((r = read_history (fn)) != 0) { fprintf (stderr, "hist_purgecmd: read_history: %s: %s\n", fn, strerror (r)); exit (1); } for (r = 0; r < argc; r++) hist_purgecmd (argv[r], flags); if ((r = write_history (fn)) != 0) { fprintf (stderr, "hist_purgecmd: write_history: %s: %s\n", fn, strerror (r)); exit (1); } exit (0); } int hist_purgecmd (cmd, flags) char *cmd; int flags; { int r, n, rflags; HIST_ENTRY *temp; regex_t regex = { 0 }; if (flags & PURGE_REGEXP) { rflags = REG_EXTENDED|REG_NOSUB; if (regcomp (®ex, cmd, rflags)) { fprintf (stderr, "hist_purgecmd: %s: invalid regular expression\n", cmd); return -1; } } r = 0; using_history (); r = where_history (); for (n = 0; n < r; n++) { temp = history_get (n+history_base); if (((flags & PURGE_REGEXP) && (regexec (®ex, temp->line, 0, 0, 0) == 0)) || ((flags & PURGE_REGEXP) == 0 && STREQ (temp->line, cmd))) { remove_history (n); r--; /* have to get one fewer now */ n--; /* compensate for above increment */ history_offset--; /* moving backwards in history list */ } } using_history (); if (flags & PURGE_REGEXP) regfree (®ex); return r; } readline-7.0/examples/Inputrc000664 000436 000024 00000004472 11130207321 016410 0ustar00chetstaff000000 000000 # My ~/.inputrc file is in -*- text -*- for easy editing with Emacs. # # Notice the various bindings which are conditionalized depending # on which program is running, or what terminal is active. # # Copyright (C) 1989-2009 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . # # In all programs, all terminals, make sure this is bound. "\C-x\C-r": re-read-init-file # Hp terminals (and some others) have ugly default behaviour for C-h. "\C-h": backward-delete-char "\e\C-h": backward-kill-word "\C-xd": dump-functions # In xterm windows, make the arrow keys do the right thing. $if TERM=xterm "\e[A": previous-history "\e[B": next-history "\e[C": forward-char "\e[D": backward-char # alternate arrow key prefix "\eOA": previous-history "\eOB": next-history "\eOC": forward-char "\eOD": backward-char # Under Xterm in Bash, we bind local Function keys to do something useful. $if Bash "\e[11~": "Function Key 1" "\e[12~": "Function Key 2" "\e[13~": "Function Key 3" "\e[14~": "Function Key 4" "\e[15~": "Function Key 5" # I know the following escape sequence numbers are 1 greater than # the function key. Don't ask me why, I didn't design the xterm terminal. "\e[17~": "Function Key 6" "\e[18~": "Function Key 7" "\e[19~": "Function Key 8" "\e[20~": "Function Key 9" "\e[21~": "Function Key 10" $endif $endif # For Bash, all terminals, add some Bash specific hacks. $if Bash "\C-xv": show-bash-version "\C-x\C-e": shell-expand-line # Here is one for editing my path. "\C-xp": "$PATH\C-x\C-e\C-e\"\C-aPATH=\":\C-b" # Make C-x r read my mail in emacs. # "\C-xr": "emacs -f rmail\C-j" $endif # For FTP, different hacks: $if Ftp "\C-xg": "get \M-?" "\C-xt": "put \M-?" "\M-.": yank-last-arg $endif " ": self-insert readline-7.0/examples/rlwrap-0.30.tar.gz000664 000436 000024 00000547341 10737174550 020107 0ustar00chetstaff000000 000000 W|G[s6+jrmJ3\Fs]۵fv5I0i[fPN_wD) w@n*U֢͵g mdk;|monoo=x{o=}ZFOl2ӵ[SYӺMEdkGd:~AǯgBűmZE"#ebd UMhE. oJOrR[%=jƸ|H mQ"U.ƺ̎D&ɴ0kʼn|[98ѩÜ9MRh&wBJq(rUTwTΙk- ^Tt7xw ~X]Z҅ʩW I$Vh'0-ɓ.EOg03q\]5k{O]sQBߊWZR&WJ4]jDoqftQxmkkss1׷6}?JҔ%L^ĢIP% Kx뺩R%cy3N'j]m%21cpLnIAˍ2U$6ബB\QPҲ"(!UpEҭU.Pˋ7cA5.A]l4(JMibaU{m, 2!hhC ԸJt451*H)VѢ`/I.T^ EZNT->|+M?RcIC1DߖhEî"y[̈[C0AF5⨝ 3cX|,!^XHw<3 r# VelPac%e5/myf}J$hѸH31fԴF #Q=hAVOxƑa:4SYjr2N;R`N5/aw!"5/71  e49$B7[˕a3:J!3r2qhüT :Ÿ W}>_swOgw}~,]m.5D_@x{k{sk{s#> 0?m [?]aפFj:UOٓʖ ] gxkl.vmOJUzR9=QΉWb ghө4<:A}ō'B|mnKKqhnDSpr|T\ ,b؝hk[jḤ8&Ω@EĂT/??Q5.¯S}S?HyZbЪ#JCZ\|cŐriV'B|K *D c -"Xj#9SN HNK9`BLf5r,Xh2R,0 j"̸@/_ ַ4_iASMQbq ¶E% a Ed8*QYu; Qo"]3(RkEWcqyOJ<Ko)LESm{{֓T?X\! H d Z⁗M[AϿ?=;8>z0 .wVWK oFEI֌3T^Q>4Uqd8xگ1UߋC/PlS*&VmɒSk|Ye9“6Ͼ[p-O8Jg_G '1Tmhvqe|>I*].:PP欧k~pˣl$ *(1p* M1FY'tdUHmLVL}QS$KQC&9sNi mPg8ˣQSZp^'uiխ`mū.xaCW;HkD__}7'=9'ʒ"5cx FU^գ^Wрfz١׫hC6 tro|4⻃ý6~oOzܳ_WJ&BƑAʇ85}dcy?f>wUGO̗Ճ׽+oN^3gO%fV26^R/k??C\dkmc-Y{U e8HWr/ʷ{":{%ES%ZhyqQ,G2:=7"}qqp"==}ɷYg{GGϹ\zjKS햤| "K8跜\i]HU*"=x8B-W49SDŽW"&sl+,qr܉ծXy- Xg H//ox7οF(TTT͵.$5#w!2@raD?FJ񱴫^NhgRs~\ܗռHsp%R>]7$]7yAhؾqt|rvp&0 @ 3R[? {z ^AdnUSx, 75 *HbAX7hHZy;HI2~ ˒   ^uf+6v[~ Q{fhw ,8yĊP&-c63a+۩CLSQQ>"=9d{LJ  fq V{]<ÚoμlVzjhòe8a8o0xUp)S{%7 XP*ŧb #akhXQ tّi-Ixs"Pxb2vZ 53N,a_]#Yˢ{T'aNGeC߳pf@/jLM~LfuO=T)x,{Q@/*;z⹸  Ax"{avVè֜"6(*ipEUZ;P + eĂAxW+p%պ6&'SwpX8^\)囉5G`DwB D{'ް[VPGz}109$q-2tA>H)B@ 3AQ"4_Vq"zע.|moGx=Ņ &ff![d}c 9gX1;e*}F7YYha $"Ǭ = ~i/AIΚr{mx]q"eTߗ /VDD@fFnK' __UQ`~F]'ё6xbn"ԊLAf0(5SFU q2\#p  S>fc#3ıubXxAaISAH yQ *x6'o:>*&L("_c@uѱ]7 Hpu\ g29}~׉'G"yt7 0f!ʁc7M]̾bXX;)> 7MBUcJI.x{⏏u!Y2l0b+s:&Ʊ݂joXO% 6ߑiqɇO''4|ox>;8}V.^0:<{|GB2Vk dbSB2tǗ'8Kz\=ᰂ= E>ڣ9 [Yq'{W>m绝狑E_ -zkHF{,WW)˛+$ 'e}|+뵰gy0sHvZlezWUұ&1X+^`ҳi)'^fOĂ`jB@sNuwE3i3E3N)DKw0 )*;Ft`^JH١LByD`\d8poNʾVZ(41LC%)&.J'c2;-澳),4NB^ |`Zr+942[V0iH>dNY.)G.f0g }C?.]3rZsI# >j<ꅁr>7}Ag(8jd7 )7|#<>p]!]@:>F$界l+M(BSQjdnΏO-yʝ3L遏Ǘ4󥟍ZT.~jORG%?a08^B-TP   d"ICr<+!D+aUUET/`'~^<ÜЍd_kV ǷWĊr* #VBc/K,{WPŪ$K(y$bou[nF4et8sV2={e:~闣rVQ!-/=\_9ZIțhr/2q8hZ -yDAg`Qt5D>{ w$ :mŐSQuISDP$ˆN[!;)y4pvA_"9_![-nH0Xƿ EZD?i+-6#T #@52WZ4߫Ņ܄%qA|VoSdxim$sÁ{Rpv 1Ā ݗ{zOO&Aܥ Ca?ʷ)!Ɇ q}HkQJ^k+qG^lǃz kN!ݩ zCe b[b+33VGTKBXa4VtmCI-!SЪӤGCPBF@*m"(\<=LXt8Z@+wyQ1\˜׻M8H)`Y.<$"^N@X]˙\ýM|0xZ,OJF4IaWe \$mSU1D~)3mN78,|-&*slER1dDHlpy{=^%9KC-X,DEws[30JW9G Lj)FqB0eR/%F+ۮs4Mή]tBj+pvWywwoRp~vnϒN'r$[X6_Q9rҠ<jUO"6-Uf)mXzXZE:m oBfE@JIDR />:fru`0]z |ӆ.JZ{VmO Q dU;8 RTVΠ4# |Pwɫ:)n 7Q;t˼|//6+_|*dZOA> 4deNt!}8-?^ \'JX ;DRP!͇u..tviiޔ'tNPEӔ\zeAoLD3XW.&\ŶXYc!`N8Px_4p9r'D2|_8]n]⿭i?`յo?tJ4ϱv }[p5~;Z&f1Q-uZ'MP< 74zM<\G,8:k?K|g7Dr\bFHL LXb˹6? -MPGcohkj]_~d 1q  -1K1&9ET+m0E5jz,„oʄ YHŒL5Q}4G̺l T;Xf9p$%~`87PJتD9!y}tb5:sZWvK6M7: GG;vvOa/vO٦G';oᛣÃMnqBƏO'JGm z/b_6є ?hHNGOfQ?u8}yw?{ҵlP['G_鳼u  0^ ;;x y?4'zsx?gz%*n%DuueXbQjp2AߨCs'С>h_\sWuX]𥶿~j+Z*sLza2h#qucg"=(5<3Ӱs?я0 S@)է"w-t_ UMCʛ|5^ Q0$8|u"gE~ pķI|ޗ`bZ nт)o%mP]a8Bf'<,4R~ZvDYn C6g+*CE>@Kh ʦ`+~gNe}+ˏ0{F7E1lgk;n|ڰٝD#9Nb|c mɧvt`*7k`Ks-~f:R@Xpڣo%V8it\LFkiP@rF ~`%mM2TocgE-M{prڣ+Q3q|I/$\ uoNl͔lP _X M\iY{67q)v!1[. P'AWvW],9Yv8 VZl "LZn",98|Ƽ{bRǃwb=~HEmi]sz|mVj7@dq[<[چXzT'DQu2NwԈE Q9+Ȗ._,WX*WQ7 v_7^>{\¿ԩ:eZ*Xu>oA8I>FB\p(83ف#٭KdB#dEÉ`kl rUE2*֨ћڔro;oyT ~M>]a'1a93Kxs?_6J}/٦{'h{ z{Qie+' gg)D{κ>n͎iiO}LJ5⤟׍Go~ fU3;MDP@&o z͔tD 5g 3v=K2a&z!1rH)*Jwfwdڗ}UiƋ odel6 Į̎uEҸܮc2]"ɨIhy=ܳ2Ktr<rY#i楉Zpi~o6Neډ?_؍mR)zͤw?z#;=L]M3e5ăNI軭24[NߦUЫ.㦰 =`]o*"H(XAl2imv9 '!n;Õl4lv؈/,׻'+4w hZNj(dشQn Ҡ/4Ǔ().I;Aє`A%K~M@pCNۙc"pMiLt/xfrh<#6viII.."bК6Lg  O{- , vU׉·0DŽtqapDb+ O6$ӛN&|,!XO æ4Aɜր4Le=( o,ty f.a1w{4i"p 5UFӄ@Uame~aƹY͙2$?rJ ֖,$-$@φjj !7@6mHMĈkm0fimB`M[N_7yf$Ȼ\w򺕦і 8P%r={{Ԯ<@њԴBJHUvk˖#:l]^bLWԛujbbjj6ժQ6No*b제WdSh[{6åjYS(56n ]25Wƀ9R]ɒGV]o98>/a9Uwӌ m}vFKmh7ZDkZPs',]Hl*˒Y4Ҳsz`PfEm$nӥ]vqSD*! ӎHiV}>.Ǜl#u  1o Y'tl<(` *6YZ1U}A5"vt,8yNhs/=gmb9;g982hfg)Ѵ[޺}?BMX "`%2.AjO`Z Ä=cсnH)$΃a6 Uh4wن&UBl: Pϊ-ҞY3\3 YoZS_5}-[mNN)r@[֛YM̅mԺb[eLsh/ JcP1jJ8U{GŧigJ˔q@qV_4ejB/u@$-Zc+Qv,9 FՒiˌQ-GɴGuG1Eo"fl hQTdYXl3[< JR+FGȦJbrz gmvr!(6HȥS8{)C$&^` 1wHQ) -+H_  ^/ ⏄*. K話1EI(h2ƞ ^ȧ]O?tEZ, ڑm ED>ULѿ4ͦ "-Wf28'O- 6 IV۾܅ʌH:T `FjkSb{a1mVy;TjSgu[jrV9X;HY(^ޮ\|fGXFtr/6k?y62Z,nk\4][E nqLڒU)WH>N,mj#'Ux?tk" p6 ~^I~yp5#v ⚩(Tq-`냣w~V? 31yt[Qϛvf=697 h|Ě `Hp|0gjkCxY$3^3bI/ i8G;f6'g#Ci.®HFr>"Pe['oB5ς)E`GLA`ooЄNi߾j5ϛWKGCVRblݳl/=)oM>quy'Lsϩ(ʥLS3t_-,jkSq嵯>mF>kTشیkY.qt%(JU$ 6KthƸ\}ڷX4Woawp4&kqiΦ۩dHE^ K5z" >e*iJF;e107c[/9L_v?woB$-qݔe4MFΈ߳EH_W/kz=X}/k<^},~̒996ww;u㷿ԖyVj+kj^Lu90OCs@ 7*:Ȏt1Η(<\{%w_`eE˵u0Ή`$`_v?b/p>Džy.H݌z6ݫt @-Yx[ KKW4)!$'J`hm Ŷc󕗟ys|rz?oVړt<+©*@T&/9"x@ŽVXG `8DÀS2BAuSiS &}1<69c"2l̵r=)!H2Iau8HyQ,+!xZhc+ʄhhMl97ׇҷ/IǠ.hU:b]% -_ F쀞>`m|JkOJjĕ;Oƚuش08ѩ,}+#+!a$c;<6ۗòTnb!P ې}bD.jh6ݝ1FidO)X0U?5֘Gd5޹A0Ki=+'о*Fnh4磄l=X˫Im_sqLɘ!6% G)O쨱}bpŗ:Gv`Hʉ*9Zdk5~2(54*/vOc[tOM&) Px@p}0U3$yasm!;]Q2ǽ;Epw}%Oǻ'k`a$,s{/Jkm~qs>-=QVb3UlӃBǘro0HjD:qE8|έXZS_PkZ)gBn iUxl#X)>g4̜>m]ȼph/Y*{i|ZEGv@ASz( SR.Z;U4x;3 ƿD7 n;Dq23lA+eϜ2Μs,,zKׁ:;jPٔm ˌe sH`M.ÈO;q3f v Y(^rC 4ƗCmn&^Wv>S0F4q":,O+f $ʶl9l&pOLj['`.<#BҕtA+Qa H j`GAS74 |a%r=,n$5@P`]9Cq"Ii)d}a{*v%jte_0X7굿[[Y_5π=Z 5, A,ʾ yWW !J-ɨ/&v@SoQ m.FI}=5cE;5_ cv2VDIK Xuuegj?P~rOꑅ]/Kdta7C?2ԺCƗ<#Om), } X/!kmQNr8 r ^E+}i2tdȒ e'P{\V+,Uw^yZ(a߇ `tD]Q Ɇk `;e espaBXxMGI۶+"[]o}Q_G1L|.z.9 ]7%ifk,ya4CccmF eЏFhVmf$ێ=9_o>οF=\_{W sLF &i:+vhxX_Y t0A'd"D^6T5)9R*kta?P:,[Rde,VjYͦmpjsjyB6o6jڴ~c`Ku_]jO\ 3}=Zw_]gGdT_*?nZhFpZX.*'h{/HS/4 ZFQA{U4Pb e,U&z.:T=x1R˜v\ #1e|l yB ,%\!Qo!K3JcsنO`TW&@ƣVo'ư| t }0i0P΋H۩h\ Mu\`Y=1簦{m .cW@GKg*hpq:NE=^ʛ1wt-ӎ#{PsԶWf;l$b໕ n+0R@ЈSUF23ahJ o%k>$ש DݴUc4X!l:H..Zq#hY٨H1jMFWR~Xp*ے-͸l'Xi }`M2~k86Pw2^ײLmxՈZ?y&l'l:T8=!Qx`:oQ0tP3i GU{ySi%X<$Px+"+B)hiQs0[-+&]tebQ`H}a wS%"gOE=>5 ̓/X5(E pe_d<^% [zؖRbK񨁡 DpAgY6dOV'ohwl!w# VeQtt%Hœ3b,QsHf$w}c-K H&:Z#wnXhټU:V<5B-NJtX%=lnP ]l6 /J p?ڶUqcr8I{ry1.;-= v)6*(/sV5,Jwp87huƠmzFEZwXK]@psp8PE$jvj8x Q&,yW1Ӵ 7џ!=[BLO`CI(UX{Fe;~O 1UI*Ϋ:R`! Aсbg- GeI UvW=e;T%H@T6} fLj[,Ptl+A<'2fIӰ'3QHMY32@*FJerigרU!j9o O8a >|8  LgW;xs]hLw}&cCk?%m<~}8^M<>xs.Oa%slF"ak]brD ڙp͝{/75#z_@?Zug-b`JN@&D6yaytJqCuEHuzfvw_?y}up]<|-w&/d<`z\[SvXsJ:-8KPGco+l "~?2s g~*<Ӵ<jaS3!BjY8 0jr5bJg*!DDL:;`L+Q#X4cnc^Yq!;m~Wu8iAr|ݲEؽ0p-syep{ .nCh3,׺l6[wcŻwW6˟y܀6\d (k5]E7vbߕMm蝰^9R;G'yvO'Mrr (87ϽhUZ GIBʼA9rA`Vb5~or)ύ'B:m'`)<ߥv^> C5m_;ء~ǃakX|?:S[n2ts)띃/>o67wv!y_X[#,.?(PTPᖮD G0; klLVw][z8>!|D{F4gxԏB\mu})y9A66Q -#@[W@F6*zBFU"W05+|s.OƋ7{8;{o3]]3[śD0U do-ƻKϒu}pl]yQ y4hDo42~x)_}*==v{gU{/Xe_\%%{ΗoD7-%īO֣K2B~~ٷ(&-`jR,O[BTP[i~a_Xz> bH'}='zkV!VWoBs{Z)p7uK[O:IƗ=>n"l—{͏[W$`/mgeN;* գ|'zi" ++=UX $/)R,+CA$@7Hr ԩ2-Xl.f:!pvW?ϳtʼn]YYcȸPVmq6U5*Rl2 A^LSOeYLphwjQŢmZX=9$ˏ2yvؽckA}hMH@[6$f`w~<>~uVen8,-W1.~vn{(֧+?f}o?yT}H|sjCV7(;um jT΀hN(FAzD0"?zA~Beȉ$F/wʑCgtmQ<4.[7ECMV2CC}NÑ̶PL筦])BXv 7[wocxՑQۀw /֧(E;𺎘;}LK\U{7 ya͗C_ðS80&Ϻ kD ^K%"2c|'-y7J:<% PFHe?s.}~ ] f^g=3!-c^?^l$ hNUlpA f7so+޽ү+s anoՎd?:+tٹ'p51*LFt趚bs?6EsLQ#x+aۮ[y,.MR ٶd>' SSQwp_=դEW"`BKJQG?'ݑkrNA2y:s<&@}9Fn,ZqkX7~9|L qDbU̔Lmۈ(nF+ilr6p?\hon#:z2}`})D+j>v|Yt EIJ0Z7SP{-̩u""p} w 9P"Ҝ0 O=T5\C 4 &BT;em6ewWxΉ615|D677N>̵ @g3oꙑG'{E'sª8F3o;fu1 OKXO#8/щw:({9W&*Z/ox@ U1MzKîL_?!C..|/- a_Y2klǵZ?*h(lP72"bpnڒD3B%vfzl^OMN5GWb/}K?c 8_/}a}W5/}8fFڟa OO0a zMst64(QQlÊQ& &m7fL7˯UpCҵO]j dUJ3 !hGG0!#=!͘7$\K`Bg1V;#c>wx>%%N'C岑2\+a)!i_ɞ 69I&IGB/A8FH -Q[ w>/+teiJ"ÂHgBWDs"{s8Wzw<~8|~懽 (]1_ @3׺gAqbMsa; biBUz7^"Pnh,HO3f{Уۿ{$Zwt}a~GЁPF rtĞLg;"jc0`4ZU :}vw:cAsrCDqAT%G욽4i(bpLJ"6HFWWo|s465nIM"9kMzQ|L5Sȱ^3+! SBSz nYy5V˝[~(bp8y̍_f3\@ :XqZB~tSirEΌ*W~pEf慛Y1Knj.|,gӣ˗6Q#Ybg4}i&]UARwz2t@htERݼl4_x{GSr3V}Zo;YEUHe>~[}]RތmSq388r !$8"UO䱫p꾄l.|Bfj'0gK~: xog2e }rw{Qȩ MrpKZ\z𫂅5?ƶm0T)NNZBը[TM=JLRpy ұYW*]ɍ3zn+w3Y+o䅫IR]L{SG _ ;:{j=[גszU&P.Fkrp=m$UߴxpW=vS?Qr\&y_k''doy٥7ZayVxa0< }y-"zK"vzCf4k!)-:/_v8Sƒ@V|vLkype6:Xa^/ E N>)IX6)BG;BDx4nZ}FWMNmcKѧղ> QGaKi gɃ=njVd&CA&ybrT8j߂JmDxh>Ï 4T8h)[p#lمG%J)ܖ1Ve?DxPmCp.Th< Gכ-ȑ%ef,n;H\Cg!$8 qb}(f/F~eiB*Pv:BV\Hm!_hN$ Ah}x*I#[Ne DI^/=~sVvRJHWX3y&hN/4T,!*:t؃(`$漕].`Kμ\xԔ!S.GeMnџeVhN J1;%&D!b9^ peq%=Y I+"9:<;1 l%J!GXѿ4B4*\`Ԙ1DI*2Y tI.?W-d[^wQ9 6Hf(irphM1ЙVyM4qrNq=p)Y=-HxA龞q$":2-}!;[vv>ԋ<5^{<>3We{%rIjiulfD' 1+1ŠvQJh i>| &Bb8Qx@給H&1h)GH͢ܐ K~aQN P`Y[T?CT(LqVhC/y?Nb1NG9Z6闃F\$+͌YEbj:c~> }¢b2:! >qK]:dr1euL$.W:TEy<#zLKXde[9</,V̀36gVa g?l#¢B6I0ߔ&5ZN3uYevZFǼUtyrޢdyFU6tV);Xd.yM~j+D˂bH/o'qGuvթ.e#. @ 9#(8<_MH*liQae;}<|nˆXM-~G5đ*phۓI8]NR5!ۉf }D|0bH0O ~U O~.1[A XAR3#2AAakRd1``|^lO͵ì)cy@yW.]}6oJ0Fh *WA-mmzPyDU"LeOwN => Dr+K+Bnh!OoM}Oi1<˄#UMle9[OMfˎmQbIS g0jguՇiA ;CuDtxN[jE$h%5Eg{scۣgFɜ :.b<AyzZ:G%fcgMv?;Xpʄl{iթ'r8SX4f/W"+Nsz[<=wUqQ8x"7Xp9"Xa\L'm0;1]>V0F7s[>>v;BsNj}պ%\HAj9k1,|.,@ AEoEĴ:YL֝cHsbT9 n "F?@.)te +ƘDT? oMB%F8=]ult** $*sD`*%ɞ \q5'w@*ŋe:1E7%"TM}?̤cJs"`0R#4l "wD4Iq] ,-rQ/DH0˨ma: aX'*jAAW\,LZ>}ΎsV ZꂦH]̲YH >TԣpMP,]?;k6d}w#"T9]%zc7Uݒm+ HNw$"xϡ:X _F _f']7y8ӱ&d1Ix#ΘEh* _L\\ j4 JnEiz78! XuNoL%le9Bb6.o+'.i]g{ܬ` c%Ю_YW~KJps@`ޟI Ũp\qr_pN[נޖew,|vJ4 Id|Jzޙ`"4+^Qa˗(8e%Wgj2fvekaIP`_7d3VD٩.ߕ^)k<_ 9eY(3~"\E?{#` `PꃗQ3}M:Io6ATl `AUJM+R9 +c&dXtFM%A͂*fĄiLZW-&rlPR2.(eWFY {;ƈe;l:|{'^ UĉJ䝦{P WC 'xZL`\B&Pr5s-_2Ύkܪ6HȈd=1c#sw- pYWR+tNdX;v!Iج-. $ haFu^^hވUP:Uy ^hyWxh!pWt.ܖ}EfCl=Bsey]㍇&ڏ Vl$vbdS R_D*ˠZu1wbbK]xi/gMөV̋ejB8 0hW"[Lw,Vl7U{S[l9k4ϸ wYPjXF6Fi3\FɁJuOݸx~\L.ݼl%lxLYR˾qw-F )<@9T30~b/Ys&3[5AϠ^9[KX%(j΄pk.W`LZr~ 4I3Z)}!=;O i=IΘ>KU^9 ʹnG!)80 䋅sZ qkߜi͓+6d`Yj[MWlm܍| 邅 ~866p  7d&ŽP h3VaFl]{:bquP}hR<|v_:f?$;l$Z{h] BdC 5DXvcdI߲eO} :НJ\XUcz6vM)aTw &Orƒ9`ltW/ێy}M,_+VL'ʯӦ*dZ.ekat&~ p(KDs'pPE'nV˾<˾ "ӾO.;P;(&Eߒ #3T8&鵞fo`=Z俩x++V=* ]SGX̰6Og, \ZC 'myO~4﫛7xOQ"xWKQ(Vf!sA ,c]7+d[f1!oh{5h'j I:O2qTA"R` _vB-(>keX7!zf_0 @6nӅ- rz JNr`(bΆK}G;>iCRK;;+E23aq#tiA,F1yp3߳s[re3xp4{s\@ف(M]6k֎#ZBzsp'ygK!bz!4m͜  j6 v_+D֌MC}ΆLs+$kX$ 9)WY;Sj?!- es>ȡ4SKFV5O݃}&ufXI3Ϙ# =FDmp}`9"]*-Hac}eDֈa1oen(6W,(7 Qx|!{sȪzXlCD}\aRqB'F8 NܝlYͼ(dNW+:G/v}{^Z=E0i%d肳}u!wA}GST xkTZq=c?Ĭ6sTdeOf#EwD&YDC6 ^[) Q+a١%vpkP׺X:%;I8bol$; 㑩W[nw+: h!@p?rKSxx: 5xo좭2,j[x 4 .AV09\V0G}t^lo3֕&mM% T4i)"c_͂mI#1xP o6N3+/júXwawaLc3.=8 yJc\,hLuAZAΌ'9?`"R C1 #Iڡn5@E$6[i<Ѐ~h .o cR +9;Ptx>7p>Q@ [ 歃PCfPD$QhXZ*%vۂ+@\;Zk^.(]^-WpB#2Wb.ؙ:oWak f#Κ"l?o:ة! mUbK#l*owMF,̙(xZh*Pb{BG;S_ e*2.WI"Iܳـ% 6lf3wNb(]UQf{۞D1!< m;IsWեj0 D=}7C#+c t8Q9@~fo<%z^xXՊ_.nVvgnr{wf<`g-ԝb.;_5*2䌳WD( MJ!~`1º] jS,⋴rs@H>wP3 nC3r",bsEN2;[ĉT{j &+mиZG!N3Jd'yTÁ]t? rE >kŏnFSn0M6⩍52\';/Wɖ݋SXdCnQ@UcNŒLC<`CsX">f 1sB-tBo,ǻ/g[k)4 }jϼ$HSp$g/4](hǖIAZxB 5r"U<鶻@d Ӑ!ɷjM[[*JyH>:7[7F&D4@op''ogh8 im!jyku]hͳB~[uid]kas@obj _#kaڿ_|/jܞף|_&iu5_+:y]r/gu5_Օk|kt5_+̌N93Į>StPBŇ1pԐWͫn_5/{`dJ,x"ms6aj4牆EI b5N atMea+"!(Y6uA_YLD~(5N%mj9 :&^/#;Lpmn4Ľ]K_T!LqKNyr~z^S6b=@dej9wp?򆳋{_򧠆Btfmԓaqׯ@1=N@K&"SJYut^;40#ܞIʚ+K/$KHvYǜt&;GbPCV<,;g 1콍~:q Em :s ]#kwD83:^/g^opc-ʙh P6 DCư+|y|pw)s=a;b$KV&=Y;dG_#\^rM ڀMPm/yԌ!-qL+ŬN6x*?Ȅ%q"p(8LLy(DOF <h~y\ (:N(fm^ c&M-5ܕM\s^ik eF/} >R!ǹIE"h;:LcoY˴l̶5I;*ҜTK0[K1hF!<ۓaW,tHbEVr>Een no| H[乗좝’P?u+>1}, <Qs=Kػ,aw^K2E3!ZѳYq밵~jFm~3kF@=T Iꭕª>5zIJSSe>L7u2%/D nff҇cۦ6Q%J#iM:qj*Uk8a: !tfÑGż?x̱:Tf{uo.*^{Uw$q^u:5X>]vƜŊX¹n~HV:/*'9!-*; bBf|p Dj*+-S+JAjf`$[E>TOΡqfƚZ'RAL8*x6]ٚCjyn:tIpd]Å+(X1Oz `:%4,we- /D,\0ݳٛ+F73Ҷ58wJ wK7v3"40S]hm/|iCr3h 0ɴÚB[k\AQ$2s#FsrA M0){TDI[OK rlԉTL&|zML PBlBB05 bX4чoP^*8]m [KԪr_{8X[i5=$Aԏecƨ%jy3"ﵛ{9- K,~ b==XݜC/j~hUW痯tv!e_+O2}[15|`-䏰6ocOuɷJ@)A+2p7w2lm4Ho]@ZĈObw<1e?Hɷ\Fw,6UŸ@4-WUEVe%̶LVƈ-D t &?uYq$^i;Z.U,V GAեv[ "= _e&\(}'L1ak㿏 d^oqH> sB̋( -uܜa$&# "UբӪF _הQgCˋB3ζCl}RaX?pJ$Ԫc֌bAL%*'+dX)Imn SL(gdWZKe1˱9MI͜^+{o5قIS1pHnĭSH|N±s"}5 YWUjyqRX/ ( kb%4%}e3u{0qʹ ` ݪԶ^0e%.[ RH{@b=ͪw"*&Tg}>H)|y^^4/&{"b|ڮ4 _6Ś;v2e|8 wtK>9j`1pnfKWei:U3S~7>Ci@֪B^`y#Oޏ*G7ud#?Mh ~&o!_~>jķ!abpI8Vf Pᣛ3;?(lUhJy]APg PTQ(x5JX' %Eyѻ ])c& 8X͘/|z2*&+roWbqc˽#΁˶_5Vg6ɲԥǮ0O2a4 Um+B4)J;dc‘FzY#SЅRJپsD8fiw$wgc_8pbkW@W^g #/j`.Ҁ,#f-hZ~;mfN&3xB0xxo i( :ݻhEF 'CRv[ы#.$ xK)/#~GC}ta`mD8fL:Gl%2&;wp!Hl1|{ׂP$T'E"+XBTknTϴjq|=;8\7+A_fysϘCdz2P@v)*FNFg,|#xZQ#@Orvۄ`p:xVEH9Rg)kRnzU  0# "bjn؀Y;yЛ9/7PM8=vĔ"Z]V:RdP7f7;}Zg64 iQ#w8T̃Ua 5_u0*p8W A06` JQg4N E bQhihݟ3+fWקTAb;jԸ,[tA;V.-[,J[f5*̦MBS+c*Ə,/*Bm@I,Ξ,$\C]PwdAKdB -K<>ex7{]혀GOI {Bs[ܜk0.[FO'j?9zgȵRp;SnTˡ̼3Q7.b[B8-B]-k"9Rq>g\Pqg;"J<á4.._^Rg< +pC8Mӿvkxp+}%Gh$HK *d2( 7Bܖ˶鰽XuCEƱj7 Jn OLWV"J乹ҦF! q.uH{*,(C*3Oe  r~d#6'Cr'Z Rs8 l̞;Gu$ŠP dr Z2ȹvThh]qq~vAAI&oULcw4FIe]D\֕Hf\  ᵺ%׮-kqEh"JN#UVF% cH`UqhVCZeWPFP֗<1ا QcNE|YE5?ndQ}dNOnh΅@-6CKCVq::H+c̶oln1" C4D7Ӌe۽E}@w)IaXEcT%"aY$EG&RKhM=X§J? ecuTE 2)8ͪ +<>? U}EU>i(dq&eP{B18#xخ'i-,TU^܌ 96$iL?f] h7#/Kx CӕӰJ~#;uUl|w#+Ex-}q#@3aq ` FB[!;V7's`P,1ԑN.p(0 }OğGC>iF'ct)G/Rwg9BNC!?ߝ0BJTҷZG]V9*-F#L{]UO6y3~}' B$FjL}矋]yG/wRVxgK}™a)$ݞQܴe(˚8pne[=b:Dq4 &X9|kzA.8x81o֡Mm֧%nL5cfmd[yA)sr.ڰ kZNPK-^OsMWPKԸENz̲Ca @o`k4g0d{DV"W* GƒHnhH.0u1L8 rx/LMAQlȶ.iˉ&;Yc#ҋ?e%]% X4 W0fB?-A:aJxUTMنGᗙž>ztBgQ\IGF3G2dI rYF'Y+7{f5po!c `0RcSu<0*ڣ7D68/g$,-|`T5C%X,&Kθt,w/j^ɋ5b]^XS`zF̀\} mrW!4a|S D6g ~Kc[@;)e,чNw$(gEWm0`_AT&ڃ̛7Sop)gőD_ ԃ!pYMhGrij44^* n7b_Q,K~Sj5nqKjb3t JTbӯ5NY&#g9\aWɉC. y  l {O̢YT^lb<[N!7f]Rg3$?=I֥~uc?;:_d~I:X)V I^>CthfJY[Q,\>%7/;toňlk @,M>Z"upj+"<} Bp}e '8s~" `<pʞ@-'ࢪƔ^j@NGX9'K"M9NJD:hQ`:lcW0KtlCFƉ >? s^ULwxSߜJYD JE~ͩ7`31cj要AgtʥQ)"va\"5b$t}vspҺٯh@l l%!k|4Jz*/&ga7H1vJjUiL U9L ]1L9Iv9dApi_܍P/JaƊ֗dƨ^RD0>qh2rtwɬܞ^Mx rfRp ۗ7GZ݃J1S}]\zZ)J9GlHVr&?08`mf:r9 s):yóSu80go/$ 578;mb nrK)wbe)+9gnk {z N][9h&jP0(b$4d8a<;TԬIgV1֩kSn$I_uc83$j7=7/#ލb:J~aE樏I?R)oiwT5wq쏓sBcwS͵ǵRkj2fsި~YDv2Mo!ؗySdoPf< * (xV5z"43DѓPN?}|yQB(˖ NG&^88;+.;`'?k}^p[jQbF-m[VOlͼVo[?((9]Jq/V3~9/7?R%L RG^2Mgwf[=zV>z\ZoUxG#-׷^xE d‘+a|l(M$;2ff0P ux_"(lWF%pIӟy%mH4-i#9sYR'qgv`|}99mWi F5ăm Bdh_:4Ӷdbl>A#xayT7+YK)`f^Em\/ZLw;ȏ}ECX`$YeD~GԘ(R҃5^aP}p>6Zb[D$rf[ٺV N'6ǫlI+9ܘ--1 `GwK`Aya-% 濔CMk-"*ymjh=TߊP%,ipM(lsZT+`Tbľ‚-9|aMz м>GG3 I9}қ>h7b-U/%ͥ \G-Bu1捤;h{Q?;"33_rHBDi5..I\و8kz'iuXW,oZPCGPo N-hsBK]Dx1zsGb3Vs~2ꉰ/.$"iyɔQ:i(jXƋVS^_("3gZqSA,"6 OKO=}8,m^w<|kpj sIH>! ɒdl 89?,DR'˻IJC,F4adC5+A<xf\vrRcU[Js0)(12-a9[ y߇%kS t[|޹-'|>n+X.3 &M8C7eJڲW:zU8l ( ߘ tvJwէ>p038lJ U9h?Y-/pYݜ|m{soF47N<wU9kȜ^߅`; <]X`yYq ygf8agi|]i,[Aۛ\ld۠&B#΄uG*Zb͝p0u f skl˪L'hmaBYt†@ *  Rtx"ƢТ[rDL;1Ǒ_;%^vwkA0Ct~ك(fP*^]UəG^(!bG$])nZ%t$Q΁;aM.=#Dlj/V>Y=OmVeHU2 ISaI9g;0E]:RzЗ߹+>-zǜ%;djvֵySXKVk '7/^T=ɽ$w-3rEy`)3UmM Fb9#a^&6k cmkhd]O,hYI=-fGNTށ0p7-ns75hvY]O?ͽyNsJcJ.y*zrN-v”#4 2Q )<x7 k>^{oյ7wLB`6~tZd Y 7_|Q P*GF>[6񰾲I0dN8r?}:b]6己 gMq Ռ}sڿ݉R 9_ᛉoYr FO$&RGA4莻ɓE(F}FMBW!55QjYچqIx$4?\s8tGlANkkfXCL]sQ Q~rmXX 47kV`Ņ ZfV9wY !Wjcbɶ)\ 7jUlPT8pI'=aCgİKMpK-MMJ~fv {dXJ+}NeS6U=gW)M$M` JBJ@:EH ÝHX8@2W2!Gw&p㥦rXyۯ|4uR[]Y{`VkZ}f:ˁi|<͝7'鄹Sm>7㲱xE8uO 4Ó[)6OѼ< `αNג4<0Ⴎ,ґVvE3ƦzG$hil.D KGk1=@ /ekj3e,%]++;ˤS:_@c>@ z*?vS:b._ B K$ziUqmHq|=Vd8áǼ˦䯝vkɘ9gbGͅ$ҝSE~6-Md_Ösáb]%t@*bf+38-^*4=@ YZ\>6}S9cE g/ bBiit OG>ͽrߐ.GFrWNߞ!)N~֠Z[Piyz {of{ϬBvv}I>ǹlAš-JFPsαGS5Pc-\gsqM̮ O@(q8:{#m'!w[+T4{8m 7f܍!h2"ߍ],A !Lݑag6]2kȝ8{j F[1_iadR-C:`\VLg6v3ZʼnJT0r?xsse5q0Tŗ~aƉ27=|.ڞ%a@blj9]< gF8A-ӘPC!f jcڲ尉֧e;݂k">< :3!w]o$-D$" i!($y#bZח~n}*pj9,.$U] =$CN MP?9j AqWu~<cݬ>VE݅D'˽ȴF[}<>VVȬk՜>Z \ΙJmV~-q9AkF /.}sL rCÂuUʹCi3LA:uCnYK?e?Ӄoda4ާ7òo ?2LnS[$\@3ML 챶^䨥 0It Ǣ>Rv?MNֲ=Vg;4^<[Z(a߇ )A(92INA$W\Ev\gFb,oJ\_&&&]KiΊ" LOFHmE$uBPi8FInR"oR] $ElZ`)aOhBI:&D{|4~G7qn'Dz+z2\(OQM>4]UdoeM(n9V4,Z_̡t1J,Se0NIҎxf[zYU^/lRp 5 r_oq夙5ut7?Ȼ "4Y!&5  fHfuCgx fg +Ta2oX#EA{ɵN;N-pA@V|qRT./,T}zIS#}7>UF0!ҳ_0[c,R< $%]jWŭ a cfI\(?WbO'p6.R@|1 "? Gu|%߱wU,.iig y wkvKgݤ pstD꯺cvʌ NdС%j641;h:H=NUìOz3o*6o`.-eKYbNf,ߌ0p gZnIS}iwk4m+7>mnKz=ؚfv#k,ͯ{#h8˛Dk7J(i'k=z{=-0o%7R$+3~sd]Ǭ&EZә_Z%Rm@]T_;n@͛S+;#LT9=Q88KX+qr*CVwD ΂ xw3q6/۶ȷ5KK|AU es95(Q2ɣHpby$*kdTPdiɉWMzʦ^>,bԎFCgi2X+ e))!V)eÒ~ڥ@Pc ˖q$!z׆GwrXLw,;FPWl=ٖ0aI~>iAO%HC>KͩKK&wA,R_hop_E$l[ҋXŠշlGMnT@r1)!7yfHl߈_ oZًVƦ ,D ­UݪnqFt]B shLi^|%b.~Id6'(ڠyIf!̂§}OW@#Ƕ6SHfItiEyVdkxH6W:RH y/dkc*|fo&VF^rV#,5|3>t0[K? vR ,Vz9ޕ)8ݟ=RmsZe^ CZ p^ߓ/M7@ ߠۼސ^TPB7oovfncvey*nut,\x!%<'>,mc5Fӡ|D |E.X? `h7WeL-YS7[fH=Xc'B@/lkulsϩȭ"7UE9?PԝG.RPBQ>zh/5T=`v ,M^,m}㘝 >pg; `F"F2k!b<͵Xh}F*Kn+g_iŢ wsE7qzfy ;,!37iLca6[|͍-L2Y;0Kg35[mgU\mx'o"(Zwd`{'tf, ѷ,YnPݸ1T͙\=ngH-s׀)xzEmJL`]v{0%±VK)b=^HHl8u9wI2ԫϖr %k%-~L ky9 r"h ]98<`wǯ_0E [~+8‡zhQ_o x}$o1o_,f! @fOf 1E,]T.`%I0a;-/"sr L5ϳe[9L?Wu"JĚ=EƢ+3I,(F# 8l,7:ډ+m>9Il Nq1tZaBE=!cՇK~T:T(/b".j ldJrZ}|W]ߛQmi~B hһrp]GVz]+-R\k[Y?sGQ81F2dX i:u,W% 4w$a-xN!J( w8N%9~26?ȟgL#`oXs Ӏ=ÕQ]Y}_;nݞ.¯Aktr;~Bi"y8#0X;ikȦ0է/ok3֟ANPʊ(`2KӇY,/¨q*\$QLj2'8#G%9žrD|7,Zɴ HmnY,O1VjJi7k/j:x?mn^bQĂ~xfR5CX5:f#0 ǭA,C{g_1LK Μ0Gx=ӣ/MPl^7 ,0ɚ2m/5ko%092Yf.ԹD'\C0-PTmq >"9eS^_'ô6v=ˮHiUC-7қV]tauKS|yӮlnWWX?LkBe7^gu ^׻3t ES4M0hBE EM&;`!*ۺӋ'Z덛t?3 s6L5U]_nX\xr)hr kSLhu{p۴ihrKaUҍKRX.KLyŏI iM3fH(Yno@e:&"HlS=E,ήգUUG1Zפʜn\,K:rqKL3/vegXȘS[-l=L3J0gc-h͘lͽZ G=5Q`m:N c1Nȅy^ȡY5 Ll:`5ȥ22I({MfeA?V$__+P{$!H"pn_8i_L囹)?5~ywyf&21Z`hop=bo,2-kZ&EXX% !ZkvX$}E_l$͉x>璂HI홒M@ҋ*]: }2AO+(}b.DTrRm`OBMo,Nx Uȟ…R'P2~v]P3Seo.dF* 3";SSE%tr$iocd?Ga9Iåxͱmb_^YgoNިM1X|^gkua=9{-$:HG}O/ ĿZ[jo-tȒ:(wX`tkewJ>6k 8^lD2BH7x%(:#nTh%Kb-eMNI& &5Zj}tޥLFDנH$SH%VKٌ.;6]K΅Y+Q9o6 β\J޵(J%h;6(J4'Fwk/> m:= 7(z)eQ9m՜%9w_.TΓqͭT8:xyj}P˜y`V\ʌdS)I^)/VuC? ȭ]F»㒮x(9Gd ʯ+&w[qL%j.dCug+\u+G PQ3 j{: ꝏ`&;s̔]5!!-$Ukjf.ZW<,3p6ڰG^_vXXbeyM|mVC[ib/[; 3:Pf$G//n+hk½k_S"1/?y_r[uQʶK|X.S&z0‘  e356IK21USz42d~w-3zƻ~uq37%%$0&|7D-uQ_P݃wF3v[P~o@oؓaV;'&mur>n2_q$5L<>?8z b';4bV`ufefCQh M;4]ZCVPTbx/mS´*Y%Ԩt C%̳-U {*" FΖDmM!sV"ւ^e) 4]3K]!䍈6 ᡆnHh҆w9LfjM1H-x@]K(ivjQ,D 좺 f٧gӡb/껓7 ;fGP}ञa1i3d:/aDžw/!1U*uuqwxp谷)hXp*VOg}U*= CiVCw;GH}aKN,M F/8:6>0b `.,KӒqu-=lK)1̥x@ nDQai2:˲YEbO\>ICVg Y| VeQttxR`Frz7;c}ߘVYl1rGꆅrEI$cV$Si;; '$>p^xҺ-m^ [~εmh p4".;-= v)6*(/ce8tG.ߠƷ!ia$MGrO1'y$ ^D8qxVz& 9Pa➊|68N(vڒ~@6֙rG90ݭ"ⵞgC8͒CEqUǽQĢ'uO82P@\iV=881鶵{}~Qp3o~q8L~5~Ƥ؜C}5kA~նnbbVwJtnN};'mTʂR8|ZmV=^_G[}kAiڌ&2k!J][~\[5Z…eS -Lgg-('ti=|Zɱ0O2Zѧ̹曣ue>O Y3#@Mԯ+ib_9[YOM_58X2{W08XmoLo+{.v Wɪ.Qr ' /ژ_j4 \RD7O63uh RWqI`Wpq utĻl*lF?ً9kǽ9=VlX7cp'To<7-:ig@`w@}d<P3SsN*e)F2xqR {47#;j5VdْL :g]}au4)"%Mq .]yFޯ(fܧ+6PaRE6lɮtd"kL%[Gz*BH2t"JVbVI,;wBհY]UX\{a5A%دVC Og ,lw.Sfb, Û Lv@G\Ա 3HnYRl' ÔPtF P(] VȂbLR'l[聾:_4pH4A 4a=5:"<;&>*nش\k1|#.[0̵kmNvh.^8~cNח+4-H5n1hhoq`ɪΧ u]_kyP RRcWJ~iPL_K͠[ ò|R=<1k5&틬Vj7 ˱۵rY1NŝMPv͗]-=m5YEG1P2ȣà ! 9hO.Krϛd!ssu&ƤAVyK @ 8uՀTէߊ?dMW][(<|oo髯}ζ r@<87Ri^emw+KE:^iRa _3,ȼ63 \/ϳծԱxߖFE@ C iT oSEfXn"\ɶM:=*'h7jhJ~%lfn6zg"׳&P.mv*UL 24V%}n| (̰2`LW@RbeE~nzKheNT2N1)~g dUez+c0qte ?X!d^Q.CX9COnBe+MnKՇ#-TRL? Im}3xF`eJ|%0_{urЪ@ o `^~[v09(2HbQN):],, &:-]1[%5$PMIgP Gq'^K|ѹ޲VuPSm;~J nh+pMnscg76)U_#k8Y 8U` OeFMXD:,-ue&[""xyF)b(TelJE,exT"h) ~ŀK)_]hVNEHf0EFWjx7[I̍Vp5%r$vey2(?Hj+ _2_R?4K{>^"i\lkfɭ~C_Q@_Dt~!{fCLjwBQܷn/7X7/ܖzq r'&e8i8R bH,d`LmѢ{P"|c䲛܋o͝Wg"kfo TK}z-y2gO>E[W~e֘\5E;ZqќP[\V,^oGe0Ti4`eIRî/3^ک2dfCkM漍kSdz6+{0ÏGZnz5]e? 5SoV*}Y;i/Q,{MưhۿGeqㇰZ][f-T˷P-BLjaK~MzW{knx 7JDEݤQ& sGǣ7B[Tt{|d~󒠵&m8G7+dL]5Oz4jha a8obW}^A1eH%XAH[JF M뉾8a7m&΍ kE" xuZ_AkJ*E]S{VEmj(3cN0)Ⲽ#Kx,qbr쇺P Of. KrҔ rKeJV:Hhq> ޙ p10l"$~4Y>a Ab]ԖLq=O *H|e&\AIv虚jsu0-rjؕ{91Xo T#K⽴z/ Z1?5wyk?ڶh[9m3,L0?١)z=١;BvkJND%uv֛% -vt +jd4ۄNEV4#[\Rj_F 9VVE@^kΉU<@t"qPfCΈI|o x4Uw5;Bj< vnD#>u9 7qjp!J?Op>ڐwd5Gi*~D̔#;؅qu}zR"oV/3Abbԧwk.Nxo=״+WϚ.L!s=v[,c,N-$|_ nK/i'æl[},5~ޥ]{s?=ň7c4aR)SLƩsOϑ3eү̔+~t1cUqf1[>u c"Ne(6mb95]?)<6@$p֪L>%m&vAH4jc1W^zl#ieoAC?4!\AfO烯qrXlRފF6:epcd ii8f,I'*Jk$ӺfHKĂA51nȱzM5[kVMTxv.Դfvt>,ۊruy1]aĢj . +O^nJ)!3F8BUAcvu? |AԲzfPzxt<}y܃1&-#W+- M0?8*F)fI0 Q]><+|$wŽrˇXo40/EI1Nd&Ж9s8CCM^ޭF:Z<\g!XGn/mV1H*b{jc3[e]B4,.mҔ̑cB.ZM+笜2xlgsAeOlJ36c>~Sٲ g:;/QY= aHz$OR~uY NHf/+FRxVE7ΗĜL($ХbX)BpJ=3TU,=`s_lrSK 2vրQWCCE0pqh8qEޓlxիѫҺfclҁd-6$qP$/\FIؾM)ޔ?35yhČ Жq*2Nc#K&VƂ{[SUr]Lk#\ˠU"GB0eld{NS)k.h: 9s_5_7^k~x?9L.A:,b&Ep).h#H~+ 3R%5Y,}m@ ޿.$j=E[!Xn۬1۽T@ JLpyb'~YYvִgIUȈȸugp{Q* 4#EhN!c3#M8N<2}߻C:=69 ^jNU5hEdrHhI **k$֍P}88֓rjdUnژ**a|~yרs7"w'Cn7i税ooܦBq0S.Ѧ|jMBB8B8kpGh'ޮ9iרOY%2I{Ł?Z,]CpdrD|dHv>bOWx68S-j.Z|}l(I[f4)[qIȨlt)HRv푙%G)$>mKnuM|M=5\aKSCJ"36:Ā`FT=fwcnw{DƟw뭃6eP֌Z1H oEF:v,]V>!1!jYSΩ>\E9ZMwlUu܄ZMgq\"hxK xAOig 4hxR9 G VNi+kYڊ/JfU Gv0@:n::Mwf#LceKv[Uz.KYwi1X u? ~ߥFTl,/e/ՖUV#ƌDSwnS_h6 m4' W[ b/UUFWY ƛ酈t*$Ql°n,TͅW "I7[fSis/B_})u9F5Z; #`$1J5&Jo}==<1w`j2q$jj%!,茎.Gܗ3e%F(~ȎZpeaXQe {1LрAc#4*"*  !y"NM7@L_# > ۏqU)RqNI:36X2 g96-m Vаe)f . # zQ#M9.2kҴ$EC2@,X;<"yhOsh~2  "nKuƁn4Nm 1/~c`@ V+#T`0]bẼ^t\x~MM Tgt>{+jq%wjrTb:4M[JqIXL8casOy84g[!=19U lNM_ ƦjF<\#F][g:@ ƛ{b.~FRTϕ_-0O&$+6v;J'vNF<% gqFjaRjvx8dkzIZ?`'q8FI2M"2U 9Bo[LyiH%|]6#23z,I^Ll8t%ao}tަqQNI>3IgRa Px)+I+4kǕ՗ !I0FDB^+wC][a1wƪVSPWy-LXCh$sl;j=utl bSK۱_?"߬چ^| 71I]lۏiZ]{I Q X_/,VFV+r̅GGFX9|\^z00;5%^뎎>pl< yc`ᒪ"JIN{cCBá?{%vWdڝa>oW|"$u^6'eC>HBǃʘE6Xozϩ]Kt-؛#q]&nB&E u:M|x^eEٜ377fMx3u~YEƈ;92&ad-'-&ZcB:/۾.$޻x4n|e#Ds=;#oܹrϠCEv\n:H-K/׾*qGS[Z(9u%V94똫Ԓɏ "t.wA,DD|B~MB/QUC_ l9PxcMp< wTLLT.$O{s $LEt=vb֒qk]"4uEMɬwf|w6Չ"ߧ&0؝]qЯlXv+7 r6$7n0eɌ;2S' N!<9:W6#OfKǹR-1y;P35#' T= `&u_V UGђfz,ЌPtS!DX1"F_B/l_^ ,kSnx?.A? %h%) b*XZr9:M xoֿGF?RQ*q'mdFMSҤ<6\YJRٜXGN/h??_A^&許pRa^e^w=1\#vm0PHqC -7{A-eV2\ʤ =K:\5 n}F3Yhc?d̓ҥ^o&B.[-5R16Թo;ɳ֨i"V#0`su'TB(\Pps,v["1SQՆAQnz>=I 0hz(ҽ^OGԥ|ޘ`;J%1,0s0l̤ds(®DJ6ty3O/i_%EaJaIڱ-aFRӎ^[CZa:/` t\7j/gP1IMB1 ڑ?-AuHHQ&-23]naH8 iF97/[~C>ޡ/C \=Uk)oa}R}xfִ\y(f+o}i-@|݀eg*܂[U$NάWbq.aqH'׹J\׍2`|oc2gYTb\@&\YKaK<gD77G4тGX(Ve8N)[!~n$`Blic˨b4Vmdc26mX.qS"90!_:h<8zw;L\%]zW5lD'"t5Qf͚wz߾vը2]BJa݉ Y6D#d{S̮=6xiJ!/$2",Y:쁸_P9Ln'VjU5VZ3yW#+M<> syA t}oSeIZ~X0/6~LsN[03"أ2ͦ׹,rk$]-J|1؁MH:u/X|#wN|?rD`o<9uqk /I|;N#ReE[*T 1*IW v{ۭh %$icnz*6G`Iyƒ L-3 lA.S5*ή@b@KF|E ;cWNGE>7>sY|D4ލpAG} ۜsЋqB+spmKeDUAa#)e➉ʌB1lkjhŏ_pJ6JfGұR9btn]u˿YE, iA; d"AITחgy|uq{o/|ׇUQ L]6k {5x80Q;:\/J/EK8͂*/h%$ NDRé"Hr\l|; ޾1*/d#Bb +k;ĈiYlwxyD茐GuXt'?U @9ШݶY?. -QᾔJ(TѪP7-% YFjVcoݺȝw/HKeé.R%[Cl_dĶcc\B(2"f.=Jjǎ4li417t񶥾(OHذYnה2b'ҢKwTq [X;Yq)!vn\ZܻN8V!@ZlROlܨ8|y?|(&`F1 bcg7E$ob?:ŽM8eJ81%Xși1R2<<T~v,03'ݼ"T/  `*;ka|h Q F?&3Gئkw\%d&HSst/,liwf:&n ݕ-s_.ݡ..ay1Hy E&!rz)D$O."n$2G(smcni'115UB jp i۠;#!!ESG!SNeSڰD.{Jq=Qipqpd퓶ab=.\>QY8P^1Xc iW#DbzK/_~ktٱʣ\bUM qiPlXHlS$p0ڼkġZDa㎩r9\z#iH;ifX 8M,AM7\BhPYX_i+4bX\\n =[Yŕ??&׼1(9MLIy Os`Mn \q A,HoO ϣ i`.8j8'@ & d{ӂ-u=߫ٓ''ƚR#d062wbApaoxKZkaF>>KL2#EX[P& [g/|jhm8%wp19(AW&,[uGG# `BhEO94ACq 0tlK)rS-G{hبeDA#8J(6a7_ucV9ڂFB2+P q\ -g> W%K[m fNǸS|33ph! GuNx{@0~"bzϱp~ Dy桿ik|,H6`hQmJ>D[4;;olCty |0 :w6:d>KJ;w! fU]zq}V.^֕ꥢ?;?ϦRmDxPYqT.}_=yy48߀ît!`!l.屙K~֓gl3$ :PM)8HOh@wލ}4GتW=>|>;E*jH\Kٔͦ7`u׈L7ţ_9/#ut1Z{0릗 A9uMۚ/'ہ&7s N8 8qAN?|gE:޸TS[n>KcSc 0orN+cqp|>Wbdhrߨ: 8^7_(P U{8=uuƕkulX?z`Ef8'7jVHmutc_p7g8-ZL]]khDV(f;J?֩=λ87^dDH%/+a~LsK}*6㼢X4kdcrZUqի"556VDj,̆~ 8[ڿZW C<\&6D=fhwVN=N| Rc:Uq=GUTvXEƫqt<; )(kL[Ga *xPagi0 5a㣣rT?>>:>'u;QGs0?j̺Hͻ*wX;;&4/TSy,ժnم9ݕyb%0Aw.b)>ߑ91=;W&bB Rq(|H MDDO2lE_(ɀ=?,X5 = q܋t8xS=ՌaJ$hv5Ċx&4*q 걡*O ? 2cf3HE˗PխZB$Ov䟻[mPϏ(}a g]j5Q %_G^Y2ކV,y/ ]' -ULA\dvߔf㗴ty<4mLK m~c,LT'V72 D^d Ŷ:.418M/Wɺ5O9̮ï8x>-ϯB?D*$#'?nǟ:w7mm")ڽ;Td y>.xNp1IZBtLP^z>H~{YgRڒ 4U?0C6mp>.I+^9TQ[ڍTv[ZE|/6W tAtTS8 y^ɣG}^x\$dȡE˹]ws{|>S /dqxpzk@*65hc${DhA6QIeE,v)' G#HC2!ggr {pRa0wXUW<06ID VԵCɶ^\4" *}asC:2C1[RuuQ N{H٥) ~}{kBmXS1Sn>yT=]z0pa:MCFo+nwmPsDǺo!OmCчG0B/6'pt6oX#$U <1 Tuݩ̎4УwǼJ(ݱ8 s%ڃO우$H\zp(83"aME iL@^xcr `֡p &l8Iĉv~6QhH{fʿC0p2p7+J{'Hv>]AsWZc`>70CR~TQ툚>e> lyN0!\H,C0Xؘ|Gוv;4㘒}Nٓ~'<[|\hSpAԫT iz):q5ILo/|jn.mxx,91.FUҬSpQ8!anjxF'[BdDzD#-!3O~{P%ˊ7fjן6ÃýO;?6ė{2Ïz q('W$P 4sFR3o sB7Apq/tt9Y"Q 4=xS K6嶈W((T}A';Qfe耈K{A|[#/ w77~Ÿ}X)NíMso=Ís #ZhDr|f'gfK{#ڮGkts"iiedRQQɕ%Kɴ3Ze{ -C-<ڣ֯\urR/-g:q^ ~QR\܍Q ;=ػf,rmd|U xqo~=z<:9)#m˗?>va*` ;PK: %8"aꞙ_qEӷZ6Zlܜzϫl̓[7M?6V?gBcy o)?Hǿ7`P.bپcpRۮ<enkĈ ,Ei!B_ %@'YU~}<׹1-Tm믷7p& #4'Q670'YӧjTg+=QCHa\yŔ/@i :SQ)v=5敳Yk%'響翓_?4~g\K ńX|_ZYY?+O:52 Zׁ?`9a/BÁ $5 px'ᔊ%xlM }W CXo.&]ctj\{gUӂefRA?!ׅh"s%2gC@IP"ׅG_Cdnv *dz5v1+jAY`LǪM/0:XSm48Ƶhbap*4! p{l70Ƃy#ՎꚐ>RX|'O,1x4GD5 x7q;ы+1gk,K7X bi2Ǘ1q?ɏZ'+l+ya(G?^ &pt89o-tT;C6MU$ģEhr&QkSѤ!'Jʅwi-D[.HM2v_6L}5!H #rIF9DZyqqPBQHXGBMkNE_ȫO $'J\T 0.q:;9vŸC%Vfܝ_,=LC_%Beiakg+,qUśԔR Q%2Oxp3HԿF}s8Gӭziq;iKΜ$?juʥo?p2l;颺Ʒ#fvvs{w>Pg4|pt'(ѩb@<۞7|썍gBtTbs]&|C'Jb'oce3Mf9OX/b]O/kFATM޾t5U $ kځ,(,ul[Y̩>AMTJ.OOD$\â´<ߘ@w4:0p0|?:9x~Dfa[@s%%9 DGYhUAE5  ԉEXll گ>lY_-əoSS;7T=>pՐP*`PHb|C֯˳hM:qөԌL题l"s5ßߺ/U0x˃T6P[yA&a[k0=Lj)g_9TNsKnS OLIO9[d׻R73?_/9/Ak0\+byW챵CK L8,ŝ@lx_ŨF[Bw2Ia~n }W,^ #pPOb\\вO^g·"Q{ٚ$QOρ`$HauфEMػQZ+br $AiԽGⓍnQܰs\06sTIF,Sz.~'K{'eڷSMmi[?OjqNgnr އ6" Ww>Y8_[}+C8wx:8sf@Ғz?W&Jj~weEtd vud(O~K .,`_( Cr\Xs#xu* /4/HkG;GN,v vuFVg[#̑FAfǂaM?gY`ҼǂDv0\g%4D44H$R^-tH 1#?)J~׆t(/ܣA-}:h;{d*7dqV>.pT+׏ajIJBoR>FscyȣxmK*X wp#񯗓5j+Vfۘ]m=}dzJ"-->0T;ՍWƽVzG]{׳,Qy\&gi홮so;Ou;PAm 0nl~*t'1Ru>VoIXpHuʵ㪍ڢb<}˳4gtYɉ0:$\]ף?=*xݽ?8_U:]2U?8mqLDCy# Z$"5 "U#Oy"pRC%:M$,vuGF̝M63aj{%ǣ*q t39T8[ f)Qq fm95OJʭ;[ۢ&iԢFÿ^Js&G 'Gɣxh v$ /V5aԛ\AB583S9G??mu"uq6bapnL" v`jԎ':O]#gP"pwT d4{0K\I /w[{{K`uƜxl@^^֨^c9I w[@l_oTc޽ޕx3Bv3jyTq{֯D &Yz/Z˅\%/opFsĎh+먠r']Q4V8H+X-oՕWJ^up2lulr)ھ 2ύD ܥSejilDn/u0DJU..>vRtM&pxa˳[Z_rB^FPxC[1!!f呠TI7GIs WHbyXԿAHXoDo!œޝ6):z c,f|ϘGǨ[U:e:G`!ܚܴ=$'.eNjZ c WQ7k A x,ry( TwpM `a\iTυ$=*;uV5-$lKgY3dC㴪m`d$NOC1.Q0ۉ;/1F E_\#;[AIRŢ]I$]5V҇:]&Ίk>>c1k |*v9DSoĞO5?=ȫ?@R8?;;z"d2M4;1fǶ[2 cиʊ#W܌cx|h0+F2s*=\yÍ>yTk5n5,#M6?t cCQmf֜HPx@iQv\{x/U[\jƿ NF"_e>,>lo^00*6" =`55&FcaN9/., ɸE4[>a8duNuzIH߯NDE DXAƕ,,n*Z]-^!>aei@ ƨ5-STˈPm_ X4_G!~^뱩Yj2?-n8TQ΋݋c5f#JCLH7(EZRko}|:j,HzkWѠ$6ȨX Wq1P7`VKz\Sbw>U FKd}*:!Қ@ݧ[YrJ*K=ˆ/'[iNrH.tjѦH6f\Mۋ|Dfsӳ0j..K5Xbk$V2| j6w Rw/@o%(lanqv%~f8* ~n9/lR }ŹƦO28VuU}[J% ?RjcFY M.#[]C^DP rY8f: 6~*Gа_xuCM~6#~aQe-5>xOӥGnM$W/E1qK dghD,IZͧfmZ2@]JZGY;MGe2 {{5cg/UU9{ra[;MJZ`֏K'tQ4V|9>q^,+2`-΀5bUTW`FnGAG]Ԏ^lߩXϭ6/U+>qw _b,1SҜܬ=O^{N3MөLU&Mtd!Y0I<1އ4ic6oyY')1[oCAh/:1 @s4k/:g 1lg>6Dk +KunĚ 8R(L əSyTc8{$]x;b|Cucr_OLqO3M62Tot26S"ӚUb2b"z0*{1 ܁wvTh `T L14HϞdHӽ|l)hwmI?r#Uʴ[|#?㴕c.7NKb*4oSs TYw:qo{bshZޓ SRXH8*6  č7VV9֪y&-y~03#%{)|).Tu&OuѤ'N|Q7i=a,{/:$=S}X|YϽUN?t&.;HS-]X4(^>~2S5WOu8KXRwD՗GO/l3 0Ym!Z˗f=0&rer7B H쳌qy̪&_w*$|q&]I"y5uuoi-FVr}0f; azrk#\rE3SEUyϋe̳0E;rṊ:^NG.10N.j%Xc+d*uWUUOy?[n>W_Odu{pmÄ1A\'?Mi.-4NRb)<% śI6bfv3;ˀB~%|ԙNGsF%f*AwwR>W'Ѥ?|LZ05K 59bIf(^7S>ԿZ:{6g>I):;,p@NSIj< ( L1`ذ'TDi*:ly)no`pq\{#޳8lc/%H F^|z DjrV{{ut8UpQ)[JL{35$`|BeFǫan;9WNtI魽5<^1 #JoDžDȇ ܿ=yRSaLD;gfm3rҡ_s3=*cvu6ILdmuUDsb0yKѣz2H0X"GM"D{&3:ѯlQ<8)~r֩o;SD4n:)$|䚎mF2 O-yus16xڭuz񘾳fO~sq'Mheς?AFs ItKx:mvxn'ÌgQ fOF;yΫv^9V`ʝF@Ќ-s#n˴K~Y4KO_fĿ`ylm馈B:D=g: :!!\q¸G©#`e?:lGT Kbu0љ.G[QҬ2+:Je^Nief2Oguji\h\Qhյ.\CUG7KY[Z#qEj̿ ҂VK<p`fۏ?XYc_# ᕹSlIkFL|-G* IHAoRE6{O:Qgv,[wh//lv2=vM#f sn R9#H]Il Pœ?U)kVJmu\zqHH"@ױAU!X@#Ds}ޜc}j5QFa8vŌI8K29:bSOs,zH:;F{ 4"!Z$HKm.jh2ɶmkAѩ8 >$-ՠU~#~B: N xI G>wsbfA3wdq8̀D|8(̀!e)Ų `Xsn &wL?} "x(*~ʱuèatM[8w|7/ {{^LO:"]Ԍm)^tN?>'Rgmd;~? =VFh4?lL'Gsݖm8^fyiu\zD0|@oG:,rdSy'#.eZrxS7 i%6wsj۸B * WGewBcAHGf)`2 a^&'\M\hrrY;uɻCt'&W"?RXVV p8+X6(yqj@'hS<׳VYOɧKy|pԓަ<]^h8 w(@\$Hv4P9~U'e%u3;F D,i6qem8YHߥWsh~OS5.~Ev/8k:$I}L蚏߱s36bfЇbc#-2_m/ؕRe#p}jj}vL* MD67P5# suP`닪+Ƃ,9ԩt|#̤Qsa[fHbtx"B5)$)*qnV<|vk۵Wވx;m/6pg"if=t֛Ïr Au;Ƨ^\G {+\#E$Jr`W?A1p#I RU|tl]|opcttMtm@d';0IvD14hVtz X[g &7QA5ΙlppWE0J%)X6b/FYuH <;qdf^ϢK -Y>t+Uxz$i;5}+68']-E|z^$->:ppOYmСq_,)rLp|.>mW(. M!#(3,PVW:.avfydA"_7 LhqΙO=L]KZUk׵10ѧJYC͠< `O|l!IB$W=;yh2\ÜT)IOq țjI2&ݬM-2bdVEPTt0_{߯9ѰpڇLV\Ta^,T`g?xE5 >4z9ӝ.{åՇFQ7 NIAcP! |g8xڱnH4 l#! iH5jG$L`sr.ghù!Jh!CLKzDaw؈%#Z0Umsg=–P+& {?!ݗgID-:o鬒 P˳A^2AgWqd*8}on1L>Z0o z7Gvy{Q+?m;8-=7q9rrؔ03 d 2nr~'bS 7{jzʞӤ'2~k|DX Lk:TeNx1wkjnQןVҝk//7èc0W1-$vnN%shOloń=H 馔|dl9̱n<\VϢnuYˋP 3#ǥuf3[}lTy?Kf`aK2M$L)P23n%U0b9+4B=XrT I*{\:ZR$'Fd&zLHPr9=8+y6IBv> PÈWuqaݦ&c9DFmx=ocr6vyhߥN$XA&rj п|;?o%yI+vLj *ǃ??^:⠱ڇO1KH4eclˆ1lTwA5ǁl6K͓`J0nz9lC9h+M!A*~7@m*<4nUTEBŒZ[S ȇ${bh~t?ya,_r6f7;NJ\R)&I*dkV[V 7 tav$Irxs*F ̂ӝuo~ z2UyW"SJZob -%G@60ںT(ZG:ǵ\N.w6έ[{P9:D2*e zcހ8 O.m&N4 1S0Ә>,MO l4+W]rK3q%J@]E͓/FV ;r؏(+l90?#^Xas/J 9|p':֘(*Cr^u5eZ3fXwr<Ȼv1EsTq~7^\+:ZkCnE4?f49嶤f4фDy:0''w+jFx ={O`,Q,T9HђЊ ](G= ]닝wnm66br *0j\),藒tuFuչv\?P'7kO=MC֚ǵܧ9+}$yH5RjWY .W3If2ӯjNԫ&#ެM)qr S*\Er hJ.Gq[c v7pQ(Z`Y^ؓnz (UxEH%ƿpRy d T]ۅ>tSP I_s?ߨw3ՅZs>^? ./Rߚh,,,<]Zj4c\h.o527&z}|%dё"5j6݈F bw.gi w.+ĭSބtGJua <Tg}68x_^P&j9q&~^S}1€&Զv7?p Zؠ?Mu3 6- B Dcz8B9񙃮vjkdLt W83AY+B2x o4Uy<'3k|[ )[v?_;*ЭX5QI;T\hTg&8'oz!^O`aX =`]Ƶc {}p*4Ħ9g- _6F:h^}lBL Fm>(Ux,cq9$ f!"P{,(wryd혧\!$6ໝ GwIqh(8Q h$JN= !H X&Qb"Zve X@lg8/$Dn$;hL+01 ^ s_, (ͽxM:"iJ"xMh`\!.q7WɪC=!6LmF7 aq&CtnD (pr]"9C[CC(Ru0j?蕮O3cNQ]jԦ頋V@IN"&ڧ%ǜ'; BT{0NkF}D _u{}ÛuBگmnBDMUU~VY 74tU:V욲 fzX+l3@X.'GBo~~!޾Wjr Z8_Zj~Avnh-~k ۸@H8ܮEƫ^VLW+k7v@(hi<"U!Dgy/bXPDW{uJZXXP7芎}w}49ؿjP=XzS]fF]A'h2(Hx= :uzW!(i)pT&rE[Ow1rsQ \?Ϟ6K|'-h7l<-"a*8OG‡MIzc);KHø;^C;C9j,6O +_+c_2x|ӝK.. {C6iRO({r>.7 @LƗ(@&+8zqawW~G08#`:$s̯QToE{~M"b̬LQ[dUS-$wv}o`ȓXTI`c2R-4Q(Q_ԟ+۽۝Sٔ ?6tgYmSs5&+61 1ݡC"b /ֿO*p|ŰA4sCm1|K`CSh0q 4>|}0}Vi)xM2/8iԾ=rX/fUE촎DH28a?`&&,G{aQ+k=4./DY^]Lx+  Gv$_9zB 𣕧'%eA VRf)l7ߣމ/_ى|lyy=8gjtٲqQpMϺM@76VnPr>ߗĖ t|hpTc;ܜp'h>EX|įWxT4|(;`5>Vû `tE˔|fSE6Y#M Gp~.5ϩ"dtDL-?sJ/@yE|z9J S/5U :k"+~6}5h,,[Q0_4}@kFؤ\.$G4K=ޔ|ÿݢq5Pp3J>iލ jt VzDS7z]ɓ?gDtWa 3uu|cw1UYLCu ?e/'}2$'B 5&¢C7v5]Mo ]AI^MӪj0%*+y1ɢpZS+6zcvpbMR.ꯜ͗&k7+ tiԯY!NB"#۩nB-6J(n0lyTq?8]e2~-NUHؑ,K9wVvPQmV82GLJqҷY7XǧB*(wB7Q ur#=J3BĽT1bh9øW_z$*,-|䂰Kaarg0WaV|߳3l\Wp2\@DZ\GOw0l,/+&dwݑgʀU`K{Q`~K~].stAJ2?O_`O))'jM@QL|q%sg\?v>fZ6DgAS}hZ%WW]k=.Ok_5f+/ꆃK9/%_3М\榊5ŚYŖRńKcN)9;3l REFӅ\T$ s,t1wEBNb`/\0^15-?.|t 0g8=eLҔ0λY6" 9 eC wXăո3iKu-ݾ4Psǁ9*5ߖlkI̭7ǭ:E/yZ[0RY[6f>aio$ P4֌>YnEnM¾b@,q0Օ;KQ5g^& OE.GUt_"ƂAp;d ݺ Χ 2ӓnuyIQ$+YbM35#1] ]V? +txoi3&@K!e4ƃCU3 jhR_k=V<7 ̳3s1tuҔ eeFVC *`nBǁ|y7{uƀu8]Y ÞAqNY_Wc}],!ә݆+N3/Ȩf7.zp:prGGG]V6"YӄW&6v@gSQ-#ޭy⭜Rsyf=36@g5^b._!Ar9 չz'z`{ .|vpl̨Dӳj%)~p܃ NU[sNR#/~>* | GKҚ埮xo۳1؀+7I(~4fT[h.[ qD~;4τѹ~4=Di}eZ1V)'i-NB,j1l.\(ӹhi$}d3,[qiAޒ.!6F2I0C Vv0l憬μӅܨÕN!9 O<FKYeZLoj 1d-HLFͺJܾp1]}-z1M#:CbL, 2x6[lH2p⋽_*:!UAYaryK 4S9`i W_X?+_YrJבb5p7 + xQNq?X&C1YsnI܊IΚ?ZHczvA]n:Βf A$”N,&?;.]:?/k[`<6UEṲ=)351?S4#VI_ˇp2G=3Ux4,yltyb_(GD%iDMy?x Q4e*y.~;[[|Y&OF0]'$-uLl)yq{ S56%C]ЏBmS,zE[c2ji2Js8[|H: L͐``q&I/ba|$Ǖ}3Qm՜N5gvuO[Ym]RfKšnj)Zn[zةjIu+F$[zg&3(H׾Π+e<xtO[q^8˸e|qXvj9֖3?1ծ3/_=ov*6e`6~N1]| -8nzYFc0 0eF8K>eWqC3b:c89Hnb)c߸\6D =uTյwqssqL볮.ȓ w=?](ysQ==GSA Y5ӀzgVś,{ەM7coV]ݧ74=g}b-;v=g_Rn|>Q鮟,"vټc3Ǫ,;J8.8xP6pǍyWtq㸆  *JQEǵY-pB']MV1kiU}B1?pC¡b ,6ٚiûβ=Dbf0{p'% Ճ;$3uJoJ6eo8`-KfR. c0TO_̫}fؑ/Ôj,xCn$vzTռRm8F" 5S+_L)8s!y%KՍMxWYĐDbCܰ$acޗ]W+iZ~?"ח5 h-eaqX5^3d$cS0#m>oLg*Q鿛QD,KX{f8Gڗ+̂'ncbd2'NN>6^x юnCBڽt>bDdN7l٬]JdASokSb0F3f}:c|jJ9cAHXH&! zc=׾pp6w^4uÁukǿsGRMfC!Ph\xy4Mr&ʶ=%xL \/2e# 6O|UvSH;hgo2t`:]",==e W($pU.%PcZm gqIdfXƲD <'_YBIMYđ4ݷFIXcERs8 ;}^o6?IOX0iZCG.0ěՈ  fTanWD E\O _%A7ͅev7,OTM |ҵ]Bu{I2ފoXKu:JN7BS8>3g$؍t@LjkA7+qL3@ *qƟ\rMDɚȡe +vөi6}EN\α wbY(|v^,K8P4Y/NGqwvz=0y)L>\glH8JvIdlyai}-b2:}hD:P/2s@Orbû0 xb5sx̱NUqf?)ЋfvYutX4WcR)%kR8_T ƂNiW9<ŕy?b[#GH0 NaG-N)6)ŞhHB4}#0t^%;jYG0ED$sJ ڂ @"7zG<HS@|mN#x ]Su?쵑z)s4a;7e" ֙]+Q:a ,LWq r6j %g1R%9p8.NYR쁢`[ƷjF ~^3\K޻e>?2Q:P[)aʎkTGUFRRf/<YDyhl4 gZo {o-qst`_8;C7etJ/$S$'ʚӛ}9WUI'FJ'  ZL?[KÐZO[=پ}=lx5uCN^YyxoRmѴ' m97m=ə/5e6 Fh5%^l+x]уp:eU GcBhkԟ=1> zԽr̨ }$ES9E'^TCbă/<]^ϕf? K++ OXh,.-o527~ %6^{U娞_&ٲ!S1t|.. ~??;SLqRPJt#T^{ =0yퟩCp{=L\Hi@J:_S.m`cB?t%lמ!ǏNC:kgb {Py"0W>9O%-qayY3j5!k Fut3VqzMVHQsp,0bjQt2E8=|"G[:!hVj{ǍPRVuIL0ʫ9S JP*?i,0R5dlk u~Eqh NUPCΨ9U- N88Ur"Rn+_t8#N."^ >~ZjDcP\:ZAf4e> .D,c ƬX/)8h@$j-֚]&4"Uy mz3C:$U6{gM]ϩw{P݈(@y]`]/:LZu;Ytc?w܉qJsxiPR:9 c( rv[c=p r&sjȳŌ˝w~"f} nZPVNLZ_od [L.rDLAը-1 `%Iu5 T~CK89?w~<=?tv]_]>GD;~S ϳ6MUusŜ-;L3^7WY7'ٙrZ2?qJ]QSBs}y$B(<:& IUYkV[0If9*p[bM@3޵"tđxvj3wWzş}mJ" axQ$#ͽ͝כ;[mb(}D̄ z9EPM- ;J5i:4Z)x@oYQEf"FE΢ijC5J5Ӥ=XbjbPKaס)KE$xݽ?8_Y_\ۻ BgQo>!P,6R6‰ZwL%&[=)+'ׯGN-UWIg[0].nREbsfm0 -): iקq>N* kfêyn^}on+&P%$S6[7 \uPJL9&AOҙMPwvbI#8ذ 9 1UQ #|8yrG妗1EGc/qI˞ .6C\ds$oX-@-hZ q{ZfwPއP[\`$vAfL;,H' P| 훐U"q 1nz]nԻjQݝM=pr2ibǨ={4Ȥ7`!U/`-/6}0j׮swht Xp5+hnl-fU&R=WR3bɭRtcB9[8A&@tjCqnyPȉF/*NoK 3¹h+3_xk!"+=Em`=$u┇6wKy:8OTqiي+E4PQg鲡~G~ [~3AFT$<\ *c#GK c 9ǰA(>=tG$(]@CQ2@r,v;rXH#[Bau Nׇo"SQl>C;s*oP^/ zdq+SXLm6f 넎Y¯sє!=VXo 9>sj&/-k7b7 !T նD]2/|}~\$4+׀[xokpfmiiú3՟;/YYtӬZ`y҆zPӕ^ EX2𨡮`Q NPS*GP_܁[ Ŝ+Ҫ#(\72a{іhu;Cҫ Seߗ 4#rJ%kzBjZAe&a k]"44S~} ֨0~S': Kl\V :^8iy]^/8e \TH*uCz >[k-$ODw-jomᄈ4@>}ǧq?OsI]Lņ}Sa&hn~tA[!n}MdBiu{2#Ebޚ6gPF~Į%K͜.#H|:8)[ (*tZb3Ԓ  ''gҪ$|K89` ARʻdJH.846ws)ު>N GzF*d՗lٛ}ևt(cԕ;[e/QL˸+3ͧkaIifRVT]x#V9/ҏRW!T\\rӼPVrCj#3]wdsVC(DVcCUZ5/i yJ VK>05䶣5Ia/f ]*`: I2,1GF2vC7vO ΀;ag[S{H6ӓSC(ڶmw%c= -E}~<ݧ\$1PT5{=Plt~kld,eX;KPNۆTǓL CYoZa*M22x7t7 yrf Bw䩴 \`uSu0bgGTmw*wyp7^"qk 'TK۔ j<ݟikfmV?O_+wQY$,OVg+mڙwJg8?+ rnO1.}s*NWVya['iPE:nְ,z:z1̝ed=]uPc]Vv4w- hl!FxYbcЋwy*'O|m?)_շw[BsUhm>b~甋ʲq2 v.RU'@93*koצ#9KUo/,iQh!dSzCnV<1$X0cng6Od0w " t\k0Iޞ.%f^[fg8zj;#si2)VVi7QAyV8m VfY@T:}8YlUՖQK&\-у~tI;?Mikn󿛶>ް΢F+>;Dq@ش\`1:ҿv:CtcvxzI˾xZ1&>$~~M(Z.-y͏ooQoe xp+nn[aa<:w]!G*x=J~sGQ_JyN:(ٍLgr"bsHDDV')YCT;%w],/4k5؉I[Rh?P_R318L !9He@.LE/TJZ,`R Q I,{!% YwpKلNPHAVL$KE&i{hp3ٓ " DORNGrєemi"Ģ膰Z੆<]:Ivu=i1ty+YO8&/h̒ꁈ?X8x=h691UkuJ8L.ovLy&꧆,FƃUlUߟ؞-o0xDpc+nٵJyTǯ<1s IǙ؞OnP3 d;wvWK C: 4acֺxJk8ZOo;eyu3h '` Ԍ. СP1·;? m5ofv(]+~A|G>RT|<{Uidӳž#j Ylzce[ Yk>Vtw Igr|~y( f1|A61'v=Jxӏ;Κ gQCAxSs&Z4U.b%ѣeWS a=b-N5[:Kh@4xVƻA$%Q~d$C?pttM6??UAS0=ڣcH3B8TyQ3^sZm4fe@1kW=[h/A$ *%A7x~Ͻ'Vgr:B>7>ǰ&NbXmtX=V8P[!8S1I/!f=t(_@Hˣ)4{$=~tc!iB,Z$*NI  .u+S񟖚񟠒!'gCU!mN*h+/n_ӊ.> *M7tU:!{pU? `&1]V'Wl{5DN( 87 eVGKW5j;[0$Po4t|$0)|Ҽcl0N)LLÐf6&.c&V%$JIZ^~>a:nj5mu!rDp|^po{$$fq0XcVYYc{Zh?OM]rY ƇکE2uR^?>ioz~zsK2M1M TP*uVf6\i+ RRмy>z]nlw~-?GP.W)w^-v+oSωi۲ֽʺuVpvHby=O\ؽt&MԲA*P? r6p|P^/DyS=^;gAHX"u,\"4Fǂ՝Ax8$K5,Ͳl2^(/X-c2b})N1w/>ԳTF(g^+W5DFȨYT{ 3%")1h{tw )Qbs>Rb]هtp =sW#EA?[eOh_XT%gL_V/L^k`ז`.P&t@e[  ?%zm7ԩFEgޣwB+wqx$%(aF5?y}i7:b)aHT4+4?éz'`އޏEB48fm\ c~$Hj[=-MXPnf$>?צ1@Ka*S؀uIK1⚘3i8'L'p QD0iZtN_I:('NJ][+1*ǶT{Xd<444t):nG1J}ʟR',Ì!*'*h\)v1rN?s5|~+[ii _XgSb4o HHn[%gbWad!ڔAa9|܇ rREOX"i}?b( 4(%).?uŗy0BZ8I>4KeQ邚 %ihVf F^|%.\bf|-_[(9`)k5$ljҊ,b4 } V-\#30}"nh]V?NԆM}d9 x.ٛz֔F"F=0YH>žgA4ES>dU>e}M a׿?$.4aWI'jYǴˀ G0h]hsGÚw'/rVۂn\m 3vC(r0ms3mOa_ZU/OfKCW)M .^S "\jv.aްzlb_ʪ/t9;wD zYLQwQ+62!<~W%s:׏-nJU;C?zGp-`|ٓJaS:Ÿ"UQm1?ŦETPGr<+`nc[8xL&Prf_N;yg e 5=Tu leum$AJ~'B:v9F_2tJl/h|v}yHNOsɭy7$TnsKkOU9|%QH ̸=M=37S:omh;wnn Y1*W^B'8~=Gn>}b?0Z.FV*&pKtΒ%9ײK%3 i&FȧYQ"hEsAA߳ͩ™ECiIv{Fj2Xn&=t[Sg?Jh__]knrsiq ,TcaſkP[|>' k,Qi.WV?[?T[3QxFv>tP8 6upZŒz1l;*]+,*!qP.T)l_C/ّքx-#>-l8s,#vIᣆ0cS$Iv]eFÎtp<cb|y, = )Zt^y!,~|TR,@ P"\2n'X_OGծOSws]Sb"%\=_G%G&=v8$#Br#Sqvߊ8d ngu>lr[ ^w^GA K;įGGyV8r;f8t9pž,9fX;3㗅3VwI/QULw6}np@4ιi;v!8_]^d4=C[B|} z8q+GsmC`Ov_A wॗ9Y`b2`ĭ(݄X`dqNCaY7D;|4NJ[E`ʶ0>IE6zM3Y78,֙KlkZN~۟ JwM՝xk= bː^]1ʌbP |# ^ہ)_4MIQ 8!cdT<Ą 1C/=<41Ldn(bk}ܮbVC"_6w>oNv}8$S5:~.3-k䴣.mYD54sn`@mnyc 6֝dMWq6y@u.>i&ϐ߄7Ll3-aHW@_UJϪt*矈Rm8ਃ8|?HUeor#TDT6v3y8^-.TߨUtf]M KKOI\YFſſ}A^B{n_|Y_v'GU P UЅ)`kywX{&bad0_|E`xόxCx0_U0Gc Ɖ0PC:mBGD暊" dsPGɈ B7[;[eos󿊋FhǺۯ|[;;[v(:u\:T|[ (H|UԪT(vw߶5I#wR}yFE&><{cQI2$ڼ{)wυAz2E%6^-U+4X2'u$@4g{rrR@qƵ+ݮn?Ѝk)DO걱qΓ ydvVCDJ;eQ=9108w|$IG?X2s34B$ 8zFzfo+ UyZ3t!fcAbؾr|B޶aU|5>0#f&v4+B+%_tGBa&QcBiy/A{=ţzY͙Y?>PzNŤrdk軳lnoU[`}6\ʟM=z?rc7>?,O, &+d=8;U#sj?.Ȅio|Yӳ;o:ZQ Υ ?:A.[^u{E*7V\XIW=X0A}UE";G-VuTB9W2ݽ6;hK.P8FEi5QK8ܑ):= y$7v-1a3Nca⒀uKRFT^ :B^C7S-;ɀs >dnfޒZ[o>sBCoޭFQ/pbFHַ"`wS~2A$. v?olszx {G=m0ۋܜ?LS)q#s~6gvwlT#(`xbr;>18Uê"KքRcMu~D4qgn^KSMCX;)˜lZJvыJ;2;D{ HYnRJ~P{~=mK& O[޶F+bS.͆b]u)5U)$!qXH@j حx$0L\ݳ6Po?ޤ4Ey_3;76;"Ɵ0"!Wxϟ6?ҟf@keͯnׇ{^?8t޼~1a]bG q0G˗aa2aq>HbMTV>.֎K5ʫFWj1/0Xg)czvkƻ}j fĦGs.Y7drn΃ortΓ>% >T j鬚*TBvҡI t^@[fJ\ǥn-biLי<&#ϼ*q1a` j{0D/kUKypNcoT.|dݰg"TEVR191}t 9:z0+(#(O}23O[e)qsLUOI|tL5|\)#PƷթo w s%AS]v?O9KfHKm0ED03$b.VpwF6ŭHGUun?9Q[ŸҙZXGSy7֪iA|Ф;:sR;8/߽u#X+T*#z{N\xӜ(~9Pld YEB7&,{0]l*:H>]M8sf.>k 5ZԟJXD@kWG&Zg3g$\eR !1Vv@*z}41t˅f&sĨ~)e d#n{kPrsF{g@+]Z.O|! a8b߫ oڃij<ʚލG `3:τkަDóTÖl'l5 8= RK;ClFWtv^xt@muE0;׹O &, x5|/pZ'hK2 sCgxb-<0s0[q#޵$7l, 8蒉(DΜeoo~[yar zϧoĖ$G:yBg'f/T {://T.&ni/75 rV`w\"4'/Áf֟?%iL$<Z8Nf˜o9[Y0a ӎaBip9dSÛiβa%_&z:2 G??:=ŝ͊bbQKKV~7)gw"ֿty1(.Ҍ$ya>]s qK-}m{B0ck ~=4bS/¢5u+[+Lvʈ9mblHʾzk]/a}λF#E5:4uL"rv02ʋKN"Ѐ$[~&8f]9rg@$: TAo;C^8̑QQDY1Nź3GEiQ.)YER _lX贎4q(B"*hP ;5#Ȋ>N9OZ3Jכ{;7w66*&4}_n./YZIķpM?76ߵ#>ngȣ>ǎAďlL%}~{&VWf0vx]+ctG_PGgZX tf.mJvGe΄Xo+bR;$ R4$Fd"i*bЎ#4;=vҝp"(Yヨ /fg73  8:mMGX\:h:<F[Z?VZN$ĵk.:&J_Dߺ1ĢBq@T}+ y8g'zMzs\U^_ gU~^T4VIڷL':5P:3" %0V |H̱8\j yy=x,"J3au8XPVpBLud)ج>,zQ{wP*)_)E]6<:si7LZW[5Kzͮnaq gjI-:j~FSsh\ |A.ʍih<. J&PKSFRtAHkOC]{}*uKRZw6ɽg=J~6!sb{*Oǫ9/F4FHL;e]T\z G,]STBg-KWxI"q!:OLRڸO>A`01ɱ$8IS dӒ+)b xZjV2(qwD&M.DL'|a> Hx!ϨQi@jE ~oe},۝&P]zwMO'.ta5W'x2mjf:w8LVC5T_cGPiD#ėJntӹ奄50SYU#𲲥OKL#l |z\qd峟 &~bfU=Dl/oϜRGhp2-Br15,R},MR!.Y:iTyHɰ_quJd?$ 35,(RΓnܤ8)zaw_R\J V^0y(z=#yi+:&UB!V}-7ԡ4%z)mZ;3m 3Z믷v޶_: mwggdV/tOFiF_5 CeD:T m Οba5mȌ&;YE(4<~js`+ H5Db%[yULnC\_x:e:P;/'F>[ubJ{G=g 1؀c DeK}L4WP4\|U+%;v7 Ƣ,'ը(B^ӕ(LZ0Q@!8K1P胈a= Rw q҃trL 3g~ⲕhkFv}c,;}dވ+ 0c4b4w;#a.eV@W8XXVg%'/~**S3xsʥD-V,6Xbp8kE/t>&B"?E[:uI:"%/sjS֯` ONrsӬq>k<29)Vu<".^297 a[ :Ų A,^ Fr3(H Ao #~H!7V9V7sE,=c:Y|Q5)?ƍ ()$#r̤7MڵP6^MxBdu1|1W$D3vwWu.lLcb Zi~0+VXJ{lZ/X<+ y/>SG \Wr}1> ؜un4m4r_r6N {›x`gG@ i9D;^d9Gc(' &Rqʓ҃Gk!޵FՌ-GKjo~.X܈^Yl05b[7QirZ#aV}gB8BaMaBrZ%6et?1m÷ݢ[By =il$;Oy-;ioi'`l1?U"QV0,j7&oKmPQ[>ĔۊеAc8_4խqb,K*Ԛ,GE C}ztۇ|u9bXpI)Ce4.90HVoqPޣ .IDGq\%Apڽ+s63ރ^òtb`X"~tӡ;wE-9^*\WDLPmʂZ+7WKp<xl}hButئRW% ڻU1K+} 5b/Hl li}"tx4ufc`&[ǻU} AVbFx(.($ZӅE}h2Ɲl)hT8jt N?KLL ?a,t VaoXЍyZ}GQײ yuңS[(spc^9E-3 3nKt ~$}ݍc_^'t%]Ev ^ Zu( `Λ ʸQ#dIϢ3q2fT͕eI{UX"y*g37nzf&#z6.^1XD#y\=1n!;I=#$U鉄w }Tכ&Ql`i|e]Dux0DRv[#̮ؾπ9T4GE9PKZ%Y+![E|{`2욀AT?^;)WFoD8~QM@NN#C2Ќ p;> DbFs-x ;ZA,6{J~7Qh @/$ER$'Ǩ8:]kYIv;/SIȾ ^o Qmrm:&v' k(0t`ӕ`h1{LeL=q߹;Z1tKhC3'UN-˓5,]8Xq#jO`ʿ#^65q ۬%ucjhRrr_'(T:Vɏ|iS{KK9*X';aq(ыP{dfGNS` ,2GBZ ntwdeN\s3(mh5}8n,9@<7\{pc v:>)dM&pCkmpz4Ĝb:VT*ĉun oG"I8,2 %!=%"ҜpuSEyCG8F l Jlp|#i% ڟ|ZG]]]]G&)HN~ W0*)صj F5ͯu ژ:[,d-j"'5V* <> ɱe5S[鱊dMC#0=oPc,Z\T54a߿/|BdV,7Q m3hȧIΥ$3g-ɰWI,hϖm~N٢7~rD脯 ~!ʓ3.+ZٵZ7(W~`&5Wb|M% +XJyNa0|N{xoiCE2n+V$&,h26dъiR~Q*2 #,(h$yafbb`ŗ=*-%Tр)P#(bxP+;5a$0sJw8S^W_/:}GYKKIvD;n ) ŻiIOд]Smt}0[֭"f` ložKFmt"1xMO1z ׊P/,?ސ4!HZ0 q ϭAc#4{rV_w>)4.rxQ)Fh;ZA}Tb ,Ewx\b{G%z廙z׹_ _4S5RV!(:yHB DuDEDA#L- {,]y3!uZWyϠL|^+hĉU!H:c~3ҵ' 2g1wSak5,X-F,*ƔǷmDGўkrEObaar/Ђ67QZi0?!Rk'jtvLH ͚ Hŀ.:igJG15^e.end֬wYI`4-x3P,9ub~`^nͲ'FI/j-yN1G{-'ie _`- H.T(&zPvabu-'9Y7^LLJ;@=pw<1,)Z"M* t֪AAFKolUH敷﫩vKت2nPqD/w>nz:q _b=,޾frI)RF% ؀Q]y,e'ϋƺ6zaU@wҏ3֩ΰeM{!:p$DTJk7 q؈F92YClKpߠJ ;+AHØRol.SF X%6mG=קb&} [w,oaorPX,N}ƲløHms[uGTul6$f9(.?;̸2Qt}}hhy|m(W F#ų}>h`ԉ<׾"CL$ a?4캬kXΥA` Oti:C+B r(p$Rs8&:D`Kkg3.e,O<%BCPҳ^maN7UULUOa)?ٷEYOͣIkb ण,0  9bqoѭG~x%~7A_E|?E#yjbwٜmA*^ _|v jE wASeyfxԳm:@k;TxCb}.Zݢ763HN?"d^}o|o52B`6道 rKȖAd!Dc2V+㹘\O^U* x<,E'?1r.xЊ[HvbCpaVo茰:YwUEc2Xp sgmiF~7TY~iP)5Ju#qX$(pUb\$cK;*.(jS%HSJ Idφ շgץBlJkXի2QfCqҾҪK@L\.8K؅dcPyo8`qsŢM?(y suy67Qf@JL)ZVABjK7cƌZ\夷3a<( g$«_ n*sNrjq{%3[*z[J줛!oPNZ:CiwjCS@mdhhӒ<@>7+, ١F#/m+k̕OI 2rK."Xb5S:2֍M(\fz>YlJӆhn,j iq1I17S3ӮAnt0}i|obnaֱܿO>) «+߮~s*į~{V)}1 ȡ PhLhZf$ <:llmzɡrhG{[{JH꠾*z6~Dܨ䳋(Vt::(0)iv* ) ޷E7{QV]`խCNa\[G?>ހL4Hz]wm>/&oz߮|s kL; }3o9!м6ڽh0SD>h|<+sQYt7d09 $bs S"[|VFlY}}tE<8=Yr߆2rC7}ʾ'4^`pY!*q/GCdM|omמl{uCB4 ]Uƞxb\rtڧ:Sڐ䱟n>-voٻ;|-|]_$C2uAPO\U@9%#vI?Ɉ-<̡ŀaGwL0 T*яzu=?{G^y.r~6E 6gxVUI 2 B?0+b_\Uw2ڎ(mZc)J%[Z#4p6Î;dOܐCL O7|4baP$_#2G}#yI f\p;dҮIfQx ggbt\3 EcBV \ .[8M8KsdbD8QAS]ݓNpYxσz9ɰѓBID A:q[oŰG;8'"D~9ԱU?VGu [gIFdV8@i7VhH\U1F6I_Hޗh؇ yˊGKEe-\.yk>T\y>w!d@rbn rh =abNbNx8D42{*: ]]8:|q}h9b)ԏ6`0<+_M&8.R޷08*O٥}T(l[!<GvdH[tұyM ޿tb;I%)ZXI=U*Z܁/ջQp}jĆkC}mx߃'ߨ )4F2ڲiTei3) > c0b$̱?_ԪguO⧇AZ Cv#I9")1Oa.av )Z< )'xȡAtA-욘]921GN-|B = tN [xgo S{p6X qը2ȇE6%h4~y Џy-Cet;[f:%qۏ8Hq: 9E'9at0pr<4Ob A2)`_n3EϹŏu,fdSCNcߒbֲJq b)/a$pbyfp(h LROZO.Ar;@^NX0`Sv4q?\?0#/3ُ2^d>AFa^,bAǏ_ l%hi=dQ nVșݒ $@rGIΉ;18c,xc:oZL?ѧVd/ufr GG_0H[yz'~b4B*FV6N !D IEJ|q%b& [ M4^&X>#A<Oҋ8EV$q\7MkEzYoy y{sq6_9TߐZ`:Owr.ݽufq %$hTzu!#Ș^+6(UQ3N$o#@C#FRdvrB9||.򲜱gxo<V1S'+I9瞵B!-/JJaW&75i"> OtP rˬtU:ۋN!=*h=^\-L]<\aTf)rq }[C-ePDo |ƺ]V49| ?6M7|-7}䉻;ҎGA*c#6hޠfER;o;ۇF EYsJgaozB`:&dz-{[v⢕0)^*~N^+a~,w]-[Q"[VC^Mނph+muO4XcR=wQc O$WyK1P/j7jf~-o7;T'f]і<IN5Yf Z[Hq91FIQk`oY}gB6RXQ]W/;t/on4dhrՊ.~x!ӗ}G&R'tiԆ|GH}6@t `^j,)xoȆBj0ß*%ۛS7|tEIӰjnӑR$MҤRPY5=h>n=n=3`/>%4+JT$Hvgh2{f2L.""=nFc.i9jB՗h=8#0-eQlJUD6YZgS]vBCIwsQl? g`]1ŝpw<"[xB̮sO0 s\VOeJ atة{9f۞݊ X&)"L-"̓V} G*^_/ÿ*r0l.8.ѥg •il4BHcʆG)NA0gWw>NN,sҴΊOƄ iɛaqrmxojK+~Czy"#@4 [a& ^d 味l^9@Ǜ TUgs5=ΝlQ-6DmX *DNӪWxy;8:+wX s3qGp| =א]xf&;oƗcо@]̶55׿%w?{X +RiFY.8&՘#D?sn6'uK· grZ Ӯˢ4Sotn¯Wus&b߇̫t9J}+UR,fPn-]:4@v]'= ]9Q 5 ]+B2p(sͧPnFUS U.צWFx}3juS~z|f?}¿q@zp~K{ϔ:|Dku"b+H "R͢Cױb[ZČ :v|m(J{W%H:g%H# {m gx`ҧֿ3K]-9>BsLƆ+_C<%k zO/ dެ[RH!ӝ1"5KȈJF O&fj>p8PZq ӝ}J39u=:Wu\rpk[(owGP_Tv*ajr-Z.C/d{rˤO˭I;+=3ݑqYMLWM섺Kz"ȸ΁6L-aF9,KMV$$gDGՙ Sh<b/avgkդAόX쏇 aj1윐9k.eO3Lm:Sl +( EU!Ce d-}>e4Ӌd0 nUf&۬DgC ]9>qyK^j[Ŝ3c^fZ_q4 EP q:DqX@)1:`q~Н,#T!'мN)X|Ze%`V qʑ[ z7 cp;&ĽwK(,Ϳ>O0n%pϬO0F6m'X_ w !hͭJQٖk YO0LKŜhJ!Vď*DALlxפ4zո.ڂݮBr6~i4Sr),.ƊfdDP g?m'(g A Х&~QΊwaAD襜ίA55W9B=C:,rʲ'*\F҂?6KSRLHz*#,C7(BzʎrQqra2m]Aj[;e&l., X6,ruصZI3dx[^L%d-YYCc[b_1cܸHMڍ"ֳ-EyytZ ԰'?}>-ep8IAe)( ٵ>ӽ_n\@ې5ء"^9m"!q1BGga*V Ti2/]s3ehڔVwytJЋ:pxI"~S4MGPcoP*j:5\=.MPwplo ـ2[{G'{?&ƚ-`;{7/~PS"p2Ont6h0ųvv ;=}8N^͜٨䗲lxh0p|-0Ok8^Oo/sp$4>Gg.ݣ_Zf'Av4ppgNA8VF l?z~3ݨguY/t>lvz+hН]Gg43Goo;aUYnPi^e'`tӅH#3ĉT,]kTs@g|a菆QQ~Ty6 |Y l4@ W7NԠq ƀhxH%1!p0tԥ{tS<Tz_Dvws4H9_'vܜM^m>-yŷyaEt!y.zjZtH;N$AcQ"jՔv7َgy`zȂ6`y6׉owwj?eP`.nt>/{pI^G޳:!_῵}t-"6߄SBvR{V.QAVX}V!%Oκ{O"@ZPFEgh'-tfB[Saӗ86"*$Ӹ n yfel1Hh8^[[x_tR{y.DfvɵtInZuÿ[q~q۵˸Uneq: #շn\0c$C'DѠa&^,kuxHO;yiݰ}g$Tp\1`WGN#iNэ[nki{L {j.N\5I³lxx!.bIV@ #y[ϲ{)+ g_6 %0;9{d^)PNl).BMQ 2,}TTEѧH$@ GOb|o⩯xaoG}o ʰ¥h6V4F'BdR-M8R/}o@Ǝ^^]^;#V j[On秝g{_LV*{p$k}B+k85b+rR; Fv2Nr`d~dݭeERvy2-4JV9v5SJ%*WʍDs ҃lZR%M\).)Y=c`Ih[˶N! m&2 )-LCmnTlH,jË́ U= 1~|_DFHƊ0< ۋ.ɮ2~N#1Gؾ?KNu1?#J-[ݣ۵M`HƳ:Z;CJ֏6~09_f``ps~w(tIIQ.v+ǀ"^Uk2Cw+:SC6-.@M?\eȌWUx1<.2*E%["-,R^:^,PKvf猡8{9*Ե{9edJέWgSI]ÆD9tvF\ ֝C,})hFѐT [9.Vu*/uNjqqB ė]k##5m~i+=Z+ĠԴZoT~}e?lǼyлY @Np\k[eʁ].^{Бqyvɭ<۝ndU5D۝z1MU˧@Ssu!lŢz@7W@gIFMyR%Wb5nBU''Df\)ی[Qu>\3zLU}{VzeƉtc K`9I Jgh;],ڬ B9X.9U;x{>,B^%<8A@E+EVd̢E^nHj8=/z͍ rWy1Rk9>2L>3h08Oi95֝Dp5I)?rke*Ge 2?heHUڃG6^^ eoPRHMեc!n 5 4䑖PedE] NCE^I{"ݱ4:`'  ~tu-57 wha ޹)p=es} 6z {Wͼ̓ՁM\s9%n y \~P?Md>)҇9E =^ԚK8vỪ_lZK(3װ|Qrr+]N3amD[7Yk!p[EMX~]Eܮf]'˕W>yۓl(Bϴ g\ 7-e_^bc1o~-曵ZagYـrMd:HH w؅@,!錸G(4V>go/ov4a [8Jt&e]HSCGxx~nr6.Klyn3a զuaõH"Dk,A6*s|_ Id$Nba[H""HFY+'+$($\Tm*E!A%+fq $pXEIScv VPoM_i2]>'vsJ:j2:M!Mb^Cm ͎X-.SAP!dt~ϲ=ᨣ Fr-$/T<-70Q ,!YYxEWZZENazu*)էW rf {\l_^|UHG(`؝ˡ;~B/ٔ8[q0eJ7O"`59QW+M1a<@du fuȖmZzLϬ D+PA.Y$dT$;EQώ"N#*Wk;->BN'D9oTS04{;'0eep@ʯÛ)^{רUQ؞?l+zKEsq/MKƝ$0XOI\,T4 H>6MV( )?3Zp!ǹD/ǓA[TM(6xDAkh*~HURGv#VH* ,32 XC9QES9\fhwaAʏϓ}Z+'U@]uo`" PL'D{\?.d<( b 488ޫ~wy jƍA p;=gyavg,V/x5['9.WwEعЕLC[qU-H悮4*wK;+ƐJboNV."@CޅB! 9J[j/TYe(gx@m;z초$p[`Uuz|\^*ol,i76NQ'L 70Cy\d䆻a C6j'(nlZ@F߯xtג/}__ɿ^pIj뼐iK(ל"՚O@|W+{ K g\ L/SHTw#%j{e5@u<@q =F<ʘ1q i6t ՓESp%W3JMz(6::%I)L$ S|I*mpgޣu0h%麁r >#ͅVyqyJ"4اlGz # P@Pr$h X*zZ7k;{͝`Y o6Bۻk9 cA)@h`Oa,@Sc@dgq)AP;[/_/8Tg@<m#G|s(G0;O6|K4*s ~ڃTq{Fb5A2Ͳ2Fgh=BI)9NMHڃ\j!ݙT A=1>%^統BbsH19 sPeɅ}7:xW$ieޗp68+]>RmIG8 AY/#][8kI /)}*JKFTU DņgIWpǵLXʩIjǪrW>2 #q\W^5^n\{@OxzovW{"xRAԂ̲֘Yr6lBfpBNMH7@.% diɁ~8a4!V.7V`YKY4Bbb>Θt.O|w)۠=}N: uīi,>⹔nXMd*})H6Ʉp[8>@~a~?EY{ RK.qyW\ʕ_0l9+h^KA ] 2Y'"āh6($ "A *_?O[2?~Є٢s&wO.2AMR H^B'lҼ ؋:}2ANEucjJ:":7 ۠$¬q"~ImЄt m.L%~8a-gOMod6 {d~8aɔt2ޗa&mЄ+0}ѬToYc&;agDt5yL\,p©[üZAOt~*e'Ƥ#P8r?pH8a8K ͈rgĦO_Ӑ1f.#LMHq< ¹\rNMHtx{gLiM<uswb$2)pfӄ0هoqOv(p6hB}uil2c6'1!_X^x2ƣjcR$ڠ ~ǷsJMHK-h ۠ +Y͞5cF։L}^ϫn#LfE:ƏgIGؑ' {@&EŌ5"SgJ} RF˲"3FdzŤ##(uNAn^baDX*)B/ybʴb'Ɍ=#.;X RYu $և?IK:S O/:b M.Y`R9-)ᐌ@ $4!Ԭs)e~C_rNMȴe51B: %NA iPݞ0ovĄ=,Cq AyZ.q6hB: 0%#t=ͨe`E 0pA"As? i`[^q ޗa烾mЄt@~S=Io,REԷq 3[L)HMH2%p6hB:[-Tpj7AT3烬 aN}%6;9Vd | i|Xbj×rw~{==r? Bf4!q gkt59":8},2A!e~U2Rnҷ4c'l&遳둳KƍŤ#8?~8ai0>KI{lDe O;=>ɯȋ|A"BgȍYZdޢIϋZ>*ԕ32FZcc뎗AԍFAgR+2^W^ln>Y'shQ . IJLTOhU@EEwI!]L1)EaF`Լ)]-ؓQ)ɱ2a{+#r߉+]Xl!X)JRn셡}V6}s,T"7Mԃl<$ 3 GwϴLłX{^YO Vcʂռ48cJt8N`Si4 on%˰7BDf(lmxY„!WJ6O'vJοZ%-]dwL0&D,ֆqORE0 v?\3<1s/

pO!D. {lpNG=鎗J-56iP]hQA]rm&V';\ 钭x4Y7q-EsnY ճҕ:onLAy1rRm5Zz|D##sDG 5@.A, F@w&<7LM^1N+0]TK:ߘj"}1枼Ebi>] j*l56@0zJ0zAZE]b>t. qH^ q%\Wz ċP}}cVOVr*('y(׻Vp·pA._Mhϛ՟7w3b Ľiz1*U (U\#. ԲRQėtiE|pXbckT ҳe`)Ǻ[wЄ$Zgx=&Dd:i<,k,<dTԕݐT!iES[Eճ⃰ +^h4aS0 ږ`H~^vf{S۟oZ`ي<"鄸H NL_;ư %%k1f30vFBI'|Wٸ@b˞<$+<5} ,_Yr@L&L:\4MӌA󢍷2[ wj&;wVz3RGiMUdTQ#cd\)Mjo("A@Ih-_ҋFoaOW+\;,1H Gb#X=8<==<dŝe[E];K.Sq#7d^dp&Y{ncvp?, .+%~ZnÖjU-.r#;ҋ7N7nv$mk]鑧 rMk!fXCh5rk`h܁Ž0PCt R6Uj/ΛMʵ^ \}S $ ml|hSfAi=0#}V$o$qf65-M[0 'Se8xa [ =0n^ 诧~۞VF2(W9L2^DIE4籎B}yC9,)X#M$h\x8>|8];(IZJ$XlcDx!#`x)xЏol)g$gsgh(!X#%͝q}t4*`Jwڌ^_XRJ[]]|_Jp 1QaN4oDu63fRc5Xr R? ")k'bXoִ^";1M iko5m^[B eZa8]a7a{7@H n3u%F/Lk5ۿ}gnc:91NF'-+ت(^D-1C<}Zc΀"7IH3^cymݒ:U}ue(Nbcũl(r?m{7?.(n3n@tdU 7AŔv"nū 5FρwAt]#Z# f, |%"byB,}/H7l {Y;kjo F1Φڹ:r\sy}{?dV'3mnďo}S [V-{]Ni_$>ʉFez_^&Tr9GBN+7cM+NW;r\^>߀ݼA[~.WPӖԬZ**|k7kU:-;X`P%|DwO۝z=H5o6:ƁV  L ^cl^i.yIΦdJ)`hvo/MGf#Q;>,2vBcْY㗝>H rrSM7y\aQDlAՐ%H+ Y-0yez*6yo{ ]lAc\T̪c+XaM?flaNǯ,/f1@g_>%o˿0Q Σ^4 e)8DV~dkEwkOwjmee.w} }ݫ%vvYm]L\ o,H9v\8 Tp n}$tɸ,}( ibJ]\3qjsc;}١j_E(ڐkKrG5OM9z4%iLo@x u dA $lsH]V0o`sS!Hf99jXX'~]To/=0^af.b$KG*{ޛ+M[f0_-W[21ѝS`ܼ̆!(ne4 _ѿrX4o,qᥒfÃ6ӡXҬaӍ%Hۧ2= 1~4i'/N:ۨ5~4heO'Mh1Wjl( ܽtVQ* Rf;ZE2"a-mH*ӨӒV".>>kqah~sO}%Bp, yDugdT)r29 rӸfXu@|`ݷߙPNF@/Wp N9]%wHͭ Iz2ㇱ AEji|PQ*Etxud:)Y2ӚY[yS%o;fݛ;h] 'Ti' W9 0}3O؍SI亮ȆVOëWV:OS_%Aq$7UZV[U"B"E^qP`\1^h4:aZ;p\A %iqF4Ӊ7jt޹sۑcM~BC*fЋ}pQD$] w ᖺ_^Qpi+TF}7Ѣ@:CdVsDh#HL&CJ卓1&20}#$ pPa0$2dp72X4e`"zk~'0IWa5^K`]4BK(nj'85]4zLvIFȊ㊴=G=0M0 u30k4:s)i`% iPkQY$K{pRTÎ5,"۪4q(PI֬L8ՐrAq PiqǰIX9>^25ַi_-ʯTSua!M7{,09s{O2Sxг?qekW) Tԥ:-Φ?Ь P =nZosgςHpfbl.٘<H,Lɝٸ;m3ȏکI`o+:Ks-9v>i-F`+}je;*xvsV enC*`&L(5HKe?el.[Kt4PҒ%j[kAPP+-};ZViZTpƂl[|%IT۸JޡϏK9PadfS&DE'r+WA=eYVpJb> uIGAc0(X3\&ڎP)8z`I !9!՞9)0I^ȉ*T6C&0g"1nPWW޷>4*xJ.zhB`Փ<]9 ^֑ ƅ3!s 6 }6H`ʁD3c2(q89DiT| \l|Z@UޫJ!BAJ)z2=n\ "tV: ֳ8 2 ֖gH2E`=T 7y697[x0gfd$xY2T7"_TRKg'usxznNYa9 :} +bCco$F,E[DwbfS%p3gdϩwZ9AY 7GwZFʤDX;;u]ՄlKfE+0Xb=_`ZH&u]Q# 'h9P ;^AHi#vqhug_zFtp&6fhގbV5GOSiw 3+*˚VPw-=0T9gG,fV=OUJ_+KGq8n}/[9\s833&ף>\ ^B a&$l^wӷ 5v "_4#=cw.ЬvORoSݶS-ӼVԝVآ[l_* 7>琦ࣤV2\Sx5g߇3n@_IN jԄT0嶜gxI*R.68SA2<)xiS!XeYez^cW&FC4g҄ĠR"~5tD6g5%\A&*|2e? s޵@ A{(bln 3kU82u(hd΍0u馁-Fl~,΄I=a8|5-ӣ ̝GR.Ckguxπm=8茱ъJb =KJ^ff,4@F[8Dc q8ˆd-ꞢB-7GvEkӴ"_C߄CA$ȚK1`% YȺ/ (SH_JuU[(,9p.̝3υqЧ" u]2}Xg[OG2OE07/X4ǰ ω\Z27n%D-𼈅2B?PS8E(Ea 6am\V˫+c7TqlMZ%0?[HY<  ر$FѷNBi#+^h(Takʷ{Zsc_QQ:YK4kY Qm;'/$llTܛCQ|N|CY'L}ehi`*iUă7Jda8Kd!<geB \H6 ?ʨα?HFtѡ7͜rP,+kxo" ࡑ 匨&((Ep[!1j|g%RJSi=< s]h&'_XpU(Xf<걾cnjBMEdA[X{@K 4k|Eګa2I~ȏǕ8Y2dbL$PzchkLWIsXS{[GaG|g[I onE<$C { ScW">:i6 ȎRv1!w`sJU wd=lyE9jfI4 xp~aKED+y;'z{o3Kg2 ?#:5:H:rUu7XIݾ>mh_pjxgVef4b;ZrBZ J;=Ɋs .Qn6Wd:SnW؂.?\A،h^ hKƲ"W[$)OkKEdvڔ}nP#t=._`nChZgVJ07/gֱ̉2!~.n^Ԧ HgK i~AA ٲr @/+-_K(DH@xhJ]rR ~"(dܠGMTT DnEGm^6B]38. RgOl>"HMAƑLȭ&gۇۻO %Z_ K-TaJ*oc݆@k@b5٨FM3'R@ 2yb ` @9'{ TV) πyS*65짭~now#xk,J5K1ix+ǔ!te2;ZdF%yv< E4 po$EU`gV::~yum2Nk)% "C C&<ƹLt)ĻAtC[1Mr.-XɃ.9>s3>4d|8j [=X+20UbECFZfo(?=1ZPu6pS.PW|M9RkK7$s I8nkV D|K8%@*/@T9UY=R.'j4sP'$8s$c-{Av(BWa7k M-ꗌi(mm &E֐Z3 5^ j, dF 7zPaTq.YX,2M0d$Y+}(4P!bՙKZTAhȎJr;yxKOTk#KU+HrwÇUeYKI@N} hn|x@"{^xEkE!܄6Sޘl1# F&!_H=֏:r2JLTSIu|o&vI5Y5vV쫈VQ$+#0=T^msJH){<a(MhE)"HK'Ni}s~ pc$ID{31QF{Xq˿%Y] =vopp!J9> ^<8#\Ɨ)eyBF:,>?Eu6/rą Z/d:2nFшr͌! ēz秭a3sZL}Ql&ݖfn bR:z8s6ӭ 7_Y/Yw_n|𴍽Nk|(Mc>0ϊGt?-fD ퟉N`K{,IKNϏlflmyNֽnE =\Gz1t$[XfC* Ƀ9tUXj8ȍH)ybDNI* 廌FDBegym bQ9OK^DޗyK]<9Qz3k$Ybo0E4RJrdk(Dx ñT9Șc!84TI[0}q%].D5ux!,xߌ[4Tx!_,<#.l_g]AUUUUUUUUUUUUUUUUUUUUUUjxEu6v<<.`DpD}L1Ƈ-‚3fmXTRA=gኳ)-ݼʶ7ohA 1=*MoVȌQ0[>IR|ljϛYPqJpbj% 9Ac}$5neGٰ%V C =*sDP/Bg@z*UM`J/%i씓 G{,COHL\dfWZ|1O՟mԷw6q&٩(nT/=as W[K&GT{%%Vܬd|` KwxiݛhxB/ rl~zԭ>[n[U)li l { &Z-]be<āB%jHAw yL@f|Hwy3Ȝ0Hr`UǭGJC k@|MY3Iޛ%yoOLR˝Mͯ+knqhG]p͹U"X< l ˤuaTH=\;^?b)XJ[Ƴ⁃ hӇ3=Vˎy7FֵIR(jHoIWKJ$XN0!9f-"HE~uqQO>@a\tA|:bk+\XA`ZMpGy#fÔPZ%'n`Nj[!lkBP: >lWTQ^fC&B'FBKZk1DF EgIKрN;`W$7zߦi6B3CC ƃ7A{_ގt3%H%0%ۢ)sNݰO@oOn"E[֧|F(3d='gZE9.!5˝0ʫēR" kdMQ4ަ1qu /ۉc&J/G mВlk"0N ;ku]0cG,Pf  f{έ-8J8RiTa2?Y+#;Ux0D9e8Bqh(g[P@K6(@d>!޿AZ.ˤsYy([߰n68ƮwUկKNjqN.TX.c}!V7}e)M:ʝQ9jy@®: '%XwweGE#vbEq6Z`e,]Gh L:-M8~lx>#aoN?<P05o,lEsSC Fw*5' S]0 08nzѕfiXJ^U j K@HROJ|*Ro,oR*jZ(\݈rˊUe7Z{^[_m`u%E),4.3gc) 7EH2!h,5E:7d1KXѧpT'.@5U%u҇4rA-^Fh1.>[|4qq ǎ?b~]_af[YY`{(v9*#mԃ^${2uI>9t cBdxGo$ˢroqqђgvu0󝄸!j~rɭlpul8eD'3In8{2`fMf88VvyKN OzIjOqɲ<g$|M1-7F&^>^yF$e"vCESsyӠw'p_cυ0툰9=sp"~㻈V,O&I0:$|[*b}փdhX tL }67ksX~:~[UU-} 3Ȭܢ>jOGMh\.kq!L#dw $ݬEk5LTi>_d~)fq&ҥJ@^\ªM97I\nq4vWz䤁{vn zGwnw펺=c~]d03+^)_C4֠DY'&*ޚSؼ͔@UJ$߇ZLmڿ=nWW>@2֣zBZ>y?%ш 1zBsƝN|IGh;3Oq'>AP}S} *Nup0j?PM 8͹~GL-rZr^R߲`) G%X۰AJoEI`!S! SlQ\.-:CñGZ+~S&zGeJY ;(\=vhiO8g ‚4KX Y㫧O "M)Dr&XPs8$oDPH-wՐ5V'pUǒv]{,8.aEZ-&>` E-mv]ZY)ܭBE0PhNʧQo] 2 0b6&IQtt"ma'QP`5>fU'gpVՊQuUZu`3USX}|%'B$A8Bh]43C:CK!k{{WE1jU&El:xKXz2U\捽aYō6yMa{鰨٨ˊRq6:ٿds#Pv#E6+3,"bk^MƁxQWl['wvpID0/;M+6CUj<qVA&F6/\vsh#ruUƩCL-t vKG[plԂzX#G.Wgg2ѲScl(ch6~:m:{#ZOsׇ%4 ]`nc%7W"t4=_HYMV}Ţ83C07a3,%m]Bx[=>"Fn:F>DW2#ޤ LySNKCm'H4ztg]X:^|e;^:.JWeOI08OlH#{Ú>@'V냝-cA`!L}ݹZB:nO{E-R5E2$@.=3$ ֻ7 D{l&m5wk*^|Idm!SD^irXs0ʟZ1f2yƫe`Y:+i.DF#4&q[)ģY֦$rT j*t,le5uOWߨf.5UQudXȷ 2bN:kh|Qs i 1=t߰ߡ̻,yF=Uxf;nh^c7ɹ8RF^LѴ=<#$d&<_SyIߘȎ5^ BCt*=Z%"6= xT"JKX]eL>$D][vJ(HTu1"*NxRjʭ;Kx>arM-0cPhГ }8bUkǤ6C xCǴ*U#lɥr((s[5|ًϪz߱"E)` CZmjg&A)g_/ ݈R&Vjue|: bpae!xך1b@>H/ԍ : y*2eSbnTzLB*NHt >5 ㋭9t׹^2m)60M",OQވ/ls/M-wyezt/nǒ}?Ғ+9_ hgS9=X(ܷg@ѵ $S^NT 9A"a+R*6~N(qYFވTBl";_ T0km$phܷ3,ɄG?-3BxI؋h#wf$ ŷިE?U\`wfl]2j"țh2~O,݋ ;zw~e33uB @cWkl?ýHО!Si-6kV}-]*<Q"3qvpKzޒiuKzޒf%=֤ܖg}^/ s s׌>h+?58Χ'Dħɫk)ݣK*j׻ )/P<#,9'n`qn)&0LD֨I7'E1i2\SUAhFU b!ؖzN5Ei[IΩD[4/V&آjIר3jOIikLj~#r:A>Vsl24;w qRYC?@ ~K͢x$yJS:PYZݧ&Yyܷ[Fh9.H?g>aNoM(&n> eށ2{~JMd fm7t2xG)8Rl}Bi>Tz߼]I3B6mZy4>";N6E?qF ZvAt&4)scMTfcމ:(6vJhǒ `n1aָw8cG9a R+W+q~,B70 q'}Q6 pZď@EF}cm_Po` Ʋ%z1O7a8=`ϧ˽4Y#YHߕ("g5mXs+ omuQ_Rȑtb8!P\CT6G>-i,\Ԙ Po@Q3o"B2>tv. %KF;T(HJVYGKe!Q:tWݸLuzJ?"s{ ntwZ;]tg$' И7jUc|Fe؆+$wR,igC@ѕ:i ??ٯ)ãͣ u"q/58RG֗H'9M QX+8.ajƞYG-Ψůetb-㖃q3 V97?xL?^ix/Gӈ_oA}B Yj:&MEN'E4Oe}Yat.y1+NvFW@ 5>'N;2@;(xHw̪<8^R`_:d2n?I9L9B`X{1Tw ;gGOv\xv|sa'xWdq?8FIxSg!@\MN'hS^qɛꝈ2іҘУfh 5y@BSͭ[+0(G@!US L3r"g'F+J@>"oG xi}z~>^{}yٺwjo?2D^f=q}n")zee0f}3& jcfJ$SӚ 4 G;n;! ^$I̠8wSoڝDlas4EV$omѣݸپL#Oݣ}v϶]yDfVw6Ѳ, eٌZ)boz?0@#"o'XY|cb.-tݼ u L=e$qѳ<}d6Gz cx e2o[f-3x e2o[f-3x e[@?]jK'!Ŝ96گ ОBndvEf[)*f>J:J;5IOI׸cTs_J8;"=N<agc=?GyX,b#z,9Lf܉{hLAfX@z.9y'Ɠil ׀xwv3)P{b݌]vugLsٹYHgu-WHi3|?uⶹ~(y+ms͌kk2 _Fii 4$S\Ec%0FKo 7n>O즵ײwjY]o| #^mYߣAdqszjjVsl9rS6A&% qyL4|[0òY -O5k,o?HqtkNk`*^wTD46iVOݼNp C!շCU?}$+¹7&\iZ+}VYyPZYF-^?%C9؍[64M@+p_{ďutC~/w_BZ<ުmj͙gjYu]_9}L<( c疅w›0_ڎ䏵#Ndɲ#07*ts3nv1f\sGf ꓇뛇]66R$-ur]&# E?-Es![#,ucQxse!^#۞t0K㮿"6¬BDvku )$'{fM,l"Qۚ_>%?g &,*(u̡KqxVS(j%46vBEΛMO7>VsZ*T*GpxhȲm՞ԏ?/GގdgE SrMpevک_uؒ?O8K,eMM]emB~v6XVL?fӹBߢqTE'5Wx*#(c j~L=[rF^FU\d_ ۭ?u7l,0pP?:~r~=>C"9ٙ*uÞzӋ/ wn|N %",3N޹00 ? COMt7޽^ţD 7\FqUBwc] .*;Ѳz_zR'[P| xhʴǝpx K`ѩ҆|1W0g0Ey0?G۔EYQ'dAt;]6|&I4@&H4ܺ2P&_5ez*'@fɋ6ʏ]fOxE3Ia؈PQk)C׌Dib[Ӑvw3lk4bs~qØt.^C-DaQ{[P%dC.+H9.Lun'$idsS oWN{B'K -6N9җ_}s"$62򥈵aec}nXdfތKy7IΗcdTJc2rTՐB[I?srDfao'9+h\#8aYNBw i%$ 3F?k d=ec]p9y1j_ycU=VGldj.aM?@5RވISw2tjQj&}>gO?uV)ٟLNP*դʌ?:o>;x|_ɰ'94/=t0 *:Q?:ܲy AߜɏxGNX+ Wpoׇ܇CE7:SgͪQ]n?v 007SGTFQUF?nF5!*(1%G䰾yP{ZG75{7g֧ۏ?ŪD穏p յ|#tX>.9%Ui8Rwpgu L\Ԟn°a܄5-8k x-ϰ5mH̭-cAV[RwU шl7-)O6%]8j=MZ UK'Sv.QL?\Z4KZ| }Y3ZZq&to,}>@W ܄bhDɼ[fn5s(͹[U~{`XyߥY '9guCwS'{sܻ=n=5}کC`yJ̱.[\e/:C\?8#݂:N"ҨT{D3UAMJ>_i^ :4.v iZm8/1.%#v#"C(Drb1\RV!6bܸÏ2? Ēsjcᆲ~0P>?mIt>_fQ&]"8:Dՠ& n `C*7yJM 2l AYzԘO2ϫ.qԧX)m^ըKfcY/ž`T+2?7J-]*a8! -qc^* AG,*?s!Z"PȸDfNp^{ bפ>spae<\!+XW2Y&&m'Ge45ԎF `sb=MnƠ=f)Zq00!8weJA_gfCO!vlƌ.s}9<A=oEWf8R*CF]T *Q8.(ME&j.6F- {̜ 9"*щC_qZKIˎ9,bC(D >c3\ }qz4a{ek= pЊ%v }D&&Z52iR, Y\R)T XPo Kl4No}Mk'w K1P9>^Bj섌 t}Jm%;~Iъi젤::O[nzvPz'_-:❐"@=֝0o_q\^F'Ueh18J^Rb T"ą]}v$:~&,qyT*ectp pG V!ƀٗIf҈dYq2=5S'ܿ-"D3BHkި0i{ @^*E{_}8qLۉ {t^EMI-N؉ϡ ت?>>>~xy7Rxh(EI1#,BʾhP]Eg&'@up aYMWIas/+boꢋ]=/=\>WQU 9&ޖ泭~yC> ;I7w!1>iM9.@Bkmrq=`];GGwHi sL;6B:r9 J239+QĖ^]?|Z!'۽h5Y7QaL52zoYdմax4H5j2ps^La\D 7p8l׹R~{H3 q;p,Q&s,S[jQ->ީ>Xِ0΢g0N7|a-PdZU-@{xW;odNNSkEj>3VLc_I$A@Q'b)|w^??4<<nh n># ڶ+7Q}y!λQ.vk\&zۜd If(*3 Cbz 詡@xk.*l08}6TsUx1<.2򄲯U,BV-e(v%D[3WsP=bpPu{Uڽ2Poe%֫Uuߤy.B~]Gd=;btHA0koXY{䬫:J8!g.Ki2.Wz Vޱ@R%?OחXv̛5@reCV8![eʁ]d0MZ :[6&f̫-VdRŀhzЍwRrxIKueNBtdMʒ2%(xrAozYz]MPl@Hv.E0bz-@X(]b 6r36V1nlT$;W^T "z-\,QȽyAzD8>f/UDw H68+S*ΑŜU"{T?"KGONRY&\xNac΂|0J9DpmjnK9? ҈Z @I ^pw|b#hv,gOkh~Slj[[TM灨l:QRUwzZP"ukRtH* 6Ex^<%R\-zv!1hwaA%A>P֊j?Ojr_]+B (ZɆ@+&Bx2;#9q4iys-O}UĤhA:,Ԍy㑿wzJzԙK-t8m"^MO{wsW=1dX :/]<$-J$sqIʝ)yN;.N\qAS6W]q #Ir8awߴ)-4Ǔ@mwIfE$;?J^/764z@ 70CVxQj$"e H*JȱkT 6-_kq5ǣ|}6W_M[b$|~ZQ"`AQAUZ#'_0D=mBF~1@R-l Xx)yzS?TѰY&(l H}AgDP(V& 2>F}L Bԥ5Z* MȅJU5U%EO[0ny)la<:9t* '70bDOD5rSi5vYF1='Ќ [D2yNLNF/ętDA1pA jcUwt:aK"2uL0$:z@)P( 0}8o`dS,}ELb9G̀kDT6s'r^8(5=ɪ૕ a|6D1:-znH8Kx`D2j,G(h#Y>r/zp nnj]Gdj!ρB x-9Pwa^vv FBO[}Pan TQy ږ/݂.?h.H.hEҵt)cH`5ً$h1x% +] ,"Ln)e 'NVXWcY)(ElHJ?f̯; 8ԩT-,;҆mЄt@~tZ ۠ Y\R;{0">KHoK i&-_y=U@ xWL\N& TMHU/4mn+B)3݄D@<=vOע-^i@Gp0" :=| `e&4DuJoi!_Pť&?9Zs5`G Zi\ I쨇y;?,6&hS5HpBċaD*"XYZRN|b掴#TAy=bU{Tg% YAK{qIG{sa"*Mԃ''5frSEMP a39 jR*#\,,(P`*+@sh%} %>%EPa.wTX>*B`%aُptET| SZ-b"GLc%h2JN_3U垅o"R)N=L6S7+s@ 굀mg>3G&a H7QLV,,l1-17N/%2E`34,ʇ_4nP*# f"oB1_w"_nBo4_` ^}:7`ȱ Bo^M$UV\-EVQe r~yk9q6fUA.ສLQPjMS#!QZFCWLNG0yV[}kZ̪H/_.`%H߃ftop,|lg.l KYIȓ0Lf(@4y+P-#݃CQS4H/6,scR}8þsA] zOkkC) 0Cf6.PX!5N[-n>1hG/!U ca&GA2d˔s^W2wS2nOO$dx?D#S"sl>{<ߣhfmf5Q6 }U9txz#Wdge "= LSjl]iۗC.6 0mЯA|XVp$W_WsxXy~qnc}<@$CѸ[yl^0T=P3++yy ~Q1'jP1xR&rI2h 玜.*Z>׀,ݱ h%'d2"PE("s+?>w!u(Z-lz`&Č:JQWQƼ@5/7 Iʇ##,CCJѠmLh'JqpX%N[ =<g#!l1 #Fǰ_^d$wPbBEͿ(F2 4R[{dx݉ fsW4TJOg+=%8Zw`TP@h̋l/;黱9/?6><;!eA6xlV`Qre=@(No6:&=i^lجfXD U?mA;a4Z8\R*dǰ<[[]Thb,@ݫl!:s'hKFV=`K7^VQG5U҇֕RRҾ*y *c ҙTbnPkT8ͲI œCɝ:&QYX`"g9l:43 ijey ʒOH@mF p pl3D f,N9fbF$ZbT"ʩH{tڗ3$Vx3Ⱦ6> =89Xw}cF+V6qjL=ksϹl ^J s"SJ$ fd o@N1 }OcJs5hV:8}|o)2)̔J c+Z((7P&2;b XmkYirBt8,z\&a6Q wZ%⽠=bKxi~e٩WQ\)7 Bjg $)fCzYYTklXiefNKi|sZƊf^fƸ›f;X"Q$y-;DLD뮘o-qY#.;Yc<"`P$OpAnsTȳ1Fgv KSi5UŞ\X&;i'AC}.wf,e+-!չ$~%&:ZWZD'ʊ|DD⃢1h;irx:/le%wp#aMډւTUuR.%r!dT\lb|'Z„g8mK691nN=6T1N|1*d8fMVS&${fp*roJ:gM_$?3VxV7d3sɇIω:S(pG8|.i.8:]9]\IcIl`&u: Ls"\׃р]ZdliN!`>9PeO JWCz4@?Ɉһѐ̏ڇ8@jK d5\\?Q2ol*1P1/Ws7ż^*PGKǫjG5G--`k;C5@w'sbO AT0&ӂK6;Z9*~Ȳ 2\|bRZzI w*لL~|{+cB.,&-4 :FDZChЈ /`9,/kI7EM3^m }W ýY6+kBsB\+6>k\Ԋt#.sZ<MT&1}h"Y_y}`VWpc_4 3Dtu+ Zd49~CE"0Nw4&IP.M`9dSz-7.,f@X˥KNLHȡc 2Ni#Wp Rdʍ\Hr( z;z֍iW#,.'-*!2o`B`"H^- -mλ;_9 ("DH` o }mHVh/.n/ f+964牤oP$M_]h|+>X6N{P2)TV}*?aڄ`gf8͸rϵI߶ohѹ7k87-Ħee~M -4&{ *ʺL̨e 謞X]B"ͽ6A2 9lk!]K^ x5hEWHkEFEnьGau0Vr 5}/)` T4I= 옓rG$,mJ9Sߤ32L)>E6 ]y+]g;{me]s|1#*/? lƙ%D9z'Fg\WM@%"o֌Gńĩ3[@\/׈•ʡѴ)lcdEB^3Grs$ ]ۜļ6NtrW go`GZFL& h)n8m d"`l~1zbݫ7R̀`ЫFvfjkzG8Д[LB`MaIq}^`S%$~Ʉy*FMDr=@.%`0,#!7@q9ȈР2D¬fVUVuٗԎv&%B>̐鞍I`<6s:,j?Ubǐ mh.3jtј.ZE5^(m>"||զNhcT~(UU~ϫs?Yr)'N`x~A?zwp@Oߧopou+}{|ͽV)1hV71 HQ9j~XGlnawd\LLM4R7 )bHHza9^NEgt9 *:,# 2F&׀h`ӗTx=^;#~A_!&76ƼdЂ)'T^`ˇXm0>gF7cc&NNֻZD2BF$,N;tb[?EZcH*q+춁~ E@lԢH%KBG0>/TɲMuXٿ j!f-){/M+i8Lq^^"LQ/ ϢЃ2%E0NVQoYZuʲz~jiʷJ=? TeY]} |gAO_hg_F~ecb;fK\^< dӉ/QVcο.x>"Y*3m=Z' /ku:9k Vd}ҩB~؋l\xVd\GN`G:&Yms;#JM RI tGe#6$<4'ǃ{{$$Osb:|2>"d"Pzlo:QO-rn2w"xHӦ잠(JE$r"Y_yNf{ ㉘ n}L^Q[}!,nRCB|UXřSŢ&í#Sl': Vd7:3bCc~;@B7 gޣLE ԲPGrwܛ_3iI !.$ -:R{Od]+z144 cەe/"-Z&5l2PYb9CsDp S数A:ot.;#^~Sfrxٌj sy#:&njJ܄N+H`N+]0oNUV+CYw4zNj΃nlxOl]V[]a&WL_=O* MLW.h ^ rFxlH-!/ʓqDǍh鰸)oDiД݌h2DPwrr罽>咊i{֗{ndH&5%8+oinu[>zg}0kA,s`T\Y|L҄G .㆗.#h1kh č l4qfSp֬|@NrMܕq6 oNz1r$ռK%iP/yt"+3ypJ.g=K>9!Z [aWXL ʥHǑ1M LᎳ4׳؂BB}sik;5+\[͵֘:,ֲAoR5 퍲CXzqt|c=t=yzaw>vD{.eu0}d A./hzч|/Y\mZgݾ5|Vms]:rr$ 6OJ2 ~9e3[͜%#vm#.QRޠO&InKNrDvE9@ICHE YM̙V N*WCҭ7,t0L;WDY'dO l2Տ=%̿]SJ@qGz5"kVZ|NX$›dW{#UbP0mxSTܐ[ہ7/:j3:ZD-#$ӧxӌ"&-0v&V \ PiwֺĂԪgu:3T"}(ݭBRwOמ אYp4]evs/k0=ZNԣD-sWI9"~uUvqi-S&O(ouRT$k2BcQrnˊK[RHC۲T"Ue"fяF@hnuFE5B5qyTF1-T΁< 谠w7>QK/q)j˜-g3_l jUy9JzG yv*"lٕ 43#%櫗`24{:`h7U}r&Mz*w]|Er:mSF+QC 1 (YTu5}Va;h]:a DZD[>Ch7>mU%lP"AOg1!=*٦PQltp1( ePptJ+-PAp}ƕUUHSDe5uL١ _9v!/0=>ô}0b,u!xJNCNVܛ\N醆Ctl MڵlN un6S6U@p$a7;9<˩E=D 3̓Ґ5I S$h6a *gCsLRhx S4A5&2Z}[4NBFveEOTƠfyoXӑB0+ !hLՠgz=ͤ[~e㺶m\JJa{uw<ћ9*~q:_W8Cԅ@kجOM02v ,: gL2W~fjm=pE^Svn=R]_^m< jfK|uRw_Th.Ud*ӹ0,q$'B0<]ˌXs؀=LZ=r3~]?{GV3"l2)ڶTI&%oeg.0dڜ"Udcӡe䉗'. Aj?<'(k=.Qj 7+5[hj=]!fMȸj҂m0jj u2yDR]sTfj{a7o-$CJn5'#BȠv\X(԰PZ+.MeT81 iMpI)o^Y\۶La]ly" t u PbnkttЎWtji@wv*fˌ:?uOĕ+$oUBT8Ns˴p}B3(fBBC͑ U7ab:<&7>BL9ˬBu{/ܼKMbai-Nt nAf$5L|uvCl7c[U0HwS]V?+B qDԈM_50FEGp'j9u;g05<3g{:0lc7L:i_LA%Ujظ@FZA,-@E"z$M^D8|  cOH\^ƫ:/y06 tm2#ԽIPQ-I,[&9 RŽ (_`;Eh @\S(1bQkN S{l^s0zzNH)G_4w#&at:?c0EW`2vQ5ŵ74=3D M8-Y[,^GD@PjCH*6#3^ɢ inӛsEk}{Pgv@GD+"1y8P d-iS ȔC S8ے5B3ʃdl4 ĸVm:ƹ2~]3nkR-b)r'>͎kX/ HxE SNNѠ'({tx(x>;pv);*](?}~<8p4sgGx" dy}狣٧ŅgQ~|UvχG/NS u,A5ya|=_O>p@q>^O:_D׀y&qsNu|E<wpSwh́\֟O2#;'O2)Ɵe22~Lx,rD>A|,#o2l6O_@2ƧCAbO_ 5d@`wG/?ʓ/l/Aѡ!!;;|0F (oy6 rr՞鋬g %`Bmܳc8Nh|E'!O C]y{V3d"ѻOY ~"ғ>][/8E qbiC;2Aډӈ|{^7tq|zb\䜱>;:u:8_ј|TC8|^>uN/ڟro䱃w?y;܅ɩ`HSY|TQ^P/=eǤ\ 68:Vu(6C陰fGQ7٪ GM;a2@ LXljue`Rǹ`=#]ea!0oKhE KÌ۷0},X:.|Im$xݾkYޚƄ ֺGu`GQiC$Ҡ!e @Z؆*_( &SH ^YKy ٍSV7&)r-8"ێz+J1B#1Qz]t<ھi(̰zϮtɵ(\D `B.߄ jQ")6ؔӲ1}^V4mtrfjmpt<" cƽ|{VhT`?Og"H1"p)&@,-5\hVv+~\O8{BݞUߔfD?sdNTt,Ia.wU흾_~qq{>o hǢ{oHFr@Y(^M~eA9w#X&UA&d7H+7;b`b!{  o+$i,Iev[ːÉ|%V޶!89MvUi\7d[-<$#ܔz-<=۲d- F:gGit5pvbUY!8m8( oCZhOчO8d:|HAq"elfoB1(ױՄ67 `0m?c?o%"Q$H*XU? =՚j:$PZh+Q(eQp~o#K`CɁdkR^T DԈPX,sdg~&ؾ*u&hە~1u܅LA=gԺȶ׺|A'[˽yg{{/^|?*ܪ_ D޺\I>*Okϒ,%CDW92G['_WO_S_=}B=U~>ѽz>8:[뗚.\%b#àD k3flZk"ԉP&Y#/iZstXCe{%72gUߞC\UAֳ,H-3ⶢ'B'6Y6qiyh8=QzX2̶,-+Gף<-k%ڢkB! ]w7lez5}XOmYtB;pPӸ؊(:,Xz(3 Ƿ%2|~&0vYMy{.%z@>4 :dm2?a5[VCbKd^AtV%Lf}.twXZ3U؇xypr&7F+ xzS郥5< b2"_ ar4Ւ'"7tt1"yѾB loLkQpUz͙2c*9u9e,·e(hKm0N Pↁewd5^aU>lD+K9P8{!Co> 4I1#SPTe}-_fB[Y7 l,% R%3Tk?֗ bB$gwYu|rQ9 w.sEikT/o"6Srn湲 o{ 울l (lQLe 78WBWU!#diB5#VT7oԔ@ ,M5eO}LWMj:i(DA7]ݺ;\@0Ve5?=e#Y;Ժ/3tU--7u 4Lwg@Q(xZ*AV0G<_N!i^`=_d'׫u9Sqz;b}6NzDp9,=F L-^.|N3?rSٱOP -QdEGȄf7e;[wʃ;^uC~\.i F +.Gr?0Dt55ig*oG؇yO]OJŇIilSXi K#8m?&$^Mhx_ fMP ά`?㌞(VQX!`B*t[rޤ=COM^u=ph !ºXF(vrߕnXBl߼aռt֗ŴJ"3(^L{.YJqDY1`ocVr+hhTgۻMpyܸ3N45rl T{tN6&|FZ~l鶙D׌ZnkUꆦ:%6xv̵Fi1.a@woӲY j {``1^o8UJRp@VU錦Hս-)RP^_B֟ڱQ 胢j{Dg6G,ZBSxP*?+u0vV|I#E%4 Exq|U4SRO/:''XTLE'aD„tSϑݑَ;g:f.W :Ed\c7Hw!.%vo# 0`sU,Esj!8|t|VOOK6<@i 磟w[okT^Q8X)Ic<*A;PYGVV& *\3^B>\X+~]>ۏ;!|'eLm$G9{12\G)o M,eT\5w½ᣬ yHuG~t |R4%Zj'Ϭg$''yt4׬j4Kz~h,ߨ L6 3WB󳍼?ȷKC1pxuMiڅd;dzni3עM)ɻɫm*u"GVt˲eNƭZ#whhʎVQD޲iFMLj<`M#]oLT9K9kItݮ$<<UkwAAs]N˥HW+qa8ޮX, v&F kT`qSi&?u` z6W^=oa[ym|V8yu-Q_WSckP]'7Jm k&ӛ%Ja㗐jZ<ênDς;*kw1fn_e2p.K%h˜j|]4eRC#ٴ7Ol#HϪ2Z 0 QHN+0Vᱬ']& 4f:0kT>"dm]R_]WPw?zCz6I@ɐZʹZH ϰmWJ{/BpR*B}7T}_3W8#Z®?%ÃՇ mu;"r-O hXQoɹtG@@|֡/̵oOv71̙ԧ} \ S 0_4A ~2z4%=;EYLd bߴшtZnR>0\5P+ )+~sOI n & 'V%"PyN.kw=Į=P.'=gkG<_+x9Y2:ဢsfZ]NEd?ZK&U4Ch%V3}n} 6`EqZ\]"6‚:YE[%O4mWdo j`LK[T7 ͸9`䬓MKXZ[t5l|8}p>a;KYO2{Xi6tpZmULT sEDY E̪^@S_v3VS-^XlG];;}z9{.EbvENx@ղɺ[h:!Th<ٙ\':C[R`e]ko92߶&&GBe`7^!e2ڹKd6- ÞylܙX`_43Ď 3Z2P~QF&i =iTJ0B~G#LtoG^j% 2Fő ׭sh(Ttڃ7 ʹ[DƇP/ew?2,%_D,jHRzꅐ 3Xr'@U=Ή[,\qͨ.:-z`Zͳ+a/(G>>* ɟ61vGeZ eּ5XYRe aa䦊HP (N*-s&*NC<0;cH$ci9ʩտג6 ~I<6|9Haß\W8xdsTÖCjǗ#|4IΟ,^$#mUg( ;ڥFiQwDOl/IS^Ђ"?  e4.CSe  /(g|5`}'k[J#5c lZ!JV*ZK!1KIsP;KkMlBGt<ؑeum$$iPڨXܙg4AsݓhZ$ [mRVF`oA,ҴJ/b N@^}sUP >9x+nRKB9zЪQ՗&,c8%Ͽx}.[ElSF|W˅)AAt,x'gIǀҐ??????????????????E? readline-7.0/examples/rlfe/ChangeLog000660 000436 000000 00000002473 10142531027 017536 0ustar00chetwheel000000 000000 2004-11-04 Per Bothner * pty.c: Import from screen-4.0.2. * configure.in, Makefile.in, config.h.in: Set up autoconf handling, copying a bunk of stuff over from screen. * rlfe.c: Use OpenPTY from pty.c instead of get_master_pty. 2004-11-03 Per Bothner * rlfe.c: Get input emphasis (boldening) more robust. * rlfe.c: Various cleanups on comments and names. 2003-11-07 Wolfgang Taeuber * Specify a history file and the size of the history file with command * line options; use EDITOR/VISUAL to set vi/emacs preference. 1999-09-03 Chet Ramey * fep.c: Memmove is not universally available. This patch assumes that an autoconf test has been performed, and that memcpy is available without checking. * fep.c: VDISCARD is not universally available, even when termios is. * fep.c: If a system doesn't have TIOCSCTTY, the first `open' performed after setsid allocates a controlling terminal. The original code would leave the child process running on the slave pty without a controlling tty if TIOCSCTTY was not available. * fep.c: Most versions of SVR4, including solaris, don't allow terminal ioctl calls on the master side of the pty. 1999-08-28 Per Bothner * fep.c: Initial release. readline-7.0/examples/rlfe/Makefile.in000664 000436 000000 00000012221 11150350506 020026 0ustar00chetwheel000000 000000 # # Makefile template for rlfe # # See machine dependant config.h for more configuration options. # srcdir = @srcdir@ VPATH = @srcdir@ DESTDIR = # Where to install screen. prefix = @prefix@ exec_prefix = @exec_prefix@ # don't forget to change mandir and infodir in doc/Makefile. bindir = $(exec_prefix)/bin VERSION = @VERSION@ SCREEN = screen-$(VERSION) CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ #LDFLAGS = -L$(READLINE_DIR) LDFLAGS = @LDFLAGS@ LIBS = -lreadline -lhistory @LIBS@ CPP=@CPP@ CPP_DEPEND=$(CC) -MM INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ AWK = @AWK@ OPTIONS= #OPTIONS= -DDEBUG SHELL=/bin/sh CFILES= rlfe.c pty.c HFILES= extern.h os.h screen.h EXTRA_DIST=configure.in configure Makefile.in config.h.in ChangeLog README OFILES= rlfe.o pty.o all: rlfe rlfe: $(OFILES) $(CC) $(LDFLAGS) -o $@ $(OFILES) $(LIBS) rlfe-$(VERSION).tar.gz: tar czf $@ $(CFILES) $(HFILES) $(EXTRA_DIST) .c.o: $(CC) -c -I. -I$(srcdir) $(CPPFLAGS) $(M_CFLAGS) $(DEFS) $(OPTIONS) $(CFLAGS) $< install_bin: .version screen -if [ -f $(DESTDIR)$(bindir)/$(SCREEN) ] && [ ! -f $(DESTDIR)$(bindir)/$(SCREEN).old ]; \ then mv $(DESTDIR)$(bindir)/$(SCREEN) $(DESTDIR)$(bindir)/$(SCREEN).old; fi $(INSTALL_PROGRAM) screen $(DESTDIR)$(bindir)/$(SCREEN) -chown root $(DESTDIR)$(bindir)/$(SCREEN) && chmod 4755 $(DESTDIR)$(bindir)/$(SCREEN) # This doesn't work if $(bindir)/screen is a symlink -if [ -f $(DESTDIR)$(bindir)/screen ] && [ ! -f $(DESTDIR)$(bindir)/screen.old ]; then mv $(DESTDIR)$(bindir)/screen $(DESTDIR)$(bindir)/screen.old; fi rm -f $(DESTDIR)$(bindir)/screen (cd $(DESTDIR)$(bindir) && ln -sf $(SCREEN) screen) cp $(srcdir)/utf8encodings/?? $(DESTDIR)$(SCREENENCODINGS) uninstall: .version rm -f $(DESTDIR)$(bindir)/$(SCREEN) rm -f $(DESTDIR)$(bindir)/screen -mv $(DESTDIR)$(bindir)/screen.old $(DESTDIR)$(bindir)/screen rm -f $(DESTDIR)$(ETCSCREENRC) cd doc; $(MAKE) uninstall shadow: mkdir shadow; cd shadow; ln -s ../*.[ch] ../*.in ../*.sh ../configure ../doc ../terminfo ../etc . rm -f shadow/term.h shadow/tty.c shadow/comm.h shadow/osdef.h echo "install all Makefiles and config:" > shadow/Makefile echo " rm -f config.cache" >> shadow/Makefile echo " sh ./configure" >> shadow/Makefile term.h: term.c term.sh AWK=$(AWK) srcdir=$(srcdir) sh $(srcdir)/term.sh kmapdef.c: term.h tty.c: tty.sh sh $(srcdir)/tty.sh tty.c mostlyclean: rm -f $(OFILES) rlfe *.o clean celan: mostlyclean rm -f tty.c term.h comm.h osdef.h kmapdef.c core # Delete all files from the current directory that are created by # configuring or building the program. # building of term.h/comm.h requires awk. Keep it in the distribution # we keep config.h, as this file knows where 'make dist' finds the ETCSCREENRC. #distclean: mostlyclean # rm -f $(SCREEN).tar $(SCREEN).tar.gz # rm -f config.status Makefile # rm -f osdef.h doc/Makefile maintainer-clean: @echo "This command is not even intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # Delete everything from the current directory that can be # reconstructed with this Makefile. realclean: .version mostlyclean rm -f $(SCREEN).tar $(SCREEN).tar.gz rm -f config.status Makefile doc/Makefile rm -f tty.c term.h comm.h osdef.h kmapdef.c rm -f config.h echo "install all Makefiles and config:" > Makefile echo " sh ./configure" >> Makefile tags TAGS: $(CFILES) -ctags *.sh $(CFILES) *.h -ctags -e *.sh $(CFILES) *.h dist: .version $(SCREEN).tar.gz # Perform self-tests (if any). check: config: rm -f config.cache sh ./configure ############################################################################### .version: @rev=`sed < $(srcdir)/patchlevel.h -n -e '/#define REV/s/#define REV *//p'`; \ vers=`sed < $(srcdir)/patchlevel.h -n -e '/#define VERS/s/#define VERS *//p'`; \ pat=`sed < $(srcdir)/patchlevel.h -n -e '/#define PATCHLEVEL/s/#define PATCHLEVEL *//p'`; \ if [ "$${rev}.$${vers}.$${pat}" != "$(VERSION)" ]; then \ echo "This distribution is screen-$${rev}.$${vers}.$${pat}, but"; \ echo "the Makefile is from $(VERSION). Please update!"; exit 1; fi ############################################################################### mdepend: $(CFILES) term.h @rm -f DEPEND ; \ for i in ${CFILES} ; do \ echo "$$i" ; \ echo `echo "$$i" | sed -e 's/.c$$/.o/'`": $$i" `\ cc -E $$i |\ grep '^# .*"\./.*\.h"' |\ (sort -t'"' -u -k 2,2 2>/dev/null || sort -t'"' -u +1 -2) |\ sed -e 's/.*"\.\/\(.*\)".*/\1/'\ ` >> DEPEND ; \ done depend: depend.in ./config.status || ./configure depend.in: $(CFILES) term.h cp Makefile.in Makefile.in~ sed -e '/\#\#\# Dependencies/q' < Makefile.in > tmp_make for i in $(CFILES); do echo $$i; $(CPP_DEPEND) $$i >> tmp_make; done mv tmp_make Makefile.in Makefile makefile: config.status $(srcdir)/Makefile.in CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status config.status: $(srcdir)/configure $(SHELL) ./config.status --recheck $(srcdir)/configure: $(srcdir)/configure.in cd $(srcdir) && autoconf ############################################################################### ### Dependencies: pty.o: pty.c config.h readline-7.0/examples/rlfe/README000664 000436 000000 00000005514 10142553403 016651 0ustar00chetwheel000000 000000 rlfe (ReadLine Front-End) is a "universal wrapper" around readline. You specify an interactive program to run (typically a shell), and readline is used to edit input lines. There are other such front-ends; what distinguishes this one is that it monitors the state of the inferior pty, and if the inferior program switches its terminal to raw mode, then rlfe passes your characters through directly. This basically means you can run your entire session (including bash and terminal-mode emacs) under rlfe. FEATURES * Can use all readline commands (and history) in commands that read input lines in "canonical mode" - even 'cat'! * Automatically switches between "readline-editing mode" and "raw mode" depending on the terminal mode. If the inferior program invokes readline itself, it will do its own line editing. (The inferior readline will not know about rlfe, and it will have its own history.) You can even run programs like 'emavs -nw' and 'vi' under rlfe. The goal is you could leave rlfe always on without even knowing about it. (We're not quite there, but it works tolerably well.) * The input line (after any prompt) is changed to bold-face. INSTALL The usual: ./configure && make && make install Note so far rlfe has only been tested on GNU Linux (Fedora Core 2) and Mac OS X (10.3). This assumes readline header files and libraries are in the default places. If not, you can create a link named readline pointing to the readline sources. To link with libreadline.a and libhistory.a you can copy or link them, or add LDFLAGS='-/path/to/readline' to the make command-line. USAGE Just run it. That by default runs bash. You can run some other command by giving it as command-line arguments. There are a few tweaks: -h allows you to name the history file, and -s allows you to specify its size. It default to "emacs" mode, but if the the environment variable EDITOR is set to "vi" that mode is chosen. ISSUES * The mode switching depends on the terminal mode set by the inferior program. Thus ssh/telnet/screen-type programs will typically be in raw mode, so rlfe won't be much use, even if remote programs run in canonical mode. The work-around is to run rlfe on the remote end. * Echo supression and prompt recognition are somewhat fragile. (A protocol so that the o/s tty code can reliably communicate its state to rlfe could solve this problem, and the previous one.) * See the intro to rlfe.c for more notes. * Assumes a VT100-compatible terminal, though that could be generalized if anybody cares. * Requires ncurses. * It would be useful to integrate rlfe's logic in a terminal emulator. That would make it easier to reposition the edit position with a mouse, integrate cut-and-paste with the system clipboard, and more robustly handle escape sequence and multi-byte characters more robustly. AUTHOR Per Bothner LICENSE GPL. readline-7.0/examples/rlfe/config.h.in000644 000436 000000 00000022232 11567744015 020023 0ustar00chetwheel000000 000000 /* Copyright 2004 Per Bothner * Based on config.h from screen-4.0.2. * Copyright (c) 1993-2000 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: config.h.in,v 1.12 1994/05/31 12:31:36 mlschroe Exp $ FAU */ /********************************************************************** * * User Configuration Section */ /* * define PTYMODE if you do not like the default of 0622, which allows * public write to your pty. * define PTYGROUP to some numerical group-id if you do not want the * tty to be in "your" group. * Note, screen is unable to change mode or group of the pty if it * is not installed with sufficient privilege. (e.g. set-uid-root) * define PTYROFS if the /dev/pty devices are mounted on a read-only * filesystem so screen should not even attempt to set mode or group * even if running as root (e.g. on TiVo). */ #undef PTYMODE #undef PTYGROUP #undef PTYROFS /* * If screen is NOT installed set-uid root, screen can provide tty * security by exclusively locking the ptys. While this keeps other * users from opening your ptys, it also keeps your own subprocesses * from being able to open /dev/tty. Define LOCKPTY to add this * exclusive locking. */ #undef LOCKPTY /********************************************************************** * * End of User Configuration Section * * Rest of this file is modified by 'configure' * Change at your own risk! * */ /* * Some defines to identify special unix variants */ #ifndef SVR4 #undef SVR4 #endif #ifndef _POSIX_SOURCE #undef _POSIX_SOURCE #endif /* * Define POSIX if your system supports IEEE Std 1003.1-1988 (POSIX). */ #undef POSIX /* * Define TERMIO if you have struct termio instead of struct sgttyb. * This is usually the case for SVID systems, where BSD uses sgttyb. * POSIX systems should define this anyway, even though they use * struct termios. */ #undef TERMIO /* * Define CYTERMIO if you have cyrillic termio modes. */ #undef CYTERMIO /* * Define TERMINFO if your machine emulates the termcap routines * with the terminfo database. * Thus the .screenrc file is parsed for * the command 'terminfo' and not 'termcap'. */ #undef TERMINFO /* * If your library does not define ospeed, define this. */ #undef NEED_OSPEED /* * Define SYSV if your machine is SYSV complient (Sys V, HPUX, A/UX) */ #ifndef SYSV #undef SYSV #endif /* * Define SIGVOID if your signal handlers return void. On older * systems, signal returns int, but on newer ones, it returns void. */ #undef SIGVOID /* * Define USESIGSET if you have sigset for BSD 4.1 reliable signals. */ #undef USESIGSET /* * Define SYSVSIGS if signal handlers must be reinstalled after * they have been called. */ #undef SYSVSIGS /* * Define BSDWAIT if your system defines a 'union wait' in * * Only allow BSDWAIT i.e. wait3 on nonposix systems, since * posix implies wait(3) and waitpid(3). vdlinden@fwi.uva.nl * */ #ifndef POSIX #undef BSDWAIT #endif /* * On RISCOS we prefer wait2() over wait3(). rouilj@sni-usa.com */ #ifdef BSDWAIT #undef USE_WAIT2 #endif /* * Define if you have the utempter utmp helper program */ #undef HAVE_UTEMPTER /* * If ttyslot() breaks getlogin() by returning indexes to utmp entries * of type DEAD_PROCESS, then our getlogin() replacement should be * selected by defining BUGGYGETLOGIN. */ #undef BUGGYGETLOGIN /* * If your system has the calls setreuid() and setregid(), * define HAVE_SETREUID. Otherwise screen will use a forked process to * safely create output files without retaining any special privileges. */ #undef HAVE_SETREUID /* * If your system supports BSD4.4's seteuid() and setegid(), define * HAVE_SETEUID. */ #undef HAVE_SETEUID /* * If you want the "time" command to display the current load average * define LOADAV. Maybe you must install screen with the needed * privileges to read /dev/kmem. * Note that NLIST_ stuff is only checked, when getloadavg() is not available. */ #undef LOADAV #undef LOADAV_NUM #undef LOADAV_TYPE #undef LOADAV_SCALE #undef LOADAV_GETLOADAVG #undef LOADAV_UNIX #undef LOADAV_AVENRUN #undef LOADAV_USE_NLIST64 #undef NLIST_DECLARED #undef NLIST_STRUCT #undef NLIST_NAME_UNION /* * If your system has the new format /etc/ttys (like 4.3 BSD) and the * getttyent(3) library functions, define GETTTYENT. */ #undef GETTTYENT /* * Define USEBCOPY if the bcopy/memcpy from your system's C library * supports the overlapping of source and destination blocks. When * undefined, screen uses its own (probably slower) version of bcopy(). * * SYSV machines may have a working memcpy() -- Oh, this is * quite unlikely. Tell me if you see one. * "But then, memmove() should work, if at all available" he thought... * Boing, never say "works everywhere" unless you checked SCO UNIX. * Their memove fails the test in the configure script. Sigh. (Juergen) */ #undef USEBCOPY #undef USEMEMCPY #undef USEMEMMOVE /* * If your system has vsprintf() and requires the use of the macros in * "varargs.h" to use functions with variable arguments, * define USEVARARGS. */ #undef USEVARARGS /* * If your system has strerror() define this. */ #undef HAVE_STRERROR /* * If the select return value doesn't treat a descriptor that is * usable for reading and writing as two hits, define SELECT_BROKEN. */ #undef SELECT_BROKEN /* * Define this if your system supports named pipes. */ #undef NAMEDPIPE /* * Define this if your system exits select() immediatly if a pipe is * opened read-only and no writer has opened it. */ #undef BROKEN_PIPE /* * Define this if the unix-domain socket implementation doesn't * create a socket in the filesystem. */ #undef SOCK_NOT_IN_FS /* * If your system has setenv() and unsetenv() define USESETENV */ #undef USESETENV /* * If your system does not come with a setenv()/putenv()/getenv() * functions, you may bring in our own code by defining NEEDPUTENV. */ #undef NEEDPUTENV /* * If the passwords are stored in a shadow file and you want the * builtin lock to work properly, define SHADOWPW. */ #undef SHADOWPW /* * If you are on a SYS V machine that restricts filename length to 14 * characters, you may need to enforce that by setting NAME_MAX to 14 */ #undef NAME_MAX /* KEEP_UNDEF_HERE override system value */ #undef NAME_MAX /* * define HAVE_RENAME if your system has a rename() function */ #undef HAVE_RENAME /* * define HAVE__EXIT if your system has the _exit() call. */ #undef HAVE__EXIT /* * define HAVE_LSTAT if your system has symlinks and the lstat() call. */ #undef HAVE_LSTAT /* * define HAVE_UTIMES if your system has the utimes() call. */ #undef HAVE_UTIMES /* * define HAVE_FCHOWN if your system has the fchown() call. */ #undef HAVE_FCHOWN /* * define HAVE_FCHMOD if your system has the fchmod() call. */ #undef HAVE_FCHMOD /* * define HAVE_VSNPRINTF if your system has vsnprintf() (GNU lib). */ #undef HAVE_VSNPRINTF /* * define HAVE_GETCWD if your system has the getcwd() call. */ #undef HAVE_GETCWD /* * define HAVE_SETLOCALE if your system has the setlocale() call. */ #undef HAVE_SETLOCALE /* * define HAVE_STRFTIME if your system has the strftime() call. */ #undef HAVE_STRFTIME /* * define HAVE_NL_LANGINFO if your system has the nl_langinfo() call * and defines CODESET. */ #undef HAVE_NL_LANGINFO /* * Newer versions of Solaris include fdwalk, which can greatly improve * the startup time of screen; otherwise screen spends a lot of time * closing file descriptors. */ #undef HAVE_FDWALK /* * define HAVE_DEV_PTC if you have a /dev/ptc character special * device. */ #undef HAVE_DEV_PTC /* * define HAVE_SVR4_PTYS if you have a /dev/ptmx character special * device and support the ptsname(), grantpt(), unlockpt() functions. */ #undef HAVE_SVR4_PTYS /* * define HAVE_GETPT if you have the getpt() function. */ #undef HAVE_GETPT /* * define HAVE_OPENPTY if your system has the openpty() call. */ #undef HAVE_OPENPTY /* * define PTYRANGE0 and or PTYRANGE1 if you want to adapt screen * to unusual environments. E.g. For SunOs the defaults are "qpr" and * "0123456789abcdef". For SunOs 4.1.2 * #define PTYRANGE0 "pqrstuvwxyzPQRST" * is recommended by Dan Jacobson. */ #undef PTYRANGE0 #undef PTYRANGE1 #define USEVARARGS #undef HAVE_SYS_STROPTS_H #undef HAVE_SYS_WAIT_H #undef HAVE_SGTTY_H #undef HAVE_SYS_SELECT_H readline-7.0/examples/rlfe/configure000775 000436 000000 00000463430 11641651551 017715 0ustar00chetwheel000000 000000 #! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.68. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec "$CONFIG_SHELL" $as_opts "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="rlfe.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='LTLIBOBJS LIBOBJS XTERMPATH WRITEPATH AWK EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC VERSION target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_pty_mode with_pty_group ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pty-mode=mode default mode for ptys --with-pty-group=group default group for ptys Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.68 Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_config_headers="$ac_config_headers config.h" VERSION=0.4 old_CFLAGS="$CFLAGS" ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" if test $ac_cv_c_compiler_gnu = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC needs -traditional" >&5 $as_echo_n "checking whether $CC needs -traditional... " >&6; } if ${ac_cv_prog_gcc_traditional+:} false; then : $as_echo_n "(cached) " >&6 else ac_pattern="Autoconf.*'x'" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TIOCGETP _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes else ac_cv_prog_gcc_traditional=no fi rm -f conftest* if test $ac_cv_prog_gcc_traditional = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include Autoconf TCGETA _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "$ac_pattern" >/dev/null 2>&1; then : ac_cv_prog_gcc_traditional=yes fi rm -f conftest* fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_gcc_traditional" >&5 $as_echo "$ac_cv_prog_gcc_traditional" >&6; } if test $ac_cv_prog_gcc_traditional = yes; then CC="$CC -traditional" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5 $as_echo_n "checking for library containing strerror... " >&6; } if ${ac_cv_search_strerror+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char strerror (); int main () { return strerror (); ; return 0; } _ACEOF for ac_lib in '' cposix; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_strerror=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_strerror+:} false; then : break fi done if ${ac_cv_search_strerror+:} false; then : else ac_cv_search_strerror=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5 $as_echo "$ac_cv_search_strerror" >&6; } ac_res=$ac_cv_search_strerror if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(){exit(0);} _ACEOF if ac_fn_c_try_run "$LINENO"; then : else if test $CC != cc ; then echo "Your $CC failed - restarting with CC=cc" 1>&6 echo "" 1>&6 CC=cc export CC exec $0 $configure_args fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main(){exit(0);} _ACEOF if ac_fn_c_try_run "$LINENO"; then : else exec 5>&2 eval $ac_link echo "CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;" 1>&6 echo "$ac_compile" 1>&6 as_fn_error $? "Can't run the compiler - sorry" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ main() { int __something_strange_(); __something_strange_(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : as_fn_error $? "Your compiler does not set the exit status - sorry" "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done if test -f etc/toolcheck; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy tools..." >&5 $as_echo "$as_me: checking for buggy tools..." >&6;} sh etc/toolcheck 1>&6 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for System V..." >&5 $as_echo "$as_me: checking for System V..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { int x = SIGCHLD | FNDELAY; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else $as_echo "#define SYSV 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Solaris 2.x..." >&5 $as_echo "$as_me: checking for Solaris 2.x..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined(SVR4) && defined(sun) yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : LIBS="$LIBS -lsocket -lnsl -lkstat" fi rm -f conftest* { $as_echo "$as_me:${as_lineno-$LINENO}: checking select..." >&5 $as_echo "$as_me: checking select..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="$LIBS -lnet -lnsl" { $as_echo "$as_me:${as_lineno-$LINENO}: checking select with $LIBS..." >&5 $as_echo "$as_me: checking select with $LIBS..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { select(0, 0, 0, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else as_fn_error $? "!!! no select - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking select return value..." >&5 $as_echo "$as_me: checking select return value..." >&6;} if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif main() { #ifdef FD_SET fd_set f; #else int f; #endif #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ exit(0); #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif exit(1); close(0); if (open(nam, O_RDWR | O_NONBLOCK)) exit(1); if (write(0, "TEST", 4) == -1) exit(1); #else #include #include #include main() { int s1, s2, l; struct sockaddr_un a; #ifdef FD_SET fd_set f; #else int f; #endif (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) exit(1); a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) exit(1); if (listen(s1, 2)) exit(1); if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); exit(0); } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) exit(1); #endif #ifdef FD_SET FD_SET(0, &f); #else f = 1; #endif if (select(1, &f, 0, 0, 0) == -1) exit(1); if (select(1, &f, &f, 0, 0) != 2) exit(1); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo "- select is ok" 1>&6 else echo "- select can't count" 1>&6 $as_echo "#define SELECT_BROKEN 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for tgetent..." >&5 $as_echo "$as_me: checking for tgetent..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else olibs="$LIBS" LIBS="-lcurses $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libcurses..." >&5 $as_echo "$as_me: checking libcurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-ltermcap $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libtermcap..." >&5 $as_echo "$as_me: checking libtermcap..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-ltermlib $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libtermlib..." >&5 $as_echo "$as_me: checking libtermlib..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else LIBS="-lncurses $olibs" { $as_echo "$as_me:${as_lineno-$LINENO}: checking libncurses..." >&5 $as_echo "$as_me: checking libncurses..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { tgetent((char *)0, (char *)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else as_fn_error $? "!!! no tgetent - no screen" "$LINENO" 5 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *tgoto(); main() { exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo "- you use the termcap database" 1>&6 else echo "- you use the terminfo database" 1>&6 $as_echo "#define TERMINFO 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking ospeed..." >&5 $as_echo "$as_me: checking ospeed..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern short ospeed; int main () { ospeed=5; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else $as_echo "#define NEED_OSPEED 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking for /dev/ptc..." >&5 $as_echo "$as_me: checking for /dev/ptc..." >&6;} if test -r /dev/ptc; then $as_echo "#define HAVE_DEV_PTC 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SVR4 ptys..." >&5 $as_echo "$as_me: checking for SVR4 ptys..." >&6;} sysvr4ptys= if test -c /dev/ptmx ; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ptsname(0);grantpt(0);unlockpt(0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_SVR4_PTYS 1" >>confdefs.h sysvr4ptys=1 fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi for ac_func in getpt do : ac_fn_c_check_func "$LINENO" "getpt" "ac_cv_func_getpt" if test "x$ac_cv_func_getpt" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPT 1 _ACEOF fi done if test -z "$sysvr4ptys"; then for ac_func in openpty do : ac_fn_c_check_func "$LINENO" "openpty" "ac_cv_func_openpty" if test "x$ac_cv_func_openpty" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENPTY 1 _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for openpty in -lutil" >&5 $as_echo_n "checking for openpty in -lutil... " >&6; } if ${ac_cv_lib_util_openpty+:} false; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lutil $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char openpty (); int main () { return openpty (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_util_openpty=yes else ac_cv_lib_util_openpty=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_util_openpty" >&5 $as_echo "$ac_cv_lib_util_openpty" >&6; } if test "x$ac_cv_lib_util_openpty" = xyes; then : $as_echo "#define HAVE_OPENPTY 1" >>confdefs.h LIBS="$LIBS -lutil" fi fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ptyranges..." >&5 $as_echo "$as_me: checking for ptyranges..." >&6;} if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef M_UNIX yes; #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : ptys=`echo /dev/ptyp??` else ptys=`echo $pdir/pty??` fi rm -f conftest* if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` cat >>confdefs.h <<_ACEOF #define PTYRANGE0 "$p0" _ACEOF cat >>confdefs.h <<_ACEOF #define PTYRANGE1 "$p1" _ACEOF fi # Check whether --with-pty-mode was given. if test "${with_pty_mode+set}" = set; then : withval=$with_pty_mode; ptymode="${withval}" fi # Check whether --with-pty-group was given. if test "${with_pty_group+set}" = set; then : withval=$with_pty_group; ptygrp="${withval}" fi test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else { $as_echo "$as_me:${as_lineno-$LINENO}: checking default tty permissions/group..." >&5 $as_echo "$as_me: checking default tty permissions/group..." >&6;} rm -f conftest_grp if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) exit(1); if (stat(x, &sb)) exit(1); om = sb.st_mode; if (om & 002) exit(0); m = system("mesg y"); if (m == -1 || m == 127) exit(1); if (stat(x, &sb)) exit(1); m = sb.st_mode; if (chmod(x, om)) exit(1); if (m & 002) exit(0); if (sb.st_gid == getgid()) exit(1); if (!(fp=fopen("conftest_grp", "w"))) exit(1); fprintf(fp, "%d\n", sb.st_gid); fclose(fp); exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : if test -f conftest_grp; then ptygrp=`cat conftest_grp` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else echo "- ptys are world accessable" 1>&6 fi else WRITEPATH='' XTERMPATH='' # Extract the first word of "write", so it can be a program name with args. set dummy write; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_WRITEPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $WRITEPATH in [\\/]* | ?:[\\/]*) ac_cv_path_WRITEPATH="$WRITEPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_WRITEPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi WRITEPATH=$ac_cv_path_WRITEPATH if test -n "$WRITEPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WRITEPATH" >&5 $as_echo "$WRITEPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "xterm", so it can be a program name with args. set dummy xterm; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XTERMPATH+:} false; then : $as_echo_n "(cached) " >&6 else case $XTERMPATH in [\\/]* | ?:[\\/]*) ac_cv_path_XTERMPATH="$XTERMPATH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_XTERMPATH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi XTERMPATH=$ac_cv_path_XTERMPATH if test -n "$XTERMPATH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XTERMPATH" >&5 $as_echo "$XTERMPATH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` echo "- pty mode: $ptymode, group: $ptygrp" 1>&6 cat >>confdefs.h <<_ACEOF #define PTYMODE $ptymode _ACEOF cat >>confdefs.h <<_ACEOF #define PTYGROUP $ptygrp _ACEOF else echo "- ptys are world accessable" 1>&6 fi else echo "- can't determine - assume ptys are world accessable" 1>&6 fi fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest_grp fi if test -n "$posix" ; then echo "assuming posix signal definition" 1>&6 $as_echo "#define SIGVOID 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers..." >&5 $as_echo "$as_me: checking return type of signal handlers..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifdef signal #undef signal #endif extern void (*signal ()) (); int main () { int i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define SIGVOID 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking sigset..." >&5 $as_echo "$as_me: checking sigset..." >&6;} cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define USESIGSET 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: checking signal implementation..." >&5 $as_echo "$as_me: checking signal implementation..." >&6;} if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) exit(1); #endif exit(0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else $as_echo "#define SYSVSIGS 1" >>confdefs.h fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in sys/stropts.h sys/wait.h sgtty.h sys/select.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in term.h do : ac_fn_c_check_header_mongrel "$LINENO" "term.h" "ac_cv_header_term_h" "$ac_includes_default" if test "x$ac_cv_header_term_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TERM_H 1 _ACEOF fi done ac_config_files="$ac_config_files Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.68. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.68, with options \\"\$ac_cs_config\\" Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi readline-7.0/examples/rlfe/configure.in000644 000436 000000 00000021571 11641651544 020313 0ustar00chetwheel000000 000000 dnl Process this file with autoconf to produce a configure script. AC_INIT(rlfe.c) AC_CONFIG_HEADER(config.h) VERSION=0.4 AC_SUBST(VERSION) dnl dnl Define some useful macros dnl AC_DEFUN([AC_PROGRAM_SOURCE], [AC_REQUIRE([AC_PROG_CPP])AC_PROVIDE([$0])cat > conftest.c <&5 | sed -e '1,/_CUT_HERE_/d' -e 's/ //g' > conftest.out" . ./conftest.out rm -f conftest* ])dnl dnl define(AC_NOTE, [echo "$1" 1>&AC_FD_MSG ])dnl old_CFLAGS="$CFLAGS" AC_PROG_CC AC_PROG_CPP AC_PROG_GCC_TRADITIONAL AC_ISC_POSIX AC_TRY_RUN(main(){exit(0);},,[ if test $CC != cc ; then AC_NOTE(Your $CC failed - restarting with CC=cc) AC_NOTE() CC=cc export CC exec $0 $configure_args fi ]) AC_TRY_RUN(main(){exit(0);},, exec 5>&2 eval $ac_link AC_NOTE(CC=$CC; CFLAGS=$CFLAGS; LIBS=$LIBS;) AC_NOTE($ac_compile) AC_MSG_ERROR(Can't run the compiler - sorry)) AC_TRY_RUN([ main() { int __something_strange_(); __something_strange_(0); } ],AC_MSG_ERROR(Your compiler does not set the exit status - sorry)) AC_PROG_AWK if test -f etc/toolcheck; then AC_CHECKING(for buggy tools) sh etc/toolcheck 1>&AC_FD_MSG fi dnl dnl **** special unix variants **** dnl AC_CHECKING(for System V) AC_TRY_COMPILE( [#include #include #include ], [int x = SIGCHLD | FNDELAY;], , AC_DEFINE(SYSV)) AC_CHECKING(for Solaris 2.x) AC_EGREP_CPP(yes, [#if defined(SVR4) && defined(sun) yes #endif ], LIBS="$LIBS -lsocket -lnsl -lkstat") dnl dnl **** select() **** dnl AC_CHECKING(select) AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, LIBS="$LIBS -lnet -lnsl" AC_CHECKING(select with $LIBS) AC_TRY_LINK(,[select(0, 0, 0, 0, 0);],, AC_MSG_ERROR(!!! no select - no screen)) ) dnl dnl **** check the select implementation **** dnl AC_CHECKING(select return value) AC_TRY_RUN([ #include #include #include char *nam = "/tmp/conftest$$"; #ifdef NAMEDPIPE #ifndef O_NONBLOCK #define O_NONBLOCK O_NDELAY #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif main() { #ifdef FD_SET fd_set f; #else int f; #endif #ifdef __FreeBSD__ /* From Andrew A. Chernov (ache@astral.msk.su): * opening RDWR fifo fails in BSD 4.4, but select return values are * right. */ exit(0); #endif (void)alarm(5); #ifdef POSIX if (mkfifo(nam, 0777)) #else if (mknod(nam, S_IFIFO|0777, 0)) #endif exit(1); close(0); if (open(nam, O_RDWR | O_NONBLOCK)) exit(1); if (write(0, "TEST", 4) == -1) exit(1); #else #include #include #include main() { int s1, s2, l; struct sockaddr_un a; #ifdef FD_SET fd_set f; #else int f; #endif (void)alarm(5); if ((s1 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) exit(1); a.sun_family = AF_UNIX; strcpy(a.sun_path, nam); (void) unlink(nam); if (bind(s1, (struct sockaddr *) &a, strlen(nam)+2) == -1) exit(1); if (listen(s1, 2)) exit(1); if (fork() == 0) { if ((s2 = socket(AF_UNIX, SOCK_STREAM, 0)) == -1) kill(getppid(), 3); (void)connect(s2, (struct sockaddr *)&a, strlen(nam) + 2); if (write(s2, "HELLO", 5) == -1) kill(getppid(), 3); exit(0); } l = sizeof(a); close(0); if (accept(s1, (struct sockaddr *)&a, &l)) exit(1); #endif #ifdef FD_SET FD_SET(0, &f); #else f = 1; #endif if (select(1, &f, 0, 0, 0) == -1) exit(1); if (select(1, &f, &f, 0, 0) != 2) exit(1); exit(0); } ],AC_NOTE(- select is ok), AC_NOTE(- select can't count) AC_DEFINE(SELECT_BROKEN)) dnl dnl **** termcap or terminfo **** dnl AC_CHECKING(for tgetent) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, olibs="$LIBS" LIBS="-lcurses $olibs" AC_CHECKING(libcurses) AC_TRY_LINK(,[ #ifdef __hpux __sorry_hpux_libcurses_is_totally_broken_in_10_10(); #else tgetent((char *)0, (char *)0); #endif ],, LIBS="-ltermcap $olibs" AC_CHECKING(libtermcap) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, LIBS="-ltermlib $olibs" AC_CHECKING(libtermlib) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, LIBS="-lncurses $olibs" AC_CHECKING(libncurses) AC_TRY_LINK(,tgetent((char *)0, (char *)0);,, AC_MSG_ERROR(!!! no tgetent - no screen)))))) AC_TRY_RUN([ extern char *tgoto(); main() { exit(strcmp(tgoto("%p1%d", 0, 1), "1") ? 0 : 1); }], AC_NOTE(- you use the termcap database), AC_NOTE(- you use the terminfo database) AC_DEFINE(TERMINFO)) AC_CHECKING(ospeed) AC_TRY_LINK(extern short ospeed;,ospeed=5;,,AC_DEFINE(NEED_OSPEED)) dnl dnl **** PTY specific things **** dnl AC_CHECKING(for /dev/ptc) if test -r /dev/ptc; then AC_DEFINE(HAVE_DEV_PTC) fi AC_CHECKING(for SVR4 ptys) sysvr4ptys= if test -c /dev/ptmx ; then AC_TRY_LINK([],[ptsname(0);grantpt(0);unlockpt(0);],[AC_DEFINE(HAVE_SVR4_PTYS) sysvr4ptys=1]) fi AC_CHECK_FUNCS(getpt) dnl check for openpty() if test -z "$sysvr4ptys"; then AC_CHECK_FUNCS(openpty,, [AC_CHECK_LIB(util,openpty, [AC_DEFINE(HAVE_OPENPTY)] [LIBS="$LIBS -lutil"])]) fi AC_CHECKING(for ptyranges) if test -d /dev/ptym ; then pdir='/dev/ptym' else pdir='/dev' fi dnl SCO uses ptyp%d AC_EGREP_CPP(yes, [#ifdef M_UNIX yes; #endif ], ptys=`echo /dev/ptyp??`, ptys=`echo $pdir/pty??`) dnl if test -c /dev/ptyp19; then dnl ptys=`echo /dev/ptyp??` dnl else dnl ptys=`echo $pdir/pty??` dnl fi if test "$ptys" != "$pdir/pty??" ; then p0=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\).$/\1/g' | sort -u | tr -d '\012'` p1=`echo $ptys | tr ' ' '\012' | sed -e 's/^.*\(.\)$/\1/g' | sort -u | tr -d '\012'` AC_DEFINE_UNQUOTED(PTYRANGE0,"$p0") AC_DEFINE_UNQUOTED(PTYRANGE1,"$p1") fi dnl **** pty mode/group handling **** dnl dnl support provided by Luke Mewburn , 931222 AC_ARG_WITH(pty-mode, [ --with-pty-mode=mode default mode for ptys], [ ptymode="${withval}" ]) AC_ARG_WITH(pty-group, [ --with-pty-group=group default group for ptys], [ ptygrp="${withval}" ]) test -n "$ptymode" || ptymode=0620 if test -n "$ptygrp" ; then AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_CHECKING(default tty permissions/group) rm -f conftest_grp AC_TRY_RUN([ #include #include #include main() { struct stat sb; char *x,*ttyname(); int om, m; FILE *fp; if (!(x = ttyname(0))) exit(1); if (stat(x, &sb)) exit(1); om = sb.st_mode; if (om & 002) exit(0); m = system("mesg y"); if (m == -1 || m == 127) exit(1); if (stat(x, &sb)) exit(1); m = sb.st_mode; if (chmod(x, om)) exit(1); if (m & 002) exit(0); if (sb.st_gid == getgid()) exit(1); if (!(fp=fopen("conftest_grp", "w"))) exit(1); fprintf(fp, "%d\n", sb.st_gid); fclose(fp); exit(0); } ],[ if test -f conftest_grp; then ptygrp=`cat conftest_grp` AC_NOTE([- pty mode: $ptymode, group: $ptygrp]) AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_NOTE(- ptys are world accessable) fi ],[ WRITEPATH='' XTERMPATH='' AC_PATH_PROG(WRITEPATH, write) AC_PATH_PROG(XTERMPATH, xterm) found= if test -n "$WRITEPATH$XTERMPATH"; then findfollow= lsfollow= found=`find $WRITEPATH $XTERMPATH -follow -print 2>/dev/null` if test -n "$found"; then findfollow=-follow lsfollow=L fi if test -n "$XTERMPATH"; then ptygrpn=`ls -l$lsfollow $XTERMPATH | sed -n -e 1p | $AWK '{print $4}'` if test tty != "$ptygrpn"; then XTERMPATH= fi fi fi if test -n "$WRITEPATH$XTERMPATH"; then found=`find $WRITEPATH $XTERMPATH $findfollow -perm -2000 -print` if test -n "$found"; then ptygrp=`ls -ln$lsfollow $found | sed -n -e 1p | $AWK '{print $4}'` AC_NOTE([- pty mode: $ptymode, group: $ptygrp]) AC_DEFINE_UNQUOTED(PTYMODE, $ptymode) AC_DEFINE_UNQUOTED(PTYGROUP,$ptygrp) else AC_NOTE(- ptys are world accessable) fi else AC_NOTE(- can't determine - assume ptys are world accessable) fi ] ) rm -f conftest_grp fi dnl dnl **** signal handling **** dnl if test -n "$posix" ; then dnl POSIX has reliable signals with void return type. AC_NOTE(assuming posix signal definition) AC_DEFINE(SIGVOID) else AC_CHECKING(return type of signal handlers) AC_TRY_COMPILE( [#include #include #ifdef signal #undef signal #endif extern void (*signal ()) ();], [int i;], AC_DEFINE(SIGVOID)) AC_CHECKING(sigset) AC_TRY_LINK([ #include #include ],[ #ifdef SIGVOID sigset(0, (void (*)())0); #else sigset(0, (int (*)())0); #endif ], AC_DEFINE(USESIGSET)) AC_CHECKING(signal implementation) AC_TRY_RUN([ #include #include #ifndef SIGCLD #define SIGCLD SIGCHLD #endif #ifdef USESIGSET #define signal sigset #endif int got; #ifdef SIGVOID void #endif hand() { got++; } main() { /* on hpux we use sigvec to get bsd signals */ #ifdef __hpux (void)signal(SIGCLD, hand); kill(getpid(), SIGCLD); kill(getpid(), SIGCLD); if (got < 2) exit(1); #endif exit(0); } ],,AC_DEFINE(SYSVSIGS)) fi AC_CHECK_HEADERS(sys/stropts.h sys/wait.h sgtty.h sys/select.h) AC_CHECK_HEADERS(term.h) AC_OUTPUT(Makefile) readline-7.0/examples/rlfe/extern.h000644 000436 000000 00000002610 10530140726 017440 0ustar00chetwheel000000 000000 /* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: extern.h,v 1.18 1994/05/31 12:31:57 mlschroe Exp $ FAU */ #if !defined(__GNUC__) || __GNUC__ < 2 #undef __attribute__ #define __attribute__(x) #endif #if !defined (__P) # if defined (__STDC__) || defined (__GNUC__) || defined (__cplusplus) # define __P(protos) protos # else # define __P(protos) () # endif #endif /* pty.c */ extern int OpenPTY __P((char **)); extern void InitPTY __P((int)); readline-7.0/examples/rlfe/os.h000644 000436 000000 00000030112 11567744242 016570 0ustar00chetwheel000000 000000 /* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** * $Id: os.h,v 1.10 1994/05/31 12:32:22 mlschroe Exp $ FAU */ #include #include #include /* In strict ANSI mode, HP-UX machines define __hpux but not hpux */ #if defined(__hpux) && !defined(hpux) # define hpux #endif #if defined(__bsdi__) || defined(__386BSD__) || defined(_CX_UX) || defined(hpux) || defined(_IBMR2) || defined(linux) # include #endif /* __bsdi__ || __386BSD__ || _CX_UX || hpux || _IBMR2 || linux */ #ifdef ISC # ifdef ENAMETOOLONG # undef ENAMETOOLONG # endif # ifdef ENOTEMPTY # undef ENOTEMPTY # endif # include # include #endif #ifdef sun # define getpgrp __getpgrp # define exit __exit #endif #ifdef POSIX # include # if defined(__STDC__) # include # endif /* __STDC__ */ #endif /* POSIX */ #ifdef sun # undef getpgrp # undef exit #endif /* sun */ #ifndef linux /* all done in */ extern int errno; #endif /* linux */ #ifndef HAVE_STRERROR /* No macros, please */ #undef strerror #endif #if !defined(SYSV) && !defined(linux) # ifdef NEWSOS # define strlen ___strlen___ # include # undef strlen # else /* NEWSOS */ # include # endif /* NEWSOS */ #else /* SYSV */ # if defined(SVR4) || defined(NEWSOS) # define strlen ___strlen___ # include # undef strlen # if !defined(NEWSOS) && !defined(__hpux) extern size_t strlen(const char *); # endif # else /* SVR4 */ # include # endif /* SVR4 */ #endif /* SYSV */ #ifdef USEVARARGS # if defined(__STDC__) # include # define VA_LIST(var) va_list var; # define VA_DOTS ... # define VA_DECL # define VA_START(ap, fmt) va_start(ap, fmt) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # else # include # define VA_LIST(var) va_list var; # define VA_DOTS va_alist # define VA_DECL va_dcl # define VA_START(ap, fmt) va_start(ap) # define VA_ARGS(ap) ap # define VA_END(ap) va_end(ap) # endif #else # define VA_LIST(var) # define VA_DOTS p1, p2, p3, p4, p5, p6 # define VA_DECL unsigned long VA_DOTS; # define VA_START(ap, fmt) # define VA_ARGS(ap) VA_DOTS # define VA_END(ap) # undef vsnprintf # define vsnprintf xsnprintf #endif #if !defined(sun) && !defined(B43) && !defined(ISC) && !defined(pyr) && !defined(_CX_UX) # include #endif #include #ifdef M_UNIX /* SCO */ # include # include # define ftruncate(fd, s) chsize(fd, s) #endif #ifdef SYSV # define index strchr # define rindex strrchr # define bzero(poi,len) memset(poi,0,len) # define bcmp memcmp # define killpg(pgrp,sig) kill( -(pgrp), sig) #endif #ifndef HAVE_GETCWD # define getcwd(b,l) getwd(b) #endif #ifndef USEBCOPY # ifdef USEMEMMOVE # define bcopy(s,d,len) memmove(d,s,len) # else # ifdef USEMEMCPY # define bcopy(s,d,len) memcpy(d,s,len) # else # define NEED_OWN_BCOPY # define bcopy xbcopy # endif # endif #endif #ifdef hpux # define setreuid(ruid, euid) setresuid(ruid, euid, -1) # define setregid(rgid, egid) setresgid(rgid, egid, -1) #endif #if defined(HAVE_SETEUID) || defined(HAVE_SETREUID) # define USE_SETEUID #endif #if !defined(HAVE__EXIT) && !defined(_exit) #define _exit(x) exit(x) #endif #ifndef HAVE_UTIMES # define utimes utime #endif #ifdef BUILTIN_TELNET # include # include #endif #if defined(USE_LOCALE) && (!defined(HAVE_SETLOCALE) || !defined(HAVE_STRFTIME)) # undef USE_LOCALE #endif /***************************************************************** * terminal handling */ #if defined (POSIX) || defined (__FreeBSD__) # include # ifdef hpux # include # endif /* hpux */ # ifdef NCCS # define MAXCC NCCS # else # define MAXCC 256 # endif #else /* POSIX */ # ifdef TERMIO # include # ifdef NCC # define MAXCC NCC # else # define MAXCC 256 # endif # ifdef CYTERMIO # include # endif # else /* TERMIO */ # if defined (HAVE_SGTTY_H) # include # endif # endif /* TERMIO */ #endif /* POSIX */ #ifndef VDISABLE # ifdef _POSIX_VDISABLE # define VDISABLE _POSIX_VDISABLE # else # define VDISABLE 0377 # endif /* _POSIX_VDISABLE */ #endif /* !VDISABLE */ /* on sgi, regardless of the stream head's read mode (RNORM/RMSGN/RMSGD) * TIOCPKT mode causes data loss if our buffer is too small (IOSIZE) * to hold the whole packet at first read(). * (Marc Boucher) * * matthew green: * TIOCPKT is broken on dgux 5.4.1 generic AViiON mc88100 * * Joe Traister: On AIX4, programs like irc won't work if screen * uses TIOCPKT (select fails to return on pty read). */ #if defined(sgi) || defined(DGUX) || defined(_IBMR2) # undef TIOCPKT #endif /* linux ncurses is broken, we have to use our own tputs */ #if defined(linux) && defined(TERMINFO) # define tputs xtputs #endif /* Alexandre Oliva: SVR4 style ptys don't work with osf */ #ifdef __osf__ # undef HAVE_SVR4_PTYS #endif /***************************************************************** * utmp handling */ #ifdef GETUTENT typedef char *slot_t; #else typedef int slot_t; #endif #if defined(UTMPOK) || defined(BUGGYGETLOGIN) # if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux) # include # define UTMPFILE UTMPX_FILE # define utmp utmpx # define getutent getutxent # define getutid getutxid # define getutline getutxline # define pututline pututxline # define setutent setutxent # define endutent endutxent # define ut_time ut_xtime # else /* SVR4 */ # include # endif /* SVR4 */ # ifdef apollo /* * We don't have GETUTENT, so we dig into utmp ourselves. * But we save the permanent filedescriptor and * open utmp just when we need to. * This code supports an unsorted utmp. jw. */ # define UTNOKEEP # endif /* apollo */ # ifndef UTMPFILE # ifdef UTMP_FILE # define UTMPFILE UTMP_FILE # else # ifdef _PATH_UTMP # define UTMPFILE _PATH_UTMP # else # define UTMPFILE "/etc/utmp" # endif /* _PATH_UTMP */ # endif # endif #endif /* UTMPOK || BUGGYGETLOGIN */ #if !defined(UTMPOK) && defined(USRLIMIT) # undef USRLIMIT #endif #ifdef LOGOUTOK # ifndef LOGINDEFAULT # define LOGINDEFAULT 0 # endif #else # ifdef LOGINDEFAULT # undef LOGINDEFAULT # endif # define LOGINDEFAULT 1 #endif /***************************************************************** * file stuff */ #ifndef F_OK #define F_OK 0 #endif #ifndef X_OK #define X_OK 1 #endif #ifndef W_OK #define W_OK 2 #endif #ifndef R_OK #define R_OK 4 #endif #ifndef S_IFIFO #define S_IFIFO 0010000 #endif #ifndef S_IREAD #define S_IREAD 0000400 #endif #ifndef S_IWRITE #define S_IWRITE 0000200 #endif #ifndef S_IEXEC #define S_IEXEC 0000100 #endif #if defined(S_IFIFO) && defined(S_IFMT) && !defined(S_ISFIFO) #define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) #endif #if defined(S_IFSOCK) && defined(S_IFMT) && !defined(S_ISSOCK) #define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) #endif #if defined(S_IFCHR) && defined(S_IFMT) && !defined(S_ISCHR) #define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) #endif #if defined(S_IFDIR) && defined(S_IFMT) && !defined(S_ISDIR) #define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) #endif #if defined(S_IFLNK) && defined(S_IFMT) && !defined(S_ISLNK) #define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) #endif /* * SunOS 4.1.3: `man 2V open' has only one line that mentions O_NOBLOCK: * * O_NONBLOCK Same as O_NDELAY above. * * on the very same SunOS 4.1.3, I traced the open system call and found * that an open("/dev/ttyy08", O_RDWR|O_NONBLOCK|O_NOCTTY) was blocked, * whereas open("/dev/ttyy08", O_RDWR|O_NDELAY |O_NOCTTY) went through. * * For this simple reason I now favour O_NDELAY. jw. 4.5.95 */ #if defined(sun) && !defined(SVR4) # undef O_NONBLOCK #endif #if !defined(O_NONBLOCK) && defined(O_NDELAY) # define O_NONBLOCK O_NDELAY #endif #if !defined(FNBLOCK) && defined(FNONBLOCK) # define FNBLOCK FNONBLOCK #endif #if !defined(FNBLOCK) && defined(FNDELAY) # define FNBLOCK FNDELAY #endif #if !defined(FNBLOCK) && defined(O_NONBLOCK) # define FNBLOCK O_NONBLOCK #endif #ifndef POSIX #undef mkfifo #define mkfifo(n,m) mknod(n,S_IFIFO|(m),0) #endif #if !defined(HAVE_LSTAT) && !defined(lstat) # define lstat stat #endif /***************************************************************** * signal handling */ #ifdef SIGVOID # define SIGRETURN # define sigret_t void #else # define SIGRETURN return 0; # define sigret_t int #endif /* Geeeee, reverse it? */ #if defined(SVR4) || (defined(SYSV) && defined(ISC)) || defined(_AIX) || defined(linux) || defined(ultrix) || defined(__386BSD__) || defined(__bsdi__) || defined(POSIX) || defined(NeXT) # define SIGHASARG #endif #ifdef SIGHASARG # define SIGPROTOARG (int) # define SIGDEFARG (sigsig) int sigsig; # define SIGARG 0 #else # define SIGPROTOARG (void) # define SIGDEFARG () # define SIGARG #endif #ifndef SIGCHLD #define SIGCHLD SIGCLD #endif #if defined(POSIX) || defined(hpux) # define signal xsignal #else # ifdef USESIGSET # define signal sigset # endif /* USESIGSET */ #endif /* used in screen.c and attacher.c */ #ifndef NSIG /* kbeal needs these w/o SYSV */ # define NSIG 32 #endif /* !NSIG */ /***************************************************************** * Wait stuff */ #if (!defined(sysV68) && !defined(M_XENIX)) || defined(NeXT) || defined(M_UNIX) # include #endif #ifndef WTERMSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WTERMSIG(status) (status & 0177) # else # define WTERMSIG(status) status.w_T.w_Termsig # endif #endif #ifndef WSTOPSIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WSTOPSIG(status) ((status >> 8) & 0377) # else # define WSTOPSIG(status) status.w_S.w_Stopsig # endif #endif /* NET-2 uses WCOREDUMP */ #if defined(WCOREDUMP) && !defined(WIFCORESIG) # define WIFCORESIG(status) WCOREDUMP(status) #endif #ifndef WIFCORESIG # ifndef BSDWAIT /* if wait is NOT a union: */ # define WIFCORESIG(status) (status & 0200) # else # define WIFCORESIG(status) status.w_T.w_Coredump # endif #endif #ifndef WEXITSTATUS # ifndef BSDWAIT /* if wait is NOT a union: */ # define WEXITSTATUS(status) ((status >> 8) & 0377) # else # define WEXITSTATUS(status) status.w_T.w_Retcode # endif #endif /***************************************************************** * select stuff */ #if defined(M_XENIX) || defined(M_UNIX) || defined(_SEQUENT_) || defined (__INTERIX) #include /* for timeval + FD... */ #endif /* * SunOS 3.5 - Tom Schmidt - Micron Semiconductor, Inc - 27-Jul-93 * tschmidt@vax.micron.com */ #ifndef FD_SET # ifndef SUNOS3 typedef struct fd_set { int fds_bits[1]; } fd_set; # endif # define FD_ZERO(fd) ((fd)->fds_bits[0] = 0) # define FD_SET(b, fd) ((fd)->fds_bits[0] |= 1 << (b)) # define FD_ISSET(b, fd) ((fd)->fds_bits[0] & 1 << (b)) # define FD_SETSIZE 32 #endif /***************************************************************** * user defineable stuff */ #ifndef TERMCAP_BUFSIZE # define TERMCAP_BUFSIZE 2048 #endif #ifndef MAXPATHLEN # define MAXPATHLEN 1024 #endif /* * you may try to vary this value. Use low values if your (VMS) system * tends to choke when pasting. Use high values if you want to test * how many characters your pty's can buffer. */ #define IOSIZE 4096 readline-7.0/examples/rlfe/pty.c000644 000436 000000 00000020155 10524647536 016764 0ustar00chetwheel000000 000000 /* Copyright (c) 1993-2002 * Juergen Weigert (jnweiger@immd4.informatik.uni-erlangen.de) * Michael Schroeder (mlschroe@immd4.informatik.uni-erlangen.de) * Copyright (c) 1987 Oliver Laumann * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program (see the file COPYING); if not, write to the * Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA * **************************************************************** */ #include "config.h" #include #include #include #include #include #include "screen.h" #ifndef sun # include #endif /* for solaris 2.1, Unixware (SVR4.2) and possibly others */ #if defined (HAVE_SVR4_PTYS) && defined (HAVE_SYS_STROPTS_H) # include #endif #if defined(sun) && defined(LOCKPTY) && !defined(TIOCEXCL) # include #endif #ifdef ISC # include # include # include #endif #ifdef sgi # include #endif /* sgi */ #include "extern.h" /* * if no PTYRANGE[01] is in the config file, we pick a default */ #ifndef PTYRANGE0 # define PTYRANGE0 "qpr" #endif #ifndef PTYRANGE1 # define PTYRANGE1 "0123456789abcdef" #endif /* SVR4 pseudo ttys don't seem to work with SCO-5 */ #ifdef M_UNIX # undef HAVE_SVR4_PTYS #endif extern int eff_uid; /* used for opening a new pty-pair: */ static char PtyName[32], TtyName[32]; #if !(defined(sequent) || defined(_SEQUENT_) || defined(HAVE_SVR4_PTYS)) # ifdef hpux static char PtyProto[] = "/dev/ptym/ptyXY"; static char TtyProto[] = "/dev/pty/ttyXY"; # else # ifdef M_UNIX static char PtyProto[] = "/dev/ptypXY"; static char TtyProto[] = "/dev/ttypXY"; # else static char PtyProto[] = "/dev/ptyXY"; static char TtyProto[] = "/dev/ttyXY"; # endif # endif /* hpux */ #endif static void initmaster __P((int)); #if defined(sun) /* sun's utmp_update program opens the salve side, thus corrupting */ int pty_preopen = 1; #else int pty_preopen = 0; #endif /* * Open all ptys with O_NOCTTY, just to be on the safe side * (RISCos mips breaks otherwise) */ #ifndef O_NOCTTY # define O_NOCTTY 0 #endif /***************************************************************/ static void initmaster(f) int f; { #ifdef POSIX tcflush(f, TCIOFLUSH); #else # ifdef TIOCFLUSH (void) ioctl(f, TIOCFLUSH, (char *) 0); # endif #endif #ifdef LOCKPTY (void) ioctl(f, TIOCEXCL, (char *) 0); #endif } void InitPTY(f) int f; { if (f < 0) return; #if defined(I_PUSH) && defined(HAVE_SVR4_PTYS) && !defined(sgi) && !defined(linux) && !defined(__osf__) && !defined(M_UNIX) if (ioctl(f, I_PUSH, "ptem")) Panic(errno, "InitPTY: cannot I_PUSH ptem"); if (ioctl(f, I_PUSH, "ldterm")) Panic(errno, "InitPTY: cannot I_PUSH ldterm"); # ifdef sun if (ioctl(f, I_PUSH, "ttcompat")) Panic(errno, "InitPTY: cannot I_PUSH ttcompat"); # endif #endif } /***************************************************************/ #if defined(OSX) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; if ((f = open_controlling_pty(TtyName)) < 0) return -1; initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if (defined(sequent) || defined(_SEQUENT_)) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { char *m, *s; register int f; if ((f = getpseudotty(&s, &m)) < 0) return -1; #ifdef _SEQUENT_ fvhangup(s); #endif strncpy(PtyName, m, sizeof(PtyName)); strncpy(TtyName, s, sizeof(TtyName)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(__sgi) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { int f; char *name, *_getpty(); sigret_t (*sigcld)__P(SIGPROTOARG); /* * SIGCHLD set to SIG_DFL for _getpty() because it may fork() and * exec() /usr/adm/mkpts */ sigcld = signal(SIGCHLD, SIG_DFL); name = _getpty(&f, O_RDWR | O_NONBLOCK, 0600, 0); signal(SIGCHLD, sigcld); if (name == 0) return -1; initmaster(f); *ttyn = name; return f; } #endif /***************************************************************/ #if defined(MIPS) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; struct stat buf; strcpy(PtyName, "/dev/ptc"); if ((f = open(PtyName, O_RDWR | O_NOCTTY | O_NONBLOCK)) < 0) return -1; if (fstat(f, &buf) < 0) { close(f); return -1; } sprintf(TtyName, "/dev/ttyq%d", minor(buf.st_rdev)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; char *m, *ptsname(); int unlockpt __P((int)), grantpt __P((int)); #if defined(HAVE_GETPT) && defined(linux) int getpt __P((void)); #endif sigret_t (*sigcld)__P(SIGPROTOARG); strcpy(PtyName, "/dev/ptmx"); #if defined(HAVE_GETPT) && defined(linux) if ((f = getpt()) == -1) #else if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1) #endif return -1; /* * SIGCHLD set to SIG_DFL for grantpt() because it fork()s and * exec()s pt_chmod */ sigcld = signal(SIGCHLD, SIG_DFL); if ((m = ptsname(f)) == NULL || grantpt(f) || unlockpt(f)) { signal(SIGCHLD, sigcld); close(f); return -1; } signal(SIGCHLD, sigcld); strncpy(TtyName, m, sizeof(TtyName)); initmaster(f); *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(_AIX) && defined(HAVE_DEV_PTC) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { register int f; /* a dumb looking loop replaced by mycrofts code: */ strcpy (PtyName, "/dev/ptc"); if ((f = open (PtyName, O_RDWR | O_NOCTTY)) < 0) return -1; strncpy(TtyName, ttyname(f), sizeof(TtyName)); if (eff_uid && access(TtyName, R_OK | W_OK)) { close(f); return -1; } initmaster(f); # ifdef _IBMR2 pty_preopen = 1; # endif *ttyn = TtyName; return f; } #endif /***************************************************************/ #if defined(HAVE_OPENPTY) && !defined(PTY_DONE) #define PTY_DONE int OpenPTY(ttyn) char **ttyn; { int f, s; if (openpty(&f, &s, TtyName, NULL, NULL) != 0) return -1; close(s); initmaster(f); pty_preopen = 1; *ttyn = TtyName; return f; } #endif /***************************************************************/ #ifndef PTY_DONE int OpenPTY(ttyn) char **ttyn; { register char *p, *q, *l, *d; register int f; debug("OpenPTY: Using BSD style ptys.\n"); strcpy(PtyName, PtyProto); strcpy(TtyName, TtyProto); for (p = PtyName; *p != 'X'; p++) ; for (q = TtyName; *q != 'X'; q++) ; for (l = PTYRANGE0; (*p = *l) != '\0'; l++) { for (d = PTYRANGE1; (p[1] = *d) != '\0'; d++) { debug1("OpenPTY tries '%s'\n", PtyName); if ((f = open(PtyName, O_RDWR | O_NOCTTY)) == -1) continue; q[0] = *l; q[1] = *d; if (eff_uid && access(TtyName, R_OK | W_OK)) { close(f); continue; } #if defined(sun) && defined(TIOCGPGRP) && !defined(SUNOS3) /* Hack to ensure that the slave side of the pty is * unused. May not work in anything other than SunOS4.1 */ { int pgrp; /* tcgetpgrp does not work (uses TIOCGETPGRP)! */ if (ioctl(f, TIOCGPGRP, (char *)&pgrp) != -1 || errno != EIO) { close(f); continue; } } #endif initmaster(f); *ttyn = TtyName; return f; } } return -1; } #endif readline-7.0/examples/rlfe/rlfe.c000644 000436 000000 00000047077 11567744433 017116 0ustar00chetwheel000000 000000 /* A front-end using readline to "cook" input lines. * * Copyright (C) 2004, 1999 Per Bothner * * This front-end program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as published * by the Free Software Foundation; either version 2, or (at your option) * any later version. * * Some code from Johnson & Troan: "Linux Application Development" * (Addison-Wesley, 1998) was used directly or for inspiration. * * 2003-11-07 Wolfgang Taeuber * Specify a history file and the size of the history file with command * line options; use EDITOR/VISUAL to set vi/emacs preference. */ /* PROBLEMS/TODO: * * Only tested under GNU/Linux and Mac OS 10.x; needs to be ported. * * Switching between line-editing-mode vs raw-char-mode depending on * what tcgetattr returns is inherently not robust, plus it doesn't * work when ssh/telnetting in. A better solution is possible if the * tty system can send in-line escape sequences indicating the current * mode, echo'd input, etc. That would also allow a user preference * to set different colors for prompt, input, stdout, and stderr. * * When running mc -c under the Linux console, mc does not recognize * mouse clicks, which mc does when not running under rlfe. * * Pasting selected text containing tabs is like hitting the tab character, * which invokes readline completion. We don't want this. I don't know * if this is fixable without integrating rlfe into a terminal emulator. * * Echo suppression is a kludge, but can only be avoided with better kernel * support: We need a tty mode to disable "real" echoing, while still * letting the inferior think its tty driver to doing echoing. * Stevens's book claims SCR$ and BSD4.3+ have TIOCREMOTE. * * The latest readline may have some hooks we can use to avoid having * to back up the prompt. (See HAVE_ALREADY_PROMPTED.) * * Desirable readline feature: When in cooked no-echo mode (e.g. password), * echo characters are they are types with '*', but remove them when done. * * Asynchronous output while we're editing an input line should be * inserted in the output view *before* the input line, so that the * lines being edited (with the prompt) float at the end of the input. * * A "page mode" option to emulate more/less behavior: At each page of * output, pause for a user command. This required parsing the output * to keep track of line lengths. It also requires remembering the * output, if we want an option to scroll back, which suggests that * this should be integrated with a terminal emulator like xterm. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "config.h" #include "extern.h" #if defined (HAVE_SYS_WAIT_H) # include #endif #ifdef READLINE_LIBRARY # include "readline.h" # include "history.h" #else # include # include #endif #ifndef COMMAND #define COMMAND "/bin/bash" #endif #ifndef COMMAND_ARGS #define COMMAND_ARGS COMMAND #endif #ifndef ALT_COMMAND #define ALT_COMMAND "/bin/sh" #endif #ifndef ALT_COMMAND_ARGS #define ALT_COMMAND_ARGS ALT_COMMAND #endif #ifndef HAVE_MEMMOVE # if __GNUC__ > 1 # define memmove(d, s, n) __builtin_memcpy(d, s, n) # else # define memmove(d, s, n) memcpy(d, s, n) # endif #else # define memmove(d, s, n) memcpy(d, s, n) #endif #define APPLICATION_NAME "rlfe" static int in_from_inferior_fd; static int out_to_inferior_fd; static void set_edit_mode (); static void usage_exit (); static char *hist_file = 0; static int hist_size = 0; /* Unfortunately, we cannot safely display echo from the inferior process. The reason is that the echo bit in the pty is "owned" by the inferior, and if we try to turn it off, we could confuse the inferior. Thus, when echoing, we get echo twice: First readline echoes while we're actually editing. Then we send the line to the inferior, and the terminal driver send back an extra echo. The work-around is to remember the input lines, and when we see that line come back, we supress the output. A better solution (supposedly available on SVR4) would be a smarter terminal driver, with more flags ... */ #define ECHO_SUPPRESS_MAX 1024 char echo_suppress_buffer[ECHO_SUPPRESS_MAX]; int echo_suppress_start = 0; int echo_suppress_limit = 0; /*#define DEBUG*/ #ifdef DEBUG FILE *logfile = NULL; #define DPRINT0(FMT) (fprintf(logfile, FMT), fflush(logfile)) #define DPRINT1(FMT, V1) (fprintf(logfile, FMT, V1), fflush(logfile)) #define DPRINT2(FMT, V1, V2) (fprintf(logfile, FMT, V1, V2), fflush(logfile)) #else #define DPRINT0(FMT) ((void) 0) /* Do nothing */ #define DPRINT1(FMT, V1) ((void) 0) /* Do nothing */ #define DPRINT2(FMT, V1, V2) ((void) 0) /* Do nothing */ #endif struct termios orig_term; /* Pid of child process. */ static pid_t child = -1; static void sig_child (int signo) { int status; wait (&status); if (hist_file != 0) { write_history (hist_file); if (hist_size) history_truncate_file (hist_file, hist_size); } DPRINT0 ("(Child process died.)\n"); tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); exit (0); } volatile int propagate_sigwinch = 0; /* sigwinch_handler * propagate window size changes from input file descriptor to * master side of pty. */ void sigwinch_handler(int signal) { propagate_sigwinch = 1; } /* get_slave_pty() returns an integer file descriptor. * If it returns < 0, an error has occurred. * Otherwise, it has returned the slave file descriptor. */ int get_slave_pty(char *name) { struct group *gptr; gid_t gid; int slave = -1; /* chown/chmod the corresponding pty, if possible. * This will only work if the process has root permissions. * Alternatively, write and exec a small setuid program that * does just this. */ if ((gptr = getgrnam("tty")) != 0) { gid = gptr->gr_gid; } else { /* if the tty group does not exist, don't change the * group on the slave pty, only the owner */ gid = -1; } /* Note that we do not check for errors here. If this is code * where these actions are critical, check for errors! */ chown(name, getuid(), gid); /* This code only makes the slave read/writeable for the user. * If this is for an interactive shell that will want to * receive "write" and "wall" messages, OR S_IWGRP into the * second argument below. */ chmod(name, S_IRUSR|S_IWUSR); /* open the corresponding slave pty */ slave = open(name, O_RDWR); return (slave); } /* Certain special characters, such as ctrl/C, we want to pass directly to the inferior, rather than letting readline handle them. */ static char special_chars[20]; static int special_chars_count; static void add_special_char(int ch) { if (ch != 0) special_chars[special_chars_count++] = ch; } static int eof_char; static int is_special_char(int ch) { int i; #if 0 if (ch == eof_char && rl_point == rl_end) return 1; #endif for (i = special_chars_count; --i >= 0; ) if (special_chars[i] == ch) return 1; return 0; } static char buf[1024]; /* buf[0 .. buf_count-1] is the what has been emitted on the current line. It is used as the readline prompt. */ static int buf_count = 0; int do_emphasize_input = 1; int current_emphasize_input; char *start_input_mode = "\033[1m"; char *end_input_mode = "\033[0m"; int num_keys = 0; static void maybe_emphasize_input (int on) { if (on == current_emphasize_input || (on && ! do_emphasize_input)) return; fprintf (rl_outstream, on ? start_input_mode : end_input_mode); fflush (rl_outstream); current_emphasize_input = on; } static void null_prep_terminal (int meta) { } static void null_deprep_terminal () { maybe_emphasize_input (0); } static int pre_input_change_mode (void) { return 0; } char pending_special_char; static void line_handler (char *line) { if (line == NULL) { char buf[1]; DPRINT0("saw eof!\n"); buf[0] = '\004'; /* ctrl/d */ write (out_to_inferior_fd, buf, 1); } else { static char enter[] = "\r"; /* Send line to inferior: */ int length = strlen (line); if (length > ECHO_SUPPRESS_MAX-2) { echo_suppress_start = 0; echo_suppress_limit = 0; } else { if (echo_suppress_limit + length > ECHO_SUPPRESS_MAX - 2) { if (echo_suppress_limit - echo_suppress_start + length <= ECHO_SUPPRESS_MAX - 2) { memmove (echo_suppress_buffer, echo_suppress_buffer + echo_suppress_start, echo_suppress_limit - echo_suppress_start); echo_suppress_limit -= echo_suppress_start; echo_suppress_start = 0; } else { echo_suppress_limit = 0; } echo_suppress_start = 0; } memcpy (echo_suppress_buffer + echo_suppress_limit, line, length); echo_suppress_limit += length; echo_suppress_buffer[echo_suppress_limit++] = '\r'; echo_suppress_buffer[echo_suppress_limit++] = '\n'; } write (out_to_inferior_fd, line, length); if (pending_special_char == 0) { write (out_to_inferior_fd, enter, sizeof(enter)-1); if (*line) add_history (line); } free (line); } rl_callback_handler_remove (); buf_count = 0; num_keys = 0; if (pending_special_char != 0) { write (out_to_inferior_fd, &pending_special_char, 1); pending_special_char = 0; } } /* Value of rl_getc_function. Use this because readline should read from stdin, not rl_instream, points to the pty (so readline has monitor its terminal modes). */ int my_rl_getc (FILE *dummy) { int ch = rl_getc (stdin); if (is_special_char (ch)) { pending_special_char = ch; return '\r'; } return ch; } int main(int argc, char** argv) { char *path; int i; int master; char *name; int in_from_tty_fd; struct sigaction act; struct winsize ws; struct termios t; int maxfd; fd_set in_set; static char empty_string[1] = ""; char *prompt = empty_string; int ioctl_err = 0; int arg_base = 1; #ifdef DEBUG logfile = fopen("/tmp/rlfe.log", "w"); #endif while (arg_base= argc ) usage_exit(); switch(argv[arg_base][1]) { case 'h': arg_base++; hist_file = argv[arg_base]; break; case 's': arg_base++; hist_size = atoi(argv[arg_base]); if (hist_size<0) usage_exit(); break; default: usage_exit(); } arg_base++; } if (hist_file) read_history (hist_file); set_edit_mode (); rl_readline_name = APPLICATION_NAME; if ((master = OpenPTY (&name)) < 0) { perror("ptypair: could not open master pty"); exit(1); } DPRINT1("pty name: '%s'\n", name); /* set up SIGWINCH handler */ act.sa_handler = sigwinch_handler; sigemptyset(&(act.sa_mask)); act.sa_flags = 0; if (sigaction(SIGWINCH, &act, NULL) < 0) { perror("ptypair: could not handle SIGWINCH "); exit(1); } if (ioctl(STDIN_FILENO, TIOCGWINSZ, &ws) < 0) { perror("ptypair: could not get window size"); exit(1); } if ((child = fork()) < 0) { perror("cannot fork"); exit(1); } if (child == 0) { int slave; /* file descriptor for slave pty */ /* We are in the child process */ close(master); #ifdef TIOCSCTTY if ((slave = get_slave_pty(name)) < 0) { perror("ptypair: could not open slave pty"); exit(1); } #endif /* We need to make this process a session group leader, because * it is on a new PTY, and things like job control simply will * not work correctly unless there is a session group leader * and process group leader (which a session group leader * automatically is). This also disassociates us from our old * controlling tty. */ if (setsid() < 0) { perror("could not set session leader"); } /* Tie us to our new controlling tty. */ #ifdef TIOCSCTTY if (ioctl(slave, TIOCSCTTY, NULL)) { perror("could not set new controlling tty"); } #else if ((slave = get_slave_pty(name)) < 0) { perror("ptypair: could not open slave pty"); exit(1); } #endif /* make slave pty be standard in, out, and error */ dup2(slave, STDIN_FILENO); dup2(slave, STDOUT_FILENO); dup2(slave, STDERR_FILENO); /* at this point the slave pty should be standard input */ if (slave > 2) { close(slave); } /* Try to restore window size; failure isn't critical */ if (ioctl(STDOUT_FILENO, TIOCSWINSZ, &ws) < 0) { perror("could not restore window size"); } /* now start the shell */ { static char* command_args[] = { COMMAND_ARGS, NULL }; static char* alt_command_args[] = { ALT_COMMAND_ARGS, NULL }; if (argc <= 1) { execvp (COMMAND, command_args); execvp (ALT_COMMAND, alt_command_args); } else execvp (argv[arg_base], &argv[arg_base]); } /* should never be reached */ exit(1); } /* parent */ signal (SIGCHLD, sig_child); /* Note that we only set termios settings for standard input; * the master side of a pty is NOT a tty. */ tcgetattr(STDIN_FILENO, &orig_term); t = orig_term; eof_char = t.c_cc[VEOF]; /* add_special_char(t.c_cc[VEOF]);*/ add_special_char(t.c_cc[VINTR]); add_special_char(t.c_cc[VQUIT]); add_special_char(t.c_cc[VSUSP]); #if defined (VDISCARD) add_special_char(t.c_cc[VDISCARD]); #endif t.c_lflag &= ~(ICANON | ISIG | ECHO | ECHOCTL | ECHOE | \ ECHOK | ECHONL #if defined (ECHOKE) | ECHOKE #endif #if defined (ECHOPRT) | ECHOPRT #endif ); t.c_iflag &= ~ICRNL; t.c_iflag |= IGNBRK; t.c_cc[VMIN] = 1; t.c_cc[VTIME] = 0; tcsetattr(STDIN_FILENO, TCSANOW, &t); in_from_inferior_fd = master; out_to_inferior_fd = master; rl_instream = fdopen (master, "r"); rl_getc_function = my_rl_getc; rl_prep_term_function = null_prep_terminal; rl_deprep_term_function = null_deprep_terminal; rl_pre_input_hook = pre_input_change_mode; rl_callback_handler_install (prompt, line_handler); in_from_tty_fd = STDIN_FILENO; FD_ZERO (&in_set); maxfd = in_from_inferior_fd > in_from_tty_fd ? in_from_inferior_fd : in_from_tty_fd; for (;;) { int num; FD_SET (in_from_inferior_fd, &in_set); FD_SET (in_from_tty_fd, &in_set); num = select(maxfd+1, &in_set, NULL, NULL, NULL); if (propagate_sigwinch) { struct winsize ws; if (ioctl (STDIN_FILENO, TIOCGWINSZ, &ws) >= 0) { ioctl (master, TIOCSWINSZ, &ws); } propagate_sigwinch = 0; continue; } if (num <= 0) { perror ("select"); exit (-1); } if (FD_ISSET (in_from_tty_fd, &in_set)) { extern int _rl_echoing_p; struct termios term_master; int do_canon = 1; int do_icrnl = 1; int ioctl_ret; DPRINT1("[tty avail num_keys:%d]\n", num_keys); /* If we can't get tty modes for the master side of the pty, we can't handle non-canonical-mode programs. Always assume the master is in canonical echo mode if we can't tell. */ ioctl_ret = tcgetattr(master, &term_master); if (ioctl_ret >= 0) { do_canon = (term_master.c_lflag & ICANON) != 0; do_icrnl = (term_master.c_lflag & ICRNL) != 0; _rl_echoing_p = (term_master.c_lflag & ECHO) != 0; DPRINT1 ("echo,canon,crnl:%03d\n", 100 * _rl_echoing_p + 10 * do_canon + 1 * do_icrnl); } else { if (ioctl_err == 0) DPRINT1("tcgetattr on master fd failed: errno = %d\n", errno); ioctl_err = 1; } if (do_canon == 0 && num_keys == 0) { char ch[10]; int count = read (STDIN_FILENO, ch, sizeof(ch)); DPRINT1("[read %d chars from stdin: ", count); DPRINT2(" \"%.*s\"]\n", count, ch); if (do_icrnl) { int i = count; while (--i >= 0) { if (ch[i] == '\r') ch[i] = '\n'; } } maybe_emphasize_input (1); write (out_to_inferior_fd, ch, count); } else { if (num_keys == 0) { int i; /* Re-install callback handler for new prompt. */ if (prompt != empty_string) free (prompt); if (prompt == NULL) { DPRINT0("New empty prompt\n"); prompt = empty_string; } else { if (do_emphasize_input && buf_count > 0) { prompt = malloc (buf_count + strlen (end_input_mode) + strlen (start_input_mode) + 5); sprintf (prompt, "\001%s\002%.*s\001%s\002", end_input_mode, buf_count, buf, start_input_mode); } else { prompt = malloc (buf_count + 1); memcpy (prompt, buf, buf_count); prompt[buf_count] = '\0'; } DPRINT1("New prompt '%s'\n", prompt); #if 0 /* ifdef HAVE_RL_ALREADY_PROMPTED */ /* Doesn't quite work when do_emphasize_input is 1. */ rl_already_prompted = buf_count > 0; #else if (buf_count > 0) write (1, "\r", 1); #endif } rl_callback_handler_install (prompt, line_handler); } num_keys++; maybe_emphasize_input (1); rl_callback_read_char (); } } else /* output from inferior. */ { int i; int count; int old_count; if (buf_count > (sizeof(buf) >> 2)) buf_count = 0; count = read (in_from_inferior_fd, buf+buf_count, sizeof(buf) - buf_count); DPRINT2("read %d from inferior, buf_count=%d", count, buf_count); DPRINT2(": \"%.*s\"", count, buf+buf_count); maybe_emphasize_input (0); if (count <= 0) { DPRINT0 ("(Connection closed by foreign host.)\n"); tcsetattr(STDIN_FILENO, TCSANOW, &orig_term); exit (0); } old_count = buf_count; /* Look for any pending echo that we need to suppress. */ while (echo_suppress_start < echo_suppress_limit && count > 0 && buf[buf_count] == echo_suppress_buffer[echo_suppress_start]) { count--; buf_count++; echo_suppress_start++; } DPRINT1("suppressed %d characters of echo.\n", buf_count-old_count); /* Write to the terminal anything that was not suppressed. */ if (count > 0) write (1, buf + buf_count, count); /* Finally, look for a prompt candidate. * When we get around to going input (from the keyboard), * we will consider the prompt to be anything since the last * line terminator. So we need to save that text in the * initial part of buf. However, anything before the * most recent end-of-line is not interesting. */ buf_count += count; #if 1 for (i = buf_count; --i >= old_count; ) #else for (i = buf_count - 1; i-- >= buf_count - count; ) #endif { if (buf[i] == '\n' || buf[i] == '\r') { i++; memmove (buf, buf+i, buf_count - i); buf_count -= i; break; } } DPRINT2("-> i: %d, buf_count: %d\n", i, buf_count); } } } static void set_edit_mode () { int vi = 0; char *shellopts; shellopts = getenv ("SHELLOPTS"); while (shellopts != 0) { if (strncmp ("vi", shellopts, 2) == 0) { vi = 1; break; } shellopts = strchr (shellopts + 1, ':'); } if (!vi) { if (getenv ("EDITOR") != 0) vi |= strcmp (getenv ("EDITOR"), "vi") == 0; } if (vi) rl_variable_bind ("editing-mode", "vi"); else rl_variable_bind ("editing-mode", "emacs"); } static void usage_exit () { fprintf (stderr, "Usage: rlfe [-h histfile] [-s size] cmd [arg1] [arg2] ...\n\n"); exit (1); } readline-7.0/examples/rlfe/screen.h000664 000436 000000 00000000074 10142522024 017410 0ustar00chetwheel000000 000000 /* Dummy header to avoid modifying pty.c */ #include "os.h" readline-7.0/examples/autoconf/BASH_CHECK_LIB_TERMCAP000664 000436 000000 00000002441 10614432310 022046 0ustar00chetwheel000000 000000 AC_DEFUN([BASH_CHECK_LIB_TERMCAP], [ if test "X$bash_cv_termcap_lib" = "X"; then _bash_needmsg=yes else AC_MSG_CHECKING(which library has the termcap functions) _bash_needmsg= fi AC_CACHE_VAL(bash_cv_termcap_lib, [AC_CHECK_FUNC(tgetent, bash_cv_termcap_lib=libc, [AC_CHECK_LIB(termcap, tgetent, bash_cv_termcap_lib=libtermcap, [AC_CHECK_LIB(tinfo, tgetent, bash_cv_termcap_lib=libtinfo, [AC_CHECK_LIB(curses, tgetent, bash_cv_termcap_lib=libcurses, [AC_CHECK_LIB(ncurses, tgetent, bash_cv_termcap_lib=libncurses, bash_cv_termcap_lib=gnutermcap)])])])])]) if test "X$_bash_needmsg" = "Xyes"; then AC_MSG_CHECKING(which library has the termcap functions) fi AC_MSG_RESULT(using $bash_cv_termcap_lib) if test $bash_cv_termcap_lib = gnutermcap && test -z "$prefer_curses"; then LDFLAGS="$LDFLAGS -L./lib/termcap" TERMCAP_LIB="./lib/termcap/libtermcap.a" TERMCAP_DEP="./lib/termcap/libtermcap.a" elif test $bash_cv_termcap_lib = libtermcap && test -z "$prefer_curses"; then TERMCAP_LIB=-ltermcap TERMCAP_DEP= elif test $bash_cv_termcap_lib = libtinfo; then TERMCAP_LIB=-ltinfo TERMCAP_DEP= elif test $bash_cv_termcap_lib = libncurses; then TERMCAP_LIB=-lncurses TERMCAP_DEP= elif test $bash_cv_termcap_lib = libc; then TERMCAP_LIB= TERMCAP_DEP= else TERMCAP_LIB=-lcurses TERMCAP_DEP= fi ]) readline-7.0/examples/autoconf/RL_LIB_READLINE_VERSION000664 000436 000000 00000005567 10614432033 022264 0ustar00chetwheel000000 000000 dnl need: prefix exec_prefix libdir includedir CC TERMCAP_LIB dnl require: dnl AC_PROG_CC dnl BASH_CHECK_LIB_TERMCAP AC_DEFUN([RL_LIB_READLINE_VERSION], [ AC_REQUIRE([BASH_CHECK_LIB_TERMCAP]) AC_MSG_CHECKING([version of installed readline library]) # What a pain in the ass this is. # save cpp and ld options _save_CFLAGS="$CFLAGS" _save_LDFLAGS="$LDFLAGS" _save_LIBS="$LIBS" # Don't set ac_cv_rl_prefix if the caller has already assigned a value. This # allows the caller to do something like $_rl_prefix=$withval if the user # specifies --with-installed-readline=PREFIX as an argument to configure if test -z "$ac_cv_rl_prefix"; then test "x$prefix" = xNONE && ac_cv_rl_prefix=$ac_default_prefix || ac_cv_rl_prefix=${prefix} fi eval ac_cv_rl_includedir=${ac_cv_rl_prefix}/include eval ac_cv_rl_libdir=${ac_cv_rl_prefix}/lib LIBS="$LIBS -lreadline ${TERMCAP_LIB}" CFLAGS="$CFLAGS -I${ac_cv_rl_includedir}" LDFLAGS="$LDFLAGS -L${ac_cv_rl_libdir}" AC_CACHE_VAL(ac_cv_rl_version, [AC_TRY_RUN([ #include #include extern int rl_gnu_readline_p; main() { FILE *fp; fp = fopen("conftest.rlv", "w"); if (fp == 0) exit(1); if (rl_gnu_readline_p != 1) fprintf(fp, "0.0\n"); else fprintf(fp, "%s\n", rl_library_version ? rl_library_version : "0.0"); fclose(fp); exit(0); } ], ac_cv_rl_version=`cat conftest.rlv`, ac_cv_rl_version='0.0', ac_cv_rl_version='4.2')]) CFLAGS="$_save_CFLAGS" LDFLAGS="$_save_LDFLAGS" LIBS="$_save_LIBS" RL_MAJOR=0 RL_MINOR=0 # ( case "$ac_cv_rl_version" in 2*|3*|4*|5*|6*|7*|8*|9*) RL_MAJOR=`echo $ac_cv_rl_version | sed 's:\..*$::'` RL_MINOR=`echo $ac_cv_rl_version | sed -e 's:^.*\.::' -e 's:[[a-zA-Z]]*$::'` ;; esac # ((( case $RL_MAJOR in [[0-9][0-9]]) _RL_MAJOR=$RL_MAJOR ;; [[0-9]]) _RL_MAJOR=0$RL_MAJOR ;; *) _RL_MAJOR=00 ;; esac # ((( case $RL_MINOR in [[0-9][0-9]]) _RL_MINOR=$RL_MINOR ;; [[0-9]]) _RL_MINOR=0$RL_MINOR ;; *) _RL_MINOR=00 ;; esac RL_VERSION="0x${_RL_MAJOR}${_RL_MINOR}" # Readline versions greater than 4.2 have these defines in readline.h if test $ac_cv_rl_version = '0.0' ; then AC_MSG_WARN([Could not test version of installed readline library.]) elif test $RL_MAJOR -gt 4 || { test $RL_MAJOR = 4 && test $RL_MINOR -gt 2 ; } ; then # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) else AC_DEFINE_UNQUOTED(RL_READLINE_VERSION, $RL_VERSION, [encoded version of the installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MAJOR, $RL_MAJOR, [major version of installed readline library]) AC_DEFINE_UNQUOTED(RL_VERSION_MINOR, $RL_MINOR, [minor version of installed readline library]) AC_SUBST(RL_VERSION) AC_SUBST(RL_MAJOR) AC_SUBST(RL_MINOR) # set these for use by the caller RL_PREFIX=$ac_cv_rl_prefix RL_LIBDIR=$ac_cv_rl_libdir RL_INCLUDEDIR=$ac_cv_rl_includedir AC_MSG_RESULT($ac_cv_rl_version) fi ]) readline-7.0/examples/autoconf/wi_LIB_READLINE000644 000436 000000 00000004326 10557745030 021161 0ustar00chetwheel000000 000000 dnl Borut Razem dnl dnl This macro checks for the presence of the readline library. dnl It works also in cross-compilation environment. dnl dnl To get it into the aclocal.m4 dnl file, do this: dnl aclocal -I . --verbose dnl dnl The --verbose will show all of the files that are searched dnl for .m4 macros. AC_DEFUN([wi_LIB_READLINE], [ dnl check for the readline.h header file AC_CHECK_HEADER(readline/readline.h) if test "$ac_cv_header_readline_readline_h" = yes; then dnl check the readline version cat > conftest.$ac_ext < #include wi_LIB_READLINE_VERSION RL_VERSION_MAJOR RL_VERSION_MINOR EOF wi_READLINE_VERSION=$($CPP $CPPFLAGS conftest.$ac_ext | sed -n -e "s/^wi_LIB_READLINE_VERSION *\([[0-9\]][[0-9\]]*\) *\([[0-9\]][[0-9\]]*\)$/\1.\2/p") rm -rf conftest* if test -n "$wi_READLINE_VERSION"; then wi_MAJOR=$(expr $wi_READLINE_VERSION : '\([[0-9]][[0-9]]*\)\.') wi_MINOR=$(expr $wi_READLINE_VERSION : '[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*$\)') if test $wi_MINOR -lt 10; then wi_MINOR=$(expr $wi_MINOR \* 10) fi wi_READLINE_VERSION=$(expr $wi_MAJOR \* 100 + $wi_MINOR) else wi_READLINE_VERSION=-1 fi dnl check for the readline library ac_save_LIBS="$LIBS" # Note: $LIBCURSES is permitted to be empty. for LIBREADLINE in "-lreadline.dll" "-lreadline" "-lreadline $LIBCURSES" "-lreadline -ltermcap" "-lreadline -lncurses" "-lreadline -lcurses" do AC_MSG_CHECKING([for GNU Readline library $LIBREADLINE]) LIBS="$ac_save_LIBS $LIBREADLINE" AC_TRY_LINK([ /* includes */ #include #include ],[ /* function-body */ int dummy = rl_completion_append_character; /* rl_completion_append_character appeared in version 2.1 */ readline(NULL); ],[ wi_cv_lib_readline=yes AC_MSG_RESULT(yes) ],[ wi_cv_lib_readline=no AC_MSG_RESULT(no) ]) if test "$wi_cv_lib_readline" = yes; then AC_SUBST(LIBREADLINE) AC_DEFINE_UNQUOTED(HAVE_LIBREADLINE, $wi_READLINE_VERSION, [Readline]) break fi done LIBS="$ac_save_LIBS" fi ]) readline-7.0/doc/Makefile.in000664 000436 000024 00000017342 12416766051 016057 0ustar00chetstaff000000 000000 # This makefile for Readline library documentation is in -*- text -*- mode. # Emacs likes it that way. # Copyright (C) 1996-2009 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . PACKAGE_TARNAME = @PACKAGE_TARNAME@ topdir = @top_srcdir@ srcdir = @srcdir@ VPATH = @srcdir@ prefix = @prefix@ datarootdir = @datarootdir@ docdir = @docdir@ infodir = @infodir@ mandir = @mandir@ manpfx = man man1ext = .1 man1dir = $(mandir)/$(manpfx)1 man3ext = .3 man3dir = $(mandir)/$(manpfx)3 # set this to a value to have the HTML documentation installed htmldir = # Support an alternate destination root directory for package building DESTDIR = SHELL = @MAKE_SHELL@ RM = rm -f INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ BUILD_DIR = @BUILD_DIR@ TEXINPUTDIR = $(srcdir) MAKEINFO = LANGUAGE= makeinfo TEXI2DVI = $(srcdir)/texi2dvi TEXI2HTML = $(srcdir)/texi2html QUIETPS = #set this to -q to shut up dvips PAPERSIZE = letter PSDPI = 600 DVIPS = dvips -D ${PSDPI} $(QUIETPS) -t ${PAPERSIZE} -o $@ # tricky # experimental; uses external texi2dvi for now; this needs pdftex to be present TEXI2PDF = texi2dvi --pdf # These tools might not be available; they're not required DVIPDF = dvipdfm -o $@ -p ${PAPERSIZE} PSPDF = gs -sPAPERSIZE=${PAPERSIZE} -sDEVICE=pdfwrite -dNOPAUSE -dBATCH -sOutputFile=$@ RLSRC = $(srcdir)/rlman.texi $(srcdir)/rluser.texi \ $(srcdir)/rltech.texi $(srcdir)/version.texi \ $(srcdir)/rluserman.texi $(srcdir)/fdl.texi HISTSRC = $(srcdir)/history.texi $(srcdir)/hsuser.texi \ $(srcdir)/hstech.texi $(srcdir)/version.texi $(srcdir)/fdl.texi # This should be a program that converts troff to an ascii-readable format NROFF = groff -Tascii # This should be a program that converts troff to postscript GROFF = groff DVIOBJ = readline.dvi history.dvi rluserman.dvi INFOOBJ = readline.info history.info rluserman.info PSOBJ = readline.ps history.ps rluserman.ps readline_3.ps history_3.ps HTMLOBJ = readline.html history.html rluserman.html TEXTOBJ = readline.0 history.0 PDFOBJ = readline.pdf history.pdf rluserman.pdf INTERMEDIATE_OBJ = rlman.dvi DIST_DOCS = $(DVIOBJ) $(PSOBJ) $(HTMLOBJ) $(INFOOBJ) $(TEXTOBJ) $(PDFOBJ) .SUFFIXES: .0 .3 .ps .txt .dvi .html .pdf .3.0: $(RM) $@ -${NROFF} -man $< > $@ .ps.pdf: $(RM) $@ -${PSPDF} $< .dvi.pdf: $(RM) $@ -${DVIPDF} $< #.texi.pdf: # $(RM) $@ # -${TEXI2PDF} $< all: info dvi html ps text pdf nodvi: info html text xdist: $(DIST_DOCS) info: $(INFOOBJ) dvi: $(DVIOBJ) ps: $(PSOBJ) html: $(HTMLOBJ) text: $(TEXTOBJ) pdf: $(PDFOBJ) readline.dvi: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rlman.texi mv rlman.dvi readline.dvi readline.info: $(RLSRC) $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rlman.texi rluserman.dvi: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/rluserman.texi rluserman.info: $(RLSRC) $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/rluserman.texi history.dvi: ${HISTSRC} TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2DVI) $(srcdir)/history.texi history.info: ${HISTSRC} $(MAKEINFO) --no-split -I $(TEXINPUTDIR) -o $@ $(srcdir)/history.texi readline.ps: readline.dvi $(RM) $@ $(DVIPS) readline.dvi rluserman.ps: rluserman.dvi $(RM) $@ $(DVIPS) rluserman.dvi history.ps: history.dvi $(RM) $@ $(DVIPS) history.dvi # # This leaves readline.html and rlman.html -- rlman.html is for www.gnu.org # readline.html: ${RLSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rlman.texi sed -e 's:rlman.html:readline.html:g' rlman.html > readline.html $(RM) rlman.html rluserman.html: ${RLSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/rluserman.texi history.html: ${HISTSRC} $(TEXI2HTML) -menu -monolithic -I $(TEXINPUTDIR) $(srcdir)/history.texi readline.0: readline.3 readline_3.ps: $(srcdir)/readline.3 ${RM} $@ ${GROFF} -man < $(srcdir)/readline.3 > $@ history.0: history.3 history_3.ps: $(srcdir)/history.3 ${RM} $@ ${GROFF} -man < $(srcdir)/history.3 > $@ readline.pdf: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/rlman.texi mv rlman.pdf $@ history.pdf: $(HISTSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/history.texi rluserman.pdf: $(RLSRC) TEXINPUTS=.:$(TEXINPUTDIR):$$TEXINPUTS $(TEXI2PDF) $(srcdir)/rluserman.texi clean: $(RM) *.aux *.bak *.cp *.fn *.ky *.log *.pg *.toc *.tp *.vr *.cps \ *.pgs *.bt *.bts *.rw *.rws *.fns *.kys *.tps *.vrs *.o \ core *.core mostlyclean: clean distclean: clean maybe-clean $(RM) $(INTERMEDIATE_OBJ) $(RM) Makefile maybe-clean: -if test "X$(topdir)" != "X.." && test "X$(topdir)" != "X$(BUILD_DIR)"; then \ $(RM) $(DIST_DOCS); \ fi maintainer-clean: clean $(RM) $(DIST_DOCS) $(RM) $(INTERMEDIATE_OBJ) $(RM) $(PDFOBJ) $(RM) Makefile installdirs: $(topdir)/support/mkdirs -$(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(infodir) $(DESTDIR)$(man3dir) -if test -n "${htmldir}" ; then \ $(SHELL) $(topdir)/support/mkdirs $(DESTDIR)$(htmldir) ; \ fi install: installdirs if test -f readline.info; then \ ${INSTALL_DATA} readline.info $(DESTDIR)$(infodir)/readline.info; \ else \ ${INSTALL_DATA} $(srcdir)/readline.info $(DESTDIR)$(infodir)/readline.info; \ fi if test -f rluserman.info; then \ ${INSTALL_DATA} rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ else \ ${INSTALL_DATA} $(srcdir)/rluserman.info $(DESTDIR)$(infodir)/rluserman.info; \ fi if test -f history.info; then \ ${INSTALL_DATA} history.info $(DESTDIR)$(infodir)/history.info; \ else \ ${INSTALL_DATA} $(srcdir)/history.info $(DESTDIR)$(infodir)/history.info; \ fi -if $(SHELL) -c 'install-info --version' >/dev/null 2>&1; then \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/readline.info ; \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/history.info ; \ install-info --dir-file=$(DESTDIR)$(infodir)/dir \ $(DESTDIR)$(infodir)/rluserman.info ; \ else true; fi -${INSTALL_DATA} $(srcdir)/readline.3 $(DESTDIR)$(man3dir)/readline$(man3ext) -${INSTALL_DATA} $(srcdir)/history.3 $(DESTDIR)$(man3dir)/history$(man3ext) -if test -n "${htmldir}" ; then \ if test -f readline.html; then \ ${INSTALL_DATA} readline.html $(DESTDIR)$(htmldir)/readline.html; \ else \ ${INSTALL_DATA} $(srcdir)/readline.html $(DESTDIR)$(htmldir)/readline.html; \ fi ; \ if test -f history.html; then \ ${INSTALL_DATA} history.html $(DESTDIR)$(htmldir)/history.html; \ else \ ${INSTALL_DATA} $(srcdir)/history.html $(DESTDIR)$(htmldir)/history.html; \ fi ; \ if test -f rluserman.html; then \ ${INSTALL_DATA} rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ else \ ${INSTALL_DATA} $(srcdir)/rluserman.html $(DESTDIR)$(htmldir)/rluserman.html; \ fi ; \ fi uninstall: $(RM) $(DESTDIR)$(infodir)/readline.info $(RM) $(DESTDIR)$(infodir)/rluserman.info $(RM) $(DESTDIR)$(infodir)/history.info $(RM) $(DESTDIR)$(man3dir)/readline$(man3ext) $(RM) $(DESTDIR)$(man3dir)/history$(man3ext) -if test -n "${htmldir}" ; then \ $(RM) $(DESTDIR)$(htmldir)/readline.html ; \ $(RM) $(DESTDIR)$(htmldir)/rluserman.html ; \ $(RM) $(DESTDIR)$(htmldir)/history.html ; \ fi readline-7.0/doc/texinfo.tex000664 000436 000024 00001303351 12631305505 016177 0ustar00chetstaff000000 000000 % texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2015-11-22.14} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015 % Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file 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, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... % \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: top marks (\last...) \noexpand\or \the\toks4 \the\toks6 % 1: bottom marks (default, \prev...) \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\lastsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % Main output routine. % \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer, % cropmarks, and footnote. This also causes index entries for this page % to be written to the auxiliary files. % \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Common context changes for both heading and footing. % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars} % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % This is used to check if we are on the first page of a chapter. \ifcase0\topmark\fi \ifx\thischapter\empty % See comment for \gettopheadingmarks \ifcase0\firstmark\fi \let\curchaptername\thischaptername \ifcase1\firstmark\fi \let\prevchaptername\thischaptername \else \let\curchaptername\thischaptername \ifcase1\topmark\fi \let\prevchaptername\thischaptername \fi % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi % \ifx\curchaptername\prevchaptername \let\thischapterheading\thischapter \else % \thischapterheading is the same as \thischapter except it is blank % for the first page of a chapter. This is to prevent the chapter name % being shown twice. \def\thischapterheading{}% \fi % \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}% \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Also remove a @texinfoc % comment (see \scanmacro for details). Pass the result on to \argcheckspaces. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argremovetexinfoc #1\texinfoc\ArgTerm} \def\argremovetexinfoc#1\texinfoc#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). This command % is not documented, not supported, and doesn't work. % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment % \def\comment{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other\commentxxx}% {\catcode`\^^M=\active% \gdef\commentxxx#1^^M{\endgroup% \futurelet\nexttoken\commentxxxx}% \gdef\commentxxxx{\ifx\nexttoken\aftermacro\expandafter\comment\fi}% } \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % See comment in \scanmacro about why the definitions of @c and @comment differ % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \let\tensl=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tensl=\defsl \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. We don't % bother to reset \scriptfont and \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{27pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{17pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi \message{markup,} % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The main macro is \urefbreak, which allows breaking at expected % places within the url. (There used to be another version, which % didn't support automatic breaking.) \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretchamount{.13em} \def\urefpoststretchamount{.1em} \def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax} \def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax} % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#1#2#3\par{% \def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. If the current font is already % monospace, don't change it; that way, we respect @kbdinputstyle. But % if it isn't monospace, then use \tt. % \def\key#1{{\setupmarkupstyle{key}% \nohyphenation \ifmonospace\else\tt\fi #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\selectfonts\lllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\selectfonts\lllsize #1}}$}% % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapterheading\hfil\folio}} \global\oddheadline={\line{\thischapterheading\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we again encounter the problem the 1sp was intended to solve. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi % Test to see if parskip is larger than space between lines of % table. If not, do nothing. % If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt % to keep parskip somewhat smaller % than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % % Unfortunately, this has the consequence that when _ is in the *value* % of an @set, it does not print properly in the roman fonts (get the cmr % dot accent at position 126 instead). No fix comes to mind, and it's % been this way since 2003 or earlier, so just ignore it. % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}} % Used when writing an index entry out to an index file, to prevent % expansion of Texinfo commands that can appear in an index entry. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should use @lbracechar and @rbracechar? \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % Define \definedumyletter, \definedummyaccent and \definedummyword before % using. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\U \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % For testing: output @{ and @} in index sort strings as \{ and \}. \newif\ifusebracesinindexes \let\indexlbrace\relax \let\indexrbrace\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty \fi % \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else \backslashdisappear \fi % \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else \def-{}% \fi \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else \def<{}% \fi \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else \def\@{}% \fi } \gdef\indexnonalnumreappear{% \useindexbackslash \let-\normaldash \let<\normalless \def\@{@}% } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\definedummyword\definedummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \def\lbracechar{{\indexlbrace}}% \def\rbracechar{{\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar % % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \def\minus{-}% \def\point{.}% \def\pounds{pounds}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\registeredsymbol{R}% \def\result{=>}% \def\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. % TODO: Two-level index? Operation index? % Workhorse for all indexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% \requireopenindexfile{#1}% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate here prevents an object entering into the current box, % which could confound checks such as those in \safewhatsit for preceding % skips. \fi} \def\indexisfl{fl} % Output \ as {\indexbackslash}, because \ is an escape character in % the index files. \let\indexbackslash=\relax {\catcode`\@=0 \catcode`\\=\active @gdef@useindexbackslash{@def\{{@indexbackslash}}} } % Definition for writing index entry text. \def\sortas#1{\ignorespaces}% % Definition for writing index entry sort key. Should occur at the at % the beginning of the index entry, like % @cindex @sortas{september} \september % The \ignorespaces takes care of following space, but there's no way % to remove space before it. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } % Write the entry in \toks0 to the index file. % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \useindexbackslash % \indexbackslash isn't defined now so it will be output % as is; and it will print as backslash. % Get the string to sort by, by processing the index entry with all % font commands turned off. {\indexnofonts \indexnonalnumdisappear \xdef\indexsortkey{}% \let\sortas=\indexwritesortas \edef\temp{\the\toks0}% \setbox\dummybox = \hbox{\temp}% Make sure to execute any \sortas \ifx\indexsortkey\empty \xdef\indexsortkey{\temp}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi \fi }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsortkey}{\noexpand\folio}{\the\toks0}}% }% \temp } \newbox\dummybox % used above % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else \catcode`\\ = 0 \escapechar = `\\ % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\ttbackslash}% \let\indexlbrace\{ % Likewise, set these sequences for braces \let\indexrbrace\} % used in the sort key. \begindoublecolumns \let\entryorphanpenalty=\indexorphanpenalty % % Read input from the index file line by line. \loopdo \ifeof1 \let\firsttoken\relax \else \read 1 to \nextline \edef\act{\gdef\noexpand\firsttoken{\getfirsttoken\nextline}}% \act \fi \thisline % \ifeof1\else \let\thisline\nextline \repeat %% \enddoublecolumns \fi \fi \closein 1 \endgroup} \def\getfirsttoken#1{\expandafter\getfirsttokenx#1\endfirsttoken} \long\def\getfirsttokenx#1#2\endfirsttoken{\noexpand#1} \def\loopdo#1\repeat{\def\body{#1}\loopdoxxx} \def\loopdoxxx{\let\next=\relax\body\let\next=\loopdoxxx\fi\next} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \def\indexbackslash{\math{\backslash}}% \let\\=\indexbackslash % % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus0.5pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 \gdef\finishentry#1{% \egroup % end box A \dimen@ = \wd\boxA % Length of text of entry \global\setbox\boxA=\hbox\bgroup\unhbox\boxA % #1 is the page number. % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdf \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \global\setbox\entryindexbox=\box\boxA \else \global\setbox\entryindexbox=\vbox\bgroup\noindent % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \hangindent=1em % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \let\maybestrut=\relax \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \let\maybestrut=\strut \ifdim\dimen@ > 0.8\dimen@ii % due to long index text \dimen@ = 0.7\dimen@ % Try to split the text roughly evenly \dimen@ii = \hsize \advance \dimen@ii by -1em \ifnum\dimen@>\dimen@ii % If the entry is too long, use the whole line \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 1em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, but % TeX doesn't seem to provide a way to do such a thing. \fi\fi \maybestrut % Add a strut on the first and last lines \unhbox\boxA \maybestrut % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup % delay text of entry until after penalty \bgroup\aftergroup\insertindexentrybox \entryorphanpenalty }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em \newbox\entryindexbox \def\insertindexentrybox{% \lineskip=0pt % This comes into effect when the \vbox has a large % height due to the paragraph in it having several % lines. \box\entryindexbox} % Default is no penalty \let\entryorphanpenalty\egroup % Used from \printindex. \firsttoken should be the first token % after the \entry. If it's not another \entry, we are at the last % line of a group of index entries, so insert a penalty to discourage % orphaned index entries. \long\def\indexorphanpenalty{% \def\isentry{\entry}% \ifx\firsttoken\isentry \else \unskip\penalty 9000 % The \unskip here stops breaking before the glue. It relies on the % \vskip above being there, otherwise there is an error % "You can't use `\unskip' in vertical mode". There has to be glue % in the current vertical list that hasn't been added to the % "current page". See Chapter 24 of the TeXbook. This contradicts % Section 8.3.7 in "TeX by Topic," though. \fi \egroup % now comes the box added with \aftergroup } % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \newdimen\doublecolumntopgap \doublecolumntopgap = 0pt \newtoks\savedtopmark % Used in \begindoublecolumns \newtoks\savedfirstmark \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% % Save \topmark and \firstmark \global\savedtopmark=\expandafter{\topmark}% \global\savedfirstmark=\expandafter{\firstmark}% }% \eject % run that output routine to set \partialpage % % We recover the two marks that the last output routine saved in order % to propagate the information in marks added around a chapter heading, % which could be otherwise be lost by the time the final page is output. % \mark{\the\savedtopmark}% Only mark in page passed to following \output. \output = {% \setbox0=\box\PAGE % clear box 255 }abc\eject % \mark{\the\savedfirstmark}% % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \global\doublecolumntopgap = \topskip \global\advance\doublecolumntopgap by -1\baselineskip \global\advance\vsize by -1\doublecolumntopgap \vsize = 2\vsize \topskip=0pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \vbox{% \vskip\doublecolumntopgap \hbox to\pagewidth{\box0\hfil\box2}}% } % Finished with with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \ifdim\dimen@<14\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \else \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until the second column is no higher than the first {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ % Remove glue from bottom of first column to % make sure it is higher than the second. \global\setbox1 = \vbox{\unvbox1\unpenalty\unskip}% \ifdim\ht3>\ht1 \global\advance\dimen@ by 1pt \repeat }% \multiply\dimen@ii by 4 \divide\dimen@ii by 5 \ifdim\ht3<\dimen@ii % Column heights are too different, so don't make their bottoms % flush with each other. The glue at the end of the second column % allows a second column to stretch, reducing the difference in % height between the two. \setbox0=\vbox to\dimen@{\unvbox1\vfill}% \setbox2=\vbox to\dimen@{\unvbox3\vskip 0pt plus 0.3\ht0}% \else \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% \fi \fi % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% \checkenv{}% chapters, etc., should not start inside an environment. % % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold \let\footnote=\errfootnoteheading % give better error message % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. Don't stretch around special % characters in urls in this environment, since the stretch at the right % should be enough. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax \def\urefprestretchamount{0pt}% \def\urefpoststretchamount{0pt}% } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \let\aftermacroxxx\relax \def\aftermacro{\aftermacroxxx} % alias because \c means cedilla in @tex or @math \let\texinfoc=\c % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xprocessmacroarg{\eatspaces}% % % Process the macro body under the current catcode regime. \scantokens{#1\texinfoc}\aftermacro% % % The \c is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. % The \aftermacro allows a \comment at the end of the macro definition % to duplicate itself past the final \newlinechar added by \scantokens: % this is used in the definition of \group to comment out a newline. We % don't do the same for \c to support Texinfo files with macros that ended % with a @c, which should no longer be necessary. % We avoid surrounding the call to \scantokens with \bgroup and \egroup % to allow macros to open or close groups themselves. } \def\scanexp#1{% \bgroup % Undo catcode changes of \startcontents and \printindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. % FIXME: This may not be needed. %\catcode`\@=0 \catcode`\\=\active \escapechar=`\@ \edef\temp{\noexpand\scanmacro{#1}}% \temp \egroup } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\@=\other \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\ =\other \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\processmacroarg\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\processmacroarg{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \defmacro. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % Remove following spaces at the expansion stage. % This works because spaces are discarded before each argument when TeX is % getting the arguments for a macro. % This must not be immediately followed by a }. \long\def\gobblespaces#1{#1} % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\processmacroarg{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are eight cases: recursive and nonrecursive macros of zero, one, % up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \def\processmacroarg{\gobblespaces}% % This removes the pair of braces around the argument. We don't % use \eatspaces, because this can cause ends of lines to be lost % when the argument to \eatspaces is read, leading to line-based % commands like "@itemize" not being read correctly. \else \def\processmacroarg{\xprocessmacroarg}% \let\xprocessmacroarg\relax \fi \ifrecursive %%%%%%%%%%%%%% Recursive %%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname{% \noexpand\gobblespaces##1\empty}% % The \empty is for \gobblespaces in case #1 is empty }% \expandafter\xdef\csname\the\macname @@@@\endcsname##1{% \egroup\noexpand\scanmacro{\macrobody}}% \else \ifnum\paramno<10\relax % at most 9 % See non-recursive section below for comments \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter \noexpand\macroargctxt \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi \else %%%%%%%%%%%%%%%%%%%%%% Non-recursive %%%%%%%%%%%%%%%%%%%%%%%%%% \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname{% \noexpand\gobblespaces##1\empty}% % The \empty is for \gobblespaces in case #1 is empty }% \expandafter\xdef\csname\the\macname @@@@\endcsname##1{% \egroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \ifx,\tokenafterxref \else\ifx.\tokenafterxref \else\ifx;\tokenafterxref \else\ifx)\tokenafterxref \else,% add a , if xref not followed by punctuation \fi\fi\fi\fi \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% \requireauxfile {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {\setnonasciicharscatcodenonglobal\other}% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro % If the image is by itself, center it. \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, then our check for duplicated % definitions triggers. Making non-ascii chars active is enough. % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{\tie} \gdef^^a1{\exclamdown} \gdef^^a2{{\tcfont \char162}} % cent \gdef^^a3{\pounds} \gdef^^a4{{\tcfont \char164}} % currency \gdef^^a5{{\tcfont \char165}} % yen \gdef^^a6{{\tcfont \char166}} % broken bar \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{\ensuremath\lnot} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} \gdef^^b7{\ensuremath\cdot} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} \gdef^^bb{\guillemetright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\DH} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\TH} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\dh} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\th} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{\tie} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\DH} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{i}}} \gdef^^ef{\v d} % \gdef^^f0{\dh} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \else \csname uni:#1\endcsname \fi } \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B1}{\ensuremath\pm} \DeclareUnicodeCharacter{00B2}{$^2$} \DeclareUnicodeCharacter{00B3}{$^3$} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B5}{$\mu$} \DeclareUnicodeCharacter{00B6}{\P} \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00B9}{$^1$} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BC}{$1\over4$} \DeclareUnicodeCharacter{00BD}{$1\over2$} \DeclareUnicodeCharacter{00BE}{$3\over4$} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D0}{\DH} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D7}{\ensuremath\times} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DE}{\TH} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F0}{\dh} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F7}{\ensuremath\div} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FE}{\th} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{010F}{d'} \DeclareUnicodeCharacter{0110}{\DH} \DeclareUnicodeCharacter{0111}{\dh} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0122}{\cedilla{G}} \DeclareUnicodeCharacter{0123}{\cedilla{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}} \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{012E}{\ogonek{I}} \DeclareUnicodeCharacter{012F}{\ogonek{i}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0136}{\cedilla{K}} \DeclareUnicodeCharacter{0137}{\cedilla{k}} \DeclareUnicodeCharacter{0138}{\ensuremath\kappa} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{013B}{\cedilla{L}} \DeclareUnicodeCharacter{013C}{\cedilla{l}} \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}} \DeclareUnicodeCharacter{0140}{l\U{00B7}} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0145}{\cedilla{N}} \DeclareUnicodeCharacter{0146}{\cedilla{n}} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{0149}{'n} \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}} \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0156}{\cedilla{R}} \DeclareUnicodeCharacter{0157}{\cedilla{r}} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{T}} \DeclareUnicodeCharacter{0163}{\cedilla{t}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0165}{\v{t}} \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}} \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0172}{\ogonek{U}} \DeclareUnicodeCharacter{0173}{\ogonek{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}} \DeclareUnicodeCharacter{0392}{{\it B}} \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}} \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}} \DeclareUnicodeCharacter{0395}{{\it E}} \DeclareUnicodeCharacter{0396}{{\it Z}} \DeclareUnicodeCharacter{0397}{{\it H}} \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}} \DeclareUnicodeCharacter{0399}{{\it I}} \DeclareUnicodeCharacter{039A}{{\it K}} \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}} \DeclareUnicodeCharacter{039C}{{\it M}} \DeclareUnicodeCharacter{039D}{{\it N}} \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}} \DeclareUnicodeCharacter{039F}{{\it O}} \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}} \DeclareUnicodeCharacter{03A1}{{\it P}} %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}} \DeclareUnicodeCharacter{03A4}{{\it T}} \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}} \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}} \DeclareUnicodeCharacter{03A7}{{\it X}} \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}} \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}} % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}} \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}} \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}} \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}} \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}} \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}} % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}} % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha} \DeclareUnicodeCharacter{03B2}{\ensuremath\beta} \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma} \DeclareUnicodeCharacter{03B4}{\ensuremath\delta} \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon} \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta} \DeclareUnicodeCharacter{03B7}{\ensuremath\eta} \DeclareUnicodeCharacter{03B8}{\ensuremath\theta} \DeclareUnicodeCharacter{03B9}{\ensuremath\iota} \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa} \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda} \DeclareUnicodeCharacter{03BC}{\ensuremath\mu} \DeclareUnicodeCharacter{03BD}{\ensuremath\nu} \DeclareUnicodeCharacter{03BE}{\ensuremath\xi} \DeclareUnicodeCharacter{03BF}{{\it o}} % omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi} \DeclareUnicodeCharacter{03C1}{\ensuremath\rho} \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma} \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma} \DeclareUnicodeCharacter{03C4}{\ensuremath\tau} \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon} \DeclareUnicodeCharacter{03C6}{\ensuremath\phi} \DeclareUnicodeCharacter{03C7}{\ensuremath\chi} \DeclareUnicodeCharacter{03C8}{\ensuremath\psi} \DeclareUnicodeCharacter{03C9}{\ensuremath\omega} % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}} \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}} \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}} \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}} \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}} % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta} \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi} \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} % Punctuation \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2020}{\ensuremath\dagger} \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{202F}{\thinspace} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall} \DeclareUnicodeCharacter{2203}{\ensuremath\exists} \DeclareUnicodeCharacter{2208}{\ensuremath\in} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\ast} \DeclareUnicodeCharacter{221E}{\ensuremath\infty} \DeclareUnicodeCharacter{2225}{\ensuremath\parallel} \DeclareUnicodeCharacter{2227}{\ensuremath\wedge} \DeclareUnicodeCharacter{2229}{\ensuremath\cap} \DeclareUnicodeCharacter{2261}{\equiv} \DeclareUnicodeCharacter{2264}{\ensuremath\leq} \DeclareUnicodeCharacter{2265}{\ensuremath\geq} \DeclareUnicodeCharacter{2282}{\ensuremath\subset} \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq} \DeclareUnicodeCharacter{2016}{\ensuremath\Vert} \DeclareUnicodeCharacter{2032}{\ensuremath\prime} \DeclareUnicodeCharacter{210F}{\ensuremath\hbar} \DeclareUnicodeCharacter{2111}{\ensuremath\Im} \DeclareUnicodeCharacter{2113}{\ensuremath\ell} \DeclareUnicodeCharacter{2118}{\ensuremath\wp} \DeclareUnicodeCharacter{211C}{\ensuremath\Re} \DeclareUnicodeCharacter{2127}{\ensuremath\mho} \DeclareUnicodeCharacter{2135}{\ensuremath\aleph} \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow} \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow} \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow} \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow} \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow} \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow} \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow} \DeclareUnicodeCharacter{2198}{\ensuremath\searrow} \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow} \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto} \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow} \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow} \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup} \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown} \DeclareUnicodeCharacter{21BE}{\ensuremath\upharpoonright} \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup} \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown} \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons} \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow} \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow} \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow} \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow} \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow} \DeclareUnicodeCharacter{21DD}{\ensuremath\leadsto} \DeclareUnicodeCharacter{2201}{\ensuremath\complement} \DeclareUnicodeCharacter{2202}{\ensuremath\partial} \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset} \DeclareUnicodeCharacter{2207}{\ensuremath\nabla} \DeclareUnicodeCharacter{2209}{\ensuremath\notin} \DeclareUnicodeCharacter{220B}{\ensuremath\owns} \DeclareUnicodeCharacter{220F}{\ensuremath\prod} \DeclareUnicodeCharacter{2210}{\ensuremath\coprod} \DeclareUnicodeCharacter{2211}{\ensuremath\sum} \DeclareUnicodeCharacter{2213}{\ensuremath\mp} \DeclareUnicodeCharacter{2218}{\ensuremath\circ} \DeclareUnicodeCharacter{221A}{\ensuremath\surd} \DeclareUnicodeCharacter{221D}{\ensuremath\propto} \DeclareUnicodeCharacter{2220}{\ensuremath\angle} \DeclareUnicodeCharacter{2223}{\ensuremath\mid} \DeclareUnicodeCharacter{2228}{\ensuremath\vee} \DeclareUnicodeCharacter{222A}{\ensuremath\cup} \DeclareUnicodeCharacter{222B}{\ensuremath\smallint} \DeclareUnicodeCharacter{222E}{\ensuremath\oint} \DeclareUnicodeCharacter{223C}{\ensuremath\sim} \DeclareUnicodeCharacter{2240}{\ensuremath\wr} \DeclareUnicodeCharacter{2243}{\ensuremath\simeq} \DeclareUnicodeCharacter{2245}{\ensuremath\cong} \DeclareUnicodeCharacter{2248}{\ensuremath\approx} \DeclareUnicodeCharacter{224D}{\ensuremath\asymp} \DeclareUnicodeCharacter{2250}{\ensuremath\doteq} \DeclareUnicodeCharacter{2260}{\ensuremath\neq} \DeclareUnicodeCharacter{226A}{\ensuremath\ll} \DeclareUnicodeCharacter{226B}{\ensuremath\gg} \DeclareUnicodeCharacter{227A}{\ensuremath\prec} \DeclareUnicodeCharacter{227B}{\ensuremath\succ} \DeclareUnicodeCharacter{2283}{\ensuremath\supset} \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq} \DeclareUnicodeCharacter{228E}{\ensuremath\uplus} \DeclareUnicodeCharacter{228F}{\ensuremath\sqsubset} \DeclareUnicodeCharacter{2290}{\ensuremath\sqsupset} \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq} \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq} \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap} \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup} \DeclareUnicodeCharacter{2295}{\ensuremath\oplus} \DeclareUnicodeCharacter{2296}{\ensuremath\ominus} \DeclareUnicodeCharacter{2297}{\ensuremath\otimes} \DeclareUnicodeCharacter{2298}{\ensuremath\oslash} \DeclareUnicodeCharacter{2299}{\ensuremath\odot} \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash} \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv} \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop} \DeclareUnicodeCharacter{22A5}{\ensuremath\bot} \DeclareUnicodeCharacter{22A8}{\ensuremath\models} \DeclareUnicodeCharacter{22B4}{\ensuremath\unlhd} \DeclareUnicodeCharacter{22B5}{\ensuremath\unrhd} \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge} \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee} \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap} \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup} \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond} \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot} \DeclareUnicodeCharacter{22C6}{\ensuremath\star} \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie} \DeclareUnicodeCharacter{2308}{\ensuremath\lceil} \DeclareUnicodeCharacter{2309}{\ensuremath\rceil} \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor} \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor} \DeclareUnicodeCharacter{2322}{\ensuremath\frown} \DeclareUnicodeCharacter{2323}{\ensuremath\smile} \DeclareUnicodeCharacter{25A1}{\ensuremath\Box} \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle} \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright} \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown} \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft} \DeclareUnicodeCharacter{25C7}{\ensuremath\Diamond} \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit} \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit} \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit} \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit} \DeclareUnicodeCharacter{266D}{\ensuremath\flat} \DeclareUnicodeCharacter{266E}{\ensuremath\natural} \DeclareUnicodeCharacter{266F}{\ensuremath\sharp} \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc} \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle} \DeclareUnicodeCharacter{27C2}{\ensuremath\perp} \DeclareUnicodeCharacter{27E8}{\ensuremath\langle} \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow} \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow} \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow} \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto} \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus} \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot} \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus} \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes} \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus} \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup} \DeclareUnicodeCharacter{2A1D}{\ensuremath\Join} \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg} \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq} \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq} \global\mathchardef\checkmark="1370 % actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Latin1 (ISO-8859-1) character definitions. \def\nonasciistringdefs{% \setnonasciicharscatcode\active \def\defstringchar##1{\def##1{\string##1}}% % \defstringchar^^80\defstringchar^^81\defstringchar^^82\defstringchar^^83% \defstringchar^^84\defstringchar^^85\defstringchar^^86\defstringchar^^87% \defstringchar^^88\defstringchar^^89\defstringchar^^8a\defstringchar^^8b% \defstringchar^^8c\defstringchar^^8d\defstringchar^^8e\defstringchar^^8f% % \defstringchar^^90\defstringchar^^91\defstringchar^^92\defstringchar^^93% \defstringchar^^94\defstringchar^^95\defstringchar^^96\defstringchar^^97% \defstringchar^^98\defstringchar^^99\defstringchar^^9a\defstringchar^^9b% \defstringchar^^9c\defstringchar^^9d\defstringchar^^9e\defstringchar^^9f% % \defstringchar^^a0\defstringchar^^a1\defstringchar^^a2\defstringchar^^a3% \defstringchar^^a4\defstringchar^^a5\defstringchar^^a6\defstringchar^^a7% \defstringchar^^a8\defstringchar^^a9\defstringchar^^aa\defstringchar^^ab% \defstringchar^^ac\defstringchar^^ad\defstringchar^^ae\defstringchar^^af% % \defstringchar^^b0\defstringchar^^b1\defstringchar^^b2\defstringchar^^b3% \defstringchar^^b4\defstringchar^^b5\defstringchar^^b6\defstringchar^^b7% \defstringchar^^b8\defstringchar^^b9\defstringchar^^ba\defstringchar^^bb% \defstringchar^^bc\defstringchar^^bd\defstringchar^^be\defstringchar^^bf% % \defstringchar^^c0\defstringchar^^c1\defstringchar^^c2\defstringchar^^c3% \defstringchar^^c4\defstringchar^^c5\defstringchar^^c6\defstringchar^^c7% \defstringchar^^c8\defstringchar^^c9\defstringchar^^ca\defstringchar^^cb% \defstringchar^^cc\defstringchar^^cd\defstringchar^^ce\defstringchar^^cf% % \defstringchar^^d0\defstringchar^^d1\defstringchar^^d2\defstringchar^^d3% \defstringchar^^d4\defstringchar^^d5\defstringchar^^d6\defstringchar^^d7% \defstringchar^^d8\defstringchar^^d9\defstringchar^^da\defstringchar^^db% \defstringchar^^dc\defstringchar^^dd\defstringchar^^de\defstringchar^^df% % \defstringchar^^e0\defstringchar^^e1\defstringchar^^e2\defstringchar^^e3% \defstringchar^^e4\defstringchar^^e5\defstringchar^^e6\defstringchar^^e7% \defstringchar^^e8\defstringchar^^e9\defstringchar^^ea\defstringchar^^eb% \defstringchar^^ec\defstringchar^^ed\defstringchar^^ee\defstringchar^^ef% % \defstringchar^^f0\defstringchar^^f1\defstringchar^^f2\defstringchar^^f3% \defstringchar^^f4\defstringchar^^f5\defstringchar^^f6\defstringchar^^f7% \defstringchar^^f8\defstringchar^^f9\defstringchar^^fa\defstringchar^^fb% \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff% } % define all the unicode characters we know about, for the sake of @U. \utfeightchardefs % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \markupsetuplqdefault \markupsetuprqdefault \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @nonasciistringdefs @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have @fixbackslash turn them back on. @catcode`+=@other @catcode`@_=@other % \enablebackslashhack - allow file to begin `\input texinfo' % % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % If the file did not have a `\input texinfo', then it is turned off after % the first line; otherwise the first `\' in the file would cause an error. % This is used on the very last line of this file, texinfo.tex. % We also use @c to call @fixbackslash, in case ends of lines are hidden. { @catcode`@^=7 @catcode`@^^M=13@gdef@enablebackslashhack{% @global@let\ = @eatinput% @catcode`@^^M=13% @def@c{@fixbackslash@c}% @def ^^M{@let^^M@secondlinenl}% @gdef @secondlinenl{@let^^M@thirdlinenl}% @gdef @thirdlinenl{@fixbackslash}% }} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@fixbackslash}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @let@c=@texinfoc % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. @catcode`+=@active @catcode`@_=@active % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets % called at the beginning of every Texinfo file. Not opening texinfo.cnf % directly in this file, texinfo.tex, makes it possible to make a format % file for Texinfo. % @openin 1 texinfo.cnf @ifeof 1 @else @input texinfo.cnf @fi @closein 1 } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message\\|emacs-page" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore @enablebackslashhack readline-7.0/doc/version.texi000664 000436 000120 00000000324 12742471067 016346 0ustar00chetadmin000000 000000 @ignore Copyright (C) 1988-2016 Free Software Foundation, Inc. @end ignore @set EDITION 7.0 @set VERSION 7.0 @set UPDATED 16 July 2016 @set UPDATED-MONTH July 2016 @set LASTCHANGE Sat Jul 16 13:43:15 EDT 2016 readline-7.0/doc/fdl.texi000644 000436 000024 00000056015 11155505164 015443 0ustar00chetstaff000000 000000 @c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. @uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{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. 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. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. 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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. 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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain @sc{ascii} without markup, Texinfo input format, La@TeX{} input format, @acronym{SGML} or @acronym{XML} using a publicly available @acronym{DTD}, and standard-conforming simple @acronym{HTML}, PostScript or @acronym{PDF} designed for human modification. Examples of transparent image formats include @acronym{PNG}, @acronym{XCF} and @acronym{JPG}. Opaque formats include 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}, PostScript or @acronym{PDF} 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. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item 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. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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. @item 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: @enumerate A @item 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. @item 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 fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item 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. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve 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. @item 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. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item 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. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate 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. @item 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, and that you preserve all their Warranty Disclaimers. 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 ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item 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. @item 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, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. @item 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 @uref{http://www.gnu.org/copyleft/}. 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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents 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: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.'' line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. 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. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: readline-7.0/doc/rlman.texi000664 000436 000024 00000004523 12651435335 016012 0ustar00chetstaff000000 000000 \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename readline.info @settitle GNU Readline Library @include version.texi @comment %**end of header (This is for running Texinfo on a region.) @synindex vr fn @copying This manual describes the GNU Readline Library (version @value{VERSION}, @value{UPDATED}), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright @copyright{} 1988--2016 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * Readline: (readline). The GNU readline library API. @end direntry @titlepage @title GNU Readline Library @subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Readline Library This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is @url{http://www.gnu.org/software/readline/}. @menu * Command Line Editing:: GNU Readline User's Manual. * Programming with GNU Readline:: GNU Readline Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables. @end menu @end ifnottex @include rluser.texi @include rltech.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @node Concept Index @unnumbered Concept Index @printindex cp @node Function and Variable Index @unnumbered Function and Variable Index @printindex fn @bye readline-7.0/doc/rltech.texi000664 000436 000120 00000303466 12746161110 016144 0ustar00chetadmin000000 000000 @comment %**start of header (This is for running Texinfo on a region.) @setfilename rltech.info @comment %**end of header (This is for running Texinfo on a region.) @ifinfo This document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface. Copyright (C) 1988--2016 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare preserved on all copies. @ignore Permission is granted to process this file through TeX and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). @end ignore Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation. @end ifinfo @node Programming with GNU Readline @chapter Programming with GNU Readline This chapter describes the interface between the @sc{gnu} Readline Library and other programs. If you are a programmer, and you wish to include the features found in @sc{gnu} Readline such as completion, line editing, and interactive history manipulation in your own programs, this section is for you. @menu * Basic Behavior:: Using the default behavior of Readline. * Custom Functions:: Adding your own functions to Readline. * Readline Variables:: Variables accessible to custom functions. * Readline Convenience Functions:: Functions which Readline supplies to aid in writing your own custom functions. * Readline Signal Handling:: How Readline behaves when it receives signals. * Custom Completers:: Supplanting or supplementing Readline's completion functions. @end menu @node Basic Behavior @section Basic Behavior Many programs provide a command line interface, such as @code{mail}, @code{ftp}, and @code{sh}. For such programs, the default behaviour of Readline is sufficient. This section describes how to use Readline in the simplest way possible, perhaps to replace calls in your code to @code{gets()} or @code{fgets()}. @findex readline @cindex readline, function The function @code{readline()} prints a prompt @var{prompt} and then reads and returns a single line of text from the user. If @var{prompt} is @code{NULL} or the empty string, no prompt is displayed. The line @code{readline} returns is allocated with @code{malloc()}; the caller should @code{free()} the line when it has finished with it. The declaration for @code{readline} in ANSI C is @example @code{char *readline (const char *@var{prompt});} @end example @noindent So, one might say @example @code{char *line = readline ("Enter a line: ");} @end example @noindent in order to read a line of text from the user. The line returned has the final newline removed, so only the text remains. If @code{readline} encounters an @code{EOF} while reading the line, and the line is empty at that point, then @code{(char *)NULL} is returned. Otherwise, the line is ended just as if a newline had been typed. If you want the user to be able to get at the line later, (with @key{C-p} for example), you must call @code{add_history()} to save the line away in a @dfn{history} list of such lines. @example @code{add_history (line)}; @end example @noindent For full details on the GNU History Library, see the associated manual. It is preferable to avoid saving empty lines on the history list, since users rarely have a burning need to reuse a blank line. Here is a function which usefully replaces the standard @code{gets()} library function, and has the advantage of no static buffer to overflow: @example /* A static variable for holding the line. */ static char *line_read = (char *)NULL; /* Read a string, and return a pointer to it. Returns NULL on EOF. */ char * rl_gets () @{ /* If the buffer has already been allocated, return the memory to the free pool. */ if (line_read) @{ free (line_read); line_read = (char *)NULL; @} /* Get a line from the user. */ line_read = readline (""); /* If the line has any text in it, save it on the history. */ if (line_read && *line_read) add_history (line_read); return (line_read); @} @end example This function gives the user the default behaviour of @key{TAB} completion: completion on file names. If you do not want Readline to complete on filenames, you can change the binding of the @key{TAB} key with @code{rl_bind_key()}. @example @code{int rl_bind_key (int @var{key}, rl_command_func_t *@var{function});} @end example @code{rl_bind_key()} takes two arguments: @var{key} is the character that you want to bind, and @var{function} is the address of the function to call when @var{key} is pressed. Binding @key{TAB} to @code{rl_insert()} makes @key{TAB} insert itself. @code{rl_bind_key()} returns non-zero if @var{key} is not a valid ASCII character code (between 0 and 255). Thus, to disable the default @key{TAB} behavior, the following suffices: @example @code{rl_bind_key ('\t', rl_insert);} @end example This code should be executed once at the start of your program; you might write a function called @code{initialize_readline()} which performs this and other desired initializations, such as installing custom completers (@pxref{Custom Completers}). @node Custom Functions @section Custom Functions Readline provides many functions for manipulating the text of the line, but it isn't possible to anticipate the needs of all programs. This section describes the various functions and variables defined within the Readline library which allow a user program to add customized functionality to Readline. Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file @code{} in any file that uses Readline's features. Since some of the definitions in @code{readline.h} use the @code{stdio} library, the file @code{} should be included before @code{readline.h}. @code{readline.h} defines a C preprocessor variable that should be treated as an integer, @code{RL_READLINE_VERSION}, which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0x@var{MMmm}. @var{MM} is the two-digit major version number; @var{mm} is the two-digit minor version number. For Readline 4.2, for example, the value of @code{RL_READLINE_VERSION} would be @code{0x0402}. @menu * Readline Typedefs:: C declarations to make code readable. * Function Writing:: Variables and calling conventions. @end menu @node Readline Typedefs @subsection Readline Typedefs For readability, we declare a number of new object types, all pointers to functions. The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values. For instance, say we want to declare a variable @var{func} as a pointer to a function which takes two @code{int} arguments and returns an @code{int} (this is the type of all of the Readline bindable functions). Instead of the classic C declaration @code{int (*func)();} @noindent or the ANSI-C style declaration @code{int (*func)(int, int);} @noindent we may write @code{rl_command_func_t *func;} The full list of function pointer types available is @table @code @item typedef int rl_command_func_t (int, int); @item typedef char *rl_compentry_func_t (const char *, int); @item typedef char **rl_completion_func_t (const char *, int, int); @item typedef char *rl_quote_func_t (char *, int, char *); @item typedef char *rl_dequote_func_t (char *, int); @item typedef int rl_compignore_func_t (char **); @item typedef void rl_compdisp_func_t (char **, int, int); @item typedef int rl_hook_func_t (void); @item typedef int rl_getc_func_t (FILE *); @item typedef int rl_linebuf_func_t (char *, int); @item typedef int rl_intfunc_t (int); @item #define rl_ivoidfunc_t rl_hook_func_t @item typedef int rl_icpfunc_t (char *); @item typedef int rl_icppfunc_t (char **); @item typedef void rl_voidfunc_t (void); @item typedef void rl_vintfunc_t (int); @item typedef void rl_vcpfunc_t (char *); @item typedef void rl_vcppfunc_t (char **); @end table @node Function Writing @subsection Writing a New Function In order to write new functions for Readline, you need to know the calling conventions for keyboard-invoked functions, and the names of the variables that describe the current state of the line read so far. The calling sequence for a command @code{foo} looks like @example @code{int foo (int count, int key)} @end example @noindent where @var{count} is the numeric argument (or 1 if defaulted) and @var{key} is the key that invoked this function. It is completely up to the function as to what should be done with the numeric argument. Some functions use it as a repeat count, some as a flag, and others to choose alternate behavior (refreshing the current line as opposed to refreshing the screen, for example). Some choose to ignore it. In general, if a function uses the numeric argument as a repeat count, it should be able to do something useful with both negative and positive arguments. At the very least, it should be aware that it can be passed a negative argument. A command function should return 0 if its action completes successfully, and a value greater than zero if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions. @node Readline Variables @section Readline Variables These variables are available to function writers. @deftypevar {char *} rl_line_buffer This is the line gathered so far. You are welcome to modify the contents of the line, but see @ref{Allowing Undoing}. The function @code{rl_extend_line_buffer} is available to increase the memory allocated to @code{rl_line_buffer}. @end deftypevar @deftypevar int rl_point The offset of the current cursor position in @code{rl_line_buffer} (the @emph{point}). @end deftypevar @deftypevar int rl_end The number of characters present in @code{rl_line_buffer}. When @code{rl_point} is at the end of the line, @code{rl_point} and @code{rl_end} are equal. @end deftypevar @deftypevar int rl_mark The @var{mark} (saved position) in the current line. If set, the mark and point define a @emph{region}. @end deftypevar @deftypevar int rl_done Setting this to a non-zero value causes Readline to return the current line immediately. @end deftypevar @deftypevar int rl_num_chars_to_read Setting this to a positive value before calling @code{readline()} causes Readline to return after accepting that many characters, rather than reading up to a character bound to @code{accept-line}. @end deftypevar @deftypevar int rl_pending_input Setting this to a value makes it the next keystroke read. This is a way to stuff a single character into the input stream. @end deftypevar @deftypevar int rl_dispatching Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism. @end deftypevar @deftypevar int rl_erase_empty_line Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line. @end deftypevar @deftypevar {char *} rl_prompt The prompt Readline uses. This is set from the argument to @code{readline()}, and should not be assigned to directly. The @code{rl_set_prompt()} function (@pxref{Redisplay}) may be used to modify the prompt string after calling @code{readline()}. @end deftypevar @deftypevar {char *} rl_display_prompt The string displayed as the prompt. This is usually identical to @var{rl_prompt}, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search. @end deftypevar @deftypevar int rl_already_prompted If an application wishes to display the prompt itself, rather than have Readline do it the first time @code{readline()} is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to @code{readline()} so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it. @end deftypevar @deftypevar {const char *} rl_library_version The version number of this revision of the library. @end deftypevar @deftypevar int rl_readline_version An integer encoding the current version of the library. The encoding is of the form 0x@var{MMmm}, where @var{MM} is the two-digit major version number, and @var{mm} is the two-digit minor version number. For example, for Readline-4.2, @code{rl_readline_version} would have the value 0x0402. @end deftypevar @deftypevar {int} rl_gnu_readline_p Always set to 1, denoting that this is @sc{gnu} readline rather than some emulation. @end deftypevar @deftypevar {const char *} rl_terminal_name The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the @env{TERM} environment variable the first time it is called. @end deftypevar @deftypevar {const char *} rl_readline_name This variable is set to a unique name by each application using Readline. The value allows conditional parsing of the inputrc file (@pxref{Conditional Init Constructs}). @end deftypevar @deftypevar {FILE *} rl_instream The stdio stream from which Readline reads input. If @code{NULL}, Readline defaults to @var{stdin}. @end deftypevar @deftypevar {FILE *} rl_outstream The stdio stream to which Readline performs output. If @code{NULL}, Readline defaults to @var{stdout}. @end deftypevar @deftypevar int rl_prefer_env_winsize If non-zero, Readline gives values found in the @env{LINES} and @env{COLUMNS} environment variables greater precedence than values fetched from the kernel when computing the screen dimensions. @end deftypevar @deftypevar {rl_command_func_t *} rl_last_func The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example. @end deftypevar @deftypevar {rl_hook_func_t *} rl_startup_hook If non-zero, this is the address of a function to call just before @code{readline} prints the first prompt. @end deftypevar @deftypevar {rl_hook_func_t *} rl_pre_input_hook If non-zero, this is the address of a function to call after the first prompt has been printed and just before @code{readline} starts reading input characters. @end deftypevar @deftypevar {rl_hook_func_t *} rl_event_hook If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input. @end deftypevar @deftypevar {rl_getc_func_t *} rl_getc_function If non-zero, Readline will call indirectly through this pointer to get a character from the input stream. By default, it is set to @code{rl_getc}, the default Readline character input function (@pxref{Character Input}). In general, an application that sets @var{rl_getc_function} should consider setting @var{rl_input_available_hook} as well. @end deftypevar @deftypevar {rl_hook_func_t *} rl_signal_event_hook If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input. @end deftypevar @deftypevar {rl_hook_func_t *} rl_input_available_hook If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks @code{rl_instream}; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to @code{rl_set_keyboard_input_timeout()} or the value of the user-settable @var{keyseq-timeout} variable. This is designed for use by applications using Readline's callback interface (@pxref{Alternate Interface}), which may not use the traditional @code{read(2)} and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of @var{keyseq-timeout}, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets @var{rl_getc_function} should consider setting @var{rl_input_available_hook} as well. @end deftypevar @deftypevar {rl_voidfunc_t *} rl_redisplay_function If non-zero, Readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to @code{rl_redisplay}, the default Readline redisplay function (@pxref{Redisplay}). @end deftypevar @deftypevar {rl_vintfunc_t *} rl_prep_term_function If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an @code{int} flag that says whether or not to use eight-bit characters. By default, this is set to @code{rl_prep_terminal} (@pxref{Terminal Management}). @end deftypevar @deftypevar {rl_voidfunc_t *} rl_deprep_term_function If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of @code{rl_prep_term_function}. By default, this is set to @code{rl_deprep_terminal} (@pxref{Terminal Management}). @end deftypevar @deftypevar {Keymap} rl_executing_keymap This variable is set to the keymap (@pxref{Keymaps}) in which the currently executing readline function was found. @end deftypevar @deftypevar {Keymap} rl_binding_keymap This variable is set to the keymap (@pxref{Keymaps}) in which the last key binding occurred. @end deftypevar @deftypevar {char *} rl_executing_macro This variable is set to the text of any currently-executing macro. @end deftypevar @deftypevar int rl_executing_key The key that caused the dispatch to the currently-executing Readline function. @end deftypevar @deftypevar {char *} rl_executing_keyseq The full key sequence that caused the dispatch to the currently-executing Readline function. @end deftypevar @deftypevar int rl_key_sequence_length The number of characters in @var{rl_executing_keyseq}. @end deftypevar @deftypevar {int} rl_readline_state A variable with bit values that encapsulate the current Readline state. A bit is set with the @code{RL_SETSTATE} macro, and unset with the @code{RL_UNSETSTATE} macro. Use the @code{RL_ISSTATE} macro to test whether a particular state bit is set. Current state bits include: @table @code @item RL_STATE_NONE Readline has not yet been called, nor has it begun to initialize. @item RL_STATE_INITIALIZING Readline is initializing its internal data structures. @item RL_STATE_INITIALIZED Readline has completed its initialization. @item RL_STATE_TERMPREPPED Readline has modified the terminal modes to do its own input and redisplay. @item RL_STATE_READCMD Readline is reading a command from the keyboard. @item RL_STATE_METANEXT Readline is reading more input after reading the meta-prefix character. @item RL_STATE_DISPATCHING Readline is dispatching to a command. @item RL_STATE_MOREINPUT Readline is reading more input while executing an editing command. @item RL_STATE_ISEARCH Readline is performing an incremental history search. @item RL_STATE_NSEARCH Readline is performing a non-incremental history search. @item RL_STATE_SEARCH Readline is searching backward or forward through the history for a string. @item RL_STATE_NUMERICARG Readline is reading a numeric argument. @item RL_STATE_MACROINPUT Readline is currently getting its input from a previously-defined keyboard macro. @item RL_STATE_MACRODEF Readline is currently reading characters defining a keyboard macro. @item RL_STATE_OVERWRITE Readline is in overwrite mode. @item RL_STATE_COMPLETING Readline is performing word completion. @item RL_STATE_SIGHANDLER Readline is currently executing the readline signal handler. @item RL_STATE_UNDOING Readline is performing an undo. @item RL_STATE_INPUTPENDING Readline has input pending due to a call to @code{rl_execute_next()}. @item RL_STATE_TTYCSAVED Readline has saved the values of the terminal's special characters. @item RL_STATE_CALLBACK Readline is currently using the alternate (callback) interface (@pxref{Alternate Interface}). @item RL_STATE_VIMOTION Readline is reading the argument to a vi-mode "motion" command. @item RL_STATE_MULTIKEY Readline is reading a multiple-keystroke command. @item RL_STATE_VICMDONCE Readline has entered vi command (movement) mode at least one time during the current call to @code{readline()}. @item RL_STATE_DONE Readline has read a key sequence bound to @code{accept-line} and is about to return the line to the caller. @end table @end deftypevar @deftypevar {int} rl_explicit_arg Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function. @end deftypevar @deftypevar {int} rl_numeric_arg Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function. @end deftypevar @deftypevar {int} rl_editing_mode Set to a value denoting Readline's current editing mode. A value of @var{1} means Readline is currently in emacs mode; @var{0} means that vi mode is active. @end deftypevar @node Readline Convenience Functions @section Readline Convenience Functions @menu * Function Naming:: How to give a function you write a name. * Keymaps:: Making keymaps. * Binding Keys:: Changing Keymaps. * Associating Function Names and Bindings:: Translate function names to key sequences. * Allowing Undoing:: How to make your functions undoable. * Redisplay:: Functions to control line display. * Modifying Text:: Functions to modify @code{rl_line_buffer}. * Character Input:: Functions to read keyboard input. * Terminal Management:: Functions to manage terminal settings. * Utility Functions:: Generally useful functions and hooks. * Miscellaneous Functions:: Functions that don't fall into any category. * Alternate Interface:: Using Readline in a `callback' fashion. * A Readline Example:: An example Readline function. * Alternate Interface Example:: An example program using the alternate interface. @end menu @node Function Naming @subsection Naming a Function The user can dynamically change the bindings of keys while using Readline. This is done by representing the function with a descriptive name. The user is able to type the descriptive name when referring to the function. Thus, in an init file, one might find @example Meta-Rubout: backward-kill-word @end example This binds the keystroke @key{Meta-Rubout} to the function @emph{descriptively} named @code{backward-kill-word}. You, as the programmer, should bind the functions you write to descriptive names as well. Readline provides a function for doing that: @deftypefun int rl_add_defun (const char *name, rl_command_func_t *function, int key) Add @var{name} to the list of named functions. Make @var{function} be the function that gets called. If @var{key} is not -1, then bind it to @var{function} using @code{rl_bind_key()}. @end deftypefun Using this function alone is sufficient for most applications. It is the recommended way to add a few functions to the default functions that Readline has built in. If you need to do something other than adding a function to Readline, you may need to use the underlying functions described below. @node Keymaps @subsection Selecting a Keymap Key bindings take place on a @dfn{keymap}. The keymap is the association between the keys that the user types and the functions that get run. You can make your own keymaps, copy existing keymaps, and tell Readline which keymap to use. @deftypefun Keymap rl_make_bare_keymap (void) Returns a new, empty keymap. The space for the keymap is allocated with @code{malloc()}; the caller should free it by calling @code{rl_free_keymap()} when done. @end deftypefun @deftypefun Keymap rl_copy_keymap (Keymap map) Return a new keymap which is a copy of @var{map}. @end deftypefun @deftypefun Keymap rl_make_keymap (void) Return a new keymap with the printing characters bound to rl_insert, the lowercase Meta characters bound to run their equivalents, and the Meta digits bound to produce numeric arguments. @end deftypefun @deftypefun void rl_discard_keymap (Keymap keymap) Free the storage associated with the data in @var{keymap}. The caller should free @var{keymap}. @end deftypefun @deftypefun void rl_free_keymap (Keymap keymap) Free all storage associated with @var{keymap}. This calls @code{rl_discard_keymap} to free subordindate keymaps and macros. @end deftypefun Readline has several internal keymaps. These functions allow you to change which keymap is active. @deftypefun Keymap rl_get_keymap (void) Returns the currently active keymap. @end deftypefun @deftypefun void rl_set_keymap (Keymap keymap) Makes @var{keymap} the currently active keymap. @end deftypefun @deftypefun Keymap rl_get_keymap_by_name (const char *name) Return the keymap matching @var{name}. @var{name} is one which would be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). @end deftypefun @deftypefun {char *} rl_get_keymap_name (Keymap keymap) Return the name matching @var{keymap}. @var{name} is one which would be supplied in a @code{set keymap} inputrc line (@pxref{Readline Init File}). @end deftypefun @node Binding Keys @subsection Binding Keys Key sequences are associate with functions through the keymap. Readline has several internal keymaps: @code{emacs_standard_keymap}, @code{emacs_meta_keymap}, @code{emacs_ctlx_keymap}, @code{vi_movement_keymap}, and @code{vi_insertion_keymap}. @code{emacs_standard_keymap} is the default, and the examples in this manual assume that. Since @code{readline()} installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to @code{readline()} will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the @code{rl_startup_hook} variable (@pxref{Readline Variables}). These functions manage key bindings. @deftypefun int rl_bind_key (int key, rl_command_func_t *function) Binds @var{key} to @var{function} in the currently active keymap. Returns non-zero in the case of an invalid @var{key}. @end deftypefun @deftypefun int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) Bind @var{key} to @var{function} in @var{map}. Returns non-zero in the case of an invalid @var{key}. @end deftypefun @deftypefun int rl_bind_key_if_unbound (int key, rl_command_func_t *function) Binds @var{key} to @var{function} if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid @var{key} or if @var{key} is already bound. @end deftypefun @deftypefun int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map) Binds @var{key} to @var{function} if it is not already bound in @var{map}. Returns non-zero in the case of an invalid @var{key} or if @var{key} is already bound. @end deftypefun @deftypefun int rl_unbind_key (int key) Bind @var{key} to the null function in the currently active keymap. Returns non-zero in case of error. @end deftypefun @deftypefun int rl_unbind_key_in_map (int key, Keymap map) Bind @var{key} to the null function in @var{map}. Returns non-zero in case of error. @end deftypefun @deftypefun int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) Unbind all keys that execute @var{function} in @var{map}. @end deftypefun @deftypefun int rl_unbind_command_in_map (const char *command, Keymap map) Unbind all keys that are bound to @var{command} in @var{map}. @end deftypefun @deftypefun int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function) Bind the key sequence represented by the string @var{keyseq} to the function @var{function}, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if @var{keyseq} is invalid. @end deftypefun @deftypefun int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Bind the key sequence represented by the string @var{keyseq} to the function @var{function}. This makes new keymaps as necessary. Initial bindings are performed in @var{map}. The return value is non-zero if @var{keyseq} is invalid. @end deftypefun @deftypefun int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) Equivalent to @code{rl_bind_keyseq_in_map}. @end deftypefun @deftypefun int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function) Binds @var{keyseq} to @var{function} if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is already bound. @end deftypefun @deftypefun int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Binds @var{keyseq} to @var{function} if it is not already bound in @var{map}. Returns non-zero in the case of an invalid @var{keyseq} or if @var{keyseq} is already bound. @end deftypefun @deftypefun int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) Bind the key sequence represented by the string @var{keyseq} to the arbitrary pointer @var{data}. @var{type} says what kind of data is pointed to by @var{data}; this can be a function (@code{ISFUNC}), a macro (@code{ISMACR}), or a keymap (@code{ISKMAP}). This makes new keymaps as necessary. The initial keymap in which to do bindings is @var{map}. @end deftypefun @deftypefun int rl_parse_and_bind (char *line) Parse @var{line} as if it had been read from the @code{inputrc} file and perform any key bindings and variable assignments found (@pxref{Readline Init File}). @end deftypefun @deftypefun int rl_read_init_file (const char *filename) Read keybindings and variable assignments from @var{filename} (@pxref{Readline Init File}). @end deftypefun @node Associating Function Names and Bindings @subsection Associating Function Names and Bindings These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function. @deftypefun {rl_command_func_t *} rl_named_function (const char *name) Return the function with name @var{name}. @end deftypefun @deftypefun {rl_command_func_t *} rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) Return the function invoked by @var{keyseq} in keymap @var{map}. If @var{map} is @code{NULL}, the current keymap is used. If @var{type} is not @code{NULL}, the type of the object is returned in the @code{int} variable it points to (one of @code{ISFUNC}, @code{ISKMAP}, or @code{ISMACR}). @end deftypefun @deftypefun {char **} rl_invoking_keyseqs (rl_command_func_t *function) Return an array of strings representing the key sequences used to invoke @var{function} in the current keymap. @end deftypefun @deftypefun {char **} rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) Return an array of strings representing the key sequences used to invoke @var{function} in the keymap @var{map}. @end deftypefun @deftypefun void rl_function_dumper (int readable) Print the readline function names and the key sequences currently bound to them to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun void rl_list_funmap_names (void) Print the names of all bindable Readline functions to @code{rl_outstream}. @end deftypefun @deftypefun {const char **} rl_funmap_names (void) Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using @code{free} or @code{rl_free} when you are done. @end deftypefun @deftypefun int rl_add_funmap_entry (const char *name, rl_command_func_t *function) Add @var{name} to the list of bindable Readline command names, and make @var{function} the function to be called when @var{name} is invoked. @end deftypefun @node Allowing Undoing @subsection Allowing Undoing Supporting the undo command is a painless thing, and makes your functions much more useful. It is certainly easy to try something if you know you can undo it. If your function simply inserts text once, or deletes text once, and uses @code{rl_insert_text()} or @code{rl_delete_text()} to do it, then undoing is already done for you automatically. If you do multiple insertions or multiple deletions, or any combination of these operations, you should group them together into one operation. This is done with @code{rl_begin_undo_group()} and @code{rl_end_undo_group()}. The types of events that can be undone are: @smallexample enum undo_code @{ UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END @}; @end smallexample Notice that @code{UNDO_DELETE} means to insert some text, and @code{UNDO_INSERT} means to delete some text. That is, the undo code tells what to undo, not how to undo it. @code{UNDO_BEGIN} and @code{UNDO_END} are tags added by @code{rl_begin_undo_group()} and @code{rl_end_undo_group()}. @deftypefun int rl_begin_undo_group (void) Begins saving undo information in a group construct. The undo information usually comes from calls to @code{rl_insert_text()} and @code{rl_delete_text()}, but could be the result of calls to @code{rl_add_undo()}. @end deftypefun @deftypefun int rl_end_undo_group (void) Closes the current undo group started with @code{rl_begin_undo_group ()}. There should be one call to @code{rl_end_undo_group()} for each call to @code{rl_begin_undo_group()}. @end deftypefun @deftypefun void rl_add_undo (enum undo_code what, int start, int end, char *text) Remember how to undo an event (according to @var{what}). The affected text runs from @var{start} to @var{end}, and encompasses @var{text}. @end deftypefun @deftypefun void rl_free_undo_list (void) Free the existing undo list. @end deftypefun @deftypefun int rl_do_undo (void) Undo the first thing on the undo list. Returns @code{0} if there was nothing to undo, non-zero if something was undone. @end deftypefun Finally, if you neither insert nor delete text, but directly modify the existing text (e.g., change its case), call @code{rl_modifying()} once, just before you modify the text. You must supply the indices of the text range that you are going to modify. @deftypefun int rl_modifying (int start, int end) Tell Readline to save the text between @var{start} and @var{end} as a single undo unit. It is assumed that you will subsequently modify that text. @end deftypefun @node Redisplay @subsection Redisplay @deftypefun void rl_redisplay (void) Change what's displayed on the screen to reflect the current contents of @code{rl_line_buffer}. @end deftypefun @deftypefun int rl_forced_update_display (void) Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. @end deftypefun @deftypefun int rl_on_new_line (void) Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline. @end deftypefun @deftypefun int rl_on_new_line_with_prompt (void) Tell the update functions that we have moved onto a new line, with @var{rl_prompt} already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting @var{rl_already_prompted}. @end deftypefun @deftypefun int rl_clear_visible_line (void) Clear the screen lines corresponding to the current line's contents. @end deftypefun @deftypefun int rl_reset_line_state (void) Reset the display state to a clean state and redisplay the current line starting on a new line. @end deftypefun @deftypefun int rl_crlf (void) Move the cursor to the start of the next screen line. @end deftypefun @deftypefun int rl_show_char (int c) Display character @var{c} on @code{rl_outstream}. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay. @end deftypefun @deftypefun int rl_message (const char *, @dots{}) The arguments are a format string as would be supplied to @code{printf}, possibly containing conversion specifications such as @samp{%d}, and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the @dfn{echo area}. The echo area is also used to display numeric arguments and search strings. You should call @code{rl_save_prompt} to save the prompt information before calling this function. @end deftypefun @deftypefun int rl_clear_message (void) Clear the message in the echo area. If the prompt was saved with a call to @code{rl_save_prompt} before the last call to @code{rl_message}, call @code{rl_restore_prompt} before calling this function. @end deftypefun @deftypefun void rl_save_prompt (void) Save the local Readline prompt display state in preparation for displaying a new message in the message area with @code{rl_message()}. @end deftypefun @deftypefun void rl_restore_prompt (void) Restore the local Readline prompt display state saved by the most recent call to @code{rl_save_prompt}. if @code{rl_save_prompt} was called to save the prompt before a call to @code{rl_message}, this function should be called before the corresponding call to @code{rl_clear_message}. @end deftypefun @deftypefun int rl_expand_prompt (char *prompt) Expand any special character sequences in @var{prompt} and set up the local Readline prompt redisplay variables. This function is called by @code{readline()}. It may also be called to expand the primary prompt if the @code{rl_on_new_line_with_prompt()} function or @code{rl_already_prompted} variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers @code{RL_PROMPT_START_IGNORE} and @code{RL_PROMPT_END_IGNORE} (declared in @file{readline.h}). This may be used to embed terminal-specific escape sequences in prompts. @end deftypefun @deftypefun int rl_set_prompt (const char *prompt) Make Readline use @var{prompt} for subsequent redisplay. This calls @code{rl_expand_prompt()} to expand the prompt and sets @code{rl_prompt} to the result. @end deftypefun @node Modifying Text @subsection Modifying Text @deftypefun int rl_insert_text (const char *text) Insert @var{text} into the line at the current cursor position. Returns the number of characters inserted. @end deftypefun @deftypefun int rl_delete_text (int start, int end) Delete the text between @var{start} and @var{end} in the current line. Returns the number of characters deleted. @end deftypefun @deftypefun {char *} rl_copy_text (int start, int end) Return a copy of the text between @var{start} and @var{end} in the current line. @end deftypefun @deftypefun int rl_kill_text (int start, int end) Copy the text between @var{start} and @var{end} in the current line to the kill ring, appending or prepending to the last kill if the last command was a kill command. The text is deleted. If @var{start} is less than @var{end}, the text is appended, otherwise prepended. If the last command was not a kill, a new kill ring slot is used. @end deftypefun @deftypefun int rl_push_macro_input (char *macro) Cause @var{macro} to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use @code{rl_insert_text()} instead. @end deftypefun @node Character Input @subsection Character Input @deftypefun int rl_read_key (void) Return the next character available from Readline's current input stream. This handles input inserted into the input stream via @var{rl_pending_input} (@pxref{Readline Variables}) and @code{rl_stuff_char()}, macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the @code{rl_event_hook} variable. @end deftypefun @deftypefun int rl_getc (FILE *stream) Return the next character available from @var{stream}, which is assumed to be the keyboard. @end deftypefun @deftypefun int rl_stuff_char (int c) Insert @var{c} into the Readline input stream. It will be "read" before Readline attempts to read characters from the terminal with @code{rl_read_key()}. Up to 512 characters may be pushed back. @code{rl_stuff_char} returns 1 if the character was successfully inserted; 0 otherwise. @end deftypefun @deftypefun int rl_execute_next (int c) Make @var{c} be the next command to be executed when @code{rl_read_key()} is called. This sets @var{rl_pending_input}. @end deftypefun @deftypefun int rl_clear_pending_input (void) Unset @var{rl_pending_input}, effectively negating the effect of any previous call to @code{rl_execute_next()}. This works only if the pending input has not already been read with @code{rl_read_key()}. @end deftypefun @deftypefun int rl_set_keyboard_input_timeout (int u) While waiting for keyboard input in @code{rl_read_key()}, Readline will wait for @var{u} microseconds for input before calling any function assigned to @code{rl_event_hook}. @var{u} must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value. @end deftypefun @node Terminal Management @subsection Terminal Management @deftypefun void rl_prep_terminal (int meta_flag) Modify the terminal settings for Readline's use, so @code{readline()} can read a single character at a time from the keyboard. The @var{meta_flag} argument should be non-zero if Readline should read eight-bit input. @end deftypefun @deftypefun void rl_deprep_terminal (void) Undo the effects of @code{rl_prep_terminal()}, leaving the terminal in the state in which it was before the most recent call to @code{rl_prep_terminal()}. @end deftypefun @deftypefun void rl_tty_set_default_bindings (Keymap kmap) Read the operating system's terminal editing characters (as would be displayed by @code{stty}) to their Readline equivalents. The bindings are performed in @var{kmap}. @end deftypefun @deftypefun void rl_tty_unset_default_bindings (Keymap kmap) Reset the bindings manipulated by @code{rl_tty_set_default_bindings} so that the terminal editing characters are bound to @code{rl_insert}. The bindings are performed in @var{kmap}. @end deftypefun @deftypefun int rl_tty_set_echoing (int value) Set Readline's idea of whether or not it is echoing output to its output stream (@var{rl_outstream}). If @var{value} is 0, Readline does not display output to @var{rl_outstream}; any other value enables output. The initial value is set when Readline initializes the terminal settings. This function returns the previous value. @end deftypefun @deftypefun int rl_reset_terminal (const char *terminal_name) Reinitialize Readline's idea of the terminal settings using @var{terminal_name} as the terminal type (e.g., @code{vt100}). If @var{terminal_name} is @code{NULL}, the value of the @code{TERM} environment variable is used. @end deftypefun @node Utility Functions @subsection Utility Functions @deftypefun int rl_save_state (struct readline_state *sp) Save a snapshot of Readline's internal state to @var{sp}. The contents of the @var{readline_state} structure are documented in @file{readline.h}. The caller is responsible for allocating the structure. @end deftypefun @deftypefun int rl_restore_state (struct readline_state *sp) Restore Readline's internal state to that stored in @var{sp}, which must have been saved by a call to @code{rl_save_state}. The contents of the @var{readline_state} structure are documented in @file{readline.h}. The caller is responsible for freeing the structure. @end deftypefun @deftypefun void rl_free (void *mem) Deallocate the memory pointed to by @var{mem}. @var{mem} must have been allocated by @code{malloc}. @end deftypefun @deftypefun void rl_replace_line (const char *text, int clear_undo) Replace the contents of @code{rl_line_buffer} with @var{text}. The point and mark are preserved, if possible. If @var{clear_undo} is non-zero, the undo list associated with the current line is cleared. @end deftypefun @deftypefun void rl_extend_line_buffer (int len) Ensure that @code{rl_line_buffer} has enough space to hold @var{len} characters, possibly reallocating it if necessary. @end deftypefun @deftypefun int rl_initialize (void) Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; @code{readline()} calls it before reading any input. @end deftypefun @deftypefun int rl_ding (void) Ring the terminal bell, obeying the setting of @code{bell-style}. @end deftypefun @deftypefun int rl_alphabetic (int c) Return 1 if @var{c} is an alphabetic character. @end deftypefun @deftypefun void rl_display_match_list (char **matches, int len, int max) A convenience function for displaying a list of strings in columnar format on Readline's output stream. @code{matches} is the list of strings, in argv format, such as a list of completion matches. @code{len} is the number of strings in @code{matches}, and @code{max} is the length of the longest string in @code{matches}. This function uses the setting of @code{print-completions-horizontally} to select how the matches are displayed (@pxref{Readline Init File Syntax}). When displaying completions, this function sets the number of columns used for display to the value of @code{completion-display-width}, the value of the environment variable @env{COLUMNS}, or the screen width, in that order. @end deftypefun The following are implemented as macros, defined in @code{chardefs.h}. Applications should refrain from using them. @deftypefun int _rl_uppercase_p (int c) Return 1 if @var{c} is an uppercase alphabetic character. @end deftypefun @deftypefun int _rl_lowercase_p (int c) Return 1 if @var{c} is a lowercase alphabetic character. @end deftypefun @deftypefun int _rl_digit_p (int c) Return 1 if @var{c} is a numeric character. @end deftypefun @deftypefun int _rl_to_upper (int c) If @var{c} is a lowercase alphabetic character, return the corresponding uppercase character. @end deftypefun @deftypefun int _rl_to_lower (int c) If @var{c} is an uppercase alphabetic character, return the corresponding lowercase character. @end deftypefun @deftypefun int _rl_digit_value (int c) If @var{c} is a number, return the value it represents. @end deftypefun @node Miscellaneous Functions @subsection Miscellaneous Functions @deftypefun int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) Bind the key sequence @var{keyseq} to invoke the macro @var{macro}. The binding is performed in @var{map}. When @var{keyseq} is invoked, the @var{macro} will be inserted into the line. This function is deprecated; use @code{rl_generic_bind()} instead. @end deftypefun @deftypefun void rl_macro_dumper (int readable) Print the key sequences bound to macros and their values, using the current keymap, to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun int rl_variable_bind (const char *variable, const char *value) Make the Readline variable @var{variable} have @var{value}. This behaves as if the readline command @samp{set @var{variable} @var{value}} had been executed in an @code{inputrc} file (@pxref{Readline Init File Syntax}). @end deftypefun @deftypefun {char *} rl_variable_value (const char *variable) Return a string representing the value of the Readline variable @var{variable}. For boolean variables, this string is either @samp{on} or @samp{off}. @end deftypefun @deftypefun void rl_variable_dumper (int readable) Print the readline variable names and their current values to @code{rl_outstream}. If @var{readable} is non-zero, the list is formatted in such a way that it can be made part of an @code{inputrc} file and re-read. @end deftypefun @deftypefun int rl_set_paren_blink_timeout (int u) Set the time interval (in microseconds) that Readline waits when showing a balancing character when @code{blink-matching-paren} has been enabled. @end deftypefun @deftypefun {char *} rl_get_termcap (const char *cap) Retrieve the string value of the termcap capability @var{cap}. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses. @end deftypefun @deftypefun {void} rl_clear_history (void) Clear the history list by deleting all of the entries, in the same manner as the History library's @code{clear_history()} function. This differs from @code{clear_history} because it frees private data Readline saves in the history list. @end deftypefun @node Alternate Interface @subsection Alternate Interface An alternate interface is available to plain @code{readline()}. Some applications need to interleave keyboard I/O with file, device, or window system I/O, typically by using a main loop to @code{select()} on various file descriptors. To accommodate this need, readline can also be invoked as a `callback' function from an event loop. There are functions available to make this easy. @deftypefun void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) Set up the terminal for readline I/O and display the initial expanded value of @var{prompt}. Save the value of @var{lhandler} to use as a handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument. As with @code{readline()}, the handler function should @code{free} the line when it it finished with it. @end deftypefun @deftypefun void rl_callback_read_char (void) Whenever an application determines that keyboard input is available, it should call @code{rl_callback_read_char()}, which will read the next character from the current input source. If that character completes the line, @code{rl_callback_read_char} will invoke the @var{lhandler} function installed by @code{rl_callback_handler_install} to process the line. Before calling the @var{lhandler} function, the terminal settings are reset to the values they had before calling @code{rl_callback_handler_install}. If the @var{lhandler} function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. @code{EOF} is indicated by calling @var{lhandler} with a @code{NULL} line. @end deftypefun @deftypefun void rl_callback_sigcleanup (void) Clean up any internal state the callback interface uses to maintain state between calls to rl_callback_read_char (e.g., the state of any active incremental searches). This is intended to be used by applications that wish to perform their own signal handling; Readline's internal signal handler calls this when appropriate. @end deftypefun @deftypefun void rl_callback_handler_remove (void) Restore the terminal to its initial state and remove the line handler. You may call this function from within a callback as well as independently. If the @var{lhandler} installed by @code{rl_callback_handler_install} does not exit the program, either this function or the function referred to by the value of @code{rl_deprep_term_function} should be called before the program exits to reset the terminal settings. @end deftypefun @node A Readline Example @subsection A Readline Example Here is a function which changes lowercase characters to their uppercase equivalents, and uppercase characters to lowercase. If this function was bound to @samp{M-c}, then typing @samp{M-c} would change the case of the character under point. Typing @samp{M-1 0 M-c} would change the case of the following 10 characters, leaving the cursor on the last character changed. @example /* Invert the case of the COUNT following characters. */ int invert_case_line (count, key) int count, key; @{ register int start, end, i; start = rl_point; if (rl_point >= rl_end) return (0); if (count < 0) @{ direction = -1; count = -count; @} else direction = 1; /* Find the end of the range to modify. */ end = start + (count * direction); /* Force it to be within range. */ if (end > rl_end) end = rl_end; else if (end < 0) end = 0; if (start == end) return (0); if (start > end) @{ int temp = start; start = end; end = temp; @} /* Tell readline that we are modifying the line, so it will save the undo information. */ rl_modifying (start, end); for (i = start; i != end; i++) @{ if (_rl_uppercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); else if (_rl_lowercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]); @} /* Move point to on top of the last character changed. */ rl_point = (direction == 1) ? end - 1 : start; return (0); @} @end example @node Alternate Interface Example @subsection Alternate Interface Example Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program. @example /* Standard include files. stdio.h is required. */ #include #include #include #include /* Used for select(2) */ #include #include #include #include /* Standard readline include files. */ #include #include static void cb_linehandler (char *); static void sighandler (int); int running; int sigwinch_received; const char *prompt = "rltest$ "; /* Handle SIGWINCH and window size changes when readline is not active and reading a character. */ static void sighandler (int sig) @{ sigwinch_received = 1; @} /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) @{ /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) @{ if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; @} else @{ if (*line) add_history (line); printf ("input line: %s\n", line); free (line); @} @} int main (int c, char **v) @{ fd_set fds; int r; /* Set the default locale values according to environment variables. */ setlocale (LC_ALL, ""); /* Handle window size changes when readline is not active and reading characters. */ signal (SIGWINCH, sighandler); /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) @{ FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0 && errno != EINTR) @{ perror ("rltest: select"); rl_callback_handler_remove (); break; @} if (sigwinch_received) @{ rl_resize_terminal (); sigwinch_received = 0; @} if (r < 0) continue; if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); @} printf ("rltest: Event loop has exited\n"); return 0; @} @end example @node Readline Signal Handling @section Readline Signal Handling Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually. Readline contains an internal signal handler that is installed for a number of signals (@code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before @code{readline()} was called, reset the signal handling to what it was before @code{readline()} was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a @code{SIGINT} is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of @code{rl_free_line_state()} below). There is an additional Readline signal handler, for @code{SIGWINCH}, which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an @code{xterm}). The Readline @code{SIGWINCH} handler updates Readline's internal screen size information, and then calls any @code{SIGWINCH} signal handler the calling application has installed. Readline calls the application's @code{SIGWINCH} signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a @code{longjmp} back to a main processing loop), it @emph{must} call @code{rl_cleanup_after_signal()} (described below), to restore the terminal state. When an application is using the callback interface (@pxref{Alternate Interface}), Readline installs signal handlers only for the duration of the call to @code{rl_callback_read_char}. Applications using the callback interface should be prepared to clean up Readline's state if they wish to handle the signal before the line handler completes and restores the terminal state. If an application using the callback interface wishes to have Readline install its signal handlers at the time the application calls @code{rl_callback_handler_install} and remove them only when a complete line of input has been read, it should set the @code{rl_persistent_signal_handlers} variable to a non-zero value. This allows an application to defer all of the handling of the signals Readline catches to Readline. Applications should use this variable with care; it can result in Readline catching signals and not acting on them (or allowing the application to react to them) until the application calls @code{rl_callback_read_char}. This can result in an application becoming less responsive to keyboard signals like SIGINT. If an application does not want or need to perform any signal handling, or does not need to do any processing between calls to @code{rl_callback_read_char}, setting this variable may be desirable. Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling @code{readline()}, not in a signal handler, so Readline's internal signal state is not corrupted. @deftypevar int rl_catch_signals If this variable is non-zero, Readline will install signal handlers for @code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, and @code{SIGTTOU}. The default value of @code{rl_catch_signals} is 1. @end deftypevar @deftypevar int rl_catch_sigwinch If this variable is set to a non-zero value, Readline will install a signal handler for @code{SIGWINCH}. The default value of @code{rl_catch_sigwinch} is 1. @end deftypevar @deftypevar int rl_persistent_signal_handlers If an application using the callback interface wishes Readline's signal handlers to be installed and active during the set of calls to @code{rl_callback_read_char} that constitutes an entire single line, it should set this variable to a non-zero value. The default value of @code{rl_persistent_signal_handlers} is 0. @end deftypevar @deftypevar int rl_change_environment If this variable is set to a non-zero value, and Readline is handling @code{SIGWINCH}, Readline will modify the @var{LINES} and @var{COLUMNS} environment variables upon receipt of a @code{SIGWINCH} The default value of @code{rl_change_environment} is 1. @end deftypevar If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches (@code{SIGHUP}, for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal. @deftypefun int rl_pending_signal (void) Return the signal number of the most recent signal Readline received but has not yet handled, or 0 if there is no pending signal. @end deftypefun @deftypefun void rl_cleanup_after_signal (void) This function will reset the state of the terminal to what it was before @code{readline()} was called, and remove the Readline signal handlers for all signals, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun @deftypefun void rl_free_line_state (void) This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before @code{rl_cleanup_after_signal()}. The Readline signal handler for @code{SIGINT} calls this to abort the current input line. @end deftypefun @deftypefun void rl_reset_after_signal (void) This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun If an application does not wish Readline to catch @code{SIGWINCH}, it may call @code{rl_resize_terminal()} or @code{rl_set_screen_size()} to force Readline to update its idea of the terminal size when a @code{SIGWINCH} is received. @deftypefun void rl_echo_signal_char (int sig) If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with @var{sig} set to @code{SIGINT}, @code{SIGQUIT}, or @code{SIGTSTP} will display the character generating that signal. @end deftypefun @deftypefun void rl_resize_terminal (void) Update Readline's internal screen size by reading values from the kernel. @end deftypefun @deftypefun void rl_set_screen_size (int rows, int cols) Set Readline's idea of the terminal size to @var{rows} rows and @var{cols} columns. If either @var{rows} or @var{columns} is less than or equal to 0, Readline's idea of that terminal dimension is unchanged. @end deftypefun If an application does not want to install a @code{SIGWINCH} handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried. @deftypefun void rl_get_screen_size (int *rows, int *cols) Return Readline's idea of the terminal's size in the variables pointed to by the arguments. @end deftypefun @deftypefun void rl_reset_screen_size (void) Cause Readline to reobtain the screen size and recalculate its dimensions. @end deftypefun The following functions install and remove Readline's signal handlers. @deftypefun int rl_set_signals (void) Install Readline's signal handler for @code{SIGINT}, @code{SIGQUIT}, @code{SIGTERM}, @code{SIGHUP}, @code{SIGALRM}, @code{SIGTSTP}, @code{SIGTTIN}, @code{SIGTTOU}, and @code{SIGWINCH}, depending on the values of @code{rl_catch_signals} and @code{rl_catch_sigwinch}. @end deftypefun @deftypefun int rl_clear_signals (void) Remove all of the Readline signal handlers installed by @code{rl_set_signals()}. @end deftypefun @node Custom Completers @section Custom Completers @cindex application-specific completion functions Typically, a program that reads commands from the user has a way of disambiguating commands and data. If your program is one of these, then it can provide completion for commands, data, or both. The following sections describe how your program and Readline cooperate to provide this service. @menu * How Completing Works:: The logic used to do completion. * Completion Functions:: Functions provided by Readline. * Completion Variables:: Variables which control completion. * A Short Completion Example:: An example of writing completer subroutines. @end menu @node How Completing Works @subsection How Completing Works In order to complete some text, the full list of possible completions must be available. That is, it is not possible to accurately expand a partial word without knowing all of the possible words which make sense in that context. The Readline library provides the user interface to completion, and two of the most common completion functions: filename and username. For completing other types of text, you must write your own completion function. This section describes exactly what such functions must do, and provides an example. There are three major functions used to perform completion: @enumerate @item The user-interface function @code{rl_complete()}. This function is called with the same arguments as other bindable Readline functions: @var{count} and @var{invoking_key}. It isolates the word to be completed and calls @code{rl_completion_matches()} to generate a list of possible completions. It then either lists the possible completions, inserts the possible completions, or actually performs the completion, depending on which behavior is desired. @item The internal function @code{rl_completion_matches()} uses an application-supplied @dfn{generator} function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in @code{rl_completion_entry_function}. @item The generator function is called repeatedly from @code{rl_completion_matches()}, returning a string each time. The arguments to the generator function are @var{text} and @var{state}. @var{text} is the partial word to be completed. @var{state} is zero the first time the function is called, allowing the generator to perform any necessary initialization, and a positive non-zero integer for each subsequent call. The generator function returns @code{(char *)NULL} to inform @code{rl_completion_matches()} that there are no more possibilities left. Usually the generator function computes the list of possible completions when @var{state} is zero, and returns them one at a time on subsequent calls. Each string the generator function returns as a match must be allocated with @code{malloc()}; Readline frees the strings when it has finished with them. Such a generator function is referred to as an @dfn{application-specific completion function}. @end enumerate @deftypefun int rl_complete (int ignore, int invoking_key) Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see @code{rl_completion_matches()}). The default is to do filename completion. @end deftypefun @deftypevar {rl_compentry_func_t *} rl_completion_entry_function This is a pointer to the generator function for @code{rl_completion_matches()}. If the value of @code{rl_completion_entry_function} is @code{NULL} then the default filename generator function, @code{rl_filename_completion_function()}, is used. An @dfn{application-specific completion function} is a function whose address is assigned to @code{rl_completion_entry_function} and whose return values are used to generate possible completions. @end deftypevar @node Completion Functions @subsection Completion Functions Here is the complete list of callable completion functions present in Readline. @deftypefun int rl_complete_internal (int what_to_do) Complete the word at or before point. @var{what_to_do} says what to do with the completion. A value of @samp{?} means list the possible completions. @samp{TAB} means do standard completion. @samp{*} means insert all of the possible completions. @samp{!} means to display all of the possible completions, if there is more than one, as well as performing partial completion. @samp{@@} is similar to @samp{!}, but possible completions are not listed if the possible completions share a common prefix. @end deftypefun @deftypefun int rl_complete (int ignore, int invoking_key) Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see @code{rl_completion_matches()} and @code{rl_completion_entry_function}). The default is to do filename completion. This calls @code{rl_complete_internal()} with an argument depending on @var{invoking_key}. @end deftypefun @deftypefun int rl_possible_completions (int count, int invoking_key) List the possible completions. See description of @code{rl_complete ()}. This calls @code{rl_complete_internal()} with an argument of @samp{?}. @end deftypefun @deftypefun int rl_insert_completions (int count, int invoking_key) Insert the list of possible completions into the line, deleting the partially-completed word. See description of @code{rl_complete()}. This calls @code{rl_complete_internal()} with an argument of @samp{*}. @end deftypefun @deftypefun int rl_completion_mode (rl_command_func_t *cfunc) Returns the appropriate value to pass to @code{rl_complete_internal()} depending on whether @var{cfunc} was called twice in succession and the values of the @code{show-all-if-ambiguous} and @code{show-all-if-unmodified} variables. Application-specific completion functions may use this function to present the same interface as @code{rl_complete()}. @end deftypefun @deftypefun {char **} rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) Returns an array of strings which is a list of completions for @var{text}. If there are no completions, returns @code{NULL}. The first entry in the returned array is the substitution for @var{text}. The remaining entries are the possible completions. The array is terminated with a @code{NULL} pointer. @var{entry_func} is a function of two args, and returns a @code{char *}. The first argument is @var{text}. The second is a state argument; it is zero on the first call, and non-zero on subsequent calls. @var{entry_func} returns a @code{NULL} pointer to the caller when there are no more matches. @end deftypefun @deftypefun {char *} rl_filename_completion_function (const char *text, int state) A generator function for filename completion in the general case. @var{text} is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions). @end deftypefun @deftypefun {char *} rl_username_completion_function (const char *text, int state) A completion generator for usernames. @var{text} contains a partial username preceded by a random character (usually @samp{~}). As with all completion generators, @var{state} is zero on the first call and non-zero for subsequent calls. @end deftypefun @node Completion Variables @subsection Completion Variables @deftypevar {rl_compentry_func_t *} rl_completion_entry_function A pointer to the generator function for @code{rl_completion_matches()}. @code{NULL} means to use @code{rl_filename_completion_function()}, the default filename completer. @end deftypevar @deftypevar {rl_completion_func_t *} rl_attempted_completion_function A pointer to an alternative function to create matches. The function is called with @var{text}, @var{start}, and @var{end}. @var{start} and @var{end} are indices in @code{rl_line_buffer} defining the boundaries of @var{text}, which is a character string. If this function exists and returns @code{NULL}, or if this variable is set to @code{NULL}, then @code{rl_complete()} will call the value of @code{rl_completion_entry_function} to generate matches, otherwise the array of strings returned will be used. If this function sets the @code{rl_attempted_completion_over} variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches. @end deftypevar @deftypevar {rl_quote_func_t *} rl_filename_quoting_function A pointer to a function that will quote a filename in an application-specific fashion. This is called if filename completion is being attempted and one of the characters in @code{rl_filename_quote_characters} appears in a completed filename. The function is called with @var{text}, @var{match_type}, and @var{quote_pointer}. The @var{text} is the filename to be quoted. The @var{match_type} is either @code{SINGLE_MATCH}, if there is only one completion match, or @code{MULT_MATCH}. Some functions use this to decide whether or not to insert a closing quote character. The @var{quote_pointer} is a pointer to any opening quote character the user typed. Some functions choose to reset this character. @end deftypevar @deftypevar {rl_dequote_func_t *} rl_filename_dequoting_function A pointer to a function that will remove application-specific quoting characters from a filename before completion is attempted, so those characters do not interfere with matching the text against names in the filesystem. It is called with @var{text}, the text of the word to be dequoted, and @var{quote_char}, which is the quoting character that delimits the filename (usually @samp{'} or @samp{"}). If @var{quote_char} is zero, the filename was not in an embedded string. @end deftypevar @deftypevar {rl_linebuf_func_t *} rl_char_is_quoted_p A pointer to a function to call that determines whether or not a specific character in the line buffer is quoted, according to whatever quoting mechanism the program calling Readline uses. The function is called with two arguments: @var{text}, the text of the line, and @var{index}, the index of the character in the line. It is used to decide whether a character found in @code{rl_completer_word_break_characters} should be used to break words for the completer. @end deftypevar @deftypevar {rl_compignore_func_t *} rl_ignore_some_completions_function This function, if defined, is called by the completer when real filename completion is done, after all the matching names have been generated. It is passed a @code{NULL} terminated array of matches. The first element (@code{matches[0]}) is the maximal substring common to all matches. This function can re-arrange the list of matches as required, but each element deleted from the array must be freed. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_directory_completion_hook This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to @code{opendir()}. The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_directory_rewrite_hook; If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike @code{rl_directory_completion_hook}, it only modifies the directory name used in @code{opendir}, not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to @code{opendir()}. The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_icppfunc_t *} rl_filename_stat_hook If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to @code{stat()} to determine the file's type and characteristics. This function does not need to remove quote characters from the filename. The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. @end deftypevar @deftypevar {rl_dequote_func_t *} rl_filename_rewrite_hook If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: @var{fname}, the filename to be converted, and @var{fnlen}, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string. @end deftypevar @deftypevar {rl_compdisp_func_t *} rl_completion_display_matches_hook If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: (@code{char **}@var{matches}, @code{int} @var{num_matches}, @code{int} @var{max_length}) where @var{matches} is the array of matching strings, @var{num_matches} is the number of strings in that array, and @var{max_length} is the length of the longest string in that array. Readline provides a convenience function, @code{rl_display_match_list}, that takes care of doing the display to Readline's output stream. You may call that function from this hook. @end deftypevar @deftypevar {const char *} rl_basic_word_break_characters The basic list of characters that signal a break between words for the completer routine. The default value of this variable is the characters which break words for completion in Bash: @code{" \t\n\"\\'`@@$><=;|&@{("}. @end deftypevar @deftypevar {const char *} rl_basic_quote_characters A list of quote characters which can cause a word break. @end deftypevar @deftypevar {const char *} rl_completer_word_break_characters The list of characters that signal a break between words for @code{rl_complete_internal()}. The default list is the value of @code{rl_basic_word_break_characters}. @end deftypevar @deftypevar {rl_cpvfunc_t *} rl_completion_word_break_hook If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like @code{rl_completer_word_break_characters} to be used to perform the current completion. The function may choose to set @code{rl_completer_word_break_characters} itself. If the function returns @code{NULL}, @code{rl_completer_word_break_characters} is used. @end deftypevar @deftypevar {const char *} rl_completer_quote_characters A list of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring @code{rl_completer_word_break_characters} are treated as any other character, unless they also appear within this list. @end deftypevar @deftypevar {const char *} rl_filename_quote_characters A list of characters that cause a filename to be quoted by the completer when they appear in a completed filename. The default is the null string. @end deftypevar @deftypevar {const char *} rl_special_prefixes The list of characters that are word break characters, but should be left in @var{text} when it is passed to the completion function. Programs can use this to help determine what kind of completing to do. For instance, Bash sets this variable to "$@@" so that it can complete shell variables and hostnames. @end deftypevar @deftypevar int rl_completion_query_items Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user. @end deftypevar @deftypevar {int} rl_completion_append_character When a single completion alternative matches at the end of the command line, this character is appended to the inserted completion text. The default is a space character (@samp{ }). Setting this to the null character (@samp{\0}) prevents anything being appended automatically. This can be changed in application-specific completion functions to provide the ``most sensible word separator character'' according to an application-specific command line syntax specification. @end deftypevar @deftypevar int rl_completion_suppress_append If non-zero, @var{rl_completion_append_character} is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. @end deftypevar @deftypevar int rl_completion_quote_character When Readline is completing quoted text, as delimited by one of the characters in @var{rl_completer_quote_characters}, it sets this variable to the quoting character found. This is set before any application-specific completion function is called. @end deftypevar @deftypevar int rl_completion_suppress_quote If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. @end deftypevar @deftypevar int rl_completion_found_quote When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called. @end deftypevar @deftypevar int rl_completion_mark_symlink_dirs If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable @var{mark-directories} variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the @var{mark-symlinked-directories} Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored. @end deftypevar @deftypevar int rl_ignore_completion_duplicates If non-zero, then duplicates in the matches are removed. The default is 1. @end deftypevar @deftypevar int rl_filename_completion_desired Non-zero means that the results of the matches are to be treated as filenames. This is @emph{always} zero when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in @code{rl_filename_quote_characters} and @code{rl_filename_quoting_desired} is set to a non-zero value. @end deftypevar @deftypevar int rl_filename_quoting_desired Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the completed filename contains any characters in @code{rl_filename_quote_chars}. This is @emph{always} non-zero when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by @code{rl_filename_quoting_function}. @end deftypevar @deftypevar int rl_attempted_completion_over If an application-specific completion function assigned to @code{rl_attempted_completion_function} sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function. @end deftypevar @deftypevar int rl_sort_completion_matches If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of @code{rl_ignore_completion_duplicates}, will attempt to remove duplicate matches. @end deftypevar @deftypevar int rl_completion_type Set to a character describing the type of completion Readline is currently attempting; see the description of @code{rl_complete_internal()} (@pxref{Completion Functions}) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as @code{rl_complete()}. @end deftypevar @deftypevar int rl_completion_invoking_key Set to the final character in the key sequence that invoked one of the completion functions that call @code{rl_complete_internal()}. This is set to the appropriate value before any application-specific completion function is called. @end deftypevar @deftypevar int rl_inhibit_completion If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to @code{self-insert}. @end deftypevar @node A Short Completion Example @subsection A Short Completion Example Here is a small application demonstrating the use of the GNU Readline library. It is called @code{fileman}, and the source code resides in @file{examples/fileman.c}. This sample application provides completion of command names, line editing features, and access to the history list. @page @smallexample /* fileman.c -- A tiny application which demonstrates how to use the GNU Readline library. This application interactively allows users to manipulate files and their modes. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #include #include extern char *xmalloc PARAMS((size_t)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct @{ char *name; /* User printable name of the function. */ rl_icpfunc_t *func; /* Function to call to do the job. */ char *doc; /* Documentation for this function. */ @} COMMAND; COMMAND commands[] = @{ @{ "cd", com_cd, "Change to directory DIR" @}, @{ "delete", com_delete, "Delete FILE" @}, @{ "help", com_help, "Display this text" @}, @{ "?", com_help, "Synonym for `help'" @}, @{ "list", com_list, "List files in DIR" @}, @{ "ls", com_list, "Synonym for `list'" @}, @{ "pwd", com_pwd, "Print the current working directory" @}, @{ "quit", com_quit, "Quit using Fileman" @}, @{ "rename", com_rename, "Rename FILE to NEWNAME" @}, @{ "stat", com_stat, "Print out statistics on FILE" @}, @{ "view", com_view, "View the contents of FILE" @}, @{ (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL @} @}; /* Forward declarations. */ char *stripwhite (); COMMAND *find_command (); /* The name of this program, as taken from argv[0]. */ char *progname; /* When non-zero, this global means the user is done using this program. */ int done; char * dupstr (s) char *s; @{ char *r; r = xmalloc (strlen (s) + 1); strcpy (r, s); return (r); @} main (argc, argv) int argc; char **argv; @{ char *line, *s; progname = argv[0]; initialize_readline (); /* Bind our completer. */ /* Loop reading and executing lines until the user quits. */ for ( ; done == 0; ) @{ line = readline ("FileMan: "); if (!line) break; /* Remove leading and trailing whitespace from the line. Then, if there is anything left, add it to the history list and execute it. */ s = stripwhite (line); if (*s) @{ add_history (s); execute_line (s); @} free (line); @} exit (0); @} /* Execute a command line. */ int execute_line (line) char *line; @{ register int i; COMMAND *command; char *word; /* Isolate the command word. */ i = 0; while (line[i] && whitespace (line[i])) i++; word = line + i; while (line[i] && !whitespace (line[i])) i++; if (line[i]) line[i++] = '\0'; command = find_command (word); if (!command) @{ fprintf (stderr, "%s: No such command for FileMan.\n", word); return (-1); @} /* Get argument to command, if any. */ while (whitespace (line[i])) i++; word = line + i; /* Call the function. */ return ((*(command->func)) (word)); @} /* Look up NAME as the name of a command, and return a pointer to that command. Return a NULL pointer if NAME isn't a command name. */ COMMAND * find_command (name) char *name; @{ register int i; for (i = 0; commands[i].name; i++) if (strcmp (name, commands[i].name) == 0) return (&commands[i]); return ((COMMAND *)NULL); @} /* Strip whitespace from the start and end of STRING. Return a pointer into STRING. */ char * stripwhite (string) char *string; @{ register char *s, *t; for (s = string; whitespace (*s); s++) ; if (*s == 0) return (s); t = s + strlen (s) - 1; while (t > s && whitespace (*t)) t--; *++t = '\0'; return s; @} /* **************************************************************** */ /* */ /* Interface to Readline Completion */ /* */ /* **************************************************************** */ char *command_generator PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ initialize_readline () @{ /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "FileMan"; /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = fileman_completion; @} /* Attempt to complete on the contents of TEXT. START and END bound the region of rl_line_buffer that contains the word to complete. TEXT is the word to complete. We can use the entire contents of rl_line_buffer in case we want to do some simple parsing. Return the array of matches, or NULL if there aren't any. */ char ** fileman_completion (text, start, end) const char *text; int start, end; @{ char **matches; matches = (char **)NULL; /* If this word is at the start of the line, then it is a command to complete. Otherwise it is the name of a file in the current directory. */ if (start == 0) matches = rl_completion_matches (text, command_generator); return (matches); @} /* Generator function for command completion. STATE lets us know whether to start from scratch; without any state (i.e. STATE == 0), then we start at the top of the list. */ char * command_generator (text, state) const char *text; int state; @{ static int list_index, len; char *name; /* If this is a new word to complete, initialize now. This includes saving the length of TEXT for efficiency, and initializing the index variable to 0. */ if (!state) @{ list_index = 0; len = strlen (text); @} /* Return the next name which partially matches from the command list. */ while (name = commands[list_index].name) @{ list_index++; if (strncmp (name, text, len) == 0) return (dupstr(name)); @} /* If no names matched, then return NULL. */ return ((char *)NULL); @} /* **************************************************************** */ /* */ /* FileMan Commands */ /* */ /* **************************************************************** */ /* String to pass to system (). This is for the LIST, VIEW and RENAME commands. */ static char syscom[1024]; /* List the file(s) named in arg. */ com_list (arg) char *arg; @{ if (!arg) arg = ""; sprintf (syscom, "ls -FClg %s", arg); return (system (syscom)); @} com_view (arg) char *arg; @{ if (!valid_argument ("view", arg)) return 1; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif return (system (syscom)); @} com_rename (arg) char *arg; @{ too_dangerous ("rename"); return (1); @} com_stat (arg) char *arg; @{ struct stat finfo; if (!valid_argument ("stat", arg)) return (1); if (stat (arg, &finfo) == -1) @{ perror (arg); return (1); @} printf ("Statistics for `%s':\n", arg); printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, finfo.st_nlink, (finfo.st_nlink == 1) ? "" : "s", finfo.st_size, (finfo.st_size == 1) ? "" : "s"); printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); printf (" Last access at: %s", ctime (&finfo.st_atime)); printf (" Last modified at: %s", ctime (&finfo.st_mtime)); return (0); @} com_delete (arg) char *arg; @{ too_dangerous ("delete"); return (1); @} /* Print out help for ARG, or for all of the commands if ARG is not present. */ com_help (arg) char *arg; @{ register int i; int printed = 0; for (i = 0; commands[i].name; i++) @{ if (!*arg || (strcmp (arg, commands[i].name) == 0)) @{ printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); printed++; @} @} if (!printed) @{ printf ("No commands match `%s'. Possibilties are:\n", arg); for (i = 0; commands[i].name; i++) @{ /* Print in six columns. */ if (printed == 6) @{ printed = 0; printf ("\n"); @} printf ("%s\t", commands[i].name); printed++; @} if (printed) printf ("\n"); @} return (0); @} /* Change to the directory ARG. */ com_cd (arg) char *arg; @{ if (chdir (arg) == -1) @{ perror (arg); return 1; @} com_pwd (""); return (0); @} /* Print out the current working directory. */ com_pwd (ignore) char *ignore; @{ char dir[1024], *s; s = getcwd (dir, sizeof(dir) - 1); if (s == 0) @{ printf ("Error getting pwd: %s\n", dir); return 1; @} printf ("Current directory is %s\n", dir); return 0; @} /* The user wishes to quit using this program. Just set DONE non-zero. */ com_quit (arg) char *arg; @{ done = 1; return (0); @} /* Function which tells you that you can't do this. */ too_dangerous (caller) char *caller; @{ fprintf (stderr, "%s: Too dangerous for me to distribute. Write it yourself.\n", caller); @} /* Return non-zero if ARG is a valid argument for CALLER, else print an error message and return zero. */ int valid_argument (caller, arg) char *caller, *arg; @{ if (!arg || !*arg) @{ fprintf (stderr, "%s: Argument required.\n", caller); return (0); @} return (1); @} @end smallexample readline-7.0/doc/rluser.texi000664 000436 000120 00000247611 12664666303 016213 0ustar00chetadmin000000 000000 @comment %**start of header (This is for running Texinfo on a region.) @setfilename rluser.info @comment %**end of header (This is for running Texinfo on a region.) @ignore This file documents the end user interface to the GNU command line editing features. It is to be an appendix to manuals for programs which use these features. There is a document entitled "readline.texinfo" which contains both end-user and programmer documentation for the GNU Readline Library. Copyright (C) 1988--2016 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the GNU Copyright statement is available to the distributee, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions. @end ignore @comment If you are including this manual as an appendix, then set the @comment variable readline-appendix. @ifclear BashFeatures @defcodeindex bt @end ifclear @node Command Line Editing @chapter Command Line Editing This chapter describes the basic features of the @sc{gnu} command line editing interface. @ifset BashFeatures Command line editing is provided by the Readline library, which is used by several different programs, including Bash. Command line editing is enabled by default when using an interactive shell, unless the @option{--noediting} option is supplied at shell invocation. Line editing is also used when using the @option{-e} option to the @code{read} builtin command (@pxref{Bash Builtins}). By default, the line editing commands are similar to those of Emacs. A vi-style line editing interface is also available. Line editing can be enabled at any time using the @option{-o emacs} or @option{-o vi} options to the @code{set} builtin command (@pxref{The Set Builtin}), or disabled using the @option{+o emacs} or @option{+o vi} options to @code{set}. @end ifset @menu * Introduction and Notation:: Notation used in this text. * Readline Interaction:: The minimum set of commands for editing a line. * Readline Init File:: Customizing Readline from a user's view. * Bindable Readline Commands:: A description of most of the Readline commands available for binding * Readline vi Mode:: A short description of how to make Readline behave like the vi editor. @ifset BashFeatures * Programmable Completion:: How to specify the possible completions for a specific command. * Programmable Completion Builtins:: Builtin commands to specify how to complete arguments for a particular command. * A Programmable Completion Example:: An example shell function for generating possible completions. @end ifset @end menu @node Introduction and Notation @section Introduction to Line Editing The following paragraphs describe the notation used to represent keystrokes. The text @kbd{C-k} is read as `Control-K' and describes the character produced when the @key{k} key is pressed while the Control key is depressed. The text @kbd{M-k} is read as `Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the @key{k} key is pressed. The Meta key is labeled @key{ALT} on many keyboards. On keyboards with two keys labeled @key{ALT} (usually to either side of the space bar), the @key{ALT} on the left side is generally set to work as a Meta key. The @key{ALT} key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or @key{ALT} key, or another key working as a Meta key, the identical keystroke can be generated by typing @key{ESC} @emph{first}, and then typing @key{k}. Either process is known as @dfn{metafying} the @key{k} key. The text @kbd{M-C-k} is read as `Meta-Control-k' and describes the character produced by @dfn{metafying} @kbd{C-k}. In addition, several keys have their own names. Specifically, @key{DEL}, @key{ESC}, @key{LFD}, @key{SPC}, @key{RET}, and @key{TAB} all stand for themselves when seen in this text, or in an init file (@pxref{Readline Init File}). If your keyboard lacks a @key{LFD} key, typing @key{C-j} will produce the desired character. The @key{RET} key may be labeled @key{Return} or @key{Enter} on some keyboards. @node Readline Interaction @section Readline Interaction @cindex interaction, readline Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The Readline library gives you a set of commands for manipulating the text as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with the line, you simply press @key{RET}. You do not have to be at the end of the line to press @key{RET}; the entire line is accepted regardless of the location of the cursor within the line. @menu * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines. @end menu @node Readline Bare Essentials @subsection Readline Bare Essentials @cindex notation, readline @cindex command editing @cindex editing command lines In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type @kbd{C-b} to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with @kbd{C-f}. When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. @table @asis @item @kbd{C-b} Move back one character. @item @kbd{C-f} Move forward one character. @item @key{DEL} or @key{Backspace} Delete the character to the left of the cursor. @item @kbd{C-d} Delete the character underneath the cursor. @item @w{Printing characters} Insert the character into the line at the cursor. @item @kbd{C-_} or @kbd{C-x C-u} Undo the last editing command. You can undo all the way back to an empty line. @end table @noindent (Depending on your configuration, the @key{Backspace} key be set to delete the character to the left of the cursor and the @key{DEL} key set to delete the character underneath the cursor, like @kbd{C-d}, rather than the character to the left of the cursor.) @node Readline Movement Commands @subsection Readline Movement Commands The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to @kbd{C-b}, @kbd{C-f}, @kbd{C-d}, and @key{DEL}. Here are some commands for moving more rapidly about the line. @table @kbd @item C-a Move to the start of the line. @item C-e Move to the end of the line. @item M-f Move forward a word, where a word is composed of letters and digits. @item M-b Move backward a word. @item C-l Clear the screen, reprinting the current line at the top. @end table Notice how @kbd{C-f} moves forward a character, while @kbd{M-f} moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words. @node Readline Killing Commands @subsection Readline Killing Commands @cindex killing text @cindex yanking text @dfn{Killing} text means to delete the text from the line, but to save it away for later use, usually by @dfn{yanking} (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.) If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a @dfn{kill-ring}. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. @cindex kill ring Here is the list of commands for killing text. @table @kbd @item C-k Kill the text from the current cursor position to the end of the line. @item M-d Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by @kbd{M-f}. @item M-@key{DEL} Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by @kbd{M-b}. @item C-w Kill from the cursor to the previous whitespace. This is different than @kbd{M-@key{DEL}} because the word boundaries differ. @end table Here is how to @dfn{yank} the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. @table @kbd @item C-y Yank the most recently killed text back into the buffer at the cursor. @item M-y Rotate the kill-ring, and yank the new top. You can only do this if the prior command is @kbd{C-y} or @kbd{M-y}. @end table @node Readline Arguments @subsection Readline Arguments You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the @i{sign} of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type @samp{M-- C-k}. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (@samp{-}), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the @kbd{C-d} command an argument of 10, you could type @samp{M-1 0 C-d}, which will delete the next ten characters on the input line. @node Searching @subsection Searching for Commands in the History Readline provides commands for searching through the command history @ifset BashFeatures (@pxref{Bash History Facilities}) @end ifset for lines containing a specified string. There are two search modes: @dfn{incremental} and @dfn{non-incremental}. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type @kbd{C-r}. Typing @kbd{C-s} searches forward through the history. The characters present in the value of the @code{isearch-terminators} variable are used to terminate an incremental search. If that variable has not been assigned a value, the @key{ESC} and @kbd{C-J} characters will terminate an incremental search. @kbd{C-g} will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type @kbd{C-r} or @kbd{C-s} as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a @key{RET} will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two @kbd{C-r}s are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. @node Readline Init File @section Readline Init File @cindex initialization file, readline Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an @dfn{inputrc} file, conventionally in his home directory. The name of this @ifset BashFeatures file is taken from the value of the shell variable @env{INPUTRC}. If @end ifset @ifclear BashFeatures file is taken from the value of the environment variable @env{INPUTRC}. If @end ifclear that variable is unset, the default is @file{~/.inputrc}. If that file does not exist or cannot be read, the ultimate default is @file{/etc/inputrc}. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the @code{C-x C-r} command re-reads this init file, thus incorporating any changes that you might have made to it. @menu * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file. @end menu @node Readline Init File Syntax @subsection Readline Init File Syntax There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a @samp{#} are comments. Lines beginning with a @samp{$} indicate conditional constructs (@pxref{Conditional Init Constructs}). Other lines denote variable settings and key bindings. @table @asis @item Variable Settings You can modify the run-time behavior of Readline by altering the values of variables in Readline using the @code{set} command within the init file. The syntax is simple: @example set @var{variable} @var{value} @end example @noindent Here, for example, is how to change from the default Emacs-like key binding to use @code{vi} line editing commands: @example set editing-mode vi @end example Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, @var{on} (case-insensitive), or 1. Any other value results in the variable being set to off. @ifset BashFeatures The @w{@code{bind -V}} command lists the current Readline variable names and values. @xref{Bash Builtins}. @end ifset A great deal of run-time behavior is changeable with the following variables. @cindex variables, readline @table @code @item bell-style @vindex bell-style Controls what happens when Readline wants to ring the terminal bell. If set to @samp{none}, Readline never rings the bell. If set to @samp{visible}, Readline uses a visible bell if one is available. If set to @samp{audible} (the default), Readline attempts to ring the terminal's bell. @item bind-tty-special-chars @vindex bind-tty-special-chars If set to @samp{on} (the default), Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. @item blink-matching-paren @vindex blink-matching-paren If set to @samp{on}, Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is @samp{off}. @item colored-completion-prefix @vindex colored-completion-prefix If set to @samp{on}, when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the @env{LS_COLORS} environment variable. The default is @samp{off}. @item colored-stats @vindex colored-stats If set to @samp{on}, Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the @env{LS_COLORS} environment variable. The default is @samp{off}. @item comment-begin @vindex comment-begin The string to insert at the beginning of the line when the @code{insert-comment} command is executed. The default value is @code{"#"}. @item completion-display-width @vindex completion-display-width The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. @item completion-ignore-case @vindex completion-ignore-case If set to @samp{on}, Readline performs filename matching and completion in a case-insensitive fashion. The default value is @samp{off}. @item completion-map-case @vindex completion-map-case If set to @samp{on}, and @var{completion-ignore-case} is enabled, Readline treats hyphens (@samp{-}) and underscores (@samp{_}) as equivalent when performing case-insensitive filename matching and completion. @item completion-prefix-display-length @vindex completion-prefix-display-length The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. @item completion-query-items @vindex completion-query-items The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than this value, Readline will ask the user whether or not he wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is @code{100}. @item convert-meta @vindex convert-meta If set to @samp{on}, Readline will convert characters with the eighth bit set to an @sc{ascii} key sequence by stripping the eighth bit and prefixing an @key{ESC} character, converting them to a meta-prefixed key sequence. The default value is @samp{on}, but will be set to @samp{off} if the locale is one that contains eight-bit characters. @item disable-completion @vindex disable-completion If set to @samp{On}, Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to @code{self-insert}. The default is @samp{off}. @item echo-control-characters @vindex echo-control-characters When set to @samp{on}, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is @samp{on}. @item editing-mode @vindex editing-mode The @code{editing-mode} variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either @samp{emacs} or @samp{vi}. @item emacs-mode-string @vindex emacs-mode-string This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is @samp{@@}. @item enable-bracketed-paste @vindex enable-bracketed-paste When set to @samp{On}, Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is @samp{off}. @item enable-keypad @vindex enable-keypad When set to @samp{on}, Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is @samp{off}. @item enable-meta-key When set to @samp{on}, Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is @samp{on}. @item expand-tilde @vindex expand-tilde If set to @samp{on}, tilde expansion is performed when Readline attempts word completion. The default is @samp{off}. @item history-preserve-point @vindex history-preserve-point If set to @samp{on}, the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with @code{previous-history} or @code{next-history}. The default is @samp{off}. @item history-size @vindex history-size Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set @var{history-size} to a non-numeric value, the maximum number of history entries will be set to 500. @item horizontal-scroll-mode @vindex horizontal-scroll-mode This variable can be set to either @samp{on} or @samp{off}. Setting it to @samp{on} means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. By default, this variable is set to @samp{off}. @item input-meta @vindex input-meta @vindex meta-flag If set to @samp{on}, Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is @samp{off}, but Readline will set it to @samp{on} if the locale contains eight-bit characters. The name @code{meta-flag} is a synonym for this variable. @item isearch-terminators @vindex isearch-terminators The string of characters that should terminate an incremental search without subsequently executing the character as a command (@pxref{Searching}). If this variable has not been given a value, the characters @key{ESC} and @kbd{C-J} will terminate an incremental search. @item keymap @vindex keymap Sets Readline's idea of the current keymap for key binding commands. Acceptable @code{keymap} names are @code{emacs}, @code{emacs-standard}, @code{emacs-meta}, @code{emacs-ctlx}, @code{vi}, @code{vi-move}, @code{vi-command}, and @code{vi-insert}. @code{vi} is equivalent to @code{vi-command} (@code{vi-move} is also a synonym); @code{emacs} is equivalent to @code{emacs-standard}. The default value is @code{emacs}. The value of the @code{editing-mode} variable also affects the default keymap. @item keyseq-timeout Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (@code{rl_instream} by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is @code{500}. @item mark-directories If set to @samp{on}, completed directory names have a slash appended. The default is @samp{on}. @item mark-modified-lines @vindex mark-modified-lines This variable, when set to @samp{on}, causes Readline to display an asterisk (@samp{*}) at the start of history lines which have been modified. This variable is @samp{off} by default. @item mark-symlinked-directories @vindex mark-symlinked-directories If set to @samp{on}, completed names which are symbolic links to directories have a slash appended (subject to the value of @code{mark-directories}). The default is @samp{off}. @item match-hidden-files @vindex match-hidden-files This variable, when set to @samp{on}, causes Readline to match files whose names begin with a @samp{.} (hidden files) when performing filename completion. If set to @samp{off}, the leading @samp{.} must be supplied by the user in the filename to be completed. This variable is @samp{on} by default. @item menu-complete-display-prefix @vindex menu-complete-display-prefix If set to @samp{on}, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is @samp{off}. @item output-meta @vindex output-meta If set to @samp{on}, Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is @samp{off}, but Readline will set it to @samp{on} if the locale contains eight-bit characters. @item page-completions @vindex page-completions If set to @samp{on}, Readline uses an internal @code{more}-like pager to display a screenful of possible completions at a time. This variable is @samp{on} by default. @item print-completions-horizontally If set to @samp{on}, Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is @samp{off}. @item revert-all-at-newline @vindex revert-all-at-newline If set to @samp{on}, Readline will undo all changes to history lines before returning when @code{accept-line} is executed. By default, history lines may be modified and retain individual undo lists across calls to @code{readline}. The default is @samp{off}. @item show-all-if-ambiguous @vindex show-all-if-ambiguous This alters the default behavior of the completion functions. If set to @samp{on}, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is @samp{off}. @item show-all-if-unmodified @vindex show-all-if-unmodified This alters the default behavior of the completion functions in a fashion similar to @var{show-all-if-ambiguous}. If set to @samp{on}, words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is @samp{off}. @item show-mode-in-prompt @vindex show-mode-in-prompt If set to @samp{on}, add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. The default value is @samp{off}. @item skip-completed-text @vindex skip-completed-text If set to @samp{on}, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the @samp{e} in @samp{Makefile} will result in @samp{Makefile} rather than @samp{Makefilefile}, assuming there is a single possible completion. The default value is @samp{off}. @item vi-cmd-mode-string @vindex vi-cmd-mode-string This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is @samp{(cmd)}. @item vi-ins-mode-string @vindex vi-ins-mode-string This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the @samp{\1} and @samp{\2} escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is @samp{(ins)}. @item visible-stats @vindex visible-stats If set to @samp{on}, a character denoting a file's type is appended to the filename when listing possible completions. The default is @samp{off}. @end table @item Key Bindings The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command name, the default keybinding, if any, and a short description of what the command does. Once you know the name of the command, simply place on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a @var{macro}). @ifset BashFeatures The @w{@code{bind -p}} command displays Readline function names and bindings in a format that can put directly into an initialization file. @xref{Bash Builtins}. @end ifset @table @asis @item @w{@var{keyname}: @var{function-name} or @var{macro}} @var{keyname} is the name of a key spelled out in English. For example: @example Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" @end example In the above example, @kbd{C-u} is bound to the function @code{universal-argument}, @kbd{M-DEL} is bound to the function @code{backward-kill-word}, and @kbd{C-o} is bound to run the macro expressed on the right hand side (that is, to insert the text @samp{> output} into the line). A number of symbolic character names are recognized while processing this key binding syntax: @var{DEL}, @var{ESC}, @var{ESCAPE}, @var{LFD}, @var{NEWLINE}, @var{RET}, @var{RETURN}, @var{RUBOUT}, @var{SPACE}, @var{SPC}, and @var{TAB}. @item @w{"@var{keyseq}": @var{function-name} or @var{macro}} @var{keyseq} differs from @var{keyname} above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some @sc{gnu} Emacs style key escapes can be used, as in the following example, but the special character names are not recognized. @example "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" @end example In the above example, @kbd{C-u} is again bound to the function @code{universal-argument} (just as it was in the first example), @samp{@kbd{C-x} @kbd{C-r}} is bound to the function @code{re-read-init-file}, and @samp{@key{ESC} @key{[} @key{1} @key{1} @key{~}} is bound to insert the text @samp{Function Key 1}. @end table The following @sc{gnu} Emacs style escape sequences are available when specifying key sequences: @table @code @item @kbd{\C-} control prefix @item @kbd{\M-} meta prefix @item @kbd{\e} an escape character @item @kbd{\\} backslash @item @kbd{\"} @key{"}, a double quotation mark @item @kbd{\'} @key{'}, a single quote or apostrophe @end table In addition to the @sc{gnu} Emacs style escape sequences, a second set of backslash escapes is available: @table @code @item \a alert (bell) @item \b backspace @item \d delete @item \f form feed @item \n newline @item \r carriage return @item \t horizontal tab @item \v vertical tab @item \@var{nnn} the eight-bit character whose value is the octal value @var{nnn} (one to three digits) @item \x@var{HH} the eight-bit character whose value is the hexadecimal value @var{HH} (one or two hex digits) @end table When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including @samp{"} and @samp{'}. For example, the following binding will make @samp{@kbd{C-x} \} insert a single @samp{\} into the line: @example "\C-x\\": "\\" @end example @end table @node Conditional Init Constructs @subsection Conditional Init Constructs Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. @table @code @item $if The @code{$if} construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test extends to the end of the line; no characters are required to isolate it. @table @code @item mode The @code{mode=} form of the @code{$if} directive is used to test whether Readline is in @code{emacs} or @code{vi} mode. This may be used in conjunction with the @samp{set keymap} command, for instance, to set bindings in the @code{emacs-standard} and @code{emacs-ctlx} keymaps only if Readline is starting out in @code{emacs} mode. @item term The @code{term=} form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the @samp{=} is tested against both the full name of the terminal and the portion of the terminal name before the first @samp{-}. This allows @code{sun} to match both @code{sun} and @code{sun-cmd}, for instance. @item application The @var{application} construct is used to include application-specific settings. Each program using the Readline library sets the @var{application name}, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash: @example $if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif @end example @end table @item $endif This command, as seen in the previous example, terminates an @code{$if} command. @item $else Commands in this branch of the @code{$if} directive are executed if the test fails. @item $include This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from @file{/etc/inputrc}: @example $include /etc/inputrc @end example @end table @node Sample Init File @subsection Sample Init File Here is an example of an @var{inputrc} file. This illustrates key binding, variable assignment, and conditional syntax. @example @page # This file controls the behaviour of line input editing for # programs that use the GNU Readline library. Existing # programs include FTP, Bash, and GDB. # # You can re-read the inputrc file with C-x C-r. # Lines beginning with '#' are comments. # # First, include any system-wide bindings and variable # assignments from /etc/Inputrc $include /etc/Inputrc # # Set various bindings for emacs mode. set editing-mode emacs $if mode=emacs Meta-Control-h: backward-kill-word Text after the function name is ignored # # Arrow keys in keypad mode # #"\M-OD": backward-char #"\M-OC": forward-char #"\M-OA": previous-history #"\M-OB": next-history # # Arrow keys in ANSI mode # "\M-[D": backward-char "\M-[C": forward-char "\M-[A": previous-history "\M-[B": next-history # # Arrow keys in 8 bit keypad mode # #"\M-\C-OD": backward-char #"\M-\C-OC": forward-char #"\M-\C-OA": previous-history #"\M-\C-OB": next-history # # Arrow keys in 8 bit ANSI mode # #"\M-\C-[D": backward-char #"\M-\C-[C": forward-char #"\M-\C-[A": previous-history #"\M-\C-[B": next-history C-q: quoted-insert $endif # An old-style binding. This happens to be the default. TAB: complete # Macros that are convenient for shell interaction $if Bash # edit the path "\C-xp": "PATH=$@{PATH@}\e\C-e\C-a\ef\C-f" # prepare to type a quoted word -- # insert open and close double quotes # and move to just after the open quote "\C-x\"": "\"\"\C-b" # insert a backslash (testing backslash escapes # in sequences and macros) "\C-x\\": "\\" # Quote the current or previous word "\C-xq": "\eb\"\ef\"" # Add a binding to refresh the line, which is unbound "\C-xr": redraw-current-line # Edit variable on current line. "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" $endif # use a visible bell if one is available set bell-style visible # don't strip characters to 7 bits when reading set input-meta on # allow iso-latin1 characters to be inserted rather # than converted to prefix-meta sequences set convert-meta off # display characters with the eighth bit set directly # rather than as meta-prefixed characters set output-meta on # if there are more than 150 possible completions for # a word, ask the user if he wants to see all of them set completion-query-items 150 # For FTP $if Ftp "\C-xg": "get \M-?" "\C-xt": "put \M-?" "\M-.": yank-last-arg $endif @end example @node Bindable Readline Commands @section Bindable Readline Commands @menu * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. @end menu This section describes Readline commands that may be bound to key sequences. @ifset BashFeatures You can list your key bindings by executing @w{@code{bind -P}} or, for a more terse format, suitable for an @var{inputrc} file, @w{@code{bind -p}}. (@xref{Bash Builtins}.) @end ifset Command names without an accompanying key sequence are unbound by default. In the following descriptions, @dfn{point} refers to the current cursor position, and @dfn{mark} refers to a cursor position saved by the @code{set-mark} command. The text between the point and mark is referred to as the @dfn{region}. @node Commands For Moving @subsection Commands For Moving @ftable @code @item beginning-of-line (C-a) Move to the start of the current line. @item end-of-line (C-e) Move to the end of the line. @item forward-char (C-f) Move forward a character. @item backward-char (C-b) Move back a character. @item forward-word (M-f) Move forward to the end of the next word. Words are composed of letters and digits. @item backward-word (M-b) Move back to the start of the current or previous word. Words are composed of letters and digits. @ifset BashFeatures @item shell-forward-word () Move forward to the end of the next word. Words are delimited by non-quoted shell metacharacters. @item shell-backward-word () Move back to the start of the current or previous word. Words are delimited by non-quoted shell metacharacters. @end ifset @item clear-screen (C-l) Clear the screen and redraw the current line, leaving the current line at the top of the screen. @item redraw-current-line () Refresh the current line. By default, this is unbound. @end ftable @node Commands For History @subsection Commands For Manipulating The History @ftable @code @item accept-line (Newline or Return) @ifset BashFeatures Accept the line regardless of where the cursor is. If this line is non-empty, add it to the history list according to the setting of the @env{HISTCONTROL} and @env{HISTIGNORE} variables. If this line is a modified history line, then restore the history line to its original state. @end ifset @ifclear BashFeatures Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with @code{add_history()}. If this line is a modified history line, the history line is restored to its original state. @end ifclear @item previous-history (C-p) Move `back' through the history list, fetching the previous command. @item next-history (C-n) Move `forward' through the history list, fetching the next command. @item beginning-of-history (M-<) Move to the first line in the history. @item end-of-history (M->) Move to the end of the input history, i.e., the line currently being entered. @item reverse-search-history (C-r) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. @item forward-search-history (C-s) Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search. @item non-incremental-reverse-search-history (M-p) Search backward starting at the current line and moving `up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. @item non-incremental-forward-search-history (M-n) Search forward starting at the current line and moving `down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. @item history-search-forward () Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. @item history-search-backward () Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. @item history-substr-search-forward () Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. @item history-substr-search-backward () Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. @item yank-nth-arg (M-C-y) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument @var{n}, insert the @var{n}th word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the @var{n}th word from the end of the previous command. Once the argument @var{n} is computed, the argument is extracted as if the @samp{!@var{n}} history expansion had been specified. @item yank-last-arg (M-. or M-_) Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like @code{yank-nth-arg}. Successive calls to @code{yank-last-arg} move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the @samp{!$} history expansion had been specified. @end ftable @node Commands For Text @subsection Commands For Changing Text @ftable @code @item @i{end-of-file} (usually C-d) The character indicating end-of-file as set, for example, by @code{stty}. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns @sc{eof}. @item delete-char (C-d) Delete the character at point. If this function is bound to the same character as the tty @sc{eof} character, as @kbd{C-d} commonly is, see above for the effects. @item backward-delete-char (Rubout) Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. @item forward-backward-delete-char () Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. @item quoted-insert (C-q or C-v) Add the next character typed to the line verbatim. This is how to insert key sequences like @kbd{C-q}, for example. @ifclear BashFeatures @item tab-insert (M-@key{TAB}) Insert a tab character. @end ifclear @item self-insert (a, b, A, 1, !, @dots{}) Insert yourself. @item bracketed-paste-begin () This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one was bound to @code{self-insert}) instead of executing any editing commands. @item transpose-chars (C-t) Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect. @item transpose-words (M-t) Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. @item upcase-word (M-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. @item downcase-word (M-l) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. @item capitalize-word (M-c) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. @item overwrite-mode () Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only @code{emacs} mode; @code{vi} mode does overwrite differently. Each call to @code{readline()} starts in insert mode. In overwrite mode, characters bound to @code{self-insert} replace the text at point rather than pushing the text to the right. Characters bound to @code{backward-delete-char} replace the character before point with a space. By default, this command is unbound. @end ftable @node Commands For Killing @subsection Killing And Yanking @ftable @code @item kill-line (C-k) Kill the text from point to the end of the line. @item backward-kill-line (C-x Rubout) Kill backward from the cursor to the beginning of the current line. @item unix-line-discard (C-u) Kill backward from the cursor to the beginning of the current line. @item kill-whole-line () Kill all characters on the current line, no matter where point is. By default, this is unbound. @item kill-word (M-d) Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as @code{forward-word}. @item backward-kill-word (M-@key{DEL}) Kill the word behind point. Word boundaries are the same as @code{backward-word}. @ifset BashFeatures @item shell-kill-word () Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as @code{shell-forward-word}. @item shell-backward-kill-word () Kill the word behind point. Word boundaries are the same as @code{shell-backward-word}. @end ifset @item unix-word-rubout (C-w) Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. @item unix-filename-rubout () Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. @item delete-horizontal-space () Delete all spaces and tabs around point. By default, this is unbound. @item kill-region () Kill the text in the current region. By default, this command is unbound. @item copy-region-as-kill () Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. @item copy-backward-word () Copy the word before point to the kill buffer. The word boundaries are the same as @code{backward-word}. By default, this command is unbound. @item copy-forward-word () Copy the word following point to the kill buffer. The word boundaries are the same as @code{forward-word}. By default, this command is unbound. @item yank (C-y) Yank the top of the kill ring into the buffer at point. @item yank-pop (M-y) Rotate the kill-ring, and yank the new top. You can only do this if the prior command is @code{yank} or @code{yank-pop}. @end ftable @node Numeric Arguments @subsection Specifying Numeric Arguments @ftable @code @item digit-argument (@kbd{M-0}, @kbd{M-1}, @dots{} @kbd{M--}) Add this digit to the argument already accumulating, or start a new argument. @kbd{M--} starts a negative argument. @item universal-argument () This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing @code{universal-argument} again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. By default, this is not bound to a key. @end ftable @node Commands For Completion @subsection Letting Readline Type For You @ftable @code @item complete (@key{TAB}) Attempt to perform completion on the text before point. The actual completion performed is application-specific. @ifset BashFeatures Bash attempts completion treating the text as a variable (if the text begins with @samp{$}), username (if the text begins with @samp{~}), hostname (if the text begins with @samp{@@}), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. @end ifset @ifclear BashFeatures The default is filename completion. @end ifclear @item possible-completions (M-?) List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of @code{completion-display-width}, the value of the environment variable @env{COLUMNS}, or the screen width, in that order. @item insert-completions (M-*) Insert all completions of the text before point that would have been generated by @code{possible-completions}. @item menu-complete () Similar to @code{complete}, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of @code{menu-complete} steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of @code{bell-style}) and the original text is restored. An argument of @var{n} moves @var{n} positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to @key{TAB}, but is unbound by default. @item menu-complete-backward () Identical to @code{menu-complete}, but moves backward through the list of possible completions, as if @code{menu-complete} had been given a negative argument. @item delete-char-or-list () Deletes the character under the cursor if not at the beginning or end of the line (like @code{delete-char}). If at the end of the line, behaves identically to @code{possible-completions}. This command is unbound by default. @ifset BashFeatures @item complete-filename (M-/) Attempt filename completion on the text before point. @item possible-filename-completions (C-x /) List the possible completions of the text before point, treating it as a filename. @item complete-username (M-~) Attempt completion on the text before point, treating it as a username. @item possible-username-completions (C-x ~) List the possible completions of the text before point, treating it as a username. @item complete-variable (M-$) Attempt completion on the text before point, treating it as a shell variable. @item possible-variable-completions (C-x $) List the possible completions of the text before point, treating it as a shell variable. @item complete-hostname (M-@@) Attempt completion on the text before point, treating it as a hostname. @item possible-hostname-completions (C-x @@) List the possible completions of the text before point, treating it as a hostname. @item complete-command (M-!) Attempt completion on the text before point, treating it as a command name. Command completion attempts to match the text against aliases, reserved words, shell functions, shell builtins, and finally executable filenames, in that order. @item possible-command-completions (C-x !) List the possible completions of the text before point, treating it as a command name. @item dynamic-complete-history (M-@key{TAB}) Attempt completion on the text before point, comparing the text against lines from the history list for possible completion matches. @item dabbrev-expand () Attempt menu completion on the text before point, comparing the text against lines from the history list for possible completion matches. @item complete-into-braces (M-@{) Perform filename completion and insert the list of possible completions enclosed within braces so the list is available to the shell (@pxref{Brace Expansion}). @end ifset @end ftable @node Keyboard Macros @subsection Keyboard Macros @ftable @code @item start-kbd-macro (C-x () Begin saving the characters typed into the current keyboard macro. @item end-kbd-macro (C-x )) Stop saving the characters typed into the current keyboard macro and save the definition. @item call-last-kbd-macro (C-x e) Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. @item print-last-kbd-macro () Print the last keboard macro defined in a format suitable for the @var{inputrc} file. @end ftable @node Miscellaneous Commands @subsection Some Miscellaneous Commands @ftable @code @item re-read-init-file (C-x C-r) Read in the contents of the @var{inputrc} file, and incorporate any bindings or variable assignments found there. @item abort (C-g) Abort the current editing command and ring the terminal's bell (subject to the setting of @code{bell-style}). @item do-uppercase-version (M-a, M-b, M-@var{x}, @dots{}) If the metafied character @var{x} is lowercase, run the command that is bound to the corresponding uppercase character. @item prefix-meta (@key{ESC}) Metafy the next character typed. This is for keyboards without a meta key. Typing @samp{@key{ESC} f} is equivalent to typing @kbd{M-f}. @item undo (C-_ or C-x C-u) Incremental undo, separately remembered for each line. @item revert-line (M-r) Undo all changes made to this line. This is like executing the @code{undo} command enough times to get back to the beginning. @ifset BashFeatures @item tilde-expand (M-&) @end ifset @ifclear BashFeatures @item tilde-expand (M-~) @end ifclear Perform tilde expansion on the current word. @item set-mark (C-@@) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. @item exchange-point-and-mark (C-x C-x) Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. @item character-search (C-]) A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. @item character-search-backward (M-C-]) A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. @item skip-csi-sequence () Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. @item insert-comment (M-#) Without a numeric argument, the value of the @code{comment-begin} variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of @code{comment-begin}, the value is inserted, otherwise the characters in @code{comment-begin} are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. @ifset BashFeatures The default value of @code{comment-begin} causes this command to make the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. @end ifset @item dump-functions () Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an @var{inputrc} file. This command is unbound by default. @item dump-variables () Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an @var{inputrc} file. This command is unbound by default. @item dump-macros () Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an @var{inputrc} file. This command is unbound by default. @ifset BashFeatures @item glob-complete-word (M-g) The word before point is treated as a pattern for pathname expansion, with an asterisk implicitly appended. This pattern is used to generate a list of matching file names for possible completions. @item glob-expand-word (C-x *) The word before point is treated as a pattern for pathname expansion, and the list of matching file names is inserted, replacing the word. If a numeric argument is supplied, a @samp{*} is appended before pathname expansion. @item glob-list-expansions (C-x g) The list of expansions that would have been generated by @code{glob-expand-word} is displayed, and the line is redrawn. If a numeric argument is supplied, a @samp{*} is appended before pathname expansion. @item display-shell-version (C-x C-v) Display version information about the current instance of Bash. @item shell-expand-line (M-C-e) Expand the line as the shell does. This performs alias and history expansion as well as all of the shell word expansions (@pxref{Shell Expansions}). @item history-expand-line (M-^) Perform history expansion on the current line. @item magic-space () Perform history expansion on the current line and insert a space (@pxref{History Interaction}). @item alias-expand-line () Perform alias expansion on the current line (@pxref{Aliases}). @item history-and-alias-expand-line () Perform history and alias expansion on the current line. @item insert-last-argument (M-. or M-_) A synonym for @code{yank-last-arg}. @item operate-and-get-next (C-o) Accept the current line for execution and fetch the next line relative to the current line from the history for editing. Any argument is ignored. @item edit-and-execute-command (C-xC-e) Invoke an editor on the current command line, and execute the result as shell commands. Bash attempts to invoke @code{$VISUAL}, @code{$EDITOR}, and @code{emacs} as the editor, in that order. @end ifset @ifclear BashFeatures @item emacs-editing-mode (C-e) When in @code{vi} command mode, this causes a switch to @code{emacs} editing mode. @item vi-editing-mode (M-C-j) When in @code{emacs} editing mode, this causes a switch to @code{vi} editing mode. @end ifclear @end ftable @node Readline vi Mode @section Readline vi Mode While the Readline library does not have a full set of @code{vi} editing functions, it does contain enough to allow simple editing of the line. The Readline @code{vi} mode behaves as specified in the @sc{posix} standard. @ifset BashFeatures In order to switch interactively between @code{emacs} and @code{vi} editing modes, use the @samp{set -o emacs} and @samp{set -o vi} commands (@pxref{The Set Builtin}). @end ifset @ifclear BashFeatures In order to switch interactively between @code{emacs} and @code{vi} editing modes, use the command @kbd{M-C-j} (bound to emacs-editing-mode when in @code{vi} mode and to vi-editing-mode in @code{emacs} mode). @end ifclear The Readline default is @code{emacs} mode. When you enter a line in @code{vi} mode, you are already placed in `insertion' mode, as if you had typed an @samp{i}. Pressing @key{ESC} switches you into `command' mode, where you can edit the text of the line with the standard @code{vi} movement keys, move to previous history lines with @samp{k} and subsequent lines with @samp{j}, and so forth. @ifset BashFeatures @node Programmable Completion @section Programmable Completion @cindex programmable completion When word completion is attempted for an argument to a command for which a completion specification (a @var{compspec}) has been defined using the @code{complete} builtin (@pxref{Programmable Completion Builtins}), the programmable completion facilities are invoked. First, the command name is identified. If a compspec has been defined for that command, the compspec is used to generate the list of possible completions for the word. If the command word is the empty string (completion attempted at the beginning of an empty line), any compspec defined with the @option{-E} option to @code{complete} is used. If the command word is a full pathname, a compspec for the full pathname is searched for first. If no compspec is found for the full pathname, an attempt is made to find a compspec for the portion following the final slash. If those searches do not result in a compspec, any compspec defined with the @option{-D} option to @code{complete} is used as the default. Once a compspec has been found, it is used to generate the list of matching words. If a compspec is not found, the default Bash completion described above (@pxref{Commands For Completion}) is performed. First, the actions specified by the compspec are used. Only matches which are prefixed by the word being completed are returned. When the @option{-f} or @option{-d} option is used for filename or directory name completion, the shell variable @env{FIGNORE} is used to filter the matches. @xref{Bash Variables}, for a description of @env{FIGNORE}. Any completions specified by a filename expansion pattern to the @option{-G} option are generated next. The words generated by the pattern need not match the word being completed. The @env{GLOBIGNORE} shell variable is not used to filter the matches, but the @env{FIGNORE} shell variable is used. Next, the string specified as the argument to the @option{-W} option is considered. The string is first split using the characters in the @env{IFS} special variable as delimiters. Shell quoting is honored. Each word is then expanded using brace expansion, tilde expansion, parameter and variable expansion, command substitution, and arithmetic expansion, as described above (@pxref{Shell Expansions}). The results are split using the rules described above (@pxref{Word Splitting}). The results of the expansion are prefix-matched against the word being completed, and the matching words become the possible completions. After these matches have been generated, any shell function or command specified with the @option{-F} and @option{-C} options is invoked. When the command or function is invoked, the @env{COMP_LINE}, @env{COMP_POINT}, @env{COMP_KEY}, and @env{COMP_TYPE} variables are assigned values as described above (@pxref{Bash Variables}). If a shell function is being invoked, the @env{COMP_WORDS} and @env{COMP_CWORD} variables are also set. When the function or command is invoked, the first argument ($1) is the name of the command whose arguments are being completed, the second argument ($2) is the word being completed, and the third argument ($3) is the word preceding the word being completed on the current command line. No filtering of the generated completions against the word being completed is performed; the function or command has complete freedom in generating the matches. Any function specified with @option{-F} is invoked first. The function may use any of the shell facilities, including the @code{compgen} and @code{compopt} builtins described below (@pxref{Programmable Completion Builtins}), to generate the matches. It must put the possible completions in the @env{COMPREPLY} array variable, one per array element. Next, any command specified with the @option{-C} option is invoked in an environment equivalent to command substitution. It should print a list of completions, one per line, to the standard output. Backslash may be used to escape a newline, if necessary. After all of the possible completions are generated, any filter specified with the @option{-X} option is applied to the list. The filter is a pattern as used for pathname expansion; a @samp{&} in the pattern is replaced with the text of the word being completed. A literal @samp{&} may be escaped with a backslash; the backslash is removed before attempting a match. Any completion that matches the pattern will be removed from the list. A leading @samp{!} negates the pattern; in this case any completion not matching the pattern will be removed. If the @code{nocasematch} shell option (see the description of @code{shopt} in @ref{The Shopt Builtin}) is enabled, the match is performed without regard to the case of alphabetic characters. Finally, any prefix and suffix specified with the @option{-P} and @option{-S} options are added to each member of the completion list, and the result is returned to the Readline completion code as the list of possible completions. If the previously-applied actions do not generate any matches, and the @option{-o dirnames} option was supplied to @code{complete} when the compspec was defined, directory name completion is attempted. If the @option{-o plusdirs} option was supplied to @code{complete} when the compspec was defined, directory name completion is attempted and any matches are added to the results of the other actions. By default, if a compspec is found, whatever it generates is returned to the completion code as the full set of possible completions. The default Bash completions are not attempted, and the Readline default of filename completion is disabled. If the @option{-o bashdefault} option was supplied to @code{complete} when the compspec was defined, the default Bash completions are attempted if the compspec generates no matches. If the @option{-o default} option was supplied to @code{complete} when the compspec was defined, Readline's default completion will be performed if the compspec (and, if attempted, the default Bash completions) generate no matches. When a compspec indicates that directory name completion is desired, the programmable completion functions force Readline to append a slash to completed names which are symbolic links to directories, subject to the value of the @var{mark-directories} Readline variable, regardless of the setting of the @var{mark-symlinked-directories} Readline variable. There is some support for dynamically modifying completions. This is most useful when used in combination with a default completion specified with @option{-D}. It's possible for shell functions executed as completion handlers to indicate that completion should be retried by returning an exit status of 124. If a shell function returns 124, and changes the compspec associated with the command on which completion is being attempted (supplied as the first argument when the function is executed), programmable completion restarts from the beginning, with an attempt to find a new compspec for that command. This allows a set of completions to be built dynamically as completion is attempted, rather than being loaded all at once. For instance, assuming that there is a library of compspecs, each kept in a file corresponding to the name of the command, the following default completion function would load completions dynamically: @example _completion_loader() @{ . "/etc/bash_completion.d/$1.sh" >/dev/null 2>&1 && return 124 @} complete -D -F _completion_loader -o bashdefault -o default @end example @node Programmable Completion Builtins @section Programmable Completion Builtins @cindex completion builtins Three builtin commands are available to manipulate the programmable completion facilities: one to specify how the arguments to a particular command are to be completed, and two to modify the completion as it is happening. @table @code @item compgen @btindex compgen @example @code{compgen [@var{option}] [@var{word}]} @end example Generate possible completion matches for @var{word} according to the @var{option}s, which may be any option accepted by the @code{complete} builtin with the exception of @option{-p} and @option{-r}, and write the matches to the standard output. When using the @option{-F} or @option{-C} options, the various shell variables set by the programmable completion facilities, while available, will not have useful values. The matches will be generated in the same way as if the programmable completion code had generated them directly from a completion specification with the same flags. If @var{word} is specified, only those completions matching @var{word} will be displayed. The return value is true unless an invalid option is supplied, or no matches were generated. @item complete @btindex complete @example @code{complete [-abcdefgjksuv] [-o @var{comp-option}] [-DE] [-A @var{action}] [-G @var{globpat}] [-W @var{wordlist}] [-F @var{function}] [-C @var{command}] [-X @var{filterpat}] [-P @var{prefix}] [-S @var{suffix}] @var{name} [@var{name} @dots{}]} @code{complete -pr [-DE] [@var{name} @dots{}]} @end example Specify how arguments to each @var{name} should be completed. If the @option{-p} option is supplied, or if no options are supplied, existing completion specifications are printed in a way that allows them to be reused as input. The @option{-r} option removes a completion specification for each @var{name}, or, if no @var{name}s are supplied, all completion specifications. The @option{-D} option indicates that the remaining options and actions should apply to the ``default'' command completion; that is, completion attempted on a command for which no completion has previously been defined. The @option{-E} option indicates that the remaining options and actions should apply to ``empty'' command completion; that is, completion attempted on a blank line. The process of applying these completion specifications when word completion is attempted is described above (@pxref{Programmable Completion}). The @option{-D} option takes precedence over @option{-E}. Other options, if specified, have the following meanings. The arguments to the @option{-G}, @option{-W}, and @option{-X} options (and, if necessary, the @option{-P} and @option{-S} options) should be quoted to protect them from expansion before the @code{complete} builtin is invoked. @table @code @item -o @var{comp-option} The @var{comp-option} controls several aspects of the compspec's behavior beyond the simple generation of completions. @var{comp-option} may be one of: @table @code @item bashdefault Perform the rest of the default Bash completions if the compspec generates no matches. @item default Use Readline's default filename completion if the compspec generates no matches. @item dirnames Perform directory name completion if the compspec generates no matches. @item filenames Tell Readline that the compspec generates filenames, so it can perform any filename-specific processing (like adding a slash to directory names quoting special characters, or suppressing trailing spaces). This option is intended to be used with shell functions specified with @option{-F}. @item noquote Tell Readline not to quote the completed words if they are filenames (quoting filenames is the default). @item nosort Tell Readline not to sort the list of possible completions alphabetically. @item nospace Tell Readline not to append a space (the default) to words completed at the end of the line. @item plusdirs After any matches defined by the compspec are generated, directory name completion is attempted and any matches are added to the results of the other actions. @end table @item -A @var{action} The @var{action} may be one of the following to generate a list of possible completions: @table @code @item alias Alias names. May also be specified as @option{-a}. @item arrayvar Array variable names. @item binding Readline key binding names (@pxref{Bindable Readline Commands}). @item builtin Names of shell builtin commands. May also be specified as @option{-b}. @item command Command names. May also be specified as @option{-c}. @item directory Directory names. May also be specified as @option{-d}. @item disabled Names of disabled shell builtins. @item enabled Names of enabled shell builtins. @item export Names of exported shell variables. May also be specified as @option{-e}. @item file File names. May also be specified as @option{-f}. @item function Names of shell functions. @item group Group names. May also be specified as @option{-g}. @item helptopic Help topics as accepted by the @code{help} builtin (@pxref{Bash Builtins}). @item hostname Hostnames, as taken from the file specified by the @env{HOSTFILE} shell variable (@pxref{Bash Variables}). @item job Job names, if job control is active. May also be specified as @option{-j}. @item keyword Shell reserved words. May also be specified as @option{-k}. @item running Names of running jobs, if job control is active. @item service Service names. May also be specified as @option{-s}. @item setopt Valid arguments for the @option{-o} option to the @code{set} builtin (@pxref{The Set Builtin}). @item shopt Shell option names as accepted by the @code{shopt} builtin (@pxref{Bash Builtins}). @item signal Signal names. @item stopped Names of stopped jobs, if job control is active. @item user User names. May also be specified as @option{-u}. @item variable Names of all shell variables. May also be specified as @option{-v}. @end table @item -C @var{command} @var{command} is executed in a subshell environment, and its output is used as the possible completions. @item -F @var{function} The shell function @var{function} is executed in the current shell environment. When it is executed, $1 is the name of the command whose arguments are being completed, $2 is the word being completed, and $3 is the word preceding the word being completed, as described above (@pxref{Programmable Completion}). When it finishes, the possible completions are retrieved from the value of the @env{COMPREPLY} array variable. @item -G @var{globpat} The filename expansion pattern @var{globpat} is expanded to generate the possible completions. @item -P @var{prefix} @var{prefix} is added at the beginning of each possible completion after all other options have been applied. @item -S @var{suffix} @var{suffix} is appended to each possible completion after all other options have been applied. @item -W @var{wordlist} The @var{wordlist} is split using the characters in the @env{IFS} special variable as delimiters, and each resultant word is expanded. The possible completions are the members of the resultant list which match the word being completed. @item -X @var{filterpat} @var{filterpat} is a pattern as used for filename expansion. It is applied to the list of possible completions generated by the preceding options and arguments, and each completion matching @var{filterpat} is removed from the list. A leading @samp{!} in @var{filterpat} negates the pattern; in this case, any completion not matching @var{filterpat} is removed. @end table The return value is true unless an invalid option is supplied, an option other than @option{-p} or @option{-r} is supplied without a @var{name} argument, an attempt is made to remove a completion specification for a @var{name} for which no specification exists, or an error occurs adding a completion specification. @item compopt @btindex compopt @example @code{compopt} [-o @var{option}] [-DE] [+o @var{option}] [@var{name}] @end example Modify completion options for each @var{name} according to the @var{option}s, or for the currently-executing completion if no @var{name}s are supplied. If no @var{option}s are given, display the completion options for each @var{name} or the current completion. The possible values of @var{option} are those valid for the @code{complete} builtin described above. The @option{-D} option indicates that the remaining options should apply to the ``default'' command completion; that is, completion attempted on a command for which no completion has previously been defined. The @option{-E} option indicates that the remaining options should apply to ``empty'' command completion; that is, completion attempted on a blank line. The @option{-D} option takes precedence over @option{-E}. The return value is true unless an invalid option is supplied, an attempt is made to modify the options for a @var{name} for which no completion specification exists, or an output error occurs. @end table @node A Programmable Completion Example @section A Programmable Completion Example The most common way to obtain additional completion functionality beyond the default actions @code{complete} and @code{compgen} provide is to use a shell function and bind it to a particular command using @code{complete -F}. The following function provides completions for the @code{cd} builtin. It is a reasonably good example of what shell functions must do when used for completion. This function uses the word passsed as @code{$2} to determine the directory name to complete. You can also use the @code{COMP_WORDS} array variable; the current word is indexed by the @code{COMP_CWORD} variable. The function relies on the @code{complete} and @code{compgen} builtins to do much of the work, adding only the things that the Bash @code{cd} does beyond accepting basic directory names: tilde expansion (@pxref{Tilde Expansion}), searching directories in @var{$CDPATH}, which is described above (@pxref{Bourne Shell Builtins}), and basic support for the @code{cdable_vars} shell option (@pxref{The Shopt Builtin}). @code{_comp_cd} modifies the value of @var{IFS} so that it contains only a newline to accommodate file names containing spaces and tabs -- @code{compgen} prints the possible completions it generates one per line. Possible completions go into the @var{COMPREPLY} array variable, one completion per array element. The programmable completion system retrieves the completions from there when the function returns. @example # A completion function for the cd builtin # based on the cd completion function from the bash_completion package _comp_cd() @{ local IFS=$' \t\n' # normalize IFS local cur _skipdot _cdpath local i j k # Tilde expansion, with side effect of expanding tilde to full pathname case "$2" in \~*) eval cur="$2" ;; *) cur=$2 ;; esac # no cdpath or absolute pathname -- straight directory completion if [[ -z "$@{CDPATH:-@}" ]] || [[ "$cur" == @@(./*|../*|/*) ]]; then # compgen prints paths one per line; could also use while loop IFS=$'\n' COMPREPLY=( $(compgen -d -- "$cur") ) IFS=$' \t\n' # CDPATH+directories in the current directory if not in CDPATH else IFS=$'\n' _skipdot=false # preprocess CDPATH to convert null directory names to . _cdpath=$@{CDPATH/#:/.:@} _cdpath=$@{_cdpath//::/:.:@} _cdpath=$@{_cdpath/%:/:.@} for i in $@{_cdpath//:/$'\n'@}; do if [[ $i -ef . ]]; then _skipdot=true; fi k="$@{#COMPREPLY[@@]@}" for j in $( compgen -d -- "$i/$cur" ); do COMPREPLY[k++]=$@{j#$i/@} # cut off directory done done $_skipdot || COMPREPLY+=( $(compgen -d -- "$cur") ) IFS=$' \t\n' fi # variable names if appropriate shell option set and no completions if shopt -q cdable_vars && [[ $@{#COMPREPLY[@@]@} -eq 0 ]]; then COMPREPLY=( $(compgen -v -- "$cur") ) fi return 0 @} @end example We install the completion function using the @option{-F} option to @code{complete}: @example # Tell readline to quote appropriate and append slashes to directories; # use the bash default completion for other arguments complete -o filenames -o nospace -o bashdefault -F _comp_cd cd @end example @noindent Since we'd like Bash and Readline to take care of some of the other details for us, we use several other options to tell Bash and Readline what to do. The @option{-o filenames} option tells Readline that the possible completions should be treated as filenames, and quoted appropriately. That option will also cause Readline to append a slash to filenames it can determine are directories (which is why we might want to extend @code{_comp_cd} to append a slash if we're using directories found via @var{CDPATH}: Readline can't tell those completions are directories). The @option{-o nospace} option tells Readline to not append a space character to the directory name, in case we want to append to it. The @option{-o bashdefault} option brings in the rest of the "Bash default" completions -- possible completion that Bash adds to the default Readline set. These include things like command name completion, variable completion for words beginning with @samp{@{}, completions containing pathname expansion patterns (@pxref{Filename Expansion}), and so on. Once installed using @code{complete}, @code{_comp_cd} will be called every time we attempt word completion for a @code{cd} command. Many more examples -- an extensive collection of completions for most of the common GNU, Unix, and Linux commands -- are available as part of the bash_completion project. This is installed by default on many GNU/Linux distributions. Originally written by Ian Macdonald, the project now lives at @url{http://bash-completion.alioth.debian.org/}. There are ports for other systems such as Solaris and Mac OS X. An older version of the bash_completion package is distributed with bash in the @file{examples/complete} subdirectory. @end ifset readline-7.0/doc/rluserman.texi000664 000436 000024 00000003776 12651435411 016715 0ustar00chetstaff000000 000000 \input texinfo @c -*-texinfo-*- @comment %**start of header (This is for running Texinfo on a region.) @setfilename rluserman.info @settitle GNU Readline Library @include version.texi @comment %**end of header (This is for running Texinfo on a region.) @copying This manual describes the end user interface of the GNU Readline Library (version @value{VERSION}, @value{UPDATED}), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright @copyright{} 1988--2016 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * RLuserman: (rluserman). The GNU readline library User's Manual. @end direntry @titlepage @title GNU Readline Library User Interface @subtitle Edition @value{EDITION}, for @code{Readline Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Readline Library This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is @url{http://www.gnu.org/software/readline/}. @menu * Command Line Editing:: GNU Readline User's Manual. * GNU Free Documentation License:: License for copying this manual. @end menu @end ifnottex @include rluser.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @bye readline-7.0/doc/history.texi000664 000436 000024 00000004332 12651435301 016371 0ustar00chetstaff000000 000000 \input texinfo @c -*-texinfo-*- @c %**start of header (This is for running Texinfo on a region.) @setfilename history.info @settitle GNU History Library @include version.texi @c %**end of header (This is for running Texinfo on a region.) @copying This document describes the GNU History library (version @value{VERSION}, @value{UPDATED}), a programming tool that provides a consistent user interface for recalling lines of previously typed input. Copyright @copyright{} 1988--2016 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Libraries @direntry * History: (history). The GNU history library API. @end direntry @titlepage @title GNU History Library @subtitle Edition @value{EDITION}, for @code{History Library} Version @value{VERSION}. @subtitle @value{UPDATED-MONTH} @author Chet Ramey, Case Western Reserve University @author Brian Fox, Free Software Foundation @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU History Library This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. @menu * Using History Interactively:: GNU History User's Manual. * Programming with GNU History:: GNU History Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables. @end menu @end ifnottex @syncodeindex fn vr @include hsuser.texi @include hstech.texi @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texi @node Concept Index @appendix Concept Index @printindex cp @node Function and Variable Index @appendix Function and Variable Index @printindex vr @bye readline-7.0/doc/hstech.texi000664 000436 000024 00000050750 12651435323 016157 0ustar00chetstaff000000 000000 @ignore This file documents the user interface to the GNU History library. Copyright (C) 1988-2016 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the GNU Copyright statement is available to the distributee, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions. @end ignore @node Programming with GNU History @chapter Programming with GNU History This chapter describes how to interface programs that you write with the @sc{gnu} History Library. It should be considered a technical guide. For information on the interactive use of @sc{gnu} History, @pxref{Using History Interactively}. @menu * Introduction to History:: What is the GNU History library for? * History Storage:: How information is stored. * History Functions:: Functions that you can use. * History Variables:: Variables that control behaviour. * History Programming Example:: Example of using the GNU History Library. @end menu @node Introduction to History @section Introduction to History Many programs read input from the user a line at a time. The @sc{gnu} History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history @dfn{expansion} function is available which provides for a consistent user interface across different programs. The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by @code{csh}. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file @code{} in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures. @node History Storage @section History Storage The history list is an array of history entries. A history entry is declared as follows: @example typedef void *histdata_t; typedef struct _hist_entry @{ char *line; char *timestamp; histdata_t data; @} HIST_ENTRY; @end example The history list itself might therefore be declared as @example HIST_ENTRY **the_history_list; @end example The state of the History library is encapsulated into a single structure: @example /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state @{ HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; @} HISTORY_STATE; @end example If the flags member includes @code{HS_STIFLED}, the history has been stifled. @node History Functions @section History Functions This section describes the calling sequence for the various functions exported by the @sc{gnu} History library. @menu * Initializing History and State Management:: Functions to call when you want to use history in a program. * History List Management:: Functions used to manage the list of history entries. * Information About the History List:: Functions returning information about the history list. * Moving Around the History List:: Functions used to change the position in the history list. * Searching the History List:: Functions to search the history list for entries containing a string. * Managing the History File:: Functions that read and write a file containing the history list. * History Expansion:: Functions to perform csh-like history expansion. @end menu @node Initializing History and State Management @subsection Initializing History and State Management This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. @deftypefun void using_history (void) Begin a session in which the history functions might be used. This initializes the interactive variables. @end deftypefun @deftypefun {HISTORY_STATE *} history_get_history_state (void) Return a structure describing the current state of the input history. @end deftypefun @deftypefun void history_set_history_state (HISTORY_STATE *state) Set the state of the history list according to @var{state}. @end deftypefun @node History List Management @subsection History List Management These functions manage individual entries on the history list, or set parameters managing the list itself. @deftypefun void add_history (const char *string) Place @var{string} at the end of the history list. The associated data field (if any) is set to @code{NULL}. @end deftypefun @deftypefun void add_history_time (const char *string) Change the time stamp associated with the most recent history entry to @var{string}. @end deftypefun @deftypefun {HIST_ENTRY *} remove_history (int which) Remove history entry at offset @var{which} from the history. The removed element is returned so you can free the line, data, and containing structure. @end deftypefun @deftypefun {histdata_t} free_history_entry (HIST_ENTRY *histent) Free the history entry @var{histent} and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. @end deftypefun @deftypefun {HIST_ENTRY *} replace_history_entry (int which, const char *line, histdata_t data) Make the history entry at offset @var{which} have @var{line} and @var{data}. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid @var{which}, a @code{NULL} pointer is returned. @end deftypefun @deftypefun void clear_history (void) Clear the history list by deleting all the entries. @end deftypefun @deftypefun void stifle_history (int max) Stifle the history list, remembering only the last @var{max} entries. @end deftypefun @deftypefun int unstifle_history (void) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by @code{stifle_history()}). The value is positive if the history was stifled, negative if it wasn't. @end deftypefun @deftypefun int history_is_stifled (void) Returns non-zero if the history is stifled, zero if it is not. @end deftypefun @node Information About the History List @subsection Information About the History List These functions return information about the entire history list or individual list entries. @deftypefun {HIST_ENTRY **} history_list (void) Return a @code{NULL} terminated array of @code{HIST_ENTRY *} which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return @code{NULL}. @end deftypefun @deftypefun int where_history (void) Returns the offset of the current history element. @end deftypefun @deftypefun {HIST_ENTRY *} current_history (void) Return the history entry at the current position, as determined by @code{where_history()}. If there is no entry there, return a @code{NULL} pointer. @end deftypefun @deftypefun {HIST_ENTRY *} history_get (int offset) Return the history entry at position @var{offset}, starting from @code{history_base} (@pxref{History Variables}). If there is no entry there, or if @var{offset} is greater than the history length, return a @code{NULL} pointer. @end deftypefun @deftypefun time_t history_get_time (HIST_ENTRY *entry) Return the time stamp associated with the history entry @var{entry}. If the timestamp is missing or invalid, return 0. @end deftypefun @deftypefun int history_total_bytes (void) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. @end deftypefun @node Moving Around the History List @subsection Moving Around the History List These functions allow the current index into the history list to be set or changed. @deftypefun int history_set_pos (int pos) Set the current history offset to @var{pos}, an absolute index into the list. Returns 1 on success, 0 if @var{pos} is less than zero or greater than the number of history entries. @end deftypefun @deftypefun {HIST_ENTRY *} previous_history (void) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a @code{NULL} pointer. @end deftypefun @deftypefun {HIST_ENTRY *} next_history (void) If the current history offset refers to a valid history entry, increment the current history offset. If the possibly-incremented history offset refers to a valid history entry, return a pointer to that entry; otherwise, return a @code{BNULL} pointer. @end deftypefun @node Searching the History List @subsection Searching the History List @cindex History Searching These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be @dfn{anchored}, meaning that the string must match at the beginning of the history entry. @cindex anchored search @deftypefun int history_search (const char *string, int direction) Search the history for @var{string}, starting at the current history offset. If @var{direction} is less than 0, then the search is through previous entries, otherwise through subsequent entries. If @var{string} is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where @var{string} was found. Otherwise, nothing is changed, and a -1 is returned. @end deftypefun @deftypefun int history_search_prefix (const char *string, int direction) Search the history for @var{string}, starting at the current history offset. The search is anchored: matching lines must begin with @var{string}. If @var{direction} is less than 0, then the search is through previous entries, otherwise through subsequent entries. If @var{string} is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. @end deftypefun @deftypefun int history_search_pos (const char *string, int direction, int pos) Search for @var{string} in the history list, starting at @var{pos}, an absolute index into the list. If @var{direction} is negative, the search proceeds backward from @var{pos}, otherwise forward. Returns the absolute index of the history element where @var{string} was found, or -1 otherwise. @end deftypefun @node Managing the History File @subsection Managing the History File The History library can read the history from and write it to a file. This section documents the functions for managing a history file. @deftypefun int read_history (const char *filename) Add the contents of @var{filename} to the history list, a line at a time. If @var{filename} is @code{NULL}, then read from @file{~/.history}. Returns 0 if successful, or @code{errno} if not. @end deftypefun @deftypefun int read_history_range (const char *filename, int from, int to) Read a range of lines from @var{filename}, adding them to the history list. Start reading at line @var{from} and end at @var{to}. If @var{from} is zero, start at the beginning. If @var{to} is less than @var{from}, then read until the end of the file. If @var{filename} is @code{NULL}, then read from @file{~/.history}. Returns 0 if successful, or @code{errno} if not. @end deftypefun @deftypefun int write_history (const char *filename) Write the current history to @var{filename}, overwriting @var{filename} if necessary. If @var{filename} is @code{NULL}, then write the history list to @file{~/.history}. Returns 0 on success, or @code{errno} on a read or write error. @end deftypefun @deftypefun int append_history (int nelements, const char *filename) Append the last @var{nelements} of the history list to @var{filename}. If @var{filename} is @code{NULL}, then append to @file{~/.history}. Returns 0 on success, or @code{errno} on a read or write error. @end deftypefun @deftypefun int history_truncate_file (const char *filename, int nlines) Truncate the history file @var{filename}, leaving only the last @var{nlines} lines. If @var{filename} is @code{NULL}, then @file{~/.history} is truncated. Returns 0 on success, or @code{errno} on failure. @end deftypefun @node History Expansion @subsection History Expansion These functions implement history expansion. @deftypefun int history_expand (char *string, char **output) Expand @var{string}, placing the result into @var{output}, a pointer to a string (@pxref{History Interaction}). Returns: @table @code @item 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); @item 1 if expansions did take place; @item -1 if there was an error in expansion; @item 2 if the returned line should be displayed, but not executed, as with the @code{:p} modifier (@pxref{Modifiers}). @end table If an error occurred in expansion, then @var{output} contains a descriptive error message. @end deftypefun @deftypefun {char *} get_history_event (const char *string, int *cindex, int qchar) Returns the text of the history event beginning at @var{string} + @var{*cindex}. @var{*cindex} is modified to point to after the event specifier. At function entry, @var{cindex} points to the index into @var{string} where the history event specification begins. @var{qchar} is a character that is allowed to end the event specification in addition to the ``normal'' terminating characters. @end deftypefun @deftypefun {char **} history_tokenize (const char *string) Return an array of tokens parsed out of @var{string}, much as the shell might. The tokens are split on the characters in the @var{history_word_delimiters} variable, and shell quoting conventions are obeyed. @end deftypefun @deftypefun {char *} history_arg_extract (int first, int last, const char *string) Extract a string segment consisting of the @var{first} through @var{last} arguments present in @var{string}. Arguments are split using @code{history_tokenize}. @end deftypefun @node History Variables @section History Variables This section describes the externally-visible variables exported by the @sc{gnu} History Library. @deftypevar int history_base The logical offset of the first entry in the history list. @end deftypevar @deftypevar int history_length The number of entries currently stored in the history list. @end deftypevar @deftypevar int history_max_entries The maximum number of history entries. This must be changed using @code{stifle_history()}. @end deftypevar @deftypevar int history_write_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of @var{history_comment_char} to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. @end deftypevar @deftypevar char history_expansion_char The character that introduces a history event. The default is @samp{!}. Setting this to 0 inhibits history expansion. @end deftypevar @deftypevar char history_subst_char The character that invokes word substitution if found at the start of a line. The default is @samp{^}. @end deftypevar @deftypevar char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. @end deftypevar @deftypevar {char *} history_word_delimiters The characters that separate tokens for @code{history_tokenize()}. The default value is @code{" \t\n()<>;&|"}. @end deftypevar @deftypevar {char *} history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, TAB, @samp{:} and @samp{?} in the case of a substring search. The default is empty. @end deftypevar @deftypevar {char *} history_no_expand_chars The list of characters which inhibit history expansion if found immediately following @var{history_expansion_char}. The default is space, tab, newline, carriage return, and @samp{=}. @end deftypevar @deftypevar int history_quotes_inhibit_expansion If non-zero, double-quoted words are not scanned for the history expansion character or the history comment character. The default value is 0. @end deftypevar @deftypevar {rl_linebuf_func_t *} history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a @code{char *} (@var{string}) and an @code{int} index into that string (@var{i}). It should return a non-zero value if the history expansion starting at @var{string[i]} should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to @code{NULL}. @end deftypevar @node History Programming Example @section History Programming Example The following program demonstrates simple use of the @sc{gnu} History Library. @smallexample #include #include main (argc, argv) int argc; char **argv; @{ char line[1024], *t; int len, done = 0; line[0] = 0; using_history (); while (!done) @{ printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) @{ len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; @} if (!t) strcpy (line, "quit"); if (line[0]) @{ char *expansion; int result; result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) @{ free (expansion); continue; @} add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); @} if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) @{ register HIST_ENTRY **the_list; register int i; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) printf ("%d: %s\n", i + history_base, the_list[i]->line); @} else if (strncmp (line, "delete", 6) == 0) @{ int which; if ((sscanf (line + 6, "%d", &which)) == 1) @{ HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else @{ free (entry->line); free (entry); @} @} else @{ fprintf (stderr, "non-numeric arg given to `delete'\n"); @} @} @} @} @end smallexample readline-7.0/doc/hsuser.texi000644 000436 000024 00000040751 12651435447 016217 0ustar00chetstaff000000 000000 @ignore This file documents the user interface to the GNU History library. Copyright (C) 1988--2016 Free Software Foundation, Inc. Authored by Brian Fox and Chet Ramey. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to process this file through Tex and print the results, provided the printed document carries copying permission notice identical to this one except for the removal of this paragraph (this paragraph not being relevant to the printed manual). Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided also that the GNU Copyright statement is available to the distributee, and provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions. @end ignore @node Using History Interactively @chapter Using History Interactively @ifclear BashFeatures @defcodeindex bt @end ifclear @ifset BashFeatures This chapter describes how to use the @sc{gnu} History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the @sc{gnu} History Library in other programs, see the @sc{gnu} Readline Library Manual. @end ifset @ifclear BashFeatures This chapter describes how to use the @sc{gnu} History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the @sc{gnu} History Library in your own programs, @pxref{Programming with GNU History}. @end ifclear @ifset BashFeatures @menu * Bash History Facilities:: How Bash lets you manipulate your command history. * Bash History Builtins:: The Bash builtin commands that manipulate the command history. * History Interaction:: What it feels like using History as a user. @end menu @end ifset @ifclear BashFeatures @menu * History Interaction:: What it feels like using History as a user. @end menu @end ifclear @ifset BashFeatures @node Bash History Facilities @section Bash History Facilities @cindex command history @cindex history list When the @option{-o history} option to the @code{set} builtin is enabled (@pxref{The Set Builtin}), the shell provides access to the @dfn{command history}, the list of commands previously typed. The value of the @env{HISTSIZE} shell variable is used as the number of commands to save in a history list. The text of the last @env{$HISTSIZE} commands (default 500) is saved. The shell stores each command in the history list prior to parameter and variable expansion but after history expansion is performed, subject to the values of the shell variables @env{HISTIGNORE} and @env{HISTCONTROL}. When the shell starts up, the history is initialized from the file named by the @env{HISTFILE} variable (default @file{~/.bash_history}). The file named by the value of @env{HISTFILE} is truncated, if necessary, to contain no more than the number of lines specified by the value of the @env{HISTFILESIZE} variable. When a shell with history enabled exits, the last @env{$HISTSIZE} lines are copied from the history list to the file named by @env{$HISTFILE}. If the @code{histappend} shell option is set (@pxref{Bash Builtins}), the lines are appended to the history file, otherwise the history file is overwritten. If @env{HISTFILE} is unset, or if the history file is unwritable, the history is not saved. After saving the history, the history file is truncated to contain no more than @env{$HISTFILESIZE} lines. If @env{HISTFILESIZE} is unset, or set to null, a non-numeric value, or a numeric value less than zero, the history file is not truncated. If the @env{HISTTIMEFORMAT} is set, the time stamp information associated with each history entry is written to the history file, marked with the history comment character. When the history file is read, lines beginning with the history comment character followed immediately by a digit are interpreted as timestamps for the following history entry. The builtin command @code{fc} may be used to list or edit and re-execute a portion of the history list. The @code{history} builtin may be used to display or modify the history list and manipulate the history file. When using command-line editing, search commands are available in each editing mode that provide access to the history list (@pxref{Commands For History}). The shell allows control over which commands are saved on the history list. The @env{HISTCONTROL} and @env{HISTIGNORE} variables may be set to cause the shell to save only a subset of the commands entered. The @code{cmdhist} shell option, if enabled, causes the shell to attempt to save each line of a multi-line command in the same history entry, adding semicolons where necessary to preserve syntactic correctness. The @code{lithist} shell option causes the shell to save the command with embedded newlines instead of semicolons. The @code{shopt} builtin is used to set these options. @xref{Bash Builtins}, for a description of @code{shopt}. @node Bash History Builtins @section Bash History Builtins @cindex history builtins Bash provides two builtin commands which manipulate the history list and history file. @table @code @item fc @btindex fc @example @code{fc [-e @var{ename}] [-lnr] [@var{first}] [@var{last}]} @code{fc -s [@var{pat}=@var{rep}] [@var{command}]} @end example The first form selects a range of commands from @var{first} to @var{last} from the history list and displays or edits and re-executes them. Both @var{first} and @var{last} may be specified as a string (to locate the most recent command beginning with that string) or as a number (an index into the history list, where a negative number is used as an offset from the current command number). If @var{last} is not specified it is set to @var{first}. If @var{first} is not specified it is set to the previous command for editing and @minus{}16 for listing. If the @option{-l} flag is given, the commands are listed on standard output. The @option{-n} flag suppresses the command numbers when listing. The @option{-r} flag reverses the order of the listing. Otherwise, the editor given by @var{ename} is invoked on a file containing those commands. If @var{ename} is not given, the value of the following variable expansion is used: @code{$@{FCEDIT:-$@{EDITOR:-vi@}@}}. This says to use the value of the @env{FCEDIT} variable if set, or the value of the @env{EDITOR} variable if that is set, or @code{vi} if neither is set. When editing is complete, the edited commands are echoed and executed. In the second form, @var{command} is re-executed after each instance of @var{pat} in the selected command is replaced by @var{rep}. @var{command} is intepreted the same as @var{first} above. A useful alias to use with the @code{fc} command is @code{r='fc -s'}, so that typing @samp{r cc} runs the last command beginning with @code{cc} and typing @samp{r} re-executes the last command (@pxref{Aliases}). @item history @btindex history @example history [@var{n}] history -c history -d @var{offset} history [-anrw] [@var{filename}] history -ps @var{arg} @end example With no options, display the history list with line numbers. Lines prefixed with a @samp{*} have been modified. An argument of @var{n} lists only the last @var{n} lines. If the shell variable @env{HISTTIMEFORMAT} is set and not null, it is used as a format string for @var{strftime} to display the time stamp associated with each displayed history entry. No intervening blank is printed between the formatted time stamp and the history line. Options, if supplied, have the following meanings: @table @code @item -c Clear the history list. This may be combined with the other options to replace the history list completely. @item -d @var{offset} Delete the history entry at position @var{offset}. @var{offset} should be specified as it appears when the history is displayed. @item -a Append the new history lines to the history file. These are history lines entered since the beginning of the current Bash session, but not already appended to the history file. @item -n Append the history lines not already read from the history file to the current history list. These are lines appended to the history file since the beginning of the current Bash session. @item -r Read the history file and append its contents to the history list. @item -w Write out the current history list to the history file. @item -p Perform history substitution on the @var{arg}s and display the result on the standard output, without storing the results in the history list. @item -s The @var{arg}s are added to the end of the history list as a single entry. @end table When any of the @option{-w}, @option{-r}, @option{-a}, or @option{-n} options is used, if @var{filename} is given, then it is used as the history file. If not, then the value of the @env{HISTFILE} variable is used. @end table @end ifset @node History Interaction @section History Expansion @cindex history expansion The History library provides a history expansion feature that is similar to the history expansion provided by @code{csh}. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. @ifset BashFeatures History expansion is performed immediately after a complete line is read, before the shell breaks it into words. @end ifset History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the @dfn{event}, and the portions of that line that are acted upon are called @dfn{words}. Various @dfn{modifiers} are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is @samp{!} by default. @ifset BashFeatures Only @samp{\} and @samp{'} may be used to escape the history expansion character, but the history expansion character is also treated as quoted if it immediately precedes the closing double quote in a double-quoted string. @end ifset @ifset BashFeatures Several shell options settable with the @code{shopt} builtin (@pxref{Bash Builtins}) may be used to tailor the behavior of history expansion. If the @code{histverify} shell option is enabled, and Readline is being used, history substitutions are not immediately passed to the shell parser. Instead, the expanded line is reloaded into the Readline editing buffer for further modification. If Readline is being used, and the @code{histreedit} shell option is enabled, a failed history expansion will be reloaded into the Readline editing buffer for correction. The @option{-p} option to the @code{history} builtin command may be used to see what a history expansion will do before using it. The @option{-s} option to the @code{history} builtin may be used to add commands to the end of the history list without actually executing them, so that they are available for subsequent recall. This is most useful in conjunction with Readline. The shell allows control of the various characters used by the history expansion mechanism with the @code{histchars} variable, as explained above (@pxref{Bash Variables}). The shell uses the history comment character to mark history timestamps when writing the history file. @end ifset @menu * Event Designators:: How to specify which history line to use. * Word Designators:: Specifying which words are of interest. * Modifiers:: Modifying the results of substitution. @end menu @node Event Designators @subsection Event Designators @cindex event designators An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. @cindex history events @table @asis @item @code{!} @ifset BashFeatures Start a history substitution, except when followed by a space, tab, the end of the line, @samp{=} or @samp{(} (when the @code{extglob} shell option is enabled using the @code{shopt} builtin). @end ifset @ifclear BashFeatures Start a history substitution, except when followed by a space, tab, the end of the line, or @samp{=}. @end ifclear @item @code{!@var{n}} Refer to command line @var{n}. @item @code{!-@var{n}} Refer to the command @var{n} lines back. @item @code{!!} Refer to the previous command. This is a synonym for @samp{!-1}. @item @code{!@var{string}} Refer to the most recent command preceding the current position in the history list starting with @var{string}. @item @code{!?@var{string}[?]} Refer to the most recent command preceding the current position in the history list containing @var{string}. The trailing @samp{?} may be omitted if the @var{string} is followed immediately by a newline. @item @code{^@var{string1}^@var{string2}^} Quick Substitution. Repeat the last command, replacing @var{string1} with @var{string2}. Equivalent to @code{!!:s/@var{string1}/@var{string2}/}. @item @code{!#} The entire command line typed so far. @end table @node Word Designators @subsection Word Designators Word designators are used to select desired words from the event. A @samp{:} separates the event specification from the word designator. It may be omitted if the word designator begins with a @samp{^}, @samp{$}, @samp{*}, @samp{-}, or @samp{%}. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. @need 0.75 For example, @table @code @item !! designates the preceding command. When you type this, the preceding command is repeated in toto. @item !!:$ designates the last argument of the preceding command. This may be shortened to @code{!$}. @item !fi:2 designates the second argument of the most recent command starting with the letters @code{fi}. @end table @need 0.75 Here are the word designators: @table @code @item 0 (zero) The @code{0}th word. For many applications, this is the command word. @item @var{n} The @var{n}th word. @item ^ The first argument; that is, word 1. @item $ The last argument. @item % The word matched by the most recent @samp{?@var{string}?} search. @item @var{x}-@var{y} A range of words; @samp{-@var{y}} abbreviates @samp{0-@var{y}}. @item * All of the words, except the @code{0}th. This is a synonym for @samp{1-$}. It is not an error to use @samp{*} if there is just one word in the event; the empty string is returned in that case. @item @var{x}* Abbreviates @samp{@var{x}-$} @item @var{x}- Abbreviates @samp{@var{x}-$} like @samp{@var{x}*}, but omits the last word. @end table If a word designator is supplied without an event specification, the previous command is used as the event. @node Modifiers @subsection Modifiers After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a @samp{:}. @table @code @item h Remove a trailing pathname component, leaving only the head. @item t Remove all leading pathname components, leaving the tail. @item r Remove a trailing suffix of the form @samp{.@var{suffix}}, leaving the basename. @item e Remove all but the trailing suffix. @item p Print the new command but do not execute it. @ifset BashFeatures @item q Quote the substituted words, escaping further substitutions. @item x Quote the substituted words as with @samp{q}, but break into words at spaces, tabs, and newlines. @end ifset @item s/@var{old}/@var{new}/ Substitute @var{new} for the first occurrence of @var{old} in the event line. Any delimiter may be used in place of @samp{/}. The delimiter may be quoted in @var{old} and @var{new} with a single backslash. If @samp{&} appears in @var{new}, it is replaced by @var{old}. A single backslash will quote the @samp{&}. The final delimiter is optional if it is the last character on the input line. @item & Repeat the previous substitution. @item g @itemx a Cause changes to be applied over the entire event line. Used in conjunction with @samp{s}, as in @code{gs/@var{old}/@var{new}/}, or with @samp{&}. @item G Apply the following @samp{s} modifier once to each word in the event. @end table readline-7.0/doc/readline.3000664 000436 000120 00000133600 12664666122 015642 0ustar00chetadmin000000 000000 .\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Information Network Services .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Sun Feb 28 15:42:34 EST 2016 .\" .TH READLINE 3 "2016 February 28" "GNU Readline 7.0" .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" .de FN \fI\|\\$1\|\fP .. .SH NAME readline \- get a line from a user with editing .SH SYNOPSIS .LP .nf .ft B #include #include #include .ft .fi .LP .nf \fIchar *\fP .br \fBreadline\fP (\fIconst char *prompt\fP); .fi .SH COPYRIGHT .if n Readline is Copyright (C) 1989\-2014 Free Software Foundation, Inc. .if t Readline is Copyright \(co 1989\-2014 Free Software Foundation, Inc. .SH DESCRIPTION .LP .B readline will read a line from the terminal and return it, using .B prompt as a prompt. If .B prompt is \fBNULL\fP or the empty string, no prompt is issued. The line returned is allocated with .IR malloc (3); the caller must free it when finished. The line returned has the final newline removed, so only the text of the line remains. .LP .B readline offers editing capabilities while the user is entering the line. By default, the line editing commands are similar to those of emacs. A vi\-style line editing interface is also available. .LP This manual page describes only the most basic use of \fBreadline\fP. Much more functionality is available; see \fIThe GNU Readline Library\fP and \fIThe GNU History Library\fP for additional information. .SH RETURN VALUE .LP .B readline returns the text of the line read. A blank line returns the empty string. If .B EOF is encountered while reading a line, and the line is empty, .B NULL is returned. If an .B EOF is read with a non\-empty line, it is treated as a newline. .SH NOTATION .LP An Emacs-style notation is used to denote keystrokes. Control keys are denoted by C\-\fIkey\fR, e.g., C\-n means Control\-N. Similarly, .I meta keys are denoted by M\-\fIkey\fR, so M\-x means Meta\-X. (On keyboards without a .I meta key, M\-\fIx\fP means ESC \fIx\fP, i.e., press the Escape key then the .I x key. This makes ESC the \fImeta prefix\fP. The combination M\-C\-\fIx\fP means ESC\-Control\-\fIx\fP, or press the Escape key then hold the Control key while pressing the .I x key.) .PP Readline commands may be given numeric .IR arguments , which normally act as a repeat count. Sometimes, however, it is the sign of the argument that is significant. Passing a negative argument to a command that acts in the forward direction (e.g., \fBkill\-line\fP) causes that command to act in a backward direction. Commands whose behavior with arguments deviates from this are noted below. .PP When a command is described as \fIkilling\fP text, the text deleted is saved for possible future retrieval (\fIyanking\fP). The killed text is saved in a \fIkill ring\fP. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text separate the chunks of text on the kill ring. .SH INITIALIZATION FILE .LP Readline is customized by putting commands in an initialization file (the \fIinputrc\fP file). The name of this file is taken from the value of the .B INPUTRC environment variable. If that variable is unset, the default is .IR ~/.inputrc . If that file does not exist or cannot be read, the ultimate default is .IR /etc/inputrc . When a program which uses the readline library starts up, the init file is read, and the key bindings and variables are set. There are only a few basic constructs allowed in the readline init file. Blank lines are ignored. Lines beginning with a \fB#\fP are comments. Lines beginning with a \fB$\fP indicate conditional constructs. Other lines denote key bindings and variable settings. Each program using this library may add its own commands and bindings. .PP For example, placing .RS .PP M\-Control\-u: universal\-argument .RE or .RS C\-Meta\-u: universal\-argument .RE .sp into the .I inputrc would make M\-C\-u execute the readline command .IR universal\-argument . .PP The following symbolic character names are recognized while processing key bindings: .IR DEL , .IR ESC , .IR ESCAPE , .IR LFD , .IR NEWLINE , .IR RET , .IR RETURN , .IR RUBOUT , .IR SPACE , .IR SPC , and .IR TAB . .PP In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a \fImacro\fP). .PP .SS Key Bindings .PP The syntax for controlling key bindings in the .I inputrc file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be specified in one of two ways: as a symbolic key name, possibly with \fIMeta\-\fP or \fIControl\-\fP prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon. .PP When using the form \fBkeyname\fP:\^\fIfunction-name\fP or \fImacro\fP, .I keyname is the name of a key spelled out in English. For example: .sp .RS Control\-u: universal\-argument .br Meta\-Rubout: backward\-kill\-word .br Control\-o: "> output" .RE .LP In the above example, .I C\-u is bound to the function .BR universal\-argument , .I M-DEL is bound to the function .BR backward\-kill\-word , and .I C\-o is bound to run the macro expressed on the right hand side (that is, to insert the text .if t \f(CW> output\fP .if n ``> output'' into the line). .PP In the second form, \fB"keyseq"\fP:\^\fIfunction\-name\fP or \fImacro\fP, .B keyseq differs from .B keyname above in that strings denoting an entire key sequence may be specified by placing the sequence within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. .sp .RS "\eC\-u": universal\-argument .br "\eC\-x\eC\-r": re\-read\-init\-file .br "\ee[11~": "Function Key 1" .RE .PP In this example, .I C-u is again bound to the function .BR universal\-argument . .I "C-x C-r" is bound to the function .BR re\-read\-init\-file , and .I "ESC [ 1 1 ~" is bound to insert the text .if t \f(CWFunction Key 1\fP. .if n ``Function Key 1''. .PP The full set of GNU Emacs style escape sequences available when specifying key sequences is .RS .PD 0 .TP .B \eC\- control prefix .TP .B \eM\- meta prefix .TP .B \ee an escape character .TP .B \e\e backslash .TP .B \e" literal ", a double quote .TP .B \e' literal ', a single quote .RE .PD .PP In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: .RS .PD 0 .TP .B \ea alert (bell) .TP .B \eb backspace .TP .B \ed delete .TP .B \ef form feed .TP .B \en newline .TP .B \er carriage return .TP .B \et horizontal tab .TP .B \ev vertical tab .TP .B \e\fInnn\fP the eight-bit character whose value is the octal value \fInnn\fP (one to three digits) .TP .B \ex\fIHH\fP the eight-bit character whose value is the hexadecimal value \fIHH\fP (one or two hex digits) .RE .PD .PP When entering the text of a macro, single or double quotes should be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including " and '. .PP .B Bash allows the current readline key bindings to be displayed or modified with the .B bind builtin command. The editing mode may be switched during interactive use by using the .B \-o option to the .B set builtin command. Other programs using this library provide similar mechanisms. The .I inputrc file may be edited and re-read if a program does not provide any other means to incorporate new bindings. .SS Variables .PP Readline has variables that can be used to further customize its behavior. A variable may be set in the .I inputrc file with a statement of the form .RS .PP \fBset\fP \fIvariable\-name\fP \fIvalue\fP .RE .PP Except where noted, readline variables can take the values .B On or .B Off (without regard to case). Unrecognized variable names are ignored. When a variable value is read, empty or null values, "on" (case-insensitive), and "1" are equivalent to \fBOn\fP. All other values are equivalent to \fBOff\fP. The variables and their default values are: .PP .PD 0 .TP .B bell\-style (audible) Controls what happens when readline wants to ring the terminal bell. If set to \fBnone\fP, readline never rings the bell. If set to \fBvisible\fP, readline uses a visible bell if one is available. If set to \fBaudible\fP, readline attempts to ring the terminal's bell. .TP .B bind\-tty\-special\-chars (On) If set to \fBOn\fP (the default), readline attempts to bind the control characters treated specially by the kernel's terminal driver to their readline equivalents. .TP .B blink\-matching\-paren (Off) If set to \fBOn\fP, readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. .TP .B colored\-completion\-prefix (Off) If set to \fBOn\fP, when listing completions, readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. .TP .B colored\-stats (Off) If set to \fBOn\fP, readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the \fBLS_COLORS\fP environment variable. .TP .B comment\-begin (``#'') The string that is inserted in \fBvi\fP mode when the .B insert\-comment command is executed. This command is bound to .B M\-# in emacs mode and to .B # in vi command mode. .TP .B completion\-display\-width (-1) The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. .TP .B completion\-ignore\-case (Off) If set to \fBOn\fP, readline performs filename matching and completion in a case\-insensitive fashion. .TP .B completion\-map\-case (Off) If set to \fBOn\fP, and \fBcompletion\-ignore\-case\fP is enabled, readline treats hyphens (\fI\-\fP) and underscores (\fI_\fP) as equivalent when performing case\-insensitive filename matching and completion. .TP .B completion\-prefix\-display\-length (0) The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. .TP .B completion\-query\-items (100) This determines when the user is queried about viewing the number of possible completions generated by the \fBpossible\-completions\fP command. It may be set to any integer value greater than or equal to zero. If the number of possible completions is greater than or equal to the value of this variable, the user is asked whether or not he wishes to view them; otherwise they are simply listed on the terminal. A negative value causes readline to never ask. .TP .B convert\-meta (On) If set to \fBOn\fP, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing it with an escape character (in effect, using escape as the \fImeta prefix\fP). The default is \fIOn\fP, but readline will set it to \fIOff\fP if the locale contains eight-bit characters. .TP .B disable\-completion (Off) If set to \fBOn\fP, readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to \fBself-insert\fP. .TP .B echo\-control\-characters (On) When set to \fBOn\fP, on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. .TP .B editing\-mode (emacs) Controls whether readline begins with a set of key bindings similar to \fIEmacs\fP or \fIvi\fP. .B editing\-mode can be set to either .B emacs or .BR vi . .TP .B enable\-bracketed\-paste (Off) When set to \fBOn\fP, readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. .TP .B enable\-keypad (Off) When set to \fBOn\fP, readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. .TP .B enable\-meta\-key (On) When set to \fBOn\fP, readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. .TP .B expand\-tilde (Off) If set to \fBOn\fP, tilde expansion is performed when readline attempts word completion. .TP .B history\-preserve\-point (Off) If set to \fBOn\fP, the history code attempts to place point at the same location on each history line retrieved with \fBprevious-history\fP or \fBnext-history\fP. .TP .B history\-size (unset) Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set \fIhistory\-size\fP to a non-numeric value, the maximum number of history entries will be set to 500. .TP .B horizontal\-scroll\-mode (Off) When set to \fBOn\fP, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to a new line. .TP .B input\-meta (Off) If set to \fBOn\fP, readline will enable eight-bit input (that is, it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The name .B meta\-flag is a synonym for this variable. The default is \fIOff\fP, but readline will set it to \fIOn\fP if the locale contains eight-bit characters. .TP .B isearch\-terminators (``C\-[ C\-J'') The string of characters that should terminate an incremental search without subsequently executing the character as a command. If this variable has not been given a value, the characters \fIESC\fP and \fIC\-J\fP will terminate an incremental search. .TP .B keymap (emacs) Set the current readline keymap. The set of legal keymap names is \fIemacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command\fP, and .IR vi-insert . \fIvi\fP is equivalent to \fIvi-command\fP; \fIemacs\fP is equivalent to \fIemacs-standard\fP. The default value is .IR emacs . The value of .B editing\-mode also affects the default keymap. .TP .B emacs\-mode\-string (@) This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \e1 and \e2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. .TP .B keyseq\-timeout (500) Specifies the duration \fIreadline\fP will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, \fIreadline\fP will use the shorter but complete key sequence. The value is specified in milliseconds, so a value of 1000 means that \fIreadline\fP will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, \fIreadline\fP will wait until another key is pressed to decide which key sequence to complete. .TP .B mark\-directories (On) If set to \fBOn\fP, completed directory names have a slash appended. .TP .B mark\-modified\-lines (Off) If set to \fBOn\fP, history lines that have been modified are displayed with a preceding asterisk (\fB*\fP). .TP .B mark\-symlinked\-directories (Off) If set to \fBOn\fP, completed names which are symbolic links to directories have a slash appended (subject to the value of \fBmark\-directories\fP). .TP .B match\-hidden\-files (On) This variable, when set to \fBOn\fP, causes readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to \fBOff\fP, the leading `.' must be supplied by the user in the filename to be completed. .TP .B menu\-complete\-display\-prefix (Off) If set to \fBOn\fP, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. .TP .B output\-meta (Off) If set to \fBOn\fP, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is \fIOff\fP, but readline will set it to \fIOn\fP if the locale contains eight-bit characters. .TP .B page\-completions (On) If set to \fBOn\fP, readline uses an internal \fImore\fP-like pager to display a screenful of possible completions at a time. .TP .B print\-completions\-horizontally (Off) If set to \fBOn\fP, readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. .TP .B revert\-all\-at\-newline (Off) If set to \fBOn\fP, readline will undo all changes to history lines before returning when \fBaccept\-line\fP is executed. By default, history lines may be modified and retain individual undo lists across calls to \fBreadline\fP. .TP .B show\-all\-if\-ambiguous (Off) This alters the default behavior of the completion functions. If set to .BR On , words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. .TP .B show\-all\-if\-unmodified (Off) This alters the default behavior of the completion functions in a fashion similar to \fBshow\-all\-if\-ambiguous\fP. If set to .BR On , words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. .TP .B show\-mode\-in\-prompt (Off) If set to \fBOn\fP, add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. .TP .B skip\-completed\-text (Off) If set to \fBOn\fP, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. .TP .B vi\-cmd\-mode\-string ((cmd)) This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \e1 and \e2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. .TP .B vi\-ins\-mode\-string ((ins)) This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \e1 and \e2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. .TP .B visible\-stats (Off) If set to \fBOn\fP, a character denoting a file's type as reported by \fIstat\fP(2) is appended to the filename when listing possible completions. .PD .SS Conditional Constructs .PP Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. .IP \fB$if\fP The .B $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using readline. The text of the test extends to the end of the line; no characters are required to isolate it. .RS .IP \fBmode\fP The \fBmode=\fP form of the \fB$if\fP directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the \fBset keymap\fP command, for instance, to set bindings in the \fIemacs-standard\fP and \fIemacs-ctlx\fP keymaps only if readline is starting out in emacs mode. .IP \fBterm\fP The \fBterm=\fP form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the .B = is tested against the full name of the terminal and the portion of the terminal name before the first \fB\-\fP. This allows .I sun to match both .I sun and .IR sun\-cmd , for instance. .IP \fBapplication\fP The \fBapplication\fP construct is used to include application-specific settings. Each program using the readline library sets the \fIapplication name\fP, and an initialization file can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in \fBbash\fP: .sp 1 .RS .nf \fB$if\fP Bash # Quote the current or previous word "\eC-xq": "\eeb\e"\eef\e"" \fB$endif\fP .fi .RE .RE .IP \fB$endif\fP This command, as seen in the previous example, terminates an \fB$if\fP command. .IP \fB$else\fP Commands in this branch of the \fB$if\fP directive are executed if the test fails. .IP \fB$include\fP This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive would read \fI/etc/inputrc\fP: .sp 1 .RS .nf \fB$include\fP \^ \fI/etc/inputrc\fP .fi .RE .SH SEARCHING .PP Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: .I incremental and .IR non-incremental . .PP Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type \fBC\-r\fP. Typing \fBC\-s\fP searches forward through the history. The characters present in the value of the \fBisearch-terminators\fP variable are used to terminate an incremental search. If that variable has not been assigned a value the \fIEscape\fP and \fBC\-J\fP characters will terminate an incremental search. \fBC\-G\fP will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. .PP To find other matching entries in the history list, type \fBC\-s\fP or \fBC\-r\fP as appropriate. This will search backward or forward in the history for the next line matching the search string typed so far. Any other key sequence bound to a readline command will terminate the search and execute that command. For instance, a newline will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. .PP Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. .SH EDITING COMMANDS .PP The following is a list of the names of the commands and the default key sequences to which they are bound. Command names without an accompanying key sequence are unbound by default. .PP In the following descriptions, \fIpoint\fP refers to the current cursor position, and \fImark\fP refers to a cursor position saved by the \fBset\-mark\fP command. The text between the point and mark is referred to as the \fIregion\fP. .SS Commands for Moving .PP .PD 0 .TP .B beginning\-of\-line (C\-a) Move to the start of the current line. .TP .B end\-of\-line (C\-e) Move to the end of the line. .TP .B forward\-char (C\-f) Move forward a character. .TP .B backward\-char (C\-b) Move back a character. .TP .B forward\-word (M\-f) Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). .TP .B backward\-word (M\-b) Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). .TP .B clear\-screen (C\-l) Clear the screen leaving the current line at the top of the screen. With an argument, refresh the current line without clearing the screen. .TP .B redraw\-current\-line Refresh the current line. .PD .SS Commands for Manipulating the History .PP .PD 0 .TP .B accept\-line (Newline, Return) Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with \fBadd_history()\fP. If the line is a modified history line, the history line is restored to its original state. .TP .B previous\-history (C\-p) Fetch the previous command from the history list, moving back in the list. .TP .B next\-history (C\-n) Fetch the next command from the history list, moving forward in the list. .TP .B beginning\-of\-history (M\-<) Move to the first line in the history. .TP .B end\-of\-history (M\->) Move to the end of the input history, i.e., the line currently being entered. .TP .B reverse\-search\-history (C\-r) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. .TP .B forward\-search\-history (C\-s) Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search. .TP .B non\-incremental\-reverse\-search\-history (M\-p) Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user. .TP .B non\-incremental\-forward\-search\-history (M\-n) Search forward through the history using a non-incremental search for a string supplied by the user. .TP .B history\-search\-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the \fIpoint\fP). The search string must match at the beginning of a history line. This is a non-incremental search. .TP .B history\-search\-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. .TP .B history\-substring\-search\-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the \fIpoint\fP). The search string may match anywhere in a history line. This is a non-incremental search. .TP .B history\-substring\-search\-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. .TP .B yank\-nth\-arg (M\-C\-y) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument .IR n , insert the \fIn\fPth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the \fIn\fPth word from the end of the previous command. Once the argument \fIn\fP is computed, the argument is extracted as if the "!\fIn\fP" history expansion had been specified. .TP .B yank\-last\-arg (M\-.\^, M\-_\^) Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like \fByank\-nth\-arg\fP. Successive calls to \fByank\-last\-arg\fP move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified. .PD .SS Commands for Changing Text .PP .PD 0 .TP .B \fIend\-of\-file\fP (usually C\-d) The character indicating end-of-file as set, for example, by .if t \f(CWstty\fP. .if n ``stty''. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns .SM .BR EOF . .TP .B delete\-char (C\-d) Delete the character at point. If this function is bound to the same character as the tty \fBEOF\fP character, as \fBC\-d\fP commonly is, see above for the effects. .TP .B backward\-delete\-char (Rubout) Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. .TP .B forward\-backward\-delete\-char Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. .TP .B quoted\-insert (C\-q, C\-v) Add the next character that you type to the line verbatim. This is how to insert characters like \fBC\-q\fP, for example. .TP .B tab\-insert (M-TAB) Insert a tab character. .TP .B self\-insert (a,\ b,\ A,\ 1,\ !,\ ...) Insert the character typed. .TP .B transpose\-chars (C\-t) Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no effect. .TP .B transpose\-words (M\-t) Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line. .TP .B upcase\-word (M\-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point. .TP .B downcase\-word (M\-l) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point. .TP .B capitalize\-word (M\-c) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point. .TP .B overwrite\-mode Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only \fBemacs\fP mode; \fBvi\fP mode does overwrite differently. Each call to \fIreadline()\fP starts in insert mode. In overwrite mode, characters bound to \fBself\-insert\fP replace the text at point rather than pushing the text to the right. Characters bound to \fBbackward\-delete\-char\fP replace the character before point with a space. By default, this command is unbound. .PD .SS Killing and Yanking .PP .PD 0 .TP .B kill\-line (C\-k) Kill the text from point to the end of the line. .TP .B backward\-kill\-line (C\-x Rubout) Kill backward to the beginning of the line. .TP .B unix\-line\-discard (C\-u) Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. .\" There is no real difference between this and backward-kill-line .TP .B kill\-whole\-line Kill all characters on the current line, no matter where point is. .TP .B kill\-word (M\-d) Kill from point the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by \fBforward\-word\fP. .TP .B backward\-kill\-word (M\-Rubout) Kill the word behind point. Word boundaries are the same as those used by \fBbackward\-word\fP. .TP .B unix\-word\-rubout (C\-w) Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. .TP .B unix\-filename\-rubout Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. .TP .B delete\-horizontal\-space (M\-\e) Delete all spaces and tabs around point. .TP .B kill\-region Kill the text between the point and \fImark\fP (saved cursor position). This text is referred to as the \fIregion\fP. .TP .B copy\-region\-as\-kill Copy the text in the region to the kill buffer. .TP .B copy\-backward\-word Copy the word before point to the kill buffer. The word boundaries are the same as \fBbackward\-word\fP. .TP .B copy\-forward\-word Copy the word following point to the kill buffer. The word boundaries are the same as \fBforward\-word\fP. .TP .B yank (C\-y) Yank the top of the kill ring into the buffer at point. .TP .B yank\-pop (M\-y) Rotate the kill ring, and yank the new top. Only works following .B yank or .BR yank\-pop . .PD .SS Numeric Arguments .PP .PD 0 .TP .B digit\-argument (M\-0, M\-1, ..., M\-\-) Add this digit to the argument already accumulating, or start a new argument. M\-\- starts a negative argument. .TP .B universal\-argument This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing .B universal\-argument again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit or minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. .PD .SS Completing .PP .PD 0 .TP .B complete (TAB) Attempt to perform completion on the text before point. The actual completion performed is application-specific. .BR Bash , for instance, attempts completion treating the text as a variable (if the text begins with \fB$\fP), username (if the text begins with \fB~\fP), hostname (if the text begins with \fB@\fP), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. .BR Gdb , on the other hand, allows completion of program functions and variables, and only attempts filename completion under certain circumstances. .TP .B possible\-completions (M\-?) List the possible completions of the text before point. When displaying completions, readline sets the number of columns used for display to the value of \fBcompletion-display-width\fP, the value of the environment variable .SM .BR COLUMNS , or the screen width, in that order. .TP .B insert\-completions (M\-*) Insert all completions of the text before point that would have been generated by \fBpossible\-completions\fP. .TP .B menu\-complete Similar to \fBcomplete\fP, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of \fBmenu\-complete\fP steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of \fBbell\-style\fP) and the original text is restored. An argument of \fIn\fP moves \fIn\fP positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to \fBTAB\fP, but is unbound by default. .TP .B menu\-complete\-backward Identical to \fBmenu\-complete\fP, but moves backward through the list of possible completions, as if \fBmenu\-complete\fP had been given a negative argument. This command is unbound by default. .TP .B delete\-char\-or\-list Deletes the character under the cursor if not at the beginning or end of the line (like \fBdelete-char\fP). If at the end of the line, behaves identically to \fBpossible-completions\fP. .PD .SS Keyboard Macros .PP .PD 0 .TP .B start\-kbd\-macro (C\-x (\^) Begin saving the characters typed into the current keyboard macro. .TP .B end\-kbd\-macro (C\-x )\^) Stop saving the characters typed into the current keyboard macro and store the definition. .TP .B call\-last\-kbd\-macro (C\-x e) Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. .B print\-last\-kbd\-macro () Print the last keyboard macro defined in a format suitable for the \fIinputrc\fP file. .PD .SS Miscellaneous .PP .PD 0 .TP .B re\-read\-init\-file (C\-x C\-r) Read in the contents of the \fIinputrc\fP file, and incorporate any bindings or variable assignments found there. .TP .B abort (C\-g) Abort the current editing command and ring the terminal's bell (subject to the setting of .BR bell\-style ). .TP .B do\-uppercase\-version (M\-a, M\-b, M\-\fIx\fP, ...) If the metafied character \fIx\fP is lowercase, run the command that is bound to the corresponding uppercase character. .TP .B prefix\-meta (ESC) Metafy the next character typed. .SM .B ESC .B f is equivalent to .BR Meta\-f . .TP .B undo (C\-_, C\-x C\-u) Incremental undo, separately remembered for each line. .TP .B revert\-line (M\-r) Undo all changes made to this line. This is like executing the .B undo command enough times to return the line to its initial state. .TP .B tilde\-expand (M\-&) Perform tilde expansion on the current word. .TP .B set\-mark (C\-@, M\-) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. .TP .B exchange\-point\-and\-mark (C\-x C\-x) Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. .TP .B character\-search (C\-]) A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. .TP .B character\-search\-backward (M\-C\-]) A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. .TP .B skip\-csi\-sequence Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC\-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC\-[. .TP .B insert\-comment (M\-#) Without a numeric argument, the value of the readline .B comment\-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of \fBcomment\-begin\fP, the value is inserted, otherwise the characters in \fBcomment-begin\fP are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. The default value of .B comment\-begin makes the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. .TP .B dump\-functions Print all of the functions and their key bindings to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an \fIinputrc\fP file. .TP .B dump\-variables Print all of the settable variables and their values to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an \fIinputrc\fP file. .TP .B dump\-macros Print all of the readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an \fIinputrc\fP file. .TP .B emacs\-editing\-mode (C\-e) When in .B vi command mode, this causes a switch to .B emacs editing mode. .TP .B vi\-editing\-mode (M\-C\-j) When in .B emacs editing mode, this causes a switch to .B vi editing mode. .PD .SH DEFAULT KEY BINDINGS .LP The following is a list of the default emacs and vi bindings. Characters with the eighth bit set are written as M\-, and are referred to as .I metafied characters. The printable ASCII characters not mentioned in the list of emacs standard bindings are bound to the .B self\-insert function, which just inserts the given character into the input line. In vi insertion mode, all characters not specifically mentioned are bound to .BR self\-insert . Characters assigned to signal generation by .IR stty (1) or the terminal driver, such as C-Z or C-C, retain that function. Upper and lower case metafied characters are bound to the same function in the emacs mode meta keymap. The remaining characters are unbound, which causes readline to ring the bell (subject to the setting of the .B bell\-style variable). .SS Emacs Mode .RS +.6i .nf .ta 2.5i .sp Emacs Standard bindings .sp "C-@" set-mark "C-A" beginning-of-line "C-B" backward-char "C-D" delete-char "C-E" end-of-line "C-F" forward-char "C-G" abort "C-H" backward-delete-char "C-I" complete "C-J" accept-line "C-K" kill-line "C-L" clear-screen "C-M" accept-line "C-N" next-history "C-P" previous-history "C-Q" quoted-insert "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-]" character-search "C-_" undo "\^ " to "/" self-insert "0" to "9" self-insert ":" to "~" self-insert "C-?" backward-delete-char .PP Emacs Meta bindings .sp "M-C-G" abort "M-C-H" backward-kill-word "M-C-I" tab-insert "M-C-J" vi-editing-mode "M-C-M" vi-editing-mode "M-C-R" revert-line "M-C-Y" yank-nth-arg "M-C-[" complete "M-C-]" character-search-backward "M-space" set-mark "M-#" insert-comment "M-&" tilde-expand "M-*" insert-completions "M--" digit-argument "M-." yank-last-arg "M-0" digit-argument "M-1" digit-argument "M-2" digit-argument "M-3" digit-argument "M-4" digit-argument "M-5" digit-argument "M-6" digit-argument "M-7" digit-argument "M-8" digit-argument "M-9" digit-argument "M-<" beginning-of-history "M-=" possible-completions "M->" end-of-history "M-?" possible-completions "M-B" backward-word "M-C" capitalize-word "M-D" kill-word "M-F" forward-word "M-L" downcase-word "M-N" non-incremental-forward-search-history "M-P" non-incremental-reverse-search-history "M-R" revert-line "M-T" transpose-words "M-U" upcase-word "M-Y" yank-pop "M-\e" delete-horizontal-space "M-~" tilde-expand "M-C-?" backward-kill-word "M-_" yank-last-arg .PP Emacs Control-X bindings .sp "C-XC-G" abort "C-XC-R" re-read-init-file "C-XC-U" undo "C-XC-X" exchange-point-and-mark "C-X(" start-kbd-macro "C-X)" end-kbd-macro "C-XE" call-last-kbd-macro "C-XC-?" backward-kill-line .sp .RE .SS VI Mode bindings .RS +.6i .nf .ta 2.5i .sp .PP VI Insert Mode functions .sp "C-D" vi-eof-maybe "C-H" backward-delete-char "C-I" complete "C-J" accept-line "C-M" accept-line "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-[" vi-movement-mode "C-_" undo "\^ " to "~" self-insert "C-?" backward-delete-char .PP VI Command Mode functions .sp "C-D" vi-eof-maybe "C-E" emacs-editing-mode "C-G" abort "C-H" backward-char "C-J" accept-line "C-K" kill-line "C-L" clear-screen "C-M" accept-line "C-N" next-history "C-P" previous-history "C-Q" quoted-insert "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-_" vi-undo "\^ " forward-char "#" insert-comment "$" end-of-line "%" vi-match "&" vi-tilde-expand "*" vi-complete "+" next-history "," vi-char-search "-" previous-history "." vi-redo "/" vi-search "0" beginning-of-line "1" to "9" vi-arg-digit ";" vi-char-search "=" vi-complete "?" vi-search "A" vi-append-eol "B" vi-prev-word "C" vi-change-to "D" vi-delete-to "E" vi-end-word "F" vi-char-search "G" vi-fetch-history "I" vi-insert-beg "N" vi-search-again "P" vi-put "R" vi-replace "S" vi-subst "T" vi-char-search "U" revert-line "W" vi-next-word "X" backward-delete-char "Y" vi-yank-to "\e" vi-complete "^" vi-first-print "_" vi-yank-arg "`" vi-goto-mark "a" vi-append-mode "b" vi-prev-word "c" vi-change-to "d" vi-delete-to "e" vi-end-word "f" vi-char-search "h" backward-char "i" vi-insertion-mode "j" next-history "k" prev-history "l" forward-char "m" vi-set-mark "n" vi-search-again "p" vi-put "r" vi-change-char "s" vi-subst "t" vi-char-search "u" vi-undo "w" vi-next-word "x" vi-delete "y" vi-yank-to "|" vi-column "~" vi-change-case .RE .SH "SEE ALSO" .PD 0 .TP \fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP \fIbash\fP(1) .PD .SH FILES .PD 0 .TP .FN ~/.inputrc Individual \fBreadline\fP initialization file .PD .SH AUTHORS Brian Fox, Free Software Foundation .br bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br chet.ramey@case.edu .SH BUG REPORTS If you find a bug in .B readline, you should report it. But first, you should make sure that it really is a bug, and that it appears in the latest version of the .B readline library that you have. .PP Once you have determined that a bug actually exists, mail a bug report to \fIbug\-readline\fP@\fIgnu.org\fP. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet newsgroup .BR gnu.bash.bug . .PP Comments and bug reports concerning this manual page should be directed to .IR chet.ramey@case.edu . .SH BUGS .PP It's too big and too slow. readline-7.0/doc/history.3000644 000436 000120 00000053602 12530445060 015545 0ustar00chetadmin000000 000000 .\" .\" MAN PAGE COMMENTS to .\" .\" Chet Ramey .\" Information Network Services .\" Case Western Reserve University .\" chet.ramey@case.edu .\" .\" Last Change: Sun May 24 18:01:17 EDT 2015 .\" .TH HISTORY 3 "2015 May 24" "GNU History 6.3" .\" .\" File Name macro. This used to be `.PN', for Path Name, .\" but Sun doesn't seem to like that very much. .\" .de FN \fI\|\\$1\|\fP .. .ds lp \fR\|(\fP .ds rp \fR\|)\fP .\" FnN return-value fun-name N arguments .de Fn1 \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3\fP\\*(rp .br .. .de Fn2 .if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4\fP\\*(rp .if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4\fP\\*(rp .br .. .de Fn3 .if t \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3,\|\\$4,\|\\$5\fP\|\\*(rp .if n \fI\\$1\fP \fB\\$2\fP \\*(lp\fI\\$3, \\$4, \\$5\fP\\*(rp .br .. .de Vb \fI\\$1\fP \fB\\$2\fP .br .. .SH NAME history \- GNU History Library .SH COPYRIGHT .if t The GNU History Library is Copyright \(co 1989-2014 by the Free Software Foundation, Inc. .if n The GNU History Library is Copyright (C) 1989-2014 by the Free Software Foundation, Inc. .SH DESCRIPTION Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. .PP .SH "HISTORY EXPANSION" .PP The history library supports a history expansion feature that is identical to the history expansion in .BR bash. This section describes what syntax features are available. .PP History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. .PP History expansion is usually performed immediately after a complete line is read. It takes place in two parts. The first is to determine which line from the history list to use during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is the \fIevent\fP, and the portions of that line that are acted upon are \fIwords\fP. Various \fImodifiers\fP are available to manipulate the selected words. The line is broken into words in the same fashion as \fBbash\fP does when reading input, so that several words that would otherwise be separated are considered one word when surrounded by quotes (see the description of \fBhistory_tokenize()\fP below). History expansions are introduced by the appearance of the history expansion character, which is \^\fB!\fP\^ by default. Only backslash (\^\fB\e\fP\^) and single quotes can quote the history expansion character. .SS Event Designators .PP An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. .PP .PD 0 .TP .B ! Start a history substitution, except when followed by a .BR blank , newline, = or (. .TP .B !\fIn\fR Refer to command line .IR n . .TP .B !\-\fIn\fR Refer to the current command minus .IR n . .TP .B !! Refer to the previous command. This is a synonym for `!\-1'. .TP .B !\fIstring\fR Refer to the most recent command preceding the current position in the history list starting with .IR string . .TP .B !?\fIstring\fR\fB[?]\fR Refer to the most recent command preceding the current position in the history list containing .IR string . The trailing \fB?\fP may be omitted if .I string is followed immediately by a newline. .TP .B \d\s+2^\s-2\u\fIstring1\fP\d\s+2^\s-2\u\fIstring2\fP\d\s+2^\s-2\u Quick substitution. Repeat the last command, replacing .I string1 with .IR string2 . Equivalent to ``!!:s/\fIstring1\fP/\fIstring2\fP/'' (see \fBModifiers\fP below). .TP .B !# The entire command line typed so far. .PD .SS Word Designators .PP Word designators are used to select desired words from the event. A .B : separates the event specification from the word designator. It may be omitted if the word designator begins with a .BR ^ , .BR $ , .BR * , .BR \- , or .BR % . Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. .PP .PD 0 .TP .B 0 (zero) The zeroth word. For the shell, this is the command word. .TP .I n The \fIn\fRth word. .TP .B ^ The first argument. That is, word 1. .TP .B $ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line. .TP .B % The word matched by the most recent `?\fIstring\fR?' search. .TP .I x\fB\-\fPy A range of words; `\-\fIy\fR' abbreviates `0\-\fIy\fR'. .TP .B * All of the words but the zeroth. This is a synonym for `\fI1\-$\fP'. It is not an error to use .B * if there is just one word in the event; the empty string is returned in that case. .TP .B x* Abbreviates \fIx\-$\fP. .TP .B x\- Abbreviates \fIx\-$\fP like \fBx*\fP, but omits the last word. .PD .PP If a word designator is supplied without an event specification, the previous command is used as the event. .SS Modifiers .PP After the optional word designator, there may appear a sequence of one or more of the following modifiers, each preceded by a `:'. .PP .PD 0 .PP .TP .B h Remove a trailing file name component, leaving only the head. .TP .B t Remove all leading file name components, leaving the tail. .TP .B r Remove a trailing suffix of the form \fI.xxx\fP, leaving the basename. .TP .B e Remove all but the trailing suffix. .TP .B p Print the new command but do not execute it. .TP .B q Quote the substituted words, escaping further substitutions. .TP .B x Quote the substituted words as with .BR q , but break into words at .B blanks and newlines. .TP .B s/\fIold\fP/\fInew\fP/ Substitute .I new for the first occurrence of .I old in the event line. Any delimiter can be used in place of /. The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in .I old and .I new with a single backslash. If & appears in .IR new , it is replaced by .IR old . A single backslash will quote the &. If .I old is null, it is set to the last .I old substituted, or, if no previous history substitutions took place, the last .I string in a .B !?\fIstring\fR\fB[?]\fR search. .TP .B & Repeat the previous substitution. .TP .B g Cause changes to be applied over the entire event line. This is used in conjunction with `\fB:s\fP' (e.g., `\fB:gs/\fIold\fP/\fInew\fP/\fR') or `\fB:&\fP'. If used with `\fB:s\fP', any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An \fBa\fP may be used as a synonym for \fBg\fP. .TP .B G Apply the following `\fBs\fP' modifier once to each word in the event line. .PD .SH "PROGRAMMING WITH HISTORY FUNCTIONS" This section describes how to use the History library in other programs. .SS Introduction to History .PP The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history \fIexpansion\fP function is available which provides for a consistent user interface across different programs. .PP The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are identical to the history substitution provided by \fBbash\fP. .PP If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. .PP Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file .FN in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures. .SS History Storage .PP The history list is an array of history entries. A history entry is declared as follows: .PP .Vb "typedef void *" histdata_t; .PP .nf typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; .fi .PP The history list itself might therefore be declared as .PP .Vb "HIST_ENTRY **" the_history_list; .PP The state of the History library is encapsulated into a single structure: .PP .nf /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; .fi .PP If the flags member includes \fBHS_STIFLED\fP, the history has been stifled. .SH "History Functions" .PP This section describes the calling sequence for the various functions exported by the GNU History library. .SS Initializing History and State Management This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. .Fn1 void using_history void Begin a session in which the history functions might be used. This initializes the interactive variables. .Fn1 "HISTORY_STATE *" history_get_history_state void Return a structure describing the current state of the input history. .Fn1 void history_set_history_state "HISTORY_STATE *state" Set the state of the history list according to \fIstate\fP. .SS History List Management These functions manage individual entries on the history list, or set parameters managing the list itself. .Fn1 void add_history "const char *string" Place \fIstring\fP at the end of the history list. The associated data field (if any) is set to \fBNULL\fP. .Fn1 void add_history_time "const char *string" Change the time stamp associated with the most recent history entry to \fIstring\fP. .Fn1 "HIST_ENTRY *" remove_history "int which" Remove history entry at offset \fIwhich\fP from the history. The removed element is returned so you can free the line, data, and containing structure. .Fn1 "histdata_t" free_history_entry "HIST_ENTRY *histent" Free the history entry \fIhistent\fP and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. .Fn3 "HIST_ENTRY *" replace_history_entry "int which" "const char *line" "histdata_t data" Make the history entry at offset \fIwhich\fP have \fIline\fP and \fIdata\fP. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid \fIwhich\fP, a \fBNULL\fP pointer is returned. .Fn1 void clear_history "void" Clear the history list by deleting all the entries. .Fn1 void stifle_history "int max" Stifle the history list, remembering only the last \fImax\fP entries. .Fn1 int unstifle_history "void" Stop stifling the history. This returns the previously-set maximum number of history entries (as set by \fBstifle_history()\fP). history was stifled. The value is positive if the history was stifled, negative if it wasn't. .Fn1 int history_is_stifled "void" Returns non-zero if the history is stifled, zero if it is not. .SS Information About the History List These functions return information about the entire history list or individual list entries. .Fn1 "HIST_ENTRY **" history_list "void" Return a \fBNULL\fP terminated array of \fIHIST_ENTRY *\fP which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return \fBNULL\fP. .Fn1 int where_history "void" Returns the offset of the current history element. .Fn1 "HIST_ENTRY *" current_history "void" Return the history entry at the current position, as determined by \fBwhere_history()\fP. If there is no entry there, return a \fBNULL\fP pointer. .Fn1 "HIST_ENTRY *" history_get "int offset" Return the history entry at position \fIoffset\fP, starting from \fBhistory_base\fP. If there is no entry there, or if \fIoffset\fP is greater than the history length, return a \fBNULL\fP pointer. .Fn1 "time_t" history_get_time "HIST_ENTRY *" Return the time stamp associated with the history entry passed as the argument. .Fn1 int history_total_bytes "void" Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. .SS Moving Around the History List These functions allow the current index into the history list to be set or changed. .Fn1 int history_set_pos "int pos" Set the current history offset to \fIpos\fP, an absolute index into the list. Returns 1 on success, 0 if \fIpos\fP is less than zero or greater than the number of history entries. .Fn1 "HIST_ENTRY *" previous_history "void" Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a \fBNULL\fP pointer. .Fn1 "HIST_ENTRY *" next_history "void" If the current history offset refers to a valid history entry, increment the current history offset. If the possibly-incremented history offset refers to a valid history entry, return a pointer to that entry; otherwise, return a \fBNULL\fP pointer. .SS Searching the History List These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be \fIanchored\fP, meaning that the string must match at the beginning of the history entry. .Fn2 int history_search "const char *string" "int direction" Search the history for \fIstring\fP, starting at the current history offset. If \fIdirection\fP is less than 0, then the search is through previous entries, otherwise through subsequent entries. If \fIstring\fP is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where \fIstring\fP was found. Otherwise, nothing is changed, and a -1 is returned. .Fn2 int history_search_prefix "const char *string" "int direction" Search the history for \fIstring\fP, starting at the current history offset. The search is anchored: matching lines must begin with \fIstring\fP. If \fIdirection\fP is less than 0, then the search is through previous entries, otherwise through subsequent entries. If \fIstring\fP is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. .Fn3 int history_search_pos "const char *string" "int direction" "int pos" Search for \fIstring\fP in the history list, starting at \fIpos\fP, an absolute index into the list. If \fIdirection\fP is negative, the search proceeds backward from \fIpos\fP, otherwise forward. Returns the absolute index of the history element where \fIstring\fP was found, or -1 otherwise. .SS Managing the History File The History library can read the history from and write it to a file. This section documents the functions for managing a history file. .Fn1 int read_history "const char *filename" Add the contents of \fIfilename\fP to the history list, a line at a time. If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, or \fBerrno\fP if not. .Fn3 int read_history_range "const char *filename" "int from" "int to" Read a range of lines from \fIfilename\fP, adding them to the history list. Start reading at line \fIfrom\fP and end at \fIto\fP. If \fIfrom\fP is zero, start at the beginning. If \fIto\fP is less than \fIfrom\fP, then read until the end of the file. If \fIfilename\fP is \fBNULL\fP, then read from \fI~/.history\fP. Returns 0 if successful, or \fBerrno\fP if not. .Fn1 int write_history "const char *filename" Write the current history to \fIfilename\fP, overwriting \fIfilename\fP if necessary. If \fIfilename\fP is \fBNULL\fP, then write the history list to \fI~/.history\fP. Returns 0 on success, or \fBerrno\fP on a read or write error. .Fn2 int append_history "int nelements" "const char *filename" Append the last \fInelements\fP of the history list to \fIfilename\fP. If \fIfilename\fP is \fBNULL\fP, then append to \fI~/.history\fP. Returns 0 on success, or \fBerrno\fP on a read or write error. .Fn2 int history_truncate_file "const char *filename" "int nlines" Truncate the history file \fIfilename\fP, leaving only the last \fInlines\fP lines. If \fIfilename\fP is \fBNULL\fP, then \fI~/.history\fP is truncated. Returns 0 on success, or \fBerrno\fP on failure. .SS History Expansion These functions implement history expansion. .Fn2 int history_expand "char *string" "char **output" Expand \fIstring\fP, placing the result into \fIoutput\fP, a pointer to a string. Returns: .RS .PD 0 .TP 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); .TP 1 if expansions did take place; .TP -1 if there was an error in expansion; .TP 2 if the returned line should be displayed, but not executed, as with the \fB:p\fP modifier. .PD .RE If an error ocurred in expansion, then \fIoutput\fP contains a descriptive error message. .Fn3 "char *" get_history_event "const char *string" "int *cindex" "int qchar" Returns the text of the history event beginning at \fIstring\fP + \fI*cindex\fP. \fI*cindex\fP is modified to point to after the event specifier. At function entry, \fIcindex\fP points to the index into \fIstring\fP where the history event specification begins. \fIqchar\fP is a character that is allowed to end the event specification in addition to the ``normal'' terminating characters. .Fn1 "char **" history_tokenize "const char *string" Return an array of tokens parsed out of \fIstring\fP, much as the shell might. The tokens are split on the characters in the \fBhistory_word_delimiters\fP variable, and shell quoting conventions are obeyed. .Fn3 "char *" history_arg_extract "int first" "int last" "const char *string" Extract a string segment consisting of the \fIfirst\fP through \fIlast\fP arguments present in \fIstring\fP. Arguments are split using \fBhistory_tokenize()\fP. .SS History Variables This section describes the externally-visible variables exported by the GNU History Library. .Vb int history_base The logical offset of the first entry in the history list. .Vb int history_length The number of entries currently stored in the history list. .Vb int history_max_entries The maximum number of history entries. This must be changed using \fBstifle_history()\fP. .Vb int history_wite_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of \fIhistory_comment_char\fP to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. .Vb char history_expansion_char The character that introduces a history event. The default is \fB!\fP. Setting this to 0 inhibits history expansion. .Vb char history_subst_char The character that invokes word substitution if found at the start of a line. The default is \fB^\fP. .Vb char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. .Vb "char *" history_word_delimiters The characters that separate tokens for \fBhistory_tokenize()\fP. The default value is \fB"\ \et\en()<>;&|"\fP. .Vb "char *" history_no_expand_chars The list of characters which inhibit history expansion if found immediately following \fBhistory_expansion_char\fP. The default is space, tab, newline, \fB\er\fP, and \fB=\fP. .Vb "char *" history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, tab, \fI:\fP and \fI?\fP in the case of a substring search. The default is empty. .Vb int history_quotes_inhibit_expansion If non-zero, double-quoted words are not scanned for the history expansion character or the history comment character. The default value is 0. .Vb "rl_linebuf_func_t *" history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a \fBchar *\fP (\fIstring\fP) and an \fBint\fP index into that string (\fIi\fP). It should return a non-zero value if the history expansion starting at \fIstring[i]\fP should not be performed; zero if the expansion should be done. It is intended for use by applications like \fBbash\fP that use the history expansion character for additional purposes. By default, this variable is set to \fBNULL\fP. .SH FILES .PD 0 .TP .FN ~/.history Default filename for reading and writing saved history .PD .SH "SEE ALSO" .PD 0 .TP \fIThe Gnu Readline Library\fP, Brian Fox and Chet Ramey .TP \fIThe Gnu History Library\fP, Brian Fox and Chet Ramey .TP \fIbash\fP(1) .TP \fIreadline\fP(3) .PD .SH AUTHORS Brian Fox, Free Software Foundation .br bfox@gnu.org .PP Chet Ramey, Case Western Reserve University .br chet.ramey@case.edu .SH BUG REPORTS If you find a bug in the .B history library, you should report it. But first, you should make sure that it really is a bug, and that it appears in the latest version of the .B history library that you have. .PP Once you have determined that a bug actually exists, mail a bug report to \fIbug\-readline\fP@\fIgnu.org\fP. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to \fPbug-readline\fP@\fIgnu.org\fP or posted to the Usenet newsgroup .BR gnu.bash.bug . .PP Comments and bug reports concerning this manual page should be directed to .IR chet.ramey@case.edu . readline-7.0/doc/texi2dvi000755 000436 000024 00000157655 12426421327 015503 0ustar00chetstaff000000 000000 #! /bin/sh # texi2dvi --- produce DVI (or PDF) files from Texinfo (or (La)TeX) sources. # $Id: texi2dvi 5704 2014-07-07 17:45:16Z karl $ # # Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 # Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 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, see . # # Originally written by Noah Friedman. # # Please send bug reports, etc. to bug-texinfo@gnu.org. # If possible, please send a copy of the output of the script called with # the `--debug' option when making a bug report. test -f /bin/ksh && test -z "$RUNNING_KSH" \ && { UNAMES=`uname -s`; test "x$UNAMES" = xULTRIX; } 2>/dev/null \ && { RUNNING_KSH=true; export RUNNING_KSH; exec /bin/ksh $0 ${1+"$@"}; } unset RUNNING_KSH # No failure shall remain unpunished. set -e # In case the default sed doesn't suffice. : ${SED=sed} # This string is expanded automatically when this file is checked out. rcs_revision='$Revision: 5704 $' rcs_version=`set - $rcs_revision; echo $2` program=`echo $0 | $SED -e 's!.*/!!'` build_mode=${TEXI2DVI_BUILD_MODE:-local} build_dir=${TEXI2DVI_BUILD_DIRECTORY:-.} # Initialize variables for option overriding and otherwise. # Don't use `unset' since old bourne shells don't have this command. # Instead, assign them an empty value. action=compile batch=false # interact normally catcode_special=maybe debug=false escape="\\" expand=false # true for expansion via makeinfo includes= line_error=true # pass --file-line-error to TeX max_iters=7 # when to quit oname= # --output out_lang=dvi quiet=false # let the tools' message be displayed set_language= src_specials= shell_escape= latex2html=hevea # or set to tex4ht textra= # Extra TeX commands to insert in the input file. txiprereq=19990129 # minimum texinfo.tex version with macro expansion verb=false # true for verbose mode translate_file= # name of charset translation file orig_pwd=`pwd` # We have to initialize IFS to space tab newline since we save and # restore IFS and apparently POSIX allows stupid/broken behavior with # empty-but-set IFS. # http://lists.gnu.org/archive/html/automake-patches/2006-05/msg00008.html # We need space, tab and new line, in precisely that order. And don't leave # trailing blanks. space=' ' tab=' ' newline=' ' IFS="$space$tab$newline" # In case someone pedantic insists on using grep -E. : ${EGREP=egrep} # Systems which define $COMSPEC or $ComSpec use semicolons to separate # directories in TEXINPUTS -- except for Cygwin et al., where COMSPEC # might be inherited, but : is used. if test -n "$COMSPEC$ComSpec" \ && uname | $EGREP -iv 'cygwin|mingw|djgpp' >/dev/null; then path_sep=";" else path_sep=":" fi # Pacify verbose cds. CDPATH=${ZSH_VERSION+.}$path_sep # If $TEX is set to a directory, don't use it. test -n "$TEX" && test -d "$TEX" && unset TEX # ## --------------------- ## ## Auxiliary functions. ## ## --------------------- ## # In case `local' is not supported by the shell, provide a function # that simulates it by simply performing the assignments. This means # that we must not expect `local' to work, i.e., we must not (i) rely # on it during recursion, and (ii) have two local declarations of the # same variable. (ii) is easy to check statically, and our test suite # does make sure there is never twice a static local declaration of a # variable. (i) cannot be checked easily, so just be careful. # # Note that since we might use a function simulating `local', we can # no longer rely on the fact that no IFS-splitting is performed. So, # while # # foo=$bar # # is fine (no IFS-splitting), never write # # local foo=$bar # # but rather # # local foo="$bar" ( foo=bar test_local () { local foo=foo } test_local >/dev/null 2>&1 test $foo = bar ) || eval ' local () { case $1 in *=*) eval "$1";; esac } ' # cd_orig # ------- # Return to the original directory. cd_orig () { # In case $orig_pwd is on a different drive (for DOS). cd / # Return to the original directory so that # - the next file is processed in correct conditions # - the temporary file can be removed cd "$orig_pwd" || exit 1 } # func_dirname FILE # ----------------- # Return the directory part of FILE. func_dirname () { dirname "$1" 2>/dev/null \ || { echo "$1" | $SED 's!/[^/]*$!!;s!^$!.!'; } } # noexit FILE # ----------- # Return FILE with one extension remove. foo.bar.baz -> foo.bar. noext () { echo "$1" | $SED -e 's/\.[^/.][^/.]*$//' } # absolute NAME -> ABS-NAME # ------------------------- # Return an absolute path to NAME. absolute () { case $1 in [\\/]* | ?:[\\/]*) # Absolute paths don't need to be expanded. echo "$1" ;; *) local slashes slashes=`echo "$1" | $SED -n 's,.*[^/]\(/*\)$,\1,p'` local rel rel=$orig_pwd/`func_dirname "$1"` if test -d "$rel"; then (cd "$rel" 2>/dev/null \ && local n n=`pwd`/`basename "$1"`"$slashes" echo "$n") else error 1 "not a directory: $rel" fi ;; esac } # ensure_dir DIR1 DIR2... # ----------------------- # Make sure the directories exist. ensure_dir () { for dir do # Beware that in parallel builds we may have several concurrent # attempts to create the directory. So fail only if "mkdir" # failed *and* the directory still does not exist. test -d "$dir" \ || mkdir "$dir" \ || test -d "$dir" \ || error 1 "cannot create directory: $dir" done } # error EXIT_STATUS LINE1 LINE2... # -------------------------------- # Report an error and exit with failure if EXIT_STATUS is non-null. error () { local s="$1" shift report "$@" if test "$s" != 0; then exit $s fi } # findprog PROG # ------------- # Return true if PROG is somewhere in PATH, else false. findprog () { local saveIFS="$IFS" IFS=$path_sep # break path components at the path separator for dir in $PATH; do IFS=$saveIFS # The basic test for an executable is `test -f $f && test -x $f'. # (`test -x' is not enough, because it can also be true for directories.) # We have to try this both for $1 and $1.exe. # # Note: On Cygwin and DJGPP, `test -x' also looks for .exe. On Cygwin, # also `test -f' has this enhancement, but not on DJGPP. (Both are # design decisions, so there is little chance to make them consistent.) # Thusly, it seems to be difficult to make use of these enhancements. # if { test -f "$dir/$1" && test -x "$dir/$1"; } \ || { test -f "$dir/$1.exe" && test -x "$dir/$1.exe"; }; then return 0 fi done return 1 } # report LINE1 LINE2... # --------------------- # Report some information on stderr. report () { for i in "$@" do echo >&2 "$0: $i" done } # run COMMAND-LINE # ---------------- # Run the COMMAND-LINE verbosely, and catching errors as failures. run () { verbose "Running $@" "$@" 2>&5 1>&2 \ || error 1 "$1 failed" } # usage # ----- # Display usage and exit successfully. usage () { # We used to simply have `echo "$usage"', but coping with the # changing behavior of `echo' is much harder than simply using a # here-doc. # # echo '\noto' echo '\\noto' echo -e '\\noto' # bash 3.1 \noto \\noto \noto # bash 3.2 %oto \noto -e \noto # # where % denotes the eol character. cat < General help using GNU software: EOF exit 0 } # verbose WORD1 WORD2 # ------------------- # Report some verbose information. verbose () { if $verb; then echo >&2 "$0: $@" fi } # version # ------- # Display version info and exit successfully. version () { cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit 0 } ## ---------------- ## ## Handling lists. ## ## ---------------- ## # list_append LIST-NAME ELEM # -------------------------- # Set LIST-NAME to its former contents, with ELEM appended. list_append () { local la_l="$1" shift eval set X \$$la_l "$@" shift eval $la_l=\""$@"\" } # list_concat_dirs LIST-NAME DIR-LIST # ----------------------------------- # Append to LIST-NAME all the components (included empty) from # the $path_sep separated list DIR-LIST. Make the paths absolute. list_concat_dirs () { local lcd_list="$1" # Empty path components are meaningful to tex. We rewrite them as # `EMPTY' so they don't get lost when we split on $path_sep. # Hopefully no one will have an actual directory named EMPTY. local replace_EMPTY="-e 's/^$path_sep/EMPTY$path_sep/g' \ -e 's/$path_sep\$/${path_sep}EMPTY/g' \ -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'" save_IFS=$IFS IFS=$path_sep set x `echo "$2" | eval $SED $replace_EMPTY`; shift IFS=$save_IFS local dir for dir do case $dir in EMPTY) list_append $lcd_list "" ;; *) if test -d $dir; then dir=`absolute "$dir"` list_append $lcd_list "$dir" fi ;; esac done } # list_prefix LIST-NAME SEP -> STRING # ----------------------------------- # Return a string that is composed of the LIST-NAME with each item # preceded by SEP. list_prefix () { local lp_p="$2" eval set X \$$1 shift local lp_res for i do lp_res="$lp_res \"$lp_p\" \"$i\"" done echo "$lp_res" } # list_infix LIST-NAME SEP -> STRING # ---------------------------------- # Same as list_prefix, but a separator. list_infix () { eval set X \$$1 shift local la_IFS="$IFS" IFS=$path_sep echo "$*" IFS=$la_IFS } # list_dir_to_abs LIST-NAME # ------------------------- # Convert the list to using only absolute dir names. # Currently unused, but should replace absolute_filenames some day. list_dir_to_abs () { local ld_l="$1" eval set X \$$ld_l shift local ld_res for dir do dir=`absolute "$dir"` test -d "$dir" || continue ld_res="$ld_res \"$dir\"" done set X $ld_res; shift eval $ld_l=\"$@\" } ## ------------------------------ ## ## Language auxiliary functions. ## ## ------------------------------ ## # out_lang_set LANG # ----------------- out_lang_set () { case $1 in dvi|dvipdf|html|info|pdf|ps|text) out_lang=$1;; *) error 1 "invalid output format: $1";; esac } # out_lang_tex # ------------ # Return the tex output language (DVI or PDF) for $OUT_LANG. out_lang_tex () { case $out_lang in dvi | ps | dvipdf ) echo dvi;; pdf ) echo $out_lang;; html | info | text ) echo $out_lang;; *) error 1 "invalid out_lang: $1";; esac } # out_lang_ext # ------------ # Return the extension for $OUT_LANG. out_lang_ext () { case $out_lang in dvipdf ) echo pdf;; dvi | html | info | pdf | ps | text ) echo $out_lang;; *) error 1 "invalid out_lang: $1";; esac } ## ------------------------- ## ## TeX auxiliary functions. ## ## ------------------------- ## # Save TEXINPUTS so we can construct a new TEXINPUTS path for each file. # Likewise for bibtex and makeindex. tex_envvars="BIBINPUTS BSTINPUTS DVIPSHEADERS INDEXSTYLE MFINPUTS MPINPUTS \ TEXINPUTS TFMFONTS" for var in $tex_envvars; do eval ${var}_orig=\$$var export $var done # absolute_filenames TEX-PATH -> TEX-PATH # --------------------------------------- # Convert relative paths to absolute paths, so we can run in another # directory (e.g., in tidy build mode, or during the macro-support # detection). Prepend ".". absolute_filenames () { # Empty path components are meaningful to tex. We rewrite them as # `EMPTY' so they don't get lost when we split on $path_sep. # Hopefully no one will have an actual directory named EMPTY. local replace_empty="-e 's/^$path_sep/EMPTY$path_sep/g' \ -e 's/$path_sep\$/${path_sep}EMPTY/g' \ -e 's/$path_sep$path_sep/${path_sep}EMPTY:/g'" local res res=`echo "$1" | eval $SED $replace_empty` save_IFS=$IFS IFS=$path_sep set x $res; shift res=. for dir do case $dir in EMPTY) res=$res$path_sep ;; *) if test -d "$dir"; then res=$res$path_sep`absolute "$dir"` else # Even if $dir is not a directory, preserve it in the path. # It might contain metacharacters that TeX will expand in # turn, e.g., /some/path/{a,b,c}. This will not get the # implicit absolutification of the path, but we can't help that. res=$res$path_sep$dir fi ;; esac done echo "$res" } # output_base_name FILE # --------------------- # The name of FILE, possibly renamed to satisfy --output. # FILE is local, there is no directory part. output_base_name () { case $oname in '') echo "$1";; *) local out_noext out_noext=`noext "$oname"` local file_ext file_ext=`echo "$1" | $SED 's/^.*\.//'` echo "$out_noext.$file_ext" ;; esac } # destdir # ------- # Return the name of the directory where the output is expected. destdir () { case $oname in '') echo "$orig_pwd";; *) dirname "$oname";; esac } # move_to_dest FILE... # -------------------- # Move FILE to the place where the user expects it. Truly move it, that # is, it must not remain in its build location unless that is also the # output location. (Otherwise it might appear as an extra file in make # distcheck.) # # FILE can be the principal output (in which case -o directly applies), or # an auxiliary file with the same base name. move_to_dest () { # echo "move_to_dest $*, tidy=$tidy, oname=$oname" # If we built in place and have no output name, there is nothing to # do, so just return. case $tidy:$oname in false:) return;; esac local destfile local destdir local destbase local sourcedir local sourcebase for file do test -f "$file" \ || error 1 "no such file or directory: $file" case $tidy:$oname in true:) destdir=$orig_pwd destfile=$destdir/$file;; true:*) destfile=`output_base_name "$file"` destdir=`dirname "$destfile"`;; false:*) destfile=$oname destdir=`dirname "$destfile"`;; esac # We want to compare the source location and the output location, # and if they are different, do the move. But if they are the # same, we must preserve the source. Since we can't assume # stat(1) or test -ef is available, resort to comparing the # directory names, canonicalized with pwd. We can't use cmp -s # since the output file might not actually change from run to run; # e.g., TeX DVI output is timestamped to only the nearest minute. destdir=`cd "$destdir" && pwd` destbase=`basename "$destfile"` sourcedir=`dirname "$file"` sourcedir=`cd "$sourcedir" && pwd` sourcebase=`basename "$file"` if test "$sourcedir/$sourcebase" != "$destdir/$destbase"; then verbose "Moving $file to $destfile" rm -f "$destfile" mv "$file" "$destfile" fi done } ## --------------------- ## ## Managing xref files. ## ## --------------------- ## # aux_file_p FILE # --------------- # Return with success if FILE is an aux file. aux_file_p () { test -f "$1" || return 1 case $1 in *.aux) return 0;; *) return 1;; esac } # bibaux_file_p FILE # ------------------ # Return with success if FILE is an aux file containing citation # requests. bibaux_file_p () { test -s "$1" || return 1 if (grep '^\\bibstyle[{]' "$1" \ && grep '^\\bibdata[{]' "$1" \ ## The following line is suspicious: fails when there ## are citations in sub aux files. We need to be ## smarter in this case. ## && grep '^\\citation[{]' "$f" ) >&6 2>&1; then return 0 fi return 1 } # index_file_p FILE # ----------------- # Return with success if FILE is an index file. index_file_p () { test -f "$1" || return 1 case $in_lang:$latex2html:`out_lang_tex`:`$SED '1q' "$1"` in # When working with TeX4HT, *.idx are created by LaTeX. They must # be processed to produce *.4ix, *.4dx files. The *.4dx file is # passed to makeindex to produce the *.ind file. This sequence is # handled by run_index, so we are only interested in the *.idx # files, which have each "\indexentry" preceded by a # "\beforeentry". latex:tex4ht:html:"\\beforeentry {"*) return 0;; # When index.sty is used, there is a space before the brace. latex:*:*:"\\indexentry{"*|latex:*:*:"\\indexentry {"*) return 0;; texinfo:*:*:"\\entry{"*) return 0;; *) return 1;; esac } # xref_file_p FILE # ---------------- # Return with success if FILE is an xref file (indexes, tables and lists). xref_file_p () { test -f "$1" || return 1 # If the file is not suitable to be an index or xref file, don't # process it. It's suitable if the first character is a # backslash or right quote or at, as long as the first line isn't # \input texinfo. case `$SED '1q' "$1"` in "\\input texinfo"*) return 1;; [\\''@]*) return 0;; *) return 1;; esac } # generated_files_get FILENAME-NOEXT [PREDICATE-FILTER] # ----------------------------------------------------- # Return the list of files generated by the TeX compilation of FILENAME-NOEXT. generated_files_get () { local filter=true if test -n "$2"; then filter=$2 fi # Gather the files created by TeX. ( if test -f "$1.log"; then $SED -n -e "s,^\\\\openout.* = \`\\(.*\\)'\\.,\\1,p" "$1.log" fi echo "$1.log" ) | # Depending on these files, infer outputs from other tools. while read file; do echo $file case $in_lang in texinfo) # texindex: texinfo.cp -> texinfo.cps if index_file_p $file; then echo ${file}s fi ;; latex) if aux_file_p $file; then # bibtex: *.aux -> *.bbl and *.blg. echo $file | $SED 's/^\(.*\)\.aux$/\1.bbl/' echo $file | $SED 's/^\(.*\)\.aux$/\1.blg/' # -recorder: .fls echo $file | $SED 's/^\(.*\)\.aux$/\1.fls/' fi ;; esac done | # Filter existing files matching the criterion. # # With an input file name containing a space, this produces a # "command not found" message (and filtering is ineffective). # The situation with a newline is presumably even worse. while read file; do if $filter "$file"; then echo $file fi done | sort | # Some files are opened several times, e.g., listings.sty's *.vrb. uniq } # xref_files_save # --------------- # Save the xref files. xref_files_save () { # Save copies of auxiliary files for later comparison. xref_files_orig=`generated_files_get "$in_noext" xref_file_p` if test -n "$xref_files_orig"; then verbose "Backing up xref files: $xref_files_orig" # The following line improves `cp $xref_files_orig "$work_bak"' # by preserving the directory parts. Think of # cp chap1/main.aux chap2/main.aux $work_bak. # # Users may have, e.g., --keep-old-files. Don't let this interfere. # (Don't use unset for the sake of ancient shells.) TAR_OPTIONS=; export TAR_OPTIONS tar cf - $xref_files_orig | (cd "$work_bak" && tar xf -) fi } # xref_files_changed # ------------------ # Whether the xref files were changed since the previous run. xref_files_changed () { # LaTeX (and the package changebar) report in the LOG file if it # should be rerun. This is needed for files included from # subdirs, since texi2dvi does not try to compare xref files in # subdirs. Performing xref files test is still good since LaTeX # does not report changes in xref files. if grep "Rerun to get" "$in_noext.log" >&6 2>&1; then return 0 fi # biblatex report of whether rerunning is needed. if grep "biblatex.*(re)run" "$in_noext.log" >&6 2>&1; then return 0 fi # If old and new lists don't have the same file list, # then something has definitely changed. xref_files_new=`generated_files_get "$in_noext" xref_file_p` verbose "Original xref files = $xref_files_orig" verbose "New xref files = $xref_files_new" if test "x$xref_files_orig" != "x$xref_files_new"; then return 0 fi # Compare each file until we find a difference. for this_file in $xref_files_new; do verbose "Comparing xref file `echo $this_file | $SED 's|\./||g'` ..." # cmp -s returns nonzero exit status if files differ. if cmp -s "$this_file" "$work_bak/$this_file"; then :; else verbose "xref file `echo $this_file | $SED 's|\./||g'` differed ..." if $debug; then diff -u "$work_bak/$this_file" "$this_file" fi return 0 fi done # No change. return 1 } ## ----------------------- ## ## Running the TeX suite. ## ## ----------------------- ## # run_tex () # ---------- # Run TeX as "$tex $in_input", taking care of errors and logs. run_tex () { case $in_lang:$latex2html:`out_lang_tex` in latex:*:dvi|latex:tex4ht:html) tex=${LATEX:-latex};; latex:*:pdf) tex=${PDFLATEX:-pdflatex};; texinfo:*:dvi) # MetaPost also uses the TEX environment variable. If the user # has set TEX=latex for that reason, don't bomb out. case $TEX in *latex) tex=tex;; # don't bother trying to find etex *) tex=$TEX esac;; texinfo:*:pdf) tex=$PDFTEX;; *) error 1 "$out_lang not supported for $in_lang";; esac # do the special catcode trick for ~ in filenames only for Texinfo, # not LaTeX. if test x"$in_lang" = xtexinfo && test $catcode_special = maybe; then catcode_special=true else catcode_special=false fi # Beware of aux files in subdirectories that require the # subdirectory to exist. case $in_lang:$tidy in latex:true) $SED -n 's|^[ ]*\\include{\(.*\)/.*}.*|\1|p' "$in_input" | sort -u | while read d do ensure_dir "$work_build/$d" done ;; esac # Note that this will be used via an eval: quote properly. local cmd="$tex" # If possible, make TeX report error locations in GNU format. if $line_error; then if test "${tex_help:+set}" != set; then # Go to a temporary directory to try --help, since old versions that # don't accept --help will generate a texput.log. tex_help_dir=$t2ddir/tex_help ensure_dir "$tex_help_dir" tex_help=`cd "$tex_help_dir" >&6 && $tex --help &1 || true` fi # The mk program and perhaps others want to parse TeX's # original error messages. case $tex_help in *file-line-error*) cmd="$cmd --file-line-error";; esac fi # Tell TeX about TCX file, if specified. test -n "$translate_file" && cmd="$cmd --translate-file=$translate_file" # Tell TeX to make source specials (for backtracking from output to # source, given a sufficiently smart editor), if specified. test -n "$src_specials" && cmd="$cmd $src_specials" # Tell TeX to allow running external executables test -n "$shell_escape" && cmd="$cmd $shell_escape" # Tell TeX to be batch if requested. if $batch; then # \batchmode does not show terminal output at all, so we don't # want that. And even in batch mode, TeX insists on having input # from the user. Close its stdin to make it impossible. cmd="$cmd &5; then case $out_lang in dvi | pdf ) move_to_dest "$in_noext.$out_lang";; esac else error 1 "$tex exited with bad status, quitting." fi } # run_bibtex () # ------------- # Run bibtex on (or biber) current file. # - If its input (AUX) exists. # - If some citations are missing (LOG contains `Citation'). # or the LOG complains of a missing .bbl # # Don't try to be too smart: # 1. Running bibtex only if the bbl file exists and is older than # the LaTeX file is wrong, since the document might include files # that have changed. # # 3. Because there can be several AUX (if there are \include's), # but a single LOG, looking for missing citations in LOG is # easier, though we take the risk of matching false messages. run_bibtex () { case $in_lang in latex) bibtex=${BIBTEX:-bibtex};; texinfo) return;; esac # "Citation undefined" is for LaTeX, "Undefined citation" for btxmac.tex. # The no .aux && \bibdata test is also for btxmac, in case it was the # first run of a bibtex-using document. Otherwise, it's possible that # bibtex would never be run. if test -r "$in_noext.aux" \ && test -r "$in_noext.log" \ && ( (grep 'Warning:.*Citation.*undefined' "$in_noext.log" \ || grep '.*Undefined citation' "$in_noext.log" \ || grep 'No file .*\.bbl\.' "$in_noext.log") \ || (grep 'No \.aux file' "$in_noext.log" \ && grep '^\\bibdata' "$in_noext.aux") ) \ >&6 2>&1; \ then bibtex_aux=`generated_files_get "$in_noext" bibaux_file_p` for f in $bibtex_aux; do run $bibtex "$f" done fi # biber(+biblatex) check. if test -r "$in_noext.bcf" \ && grep '' "$in_noext.bcf" >/dev/null; then run ${BIBER:-biber} "$in_noext" fi } # run_index () # ------------ # Run texindex (or makeindex or texindy) on current index files. If # they already exist, and after running TeX a first time the index # files don't change, then there's no reason to run TeX again. But we # won't know that if the index files are out of date or nonexistent. run_index () { local index_files index_files=`generated_files_get $in_noext index_file_p` test -n "$index_files" \ || return 0 : ${MAKEINDEX:=makeindex} : ${TEXINDEX:=texindex} : ${TEXINDY:=texindy} local index_file local index_noext case $in_lang:$latex2html:`out_lang_tex` in latex:tex4ht:html) for index_file in $index_files do index_noext=`noext "$index_file"` run tex \ '\def\filename{{'"$index_noext"'}{idx}{4dx}{ind}} \input idxmake.4ht' run $MAKEINDEX -o $index_noext.ind $index_noext.4dx done ;; latex:*) if $TEXINDY --version >&6 2>&1; then run $TEXINDY $index_files else run $MAKEINDEX $index_files fi ;; texinfo:*) run $TEXINDEX $index_files ;; esac } # run_tex4ht () # ------------- # Run the last two phases of TeX4HT: tex4ht extracts the HTML from the # instrumented DVI file, and t4ht converts the figures and installs # the files when given -d. # # Because knowing exactly which files are created is complex (in # addition the names are not simple to compute), which makes it # difficult to install the output files in a second step, it is much # simpler to install directly the output files. run_tex4ht () { case $in_lang:$latex2html:`out_lang_tex` in latex:tex4ht:html) : ${TEX4HT:=tex4ht} ${T4HT:=t4ht} run "$TEX4HT" "-f/$in_noext" # Do not remove the / after the destdir. run "$T4HT" "-d`destdir`/" "-f/$in_noext" ;; esac } # run_thumbpdf () # --------------- run_thumbpdf () { if test `out_lang_tex` = pdf \ && test -r "$in_noext.log" \ && grep 'thumbpdf\.sty' "$in_noext.log" >&6 2>&1; \ then thumbpdf=${THUMBPDF_CMD:-thumbpdf} thumbcmd="$thumbpdf $in_dir/$in_noext" verbose "Running $thumbcmd ..." if $thumbcmd >&5; then run_tex else report "$thumbpdf exited with bad status." \ "Ignoring its output." fi fi } # run_dvipdf FILE.dvi # ------------------- # Convert FILE.dvi to FILE.pdf. run_dvipdf () { # Find which dvi->pdf program is available. if test -z "$dvipdf"; then for i in "$DVIPDF" dvipdfmx dvipdfm dvipdf dvi2pdf dvitopdf; do if findprog $i; then dvipdf=$i fi done fi # These tools have varying interfaces, some 'input output', others # 'input -o output'. They all seem to accept 'input' only, # outputting using the expected file name. run $dvipdf "$1" if test ! -f `echo "$1" | $SED -e 's/\.dvi$/.pdf/'`; then error 1 "cannot find output file" fi } # run_tex_suite () # ---------------- # Run the TeX tools until a fix point is reached. run_tex_suite () { # Move to the working directory. if $tidy; then verbose "cd $work_build" cd "$work_build" || exit 1 fi # Count the number of cycles. local cycle=0 while :; do # check for probably LaTeX loop (e.g. varioref) if test $cycle -eq "$max_iters"; then error 0 "Maximum of $max_iters cycles exceeded" break fi # report progress cycle=`expr $cycle + 1` verbose "Cycle $cycle for $command_line_filename" xref_files_save # We run bibtex first, because it's more likely for the indexes # to change after bibtex is run than the reverse, though either # would be rare. run_bibtex run_index run_core_conversion xref_files_changed || break done # If we were using thumbpdf and producing PDF, then run thumbpdf # and TeX one last time. run_thumbpdf # If we are using tex4ht, call it. run_tex4ht # Install the result if we didn't already (i.e., if the output is # dvipdf or ps). case $latex2html:$out_lang in *:dvipdf) run_dvipdf "$in_noext.`out_lang_tex`" move_to_dest "$in_noext.`out_lang_ext`" ;; *:ps) : ${DVIPS:=dvips} run $DVIPS -o "$in_noext.`out_lang_ext`" "$in_noext.`out_lang_tex`" move_to_dest "$in_noext.`out_lang_ext`" ;; esac cd_orig } ## -------------------------------- ## ## TeX processing auxiliary tools. ## ## -------------------------------- ## # A sed script that preprocesses Texinfo sources in order to keep the # iftex sections only. We want to remove non-TeX sections, and comment # (with `@c _texi2dvi') TeX sections so that makeinfo does not try to # parse them. Nevertheless, while commenting TeX sections, don't # comment @macro/@end macro so that makeinfo does propagate them. # Unfortunately makeinfo --iftex --no-ifinfo doesn't work well enough # (yet), makeinfo can't parse the TeX commands, so work around with sed. # # We assume that `@c _texi2dvi' starting a line is not present in the # document. # comment_iftex=\ '/^@tex/,/^@end tex/{ s/^/@c _texi2dvi/ } /^@iftex/,/^@end iftex/{ s/^/@c _texi2dvi/ /^@c _texi2dvi@macro/,/^@c _texi2dvi@end macro/{ s/^@c _texi2dvi// } } /^@ifnottex/,/^@end ifnottex/{ s/^/@c (_texi2dvi)/ } /^@ifinfo/,/^@end ifinfo/{ /^@node/p /^@menu/,/^@end menu/p t s/^/@c (_texi2dvi)/ } s/^@ifnotinfo/@c _texi2dvi@ifnotinfo/ s/^@end ifnotinfo/@c _texi2dvi@end ifnotinfo/' # Uncommenting is simpler: remove any leading `@c texi2dvi'; repeated # copies can sneak in via macro invocations. uncomment_iftex='s/^@c _texi2dvi\(@c _texi2dvi\)*//' # run_makeinfo () # --------------- # Expand macro commands in the original source file using Makeinfo. # Always use `end' footnote style, since the `separate' style # generates different output (arguably this is a bug in -E). Discard # main info output, the user asked to run TeX, not makeinfo. run_makeinfo () { test $in_lang = texinfo \ || return 0 # Unless required by the user, makeinfo expansion is wanted only # if texinfo.tex is too old. if $expand; then makeinfo=${MAKEINFO:-makeinfo} else # Check if texinfo.tex performs macro expansion by looking for # its version. The version is a date of the form YEAR-MO-DA. # We don't need to use [0-9] to match the digits since anyway # the comparison with $txiprereq, a number, will fail with non-digits. # Run in a temporary directory to avoid leaving files. version_test_dir=$t2ddir/version_test ensure_dir "$version_test_dir" if ( cd "$version_test_dir" echo '\input texinfo.tex @bye' >txiversion.tex # Be sure that if tex wants to fail, it is not interactive: # close stdin. $TEX txiversion.tex txiversion.out 2>txiversion.err ); then :; else report "texinfo.tex appears to be broken. This may be due to the environment variable TEX set to something other than (plain) tex, a corrupt texinfo.tex file, or to tex itself simply not working." cat "$version_test_dir/txiversion.out" cat "$version_test_dir/txiversion.err" >&2 error 1 "quitting." fi eval `$SED -n 's/^.*\[\(.*\)version \(....\)-\(..\)-\(..\).*$/txiformat=\1 txiversion="\2\3\4"/p' "$version_test_dir/txiversion.out"` verbose "texinfo.tex preloaded as \`$txiformat', version is \`$txiversion' ..." if test "$txiprereq" -le "$txiversion" >&6 2>&1; then makeinfo= else makeinfo=${MAKEINFO:-makeinfo} fi # If TeX is preloaded, offer the user this convenience: if test "$txiformat" = Texinfo; then escape=@ fi fi if test -n "$makeinfo"; then # in_src: the file with macros expanded. # Use the same basename to generate the same aux file names. work_src=$workdir/src ensure_dir "$work_src" in_src=$work_src/$in_base local miincludes miincludes=`list_prefix includes -I` verbose "Macro-expanding $command_line_filename to $in_src ..." # eval $makeinfo because it might be defined as something complex # (running missing) and then we end up with things like '"-I"', # and "-I" (including the quotes) is not an option name. This # happens with gettext 0.14.5, at least. $SED "$comment_iftex" "$command_line_filename" \ | eval $makeinfo --footnote-style=end -I "$in_dir" $miincludes \ -o /dev/null --macro-expand=- \ | $SED "$uncomment_iftex" >"$in_src" # Continue only if everything succeeded. if test $? -ne 0 \ || test ! -r "$in_src"; then verbose "Expansion failed, ignored..."; else in_input=$in_src fi fi } # insert_commands () # ------------------ # Used most commonly for @finalout, @smallbook, etc. insert_commands () { if test -n "$textra"; then # _xtr. The file with the user's extra commands. work_xtr=$workdir/xtr in_xtr=$work_xtr/$in_base ensure_dir "$work_xtr" verbose "Inserting extra commands: $textra" local textra_cmd case $in_lang in latex) textra_cmd=1i;; texinfo) textra_cmd='/^@setfilename/a';; *) error 1 "internal error, unknown language: $in_lang";; esac $SED "$textra_cmd\\ $textra" "$in_input" >"$in_xtr" in_input=$in_xtr fi case $in_lang:$latex2html:`out_lang_tex` in latex:tex4ht:html) # _tex4ht. The file with the added \usepackage{tex4ht}. work_tex4ht=$workdir/tex4ht in_tex4ht=$work_tex4ht/$in_base ensure_dir "$work_tex4ht" verbose "Inserting \\usepackage{tex4ht}" perl -pe 's<\\documentclass(?:\[.*\])?{.*}> <$&\\usepackage[xhtml]{tex4ht}>' \ "$in_input" >"$in_tex4ht" in_input=$in_tex4ht ;; esac } # compute_language FILENAME # ------------------------- # Return the short string describing the language in which FILENAME # is written: `texinfo' or `latex'. compute_language () { # If the user explicitly specified the language, use that. # Otherwise, if the first line is \input texinfo, assume it's texinfo. # Otherwise, guess from the file extension. if test -n "$set_language"; then echo $set_language elif $SED 1q "$1" | grep 'input texinfo' >&6; then echo texinfo else # Get the type of the file (latex or texinfo) from the given language # we just guessed, or from the file extension if not set yet. case $1 in *.ltx | *.tex | *.drv | *.dtx) echo latex;; *) echo texinfo;; esac fi } # run_hevea (MODE) # ---------------- # Convert to HTML/INFO/TEXT. # # Don't pass `-noiso' to hevea: it's useless in HTML since anyway the # charset is set to latin1, and troublesome in other modes since # accented characters loose their accents. # # Don't pass `-o DEST' to hevea because in that case it leaves all its # auxiliary files there too... Too bad, because it means we will need # to handle images some day. run_hevea () { local hevea="${HEVEA:-hevea}" local run_hevea="$hevea" case $1 in html) ;; text|info) run_hevea="$run_hevea -$1";; *) error 1 "run_hevea: invalid argument: $1";; esac # Compiling to the tmp directory enables to preserve a previous # successful compilation. run_hevea="$run_hevea -fix -O -o '$out_base'" run_hevea="$run_hevea `list_prefix includes -I` -I '$orig_pwd' " run_hevea="$run_hevea '$in_input'" if $debug; then run_hevea="$run_hevea -v -v" fi verbose "running $run_hevea" if eval "$run_hevea" >&5; then # hevea leaves trailing white spaces, this is annoying. case $1 in text|info) perl -pi -e 's/[ \t]+$//g' "$out_base"*;; esac case $1 in html|text) move_to_dest "$out_base";; info) # There can be foo.info-1, foo.info-2 etc. move_to_dest "$out_base"*;; esac else error 1 "$hevea exited with bad status, quitting." fi } # run_core_conversion () # ---------------------- # Run the TeX (or HeVeA). run_core_conversion () { case $in_lang:$latex2html:`out_lang_tex` in *:dvi|*:pdf|latex:tex4ht:html) run_tex;; latex:*:html|latex:*:text|latex:*:info) run_hevea $out_lang;; *) error 1 "invalid input/output combination: $in_lang/$out_lang";; esac } # compile () # ---------- # Run the full compilation chain, from pre-processing to installation # of the output at its expected location. compile () { # Source file might include additional sources. # We want `.:$orig_pwd' before anything else. (We'll add `.:' later # after all other directories have been turned into absolute paths.) # `.' goes first to ensure that any old .aux, .cps, # etc. files in ${directory} don't get used in preference to fresher # files in `.'. Include orig_pwd in case we are in clean build mode, where # we have cd'd to a temp directory. common="$orig_pwd$path_sep$in_dir$path_sep" # # If we have any includes, put those at the end. # Keep a final path_sep to get the default (system) TeX directories included. txincludes=`list_infix includes $path_sep` test -n "$txincludes" && common="$common$txincludes$path_sep" # for var in $tex_envvars; do eval val="\$common\$${var}_orig" # Convert relative paths to absolute paths, so we can run in another # directory (e.g., in clean build mode, or during the macro-support # detection). ".:" is added here. val=`absolute_filenames "$val"` eval $var="\"$val\"" export $var eval verbose \"$var=\'\$${var}\'\" done # --expand run_makeinfo # --command, --texinfo insert_commands # Run until a fix point is reached. run_tex_suite } # remove FILES # ------------ remove () { verbose "Removing" "$@" rm -rf "$@" } # mostly_clean # ------------ # Remove auxiliary files and directories. Changes the current directory. mostly_clean () { cd_orig set X "$t2ddir" shift $tidy || { local log="$work_build/$in_noext.log" set X ${1+"$@"} "$log" `generated_files_get "$work_build/$in_noext"` shift } remove ${1+"$@"} } # cleanup () # ---------- # Remove what should be removed according to options. # Called at the end of each compilation cycle, and at the end of # the script. Changes the current directory. cleanup () { case $build_mode in local) cd_orig; remove "$t2ddir";; clean) mostly_clean;; tidy) ;; esac } ## ---------------------- ## ## Command line parsing. ## ## ---------------------- ## # Push a token among the arguments that will be used to notice when we # ended options/arguments parsing. # Use "set dummy ...; shift" rather than 'set - ..." because on # Solaris set - turns off set -x (but keeps set -e). # Use ${1+"$@"} rather than "$@" because Digital Unix and Ultrix 4.3 # still expand "$@" to a single argument (the empty string) rather # than nothing at all. arg_sep="$$--$$" set dummy ${1+"$@"} "$arg_sep"; shift # # Parse command line arguments. while test x"$1" != x"$arg_sep"; do # Handle --option=value by splitting apart and putting back on argv. case "$1" in --*=*) opt=`echo "$1" | $SED -e 's/=.*//'` val=`echo "$1" | $SED -e 's/[^=]*=//'` shift set dummy "$opt" "$val" ${1+"$@"}; shift ;; esac case "$1" in -@ ) escape=@;; -~ ) catcode_special=false;; # Silently and without documentation accept -b and --b[atch] as synonyms. -b | --batch) batch=true;; --build) shift; build_mode=$1;; --build-dir) shift; build_dir=$1; build_mode=tidy;; -c | --clean) build_mode=clean;; -D | --debug) debug=true;; -e | -E | --expand) expand=true;; -h | --help) usage;; -I) shift; list_concat_dirs includes "$1";; -l | --lang | --language) shift; set_language=$1;; --mostly-clean) action=mostly-clean;; --no-line-error) line_error=false;; --max-iterations) shift; max_iters=$1;; -o | --out | --output) shift # Make it absolute, just in case we also have --clean, or whatever. oname=`absolute "$1"`;; # Output formats. -O|--output-format) shift; out_lang_set "$1";; --dvi|--dvipdf|--html|--info|--pdf|--ps|--text) out_lang_set `echo "x$1" | $SED 's/^x--//'`;; -p) out_lang_set pdf;; -q | -s | --quiet | --silent) quiet=true; batch=true;; --src-specials) src_specials=--src-specials;; --shell-escape) shell_escape=--shell-escape;; --tex4ht) latex2html=tex4ht;; -t | --texinfo | --command ) shift; textra="$textra\\ "`echo "$1" | $SED 's/\\\\/\\\\\\\\/g'`;; --translate-file ) shift; translate_file="$1";; --tidy) build_mode=tidy;; -v | --vers*) version;; -V | --verb*) verb=true;; --) # What remains are not options. shift while test x"$1" != x"$arg_sep"; do set dummy ${1+"$@"} "$1"; shift shift done break;; -*) error 1 "Unknown or ambiguous option \`$1'." \ "Try \`--help' for more information." ;; *) set dummy ${1+"$@"} "$1"; shift;; esac shift done # Pop the token shift # $tidy: compile in a t2d directory. # $clean: remove all the aux files. case $build_mode in local) clean=false; tidy=false;; tidy) clean=false; tidy=true;; clean) clean=true; tidy=true;; *) error 1 "invalid build mode: $build_mode";; esac # Interpret remaining command line args as filenames. case $# in 0) error 2 "Missing file arguments." "Try \`--help' for more information." ;; 1) ;; *) if test -n "$oname"; then error 2 "Can't use option \`--output' with more than one argument." fi ;; esac # We can't do much without tex. # if findprog ${TEX:-tex}; then :; else cat </dev/null else exec 5>&1 fi # Enable tracing, and auxiliary tools output. # # This fd should be used where you'd typically use /dev/null to throw # output away. But sometimes it is convenient to see that output (e.g., # from a grep) to aid debugging. Especially debugging at distance, via # the user. # if $debug; then exec 6>&1 set -vx else exec 6>/dev/null fi # # input_file_name_decode # ---------------------- # Decode COMMAND_LINE_FILENAME, and compute: # - COMMAND_LINE_FILENAME clean of TeX commands # - IN_DIR # The directory to the input file, possibly absolute if needed. # - IN_DIR_ABS # The absolute directory of the input file. # - IN_BASE # The input file base name (no directory part). # - IN_NOEXT # The input file name without extensions (nor directory part). # - IN_INPUT # Defaults to COMMAND_LINE_FILENAME, but might change if the # input is preprocessed. With directory, possibly absolute. input_file_name_decode () { # See if we are run from within AUC-Tex, in which case we are # passed `\input{FOO.tex}' or even `\nonstopmode\input{FOO.tex}'. case $command_line_filename in *\\nonstopmode*) batch=true;; esac case $command_line_filename in *\\input{*}*) # Let AUC-TeX error parser deal with line numbers. line_error=false command_line_filename=`\ expr X"$command_line_filename" : X'.*input{\([^}]*\)}'` ;; esac # If the COMMAND_LINE_FILENAME is not absolute (e.g., --debug.tex), # prepend `./' in order to avoid that the tools take it as an option. echo "$command_line_filename" | LC_ALL=C $EGREP '^(/|[A-Za-z]:/)' >&6 \ || command_line_filename="./$command_line_filename" # See if the file exists. If it doesn't we're in trouble since, even # though the user may be able to reenter a valid filename at the tex # prompt (assuming they're attending the terminal), this script won't # be able to find the right xref files and so forth. test -r "$command_line_filename" \ || error 1 "cannot read $command_line_filename, skipping." # Get the name of the current directory. in_dir=`func_dirname "$command_line_filename"` in_dir_abs=`absolute "$in_dir"` # In a clean build, we `cd', so get an absolute file name. if $tidy; then in_dir=$in_dir_abs fi # Strip directory part but leave extension. in_base=`basename "$command_line_filename"` # Strip extension. in_noext=`noext "$in_base"` # The normalized file name to compile. Must always point to the # file to actually compile (in case of recoding, macro-expansion etc.). in_input=$in_dir/$in_base # Compute the output file name. if test x"$oname" != x; then out_name=$oname else out_name=$in_noext.`out_lang_ext` fi out_dir=`func_dirname "$out_name"` out_dir_abs=`absolute "$out_dir"` out_base=`basename "$out_name"` out_noext=`noext "$out_base"` } ## -------------- ## ## TeXify files. ## ## -------------- ## for command_line_filename do verbose "Processing $command_line_filename ..." input_file_name_decode # `texinfo' or `latex'? in_lang=`compute_language "$command_line_filename"` # An auxiliary directory used for all the auxiliary tasks involved # in compiling this document. case $build_dir in '' | . ) t2ddir=$out_noext.t2d ;; *) # Avoid collisions between multiple occurrences of the same # file, so depend on the output path. Remove leading `./', # at least to avoid creating a file starting with `.!', i.e., # an invisible file. The sed expression is fragile if the cwd # has active characters. Transform / into ! so that we don't # need `mkdir -p'. It might be something to reconsider. t2ddir=$build_dir/`echo "$out_dir_abs/$out_noext.t2d" | $SED "s,^$orig_pwd/,,;s,^\./,,;s,/,!,g"` esac # Remove it at exit if clean mode. trap "cleanup" 0 1 2 15 ensure_dir "$build_dir" "$t2ddir" # We will change directory, better work with an absolute path... t2ddir=`absolute "$t2ddir"` # Sometimes there are incompatibilities between auxiliary files for # DVI and PDF. The contents can also change whether we work on PDF # and/or DVI. So keep separate spaces for each. workdir=$t2ddir/`out_lang_tex` ensure_dir "$workdir" # _build. In a tidy build, where the auxiliary files are output. if $tidy; then work_build=$workdir/build else work_build=. fi # _bak. Copies of the previous auxiliary files (another round is # run if they differ from the new ones). work_bak=$workdir/bak # Make those directories. ensure_dir "$work_build" "$work_bak" case $action in compile) # Compile the document. compile cleanup ;; mostly-clean) mostly_clean ;; esac done verbose "done." exit 0 # exit successfully, not however we ended the loop. readline-7.0/doc/texi2html000755 000436 000000 00000424554 11050552171 015645 0ustar00chetwheel000000 000000 #! /usr/bin/perl 'di '; 'ig 00 '; #+############################################################################## # # texi2html: Program to transform Texinfo documents to HTML # # Copyright (C) 1999, 2000 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 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, see . # #-############################################################################## # This requires perl version 5 or higher require 5.0; #++############################################################################## # # NOTE FOR DEBUGGING THIS SCRIPT: # You can run 'perl texi2html.pl' directly, provided you have # the environment variable T2H_HOME set to the directory containing # the texi2html.init file # #--############################################################################## # CVS version: # $Id: texi2html.pl,v 1.55 2000/07/27 14:39:41 obachman Exp $ # Homepage: $T2H_HOMEPAGE = < (original author) Karl Berry Olaf Bachmann and many others. Maintained by: Olaf Bachmann Send bugs and suggestions to EOT # Version: set in configure.in $THISVERSION = '1.64'; $THISPROG = "texi2html $THISVERSION"; # program name and version # The man page for this program is included at the end of this file and can be # viewed using the command 'nroff -man texi2html'. # Identity: $T2H_TODAY = &pretty_date; # like "20 September 1993" # the eval prevents this from breaking on system which do not have # a proper getpwuid implemented eval { ($T2H_USER = (getpwuid ($<))[6]) =~ s/,.*//;}; # Who am i #+++############################################################################ # # # Initialization # # Pasted content of File $(srcdir)/texi2html.init: Default initializations # # # #---############################################################################ # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init # exists. # # -*-perl-*- ###################################################################### # File: texi2html.init # # Sets default values for command-line arguments and for various customizable # procedures # # A copy of this file is pasted into the beginning of texi2html by # 'make texi2html' # # Copy this file and make changes to it, if you like. # Afterwards, either, load it with command-line option -init_file # # $Id: texi2html.init,v 1.34 2000/07/27 14:09:02 obachman Exp $ ###################################################################### # stuff which can also be set by command-line options # # # Note: values set here, overwrite values set by the command-line # options before -init_file and might still be overwritten by # command-line arguments following the -init_file option # # T2H_OPTIONS is a hash whose keys are the (long) names of valid # command-line options and whose values are a hash with the following keys: # type ==> one of !|=i|:i|=s|:s (see GetOpt::Long for more info) # linkage ==> ref to scalar, array, or subroutine (see GetOpt::Long for more info) # verbose ==> short description of option (displayed by -h) # noHelp ==> if 1 -> for "not so important options": only print description on -h 1 # 2 -> for obsolete options: only print description on -h 2 $T2H_DEBUG = 0; $T2H_OPTIONS -> {debug} = { type => '=i', linkage => \$main::T2H_DEBUG, verbose => 'output HTML with debuging information', }; $T2H_DOCTYPE = ''; $T2H_OPTIONS -> {doctype} = { type => '=s', linkage => \$main::T2H_DOCTYPE, verbose => 'document type which is output in header of HTML files', noHelp => 1 }; $T2H_CHECK = 0; $T2H_OPTIONS -> {check} = { type => '!', linkage => \$main::T2H_CHECK, verbose => 'if set, only check files and output all things that may be Texinfo commands', noHelp => 1 }; # -expand # if set to "tex" (or, "info") expand @iftex and @tex (or, @ifinfo) sections # else, neither expand @iftex, @tex, nor @ifinfo sections $T2H_EXPAND = "info"; $T2H_OPTIONS -> {expand} = { type => '=s', linkage => \$T2H_EXPAND, verbose => 'Expand info|tex|none section of texinfo source', }; # - glossary #if set, uses section named `Footnotes' for glossary $T2H_USE_GLOSSARY = 0; T2H_OPTIONS -> {glossary} = { type => '!', linkage => \$T2H_USE_GLOSSARY, verbose => "if set, uses section named `Footnotes' for glossary", noHelp => 1, }; # -invisible # $T2H_INVISIBLE_MARK is the text used to create invisible destination # anchors for index links (you can for instance use the invisible.xbm # file shipped with this program). This is a workaround for a known # bug of many WWW browsers, including netscape. # For me, it works fine without it -- on the contrary: if there, it # inserts space between headers and start of text (obachman 3/99) $T2H_INVISIBLE_MARK = ''; # $T2H_INVISIBLE_MARK = ' '; $T2H_OPTIONS -> {invisible} = { type => '=s', linkage => \$T2H_INVISIBLE_MARK, verbose => 'use text in invisble anchot', noHelp => 1, }; # -iso # if set, ISO8879 characters are used for special symbols (like copyright, etc) $T2H_USE_ISO = 0; $T2H_OPTIONS -> {iso} = { type => 'iso', linkage => \$T2H_USE_ISO, verbose => 'if set, ISO8879 characters are used for special symbols (like copyright, etc)', noHelp => 1, }; # -I # list directories where @include files are searched for (besides the # directory of the doc file) additional '-I' args add to this list @T2H_INCLUDE_DIRS = ("."); $T2H_OPTIONS -> {I} = { type => '=s', linkage => \@T2H_INCLUDE_DIRS, verbose => 'append $s to the @include search path', }; # -top_file # uses file of this name for top-level file # extension is manipulated appropriately, if necessary. # If empty, .html is used # Typically, you would set this to "index.html". $T2H_TOP_FILE = ''; $T2H_OPTIONS -> {top_file} = { type => '=s', linkage => \$T2H_TOP_FILE, verbose => 'use $s as top file, instead of .html', }; # -toc_file # uses file of this name for table of contents file # extension is manipulated appropriately, if necessary. # If empty, _toc.html is used $T2H_TOC_FILE = ''; $T2H_OPTIONS -> {toc_file} = { type => '=s', linkage => \$T2H_TOC_FILE, verbose => 'use $s as ToC file, instead of _toc.html', }; # -frames # if set, output two additional files which use HTML 4.0 "frames". $T2H_FRAMES = 0; $T2H_OPTIONS -> {frames} = { type => '!', linkage => \$T2H_FRAMES, verbose => 'output files which use HTML 4.0 frames (experimental)', noHelp => 1, }; # -menu | -nomenu # if set, show the Texinfo menus $T2H_SHOW_MENU = 1; $T2H_OPTIONS -> {menu} = { type => '!', linkage => \$T2H_SHOW_MENU, verbose => 'ouput Texinfo menus', }; # -number | -nonumber # if set, number sections and show section names and numbers in references # and menus $T2H_NUMBER_SECTIONS = 1; $T2H_OPTIONS -> {number} = { type => '!', linkage => \$T2H_NUMBER_SECTIONS, verbose => 'use numbered sections' }; # if set, and T2H_NUMBER_SECTIONS is set, then use node names in menu # entries, instead of section names $T2H_NODE_NAME_IN_MENU = 0; # if set and menu entry equals menu descr, then do not print menu descr. # Likewise, if node name equals entry name, do not print entry name. $T2H_AVOID_MENU_REDUNDANCY = 1; # -split section|chapter|none # if set to 'section' (resp. 'chapter') create one html file per (sub)section # (resp. chapter) and separate pages for Top, ToC, Overview, Index, # Glossary, About. # otherwise, create monolithic html file which contains whole document #$T2H_SPLIT = 'section'; $T2H_SPLIT = ''; $T2H_OPTIONS -> {split} = { type => '=s', linkage => \$T2H_SPLIT, verbose => 'split document on section|chapter else no splitting', }; # -section_navigation|-no-section_navigation # if set, then navigation panels are printed at the beginning of each section # and, possibly at the end (depending on whether or not there were more than # $T2H_WORDS_IN_PAGE words on page # This is most useful if you do not want to have section navigation # on -split chapter $T2H_SECTION_NAVIGATION = 1; $T2H_OPTIONS -> {sec_nav} = { type => '!', linkage => \$T2H_SECTION_NAVIGATION, verbose => 'output navigation panels for each section', }; # -subdir # if set put result files in this directory # if not set result files are put into current directory #$T2H_SUBDIR = 'html'; $T2H_SUBDIR = ''; $T2H_OPTIONS -> {subdir} = { type => '=s', linkage => \$T2H_SUBDIR, verbose => 'put HTML files in directory $s, instead of $cwd', }; # -short_extn # If this is set all HTML file will have extension ".htm" instead of # ".html". This is helpful when shipping the document to PC systems. $T2H_SHORTEXTN = 0; $T2H_OPTIONS -> {short_ext} = { type => '!', linkage => \$T2H_SHORTEXTN, verbose => 'use "htm" extension for output HTML files', }; # -prefix # Set the output file prefix, prepended to all .html, .gif and .pl files. # By default, this is the basename of the document $T2H_PREFIX = ''; $T2H_OPTIONS -> {prefix} = { type => '=s', linkage => \$T2H_PREFIX, verbose => 'use as prefix for output files, instead of ', }; # -o filename # If set, generate monolithic document output html into $filename $T2H_OUT = ''; $T2H_OPTIONS -> {out_file} = { type => '=s', linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, verbose => 'if set, all HTML output goes into file $s', }; # -short_ref #if set cross-references are given without section numbers $T2H_SHORT_REF = ''; $T2H_OPTIONS -> {short_ref} = { type => '!', linkage => \$T2H_SHORT_REF, verbose => 'if set, references are without section numbers', }; # -idx_sum # if value is set, then for each @prinindex $what # $docu_name_$what.idx is created which contains lines of the form # $key\t$ref sorted alphabetically (case matters) $T2H_IDX_SUMMARY = 0; $T2H_OPTIONS -> {idx_sum} = { type => '!', linkage => \$T2H_IDX_SUMMARY, verbose => 'if set, also output index summary', noHelp => 1, }; # -verbose # if set, chatter about what we are doing $T2H_VERBOSE = ''; $T2H_OPTIONS -> {Verbose} = { type => '!', linkage => \$T2H_VERBOSE, verbose => 'print progress info to stdout', }; # -lang # For page titles use $T2H_WORDS->{$T2H_LANG}->{...} as title. # To add a new language, supply list of titles (see $T2H_WORDS below). # and use ISO 639 language codes (see e.g. perl module Locale-Codes-1.02 # for definitions) # Default's to 'en' if not set or no @documentlanguage is specified $T2H_LANG = ''; $T2H_OPTIONS -> {lang} = { type => '=s', linkage => sub {SetDocumentLanguage($_[1])}, verbose => 'use $s as document language (ISO 639 encoding)', }; # -l2h # if set, uses latex2html for generation of math content $T2H_L2H = ''; $T2H_OPTIONS -> {l2h} = { type => '!', linkage => \$T2H_L2H, verbose => 'if set, uses latex2html for @math and @tex', }; ###################### # The following options are only relevant if $T2H_L2H is set # # -l2h_l2h # name/location of latex2html progam $T2H_L2H_L2H = "latex2html"; $T2H_OPTIONS -> {l2h_l2h} = { type => '=s', linkage => \$T2H_L2H_L2H, verbose => 'program to use for latex2html translation', noHelp => 1, }; # -l2h_skip # if set, skips actual call to latex2html tries to reuse previously generated # content, instead $T2H_L2H_SKIP = ''; $T2H_OPTIONS -> {l2h_skip} = { type => '!', linkage => \$T2H_L2H_SKIP, verbose => 'if set, tries to reuse previously latex2html output', noHelp => 1, }; # -l2h_tmp # if set, l2h uses this directory for temporarary files. The path # leading to this directory may not contain a dot (i.e., a "."), # otherwise, l2h will fail $T2H_L2H_TMP = ''; $T2H_OPTIONS -> {l2h_tmp} = { type => '=s', linkage => \$T2H_L2H_TMP, verbose => 'if set, uses $s as temporary latex2html directory', noHelp => 1, }; # if set, cleans intermediate files (they all have the prefix $doc_l2h_) # of l2h $T2H_L2H_CLEAN = 1; $T2H_OPTIONS -> {l2h_clean} = { type => '!', linkage => \$T2H_L2H_CLEAN, verbose => 'if set, do not keep intermediate latex2html files for later reuse', noHelp => 1, }; $T2H_OPTIONS -> {D} = { type => '=s', linkage => sub {$main::value{@_[1]} = 1;}, verbose => 'equivalent to Texinfo "@set $s 1"', noHelp => 1, }; $T2H_OPTIONS -> {init_file} = { type => '=s', linkage => \&LoadInitFile, verbose => 'load init file $s' }; ############################################################################## # # The following can only be set in the init file # ############################################################################## # if set, center @image by default # otherwise, do not center by default $T2H_CENTER_IMAGE = 1; # used as identation for block enclosing command @example, etc # If not empty, must be enclosed in $T2H_EXAMPLE_INDENT_CELL = ' '; # same as above, only for @small $T2H_SMALL_EXAMPLE_INDENT_CELL = ' '; # font size for @small $T2H_SMALL_FONT_SIZE = '-1'; # if non-empty, and no @..heading appeared in Top node, then # use this as header for top node/section, otherwise use value of # @settitle or @shorttitle (in that order) $T2H_TOP_HEADING = ''; # if set, use this chapter for 'Index' button, else # use first chapter whose name matches 'index' (case insensitive) $T2H_INDEX_CHAPTER = ''; # if set and $T2H_SPLIT is set, then split index pages at the next letter # after they have more than that many entries $T2H_SPLIT_INDEX = 100; # if set (e.g., to index.html) replace hrefs to this file # (i.e., to index.html) by ./ $T2H_HREF_DIR_INSTEAD_FILE = ''; ######################################################################## # Language dependencies: # To add a new language extend T2H_WORDS hash and create $T2H_<...>_WORDS hash # To redefine one word, simply do: # $T2H_WORDS->{}->{} = 'whatever' in your personal init file. # $T2H_WORDS_EN = { # titles of pages 'ToC_Title' => 'Table of Contents', 'Overview_Title' => 'Short Table of Contents', 'Index_Title' => 'Index', 'About_Title' => 'About this document', 'Footnotes_Title' => 'Footnotes', 'See' => 'See', 'see' => 'see', 'section' => 'section', # If necessary, we could extend this as follows: # # text for buttons # 'Top_Button' => 'Top', # 'ToC_Button' => 'Contents', # 'Overview_Button' => 'Overview', # 'Index_button' => 'Index', # 'Back_Button' => 'Back', # 'FastBack_Button' => 'FastBack', # 'Prev_Button' => 'Prev', # 'Up_Button' => 'Up', # 'Next_Button' => 'Next', # 'Forward_Button' =>'Forward', # 'FastWorward_Button' => 'FastForward', # 'First_Button' => 'First', # 'Last_Button' => 'Last', # 'About_Button' => 'About' }; $T2H_WORD_DE = { 'ToC_Title' => 'Inhaltsverzeichniss', 'Overview_Title' => 'Kurzes Inhaltsverzeichniss', 'Index_Title' => 'Index', 'About_Title' => 'Über dieses Dokument', 'Footnotes_Title' => 'Fußnoten', 'See' => 'Siehe', 'see' => 'siehe', 'section' => 'Abschnitt', }; $T2H_WORD_NL = { 'ToC_Title' => 'Inhoudsopgave', 'Overview_Title' => 'Korte inhoudsopgave', 'Index_Title' => 'Index', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', #No translation available! 'See' => 'Zie', 'see' => 'zie', 'section' => 'sectie', }; $T2H_WORD_ES = { 'ToC_Title' => 'índice General', 'Overview_Title' => 'Resumen del Contenido', 'Index_Title' => 'Index', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'Fußnoten', 'See' => 'Véase', 'see' => 'véase', 'section' => 'sección', }; $T2H_WORD_NO = { 'ToC_Title' => 'Innholdsfortegnelse', 'Overview_Title' => 'Kort innholdsfortegnelse', 'Index_Title' => 'Indeks', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', 'See' => 'Se', 'see' => 'se', 'section' => 'avsnitt', }; $T2H_WORD_PT = { 'ToC_Title' => 'Sumário', 'Overview_Title' => 'Breve Sumário', 'Index_Title' => 'Índice', #Not sure ;-) 'About_Title' => 'No translation available!', #No translation available! 'Footnotes_Title' => 'No translation available!', 'See' => 'Veja', 'see' => 'veja', 'section' => 'Seção', }; $T2H_WORDS = { 'en' => $T2H_WORDS_EN, 'de' => $T2H_WORDS_DE, 'nl' => $T2H_WORDS_NL, 'es' => $T2H_WORDS_ES, 'no' => $T2H_WORDS_NO, 'pt' => $T2H_WORDS_PT }; @MONTH_NAMES_EN = ( 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ); @MONTH_NAMES_DE = ( 'Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember' ); @MONTH_NAMES_NL = ( 'Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni', 'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December' ); @MONTH_NAMES_ES = ( 'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre' ); @MONTH_NAMES_NO = ( 'januar', 'februar', 'mars', 'april', 'mai', 'juni', 'juli', 'august', 'september', 'oktober', 'november', 'desember' ); @MONTH_NAMES_PT = ( 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ); $MONTH_NAMES = { 'en' => \@MONTH_NAMES_EN, 'de' => \@MONTH_NAMES_DE, 'es' => \@MONTH_NAMES_ES, 'nl' => \@MONTH_NAMES_NL, 'no' => \@MONTH_NAMES_NO, 'pt' => \@MONTH_NAMES_PT }; ######################################################################## # Control of Page layout: # You can make changes of the Page layout at two levels: # 1.) For small changes, it is often enough to change the value of # some global string/hash/array variables # 2.) For larger changes, reimplement one of the T2H_DEFAULT_* routines, # give them another name, and assign them to the respective # $T2H_ variable. # As a general interface, the hashes T2H_HREF, T2H_NAME, T2H_NODE hold # href, html-name, node-name of # This -- current section (resp. html page) # Top -- top page ($T2H_TOP_FILE) # Contents -- Table of contents # Overview -- Short table of contents # Index -- Index page # About -- page which explain "navigation buttons" # First -- first node # Last -- last node # # Whether or not the following hash values are set, depends on the context # (all values are w.r.t. 'This' section) # Next -- next node of texinfo # Prev -- previous node of texinfo # Up -- up node of texinfo # Forward -- next node in reading order # Back -- previous node in reading order # FastForward -- if leave node, up and next, else next node # FastBackward-- if leave node, up and prev, else prev node # # Furthermore, the following global variabels are set: # $T2H_THISDOC{title} -- title as set by @setttile # $T2H_THISDOC{fulltitle} -- full title as set by @title... # $T2H_THISDOC{subtitle} -- subtitle as set by @subtitle # $T2H_THISDOC{author} -- author as set by @author # # and pointer to arrays of lines which need to be printed by t2h_print_lines # $T2H_OVERVIEW -- lines of short table of contents # $T2H_TOC -- lines of table of contents # $T2H_TOP -- lines of Top texinfo node # $T2H_THIS_SECTION -- lines of 'This' section # # There are the following subs which control the layout: # $T2H_print_section = \&T2H_DEFAULT_print_section; $T2H_print_Top_header = \&T2H_DEFAULT_print_Top_header; $T2H_print_Top_footer = \&T2H_DEFAULT_print_Top_footer; $T2H_print_Top = \&T2H_DEFAULT_print_Top; $T2H_print_Toc = \&T2H_DEFAULT_print_Toc; $T2H_print_Overview = \&T2H_DEFAULT_print_Overview; $T2H_print_Footnotes = \&T2H_DEFAULT_print_Footnotes; $T2H_print_About = \&T2H_DEFAULT_print_About; $T2H_print_misc_header = \&T2H_DEFAULT_print_misc_header; $T2H_print_misc_footer = \&T2H_DEFAULT_print_misc_footer; $T2H_print_misc = \&T2H_DEFAULT_print_misc; $T2H_print_chapter_header = \&T2H_DEFAULT_print_chapter_header; $T2H_print_chapter_footer = \&T2H_DEFAULT_print_chapter_footer; $T2H_print_page_head = \&T2H_DEFAULT_print_page_head; $T2H_print_page_foot = \&T2H_DEFAULT_print_page_foot; $T2H_print_head_navigation = \&T2H_DEFAULT_print_head_navigation; $T2H_print_foot_navigation = \&T2H_DEFAULT_print_foot_navigation; $T2H_button_icon_img = \&T2H_DEFAULT_button_icon_img; $T2H_print_navigation = \&T2H_DEFAULT_print_navigation; $T2H_about_body = \&T2H_DEFAULT_about_body; $T2H_print_frame = \&T2H_DEFAULT_print_frame; $T2H_print_toc_frame = \&T2H_DEFAULT_print_toc_frame; ######################################################################## # Layout for html for every sections # sub T2H_DEFAULT_print_section { my $fh = shift; local $T2H_BUTTONS = \@T2H_SECTION_BUTTONS; &$T2H_print_head_navigation($fh) if $T2H_SECTION_NAVIGATION; my $nw = t2h_print_lines($fh); if ($T2H_SPLIT eq 'section' && $T2H_SECTION_NAVIGATION) { &$T2H_print_foot_navigation($fh, $nw); } else { print $fh '


' . "\n"; } } ################################################################### # Layout of top-page I recommend that you use @ifnothtml, @ifhtml, # @html within the Top texinfo node to specify content of top-level # page. # # If you enclose everything in @ifnothtml, then title, subtitle, # author and overview is printed # T2H_HREF of Next, Prev, Up, Forward, Back are not defined # if $T2H_SPLIT then Top page is in its own html file sub T2H_DEFAULT_print_Top_header { &$T2H_print_page_head(@_) if $T2H_SPLIT; t2h_print_label(@_); # this needs to be called, otherwise no label set &$T2H_print_head_navigation(@_); } sub T2H_DEFAULT_print_Top_footer { &$T2H_print_foot_navigation(@_); &$T2H_print_page_foot(@_) if $T2H_SPLIT; } sub T2H_DEFAULT_print_Top { my $fh = shift; # for redefining navigation buttons use: # local $T2H_BUTTONS = [...]; # as it is, 'Top', 'Contents', 'Index', 'About' are printed local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; &$T2H_print_Top_header($fh); if ($T2H_THIS_SECTION) { # if top-level node has content, then print it with extra header print $fh "

$T2H_NAME{Top}

" unless ($T2H_HAS_TOP_HEADING); t2h_print_lines($fh, $T2H_THIS_SECTION) } else { # top-level node is fully enclosed in @ifnothtml # print fulltitle, subtitle, author, Overview print $fh "
\n

" . join("

\n

", split(/\n/, $T2H_THISDOC{fulltitle})) . "

\n"; print $fh "

$T2H_THISDOC{subtitle}

\n" if $T2H_THISDOC{subtitle}; print $fh "$T2H_THISDOC{author}\n" if $T2H_THISDOC{author}; print $fh <

Overview:

EOT t2h_print_lines($fh, $T2H_OVERVIEW); print $fh "
\n"; } &$T2H_print_Top_footer($fh); } ################################################################### # Layout of Toc, Overview, and Footnotes pages # By default, we use "normal" layout # T2H_HREF of Next, Prev, Up, Forward, Back, etc are not defined # use: local $T2H_BUTTONS = [...] to redefine navigation buttons sub T2H_DEFAULT_print_Toc { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_Overview { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_Footnotes { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_About { return &$T2H_print_misc(@_); } sub T2H_DEFAULT_print_misc_header { &$T2H_print_page_head(@_) if $T2H_SPLIT; # this needs to be called, otherwise, no labels are set t2h_print_label(@_); &$T2H_print_head_navigation(@_); } sub T2H_DEFAULT_print_misc_footer { &$T2H_print_foot_navigation(@_); &$T2H_print_page_foot(@_) if $T2H_SPLIT; } sub T2H_DEFAULT_print_misc { my $fh = shift; local $T2H_BUTTONS = \@T2H_MISC_BUTTONS; &$T2H_print_misc_header($fh); print $fh "

$T2H_NAME{This}

\n"; t2h_print_lines($fh); &$T2H_print_misc_footer($fh); } ################################################################### # chapter_header and chapter_footer are only called if # T2H_SPLIT eq 'chapter' # chapter_header: after print_page_header, before print_section # chapter_footer: after print_section of last section, before print_page_footer # # If you want to get rid of navigation stuff after each section, # redefine print_section such that it does not call print_navigation, # and put print_navigation into print_chapter_header @T2H_CHAPTER_BUTTONS = ( 'FastBack', 'FastForward', ' ', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); sub T2H_DEFAULT_print_chapter_header { # nothing to do there, by default if (! $T2H_SECTION_NAVIGATION) { my $fh = shift; local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; &$T2H_print_navigation($fh); print $fh "\n
\n"; } } sub T2H_DEFAULT_print_chapter_footer { local $T2H_BUTTONS = \@T2H_CHAPTER_BUTTONS; &$T2H_print_navigation(@_); } ################################################################### $T2H_TODAY = &pretty_date; # like "20 September 1993" sub pretty_date { local($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst); ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $year += ($year < 70) ? 2000 : 1900; # obachman: Let's do it as the Americans do return($MONTH_NAMES->{$T2H_LANG}[$mon] . ", " . $mday . " " . $year); } ################################################################### # Layout of standard header and footer # # Set the default body text, inserted between ###$T2H_BODYTEXT = 'LANG="EN" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; $T2H_BODYTEXT = 'LANG="' . $T2H_LANG . '" BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#0000FF" VLINK="#800080" ALINK="#FF0000"'; # text inserted after $T2H_AFTER_BODY_OPEN = ''; #text inserted before $T2H_PRE_BODY_CLOSE = ''; # this is used in footer $T2H_ADDRESS = "by $T2H_USER " if $T2H_USER; $T2H_ADDRESS .= "on $T2H_TODAY"; # this is added inside after and some META NAME stuff # can be used for <style> <script>, <meta> tags $T2H_EXTRA_HEAD = ''; sub T2H_DEFAULT_print_page_head { my $fh = shift; my $longtitle = "$T2H_THISDOC{title}: $T2H_NAME{This}"; print $fh <<EOT; <HTML> $T2H_DOCTYPE <!-- Created on $T2H_TODAY by $THISPROG --> <!-- $T2H_AUTHORS --> <HEAD> <TITLE>$longtitle $T2H_EXTRA_HEAD $T2H_AFTER_BODY_OPEN EOT } sub T2H_DEFAULT_print_page_foot { my $fh = shift; print $fh < This document was generated $T2H_ADDRESS using
texi2html $T2H_PRE_BODY_CLOSE EOT } ################################################################### # Layout of navigation panel # if this is set, then a vertical navigation panel is used $T2H_VERTICAL_HEAD_NAVIGATION = 0; sub T2H_DEFAULT_print_head_navigation { my $fh = shift; if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } &$T2H_print_navigation($fh, $T2H_VERTICAL_HEAD_NAVIGATION); if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } elsif ($T2H_SPLIT eq 'section') { print $fh "
\n"; } } # Specifies the minimum page length required before a navigation panel # is placed at the bottom of a page (the default is that of latex2html) # T2H_THIS_WORDS_IN_PAGE holds number of words of current page $T2H_WORDS_IN_PAGE = 300; sub T2H_DEFAULT_print_foot_navigation { my $fh = shift; my $nwords = shift; if ($T2H_VERTICAL_HEAD_NAVIGATION) { print $fh < EOT } print $fh "
\n"; &$T2H_print_navigation($fh) if ($nwords >= $T2H_WORDS_IN_PAGE) } ###################################################################### # navigation panel # # specify in this array which "buttons" should appear in which order # in the navigation panel for sections; use ' ' for empty buttons (space) @T2H_SECTION_BUTTONS = ( 'Back', 'Forward', ' ', 'FastBack', 'Up', 'FastForward', ' ', ' ', ' ', ' ', 'Top', 'Contents', 'Index', 'About', ); # buttons for misc stuff @T2H_MISC_BUTTONS = ('Top', 'Contents', 'Index', 'About'); # insert here name of icon images for buttons # Icons are used, if $T2H_ICONS and resp. value are set %T2H_ACTIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'Forward', '', 'FastForward', '', 'About' , '', 'First', '', 'Last', '', ' ', '' ); # insert here name of icon images for these, if button is inactive %T2H_PASSIVE_ICONS = ( 'Top', '', 'Contents', '', 'Overview', '', 'Index', '', 'Back', '', 'FastBack', '', 'Prev', '', 'Up', '', 'Next', '', 'Forward', '', 'FastForward', '', 'About', '', 'First', '', 'Last', '', ); # how to create IMG tag sub T2H_DEFAULT_button_icon_img { my $button = shift; my $icon = shift; my $name = shift; return qq{$button: $name}; } # Names of text as alternative for icons %T2H_NAVIGATION_TEXT = ( 'Top', 'Top', 'Contents', 'Contents', 'Overview', 'Overview', 'Index', 'Index', ' ', '   ', 'Back', ' < ', 'FastBack', ' << ', 'Prev', 'Prev', 'Up', ' Up ', 'Next', 'Next', 'Forward', ' > ', 'FastForward', ' >> ', 'About', ' ? ', 'First', ' |< ', 'Last', ' >| ' ); sub T2H_DEFAULT_print_navigation { my $fh = shift; my $vertical = shift; my $spacing = 1; print $fh "\n"; print $fh "" unless $vertical; for $button (@$T2H_BUTTONS) { print $fh qq{\n} if $vertical; print $fh qq{\n"; print $fh "\n" if $vertical; } print $fh "" unless $vertical; print $fh "
}; if (ref($button) eq 'CODE') { &$button($fh, $vertical); } elsif ($button eq ' ') { # handle space button print $fh $T2H_ICONS && $T2H_ACTIVE_ICONS{' '} ? &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{' '}) : $T2H_NAVIGATION_TEXT{' '}; next; } elsif ($T2H_HREF{$button}) { # button is active print $fh $T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? # use icon ? t2h_anchor('', $T2H_HREF{$button}, # yes &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}, $T2H_NAME{$button})) : # use text "[" . t2h_anchor('', $T2H_HREF{$button}, $T2H_NAVIGATION_TEXT{$button}) . "]"; } else { # button is passive print $fh $T2H_ICONS && $T2H_PASSIVE_ICONS{$button} ? &$T2H_button_icon_img($button, $T2H_PASSIVE_ICONS{$button}, $T2H_NAME{$button}) : "[" . $T2H_NAVIGATION_TEXT{$button} . "]"; } print $fh "
\n"; } ###################################################################### # Frames: this is from "Richard Y. Kim" # Should be improved to be more conforming to other _print* functions sub T2H_DEFAULT_print_frame { my $fh = shift; print $fh < $T2H_THISDOC{title} EOT } sub T2H_DEFAULT_print_toc_frame { my $fh = shift; &$T2H_print_page_head($fh); print $fh <Content EOT print $fh map {s/HREF=/target=\"main\" HREF=/; $_;} @stoc_lines; print $fh "\n"; } ###################################################################### # About page # # T2H_PRE_ABOUT might be a function $T2H_PRE_ABOUT = <texi2html

EOT $T2H_AFTER_ABOUT = ''; sub T2H_DEFAULT_about_body { my $about; if (ref($T2H_PRE_ABOUT) eq 'CODE') { $about = &$T2H_PRE_ABOUT(); } else { $about = $T2H_PRE_ABOUT; } $about .= <

EOT for $button (@T2H_SECTION_BUTTONS) { next if $button eq ' ' || ref($button) eq 'CODE'; $about .= < EOT } $about .= <

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four
$T2H_AFTER_ABOUT EOT return $about; } %T2H_BUTTONS_GOTO = ( 'Top', 'cover (top) of document', 'Contents', 'table of contents', 'Overview', 'short table of contents', 'Index', 'concept index', 'Back', 'previous section in reading order', 'FastBack', 'previous or up-and-previous section ', 'Prev', 'previous section same level', 'Up', 'up section', 'Next', 'next section same level', 'Forward', 'next section in reading order', 'FastForward', 'next or up-and-next section', 'About' , 'this page', 'First', 'first section in reading order', 'Last', 'last section in reading order', ); %T2H_BUTTONS_EXAMPLE = ( 'Top', '   ', 'Contents', '   ', 'Overview', '   ', 'Index', '   ', 'Back', '1.2.2', 'FastBack', '1.1', 'Prev', '1.2.2', 'Up', '1.2', 'Next', '1.2.4', 'Forward', '1.2.4', 'FastForward', '1.3', 'About', '   ', 'First', '1.', 'Last', '1.2.4', ); ###################################################################### # from here on, its l2h init stuff # ## initialization for latex2html as for Singular manual generation ## obachman 3/99 # # Options controlling Titles, File-Names, Tracing and Sectioning # $TITLE = ''; $SHORTEXTN = 0; $LONG_TITLES = 0; $DESTDIR = ''; # should be overwritten by cmd-line argument $NO_SUBDIR = 0;# should be overwritten by cmd-line argument $PREFIX = ''; # should be overwritten by cmd-line argument $AUTO_PREFIX = 0; # this is needed, so that prefix settings are used $AUTO_LINK = 0; $SPLIT = 0; $MAX_LINK_DEPTH = 0; $TMP = ''; # should be overwritten by cmd-line argument $DEBUG = 0; $VERBOSE = 1; # # Options controlling Extensions and Special Features # $HTML_VERSION = "3.2"; $TEXDEFS = 1; # we absolutely need that $EXTERNAL_FILE = ''; $SCALABLE_FONTS = 1; $NO_SIMPLE_MATH = 1; $LOCAL_ICONS = 1; $SHORT_INDEX = 0; $NO_FOOTNODE = 1; $ADDRESS = ''; $INFO = ''; # # Switches controlling Image Generation # $ASCII_MODE = 0; $NOLATEX = 0; $EXTERNAL_IMAGES = 0; $PS_IMAGES = 0; $NO_IMAGES = 0; $IMAGES_ONLY = 0; $REUSE = 2; $ANTI_ALIAS = 1; $ANTI_ALIAS_TEXT = 1; # #Switches controlling Navigation Panels # $NO_NAVIGATION = 1; $ADDRESS = ''; $INFO = 0; # 0 = do not make a "About this document..." section # #Switches for Linking to other documents # # actuall -- we don't care $MAX_SPLIT_DEPTH = 0; # Stop making separate files at this depth $MAX_LINK_DEPTH = 0; # Stop showing child nodes at this depth $NOLATEX = 0; # 1 = do not pass unknown environments to Latex $EXTERNAL_IMAGES = 0; # 1 = leave the images outside the document $ASCII_MODE = 0; # 1 = do not use any icons or internal images # 1 = use links to external postscript images rather than inlined bitmap # images. $PS_IMAGES = 0; $SHOW_SECTION_NUMBERS = 0; ### Other global variables ############################################### $CHILDLINE = ""; # This is the line width measured in pixels and it is used to right justify # equations and equation arrays; $LINE_WIDTH = 500; # Used in conjunction with AUTO_NAVIGATION $WORDS_IN_PAGE = 300; # Affects ONLY the way accents are processed $default_language = 'english'; # The value of this variable determines how many words to use in each # title that is added to the navigation panel (see below) # $WORDS_IN_NAVIGATION_PANEL_TITLES = 0; # This number will determine the size of the equations, special characters, # and anything which will be converted into an inlined image # *except* "image generating environments" such as "figure", "table" # or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $MATH_SCALE_FACTOR = 1.5; # This number will determine the size of # image generating environments such as "figure", "table" or "minipage". # Effective values are those greater than 0. # Sensible values are between 0.1 - 4. $FIGURE_SCALE_FACTOR = 1.6; # If both of the following two variables are set then the "Up" button # of the navigation panel in the first node/page of a converted document # will point to $EXTERNAL_UP_LINK. $EXTERNAL_UP_TITLE should be set # to some text which describes this external link. $EXTERNAL_UP_LINK = ""; $EXTERNAL_UP_TITLE = ""; # If this is set then the resulting HTML will look marginally better if viewed # with Netscape. $NETSCAPE_HTML = 1; # Valid paper sizes are "letter", "legal", "a4","a3","a2" and "a0" # Paper sizes has no effect other than in the time it takes to create inlined # images and in whether large images can be created at all ie # - larger paper sizes *MAY* help with large image problems # - smaller paper sizes are quicker to handle $PAPERSIZE = "a4"; # Replace "english" with another language in order to tell LaTeX2HTML that you # want some generated section titles (eg "Table of Contents" or "References") # to appear in a different language. Currently only "english" and "french" # is supported but it is very easy to add your own. See the example in the # file "latex2html.config" $TITLES_LANGUAGE = "english"; 1; # This must be the last non-comment line # End File texi2html.init ###################################################################### require "$ENV{T2H_HOME}/texi2html.init" if ($0 =~ /\.pl$/ && -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); #+++############################################################################ # # # Initialization # # Pasted content of File $(srcdir)/MySimple.pm: Command-line processing # # # #---############################################################################ # leave this within comments, and keep the require statement # This way, you can directly run texi2html.pl, if $ENV{T2H_HOME}/texi2html.init # exists. # package Getopt::MySimple; # Name: # Getopt::MySimple. # # Documentation: # POD-style (incomplete) documentation is in file MySimple.pod # # Tabs: # 4 spaces || die. # # Author: # Ron Savage rpsavage@ozemail.com.au. # 1.00 19-Aug-97 Initial version. # 1.10 13-Oct-97 Add arrays of switches (eg '=s@'). # 1.20 3-Dec-97 Add 'Help' on a per-switch basis. # 1.30 11-Dec-97 Change 'Help' to 'verbose'. Make all hash keys lowercase. # 1.40 10-Nov-98 Change width of help report. Restructure tests. # 1-Jul-00 Modifications for Texi2html # -------------------------------------------------------------------------- # Locally modified by obachman (Display type instead of env, order by cmp) # $Id: MySimple.pm,v 1.1 2000/07/03 08:44:13 obachman Exp $ # use strict; # no strict 'refs'; use vars qw(@EXPORT @EXPORT_OK @ISA); use vars qw($fieldWidth $opt $VERSION); use Exporter(); use Getopt::Long; @ISA = qw(Exporter); @EXPORT = qw(); @EXPORT_OK = qw($opt); # An alias for $self -> {'opt'}. # -------------------------------------------------------------------------- $fieldWidth = 20; $VERSION = '1.41'; # -------------------------------------------------------------------------- sub byOrder { my($self) = @_; return uc($a) cmp (uc($b)); } # -------------------------------------------------------------------------- sub dumpOptions { my($self) = @_; print 'Option', ' ' x ($fieldWidth - length('Option') ), "Value\n"; for (sort byOrder keys(%{$self -> {'opt'} }) ) { print "-$_", ' ' x ($fieldWidth - (1 + length) ), "${$self->{'opt'} }{$_}\n"; } print "\n"; } # End of dumpOptions. # -------------------------------------------------------------------------- # Return: # 0 -> Error. # 1 -> Ok. sub getOptions { push(@_, 0) if ($#_ == 2); # Default for $ignoreCase is 0. push(@_, 1) if ($#_ == 3); # Default for $helpThenExit is 1. my($self, $default, $helpText, $versionText, $helpThenExit, $versionThenExit, $ignoreCase) = @_; $helpThenExit = 1 unless (defined($helpThenExit)); $versionThenExit = 1 unless (defined($versionThenExit)); $ignoreCase = 0 unless (defined($ignoreCase)); $self -> {'default'} = $default; $self -> {'helpText'} = $helpText; $self -> {'versionText'} = $versionText; $Getopt::Long::ignorecase = $ignoreCase; unless (defined($self -> {'default'}{'help'})) { $self -> {'default'}{'help'} = { type => ':i', default => '', linkage => sub {$self->helpOptions($_[1]); exit (0) if $helpThenExit;}, verbose => "print help and exit" }; } unless (defined($self -> {'default'}{'version'})) { $self -> {'default'}{'version'} = { type => '', default => '', linkage => sub {print $self->{'versionText'}; exit (0) if versionTheExit;}, verbose => "print version and exit" }; } for (keys(%{$self -> {'default'} }) ) { my $type = ${$self -> {'default'} }{$_}{'type'}; push(@{$self -> {'type'} }, "$_$type"); $self->{'opt'}->{$_} = ${$self -> {'default'} }{$_}{'linkage'} if ${$self -> {'default'} }{$_}{'linkage'}; } my($result) = &GetOptions($self -> {'opt'}, @{$self -> {'type'} }); return $result unless $result; for (keys(%{$self -> {'default'} }) ) { if (! defined(${$self -> {'opt'} }{$_})) #{ { ${$self -> {'opt'} }{$_} = ${$self -> {'default'} }{$_}{'default'}; } } $result; } # End of getOptions. # -------------------------------------------------------------------------- sub helpOptions { my($self) = shift; my($noHelp) = shift; $noHelp = 0 unless $noHelp; my($optwidth, $typewidth, $defaultwidth, $maxlinewidth, $valind, $valwidth) = (10, 5, 9, 78, 4, 11); print "$self->{'helpText'}" if ($self -> {'helpText'}); print ' Option', ' ' x ($optwidth - length('Option') -1 ), 'Type', ' ' x ($typewidth - length('Type') + 1), 'Default', ' ' x ($defaultwidth - length('Default') ), "Description\n"; for (sort byOrder keys(%{$self -> {'default'} }) ) { my($line, $help, $option, $val); $option = $_; next if ${$self->{'default'} }{$_}{'noHelp'} && ${$self->{'default'} }{$_}{'noHelp'} > $noHelp; $line = " -$_ " . ' ' x ($optwidth - (2 + length) ) . "${$self->{'default'} }{$_}{'type'} ". ' ' x ($typewidth - (1+length(${$self -> {'default'} }{$_}{'type'}) )); $val = ${$self->{'default'} }{$_}{'linkage'}; if ($val) { if (ref($val) eq 'SCALAR') { $val = $$val; } else { $val = ''; } } else { $val = ${$self->{'default'} }{$_}{'default'}; } $line .= "$val "; $line .= ' ' x ($optwidth + $typewidth + $defaultwidth + 1 - length($line)); if (defined(${$self -> {'default'} }{$_}{'verbose'}) && ${$self -> {'default'} }{$_}{'verbose'} ne '') { $help = "${$self->{'default'} }{$_}{'verbose'}"; } else { $help = ' '; } if ((length("$line") + length($help)) < $maxlinewidth) { print $line , $help, "\n"; } else { print $line, "\n", ' ' x $valind, $help, "\n"; } for $val (sort byOrder keys(%{${$self->{'default'}}{$option}{'values'}})) { print ' ' x ($valind + 2); print $val, ' ', ' ' x ($valwidth - length($val) - 2); print ${$self->{'default'}}{$option}{'values'}{$val}, "\n"; } } print <| ! no argument: variable is set to 1 on -foo (or, to 0 on -nofoo) =s | :s mandatory (or, optional) string argument =i | :i mandatory (or, optional) integer argument EOT } # End of helpOptions. #------------------------------------------------------------------- sub new { my($class) = @_; my($self) = {}; $self -> {'default'} = {}; $self -> {'helpText'} = ''; $self -> {'opt'} = {}; $opt = $self -> {'opt'}; # An alias for $self -> {'opt'}. $self -> {'type'} = (); return bless $self, $class; } # End of new. # -------------------------------------------------------------------------- 1; # End MySimple.pm require "$ENV{T2H_HOME}/MySimple.pm" if ($0 =~ /\.pl$/ && -e "$ENV{T2H_HOME}/texi2html.init" && -r "$ENV{T2H_HOME}/texi2html.init"); package main; #+++############################################################################ # # # Constants # # # #---############################################################################ $DEBUG_TOC = 1; $DEBUG_INDEX = 2; $DEBUG_BIB = 4; $DEBUG_GLOSS = 8; $DEBUG_DEF = 16; $DEBUG_HTML = 32; $DEBUG_USER = 64; $DEBUG_L2H = 128; $BIBRE = '\[[\w\/-]+\]'; # RE for a bibliography reference $FILERE = '[\/\w.+-]+'; # RE for a file name $VARRE = '[^\s\{\}]+'; # RE for a variable name $NODERE = '[^,:]+'; # RE for a node name $NODESRE = '[^:]+'; # RE for a list of node names $ERROR = "***"; # prefix for errors $WARN = "**"; # prefix for warnings # program home page $PROTECTTAG = "_ThisIsProtected_"; # tag to recognize protected sections $CHAPTEREND = "\n"; # to know where a chpater ends $SECTIONEND = "\n"; # to know where section ends $TOPEND = "\n"; # to know where top ends # # pre-defined indices # $index_properties = { 'c' => { name => 'cp'}, 'f' => { name => 'fn', code => 1}, 'v' => { name => 'vr', code => 1}, 'k' => { name => 'ky', code => 1}, 'p' => { name => 'pg', code => 1}, 't' => { name => 'tp', code => 1} }; %predefined_index = ( 'cp', 'c', 'fn', 'f', 'vr', 'v', 'ky', 'k', 'pg', 'p', 'tp', 't', ); # # valid indices # %valid_index = ( 'c', 1, 'f', 1, 'v', 1, 'k', 1, 'p', 1, 't', 1, ); # # texinfo section names to level # %sec2level = ( 'top', 0, 'chapter', 1, 'unnumbered', 1, 'majorheading', 1, 'chapheading', 1, 'appendix', 1, 'section', 2, 'unnumberedsec', 2, 'heading', 2, 'appendixsec', 2, 'appendixsection', 2, 'subsection', 3, 'unnumberedsubsec', 3, 'subheading', 3, 'appendixsubsec', 3, 'subsubsection', 4, 'unnumberedsubsubsec', 4, 'subsubheading', 4, 'appendixsubsubsec', 4, ); # # accent map, TeX command to ISO name # %accent_map = ( '"', 'uml', '~', 'tilde', '^', 'circ', '`', 'grave', '\'', 'acute', ); # # texinfo "simple things" (@foo) to HTML ones # %simple_map = ( # cf. makeinfo.c "*", "
", # HTML+ " ", " ", "\t", " ", "-", "­", # soft hyphen "\n", "\n", "|", "", 'tab', '<\/TD>
Button Name Go to From 1.2.3 go to
EOT $about .= ($T2H_ICONS && $T2H_ACTIVE_ICONS{$button} ? &$T2H_button_icon_img($button, $T2H_ACTIVE_ICONS{$button}) : " [" . $T2H_NAVIGATION_TEXT{$button} . "] "); $about .= < $button $T2H_BUTTONS_GOTO{$button} $T2H_BUTTONS_EXAMPLE{$button}
', # spacing commands ":", "", "!", "!", "?", "?", ".", ".", "-", "", ); # # texinfo "things" (@foo{}) to HTML ones # %things_map = ( 'TeX', 'TeX', 'br', '

', # paragraph break 'bullet', '*', 'copyright', '(C)', 'dots', '...<\/small>', 'enddots', '....<\/small>', 'equiv', '==', 'error', 'error-->', 'expansion', '==>', 'minus', '-', 'point', '-!-', 'print', '-|', 'result', '=>', 'today', $T2H_TODAY, 'aa', 'å', 'AA', 'Å', 'ae', 'æ', 'oe', 'œ', 'AE', 'Æ', 'OE', 'Œ', 'o', 'ø', 'O', 'Ø', 'ss', 'ß', 'l', '\/l', 'L', '\/L', 'exclamdown', '¡', 'questiondown', '¿', 'pounds', '£' ); # # texinfo styles (@foo{bar}) to HTML ones # %style_map = ( 'acronym', '&do_acronym', 'asis', '', 'b', 'B', 'cite', 'CITE', 'code', 'CODE', 'command', 'CODE', 'ctrl', '&do_ctrl', # special case 'dfn', 'EM', # DFN tag is illegal in the standard 'dmn', '', # useless 'email', '&do_email', # insert a clickable email address 'emph', 'EM', 'env', 'CODE', 'file', '"TT', # will put quotes, cf. &apply_style 'i', 'I', 'kbd', 'KBD', 'key', 'KBD', 'math', '&do_math', 'option', '"SAMP', # will put quotes, cf. &apply_style 'r', '', # unsupported 'samp', '"SAMP', # will put quotes, cf. &apply_style 'sc', '&do_sc', # special case 'strong', 'STRONG', 't', 'TT', 'titlefont', '', # useless 'uref', '&do_uref', # insert a clickable URL 'url', '&do_url', # insert a clickable URL 'var', 'VAR', 'w', '', # unsupported 'H', '&do_accent', 'dotaccent', '&do_accent', 'ringaccent','&do_accent', 'tieaccent', '&do_accent', 'u','&do_accent', 'ubaraccent','&do_accent', 'udotaccent','&do_accent', 'v', '&do_accent', ',', '&do_accent', 'dotless', '&do_accent' ); # # texinfo format (@foo/@end foo) to HTML ones # %format_map = ( 'quotation', 'BLOCKQUOTE', # lists 'itemize', 'UL', 'enumerate', 'OL', # poorly supported 'flushleft', 'PRE', 'flushright', 'PRE', ); # # an eval of these $complex_format_map->{what}->[0] yields beginning # an eval of these $complex_format_map->{what}->[1] yieleds end $complex_format_map = { example => [ q{"$T2H_EXAMPLE_INDENT_CELL
"},
  q{'
'} ], smallexample => [ q{"$T2H_SMALL_EXAMPLE_INDENT_CELL
"},
  q{'
'} ], display => [ q{"$T2H_EXAMPLE_INDENT_CELL
'},
  q{'
'} ], smalldisplay => [ q{"$T2H_SMALL_EXAMPLE_INDENT_CELL
'},
  q{'
'} ] }; $complex_format_map->{lisp} = $complex_format_map->{example}; $complex_format_map->{smalllisp} = $complex_format_map->{smallexample}; $complex_format_map->{format} = $complex_format_map->{display}; $complex_format_map->{smallformat} = $complex_format_map->{smalldisplay}; # # texinfo definition shortcuts to real ones # %def_map = ( # basic commands 'deffn', 0, 'defvr', 0, 'deftypefn', 0, 'deftypevr', 0, 'defcv', 0, 'defop', 0, 'deftp', 0, # basic x commands 'deffnx', 0, 'defvrx', 0, 'deftypefnx', 0, 'deftypevrx', 0, 'defcvx', 0, 'defopx', 0, 'deftpx', 0, # shortcuts 'defun', 'deffn Function', 'defmac', 'deffn Macro', 'defspec', 'deffn {Special Form}', 'defvar', 'defvr Variable', 'defopt', 'defvr {User Option}', 'deftypefun', 'deftypefn Function', 'deftypevar', 'deftypevr Variable', 'defivar', 'defcv {Instance Variable}', 'deftypeivar', 'defcv {Instance Variable}', # NEW: FIXME 'defmethod', 'defop Method', 'deftypemethod', 'defop Method', # NEW:FIXME # x shortcuts 'defunx', 'deffnx Function', 'defmacx', 'deffnx Macro', 'defspecx', 'deffnx {Special Form}', 'defvarx', 'defvrx Variable', 'defoptx', 'defvrx {User Option}', 'deftypefunx', 'deftypefnx Function', 'deftypevarx', 'deftypevrx Variable', 'defivarx', 'defcvx {Instance Variable}', 'defmethodx', 'defopx Method', ); # # things to skip # %to_skip = ( # comments 'c', 1, 'comment', 1, 'ifnotinfo', 1, 'ifnottex', 1, 'ifhtml', 1, 'end ifhtml', 1, 'end ifnotinfo', 1, 'end ifnottex', 1, # useless 'detailmenu', 1, 'direntry', 1, 'contents', 1, 'shortcontents', 1, 'summarycontents', 1, 'footnotestyle', 1, 'end ifclear', 1, 'end ifset', 1, 'titlepage', 1, 'end titlepage', 1, # unsupported commands (formatting) 'afourpaper', 1, 'cropmarks', 1, 'finalout', 1, 'headings', 1, 'sp', 1, 'need', 1, 'page', 1, 'setchapternewpage', 1, 'everyheading', 1, 'everyfooting', 1, 'evenheading', 1, 'evenfooting', 1, 'oddheading', 1, 'oddfooting', 1, 'smallbook', 1, 'vskip', 1, 'filbreak', 1, 'paragraphindent', 1, # unsupported formats 'cartouche', 1, 'end cartouche', 1, 'group', 1, 'end group', 1, ); #+++############################################################################ # # # Argument parsing, initialisation # # # #---############################################################################ # # flush stdout and stderr after every write # select(STDERR); $| = 1; select(STDOUT); $| = 1; %value = (); # hold texinfo variables, see also -D $use_bibliography = 1; $use_acc = 1; # # called on -init-file sub LoadInitFile { my $init_file = shift; # second argument is value of options $init_file = shift; if (-f $init_file) { print "# reading initialization file from $init_file\n" if ($T2H_VERBOSE); require($init_file); } else { print "$ERROR Error: can't read init file $int_file\n"; $init_file = ''; } } # # called on -lang sub SetDocumentLanguage { my $lang = shift; if (! exists($T2H_WORDS->{$lang})) { warn "$ERROR: Language specs for '$lang' do not exists. Reverting to '" . ($T2H_LANG ? T2H_LANG : "en") . "'\n"; } else { print "# using '$lang' as document language\n" if ($T2H_VERBOSE); $T2H_LANG = $lang; } } ## ## obsolete cmd line options ## $T2H_OBSOLETE_OPTIONS -> {'no-section_navigation'} = { type => '!', linkage => sub {$main::T2H_SECTION_NAVIGATION = 0;}, verbose => 'obsolete, use -nosec_nav', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {use_acc} = { type => '!', linkage => \$use_acc, verbose => 'obsolete', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {expandinfo} = { type => '!', linkage => sub {$main::T2H_EXPAND = 'info';}, verbose => 'obsolete, use "-expand info" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {expandtex} = { type => '!', linkage => sub {$main::T2H_EXPAND = 'tex';}, verbose => 'obsolete, use "-expand tex" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {monolithic} = { type => '!', linkage => sub {$main::T2H_SPLIT = '';}, verbose => 'obsolete, use "-split no" instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {split_node} = { type => '!', linkage => sub{$main::T2H_SPLIT = 'section';}, verbose => 'obsolete, use "-split section" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {split_chapter} = { type => '!', linkage => sub{$main::T2H_SPLIT = 'chapter';}, verbose => 'obsolete, use "-split chapter" instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {no_verbose} = { type => '!', linkage => sub {$main::T2H_VERBOSE = 0;}, verbose => 'obsolete, use -noverbose instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {output_file} = { type => '=s', linkage => sub {$main::T2H_OUT = @_[1]; $T2H_SPLIT = '';}, verbose => 'obsolete, use -out_file instead', noHelp => 2 }; $T2H_OBSOLETE_OPTIONS -> {section_navigation} = { type => '!', linkage => \$T2H_SECTION_NAVIGATION, verbose => 'obsolete, use -sec_nav instead', noHelp => 2, }; $T2H_OBSOLETE_OPTIONS -> {verbose} = { type => '!', linkage => \$T2H_VERBOSE, verbose => 'obsolete, use -Verbose instead', noHelp => 2 }; # read initialzation from $sysconfdir/texi2htmlrc or $HOME/.texi2htmlrc my $home = $ENV{HOME}; defined($home) or $home = ''; foreach $i ('/usr/local/etc/texi2htmlrc', "$home/.texi2htmlrc") { if (-f $i) { print "# reading initialization file from $i\n" if ($T2H_VERBOSE); require($i); } } #+++############################################################################ # # # parse command-line options # # #---############################################################################ $T2H_USAGE_TEXT = <getOptions($T2H_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print $Configure_failed if $Configure_failed; die $T2H_FAILURE_TEXT; } if (@ARGV > 1) { eval {Getopt::Long::Configure("no_pass_through");}; if (! $options->getOptions($T2H_OBSOLETE_OPTIONS, $T2H_USAGE_TEXT, "$THISVERSION\n")) { print $Configure_failed if $Configure_failed; die $T2H_FAILURE_TEXT; } } if ($T2H_CHECK) { die "Need file to check\n$T2H_FAILURE_TEXT" unless @ARGV > 0; ✓ exit; } #+++############################################################################ # # # evaluation of cmd line options # # #---############################################################################ if ($T2H_EXPAND eq 'info') { $to_skip{'ifinfo'} = 1; $to_skip{'end ifinfo'} = 1; } elsif ($T2H_EXPAND eq 'tex') { $to_skip{'iftex'} = 1; $to_skip{'end iftex'} = 1; } $T2H_INVISIBLE_MARK = '' if $T2H_INVISIBLE_MARK eq 'xbm'; # # file name buisness # die "Need exactly one file to translate\n$T2H_FAILURE_TEXT" unless @ARGV == 1; $docu = shift(@ARGV); if ($docu =~ /.*\//) { chop($docu_dir = $&); $docu_name = $'; } else { $docu_dir = '.'; $docu_name = $docu; } unshift(@T2H_INCLUDE_DIRS, $docu_dir); $docu_name =~ s/\.te?x(i|info)?$//; # basename of the document $docu_name = $T2H_PREFIX if ($T2H_PREFIX); # subdir if ($T2H_SUBDIR && ! $T2H_OUT) { $T2H_SUBDIR =~ s|/*$||; unless (-d "$T2H_SUBDIR" && -w "$T2H_SUBDIR") { if ( mkdir($T2H_SUBDIR, oct(755))) { print "# created directory $T2H_SUBDIR\n" if ($T2H_VERBOSE); } else { warn "$ERROR can't create directory $T2H_SUBDIR. Put results into current directory\n"; $T2H_SUBDIR = ''; } } } if ($T2H_SUBDIR && ! $T2H_OUT) { $docu_rdir = "$T2H_SUBDIR/"; print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); } else { if ($T2H_OUT && $T2H_OUT =~ m|(.*)/|) { $docu_rdir = "$1/"; print "# putting result files into directory $docu_rdir\n" if ($T2H_VERBOSE); } else { print "# putting result files into current directory \n" if ($T2H_VERBOSE); $docu_rdir = ''; } } # extension if ($T2H_SHORTEXTN) { $docu_ext = "htm"; } else { $docu_ext = "html"; } if ($T2H_TOP_FILE =~ /\..*$/) { $T2H_TOP_FILE = $`.".$docu_ext"; } # result files if (! $T2H_OUT && ($T2H_SPLIT =~ /section/i || $T2H_SPLIT =~ /node/i)) { $T2H_SPLIT = 'section'; } elsif (! $T2H_OUT && $T2H_SPLIT =~ /chapter/i) { $T2H_SPLIT = 'chapter' } else { undef $T2H_SPLIT; } $docu_doc = "$docu_name.$docu_ext"; # document's contents $docu_doc_file = "$docu_rdir$docu_doc"; if ($T2H_SPLIT) { $docu_toc = $T2H_TOC_FILE || "${docu_name}_toc.$docu_ext"; # document's table of contents $docu_stoc = "${docu_name}_ovr.$docu_ext"; # document's short toc $docu_foot = "${docu_name}_fot.$docu_ext"; # document's footnotes $docu_about = "${docu_name}_abt.$docu_ext"; # about this document $docu_top = $T2H_TOP_FILE || $docu_doc; } else { if ($T2H_OUT) { $docu_doc = $T2H_OUT; $docu_doc =~ s|.*/||; } $docu_toc = $docu_foot = $docu_stoc = $docu_about = $docu_top = $docu_doc; } $docu_toc_file = "$docu_rdir$docu_toc"; $docu_stoc_file = "$docu_rdir$docu_stoc"; $docu_foot_file = "$docu_rdir$docu_foot"; $docu_about_file = "$docu_rdir$docu_about"; $docu_top_file = "$docu_rdir$docu_top"; $docu_frame_file = "$docu_rdir${docu_name}_frame.$docu_ext"; $docu_toc_frame_file = "$docu_rdir${docu_name}_toc_frame.$docu_ext"; # # variables # $value{'html'} = 1; # predefine html (the output format) $value{'texi2html'} = $THISVERSION; # predefine texi2html (the translator) # _foo: internal to track @foo foreach ('_author', '_title', '_subtitle', '_settitle', '_setfilename', '_shorttitle') { $value{$_} = ''; # prevent -w warnings } %node2sec = (); # node to section name %sec2node = (); # section to node name %sec2number = (); # section to number %number2sec = (); # number to section %idx2node = (); # index keys to node %node2href = (); # node to HREF %node2next = (); # node to next %node2prev = (); # node to prev %node2up = (); # node to up %bib2href = (); # bibliography reference to HREF %gloss2href = (); # glossary term to HREF @sections = (); # list of sections %tag2pro = (); # protected sections # # initial indexes # $bib_num = 0; $foot_num = 0; $gloss_num = 0; $idx_num = 0; $sec_num = 0; $doc_num = 0; $html_num = 0; # # can I use ISO8879 characters? (HTML+) # if ($T2H_USE_ISO) { $things_map{'bullet'} = "•"; $things_map{'copyright'} = "©"; $things_map{'dots'} = "…"; $things_map{'equiv'} = "≡"; $things_map{'expansion'} = "→"; $things_map{'point'} = "∗"; $things_map{'result'} = "⇒"; } # # read texi2html extensions (if any) # $extensions = 'texi2html.ext'; # extensions in working directory if (-f $extensions) { print "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } ($progdir = $0) =~ s/[^\/]+$//; if ($progdir && ($progdir ne './')) { $extensions = "${progdir}texi2html.ext"; # extensions in texi2html directory if (-f $extensions) { print "# reading extensions from $extensions\n" if $T2H_VERBOSE; require($extensions); } } print "# reading from $docu\n" if $T2H_VERBOSE; ######################################################################### # # latex2html stuff # # latex2html conversions consist of three stages: # 1) ToLatex: Put "latex" code into a latex file # 2) ToHtml: Use latex2html to generate corresponding html code and images # 3) FromHtml: Extract generated code and images from latex2html run # ########################## # default settings # # defaults for files and names sub l2h_Init { local($root) = @_; return 0 unless ($root); $l2h_name = "${root}_l2h"; $l2h_latex_file = "$docu_rdir${l2h_name}.tex"; $l2h_cache_file = "${docu_rdir}l2h_cache.pm"; $T2H_L2H_L2H = "latex2html" unless ($T2H_L2H_L2H); # destination dir -- generated images are put there, should be the same # as dir of enclosing html document -- $l2h_html_file = "$docu_rdir${l2h_name}.html"; $l2h_prefix = "${l2h_name}_"; return 1; } ########################## # # First stage: Generation of Latex file # Initialize with: l2h_InitToLatex # Add content with: l2h_ToLatex($text) --> HTML placeholder comment # Finish with: l2h_FinishToLatex # $l2h_latex_preample = <$l2h_latex_file")) { warn "$ERROR Error l2h: Can't open latex file '$latex_file' for writing\n"; return 0; } print "# l2h: use ${l2h_latex_file} as latex file\n" if ($T2H_VERBOSE); print L2H_LATEX $l2h_latex_preample; } # open database for caching l2h_InitCache(); $l2h_latex_count = 0; $l2h_to_latex_count = 0; $l2h_cached_count = 0; return 1; } # print text (1st arg) into latex file (if not already there), return # HTML commentary which can be later on replaced by the latex2html # generated text sub l2h_ToLatex { my($text) = @_; my($count); $l2h_to_latex_count++; $text =~ s/(\s*)$//; # try whether we can cache it my $cached_text = l2h_FromCache($text); if ($cached_text) { $l2h_cached_count++; return $cached_text; } # try whether we have text already on things to do unless ($count = $l2h_to_latex{$text}) { $count = $l2h_latex_count; $l2h_latex_count++; $l2h_to_latex{$text} = $count; $l2h_to_latex[$count] = $text; unless ($T2H_L2H_SKIP) { print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; print L2H_LATEX "$text\n"; print L2H_LATEX "\\begin{rawhtml}\n"; print L2H_LATEX "\n"; print L2H_LATEX "\\end{rawhtml}\n"; } } return ""; } # print closing into latex file and close it sub l2h_FinishToLatex { local ($reused); $reused = $l2h_to_latex_count - $l2h_latex_count - $l2h_cached_count; unless ($T2H_L2H_SKIP) { print L2H_LATEX $l2h_latex_closing; close(L2H_LATEX); } print "# l2h: finished to latex ($l2h_cached_count cached, $reused reused, $l2h_latex_count contents)\n" if ($T2H_VERBOSE); unless ($l2h_latex_count) { l2h_Finish(); return 0; } return 1; } ################################### # Second stage: Use latex2html to generate corresponding html code and images # # l2h_ToHtml([$l2h_latex_file, [$l2h_html_dir]]): # Call latex2html on $l2h_latex_file # Put images (prefixed with $l2h_name."_") and html file(s) in $l2h_html_dir # Return 1, on success # 0, otherwise # sub l2h_ToHtml { local($call, $ext, $root, $dotbug); if ($T2H_L2H_SKIP) { print "# l2h: skipping latex2html run\n" if ($T2H_VERBOSE); return 1; } # Check for dot in directory where dvips will work if ($T2H_L2H_TMP) { if ($T2H_L2H_TMP =~ /\./) { warn "$ERROR Warning l2h: l2h_tmp dir contains a dot. Use /tmp, instead\n"; $dotbug = 1; } } else { if (&getcwd =~ /\./) { warn "$ERROR Warning l2h: current dir contains a dot. Use /tmp as l2h_tmp dir \n"; $dotbug = 1; } } # fix it, if necessary and hope that it works $T2H_L2H_TMP = "/tmp" if ($dotbug); $call = $T2H_L2H_L2H; # use init file, if specified $call = $call . " -init_file " . $init_file if ($init_file && -f $init_file); # set output dir $call .= ($docu_rdir ? " -dir $docu_rdir" : " -no_subdir"); # use l2h_tmp, if specified $call = $call . " -tmp $T2H_L2H_TMP" if ($T2H_L2H_TMP); # options we want to be sure of $call = $call ." -address 0 -info 0 -split 0 -no_navigation -no_auto_link"; $call = $call ." -prefix ${l2h_prefix} $l2h_latex_file"; print "# l2h: executing '$call'\n" if ($T2H_VERBOSE); if (system($call)) { warn "l2h ***Error: '${call}' did not succeed\n"; return 0; } else { print "# l2h: latex2html finished successfully\n" if ($T2H_VERBOSE); return 1; } } # this is directly pasted over from latex2html sub getcwd { local($_) = `pwd`; die "'pwd' failed (out of memory?)\n" unless length; chop; $_; } ########################## # Third stage: Extract generated contents from latex2html run # Initialize with: l2h_InitFromHtml # open $l2h_html_file for reading # reads in contents into array indexed by numbers # return 1, on success -- 0, otherwise # Extract Html code with: l2h_FromHtml($text) # replaces in $text all previosuly inserted comments by generated html code # returns (possibly changed) $text # Finish with: l2h_FinishFromHtml # closes $l2h_html_dir/$l2h_name.".$docu_ext" sub l2h_InitFromHtml { local($h_line, $h_content, $count, %l2h_img); if (! open(L2H_HTML, "<${l2h_html_file}")) { print "$ERROR Error l2h: Can't open ${l2h_html_file} for reading\n"; return 0; } print "# l2h: use ${l2h_html_file} as html file\n" if ($T2H_VERBOSE); $l2h_html_count = 0; while ($h_line = ) { if ($h_line =~ /^/) { $count = $1; $h_content = ""; while ($h_line = ) { if ($h_line =~ /^/) { chomp $h_content; chomp $h_content; $l2h_html_count++; $h_content = l2h_ToCache($count, $h_content); $l2h_from_html[$count] = $h_content; $h_content = ''; last; } $h_content = $h_content.$h_line; } if ($hcontent) { print "$ERROR Warning l2h: l2h_end $l2h_name $count not found\n" if ($T2H_VERBOSE); close(L2H_HTML); return 0; } } } print "# l2h: Got $l2h_html_count of $l2h_latex_count html contents\n" if ($T2H_VERBOSE); close(L2H_HTML); return 1; } sub l2h_FromHtml { local($text) = @_; local($done, $to_do, $count); $to_do = $text; while ($to_do =~ /([^\000]*)([^\000]*)/) { $to_do = $1; $count = $2; $done = $3.$done; $done = "".$done if ($T2H_DEBUG & $DEBUG_L2H); $done = &l2h_ExtractFromHtml($count) . $done; $done = "".$done if ($T2H_DEBUG & $DEBUG_L2H); } return $to_do.$done; } sub l2h_ExtractFromHtml { local($count) = @_; return $l2h_from_html[$count] if ($l2h_from_html[$count]); if ($count >= 0 && $count < $l2h_latex_count) { # now we are in trouble local($l_l2h, $_); $l2h_extract_error++; print "$ERROR l2h: can't extract content $count from html\n" if ($T2H_VERBOSE); # try simple (ordinary) substition (without l2h) $l_l2h = $T2H_L2H; $T2H_L2H = 0; $_ = $l2h_to_latex{$count}; $_ = &substitute_style($_); &unprotect_texi; $_ = "" . $_ if ($T2H_DEBUG & $DEBUG_L2H); $T2H_L2H = $l_l2h; return $_; } else { # now we have been incorrectly called $l2h_range_error++; print "$ERROR l2h: Request of $count content which is out of valide range [0,$l2h_latex_count)\n"; return "" if ($T2H_DEBUG & $DEBUG_L2H); return ""; } } sub l2h_FinishFromHtml { if ($T2H_VERBOSE) { if ($l2h_extract_error + $l2h_range_error) { print "# l2h: finished from html ($l2h_extract_error extract and $l2h_range_error errors)\n"; } else { print "# l2h: finished from html (no errors)\n"; } } } sub l2h_Finish { l2h_StoreCache(); if ($T2H_L2H_CLEAN) { print "# l2h: removing temporary files generated by l2h extension\n" if $T2H_VERBOSE; while (<"$docu_rdir$l2h_name"*>) { unlink $_; } } print "# l2h: Finished\n" if $T2H_VERBOSE; return 1; } ############################## # stuff for l2h caching # # I tried doing this with a dbm data base, but it did not store all # keys/values. Hence, I did as latex2html does it sub l2h_InitCache { if (-r "$l2h_cache_file") { my $rdo = do "$l2h_cache_file"; warn("$ERROR l2h Error: could not load $docu_rdir$l2h_cache_file: $@\n") unless ($rdo); } } sub l2h_StoreCache { return unless $l2h_latex_count; my ($key, $value); open(FH, ">$l2h_cache_file") || return warn"$ERROR l2h Error: could not open $docu_rdir$l2h_cache_file for writing: $!\n"; while (($key, $value) = each %l2h_cache) { # escape stuff $key =~ s|/|\\/|g; $key =~ s|\\\\/|\\/|g; # weird, a \ at the end of the key results in an error # maybe this also broke the dbm database stuff $key =~ s|\\$|\\\\|; $value =~ s/\|/\\\|/g; $value =~ s/\\\\\|/\\\|/g; $value =~ s|\\\\|\\\\\\\\|g; print FH "\n\$l2h_cache_key = q/$key/;\n"; print FH "\$l2h_cache{\$l2h_cache_key} = q|$value|;\n"; } print FH "1;"; close(FH); } # return cached html, if it exists for text, and if all pictures # are there, as well sub l2h_FromCache { my $text = shift; my $cached = $l2h_cache{$text}; if ($cached) { while ($cached =~ m/SRC="(.*?)"/g) { unless (-e "$docu_rdir$1") { return undef; } } return $cached; } return undef; } # insert generated html into cache, move away images, # return transformed html $maximage = 1; sub l2h_ToCache { my $count = shift; my $content = shift; my @images = ($content =~ /SRC="(.*?)"/g); my ($src, $dest); for $src (@images) { $dest = $l2h_img{$src}; unless ($dest) { my $ext; if ($src =~ /.*\.(.*)$/ && $1 ne $docu_ext) { $ext = $1; } else { warn "$ERROR: L2h image $src has invalid extension\n"; next; } while (-e "$docu_rdir${docu_name}_$maximage.$ext") { $maximage++;} $dest = "${docu_name}_$maximage.$ext"; system("cp -f $docu_rdir$src $docu_rdir$dest"); $l2h_img{$src} = $dest; unlink "$docu_rdir$src" unless ($DEBUG & DEBUG_L2H); } $content =~ s/$src/$dest/g; } $l2h_cache{$l2h_to_latex[$count]} = $content; return $content; } #+++############################################################################ # # # Pass 1: read source, handle command, variable, simple substitution # # # #---############################################################################ @lines = (); # whole document @toc_lines = (); # table of contents @stoc_lines = (); # table of contents $curlevel = 0; # current level in TOC $node = ''; # current node name $node_next = ''; # current node next name $node_prev = ''; # current node prev name $node_up = ''; # current node up name $in_table = 0; # am I inside a table $table_type = ''; # type of table ('', 'f', 'v', 'multi') @tables = (); # nested table support $in_bibliography = 0; # am I inside a bibliography $in_glossary = 0; # am I inside a glossary $in_top = 0; # am I inside the top node $has_top = 0; # did I see a top node? $has_top_command = 0; # did I see @top for automatic pointers? $in_pre = 0; # am I inside a preformatted section $in_list = 0; # am I inside a list $in_html = 0; # am I inside an HTML section $first_line = 1; # is it the first line $dont_html = 0; # don't protect HTML on this line $deferred_ref = ''; # deferred reference for indexes @html_stack = (); # HTML elements stack $html_element = ''; # current HTML element &html_reset; %macros = (); # macros # init l2h $T2H_L2H = &l2h_Init($docu_name) if ($T2H_L2H); $T2H_L2H = &l2h_InitToLatex if ($T2H_L2H); # build code for simple substitutions # the maps used (%simple_map and %things_map) MUST be aware of this # watch out for regexps, / and escaped characters! $subst_code = ''; foreach (keys(%simple_map)) { ($re = $_) =~ s/(\W)/\\$1/g; # protect regexp chars $subst_code .= "s/\\\@$re/$simple_map{$_}/g;\n"; } foreach (keys(%things_map)) { $subst_code .= "s/\\\@$_\\{\\}/$things_map{$_}/g;\n"; } if ($use_acc) { # accentuated characters foreach (keys(%accent_map)) { if ($_ eq "`") { $subst_code .= "s/$;3"; } elsif ($_ eq "'") { $subst_code .= "s/$;4"; } else { $subst_code .= "s/\\\@\\$_"; } $subst_code .= "([a-z])/&\${1}$accent_map{$_};/gi;\n"; } } eval("sub simple_substitutions { $subst_code }"); &init_input; INPUT_LINE: while ($_ = &next_line) { # # remove \input on the first lines only # if ($first_line) { next if /^\\input/; $first_line = 0; } # non-@ substitutions cf. texinfmt.el # # parse texinfo tags # $tag = ''; $end_tag = ''; if (/^\s*\@end\s+(\w+)\b/) { $end_tag = $1; } elsif (/^\s*\@(\w+)\b/) { $tag = $1; } # # handle @html / @end html # if ($in_html) { if ($end_tag eq 'html') { $in_html = 0; } else { $tag2pro{$in_html} .= $_; } next; } elsif ($tag eq 'html') { $in_html = $PROTECTTAG . ++$html_num; push(@lines, $in_html); next; } # # try to remove inlined comments # syntax from tex-mode.el comment-start-skip # s/((^|[^\@])(\@\@)*)\@c(omment | |\{|$).*/$1/; # Sometimes I use @c right at the end of a line ( to suppress the line feed ) # s/((^|[^\@])(\@\@)*)\@c(omment)?$/$1/; # s/((^|[^\@])(\@\@)*)\@c(omment)? .*/$1/; # s/(.*)\@c{.*?}(.*)/$1$2/; # s/(.*)\@comment{.*?}(.*)/$1$2/; # s/^(.*)\@c /$1/; # s/^(.*)\@comment /$1/; ############################################################# # value substitution before macro expansion, so that # it works in macro arguments s/\@value{($VARRE)}/$value{$1}/eg; ############################################################# # macro substitution while (/\@(\w+)/g) { if (exists($macros->{$1})) { my $before = $`; my $name = $1; my $after = $'; my @args; my $args; if ($after =~ /^\s*{(.*?[^\\])}(.*)/) { $args = $1; $after = $2; } elsif (@{$macros->{$name}->{Args}} == 1) { $args = $after; $args =~ s/^\s*//; $args =~ s/\s*$//; $after = ''; } $args =~ s|\\\\|\\|g; $args =~ s|\\{|{|g; $args =~ s|\\}|}|g; if (@{$macros->{$name}->{Args}} > 1) { $args =~ s/(^|[^\\]),/$1$;/g ; $args =~ s|\\,|,|g; @args = split(/$;\s*/, $args) if (@{$macros->{$name}->{Args}} > 1); } else { $args =~ s|\\,|,|g; @args = ($args); } my $macrobody = $macros->{$name}->{Body}; for ($i=0; $i<=$#args; $i++) { $macrobody =~ s|\\$macros->{$name}->{Args}->[$i]\\|$args[$i]|g; } $macrobody =~ s|\\\\|\\|g; $_ = $before . $macrobody . $after; unshift @input_spool, map {$_ = $_."\n"} split(/\n/, $_); next INPUT_LINE; } } # # # try to skip the line # if ($end_tag) { $in_titlepage = 0 if $end_tag eq 'titlepage'; next if $to_skip{"end $end_tag"}; } elsif ($tag) { $in_titlepage = 1 if $tag eq 'titlepage'; next if $to_skip{$tag}; last if $tag eq 'bye'; } if ($in_top) { # parsing the top node if ($tag eq 'node' || ($sec2level{$tag} && $tag !~ /unnumbered/ && $tag !~ /heading/)) { # no more in top $in_top = 0; push(@lines, $TOPEND); } } unless ($in_pre) { s/``/\"/g; s/''/\"/g; s/([\w ])---([\w ])/$1--$2/g; } # # analyze the tag # if ($tag) { # skip lines &skip_until($tag), next if $tag eq 'ignore'; &skip_until($tag), next if $tag eq 'ifnothtml'; if ($tag eq 'ifinfo') { &skip_until($tag), next unless $T2H_EXPAND eq 'info'; } if ($tag eq 'iftex') { &skip_until($tag), next unless $T2H_EXPAND eq 'tex'; } if ($tag eq 'tex') { # add to latex2html file if ($T2H_EXPAND eq 'tex' && $T2H_L2H && ! $in_pre) { # add space to the end -- tex(i2dvi) does this, as well push(@lines, &l2h_ToLatex(&string_until($tag) . " ")); } else { &skip_until($tag); } next; } if ($tag eq 'titlepage') { next; } # handle special tables if ($tag =~ /^(|f|v|multi)table$/) { $table_type = $1; $tag = 'table'; } # special cases if ($tag eq 'top' || ($tag eq 'node' && /^\@node\s+top\s*,/i)) { $in_top = 1; $has_top = 1; $has_top_command = 1 if $tag eq 'top'; @lines = (); # ignore all lines before top (title page garbage) next; } elsif ($tag eq 'node') { if ($in_top) { $in_top = 0; push(@lines, $TOPEND); } warn "$ERROR Bad node line: $_" unless $_ =~ /^\@node\s$NODESRE$/o; # request of "Richard Y. Kim" s/^\@node\s+//; $_ = &protect_html($_); # if node contains '&' for instance ($node, $node_next, $node_prev, $node_up) = split(/,/); &normalise_node($node); &normalise_node($node_next); &normalise_node($node_prev); &normalise_node($node_up); $node =~ /\"/ ? push @lines, &html_debug("\n", __LINE__) : push @lines, &html_debug("\n", __LINE__); next; } elsif ($tag eq 'include') { if (/^\@include\s+($FILERE)\s*$/o) { $file = LocateIncludeFile($1); if ($file && -e $file) { &open($file); print "# including $file\n" if $T2H_VERBOSE; } else { warn "$ERROR Can't find $1, skipping"; } } else { warn "$ERROR Bad include line: $_"; } next; } elsif ($tag eq 'ifclear') { if (/^\@ifclear\s+($VARRE)\s*$/o) { next unless defined($value{$1}); &skip_until($tag); } else { warn "$ERROR Bad ifclear line: $_"; } next; } elsif ($tag eq 'ifset') { if (/^\@ifset\s+($VARRE)\s*$/o) { next if defined($value{$1}); &skip_until($tag); } else { warn "$ERROR Bad ifset line: $_"; } next; } elsif ($tag eq 'menu') { unless ($T2H_SHOW_MENU) { &skip_until($tag); next; } &html_push_if($tag); push(@lines, &html_debug('', __LINE__)); } elsif ($format_map{$tag}) { $in_pre = 1 if $format_map{$tag} eq 'PRE'; &html_push_if($format_map{$tag}); push(@lines, &html_debug('', __LINE__)); $in_list++ if $format_map{$tag} eq 'UL' || $format_map{$tag} eq 'OL' ; # push(@lines, &debug("

\n", __LINE__)) # if $tag =~ /example/i; # sunshine@sunshineco.com:
bla
looks better than #
\nbla
(at least on NeXTstep browser push(@lines, &debug("<$format_map{$tag}>" . ($in_pre ? '' : "\n"), __LINE__)); next; } elsif (exists $complex_format_map->{$tag}) { my $start = eval $complex_format_map->{$tag}->[0]; if ($@) { print "$ERROR: eval of complex_format_map->{$tag}->[0] $complex_format_map->{$tag}->[0]: $@"; $start = '
'
	  }
	  $in_pre = 1 if $start =~ /
\n", __LINE__));
		    &html_push_if('TABLE');
		} else {
		    push(@lines, &debug("
\n", __LINE__)); &html_push_if('DL'); } push(@lines, &html_debug('', __LINE__)); } else { warn "$ERROR Bad table line: $_"; } next; } elsif ($tag eq 'synindex' || $tag eq 'syncodeindex') { if (/^\@$tag\s+(\w+)\s+(\w+)\s*$/) { my $from = $1; my $to = $2; my $prefix_from = IndexName2Prefix($from); my $prefix_to = IndexName2Prefix($to); warn("$ERROR unknown from index name $from ind syn*index line: $_"), next unless $prefix_from; warn("$ERROR unknown to index name $to ind syn*index line: $_"), next unless $prefix_to; if ($tag eq 'syncodeindex') { $index_properties->{$prefix_to}->{'from_code'}->{$prefix_from} = 1; } else { $index_properties->{$prefix_to}->{'from'}->{$prefix_from} = 1; } } else { warn "$ERROR Bad syn*index line: $_"; } next; } elsif ($tag eq 'defindex' || $tag eq 'defcodeindex') { if (/^\@$tag\s+(\w+)\s*$/) { my $name = $1; $index_properties->{$name}->{name} = $name; $index_properties->{$name}->{code} = 1 if $tag eq 'defcodeindex'; } else { warn "$ERROR Bad defindex line: $_"; } next; } elsif (/^\@printindex/) { push (@lines, "$_"); next; } elsif ($tag eq 'sp') { push(@lines, &debug("

\n", __LINE__)); next; } elsif ($tag eq 'center') { push(@lines, &debug("

\n", __LINE__)); s/\@center//; } elsif ($tag eq 'setref') { &protect_html; # if setref contains '&' for instance if (/^\@$tag\s*{($NODERE)}\s*$/) { $setref = $1; $setref =~ s/\s+/ /g; # normalize $setref =~ s/ $//; $node2sec{$setref} = $name; $sec2node{$name} = $setref; $node2href{$setref} = "$docu_doc#$docid"; } else { warn "$ERROR Bad setref line: $_"; } next; } elsif ($tag eq 'lowersections') { local ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level + 1; } next; } elsif ($tag eq 'raisesections') { local ($sec, $level); while (($sec, $level) = each %sec2level) { $sec2level{$sec} = $level - 1; } next; } elsif ($tag eq 'macro' || $tag eq 'rmacro') { if (/^\@$tag\s*(\w+)\s*(.*)/) { my $name = $1; my @args; @args = split(/\s*,\s*/ , $1) if ($2 =~ /^\s*{(.*)}\s*/); $macros->{$name}->{Args} = \@args; $macros->{$name}->{Body} = ''; while (($_ = &next_line) && $_ !~ /\@end $tag/) { $macros->{$name}->{Body} .= $_; } die "ERROR: No closing '\@end $tag' found for macro definition of '$name'\n" unless (/\@end $tag/); chomp $macros->{$name}->{Body}; } else { warn "$ERROR: Bad macro defintion $_" } next; } elsif ($tag eq 'unmacro') { delete $macros->{$1} if (/^\@unmacro\s*(\w+)/); next; } elsif ($tag eq 'documentlanguage') { SetDocumentLanguage($1) if (!$T2H_LANG && /documentlanguage\s*(\w+)/); } elsif (defined($def_map{$tag})) { if ($def_map{$tag}) { s/^\@$tag\s+//; $tag = $def_map{$tag}; $_ = "\@$tag $_"; $tag =~ s/\s.*//; } } elsif (defined($user_sub{$tag})) { s/^\@$tag\s+//; $sub = $user_sub{$tag}; print "# user $tag = $sub, arg: $_" if $T2H_DEBUG & $DEBUG_USER; if (defined(&$sub)) { chop($_); &$sub($_); } else { warn "$ERROR Bad user sub for $tag: $sub\n"; } next; } if (defined($def_map{$tag})) { s/^\@$tag\s+//; if ($tag =~ /x$/) { # extra definition line $tag = $`; $is_extra = 1; } else { $is_extra = 0; } while (/\{([^\{\}]*)\}/) { # this is a {} construct ($before, $contents, $after) = ($`, $1, $'); # protect spaces $contents =~ s/\s+/$;9/g; # restore $_ protecting {} $_ = "$before$;7$contents$;8$after"; } @args = split(/\s+/, &protect_html($_)); foreach (@args) { s/$;9/ /g; # unprotect spaces s/$;7/\{/g; # ... { s/$;8/\}/g; # ... } } $type = shift(@args); $type =~ s/^\{(.*)\}$/$1/; print "# def ($tag): {$type} ", join(', ', @args), "\n" if $T2H_DEBUG & $DEBUG_DEF; $type .= ':'; # it's nicer like this my $name = shift(@args); $name =~ s/^\{(.*)\}$/$1/; if ($is_extra) { $_ = &debug("
", __LINE__); } else { $_ = &debug("
\n
", __LINE__); } if ($tag eq 'deffn' || $tag eq 'defvr' || $tag eq 'deftp') { $_ .= "$type $name"; $_ .= " @args" if @args; } elsif ($tag eq 'deftypefn' || $tag eq 'deftypevr' || $tag eq 'defcv' || $tag eq 'defop') { $ftype = $name; $name = shift(@args); $name =~ s/^\{(.*)\}$/$1/; $_ .= "$type $ftype $name"; $_ .= " @args" if @args; } else { warn "$ERROR Unknown definition type: $tag\n"; $_ .= "$type $name"; $_ .= " @args" if @args; } $_ .= &debug("\n
", __LINE__); $name = &unprotect_html($name); if ($tag eq 'deffn' || $tag eq 'deftypefn') { EnterIndexEntry('f', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@findex $name\n"); } elsif ($tag eq 'defop') { EnterIndexEntry('f', "$name on $ftype", $docu_doc, $section, \@lines); # unshift(@input_spool, "\@findex $name on $ftype\n"); } elsif ($tag eq 'defvr' || $tag eq 'deftypevr' || $tag eq 'defcv') { EnterIndexEntry('v', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@vindex $name\n"); } else { EnterIndexEntry('t', $name, $docu_doc, $section, \@lines); # unshift(@input_spool, "\@tindex $name\n"); } $dont_html = 1; } } elsif ($end_tag) { if ($format_map{$end_tag}) { $in_pre = 0 if $format_map{$end_tag} eq 'PRE'; $in_list-- if $format_map{$end_tag} eq 'UL' || $format_map{$end_tag} eq 'OL' ; &html_pop_if('P'); &html_pop_if('LI'); &html_pop_if(); push(@lines, &debug("\n", __LINE__)); push(@lines, &html_debug('', __LINE__)); } elsif (exists $complex_format_map->{$end_tag}) { my $end = eval $complex_format_map->{$end_tag}->[1]; if ($@) { print "$ERROR: eval of complex_format_map->{$end_tag}->[1] $complex_format_map->{$end_tag}->[0]: $@"; $end = '
' } $in_pre = 0 if $end =~ m|
|; push(@lines, html_debug($end, __LINE__)); } elsif ($end_tag =~ /^(|f|v|multi)table$/) { unless (@tables) { warn "$ERROR \@end $end_tag without \@*table\n"; next; } &html_pop_if('P'); ($table_type, $in_table) = split($;, shift(@tables)); unless ($1 eq $table_type) { warn "$ERROR \@end $end_tag without matching \@$end_tag\n"; next; } if ($table_type eq "multi") { push(@lines, "
\n"); &html_pop_if('TR'); } else { push(@lines, "\n"); &html_pop_if('DD'); } &html_pop_if(); if (@tables) { ($table_type, $in_table) = split($;, $tables[0]); } else { $in_table = 0; } } elsif (defined($def_map{$end_tag})) { push(@lines, &debug("\n", __LINE__)); } elsif ($end_tag eq 'menu') { &html_pop_if(); push(@lines, $_); # must keep it for pass 2 } next; } ############################################################# # anchor insertion while (/\@anchor\s*\{(.*?)\}/) { $_ = $`.$'; my $anchor = $1; $anchor = &normalise_node($anchor); push @lines, &html_debug("\n"); $node2href{$anchor} = "$docu_doc#$anchor"; next INPUT_LINE if $_ =~ /^\s*$/; } ############################################################# # index entry generation, after value substitutions if (/^\@(\w+?)index\s+/) { EnterIndexEntry($1, $', $docu_doc, $section, \@lines); next; } # # protect texi and HTML things &protect_texi; $_ = &protect_html($_) unless $dont_html; $dont_html = 0; # substitution (unsupported things) s/^\@exdent\s+//g; s/\@noindent\s+//g; s/\@refill\s+//g; # other substitutions &simple_substitutions; s/\@footnote\{/\@footnote$docu_doc\{/g; # mark footnotes, cf. pass 4 # # analyze the tag again # if ($tag) { if (defined($sec2level{$tag}) && $sec2level{$tag} > 0) { if (/^\@$tag\s+(.+)$/) { $name = $1; $name = &normalise_node($name); $level = $sec2level{$tag}; # check for index $first_index_chapter = $node if ($level == 1 && !$first_index_chapter && $name =~ /index/i); if ($in_top && /heading/){ $T2H_HAS_TOP_HEADING = 1; $_ = &debug("$name\n", __LINE__); &html_push_if('body'); print "# top heading, section $name, level $level\n" if $T2H_DEBUG & $DEBUG_TOC; } else { unless (/^\@\w*heading/) { unless (/^\@unnumbered/) { my $number = &update_sec_num($tag, $level); $name = $number. ' ' . $name if $T2H_NUMBER_SECTIONS; $sec2number{$name} = $number; $number2sec{$number} = $name; } if (defined($toplevel)) { push @lines, ($level==$toplevel ? $CHAPTEREND : $SECTIONEND); } else { # first time we see a "section" unless ($level == 1) { warn "$WARN The first section found is not of level 1: $_"; } $toplevel = $level; } push(@sections, $name); next_doc() if ($T2H_SPLIT eq 'section' || $T2H_SPLIT && $level == $toplevel); } $sec_num++; $docid = "SEC$sec_num"; $tocid = (/^\@\w*heading/ ? undef : "TOC$sec_num"); # check biblio and glossary $in_bibliography = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*bibliography$/i); $in_glossary = ($name =~ /^([A-Z]|\d+)?(\.\d+)*\s*glossary$/i); # check node if ($node) { warn "$ERROR Duplicate node found: $node\n" if ($node2sec{$node}); } else { $name .= ' ' while ($node2sec{$name}); $node = $name; } $name .= ' ' while ($sec2node{$name}); $section = $name; $node2sec{$node} = $name; $sec2node{$name} = $node; $node2href{$node} = "$docu_doc#$docid"; $node2next{$node} = $node_next; $node2prev{$node} = $node_prev; $node2up{$node} = $node_up; print "# node $node, section $name, level $level\n" if $T2H_DEBUG & $DEBUG_TOC; $node = ''; $node_next = ''; $node_prev = ''; $node_next = ''; if ($tocid) { # update TOC while ($level > $curlevel) { $curlevel++; push(@toc_lines, "
    \n"); } while ($level < $curlevel) { $curlevel--; push(@toc_lines, "
\n"); } $_ = &t2h_anchor($tocid, "$docu_doc#$docid", $name, 1); $_ = &substitute_style($_); push(@stoc_lines, "$_
\n") if ($level == 1); if ($T2H_NUMBER_SECTIONS) { push(@toc_lines, $_ . "
\n") } else { push(@toc_lines, "
  • " . $_ ."
  • "); } } else { push(@lines, &html_debug("\n", __LINE__)); } # update DOC push(@lines, &html_debug('', __LINE__)); &html_reset; $_ = " $name \n\n"; $_ = &debug($_, __LINE__); push(@lines, &html_debug('', __LINE__)); } # update DOC foreach $line (split(/\n+/, $_)) { push(@lines, "$line\n"); } next; } else { warn "$ERROR Bad section line: $_"; } } else { # track variables $value{$1} = Unprotect_texi($2), next if /^\@set\s+($VARRE)\s+(.*)$/o; delete $value{$1}, next if /^\@clear\s+($VARRE)\s*$/o; # store things $value{'_shorttitle'} = Unprotect_texi($1), next if /^\@shorttitle\s+(.*)$/; $value{'_setfilename'} = Unprotect_texi($1), next if /^\@setfilename\s+(.*)$/; $value{'_settitle'} = Unprotect_texi($1), next if /^\@settitle\s+(.*)$/; $value{'_author'} .= Unprotect_texi($1)."\n", next if /^\@author\s+(.*)$/; $value{'_subtitle'} .= Unprotect_texi($1)."\n", next if /^\@subtitle\s+(.*)$/; $value{'_title'} .= Unprotect_texi($1)."\n", next if /^\@title\s+(.*)$/; # list item if (/^\s*\@itemx?\s+/) { $what = $'; $what =~ s/\s+$//; if ($in_bibliography && $use_bibliography) { if ($what =~ /^$BIBRE$/o) { $id = 'BIB' . ++$bib_num; $bib2href{$what} = "$docu_doc#$id"; print "# found bibliography for '$what' id $id\n" if $T2H_DEBUG & $DEBUG_BIB; $what = &t2h_anchor($id, '', $what); } } elsif ($in_glossary && $T2H_USE_GLOSSARY) { $id = 'GLOSS' . ++$gloss_num; $entry = $what; $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; $gloss2href{$entry} = "$docu_doc#$id"; print "# found glossary for '$entry' id $id\n" if $T2H_DEBUG & $DEBUG_GLOSS; $what = &t2h_anchor($id, '', $what); } elsif ($in_table && ($table_type eq 'f' || $table_type eq 'v')) { EnterIndexEntry($table_type, $what, $docu_doc, $section, \@lines); } &html_pop_if('P'); if ($html_element eq 'DL' || $html_element eq 'DD') { if ($things_map{$in_table} && !$what) { # special case to allow @table @bullet for instance push(@lines, &debug("
    $things_map{$in_table}\n", __LINE__)); } else { push(@lines, &debug("
    \@$in_table\{$what\}\n", __LINE__)); } push(@lines, "
    "); &html_push('DD') unless $html_element eq 'DD'; if ($table_type) { # add also an index unshift(@input_spool, "\@${table_type}index $what\n"); } } elsif ($html_element eq 'TABLE') { push(@lines, &debug("$what\n", __LINE__)); &html_push('TR'); } elsif ($html_element eq 'TR') { push(@lines, &debug("\n", __LINE__)); push(@lines, &debug("$what\n", __LINE__)); } else { push(@lines, &debug("
  • $what\n", __LINE__)); &html_push('LI') unless $html_element eq 'LI'; } push(@lines, &html_debug('', __LINE__)); if ($deferred_ref) { push(@lines, &debug("$deferred_ref\n", __LINE__)); $deferred_ref = ''; } next; } elsif (/^\@tab\s+(.*)$/) { push(@lines, "$1\n"); next; } } } # paragraph separator if ($_ eq "\n" && ! $in_pre) { next if $#lines >= 0 && $lines[$#lines] eq "\n"; if ($html_element eq 'P') { push (@lines, &debug("

    \n", __LINE__)); } # else # { # push(@lines, "

    \n"); # $_ = &debug("

    \n", __LINE__); # } elsif ($html_element eq 'body' || $html_element eq 'BLOCKQUOTE' || $html_element eq 'DD' || $html_element eq 'LI') { &html_push('P'); push(@lines, &debug("

    \n", __LINE__)); } } # otherwise push(@lines, $_) unless $in_titlepage; push(@lines, &debug("

  • \n", __LINE__)) if ($tag eq 'center'); } # finish TOC $level = 0; while ($level < $curlevel) { $curlevel--; push(@toc_lines, "\n"); } print "# end of pass 1\n" if $T2H_VERBOSE; SetDocumentLanguage('en') unless ($T2H_LANG); #+++############################################################################ # # # Stuff related to Index generation # # # #---############################################################################ sub EnterIndexEntry { my $prefix = shift; my $key = shift; my $docu_doc = shift; my $section = shift; my $lines = shift; local $_; warn "$ERROR Undefined index command: $_", next unless (exists ($index_properties->{$prefix})); $key =~ s/\s+$//; $_ = $key; &protect_texi; $key = $_; $_ = &protect_html($_); my $html_key = substitute_style($_); my $id; $key = remove_style($key); $key = remove_things($key); $_ = $key; &unprotect_texi; $key = $_; while (exists $index->{$prefix}->{$key}) {$key .= ' '}; if ($lines->[$#lines] =~ /^$/) { $id = $1; } else { $id = 'IDX' . ++$idx_num; push(@$lines, &t2h_anchor($id, '', $T2H_INVISIBLE_MARK, !$in_pre)); } $index->{$prefix}->{$key}->{html_key} = $html_key; $index->{$prefix}->{$key}->{section} = $section; $index->{$prefix}->{$key}->{href} = "$docu_doc#$id"; print "# found ${prefix}index for '$key' with id $id\n" if $T2H_DEBUG & $DEBUG_INDEX; } sub IndexName2Prefix { my $name = shift; my $prefix; for $prefix (keys %$index_properties) { return $prefix if ($index_properties->{$prefix}->{name} eq $name); } return undef; } sub GetIndexEntries { my $normal = shift; my $code = shift; my ($entries, $prefix, $key) = ({}); for $prefix (keys %$normal) { for $key (keys %{$index->{$prefix}}) { $entries->{$key} = {%{$index->{$prefix}->{$key}}}; } } if (defined($code)) { for $prefix (keys %$code) { unless (exists $normal->{$keys}) { for $key (keys %{$index->{$prefix}}) { $entries->{$key} = {%{$index->{$prefix}->{$key}}}; $entries->{$key}->{html_key} = "$entries->{$key}->{html_key}"; } } } } return $entries; } sub byAlpha { if ($a =~ /^[A-Za-z]/) { if ($b =~ /^[A-Za-z]/) { return lc($a) cmp lc($b); } else { return 1; } } elsif ($b =~ /^[A-Za-z]/) { return -1; } else { return lc($a) cmp lc($b); } } sub GetIndexPages { my $entries = shift; my (@Letters, $key); my ($EntriesByLetter, $Pages, $page) = ({}, [], {}); my @keys = sort byAlpha keys %$entries; for $key (@keys) { push @{$EntriesByLetter->{uc(substr($key,0, 1))}} , $entries->{$key}; } @Letters = sort byAlpha keys %$EntriesByLetter; $T2H_SPLIT_INDEX = 0 unless ($T2H_SPLIT); unless ($T2H_SPLIT_INDEX) { $page->{First} = $Letters[0]; $page->{Last} = $Letters[$#Letters]; $page->{Letters} = \@Letters; $page->{EntriesByLetter} = $EntriesByLetter; push @$Pages, $page; return $Pages; } if ($T2H_SPLIT_INDEX =~ /^\d+$/) { my $i = 0; my ($prev_letter, $letter); $page->{First} = $Letters[0]; for $letter (@Letters) { if ($i > $T2H_SPLIT_INDEX) { $page->{Last} = $prev_letter; push @$Pages, {%$page}; $page->{Letters} = []; $page->{EntriesByLetter} = {}; $page->{First} = $letter; $i=0; } push @{$page->{Letters}}, $letter; $page->{EntriesByLetter}->{$letter} = [@{$EntriesByLetter->{$letter}}]; $i += scalar(@{$EntriesByLetter->{$letter}}); $prev_letter = $letter; } $page->{Last} = $Letters[$#Letters]; push @$Pages, {%$page}; } return $Pages; } sub GetIndexSummary { my $first_page = shift; my $Pages = shift; my $name = shift; my ($page, $letter, $summary, $i, $l1, $l2, $l); $i = 0; $summary = '
    Jump to:   '; for $page ($first_page, @$Pages) { for $letter (@{$page->{Letters}}) { $l = t2h_anchor('', "$page->{href}#${name}_$letter", "$letter", 0, 'style="text-decoration:none"') . "\n   \n"; if ($letter =~ /^[A-Za-z]/) { $l2 .= $l; } else { $l1 .= $l; } } } $summary .= $l1 . "
    \n" if ($l1); $summary .= $l2 . '

    '; return $summary; } sub PrintIndexPage { my $lines = shift; my $summary = shift; my $page = shift; my $name = shift; push @$lines, $summary; push @$lines , <

    EOT for $letter (@{$page->{Letters}}) { push @$lines, "\n"; for $entry (@{$page->{EntriesByLetter}->{$letter}}) { push @$lines, "\n"; } push @$lines, "\n"; } push @$lines, "
    Index Entry Section

    $letter
    " . t2h_anchor('', $entry->{href}, $entry->{html_key}) . "" . t2h_anchor('', sec_href($entry->{section}), clean_name($entry->{section})) . "

    "; push @$lines, $summary; } sub PrintIndex { my $lines = shift; my $name = shift; my $section = shift; $section = 'Top' unless $section; my $prefix = IndexName2Prefix($name); warn ("$ERROR printindex: bad index name: $name"), return unless $prefix; if ($index_properties->{$prefix}->{code}) { $index_properties->{$prefix}->{from_code}->{$prefix} = 1; } else { $index_properties->{$prefix}->{from}->{$prefix}= 1; } my $Entries = GetIndexEntries($index_properties->{$prefix}->{from}, $index_properties->{$prefix}->{from_code}); return unless %$Entries; if ($T2H_IDX_SUMMARY) { my $key; open(FHIDX, ">$docu_rdir$docu_name" . "_$name.idx") || die "Can't open > $docu_rdir$docu_name" . "_$name.idx for writing: $!\n"; print "# writing $name index summary in $docu_rdir$docu_name" . "_$name.idx...\n" if $T2H_VERBOSE; for $key (sort keys %$Entries) { print FHIDX "$key\t$Entries->{$key}->{href}\n"; } } my $Pages = GetIndexPages($Entries); my $page; my $first_page = shift @$Pages; my $sec_name = $section; # remove section number $sec_name =~ s/.*? // if $sec_name =~ /^([A-Z]|\d+)\./; ($first_page->{href} = sec_href($section)) =~ s/\#.*$//; # Update tree structure of document if (@$Pages) { my $sec; my @after; while (@sections && $sections[$#sections] ne $section) { unshift @after, pop @sections; } for $page (@$Pages) { my $node = ($page->{First} ne $page->{Last} ? "$sec_name: $page->{First} -- $page->{Last}" : "$sec_name: $page->{First}"); push @sections, $node; $node2sec{$node} = $node; $sec2node{$node} = $node; $node2up{$node} = $section; $page->{href} = next_doc(); $page->{name} = $node; $node2href{$node} = $page->{href}; if ($prev_node) { $node2next{$prev_node} = $node; $node2prev{$node} = $prev_node; } $prev_node = $node; } push @sections, @after; } my $summary = GetIndexSummary($first_page, $Pages, $name); PrintIndexPage($lines, $summary, $first_page, $name); for $page (@$Pages) { push @$lines, ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); push @$lines, "

    $page->{name}

    \n"; PrintIndexPage($lines, $summary, $page, $name); } } #+++############################################################################ # # # Pass 2/3: handle style, menu, index, cross-reference # # # #---############################################################################ @lines2 = (); # whole document (2nd pass) @lines3 = (); # whole document (3rd pass) $in_menu = 0; # am I inside a menu while (@lines) { $_ = shift(@lines); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@lines2, $_); next; } # # menu # if (/^\@menu\b/) { $in_menu = 1; $in_menu_listing = 1; push(@lines2, &debug("
    \n", __LINE__)); next; } if (/^\@end\s+menu\b/) { if ($in_menu_listing) { push(@lines2, &debug("
    \n", __LINE__)); } else { push(@lines2, &debug("\n", __LINE__)); } $in_menu = 0; $in_menu_listing = 0; next; } if ($in_menu) { my ($node, $name, $descr); if (/^\*\s+($NODERE)::/o) { $node = $1; $descr = $'; } elsif (/^\*\s+(.+):\s+([^\t,\.\n]+)[\t,\.\n]/) { $name = $1; $node = $2; $descr = $'; } elsif (/^\*/) { warn "$ERROR Bad menu line: $_"; } else { if ($in_menu_listing) { $in_menu_listing = 0; push(@lines2, &debug("\n", __LINE__)); } # should be like verbatim -- preseve spaces, etc s/ /\ /g; $_ .= "
    \n"; push(@lines2, $_); } if ($node) { if (! $in_menu_listing) { $in_menu_listing = 1; push(@lines2, &debug("\n", __LINE__)); } # look for continuation while ($lines[0] =~ /^\s+\w+/) { $descr .= shift(@lines); } &menu_entry($node, $name, $descr); } next; } # # printindex # PrintIndex(\@lines2, $2, $1), next if (/^\@printindex\s+(\w+)/); # # simple style substitutions # $_ = &substitute_style($_); # # xref # while (/\@(x|px|info|)ref{([^{}]+)(}?)/) { # note: Texinfo may accept other characters ($type, $nodes, $full) = ($1, $2, $3); ($before, $after) = ($`, $'); if (! $full && $after) { warn "$ERROR Bad xref (no ending } on line): $_"; $_ = "$before$;0${type}ref\{$nodes$after"; next; # while xref } if ($type eq 'x') { $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} "; } elsif ($type eq 'px') { $type = "$T2H_WORDS->{$T2H_LANG}->{'see'} "; } elsif ($type eq 'info') { $type = "$T2H_WORDS->{$T2H_LANG}->{'See'} Info"; } else { $type = ''; } unless ($full) { $next = shift(@lines); $next = &substitute_style($next); chop($nodes); # remove final newline if ($next =~ /\}/) { # split on 2 lines $nodes .= " $`"; $after = $'; } else { $nodes .= " $next"; $next = shift(@lines); $next = &substitute_style($next); chop($nodes); if ($next =~ /\}/) { # split on 3 lines $nodes .= " $`"; $after = $'; } else { warn "$ERROR Bad xref (no ending }): $_"; $_ = "$before$;0xref\{$nodes$after"; unshift(@lines, $next); next; # while xref } } } $nodes =~ s/\s+/ /g; # remove useless spaces @args = split(/\s*,\s*/, $nodes); $node = $args[0]; # the node is always the first arg $node = &normalise_node($node); $sec = $args[2] || $args[1] || $node2sec{$node}; $href = $node2href{$node}; if (@args == 5) { # reference to another manual $sec = $args[2] || $node; $man = $args[4] || $args[3]; $_ = "${before}${type}$T2H_WORDS->{$T2H_LANG}->{'section'} `$sec' in \@cite{$man}$after"; } elsif ($type =~ /Info/) { # inforef warn "$ERROR Wrong number of arguments: $_" unless @args == 3; ($nn, $_, $in) = @args; $_ = "${before}${type} file `$in', node `$nn'$after"; } elsif ($sec && $href && ! $T2H_SHORT_REF) { $_ = "${before}${type}"; $_ .= "$T2H_WORDS->{$T2H_LANG}->{'section'} " if ${type}; $_ .= &t2h_anchor('', $href, $sec) . $after; } elsif ($href) { $_ = "${before}${type} " . &t2h_anchor('', $href, $args[2] || $args[1] || $node) . $after; } else { warn "$ERROR Undefined node ($node): $_"; $_ = "$before$;0xref{$nodes}$after"; } } # replace images s[\@image\s*{(.+?)}] { my @args = split (/\s*,\s*/, $1); my $base = $args[0]; my $image = LocateIncludeFile("$base.png") || LocateIncludeFile("$base.jpg") || LocateIncludeFile("$base.gif"); warn "$ERROR no image file for $base: $_" unless ($image && -e $image); "\"$base\""; ($T2H_CENTER_IMAGE ? "
    \"$base\"
    " : "\"$base\""); }eg; # # try to guess bibliography references or glossary terms # unless (/^/) { $done .= $pre . &t2h_anchor('', $href, $what); } else { $done .= "$pre$what"; } $_ = $post; } $_ = $done . $_; } if ($T2H_USE_GLOSSARY) { $done = ''; while (/\b\w+\b/) { ($pre, $what, $post) = ($`, $&, $'); $entry = $what; $entry =~ tr/A-Z/a-z/ unless $entry =~ /^[A-Z\s]+$/; $href = $gloss2href{$entry}; if (defined($href) && $post !~ /^[^<]*<\/A>/) { $done .= $pre . &t2h_anchor('', $href, $what); } else { $done .= "$pre$what"; } $_ = $post; } $_ = $done . $_; } } # otherwise push(@lines2, $_); } print "# end of pass 2\n" if $T2H_VERBOSE; # # split style substitutions # while (@lines2) { $_ = shift(@lines2); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@lines3, $_); next; } # # split style substitutions # $old = ''; while ($old ne $_) { $old = $_; if (/\@(\w+)\{/) { ($before, $style, $after) = ($`, $1, $'); if (defined($style_map{$style})) { $_ = $after; $text = ''; $after = ''; $failed = 1; while (@lines2) { if (/\}/) { $text .= $`; $after = $'; $failed = 0; last; } else { $text .= $_; $_ = shift(@lines2); } } if ($failed) { die "* Bad syntax (\@$style) after: $before\n"; } else { $text = &apply_style($style, $text); $_ = "$before$text$after"; } } } } # otherwise push(@lines3, $_); } print "# end of pass 3\n" if $T2H_VERBOSE; #+++############################################################################ # # # Pass 4: foot notes, final cleanup # # # #---############################################################################ @foot_lines = (); # footnotes @doc_lines = (); # final document $end_of_para = 0; # true if last line is

    while (@lines3) { $_ = shift(@lines3); # # special case (protected sections) # if (/^$PROTECTTAG/o) { push(@doc_lines, $_); $end_of_para = 0; next; } # # footnotes # while (/\@footnote([^\{\s]+)\{/) { ($before, $d, $after) = ($`, $1, $'); $_ = $after; $text = ''; $after = ''; $failed = 1; while (@lines3) { if (/\}/) { $text .= $`; $after = $'; $failed = 0; last; } else { $text .= $_; $_ = shift(@lines3); } } if ($failed) { die "* Bad syntax (\@footnote) after: $before\n"; } else { $foot_num++; $docid = "DOCF$foot_num"; $footid = "FOOT$foot_num"; $foot = "($foot_num)"; push(@foot_lines, "

    " . &t2h_anchor($footid, "$d#$docid", $foot) . "

    \n"); $text = "

    $text" unless $text =~ /^\s*

    /; push(@foot_lines, "$text\n"); $_ = $before . &t2h_anchor($docid, "$docu_foot#$footid", $foot) . $after; } } # # remove unnecessary

    # if (/^\s*

    \s*$/) { next if $end_of_para++; } else { $end_of_para = 0; } # otherwise push(@doc_lines, $_); } print "# end of pass 4\n" if $T2H_VERBOSE; #+++############################################################################ # # # Pass 5: print things # # # #---############################################################################ $T2H_L2H = &l2h_FinishToLatex if ($T2H_L2H); $T2H_L2H = &l2h_ToHtml if ($T2H_L2H); $T2H_L2H = &l2h_InitFromHtml if ($T2H_L2H); # fix node2up, node2prev, node2next, if desired if ($has_top_command) { for $section (keys %sec2number) { $node = $sec2node{$section}; $node2up{$node} = Sec2UpNode($section) unless $node2up{$node}; $node2prev{$node} = Sec2PrevNode($section) unless $node2prev{$node}; $node2next{$node} = Sec2NextNode($section) unless $node2next{$node}; } } # prepare %T2H_THISDOC $T2H_THISDOC{fulltitle} = $value{'_title'} || $value{'_settitle'} || "Untitled Document"; $T2H_THISDOC{title} = $value{'_settitle'} || $T2H_THISDOC{fulltitle}; $T2H_THISDOC{author} = $value{'_author'}; $T2H_THISDOC{subtitle} = $value{'_subtitle'}; $T2H_THISDOC{shorttitle} = $value{'_shorttitle'}; for $key (keys %T2H_THISDOC) { $_ = &substitute_style($T2H_THISDOC{$key}); &unprotect_texi; s/\s*$//; $T2H_THISDOC{$key} = $_; } # if no sections, then simply print document as is unless (@sections) { print "# Writing content into $docu_top_file \n" if $T2H_VERBOSE; open(FILE, "> $docu_top_file") || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; &$T2H_print_page_head(\*FILE); $T2H_THIS_SECTION = \@doc_lines; t2h_print_lines(\*FILE); &$T2H_print_foot_navigation(\*FILE); &$T2H_print_page_foot(\*FILE); close(FILE); goto Finish; } # initialize $T2H_HREF, $T2H_NAME %T2H_HREF = ( 'First' , sec_href($sections[0]), 'Last', sec_href($sections[$#sections]), 'About', $docu_about. '#SEC_About', ); # prepare TOC, OVERVIEW, TOP $T2H_TOC = \@toc_lines; $T2H_OVERVIEW = \@stoc_lines; if ($has_top) { while (1) { $_ = shift @doc_lines; last if /$TOPEND/; push @$T2H_TOP, $_; } $T2H_HREF{'Top'} = $docu_top . '#SEC_Top'; } else { $T2H_HREF{'Top'} = $T2H_HREF{First}; } $node2href{Top} = $T2H_HREF{Top}; $T2H_HREF{Contents} = $docu_toc.'#SEC_Contents' if @toc_lines; $T2H_HREF{Overview} = $docu_stoc.'#SEC_OVERVIEW' if @stoc_lines; # settle on index if ($T2H_INDEX_CHAPTER) { $T2H_HREF{Index} = $node2href{normalise_node($T2H_INDEX_CHAPTER)}; warn "$ERROR T2H_INDEX_CHAPTER '$T2H_INDEX_CHAPTER' not found\n" unless $T2H_HREF{Index}; } if (! $T2H_HREF{Index} && $first_index_chapter) { $T2H_INDEX_CHAPTER = $first_index_chapter; $T2H_HREF{Index} = $node2href{$T2H_INDEX_CHAPTER}; } print "# Using '" . clean_name($T2H_INDEX_CHAPTER) . "' as index page\n" if ($T2H_VERBOSE && $T2H_HREF{Index}); %T2H_NAME = ( 'First', clean_name($sec2node{$sections[0]}), 'Last', clean_name($sec2node{$sections[$#sections]}), 'About', $T2H_WORDS->{$T2H_LANG}->{'About_Title'}, 'Contents', $T2H_WORDS->{$T2H_LANG}->{'ToC_Title'}, 'Overview', $T2H_WORDS->{$T2H_LANG}->{'Overview_Title'}, 'Index' , clean_name($T2H_INDEX_CHAPTER), 'Top', clean_name($T2H_TOP_HEADING || $T2H_THISDOC{'title'} || $T2H_THISDOC{'shorttitle'}), ); ############################################################################# # print frame and frame toc file # if ( $T2H_FRAMES ) { open(FILE, "> $docu_frame_file") || die "$ERROR: Can't open $docu_frame_file for writing: $!\n"; print "# Creating frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$T2H_print_frame(\*FILE); close(FILE); open(FILE, "> $docu_toc_frame_file") || die "$ERROR: Can't open $docu_toc_frame_file for writing: $!\n"; print "# Creating toc frame in $docu_frame_file ...\n" if $T2H_VERBOSE; &$T2H_print_toc_frame(\*FILE); close(FILE); } ############################################################################# # print Top # open(FILE, "> $docu_top_file") || die "$ERROR: Can't open $docu_top_file for writing: $!\n"; &$T2H_print_page_head(\*FILE) unless ($T2H_SPLIT); if ($has_top) { print "# Creating Top in $docu_top_file ...\n" if $T2H_VERBOSE; $T2H_THIS_SECTION = $T2H_TOP; $T2H_HREF{This} = $T2H_HREF{Top}; $T2H_NAME{This} = $T2H_NAME{Top}; &$T2H_print_Top(\*FILE); } close(FILE) if $T2H_SPLIT; ############################################################################# # Print sections # $T2H_NODE{Forward} = $sec2node{$sections[0]}; $T2H_NAME{Forward} = &clean_name($sec2node{$sections[0]}); $T2H_HREF{Forward} = sec_href($sections[0]); $T2H_NODE{This} = 'Top'; $T2H_NAME{This} = $T2H_NAME{Top}; $T2H_HREF{This} = $T2H_HREF{Top}; if ($T2H_SPLIT) { print "# writing " . scalar(@sections) . " sections in $docu_rdir$docu_name"."_[1..$doc_num]" if $T2H_VERBOSE; $previous = ($T2H_SPLIT eq 'chapter' ? $CHAPTEREND : $SECTIONEND); undef $FH; $doc_num = 0; } else { print "# writing " . scalar(@sections) . " sections in $docu_top_file ..." if $T2H_VERBOSE; $FH = \*FILE; $previous = ''; } $counter = 0; # loop through sections while ($section = shift(@sections)) { if ($T2H_SPLIT && ($T2H_SPLIT eq 'section' || $previous eq $CHAPTEREND)) { if ($FH) { #close previous page &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; &$T2H_print_page_foot($FH); close($FH); undef $FH; } } $T2H_NAME{Back} = $T2H_NAME{This}; $T2H_HREF{Back} = $T2H_HREF{This}; $T2H_NODE{Back} = $T2H_NODE{This}; $T2H_NAME{This} = $T2H_NAME{Forward}; $T2H_HREF{This} = $T2H_HREF{Forward}; $T2H_NODE{This} = $T2H_NODE{Forward}; if ($sections[0]) { $T2H_NODE{Forward} = $sec2node{$sections[0]}; $T2H_NAME{Forward} = &clean_name($T2H_NODE{Forward}); $T2H_HREF{Forward} = sec_href($sections[0]); } else { undef $T2H_HREF{Forward}, $T2H_NODE{Forward}, $T2H_NAME{Forward}; } $node = $node2up{$T2H_NODE{This}}; $T2H_HREF{Up} = $node2href{$node}; if ($T2H_HREF{Up} eq $T2H_HREF{This} || ! $T2H_HREF{Up}) { $T2H_NAME{Up} = $T2H_NAME{Top}; $T2H_HREF{Up} = $T2H_HREF{Top}; $T2H_NODE{Up} = 'Up'; } else { $T2H_NAME{Up} = &clean_name($node); $T2H_NODE{Up} = $node; } $node = $T2H_NODE{This}; $node = $node2prev{$node}; $T2H_NAME{Prev} = &clean_name($node); $T2H_HREF{Prev} = $node2href{$node}; $T2H_NODE{Prev} = $node; $node = $T2H_NODE{This}; if ($node2up{$node} && $node2up{$node} ne 'Top'&& ($node2prev{$node} eq $T2H_NODE{Back} || ! $node2prev{$node})) { $node = $node2up{$node}; while ($node && $node ne $node2up{$node} && ! $node2prev{$node}) { $node = $node2up{$node}; } $node = $node2prev{$node} unless $node2up{$node} eq 'Top' || ! $node2up{$node}; } else { $node = $node2prev{$node}; } $T2H_NAME{FastBack} = &clean_name($node); $T2H_HREF{FastBack} = $node2href{$node}; $T2H_NODE{FastBack} = $node; $node = $T2H_NODE{This}; $node = $node2next{$node}; $T2H_NAME{Next} = &clean_name($node); $T2H_HREF{Next} = $node2href{$node}; $T2H_NODE{Next} = $node; $node = $T2H_NODE{This}; if ($node2up{$node} && $node2up{$node} ne 'Top'&& ($node2next{$node} eq $T2H_NODE{Forward} || ! $node2next{$node})) { $node = $node2up{$node}; while ($node && $node ne $node2up{$node} && ! $node2next{$node}) { $node = $node2up{$node}; } } $node = $node2next{$node}; $T2H_NAME{FastForward} = &clean_name($node); $T2H_HREF{FastForward} = $node2href{$node}; $T2H_NODE{FastForward} = $node; if (! defined($FH)) { my $file = $T2H_HREF{This}; $file =~ s/\#.*$//; open(FILE, "> $docu_rdir$file") || die "$ERROR: Can't open $docu_rdir$file for writing: $!\n"; $FH = \*FILE; &$T2H_print_page_head($FH); t2h_print_label($FH); &$T2H_print_chapter_header($FH) if $T2H_SPLIT eq 'chapter'; } else { t2h_print_label($FH); } $T2H_THIS_SECTION = []; while (@doc_lines) { $_ = shift(@doc_lines); last if ($_ eq $SECTIONEND || $_ eq $CHAPTEREND); push(@$T2H_THIS_SECTION, $_); } $previous = $_; &$T2H_print_section($FH); if ($T2H_VERBOSE) { $counter++; print "." if $counter =~ /00$/; } } if ($T2H_SPLIT) { &$T2H_print_chapter_footer($FH) if $T2H_SPLIT eq 'chapter'; &$T2H_print_page_foot($FH); close($FH); } print "\n" if $T2H_VERBOSE; ############################################################################# # Print ToC, Overview, Footnotes # undef $T2H_HREF{Prev}; undef $T2H_HREF{Next}; undef $T2H_HREF{Back}; undef $T2H_HREF{Forward}; undef $T2H_HREF{Up}; if (@foot_lines) { print "# writing Footnotes in $docu_foot_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_foot_file") || die "$ERROR: Can't open $docu_foot_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $docu_foot; $T2H_NAME{This} = $T2H_WORDS->{$T2H_LANG}->{'Footnotes_Title'}; $T2H_THIS_SECTION = \@foot_lines; &$T2H_print_Footnotes(\*FILE); close(FILE) if $T2H_SPLIT; } if (@toc_lines) { print "# writing Toc in $docu_toc_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_toc_file") || die "$ERROR: Can't open $docu_toc_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{Contents}; $T2H_NAME{This} = $T2H_NAME{Contents}; $T2H_THIS_SECTION = \@toc_lines; &$T2H_print_Toc(\*FILE); close(FILE) if $T2H_SPLIT; } if (@stoc_lines) { print "# writing Overview in $docu_stoc_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_stoc_file") || die "$ERROR: Can't open $docu_stoc_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{Overview}; $T2H_NAME{This} = $T2H_NAME{Overview}; $T2H_THIS_SECTION = \@stoc_lines; unshift @$T2H_THIS_SECTION, "

    \n"; push @$T2H_THIS_SECTION, "\n
    \n"; &$T2H_print_Overview(\*FILE); close(FILE) if $T2H_SPLIT; } if ($about_body = &$T2H_about_body()) { print "# writing About in $docu_about_file...\n" if $T2H_VERBOSE; open (FILE, "> $docu_about_file") || die "$ERROR: Can't open $docu_about_file for writing: $!\n" if $T2H_SPLIT; $T2H_HREF{This} = $T2H_HREF{About}; $T2H_NAME{This} = $T2H_NAME{About}; $T2H_THIS_SECTION = [$about_body]; &$T2H_print_About(\*FILE); close(FILE) if $T2H_SPLIT; } unless ($T2H_SPLIT) { &$T2H_print_page_foot(\*FILE); close (FILE); } Finish: &l2h_FinishFromHtml if ($T2H_L2H); &l2h_Finish if($T2H_L2H); print "# that's all folks\n" if $T2H_VERBOSE; exit(0); #+++############################################################################ # # # Low level functions # # # #---############################################################################ sub LocateIncludeFile { my $file = shift; my $dir; return $file if (-e $file && -r $file); foreach $dir (@T2H_INCLUDE_DIRS) { return "$dir/$file" if (-e "$dir/$file" && -r "$dir/$file"); } return undef; } sub clean_name { local ($_); $_ = &remove_style($_[0]); &unprotect_texi; return $_; } sub update_sec_num { local($name, $level) = @_; my $ret; $level--; # here we start at 0 if ($name =~ /^appendix/ || defined(@appendix_sec_num)) { # appendix style if (defined(@appendix_sec_num)) { &incr_sec_num($level, @appendix_sec_num); } else { @appendix_sec_num = ('A', 0, 0, 0); } $ret = join('.', @appendix_sec_num[0..$level]); } else { # normal style if (defined(@normal_sec_num)) { &incr_sec_num($level, @normal_sec_num); } else { @normal_sec_num = (1, 0, 0, 0); } $ret = join('.', @normal_sec_num[0..$level]); } $ret .= "." if $level == 0; return $ret; } sub incr_sec_num { local($level, $l); $level = shift(@_); $_[$level]++; foreach $l ($level+1 .. 3) { $_[$l] = 0; } } sub Sec2UpNode { my $sec = shift; my $num = $sec2number{$sec}; return '' unless $num; return 'Top' unless $num =~ /\.\d+/; $num =~ s/\.[^\.]*$//; $num = $num . '.' unless $num =~ /\./; return $sec2node{$number2sec{$num}}; } sub Sec2PrevNode { my $sec = shift; my $num = $sec2number{$sec}; my ($i, $post); if ($num =~ /(\w+)(\.$|$)/) { $num = $`; $i = $1; $post = $2; if ($i eq 'A') { $i = $normal_sec_num[0]; } elsif ($i ne '1') { # unfortunately, -- operator is not magical $i = chr(ord($i) + 1); } else { return ''; } return $sec2node{$number2sec{$num . $i . $post}} } return ''; } sub Sec2NextNode { my $sec = shift; my $num = $sec2number{$sec}; my $i; if ($num =~ /(\w+)(\.$|$)/) { $num = $`; $i = $1; $post = $2; if ($post eq '.' && $i eq $normal_sec_num[0]) { $i = 'A'; } else { $i++; } return $sec2node{$number2sec{$num . $i . $post}} } return ''; } sub check { local($_, %seen, %context, $before, $match, $after); while (<>) { if (/\@(\*|\.|\:|\@|\{|\})/) { $seen{$&}++; $context{$&} .= "> $_" if $T2H_VERBOSE; $_ = "$`XX$'"; redo; } if (/\@(\w+)/) { ($before, $match, $after) = ($`, $&, $'); if ($before =~ /\b[\w-]+$/ && $after =~ /^[\w-.]*\b/) { # e-mail address $seen{'e-mail address'}++; $context{'e-mail address'} .= "> $_" if $T2H_VERBOSE; } else { $seen{$match}++; $context{$match} .= "> $_" if $T2H_VERBOSE; } $match =~ s/^\@/X/; $_ = "$before$match$after"; redo; } } foreach (sort(keys(%seen))) { if ($T2H_VERBOSE) { print "$_\n"; print $context{$_}; } else { print "$_ ($seen{$_})\n"; } } } sub open { local($name) = @_; ++$fh_name; if (open($fh_name, $name)) { unshift(@fhs, $fh_name); } else { warn "$ERROR Can't read file $name: $!\n"; } } sub init_input { @fhs = (); # hold the file handles to read @input_spool = (); # spooled lines to read $fh_name = 'FH000'; &open($docu); } sub next_line { local($fh, $line); if (@input_spool) { $line = shift(@input_spool); return($line); } while (@fhs) { $fh = $fhs[0]; $line = <$fh>; return($line) if $line; close($fh); shift(@fhs); } return(undef); } # used in pass 1, use &next_line sub skip_until { local($tag) = @_; local($_); while ($_ = &next_line) { return if /^\@end\s+$tag\s*$/; } die "* Failed to find '$tag' after: " . $lines[$#lines]; } # used in pass 1 for l2h use &next_line sub string_until { local($tag) = @_; local($_, $string); while ($_ = &next_line) { return $string if /^\@end\s+$tag\s*$/; # $_ =~ s/hbox/mbox/g; $string = $string.$_; } die "* Failed to find '$tag' after: " . $lines[$#lines]; } # # HTML stacking to have a better HTML output # sub html_reset { @html_stack = ('html'); $html_element = 'body'; } sub html_push { local($what) = @_; push(@html_stack, $html_element); $html_element = $what; } sub html_push_if { local($what) = @_; push(@html_stack, $html_element) if ($html_element && $html_element ne 'P'); $html_element = $what; } sub html_pop { $html_element = pop(@html_stack); } sub html_pop_if { local($elt); if (@_) { foreach $elt (@_) { if ($elt eq $html_element) { $html_element = pop(@html_stack) if @html_stack; last; } } } else { $html_element = pop(@html_stack) if @html_stack; } } sub html_debug { local($what, $line) = @_; if ($T2H_DEBUG & $DEBUG_HTML) { $what = "\n" unless $what; return("$what") } return($what); } # to debug the output... sub debug { local($what, $line) = @_; return("$what") if $T2H_DEBUG & $DEBUG_HTML; return($what); } sub SimpleTexi2Html { local $_ = $_[0]; &protect_texi; &protect_html; $_ = substitute_style($_); $_[0] = $_; } sub normalise_node { local $_ = $_[0]; s/\s+/ /g; s/ $//; s/^ //; &protect_texi; &protect_html; $_ = substitute_style($_); $_[0] = $_; } sub menu_entry { my ($node, $name, $descr) = @_; my ($href, $entry); &normalise_node($node); $href = $node2href{$node}; if ($href) { $descr =~ s/^\s+//; $descr =~ s/\s*$//; $descr = SimpleTexi2Html($descr); if ($T2H_NUMBER_SECTIONS && !$T2H_NODE_NAME_IN_MENU && $node2sec{$node}) { $entry = $node2sec{$node}; $name = ''; } else { &normalise_node($name); $entry = ($name && ($name ne $node || ! $T2H_AVOID_MENU_REDUNDANCY) ? "$name : $node" : $node); } if ($T2H_AVOID_MENU_REDUNDANCY && $descr) { my $clean_entry = $entry; $clean_entry =~ s/^.*? // if ($clean_entry =~ /^([A-Z]|\d+)\.[\d\.]* /); $clean_entry =~ s/[^\w]//g; my $clean_descr = $descr; $clean_descr =~ s/[^\w]//g; $descr = '' if ($clean_entry eq $clean_descr) } push(@lines2,&debug('
    \n", __LINE__)); } elsif ($node =~ /^\(.*\)\w+/) { push(@lines2,&debug('\n", __LINE__)) } else { warn "$ERROR Undefined node of menu_entry ($node): $_"; } } sub do_ctrl { "^$_[0]" } sub do_email { local($addr, $text) = split(/,\s*/, $_[0]); $text = $addr unless $text; &t2h_anchor('', "mailto:$addr", $text); } sub do_sc { # l2h does this much better return &l2h_ToLatex("{\\sc ".&unprotect_html($_[0])."}") if ($T2H_L2H); return "\U$_[0]\E"; } sub do_math { return &l2h_ToLatex("\$".&unprotect_html($_[0])."\$") if ($T2H_L2H); return "".$text.""; } sub do_uref { local($url, $text, $only_text) = split(/,\s*/, $_[0]); $text = $only_text if $only_text; $text = $url unless $text; &t2h_anchor('', $url, $text); } sub do_url { &t2h_anchor('', $_[0], $_[0]) } sub do_acronym { return '' . $_[0] . ''; } sub do_accent { return "&$_[0]acute;" if $_[1] eq 'H'; return "$_[0]." if $_[1] eq 'dotaccent'; return "$_[0]*" if $_[1] eq 'ringaccent'; return "$_[0]".'[' if $_[1] eq 'tieaccent'; return "$_[0]".'(' if $_[1] eq 'u'; return "$_[0]_" if $_[1] eq 'ubaraccent'; return ".$_[0]" if $_[1] eq 'udotaccent'; return "$_[0]<" if $_[1] eq 'v'; return "&$_[0]cedil;" if $_[1] eq ','; return "$_[0]" if $_[1] eq 'dotless'; return undef; } sub apply_style { local($texi_style, $text) = @_; local($style); $style = $style_map{$texi_style}; if (defined($style)) { # known style if ($style =~ /^\"/) { # add quotes $style = $'; $text = "\`$text\'"; } if ($style =~ /^\&/) { # custom $style = $'; $text = &$style($text, $texi_style); } elsif ($style) { # good style $text = "<$style>$text"; } else { # no style } } else { # unknown style $text = undef; } return($text); } # remove Texinfo styles sub remove_style { local($_) = @_; 1 while(s/\@\w+{([^\{\}]+)}/$1/g); return($_); } sub remove_things { local ($_) = @_; s|\@(\w+)\{\}|$1|g; return $_; } sub substitute_style { local($_) = @_; local($changed, $done, $style, $text); &simple_substitutions; $changed = 1; while ($changed) { $changed = 0; $done = ''; while (/\@(\w+){([^\{\}]+)}/ || /\@(,){([^\{\}]+)}/) { $text = &apply_style($1, $2); if ($text) { $_ = "$`$text$'"; $changed = 1; } else { $done .= "$`\@$1"; $_ = "{$2}$'"; } } $_ = $done . $_; } return($_); } sub t2h_anchor { local($name, $href, $text, $newline, $extra_attribs) = @_; local($result); $result = " $what =~ s/\&/\&\#38;/g; $what =~ s/\/\&\#62;/g; # restore anything in quotes # this fixes my problem where I had: # < IMG SRC="leftarrow.gif" ALT="<--" > but what if I wanted < in my ALT text ?? # maybe byte stuffing or some other technique should be used. $what =~ s/\"([^\&]+)\&\#60;(.*)\"/"$1<$2"/g; $what =~ s/\"([^\&]+)\&\#62;(.*)\"/"$1>$2"/g; $what =~ s/\"([^\&]+)\&\#38;(.*)\"/"$1&$2"/g; # but recognize some HTML things $what =~ s/\&\#60;\/A\&\#62;/<\/A>/g; # $what =~ s/\&\#60;A ([^\&]+)\&\#62;//g; # $what =~ s/\&\#60;IMG ([^\&]+)\&\#62;//g; # return($what); } sub unprotect_texi { s/$;0/\@/go; s/$;1/\{/go; s/$;2/\}/go; s/$;3/\`/go; s/$;4/\'/go; } sub Unprotect_texi { local $_ = shift; &unprotect_texi; return($_); } sub unprotect_html { local($what) = @_; $what =~ s/\&\#38;/\&/g; $what =~ s/\&\#60;/\/g; return($what); } sub t2h_print_label { my $fh = shift; my $href = shift || $T2H_HREF{This}; $href =~ s/.*#(.*)$/$1/; print $fh qq{\n}; } ############################################################################## # These next few lines are legal in both Perl and nroff. .00 ; # finish .ig 'di \" finish diversion--previous line must be blank .nr nl 0-1 \" fake up transition to first page again .nr % 0 \" start at page 1 '; __END__ ############# From here on it's a standard manual page ############ .so /usr/local/man/man1/texi2html.1 readline-7.0/doc/readline.ps000664 000436 000024 00002642037 12764101651 016143 0ustar00chetstaff000000 000000 %!PS-Adobe-2.0 %%Creator: dvips(k) 5.996 Copyright 2016 Radical Eye Software %%Title: readline.dvi %%CreationDate: Wed Sep 7 17:16:25 2016 %%Pages: 80 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 %%+ CMSLTT10 CMTI10 CMSL10 CMSS10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o readline.ps readline.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2016.09.07:1716 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 44 /comma put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5D2579DAAEE12528C23ED8A1A2F34CAD1CE8BA67D0B660E9281F247EC10F816B FBD6B9E8AAAA1DFCC4C9FF1C6AD05C0D776DBF675838C2629826D5337EED815F 4268604A4EED01A2C7842FCAED2E37F7F39F980866DC5BCACA8616749FFE946C A0AB0475DA734C00D99912C544BD31F8A69367D068F0A18EE79FBD4D5385B8C1 DEB92502ACB3B657A54C9BF786D7DC1ACABDF29591D77ACE1D4FE00E935D2858 3733656C79DD1C174C26DD97D462B4323F33B410DEB64244095927C572FA90C6 4C8B709C5B7E4386AEB936C2656B59AAFB74F9E40E680D890903458CB1B2AB8E 6E629F88B51546877F7799B99DECDC13638E2765343988DE2ED33279DEC3FF0E 2255A734F5925608991F068274CB1E5301C5B8623C5878851857B3E665490A7F FCE5A8DC0FFCF3D56BF55E4AB2ACC6743F52B59C1343A1C25BD46A6A3722957E 24A6F4B970A594F67A09BADB6A7B4BEAD3FF97D0734470750FCE29807D315EFE F93BE16F39C0B59D107D1834FDDFD520D8A429FCDCA408C79DEB580081191B43 20650B5375AECFC2DC500E3CA934AFA3D241FE7988892CEA42C8677DE18C43FA C3094F8DCB1D070DE0D32B69E2E1ECB4A82AD9E38D889D05418DF4E3C398FEA7 BFE9B364A389B13BE713F5B2553ACD16C14AAE521B63E8A7DD0258EFFB95646C 18226B01D916D41DDB322F6E83C3E3717FC113BF7D7AFDA2CC03B8175BD7DCD2 AEC82FB156E051F2D87B9F12F81E1F43E822EE27219758B3E237AD772E7B1DB0 19ABCE7BE6A2FC3C7DA0766FB82CEDBAFC19F7EB19C7448C1719C88FE99BCB73 F7DEA427FBFCDF4F00E0FDACD080AF068F7A1CDE18315BD694C60B1DC71DAF1D 1009AFC847156F96D9CD38A764D0EA70E5E9B6E19A2A0B80ECBB84CA44C137F1 4925EF5766F00C22F967F9F68D7637DF0982785DABB8684A5525C6D23DB05B31 026B49433392C8930BD9661B23C2EC0E0BC4F00FFB2587943DFDB4C6864CF1FC 7152CC20860754204B7D4536F3C11460CD2626DEE88BBFE1CAFB5E62C9BA0C8D 514629E5A25C4FDEDF56FA2CFEE1A648E78803062DAA41E3D2CA4400C74C3C33 B77692A278BCC9B4E4512CFE8D71D53750ED0F7BBBC811EDDDAE0E7049BD916F 8D1819A0AEF50E284BCE7CD48517DACB587D2C48AA89062A791DBA7549C22C0D 2B14B2FFB48A05CEFA73D1F81BECD4BE921AEF860B30CC1FEFA6199BB39A8156 1AC9CE55140BD9EFB3B2BCF6FB6645816F11C172C525D9E623FE2041BE9D41C1 A3338195A24873E110DE875B1E4FFD5CA3CC44FF36163C867855620EA60319B2 27A40368957F81B38F6346C45EEF35636B01923E356F2F4279001DF3FF52BA26 B0C523895515658EE61DCD016A839A71ACB5645B4CEF3035843545920F7F6624 B414350819CFBED577BEC9CAF1465EA75DFD39318F02ABF8697621325964DD46 E8206C04B7C5285DDC91EDBB7F76DF9C9448A778F4D62307B2F042B169053544 B3B19D36FF290B4BD1B807749BBF6077BA682539E07B846C9BEE668BC5DC5DEF CFAC349ECCA59B1A46CF89F2C410C648AB50B63BC616BA3D448B1A08A2C10BB2 CA96A7BB2A498E7F00CFFFAC03C1BFFBA166D4948593ACEFB6E1E6D586D24F58 43A02C59ADDAAC725D06E4C4EC1E1F5B2203289908605D950551C23A71E12403 A443576CA8BF7C365ED9ED2AC7FA6B17A786DFD3731967B43B8715028241DA09 934CD93AFE81013D9642DFBA66EA1C024FC804ED884088FA398F065F2AF53163 6ABC66A18AB971A7B494B6EE78A12FEF18EAB42529A1296D054ACA5BF2C386B3 5DC802B67E362B2FC35633487F2C0FC90333508BA50DCA2EBEE2FB939910E7EC 128B7A7AA0F7A7CA91AF854AD2505F5DA70889940C4945BE229F6C2ECD1A8D5A B35F475DA0D33125009C6C3E7730DACFCF279EDC74DFC88630342D1D81315AEF 884EABB7E785653BA2463C48708ECE70A49503575048CC768BB8F13FAECE7FCF 29FAE1045C5C6E475E634DA1A2128A0D16487BF3D62BBAAFF6ABE72FF971C361 E5B530D6C6977137319321BFDB6A526B7AEA07EB6548F6FACAD54C426D3E5207 0443CA8ED660D368BF42FA1107A9503F5FCC4EB8D4C7D2CE580597E4A84EEA31 135D139540C7D5B0AAE65FFE3475C1F2DA4318DB4204677B4C30652DA10155F9 C1CEE50DA12BF2F08521A17641A2F5541EC84195149392FB34E900EE8C130A72 A06E8D5C1C3012486BCBE6F82A8570054C243ADAB55F1BD0A2AC1D73029F6E0A 91230FC5BD62E7C8179271886FE2A3D0A4D55D26A953064E16B99189D714CE51 6C1ED25B47BBBF5494E1C788038B82BFD0D6CE9DB60E49EAF500DF9ED431BE3B 5C5E93A14078C7962DCCF2A34966BC16EC17989C10D2C74FE0DC9306CEB61DF8 A42FB761999A3EB75E31431F568CDEB0A3CC8C5FB6B76B8768086F20D284D302 A144E5CDDB303676D612FE7D749FAF7E0EEBA5D5FF48E3CBBE5046131A8A00DB 21F4A2C8788781CC2D3ED96148B7C77CAA7278CC32284B2BC83BBF542172F186 677F635F73216E1D41D2CA802498C469234B79AF35BE521DF9E633293B1BAFDD 3A0B043626E3CB0EE9072FE09F90B8ABAB28F60C42CD3F2323B7BA4E4F9FF6C9 BEB3D0E12B74799E2321A65B88840470446AFB66E7B9FD92638947923F8942B8 B9182715510969377DE1362216F2EF6B96D4622ABE65EBBC5F7FC397B50DF682 07EEB73A649383B86EB255B9145916EE2E8C326052ECDE0EB367DCB62F7F88B3 6F9F23853CF377EDF5F4B1F0A6DF99EF29F21452D2628A40F589BBA831118DA9 DDF19BB85E5AF7D79F5DB4015D90F3AF189E7D5E9E3585B9D444218B889366E5 7B4B8EB34F4106ED4E54EF08F08581EB40A5B49E214A86251FEB131BCB071406 B322E962F9B14AEBD38747B44F976B30B184AD7667EB5AE3EBA6744D6C8422D8 F4CB40C3216799F46067651DD21F6F763A59E93B9A67484E6CF9EEE3913B6687 BFE8E68087D287651AA7666BA83B0D271A422E3F0FE0C2942AFA64F71B8237F5 31C7F7D6E5D4903D3CA32C77781BD8C959FD6DD1BE80C113B59B39F1941E8770 BF7F8B7139ADF77E2CCADFD99E2A87A5C10802D2D6CE3D9A3830378BE37D8903 B87B38EF25C49FE93C797FEF7114D4BE3A58555F701CE4D8BC2605CEA9725E08 B2460459E5A4CE44793FDF3C212A6B5909B49A4ECA55F53AA3B9AF63A2DDD339 9023D61FF6C29721EF2B49C89320372059FA33F25CF6BC7F64E3B4EC7D7527F9 62A8FE056259BFC788F24506F8F6E9777B693AA26F646A22F3ABA85A6FEE1B41 373D90C3CB55A474A2E5EF80A129F5628CD064B590DEEE7935DE9AF5D68C622C 814452DB304B52DEF5C9490B1366BA1834AC5B27DFF17CAA5722CF783AC8283D B84A3DD19587B204EF584499E78DB2222DCCD50847959B4820CCDC092F88693E 50B9DA33FFEE72C235520F58332A3725BF62BEB005D36FD3CD1B2310B2982A34 A095ACF013BB5C340A21B4537A7BDCD5161377A4818CC44D8A15BE7CACC03D33 11CDF7811E0CF02F6F3213D3B598713F2EDE54E6857A526879C920D085A01997 8DA06915850E5402A4444AABCB08881EDCA2DD068E1455BF9A155C54EF315FAA 279D726F57FC86300BC4D9DFCD4D44EDFDDD4B00DE34948028C7A9255B931CC2 77A0FF40F7ABEC709B67C6EADAD9D24B014DEB4C342E5F37E1CA26A1999CFDAF 50D8E76F1715FA8EF095B88D9A8DF4325572B26753F763F264DA8887E4E5845E 2A01F86149EBDD9CFC21CF2852CE95386DBB1E4DAA2113AA1E0C53746A3AA5F5 78570500FB89E376549E282E2AE990E72C0E77F701FCC977868ED3FBB7C9CCCF CD28795A80AE8787EF1D0C374297819A324504623E12688B08E4782B18F05C75 2E2CD594D0E6C10B002AD61CE491D4B95244E83DB861E36D293C0F556B295FBB 8F045711CD606D024F0F03603629F3BD495183E821D0A1ACD83F3376B62D278A FFD084EF020A119836EB60D0F8A059BAD8D8CCE26A37182E7C89CFC2AB80C724 275E921332ACC5A6991B36A2C7828B632DDDAF04780086F84E1A122461719992 061E3F597C8E6DD8ECE708251DE0DED5DAF913AD4130ED89DD271B17C556F466 A2587876F7954A9888751460B468313DDD88F267BE6C5FEA492A6CF1365AB8B0 D8E872A625799B9BE1859AEFAD98B6F41AE33D0CC069BD36333819995FD9B510 715BC8AC70443A107EB2E34809771DF24D3AC09D47768D3202D809B023FABA7D C6B8CACBEEC4B47082177995C3C00D08446DA56D527D8857E5D3342EC3C42DFA 7E35C992B8C2A50E7374FE57092086613D5A3B4567A9DA3758F48E6817CA3C2D BC552BF4A17E92DFB106E74A2C53DBEA13481DFB9EB64422F5CE073512B67018 46E902A52D5AC8A943C93B1921ACBA76D6DD2DE9077C280E1E6E43ABB9DD11AF E065D8EB102BB53A37F6B491EE341CC8D4D3AE311F122A28F7FC5481CC80E119 EC3E67AEAC772AB31D41151AD51B88122325456163D1E84EFBC5CB9A55BC4C15 7A2D56ABC55E61A49311ECB2C3267F7EAA3C284A0135985EB5E2D4113BDB8433 123A4A4109F6926D9C38D502B5659AF97969C3160BA5E6E32B95AD5D6855D307 89BDDE727683B2F05D6D9E74813CAF8038C03C574183CA79025D33FEBD68811E 1A3B42236EE1CF60614237538CB2C9567612DE1DAB1C864828B9604A5D4A52DF D5012F80352DB0AF93758E8DD4ACEC077160D74FC723F6878B2556690E9ACC91 5B552329E06B87A06E733270BE98C16A30CAE3A798CA80E7A9C3B8733A9428DE 0F4DAFA656E6D01470FA746BB58E686846C29933F9A48932E6AD3A20C7A0FA91 AA45745AF05ABC50D77498AF81E72D0DBF7D6FAF97E5538673C57A6EE39776EE 06BFD30F67A57AC796036A5394DC9A8C75556144497637C28F3C56DBFB21595A D2A46D6C4A0B63508A238B97ACB24499AB5540851B86E273B7B2DED24B458DB1 5280B3F9040C08672F7DFDC4B69C54B92EE3555902BF55D64CFC95A9DD143C18 FEEDB1BEA96762AECDA9DEE705AF2DD54C619328B9A26D019984DEC1EE34F30E CA4EBD5A4AB2C8547C0EB264D47943AF93E281A9E346B6346B809363CD7D67D9 9A8D6A2B1C109C8F226BE11C405F18E0197A47E44B57C1CBC8CAB957A2F60771 CF8DAD0E361FF6891CACF5672997B0357F9A5D16D424F2B32A0256210106B3B8 160B3CF0FB7D28A84FA861B0210F383466B6E69DA79B59D95AA05D608DAE9D56 7A05E3CBBDFA558C8F3A5D5AD9F70AD60FF059AD26041DE8819EDB2746DAB76A 6600D7C708F08D266FE22609BA7462A9378E691E175230E4D4CF6F1FB40BBCE0 31E34EE09023FB7BEB557267986637DD5D9C70E38C14E485BB6CDFE0826F9DFF F5094AABB6719C11474BD877358C603FE16B3A26B8C3CA026E6B29B1868F2AD6 2960CF99DE7E16B18D3480F52585F39D0B45574D4A0008BCD49C3F2B27930B25 3117251BB7116A23C586F7B0706F7F2BB00611C4FA705CC11783E6A1D868E1E4 5685B46356200BACD8C9851AC613169CDF40BBF1B400E21137D00EBA1E782E97 BD6972E405ECD84202049433393B3C283D44AF4C3BDB3D1B700F43AB576B4C7A 195500FEE676D1DE97C32859987267428884E4E58C2D8FB367810741B0FB7D37 4F185ECAE1AF834069503E8014FA13225152CBEDD5A1CB8895DE03E1B1704892 23D2C13F5EE53AD95EBE5C0AE07FE2DD36209897001FF645DB1276FDA49951B2 D319D63FB045B477BE528C3667F0CCB6853E0D31C77ACFBED46251BFD60C1321 D0FD450193208958E91C05E9518F3E2FB9D4B6AFD5084ED2C13DC3E59F85C853 10AB3B7706863D6056954E6E89A23D22FF9D3A868C7A47FAA92C95A5BCAAD7DA 0D145FDAEC7EF719C077D8FFB191CFE21E87736A98965A4A4AB2447B607D02AE 8995550F0BCEFA8BAB7A197C053F69BBA12CB7C01976219DFC6D2A49D415EFFA 66F17762549A09F43FFEC19B4A6CEE65A6903702F1750B263C342E5CD8D26F9B 363D9AF452BBB2B0D5551D412872AC8F781630B293FA0B96FF49893200BDC53E 32CAEA43D4AC2D01FB9212277ADB59C864CED023A8C30665A2BFD059A1031D86 6410CF5A2716F0927A8F9213C73681278B8EC121E0AC73D46A704D6B28D7B003 FD075F4455CABF65FE19A91768983B2B3FCD40AA0194EDEF3C94C06D2787F469 BB045AF387183D001E980E05859D316821023CBC205C505B11DA011D784B7F3A C47E20AD8F87E499D7D77EF84C75093BC67969E7CA8714F55D7945F799D6A640 E6F00FCFE28DE659F36F947324DFF4E79AEFB61EF14ACB3FC078873A17FCB5E1 D3C40C11B5A4327CF96E07F5CA9D62127553EE94BF3C148D9EB83353E9DBFDFD FF9FACBDC8AED20340D2FCA6F3866DF72EE9CC880E4069DAAA2BA5A845DE7FB6 CF7E686BC5CE9A4B6D37890D902CB7641033A7C1B7F974828F4FC8AF251F7985 E576958972852E144094C10EDA802DEE259F7437CD26A1C9094F87ED0697D713 94BF9E15347EF558B9D40243DDD348C7FDC96A1FB6D362BD9D955BAE3F6A2353 84D89A27BB4DABE3CB58A9334971E39215DE41B4DA77FFD32B088EDE2E23A26B 59273A7DC587D70CCDF43BC64BC3CB11B6EF90042B8193C0C4E66D9C7BC7F459 F8FFA1D733503659A2C2BA42C0A1E262D15E97A55E97D746455266507B4B2913 EAB47632D372206F3F1CA23939A281F2CDF5E2DFF06B94560879BE2080E2CBE7 DC93A7869391B1F44A4466B38B2A4A8A8F8774D76B8F2449435B525F2651791D 890D1078533B845F34713FC87A34153D1175B40B7A46F2C228C6405E4652E635 D9DC320111AB934184B34B30A946D74D30894AA99769BCD213FA3494F8C998D9 BE4501663B8CA4441C8A7A0314BE23D451D19E1ED15831DBB29180E023A989ED 4A4C4C92C65637A9DEB914179A4D3735CABEC726E9F431367994E32CA1C83541 ECCB0D463DB8A0316213A3356D7C654F9F5A4C57260485D0FE8ACFB6FA759A74 BC1C53F32A147A9F0B2264AA8CAC642D6D932E462D76F113ED2BE639DC67F8E9 7CEDAC5FC2ED44E4AF3ABB083F3D103378B784E9B0D88DDC98160629B0731AFD 1502AA443FFF69071A8C6E6EA0A309893DF57E550C270B7BA271234BC69DB3DE 7D7A87D9A8450596960F05942E390BD546A9C10501057B96009548EAA8FA3DD9 DE5BACF5AEDAEABC2998F34BB48497E022CF71C4260537F19A7D38679558E405 EEB015B7BDB6092553644D28857CF4FA28E18040C3E6B8DB88289CFB10FD86E1 99D4DAF86714EFA28E61FBB3010CCFB8EFD7C9B6E2B759F276616DDA9F90335A 388DDAC61C577A057434F28CCFB339902BE256D21F4D52DCD450AA5B747D7471 8098E4B634907BE1DAAA43FFAB7E4AA8705E76E9ED086CAF7D73375E7EC6626C FCAE8CE2AB754C256B795BE48428076BF67D614F3FB28AF32DFCD73F17B13E2B B127E86C5726769BA5A5D2045B839E4FB5D382E93851E839D2C0FF5824B72C84 D1C96EE48AFC44DBE54E1844BF709BD50C0E1D456EF920662D905C823C912A13 018EC340C0F4B508F7D8AEAF895AC0CEE8B15A2620DEAF8B4CDCCDCBF40D626E 43CB4C280366C106F7951D505973018D307D9858D32E7360183E68C226060B32 A342BF4CFFDE1AD9B5111CB80734C1E625343148FF2870D1D87DC70E9264E9E9 BA20D962DA30CB7A2755B510F86899FE1430E46E76672E30A1CED0AAAD9E983D 4E3911BB537D48A168F7B3BD46592FD4B07B9CE043BE9DE2148BE10BF8C30C68 76B76138AB34805C6D8B6454E3D5A830407A51B9E1A71DB17668E7A94BB150E7 BEAC13AE7363DEE94E696FEC3627958DC530490FEE0DBDA1ADA7F00848D3C3EA 683757DCB8AFEEA2C95B7B27D8EEC5956AF8E26BC8CFF14DD8A2E6A638C5D6CF E128C7F8BB3A3F27EC922041E857CB68CA824DE6DBC56F68CBD131AAEBD6B0BF 4189A1AFA1108BC42C2697B3C24AD8587EFF5C8B46A995CD881ED98523FC98CA 6A123D37FC9D79F0E9A6E6D9E783D8826A0A07A9EFCD563286710FA3CA4EF170 1B42B440BEF8ABA94FCCF86F0BA118F36F80F6BFFEA5D13CE0FF328CF428D437 EA9076A01A151C0D6CA5A7B8410815A88DD92BBD2A27EF160F39CAA7E0A27549 EE8E1B301374028A8C30504461A0CE8CF9D1AF3BC27182E4FCADBE153FC3BDCE 04B9EF6B6C383FCEEA6DD9D51CFC360A9DDA8F18F28175B3AC453E4387D9CF90 28B44827AEB043F2971C0E6C852882734C9B790DF14ADD37A55E807068431ACE 0BC67F4D03FBB3C611004D0C1E1B9D5CA572191A13820DE990F029E1EC07866B 9307D5B77304C9AA9D987D8E2CB1C302F4EBE5AE1A18EBE36901C6D94A3B4D48 F31301459C87955B6C24F48A98BE883BFBF526DB1DBFAD1D6B23F29E6C32B3C0 CC56550FB658455B8E3F2A76BCF1EBC9F6AAA1200C428465A22FC1C748CA45D2 7427F87D506B90D3C676AD753DDAE196464C9672614D1FC43F0DB91DD9A00B4E 9D8E31DFADEF3AB6518EA1C7BD9BE20AC8C66D0B1CE9737C338E02794640F7F4 F1F2E04CA39971AEBC9FB699ECA8F07569C8AD9833E69DD9EBAF42376BEA1961 9D3312A8620A66BC68607C0B7D723DEF61764B7CA43EBA27ABA5B0F518F40B01 E713AED7BA6E23BA5D866E10638DA78B9BFA68757921C9E766603F884C18E76F 848CE800A1A1E6FADA9E1BC717AF098446AF80924915D0AB86F4A3615D4FD49A A5A844530155E047DF9A6F878677C12391DC8FEE91C90709E3D06F31D10952A6 5B0D30556D0AA5F59DA5637BB280842DF8720816D67F465B48A063BD606B536D 760A402075ABBD70940DFB7EDA04B55B5E36D2B512A6D01E7E97FC90D708EAB6 0F9A77ADCAD63063C5837DDDF800A4D407601B15895E83B58359821426E93994 019B73A5FD9661550718CC3B2F79E9A6A0E7C4984EC1426C0B8EB86DDEAB3FCD D1B467FF32005EDABE59166D2E0564CCD1AF482301D2BFAF138F88E2FEC6AC7F 060555D402304EDECAD793EF9F779F6AC52B1AF86D714F5CDF3C574592E8C742 23204EC2C4C226968B8633554349A2C0A987E2812B8CA402A0A1BC7A16D452A5 76083FA380D36F227828DF913C468AC69C435B2341A590AEE61A44B1A00D5409 B836D6BD6670D5C02A614241941EFF04BB09366E4CCE644F8A3D2CAD5BF9E445 BA296EF46392ECA30976FC566CCD4354D124DA25D9708578214DA5582122D8F6 8EACCEA4CA8F63F15CAB59FDF29AEA5B4480023D6A61878B43B0F9CF1F4C6792 C9B0726B1D5162E665CE4F89BD724CA7B957DDF865F6833BDA3736310595F2A8 58182EFCF9911455FC934CEBD36C3D6E258D948AB4E28D225BAE6C73D7F96E9B EE7BB7FB24CFE23558DB7050113CF8FAAF62E6DF1B05064FA99C2016537F4A60 0C80147EBBB95DBFD8A03B125C464E5917AE0F11D293CB75C8FF18322D788FF9 61593E2CF4FFBDD2A1169A37CD3483C3125A9669231592B85D80FFC5FAABBB79 3E7F46EA5B3F67B0B5802642CC139D752C8A9FC6687CD6380192BBE2864AD792 F84A826F9052A4970DE4725B125874C162F00453A685A329867D237E3FF253B4 0B05384E0452602C3F021E47F5B2D680A5D120B7A7F4E261B1598DA4B55B3AA3 BE47D2C7FB46780153B3A7E124BEEBF25BA598021BF943DDDC3CAC5CC661FCD7 F78EAB069BDD1531684BADB59CB3DAA544A7F38429104399FFD147B2973E02BA 5D7C964A69650D9C5B1C3806A9B0F33478B9B2D8CB730D4E28BDF9C35A0E015E AEE3110714E6E09D51A47EBE4DD5C1A4A7E608B0C5233B85426B1696C88E4A1C 56210C41D7B778DFDAC0708EEEA185E37CEFDE917728E9E2BC9ACE85CEBFF12F 702AE7B7D0288FD933ADDC3AC849D7352613C41BA4A7988A08D24DDF178E3C48 1C7D348E7F5D67A764FDFBF5FB9A20195F4C806ACB59A47F334CE16B5CE3B8AC FC951D49170D29B662A7A6EBEC46EBA01C96E85F8A4559CBC60D675EB6E1D7B3 84C917104B318B9AD8CBAF12CFA478590690265DDB43198C7B7C1C6D5A23DB30 11C1D6AE610ABB2985CB9D00B91860963C316BC83B9F2747AA99CF8EC08CF47C D599CCA471FBD4C2059F8EF134050CC6247E9E56FD480E9B93DC083B0F16D673 7E0A1096C30E9B8B0501BB25516B18471413428F50217BC2EDFD22EC1135D121 DA739DCD4AB3AFDE2AB9407887D1F23CC5778C90D5C32BAA41A094968BB78F81 FE42DB18820C03641895AF1D998B2A0C5C1543FDF91D6562A7D63C136C47AD42 C1B04F7A70393CE6D13D313B63967BBA42F356AFDC81851BA94ACEA54ECAF0AD 8B6D4BC392CD8B4C71CBCD1B31A4FFC431970C88ED7D003EA9964F8829FA69C8 D7BB49B7AE6571ACC901BAECF22D72CF86CE1AC1D831FC5FB5E6FBAF959CDC2D 900A773752D320C730E4A8D8612CDABAB22B6FE49DCA590A05861E2421541766 3230671D0722C743024A8D143E3CA1DC3658F10B9779F4BB5859BBA03E03EA43 68F9B65C04CD618BF61F0110EFF9DAC63DD889230010AFB6EADC13371A34D3A7 CF3879D64242EB295ACFE2A2A7AA7D5919EBA50C38462BD9AC72160A24CAAA4D F467AF4A4102D2C291E4B80543BC7D72AAF725BE15A1CD8499ECF99B73105E15 53F2E4FCBFE1200A418A2207BF2F9D9BCDDDB62500F8394AA90E615D06A805EF BA1006E2C3638FF8AF1D67D3A02F3E5185394D4D83A8E0502759A14F38DB9523 1059BF230DFA29CF3020F2380406A8DBCABC40B50833E5E5253B524E2A4DE292 49117835FBA70CC6B1A7E662B1FF2A5C96AA9CBCBBA454A623CBD4FB0FE35578 3DC8B468AB579AA8D154035EB6F30F961412B5AFE7074F18AB9019AD2E600DCE 5C8376340B88DDFADCB4B1C46D4F63BBFA3631E11BA5DF550A4381B3DD1F1D11 F47DF28562E706A080E38B2E61E03603694816D50D9AE19079228882B70AB605 D5D4836F29B382A61683318A3442770BB18BC376EBC07BBDE01ECA8677702913 2688777C8CB4E87B6692E5E86A54A220F927C3CBF885A78960D307B572F57650 8D817DFB1124BDF3803A828D64EEE5EDC69D3568EF04D2D8C0285568817FA562 08FDB68E1C0B822668CB706C3700BF0C30D72D048B943D50B00889A33003B446 DD7F3E4B35F257B0537E91ED175FB3A32895457989C018A71A1023E096B539FF 1B09C66F77EF13F874F16E6F7D5BFD6EFF37202730AE5231A29B4F91B868C93B CB3D9F38159EB9CCA2E1B3CBF296E27005DF9884F71C733BD4EE3F144D37E20A 65262030DA75AF8151F141693F97E380C5733B92A5615351E506925301308872 09EAC5535D6185652AED2621F4E0D3224128620FB6D9D0B99C3D31B3E20F980A A43A22BDCF8A2779BE4744B76E908354589E1D69A7691884319FDF889A288E89 696E5FEFA1350410F0411CC4B1FA2E4A767A662606978716754FD44FD7161DD6 7CAEA2734F499316BAF6E665DD6C85980CEC818542DC7460B336097E25C47AAB F26FC408465B034EC7173FC10CC7FCE36A9D74786BF2007D0EA403D3F8E90FB9 852B4D1400ED16A4B945C3426617EF47A8118551D0CF6B5E95C525FB8A896FF7 FD7FABA141B597D27499B7D7D97712248CF0DF7976BED02A5D564D59B23F4B18 9F13FB0DC17334A496FE3C2C84F4CFEEC9F89B14A7482AB324DFB201B6B72295 98EFBE2C8A5A58FB4EEF33F4888773533A9D5D73732662192B72A1D5102E2F5E 247C9282EAF1705B5E96C9EDC36111AD5FC2E1FCC606DB766775AF00834B2631 AB76888E6FF3CD6BA444C804770463EF3F5014DB69D860EE563CBA238F8DC2ED 3B5948A27A0D02033850B4B49E15EFD202B0B3ECE75C407F0843FD84D070344E 01D1462A8F7CD73954D75D7CFE22A8F4B69185A3B3081C1D113D9B2FDA91AB0A 5D3FADD335B480F61C6A5C25496F3FAD35449A156A23CCC9C3D5BFF5F1C1D243 607E05B2F81999337A57A673026E7716ABD0395134BE23DC11484F898D9DC7E9 68CBA68E60DD836462767ADBCAB8F3353778FA7B976E01458064B51B5D2F2B53 4E26AA1EB608D072089F858B1C7A7E1C217C8872E44CC5AABC5DE83E10C3986F E5A484B2EF6D8B05F70C499BAF6054C05C10C1D45C8FEF8D493968F065EC4161 B8B04F8588F208C4902D37520724B2CB0299D8120D11B836F8B301229BC57CE8 3DE15D7DD8D829BA7A7F3E39885771A4469E5E4390A60C295926AB828CD91058 93832AC0A6BDC8A6B7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 67 /C put dup 68 /D put dup 69 /E put dup 72 /H put dup 74 /J put dup 76 /L put dup 77 /M put dup 92 /backslash put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F3693CB8D1F4 7E3376495E6CDA3BD280DEA744D382D720935D605E1E2464A31B86E831A1DB1B BA9185DC43D32993D3B5900F9D5B45EE9D2C607172A670530780EEA08AECBBF7 5F59F645CF7A86ED8CFFAAAE50BEC460C07B11BEAB82765FD18D152AD476B7B6 2D08A8C7B5D8F7B6400C8435E6F08CCDE4234D981D056E7F1B361F478759FFEA 468FDA9D4EE5B8BF0B83506B39C1FD36B16D14D5005202EEA3D9BF656BA60548 A94BAE6159A75BAA549ECB9D5272C475CFF6BC373C60723049295392D4BCA477 3FF6270B7658362D0014743F1686ECB611912E6B82670BCBA93832C4EC9CDD22 BB2FD9FF321840A882A1E2BE9B354E69C9F4C6210564C02DBD96D4BC181B4876 49818380D9DD9424E30DA3E8E3BE7682CE0CDF6CB3F7554ACDAE1812AD3B8AAF F0990BA00B058A1C5CC83A60491B7875821799B231BD9BF1D568ACFAE9E5FE2A 7558D3820A67A6158EA037FDBE8A6EADD8C934380101327B8F1736D996F9699D D64AF938C999C6C93C9DDC7A8F4497FE81DBB787F24EA08ACF82B3C7620088E1 8002FC529C8FAF40A519878DCB79EB5C7C34DD5D6F911D9DA790DAB33E7A8968 A266E95AA808AEC8FD854D1326778821DAAD03ADC0863C83E5D0FE70ABB35619 AB31554DED6142E2E1E26481377AE95C9F32D0EA3DE07F78C6A30FEB98B15F69 296FC94E6DAB5829F1B59672C6A87EE4E2CD3F0D9894D6DC8D7A514B6BABF018 B199CC3A4478821649A7389ED46DBB9AFB7D4FF7696F8DB586830D7F74F0FABD 4BB32F787DFF04CE1E7349704FB5D3154D1BE3CEA0B476C2B787C6E534061EA3 E28F7D8F65EB1FBD8177AA013A6FFC03BAE514112214F67C7957583FA78FA805 29C0AD1C6FF9750CA24D3505C889502833CB71EEAC21B8F2F4D3415372E0FD82 33A937D50F4BC55D381E2E2C831D2CBE4F960978BF7041FBB69C6C9C9246F8DF FA2D5C5875200AE8F9BE1C44F839F446C23E630B74B823FFFC88DC30B931769A 3D5D444376B7138972BE07E5D8215B79288401B0E9E76831250304635714B64B 2BAFC31E2583F26B15B38400125BE793931E7887175D98A1CE1505AD21BD08BA 16BFACB350DB1BB37E647D7A00A48130CA4F7B6FC5CA17FBA73F7737366E906B AA3335A2E51D65DFC79B1D87F109E9CF3F420408BFFC2C399CA6844A3C5D50C2 2B3673FD3A796F654D2624FE5B1E02C1720B91A00B4998F825D9C1EB29885A11 D100A98620A7C186BFAEEC214F0E63A21A28E076D0CFC7DF62A016A21AF198C7 28E5C374A93D0683E91F06858358E1AEFCCAAAF2CDBC382B1C999D489D06AB82 60D4C548B9AA7B011F0382324737A74EF18AE7D5402DB1B8FB15AC162E6E1D2D 371BB20E1F78C962F032B7647A301F771D496B14B11DD63965897BEA60DF1B75 EAED63791A62BA912A8ED5EFD66340D07FD2DD8A9EAA1A98957F8D4B9F0C7142 024FF2918E971B73F5BECDC098C7D011335077F059697C9429CA2E13B03886CA 5D07C7178C2368B4DBA1BE17A074A1565A9DFDEB90F96163829C4F2BE8D537D4 606E7CF1BB667190AEE95B4D68422B7EB84B054D41F6677D840ADA7BED269A8E 8ECEFA88484CDFD6F999D9F51F4431057929706105172AE2635764B326446A07 1BCB5A2277441E0C0C8A6CEDD2D886D794D3495F7CE828E1E9F65C3CB47C2634 1E3BA769EA7DD098296E5CC981916608DC33279BDF53510C8BBA06A0A0E9203C EA569B24DB5EC1DA6254156276944ECB2338CC5679558DFF053863B3E6FDCC2C FAA0D336E9ECA4236917455D8DFA46EAE6ABE8C942E087ADD33E3CE49C2A8C5E 9E4BF0A357D1B9DAD6B2C01D64D65A99EC728DADC5DA83FC279CD60A08971941 638CE3A7E1A298FB9832804EB4752758EE1ED81FA96B60A6AA1004D79AEE456F C3AF0687AD5AA5062DF7F0C8FE7AB78DC6122BD2894DBC59B4126A0D85F34C8D A748048087E7D9E12CF55AA2786E595EF5BEEABD86563204CFD5B1FCE181B2D0 5410E3836E394D0843984362F65D4A55D26C805E15EBF488AEACA766DB081C3E 51267E8BC8B7E4373183CC054B68A4839F842DB22341130D4A1D312DB573060A 7E73FCF514617C3D486651D2C8075E02331EFF65A2CE8B9AB7E35CD969550C2A 89DCE554802F08D5C6163A09E669B7F5C6754138D778CBC5458F40B4B51C9A93 5DD23BEDF12182BD5F1E42B2BFE76F421FD8128DA78F195038907F9EB52268A8 324B1A134148226CD0B235B8A6DBAA8508A7209720E892B910056D55AD5797D4 26ADBC7FC9E6A41F2EFA145DE8707D8AB76970B46D2F2CA4CE11DFB46B9D156A E75210C6F9A2B31DFFB3670CA8E52F322AAD31EB71D3E0C99CA791797650E5F5 FE5EDC86B5B19433B9363A388FBD4C8ECDBDD8281A81AC935371FEAA2B841C98 3E54FCA6C6445C89374981ADF8A974F5D5CACE8E158AAE572AFB2D282E73B1F6 C7150271CDE9FA5E5BB94244F04B0CB671EB2391BB35EC2FFBFC522237F54168 2A4AD8B48C84C4FEAA2602AF9483A1A07570F8E84434F1FD3942A13D3A30C1CA BD7901D49659C85ABFC78124215386C475AA0E229E98A9A2A47E32B46F09AAAD 6C8F0D5FE2E4D4D4BB3B3C3B23EDDAED65004BD410BA829EFFC414DE349F8852 75D4C9567FC887F173EA3E5AB863903C728D65DEAF592F400C803317FF9859E3 1BCB658A0458AA355CE3671C35047760ECFE8AC3A01C3B975F01A02CA21E4CF6 697A9B828DF3FD28BDD625D8502133E85586A0F66386AD428C1E65AF78A65106 188721680B04E7EB756C564859E4F8E16B9DE6B7231F8F8AEC8064CDD8C923AF 7B0888ACFC86AD6E03D83A37C52DFD5BAC714A09727B53ABA05461DA406D894B 81B4B43D3F737939EBB7CEF3C4CA965705411B1EFA1FB6385A6556913A6D32F0 3CDFDC04F88F214763B7E989D288C6B8861504CF5E8A6C67D16FAEE5E6962F6E 0935372016194115F205519805A8FE8EE76676EA3CC75CEF7C7326810BD3BE34 2EC114C3BD2508ABA9206401315D75C4AB6401E9AF3AABA580E47776C6A7D7AA B576D209AF4EF84F37608B2CE84D98008988331C5DEA082E8523E06A7BB59004 CB8C7F4F39B4E83C926CC519163C17FE4CF47F1B66CB444842F494B5C8C1A386 2DD05BED6BF59227A5757410F63CD8BB77AD0AB848E4B8FC85186E222208740C 09B0E47BCCBAC26EDCB9029727EB96521F17A7B32E719001E59C483237D8B9BD 6695799A0C3B80ED9C7D64DC153CBBCEFC22B4B25524BF5B301431F192BC6933 A6DA377691670958B04AA1F7491379CB60C87F3110CF2BEDE95D6611C2A9604E 083B721D51F513E47499871C0E3E504E8EE620CD2E0F450E3035CBCA94242BCB E42CB0E8408A3CCC5575C261F2325EAA2B06D91A65AEC162268D751CBBE9D5DB 469592065418BAFB50E658E286933DC0EDFB9E9F7D82AF9851E71AE9DC4A9DD0 8E01F2533F5C8F83DE9C0D0A49DFC375BA4F32C2BCA5774B702066CAE2647B9F AB7541FEC25269D28A7AB4F1F60F3EEEB5D2EE23408BCC84AE471EB6540A5438 DA807B936F6C27FDC536D2D8471EBE9967B9133A1A5641BE80E64632E61E5E8A 7700465D087E89BFD1C6197B8BA8A41CF2159A0817B5F95351E02E654CAA7978 1FA6571CE47EDE08B7E66A2D0C8EB88AD6E4F287B9809EE5485A94EFFE85A73C 454BF8BAB70BA2000F2B56BB3E0255892C3E4480C147CA11D4C3AB71744BC536 CD21B6DC302B5895BCA9E72285744E93E85D33A86688758A060304E3EF024281 590A765C943980884EAC5298497E7D2460C55EE1BD234C407FC63B9B3029C018 6C86BBBCA5BDCD4300359A40D1281A0211B09B2DF2941EA893F5DB95BDFDD018 6D674A37A25F63722AD62597314CABEC1F3A2460F51E00451D3095DAE1071ABB 17A8DB8BA0E224D420D4A0EFF9EA17FFC7801D36BABADACC27A0AF1879C56628 573059FD22294243357928DB4A835F02B3807067DC963CDE81CF4F69669421B4 88A159B3502CA9619F5B30CD992F3F94EF3868CC695F52C5E0619E88A750D6F4 90DF0CD32D6642A3D19549C733B89391041D0FC126AADC04D882188D9769CAB5 21BCEB131BC5283CE6E9E6F650246B1D59A7A559EB45AADD9A669FC39EDE6CAD FCA20CFE0922C8730D56962F4AD00DDDEE28B1A7C2FA02CC7C59932AC31BD59F E0C837740EA82EE6C804114DE18CA35D8EBDE3F0C16565C2F51A14083F5CDDED C5B7796F9E6717A6A3E963F3DCF7E76DD7F896716193C975F4EA5CC73F6E8C95 C987260A3653AA099EAE36068B7FD793154050D9868D9D30F4E4603AEF7B591E DFD9F478EB30D16AD0496965F5702DCA4BF33541778EA2FAB83C25313F8E694B 43FAD86D47D5E84B51309B3E7991B29E9922E80A34AA1A5B895765ACE2329F92 8A04E9A68A0D9C008EA9E52A114B3F09144C30A00A6E010BEDECB7B955AD1B06 467F156EF79E4AEE257AC357EE49724730D9DE4942E84ECBBFEC6CC7C85CA2B4 3BAE1CBA5ECFEACAA7ADFA4508F1DB7E6C37405439138ED4BF236C1589A319CD 3A5DD32D848C22F07732BCE84FD15F86AF8373AAC85252A8F8EB7F3915B52558 EF02270FFE20521F0347386B3A253A69D9510900F7052A95DE26B29D48D662A9 20A437B9944E0AB22AB623E7C766A752D89A57AE7BA6A64FD96FA05A5FDE6C8E C6084C44FF6732B5B95A844FFBE2BBB234A3A247D4D89B0FECCA87C986912A90 4791231605EE8EFAA7BC7F2FA5551991706DD4A677639A69EC231CEE3B0B05DE AD7C4A221B7B74349DEF428680366F1947D0103D5E4D72AF8579FF824DF89949 6904BD33856ED29B9AB43113DB038902A9DFB2DF3036B99E5508156522E76539 440A83884F8C08F8D8449DE3EBF2E6A775090536040BCB299FDCB7E9AB6AE453 3AD36E109C46221C82265DFA576029157FB1EB3236F1A84FCA1B9B68EA2AE583 6BCFC2D127B1A169A7392AC1AC251A14C32D643D21C5756BB6E39AD478160069 A11B985D9F69B800D339BB0242A9A7199E996B02467F6A1F220A8FC245BF2F45 5AED4D104C5513D3206D57C6DCD93B9428F82CD9938EF6468A165B5A53CF556A 68E702C0A9796DDFC79DFAEB0ED0267BD57D099D407AF32F8F84EECC9C84C57E C34339DD87991056EA0246914D3E2096517B7C0CD1F674CEE593B92129F0BEBC 2ED3DBAF4AA2EC0217DDA3A7265148B433CDBFF63A68C4A33BA2780E99BF8744 D3ECA386BA3872EDA1B99A6191EAA8FE477301A84DDFF5BCA00551286CF62477 10EDF4D58FB980707E202C9C337663C9B16F9283D36D540C75DDCFBD525473BB 027BBA7FD75E952C2ED012B5455FFE95DA7E04C20F8A7D5C11813646516968E4 36259B6A91966E87664978BEA76C2B2E093B2A65591D0EF3D501D91FE135C2BE E97A446B0586BE37201363A10C2F73026DDF0F0B6FCB331272BE349027410D4D 958EC50B66EB7A45A1E818B67ED9A5DCC638D66164772ECEE06A80765C0B259D 1B01A13FA9208182644F5853A8B8C3EBFF7F25C575761E9A49C5275E66B16FC6 625D7E73A657F9B23EF1CECED93FEE2DC83EEF7D695D76D19BA87F83642F6676 C460692CD64AA6FB768DA6008FC1C79E22055261A9A62DD1950F4899A7F6A2E9 21D800038C30183019E084C951394B9F6AA87646410623B996B310E86858BE3E 8C6DA85FEA3D6BCF62D2C3B154104E7CB5FDD42B54F52F8DBBC12087570F4C6E 8173A04835CEA36D2280C5C42B880A498E30C7A77940F28397DD279907693979 077CA5D28515A04B4EFAC1F0C948D69FF108320BF3B5C3C7D642AA0122A49ABA 735B8D950535460E0B2C17475404D8E85DDA4BB68E888250500363648828A193 AEBA46DF8C644FF81A998C5A7E4F9F9435C4F202C3DAF498484A012D4088C4D3 AA9E813A9161BE6F9844167AEB52F29013BFFF51928E5DB7B48BD20D86F317AD 63EDEC755F5A85B2B07C5B0E0A1B7A006D547744462AB0DDDFA9BC20C95DC57A 61D44CB4A45558C68E36DD3F680605C9987B6B6959DE24DD65C874E46D5AE7B0 C54608ACA7D5C7A88FFA06D9F6366E623F036EAF7A9914B0B549747AD58CC031 97036EA1D54D01A736BD6CD796600E5884E90DB6BC5E2CECD68B995D06B26FC5 2B6EBCE4279DA0E33317071FA1801279FB48563890C888BF6F2C1057F9728A95 59D07684FD8997DC446EB635E9A5171C14E2A357C00C30886EF1DFFD229A82B6 42912D02E3AF236F5C773456BDE13F60E8C674B21BD59D4E6444371E28956C23 FCB55999382C3347777CA0CE8BC002CB3DAABC58D52FE542A115FDD96D19061E 1A1DDD098498C9A8E713AFCAF355D2765DAE775FE6F9EA4DE42A066DEE306432 065E7DC31F144697EBD270671A77E6096C0E191C96449F7E94419C752B920EC3 034686DABF9FE674DB5E0744D44A82DE6B3933193F2E91D7A74BD17CA9FCA7AE CF9E5650355DA885806A24A9993F3041038DBB0DA23D74F12B86A329DFAB87CE C06B3F1C7A0D84DEBB870E64E15E251253E82ACEE05186D3ACC88E838F276B99 0729AC02CE325EDFA5BC3F5DA079E55CA302824AD2DA70964AEE86504BBADCAC 44B9244CC456CBEA44517185285515DF5AE0BDD7D98AC8928EAACE6AAE7D93AC E256992BD972DD6E33EF98DE9D9EB30B6D0569DB0B0BB23A1D0F9A6AC788F6AF AF81260D25B767AF16D5F060960E11146384A241CC05185408FE265CFA941DA6 86AC510021788D2767FF5B384A17E60EF2A664207D6344302CA491D7D292D7C5 A6DF93AF2ACDAC6970A16A5D3C78991931163509561A0CF10E7375F7E91F331F B84E8405E9A1881DD4103B575E80F36F7203522282CB5E899DDC42C781963830 BA1051F49DAF440F28847188237492149C74E4A99C3323635BC051B8000986D4 1629B1B7038C98D182481E182D4CA4F1554902D6D88ADEE755E9155861C0D772 CB414808198E4686B722786911914585F81D84501B40684E279C5E6B0B0C2FCA F3538806C4A410EA894CEC8218DE6D2489C6239BA36233871B0F449B4AE9DDC7 F00502EC6E7247BA3A829795C9351B50D312455F1486DECC64D2F159B0003FED E201B29443F8127878BDD436CF7873F22B3FD597EB81F1D630811BE93A51D340 FAB3D607EFF2A65A74E78C792896CCEA1C2F1C36D43F1950453C79A9F0767B08 DA6247B44B703157FDDE2F431089FAA9AF23C786737E921D76BAA2D68C3BC8DB DED8E756624970C823E97C598DEC658E28AE00CB901213CBA0110E625AF40618 D9EA9369F124D089C2CAC832A145474AE476AD16BA5BA3FD9C28122229C3380F AFA46693D5E9A6254C055DAF47FE051751FE7F9284EF39A36C5D25FE6FACB838 17F86520B8F143F8A7DE0615FFE77078603F5CD60DD0DDA9B84F44CA3BDBF2EA 10F6CF79CA3E66EEF95C8E8DF98951933358360BE4A9CA23EDB5F5CD794974F7 1A6708F418D34E6BE5BE645C266229A960C947877EA14415CEA2B238C8191387 100FC1D6A879B129AD2CF7D50EA7FB9E8BF2C80E6609809A0E8CE2A70F2DC54F 3F958E45E63AAF577AC7023F097A77C8412A48A3E608B36F96C39AD6067C60D1 CC7A2E00BEAA799FD75F1F694928003FEB29A8E6EE075C57C789781D3E983115 68AC3B16695D5FF9E2416277288367B040DC47D40D5EE565ED73DC18D23B8EC4 DEC6790571546F0ABCD004B3A6C2360D7BECAD494888E737FD41C0FF1D277891 7DAC83316800F786A16959022C9729ABA334E45E077A69D02EA82FA23086DDC5 BD96F41FE176A7F491EB87181FE64F647980DBA6F210F3260CEAB4E076918F99 D8246512F1BAD74D3C15EC69ED19346B60E59D8A9DC26D00B47741F103DCAE31 A2CB69D1BF659C091044AE0E2796F13C9FB5CEDC3527F90D035EF785A0655296 0C979C70AF9637D7C6E3DDAB3A9E17594FAC3DEA75 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF68682FBA16ECD75C6A6CAF0F577583B72C77BF328E68308B929229A0930D9C 61CEFDC57E376B63ACB4F3DB9B5C602C248B4CA233E2C25E16314CC878BC1B88 6C0706423F71514CC2DBF0D259D87DF704CB718A866DBAAE005180435034AF3D 5EFA02237755986AC73CDEB3B4766710B762312D5F48C59537B158DCEC084C96 19F1F37CD1CFB61C63F6D05F59B2E47137A433DEAA34823395727B67CBC15B6A 857627BBD49BE34F5C7B2EA6C0ADEC83FD5E10907355E926ADFAA74C6CBBFB41 1E37968BC3BD7F665AFE2CF6740125D751CA66148781310C76FD92731C0513A2 0ED792B34207ACE82F3E84425756F6205E70E1BDE989DA786C6234FB98DB8195 737FFB8086D05B4D5C88D80B7DCE555AB3882DA305ED26351BD26ADDA377EAB5 0618D08F7EDFE61938ED5CF78A4BE43408C7C2889C8E81CE04A4C20BDDF31A5D 31BA15A2BE1CFE0AB51E539CE09DFE33808277D947D083C066478F23A4D524A0 D89553E24ADE78EAEB4ACFD51EA3D2E1D5C84024D893F050DAE5314C91EFD93C 91D81F3591168B4EE3B01ED80CDDDAE0FBAB3936EEF02462A6A2895E22D24FDC F93DA61C36998E2297B512FAB1FD39409175426A8A7A56EEA4FA8B0D525E849E 27AB6622A3BE999A30A415B7C8A317D3802BC0B8FA6F89712D9F38D9366BC724 8060287F1B859F13CF627ADBC25002D1610DBCEB93C866520FD018715FCA7ECC 853869B7F55FD5649526F9355BBEFB83E9DA1E05406F8E32C1E112BB9207637E 8B976EC8B51F0D45F717C6BF4BD2B352FD491822DDC1FD074A4DAEC4AD128A62 475A39455847C265210B5B4CC476930162CEE809E3E4DC76250CDBE461FEC4C0 0C40D656D905D6AFB4390B62DD21887206733520E4C95FD857BF38350B03F2AA BD0AD9A87F485E0DB510F8216107EB7B31F81CF5DE76386D475A4CA18133BD84 74E1CC1A9F2BB4013E570EF03C0F93AFF4095EED8F861BA5DB1D28EBEFBBBA0A AD9FA3BCA136A0EACE7D66B63728374A3A5A198D2348E8FB33DCF83C12C77A43 01C57D222B4FD5C3A9B8BBBFAB1A04BE0C1DB269D7C7DFDDF849C849F5592390 32023ADE6B8F65BC17C850FFE3F7154D6ABD89B1EED4ADF354A071B0DF8B22E6 CC94F1660E4C0F9E6E22EB77ED0EE9E3E10459B9AA355E912CE927A429B02152 56CFF25F22E753393188F7B79B49C0F44512626F2BE1339F28FEABCA02052072 2A4B1FDF77C3C092EA151A6F3762571629775247A6AC65DEFBCBC464A5EB0BB4 F2C8AE029BD1172B430088B5786E7CA468E96E826FAB1D8A48A3700F8EF65B63 C6F0EDE8519C256C46808B033DC9FAB61B1D49C8AE59C69176AF3AC875F86A64 6F149241EF5610992222B79B859135D0DA31C438D26A3C8CF43B1D23ED27C852 E8668043F8279A423942A5070D136425ACABEE43E4A45B846F4E7F7DB374E0E3 D066CBF83AC321D26021738105BCED4081EE6AA264737F6862385FF9F3691197 1D924EC2D0DC8019350CD7ECBE9814BD19184BACC9DA9A3A433F950E8B3400C9 84EA3D3DCF2CF050DC3435E1294136E6998104B897A5ED4709B6DC996527A8E1 AAB1B3DA5285EB8AEE64A2D47D29F09004DC142553CE14262D2AE3774A65EB9D 4782B048008979779F56C8D8BAB280B043B49F5AC33462CC5A1157DE60AB3347 831ACEE9CBC3B88AF70F6AFA0C191867F2DF1CA821C6596552C7066932979570 ECDC82CC1A565E4DDC16373B2B976B99BA5F0B92E0FDFD5C0D7DE2197E5C91C7 9EBD346C4643295F769C4B2C15D2429FADBAE9F8DF0B80063F9A3B214535951F A61DDC0F82F21CD0C6E779EBDDF5F660E8262CD10AA422586EED7BA629AA87DE 796AF15A95E1E579AF686729C69646AFA2DF78BC053A65AE1FF65945FBA879B4 A21449B2F252C9601A3E54D1247C5B102D138C0D2CF15616A3E3ED3802608BE5 4BD40194D3526B2F54E7F73D3C0DD86A64D1EAA8A23EA4719AE3E9694C8ECCAE 5CA73829CEE0B8F18CC386797D2A696F3666950E1E9804B899AFDB003C38EDB7 AA93BB2FA9F447DC37AAABB9140A382AD6E69933724EDC6375C6305BCCFD126A 1E962DD9769EFAEA41D4F64FF7818DFFE7ED253836BA51AF3554AF92E3AC3145 990C8FB0867DE7CA55C54D3CE900AD4492B2D3B50907E6B3DE62FC41CBE8C737 760EE51E5C6D9F1CC15CFF852770A3991F86CDD3C188F08FF2AA1CF66D3ED8A4 96C04CD3BC8E97C820FF51DBAC94109C9ACA1C8DEE7E6D43B55A3F3ACADBA997 39FDD65E250335E05CDD9563F70AF53CE842BD51BF75777F269D3895E82A5F20 CFCD667AB094E7DDE057203E2634DCB355054F9DD8A2DD1EF927B0154E7603E1 76D2167B8CF3794CC8977E665AAE5D703AFB18A9C1B94B2EAC6162C36681AF82 E3D62B671C8C274AA208813E57FC625E63296E325E2C31ED632C3136F0919FB6 A34D452892690811A376BF8342F01CACB948360AD003609F3509EE55639B904E CF801A157CA626EC056A683D84AC9D95E327411C7646269A27E297D0C1616947 BCA4D4E4C32BF7A49FBB7ADE2766785B6939FB94029B2880BAC407F736E15B3D 6C2416C48002740A4E6663380089C45FEBC743CD82E6891224A561C003D1F65B B01AECDE888B9DA271C80796B4693072DD1BF68182687CF10C1B4F0FE15EBC6A 695647F5B0C1D1B57FAD61FB1E348C8BBD3B7031A0DC7F7DB374E0E3D066C91A C339E16323C7E4428D2EE11C1079BA8DDD66CC775FE43E1C7D9A454DA6434341 2AD0E5836244D8F9B99F349B12BB4EC608FD760951981D9D7D67FBA77BA1637A 2C1D282B90601F9493B789F09B70B52F2EF2825DED6AFC88E7BF74241D7DEDFD CE064578CE287B1AFB246DA586223BB4D80AB9A542D62A2CC807FFFFC7383921 09C105D198B7D05743D1779154CFF12DC90FC2DDAE7318A9065A81A757C2255E 5832AE7DC10658AE2B5647CB5CD00E4C86AC8DE6E61B7C251F1F52A905F45745 03F255C15ADF31815753145F3F9F1A71382A2996AD2955DD8B1A35CFB2ED77A4 04F9DF20CA177A8A0C4863CA54B6B646828364824C7D41C3B93E473AEE9243F0 A89C4DF01C4322AF90578A9A290C1AB64B77EAA019B739C465BDA098161F8256 9CB8746FDA4FBD95600E6C1AA356F3A2E5DF49312C7AC27D9204EEBDF1A271A3 AACED2042AFB7CBEA4BBBBDB159784008721738BDC79B89E7F5226092A0FEF60 DC87CE9EFC97DA5698D5B4BFEB8F379BD02D7F1A024EF4D10D85AA4E8A0E38EA 1974B3FF78F01CAE5274C223DF459A776B4B31492C4D6F555DAC9A6DE72D42F7 7C28B735E62DA5413F00525CD590107C9D39B41E36C19D316C38A8F29E2D6E5C BA9F47D561E741B96947C368084A78375398EDD47BCA95DA3913705D4DE85882 61BD9681B2FC75CAD1888311CA11322DFCDDC15804BD0C789D1D29562CBA2001 A7B127F68F2914EEB96FBA5169B7ED30FCFA1023FACAA27B9AA8DC42C2C8BBC0 B9AE6327E705B50995BA6ED0B538A693C74CCB6C250F2E2080660A2634D67D1C 2D928502D4D5D5C9C68C0A289DF434CC3B75118690B10738560610DD15BFC537 55B548B55DFE2D08B3682AEA2E22CF0CC35C26E8322378374BA80FF2185C146C 3B2548A38A09796D087F33932C5ED4D513A1C8AB31058AC27B6BF81522692A15 12DEA25281CE4DDC009ECA8ECC714D2066C9BAD6DD7D4244A3C3B1586B501DC0 4A43DF7A21C7DE55DC385B2EA52E96A8182486574857DBA1C7DD7BE38C7F6605 8EB798D6FE20324315A736793F0C6BEE522AD3E582E965ACC07C1F78C784982D BC451B029ED37E2F8492A9770813DF2B1B539C5AECCF93BCCF128F3455C30B45 D7FBEDCC43893291BD3270368500D3BE66EFE9702411375EFE3E10F0AD8E5906 3A70BB8298517DE21FCEF75496E0782BDC1E924E1C6F28D619F5047592830AC5 E06EFC6525E06B7607D65B2927946E73FE9C8CAE65FF1D9E321779E94CDE9085 4C7BAA86BBA2C4A53F0DC10ED188DE1574088A2141DE6FF48450144607B4C1DA C8EDC64EF6246E40CC20CDE7A22F892629475D4DA16DC62C42462393779609F1 B479EFC7EA8C20CDE04DD0F6B6175E997D2ADF32CCC0D351B3D4A5F8E0274D1A 3EEE83F04EB815896C3C727D60E3B85E655186F7A7BB423D1A7CD19296DAA015 204FCF401E9A56F64C697497C61662AA7F4097C0721822BEDD824426324A70BC EE6757B6DD103C370796839A4E76C039B9B5B316FA8F6565B7CDDE544D0991E0 302D896C0885A3542B3B7216F6156BF5554DA7E0129935C31A2154C7110E6061 26B6C1102DFA3512AD1ADB0720992481EA7EFCF4DFC6FFC2605FCC550AE5ADDC E021A7C84541C48A0856E1F2BDB47560AEF2ED181B2F9E9D1B466FD9EABA1D02 8F0D2989D62E03727346FBB96694AA60DB90075A1E4671888FAAC0F5CFCA3FA2 55E024E0A3565639CBD91D4798A4735506E6A03C7A805C5AA651DFD7BFC5FC1E D85DBF025D98281323C7EB5A6AD56C22C139B13F4BB5346A5BFE8DA3DA8F9B40 7ACEF81F3B6D2915E16B56BAD8F23C2B4685B19BE4DE5E0DCA120EB161E620DE FC3691FA087DED6F4ECDBA980E7B3E30BB3383E0FBB3BBB70194162DAB70D516 659E682FEF8B291493F99D78494432E4D68A7212A4F363441C51E317A1C2F60D 2A8CA4321599EBF483D155D14C173AE29B7DFBAB79E26B963EE984CA5D467FE1 AAF9D1AAC02D00DE91D177DDDB891B6C515C8199F29C473CF4618655F70C53E4 CA3A87DADFAB36E523AE2D91B7B8A768679DB1C90077BE6E3D7A2C72B6449348 29F5FC9F6D2799DCB69845958006A46F7EF86830D372AEB56ADD69E33A096411 80D9271F61CA7A28B8073D6E194F6C9BE8E93479E8E64223CE98C31A011E4BD1 9A5746408154A365470CA46C5413C4D55B69328F13C9DA2D22EAD288E2993073 00F51CDE2C443A4ED60821065D493C5D0F2BA5816DD57E86CEB90046E66EED20 CF52F00A23FCC18279248872C297FBE6727A45B4EFF0199C9CE54A8FC5DC2EDC 75CF68CE217318DFDBA3896AA6805CA4F9BE4E7E3A3A2772CFD39365F192F884 13DF92FC39FCE3A1F9D9513BA7161088AEDDD4F8BDD9D414963BF54725802983 64B5306599724F40C2D146F9F9EB50B9C65A211F0E9992C4E2DC925C44BCF9DE A619A551090A28275303FF0D0ACA6B4D00354DD874E53B167BD81B58BA6AA4DF 3DD703EB95199BD02DA951336995D273A6B8A1345A76F043007017B077CA5127 2CFA3215CAB06F857B22C1E1DBD335629B037482372E6CA2EF5E176F66255509 80D0ECD3E933D029C567C4628D8938F576B16835EC112C3F3DC4AA74E8AC43FA 6FA6F42F618B958CC83980D86567FA17E7B821FEBA4888DA6C964F2A7F9E6CE5 04531D53DCD037FBA89A7F840DCE36E251D3896D4735394497035E96D3DA12A7 6AC5A61146701BDA722955BB8EE66E838CB128284158E9CCCB5DF51DA6036CD0 D4029141D01EBC90E0DDD8FB1C884D7243782F62FF196C942212E4D2F7C65788 E8B5C79962FA1941C3F0731D16403412C3FF79C08ACF03034169E676AA39F9ED 4BCE98694FB1A9EEFF44E40267921733AEF80C73743C20C99F49A7323EA27E15 6D5F2C3EC4F7896EC28E3630F66741B723A7860EA5FB584185D77ACF418B79DD 8C8E9B6DE87D17BBEDD558E350F4CE69488A995189CD56AF75677C31897C62CB 07BFA36265AE30FD06D55F59ADF2CDB21E7E13BC9E88EFEEF3F9ABFADFF2B6C8 5275F80D7D4BE9976DF0476D070B9625E7AFB99E6CA526FBCB61554B87F8B1BF 320F79BE2695E7DB5E6E2BA3276275C82A53BC3DDFF0F2979F8C4E5752D130C7 8C9F7CF16E436B823B1A2FD914700A263D3F3DE48BABC99FA90E0316AAB12D95 8C59195EF634E8B29F9CCA10677E46730E1AF19F046BC5239B7C1F430955F158 6E3F0BB2151E5D05C35F4C3E2205440C44B8EB2ABF0612EC6B413FC233126D16 55AAA85F5DDEC3C008C5B559CB9C37B78512FD9FC93A435B68871DDD1D5FFD3B C0045588F0CA5442D7984C1F782E109653AFE579756584D216275663B2B9890F EB3F11B17A58EE8F5A92410DE390807D2E03B522CD0B2DEBD381270710DDC6A7 9F1B8F8E669E65E1354D5ED7953EDF0AEC9119A162B2D1CF3039AD0EFA9DBBCA 9446EC4819D07FA893A019A38E2189F5DE84DB0E4DA2F0C169D25A636DB7D8DA 33BAB84A4331DDE5E29362F174D5618DAC5E1B830E0F464B7B8007A4283E48D8 95DD3F13982278B538767816C211AAF263F1D40DA68AEE2FC007CB4093E14DFB 042AF398DC5029B701DD13AB11473ABEE8EC65D76591C485681529863B61B321 3D9C04C6FC4FAFA0FBAE2252012201C55E0C03F532D68854124B117B2F350654 E000EC5844A178DE9709C32B751EECD46C0713B7989B1835F7F50F64A6147C9F F219283A82E3B86F6F6D29DC37B8A0C9FA4D4D41920C25D3DF33AD39ED08C289 856FEA05AAB6D69577B0D8A5476169ECB15CA63F670F8D1B9C2E820697278597 6BAC78708D8176B3B1576865D0280DC3588E8293A1CC7EF5FC59D9980BAA08EA B093970E06743EA33350BCAF0933D2B009740F9495D7B24B88F46271CF23AEF9 273E1F6F5F1F371508FE264100A16EB6F3F97A66D718166592239AC3009D8812 65A495A9DC01F527B189190A79DEBCFB7FDE92FF64C77BD545EADCCA35076238 C3000C2E27445209E8B4965B25D707B51AFB11B6D80B36FAC32657A2CBD51A82 8A159B3A433760AD4558221A09E94011B682EE29AB16E9234C0AA1834A5AEBDB 957108C46AEE9AE963716EE61BAF4BE54C1A2224A3DB7E3C30DF9D07D652AA43 1AB19D826F7DB18BCA8DD4806DEF031CF933406E38ECED77C7F1229C0A3CF129 AB12BAFD207C68737198A64B573B6A11F3F287A48C92FEEA8306D1DEC14A91E6 4CEB56C3EE69C5C36F68D96A88AF8B1289E41B3410BF2DF7C9A2BD5B9139121F 7AFD6E7DB302E9AC30AE901D4AFB90B05E614BCCAEC67E8F57CA0F4A0B780EBD 55D9239ED6F716F3CB0B3191AE1A4BDC6BCD82AFF7821C120A553E454D00B679 BDC33B347F2E9B4D15223A4C7AB0D321F277E0623550917980B5BBC0607AF56C F10C29146DBE2F6BF9FD8E4879F6FCF8199B446C25E4E65B6214FEA3EC34E4F7 8CBFE934045822A6C961620D2BB3A4B36825E4D8E5BEA28E55868D30B02BF507 F6FAABE950F17B4C4130D9252701F08014068E33A4F20C83CC54FD940C92318D CF76AE0F4522A50DE7C14352EB7C94F746A7F73942129D6BD12A8C843DA6CF89 A6E58575036DC8AED79C892E1AD7AA11EDBF43FA64D625556AEE04D3CD4DDA31 CCCEEE3E3153FCAB30BA65A3A34AECC7663D745DA62838BEDFEAF4F167B0BBA7 222BF55A9626B85DCAD9AAD5FC333A85950710749D55F7C12369941E8AB8DD41 FAD6502A069EA1490B953694860AF8AB930DD5EC009FDBCEFECEAFE298E33727 70ECC760BB8156DE8FC2F2B5A1E03B0F3FC8F7448AF02EEF97FE5A94BB0801AD E83DF738A4D5131E16CA198DEEAB023E253227DF06A26950327409A9722101E3 79D57BC5106B6EC703320192D7DEB89BEFD19000E2E6E43C10FE960551B81D78 50EFE679BE528666AE7CC2FD9826AA224A009C7387A542AADB9403C24F8AE183 3A40BA685BBA9F8DFB6717E1C247C52773DDBAD04D2EFC606C55E4EF7B292595 F03D82D3FFFACB5AB2BDE9406AB2354675CC29FD01D8A625FB22BAF3602A5C08 663A212E29617C2CFE55AD4E251A2F864AFC683984B4D72843B24D321EB85835 00719B26365E467D664A654C692476F0FC1BE27302FB3959D722C3613F846923 FED287F447F5DE22DBB6771FFF56E746DAA399DF493CDCF95B96CC809CEE835C F8D827B1B1F7EF28AB0D91F6224E5C6DA4CFE20F7ADEE7EB834CD7C54447F49F 9B353F9BCE262CACF2867E6F462CB21044202B554CD8C1EF87FB0A863A8CDDED 59D32030EFB62C81136175EB9874B7C627ED7E63AC77F78FBEF2D2E5C2149360 0C8C8278529A79E42FCD4B4551F2593E96F36D15CDB56CF8D6D65357CFA98663 600732BA9F1CE83E0D47647F02FE3EC8443E81B3A7B55E80F3216252AAD626C3 030A9E420221DA91E57CF1B3ECECB36FFD21EAD729CDB7B3C6F35168BEA82F36 E52D0CD46B0A3D962E8CC48B3F35C049FF18AF0E271BF7B03429FD90EA4C68BE 41014CE3A859D138B3D51F53790DE3E7F4BBFF2997FFCB2C189056091633A2A1 03E88A3CF49967B712991DCC769501523EAF0D70895A45DB09A40DB1DB221E79 A1869BFAEE115B3970D0696EE1EEA3F29AFFD16D6FEF99F6EEA625AAADE8EAF9 C23187CC5CD5A9CC9D0A3E76AC308694FA802DA1F900A1D324CB0E622F192647 FE0CDE1A22585CF4FACBBF456AE5AA5F01D255F4B9A4163891DA74E4364625FE 30EB70BFFD698B6B27BF55FACE80B4A55F8370FCD74FD0B29FF8B3EE6F4DE577 3F842ACD7F112C9AA9597AAAADC5C746AB7AF8B97B906B56B3607C72D988831B B5202C6F76BFA5DA8101971CABB1E24D305460305FF0C9C0BA75BF2FE7692F3D DA6971F3F63C81842428B93585E7C2413206969587A556B6E36AC4453394CA18 777FC5D838D4EBFFDEFA1BCDD4064964421E862699C2E2B4BCB800D22EBEAE14 A97744D1EBED19B62EA117EF78B59EDB5DF17647C34BFBD9FCAA296D9E3BEBB6 ED05FFFBE063EF811B18D104AE7B8B4C386164C9B5CF1EB30247AFD937CE04E7 6A35FF92CB0B8DD9239AD1DC8E8608AA924CAB7361D5F48192D24FB92B6D21EF 9D83CB3E13967E2250B32410B86EC6BF4722D31239891479B0C65DE3A5A43E0D A0192649B5F44902FB67DD68A9609B8FB578174D970CB01B9F86248DF15A769A 0B0EF0C116A96A4D2D0A9380137270CBED1CA8C19C486E22E13E1BCAAA65F157 E82A6AFA76530DAA8B27BD83ECAB41121AF2C764CCED122B94FEC74719D22D98 C6981745F42ABD6C0476776584BE443655ACA39F0BE0AAE445C96325F5A69D08 41AB9B0ABD19ED358BEEE6DB94724900250B795404243489FB69928CEA6126A8 2036010760904A7DC8F15D9B05DF3779D1C657FD5162B801996F1F7572BCE8B6 89DB7020F784D2F750BDCFCAF1E66E5D1CF8206D33D104AE44659298387CD149 4E2A992E1548A37C0587752D46EF35357BBCD8DDA9BBFB616898AA1BEAE18180 7AAABCDF3B9D51351EE5CDC490CC365FBCC2325076F696E9C731250A014F635A E0EE366E3515066E0735430AF23D407FC997EB489BECFDFBD65872788AF7E13A 5A216C115DDD2F8FAE684B0F17EC9B53EE00E5966BED1FD155F32B3744F02FC8 592F8C5B7044F0CD6C23BD26FA11C128CF92E1EAED0DECAE1B3CA64EB558A6F0 415DFCBFEC7339822CC12F95F0E151ECDCEDD36CCE14AD2D4F57C9932E2F9FA7 00FB8D7B2C97EE4BFC16F650D0FCFEB70DAB22318CB400BDBCFDB79529F11403 026348DEC4AB352296519895E23B3305A44887739E906DEF031B92A0F41A4411 09BDAECAD78E6A853C0A1973657BAC3A58A4EEDF99C0EBDD974EE2E9D2DE83A4 181A7E72C8CD49EF58369C674D6B7EFC24120A0F245523E85C6E91083F131CC0 B91CC5DB16712011C2AD2DDBF6D7AECF5BDC2E09ECBD88797912330CE1FAF21C D2754C8B16797C577A376B452E96DA49624F063653FDB04098EF11CF1EB5B602 DD7E66675AA3EC317152ABBD1FABC470A4841B347D80E6021D4E290512F91D53 6DBE98C25A17631B93544297FF7CA950B903494DA2F686857C118BE4F2D2F5B4 D63F931457D1507F13FAAF06881670C1F46A11339169B6E859D2F75F9401F5B1 0F6BBF066B6410C522D3647DF86FEB25C1ACB394F2EE034B6FBA1E1F0C166CAC 23AD89FD97B43C63867C86FD5609496B8B58F9E10CD24141A110530EC24ADE79 3A9CAF5E07793AC8B0F9E560649F589FB4312CF3B61FCFAF08B8B62C185A442E 5EA71733D96F429DA0E2343910D9FBB4225C1B6710721B89316B3F12E3A2E39B 4B139D9805B64E831BB2D4D1885094552900CB91275C8052B93B59730F1162B8 76DC1B604C73145C7B9CD5B8B352F3012D8FA03BE0C48998A45C9CE392047BEE 81E8FA2AF78903D4A55CC2F8CE39C3582FFA7C010D879967F28A1FE3D21416C7 30F381F99B01020FE3F35340A770629C16333805AE2830BECF5C40EECFCFE629 67FF0A3A9AF794C5FDD669A18FA5EB93244E6C54843B3868C28D66902429854C E3B70B242CF8652F910465050775B542AF7FE158DE22027F228C48F8D137E1EA E734DA62FC34B5CC44C9ACD3A078C7D4FCA262EE953EC784B134F40CFF645045 71B9E302A1B579793BCCD8ADD3FC027EC85A5770A26A1F71C545784E1998E396 A6E567E1F605A1E89826D328ECF772FB1902F0A05F08F3F7C1DE5A0B1BA02A99 0348A28AED186D63857976EC0B837EA34AE4D781CCB5B07F39C9E788DD15D549 BFA3984DD591CA27AD98FD841C57ACF08A0F62287531043EA497D6F48613133F BD84A9EA1F660F26660147B4C62EC20648FD4D079BCFEDCE8B96A32FAE2B53CE 62557A1C739805245755ABF416A368D238FA86EF6C904EA55516A25F4A8DC805 C9095D78D07E2F79A6C5FC0D4DE4F5A7B14C9809E1141C78705FD9B25A482E44 D994E5718640CC735DE0412DDE3DBD6BC724446933E83655AF78F08094D074D8 6890E72F22E5C1228E8D21444669C7BDF8FBE16454610FABF167A63B62C46673 6CB69B77FB6F0D144CF7B7968668069C819F7D4DEB00343F0AD05B99E8F40DA8 A3608556D5F823F4FE26B10C1A135161F7684FA93A64EC896097D65DAACC6830 EE3ED51E612B7D60C85D0C035BE59D78DAAAB868561015257361686D668FB635 6A4F1B01317B6A07BA91FA9DE649B378CF0C7A37E4BA8FBE74DF0C907DA0047D 2014ACB6F7DE1698A8E689E23355F9A56E5B36F0A5220D010DB6CC174A78BA9F FC79C6ADF5E5FE639264BFAAC91F253876AF829D4A6F59EBB89FA5B00EBB3049 78FAEAD988E030CC48D18FACB55D4683A5F4DCDEBD347C64CFF09E7AF1FAFAB3 750A2C59C2FE52A678AEF44E4D72836F7EFB4DEE537F3FCB1B5F2F46EF3835AD A4725EE1695F778527E6BFB0D9C1574822D31DFD5B47219954E006F5CE225B7D 6957FF7C3400031C01DD55BBE7CA2701D3D38E7B0ACE3F14B57876D9A66BD8B5 42DD5654030E04F002139350208DCA6D83BA9DE34F437E85D5BECDD5E26FCCEC 892C4AE075F7824261A87484135FD125C430448F2FD46C3C3C70B0AF9AC6C683 E22995E1A8BEA75475A817C1B399D6C5D673ABAC95BE3DD7837397C609303655 52442881BE93455BAE061A9A4BFD2824076AAE70418A52FCB61BDDE7B9EFB935 0DFDDB6160FEC9A4409A4A8BBDC5AEECCA8A4978BA93A63270F06D8D08137C8D 87D80FDEE637B74C9F26E0AAF1A42111D751877DF17302D3A09EADDB12B787F6 15FAB9D634DCF45FF7D84597813143C6AA252DD2585BE200F4C0F25C17EE82CD 564F0044838462C828EA8CDC0B4F7D995527A5425ED593FBADD183A1F488AB67 1E9AD1A1041E867D2B988F300D87ACA7F675DC85CFA8A478CF2B8C4F1571CB64 EE2A4F693BA8A7D6F7D0406A4157CA86BA4C64B285186AFAB6387B3D540CC02A 01900D447BDBB936BC0F94EC4EFA96DC2D09FA22440376C718DC6742D24128E4 581C8143652E5E07736BCC0A6E5A1C31A1B8E137A9914EA8A38EC38515582A2A 5F21B9814F1B95A3A231501353800B112149C71F5CFD2E3A55B6179442A55EF9 24834308DDB593652CB134C208A7F84A4E9FCF7D580FCE2AC4AADF08DB7A7EE7 86B8079082EC5A1FF3D45B561B69B9F56C2698EB54888531D945421ADDF26BB4 E4A5AD30D1DFEA597292757F308971BFDED158EC1A793462CFF812E6A809A388 24795AA06078601971152F7EDC2973374DCF2C2D3945CB839E8CB7702F6E435A 0E79F28BCDA3D3AA18B9B9C97673B75DF095B22D658C90D163F8DF0CA86214C0 3D165234B14E373B20F8913638FF228FEFEF111DD0F930968F17EFDD8B87C05E 0A3A895C202389DD7F5EA6855E2841E6DC01323992E8DD4516199CEF2EDD87C9 5C1C8F4085C9B85ACF85316E22EE715FA188632115F151BCEE512805990FF3AB D8F4927DE10EACD49B720FD17EB260CB9F2BE96D7B50EF189E5579166A7DF683 EDB55429F1A54AE9DDE34B4A9AA8DF685F8567967C263E2153458BF1E654E2FE C19BBBBE7409AF5DDFBF32F26D50EFDD0BB09A1D1106D9B963296034E7D6997F 9BD4C3478CCA3549D3086930C6F9DF60D1DC3ABA1A289982699ACD964112E30E A1C568A53D701642DB80E2B2C0B6084B29F6FB73B0A9FCCD3ABEBAD6B3D58FD4 1C5C45606AAF806333B354D19F58467B3C315D65B9A9109708966FB7F498A999 CB0C7DAAC86F9A0F1488D9235A07D6D524BC88C8C212D80143EFFF603406BE2C C3108EF1CEE6F6DCF9A3C3CED684800E0E186EE7435A20F54DF2CA4F5539A6C5 9A5907AEF0DB6AD436FCEF56C198768FAEAEC2D886DD94F7091C44621EED8DC3 5737DD96B7B2860DC4EF1E0A2B7A963CF707C2C29DF918B7D3066652D6CFE261 5D381B08F5711C594C03BC72875C384BC01556D907B0641DCE086EA20C621354 1A2FF32AE1EC09D3F39A11D0FF0A710F4F9E0E7507B6951F96F8FE1E1CA43FDD 34A511B7AE7D87FB7239CD88D1C0E203A6B9AE1AE673AE441352112FC8728874 D6585EDEED161FE8303725036402609F36A62E1EF8C3014C4B67A986C741B5FA 260A32768B2D1F7B23C4BFAE60AF5353AD6C300928427A5A6E942BA44A9BE95A E1D5EA5E14F4FE92129D28F01A3B61E49FC01FEC7367DA93FF88DE296A22D62C B464A027D7F151FCD84811B26FC115932A86F16EBB16EE974B39AAC5643E6EBA 5383F1B29C499B66C09FBE07663CF953FBDFF9AB4F50C2DB63498CB80444A58D 9A91332C23586D1735220BDE76CDE790E86C518C07DC1597ED533CFC62467BE0 9EC9C70EC2A095F634DB70D5D7DF3D45F66318FBF8FB8316538DDEB13136AFE4 84B5151453FC9400CF33D0DE81B429FA70449542CDEF957A23643B31ACC5D310 07BEEA3E2964B17FD1BD27A18D4240C1F445E3B0C177611963A32249F614E521 1C465B1870EDB7B3EA4B003F113776A8D9EBD060201A0EA68C0D1EAF6B414BAC D2CF83F811F5921C0BE37730D093F78B1B58F3E566690BAF966F573370B47AF9 575EB124495710B9DA2F16EB1E33BEF989B63DD525F57B134D15D083326329BC 64CCFC0688BFF7A8D56FC1A6A042A4C5BCA5FBB6CE393B990C33EDED14450F24 1BBC77354E1B4C88A4E7928890379BB6A3083E3E2D29EBA2125F993A97462F01 B8C47D06845FAEA3FB523C5CE5761050F4D7BE3C07EF80FC8A2D96FE16DA2F52 2B50F6518446BF64A0717824F7F8BE9E4734BD4737DB4B613E7E3ED9395672EF E7F61A887996E5B8B44C94EF7D5800D04353C739043E5BE9F2B93AEB49180390 BEA7B15653E02A52C70FFA11E3D6ADF017EECA77E97BA1D5DA509A251D585225 E7FBB89E38482514CCFAE1B3871B36ED6421014B9BC9854247ED67F962F8582B A4471805054B1A62A064E1CDB4CDE6CEADA8C63E5013C99E5F35611C23F93A17 5A39EAC64AC8CBB76B19F15C3E71AFE68FA93AD903E7D2C1CC094AEAADA2EA6C C639BFD4842A2B7C9ACE44433CC181EA2FF9BCDC47FEFFEC9CC0737B7088AF78 29557E8C1F7A825AB31A7E64522EA9F2F3983C1EB14048B4FA453FC04879FB27 A38584B80E4923D449D4C9171936934F8605FDA9905A5FD87CA1C44A31920C26 E1EDEB80B835D8E7A647AE842792BAD46DC5F4E277E534D7641AD2FA14FF177A 0802F81CDE37059B4568A8B06649D7950471FDA7056B675A90FC1FD4B8D380B7 6BE5958AD92772AEB05010F911CC8FE665F72CF3B8174F7558ED94A3297AE918 91512710D7F85D5892572B15A933E98E4498882A26EEB6FCFA55D90D48F4D84C 55E3D32F5F8CD1827A5B5A3DD8B8322EC61558D1BC1E0432D9396F508B5E2B21 4705FA448A68E087CB39A7A3A184A098EA095301A064638156CAF3A2AB163551 3FBA7DA70C080D6F90A2F0F2EC614ADBFDF2CC0FA7A2FD8359014F3189765B48 4EBF26C3B384108AF709CACE708076A951E1336FDB85F6D65CF93A5FCB00E81A AEFD1AC063CF370A5019183C85111E7C94F0B00E84E3B5A1A844FCB9FB350253 59CC1D705A644E174B3132B017E6CF0690FB041A3598E43C5A7379E74A68AF3C 91030D7E1AC1150B848BA3679B9FD4C389B1A5EED00B807798928A080FB8E2D3 9E942BA6DC13C68EA2AEB352854A3DE429010E542C59D89FE3B5F3A2FD4A7CC7 486ADFDC50AA172E0E199B31012D4D6F088082D695410566026F6A3E20F381F0 03B53A3B6478F821E351F8BD8EF78F793DE6AE2C326308AAD96BCF38D0429D2D 849E05706752C6407CBF8E174648D96EB30E797B7C8B4F95495D9B7D0EF1CA0B C228CABA268389ACF9581CD0F51DDB8CE99FD508AFC4A38DCF717734CC076A24 6B28248F8529207CA64F929329B012A25BB61AAC60215C6F1E736F9CA55E80E7 2E9DAAB650FBB96212005B08D389B6DC61EDF075B734DE09B98DF4129F9EC36E 6596E2AC6418DB0C32138AB85430005710C758D7448DF224734D2E3923259B0D FC6B7065C867CA4AA8199093264518584E1AA9FAAE36087116086A2E9AC10CF4 09D3EF67012D1593BB50C9BFC3B59C3600ED250D5C70251E978313933C3C9F59 891C46B03F7A7091E77C557E7053D3812D7D693CB6C7DA4E0F489B207738D7F3 3759FFEEC013B1691AF0C60798CAC322685D26060C9CE6EBF066D53F30F11D25 894358D31207551EB0AFAF3AE1D1B66A6675EBF44C467C6758594A4D01DB0912 EAC8754AE29E0B3C4D99AE6CF89BF5692934E7A07B0177F919FCCA9EBD323E15 374291E778B3FE8A8A6CB9A69858F3278D8419AEBADA50B248D2D8C96EB63884 0C27CB385767F01AD1AEAE9C6406EEBF21B2DFE26C759E2D955A74A28F06F0B9 45E678A9D7813522CAD3A0A91DA860A6C7EF9AEDF3423FDD5558F1CF976280D9 E85944B29D1050C2482B9D97A9357C0B3853F98BF7CE394C71A92FC724AD68AF 6A9918F688DD40C917FA4AB39C175B185896FDA430AA88A9ED2516E8EA77BA83 E45319F24D5E82DC9762FBA0B801B8D0E4F7DE641D4695A9F0A1212F53964508 5A9C4113B36A9605092435B16E6F765DD95A1DDBD7B8697C94A943623025C291 04B695920CF1B9C5554F9DAE95F05DF8B61B73A45FA4D65B8450CBD46BEB6AC9 8CEB6211F698E70F355770ABBEB1951B89FA09CD5E71138F93E2CF3285A28E2A F075019DB6E974A032F5137B07B6A4C63DCA29E3D60137399A43D7FDA58DBC9B 4EAC070EA82F1BF66D7FA3B06E721048AE9B31B7D5A3327AD85A866358D3AF40 F062B1372AEBCB11CA70420FD18657C8687EFDFDD545ECEAA2F2BE2F34A05AC7 7919093131B5849BEDBE80429648434A0302DAA9993A83316718E48CF96BCCFA F7A1D7E186DCF349C7070F7385E8AA028223DDBFF26F66CF215F61F28A6457DD 1DCE4EA972AF73F231900E0A524ECEBCEB05BC23C5B7407643F8AB7D23423C82 0A2534D9F582280D0D2445D3EBC42B471C2458E6FBABA52D938A0EC7876A2304 9D8B04ADCBA20D1101284D4858F97AC95D6DC0111D1573CAFAE8F6F8446C43F1 D3BC51596AD3C2FB6C69F2A9570795CACB459EDC78C52ADFB76E6784DA1B5FEB 3F305ADDE49ADABEB42C5C01EA61946012C921133742255494D32060EE4A2455 5BFDDC076F26692597EBDDEF9EC84E253A3B4219F3F13E6C94E3280E8D28BCA4 E076025C91CC07A384B9962CFE482B734D545E0CFF7B941FA601C10B3E9C2518 BAE689B889CD18AEB0220CCE3617E63906B7D8CFC26F95B5AE3564B4E9EA384D 3BDF74E8436805ABFAADD9CB40A59095F3FCE96C07DE973CA7958B01D74F5046 B942EDD853FEE099584E9D2E935C7745B7FF6BEA18DC184ECEF507D14276C680 E6F07604A1ACA225A52E1C45DC5864068A90B65B98F78357240FB76F991F9364 F00E4602A8701E1025B16B7F1A97F594B6FBD2A321B042DB35AA44F47D2D049B BF97DCB804CE4EE2EDA3C5D6BAFD1B214E35D23ED4F216961419152CC037D1B0 2CA38A5111946C23CFE641DA07FD378590CA88F7743CA51DC77923CA75B681D6 DC69B139588E6560692E351B2ACDAB8CC26A6341CFAFB2C3486DD98915BE765F 4CD20807C525A85B515C0C16621D90623EC943B55F0771FE3737866867A47060 CFAA4542902BE0677A53B77544E2CEFA3C04E2008598250F28688CAA37953C71 6C190F7D4D7C4C63BB198454EBF42AB7EF205BC46C94890A7F694DEB313157D3 53D9CC57F45C8B4B45205B34E3BC4E6E7ABB1637BF2FE53CBDA4DB86D96883DB 13C3E0DAC10A36BBCD0EB98943C82C3D4EC140BFADACE3CA5837657905013F19 5D656E299E99857911C105038B940013CF7120AD119DB6387FB82673C7425E41 3EBD4C898BB6C4CA79327C5C8224755C09F406E7ADC5312F268D28113245C5A4 1FD5187376C43B631A46606B5E4DD342EC3794ADB2668384C6074CD62C8B3FD3 0E250A6010DC25AB2D9C2130372A7ABA5D99A55FFD5C2BFB361B6641950273B3 DAEC41E29B5F4E4BE6C47B6F8B07BA114715715ED44A7EC9E5E02143E9158FEB D74AEC18677F3289490ED44AE41E5E644A88A2608259FD8289F70382ACF1FB65 DFFB6068CB49E42D2BD143E716B2552F79AA583492AD1B0101FD8BCEE7408A15 EC0F74F86AD1E5960B644CB98A0D7EF61BEB88CF986591C7CA593D4C335C2242 FA9BDEC9EF27F959874CB790433050010B76C5C4E8E52F6081FE12B43B68511A F8E44C320C77ADF8BE420B49D01A35B2196D311C54746A890E309014B28AAB43 5494C69A64116E35286FA70DEC52AAF6F01B279BF7C3EEC83C5F83A7E06B86C6 C87AAC3F48CA4A46497A678D42D7F6E5B75EE084986050C72D2AE7403918FA52 9448E84F0C13ED2E05C5046A86B785D6B28FC837CA0679AF787FC6B9E0BB6694 6D9E6D362C0E5D2286AE2C5108059A6F1062FE5BF325ED0AD064CF9ED457D201 920AD9DDC276D4AAE77F4FFFED8C3CDD938EF957C720CDB03ADC8D5802852EE0 3889A623D3CBFE97DEA0AFB94E3E8E4D46A3C58327FE6F23958DF08B80D5F764 08F1EFDF674493B0FDBEB2B19805DED353D9995ADC3DF804E574CAB0E954E3BA 9C76607F322D2155D8473107715EF96A06A85A765F594814198083CF841C120C E1DDF6EB226382EBEC5547CC40BFCF24DA3383BB8CBB1C4E5C71AA04A49A32DB B08E650951358951785012DD855EB6F7BE2606215B61715CDFA9E3B7F74AE31E 19814B61AD49AF25C42C298F52D4F4B1F0D72CA53CD511BF16D59F2E3F7FF3A3 0228445FA2267D52A1049CC43EAC74C474E19CD574DECCDAC37366BA1C533BF2 3590EB9E6E4E402D6B331BA57C25A9DE9CAA3551C2EA3B3B48D1193C811E94E6 477C451A23203C0F901D5DF77A2BC15A54D0289D7E1D5F051DCBB6F97A2C0007 64F1FDE12220479919B1AD7EDE462A28BDF5625FD11BCE29DC73B0F130D7B73E F1C956F0EB7D355530E80263FF95A3FD86C5BF5A8F9280A302EF55B50246177B FCBD3C8B4F29887FE682524ADED4B3EDBE4FE9C3174C072E24631D919E297DA9 785E4CB724A606B8E056E3C12081ABC5E3CA9DF754330539089AF63B85F05938 D871A58BC53C5ACA3A057302E0E5EC036145465AB04210B257753DFA9D75BE9D B57AAE25F11331C4E19B210B39ED8AC74C2A45640C7F914B56CA1D85DDD83ED5 40D1E4370D44FC03C5DE5384AEF8B63BAF7BC7FC32349CB6611FDCC82B91D2C4 BA111BEA7545081D250895C8E5BABE45DCE4FE11BA87E728E08FEB146281A44D 00012518E56AC86BCA87308C247A99C14559D383B85F045BD99EC6EC40C4D2F0 65701599595737E17FF4707E938D4163DC5C5DB95E2F4D4AD8E437F66A3C36A4 C792D1687679DE42FFAB0BC754E5B1E43508C21FBB1A3DC304485C415A686657 EA1A0E90C7322A364B8AE93425E044661F6556651D3F9873A102E87B0B68D8E5 D468CE2F02359FF20CCE5CF53A22D19250A7ECB6940A98CBF7C3E2A664D1861F 86EAACD43BCBBB0D888BAF4B5E90E90D32CA53BCD5660FC10866B9CA92E43DB4 569CEEAE4CFD211763AD75B885B9C65A8AC553E5CBB5F2C4496DFDDEF46C0115 0AE64EE489283932D13FC4DE2ABCA4795F3668C63416EB357062394DA0A826C1 7E6B05CEA77CC0CB3322700F3E1ABF1E6CCF7BAB83B6B4026F03F1BBAD0A10C5 5E8D9828C10AA29C5A2EA82730561D4019A0C6D131B433B9DD9BE471F66C15CA 384266E8C1714EA8585BF507366B7FC0F0F797F40CF4A613FD15F033F88BB3A9 9D5B2654E591B634D49253B2706A31E2F0B2A1C699D0890BC8FD4B25FCCFFF92 809336ADA46928D535ECB86D167A081FCF19AE7BC30E56225E040AD75FB5DE61 52C32A4649F2ECF10D3438E80A50F56FA3A43009C5C845838563EA25421030FA F79825592A51030E21F9BBC1536F33D2CBCFC1C22499C0F80503FCBE9BAF8BAD D35DF34D2875D4E6E83EDE725C829D4A53083484351BF341A8DF8004E20DEDAB 607D9328425085A8F3E757917EBB775ABB9EB9969093AA44B58E092975ED4966 5495E0E7E602F0D3194CD7672495CA11BFB1E80231258EFB746275FFEFCEB535 A718A12D58827F2EB225400C6881451A4BBFDD4B46114779926BD485EFC8DE44 D6DB332605AAA5A7FC1DE0B4C222E49A33C821426D8E368B931D0402AA1B839F 1C5FE1C77C329F8DAC88B72EED01779E9C18ECB4369240460980C264FFE5ED13 5897ABB3A748D0F855EB83796DBBC99917F6FE0C9CDF733AE4CF9A05CB96E88D B81C17897EA2B714F9B83342CA33D092C148EBFE2F5341CCF2CE1E4E1E5CF89C 5AFBD1B998C0806AA39D7BBF68DB42F013A8E1328F1F32542D5636ED8EEA525F 33F5E1204CAA6E8498CBA5F4B4C970F31F0E9D59ECA534D6B886BDE7B5617B46 D0B6E8796F51A4CB169C64A2D5A4D04E53B46373A7824E35CD6BFE1017F733E3 239A0B21E556C96D64CCA81665CEA5A1EFA5B91FEC17BB99DB9B16838A615890 F6A235A1FD3E7746681EED1A73D9C0BA3F5F229B7C4F8BCE672F8535A6332894 8C788FC18113BB20EB0C802995E333737D6EAAFDFFBEC04DA500B28E3B1B9CF9 8A74D155FB6560060F9E8CF4E1EBB3B47043CEC18BF2B764EA71A7F7FABB50FF DE301187D740865EC7CA01A58A315D9E31D38476FC8F20FBC23F3A6658001088 B9FD73F5164E3689210E6C88A83C1894AE8CDBB53E10EDA5C88839D7AFDC3910 66B88A12BABC981BA4099C05EB047042785ECB701932C9CC4F96E8F5A2D20B11 E908D9C619F1D579ECD5ED7998EEE848EE23066FA80292CCF13B0B33B15EFAF5 5878F3CA17A08440DA18802A5C6E212BC7E3B8555E9DF231C1F9571D77E2C8F0 81AF6E1B91E53C1B630BC5A149F863290A8A596F6D4C5205A6149C9E356ECA6A B827C7417010AB2750F020E0BECF6F40A3D356C708FFED6CCF928911AEA0D6C4 A96F2C1F794C9F6B208646C25A60C65B00F7E0A3321F21B25D1064FAA29113B4 8F3D1DD8A9F67AAE5200858A7A4EADAB2326FC8DC5069225F464B34A0E6DBC92 7E960DBC2BE9E03657BF54552699CA523BAEA23D8B0FF3DB605B6802DBDA6421 88D4B5950ADB9DCBF1CD9C6BA643463B09C725460A9B5CED29ABDB2813613A3E 9546615A0E247A13FE0843433BB13DA9F53ECFF4661DED22C2E33542DB518D09 BFDB906B8952BB029BE10DDB9DC059B59E4EC6E7BD2889F2ACC74402D9F96DC7 7D8125154FA2407151A926147689035FC32C0AD2A606A9FE3107B5EE501280D6 C75236BCFD6C422C1216ABDA87DD13B045E541F88D566214E579F8D3E6C8B68D 0BFDBD1715628FF84A2F8778384F9E7B796F299AA3CB76B10C82F9D5CD7B0242 3CF6091D12DE398C69F29F1DD5F11BD467995E35F6E296D48CA8EB7D4671575F 4A53CB37F995A33A39AC6241B7FCAD9C1A8C23E14A9CCC0E233DB1C4888FE4CC 709DDA2563CE6F834131994CEFF5692B0E4945A2CA672913FD17E2A5C58D0EFA 268AFA4A39E948D2084F0AC14F1F59A0AABEED9322A1BEE00959499A657EB681 A32E13A6BFA469078B6E752C48EEBD614A48B8238105D61EC32FCA6D27C0F914 E665E9D87C5EA62B53F1E7C4CE2E7CBF07319ED1608C9E9E3F1258C463C1C100 2554DD5265D35A13B3CD9304BBFF08096EA237C9178F88BAC17EE12E2AA7CD29 CCD7E976F6A102DF7EF4947846F415DED6E60D180B22EC9E91C81227CD167583 BADFA76080A434CA059E64BADA0BEB2B0E91AE2013BA5D23D3FC1ED9519027CF D3E3E2482786E08B3B35D2B6E14BAD2E24C6F437BFE4CCAC08C67F2D61971C9D D30381D9CC8882FB245FD0BBA73EE79C1C5EA7892239B54198CA4F2DB0D77267 38CFA22A1D8A53030602FF834C0717B3E372559D9347215675DA86CBCF01DFF9 C46451FA26844D4B3864D9C6879F3062F8F851B552876BD15CC84504EE8D5B25 E981F9AD4FDCE79FF59366236C19D41126BE0003908E91DFF2A3CE3A42A9ED9F FA8272446D31ACF35067CFA838C0D1D023C7F99F45194550851B4A11584F1EB9 9C0E3967867C92A260D815A28CAA5CC842F313BCF1140C5C2146F2FD25A46243 320A1C5A27725472E5640211DB0F01EA82640C880EB557298E54B1CC27CBDF6E C2AF67684B23B6822210207E45E302AEF4F9DC2F2A3B9B7F321243057D881DFF 5DA582555915ADF2297C99CC0561B26C194B764B7FA2B1837B6C5F087FCB9CF7 D718DD816FDDBC26012531473A1521E63A724D95C73D29987105C38AE741D75F 76B95C4CEAE23A6D1D29B494D089F9B1750243E6C2443C37484721BBAA145979 0B65E86F97F81D1A44D9AFAF762604FA442B33E0B985F8414AC699284C05FA83 802D0ABCB947971C2DCB161661D1F38F96081E974504C00DB0D89D8BE113493A 1A248CE00F8A54DD352BBC2728F509853EE05A1C6FF40C6DF5CD7B2968344F1F 2350E9B88FF8415CE0E113D22DCC6E5980E5FCE557A3BC64E141B4458150347B 168E35237A245A1D1532A7C1E8AA487271BB4DC122C0C75E47AD7E7A1C35BAF1 BB797EA981CC72DC550BFEDAEE0DC722AD62AE9554FE9E822D2BEF7E9EC838C4 4995143A593CF33BD92E37B12D3A8F29DE6EDD8B98401AD25FE73F3505F18369 5A5DF007C4ABA613145AF6A8B7B06F1FDEBAE506DFE8585265ABFE2D662F1ACF BDFADA70EF86FDC577EFAC8B24C7C399CD098E1A0DEB65E8C95C2C773D2B1092 1A39F5AD71DFB6EF8192FA1DA31156D08205792B948D26FA1FA3BC6F5F3275FC BADD90204837A228544B30AE0B0F8470DE34B9C928A980958FF01C481BA1480D 998D4A6D648B97C060EE44AF668BC1546F7309E685C1A00D8227B4B7C5F17E78 A89809823590469C0343177A54DEECC1BCEC612AE333F34981A28F78A0FCAA78 116FD3C17B19EED4E55C01ADF0F8895EEA12D45B4F3A25AB605A263DE932276D 16B9B72BEDEA2FFA8F493D119B2721F72DD3CE0F1DC7365386B63CAFD774D142 388527F0A02394F0C5502E3768ABAB2C080FBE5A832EA82D6FF99C5A65AF5D33 F667F0225B9F319F054C475780DDA9C6F1C8F0FD0505AE8AAEF27D0D1CC330A6 410825436D6CC0842D91EEE3B5F198AD84CD3423177602D521570365078AE6C8 8079A4A0D87E599C0876AED67FFB3FD13886CB536EA2F022326A00A121CAB893 01CD94FFAACCCFEE2B2167FBBC4A62F6B40BEA1AAF1EAC43AFFBD70E53B80039 6CFA90D932D1E597C040D98BDA0B019D36ADFAE872EC1BD91ED628994D071EBC F62659CBDF3EF702D0FA67EB9F95E2BA245F1957EC8BF8D5D1F7271CF8CF3837 A07B3367ACCF0B4C4CFD30A374FA5C9156FEA1F05AD54FEB2C377AAA7911C614 582AEDC105D97B86408C005F597F861D8FED1F401D3AFB853AADA4E81C57D744 227F9ED2E1FA8A46C68679A5561CC83BEBCCC2B432EDC0FBEF5BA4B925B6BA76 965CD982D5CD469FA31C5BB567171AD4D79B62894ADC3BC94749B4FC2D137759 2892026E16A0F372EA323AB51E23C114F30BE247CB5F2BB4E3656F660A8F0C31 25C43E7F0DD10669E2B0819D62A402AC1F403B3B3E42181207A8FD19EC9C9EA2 00CEBB75DB7B7D1969CD18DDEF18B7A20B0D3F702455B4CB9705BDCA36B09397 B76D7ADBB40E2037288F57C2CA99EABB9870E1D1CD7F3F2DDBA010D641BFDBD4 321CC05839ADC1D3ADCA67B2FDD3C5A3B4D703ACE6EF665F7293162B39051CEB 4CEAD2CFDE2AD38C1DEF0076325E869CC4279164A66D8922957AFDA10DDE38BA C8237AFCE135D3EDD082B4E3FCEF82E6402E44F4511F823AECED2B222DB97856 26E846408D556491567CC4259FFC7BD9C0838652714B3CFC61F44C9BEBA4485E 53718997739101069F14B2A1900FA728515D0BA26FAE48BDE871091AB3B6EA90 8C2D42858E8DAD44FD2DDEE93C0785EF10A4EB9185C429750820DEFF528796FF 1F668B63762870C23768712FD62382311C8C4737065E8FFDEF70B3DBACDFF083 49DB6627FA66567048891BA794EDDDC9C5A1C47F60EC1E0B5744C26B4B110900 04FEDC8143AF0DC2B02F29342CE024D6D5876E5DB59D7323A28B265FE2578FB6 2BF0EA9F0D85987E3C7B9C4B8E491D9193D40A5E0BCCCB3E9D9428386881A3F0 CC586A6A6C1B256976F03A0BA5028ACE4E5AFCEC7CA47FAD65FEB559B3F7B0B4 A24316CDABCD387BE5E241A11BA2D3F48A9951FDCBEB6DDB9227B78CACA27A75 371A9CBC4F2BE12D139E79ACBBE5760A3A0A044583B334FF524BB1D5F0FA54AA 6ADBCAC4D6F6C01213D0C6B54BA8554B49765ECFCF8456014B7179876B88FD81 0725C7106266B3B9241E6EE12535771864EFD3C31EA57772239B7DA8B9139C5A 2E3AD47B2A27E560CFD6DA87776E3D66D19A9351B1E352E829A7127BCB0F9713 83E3E5FF6301535F372C38DFB8310CDE0FF24806A4B97B608C8B249EA1D60E76 AACBBE28B7C4A3581F977680F67C5C3A5FB412E481AE7A11417DBB7D8B2ED528 658E92B8B0B1FEDFB8F4DEF05D2CCC42F6B57703A33EDBB4852BE8E975E4C6CF 1085908476EC40C50CA746BD761318481936B71639B24011BF652347BEE3FDA2 FEC5BEBA0F5A5609F5B834DB04746D4395B08B1AD4CC45B7D24099259DE86DE0 F5C0638881A9C92C09B14B24AE8230E47E53B4785B52989911C164A58FDCB167 2B0390701EC7B6287D9C942BD519449A4754C9AC7C0A22BB500B2A32A55208CC 2DE0E516483DE632789471B8D46260290AC32C26FE2E31389A604490A087D0DB 81937C0F9C0B15714F2410133CCCFDB6F0B0FCF95897DA3E0AFD783FD9AD2BE4 6D21A6BE877592E404475471648F8205483B894BE866799E772533AA33728D4E F54C1354822020AFBBFA7B4BEC6F3FD9B26D6EF307618DA000C56ABC87D98643 D543A519FC8D61A2B86C7E18364EAB4D31A48EDC70869DEB8044A17FA8B2CBA5 224851AFB9FE49CD5219376D6EE66772EE27FF6419557E845C2B0426D793CC2A 3165B3EEA6A1A13F421C8CA3E47C93106B0B6202D86C5A31C1122AA3F17A86BD 065EA5A687EA3B1ED324A9F36246919BA50117492866DD545E42A1186979FC71 DDFC98C8A6FDD649B17DEE9FF4AFD78920A75FF69ADEF128077DCB3F5FF601C8 96599F8C9168D7229BE969E5AE9A08166EC40E890D1DD8B62E29AFD2E3B406A8 73396BABAAFC158C6A92390B33598F8C643DD4FBDB760D2D202815DE41E8A471 039F8D61F8033532CD100F07D726D0D92E68338C014C88B274357D554EBCC802 265288D9E554ADA4CB6D1431D0CD94CB3D1A26675EFD6D036BC583D242710A8F 19751007530B1CB76025D04432FBB38D7468FD4203D9A47F7E67C636ACA10E19 A9FA72D3DF82FB37474966A58AA01C5F7568DC7D4668ADE721BA5219CEAAFD3C AE372963DF037ED7574AA890AD12463C5109B5CF23E54DE574CCA937D5C49BF1 F763F6380300887970BB22246FCF5B2B2EB69942748A30BCF9A003BC6FBCA2C7 325284834812EAB44F42921A116B12D184F9EBCDD8B782933A1BA9ED1F33F97B 548D72EDE27B24A0A8714E6A847254763CA5AF040D304D75E376A43F9CF839ED 1D9E2BEDD3C0BB55E19B8C5FD48CD785AAF3FD381CD301C75B6BCD63CDC52D0E 3DB72DFD034AFCBD61DE9C83AB58A593D727B6EAB8217CC38FD5AB57FF1DBF78 01B4CB52D6E888339B00FF527F839026787F743EC13446C2B9BC6C73E24C5E75 29AE3FD77A54E341F0D40DE696FB0C11E12252BE4B039A80618E1B9C824744C6 E918CA1230C1A1B389AE706AC4E4974A204854CF371E655A80CADBB400DD8F8D A6C3C168A237B5DD57E69FFFF2D670268242A54A2A30DF8EE3D6802EB60B8568 F101F3B8081563E133B5589666278217DE793AEDA75F72A50A558EF3C4E2DFB7 6CAEF16C7FC19C7C2EF3A1288E1B77064CC245CB799CA5DE7D709C1DA186AF22 1453CB15AED504F92D27201EB935E397D85983135B606265449423D878AD8B0D C53B9461A91F46AD34F5CB1A3A0264B6305C01273C84CBA9761260A30C36BCA2 F9CF25CB60710671DC2EA7D9D48444E53DB4F4FC0803BF617632C87EB04D54EC B729E72DCCE2B88CF6A4FCBE878615FC4A1728D456E911F904965FF49CF1CE7D 69B4EC40857946FD8A761310B2D2AB5B753D6A47C11C789D682A23E7F80416DF 4834804F7E600AD21CC2930429D479319E970CE129AEC7AEEDB3CBCFCB311693 FA4F4C645405B6C9A6C5DD437F6D8D320C36DB8C34C8883218B913C3B9F3787C DE794BDCF63BE1BE6AD878880243BB1F5DB700A5FEBEB48E8778827FC428A1D5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F 9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D 84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F 737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC572551C934 9C362FD595A429FDA2D815959461B0CC2A804C1142BD91C7567082699B8E274C 6A22806D6C51B7DA809BE9F612EC537D4FF3122644AE0718BBDC6ADEFE7EDBCB 8C8A76CBB280E70ADFE563C01CB9EB828ECFCD365825941C8B7E1B1401AF773E 0D3E8A6F2D62624F8F5FD1EC3CC76254E4CCB4D8E4DF0D5E6DE10BC1FD8BC325 05E773E0925B6838E0D7ACF12AE32E572F6642EA587806FD2805C9147B873194 788B8162F3C20C915E4909B72D0A62D4A2B63B3825F96C42625DA10FC0E9ADCD 77F50821EC585193A56698ABDF8822AD65F853F06E4171E1A1AC06E5C57691D5 90523A7F03DC50F41C46D72151717149566C2D356C1A75FE76619AE45B9CD605 D3A0B33690F9431CE242042149A2E42BC6A9356F786ED9B7674C243C8AED9D77 636564B36A52EAC1EE25999127F925F8755EA21272E3AFC856EA92F1B1E130A6 9486E1DBE81C78914A157EEF0414901AC8BF313A9F444FB2844405C263105609 9E302C68BACCE64BB7945535F2F9C2872DBA3A602BFDDC2C6438B302B8D96DE5 F537A714B7D2BF4C8B6915011D38800C0922B7089E1F58A5A6DF1D426261FFD3 8496FC59ABEF5653D244E51DC18D750C61F4AFE49961F461F60F05664DF2395B 7CF8112611AD3C6BE0D64AD95CD956DA57C6E641EA2DFB4F84B441D627E68C6A ED7CD840D1B199AD4B428C6FCC8E0E4CE294433A4C8A4F1E498B5ADC74B75490 60C206487C101F03F8704FAD6B22DF1BE74DBB61631B2426EAECE3BC8120EABC A4B87B7D1C47DC03DC1F132E4A4671129F793002C5163D5A341BF2339A0DE9EA F6CE84D02DFA57BBB021EF5B165E47F01EFD7441F57D5072F4649F2C6A9271EC 6333129DC28B1DF6641E7BDE87E27B19D474DA41A43A6F985CFBABDA93BD0C9E 4552DDE651D58874023F062CEF99CCB280E75E6ACD9170013E67ABCFB7765B63 8D5778C5B9294A5F9EB8165B534CCF2345373D744D46DCABB2386EACF24FBFDC 945B43021D51381512993D0CCE214FDF11143F608964E2E4458BC307618FB066 D0A09A1D3986B9B2BEBEF6CCB56B060D92488CED8F8657B779DCD06FAE5DDEA9 AF3DEE61771BEB0106B8446FFF798BDA4522241ED5A3C2201B859CF99E487A9D 6D09F1F4E15771BD8B827C0C6FAC0C68CA005767EEA79C653D10B357B2F35AB8 E27E9A9E1647B8B0695D9B3361D5C4DD1C8502307AB8D589E8E7730CF4E79138 DC663A160F8B48A09E2463A3884F7110DA86DBAC85BCDF0F2FB642D3A32079BF 3EA12A6EC68F1B16886B92C447C6C671D056C625D983A59AFDEDDB11F5CA4607 849A561FF10F2D8AC4C7A07FE97CD0D40EF2FA3C70CBA1003A32B6F1E6AF34CB 297A8161614ECF7582E57A0C28073664DACE0B1F5975CA309A313954912428F3 EB1FD70B512C6BA2807E7DE61C4DEA4AF0F975BD0813D74C3E7DC9B0FC48B19F 8AE1D32B736870819CA75057B963C1AFB107309889506B0905CA55B6F3021515 B0B6A1C0F298421CD24784B89EA18251ECB9E9F76C0A61CB6B61CE4FC18E84D4 C7ED481808433D1AD785D0E66ACC21F5DD37CFE2DAB64F3D23E0BED8A8E21058 94802B93AB33E5B66B126C818CCE25F58852380D0A46A10BAFFA90979FE3C5D6 C1A41AB044D3A12D258AA40B505A7E167FB20697D5607D83C90F512DFBF4B8FB F0AEA744390E9D06FBED2D1D5708EDE5C4365CADB27F9126DE2D0D91448776A0 1CB4091C21D62A253B12FE336DF35BD4B322890B0AAAFE6B917E584156632567 136AB50A591298F50D9B7756AE5B9DC1CA48C08E564BFD1AB5AACA99027E5950 E12037FA2BB52BC7F430096C7CCC2E6E49036B2EDC04602B42047659ED14B344 996D0819CB04E198855E16E34FAB061B23CAB292B6A3A33A692ED38128193D37 C8CC57648A3E641593A39E464E46D260B38391EC6C54A5866E555F46AB175457 7EF1CF14F518D86A975E0741C75816DEABB25DCD1BF501F3F7FDBE8940DD1256 8386A7D8FF00994FD669D6377A279C6833A2D4AFA5BA3B02925B1D4C8547268F 408B524D3F9CEEA491A0A7D81843317C001EBF830C369B61205CF76201FCE5A3 B2A5A6D96F9F22212CEE6D220337B2F0799EA3BC4AE337CB463AAA21C79C57DA 02A2E0A60931AD78E20D5471DA17C2480346818533D131A62C5630ECA98D24FA 03612960B26BEF1FC3A01B45348CF695D4A2C2B69B15EEEEE49B7DB78B03F39D A6694E0E1CDCF75945810A6388412487107C38BC9632D637FA26ADE3EA61F5D6 3D48E4873A03C7DA132CCA34530F27504B51DD425A3E74DFCC5BB227F63B82BB 6C854F5447F3517A794A78753775ACC29A61DD380CBA00EB25730E613C11899D B5542B8F0F4C80FD9ED2073D9A5EFD3D4126F64CCD5B3626B6B8C0014C31C9AF E638C4E9381415F903DE7B554B1BC135138F12926805CA71A11D6551078FA370 08AB0C884EB5EDD95994D4D1C5D8DB1412DF91DDBC521339479DD06F5CDC1A20 0E35304ABAC27079C48B688B3E138026764E6F579503D13E2A87C11903360655 2E3EE587F8DF681F6514BC853425BE7178778B0B95A9107FEB58A69CFC9CC845 D13AA5DA512CCD45886411C0809CCDA5B28F54E5C1EF261C280E0B218F6E28BA 2D97F92962D962F48F753A61FA204411DB939E77120B8069155754B663029E00 D7397C001E098A45D84FC93AA3407F8BE54CF5052FFBD2780E3A78CC0F6292E5 17A6DDB977B817CD9EE2FF76EB1ECD06A7E36D256BA05DC8E523B63FF807E1C4 198E61EF3537B05706F8B58286DB806A9F4380AA85982EF8A053F52E26D28D4E 5EE719E725A624A024AD029984C35E6502FF21CFA2EB865D910F667F810F4A19 855F8051CBBAB71EED5F57ACDF4718EAC86910C8B38FD1EE596E98A0F95BE413 885D92B2412DB15C27E8A88C7DC20781CB6D9197F6063554777A3E2AB59A3369 916C3554B025B6EC0792F09D0396F6AE8CBAAF647CBC58FDA759A4AE2BBA8F01 C9DD5208A58C25210A8F6B8EE44C2E83FB0C5819ACE93D946A822FC5D1A5B329 8B7883E0DA2555B6905EB07D3EFE3A5F5354B7A6DA5FE2FAF2A8DD8ED3A095C3 7D7EE87ED1947EFA55EECB85E9944C9B3D9DB1B2B46A88D2B4F0276188C758DB A7A9B5F9EC59C67A553831CDB326C1C6D38528911BBE5C9CAA2A845B6D34AA1D 4876501B96E9E4515DA1242E6FCA80EDDEA1E3D2DE9C549844D239A9CFB3905E 984FD2AE71E9D356077A261EC502B8D8BAD6C5CE9C1711D65CCECB52D69BBA9C B2A5BF994B7405D09AD22C54D1A8D4893FC7DAAE7D9CAB00AB3FB61F7F56A88E A6146C98CDDA05078DC0387E8B35C5D460D21E19372E6056E5E4B23A2F2FB3EF 1DDB4E5312E0B2A4631C546A7CB1CA2A3EE23795BBFD061A44CA4A2F6F5A5E0C 4560FFCD520E8F235D6B768D119B83163CC1B13547DC447575DFCFFE1E06DDE6 4A0F0AD5C08BBE48432B15FC9D144E6ED679107C81D1117E7A7ADDD5723F4EF5 235E44730BA14F7AA0737B933590C453162240A1E712FF1436BF8CC9312ADD0C 2825E46187ABD85D9661B7A84F57BD78A35E7684F6F9E6ED1B1552D2DE55119A 0C1CE4CD1712EC5A318CF4B9A389C8120F332043129F24E341BA41D5C1FDFEDB B3777549F7ED355DCECBB56EE36622E0F2D22B3F37B0DB808920807577ED7230 35DA36AB230E3D914E653D94859F257149E617D82F5EA6E6D1B6C17C96008260 3730E3370F9F979A98CF71F9E38D592992251AD5B1DFB03FC466DBC7485D641C 97E5FA71484745A41CD87B4C1AB959A4B7E1404E30E8133E5707258A0236461F 58C7F5FB1F0CBDADC204311590FCE4C7B0165690CC869F221EE486217770B65A 980677F4B80A045587EF3F0C71E90DF404BA8F1BD7A3DCAE406A9EBDB2CC2E8D E4D25A8ABF1B4F67D5A1DA34C6F67AD574F71E894A52DA063FBDC6A5F35E2385 14809CDE8D4C549DA24DBD6B41359F474C0ADAB4B17F5FCA1DB304C685687DA8 510292B17FDBA634EAC57DCEF505025DD1BB9AC7D186AB560A57871840FCBA7B 7FC606D2643015E570A3917F89A7586D71AF8CA24D56E71284C979F37F59C921 7E7F33B1F62A556CAD6F0F43B0D31BDC3FC92082C3216A3B4960086D578BB797 0ADDC78CFAE010530E09A86F950BA7DF855D0CF9EEE48E726D32DDBF97469277 0856D2C19F819DD0086BB19C9A445F76C4745E3EEAEF48A86FC7F62EAFBD0D3E E5FE58DA688C278CE3C4806230C33DE2E6927D1A0621910C75FB0F6BBF85FEFE 8F6E8B55E2CC59E2E33F1CE139E08C3195F0BB3653A45434BAF26A3D8D150CEF 52C48C478E651A5F413E89DC60A7A16D7B73F7F90B070AF22F560A7CD2EDE5DF D3136617AA3CBDA07AD5BAE734E54A99C00EA3B4B46511C93D5ECC962E96A35A EB39D6DEEFB06D6E2E4C027A47E8EA8EC2FF0F4A9C84E5D3CF4273E50DFA722B 5D60C918C6981B8627F1B4F4BCC31426317D3EBC95C25B53255557AF2DF70199 1974A9F67FA7E7F545081C54F3103E4A45FE2C439368DA42D72FF4ACBFB14B5A 73597AB5E1EDC92A3A0BF4FFC68E9E74D0244573145959130142D903015C8D82 F0558015D3FD56C45472D1346AD727639D26DD574C9DE0A4FFF51498B78C9653 05CFC327139DE48316D7790E8CD1A9D0D5606ABFAB745F17C5E90244A209CE56 298384344A2A216EDFE7D5E7906BA6E7E03EEC80B10E2F3ADD160ED4A21E5E0B B64BB6FCC7893D6074E8884BAD38B4DFB61F429CE906062D8C37488433BA7FCF F305D8C59C900C6F36BD72C2F48344C6C8B69DDD304212B539C950B9C40ECDF8 01134774881EFFC2E7BBB8465311A852099D9379C7522BF903496DEAAD12D7E8 C662DA12A6DA3E3A99D7DDC0DC81221BFB27F1CF2FC6CC1679F09B89FBF66130 4CD106B99AAEA0AAB0FB6C3C43C2405FB979459C27CFA6CAC2A453157AA7712C E4C4EB0D03E6F4DB648CB2FF46A7BCBCCA740AF8D03F4E032BC1F07B58A28C7F 20C67A9F5DB3036769493076258B474F7F2B11F78E1600A1AD228963B37E86A6 20440597F89F67A08C07AF0CF3E3628C9698B4103B7E296FD5D78491695958CB 4F61366EEBA51C3A7F22D7DFA81FAC74483D6BD1E17718D8608D728D45FFFF41 AA925D4FB248EBA78A31BC2E4EDA9B4BDECF75E69C1572B02724AE0E88A47C2C 2606B0D5A952E0705AC500DDFDBD9653D4CA984EF9CCC2DB8F0E70853D172D61 8510F07D0CEB47AF4BC8EEC06D2AABA4125CE96FD28D9CEFCF6201A70C139900 1AF6D4CF7DC807FD1A8202AB8B0C005067BCD3AEBB482BA2F8B8FA44D3DC7338 CAAA8D46A5EA05B8B1A868493F8B503393678AB75C5F7649332BEFC624F1693A 3E34ECDE22A60891F423950A854F3BB1F6B4959AB0EABFA8955D67F42734C8C6 23F6FC71518A86FF0E1804E7CC09CAA830479D9CC01CD03EDE50DADEDB16FAE7 9CA4ACEC7AAA5E704290A2F7527DEBA2CDC1444F027EC86C81367F54516C1654 5E11FEE3F10FFCA2D74206F365D53655BD8FA76BAA8F8C78696D47591BCE88DC B12AB8176EB03BC115F99B7D88C56F2A3400040637386FB86D093CFC38814F2A F1616AD54EC908AB3AEB11C61E3AE380D99FEA37B1D594559A904278CF2425A6 012729A40062BB0AB84A0FCB86A3F5D04561B93A77CF011F4DE3ECFF5E0B004B 933084F930F0AF3437D59447EEA731352339492A0685B45101CBFB5B8259E6A6 3583582DFF0529E4AA5806AC2F6C9C448B0422C8125CF30259325E05B0A85EFF C20FFAF525F73604DD2CEC421190B3A47875BAD36104DA1D80283DF395B6B87C 961E613CE164B60DC343D3AA6D7065149B412C3CC3FC1BFF415652F99F698B52 31FE11816B341B2E2BEA3F7D7732B5C9E0C754027486D56B1D2268B981B81C30 9FE2AC2F949990068F30403E3243CB7E4A448A4CB05CCC59B9C19CCACD03E428 E423CEAC7B976B59ACEDB3FF08B094AC3E969C99AAF5EA974F3FF61C5C663B53 8878F3885945B1A3299C219976D2842AA5DEBB5428E1A0864CF48BE957C7BE41 66861F3B4BA7CBCEF06B80137F83E351D8CA3D5051BBB3D2E1EFCA8905061D14 643A240BEA6AEFD788B00A807FBCCD4557E191A51D62D9729C98D1FC4BDB776C 781E824E0FB8B5900C41ACCE7831C4F6AB814BC7CB47ED8031DF80F517AA5E44 45046B25AC5F3474135E429142E5BC33D924CBA166596FAF5D25E732C79C2AE5 F3095A5D565B855E15A585FE57EC321B7D904BFB9EA2D724A085F298888EF252 938DFA23FFCFF6A1A1AB9436CC63DA9B560B074BBFD39E552DBB8D174ECDF5A0 FD92ECCD75EF488732377DBF97C7069851AC0EBFC3AC4226A534FDE26B47527B 0DA64B77BA16385223580B784D1E74DE433186809AFE97A7B51514E4F665D14C D1968CDCFBD8E50ACE4D76442D68FF726EB83685DD0FC3B14DAFAAE06A894CB2 D2CDA2C50FFBA709023472951955D39E7467E978DEA8371A935390407C01FD50 C8B393DDF202F0BB76B7572FCAEE5FD588C6F01AAAD38C99B277C501DF5C25B8 56F5BBEB4FD1BB379563093D54247A365CC66E04A09EEB1702FF946B2DA1247E 15D82AD0078AE820CB71AE2481C3B23EB86A5295CA58E00BC638EF541D4644A2 748E7AD3212B1E297F583AC4EEDB93641F2B7C0817245326322B0AF2C2028EBD 6EEA236F8E774B379AA00D7BF9B9AA8D9978649FD1CC8DFD7C145F36E2CAE63D 157480ADE56A69DCA2BA077F8AFCBA252DF716D99442EE7286DC74CEF7F539E4 11EBE1B2914351CF6D12FBD2658285129176D0566F2104CF95589AF2CEFB1DF7 CBA05FDAD557F3279007CF49BB3783470BC974F47408BE287877ADDDC30DB1D1 1ECF880973C5ABEC997DC089A91EC2781B77D4B1BB436C785B9EFDAD04FD6B17 22B53DE2A271A527E2A4A98875A041F5E1DA7BBB96BB550DD32ADEB761B561C6 71266E345FE58024F192ED4D918892CF596AA20791D196AF8034F94F8EC9AB76 625595C86424B94BA9143E035ABB4405A6CD2240CA82A6F38ECFC0629C877482 AC4DB88AFB832A4659B60CE2F2781BA482C8CD801D55C165055B404F1DC8D6F9 7748CAD55829445A5985D4DA6F0B2BAD86A6435CBA6D314712C260C4DA58CD29 BDE901ADAEA60C3AE82F9D52CEB3E29AFDC1E03B4CB387987BE958F3DC449A5C ABA0F3E720378B1FDD5D4B6F8F96432380A83E0664AFD7C9D8F85A0034403E2F 8CBE7840B219589C7E7D7E20A12684F0D01239D1D41CEA6B48361C390BAED783 DC6692FE202F3C7146F8C4B799A4ED5D6558DCF34793CFE86D7AAD1B27CDD541 293E1DFE875F5F397349FFBA48015435855269CE3E82E320EDBF3DBD81243C85 E7235E75A98EE2F7A8F5B2C90E2C213B13B9CB1776B8AF2D5F4753A812B2EFEA E9BEB45F4B3CC3C35DB9526E3B2AE4C1AEA573970E588FFD894EEA7F4F29DF14 61AC620D18337395F04E2F05D2CA8280BFFEC6F56E1862D19E891D753DE8114C 76CB8C88429A0706B68B2FB53D73D80DA80A88519174D0993427FC39CF7CC668 F2FB56CFB3F26F9E2F35743AA8BC2530930EE7B330314BE7A4AB21882FC84522 4AAF8A9B58AB8CA2E316B29EDAEE4A140FBBB591398A86BBB933AC07B0931CA2 086842ED8B3CBA0EA117C5B0FEF0DC8D4293435CF92998916C53346435048556 A36B15C19BE595C8055959299645BE7B56E3A3353F443E90E0A9540E8F5433B8 FCA78FBD369DCFCA049E4EA27E890FE125DAB0AB6DEF649E23F34F2FA46BB1EB CC1A041CF273F94DBAC2ABAD5E225DD6046B03CEDC518E8A13DA56E4AD6E36A4 BB319081EC89978E4215940DD715795D07A61221705ADC30DD8D6343BB3427D4 DB7B910D256F65B9BB9202C482B190C7FEB04EDBF80EF23EB3C17DB117B501BA 3CB89B34300BDB9A0B97ECAC87536EC94FE2D74B48CE2A14C0AB0F50F54E6D7A 88DBC59FF9D3C33D8AD4D3F1CD47F3A4E7E181500A4A96EE73A2954DF83F1D64 9C1257D65FDCD057BFBFC9A18534B5BEE8902ACCA38D313F992FFAAB300FAE74 5D7FE062C4C1AF0EA71A1F4C2D34313BE0F6DB1CA515A9F10DB27560D24B6D0A 6090E9099E59F59C0AD9FF714967B00A741B691A5D11B6042402C5584E487295 F4DCE8FACE662E1FCAF88601F9C076AF879790F742B4B1C00A15642E3ECD4661 995F0151413F513C28A365634A73596D5DFDC010D53C07AE9052A8F9E3C5C557 D5434ECA23B77A3DAF392919FD782EAADDC4D121F91EF04666444661D94783BB 240252B7C302AD0D5DA1994246D768424B449A3D1B160210C0F3296D34D63290 D40FC924B1956C2F21EAEFDBCD302C1DF97ADA7748EF8BE4D9C746706DA02399 04FEB35B54B61AE0131EAFFF5F410E586948EED156937E836A5DEC3204DD8C8E E556B8EDA52064864FB9776CC1E05E6181C549C10F09296924E6FD7BA07CA23E 783F7EFC19B869E903640009A37AB5A47A3F394FAD97F7EF0A1DBEF5C74BB515 70016BE28E8FA12F9A10E15C1EE3B31E4CEFEDEB385FD9B5019A5BD57681F9B1 C05AFD6B83A1FDEF4E4789245BED5F4CBCFC4838A89491FE93FBC5773A89737D 35588EF3CD0C9ECD89FFD27A7FF414A9B7CB89FAD15E692E509C65F3AF36A346 6C8AEFF5AC7CC50262B24F75CFD7C44A977D9A34F89ABAB25A957B3657C76D31 0F02B398202E98A8C65742FF5BB296BA192D3FA12B617A0F3EF5FA1502B4D519 9D2301D2089CB47A16606CA16BED608743AEF37E9DD4BE4B6E90AAD8D12B27CD DD26A6B8B67277DFCC46855EB23EE26492311CF9A8DC0C39241284284DEEA02F 4F358E3A47A2D5A7B349A22E46BFF61BADBE1C86E111B50E7297459F0F18FA3D CE461031BAC0D1DA78AC387DE0EA454005598217978529D5089EACB059D99642 5DF928E23215B6E5DAA35DAEC505AE112EB1F8E127898FBEE7C8A54EDD0C2ED8 C75AE6DA5BDC0BB86086AB7E64DE8EF6A1495D81ED8DE1A59796769164CD417B 46C45C9A3686C7A8FCCAD6F7BEBBCE514655FFFA6228A8312A5BC50538DC2CCD 3E59DD99D6E4147DE8F3983B031C03D07125107E20604545A43BD7880D3423C3 5E0261158F004423D18607C2BF0A39BCB65A685BCF2A391FBA8844C3ACC37067 64B2803C5FDC03D43668E31489BA7004B06E7C4C874834586ECF7B00035DB428 E4421E6A6651393FCA5057DD05AF837AC75AFA4106B354F3026710B5E101CE9D 830602A5D6704780155DE76792D9A3F2EAEE4734B3E1E87C85801C50834DFBC1 DB501193CFA6763795F2387BE9218F33072ACF3DDEB08946119F3C9B71AB2F1F D1FA74C1AABC8668A8770B120DC488F988F68F08FBF4DD6B44104673D927A39F 27E00683A10FA6322F30244431EC032DE80300F6E55414BAF8BE15C308F95A89 E3665655592F74B91FD7F71B7638CA14E0E1C273FAD0B9F84BE5FCF3533DEE1C 9E8E5A654EC3ED9693A38BF2617C0367229D6FDA89B2288827B98A8917C65D11 5F47124E457C20FAFABA69E18044169FEFEAF870ABEBBF08BCE5F3C7E1EF8970 66B5B5AB84F3AC7EB3E55C9546DD38C096F7221AC728ABA58FE76FF090164587 45C0C6C83A858307703AF33E31ECBD76350C9408454F90C04E9F106B659DD02D 5824BAC124F4547215C3A1CC3D38CCB90765731744736903F24271B9D8D3BE66 5790DEA93EBF0C8E5EC7F70721C00205BAF4C7BB4B6637F5C4CB0F2858A7E1F8 93F56B29E08B5CB9185433A3CD281F9AC60576DD1BC993C08D61111347350861 783244234AB06A2B5F94134721164E3F09296B2CC51D09C1CF55211160A43837 3210EFC0B9892BFFC4BA6F4B37F9084382E4C8329C564DC321A88A4AEEE84812 2863DF387D3FD8F5752305598E941412CFC362BD40C1B3F30B42BE007C52DEF6 0570FAEB855BD314989DA4590AD1D4A89BE78DAF819D776F9ECA616B88FFB866 7A0E1F09D20849ACAA5D08DF3C31ACCCB086F55B75310685D4E3ACAED8B1A467 706F72366FE39727DEDC6DBA504D24D9736EAE848E97C61131FABF70740BA88D 50125D6E12D3AF5644475779C0EF186EFC4A63FACA5D8A2A40BBC627FB743DF8 6B2E912FE4499B9D5FB2A75DD37A900A01FAC066796BDBA13C9E32B86F5C272B 4B0480D4FFF49C5097C7590BEEB0224C91ABBCCCFF307BDEFA90E08446BBCA0D 3AE04D1B6B27D672617C8F9F88083E172CA368109A7C982B5B696F74FC9AA09F E1C83A6ADF5A458985D9521953259835D0AE78E1E5F46F4A22F4CC5766EC5220 CD8E11FB08D53D5F37AEB5E88E48D20BF8CC58E870A59B125059639581432D34 99943D762D20ABC4D1D3DB1E97744753DF3B3C975952D6FBF22C0A2BE79551EB 3F63FB6F3F4D95BE06A9C776E7F1FDCE2318EBAF88D9F39CD438EFF576D905E6 EB8984AFB3975CBF69A86E7D7585BC830EF5E23E069147106302D1EE530340F8 347DB627B7A0BA0A446225E964EFE1727EF63CDF7D015C3874D92B642CA3A4C2 BC20830B3475098718D29588F44504B7BBA9B3114A312EACFFE8087F1CAA7273 7C85F63CB022B89433E2FD51F24F08F0026CC3718CFB2E80D116EE6F2F970918 B40D5CD8FAFD1B3521C30FBA07E165F6EFF498A37E458C3C2748F8B76FB6DEC0 E544DDE2A0EB0E8E13FE9F6BFE93419830E428C5D359470838FB7C28317488B4 531ADE2C830507F77705AD6891DD9A9FB229D08EF1AD6320CBFD44AEDF48F270 A5E44BC0FD3AAF090D3AC47AF8E60C24F39E1AA2187387CB1E2E95AFF46D6035 AF7305F28FF3FF34232E62610F4A042BEA25E6DB4C13311FB2373405683C31EC AF28B816DC2DE3A755FA83BA05B76F3A9FFC64402CB2B1FD8DDE4503FB0FAA6C 487A0E98B5FA21D2D0E0C08E95D4853C6B94FA64420B4156F604EC2904AF7517 D37608E12E15E4A0694B6D156D042DCF390D2FBA766FEAC58202134C2D830D5B 6C73AA9ACCEACC970166FFDBCDE630296CD3B2EA3E358F2B664CE2C483157344 22E31B86E17E87BE0D226E3CAC1E28FCA18E0BDDAAA4911B4B0CFC1611DE0D36 9476DA0B14A81808160D1AF72B3596CD9D52F422E49ADB32631337F434445CCE 79AC26BEE9593567E6D3EF1C34F0EB319113EB747A222A9BF802502AB151E8D4 F7D855C4722B69A5C273C55BEBE22C6EFDF368E7A8C96CF52633BFC5D8DFBFB8 4D1869FCF68D5F12805505EF0AFD01C3363A2761E074C8F1B65CFCC31676E8CF 49DAADA1DC8A4083EDAA612B511D11EBB48C8AA68B46C9BE82F02111BCE83751 4B898EF55DEB2B08C623F6BE1116532AD67AEFE0AC912B6B6A0CD5DF0AE34305 3E0A6399F9583688D9A6CC489D3A78C6E91E231AB397870A35772B4B3E2A21B6 323D8D4C0EA2E90AF4F1733AE639682987390BA69229A5B1250C707D7968C24E FD0A41618549071E30C3B9D52726B19169E57944B1B308DCC548D33C37112BD7 F40D3E924A44344EE55DABFDB38BD54527D69F0143F1531CAC341E2F6DD01E1C 2ADF7600DA63A36382CF208CC0A66BAE48C602264F24E531A15167B91BB7AF0E 1C26FFBD08B83BA63CB1AA44C10EFB8BA65C69B6E7D1F9E31E59FA199DE21D04 214497337A255731A41A1007A9467588B8970A4DBA19A82B5AB3F1A625F41986 F30D0FF266F1B01E6C7122CFE08644615006345390CDDC83DC092E21BCA8A10C FC90B8BD2840189AED7E8454F2892A27A5F1EDAF3DCFBBD0B6B70E0D9382005A 453216284D819AE346D6625BBA0649CB036993C81BC8DE47DC0E7A842229D11E CFCF6B6529AFB2982269BD9749D705DA9C50EEED1E170DCEA5FD8911DFACF3EC B611B64A8E5F0E6C832442937EEC88C846E5D1FF75F727D46A06985171BB644F CC176EF60C923F702D7DB188BE640A0576235B348185B1FE7BD4ADCD3672D721 27D2C69A59DBB5DAE9B8D0D4FF08307C836C96966BC34AB4B86291E5128293C1 BCEE06A9753BD16B7A46BD446B44A0D13DC6430C035812F0F7DA4AFD0D28F149 CA679E12FD6B84FADDA55BEE84925D5C31AB08AFC3CB7405AAF3401BAABAA91E DCF901F1C02D33C3067F2C70A7ACFC4C64D6028079AA8E034EF5A5827DA7BC27 EFCCC8D9BC327FC1C7A28391DBC107055EB1E72AF7D7C5B2A0FF5FE8B87FC6EE E8719B150520D46D80A7D04129A78B5D4352885EC2F0F00571842ED025FBCA12 CECDD3C8872BE5A946C227D13DE562E04B14B0E8662A86E99FD207F7CC7C03A9 10E7D4BCF20403E31BA872D19D919A2E62878D85A722A7FDF6C9647077560503 80E15736CC7A15C036E0E393D40EB0869E04875142A7A785270E445ED15A0D31 79682041D4E06BD186ADA99B1114D20BC49EAAB01165403C71FE0753F1DAF1BB CCEEE569B7F35D05AD3A350914F18543F58B4217653FC1DC4E11B6B4F551F3C3 EE7B4E155E96360ECCE1725A52E092247A7122D2CEB207C4515E161C6C7DF458 4CDB8A7D169013D0B88DEA979C0FC29B0823BC382FE5A0A652ADC92C205B2BE1 E56E7F8A6C2CA338DAB9207C4B34D6BFA688651F33A4AC17B9E4E233677ACC38 819100D84A65658C0D534EFA1E4CD6711BF1FD9A3D8ECE96330E30D98D1DCDB6 9ECB183FC19F36D5557E8CDE45A7DEA5F2DBB7B39FB12655900B54383E159B38 BA15EE7BDE96EE0FCA3826ECED79205EF09EC5D22B45E9ADFD8BD63A930BD880 A257596D32D565B22EA79873AFE995AE22D80CFBD17493103EC15203DD451D77 9E5FF077766122DFA39C19A75F725249C5FD6F6172DAB38104C8D9EF17C59976 2608766EEA72D15D016A14B61224D3B7E036BAD6DF9303C09D0303F938190A9D 896E2C51DA6F4BAB7E4125FDD6BD7F9E8F53A7B2BF06767D34539156BAD603B8 0FC62ABC3AE2E2F87FC4A2A02493840EF44EEEE69B4CDBAF94E5F47469A788B2 7DD2B0F561FEE6AF0B9A3A32B4398EF8385B45D44B093E507054F87483CC7A65 54DE0F2D372E93AD7767460E35450ADAA100B66A55774D603E80E977F2CBDAFF 48D50247FCD4A9745C549BDEA2A3A484970AB11C148047C070A67766ADDAA645 A0E69F0A798522A9DBC96C5A3DD2095ADE685AD822A19904F07BC9F124303FDD 2AB94120A04B8451843E2E17D77AB45AA4CC5EB54D656D04EB50408019EB5823 B09E7E03A1FC293CDCFFE0AE30AE4F10A674FA76B89F1C77E0F1D1BE8D7D6340 7D2B3B34817F51067AA93013B2807465E774D3684CBE3461EA7077CB7D3098ED B90F319B4245D49EA0C0E941180CD5DD6E5C7EA09FCEA5BEABCBE65F172EB8CA FD3ECA8939644924DDFF6563CDE2104B71321DB5621BE2BB04A47C9AE0B4C089 1CDEA1F22ACA1AC6D51E2BFDE746AC5AAAF50E6EA8AF1A8511F3174561C72D77 3E31FD25760D29E06BFC439EFD31742A1CA3D80286BEE71D52541FDF1A4562DA 086C6E8FCE2144148757F04199D70F1F5C815167086A7D2425ADF1B847669F22 70D989E9FF76C9B8A78E83359924C0A0B71C0839D813FCF5AE63F122A4B29460 354A69963C86F84B2C45271FD4A55D17EC3AAF29CC912F17BAA000B6AC6C1F8C 16F49AD587D291B5FAE5CFA1C14248CF27C26D7041C10BB062153AB19C533A7D 36DD9F4FAEC118D7F6BE81AC93E5DB9D518D363D2EC9CCA6680DE4CAA10E0853 8AF5620B8126F7CED1C74902DBDD7C57FC66FFC8D9161D81B4D8ED83396CB0B6 969124F5DEB10BB2CF08941FD99C12730F943A156ABD9474E00CF928EF98A85D 4A54CB66168C6353F8AA45E91E303EA35F9A2F9ED1934F01044E8AFF92F6FC5E 23234178CED72963406AB794EF3EF1CC77065B0C34B61ED9B8FB9E012B932B1E C571D76EDAAC5F5D1824D33F3B1870ACE8511C58380CB1EC520251FCE68CF0CA CA867B41EA77DC779335472A31CA940D5AF95226E6DB5CAD012718519743F5CC 953F4C54096155E5208D976A95F949ECD1F60CED24153087E43B5C9852705C63 48A34256DE0CB89A7D3D8672975F67115106B253ED23F3F047F58B28FFB51C95 FA8DC5EE05936CE3FA9DA0FCB262B1352559BA47A777CF7FE5203ED95715BB7C CCAA97D93652BD828F28E0121EEE2636559DBEAC5C1232C9328E59D95F7860D4 E41D8A0CBF0DACD52496D758AEBFBD49FC98786A65FFB437F8F771A68AC6ED14 6ECBADA8180624157386803078C0ECB02BB7B932C39F6DC6E8AAC9332564795F 5230E53F828495C18360B7B3EC221247BEB7442A5EDF74227BAE75A00C20FAF8 573E01A5877EB85DE496E36AB3794AD3515D2AC9E13A955FE19B1F3DEC1E4455 D5ADC17D98EC3C2A9EB4551DD05C6397F9B929DA17A93CDA0960657C6F86118F 393755BFD5E968BE8D0C2ABA8CFABA4FF46921C939C3FBB3B32E00F768796DA9 35B2042C3A83A5FC05ADBBC1A9867CC706272F852B26733ED874A8DE1548B87D 9D603FD4CF61EB969433D53A0066F12EC6B931383A848AB71DF468E6A1C34FDF 72321140796702414E04E0ABD984300B9F9D22F16E401892E6184A67B9434AD1 23C83EDBE48F392B49251F6206E84CE8360F241D651A7F9B62B5DCB8F0DF22F0 AD6ABD8F2B9E908367FEE467160E89680B9378F57D243DA04C1434FFED253524 D0F308D1F311F33DCF829E3B5BA0F07C3EB16C2DB9CE9FAA111C0DC01AEEF1CD FC2A587D9A041DCEEAECB101F1D597CD36FBF647C015B062DE5858F96DC10F74 1021A06EB06F283820B5C0E62DE4671F72985444AE2C17AC2232E6E49B9BA13E 2DFAB0EB4B2B24EFF70A777E892F5B7B7C44153BA6C7AA19FC1315A857F1E564 93990DDDC452691ACC8A681EB658AC0B7C823B7D3A8CB995B30CA3C44C352D0D C4E253B3B694EBB74568E08479B87FDFC05F239297733C494FF8C3BB84558666 316BB7B1969B523A58AB2FF029F806A05B72F6CE07083F9555D982058E10DA3D ED21DA3E40F1E9CA9B6428984A7DFACBD366591AABB0DA6E17F401BF99E2829E C89A71F2AFAD41C3EF856A40473E9C463FD6896C5D2148029F4FAC4C14C92E13 A8FA2A50EF4C33EE9E1BD5C61083DE92CB45F426BC5A58CEAE29E823A8652F19 CF88A03CAF9D697FBDBD8CBA47402061EDC788BF7A89521C86128CE4B4CD0D13 4C7B36766649B401B0D10B686F04711890C1AC5997F2B2D2E0F3D2C8D7DBB266 BBC730A2502FFB7E922F57CF8F52B3583873440D139B22FAF276FEB94F75D912 EF6CFAF3C580F26DB6FBEFCF66A1D4016608E387F69B424D841E4A2DFC840FF4 6497E03BDEE98DB3D397146532B82B54549CDC76D79B8A1CF1B492207AA39B5C C68A13CBDC69BAFAB217AC5A76CF46F20E2903EBD232639EA413005776B1CDB6 76EB3E52310A2D99A5CBCEC16209F5218D91DE873B767DF5A35819F00B3CDAD0 548FBA1EA519D97B3D2A9F09330376D70E07C8FA0E38254EC50DD93473F86E99 AC7021540D5CDF0AA97F7417B80E238C1AECC55286582FA4388218AB1FDFB4D2 61B982926FD6CA5E1F3750C7DFCDD5715869092DBDE4DB0164E551567DC87E7B 003A41EAF47463A0F677BBD3ADCF4709E08ACA108BD076CE993068A6431ED97A 4181BEA89CCFD7BDBBFC892C0F4D15A75FE208DDFFFDB1544062658D9A587ED6 E000F66A1F17080D187A6D8E6527B89E10551AF1F8FEA3AA87384AF4664BE52D 13FCA2C0081613F0CD796CEEB06D03C2BCC2E42C8C1B4D7B23DA0DFA7C84997D 5556977DF44F7224D82CA9DEFFA4A27569C6ACC8AD127D4A39AC6684040E6799 1EFB7A0F795F7AB18C9702D352A5A9BA8D7FE7CA709DFAB6DB9155D2D1368A12 90145D1809E05625C37C0D71E23D0561D47195232FAA5970265F588C82A6DA50 26A66D7CA3ABABA6B937C469583B7B1237AE6DA66DBE7E91B4E80AC1FF8F6945 4FF694AA6D9C3B25029FBDBE37453274D6BE1A7914C8EB57EFDA0C92559F3FEC 72F8E3CE874AFD49FB15BA8E522D8CFDE1C69A840BF0D7E45784642F6680C1BA 894BFD16D7DF40FBD111DB9DF3AACD08AA4EB01BE973C98F6F3AF457AE31C452 0008841418CDBCC2C21339EE42E41ADB6C62ECDEA8BEF8A483402CD363454F66 BBBE0C2DECDC90307A59EF912EC8E4CA6C14993FD67D33954F623BEDDBBFED3F 09C23C55596B72BD878BF68B557A25A25AFEE1A3C605DE39DCA0D586A081E263 4FE2F07228ACC92DE650259A2DE812D1FA36527BECF5DE7AE586123DFFB29942 0E931039D95774E0E961732ACCF261193350DC60116E8C469BC5482B51E717B0 730A03A27EC79ECDD9306DEA21534D2804C745F45CE4B113F20D1CBF8458684A 3462795E7901BCFAD90E2812654EA2966C9064FA05DC20151EB8971CDB9291FE CB6F8A18F05E30EB7BBCC169205D5FF17DC78FF18324EF97E647F64D73F0263A 69C2D2D49119E36D310749ACCEC23F2F435B967598FB71D4AE7465AE82F9C4BB F5C980CBB9C08C9E867073726625B84569ACF09E2D4B7A62E3C824631BEFE27D 54C2D8E5B8511F987E96279EC67672ADAC8A55FD95346A89A5E98273E6805C84 94BAB7BFD758AB05D898EB55947C52B6888D6B16FF3C4F4EBAB8D03BFF4773CE 85A1C9C1FFEA6736CD22E099515496C142D4841450C6493C39308469BB4CD63F CADD4660AF12E09176818321D89D6250962D0ADD925E6360A12E4459F8A35FAE 4B2E60ACA34F95BC7D9F51EAEF17E005D85ACA444093DF4CB08976421B9D41C9 0DD437FEF4E85C68CEEE5C0DBEB7BE7750075ADADD6F53A7D44C3E4457AAE62E C917BD7DFC8E76A0520AC474570DDA5D3B816720DC627DFEE065BF1007129438 875D9ABD264033847491D43C9A9711714AD90BC5FF3CB9D32D14C143991C090D 0E8430AD22ED7992451FDA1E5179FE72472FEB568C83138A47F0277C81857F8D F44A93B07ABC2E874AF2E8ECECBDB9FE26164CE6A7A5DE4DF18648447751EA97 AE6F927FE9090BD42FB13C65ADA216AB7D33C6BCC127F42503E6E90C17653751 79D3FD5583E815AE0440DE02F41042D91FBAF80F7289E7E4F4959EE4E7C6222B 6D23CD8C79736E8325A50A4C9FE3A35CEE9BAF5F51C02932F8FEC830B38F0240 B502334C036F4E1BA4367161E7AB3D4E36F4A2BC9C8B5D37F4527AB9BBBDB585 F8A078 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 13 /fl put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1422DEB13896DD78CB7B7F400EA5A6CD639D9CC828F 52311A11F2A84E566DE98826F1E28D55FB08ED70950205DE52C207CF14238446 084FB4DCE04C781858BB4E0744C023EB0B563769751AF1D807EED20E4AFFDC46 3C1510C782FD92902761F7557FEF701AA67B20A9B019C760B2BBA8A048BA3681 35DB440925CABA05B8A13B2D30D14FA875D3E200A018C78BE2E930457BC33AD2 FE3610314A268E9A30EB41F7C771758410E7D1179567B22CFEB5163F7CADBC40 4D40860E83BD5DF2BAB4822B55B863D0793D3B60F0DDDB6DB993711C4C7C2F39 31D02C7D8EE36FFF8FF2179534EE4F2DF388C96C9AF6978D929610EBAA615EE2 FA163D8C52E5810E94456BE63570A6878E791DF4958E60C057FAE0FFA4C2B7F6 192AF8786E14A6C6379C6E13A9C528A198B8EC8654AD69CCB5C209964A2B26E4 E636DDD749286B80A5C22474B49FC5C093A8215D49B30ADA383485030AEE93AF BABB827D996E563D1681528F54353D1245ED78D1915CFBB5595E3B9272ACF503 8FEE0B65C4CD9D5783F948ECAB51BA25F77DFA440C1D8B636FF6A15E6BB0800B AD6C7A22C4F0BF6C9A19F0E696B103D8150AAA337C303ABE10C87D87549D150C 2D9665F99AADD64B2A8D89FCF9E50C08878645F932A79211C3D5E20F52D4D829 0635C9A1AD845676304507AE33C76AFB216A17417C0DAF7735D8ADC647BA2AD6 1970A15C7CB7720F527DAEC4E528E2D4DE4F6E2525A655331FE2C56415A28389 E7FD57B9C79522C1D822F82CFE0BC3F399DCDB9414D5478F9966438C3C6B4D54 621D44ABB27135B7EF06B892E86D1403C8874230F10B839B587645725DC3264A 0A093A5326A2152DDFA19E2F2D4FD9F85BE5E8B5AE8B1A5885CB61B5EFEAEB48 1B83E387773E29896C843F8B7FF6C85FC1513ECDA95D5A73767C032C26AA7958 78DB1B6A9AF5F3FBD623AD518C8264DD237FF9444A3FEE0CD66100EC6C3E0885 5F54DD846625251635E6050885500B6BFAD25B26E1656C13224728657C5A9D8C 028A05FA2C2667C93490FECE298C6B5FC086BDECD05A09FE01CC0C3A2962B81A B06DD897304FECF8707F5EE7C591F5082371B34305B0B6C5C6560DB03E56B066 895CC11D2EC8A8483943FEFD6714A5B4E2113DD3DA3292B1A4537F90AF4F7EF7 9600048D2178DCD1CCC9B5B35A4B4D3BE6DDA1B26846E695CF293C39AA20C283 5D25314A601B53948B679FDD50C77FBBDB381F7FDD9EB1D56142D848902897A0 37879477BF786B2E5B7EC5C4B362B1C22E1061B76774E42DFD6B5DC8945D7EC6 BB58102CE5A47903E87D629839AC651F1319485AF8535EEB1792F5BC0A24DF5A 747BA7A8D638A14CD46408DCC140AF3EB7A16352476E2377503A0ED24E30BBB2 3709D90FC7FDDC3303450FEA53923C7D8D6B8830C25017C03091C9A41E13B8C2 504D710E1CBACF18BA8C822C839852F9CC032ADAA6B30D189F0B0C44F44E1F1D 618C2F7EC4992C1B50443DBB0B797408296965B9887EDB1B4DE1D3E13130D728 CAB5DB991669B762F59D5FCA766486B5C1B2824F8513ED8A13DF27B58114722C 8288DE27F5F532DEED0CE260E1AF0DDF996C15B201C57152D48454D9454AAD60 21A9C6F5030DA7735ADEFA843470D6B80512E38207C7D67AB521B582EE2A0462 B25A4CE6B0844FD99BE4F6FBF7A1046412C358EE796204CD4DD02384B50A9DB1 A5EA96C4300311D01E444A43A97B1EA4DCF3CDF1A1FD7012569DC6C94C56DCF9 AB3A7A354160A14F23BDCD300E4DA56184BE96770AFB9920BE1641E4F4189EB5 421319F90FDEAE7877148E8760458AED89CD92B5F85D81A961D856BF1ABC9A44 714C7CAC016BFE8BE8AFC5A7F6574851BE740A89DBB24A5640EDDDEAA73D25B3 5CC35177701510F2C8622792554F2CEDFF22747DD82489AC2BF0529BECAC2FC2 383EFF6986DCF54BF651144AD9555D469F5CD25D03BC8F791E58E217CF046889 A817AC7A65317C64169B288FCD4C32589D9CB0D2DD2C9A6B78E6AC615258373E 4A370F122D5AB9C61096615B0034C575C77B3F691BE431FD668D5A6997C566DB 102675B020C2E6D6E8CB5D0F98065ECA2C7C8406157AE8554865358C320105A3 5FE5A04FA7C00BB61322A161225592572F036972562BFA92C9261CF5F5FBC338 66E0C7CFAAB786E0F2109806055AA2BC02E07D035A3B9F40598349EB8955AE1C 2AD9EF253E24FF4AA72AD9119BEFC7D030AC460C72D8A6485D71FD6E64F26605 7F216F1262CCEF6C7788EEA2D5045B50EFBCE201002F2DA952663E700CB1E7DE 2E5595B63C15A74DD4AFC43F49A17B98F280A0DB93468483E303CEFD6BAC0A25 01133CC56A739542E161824C00AB14838C919465400B7A63AF39D275F74EF7A7 CEE565D6B27CF60C0CF051DECE02760CB9557BF8733E5D2650AAC9AEFBCFFF4E 16F166538B4F5CB6DA9FA35F0CFBDDFDC52AC0F6D497CF2371243E544AD82DF7 A674DE4F5C3210B4A0F2247C5E4D1D9DD52B77FE4820BB31FC7E1A66EDA0D642 8C4FEA60420D1BBEAE8BD82754959775E085EF4F48908BB872BF9CB489F1045B 90196A086F4E8206336898862766AF2A788D8515FC2E109715562119541467EA 7CFABF282AE108C6AB6EBC6E9E2D39148C515BCE60C82C844601BF6C6F60404B D4D71550695A36934AFB58E2941038544267DEA004CD70EAA317B35F24B73DC9 C18E3A7C7F2D15C9684C7B6136E1CA1FB0790BF57ECA4C6E9CF8CA194F7501A3 40313506C9786CACCFDFC023ADD205B5D2F8969446339E234B1EDEB209A1D8D0 D83687CBA22D416B03DF86727A90F38A90587B01ACBD191531060EE185DBEDC2 88D3EFD6D90C4E08F5AC850E7DC2AC401EF71DDAF704AB7342D2E20418451A71 A053BEE600BB67C08BDAB8F4804314362F7723670B1CAA770FB8BDC0EC7A2940 F59A3151B37A8D6FD2C33ABC0C4736C499560A8467032160527EE380E2B953E0 ABE1044F25C916B659AE48F451D5170A6483714FCC1814D63808B3BDA0A6523A 086F1B5A1BF2AE5AF2386F34FC48755FE08342FB4FA5F8CFDB05C26A2E99017C 613C1B2559057F85D3F7C6E8FBDB1496FA2EE4277B53B78A7EDADF1DFA092894 FE49251ABB42A17FAE6D64F89352F81904E2DA683271811C8F57B95024263A1B 224E5BC6A7960004A06424EA54CA9DF0125FD41D3D9BD7D691991D2318B98213 082D42D3B3EFF8934378D24C5F324B04789AE0A4D0B85EC7C6FB1F96F70AF4BD 8E7A2523D4A58F5A886EF68DBC7ACB31DFBC850D521A548AEB32B450B83D94B3 191E9AD9A76D7896A757EBD70B306CAB141331BE35D1D53029E9170A6150868A 558BCA6A981DB3F7029A880F99AEDB0729797F1EF3D7E33090BF8AAB8A3A6666 7594DF11908259DFD243D61E5F58EFD99ACA51FD4F4E301E1035E4D4A68AC20E 53F38DF2805C5A1391257DBCBA60506F20FB62AAB36F494898AD59E9E3FB35E3 558A514B0575FCC353E40F669C20062A2B78E34DA785F16707C237841000B2BB 05B823C7A6F36714393388E545EAABCCED35B2C9EBF246F1C96EAD0CE77776AF 527064F94ABEF0BFC205D7258DCC8BC27CB9A1D60E29711CBFE6D84BEF1F30EE 542F38F3E4AB8E2B9642E36A1D0A9BBA1142C4610AC1C526038A5F6C7CF27E66 913559FD83C607251522E47C0CE7B04E019AAE62096A4A71927EED385F341557 14571A45D3CE80152DA0E11098A34A4C22A39643542107C38CDEF226DE48E06B D5FEF7F519B502430A85CC5962A9D5B21845D95EF65154F1E76043A03F4DDF75 EEC0BAA7EBC8A050E400EF24C92626151A7CC19937CD582F5C72AB3714363933 735DA8F18A6EBEDD0D0D3123E1E3B2C3EE63ADD771F3E8E167400A0D9963F4E1 32989DC5C6A0F8E733C5A8903D51890727FA784AA80EC96ED00068144079F666 CD56313B9D53F2EC7166130F3535015B54BC74228D18C10BD35BEB3023AAFB05 9195CFFDF7D720CB475C3113F3FCD8809908BAF80A2DE2DAFF8046B9B6FFC43F C05B6352B9ACFC7EABA392E5C093CE878C09A8B4B1683EC28868CF9E1F9F75E3 E1AEDC271CE1B1F09E23C6F7244B7136EF4E084C43A6B402163FE26193B37BDD DD9A0185A72E56698DD9D11A687271AB26EAC04FB31E866CBD1139447D0A3A92 8FD24A0044295C66581D4F6690290E50CE0722EF268FB1BBE356BDC34763B739 27E175BD3CE25A737011E2C9E757922B15990BEC4B04E679953668096A092830 0743B59C1E2847F86F83FCBE1CE581334D0587E09941A7BD130127B4B1F108FC 1B694ABD46F845E23CB93BBA2578E85D6FE8AC4DB864C2EE10C87FCBE9B48E8C 0CE58BD562C35B5ACD5A021B393F3ABB5E590F87968990A55BB58112F3E2CBEF 0F1291BF0CD479680DBF583F7ED63F4729FA31F72C1B2D32B1ED756DC4CA06CC D899A042EDE28F1B51B6A79564801C167974D9C29C0A11393D14B683B2B9E0B4 0ACD7C42AF39FA933792677EC37433C3A300DBF42138AB7D2CB9272E8B9452D9 33BABDF4EA0018ED50B9380083A0458157F5FFE7B26848990FD109C5C52E3639 CCC77BDD245835C495C7EF4D0D4F6B918706E59C66A30C25A667016880CFDC40 629C408A693B1F3FE143F50397DC9A74CA226BAD0E6E692B701E6FD252FCD920 66E1AE29F2F622F5B187F70CDD2FEAF0BA2E83E2E1FA6B506A008764E9DD9801 4F71CD55456BF709F29651F3A54E58F0B996AA50DE7F67A3A0A680FB825DFCC6 08F5AF3229B9552669C989259F604E442A1B203A9ED199AE676E26639A0111AB 56EE045ADDFDCE371CDE015587DA2D9667E41305A551E6C23502735E4A611BD3 CE813B0C48B6804795C61CD26DFA9A6FEA35FD220DA021BFCF45F3FBF73FD950 73BB5FA315FD3CAA11250EC4B885E85DDC2F3D0C57A7D88EA36A61BB73ADE9EA EBC099AB8EA6E9D90DF7297D832DF9C7F3342001F47AE7E08BAE6385F9834640 02E8D3A43A740ACC4839AEE72A6C8C71A271772EFAF4A03837E46A87AE22A75F B4D9AE8C3D26FF05F633DE8B7AD207E34283E215BCAB4E49C2F8D1243C4B52F7 613E33445D78C03DDA5F065517C1D412D851BCD3F1D4FC92EF9B7F4FF0F37402 68765359BFE1EA54FC7A06A8A5DE12213749AE1EA6398A951FDD77AD67A927AC 98488F40E8AD555CE99FEE690F90185DE08FB7C79F1BF981BAC33F42A697782A 3CD23599C95BB79DF38FEED0FF8C65E970BEDB0CDDE79D7400C40E862D1C7950 FAC3AB2A4D600EB782FA19032D0EA8AA5E407A5ACFEAAE1AF34C635834D1F3FB 215BE64717C8DFE02C6FC578AEED8E60A38C394FF1086E6B26BD72082B2E5032 3291F66490B2357EE660B4F1058F59A2C794DF6F5DDD34CAB7B9E3A1BCD45AA9 CC531DD1B5D82EFC354B126EAFB6B634E8CEF5A6336B093CA092064E5DA4EE2C B7DC39A83E4B17468F3C7CAAD1EC9B788A80351F631679C811FF9EBCE1511DFF 74647868AE47A4ED0CEE23C92C82234A3390BB291B0943EAB7D7C60B01F4CAD7 849F69EB2F397747F1B4F3627C2017C452ED8681D2036878A2305E991CA7A956 A70C65C0E00956B1EC2E0B8EC3E3F2245CCB928F38A8BEE3F5562BBFD91B0F53 1DAAAB37ED748E6206EA88D0D34C8EF8210EB08DD64BB5CF08C2BAD47CA4844D 37CB18CBC391385D70853FAB7CFA5B3DEA7D680192BFC7AF5D03A4216FF0EAFE 7D7129FF72747684D23A49DD6BB5757DE2A541FA2DDB1608E2042425D5EA82DC 6DD4D9E5761AA17E87F228999B2A85D80A2D16151621607B46AA9B937D9F5A6A 99645BA00E3F283CF4704709B7D9225FA27538A570A81BC5A753A53A3F84AEB6 7A5768B3544A3544EA3710C8FA9C4A97EFB175806E98F99162DA852A483BE261 9F9AE8B6D9F992BCBA318A3E1801443F6744913EBF6EA12F57B2AED0EADB0295 BEAE8F30B98C75D784ABB89A655DD3E52A4A03E53F76291427DC01150F84CD13 817E383A32F4E7A269161AD523AEABFFAF672893985ABB0FB5BDACCA9FAD6E0A 4BD3C6548F1D70E09CDF9193DF3FABA096237B5AC0F37DC8E22BB8DBF3A47600 04D1BBBF3A530DC1D91E43E13E81EC5BBE1679C2FE91BAC7143597952514561E 49FE6A52A21F74F2C33BBF74137D837270DACAB552A5E383F17C56306FEFC95E B01E5784F794AC3537512758A39140197ED8AC44ACA4BD08163BC62AB1088EF0 57BF3C3F1CD1DDBA1D35F35E38D10218A254CA1F3C1D9A2B09C7CDFFD644D53A A774C13D4F3F6649C3592080FEE648BFCB64199FAD9C50BD4629C7558F8B9C85 2A018ACCE2E97297234A4E8DFD30272B8677CAD5522995C843E42EFC40D9525E 72F0FF1284D7D9697FD059A9E971752CDD53D107A959ACC95FCD7253E335437E EB3681B4F7B294AA20FF64C55B58960857BB5CB135F25B4FE8DC01D8F6221166 398FDB12803EFCBFEBC10661A6710853C26462359B358E001281714413C6F519 2A1BF8F8365BD944DFA3D37BFC2615873E5EBBCC9674620DE1289F02B871B9C7 190D20CFF1C94C63E16D8F650DF31E9184B7B9DCAC498506C4D010E6AA206E44 F7409FC2397A1A0F4C71996ACD0FFD92438D09AA65980A5C07203DB217DDD304 577CAB05ED16C95A718D159D0D89F35BC759803A9616C966B2F6B83130875AA9 E4BA946283AEE9951BDD54BFA2FE97247E55CAAA8C6617A38F1D238A0AE20479 AD4C38C7128C22DCE47B24243626D80AAEB5589EBBE694601AC2FC8335E0B18C 2117716DA407DBCBD549F98513144B55B232A8E15A3E91A4B1AE0BF4D05CF529 3662EF7C1F19840CF7CA1EA8A9C34BB8C131BF28330752940BA745AC7115C12D D5F849263DA81315EA568CD449D71DF2DFB48F21593E77967D001135F190E741 68432760880A8AFC473B8C00FBFF6FB1DC62DF226D4B9A2A2016521310E6C53C 109997CFD9EE0507398C370D57FD34BD4BAFC43F5F4EFB0B529DE5DEDF2AD861 CC3A1649767B0337A292587DCBF4790A536799D80DC7D59116CD96CA5AC4D097 4E0B4636A0E98725577142192C60B4FC0B9EC63B27B79C588349BC6A948F950F D420AEAE5960BDD9386A2E9C650DE9F809843B70379A82861715B59CBB6E07B3 A6936B58CDB867E42155962A4A9716020A76BAD3AB161C177FA5A3B0EA6877B6 34805971D6BCF456488F8948A26337D333AA4C326AFD40CE92AA4693D7C9C652 15EA9E1136C627EFE5710ACCC0DE48601AF3C290469BFB99EF9F5C3F9C1E9D28 7D33B3FA428065F82CA627E6EB3B33DEC6433A9992DB39470C43FED86D9DC51B 0B8B18B6055859410680CF0729C3C68143672111134D43145B49E7B6078C2DFA 8D729BDA4C992053A331CC286D48E71D2836FB34955BEE283114B032A254C4A5 6AA3B04EE180A52340CD2D866C016D8A90CA17FBBFFB590314F6ECC1A0CFD2E1 EB1E7EDB1CBAFEC81DFD611663374D8F61A79665817FCABC91FD9E8B2DCA54FD 496471AAE352CDF77DBF77FF8B958CC775FC8987ED56D47436108B532D06C539 C93BE08C1F15BD0DED5FB4431CA51A0E1D928AB5179980D5C1C72183DEA1B0DB 4E681C77050E17A237265AF8481F3DFC2577AD81A99755D1060DB6404C0B9192 71EA08B637D7DFC92F6EA52B2932D6D94EC5466CB4426EA86761667A6472D2E1 2754B9BC073B6314AE79A0E8E0521AD175E357C64CA94F53FCDBD071D85224D4 60B860765E061B3535836F0947C662CB46FCEAC11FE4E4BA65DFC244D35C12B4 EB294D91AF25AA74DD2EFA11B23291EF4D669188032AB782A464DB4A96918A7B 2CE55A8F366538BD6F662E0B1F16AD17ED31CA54E34CEE6F6CEB7F879227C0AA 73CE5FAD5716265D89BADC893E8E2A9CD8A5ACC9F526FDECE819C5B59B56DC9B 2C19DB3AF066857472CCAE64AC15D2A2E83B67D154E4176EF46528FD310ED4E5 C5597E3633893070E0320C3274C79D93219669C58F960D6AEDB12CDD10271F45 5687E8051CE7376B3A7BBCE9283841554E59977BCB0FC2712634ACE047725F79 CE8078234EDE4BCAAC52A7ACE4336A28F01213A933692A93B4CA3FE8F9707F52 B8036ACA14DD2291AF0B9D6E30097F96F18991C4D22DA7EFB7213CBC7D7EDF1C BFE0F8EDC002776574BE8E670F05AD0F187980AC5D4A69FEDE2A2CD2042C9051 2A6C3EFEC84726F515CFE2D1D85A00AB04AC1CDE10E71FC50BC77164C2F7410D D33202303ECAFAE4DD04C1BDABBA55DFDCCFEC85BBD33D1ACA6A014765979996 6BED212018E18C94A199075B905F844AC71697BAAC57D4C8ADCAB4CC1E009FAC 94136877462494F7B87B3D4BD407BDC37580D76AFEDB3757034169A5470FDD63 B259D5C871703076C6EC057CA1D3EA563699ED9745712CFE045A2CAA4013F9BE 906AD05F241F6594A41AE4F8CA6DCFE4648D07A2812E1E30F842A086821D4E8C 1F2696BE79AD738F3391B25D76EFA2B538B1F6B8BBC0E2C02DB96E1DE069DC97 5DA1B3EEF715CF0194F5EB83BFB99A95E2A3C496CC3325975770EAA1FEF1965D 63118B6D1691CB9BC1DE64F54454EF2F308F4AF8A2912B26C003A6109E74DF2D C362F64A2224D9AE5556CE304F36F6E9058FCDA1BCFED037D1566739DB5FC1FC 515E68EC300DC3030C87964F0B570E04B546BF63C8CFC8E9F7FCC5BE73040878 4C7970B143BEF493C0E5D3CF30A2A84FF59DE05DE744656C1D1C3D183F20849D E7891FB9B089559D92D214ED0B4B5D99F8F62511261AD093C40555378FA2CFA1 EA3FFFE209EA917E239B0142BD07EDC431A09313968193C9722D346FE6A1DEA7 472CBC65618518F66BAEF1726AD9732AA80C55C47A77EC300B99E4A93328B082 5AF089DACF5CF990574746C900737281E317F3049C9D3ABAF1A69CB45ADCB607 E416EDC17ABECCFBD9522E4FA1ADC791E2702C0733E32DE2399C9DABAB98F1B7 9A0561A1302E8F796C3D6307611156248C4107AE7D52C096095FE557D451916F 0D1FFF64FF025CE907539288AD4A78CE4340776D7A3821B44BFB449B3EC06DBF B9F206412140FDB39E7B0D4AF9C7954F41ECB2E195D7D534DF808C088D44D05A 3EDDC8D2AFF98E5A01F0E5EBFD5E111F1E94A6F1192F7773D6DAEB99F5448878 BBD382441D88FB151BA9049857D1BE43F7EB4F3064040BC09E780B416C602D3C 7AE80A893E7CE1D1CCB12C9B5C4F117DE2AEBFE58D282E82DF7599D626FDAA56 B22CB870FBB84CF467F527BAF76BCA9B62E919F985447A4241580C2DDBD4BD84 895ABD448A3DC9C5E76644601D896F7C661A04973430F256F1101AACC5863852 3BC66EF61AF2050768BAFFBD4ED3F022AC29AE10966726C96759804EC851B9DB 189B4182AE046B89C6D8916A2DD1F7BCB905A78F1AE02A2CB792DF650058EB68 8A883D07831D1C9F17E8D335AFCFBA8EB1B2B1F154D479BE34CEC4A2142D10D0 4AA292F662B1413DD7F61FD2B078539EADB90B376E79263C16884426737C8966 AA95ABB6A47334C4FA517BB7ED2631F2E45538EE74509E6B90B0518A84A85EBE 05DA1345ED923DC890751028B2A87AFA015E780E28BA13BA5EF2D56FD8C28989 35BD31E51BE528E01DAA7BDEFD6D69DF4FC3D3F3834C733EF9F1D82B293E67C7 127206FED8469006B75DC4DE58DBD2DFDCFCC0B692A18179CC49588D55B55F5F AC6822951DD3523BD80D9A0C621CB55D838F21FBE4AC7DFB5CF649B3812EBA04 443B87AA2769461CEDCCB7DD165311E8E8301F75E22A3FE070A8AAFDF516A747 83DBCAC1845EF4908FD4F989DB6C8508E022FC6E418B15325D6FD68207EF6AAA F36D4827FCEA6D255853BD4828D5D96120082BF3EAE9D25E853869E7B15772BF 5D304E9B9402AE5E4785B941D80C6BEE7257F32B06E503714F0F58D2F5A0E4B6 553D6981BADDDC0FCEDBBFD8A9786F547E2FBE351806E24DBED5E7250434F1C1 874E27806813B465341F1067408D410CEA11DFD4DD43BD0F7C37137534A7287E 88645F756C94AE4BF112059DF28206C9C284504534D6918C48844C7F113B2F3F 60134EB669D44AA8678D567949417246137A07D408D8B2B39307C69C111624BC 06E9C21AA647BA024693BE1701F0BAF31779AE6604AD8C0BD6704579E3F455D0 E50AB8CF742BA6B0DB00F3AB9EF2A320D387EC2DC3FBA56882561ECDE05E3DF0 284468E17427E0380A8EE1F7397A9A68EA44A983F5601B7439798648C44B5002 2C46DF31C565D6921E4F36F187C80EFEF431D0942A1B826A32E6A086D32A8FB5 32B9FB8B69830F4E85870FE725FE3A165883C02DA76C52F7B8D5B43E08F28A13 C334E4C56CA0EB1685B3D31F48EEFBA6CF746AA1354AF678EF9DFB2029F9EF8B DA16C4433F7AEB2AC4697E083CDF99967A439F6FD27FA20B6DC0EAB15263E0CE D829EFCD81E9B8AE8A10BE6EEE4887D82A90187B3491E640B793C6B737887DE5 4BD34925B94024F572BAB7337F8FBE9F7555324D0868859714AF3C39C244F090 9DC75E6B412807FAA6D1CC59372F880C3D92A42252C0BB59C70756110BFAFF17 7925424D22E44DDDA06282660F297E9408B5BC48F7EFE9F2A6C013DC066D0897 8F42B0FBEC4661CEF4E32A9B645EF3042168D130EC732251D204C865CF66E8A3 FC7593C4AB47B7A0458407D897331B59EEDB55E8A756A2A46DF57FF9501B6097 C5A3F83F886A8D274E551A380110EBFD6114D1128E0C5E150F24C9E4CCCB1F26 E45C35A5F9DB01DCD9378E75B4E91F5516649E1FE95346EA77025D6A6E097B2A A96607E5B00B7DD63056695C91867D81C87F142CBD32A2F406E4364A79809AE8 678408145904D7953368B76DFB3CE9B515A8100B9BE48F3E06CB5AE0754286AF 3B74EE8EA53248EA78EE1B3056D99BA82026120445FC5D741256EC188746575D 98AC261B1F0F3D2F3E9F419528B283E03EA088402F59155B78991524CDFB6972 36D960944B87BC93A957DA334D1F1A81D1170812DCC54252A2950A1FD0A0C1CC 1112BE9F025CE692338D0A74044998141172FDC4FA6EBC4308980584B2C9EE93 BB7F9790855A43B8E56CC7BED417EBD0BAD492ADD5C01A1F828C40A9C204A8D7 D4702A8DD66970C35F9817ADB93ACF1251DE81515B024BB311C6A0C2AB7B02DC 67EEADC48F34B4CE9DE97E1C5F9DC4AB9D3F3DFFEC1F33FE6B063A416ACB9550 79ADBBD5211A5D7AE55598697D97061C33814B16BBC57BE95D85864AA34F09C9 3CD9F4C680FDD1A0D0287927362AD7208B0CEAC764B170420751EFE0D8FF4EAF FA33300D7988AE87B6981DF28042A939EED106192A57514C346F8E3B70C5669E 0F68F83C831266438CB655C4A528989A6D6DEC65CAB5DC96D96F5ACEC627A0E7 F65FA1A4DF6632700F75F10570C38C45B251F869625749BC2E36A73DBE3364FB 41E65DFA56B3D21773759992D2336BEB9FF1B826FE3013DA081B3F9077927B56 B13D927477C3E6DA953BC596E08C88317C44B8F8A99F214ADED3B37017FBE2C1 51EBBD6E8154B80200FE79E87AD2DF9F209A6E92650B4959691B81D18FED6922 8B487845E86F8ED9C278320377324823DA3586BC14EA9F0898BB8758401B4941 122966004F816E8041EAD238D34D4E1B7522AC8813BCFB3C493156301A8EB727 DFB2C9AF03D36BE76012262211B6125F3AC3D2696062030EE8C4057D5A440EA3 2DEFF54AF40847E9DB6FF52CE05A144BF029279D7E7F475EF359F6EEE57CA73C 766F531239C7C20632F0406E59CBE7B82E748DC4821DC3BB5A9E8839AF394379 E4414531E9A33357D53E8EEA40C89F305C89D206C76899F6551DC03DE784D1F3 5406358D090984C821868CFCC802951323FCBDD7889FE605CB59D47DAE70D51F 2DDB76A4BC12803950CC2D87173A0BC86ACB8F3B8DB8FF6CD368278875C612EB 321F81BFA21409B2D104C5EDC9513E201B55EE4CB7D277F8E3C31379282EF20D E95FD44CE14DEDE46F57CB89B878257C11B44F9C5BD2725FAFDB06F8AE82115C 82CE9785D532BA6A0D549C7E4A89874D4FCEFCFC953E047CF6C42F192AF98198 600C0E2FC7ACC70BAEF17E4E6B6BDA55404209B323CEC1175A29EB07D89C90F7 2781E2E8161BDB1328ACB0B554D55D40DBC70ED35FAD8950B12898AA0C78181D 969F176B4C5E7A3BAE81E7333CCC72647924C8D81B80CF45FD1961F22C71F997 48FE909F9FB2FDB4BD34AF3D2970584E5613854E60350B044DBD909F47E08947 863492B2FD64A09278BE1E871299873B8FE4A369CCFF8FBCA350270C9C21F1DD 4D45EB8E64CB1AA4992805C054D18B10B850CF4239463BE7E69B66A46B0AE2F4 8F8D56DB81AE1D7AB5EC1F1E6364839343E7B493750001B900FC4605A79B5280 CAE81F403638E95F1B808ACD5B869C121D6D0A483EBFE9150CFDEA209F39609E BAAB6FD1BAC01238ACC3AA27AD0F14294929F5F7BE6F70BC600E6B0FA8751B78 AB8BEF76E12F6BDF143939D12D3662FC4E670107737356884C58193DB16913AF B71DB7820B8529E3B9CD7B0EFDF4861509B53B84B39E32755481E713142E1CCC B4287E676DB8378EEF3886D5C1A822EEF91C2FA58F4596B10B84098A36AC3139 D5DADED54EB027C01FD1E61C05923E97E796B6A166BC618FBB411F9C566256F5 42D09809D70124117B1986CF64668A374B899B6685149747D08F20517B8849F2 E9DC7E236211DF7CB0C30C34B0DD8C7EAEA9F0A437DF2F570F14962987CAA07D 955CE87C33D9CA3E92325C0FB3AC82201F6960582C328112D212ACF722FFE9D0 EDDEEEEFC284B9F6E0CAD92CF2CEFF2A8FB9D78F4CC27A868AF2B8B4F796CAD5 5A890FCD43E629531F5445287FFAEB991AA96330DCB9ED0FEE20D2FFDEAE62DF BE40E03F8BFB5E1E5C30D4942C88C2FB01A389DB883FCBAE582013B5A32DF6DE 719910B94C6A62CD0BBC7F7FDD062BC957D2401F0D0DCFD1425FF9905B9A3ACA 07A34CCA87A8FEFC7646A0700FFE05FF58C3398EBB4CB3E092DE2D7D447F4A18 C95E3EB5E50D999C2106C19D101289203D6C14958A61EB6F115C959107B79706 46760598AD6AF0B0F5179B59C4702F7F59B3122F16D8855BB3BCE8D81811CE0A 5B617F2FF26A46CF236BF08FD260922E45FE256F0D614AA52573D95B7B52A6A0 B20B33E944F20A5A63BC06FBFBBE1992B892D6E3DD95E4F4652A687BBC5F459C 9DAEC07AEDD6F5A888AD4B8B4B8D413AD6FDB60D003B12BDB5453FEE0FAD8361 4D2E5662AE9DB3C7A1C3BDDF511E7873ACC4DDBB6961B347605B517DD6D224B3 ED1EC2C9191EF39EBDB04B68F57957C1C1E3F211B2A96D2A92F06881D83DCA6B BCBAE478457938C0E3D8D479066886FA42FDE879B2065E0283F96E5F6DDE1F91 E714C5A6FAF4A993F8AEAE646D74BDC4F925AA3A3AE592F76B5C2158316D9106 051125B6E0B84B96634DBB43F4A1EF91C6BC3B5CDCCBE5B2C535EA855A76CE56 E49C7318EF4AC0DF560CFF816CE7603408BEB7B5E9A39290BE3BE3F6B92147C8 83BB1CFAA6A71287F529CEB22F47CE90EE0802E3DAB53E6DC698FF43DDA214D1 1E1F03F2FB3DD19385F46BC7C7CF0E019C8906C4EF56FAA9CDC74F90B376C66D 185FD4BADF2E2C1CB1E4D11321F3D4E9D8D9A2C80A6DDE363EA6787D053E4F2A 15896B4B3B5E4CF2E031D4465CDCA4E020F93F4EAA0DEB90747F9EE613432089 CE941380DA8467ED635BF129451851461BC2FA05299C6DF6EE30C9EFDD3553A9 478FA7AD4F2BC03BD5ADB8C1D0D15878E53C6B4BBF24B481C25872B23E22DE43 B7FA58FAA3E4EC7C43727BAA5575B566C2EC1872D38427DF0F9A03BA1E1ADEDD C9836CDF2D393162243B829986BC12FCEC7ED67482893E4C4914DB0234DEC65E CCDA6238417C5F6DE88455EC76690AC15620CC0309B3F08D69EAB599A4CBF73E 6FE894B59EF90D89EA07EEA16F6EBC0616397E09BC37E6B6100913936FE94F5F 4605BC819080BDBA1C94B93008AEC817F2E58A0BC111F3458AA8E21F2879CA2A 0152A04AA78096EF13D556BA218B2BE6C1E109A35A77B0E0E8E4D8004ECA48BE 8F0521C073A7D2A9CEA815190BB08E7936AC2477A288DA75B049594E5A4B0338 7CF5BB1543AC24EC1A0192173D1A760BF113428679B20E79EC8C5085DB4B8EB7 62BDA226163328F00980585550167917C57B736ED6E526107F8337F899866972 63D7AF32A35FF242426C02AEF00FF556D1E27C47ED1B296852F7A10FE7DB5A83 17590C0F27D13C7A1B4520DCC32E1D6F986B30DAEF1C7EBA224549F7F8A09B4F C9FD2CE806D1E1B09362BE3FA40864A6FC000360C8A66E7B551B02D5C45F4865 626A8F6A5D715D5DB8D7FBBF15F68F9C6729725445710C599E046A2672C1CD10 7301199212D7BECEF0F1C3C0397FB5AC9056016A2E2A9DB940418F6A48B59EDA 2A1B933C94C0C803827A147E73CB788F2C9E1F0F83D91FC05DC2A4A64D8C4A53 D6E44B74601F9D166EF2659A00F2B7DC48325AC579037A09F5BA742C9907E82C 5601760A58226B5E2A45A4EEE141AF05160792DA28B6526951F61CF145E09866 6AB7AE5062F7C067F465F80B8B5D0BAA16578466914D1CD46728CF729E5A5B58 53AA7B9B6D8584783B3AAFAD6DB6E6D83D3B9E3B49838FABCF15DFD27B942085 8D558384C6E8FCEC737AE906BE7FD93E064D05F11E2C3FA298EBD79F9ED507F0 67E63A9872D5098010CF25B37C411D07DC9F031FB010C7580400E0CBC3082B1B 639DB5CD83E4E2FBE053F6276B4C2E1A377E5272E5F61AD1393628D1271F1674 036618662105313C2FC28F46A7A1708374E30A286E60AAFF2F59C327932DBB18 C005CAF3F09C03F4429CF730DD43B999C674182345A6AB3134971967DCA53617 A774B8C0DCA86B3CC35E55976C7C97350B893EF62A9E27D703C162899318F9C9 98A6D5B784FFF003447C3E3D37605685B0CE56164B2654439574E7B7B6C64880 86A1535CA6CBF5A510CCC01F697E70044E628EBA260DAE665B675643D2F0CE79 0214C9EDCC2358A65AB948CC2DBD91249A89F23533305A186C7CD08406FA5B57 650F1C8DA43CEA9B43ED008779C479877F3F25E9845D32BB36E060775B504968 2516885FA691147563DEBE34EE66974F0E1403ED2FCE832F6E4E6487344451AD 0D11291D5717A0A416A1F18F11C6BD8D7653062D766A3992FF752F4E845ECCE0 B534CDB4A70A19D18699112324892EAE60B8057A1C5D428E92900D32B0271DC6 4EB7C7EADB45D72D28982AC53AE8F39ADE725033768D4D0324AF2BEE24723277 2D8320BB3C763CC0C3E65DAC85DEFAFDCB38E1BA43BE97057713A2404E5BA967 66FA39408CF01C57790A278289708B026128BD20F4D3C62A374B958332C2B802 F99A69899D1815751C88EE9D30E5764D7F85AF93914110517E04EF6BB6350006 4D741B1068C14ADA3D55ED1BBF362A3F3BFBDC3197C5339A8F6274027C9FB9B7 C5A85C1976B8B80A5148C5C3C016CFD3B3B047459A527588059E67901BB2E636 3A928D08A457C3D07D94828E7A7C5E42F1AF828223B76F80788F6490CE8A4F2B A9FADEC4C4326A3A8E4263C1B50AA3CF512ECCEF138B83D046C63F7E9AF3CB01 22A817B69E952CC2AC8F8D6DD351CFD35BF1D099224F6F6DCAC634FD1A91C44C A43FFAAC51EDE8C70461BE4804D42D6E2C30020C6023C3300499265AB962D2BD A525C13DBF57C0667B8326F93AE2407C2F06D2D5000AFADAFEE75306F53DDC29 FAF38F78E24952875BD5DA26E415E79CD9D235E7B58BEEB622DE88BEFE3A6EA7 AE071E717C74BE4D2879523E19D1695C5DC9B0CE7747D7BE310A500A328789CF F7E13FF4DB930A5C47DAE5A7B60478A073AFF513AB072AFAC7B1D0951289A394 EB3E1C7C24ABD116231C5AF69B6E9F731B075C029E9181186E362373BE65D8E4 340911295E477040582DC1900AFF1442D093CD2EC69BF862D30D98623112FE78 D0FB148C142A676CED55662196C4F3AEA7F00597F76FF5CAD60D69CB509323B5 B50817BA67D652BAEFAD30E09C8D8BA94CD182C45B9F8E75597E9BD5E5B0FA75 8328A828460D9F083EA95353A7056C35CED7C51B261400F95F06DCCBEE056234 9BBAB2170B0B8ACB5317A9BF7B10656522E2E80C6BB4B13926760663EBE24DC9 9E7A085A48EE1AED815DD696A4E714BE30301253B8D59CB79BDFCAB2D0F3CB3F FF287160949649E3DEF014A3067BBC951225F5CB5996CA4AC4B7CE2B48FBC86E 249FE59F0760D8D29CB89F48CA3794E2EAF4C993A9C9A61169A82EB971A1B8C7 D3FF801959F0B944C9071716090419A47E14BCE4B5A92F07A7F9F1F85C68607F 3EE0E5D5BFE6A2A4B1222AFC173C38E527DE7380A560B8C80B1DCC10A2907457 142853C57D18D002E1CDDA5036A97FD8B1550D069863D8982933C524F8BD759F C31EA8FF8363FBCE2464D64CD503C06A81F97D9318D95AD42A297118ED8F941E C7229700CDD96B855404A66576242801C480AFD57D7B79AE00C159613807E628 0F7F370B3929DEB7 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05A2BF747D5699036377F1A645372E5CF6497D8D4465492780B56 0D7A64F4AACF00DD611A0D4AA2A1B4ABBCE41B0BF87A7351F26E125166E2E07E 2E64639C4DC21B996EB744C784A145F80D07676331178ECAA4967195803AE02D 1A6A04B38D721323251A1B1F656498F5FF255E4F1632DEE1A8C2B197CD7BD5FE 3819B1998273EA5EF8EE032E0638F6DCE419852021D098A19CBA9A2B675BEDDA B6513BFA1F239FFC92CEC9ECC612072E87FBEF1ABEDF6804E605AC8979E970E1 3EB524894E3949BF090C1BB477C45FC0054DFB6B6816C5B0312BB9FA09EA87A0 9A18B9B5E0DA687BAB199267EC6668094D1FA853632DE7124CEAB78BC994D6BF FD8BB4B920B89A68DC0D60BB73AFED84D38925B4E8C4D4E239080FB47F44979B 7660A9C57F1CBCE1AD69AE3E7782796EE69BC910251DF8406ACF78CDED5224AA B13F1E17BB454BD4B5AAAF0143570E5FB2236DD096A2607B8D24EE238110486A 0759B4AA276E3B5AE6BCCD2299EF7EC5C0ADB9E3A838DF0A0541FC56F62684E2 F165BDE1EEC719A7DD44D7251B0D28C63304BA3758C76B1FACD54A4E73C9B32E A49366083906EF8927B6463215012B3927CB643C0292688601AF2348D62292CD 5E20110FDD05739D7EC6A3BD1B166DCC421ABA7901FB926025EF88A54B0E695C 38E9C894A2EF7F33E5D0304268849FC3D2F972148ED6C631EA375D67DEA1F8C3 C44173E5FAD943C81B72D818D7202AB20B77EA0299D4FF7FBCFCD7BDB0C9655A B02646E5BA32F6A7033BEA306BE69EDF532347B24DC7E6BA226C6005EBF841E4 16430F8B4405B2ED05003F10080C12CC74EB07708FDBADB821BFE0DE6C8A3278 C2349EB88B977D15639695B35C35235E00862E70D7E9BF6632E0F2E342FCEE2F 16880A993EA9BF5FE7C0220D844C5920A2C334ED030FE2D062F8549508589F66 66B2E4F66E249A01BE6CC56E73AB21117213B7502DAE7A2CDC2D8788C24F8F40 74B96C17464510BE4F2543E536BB32E943522E9113DFBB56096A34BCF507E7A1 B17451E6AF90ECD2A3E0234FF01F93BF0BF1300FAC48AFAA064419428256019A A55C94130C7A4AF9ED17AF615FFC9C10517B0D210C464C8C0E2B344B31D33886 5264577F17CD7137CCED2612E1B01DBC93A98CDCC6C83A858307703AE11DF924 BABC5FDE240C80CB0B4DE1672AD86C9BC4773E95182C70A6E809D336B71E25E5 17C60BC4C8182FC222EFE5419EEAAB8CB1C04750631F7B4846D75651244286A3 3F87AC81C3DE5937D4545937DF166D02B0505EEF1F744A2A955DBA5AE1FD8453 8E3AC7E38B333C7A741A58472B543C870CD2885E812FC88DC0E3A56D3340144C B6EF013F04707315145E4B41142BB00A2BE5F6D17EDD30DFCBEA3F099010C431 E2D5BD261DCE594B5E0FF7F1E836E88494B7489BABC9A230A7324E122F40DA62 08922179B7EDF55176E4D11F985E6F3CE8B6695BBCCFF8AD96CCE92C0CE3E8D9 C27F103747346DE482B3A922A19BFC5E18C3556B48BF53EDCE941744C43EF096 E36866CF42D145087DE6A41F205D04A802E2E26EBA56BE4BE182B460E8A7DF98 8C160EEF6FFA866EE54AA2541B1595F5B1D0104BCB313E5C886A0519311E2413 CC40CF96EF3E05CCAF796A3FD36BEE034878238A40C77C6205904A9ABC8CCC9C 7E1AA1FEAE4732BE0FCB9BFF9044486A232D39745885AF66470F281F7CD076F3 B11CEB70BC1215D944D65357D0967F83E13EBBABB3576B89AB755A14A4A8D292 5FAE31DDBE3999E4EAE54E5892C6087C4B6436DEE581FAFD1F33A8DB8000B5F0 F644C655674DEF2BAB3105EA12B5550286FC001F5BA1A63F46E30A2EE663C24C F5390CF05D72727D7AF09433ED15A112E199447E0C516C8D2E535D38F5EFF96C 763F51F7A8656D90DA6AD7199EC102AFC5D65DFC505E51E7EEA199D39C2CDF80 B2CE3E35B688B79D566F1737C588D9CBBAD02F9782C7DB3439DD85BEAD21C70C 5628EA55B38F9D2BEFA897974E09C2413E9C51A2400BB2364D650BF71637E7E2 99DF9E4BC127FB7367DD9F74FEC16E339B19FB70A20A4A2E4874E110880294CA C90712CF08AD98C8532E3B730962F63C8F8D3DA209A0E23FA25DD02421B4D4B1 DFAF5D3548FE36B0A1637ADE5CCD1672FBD40A3D1CDBB9499B4C660A27F619AB C06F37FD8EBE08C838060031735E43E74F649456956B785270C84C96EFA7C5FE 2404D77480F5FEE892AF6534497C7AF401A5C9AD95B4B4D186076AB0A32315E4 E6D7185675405E6E483571A3CBA6EF76403567F282B2AA8FFE99D988D612DEBF 7ABD96797B6404CB5CD95D39464213DF90944C3ED33778F3EE4FCBB1A5F961E7 9714553A81472BFF2052561C22720C0C8493D1B2FE75019255AA8014F437FFBF 380BD498D02D7FA6904B4BC147C8D75C4863DCEAD5EA7E6FF41C609583BB7E99 03ECAE65264FD63E13191FBC5B26E034651B737000E6B894C373B58DF4002F04 E2F7ED898A9B029B671A19934263D92A0B8E3F7594FC90F62F937842E614689A 238062D2BFB7C44482AF7C1556760125086F34A76C83B27717F322D190D30308 EBD2A7BAC65B74105193942208DD78056DD569B2BA9FD4066A78DFB0316C1DDF C1B960A6AE6BFD9F7136870100916A9F8598C1647E1A9F86A26A83111433584C D0F4804BA5C3754AA9C93A9054C4591D38CC05AD1433EE5318458AEBD77ACA20 5B1FC97F62B5A90E3B75C7A15FBF4EA4B0A8D1134E117D38C82781A68A3EE04B 80DB2BE38196EFB1CFD47A5DC9874A15F21D156A23DAF2C7D31147D76599F8FD 4A575532AD29F7203964BE4C153AC914516D33A54F97B9BA83562DB89D40DBF3 4AA7BE547EEF84D1917B9620FCE9E5FC8771BA045C6BA72DC3CEA88BC85FCE2C BD04E17AE45A9D871930CC49F4F93447F43312888794162962428B915A6DF5EE 0758D1D24AEB9792A9AED3489EA635140874BA43FD7FCD56103FECC4F4306C09 8F06A031F5C639184AFB5C97A5ED69D6A974D6BA2144B4ADCE8F1285ECE7AA41 BE46EB5473C5E6327ED45E1BD5D2721856E2751E85112A44A04F54556B41DBBC 224A1C1C434FC53BFE371231544C64E64BEF27AC008BD468B51708C46ADA959D 68C73A16515F09230DEAA0408245960D54D12C1E3AA868E5DDD8ABCAC5363927 4C6EBFAE8F7B31C89BB7E1196C4C9FC9AF846006E838F7245B134766D83698D0 85E95121BFAF5669E54B918FB792E8F7EAD1FD1EFAEB2AC98A1144F4A2081500 2FE1E7CD3E1FFF00BD79CCEBC18EB0552EA5776E6A52E1AA30E3CA1FCBEF057D EFE38381A5E9A53B3ED386008C162188E393E81EEFCE3D59300CB1E5845150C9 35D129A662146D504FC1DC23DB26E958D628DD312A2682654356C3F3221269FA A8725F1D52B5CFD7ED9FCBD8F4D2CF53CD7FF2BF435E75732BD9868155B6A9FD 4511BEB18944423CAF5B2FE4EE6AB1CCE21927537FF3ACFE2D3344A471FEFB32 D3E944E0DF6115BA76E5FD1C6141FE96C397B59F7D3270A605727DCAF2BC0D4A AE8D84FDEA284931A6DD9AFF9CA3AF16D21187533B45F77515F6FA432FCF53C7 DCFE593148D2286D448A5922B774F0200EE756E982B3B4F8050D93E031488398 8BF46569A6B233A0B2AC6DF78385C9A649DE07BE3CCF13DF7DDFE5F163D523AE 46077B52147BC1C7BA80BA33607004F0B289CAB47DCADC7466F743973A546CEC 939AB3A938BB362C529C4F71232FB9341EFF9A7CDDFB740BEB573F009E19E9AB 79AFECE39A6D28F0A70937175399A045C2C1AB3DCA0ECB1F7167D07440F53910 B8123E6C1E5EF4F5A1FDDF00D1AADBBA2182D35624A8170D346E40B117781931 C79988553558F7696EFF44C0A4FBE8058D7A94F0E7C8C8B584E6790D59CDAEBA 5B634EBB57DEF241E9823194818E6DE24985F2AE341E878C9665827155CC918D 7C3CF4E508303382907BAE5DBFF39C75A49103AC5E604FF20C2649C30A70BC1A 63B54D38C541D76E7616B6132C94D9366ABECB27D33CEE252FD573BE533721BB 4311CB5557376E17EC4952692396BA291A5E593396441707B48037A84F515C13 C58D372418B8DA762B731A8B15BA74837F2A6A1A1446289B247E7A6F05081B32 E928FA2A972826D39C4A2CBB68274054BD284EC26411D07CE7BC2D06D64E2690 C724C07CD5BC7F2DE4859F83F548DC0CCA56B9FE4E1DDC62E4B943B9F395508F F98E980279D2E7C13DE18A22A76CFF59814F2FFCE93978552A0F4E01D78B3C01 B45A9CF8FDEB42A166A0E7678201526CF4773259EAED7B4099865DB5AB295C98 FCBB1521D8624B87EE1CAC6B9B460E76D4B4E4D0A4BD69CA06A02D9AE0DC14D5 55C47B7FA78A0BC299545C89FCD1A5449D45FAC62E38A42319DC318AC386563E 4CFA1E3E137ABEF3EA7D9DCBC7BCE914902EC7D7B1AE6C9E19E739EBF1BCBDB9 983829702832E22044F9A5B475718374F1A60FA48508D815F6810008C1299759 EC776C0E70ACE3F719FE1E9DD554CABCE3937F54F38D5CC3C1392070A07964F4 26B7CB30915F7586B31C04BAA3CA5EF956DA352C6A8A2A1356924727A8EB829A 48C9A8894D29C2C196C0B731B6724BBBD84FBB94AC9B9DC80C435C5387D625AB 6538076BECB3C21D19FAB3551075687E1C43CDD9BE49CC506D3423B5C2A6754D 87CA10D3686A4FCA91AE60466045A328F996EDDD3918E2F56C029D1992A2A1A2 78B2E95B99C822822F3630378ABECE2C2318010BDD2A492E112602BA2E092693 54DBFD0367AF9552B11E043BB544644B079ACEA1BA6123CAB40F9E7B2ABF6969 A8BFED3FA9C3CD76CE6DA595C63956DD27A87F256A7801330F603F21DC8195DE 04BE9EA43F308B2888F5EC1D51DD43C6B44363FD277DB689FA2FED1D4B587210 3F2B7305713987C9FB5B6992F23646F5AA9DFC71C0B3B411CBF369315255C1DC BE9357E76156A356902148517DC6EEE64AABAFBF106ECF4E55485756C801AD0E 81961033CFA0B2DE0B96B88B38DB562AC046F65F058682E139C0F882CD795096 9557336AC81FB537E37CDBBEC64975FF3BFA899236778283770D540257D3524F 8B5ABC38B9DD4A240502ED8AF2A7496295A793CA1D6CBA7C2C50E60880B73E96 84E0E5C85B07EDA8DD48A8249D6EE25273D3510333287C71DD0ED8032EE04848 0410C1E0785B071430F4053AEB3042D5B9C3E34E4B854D42EE5044DE5941DFE1 AB6DE585C02B5FEC52F0C565E6A5635C377AA57607723A9D246639CF06A2F4EC 90CEE93C2EA2C419F3AD9CAFEAA6B2ED3F2D4F9F6330FAC9972903786AC09B7B DD51932A1378BED9BD5434078442B9C13CF156FCB4060CF81F98D5EB8011DDBC 049806FAEC29F3841CF0BAD050713FF0CA75F4058F86C388E179710300A21312 72915D0C9DAE32B1D6C092A9E5990178E8A11C6A2B525E0D9E006C135D1BF185 FC7A58576F23CDE582A0512E54798B634B2E5A06F4A107D2685EC1578583515D 19230589279FB9BA66E6DFE827387C5FB1E491CE19739A4532C5CBE869174A29 F1E27164210F9D924B835E9CFD9356643C3DFEFDD21D733DEAADE25DDF15EF88 17A9360BB2281613734FF66126A90DB9AE008F6DAFAF9DCA23A882A38A0F478A E6465F8391002417637A87303A9168632C68A031EE4DEAB32D7E6FCA721FA484 3D01D2877B2CE55A8F3665388FD2791200FE69D692EE6C266DCD65014A9BB1E9 27C1F5E6857D5923F56D3AA916E50802FFBD561FB9894C1A75022818A6CD8EC7 06DA976DD2609CF7023B0D2258311F321E064D956CB8D55C1A4CEE12254DD6EC 68680A52FCD777EF99456BA60807741E0845C47E4F8A93E11F4CDBA611DC4B50 3B5F83C5475663090CF0450893E076132C6D25147C260D4D731A03C715BB80DF 727864AEA432A5C95E688313C1C62C95E154E00E5F00713D2B27E2F64F7200F2 C52B3C95376242DB2233B50B988214FD47A88F3C4F15001EBBF541BE75CDC0E0 D4087F5DCF70B0814207C43690D2D9A2AF382423515B7277E4D3A990D4CD0F25 9BDBB2350A8ECDE52D641B901E94E524E9FE6612037EB6EAD9C3A887B45F3B02 2F60C45F88E147512CD1D4A967AD6FFE126F3C4E92FE3117E38FB2A662D90B1E 12C80B32C9C547C7EB719063E25157F726885481D0B2EC9472A0108693BE337C 2D7EFFD1285B4F507316529357529D3245AE2D18A4DDAE37225D682D8D20574B 0DAA73817D1B70CD37B2501CFD087C0DBD704C544DEDFE282788DE15703E9D81 F5A1AE011E6DDAE53728D2FAF938EAB8ACAC0D07F32CE8E8C8E8C0262A76D9DE B533DA266E44B2A36DB0E19710EC9B9E99E9C1DB500D0D8A293EEC71628E9842 A8CA8C99F9CC5B6B26E4C96F7D840C84D827299489D0F9C7E952A91F78EDFFDB 83554679AD863C2C64DC49A33E74AA4F58DDEBC9807A92372E227EC0CACCA61C 629C34C083A21F278CBD8747BBD7D00AFC2BB546FEE02DE9892EF88FAC0EADD0 4EE10387D6386E77C462864180AC2F655ACA5903C751F060835DBC1F72AACF0B F4F48B83FC85E9A3EC662222907A796938C8CBB946801696FFD8630E897170A4 759BC269834173D8EBDC70CB16EC918CC68DBC61D8A53EC5F6F63732FD4D7EC6 234CFC1408CEE045CD2739C71BBD175368731CDF9CC19DB87B7B974FEE39BC9A 80948277A9676968840537A4DAA22EA9D970FC096ADB6172577DC54FD7B57BA8 7925FADBA77E5707C51B8EC45FE227B13966B45C39DCF0F315EB7A6149134803 E18FB6CB61F252E09A7720804C6941615CD2B01FC5F8B8E12D3DD1D4984D0E16 0E4E3342253C6CCF6EF407DF245C19FB550CAABF4A4F6B0E251D2EF04F18BFAB A10FFF86ED39BDDC366595AA6D4B1DABA39FBAD8620E7638FBF54E34A26487D6 2EA281D9D2251055C510A401023A14F3B97193C2B038FFD1C728AD75A186721D 23CE5865389B0E47DB6F3DCA265B878950B567895A10EDB5A6B3F3FCD30FAB63 C6D09D90D2FB1C05D8839D0B4EC950006F996447840C8DC888EA71794A23C27D D77453DD43121B9B78FE67913896A0B65033060072CBE1992DCA145C1C88A88B B516B239797B9B709045266E742BF9907803FD36953C9299BF788D3BF01E9134 9FEAE5F30EE1A8E7449093FDB9992D74493DAB0BA265D3974992F5D4ED79D6BF 99EAAA95DFC89ECB4799BAEFC10012A5610194CA9DDDCDB009BD6436BF30B1B4 401B2E4B6FC0EDF60FB188878A822073165F0E0399ACBC7E72770F960AC46061 F89852A0205A8A7813450A60A16014AD433C45388A3166C15D900597B37DB638 9DB6D76BFC3395CE83ABE084B5DF3E616D5E13CA29C7BC6C19737C4CFA04B514 7727C2383D4DC36CFF04142A1425D1A420DAD27EC6A779FE4FA9E8E44B0A71AA 2DB0DD4C5A4AD2EA39F0FCDBC0CFA81644CD6F86683FDB5D97E7FB3B4C5C9BF0 C3F0E49BB2031EFCC6770FF520FC24631DF7DB8D2B5A7E672F6352ED95C3EF41 80B53CB4780B779A2C870E935E1F774C2B83299A9FDD5447EE674A157B7B51A9 DB721193CA4545B4EF0D312DF015F1491AAF251B16872B689C2938053BD3843C 9E4B4DA7B1A9ED3DE85A2D848C5DD26F4B3D6CD96835915EE86169803C6ABA5D BC878F9502190EED465E574E5730EDCCA3B4D5FE7B1BFE3F5AF5FBB466475A0D E6D2724FB9C11AC63B3424F422DFFD3B72A168522CD943D7EF214A36B19F3C1F 8FCD50591ACD2E4525078561EA379982D47A010D6B7C325E8566BB370E6188F9 40F7934B2DCA11D58A5EA2A42FA79F8F5A69E4C8313E2ED201C6AA5E7FD5BA87 3F819A807799AC8084E2FAE69516236284A571A5A3CEB8CD0A73AB1D67EDE888 1A69184D68842D02BACC239C898DC171A8EA05B8D2811A865BFE2AFB428AB6FD 012B295903DE73A0D3A393E0D9D766FF470401C335AD8623A5EDB7B0F35332AF CAD6E222B741973EB894361A862317BE692CD4B855E4042F7228A83C14CA28DB 926EC8CC9BFFE3BF98AE8923E6B6BCB248663774FC2DA52C5FDD448A5B85BD76 6493998AE13C84B4D8C1CA3FF66982244E7197928E8CB91C71D60CCF1F6BFF74 1FBE8FC9E0285ED3AB5610393B7D11301D8945C71B3AD01F1E7F97E9BB9D8737 C4D113FF9B84E8D84CF3D04C01AD7E9F586FCF5B20FC9662A5D6440478134FAC BC580FF2FDBCF7A494AD744A9289B8358D2A14F6DC4ADC0A343D857D2EDB65F3 4D97B49CC92601B90D63C5650F895A2485A18617B7BC02EA2A9FF1E0D777F393 D7A6DD6AE36E73BFCB74560E398583E0B716650B24FF5F54AA73346A01D76967 97E8E1C8B6DB6B4BCB511EFF3237A40960F3EE230EA142EAED3F73CD0B13F23D A1D51F490DB90D37ECCEE52B9EC135E26F36E509535752FF6F9135A1DAC1AC81 3701EE34956ED7BAD6C8CF1D70B9CAEE2644F94B10935F9DD1B03C5D356AC0AD 0B6F327DA139D31FF65498675D193540EAEFC3FB8A119ADC74536C152DA82D2C 0B523263DDC88E048ACC64DB32B259989488476CB0D351243A09A2BA6697D0B0 6C8D52A51C0F631E9EEFEF3A2042A2EEBE5046FB670C75B4157F7B5AB507FD34 6F52BCBA13FCDF4C923DDF9908ABBB26521FE2A7F9A0BAEB7EF7E82830E596BD 6CB249A0F61C0FAAECEEBCF556846411E352F468F7F6B404B3BD3B92712D362C 4A84545661FEE4B5FA52A7A7C461B9F7ACC3E8321B30068F609DA42857078152 1A00EC0B51CDC27C8B505B00E49BD1439EF1C861173182EA5BC4CBEE7CF73255 57E6AD9AEE58B43D54F6E22DB3B8F5F9D58EEB756B672547B521CB7D82E78B26 32C27B3F93E5122482F87852C2F357E666AEEDDC369BB5DEA3E02EF8CC69DC4E 31F677ADE63DE168D6A500055E06FF746F5FE59864319FB3E49DE62F5E2D7005 596F22D88796164AD412D3B254E8D5F7E7CAE3EF1D35D67733BA291BADDE92CF 70BADEBB6169228447DB4A99473D865A7E105DC43421491AB8563C62C215EBF1 564E27BB8C008B2617DB934E0665D7208C441321AB5EFE9FF1743C357A9C2E5C 4AF4039F16367C6B9837A08924300E6ABD2AB033C146DE6B2821DD9172E5D7F1 53785578BB227092E8ED1BBB8E0CB70C2E23E640AF20828C09FDC2421ADA6DC8 2D117F0E3DF208E70F00C9C410E8F77FB1221D1C07F6C25C1930D0F2DC601025 EE0B877941CC9F82621D4712CB9DE0BAFFCCA38DB1CE1896D6A5FB876CE944CE 97A297BF3468B264B32B7C8BDF5777F197F64EE9BD2C6676BA50752CFB9F5051 3C14D6D0658F7D4841B9F3C47B9522E1696F32838ADB3E877FDF5339F6721A8C 7F39D070D9912AAE0A69B6E1E27F4727513D78AD9F1128079E3100D0B559B179 FBF88885A0681A7847F26D70D8F7A3286E4958DD615CED53147A5A50D06D55F6 45808222273C6F6A972D49873290654057517F1E067197C5A863324BAE696A25 F250DC419B5428EA0655E118F77B1545494C94EFA32D34434C0916BD6C62F9C1 2506EC7CEE3456B012DEF7C87D19DCD3F197047F3C57B2391A238839884A3F19 CC0B1814255F4DD8977E61513F7FADF4BB98315C72F84B4792243022B827DDA7 FEF9E1434C631FBBD0CE34CCCF4CFC655D0F9BF1E22B91FA21D95C6AD6B0C098 E987D92C862954B2CFD8E8CC0132432A40ADC155F8A0F97FC03B38B9738B4317 CBDBB8E7B4BB929F6D39338AA69A5A11BE27316BE370800C82706772CE33E367 29A80B24D41F520D993098C4B04F0F62F9C74679BC076706F0969545AD65D6B0 44900379A36E940359B6BCDD0F3F5FB0A8F30BD5456EED4DF5CE72F7A7B93858 14BE51729E4F8AA97DD6D134279E88C3EF28D61D7937837DF831BC8A314F2D3C 1353E96806AE841A57EFAD644C8D884758880415F91E7683A88CA150493EC28D 6C7272E3465DFC48645B2F722ABFC1943CEA4B5ABCF8D76C3D032F1B3264E7E5 06690EFDEBE83EBF967085035A199297BBF94EB3D884AD4C0DFB476B85E6BFBF F69BCB9E57ED6753285C36AB62CB8C98E676D4D23C44416DFDA957CB93EF7E78 8379C6328FD6711EB9B45D10681B56591EA22DB43DDEAFA65FFCFDA65075C6F1 FF96A492130ECBCF265425FABDE849C62767F6B36895CCB19CF177B8BA4C7163 D9DF847A42072F60B3911D8DA23A30D63C7FEE986F939CB35F7C47298D6596F8 9BD7354FC35915C0CA8CF2A60F2DE21F355C74E605DBECE35A70FA12BDD3D915 729B3D75FC8CEB2BF67DAC531BFD24A2E975375F85D7AC7CACCFBC62FE51F11F F877377CAA80F8FD8DEB1B1FA7C1ABC73B88D4ADEF4D045708657864418FB434 7DAEE52F2E2AD61680B4E5E229C12EEAFCEF8184B3B03D16BCCFF6E0EACDE3D8 CDC8D9185DC2672784EABC5E55C8F45AE77BD18C9FDC3189D24E3C93CA20A916 1750AFEEB67F95016FCEE6BF60016FE2097AB01CA18B0EE0CEB254976858635D 13D51A80F202A59A66B54E81972AB98BF9BC188EB653F43FD0EE5E7740487B5A 6102C31D939943905FCCB91C95F54E69CEBB4F4A66027B2D03AE23F09D91B676 4EAF654BBCB61F084EB153BFB0839D882ECDA35D1AC2C1863A3C5F0523FFB7A1 A707C2D48E8B2F421A192E898960D888212D488816628740CD9F9FB6EE1DC21B 82725168913244FE38347B234317F127026147CDB4BBF8BA9274C987193DBA07 0DE6596DE26FAB1618D77E552AC34F71D0B77AD262314963C69EC171C1EA0706 905BD2BAE70C9806CC263DC44FEFD2E7742538B2C62D782D6FE9AFB6464BD9F7 7C537D1CB46E93F998D0AC153BFF65D71F72DD0FBC30E427C94BEA08A51FEDD0 E9BC9C656715B761EED9E0DF6F1430BBC2F5FD6F2D5A31FEA89F7D3B8ACB3524 56D36998729CB9EB6C464A709387869BB5D9062A5798B9C3F6906CA8E9C1A53C BAB4CFB6D6CBAFB766754CA2D15E927872427EDD9E73BD16C3BF4DCC479B7550 1623FB8E04B11986EF4A3916248BA3328BBC2DF30E994B20ACD597FF14B91032 274884EFFF7E94BDE8963D41E9CE9F192C84AA7B2FD2F6242B9828F54759ADBA 352CECEE86152B06D785DF2781CB339BB1B1571FB31D18C3CC831B15736FB91B 3C95834BF98DC3B42C9D32804F0E1B0418C30E944E103B1B381FA9B54CC41994 78B4BFFE0445D1499C19B4577513B2324B7A3A752047C36449C2EAB3506DD87A A5A7FAE639C0A70E71A32DB71FF4D8C741A8FCA4A26C886DBB89AB5ED74F7B53 025F00F3E5832CAD54696CEA99BF7D37950143F74A1A31B139374778438D0DCB 75D125317E14B837147FAE2B7DC6BBDE62AEA6D74C7D8B2EACDEFFB5A61763E8 5CD01EAB644B4FE0CE573B681C201BE621EF353ACB26BBC14DB249CFB079F488 1ADF1C4E19CF04159792E40A5E63EB9DCFECFF901DE04D02604C195C315AC187 34DB4F6C850E9BD424D3971CC3091A41D5B8F5020B3C79E72B99A1CAE66C959F 55E4C6C1C1C34DCEB68E8806967C638D01E8103A6E886609E5276FC013ADB053 AE2806AFD0E6CDAFF0D97E75AFF72A027F2817FEB32964ACD45FEA9534996A50 53ABD80249F5890C69BA0D650BB7F0AEC076CC809EDA4BCD8265F334DB581361 329C2530144ED7073D99EE1959AB477C6149B3A6547F024AF983BE69BDB9BF4D 827728F2423F648185B1FC0AC9C7ACC727AD43FDB6B0D433C8172EB74B8B8AB1 8C0C2C0357458E197A842358705883EC22E7162967172C0519820D5994DF9D7F D50B52AAE696F603985E3504742D31C0B69D77552E9396F18C71DEDA17BFFE67 E1415DD4BD373819A33CBE990992973DA11CEFBE7B81DC910273B315B82B8861 63B2E66BFC29A213D5526427B723B4856DFCF3559FD701F77857812B0C6C0FDC 4AFFAC54B1CDF29E882BC2E2E9BA0319BB084DA04A82539AEABE7FB793B7AB28 E755B8B1CB2F0EA0329B29816B127EEAB2E16B99B9FB1BCDC5ED2A5322F3A271 99A1981B3212711FE1DCB32D0638EF932D00B3C04F896BF7DC7F67EF8F3DB82B 0536D186F24BF7ED544AE148F24F6CD5D81059F55AB8E24128F755991F89CBFE 75DB53CAD6129E392EDF60FAB2C90396568683A0C996C46358975676C6A8E3CE 131C90FA98570DB4E576B4F669CDE352F19DF7652C97F2357C4C8F0716E5C290 1354DBE5105A874C105F541DBFD7E6A63B1231BDB998EDC392678D1EF93183FB 0815568798BDF68665F37205546A6528225B3B91B3A80C0F433C8888B45BFF9E A972D7C29B2647DF29806C4113613512C117061E7DE70F763D097A7CF236F371 4BB3BFDE60B73EC884BDAD2E7864F24BED01210DA9F229F7A87D3CC0B3AEF75D D8B763EF2B7591B8D2CC201A635C82B771BFDB42FA533E321B587735AECDB3DB 071FAEBC9ECB06F06A0EB364ED723D12EB6E7BB479AB013624ABD11060CFFFF3 5FE5CC50E86F9224466913EC8167158FDFD81438BC1522685CDE8A038F0C8A35 8AA1FA8E38ACEB99E18B55075D594DF39FF874DE7E7E6C95C677F35B2DF0F203 B78369144DD99484A35F26414874463458FE0F6D2C63481260398F5FD319DED2 19C9DE91CE63155DF12CE842E67B8DF8E61149FC4563C4ADC280E564505F0F80 2B6CD6BCDEC7AC194C372BE1A4FBB457739A8AFC4A7727E37E2D3E5AA30E7461 FD43AA99CF8EC08CF47CD67B820899D75935C6DFD775619CA2D52E4FE3A5B0E5 3D1231BC641544611EB461A1991FC02E040C574272D428419F6D0AEF4285DD7E 4731CBF498243B66ED76F66CE3F33DC996BD10334741D351DE2294D268EF045E CB360B89A5E9690FF21C91E396E686C67B5570A1FE2182A5E78DA735C70162F8 E978C1E449853FA9B6494F2C38F5FF2A27F8E9DA96EFC069145C844402B0223C CAC1AAF9E74C8576E524A2E5F072DA0297AF5AE4F1B0F1E3BF24989DD836C057 D18E755B8296E8402CEDD8F34A258ACC0D34D341ECA9889F4B2A06FB778D591B 157DDC8D7F54A289F918E980C367E46575F05CB8C847000C6CFCC939867C78AF 8A0980B0352250C063F3960D06E88A86694879A6DB159C2C5CF831ABD393A174 C9BAB470B7EF87F10A5C3EBA5716279D525D51323BA98E262B1EAEC96A61163A 44F84EEBD3CDE74822FC6ED53FA7C30A4167B1BF8BB9D3347665A33DCA967641 E4739C8A7ADC90369E7C236D812BD03144A282176D5E906B55D1274AD6B5ED2D CBC01CAC7B92D8D919D25D80F0E0CD744B33F303C43E0D9F1F0E778056C43E1B 5A300D823B0070C69DDC9CEF534DA19FFEA924A6D20D50D3CEAB46949288EA59 8428450CE0960400BA1EF843C4D538C6A2087D3E1DB7AD847898602ED66F9366 3F8E07233BE8331D36C159E8602B8193A5534030BEB136E24B24886D063694C6 4A86C6F0B74CBAD19B83C2637AE35A07221F79860B87754A8042CB7489B0648F 50BD0B93ABE34188C91AE0846406F063DE6FC2FF17D3E39B758A9182F258E2F2 8FAD163152FFDBBC23B122523A2BC4421B025B0D8E876F80F12977AD02F2C393 F8DBA9B7DE3D98B21C2FD1BFC42AFB3A6B0C303E94EDEE21B704737CA349ED48 8332A075AB14489FBA412E4950BAC4F79BA0DC7EB6AFD1D43311E04F7047C851 02612F1BDF9549A1C5A4E096C7946749A9E6FD356FAEEEE03C196042B6689913 2912AF6EAE06BDA5E9F7A85CC503E22008CDFDB0F51DAB9C7821BDB79D1E7477 16E244E95AAA34AD1B2084506F7C22CE2EC64C2EA5E2E2424E265173B01CAC83 5A14B1FA3CA554535FB71CFD640E6F04917771589AFD81CDF19B80F2338A462C A7931133B7609357EBBCD05DC82B6909139C5D9ECC63511CC7FF28601260C7E9 B3253E2B8655135DF5AC5EA5F037233C61495895D1499C5A00B13A90B8B3A886 42F3F12F7A902F5520AE4F8E5AD9380EB5063BB93D98476969FA47F2BF6EB1A3 94D15CB620277C1D586661CE897F3526DC5B52C447FAEB44FD3377DCD023293C CD7A75809CE202165BBDD0311E1E793B9E44C747FBCF9AB319C9F3BCA0F65881 D85A2549005C27CD2A477C5DEBE1BCA541DFD153BD6357215CB195A53CB1AA0A 636FA25E28420EDCB036BDC3AE3D522E912C00EA6061E8EFC7176DB1D106BCC9 F7420AA98E67899D2AB3B63A14B966D06BB785067DE6EDFAEA7567367DF1B9AB 24C2194360006894B979EC31B09E92440945036AFB89155DA483FD44C1F9515B 4B576CD51A079C22C668B72EA35E21930B701E7AEC08100BFCE2891AEC0CAFD4 A71401645287CE15CE5C4A94409B207D1A8B13DC9D1CE2CF6E09696E7793BC1D 8766A4FEFD11FB4A3B13B32A5E994D010370A0890D85A500FAB60F60D8EC607D CD3B7657B32A4B99C89BCDB0162BDAEE9CCEF0B52C54C8EB5CF320DCD9803405 10B060667538413E9BB43F15C72510A68AB688C9512FE05E87AF5CD4C2717FBF F0B5E605CE4360D89C7BA422C2A867710CF0668BB684E83FCD47888C92216068 B03655C718AB989492A6D432275B1F64005849A85ED0D167C121134A59996BB3 8029B44938C401192B96DFECFC6C7EA90EEC009AE79F2D94926581B2073B81F1 E995224D452AA32115134F7C8B0AFCBAFAD316F2DED91212E5E2715A9A0F59BA 787C811A7CE37859B9BFD4B6648010C449AB624401ABBAD5D22623A05B127FD5 F6C3FDE7966A3AFEB0BB98B38E8DAA05643EF7A9242F48837F2552AA6E449594 9BE7E93EAA719FEB29077A5B86C14B5F47B1B86D9F1EE50A9BEF6F6FB2DCC4C7 D3EDA4FA1744310A2C5BD39E8EFF9831D2E91698BCE0D2E9769525F934D7F08A FB4DF1732A46D4CD48BF73322E25BDDA632CBCD9F0571779CA52A60775ECAAF0 04A6ED054E9527CC85F67D2C480D6BA074A3D73D5386C7D3B06AFA386C931512 AA015585BFE18F6B5B79140570B655295A0C56F6D3FFB790185D4F1A10F0AD18 C143DE30A7FAAF80239CAFA2DF1CEB743341B05E8FE1D90FE3C0F75398B6FB76 28FDF55AF051AAD341AF59A6FDAE8B1BC878A52E5FC2B504D4C113979D7E7524 F44C86A5C12F5546024D792A0E4FF98AC19EC3850D88DBE34B4C2BBBBDD77E62 67219B59243B4DDDBB88AB7AFEEE234F08DCA63F51508BEB43BDC3B00A3A6F9A B4EB5EBB12D928D2E1901A0D9799F82676F6E158A6E521D11EADC606176809CB 82687208E6F491C6B92901015A67A67508A68FD8F910A41FCE333AC61A17F772 13FBB7DDCA5C17263946D38738E019B016BBC294F89083A2E8AA6A9433272CEA 42C8A243DF05FE3AB837F0793AE36FB9B1378B7DF1D50CB48DAE3F9CECEFEE6B 7E372802B2A19C7C1BBB14D3B061C5DC6FB29EAAC558386C58D87E1CBBA07AE8 B66DE0AC1AAD4D714C00B528E0A10D54AD7D99A3F5459BCBD196C0A86DA69508 C4C780D2000407BCF22ECA07C1FA37DA0E05CD0D1A78AA64AA9F4682F2F2F05F 0D219E2D4A1B55D836B36397586C46E54F7E7B56B969EEF401B7BA9AB3B71491 0B33E2694C3B10AE3702DFA3EBA9A42888E2FA495B521FB5B860EBECD878EE73 720ACF8DB674DB5C4A3418E5C4B1B93E8BD5FD6FCB334BF3C93D6825201A02F8 A8BD1F64CEF4D6E8BC96948226D8E0C34A7C65978BC66563B39BB41098EA4DBD DA6D7CB34A411B9A789775C2559A9F90B7F643551156FDA8B8C3B368E666A546 0D9458F1BF0649BBAFCB8A2B0B35633A873D5F9B0E55A1A1EBA070DB4636B725 BAD1250138E0A08B59DDC3BAC64DBA14313B8937275F8E8A506F6D6EA691FA5A D37453B2619C027CC5E6DEDF6C6EB248F182A7349A21CE744152BED4F91508AF AEC8563F1894734EC9BEEE05A1CA429BA1A134CFB7D7D533595CEBEA887EFE8E 8D41BB1711FD033A6D6707CDCD2F1F3D02DDAAB98311AD5BA5DA9EDF971FBDD4 BB4EF7EB3641CDEF6CC694948ADB8D94D39106C7D4E8E788627991A6AE33D7DA 81FF3259C745D3C3F53FF8CC0FDE715D61801FE115F534FF3FB04CF5324979D7 2AE393F01B9B84992F16390825059AE1560CA637AE72CA56D3CA686CE9514E1F CE1859CFCEABB3DF9FBD8F0E3A1E8B1ECF291081A63A86128BDF2DB251287810 DEE008FD4F5ED49D0BAB3E7638B975CF6C8528B9B8BBF490F9632F83A060AF42 1469997731E304C44B80503B391B9632C15D209556CD5FB94EC7CF4C98B51C7F 284ABF771FB70ED5F1CCBF4AA789AA9CF8C9EAF42F9C9725D87820C10282679C DA104A08E1AE5F01DD4399211C62C5F3370C9D159923447D15C2056A0F840203 62903BE8B5B1994C9D7C6052077E5446D54444628AE19229209F815677ECC5D6 45E6E1CDC2FF1AC81EFB1D73ABAEEFE54E185E3A817C0506CD754393CAA3D30A B2F401490D83B72BD07B4BF1D1ACE8AE0AF145A3CEA0E05439EA8EDE1C4597AE B5E866BFC94E30C9E8D8884DC900862E23767B9F8781F5623B4F5F74592F11E2 DD253253D176019798665BE833997D2ED432380DDB144EAB37C7756C6F729B0B D13D8D02951BF2C016DA02873E4B589EDA8021397BDE47000E0BBDD2AD8D5160 C7E9F69831FAEF84C27C7342C8CE4092278F767ABD3C7220870D40EF9AC505AC FB5F3E1BD3F0905F71AE8751C4E6BE02B392874356C7F25B37B16D7E8848A9C5 08FDC51948C71D3031BA695B44891D7C56F5A06113C1DF9E7A5B2306053AB76C 18B3BFED61C8E196494FCB0408DCA9389D6DE9611CB19B793D286011E9AD6E78 CFD74396029C4ABF7075143A71D14EF93B2053A0E8C8789E176D500DA7945DD4 B7F805169681F4033DA8A2941F8BAB7E4A1A0971E017FECCD8738DA3186B0DB8 8C63476272C63364DF6C3CA5D9847A6D81736F0BE388AF95A7F9B5663F55E3DF 1C740E4358B349DE17A63CA2282B03065A66D9FE3D6BDCEF932193E5F2E2D150 47984A57B31A7AEB54A101DF328A74040317529842B4A5A20E3448077C331626 9A5EA78E5EBFB81778BD4C9B392186E3C811EE82CFDD6A57E050DA15478791A9 65CAAEE28B55362594BB58EDC4D01FD54CA7EC5C4D2A3FBC6F399D5F35EC2256 EA0B1472A99F3349DD62F3931F193C322608E6452472E00EC22BC13E2E17949F 9F00E979D5D5E38CE6C6EB9CFD7B05E724CB49EFCBB211953A36EBB3A3E18498 8CC2B96F8FDE18C678282C0A707ACF03CC41F735E5A4173B45A9312944D69B2D 4D448C4914D987DE531C6D3EADE9C94F9E6F978AF50F6C25CF8586185FB7CAA8 5C428C606709C5FA5ED63CE6C0456664A552BD6B6AC8A321A97807279CCDD27A EA484CFEAE6FC10413A373A9E041D3CC05B48BDDE5DC89F1B9D140F95C9370F7 1126CAF6256DDC8081BB304F294398A5B5994800684B097444BB35D4D293E782 F61C8EA1AB2886CB6911B260127D8A2D116C3AB62F07920E37E0405F516F47D4 C4E865E9606301B86A9013E5244E1C145D515251089F62C780C17B1C2A605DA6 4E8F113081631041C38512469AAFFBA750A16A4921C2B809CAFD80F17DEE5BBC 6A00C67E59A4C3B1C34DA41EF7D4CC836CBA67ACD86822FBCD160ADC54D10A5C CD5A1C1D01AABBB900776AFF0BE76CCC484037C34D348A7BE0B15109BB114DD6 F0EACCA18800AEA8692D875F761C574B90F586ECB60183D3DD81C3B1C0EF1822 3FA0688E244FAD05F5AA4490DC6E0F515E174DFC2F26821E9C4B189830EE8D14 56BD9EE6BE690E62E2688D180B231704148F643873BAEF2466099D01E98D0A22 8CAD70DF0140C21585651CF257F62248FE2418DE3087907355F88886BE1DAD3F 043C30DF1CAA28F327A71B8EDFB5470F64298B899596DD2236B23058E3339E8B 82A8B27BD3ED46D1B5F2CBC333B4AB6C8314B26320134D8B8479F2824DD9AF44 D5F10F431F64B832D1881F59E8832C8935765E9C1ED9768EB864E3847F4F4928 71D2CBB138BCA7085D5E619C17BD6513F53293A9F419A74077EE0F97BDFFE479 CD960D5603C2CF26A3B4B3A6372F954041FEB600A528FEC76BF86420CB8FE902 C978E8D7A3D317683FAA98F299611F900FC0C38E267B9D2295AB317A0C65CDEE 214DE4298121B7385D9AC35D23ED48BC980D8BDF0ED1B3DF469E74B2FEB07B5C F26F8C6A61D4B1EF1F95EC93F618CACF0674C625BD9E960299A92E12BA082080 7DDB8D06817185AE7FB28174B530DD2EE84660606AABF27A171C33BD15173A09 69DDAAAE380C89FBB4FDDF271D3FB5CD0A2D62A1F1BF8EEF00A9FE22FDEA08B5 32E6995008D17A9B885BFCBB80E9AE1E3A4E75A8820AE2A7845D366F29CAE72A 9D41A40B32DB7F477E218C646A28FFDA6E58EA290AF7E19DCB764FFFFF8248E5 179AED3D8F1B91480B3729C79B3C96B3AEF105E11E370AC65F47F58917FC5EEF 68C5F518D1079ED2182CA6B149F76312133A4BAABC1E1862CBAE7AF59AADF2C8 FE748103948695737AD7BEBC52DF8C4BEE11C346D0E9B07338A1E82B86B8AF42 88A49CA23BA88579F911319AA8B7DEA4CCA6387BA33B217D02D121FD38FBD51B C100B95B21D41606B40B9A11CC731F10A8F4B86C572FD9AADCAB4CAF8F27353A C05EE5A9F372B1FD74B71522A6F9248F838630A8DE2429CFC5B34161E83B0B38 9713AFB911C246E5ECC6AB86CFC463B46D0358841EC85787E055ED7C5513B0E7 960D05F0BDCD5DEF56CDB808B755396E2F16F43B6D58BD13DB0A6B9FCA646521 5B114C3DE7253500A6D89A0DAC7F9EBD1E14D7EEBF8EAC1ADC5EA574781EC870 7C820F1ACBA1986CC55F78DB10F9F76E9392FC9265F3B370988CC56BAA379B46 E5DBF4FC5C1A5EBFC1DEE04AD79977B8B9213DB98649B6F9AC0F99F53A449CA9 FA33BED4F5EDE8D1B53EEDCACB0A883976C98DD719BE5C2A0A948535BE0B324D 4CD123FD9E346FB8E5C5AB593049CD5330D34DEB46C4AD0D21BF6E5D715B8A62 40E0BDA591D2727E4245B29089FCE0A2238B7AB0798FED91B6F8CDD6C2FCA085 3993743912D66BC8049C30643F9362D510575CE4926D53858A1BD2B8309CA46F F93B3941D0822B182AE4DCDAAEF090AB4DCDBF403E4BED69B62ED62530AC3A6C EDCCE216FFD057C8A388145720BED9D31A89D149E9A26AA4DDFE8EE93924FEB7 97A0DCDEFC84F9266A86D2B88495F4A9B1D33248BB0861BC4D38825D1EE3C930 11077737AC6E307B12ECEE27F82B554F40053CA24D2520DDAC7F547407A77196 41E85341D1D1C10411003E66708BC4FF4F31AF6E689321788C59D63DF263FE23 71FF6C27BA99A5D9C16E08CECE622CDB8517D14644BD03A5E7DFA8DF8AED725B F6AB8971EC1AD359AA0290B31A2DC818DD2BF80EDB07EB81F7787965ACBDEEFC 05337DFFABD0786D1C71B192B04618A00E90E0BB3BB704D1AA86E1FE5AE09B9B 256B82ABFCE181CC45745A0B2E51B1B780A91FB2387EFF75ACDAA8AC13B1F44B 81AB96DF1D9CF587DC8B9F926D02F81C8BABA56DFC79E25883453E84E22CADAA ADB64593275CCFFF770B53ED4F4F1B0A76DF0D5AD96FEA25AC42B8C350061A2D 1C97513C9F7F921ED913F321CFF95EF57FA1E19A9D3F3C927568888E1E7DFAA2 D12525815F2C65B72737B4AD9BD64F922526C3527693B552ADFA10C281F99A79 26513709301215BEEA51BAB631ADD6DB698BD96006913FBE8AAF394A051ABA45 D4C7F093DAC9707CF64509D64A39EFA0207910A575932F928CE105E6A2745088 4D23F6EBEBDD583037106433728693D9D24462F3E75DAB68059ABCB05B2B5633 D46ECEB9E1A9CD67317F5D1197DED31050A102F739792CE307D6928681542F39 954589A5187E9FF713B1D0A3E5515C5C0F935B7921E4B37E12F0638352EA1447 7C5BB21D4CB3181B1C056A3B4D98396DF351BA384FF61A170C1FABB51B025E1A 206FB57FCA26D929BB232A9CC3249C1A0400FC039D3EBB543812C5918D6219D0 882DD96CFA770A03BE1D0494C090D5F5EECEB305435FFD740824EB85E59CCCB4 AA411710DC67EA2489430D8C08423F00C499323ED1BAA4EB1B5089424F898D86 BDF5CE56C028B107B8972433EDA77EE397A193B1793BE61F8DCC0273A0FCED9F 8A98FE8D1A49469C3A4ADEF38888A1199DBAB63DE30E56B82E55C6B31D70FB4C 5F9514DF02B648CD3FD6860E426DB1D853910F1F96EA328759229347ABF6C503 A7B6A63D729001711890C1AC5997F2F352F3130C760F49D0510DEC22B51A7FB9 F2A7EC4939171B82F24440AA058C5522681A0A97BDE06B15B88DB1F1246A095A E89230E74BB7B404806FD2FE9F698C167954184129B40CFCD711D69D7C1B4F8A 7D2A8D496A7EA0FDA901AD9D79D067614D868290F804649280671903D1085A1C E2E3C0ECEC635D975D66CDC5312568AC5C85F87804BE7E60EF787F5B97DB71C9 4DB5F1AB7069B1B411319D3D70E1554D56120E2E5C9D474DAA7C93D5371A9DF6 10A823F3105FF629CB8A2D564545638B9203283F6D70E4CD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB5ADED89056FBDA355CE0DE5DDF2A52DB851879E39085EE9D44EF757 9B4BEE1ACDB865002ED4C5A98683AC13D9E1F818EE88E0A0408E13888A023B87 31F35E750C4DE7EE68DFCC0211A2860C0988F6E682EF84373DB982BA28162A69 64E9CFC6ACE0A25114F95EB7FAA7E99A68533FC4888AE57C5C104B219CFCB938 DA518553B57BB2D9E462A5A68F1E8E0044F1FBC52560D53A6C2EB0393AF5CBB1 55D81F9DC2C643F2E2DD0129C306FA3A787149550BF32119399076BC885D150C B3584CB2DD79AA0B27FF0D59D7CBC477D5A29F789E37CF19F32D9D3F6914961E AADE5423667209A686D8BB6F2293659E91D09CFE321C53B34D830CF72F00D3E5 FCD3B6479BD4C862429A52E964B3BF8B81906F32517E927023C2AB14AAE1BC5B 6B0B906F420772505D76FFF558C9D3BC3E980A1FCC61E9AF4B9A9843EC4787D7 C41C6DEC165A5299444976F34F301F2950FAF95C529BF7A74514AF883C50B4AB C21227588FF0A57D1CCD8A91EED659F63BCE43D5ADD1F3CEDD661CA2B68654B7 01E17109377F92C75135E060CD805F98FF47DE13FEB6C7FEAC15DBF630016448 6C7F12BBDDF1C248C3B8FCDB8DF5F93357AF164A7114606087697E5021AFED3C 0F775E02982C4599496B71E4B6F3271396CB9B581F70DCBB0435F111D2216D73 0C78C0A5C2AA5D2A40758BC181BAEAF2641B439D4FA6EB46D03338BD95820ED2 D57CB7AEE41EEDD77FA59FFD1DD7B805B567A1164AE77D8DB5F49E8779938D9C 875AABA87925BBA4B374E59AE9780D231EC4D1B192E7CCFC31D87F5378200532 F64EFA6055C148898D5E67ACE7363D8AC3CA2050EE8C47DD1EE29FDB882A31B5 E8116DCBA78D5B9329DF559EE4F7855222AA01E676A7CEE978D9881121BBB96E DEA72B73FDB70E170B93BE01C4159319F4FAE38ACA41966CCF60A8F9424C098E 69210A0ADB89D2CECD169D5448BB34DEE20D9905BAE45DE37F41259185F8B175 B8EB2AAC102E05940B494BCB1F3B79458F0086AF241B063D7EDDE676BEA3055D E3D18A35A848A22F9B4B79DEBAF97466F8158D8E782331B673D4FF9C12177DD0 CD62BCF177DDD0F950A8652AEF529AEE43BD52DD513F8D6585B85F4896B45B58 6F0FC7FFD12BAE6B0E477C9D6510F6E87E3B4D75C9DED5592CE95B6E8ED406AD D71F59197A116377319BA68A214FF237B591757AE362289F2782350C12666847 91F72F0A88E56827097522C55B3F44D76ED3EAB90B7ED0ECC3FEF34DC3C0D391 6E06E03715926E3AA986E3C5DC076EF9CC0F5B71FFD3F02ED339B1CAFBCB04B3 D7B17B617003BE14730CA3341A003EFBCDC8A176BF4467440389BFDB7D331823 CB278DBE285E6732477E017A2A9B1AEC5C113A491EEC6141D7B9C435091FAC4B 6C393AC995DC79F0046B3CB03CC01F714A30BFA08052C0BC7C888B1E615AF648 256AB8F551EFB544240131B54C3415265C6716F9E852DC4973525332CD5B181B A4DE4E041BFCD79E978E572C2A53A7395F23977E60B61057111B47AD35A580A8 769AF52AA9067CBE946298D77FACCF06BCEF0514943EE8AABD1C54B9378F0BDC CFE0D81EB1BF9D0082FBF97648C763009B41E8610D6904DBDD4F1C5D82E6A663 2F6F7C4F99B83C0A327A90E16092E7963848B243A7E718E078A209B1A830D978 73588ACBD3E1F872900D4C3879524F139FFCA71066C96424771C19E5FFA0285A D0E051214F11F4D7557C8B376B7E6DABD206AE08307F20F12755B39306B35011 E5EEF050AF9118DCE00ACA6B266E66C0C63D579D7D90134D82268773D570B7CC 5E4C183ABB09646D3B9E70D06E2CDCB9EA0B108A6DA4E3AEC5733CCC0A14EB34 1D39DC8EF3308FF55CCF1F736B2DCBCC90207D6D484216A28C5BC32775C91D2E 78A63A01BB22EC15E69860AF1EBA0D74EA154F044CA403E210291D18489EB661 40786D375568D52BE04A49C51F2E294329192552E084BE826B25EC6A254D891F 6C34A8B08ADD1BFB2FEE17B28CEA54E4FD352E2A01C649D05BA5E72722D42F5F A2C90C27FECEA6E5C21B0DF46E6571358C04287147DB535DC397A958A90F9A64 6A60053642B8607ABC3EBD65B1A46F4B22017F945D059975D7A2A465E13651D1 96D111DCA6B3AEFD4F3B5C0B51E968F9C6E1C365A390850BBEE64AF381E7929C 9EE72908432B77B9D58B0DEADA36802520B699766400B2B04AC92014D99C669F FFC0E2127416F71925E7579213FA266F9803C197F2F0722B37C78C03A505C76A D86B400C039466E4D2E2DC5CEE614932A0B8600811EE809E21446D12A4A30D8D 32C6AB1BDD383C05897CB4A08F719102D38ECD71359273F623865600455A040E EBE2FE4D6D031A0F96FBD7CD0EDF88C6D092755EE07DBDD793FFF279D1C5BFC5 4DB4D3E4BFA1A8850A608BD6F635A7AD717C45407607FEF9E14576EAFFCB5EFB 2B8C1B12CB88CD3D70FDD0458443046F85CE4DAA12FA4BAF6FB1673A1D3C48CF 2F891D1BF832037885457B4E46A2D2418AEE1B46C30EE4E524723B7842C9DFD2 60A72B6AA65B88031BD577A546CB320EF9E2B980DB8E85BA6652FD2BF20BB637 2753016E7800E540154727C01E6ADEB5422B91D5C20F9E8B2B2AB9109EF13F05 15DA2ED05ACAF566A51BED58221EB434CBB6EC3CC34C083DCFA54694A1E9FD7D 2FA520B3DA37095B92844CCB2958E86484759AF1657B5B6966E70E21F720B0DB 51F4C3D14EF63A60A5383CD166AC41860949F52A9EDEEBE352C64DE286D9FA70 7030FA4357196B56E8FF52E2264DD8DB2AC5057E448DAB1B828DAA153393C805 A57328D0583339DD7AFBD7A9A5B0D67FA92C62046F8F9B2FD8FB424EC1165936 486A469AAB12FF9490BA39D4AF4EB41D682F278423016AA6C173A2ADA81AB2A6 919412F56463799ABD6DBCC68A96C67C18E793A4B84027DD9CC233310E84E4A3 1941DA5DBBBD462F7C7605ECBB28F46E6089E9B911CBE04C207C579BD999ACDA F9A39FFA4C396166DBA3A7286D8A6830B975CFBB9CB99DCF36A3057015218BC9 C05CCB01B514AF78D5E3F6DCEDE6816E64719DB53CBDADDC52C3E05E2075813A 9238E39CE61E0C17DBCC3D5A321950FDFA8F7DA670821C1F37032E6C52EC0BD5 81F698295732C4248C634449F3F8DD016D07583818161066DA6D1F8F97F09423 E887B17579B2B6AF2F4D18DA593C0A0E7DCD4A21AB3D7E657D12E07FD63F5B23 2F362D1664E293E7D85957D450C025C5B9B2E8889283D8C8D395B135AA50942B AE668712615EDC2100EB5EA761360E565F06A23BFD436DBFFAAFAF6E583E84B1 AB02C5418E41B8CDEEF026EE19139441F33DA61F28E6218B0F2C7FC79D2A3AAE 5C7270F0032E465BAB57AD5323F4851D4C231A66D4038562DCE696F2DCFB0F7C B85AA1DF6068D85C017C5C95064FD4F0C3EA966E1E94CA3C9C9A76AF0B5E981F 4CC71CC9C686EA4ED348CE57AA6BD30A16F7111E092D81B6675F7EFDB30E4411 C0CC449A53D60F13BB248ABFE7DEDD56A03A675707AF1B1F13829E41C9226504 FBF20B944E575731B7FD1D1D16B18275E7AC756800BEA08B3DB6F505127B6BB1 2E49246603B265FEC2DCF02330C86FBCF9C9F83D335E363744CD49AA4CADCC4C EA2D570C6B130166F100436E50118D56630E2B596F44D37275D61DCC9C9D365C DD280B1E3C50F7CA3CF3A7AE08FD2451ECAC08092472D660BF787D04D3C3B936 7292F46A57441B15E7398C7A2E139DE61729D049484B9E9E29632795AF3C198E E450BD4E843FFC0B8EB45D3F0BCD408A33F6B9E6B83E19317183654B196D9FC2 BF327E50BF4F5CC83989D88683FAA8851FD91BCC64C797370809623DEA519BC0 0F6637F304BE66317FBF98F8C700D28D74B643FCE8517454412D0F56D4DA901A 8C8890F98BDCC83B836F806A4BE2349868E7722D6D8A260FC3FCFD39AA2DE620 E8F5EB6FD9466F7135C436F9E86937631BA472EA77E9FD4BB9E5772AF4E19232 712783E10A83A065E1DBE7F3DC45CE16D1BB35113470C88FD7BACCCEE874208A 43D915B0B6D0A497D55D5D4ECA65FBBE334EA902D71766F00B1D950FE2F1EC77 E4ED0E969DCC78C7F04BFE7D03F1113DD85A47FDD921E4714A59EFD829D62F1C 98876969C68FBA644BFF55B3FEF54D99E081FB6CBDA470A2952E29F52FBB59FF 778B2A9327D0E12964F34E1537E81251B2C910E6F75497A01EF0F24A3C85B421 AAEB193514A26869B53A9C7974CCAD5FA2CD9E3598353D755B04597048C5F740 81CB4F80AF5EC07078B84458A0EDFD58301CF24967ABDC5CE8B6A9737748C494 0F16EFF7D430328DC9B04E0770C70E68BA005506E86737776B763EB88E64C5A6 F5EAD4C4356F4A196900B9D3878A0DFB898496EB0C85EE207C50C868909D0847 87E9D16DB5DDA440CAE1D609EDAC8D96E0E83BB67C74AD1271559593CB4733C3 58D54577B35CB1CF9B954A9C422482682732835019D1FE22D6A0A6EA8950D25C E30AD2985C44267209498029F8FE133A435BD5009CB0A8A1099E95B34BBAD9E1 8FB64C79F6E1D8C09553B35A952ECEE66360621077435F8E6E64C1C6D7713BC0 91DB1434B9CF86CBF48B2FEAA908AED5691CC81C09D87EFC6FBFFC2D1F79EE9A 836F333D6B473375BC8F6E8102B0C24700FF38BFD7025963C86218DC1E077559 D4B80B68208E317E47E4B6816F04775C64DFBF621883955BF81D0DD586B4AD09 CC10EDCB8A82C0B6D4A7056BA14A113DF3B35C7300D43772EEC5C0309A741CD1 1A26C2C80D520DBD1EF1256B746BDA0D34DEBA442BCD33FFB6F103EABC60C585 D885AAC3E1B6452B48A66C83F918E918EFA6034829C898440E436AF1A3D81AE6 E74AF9E8F505D5DBD7BB58432C5AFF73C5406D78C8BD85181E5345803B2D1F98 0C81540F82A04C357AC31E9AED37BD4E8D5FDD95B058AF5AAC0E1D35A7D11095 31D1F8AFD1DA22506B8E1B9D72D91BC9F19D308C7FE6B85C2B8D5109276092FC 718C3892052A890B3F785E57F91E83FDCCF702117E5E81A123C53218F4B74355 65BD683FB87D87527BEFCAEFDC83C019E7FF741486E3CC1597B6A2E493D35603 92B57EF508876C54193887DAEED97A41B66FB83412239066EA2E1C0617FF7B10 8BDA62531DA6C6F8F06B7F150DFB3F6905A2B7076442F7C4780A41F6628E3207 1D1FB86627C40A84D9894B73FFF000CDBBE088CFBBB241FF16C982353936EB17 743EE092F93894D92E9BFD73E382FA5E618B21AFE8E593B35EDC97D82D5FF8BF 485605DBEF4C1C533AF217EB31852B6D05ABE12BB50F307C0F59500B5F89CA28 D7FAB89BBFE04B93474B3E6E863F5BD37222A6EDFE81FC5AEDDFD128DBDC1ABC EDF98F9D5AC4888493B4208D2B7C937BED3A271F4C0DAF78D3F5809B3697E28F 8C8C00C6AE930844D3B54C6C52E0F48DD76BF562C67D4B035AF36201AB990445 6DDEE6DF82A8E4242787B565E8DCEF69D54DE590019CD5189053A04342E2515A CCD0D4F3DBC7ED1FFC82F35407DB1D4D5A322B7957A40C30B3DAF4CF44CD096B B8C19BE6005DB525A0462BB49665589DBBDB111CD21AC2F7B6AF3F61D6A97FEE 5103DBE08AF0826660BCCA78410A361CA68950DD6A0AE6408C5964CC8C73741E 4ABABF4EB49D61BE53561577CCF022347C3DFE48F5913E45F1C7E39A1747A0FD E41B5800AD5FFCC50DA109F2B38743A9566FE6098A85D27C1E3C069FACD059A4 7E4A706761CEDADAE28FAFD44A8C3F9CAD93CA94FAB838D8053CE56E0B0A4AF8 CEC76D72955D888BAB4ED03271BFEB2A41EBD7F7CE463286D25F49894E8E6BEC 18346F4AAE8B7C2524D586C937020B6FEA4A69562275E28C1CCC37987E6CB9E4 27F47C1B45D60889D8C40A5E3CAF5E67DDDFB2EC9C87142074CDBE0FB508EE5D 7F9ED4996F009B94E0FCBC38938DA56EF7E86ACF4ADC049CB2CFC6B9E2B4CA10 699D52B2ECA9AB025A104109637D50744B218924373D1D0CD1138D516408B64A DF3E3A16F462AF6BE00DCA51EC0DFBB796313B65D01E6CE4160E071B17979990 D6337DB92F3F112025DFB0DDD1E1EC1108F55EAE8F96788A1894F59B525F9935 CE8818B66542CD18D019EF18D77DB8FA541BB47445DCDDA30156033BC031C191 5039096D293D1A34FA2EF1551E243E1D88A55EE6E2736DD1A725A06F6A78A520 BCAD87F68AFC45540ADA3D8DE97841178A7FCC969C159FD2B6F5153F4912198A A555B9250AA73454E9DED6FE1060661BEA6283FFDACABCB0207B3A48E036C39F 731833C66AE165844344678A3D9A70AA3910473EE01100585DC37E364C3DCE0C E81306C3DF3C6EFAA67A8DA1F07B0D7B0E919F4C6E7897A4B3AE49A29ED10788 83FAE69A32A97E36A29BF854831F84534C1F36D962AB49551028505A5FB3B84F 6F0D66A06D333596DFA8F3384D6C74022523B58F1E96BA619278F79B6D24C63E 138E241ED8ABB23DFEEE6B7B2B7E16568AAD039DFD22E5B42AB5B458FB8E7239 57282147B69E6E3A3C5C70BCA065826FAACC8552FC0DEE5560FBC1084255DAA7 2E8D48ACFB4C3AA1C28F0A6F7D0A6AC1293AFA503A96B664169944D0F31B4618 C09B8D108D0F77B9485D1ED26C487FBB8B47F83F782A0206B625A4A81A350D75 A1DDB921F0610A4DEFB93C2288CEAEBE0AC68F757D11D49F3052946BBF4B11CA 2B9171A4A18D8C5C095703ED5F10D93C6EA3B4E46E0C9E9BFF3AC1CBDEB4E019 123CF2099D469FEFD70066B214C0C76C0B2E0F4110DCF2FC8E8619707E025927 8D5E5CD3C4950A055ED20CF299DC3127B7FA0AD747533CE11921DC4F110B6ED9 21B9BA08CC207FE021DE4CC5285829F47A92636B0DB68ABFE8E26A50E36BFD2D C2641EFD86B588DF3AA72309788AE3ECFE10347F41F051BF51F54F05007C21B2 8B4F64329200E21994516DF419BB3E10224A92D7E5B7682D0FB7097EC5672780 77DE4BC4B1A343611F79CCF778793766CC0E01795A83B3171421F40A144966CD 41A188F56F3D54E6578732D53E21156993E78B903572BC184C87DB3FAE64D5E8 597D06D882D5C0DA5F8F8AB03014C5886E836F601A0C4ACFF9EF81B986E9D053 55BA66A303FDD1AEC853A9E30DC0C1F42E850C02FE9216A86E9527C1BED627D1 6554C85BA07015A2A7A7F00FB51C14CC19DDB920C41DBF56DA249930D58C034C BDBF98F17F143EE5C635BBFDD3BC81E4A1805085AE6CC28FE3EB47C2818C35BC ADF57AC82D142E1AFB16106AB08A3DFE989519E5C5903F2D8C42B13FB114857D 35B75B239DEDC70163B181AA43D7F9B964EEF1E43CCC9959AADE728DA6D08463 854EC66A8F2114A2200EAD92D5003C357C0B42C113A0CF1095D6375B613FD68A ED6048680853B5621B55CA62EECF5C4F77F909D7BF361C53F8B90D853930267C A79CC67A446B0087B2B4FE074C242C8F3D8F203E73B1FFDB2433010E00AE80B5 27709B16EEF0EF42DDD56B46D1C0BFEB89B5194A2285C9C2F9B62541C0F86BE7 ED1903968B13FDDE177F877EC6B9ED63DFB5DC4D26385BD85E27B86B5AAF00C4 427FF5CCD7D539D7912CB8E0FEDFCD4641CFE9922C4A3A67A72C363A18E2BAF1 15B2C145CA6A6C07461E113517D6383A03120286883493139D48E18DCBA93714 A936C2232F79E6482E870BCC7E1C22355316A34D521EF8405E91BDC56C0F6DDD FC53DD99D9837771A89B5B8CC3F176A2A9815AC1B6D2E43C394C43ADC530C84A 763886ED0DFB2AC863D8EAA55572732446A31953620D920AFF34E2590F1B29C8 EF50348330B6C718E8C23165CD739392185CFB2970BC2148CDE2D7D3C1A244BF AAD43899E41254AB30FEB10016E5F11AC0185761F73ED6285E041132B9F094D5 FFCFB4C932DE1CB65666A1B7BCF0A610BBA9578B8414B90FE0F6D5E83C8B9335 D487A8380FBE1570A01B995284559454E89DB607E434BEA9582AF8900C1CAFA5 9411C8BD17F37969432F7CA0E7C676D77511DC2037FA3461C763809022E1A8D8 6646FC08A21541654A5735BFEA2FA68D9995AE458C11C41D563418A13D5FEFE8 E7E3E3A601A362CA2422A749AA1B226D35110B03270B6C620F851A3F50D34707 08FB5DCDB10D33AAD6728B0E76AAA7E98767D997F144ACAE9884F8DE2B3FBCEF DE7463CED6C95DBCEA9AE9EA9E666B366C5FE334D03B0097EE7148A3DF2978B6 FED5E4C262DB969A775F941AA6653FFDB7066A24FC6E19EA0868AC065D5863DA 0BACA600CA715BC1A23AB469530F4D7730131556FA1B3CF3C78F2B37EBBB801E F108203B858D2CE1E432E9319BF6CF57137216505A8DF7F307E70DE9A2387853 7C028D25FEA6C83C2558AACA0B903E4DE917B872C8226FA349F587E482ACC697 2F8726CAD12A19032AB62E3814AC6D2C3B36C09DD4E4D8B518DFE2C21306FCDE 0F030AB52B41116486DB9E5BECACCCF97C0CE60CA33F5E81E2B1E118F79F07F8 51F02CB58E8F9C63A81D61D6AE819C82E5F473C9AB135AFA3495C8363A3555B8 7EF46153D5D277B5759558BB7FA70D96D2B0F26EC3C984DF063A14463DF7BEA6 398F4CC4E105522C359F8352D6A858A7AABA0FBB87168C7D00D96E1B3F15AA2F 19F1838AA08018509DF7443DF50AF59511119F193D4F5B3EE8AC9B2FB7D19240 CE2F356E4BD77087232CD182E5ABAE8F6E5C47B5F26F4EB75052CBB82F3A9AC8 FCC913DABB75A51F49247BBE4369FC52A6A24344DF6926F3DEF4D4A2847A583D FCEFA3EEFDB13FF245D6A0B0D1B17BB4A1C4D6E94D577F9936B1079766C46960 29B365FA82CAD68EC00CA7A4B89B4F06BD1B0790B22C5067B2D26AA3F178C749 A146A1651DD02F0397673C670E06E6BF5EA920FCE3FD23BE3DC25D9BE67A168F 07B8D5EE0A2A97DDEDED6A2707CC2BBB455A07FC27258E85A640C51802B19ED9 E9F43E95A190486D28B70FFDF5D89E3326F9F8E223470849C3070250A94F854D 871A511960C2B4C857AB6B83C6F56E99146C9B1A4FC2D3D192EE0AD1B448F573 7BDE711B9E3C47EA284063F1F8490A6DAEBF52677F8C20EB7D6A9086084296E2 AC144156509A91CCA3DE861398DEFF7E74C844A3ACAA79B860579AB910E5E1A3 4C5A81109B1BBF9DA1C2C81928353A443031AF58B5E1A545EDC5613CB726B3E4 169FCE4503C5FF09A1F402F99D4EBF27B3D8DCB127D6BD615584C311E3C1FE4E B288205B3E9281BDBC52A949E8DAAFF4FE860943E7810B65B4B000A5D42A6F01 10626E1596DF0C854CE2F3407FE0E864EF4138422F16CFE2C65525E3972E42C9 A27BA1895C8F2C386FB300CD73EC7DC03EA0846E3DC5B843C1FFAC25BA59F47E AC3787E294EF256061CB16EE09FC5295F5803BD3F24F6C4188E206EEFFD2580D 94BCE1E6F9C606698BDB3218301D3765973C2B75AA913443CE6B1D7438F805E2 5D5ACC016A8DD0B71E5D7EE45E019C0B7BA0C149B9158021B6F472426C655275 C645CF768BAB03DC70A9488A06BF62BA784F44A74CAA79E4332DD8BC1FDD95DC 3736404A100258673E4895B8E22B1A123E0919D5CC599CDFCE0BD96C10BFE421 0CB3A7F194A2442E2AE8153C0B531D05F1704C4C63F8CA19990EE5A7D08176B2 38839E6BBE2CA42F629F7EF5163B64DE09462BE9C202455EB083C529F48AA41B 7E0342F4C28AD3DBDDBA75880CD30B272A212B5C3987D27EA1726956CBA39A5E 4C83EC82BBDE3103C0BC11B5E03D951DD80D863D6AB24F1412B31EB47A1C92E0 038E8796D09C6F32FE27EF73BAA5718CC8D84178C53313D4FA7720E706AB0B16 8D264C86CE1CEA0DA942FBC8DF04241F2F84BD46A97FA6CA390A8A791FA8CA47 085D532C8B72D9AC204A8F2711CECC595AB286C4608FBD36C82A2FF545602010 41B69445CEA932843CD24B22261E1532E848148BEA74579989C0F3450468BDB2 11E0247514C2C2ADC66820A65FB9C7683D50D5961C2122CAFCAB27AE613DBA6C 911BCBEEA62D981B55615D47FF6E49C7348A680BFFE06EF9DE6E19DAD5424965 DCDA1B655D803CE8581BA0AB7EAD32B7EC4C9CBE0BCC74DF132F5EDC9D50B438 D87A96B3FF181058A150FBA16390766BFC98CE986C3875D8C6F15F78D88268E2 42ADD540D06525B10F6E80F114E8DAF907F31B639FC62E1B824F3B245083F708 C50D9CBD333CD4BB33F0AD549BC51BB611DDA9CB4520ABA377847C5F4C7644DE A3AAE8A48CFA03011ECA539AE646F47988982E09DFCDDB5E25DDC32772885AAB BF9555F6FF946A53E9656D625DF441C32CC63137FE4AFF164836EFC6718A8DB7 B4D81E86F3D4D1A0DF6DD22ACBC23A2ED878B9BD43617DF539EB4431E7E49CED 22EB650937C1188C750CA36E20C8F374DE68B7C79007729BE085772F7A3A8DBC 9BF36220846630924F317CA350E9173D618F81DADACFFDE09E710299BF6001FE B5CF89F66F623A5F7CED70EE024B8ACEAD657F63F7CAA773B59B5620E72FC26B 4678042E0BA4F75F5596600CCDFD7972806E1F3CF64C7EF3D88240C4A2A8E81B 07B93F8060719905C7F7E877C4FCA35F46ACF97F7128EA1FDAB570ACC9B8CA88 957A8F91D301336210FD59D3C5F365E822B90076231477F49C3CB4EC2792024D 6864AD523326123254C7AE2D9C11D30A4ADD2CB8D8CA14CCFEE0FEDC8C49D2F4 99C69EA518C7EE58E94403C4C20DB99DE800588BBF79C27C3A6F03D653F3C15C 8238B0E8E607D425028405BE81042E33EC2B5595677AB24EBD08BF1858CBC0B0 154D1E3CAFD2780D6A73BF7D8DBC5B800D4328E4F14955F6D86A2F5934A4EC50 B2D7ADF53A532D6484677807839039F9BD047FDB0680C50BF89D3924716F80DD 0B421DFBCD32F4A7C454B4B91C6C8639BAB5598951DAC178E2320BE563AE0F14 B96CCB98F51AEE99B83098EF77FAC10D8B88FB29B839C094785F46A377BD655A 68787E5A6DBFE78ED1F304AFCFBDBD481348A65D004646E03B5AAB0EDA67A779 B9014D14750AA488D8DF9C9DD347AE5B68DCB3C28986D9F09C48612B8795BA3B 702415A816258790947FBEFBE2B85BA0913BFF1C4F35C7464DCD0EAF8397A769 8677C8DA5F89253B1C3AB2F41C3C5448F17C5DCCB18DE110CB9020B9E26F0BD5 E0806485FDA93F3B54AA9B9D445090A23123BB399318B4771EC426CDDBAB6BEF 8E24B165DEFDAEAB660649754283A4A3BEA95522F058D118C7892EAACF376CAC 877028063F1C0429B5AACC47CA6874B8A83C75B78A64D21CD14214EEAB0F4FB4 D26FBEEB479ACBF5740230C9943EF7B6983AFB683855A877CDB8238CCECD8156 DF9271A64D6148560A81EB5DE5F20564E2EA814A974DAA436AC36F107B289E90 111B28D488CDED75CF61C3FAC18581D21E7B517271FE4284CFD0865A6FCEFA3D E26B649A2F392FF3A6A0A781E090FF5A98594BF0341D065E8E68B0A0969DF7A5 71356D718C2933003D218218BDB35BF0AC541180635FC8CA3C777008B09FBCF8 8BAAE9D764AC5A8CA2E88E11247E8512B6FED52E7C2339CED4E4F82BE578E342 6DE6129998C520F77AA5032191A68F101D9451651C003B33D9A0DA25E241ABA3 A29AAAF4B3C81DEF8C36A52C0D8A42999B63199295BB479F171599CC952C7F59 B18BDA62685B45AE1CE46CCE2311789C46E155ACD5A8838C6E392F5CC2551401 399F83BCBD4DB6BD9DF2EF4676D900EE843BD07D9CACDBAA05855AE2F7993A7A 2FB0937F06186306D7C788FB26B536C1915E570863E5FB2D91C63E6FDEBA34D6 A2D27DE682224614ACB3A799B3604026FF9F9EE56ED3A9380E1BA58057A036C5 5550170FFA61924C47BED31688796BEB3927C3CBDC9CBCAA0BE5D685D7DE241B 24C6EABDAA52B245BBA14D214CB61FF044B0EC7CB8731958F61D65D7268C7FAA B5BEAE3192ED338920EBDE9B6F625E10CA87520C72223FDE13C7BD49FFE99DC8 5DB87EA56CD6C06C8C7AC6C193340E9F913C83B62CD5BD580F5CC6B6D8C1470E BD09AE843D9EF28CDEA143B7206DBAC3B896CA9D6169DD634B30C41D73310BE2 DABB707A86A5FFE942BCC7A75FB92EAE77EBCDF26DA07B07D8ACE98C3277995D B7B1198233DC78136FBE39D3DE9B6F1F62BBB311D451B46D7AE0FB28A3EE7AD9 323547D3399AA95E95811CBB50C5EF6680363FC8F7C7E5230B9DB9815F8697FD 047161AC68896D17821504A87A73775544F932495C55174EF14A8350BC2C055F E095F53B4955170A06721543827E3F1C90CF48866685B359147BDDF8FC42C423 3A6ECC23FB9353B3B6B90C3E8CA4E4E930AB97B2A5B8E348F9242F479FB85CF6 C67ABD6A09ECF1CFB93CAB1960FDBFDFE108570395385765077565E82107CCF4 95612493959FEA678C601C03115D6947A0B14492B04053FBC7CCDBC058DA2D32 44E1CB3FF3B4F3582002245707F20494E04D681627A2D084AFC1B8144F5A21A5 088FDCA63E160ED588C28FCFC523623415D2632F2104245379D9BC5E067E63DA 3A320036E60A2A65F56997572166E8E6DD4AFDB39F1F84AFF1D5E05366F0E2D9 0FF1BDD6A98C9405CFB576E4C96F747E4BBE12569018B5123CD9EB8A5C0CABF4 63833B489B792596B97231202AE359E0D9648F7A350EA0304B7AEF575212C851 788EFD372B9A3220E6C647A317FD31663D1F6E6B0F14F7A8EC8E7A7C291792C8 A9EFD4191C8381B62E8BCC7B14C8755FE1613758E94FBA6EE7F9DEAB356EFFFA 20D359112A8CF8AA6EB2990DBD57020993A4C0D3BACD910A25F318009C253F49 CF460E81F4B942F009BE7909AC9EF593E7050DA6F7E0588F7D70B7E5E3982855 29752C3FED27CC39C420E8A1A27CC22335798C214CFF18359B85F84CAB375769 035A617724D498437B8AC8E7C3DB12389DA206D271D4406913F37EB48C820E07 245E5E87E4F2CF38FA332B539A8FC1F5A2162A1353DC27C2064FBDDFE12FF7E3 9A6A7690B8E0730C0F9B78F275DF43F5F5FEB0360C0DF657152846DD8AF2186E FF6E19B7E53E8F992451E1CD7E888417D3168D1299CA31BA75DC2EEC6DD751FC FFF946411A8C48E3A5C98535A58FA490DE9F0C5ACBB228A5255C48BA98736095 7CE11E73BF3C403915FA14A4A8144BD6AD1D79843688BD5BAC427FF96B6C17E6 82266F1204D00801F0274E8C05587957458527D7EADE10A03C301578C8BC4111 334DE9BB4B78FEFB8154CE0ACBB95316CF7B5A1BB4547722DDF513E013A23B3B 3899293091E25619C0ADB9B66E3C54DE2A257A5BE8CFCAA337DB1D7A01383F99 F5457952EDA9C68E89BDF8E7B3F557DD20834C428A4DFA5B957A0BE481889125 02751A25A687F5CC5E679329CF50F644BDDF436E1E3178CE27E0B87115FB5A98 23065CEE85BE84BD37DBC82D94ECFD6FF88284F98848C73E5155D425609CA6D6 ECC71922CAC6F81B37D3A0BED469A5A879673F4D7E623D77F2C9533417FFCBD2 BB09CEDA826AD2945904619620E7A759BD3BB2E799ECF66FF19194510973CABD 46EE7FF5B8609B79469720FC8F934AB53A4A39E583EE43E1E3568CCB96A7877A 923F66B2F7EBA572ADB047DD9D9F25E01F7681A4B06C05FDB062FD346DC244FA B3A054BD47B48626907A7CF81674F3535DAB490E275E776154471A5F8BBC9F8D D811CCD6B26E085A660AB44533C4A3FE8B1511595399832368D022623D945C09 B65F2E7B404E11A0BB3AE589BA84520F06EED018D09245CE627E358E24FB4690 A617620ACBBEC71D374AC3C96D7ED04DC0893C1034226AC9D70FFA094491B64A 2EE7DACACD7B4712B218AED6786E85A97A0662C261E99FDD6322998B1F95E08E D035A977C2DB94793DA2D90F3A14D4EC9A879CD3DDE7B874872E117ABB74A699 16BE210CE77A1F4BA087E7E5E6F0666CA396FA06E9D7582105FA8E9B702B5654 7323554BEC4DC645EF7259FAD81D36725394F94C1F1B0DDCB992F4F6692C879D D8DF61F743B5BFAECCCDC1C7A16925D8E99D7D1BCA04A6ABA8E8327063B97FC3 095EC36F6062A93AA99E39DEECFCB507BD677899A2F170F612785DE13B89C7FA B32BAE429661C35EC5CA6F6916F6FAE1B03BCD6D1EB88DC99656BBC40DACBBEA C5CBEA244B3A44EAD417B65554C8CCFD173CB9ADA94F5D55E802E032BE53F6AE 4C024EB9D647CBCD0D05F4CB0E49C7D1E9F573129B46E1168DA84DF1F7E9E657 A1C37AD37489AA8509AE5B71C4183A5BC9726687C167702EAA26DC959B3553D0 FEF8B04A46FEA60A7B66F83246725DB510C0D7F9A4C274BDF5BCB8EB9EB0A5A4 52D7E328AE40F0E80F7C388EE93E434F2B6ECE185FE729F5C25F4169043CEC9A 42B0D432D25F97A3F4F2849F5E11B0F2D7AE49F4FE5C59C4181664F8938F9B7C 6DDF4EF92EA98AE49948AC5A70AAE737835C9DC33973AB817E1AD6C5DDF42BDD 5F5CE7EB9570DCBA106D45D2B31876F1C5BC94D2733E603D7DDC1AB7332E66BB EA9A3A8E95B7372BCA6F841B22C2B6C914710373CC20009E07E417F709A540AC 78D58511DFB85F629AF125DB14480979C68AE774184EE8759064288C0E794D76 E6F80729725D0A6ADC875D58D6657F0ABFCA16FD200C48A45028B4283E3008D2 244706006EE511A84882C5CA0E307ED3A9A4F50450900684A655918269F1D146 86656A3600C0391A4C6857F24B3ACCEE4E782FBDC0EB487A85A2B575364C905A 40E70F0866ACF299D231D624949692ABA887D56A0D94065A3FD6FB30E9EBC027 755DC262C0912EAE5D330614DFC41F66B3B00461682C16EE71FFB95AC0670259 8C58380A0ABB59BD43798091F979D6800E92EFE12F50B499589267198C9E6602 5B4B6EBD6461F78D7F24E647F4FE4E4844460ADF4CFB5CF60B1FA0D42D02B836 3615E35FD7E0E6866206485BE7C4BC920431799F14C89C17D4F82E7ACF1C012F 40BA05E3337D56EB9B56CF8444402109A9E3DF297369C6B9CFBBC781E17DEA3B 68886370468B45066C6D6158E16924079282177EF599F66ECA50BBC316E9935C 7C8047EB708F831FCD7EC7BAC3CFF9DF196CA7CD583F9F69A65676A69D957C31 B98C1512D62AD24A9A860C34B9B5699BDBCFF4FAF504F3A6EE72F75F0AD14BEA 716C41BDC36A7B8213E98A57D120D5CD3E1009BC546EFFF690D73E026E7F32FD D60ABD6DC5057B11 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D 098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B 41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA 2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD EA43428C6F79C332342E15F75B08A1ED360B3511F823E75AD49BA7AE63B19238 2AFE8FAC2715E2FDC895E95036D23127557837506A3B542B0E4651CE2B89C252 31EE8ADC26E2C04E8E30A9CA12F066CE01953BE7867171FF6C7E834742C36C3B 58E74E4B482CB85FD4D24DB03D753F260A585D552CDC9E1941446F2F5B45FF24 2DA4932B973139F328E7E92828B900BFD398B6F41DAA0D6861C66AA7F5E3299C 87A5925CE0E0F9E09AAE0792954A1F2C0AAA8288DEEFFE579E38A3CE8A943EB4 55322A87C1634074EBEC25F724DC1BCC1BC10458CA6C4395659B0DB6B612C151 557CC669D8DC37769E59A5AC6BF061C79FEE265DBB59520EB8FFEA273601D1E8 2984B8AE31AE343F37D03E2BF97DC48AFE50BB6138C7B9F9B5E28672A37BD8F5 8F8C98DC43DB22C6537028798198E2D3B0453ED72487267D653DD50F1BBBDA92 833A987A95FC1F275B90B581B4BB62B6863A4CFAE37F715EDF3EA5A33679FEB6 4847ABB4B3D170C275B9F1AC3156D731198DACE0B051674E85B758500AC9FBEE ECC75EBBD85F8D62AAA328FB09C6526F853077AEF7EFBFC2B6A29D6D508B1E19 EAFA4C67EEE44045B9F15B9762B3DDF5CE5C18B23A5C2F73A1F6DF7F8679AB78 843AA41FD2A7DC02B45B729EB76C66A89F5F76E5C4A0C0563B1EC5E75D72EE35 A7F1FC89216B60D82F6F2B8DBE85E4FF4D63712C689E696F60B52AB622C2A4F9 37C380775EDB72638D3F81F61D8D74C76D813DDFFF35ABD9A502F2BC7FF65754 2A8660A5A53E0CDC2E8A95B6E33CA153EB711DC796D313C8183D707D3F0E3EE8 BA65E0FCE3F1C07F3D93F77056688B5496AE35A6BA0B59619DE78640A8C3F7D9 7DC5E94894E1E63A7D80600B945B1CCA50F1B85F57673C6CE09EFC4E229D4635 48AB466118D273BAF7C1B52A067A88C00EBFA7FCB378F1575BC0145F294E6F7F 8007602C6560476FA20BDB91831B22404DB1C4C167594B1216C25226D262FEC6 F5D0DBAC4B8D743C669CFF2068CB9BCD2DAE8CD6EE1B33BBF7514C4941AFCDD6 89B75F67339B25AB6E267BCCC5E2118879AACCECB5CC2865802BDB4D7581F5A0 E81AB0F7AA143FDBE743E16D028E46BDA94AC2CBA77DBEFBFA32E462EBCDBDC5 B86B63333A0C05C65D4B351948D03668F7A86A8A1388C4604675EA7384F3398E 49404AFCE19832C975A668FBDC29D06268085022982F01A2DA1DA8B8DD5F4584 75F98D7606BD6A45A403CC026A4BD1AFA63E1BC1034C1F617E14A1EE9543BF7E 1ADB8019F7AFE089150EBFC613C414955363C43E0D82ACBB01251C070E7F1040 602A58B2BF55094DF2BCD2689320899F987472681D0933A4BE78C2ED69D76E60 2C437D4D3EA9C8D25588F1689224D92CDC65AC636325718AF7EA47946CFF07C2 DC0FF0BE3642ABB0CC38BEB60E00B41D45DCEE44A71F11B99CC4CC22C5A0C62C 074F3C2FB093560B7FE9B3AAEAF3B563D1D646046174516991A196A915CE6918 CEBF16946487E546C6E433A5C5B9FB7D5B97F2B4B202F892CF5121199EB48642 4448B45EDB617EDB931969D53B9C200E954B4A6DA6617E3A56D72EF332FB941F 4694BAF21CAF8473EE2767CB5434E955C5A08DB04F67508AA1F5CFAE25FBC9B3 9FA855CBF2DFBD04C656532230B8A2A0B33C7EC74BF3EB2877DA369035C976C2 F3227355AE2E740152A344AC5E0CB3D04A1D4273A54A35BF8B1F24797246B5E1 CFD5D260F4D5E5131120AEE3B3BF1308B9E55026C969C5451EDA76E0F06E75F2 6DCC258952B63FE0B7B99B39D5563AB4F7CDE57AA7490C71E3CD9EB563E0A9C0 8C54E64E3B537A901395E33847C6FF75C2B6FC3536E8F990C18A6623A00AB558 272AE4D142503BF0B82A13EB6088D27E0D8B319D6BCF1E0E8EE94C9ADD6D4645 A5B0FBD17AF7CB1E1ADDD2D822A76F6B9338B6B459D4A67631292AA028A8B976 8F9771C890FFDF7751F3079E36D8F92AFB62BBB960A45891B5FABC8E5BDA1348 5AC23D29879FA27A392E3DE732D78EFF7168F2FB7B0841C8B3729FFA2B515885 C699663626473D04C1421BE24259C91B9FE8F63DC99929D9741F37E67CF70E38 3C489E823CF0F62B020CF576753734C989AA1A360A21A137DFD644ED2197032C 3DEAB8E7A1306D8DF7E36DDD52A895488E63701D6A69E634EC862DFCDAC01BA2 56DE73FC77027F65B89BF3188686026D0C2A2F22DA92B8DA0F6476F6252D8066 D9F0AEAC5E6F09120646EF77CC81FEDB1BC8E3197E9CCA12C941152387E71286 E00B8ED61DBA85D2EF5550663A1D2C7233D6FDEDBE947241585C4B9580E7A700 5081C957D863FD2DBDBF56CE8DA67E3D6A8A47C3BF38478D3D4D72A803DEC0D5 797CC1ED5B005CFE4A46CF549FEE756419351B89B8DDF13BC2EC18939901BA5D 37ED1DBCE8DA072938DFA9585444FA6F09CC32C7098E2ACCEEEDF7D117235385 BD95CE9C7C997491613FA253743E7D0B03348072F516B7436A78435B19C828FB 1712254A679503CE81FF1761ACA3C3BEC0C1E2736A2908C7A8D6F30D86F7DD00 1BA2200908FA4180273E50863CA552868F1EE5EC1D8D47AE159B4A42C65F3D7A 73332A618CEA966BFA32B9AEFCE9C7CD4678B2301FC1DB91964486B62E28DD60 11D123711C6A2D190F6FB97ECE36679247507514606287D049455AB9CCF928CE CB2C62D55BBC4DFB1F8A033B7D42D8D1119D71F616205A91B48C7C83CB2D0B39 15824D6F324A9CB64E6C09D65C478F8753905E1A0B094D310123FBB7CBC4CF71 08D6381228C2B6C393E8055AF7D226FFBD9CF19379B4E7F75938D5A39E3410D5 4E2BB197AD202DB623844B156AD0FD80AE4CB0E8B7831CECF25E15753FE27E19 A8CF57C78C6D1CD021C6FED91E81AE1F09F1F9CE7D8CB480EB559729BAFB507D B99DE23E7D3A9FD04345DDC7E8E498F2229CC33A991418E69A9366ECB375C42E 69E1B73DC94401E5E7AD9CFE8086432F8026224CD42D9A1EFDB1B3B0D5BE74A9 186F30C774BAF35F25D4B0B1C9C791CAA87015D3A7519184FCE9DB2439A98A49 0DA01A0A9ED463382DAAA05555106902836A46E3651871D20B65879902C0D93E C8C3358A8F64CD0CA264614EBE741ABEC13F29CAC4625A1A7301889D9A994416 24BC8C7816579FB7D7AF946DBB3D911457CB2D0CE74BD645CE388BEDA28CA1F6 EF4DD197628362D38ED6499657B1E45D1DDE460ABE0EC838DF3BBD2B90FD2245 6DC211B771E1ECC3E294F1B767BA0F3D041BF4DB159EF01C3AC7C00281A675A7 BECDF043A5EB64CB6D99FC8E7876EA1216F005A7A63EBA79549D5B6C33FA47BE 38466B6D62D3D00C52D9BB7AB23DD4A4C896D3A5890E8C57B7ED5A627CC7EA4C 0BE63CAA285E1A35808FEE0ADB1FF9EA3B18EC1040560B1FD950D7EF32F7F958 5ECEFC1C01A98E4DCB69934F9314316D3CBC0AD4A1F68346CD40AE6E3A804EA5 7286646FB2A7ABFE62B300F72A0484CC51D34D3FA2B292D308D605576D56EFAD DB68453A08E5B45720C99964B02A5F517A7CA00F6976CF1F6CAEBCDC1772568D 14129CB82DDE0705F45EABE56EA4DC5AC1656105957F509F2E8AA72FE5C2F830 38F2BB415C413D54F348903AA6B614A3AE99EC4B800D4AA2677BC588B5813A94 F5C2FC3F8B09E58B00DA92C2946D5B9FD8DECF4E0B49BF16A81A6F19EA1FBA6A 41FA0D679E6CA980C541395DD15AA0C203335ADF3B0D48D519816D46681993D4 A857426475A068E6C30E75E1201524D6B5EEA7BFCAA429AD5DA4504B245B23D1 9E5E2498B1F63A7E2B7CC42C3E5B75F075006FC833724FC05AE4157F640E7D1F 48C35EC8DF3DDD461EA211E48B2B3E628BE4A523680BC78FAC41FA1FCBC6FE81 17AC84A895CB2CC9CAE4D77FE1ADC8C8A4797A3F1D00E090282FE2116D5848BD 1E61B36613A89BECE27188CBE9E0C7ED75385BDC63BBC9C55E2191F1186917F8 423A10D8326896DF44D7B2A5AC320B1818771EFCC9C20D7E5BD5291ABE762A50 5148AE49289CF337FE6F2B6A369C557D6AA731ACF3BB97E38306F77A94C6EB2B B7846ABC4F32E886B0C66A806C27B4EE3CE94297C19714C889943921426433BF 19002E5C083BA89BF31D8F5A2602BF058A8C5C78DA421DA74A4E2DCE034D6510 C4720403654A84BD4000C074522F9D2D7ED733AC6B46232C69E21496575EFA86 D24B2A8DC064071F35AA926565BF09130B4F96A8150A2E3EB36355535D866B67 17B9F62C47A065E28261990D79E64DE2E4C5CA8E3B6D215925200D982510F150 8B0562589AA66EC47508F0A5AC15B06078A83B911C15232963F6B59BEDF57A57 1322DB18C44E6CA9154AF9084CC02095987FA65AFB0D896551415EC9D45BE803 BD428A107A492BBA8AD075A89112B3FE451399E061AFB98FBDDDEC71DA7BCFB5 2833E5299591FC86BF14F7B324F7F3EBAD36DDFB77313F1ACC40D0E4805D5B04 FB965C08CEC682A07412118A17C4549C0A96F397C3FB466C6D888F5A407D43B7 761962E8CBC5C7E27AD0A3605336CA17DB4CC1593C64E66285117EF7CCFE1A17 203C9F1ED41FB4FADFF14DE66F78E87A9028C853A757204F81CC7F425FC7F8A2 509611BDE84D0F549F5614C814C3E88851F9FE74506EB52C5BCEE4F21DB52BBF 31940BC2156EF38908869732038D1EA6E39B5417E547DC412CDB0B1F1DA09E65 07B13C1C9C962D1A9F7A0EE6187B92874964B3C5E20AFAE716E33C3E999A4FC9 462899118EA9CC961A7D704FE46A872BCF77491F70DEE94E1335196FD787579E 30A01C29CBCA08F301889C27910B03E20B4DA1363F6F5896007F71CA90E1DC57 9C6BE8898B3E2AC201895AB1223CEC56C003299D9C0947320DA9D9DA474D59F8 1EF5F4720AE0FCA1A8E55A2B9CD79801FECDABE6E5FDDDA140226714304D6EC0 AE2BDDDD1A02E3C01D6A46682D801A7BD61C1737358EDAD7D993D9006B56BC43 2467A2A0B58C33FE4BCFD8DAE939184D45DFC23F5B597D788F14319EB52B1FCE DF8C405005CEFF39D4167B66082A38209A7A8E1D5E73D87CE049BDA2FFDD49C6 3DA02E5D6405E2F54C921F6E2CF9F1E18268DCE0D0C960D477C8525CE5FEE998 82ACB08902CF6FF1E437468C519FDD447A2661C381A999E8724AACE9F461E629 998539472CC9355A9E55989EB7CE1FEC9D313A160294AA55910F4F8E55BFB917 BC77A51055CCC1772D0021AFBC1E79B289B539ADC3E99D9632919F8BD17A1B91 BA25661178C5EE19D4CEC42744B52F04FFC27A2E3C044BAEDCBFE020A896BA3E 79A6451ADECB932F183CD599F694DC8393E1F878737113E3DCBA11F22D46F028 6FA7CF148F2CFEB03F61D40D6A0D30451723E7C91D4BE58E6976FBDB89D50F4B 6EE65D2DB6465545038E094E333A015E79737CEDA211F913D831E78032B2626B 0FB1E7E20CAD4E01BF398E9C4965BF91136D4AE83029E5F3A6339CE3C8FB64DF E5925D739FD720AE38EFBA0E32E74317DD35363F19EEC4806EA840F2A77AAE2C 8752B4B786378B134F5A376A1F0BDF8FE6F0B247D4A28248D0693988D696E7B3 4B937A41277C56A182BC2BE08D57939398C3CC125A74905ABE953028EB2A8A0B 9BEB795D484BC979809506C8FA55AD6135FA66A0FAEC7EF53F5F91B37D8515DB C93CD4EF0A12CF0F9C3CD06C57FC9646A15810910EACA53BCBAEFF4AC568CD8D 13DE144FF06FB3F1A6CE76ACC351297DE4D7E755561C1EEBBD39F1351D1731C2 16AAFFB586C680F588B62AEC37650017928769C53E032EEADAE9E5361F28F78E 1841C1419290D1A453C63EBEFD3C99B5F8A72548393E2C6B1C95A43CB19EC099 4DA22BC088E6E95FC177B3D00DB7B3652D8C5DF1682DE9C3D22796AF78149E7E A951D0A46EB6EFDA46594BF4D608E3C4BF9406EC7A09D3A8D6623D79FB609222 C8B1257CAB63C810A5C6983BD16FE6322E5CACDF56B91FDD46AA8B292210D3D4 B59BE801C1B5A425CF5F5774968D510C017C3EA4D7B86C8555A96D4F0163DD8D F1FD9DA5D9D15999E626DB68763C5CD22EF18C747BCA003DA4354FD484A56552 D0A96B7FF1958035AE04025DF7F67EB52B468D63D735CC8EA34484B7E18136F9 9D4C0966C79990ED629A87C033A52F4C96295E3D3CCD4B476188101B94E214B0 7B4C4463CEB3C81E8838D0FFC9BA36CB0A39173105C90BF8A6FE12A0B3749045 7CA9DB29EE500088F3FFD13BAC41782854B25955B23118FF880BF20D66E30C4F 164FD408E5E5636976D9D2686192BE5AE7B2C96A911C290B749344C0B630DF9F B3FD98F2E62707541A128058A5F22E05922103A39A95C1B7F6F807A5F3A21A25 50EBF0F5950A45C9B864D2785C24F30108BB15A3E5468902D83B5F3CFBE1E359 BD129E494D769A371B26967AC8D715BB742EA20B414D5ACBB4B25A5770A80E7F B315EC73D3AD78C7BEC227661C2EFDCED86C4240D38267BF1EE26C506CF00382 8E7F86509AFABDA5ABA519C6CDA52703B40DB3502D72E8308725E660F107F4A9 026DFE14CF4BCFD2F4832F6AD1550CDBDB5644CA52899F4641C5897D4F907931 185D13C33184D78EAE54BCC164076DB74D99F52C064216C7FAAC977CFB69B150 A78A2052E4EE7090A7465324648976E1C3F19F146328BA460DADED492AA74BFD 04AE08FD24AC871D21CF7CC808495ECA5E73B26D97EAE5F9BC435D53BF2C1BD9 0A9004BFC44EBBF6683D52781943814C3C942BDD9BF95F1661761119B49AED7B D9376B6124A4DC87B9D7DDB2386974A6E02B29AC5A994617F3F988B692EDC47E 6C948C5071CFE0D680E018950F545831B5EBE3C19BF384A51DF56F3CC7757B8D 037FDB95F4D1878C407B8C1DF1CA9E9236C468E9B8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 117 /u put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB099C6CEA5044ABACC419174664232E97B29 ED32362D219AF109E5D8CA751EB1F9F31BDD08C93AE018E5269AC327FEC67D99 588CA80F068AEB94A7B943BAD5EC8D89C0B8D153B4345E77A5AD9B4522208A33 DA92CDF765B44123C6EBAA06D629EB9E8D0FDD29BFD60EB582CB369474767FE4 C0947F27DCFE0C8BD3CF5131E706E02ED136DBCE6363CB5CA637E08C3D832037 5AAA88B746B6D915EE72D7B458C55598DA6284F362D2DBF06C51DB50A9FFFB5E EBFD69D8D06AB0A6DF2D03F6E14FF290B1A1531109E43892B82B29395910021F A6EA74B8420A14FC189741ECF67F81686BD3C5559DAF75DF9FEF3346CCC35AC5 37A1E30C2602945974A2359EE3183A1AA568978F7732C35BE2B9224C27161748 515E5899B0387F0640DE1D712F390A8A026FC5C5A893E98F46B418B7B32BEF07 AD0EEA87737D929180B2BE697D0DFD46CF307E4FF76BC03492E66633F1357848 AA5A594EB8CC5913E76602C9CF8B7428F67965D5BAAA29BD6C978EF6B22B0BEF 4203B223443554971EFE558FD2F51D01B35D2194A1F6820293385CF12DC1ED73 79EA6082A30796D5EB72A67C5DB42A01F18CCBFEBE2F10B091C43C2CBACD8914 D665B340281C1EBF92249FBDAA577CB7769974B669DA0B74E822EE5DCF3A32D8 9C6714D8C82CE9BF3F16E6336094BC55381E73A96D45B7A70AE00F9CB8348E08 2A64E4B40B3BD0A653B423C5D3C1ECB62F5E05393FB8C9B0C44AB26F6BF796BF 5B51601913014ED708B97731A5642351ECD0F6CA9C06832E0BCD0055E9BA51CB 7242CD34AF0B75F3594AF9235C42B974074665C5B6C934B08E5C7F55638E7DB5 312BC541A8000E69A92ED6C63AA6485A50DFAA1DCF9B0DDAD23C43DF22F3000C 0CBF6F8F64F37BDF8F8DF321FD8F42C3FF774A388F9C033572B177A493814ECC BE19595AD285F11763857603EAE0D6AED509225CACBC49351E6BF1457BD11490 EDA1C3DD6DE8C7036464CF80FE562CDA51ED2EB92BBC79252FA79EAFE5E6BD4F DC16AB83B2C902A9027BA4AE30ABADFF6D513BEA850FF35416E76FE62D8E88DC 69F0C60921B33BA59FA3EDC8F532B47FF2A5E5680BEFCDAEA4474DFA2F8FD68F 74B5837A22984A7534A5321B83459E436AE4C498702EA14A77D3F78DAEA47BA0 1BE6CFAD95132683BCE0601F3EDDEFF5207FD5FF3CC9093ABD946CC7C1076DB9 4DAF08C682269CEE980159541D92FFE484B7440E5AC58D7707BAE579605D1EB6 42C396807AA13B3ACEDBF3A465CBD56F076FA9319E43907B6522904F92483537 6102700CEAA52EE916B80AA4C5F8C98C9AC9557F97784F075D37A83649D632F5 82A519507162012A671F3B4DBAC454D920606E9C87CADCAA1172A04E445A28A7 0FA9545E5FFD15302664B5C2C4F479C8C760C2A015F5F5CB51EC6C0260154D37 4A65B01E58B458ED0FEBBE74884C9DF7D50770153FB498E94F65475A5EA6A687 543DEA3156D3E5CEE23923120DF4D561D2C082F1F3BFC5039A1DFC1C9C3A328E 6F879AB979F2C177FBA357FD63F8CC21E8AF632D6B01A3AC3EA7DE91C17B8120 42E78A1AA2E04581B1C434A8147DBE81A87C73782DAF4BD5F309280FEA22DBAF 586AF386182364E45D7DEAFFA74E338E875B64B13CFC909B30E074D777D347ED 3A58A82D5F6A6E913054F9FABFDD9ABD8BBF54DC3480F3A90965A0081092714B D77604CC7275050DBCCC800BCD8E2BA540B18CB07AF27D66F8887A571685600F 3FF8C7A4966A8CF8CB25DE0495CD4E048999ECE6579AFA82D1644FE160E2D3F0 EE7CE89045332B172425D7D1443E8DD9043A12042ADD7EC106CB4DAAEAB310E5 85F93869A1C519DC0E3CF8F4C05030F0BF7054C5859A74ECE7D6FC5644C5B84A F3EDF0C4B2DCDD0D193599CB3CA00464A90AB55674F884001EC896726A9B374B 3A73AECDCBE06895E87FCE6267091C6CED0E779DEC36D8CC35184E00247AB90C 37161FFEE7CABFD7499859042093BCAE22D6B811FD16EFBC8AAE6283881C12CA 98E0792640063169F76B18EF543AFE7951E82EDB1DB9597F2F9C959B69943379 CC7F5BDBD1BAFF7C77AD8D504D5F17E1B7DFFC515AC237748D33FB6B9D7DD903 2F3E9768290A90A5FC5EA516A94C1885B17676D33CE4124CED1359E473305B02 03C28731C0FC52B18FC14360C9494FF2A86AEE929E4022ACB78C02ADD6174FD0 D35105BB00643F6560A9CCBB3E5CE2F79F0EB9BA774D27DC476867C991598380 F77CC0444500CF43DAB8D729B31EA5A3184F178F82622A8B711A9CA6A770971C 521C44969E814B44D8E1927C283E6A38B78D7C258630730EA463FEEEAB263838 2A517BA176D1C137AAE7430532FFB0FFCA8BF110DECB42B1A7A9457A9ECCABFA D6CC11CD925518857AAA8498CEF35377CF92FEA77C09E6AE25DB2D09F1E355BD 7F7F5C72A76315F3C2B6BEA1AF7BA5D0E8000778A0FB2C60FF677ADBA9156A11 A5B0B7AE92DB368571C040FD7A29C3DF384CCC29A0E9F40FA385630D23AC1E97 C15C06848761CC7D19D208BC115A6A2933056BCEB3717CE2488E86D0B0D6D276 22B2FF1E77FA719372BE62A5B6E10D3DFCA57DE70AE16C57718B86C58B6A7F3D C6DD45D7559F9A0ED8889E707FE7622997F2D573F7688621245E0FB3D34A08C6 40B72F4BDA0394CBF90735B9E6B3928AD56F50FEF9A5DA8B195008164EC03424 7F5317FB8157C33F6903FD6D4B4728F82F1B02046DA16F4285DF088E08A136FD 1366494E3F5AEBED4B48B3B9072BC811A700940FF4B2A51C0434ABF225B37BBF E4AB11F394332D66393420D4B843CAB6AAD9C32418CFE6A2A1260BF430E61176 4B1762E3C9F1727BA47AAE4C7589E7099A56F5E1CB6BD64C0C8D026ED60EAFBC BAD1476E98F5F12ED94BDB1E4B0D8FE9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (readline.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 133[34 41 41 55 41 43 30 30 30 41 43 38 43 64 21 41 1[21 43 38 23 34 43 34 43 38 39[38 38 38 38 38 38 38 38 38 38 2[26 21 30[43 43 12[{}39 74.7198 /CMR9 rf /Fc 134[39 39 2[39 39 39 39 2[39 39 39 39 2[39 39 1[39 39 39 2[39 19[39 27[39 39 2[39 45[{}20 74.7198 /CMSLTT10 rf /Fd 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fe 129[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 3[39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 33[{}86 74.7198 /CMTT9 rf /Ff 134[53 53 72 53 55 39 39 39 53 55 50 55 83 28 53 1[28 55 50 30 44 55 44 55 50 20[62 77 1[36 2[65 68 22[28 1[28 1[50 28[55 55 12[{}34 99.6264 /CMSL10 rf /Fg 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fh 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 18[52 52 1[52 2[52 52 9[52 16[52 42[{}33 99.6264 /CMTT10 rf /Fi 134[65 65 89 65 68 48 48 50 1[68 61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 7[93 1[127 93 94 85 68 92 3[96 116 74 96 1[46 96 1[77 81 1[89 87 93 7[61 61 61 61 61 61 61 61 61 61 1[34 46[{}52 109.091 /CMBX12 rf /Fj 133[40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 9[93 1[68 66 51 67 1[62 71 68 83 57 71 1[33 68 1[59 62 69 66 64 68 15[45 45 2[30 31[51 51 12[{}49 90.9091 /CMSL10 rf /Fk 134[44 1[60 42 49 30 37 38 1[46 46 51 74 23 2[28 1[42 1[42 46 42 1[46 84[51 12[{}19 90.9091 /CMTI10 rf /Fl 134[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 1[48 2[48 14[48 48 1[48 1[48 2[48 48 48 17[48 48 2[48 5[48 39[{}37 90.9091 /CMSLTT10 rf /Fm 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 1[56 97[{}12 90.9091 /CMCSC10 rf /Fn 197[25 58[{}1 90.9091 /CMMI10 rf /Fo 197[33 58[{}1 119.552 /CMMI12 rf /Fp 135[85 117 1[90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 112 1[120 1[110 1[126 1[97 2[60 1[127 101 106 124 117 1[122 14[81 81 49[{}36 143.462 /CMBX12 rf /Fq 242[91 13[{}1 90.9091 /CMSY10 rf /Fr 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 7[102 1[139 102 103 94 75 100 101 92 101 105 128 81 105 1[50 105 106 85 88 103 97 96 102 6[37 2[67 67 67 67 67 67 67 2[37 1[37 44[{}55 119.552 /CMBX12 rf /Fs 129[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 33[{}91 90.9091 /CMTT10 rf /Ft 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 71 4[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 2[45 1[45 19[76 51 51 53 11[{}84 90.9091 /CMR10 rf /Fu 134[102 6[79 3[108 1[54 2[54 3[88 108 1[108 94 11[149 2[144 3[151 1[116 4[152 71[{}14 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fu(GNU)65 b(Readline)g(Library)p 150 1418 3600 34 v 1873 1515 a Ft(Edition)30 b(7.0,)i(for)e Fs(Readline)e(Library)h Ft(V)-8 b(ersion)31 b(7.0.)3367 1623 y(July)f(2016)150 4927 y Fr(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) -11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Ft(This)40 b(man)m(ual)g(describ)s(es) g(the)g(GNU)h(Readline)g(Library)f(\(v)m(ersion)h(7.0,)j(16)e(July)d (2016\),)46 b(a)40 b(library)150 4523 y(whic)m(h)f(aids)g(in)g(the)g (consistency)h(of)g(user)e(in)m(terface)j(across)f(discrete)g(programs) e(whic)m(h)h(pro)m(vide)h(a)150 4633 y(command)30 b(line)h(in)m (terface.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fq(\015)f Ft(1988{2016)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F) -8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h(to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s (dify)e(this)i(do)s(cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g (License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion) 390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er) 31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Ft(i)150 299 y Fp(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 649 y Fr(1)135 b(Command)45 b(Line)g(Editing)26 b Fo(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)39 b Fr(1)275 786 y Ft(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f (Editing)17 b Fn(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)31 b Ft(1)275 896 y(1.2)92 b(Readline)31 b(In)m(teraction)19 b Fn(:)e(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)32 b Ft(1)399 1005 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)18 b Fn(:)e(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)31 b Ft(1)399 1115 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i (Commands)18 b Fn(:)d(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)32 b Ft(2)399 1225 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)10 b Fn(:)k(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)23 b Ft(2)399 1334 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)22 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)36 b Ft(3)399 1444 y(1.2.5)93 b(Searc)m(hing)31 b(for)f(Commands)f(in)h(the)h(History)20 b Fn(:)c(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)33 b Ft(3)275 1553 y(1.3)92 b(Readline)31 b(Init)f(File)13 b Fn(:)k(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)27 b Ft(4)399 1663 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)26 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) 39 b Ft(4)399 1773 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)16 b Fn(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Ft(12)399 1882 y(1.3.3)93 b(Sample)30 b(Init)g(File)22 b Fn(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)35 b Ft(12)275 1992 y(1.4)92 b(Bindable)30 b(Readline)h(Commands)22 b Fn(:)15 b(:)g(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)35 b Ft(16)399 2101 y(1.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)18 b Fn(:)f(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)31 b Ft(16)399 2211 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)f Fn(:)15 b(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Ft(16)399 2320 y(1.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)12 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)25 b Ft(18)399 2430 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)13 b Fn(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)26 b Ft(19)399 2540 y(1.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)e Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)41 b Ft(20)399 2649 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)22 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)35 b Ft(21)399 2759 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)11 b Fn(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)24 b Ft(21)399 2868 y(1.4.8)93 b(Some)30 b(Miscellaneous)j(Commands)16 b Fn(:)e(:)h(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)29 b Ft(22)275 2978 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)10 b Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)23 b Ft(23)150 3229 y Fr(2)135 b(Programming)46 b(with)f(GNU)g(Readline)37 b Fo(:)19 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)48 b Fr(24)275 3366 y Ft(2.1)92 b(Basic)31 b(Beha)m(vior)23 b Fn(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)36 b Ft(24)275 3475 y(2.2)92 b(Custom)29 b(F)-8 b(unctions)19 b Fn(:)d(:)g(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)32 b Ft(25)399 3585 y(2.2.1)93 b(Readline)31 b(T)m(yp)s(edefs)17 b Fn(:)e(:)g(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)30 b Ft(26)399 3694 y(2.2.2)93 b(W)-8 b(riting)31 b(a)g(New)g(F)-8 b(unction)24 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)37 b Ft(26)275 3804 y(2.3)92 b(Readline)31 b(V)-8 b(ariables)11 b Fn(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)24 b Ft(27)275 3914 y(2.4)92 b(Readline)31 b(Con)m(v)m(enience)g(F)-8 b(unctions)22 b Fn(:)16 b(:)g(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)35 b Ft(32)399 4023 y(2.4.1)93 b(Naming)31 b(a)g(F)-8 b(unction)21 b Fn(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)34 b Ft(32)399 4133 y(2.4.2)93 b(Selecting)32 b(a)e(Keymap)9 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)22 b Ft(32)399 4242 y(2.4.3)93 b(Binding)30 b(Keys)15 b Fn(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)28 b Ft(33)399 4352 y(2.4.4)93 b(Asso)s(ciating)32 b(F)-8 b(unction)31 b(Names)g(and)e(Bindings)d Fn(:)16 b(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)39 b Ft(35)399 4462 y(2.4.5)93 b(Allo)m(wing)32 b(Undoing)26 b Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)40 b Ft(36)399 4571 y(2.4.6)93 b(Redispla)m(y)10 b Fn(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)23 b Ft(37)399 4681 y(2.4.7)93 b(Mo)s(difying)30 b(T)-8 b(ext)16 b Fn(:)g(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)28 b Ft(38)399 4790 y(2.4.8)93 b(Character)31 b(Input)22 b Fn(:)13 b(:)j(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)35 b Ft(38)399 4900 y(2.4.9)93 b(T)-8 b(erminal)30 b(Managemen)m(t)17 b Fn(:)h(:)d(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)30 b Ft(39)399 5010 y(2.4.10)93 b(Utilit)m(y)33 b(F)-8 b(unctions)24 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)36 b Ft(40)399 5119 y(2.4.11)93 b(Miscellaneous)33 b(F)-8 b(unctions)23 b Fn(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)36 b Ft(41)399 5229 y(2.4.12)93 b(Alternate)32 b(In)m(terface)27 b Fn(:)15 b(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)38 b Ft(42)399 5338 y(2.4.13)93 b(A)31 b(Readline)g(Example)12 b Fn(:)j(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)25 b Ft(43)p eop end %%Page: -2 4 TeXDict begin -2 3 bop 3699 -116 a Ft(ii)399 83 y(2.4.14)93 b(Alternate)32 b(In)m(terface)g(Example)18 b Fn(:)e(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)31 b Ft(44)275 193 y(2.5)92 b(Readline)31 b(Signal)f(Handling)18 b Fn(:)e(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)31 b Ft(46)275 302 y(2.6)92 b(Custom)29 b(Completers)e Fn(:)16 b(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)40 b Ft(49)399 412 y(2.6.1)93 b(Ho)m(w)31 b(Completing)g(W)-8 b(orks)11 b Fn(:)16 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)24 b Ft(49)399 521 y(2.6.2)93 b(Completion)31 b(F)-8 b(unctions)28 b Fn(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b Ft(50)399 631 y(2.6.3)93 b(Completion)31 b(V)-8 b(ariables)18 b Fn(:)e(:)g(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)31 b Ft(51)399 741 y(2.6.4)93 b(A)30 b(Short)g(Completion)h(Example)15 b Fn(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)28 b Ft(56)150 991 y Fr(App)t(endix)44 b(A)119 b(GNU)39 b(F)-11 b(ree)38 b(Do)t(cumen)l(tation)i(License)25 b Fo(:)20 b(:)32 b Fr(65)150 1269 y(Concept)45 b(Index)36 b Fo(:)19 b(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:) h(:)49 b Fr(73)150 1548 y(F)-11 b(unction)44 b(and)h(V)-11 b(ariable)45 b(Index)20 b Fo(:)g(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)33 b Fr(74)p eop end %%Page: 1 5 TeXDict begin 1 4 bop 3705 -116 a Ft(1)150 299 y Fp(1)80 b(Command)54 b(Line)f(Editing)150 527 y Ft(This)30 b(c)m(hapter)h (describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fm(gnu)g Ft(command)h(line)f(editing)h(in)m(terface.)150 766 y Fr(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 925 y Ft(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h (notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 1058 y(The)35 b(text)i Fl(C-k)f Ft(is)g(read)g(as)h(`Con)m(trol-K')g (and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h Fs(k)150 1168 y Ft(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fl(M-k)e Ft(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h (ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fs(k)g Ft(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s (eled)f Fs(ALT)150 1521 y Ft(on)c(man)m(y)h(k)m(eyb)s(oards.)40 b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g Fs(ALT)e Ft(\(usually)i(to)g(either)g(side)g(of)g(the)150 1630 y(space)h(bar\),)f(the)g Fs(ALT)f Ft(on)h(the)g(left)h(side)f(is)g (generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 b(.)42 b(The)29 b Fs(ALT)g Ft(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h (ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i (k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f (t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1983 y(If)23 b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fs(ALT)e Ft(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g (Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2092 y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g Fs(ESC)e Fk(\014rst)p Ft(,)j(and)e(then)g(t)m(yping)h Fs(k)p Ft(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 2202 y(as)j Fj(metafying)39 b Ft(the)30 b Fs(k)g Ft(k)m(ey)-8 b(.)275 2335 y(The)39 b(text)j Fl(M-C-k)d Ft(is)h(read)g(as)h (`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i (pro)s(duced)d(b)m(y)150 2445 y Fj(metafying)g Fl(C-k)p Ft(.)275 2578 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g (their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 b Fs(DEL)p Ft(,)f Fs(ESC)p Ft(,)g Fs(LFD)p Ft(,)g Fs(SPC)p Ft(,)g Fs(RET)p Ft(,)150 2688 y(and)d Fs(TAB)f Ft(all)j(stand)e(for)g (themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) h(\014le)f(\(see)i(Section)f(1.3)150 2797 y([Readline)c(Init)e(File],)j (page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f Fs(LFD)f Ft(k)m(ey)-8 b(,)31 b(t)m(yping)g Fs(C-j)d Ft(will)i(pro)s (duce)f(the)150 2907 y(desired)h(c)m(haracter.)42 b(The)30 b Fs(RET)g Ft(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i Fs(Return)e Ft(or)h Fs(Enter)f Ft(on)h(some)h(k)m(eyb)s(oards.)150 3145 y Fr(1.2)68 b(Readline)47 b(In)l(teraction)150 3305 y Ft(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g (that)f(the)150 3414 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g (missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g (a)g(set)g(of)f(commands)g(for)150 3524 y(manipulating)e(the)g(text)h (as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h (just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 3634 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m (ou)h(mo)m(v)m(e)g(the)g(cursor)150 3743 y(to)35 b(the)f(place)i(that)e (needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g (the)f(corrections.)54 b(Then,)150 3853 y(when)24 b(y)m(ou)h(are)g (satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g Fs(RET)p Ft(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e (at)h(the)h(end)150 3962 y(of)33 b(the)h(line)g(to)g(press)e Fs(RET)p Ft(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g (of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4072 y(within)c(the)g(line.)150 4269 y Fi(1.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)150 4416 y Ft(In)31 b(order)h(to)h(en)m(ter)g(c) m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 4525 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4635 y(c)m(haracter,)f(y)m(ou)f(can)g (use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f (delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4768 y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g (and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) m(yp)s(ed)150 4878 y(sev)m(eral)e(other)f(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h Fl(C-b)d Ft(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g (with)f Fl(C-f)p Ft(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m (haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h (`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h (that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m (haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p eop end %%Page: 2 6 TeXDict begin 2 5 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g (remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g (bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g (an)f(input)f(line)i(follo)m(ws.)150 571 y Fl(C-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 732 y Fl(C-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) 150 893 y Fs(DEL)e Ft(or)i Fs(Backspace)630 1003 y Ft(Delete)i(the)d(c) m(haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 1164 y Fl(C-d)336 b Ft(Delete)33 b(the)d(c)m(haracter)i(underneath)d (the)i(cursor.)150 1325 y(Prin)m(ting)g(c)m(haracters)630 1435 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g (cursor.)150 1596 y Fl(C-_)e Ft(or)i Fl(C-x)e(C-u)630 1706 y Ft(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g (empt)m(y)630 1815 y(line.)150 1977 y(\(Dep)s(ending)29 b(on)h(y)m(our)f(con\014guration,)i(the)e Fs(Backspace)e Ft(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) 150 2087 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g Fs(DEL)g Ft(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i (underneath)d(the)h(cursor,)i(lik)m(e)150 2196 y Fl(C-d)p Ft(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g (the)f(cursor.\))150 2398 y Fi(1.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)150 2545 y Ft(The)27 b(ab)s(o)m(v)m(e)i (table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f (y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 2654 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m (enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g (in)h(addition)150 2764 y(to)j Fl(C-b)p Ft(,)f Fl(C-f)p Ft(,)g Fl(C-d)p Ft(,)h(and)e Fs(DEL)p Ft(.)54 b(Here)35 b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h (the)150 2873 y(line.)150 3035 y Fl(C-a)336 b Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150 3197 y Fl(C-e)336 b Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 3358 y Fl(M-f)336 b Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f (where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) 150 3519 y Fl(M-b)336 b Ft(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m (ord.)150 3680 y Fl(C-l)336 b Ft(Clear)31 b(the)f(screen,)h(reprin)m (ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 3843 y(Notice)c(ho)m(w)f Fl(C-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m (haracter,)j(while)d Fl(M-f)e Ft(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m (ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3952 y(con)m(v)m(en)m(tion)32 b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m (haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 4062 y(w)m(ords.)150 4263 y Fi(1.2.3)63 b(Readline)40 b(Killing)i(Commands)150 4410 y Fj(Killing)35 b Ft(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h (sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 4519 y(b)m(y)g Fj(y)m(anking)35 b Ft(\(re-inserting\))28 b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 4629 y(`kill')32 b(and)d(`y)m(ank'.\))275 4765 y(If)g(the)i (description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g (text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 4875 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g (\(or)g(the)f(same\))h(place)h(later.)275 5011 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i (in)e(a)g Fj(kill-ring)p Ft(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h (consecutiv)m(e)150 5121 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g (killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f (bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5230 y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g (that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f (is)h(a)m(v)-5 b(ailable)150 5340 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)p eop end %%Page: 3 7 TeXDict begin 3 6 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(3)275 299 y(Here)30 b(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)150 456 y Fl(C-k)336 b Ft(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g (cursor)g(p)s(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 614 y Fl(M-d)336 b Ft(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g (of)h(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m (ords,)g(to)g(the)630 723 y(end)j(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) f(b)m(y)g Fl(M-f)p Ft(.)150 881 y Fl(M-DEL)240 b Ft(Kill)31 b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 991 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m (y)630 1100 y Fl(M-b)p Ft(.)150 1258 y Fl(C-w)336 b Ft(Kill)35 b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 b(This)34 b(is)h(di\013eren)m(t)h(than)e Fl(M-DEL)630 1367 y Ft(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 1525 y(Here)42 b(is)f(ho)m(w)h(to)g Fj(y)m(ank)47 b Ft(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150 1634 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150 1792 y Fl(C-y)336 b Ft(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m (k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 1949 y Fl(M-y)336 b Ft(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h (the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h (the)g(prior)630 2059 y(command)30 b(is)h Fl(C-y)e Ft(or)h Fl(M-y)p Ft(.)150 2256 y Fi(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 2403 y Ft(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f (Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 2513 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g Fk(sign)47 b Ft(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m (t.)71 b(If)40 b(y)m(ou)150 2622 y(pass)33 b(a)h(negativ)m(e)i(argumen) m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m (ard)f(direction,)i(that)150 2732 y(command)g(will)h(act)g(in)f(a)h (bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g (text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2842 y(the)31 b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fs(M--)f(C-k)p Ft('.)275 2975 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g (argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i (digits)e(b)s(efore)150 3085 y(the)j(command.)42 b(If)30 b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h (\(`)p Fs(-)p Ft('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 3194 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m (e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h (started,)i(y)m(ou)150 3304 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f (of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fl(C-d)150 3414 y Ft(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f (t)m(yp)s(e)h(`)p Fs(M-1)29 b(0)h(C-d)p Ft(',)39 b(whic)m(h)e(will)h (delete)h(the)e(next)h(ten)150 3523 y(c)m(haracters)32 b(on)e(the)h(input)e(line.)150 3720 y Fi(1.2.5)63 b(Searc)m(hing)40 b(for)i(Commands)g(in)f(the)g(History)150 3867 y Ft(Readline)22 b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g (command)h(history)f(for)g(lines)g(con)m(taining)150 3977 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fj(incremen)m(tal)35 b Ft(and)30 b Fj(non-incremen)m(tal)p Ft(.)275 4111 y(Incremen)m(tal)c (searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e (t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 4220 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s (ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i (history)150 4330 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g (far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g (man)m(y)g(c)m(haracters)i(as)150 4439 y(needed)i(to)i(\014nd)d(the)i (desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i (particular)150 4549 y(string,)g(t)m(yp)s(e)f Fl(C-r)p Ft(.)40 b(T)m(yping)29 b Fl(C-s)g Ft(searc)m(hes)h(forw)m(ard)f (through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m (t)150 4658 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g Fs(isearch-terminators)33 b Ft(v)-5 b(ariable)39 b(are)f(used)f(to)i (terminate)g(an)f(incremen)m(tal)150 4768 y(searc)m(h.)71 b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i (a)f(v)-5 b(alue,)44 b(the)c Fs(ESC)g Ft(and)f Fl(C-J)h Ft(c)m(haracters)i(will)150 4878 y(terminate)h(an)g(incremen)m(tal)g (searc)m(h.)78 b Fl(C-g)41 b Ft(will)i(ab)s(ort)f(an)g(incremen)m(tal)i (searc)m(h)f(and)f(restore)h(the)150 4987 y(original)30 b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f (history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 5097 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5230 y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h (history)g(list,)h(t)m(yp)s(e)g Fl(C-r)e Ft(or)h Fl(C-s)f Ft(as)h(appropriate.)43 b(This)150 5340 y(will)26 b(searc)m(h)h(bac)m (kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g (en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)p eop end %%Page: 4 8 TeXDict begin 4 7 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i(sequence)f(b)s(ound)e(to) i(a)g(Readline)h(command)e(will)h(terminate)h(the)150 408 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f Fs(RET)f Ft(will)g(terminate)i(the)f (searc)m(h)g(and)e(accept)150 518 y(the)30 b(line,)g(thereb)m(y)f (executing)i(the)e(command)g(from)g(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will)150 628 y(terminate)i(the)g (searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g(found)e(the)i(curren)m(t)f (line,)h(and)f(b)s(egin)g(editing.)275 777 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g(searc)m(h)f(string.) 54 b(If)34 b(t)m(w)m(o)j Fl(C-r)p Ft(s)c(are)i(t)m(yp)s(ed)g(without) 150 886 y(an)m(y)i(in)m(terv)m(ening)g(c)m(haracters)h(de\014ning)e(a)h (new)f(searc)m(h)h(string,)h(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i (string)g(is)150 996 y(used.)275 1145 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s (efore)f(starting)h(to)h(searc)m(h)f(for)150 1255 y(matc)m(hing)d (history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f (t)m(yp)s(ed)g(b)m(y)g(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1364 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 1627 y Fr(1.3)68 b(Readline)47 b(Init)e(File)150 1786 y Ft(Although)f(the)g(Readline)g(library)f(comes)i(with)e(a)h(set)h(of) f(Emacs-lik)m(e)h(k)m(eybindings)f(installed)g(b)m(y)150 1896 y(default,)26 b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren) m(t)f(set)g(of)g(k)m(eybindings.)38 b(An)m(y)25 b(user)f(can)h (customize)h(programs)150 2005 y(that)45 b(use)f(Readline)h(b)m(y)f (putting)g(commands)g(in)g(an)g Fj(inputrc)49 b Ft(\014le,)g(con)m(v)m (en)m(tionally)e(in)d(his)g(home)150 2115 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h(\014le)f(is)g(tak)m(en)i(from)e (the)g(v)-5 b(alue)24 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b Fs(INPUTRC)p Ft(.)150 2224 y(If)30 b(that)g(v)-5 b(ariable)31 b(is)f(unset,)g(the)h(default)f(is)g Fs(~/.inputrc)p Ft(.)38 b(If)30 b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h (b)s(e)150 2334 y(read,)g(the)f(ultimate)i(default)e(is)h Fs(/etc/inputrc)p Ft(.)275 2483 y(When)e(a)h(program)f(whic)m(h)h(uses) f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h (read,)g(and)f(the)150 2593 y(k)m(ey)i(bindings)e(are)i(set.)275 2742 y(In)26 b(addition,)i(the)f Fs(C-x)i(C-r)d Ft(command)h(re-reads)g (this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m (hanges)150 2851 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g (it.)150 3065 y Fi(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 3212 y Ft(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 b(lines)h(are)150 3322 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h (a)g(`)p Fs(#)p Ft(')g(are)h(commen)m(ts.)73 b(Lines)41 b(b)s(eginning)f(with)g(a)i(`)p Fs($)p Ft(')f(indicate)150 3431 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h ([Conditional)f(Init)f(Constructs],)j(page)f(12\).)74 b(Other)150 3541 y(lines)31 b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 3722 y(V)-8 b(ariable)32 b(Settings)630 3832 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e (the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h (the)g(v)-5 b(alues)41 b(of)630 3941 y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g Fs(set)g Ft(command)g(within)g(the)h (init)g(\014le.)50 b(The)33 b(syn)m(tax)630 4051 y(is)d(simple:)870 4193 y Fs(set)47 b Fl(variable)e(value)630 4335 y Ft(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default) h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 4444 y(use)k Fs(vi)g Ft(line)h(editing)g(commands:)870 4586 y Fs(set)47 b(editing-mode)d(vi)630 4728 y Ft(V)-8 b(ariable)36 b(names)f(and)g(v) -5 b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f (regard)630 4837 y(to)c(case.)42 b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 4979 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g (o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5 b(alue)26 b(is)630 5089 y(n)m(ull)e(or)g(empt)m(y)-8 b(,)27 b Fj(on)d Ft(\(case-insensitiv)m(e\),)29 b(or)24 b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) -5 b(ariable)630 5198 y(b)s(eing)30 b(set)h(to)g(o\013.)630 5340 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m (hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)p eop end %%Page: 5 9 TeXDict begin 5 8 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(5)630 299 y Fs(bell-style)1110 408 y Ft(Con)m(trols)44 b(what)g(happ)s(ens)e(when)h(Readline)i(w)m(an) m(ts)f(to)h(ring)e(the)h(termi-)1110 518 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p Fs(none)p Ft(',)g(Readline)g(nev)m(er)g(rings) e(the)i(b)s(ell.)61 b(If)36 b(set)i(to)1110 628 y(`)p Fs(visible)p Ft(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g (one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 737 y(`)p Fs(audible)p Ft(')j(\(the)i(default\),)i(Readline)e(attempts) g(to)h(ring)e(the)g(terminal's)1110 847 y(b)s(ell.)630 993 y Fs(bind-tty-special-chars)1110 1103 y Ft(If)e(set)g(to)h(`)p Fs(on)p Ft(')f(\(the)g(default\),)i(Readline)f(attempts)g(to)g(bind)d (the)i(con)m(trol)1110 1212 y(c)m(haracters)30 b(treated)g(sp)s (ecially)g(b)m(y)f(the)g(k)m(ernel's)h(terminal)f(driv)m(er)g(to)h (their)1110 1322 y(Readline)h(equiv)-5 b(alen)m(ts.)630 1468 y Fs(blink-matching-paren)1110 1577 y Ft(If)36 b(set)g(to)h(`)p Fs(on)p Ft(',)h(Readline)f(attempts)g(to)g(brie\015y)e(mo)m(v)m(e)j (the)f(cursor)e(to)i(an)1110 1687 y(op)s(ening)k(paren)m(thesis)h(when) f(a)h(closing)h(paren)m(thesis)e(is)h(inserted.)74 b(The)1110 1797 y(default)31 b(is)f(`)p Fs(off)p Ft('.)630 1943 y Fs(colored-completion-prefi)o(x)1110 2052 y Ft(If)f(set)h(to)g(`)p Fs(on)p Ft(',)g(when)e(listing)i(completions,)h(Readline)f(displa)m(ys) g(the)f(com-)1110 2162 y(mon)c(pre\014x)f(of)i(the)f(set)h(of)g(p)s (ossible)f(completions)h(using)f(a)h(di\013eren)m(t)g(color.)1110 2271 y(The)39 b(color)i(de\014nitions)f(are)g(tak)m(en)h(from)f(the)g (v)-5 b(alue)40 b(of)g(the)g Fs(LS_COLORS)1110 2381 y Ft(en)m(vironmen)m(t)31 b(v)-5 b(ariable.)41 b(The)30 b(default)h(is)f(`)p Fs(off)p Ft('.)630 2527 y Fs(colored-stats)1110 2637 y Ft(If)c(set)h(to)g(`)p Fs(on)p Ft(',)h(Readline)f(displa)m(ys)g (p)s(ossible)f(completions)h(using)f(di\013eren)m(t)1110 2746 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110 2856 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Fs(LS_COLORS)d Ft(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110 2966 y(is)30 b(`)p Fs(off)p Ft('.)630 3112 y Fs(comment-begin)1110 3221 y Ft(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) h(the)h(line)f(when)g(the)1110 3331 y Fs(insert-comment)26 b Ft(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f Fs("#")p Ft(.)630 3477 y Fs(completion-display-width) 1110 3587 y Ft(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 3696 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 3806 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 3915 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e (line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 4061 y Fs(completion-ignore-case)1110 4171 y Ft(If)d(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i (and)e(completion)1110 4281 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) 40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fs(off)p Ft('.)630 4427 y Fs(completion-map-case)1110 4536 y Ft(If)22 b(set)g(to)h(`)p Fs(on)p Ft(',)h(and)e Fj(completion-ignore-case)31 b Ft(is)22 b(enabled,)i(Readline)f(treats)1110 4646 y(h)m(yphens)29 b(\(`)p Fs(-)p Ft('\))j(and)e(underscores)g(\(`)p Fs(_)p Ft('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 4756 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e (completion.)630 4902 y Fs(completion-prefix-displa)o(y-le)o(ngth)1110 5011 y Ft(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h (pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 5121 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s (di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 5230 y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e (longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 5340 y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) f(completions.)p eop end %%Page: 6 10 TeXDict begin 6 9 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(6)630 299 y Fs (completion-query-items)1110 408 y Ft(The)26 b(n)m(um)m(b)s(er)f(of)h (p)s(ossible)g(completions)h(that)g(determines)f(when)f(the)i(user)1110 518 y(is)i(ask)m(ed)h(whether)f(the)h(list)g(of)f(p)s(ossibilities)h (should)e(b)s(e)h(displa)m(y)m(ed.)41 b(If)29 b(the)1110 628 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)f(completions)i(is)f(greater)h (than)e(this)h(v)-5 b(alue,)28 b(Readline)1110 737 y(will)f(ask)g(the)f (user)g(whether)g(or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i (otherwise,)1110 847 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m (teger)g(v)-5 b(alue)1110 956 y(greater)26 b(than)f(or)f(equal)i(to)f (0.)40 b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i (should)1110 1066 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g (is)g Fs(100)p Ft(.)630 1285 y Fs(convert-meta)1110 1395 y Ft(If)22 b(set)g(to)h(`)p Fs(on)p Ft(',)h(Readline)f(will)f(con)m(v)m (ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 1504 y(to)33 b(an)e Fm(asci)r(i)h Ft(k)m(ey)h(sequence)f(b)m(y)g (stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 1614 y(an)24 b Fs(ESC)g Ft(c)m(haracter,)j(con)m(v)m(erting)f(them)f (to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 1724 y(The)i(default)h(v)-5 b(alue)28 b(is)f(`)p Fs(on)p Ft(',)i(but)d(will) i(b)s(e)f(set)h(to)g(`)p Fs(off)p Ft(')g(if)f(the)h(lo)s(cale)h(is)f (one)1110 1833 y(that)j(con)m(tains)h(eigh)m(t-bit)g(c)m(haracters.)630 2052 y Fs(disable-completion)1110 2162 y Ft(If)k(set)h(to)h(`)p Fs(On)p Ft(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110 2271 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h (in)m(to)h(the)g(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110 2381 y(to)31 b Fs(self-insert)p Ft(.)38 b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 2600 y Fs(echo-control-characters)1110 2710 y Ft(When)f(set)h(to)g(`)p Fs(on)p Ft(',)f(on)g(op)s(erating)h (systems)f(that)h(indicate)g(they)g(supp)s(ort)1110 2819 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m(haracter)h(corresp)s(onding)d (to)j(a)f(signal)g(generated)1110 2929 y(from)e(the)g(k)m(eyb)s(oard.) 41 b(The)30 b(default)g(is)h(`)p Fs(on)p Ft('.)630 3148 y Fs(editing-mode)1110 3258 y Ft(The)d Fs(editing-mode)e Ft(v)-5 b(ariable)29 b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k) m(ey)i(bind-)1110 3367 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f(up)f(in)h(Emacs)g(editing)h(mo)s(de,) 1110 3477 y(where)j(the)g(k)m(eystrok)m(es)i(are)e(most)h(similar)f(to) h(Emacs.)40 b(This)29 b(v)-5 b(ariable)30 b(can)1110 3587 y(b)s(e)g(set)h(to)g(either)g(`)p Fs(emacs)p Ft(')e(or)h(`)p Fs(vi)p Ft('.)630 3806 y Fs(emacs-mode-string)1110 3915 y Ft(This)f(string)h(is)f(displa)m(y)m(ed)i(immediately)g(b)s(efore)e (the)h(last)g(line)h(of)e(the)h(pri-)1110 4025 y(mary)43 b(prompt)g(when)f(emacs)i(editing)g(mo)s(de)f(is)g(activ)m(e.)82 b(The)43 b(v)-5 b(alue)44 b(is)1110 4134 y(expanded)28 b(lik)m(e)i(a)f(k)m(ey)g(binding,)f(so)h(the)g(standard)f(set)h(of)g (meta-)g(and)f(con-)1110 4244 y(trol)36 b(pre\014xes)e(and)h(bac)m (kslash)h(escap)s(e)g(sequences)g(is)f(a)m(v)-5 b(ailable.)58 b(Use)36 b(the)1110 4354 y(`)p Fs(\\1)p Ft(')i(and)f(`)p Fs(\\2)p Ft(')h(escap)s(es)g(to)h(b)s(egin)e(and)h(end)f(sequences)h (of)g(non-prin)m(ting)1110 4463 y(c)m(haracters,)27 b(whic)m(h)c(can)h (b)s(e)f(used)f(to)j(em)m(b)s(ed)e(a)h(terminal)g(con)m(trol)h (sequence)1110 4573 y(in)m(to)31 b(the)g(mo)s(de)f(string.)41 b(The)29 b(default)i(is)f(`)p Fs(@)p Ft('.)630 4792 y Fs(enable-bracketed-paste)1110 4902 y Ft(When)24 b(set)h(to)h(`)p Fs(On)p Ft(',)g(Readline)f(will)g(con\014gure)f(the)h(terminal)g(in)f (a)h(w)m(a)m(y)g(that)1110 5011 y(will)k(enable)f(it)h(to)g(insert)g (eac)m(h)g(paste)g(in)m(to)g(the)g(editing)g(bu\013er)e(as)i(a)f (single)1110 5121 y(string)33 b(of)f(c)m(haracters,)j(instead)e(of)g (treating)h(eac)m(h)g(c)m(haracter)g(as)f(if)f(it)i(had)1110 5230 y(b)s(een)e(read)i(from)e(the)i(k)m(eyb)s(oard.)49 b(This)32 b(can)h(prev)m(en)m(t)h(pasted)f(c)m(haracters)1110 5340 y(from)d(b)s(eing)g(in)m(terpreted)h(as)f(editing)h(commands.)41 b(The)29 b(default)i(is)f(`)p Fs(off)p Ft('.)p eop end %%Page: 7 11 TeXDict begin 7 10 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(7)630 299 y Fs(enable-keypad)1110 408 y Ft(When)23 b(set)h(to)g(`)p Fs(on)p Ft(',)h(Readline)f(will)g (try)f(to)h(enable)g(the)f(application)i(k)m(eypad)1110 518 y(when)h(it)h(is)f(called.)41 b(Some)27 b(systems)f(need)h(this)f (to)h(enable)g(the)g(arro)m(w)g(k)m(eys.)1110 628 y(The)j(default)g(is) h(`)p Fs(off)p Ft('.)630 800 y Fs(enable-meta-key)1110 909 y Ft(When)40 b(set)g(to)g(`)p Fs(on)p Ft(',)j(Readline)d(will)g (try)g(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 1019 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h (is)g(called.)76 b(On)41 b(man)m(y)1110 1129 y(terminals,)c(the)e(meta) h(k)m(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 b(The)1110 1238 y(default)31 b(is)f(`)p Fs(on)p Ft('.)630 1410 y Fs(expand-tilde)1110 1520 y Ft(If)d(set)h(to)h(`)p Fs(on)p Ft(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h (Readline)h(attempts)1110 1630 y(w)m(ord)i(completion.)42 b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 1802 y Fs(history-preserve-point)1110 1911 y Ft(If)41 b(set)h(to)h(`)p Fs(on)p Ft(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f (p)s(oin)m(t)f(\(the)1110 2021 y(curren)m(t)35 b(cursor)g(p)s (osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g (line)1110 2131 y(retriev)m(ed)h(with)f Fs(previous-history)c Ft(or)37 b Fs(next-history)p Ft(.)55 b(The)36 b(default)1110 2240 y(is)30 b(`)p Fs(off)p Ft('.)630 2412 y Fs(history-size)1110 2522 y Ft(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g (en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 2632 y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f (en)m(tries)g(are)g(deleted)h(and)e(no)1110 2741 y(new)e(en)m(tries)i (are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5 b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110 2851 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110 2960 y(en)m(tries)j(is)f(not)g(limited.)49 b(If)32 b(an)h(attempt)h(is) f(made)g(to)h(set)f Fj(history-size)39 b Ft(to)1110 3070 y(a)34 b(non-n)m(umeric)f(v)-5 b(alue,)34 b(the)g(maxim)m(um)f(n)m(um)m (b)s(er)f(of)h(history)h(en)m(tries)g(will)1110 3180 y(b)s(e)c(set)h(to)g(500.)630 3352 y Fs(horizontal-scroll-mode)1110 3461 y Ft(This)k(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f (`)p Fs(on)p Ft(')g(or)g(`)p Fs(off)p Ft('.)57 b(Setting)36 b(it)g(to)h(`)p Fs(on)p Ft(')1110 3571 y(means)26 b(that)h(the)f(text)h (of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m (tally)1110 3680 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i (are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 3790 y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g (line.)39 b(By)27 b(default,)g(this)1110 3900 y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Fs(off)p Ft('.)630 4072 y Fs(input-meta)1110 4181 y Ft(If)f(set)g(to)h(`)p Fs(on)p Ft(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) i(will)f(not)h(clear)1110 4291 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h (c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 4401 y(terminal)k(claims)h(it)f(can)g(supp)s(ort.)79 b(The)44 b(default)g(v)-5 b(alue)44 b(is)g(`)p Fs(off)p Ft(',)j(but)1110 4510 y(Readline)24 b(will)h(set)f(it)g(to)h(`)p Fs(on)p Ft(')e(if)h(the)g(lo)s(cale)i(con)m(tains)f(eigh)m(t-bit)g(c)m (haracters.)1110 4620 y(The)30 b(name)g Fs(meta-flag)e Ft(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5 b(ariable.)630 4792 y Fs(isearch-terminators)1110 4902 y Ft(The)51 b(string)h(of)g(c)m (haracters)h(that)f(should)e(terminate)j(an)f(incremen)m(tal)1110 5011 y(searc)m(h)25 b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m (haracter)h(as)f(a)g(command)1110 5121 y(\(see)45 b(Section)h(1.2.5)g ([Searc)m(hing],)j(page)d(3\).)84 b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 5230 y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h Fs(ESC)d Ft(and)h Fl(C-J)g Ft(will)h(terminate)g(an)1110 5340 y(incremen)m(tal)c(searc)m (h.)p eop end %%Page: 8 12 TeXDict begin 8 11 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(8)630 299 y Fs(keymap)192 b Ft(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h (for)g(k)m(ey)g(binding)f(com-)1110 408 y(mands.)81 b(Acceptable)47 b Fs(keymap)42 b Ft(names)i(are)h Fs(emacs)p Ft(,)i Fs(emacs-standard)p Ft(,)1110 518 y Fs(emacs-meta)p Ft(,)99 b Fs(emacs-ctlx)p Ft(,)f Fs(vi)p Ft(,)j Fs(vi-move)p Ft(,)f Fs(vi-command)p Ft(,)f(and)1110 628 y Fs(vi-insert)p Ft(.)81 b Fs(vi)44 b Ft(is)h(equiv)-5 b(alen)m(t)46 b(to)g Fs(vi-command)c Ft(\()p Fs(vi-move)h Ft(is)i(also)h(a)1110 737 y(synon)m(ym\);)g Fs(emacs)39 b Ft(is)i(equiv)-5 b(alen)m(t)42 b(to)g Fs(emacs-standard)p Ft(.)68 b(The)40 b(default)1110 847 y(v)-5 b(alue)52 b(is)f Fs(emacs)p Ft(.)103 b(The)51 b(v)-5 b(alue)52 b(of)f(the)h Fs(editing-mode)c Ft(v)-5 b(ariable)52 b(also)1110 956 y(a\013ects)32 b(the)e(default)h(k)m(eymap.)630 1113 y Fs(keyseq-timeout)1110 1223 y Ft(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m(ait)g(for)g(a)f(c)m(haracter)i (when)e(read-)1110 1332 y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h (sequence)f(\(one)g(that)h(can)f(form)g(a)g(complete)h(k)m(ey)1110 1442 y(sequence)j(using)e(the)i(input)e(read)h(so)g(far,)h(or)g(can)f (tak)m(e)i(additional)f(input)1110 1551 y(to)g(complete)g(a)f(longer)h (k)m(ey)f(sequence\).)49 b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h (within)1110 1661 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter)g(but)f(complete)j(k)m(ey)e(se-)1110 1771 y(quence.)c(Readline)26 b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h(input)1110 1880 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m(t)f(input)g (source)h(\()p Fs(rl_instream)d Ft(b)m(y)i(default\).)1110 1990 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h (milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that) 1110 2099 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g (additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23 b(is)1110 2209 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f (equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5 b(alue,)1110 2318 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h (k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110 2428 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g Fs(500)p Ft(.)630 2585 y Fs(mark-directories)1110 2694 y Ft(If)38 b(set)g(to)h(`)p Fs(on)p Ft(',)i(completed)e(directory) f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110 2804 y(The)30 b(default)g(is)h(`)p Fs(on)p Ft('.)630 2960 y Fs(mark-modified-lines)1110 3070 y Ft(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p Fs(on)p Ft(',)g(causes)g (Readline)f(to)h(displa)m(y)f(an)f(as-)1110 3180 y(terisk)f(\(`)p Fs(*)p Ft('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f (ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 3289 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fs(off)p Ft(')g(b)m(y)g(default.)630 3446 y Fs(mark-symlinked-directori)o(es)1110 3555 y Ft(If)59 b(set)h(to)g(`)p Fs(on)p Ft(',)67 b(completed)60 b(names)f(whic)m(h)g (are)h(sym)m(b)s(olic)g(links)f(to)1110 3665 y(directories)71 b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70 b(to)g(the)g(v)-5 b(alue)70 b(of)1110 3774 y Fs(mark-directories)p Ft(\).)37 b(The)30 b(default)g(is)g(`)p Fs(off)p Ft('.)630 3931 y Fs(match-hidden-files)1110 4041 y Ft(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p Fs(on)p Ft(',)h(causes)f (Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 4150 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fs(.)p Ft(')g(\(hidden)f (\014les\))i(when)e(p)s(erforming)g(\014lename)1110 4260 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fs(off)p Ft(',)i(the)e (leading)g(`)p Fs(.)p Ft(')f(m)m(ust)g(b)s(e)g(supplied)f(b)m(y)1110 4369 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f(completed.) 53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p Fs(on)p Ft(')g(b)m(y)1110 4479 y(default.)630 4635 y Fs(menu-complete-display-pr)o(efix)1110 4745 y Ft(If)f(set)h(to)g(`)p Fs(on)p Ft(',)h(men)m(u)e(completion)i (displa)m(ys)e(the)h(common)g(pre\014x)e(of)i(the)1110 4855 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b) s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 4964 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Fs(off)p Ft('.)630 5121 y Fs(output-meta)1110 5230 y Ft(If)35 b(set)h(to)g(`)p Fs(on)p Ft(',)h(Readline)f(will)g(displa)m(y)f(c)m (haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 5340 y(set)h(directly)g (rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 b(The)p eop end %%Page: 9 13 TeXDict begin 9 12 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(9)1110 299 y(default)26 b(is)f(`)p Fs(off)p Ft(',)i(but)e(Readline)h(will)g(set)g(it)g(to)h(`)p Fs(on)p Ft(')e(if)h(the)f(lo)s(cale)j(con)m(tains)1110 408 y(eigh)m(t-bit)k(c)m(haracters.)630 596 y Fs(page-completions)1110 706 y Ft(If)h(set)i(to)f(`)p Fs(on)p Ft(',)h(Readline)g(uses)e(an)h(in) m(ternal)h Fs(more)p Ft(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 816 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) 47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fs(on)p Ft(')1110 925 y(b)m(y)e(default.)630 1113 y Fs(print-completions-horizo)o(ntal)o (ly)1110 1223 y Ft(If)23 b(set)i(to)g(`)p Fs(on)p Ft(',)g(Readline)g (will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 1332 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c (than)g(do)m(wn)g(the)h(screen.)1110 1442 y(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)630 1630 y Fs(revert-all-at-newline)1110 1739 y Ft(If)e(set)h(to)g(`)p Fs(on)p Ft(',)g(Readline)g(will)g(undo)f (all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 1849 y(returning)f(when)f Fs(accept-line)f Ft(is)j(executed.)41 b(By)29 b(default,)g(history)g(lines)1110 1958 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h (across)g(calls)h(to)1110 2068 y Fs(readline)p Ft(.)38 b(The)30 b(default)h(is)f(`)p Fs(off)p Ft('.)630 2256 y Fs(show-all-if-ambiguous)1110 2365 y Ft(This)f(alters)i(the)f (default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 b(If)29 b(set)1110 2475 y(to)f(`)p Fs(on)p Ft(',)g(w)m(ords)f(whic)m(h) g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause) 1110 2585 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i (instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 2694 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fs(off)p Ft('.)630 2882 y Fs(show-all-if-unmodified)1110 2992 y Ft(This)38 b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h (functions)e(in)h(a)1110 3101 y(fashion)25 b(similar)h(to)g Fj(sho)m(w-all-if-am)m(biguous)p Ft(.)41 b(If)25 b(set)h(to)h(`)p Fs(on)p Ft(',)f(w)m(ords)f(whic)m(h)1110 3211 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s (ossible)f(par-)1110 3320 y(tial)43 b(completion)h(\(the)f(p)s(ossible) f(completions)h(don't)f(share)g(a)h(common)1110 3430 y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g (immediately)i(instead)e(of)h(ring-)1110 3540 y(ing)g(the)f(b)s(ell.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fs(off)p Ft('.)630 3727 y Fs(show-mode-in-prompt)1110 3837 y Ft(If)g(set)g(to)h (`)p Fs(on)p Ft(',)f(add)f(a)i(c)m(haracter)g(to)g(the)f(b)s(eginning)g (of)g(the)g(prompt)f(indi-)1110 3947 y(cating)j(the)g(editing)f(mo)s (de:)42 b(emacs,)33 b(vi)e(command,)g(or)g(vi)g(insertion.)43 b(The)1110 4056 y(mo)s(de)30 b(strings)g(are)h(user-settable.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fs(off)p Ft('.)630 4244 y Fs(skip-completed-text)1110 4354 y Ft(If)h(set)i(to)f (`)p Fs(on)p Ft(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s (eha)m(vior)f(when)f(in-)1110 4463 y(serting)d(a)h(single)g(matc)m(h)f (in)m(to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s (erform-)1110 4573 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f (w)m(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110 4682 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h (that)f(matc)m(h)g(c)m(haracters)1110 4792 y(after)c(p)s(oin)m(t)g(in)g (the)g(w)m(ord)f(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g (w)m(ord)1110 4902 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g (duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 5011 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g (after)h(the)g(`)p Fs(e)p Ft(')f(in)1110 5121 y(`)p Fs(Makefile)p Ft(')c(will)i(result)f(in)g(`)p Fs(Makefile)p Ft(')f(rather)h(than)h(`) p Fs(Makefilefile)p Ft(',)1110 5230 y(assuming)d(there)g(is)h(a)f (single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 b(alue)1110 5340 y(is)30 b(`)p Fs(off)p Ft('.)p eop end %%Page: 10 14 TeXDict begin 10 13 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(10)630 299 y Fs (vi-cmd-mode-string)1110 408 y Ft(This)29 b(string)h(is)f(displa)m(y)m (ed)i(immediately)g(b)s(efore)e(the)h(last)g(line)h(of)e(the)h(pri-) 1110 518 y(mary)21 b(prompt)g(when)f(vi)i(editing)g(mo)s(de)f(is)g (activ)m(e)j(and)d(in)g(command)g(mo)s(de.)1110 628 y(The)38 b(v)-5 b(alue)39 b(is)f(expanded)f(lik)m(e)j(a)f(k)m(ey)g(binding,)g (so)g(the)f(standard)g(set)h(of)1110 737 y(meta-)30 b(and)e(con)m(trol) i(pre\014xes)e(and)g(bac)m(kslash)h(escap)s(e)g(sequences)g(is)g(a)m(v) -5 b(ail-)1110 847 y(able.)50 b(Use)33 b(the)h(`)p Fs(\\1)p Ft(')f(and)g(`)p Fs(\\2)p Ft(')g(escap)s(es)g(to)h(b)s(egin)f(and)g (end)f(sequences)i(of)1110 956 y(non-prin)m(ting)40 b(c)m(haracters,)45 b(whic)m(h)40 b(can)g(b)s(e)g(used)g(to)h(em)m(b)s(ed)f(a)g(terminal) 1110 1066 y(con)m(trol)32 b(sequence)f(in)m(to)g(the)f(mo)s(de)g (string.)41 b(The)30 b(default)h(is)f(`)p Fs(\(cmd\))p Ft('.)630 1209 y Fs(vi-ins-mode-string)1110 1319 y Ft(This)f(string)h (is)f(displa)m(y)m(ed)i(immediately)g(b)s(efore)e(the)h(last)g(line)h (of)e(the)h(pri-)1110 1428 y(mary)25 b(prompt)f(when)g(vi)h(editing)h (mo)s(de)e(is)i(activ)m(e)h(and)d(in)h(insertion)g(mo)s(de.)1110 1538 y(The)38 b(v)-5 b(alue)39 b(is)f(expanded)f(lik)m(e)j(a)f(k)m(ey)g (binding,)g(so)g(the)f(standard)g(set)h(of)1110 1648 y(meta-)30 b(and)e(con)m(trol)i(pre\014xes)e(and)g(bac)m(kslash)h (escap)s(e)g(sequences)g(is)g(a)m(v)-5 b(ail-)1110 1757 y(able.)50 b(Use)33 b(the)h(`)p Fs(\\1)p Ft(')f(and)g(`)p Fs(\\2)p Ft(')g(escap)s(es)g(to)h(b)s(egin)f(and)g(end)f(sequences)i (of)1110 1867 y(non-prin)m(ting)40 b(c)m(haracters,)45 b(whic)m(h)40 b(can)g(b)s(e)g(used)g(to)h(em)m(b)s(ed)f(a)g(terminal) 1110 1976 y(con)m(trol)32 b(sequence)f(in)m(to)g(the)f(mo)s(de)g (string.)41 b(The)30 b(default)h(is)f(`)p Fs(\(ins\))p Ft('.)630 2120 y Fs(visible-stats)1110 2229 y Ft(If)h(set)i(to)f(`)p Fs(on)p Ft(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s (e)g(is)g(app)s(ended)e(to)j(the)1110 2339 y(\014lename)e(when)e (listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p Fs(off)p Ft('.)150 2482 y(Key)f(Bindings)630 2592 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g (init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 2701 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i (y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 2811 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j (the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 2921 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h (do)s(es.)630 3047 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g (the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 3157 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h (bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 3266 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g (and)630 3376 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m (terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 b(The)40 b(name)h(of)630 3485 y(the)35 b(k)m(ey)g(can)g(b)s(e)f (expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h (what)h(y)m(ou)g(\014nd)e(most)630 3595 y(comfortable.)630 3721 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h (k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 3831 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g (\(a)h Fj(macro)5 b Ft(\).)630 3974 y Fj(k)m(eyname)g Ft(:)42 b Fj(function-name)35 b Ft(or)c Fj(macro)1110 4084 y(k)m(eyname)k Ft(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s (elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 4210 y Fs(Control-u:)45 b(universal-argument)1350 4320 y(Meta-Rubout:)f(backward-kill-word)1350 4430 y(Control-o:)h(">)i (output")1110 4556 y Ft(In)94 b(the)g(ab)s(o)m(v)m(e)i(example,)111 b Fl(C-u)94 b Ft(is)g(b)s(ound)f(to)i(the)f(function)1110 4666 y Fs(universal-argument)p Ft(,)124 b Fl(M-DEL)107 b Ft(is)i(b)s(ound)e(to)j(the)f(function)1110 4775 y Fs(backward-kill-word)p Ft(,)75 b(and)69 b Fl(C-o)g Ft(is)h(b)s(ound)e (to)j(run)d(the)i(macro)1110 4885 y(expressed)45 b(on)h(the)g(righ)m(t) g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)h(text)h(`)p Fs(>)1110 4994 y(output)p Ft(')29 b(in)m(to)i(the)g(line\).)1110 5121 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g (names)f(are)g(recognized)h(while)1110 5230 y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60 b Fj(DEL)p Ft(,)42 b Fj(ESC)p Ft(,)g Fj(ESCAPE)p Ft(,)f Fj(LFD)p Ft(,)1110 5340 y Fj(NEWLINE)p Ft(,)31 b Fj(RET)p Ft(,)f Fj(RETURN)p Ft(,)g Fj(R)m(UBOUT)p Ft(,)h Fj(SP)-8 b(A)m(CE)p Ft(,)31 b Fj(SPC)p Ft(,)e(and)h Fj(T)-8 b(AB)p Ft(.)p eop end %%Page: 11 15 TeXDict begin 11 14 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(11)630 299 y Fs(")p Fj(k)m(eyseq)r Fs(")p Ft(:)41 b Fj(function-name)36 b Ft(or)30 b Fj(macro)1110 408 y(k)m(eyseq)k Ft(di\013ers)d(from)f Fj(k)m(eyname)37 b Ft(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f (denoting)g(an)g(en-)1110 518 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s(e) f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in)1110 628 y(double)29 b(quotes.)41 b(Some)29 b Fm(gnu)h Ft(Emacs)f(st)m(yle)i (k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 737 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s(ecial)h(c)m (haracter)g(names)f(are)g(not)1110 847 y(recognized.)1350 981 y Fs("\\C-u":)46 b(universal-argument)1350 1091 y("\\C-x\\C-r":)f (re-read-init-file)1350 1200 y("\\e[11~":)g("Function)h(Key)g(1")1110 1334 y Ft(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 b Fl(C-u)64 b Ft(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 1444 y Fs(universal-argument)39 b Ft(\(just)k(as)h(it)g(w)m(as)g(in)g (the)f(\014rst)g(example\),)49 b(`)p Fl(C-x)1110 1554 y(C-r)p Ft(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f Fs(re-read-init-file)p Ft(,)c(and)j(`)p Fs(ESC)h([)g(1)g(1)1110 1663 y(~)p Ft(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p Fs(Function)e(Key)g(1)p Ft('.)630 1822 y(The)g(follo)m(wing)i Fm(gnu)f Ft(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 b(ailable)32 b(when)d(sp)s(ecifying)630 1932 y(k)m(ey)i(sequences:)630 2091 y Fl(\\C-)336 b Ft(con)m(trol)32 b(pre\014x)630 2250 y Fl(\\M-)336 b Ft(meta)31 b(pre\014x)630 2408 y Fl(\\e)384 b Ft(an)30 b(escap)s(e)h(c)m(haracter)630 2567 y Fl(\\\\)384 b Ft(bac)m(kslash)630 2726 y Fl(\\)p Fs(")g(")p Ft(,)30 b(a)h(double)f(quotation)i(mark)630 2885 y Fl(\\')384 b Fs(')p Ft(,)30 b(a)h(single)g(quote)g(or)f(ap)s (ostrophe)630 3044 y(In)d(addition)h(to)g(the)g Fm(gnu)f Ft(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g (bac)m(kslash)630 3154 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 3313 y Fs(\\a)384 b Ft(alert)31 b(\(b)s(ell\))630 3471 y Fs(\\b)384 b Ft(bac)m(kspace)630 3630 y Fs(\\d)g Ft(delete)630 3789 y Fs(\\f)g Ft(form)30 b(feed)630 3948 y Fs(\\n)384 b Ft(newline)630 4107 y Fs(\\r)g Ft(carriage)32 b(return)630 4266 y Fs(\\t)384 b Ft(horizon)m(tal)32 b(tab)630 4425 y Fs(\\v)384 b Ft(v)m(ertical)32 b(tab)630 4584 y Fs(\\)p Fl(nnn)288 b Ft(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fj(nnn)e Ft(\(one)i(to)1110 4693 y(three)c(digits\))630 4852 y Fs(\\x)p Fl(HH)288 b Ft(the)38 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e (v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 b(alue)39 b Fj(HH)1110 4962 y Ft(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 5121 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e (or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 5230 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 b(In)630 5340 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j (are)e(expanded.)37 b(Bac)m(kslash)p eop end %%Page: 12 16 TeXDict begin 12 15 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(12)630 299 y(will)40 b(quote)h(an)m(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k (including)39 b(`)p Fs(")p Ft(')h(and)g(`)p Fs(')p Ft('.)69 b(F)-8 b(or)630 408 y(example,)28 b(the)e(follo)m(wing)h(binding)d (will)i(mak)m(e)h(`)p Fl(C-x)j Fs(\\)p Ft(')c(insert)f(a)h(single)h(`)p Fs(\\)p Ft(')f(in)m(to)g(the)g(line:)870 536 y Fs("\\C-x\\\\":)45 b("\\\\")150 721 y Fi(1.3.2)63 b(Conditional)41 b(Init)g(Constructs)150 868 y Ft(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f(in)g (spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 978 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g (bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s (erformed)f(as)i(the)150 1087 y(result)f(of)h(tests.)41 b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 1233 y Fs($if)336 b Ft(The)31 b Fs($if)f Ft(construct)i(allo)m(ws)h (bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g (the)630 1342 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g (application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test) 630 1452 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m (haracters)i(are)f(required)e(to)i(isolate)i(it.)630 1597 y Fs(mode)288 b Ft(The)30 b Fs(mode=)e Ft(form)i(of)g(the)h Fs($if)e Ft(directiv)m(e)j(is)e(used)f(to)i(test)g(whether)e(Read-)1110 1707 y(line)44 b(is)f(in)g Fs(emacs)f Ft(or)h Fs(vi)g Ft(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g(conjunction) 1110 1816 y(with)c(the)h(`)p Fs(set)29 b(keymap)p Ft(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110 1926 y(the)32 b Fs(emacs-standard)c Ft(and)j Fs(emacs-ctlx)d Ft(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 2036 y(starting)f(out)g (in)f Fs(emacs)f Ft(mo)s(de.)630 2181 y Fs(term)288 b Ft(The)26 b Fs(term=)g Ft(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f (terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 2291 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g (the)g(terminal's)1110 2400 y(function)24 b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p Fs(=)p Ft(')g(is)g(tested)h(against)1110 2510 y(b)s(oth)k(the)h(full)g (name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g (terminal)1110 2619 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fs(-)p Ft('.)50 b(This)33 b(allo)m(ws)i Fs(sun)e Ft(to)h(matc)m(h)g(b)s (oth)f Fs(sun)g Ft(and)1110 2729 y Fs(sun-cmd)p Ft(,)c(for)h(instance.) 630 2874 y Fs(application)1110 2984 y Ft(The)21 b Fj(application)j Ft(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h (set-)1110 3093 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h (Readline)g(library)g(sets)g(the)g Fj(application)1110 3203 y(name)p Ft(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h (v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 3313 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h (a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 3422 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f (sequence)h(that)f(quotes)1110 3532 y(the)e(curren)m(t)f(or)g(previous) g(w)m(ord)g(in)g(Bash:)1350 3659 y Fs($if)47 b(Bash)1350 3769 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 3878 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3988 y($endif)150 4133 y($endif)192 b Ft(This)29 b(command,)i(as)f(seen)h(in)f(the)g (previous)g(example,)h(terminates)g(an)g Fs($if)e Ft(command.)150 4279 y Fs($else)240 b Ft(Commands)29 b(in)h(this)h(branc)m(h)e(of)i (the)f Fs($if)g Ft(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g (fails.)150 4424 y Fs($include)96 b Ft(This)43 b(directiv)m(e)i(tak)m (es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g (commands)630 4534 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e (from)630 4643 y Fs(/etc/inputrc)p Ft(:)870 4771 y Fs($include)46 b(/etc/inputrc)150 4956 y Fi(1.3.3)63 b(Sample)41 b(Init)g(File)150 5103 y Ft(Here)27 b(is)f(an)h(example)g(of)f(an)h Fj(inputrc)k Ft(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 5212 y(conditional)j(syn)m (tax.)p eop end %%Page: 13 17 TeXDict begin 13 16 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(13)p eop end %%Page: 14 18 TeXDict begin 14 17 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(14)390 408 y Fs(#)47 b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h (editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h (Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g (re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(system-wide)e (bindings)h(and)g(variable)390 1285 y(#)h(assignments)e(from)i (/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.) 390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) h(function)f(name)g(is)h(ignored)p 3970 2401 42 76 v 390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g (previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g (previous-history)390 4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) 390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g (previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end %%Page: 15 19 TeXDict begin 15 18 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(15)390 299 y Fs(#"\\M-\\C-[A":)331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f (are)h(convenient)e(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g (backslash)e(\(testing)h(backslash)f(escapes)390 2381 y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") 390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e (to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f (on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f ("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h (available)390 3587 y(set)f(bell-style)e(visible)390 3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) 390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e (characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g (converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j (convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g (eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h (meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f (completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g (he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f (completion-query-items)42 b(150)p eop end %%Page: 16 20 TeXDict begin 16 19 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(16)390 299 y Fs(#)47 b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1085 y Fr(1.4)68 b(Bindable)45 b(Readline)i(Commands) 150 1244 y Ft(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e (that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 b(Command)150 1354 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m (ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 1487 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fj(p)s(oin)m(t)h Ft(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f Fj(mark)31 b Ft(refers)150 1597 y(to)40 b(a)f(cursor)f(p)s(osition)h (sa)m(v)m(ed)h(b)m(y)f(the)g Fs(set-mark)d Ft(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 1706 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fj(region)p Ft(.)150 1903 y Fi(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 b(Mo)m(ving)150 2074 y Fs(beginning-of-line)26 b(\(C-a\))630 2183 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g (line.)150 2340 y Fs(end-of-line)d(\(C-e\))630 2450 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 2607 y Fs(forward-char)c(\(C-f\))630 2716 y Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(c)m(haracter.)150 2873 y Fs(backward-char)c(\(C-b\)) 630 2983 y Ft(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 3140 y Fs(forward-word)d(\(M-f\))630 3249 y Ft(Mo)m(v)m(e)32 b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 3359 y(digits.)150 3516 y Fs(backward-word)27 b(\(M-b\))630 3625 y Ft(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g (curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 b(are)g(comp)s(osed)630 3735 y(of)d(letters)g(and)f(digits.)150 3892 y Fs(clear-screen)d(\(C-l\))630 4001 y Ft(Clear)g(the)g(screen)f (and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f (curren)m(t)g(line)g(at)g(the)g(top)630 4111 y(of)k(the)f(screen.)150 4268 y Fs(redraw-current-line)25 b(\(\))630 4377 y Ft(Refresh)30 b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s (ound.)150 4574 y Fi(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 4745 y Fs(accept-line)27 b(\(Newline)h(or)i(Return\))630 4854 y Ft(Accept)36 b(the)g(line)f (regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 4964 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e (future)g(recall)j(with)d Fs(add_history\(\))p Ft(.)42 b(If)31 b(this)630 5074 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h (line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g (state.)150 5230 y Fs(previous-history)26 b(\(C-p\))630 5340 y Ft(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g (fetc)m(hing)g(the)g(previous)f(command.)p eop end %%Page: 17 21 TeXDict begin 17 20 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fs(next-history)27 b(\(C-n\))630 408 y Ft(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i (history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 558 y Fs(beginning-of-history)25 b(\(M-<\))630 667 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 b(.)150 817 y Fs(end-of-history)26 b(\(M->\))630 927 y Ft(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 1076 y Fs(reverse-search-history)24 b(\(C-r\))630 1186 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g (line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 1295 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m (tal)i(searc)m(h.)150 1445 y Fs(forward-search-history)24 b(\(C-s\))630 1554 y Ft(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h (the)e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the) 630 1664 y(history)30 b(as)h(necessary)-8 b(.)41 b(This)30 b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1813 y Fs (non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-p\))630 1923 y Ft(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g (the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g (his-)630 2032 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m (tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 2142 y(user.)k(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an)m (ywhere)g(in)f(a)h(history)f(line.)150 2291 y Fs (non-incremental-forward-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-n\))630 2401 y Ft(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h (the)e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the) 630 2511 y(history)27 b(as)f(necessary)i(using)e(a)h(non-incremen)m (tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i(the)630 2620 y(user.)40 b(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an) m(ywhere)g(in)f(a)h(history)f(line.)150 2770 y Fs (history-search-forward)24 b(\(\))630 2879 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g(the)h(string)f(of)h(c)m (haracters)h(b)s(et)m(w)m(een)f(the)630 2989 y(start)36 b(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.)58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3098 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3208 y(command)d(is)h(un)m(b)s(ound.)150 3357 y Fs(history-search-backward)24 b(\(\))630 3467 y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 3577 y(start)g(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.) 58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3686 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3796 y(command)d(is)h(un)m(b)s(ound.)150 3945 y Fs(history-substr-search-fo)o(rwar)o(d)24 b(\(\))630 4055 y Ft(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 4164 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4274 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4384 y(is)e(un)m(b)s(ound.)150 4533 y Fs (history-substr-search-ba)o(ckwa)o(rd)24 b(\(\))630 4643 y Ft(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 4752 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4862 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4971 y(is)e(un)m(b)s(ound.)150 5121 y Fs(yank-nth-arg)d (\(M-C-y\))630 5230 y Ft(Insert)37 b(the)g(\014rst)f(argumen)m(t)i(to)f (the)h(previous)e(command)h(\(usually)g(the)g(second)g(w)m(ord)630 5340 y(on)32 b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 b(an)g(argumen)m(t)g Fj(n)p Ft(,)g(insert)g(the)g Fj(n)p Ft(th)f(w)m(ord)g(from)p eop end %%Page: 18 22 TeXDict begin 18 21 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(18)630 299 y(the)35 b(previous)f(command)h(\(the)g(w)m(ords)g(in)f(the)h(previous)g (command)f(b)s(egin)h(with)f(w)m(ord)630 408 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f Fj(n)p Ft(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 518 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fj(n)e Ft(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 628 y(the)e(`)p Fs(!)p Fl(n)p Ft(')f(history)g(expansion)g(had)g(b)s (een)g(sp)s(eci\014ed.)150 775 y Fs(yank-last-arg)d(\(M-.)i(or)h(M-_\)) 630 885 y Ft(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f (command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 994 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m (t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fs(yank-nth-arg)p Ft(.)630 1104 y(Successiv)m(e)26 b(calls)g(to)f Fs(yank-last-arg)c Ft(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i (inserting)630 1214 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i (of)f(eac)m(h)h(line)630 1323 y(in)36 b(turn.)58 b(An)m(y)36 b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g (calls)h(determines)630 1433 y(the)d(direction)g(to)h(mo)m(v)m(e)g (through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e (switc)m(hes)h(the)630 1542 y(direction)23 b(through)g(the)g(history)f (\(bac)m(k)i(or)f(forw)m(ard\).)38 b(The)22 b(history)h(expansion)g (facilities)630 1652 y(are)28 b(used)f(to)h(extract)h(the)f(last)g (argumen)m(t,)h(as)e(if)h(the)g(`)p Fs(!$)p Ft(')f(history)g(expansion) h(had)f(b)s(een)630 1762 y(sp)s(eci\014ed.)150 1949 y Fi(1.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 2115 y Fl(end-of-file)27 b Fs(\(usually)h(C-d\))630 2225 y Ft(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g (for)f(example,)i(b)m(y)e Fs(stty)p Ft(.)39 b(If)25 b(this)h(c)m (harac-)630 2334 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(c)m (haracters)j(on)d(the)h(line,)i(and)d(p)s(oin)m(t)h(is)g(at)h(the)f(b)s (eginning)630 2444 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g (it)g(as)f(the)h(end)f(of)g(input)f(and)h(returns)f Fm(eof)p Ft(.)150 2591 y Fs(delete-char)e(\(C-d\))630 2701 y Ft(Delete)35 b(the)f(c)m(haracter)h(at)f(p)s(oin)m(t.)49 b(If)33 b(this)g(function)g (is)g(b)s(ound)e(to)j(the)g(same)f(c)m(haracter)630 2811 y(as)e(the)f(tt)m(y)i Fm(eof)d Ft(c)m(haracter,)j(as)f Fl(C-d)e Ft(commonly)i(is,)g(see)g(ab)s(o)m(v)m(e)h(for)e(the)g (e\013ects.)150 2958 y Fs(backward-delete-char)25 b(\(Rubout\))630 3068 y Ft(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 3177 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 3325 y Fs(forward-backward-delete-)o(char)24 b(\(\))630 3434 y Ft(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h (unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 3544 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s (ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 3654 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3801 y Fs(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 3911 y Ft(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h (v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 4020 y(sequences)d(lik)m(e)g Fl(C-q)p Ft(,)f(for)g(example.)150 4168 y Fs(tab-insert)e(\(M-TAB\))630 4278 y Ft(Insert)i(a)h(tab)f(c)m (haracter.)150 4425 y Fs(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o (\))630 4535 y Ft(Insert)g(y)m(ourself.)150 4682 y Fs (bracketed-paste-begin)25 b(\(\))630 4792 y Ft(This)f(function)h(is)f (in)m(tended)h(to)h(b)s(e)e(b)s(ound)f(to)i(the)g Fs(")p Ft(brac)m(k)m(eted)h(paste)p Fs(")f Ft(escap)s(e)h(sequence)630 4902 y(sen)m(t)38 b(b)m(y)f(some)h(terminals,)i(and)d(suc)m(h)g(a)h (binding)e(is)i(assigned)f(b)m(y)h(default.)62 b(It)38 b(allo)m(ws)630 5011 y(Readline)33 b(to)g(insert)g(the)f(pasted)h(text) g(as)g(a)g(single)g(unit)f(without)h(treating)h(eac)m(h)f(c)m(har-)630 5121 y(acter)40 b(as)f(if)g(it)g(had)f(b)s(een)g(read)h(from)f(the)h(k) m(eyb)s(oard.)66 b(The)39 b(c)m(haracters)h(are)f(inserted)630 5230 y(as)i(if)g(eac)m(h)i(one)e(w)m(as)h(b)s(ound)d(to)i Fs(self-insert)p Ft(\))e(instead)i(of)h(executing)g(an)m(y)f(editing) 630 5340 y(commands.)p eop end %%Page: 19 23 TeXDict begin 19 22 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(19)150 299 y Fs(transpose-chars)26 b(\(C-t\))630 408 y Ft(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g (cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g (cursor,)630 518 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m (ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) g(of)h(the)630 628 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h (last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25 b(argumen)m(ts)630 737 y(ha)m(v)m(e)32 b(no)e(e\013ect.)150 907 y Fs(transpose-words)c(\(M-t\))630 1016 y Ft(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g (the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past) g(that)630 1126 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i(the)f (line,)i(this)e(transp)s(oses)g(the)630 1236 y(last)j(t)m(w)m(o)h(w)m (ords)e(on)g(the)h(line.)150 1405 y Fs(upcase-word)c(\(M-u\))630 1515 y Ft(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i (w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 1624 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h (the)e(cursor.)150 1794 y Fs(downcase-word)d(\(M-l\))630 1904 y Ft(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i (w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m (ercase)630 2013 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m (v)m(e)i(the)f(cursor.)150 2183 y Fs(capitalize-word)26 b(\(M-c\))630 2292 y Ft(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m (wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h (capitalize)630 2402 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f (mo)m(v)m(e)i(the)f(cursor.)150 2571 y Fs(overwrite-mode)26 b(\(\))630 2681 y Ft(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) h(switc)m(hes)630 2791 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m (t,)i(switc)m(hes)e(to)630 2900 y(insert)30 b(mo)s(de.)41 b(This)30 b(command)h(a\013ects)h(only)e Fs(emacs)f Ft(mo)s(de;)i Fs(vi)f Ft(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 3010 y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f Fs(readline\(\))c Ft(starts)k(in)f(insert)g(mo)s(de.)630 3149 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s (ound)c(to)j Fs(self-insert)c Ft(replace)k(the)g(text)g(at)630 3259 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h (the)f(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 3369 y Fs(backward-delete-char)25 b Ft(replace)31 b(the)g(c)m(haracter) h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 3508 y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 3718 y Fi(1.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 3895 y Fs(kill-line)28 b(\(C-k\))630 4004 y Ft(Kill)j(the)f(text)i (from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150 4174 y Fs(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 4283 y Ft(Kill)h(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f(b)s (eginning)g(of)h(the)f(curren)m(t)g(line.)150 4453 y Fs(unix-line-discard)c(\(C-u\))630 4562 y Ft(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f(b)s(eginning)g(of)h (the)f(curren)m(t)g(line.)150 4732 y Fs(kill-whole-line)c(\(\))630 4842 y Ft(Kill)37 b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h (line,)h(no)f(matter)g(where)f(p)s(oin)m(t)h(is.)59 b(By)36 b(default,)630 4951 y(this)30 b(is)h(un)m(b)s(ound.)150 5121 y Fs(kill-word)d(\(M-d\))630 5230 y Ft(Kill)i(from)f(p)s(oin)m(t)g (to)h(the)g(end)e(of)i(the)f(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m (w)m(een)g(w)m(ords,)f(to)h(the)g(end)630 5340 y(of)h(the)f(next)h(w)m (ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fs(forward-word)p Ft(.)p eop end %%Page: 20 24 TeXDict begin 20 23 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fs (backward-kill-word)25 b(\(M-DEL\))630 408 y Ft(Kill)k(the)g(w)m(ord)g (b)s(ehind)e(p)s(oin)m(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h (the)g(same)g(as)g Fs(backward-word)p Ft(.)150 577 y Fs(unix-word-rubout)d(\(C-w\))630 686 y Ft(Kill)32 b(the)g(w)m(ord)f(b) s(ehind)f(p)s(oin)m(t,)i(using)f(white)h(space)g(as)g(a)g(w)m(ord)f(b)s (oundary)-8 b(.)43 b(The)31 b(killed)630 796 y(text)g(is)g(sa)m(v)m(ed) g(on)g(the)f(kill-ring.)150 964 y Fs(unix-filename-rubout)25 b(\(\))630 1073 y Ft(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m (t,)j(using)e(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f (the)630 1183 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 1351 y Fs(delete-horizontal-space)24 b(\(\))630 1461 y Ft(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 1629 y Fs(kill-region)d(\(\))630 1738 y Ft(Kill)k(the)f(text)i(in)e(the)g (curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) m(b)s(ound.)150 1906 y Fs(copy-region-as-kill)25 b(\(\))630 2016 y Ft(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f (kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f (a)m(w)m(a)m(y)-8 b(.)630 2125 y(By)31 b(default,)f(this)h(command)f (is)g(un)m(b)s(ound.)150 2293 y Fs(copy-backward-word)25 b(\(\))630 2403 y Ft(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) f(are)i(the)630 2513 y(same)31 b(as)f Fs(backward-word)p Ft(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 2681 y Fs(copy-forward-word)26 b(\(\))630 2790 y Ft(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h (bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 2900 y(same)f(as)f Fs(forward-word)p Ft(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 3068 y Fs(yank)f(\(C-y\))630 3177 y Ft(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h (p)s(oin)m(t.)150 3346 y Fs(yank-pop)d(\(M-y\))630 3455 y Ft(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 3565 y(command)30 b(is)h Fs(yank)e Ft(or)h Fs(yank-pop)p Ft(.)150 3773 y Fi(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m (ts)150 3949 y Fs(digit-argument)26 b(\()p Fl(M-0)p Fs(,)j Fl(M-1)p Fs(,)h(...)f Fl(M--)p Fs(\))630 4058 y Ft(Add)d(this)h(digit)g (to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f (new)f(argumen)m(t.)630 4168 y Fl(M--)j Ft(starts)i(a)g(negativ)m(e)i (argumen)m(t.)150 4336 y Fs(universal-argument)25 b(\(\))630 4446 y Ft(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g (argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m (y)f(one)630 4555 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h (leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 4665 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) m(y)f(digits,)i(executing)f Fs(universal-argument)630 4774 y Ft(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h (otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 4884 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 4994 y(nor)41 b(min)m(us)f(sign,)k(the)e(argumen)m(t)f(coun)m(t)h(for)f (the)h(next)f(command)g(is)g(m)m(ultiplied)h(b)m(y)630 5103 y(four.)54 b(The)35 b(argumen)m(t)g(coun)m(t)h(is)f(initially)h (one,)h(so)e(executing)i(this)e(function)f(the)i(\014rst)630 5213 y(time)29 b(mak)m(es)h(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)h (second)g(time)g(mak)m(es)h(the)e(argumen)m(t)h(coun)m(t)630 5322 y(sixteen,)i(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g (not)h(b)s(ound)d(to)k(a)e(k)m(ey)-8 b(.)p eop end %%Page: 21 25 TeXDict begin 21 24 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fi(1.4.6)63 b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 b(Y)-10 b(ou)150 483 y Fs(complete)28 b(\(TAB\))630 593 y Ft(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g(b)s (efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 702 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 b(The)30 b(default)h(is)f(\014lename)h(completion.)150 886 y Fs(possible-completions)25 b(\(M-?\))630 996 y Ft(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s (efore)e(p)s(oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 1105 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i (columns)f(used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 b(alue)33 b(of)630 1215 y Fs(completion-display-width)o Ft(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)38 b Fs(COLUMNS)p Ft(,)630 1325 y(or)30 b(the)h(screen)f (width,)g(in)g(that)h(order.)150 1509 y Fs(insert-completions)25 b(\(M-*\))630 1618 y Ft(Insert)30 b(all)h(completions)h(of)f(the)g (text)g(b)s(efore)f(p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s (een)e(generated)630 1728 y(b)m(y)g Fs(possible-completions)p Ft(.)150 1912 y Fs(menu-complete)d(\(\))630 2021 y Ft(Similar)d(to)g Fs(complete)p Ft(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f (completed)i(with)e(a)i(single)f(matc)m(h)630 2131 y(from)37 b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 b(execution)g(of)f Fs(menu-complete)630 2241 y Ft(steps)i(through)g (the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i (matc)m(h)f(in)f(turn.)630 2350 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g (of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 2460 y(of)f Fs(bell-style)p Ft(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fj(n)f Ft(mo)m(v)m(es)i Fj(n)630 2569 y Ft(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e (matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f (used)g(to)630 2679 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g (list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s (ound)e(to)630 2789 y Fs(TAB)p Ft(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m (y)i(default.)150 2973 y Fs(menu-complete-backward)24 b(\(\))630 3082 y Ft(Iden)m(tical)36 b(to)g Fs(menu-complete)p Ft(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g (p)s(ossible)630 3192 y(completions,)d(as)e(if)h Fs(menu-complete)26 b Ft(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 3376 y Fs(delete-char-or-list)25 b(\(\))630 3485 y Ft(Deletes)41 b(the)e(c)m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)h(b)s (eginning)e(or)h(end)f(of)h(the)630 3595 y(line)50 b(\(lik)m(e)h Fs(delete-char)p Ft(\).)96 b(If)49 b(at)h(the)g(end)f(of)h(the)f(line,) 55 b(b)s(eha)m(v)m(es)c(iden)m(tically)g(to)630 3705 y Fs(possible-completions)p Ft(.)35 b(This)30 b(command)g(is)g(un)m(b)s (ound)e(b)m(y)i(default.)150 3928 y Fi(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 4113 y Fs(start-kbd-macro)26 b(\(C-x)j(\(\))630 4222 y Ft(Begin)i(sa)m(ving)h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m (to)h(the)g(curren)m(t)f(k)m(eyb)s(oard)g(macro.)150 4406 y Fs(end-kbd-macro)d(\(C-x)i(\)\))630 4516 y Ft(Stop)e(sa)m(ving)h (the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m(to)i(the)e(curren)m(t)g(k)m (eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i(the)630 4625 y(de\014nition.)150 4809 y Fs(call-last-kbd-macro)c(\(C-x)k(e\))630 4919 y Ft(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)f(macro)h (de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the)630 5029 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m(eyb)s (oard.)150 5213 y Fs(print-last-kbd-macro)25 b(\(\))630 5322 y Ft(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned) e(in)i(a)f(format)h(suitable)g(for)f(the)h Fj(inputrc)k Ft(\014le.)p eop end %%Page: 22 26 TeXDict begin 22 25 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(22)150 299 y Fi(1.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)150 466 y Fs(re-read-init-file)26 b(\(C-x)j(C-r\))630 576 y Ft(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f (the)g Fj(inputrc)27 b Ft(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h (bindings)d(or)i(v)-5 b(ariable)630 685 y(assignmen)m(ts)31 b(found)e(there.)150 836 y Fs(abort)g(\(C-g\))630 945 y Ft(Ab)s(ort)d(the)h(curren)m(t)f(editing)h(command)f(and)g(ring)h (the)f(terminal's)h(b)s(ell)g(\(sub)5 b(ject)26 b(to)i(the)630 1055 y(setting)j(of)g Fs(bell-style)p Ft(\).)150 1205 y Fs(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p Fl(x)p Fs(,)g(...)o(\))630 1315 y Ft(If)e(the)h(meta\014ed)g(c)m(haracter)h Fj(x)34 b Ft(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g(command)h(that)g (is)g(b)s(ound)d(to)k(the)630 1425 y(corresp)s(onding)g(upp)s(ercase)h (c)m(haracter.)150 1575 y Fs(prefix-meta)d(\(ESC\))630 1685 y Ft(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 b(.)630 1794 y(T)m(yping)30 b(`)p Fs(ESC)g(f)p Ft(')g(is)h(equiv)-5 b(alen)m(t)31 b(to)g(t)m(yping)g Fl(M-f)p Ft(.)150 1945 y Fs(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 2054 y Ft(Incremen)m(tal)h (undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 2205 y Fs(revert-line)27 b(\(M-r\))630 2314 y Ft(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 b(is)h(lik)m(e)i(executing)f(the)f Fs(undo)f Ft(command)630 2424 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) 150 2574 y Fs(tilde-expand)d(\(M-~\))630 2684 y Ft(P)m(erform)j(tilde)h (expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 2834 y Fs(set-mark)d(\(C-@\))630 2944 y Ft(Set)33 b(the)g(mark)f(to)i(the)f (p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(mark)g(is)f(set)630 3054 y(to)f(that)g(p)s(osition.) 150 3204 y Fs(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 3314 y Ft(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h (sa)m(v)m(ed)630 3423 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s (osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 3574 y Fs(character-search)26 b(\(C-]\))630 3683 y Ft(A)f(c)m(haracter)h(is) f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s (ccurrence)g(of)g(that)g(c)m(haracter.)630 3793 y(A)30 b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s (ccurrences.)150 3943 y Fs(character-search-backwar)o(d)24 b(\(M-C-]\))630 4053 y Ft(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s (oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) g(that)630 4162 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f (searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 4313 y Fs(skip-csi-sequence)d(\(\))630 4422 y Ft(Read)i(enough)f(c)m (haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f (as)g(those)h(de\014ned)630 4532 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g (and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m (trol)g(Sequence)630 4642 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fs("\\)p Ft(e[)p Fs(")p Ft(,)g(k)m(eys)f(pro-)630 4751 y(ducing)31 b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e (explicitly)j(b)s(ound)c(to)i(a)h(readline)630 4861 y(command,)f (instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f (editing)h(bu\013er.)44 b(This)31 b(is)630 4970 y(un)m(b)s(ound)d(b)m (y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 5121 y Fs(insert-comment)26 b(\(M-#\))630 5230 y Ft(Without)36 b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 b(of)g(the)g Fs(comment-begin)c Ft(v)-5 b(ariable)36 b(is)g(in-)630 5340 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f (curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g (supplied,)p eop end %%Page: 23 27 TeXDict begin 23 26 bop 150 -116 a Ft(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(23)630 299 y(this)36 b(command)h(acts)g(as)g(a)g(toggle:)55 b(if)37 b(the)f(c)m(haracters)i (at)g(the)e(b)s(eginning)g(of)h(the)g(line)630 408 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)31 b(of)f Fs(comment-begin)p Ft(,)e(the)i(v)-5 b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 518 y(c)m(haracters)42 b(in)d Fs(comment-begin)e Ft(are)j(deleted)h (from)f(the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 628 y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h (newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 787 y Fs(dump-functions)d (\(\))630 897 y Ft(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g(their) g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 1006 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h (output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 1116 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fj(inputrc)k Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k (default.)150 1275 y Fs(dump-variables)26 b(\(\))630 1385 y Ft(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h (output)f(stream.)630 1494 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is) g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a) m(y)g(that)630 1604 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fj(inputrc)k Ft(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c (b)m(y)k(default.)150 1763 y Fs(dump-macros)c(\(\))630 1873 y Ft(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences) f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 1983 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e (supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 2092 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e Fj(inputrc)35 b Ft(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) d(b)m(y)630 2202 y(default.)150 2361 y Fs(emacs-editing-mode)e(\(C-e\)) 630 2471 y Ft(When)30 b(in)g Fs(vi)g Ft(command)g(mo)s(de,)g(this)h (causes)f(a)h(switc)m(h)g(to)g Fs(emacs)e Ft(editing)i(mo)s(de.)150 2630 y Fs(vi-editing-mode)26 b(\(M-C-j\))630 2740 y Ft(When)k(in)g Fs(emacs)f Ft(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g Fs(vi)f Ft(editing)h(mo)s(de.)150 2980 y Fr(1.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 3140 y Ft(While)32 b(the)g(Readline)g(library)f(do)s (es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g Fs(vi)f Ft(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 3249 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 b(The)34 b(Readline)g Fs(vi)g Ft(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s (eci\014ed)f(in)150 3359 y(the)e Fm(posix)e Ft(standard.)275 3494 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m (een)d Fs(emacs)f Ft(and)g Fs(vi)h Ft(editing)g(mo)s(des,)g(use)g(the)g (command)150 3603 y Fl(M-C-j)36 b Ft(\(b)s(ound)h(to)h (emacs-editing-mo)s(de)i(when)d(in)g Fs(vi)h Ft(mo)s(de)f(and)g(to)i (vi-editing-mo)s(de)g(in)e Fs(emacs)150 3713 y Ft(mo)s(de\).)k(The)30 b(Readline)h(default)f(is)g Fs(emacs)f Ft(mo)s(de.)275 3847 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fs(vi)f Ft(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s (de,)g(as)h(if)f(y)m(ou)150 3957 y(had)f(t)m(yp)s(ed)g(an)g(`)p Fs(i)p Ft('.)41 b(Pressing)29 b Fs(ESC)f Ft(switc)m(hes)i(y)m(ou)g(in)m (to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150 4066 y(text)35 b(of)f(the)g(line)g(with)f(the)h(standard)f Fs(vi)g Ft(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g (history)f(lines)h(with)150 4176 y(`)p Fs(k)p Ft(')d(and)e(subsequen)m (t)h(lines)h(with)f(`)p Fs(j)p Ft(',)g(and)g(so)h(forth.)p eop end %%Page: 24 28 TeXDict begin 24 27 bop 3659 -116 a Ft(24)150 299 y Fp(2)80 b(Programming)54 b(with)f(GNU)h(Readline)150 524 y Ft(This)24 b(c)m(hapter)i(describ)s(es)e(the)h(in)m(terface)h(b)s(et)m(w)m(een)g (the)f Fm(gnu)f Ft(Readline)i(Library)e(and)g(other)h(programs.)150 634 y(If)k(y)m(ou)g(are)g(a)h(programmer,)f(and)f(y)m(ou)i(wish)e(to)i (include)f(the)g(features)g(found)f(in)h Fm(gnu)g Ft(Readline)g(suc)m (h)150 743 y(as)c(completion,)j(line)d(editing,)i(and)d(in)m(teractiv)m (e)k(history)d(manipulation)g(in)f(y)m(our)h(o)m(wn)g(programs,)h(this) 150 853 y(section)32 b(is)e(for)g(y)m(ou.)150 1090 y Fr(2.1)68 b(Basic)45 b(Beha)l(vior)150 1250 y Ft(Man)m(y)39 b(programs)e(pro)m(vide)h(a)h(command)f(line)g(in)m(terface,)k(suc)m(h) 37 b(as)i Fs(mail)p Ft(,)g Fs(ftp)p Ft(,)g(and)e Fs(sh)p Ft(.)63 b(F)-8 b(or)39 b(suc)m(h)150 1359 y(programs,)29 b(the)f(default)h(b)s(eha)m(viour)f(of)h(Readline)g(is)g(su\016cien)m (t.)40 b(This)28 b(section)i(describ)s(es)d(ho)m(w)i(to)g(use)150 1469 y(Readline)35 b(in)f(the)h(simplest)f(w)m(a)m(y)h(p)s(ossible,)h (p)s(erhaps)c(to)j(replace)h(calls)f(in)f(y)m(our)h(co)s(de)f(to)h Fs(gets\(\))e Ft(or)150 1578 y Fs(fgets\(\))p Ft(.)275 1711 y(The)f(function)g Fs(readline\(\))e Ft(prin)m(ts)i(a)g(prompt)g Fj(prompt)i Ft(and)e(then)g(reads)g(and)g(returns)f(a)i(single)150 1821 y(line)g(of)g(text)h(from)e(the)h(user.)47 b(If)32 b Fj(prompt)i Ft(is)e Fs(NULL)g Ft(or)h(the)f(empt)m(y)i(string,)f(no)g (prompt)e(is)i(displa)m(y)m(ed.)150 1930 y(The)k(line)g Fs(readline)e Ft(returns)h(is)h(allo)s(cated)i(with)e Fs(malloc\(\))p Ft(;)h(the)f(caller)i(should)d Fs(free\(\))f Ft(the)j(line)150 2040 y(when)29 b(it)i(has)f(\014nished)f(with)h(it.) 42 b(The)29 b(declaration)j(for)f Fs(readline)d Ft(in)i(ANSI)g(C)g(is) 390 2173 y Fs(char)47 b(*readline)e(\(const)h(char)h(*)p Fl(prompt)p Fs(\);)150 2305 y Ft(So,)31 b(one)f(migh)m(t)h(sa)m(y)390 2438 y Fs(char)47 b(*line)f(=)h(readline)f(\("Enter)g(a)h(line:)g("\);) 150 2571 y Ft(in)23 b(order)f(to)h(read)g(a)g(line)h(of)f(text)h(from)e (the)h(user.)38 b(The)22 b(line)h(returned)f(has)g(the)h(\014nal)g (newline)g(remo)m(v)m(ed,)150 2681 y(so)31 b(only)f(the)h(text)g (remains.)275 2813 y(If)40 b Fs(readline)e Ft(encoun)m(ters)j(an)f Fs(EOF)f Ft(while)i(reading)f(the)h(line,)j(and)39 b(the)i(line)g(is)f (empt)m(y)h(at)g(that)150 2923 y(p)s(oin)m(t,)30 b(then)f Fs(\(char)g(*\)NULL)e Ft(is)j(returned.)39 b(Otherwise,)30 b(the)f(line)h(is)f(ended)g(just)g(as)g(if)h(a)f(newline)h(had)150 3032 y(b)s(een)g(t)m(yp)s(ed.)275 3165 y(If)c(y)m(ou)h(w)m(an)m(t)h (the)f(user)g(to)g(b)s(e)g(able)g(to)h(get)g(at)g(the)f(line)g(later,)i (\(with)e Fs(C-p)f Ft(for)h(example\),)i(y)m(ou)e(m)m(ust)150 3275 y(call)32 b Fs(add_history\(\))26 b Ft(to)32 b(sa)m(v)m(e)f(the)g (line)g(a)m(w)m(a)m(y)h(in)e(a)h Fj(history)38 b Ft(list)31 b(of)g(suc)m(h)f(lines.)390 3407 y Fs(add_history)45 b(\(line\);)150 3540 y Ft(F)-8 b(or)31 b(full)f(details)i(on)e(the)g (GNU)h(History)g(Library)-8 b(,)31 b(see)g(the)f(asso)s(ciated)i(man)m (ual.)275 3673 y(It)f(is)g(preferable)g(to)i(a)m(v)m(oid)f(sa)m(ving)h (empt)m(y)e(lines)h(on)f(the)h(history)f(list,)h(since)g(users)e (rarely)i(ha)m(v)m(e)h(a)150 3783 y(burning)28 b(need)h(to)i(reuse)e(a) h(blank)g(line.)40 b(Here)31 b(is)e(a)h(function)g(whic)m(h)f(usefully) g(replaces)i(the)f(standard)150 3892 y Fs(gets\(\))f Ft(library)h(function,)g(and)g(has)g(the)g(adv)-5 b(an)m(tage)33 b(of)d(no)g(static)i(bu\013er)e(to)h(o)m(v)m(er\015o)m(w:)390 4025 y Fs(/*)47 b(A)h(static)e(variable)f(for)i(holding)f(the)h(line.)f (*/)390 4134 y(static)g(char)h(*line_read)e(=)i(\(char)g(*\)NULL;)390 4354 y(/*)g(Read)g(a)g(string,)f(and)h(return)f(a)i(pointer)d(to)j(it.) 533 4463 y(Returns)e(NULL)h(on)g(EOF.)f(*/)390 4573 y(char)h(*)390 4682 y(rl_gets)f(\(\))390 4792 y({)485 4902 y(/*)i(If)f(the)g(buffer)f (has)h(already)f(been)g(allocated,)629 5011 y(return)g(the)h(memory)f (to)h(the)g(free)f(pool.)h(*/)485 5121 y(if)h(\(line_read\))581 5230 y({)676 5340 y(free)f(\(line_read\);)p eop end %%Page: 25 29 TeXDict begin 25 28 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(25)676 299 y Fs(line_read)46 b(=)h(\(char)f(*\)NULL;)581 408 y(})485 628 y(/*)i(Get)f(a)g(line)g(from)f(the)h(user.)g(*/)485 737 y(line_read)f(=)h(readline)f(\(""\);)485 956 y(/*)i(If)f(the)g (line)f(has)h(any)g(text)g(in)g(it,)629 1066 y(save)f(it)h(on)h(the)f (history.)e(*/)485 1176 y(if)j(\(line_read)d(&&)i(*line_read\))581 1285 y(add_history)e(\(line_read\);)485 1504 y(return)i(\(line_read\);) 390 1614 y(})275 1766 y Ft(This)27 b(function)h(giv)m(es)h(the)f(user)g (the)g(default)g(b)s(eha)m(viour)g(of)g Fs(TAB)g Ft(completion:)40 b(completion)30 b(on)e(\014le)150 1876 y(names.)41 b(If)31 b(y)m(ou)g(do)f(not)h(w)m(an)m(t)g(Readline)h(to)f(complete)h(on)f (\014lenames,)g(y)m(ou)g(can)f(c)m(hange)i(the)f(binding)150 1985 y(of)g(the)f Fs(TAB)g Ft(k)m(ey)h(with)f Fs(rl_bind_key\(\))p Ft(.)390 2137 y Fs(int)47 b(rl_bind_key)e(\(int)h Fl(key)p Fs(,)h(rl_command_func_t)c(*)p Fl(function)p Fs(\);)275 2290 y(rl_bind_key\(\))29 b Ft(tak)m(es)35 b(t)m(w)m(o)g(argumen)m(ts:) 47 b Fj(k)m(ey)c Ft(is)33 b(the)h(c)m(haracter)h(that)f(y)m(ou)g(w)m (an)m(t)g(to)g(bind,)g(and)150 2399 y Fj(function)39 b Ft(is)f(the)h(address)f(of)h(the)g(function)g(to)g(call)i(when)c Fj(k)m(ey)48 b Ft(is)39 b(pressed.)65 b(Binding)38 b Fs(TAB)g Ft(to)i Fs(rl_)150 2509 y(insert\(\))c Ft(mak)m(es)k Fs(TAB)e Ft(insert)g(itself.)67 b Fs(rl_bind_key\(\))35 b Ft(returns)j(non-zero)h(if)g Fj(k)m(ey)47 b Ft(is)39 b(not)g(a)g(v)-5 b(alid)150 2618 y(ASCI)s(I)29 b(c)m(haracter)j(co)s (de)e(\(b)s(et)m(w)m(een)i(0)f(and)e(255\).)275 2770 y(Th)m(us,)g(to)i(disable)g(the)f(default)h Fs(TAB)e Ft(b)s(eha)m(vior,)i(the)g(follo)m(wing)g(su\016ces:)390 2923 y Fs(rl_bind_key)45 b(\('\\t',)h(rl_insert\);)275 3075 y Ft(This)25 b(co)s(de)i(should)e(b)s(e)h(executed)h(once)g(at)g (the)g(start)g(of)f(y)m(our)h(program;)g(y)m(ou)g(migh)m(t)g(write)g(a) g(func-)150 3184 y(tion)33 b(called)h Fs(initialize_readline\(\))27 b Ft(whic)m(h)33 b(p)s(erforms)e(this)h(and)h(other)g(desired)f (initializations,)150 3294 y(suc)m(h)e(as)h(installing)g(custom)g (completers)g(\(see)g(Section)h(2.6)f([Custom)f(Completers],)h(page)g (49\).)150 3561 y Fr(2.2)68 b(Custom)45 b(F)-11 b(unctions)150 3721 y Ft(Readline)28 b(pro)m(vides)f(man)m(y)g(functions)g(for)g (manipulating)h(the)f(text)h(of)g(the)f(line,)i(but)d(it)i(isn't)f(p)s (ossible)150 3830 y(to)37 b(an)m(ticipate)i(the)e(needs)f(of)h(all)g (programs.)59 b(This)36 b(section)h(describ)s(es)f(the)h(v)-5 b(arious)36 b(functions)h(and)150 3940 y(v)-5 b(ariables)27 b(de\014ned)e(within)g(the)h(Readline)h(library)f(whic)m(h)g(allo)m(w)h (a)g(user)e(program)h(to)h(add)e(customized)150 4049 y(functionalit)m(y)32 b(to)f(Readline.)275 4202 y(Before)37 b(declaring)g(an)m(y)g(functions)f(that)h(customize)h(Readline's)f(b)s (eha)m(vior,)h(or)f(using)f(an)m(y)h(func-)150 4311 y(tionalit)m(y)48 b(Readline)e(pro)m(vides)f(in)g(other)h(co)s(de,)k(an)45 b(application)i(writer)e(should)g(include)g(the)h(\014le)150 4421 y Fs()28 b Ft(in)33 b(an)m(y)h(\014le)f(that) h(uses)f(Readline's)h(features.)51 b(Since)33 b(some)h(of)g(the)f (de\014-)150 4530 y(nitions)e(in)g Fs(readline.h)d Ft(use)j(the)h Fs(stdio)d Ft(library)-8 b(,)32 b(the)f(\014le)h Fs()c Ft(should)i(b)s(e)h(included)f(b)s(efore)150 4640 y Fs(readline.h)p Ft(.)275 4792 y Fs(readline.h)d Ft(de\014nes)j(a)h(C)f(prepro)s(cessor) g(v)-5 b(ariable)31 b(that)g(should)f(b)s(e)g(treated)h(as)g(an)g(in)m (teger,)h Fs(RL_)150 4902 y(READLINE_VERSION)p Ft(,)20 b(whic)m(h)h(ma)m(y)i(b)s(e)f(used)f(to)i(conditionally)h(compile)f (application)g(co)s(de)f(dep)s(ending)150 5011 y(on)35 b(the)g(installed)h(Readline)f(v)m(ersion.)56 b(The)34 b(v)-5 b(alue)35 b(is)h(a)f(hexadecimal)h(enco)s(ding)f(of)g(the)h(ma)5 b(jor)35 b(and)150 5121 y(minor)f(v)m(ersion)g(n)m(um)m(b)s(ers)f(of)h (the)h(library)-8 b(,)35 b(of)f(the)h(form)e(0x)p Fj(MMmm)p Ft(.)53 b Fj(MM)45 b Ft(is)34 b(the)g(t)m(w)m(o-digit)j(ma)5 b(jor)150 5230 y(v)m(ersion)29 b(n)m(um)m(b)s(er;)g Fj(mm)f Ft(is)h(the)g(t)m(w)m(o-digit)j(minor)c(v)m(ersion)i(n)m(um)m(b)s(er.) 38 b(F)-8 b(or)30 b(Readline)g(4.2,)g(for)f(example,)150 5340 y(the)i(v)-5 b(alue)30 b(of)h Fs(RL_READLINE_VERSION)25 b Ft(w)m(ould)30 b(b)s(e)g Fs(0x0402)p Ft(.)p eop end %%Page: 26 30 TeXDict begin 26 29 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(26)150 299 y Fi(2.2.1)63 b(Readline)40 b(T)m(yp)s(edefs)150 446 y Ft(F)-8 b(or)31 b(readabilit)m(y)-8 b(,)33 b(w)m(e)d(declare)i(a) f(n)m(um)m(b)s(er)e(of)h(new)g(ob)5 b(ject)31 b(t)m(yp)s(es,)g(all)g(p) s(oin)m(ters)f(to)i(functions.)275 585 y(The)j(reason)h(for)f (declaring)h(these)h(new)e(t)m(yp)s(es)g(is)h(to)h(mak)m(e)f(it)g (easier)h(to)f(write)g(co)s(de)g(describing)150 694 y(p)s(oin)m(ters)30 b(to)h(C)f(functions)g(with)g(appropriately)h(protot)m(yp)s(ed)f (argumen)m(ts)h(and)f(return)f(v)-5 b(alues.)275 833 y(F)d(or)37 b(instance,)j(sa)m(y)d(w)m(e)g(w)m(an)m(t)h(to)g(declare)f (a)h(v)-5 b(ariable)37 b Fj(func)42 b Ft(as)37 b(a)g(p)s(oin)m(ter)g (to)g(a)h(function)e(whic)m(h)150 943 y(tak)m(es)27 b(t)m(w)m(o)g Fs(int)e Ft(argumen)m(ts)h(and)f(returns)f(an)i Fs(int)f Ft(\(this)h(is)f(the)h(t)m(yp)s(e)g(of)g(all)h(of)e(the)h(Readline)h (bindable)150 1052 y(functions\).)41 b(Instead)30 b(of)g(the)h(classic) h(C)e(declaration)275 1191 y Fs(int)f(\(*func\)\(\);)150 1330 y Ft(or)h(the)h(ANSI-C)f(st)m(yle)i(declaration)275 1468 y Fs(int)d(\(*func\)\(int,)e(int\);)150 1607 y Ft(w)m(e)k(ma)m(y)g (write)275 1746 y Fs(rl_command_func_t)25 b(*func;)275 1885 y Ft(The)k(full)h(list)i(of)e(function)g(p)s(oin)m(ter)g(t)m(yp)s (es)h(a)m(v)-5 b(ailable)33 b(is)150 2051 y Fs(typedef)28 b(int)i(rl_command_func_t)c(\(int,)i(int\);)150 2160 y(typedef)g(char)i(*rl_compentry_func_t)24 b(\(const)29 b(char)g(*,)h(int\);)150 2270 y(typedef)e(char)i (**rl_completion_func_t)24 b(\(const)29 b(char)g(*,)h(int,)f(int\);)150 2379 y(typedef)f(char)i(*rl_quote_func_t)c(\(char)i(*,)i(int,)f(char)h (*\);)150 2489 y(typedef)e(char)i(*rl_dequote_func_t)25 b(\(char)k(*,)h(int\);)150 2598 y(typedef)e(int)i(rl_compignore_func_t) 25 b(\(char)k(**\);)150 2708 y(typedef)f(void)i(rl_compdisp_func_t)25 b(\(char)k(**,)g(int,)h(int\);)150 2818 y(typedef)e(int)i (rl_hook_func_t)c(\(void\);)150 2927 y(typedef)i(int)i(rl_getc_func_t)c (\(FILE)j(*\);)150 3037 y(typedef)f(int)i(rl_linebuf_func_t)c(\(char)i (*,)i(int\);)150 3146 y(typedef)e(int)i(rl_intfunc_t)d(\(int\);)150 3256 y(#define)h(rl_ivoidfunc_t)f(rl_hook_func_t)150 3366 y(typedef)h(int)i(rl_icpfunc_t)d(\(char)i(*\);)150 3475 y(typedef)f(int)i(rl_icppfunc_t)d(\(char)i(**\);)150 3585 y(typedef)f(void)i(rl_voidfunc_t)c(\(void\);)150 3694 y(typedef)i(void)i(rl_vintfunc_t)c(\(int\);)150 3804 y(typedef)i(void)i(rl_vcpfunc_t)d(\(char)i(*\);)150 3914 y(typedef)f(void)i(rl_vcppfunc_t)c(\(char)j(**\);)150 4090 y Fi(2.2.2)63 b(W)-10 b(riting)41 b(a)f(New)h(F)-10 b(unction)150 4237 y Ft(In)30 b(order)h(to)h(write)f(new)g(functions)f (for)h(Readline,)h(y)m(ou)g(need)e(to)i(kno)m(w)f(the)g(calling)i(con)m (v)m(en)m(tions)g(for)150 4347 y(k)m(eyb)s(oard-in)m(v)m(ok)m(ed)f (functions,)d(and)h(the)g(names)g(of)g(the)g(v)-5 b(ariables)31 b(that)f(describ)s(e)g(the)g(curren)m(t)g(state)150 4456 y(of)h(the)f(line)h(read)f(so)h(far.)275 4595 y(The)e(calling)j (sequence)f(for)f(a)h(command)f Fs(foo)g Ft(lo)s(oks)g(lik)m(e)390 4734 y Fs(int)47 b(foo)g(\(int)f(count,)h(int)f(key\))150 4872 y Ft(where)35 b Fj(coun)m(t)k Ft(is)d(the)g(n)m(umeric)g(argumen)m (t)g(\(or)g(1)g(if)g(defaulted\))h(and)e Fj(k)m(ey)44 b Ft(is)36 b(the)g(k)m(ey)h(that)f(in)m(v)m(ok)m(ed)150 4982 y(this)30 b(function.)275 5121 y(It)23 b(is)g(completely)h(up)e (to)i(the)f(function)g(as)g(to)h(what)f(should)f(b)s(e)h(done)f(with)h (the)g(n)m(umeric)g(argumen)m(t.)150 5230 y(Some)40 b(functions)g(use)f (it)i(as)f(a)g(rep)s(eat)h(coun)m(t,)i(some)d(as)h(a)f(\015ag,)j(and)c (others)h(to)h(c)m(ho)s(ose)g(alternate)150 5340 y(b)s(eha)m(vior)i (\(refreshing)g(the)h(curren)m(t)f(line)h(as)f(opp)s(osed)g(to)h (refreshing)e(the)i(screen,)j(for)c(example\).)p eop end %%Page: 27 31 TeXDict begin 27 30 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(27)150 299 y(Some)33 b(c)m(ho)s(ose)h(to)g(ignore)g(it.)50 b(In)32 b(general,)j(if)f(a)f(function)g(uses)g(the)g(n)m(umeric)g(argumen)m(t) h(as)f(a)h(rep)s(eat)150 408 y(coun)m(t,)29 b(it)g(should)e(b)s(e)g (able)h(to)h(do)f(something)g(useful)f(with)h(b)s(oth)f(negativ)m(e)j (and)d(p)s(ositiv)m(e)i(argumen)m(ts.)150 518 y(A)m(t)i(the)g(v)m(ery)g (least,)h(it)e(should)g(b)s(e)g(a)m(w)m(are)h(that)g(it)g(can)g(b)s(e)f (passed)g(a)g(negativ)m(e)j(argumen)m(t.)275 658 y(A)38 b(command)f(function)h(should)f(return)g(0)h(if)g(its)h(action)g (completes)g(successfully)-8 b(,)41 b(and)c(a)h(v)-5 b(alue)150 767 y(greater)34 b(than)f(zero)g(if)g(some)h(error)e(o)s (ccurs.)48 b(This)32 b(is)h(the)g(con)m(v)m(en)m(tion)i(ob)s(ey)m(ed)f (b)m(y)e(all)i(of)f(the)g(builtin)150 877 y(Readline)e(bindable)f (command)g(functions.)150 1126 y Fr(2.3)68 b(Readline)47 b(V)-11 b(ariables)150 1285 y Ft(These)30 b(v)-5 b(ariables)31 b(are)g(a)m(v)-5 b(ailable)33 b(to)e(function)f(writers.)3371 1480 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(rl_line_buffer)390 1589 y Ft(This)30 b(is)i(the)f(line)g(gathered)h(so)f(far.)43 b(Y)-8 b(ou)32 b(are)f(w)m(elcome)i(to)f(mo)s(dify)f(the)g(con)m(ten)m (ts)i(of)e(the)g(line,)390 1699 y(but)k(see)h(Section)g(2.4.5)h([Allo)m (wing)h(Undoing],)f(page)f(36.)57 b(The)35 b(function)g Fs(rl_extend_line_)390 1809 y(buffer)29 b Ft(is)h(a)m(v)-5 b(ailable)33 b(to)e(increase)g(the)g(memory)f(allo)s(cated)i(to)f Fs(rl_line_buffer)p Ft(.)3371 2004 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_point)390 2113 y Ft(The)30 b(o\013set)h(of)g(the)f (curren)m(t)h(cursor)e(p)s(osition)i(in)f Fs(rl_line_buffer)c Ft(\(the)31 b Fk(p)-5 b(oint)9 b Ft(\).)3371 2308 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_end)390 2418 y Ft(The)27 b(n)m(um)m(b)s(er)g(of)h(c)m(haracters)h(presen)m(t)f(in)g Fs(rl_line_buffer)p Ft(.)36 b(When)27 b Fs(rl_point)f Ft(is)i(at)h(the)f(end)390 2527 y(of)j(the)f(line,)h Fs(rl_point)d Ft(and)i Fs(rl_end)f Ft(are)h(equal.)3371 2722 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_mark)390 2832 y Ft(The)36 b Fj(mark)42 b Ft(\(sa)m(v)m(ed)d(p)s(osition\))e(in)g (the)g(curren)m(t)f(line.)61 b(If)36 b(set,)k(the)d(mark)f(and)h(p)s (oin)m(t)f(de\014ne)h(a)390 2941 y Fk(r)-5 b(e)g(gion)p Ft(.)3371 3136 y([V)d(ariable])-3598 b Fh(int)53 b(rl_done)390 3246 y Ft(Setting)22 b(this)g(to)g(a)g(non-zero)g(v)-5 b(alue)23 b(causes)f(Readline)g(to)g(return)f(the)h(curren)m(t)f(line)h (immediately)-8 b(.)3371 3440 y([V)g(ariable])-3598 b Fh(int)53 b(rl_num_chars_to_read)390 3550 y Ft(Setting)34 b(this)e(to)i(a)f(p)s(ositiv)m(e)h(v)-5 b(alue)34 b(b)s(efore)e (calling)i Fs(readline\(\))d Ft(causes)i(Readline)g(to)h(return)390 3660 y(after)i(accepting)h(that)g(man)m(y)e(c)m(haracters,)k(rather)d (than)f(reading)h(up)e(to)j(a)f(c)m(haracter)h(b)s(ound)390 3769 y(to)31 b Fs(accept-line)p Ft(.)3371 3964 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_pending_input)390 4074 y Ft(Setting)26 b(this)f(to)h(a)f(v)-5 b(alue)26 b(mak)m(es)g(it)g(the) f(next)g(k)m(eystrok)m(e)i(read.)39 b(This)24 b(is)i(a)f(w)m(a)m(y)h (to)g(stu\013)f(a)g(single)390 4183 y(c)m(haracter)32 b(in)m(to)f(the)g(input)e(stream.)3371 4378 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_dispatching)390 4488 y Ft(Set)24 b(to)h(a)g(non-zero)g (v)-5 b(alue)24 b(if)h(a)f(function)g(is)g(b)s(eing)g(called)i(from)d (a)i(k)m(ey)g(binding;)g(zero)g(otherwise.)390 4597 y(Application)37 b(functions)e(can)h(test)h(this)e(to)i(disco)m(v)m(er)g(whether)e(they) h(w)m(ere)g(called)h(directly)f(or)390 4707 y(b)m(y)30 b(Readline's)h(dispatc)m(hing)g(mec)m(hanism.)3371 4902 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_erase_empty_line)390 5011 y Ft(Setting)47 b(this)e(to)i(a)f(non-zero)h(v)-5 b(alue)46 b(causes)h(Readline)f(to)h(completely)g(erase)g(the)f(curren) m(t)390 5121 y(line,)f(including)c(an)m(y)g(prompt,)j(an)m(y)d(time)h (a)g(newline)f(is)h(t)m(yp)s(ed)f(as)g(the)h(only)f(c)m(haracter)i(on) 390 5230 y(an)36 b(otherwise-empt)m(y)i(line.)58 b(The)36 b(cursor)g(is)g(mo)m(v)m(ed)h(to)g(the)g(b)s(eginning)e(of)i(the)f (newly-blank)390 5340 y(line.)p eop end %%Page: 28 32 TeXDict begin 28 31 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(28)3371 299 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(rl_prompt)390 408 y Ft(The)26 b(prompt)f(Readline)i(uses.)38 b(This)26 b(is)g(set)h(from)e(the)i(argumen)m(t)f(to)h Fs(readline\(\))p Ft(,)d(and)i(should)390 518 y(not)h(b)s(e)f(assigned)h(to)h(directly)-8 b(.)41 b(The)26 b Fs(rl_set_prompt\(\))d Ft(function)j(\(see)i(Section) g(2.4.6)h([Redis-)390 628 y(pla)m(y],)i(page)h(37\))f(ma)m(y)g(b)s(e)f (used)f(to)j(mo)s(dify)d(the)i(prompt)e(string)h(after)h(calling)h Fs(readline\(\))p Ft(.)3371 814 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(rl_display_prompt)390 924 y Ft(The)31 b(string)h(displa)m(y)m(ed)g(as)g(the)g(prompt.)44 b(This)31 b(is)h(usually)f(iden)m(tical)j(to)e Fj(rl)p 3031 924 28 4 v 40 w(prompt)p Ft(,)f(but)g(ma)m(y)390 1033 y(b)s(e)j(c)m(hanged) g(temp)s(orarily)h(b)m(y)f(functions)g(that)g(use)g(the)h(prompt)e (string)h(as)h(a)f(message)i(area,)390 1143 y(suc)m(h)30 b(as)h(incremen)m(tal)g(searc)m(h.)3371 1329 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_already_prompted)390 1439 y Ft(If)36 b(an)g(application)i(wishes)d(to)i(displa)m(y)g(the)f (prompt)g(itself,)i(rather)f(than)f(ha)m(v)m(e)h(Readline)g(do)390 1548 y(it)c(the)g(\014rst)f(time)i Fs(readline\(\))c Ft(is)i(called,)j(it)e(should)f(set)h(this)g(v)-5 b(ariable)34 b(to)f(a)g(non-zero)g(v)-5 b(alue)390 1658 y(after)38 b(displa)m(ying)h(the)f(prompt.)63 b(The)37 b(prompt)g(m)m(ust)h(also)h (b)s(e)e(passed)g(as)i(the)f(argumen)m(t)g(to)390 1767 y Fs(readline\(\))30 b Ft(so)j(the)h(redispla)m(y)f(functions)f(can)i (up)s(date)e(the)h(displa)m(y)g(prop)s(erly)-8 b(.)48 b(The)32 b(calling)390 1877 y(application)g(is)e(resp)s(onsible)g(for)g (managing)h(the)f(v)-5 b(alue;)31 b(Readline)g(nev)m(er)g(sets)g(it.) 3371 2063 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_library_version)390 2173 y Ft(The)30 b(v)m(ersion)h(n)m(um)m(b)s (er)e(of)h(this)h(revision)f(of)h(the)f(library)-8 b(.)3371 2359 y([V)g(ariable])-3598 b Fh(int)53 b(rl_readline_version)390 2469 y Ft(An)34 b(in)m(teger)h(enco)s(ding)f(the)g(curren)m(t)g(v)m (ersion)h(of)f(the)g(library)-8 b(.)52 b(The)34 b(enco)s(ding)g(is)g (of)g(the)g(form)390 2578 y(0x)p Fj(MMmm)p Ft(,)39 b(where)d Fj(MM)47 b Ft(is)36 b(the)h(t)m(w)m(o-digit)i(ma)5 b(jor)36 b(v)m(ersion)h(n)m(um)m(b)s(er,)g(and)f Fj(mm)g Ft(is)h(the)f(t)m(w)m (o-)390 2688 y(digit)i(minor)f(v)m(ersion)h(n)m(um)m(b)s(er.)60 b(F)-8 b(or)38 b(example,)i(for)d(Readline-4.2,)k Fs (rl_readline_version)390 2798 y Ft(w)m(ould)30 b(ha)m(v)m(e)i(the)e(v) -5 b(alue)31 b(0x0402.)3371 2984 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_gnu_readline_p)390 3093 y Ft(Alw)m(a)m(ys)32 b(set)f(to)g(1,)g(denoting)f(that)h(this)g(is)f Fm(gnu)g Ft(readline)h(rather)f(than)g(some)h(em)m(ulation.)3371 3280 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_terminal_name)390 3389 y Ft(The)28 b(terminal)g(t)m(yp)s(e,)h(used) e(for)h(initialization.)43 b(If)28 b(not)g(set)h(b)m(y)e(the)i (application,)h(Readline)f(sets)390 3499 y(this)h(to)h(the)g(v)-5 b(alue)31 b(of)f(the)h Fs(TERM)e Ft(en)m(vironmen)m(t)i(v)-5 b(ariable)31 b(the)g(\014rst)e(time)j(it)e(is)h(called.)3371 3685 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_readline_name)390 3795 y Ft(This)30 b(v)-5 b(ariable)32 b(is)g(set)f(to)h(a)g(unique)e(name)h(b)m(y)g(eac)m(h)i(application)f (using)f(Readline.)44 b(The)30 b(v)-5 b(alue)390 3904 y(allo)m(ws)29 b(conditional)h(parsing)d(of)h(the)h(inputrc)e(\014le)h (\(see)h(Section)g(1.3.2)g([Conditional)g(Init)f(Con-)390 4014 y(structs],)j(page)g(12\).)3371 4200 y([V)-8 b(ariable])-3598 b Fh(FILE)54 b(*)e(rl_instream)390 4310 y Ft(The)40 b(stdio)i(stream)f (from)g(whic)m(h)f(Readline)i(reads)f(input.)71 b(If)41 b Fs(NULL)p Ft(,)i(Readline)e(defaults)g(to)390 4419 y Fj(stdin)p Ft(.)3371 4606 y([V)-8 b(ariable])-3598 b Fh(FILE)54 b(*)e(rl_outstream)390 4715 y Ft(The)34 b(stdio)h(stream)f(to)i(whic)m(h)e(Readline)h(p)s(erforms)e(output.)52 b(If)34 b Fs(NULL)p Ft(,)h(Readline)g(defaults)f(to)390 4825 y Fj(stdout)p Ft(.)3371 5011 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_prefer_env_winsize)390 5121 y Ft(If)28 b(non-zero,)h(Readline)g(giv)m(es)h(v)-5 b(alues)29 b(found)e(in)h(the) g Fs(LINES)f Ft(and)h Fs(COLUMNS)e Ft(en)m(vironmen)m(t)j(v)-5 b(ari-)390 5230 y(ables)41 b(greater)h(precedence)g(than)e(v)-5 b(alues)41 b(fetc)m(hed)h(from)e(the)h(k)m(ernel)h(when)e(computing)h (the)390 5340 y(screen)30 b(dimensions.)p eop end %%Page: 29 33 TeXDict begin 29 32 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(29)3371 299 y([V)-8 b(ariable])-3598 b Fh(rl_command_func_t)57 b(*)c(rl_last_func)390 408 y Ft(The)34 b(address)g(of)h(the)g(last)h (command)e(function)g(Readline)i(executed.)55 b(Ma)m(y)35 b(b)s(e)g(used)f(to)h(test)390 518 y(whether)30 b(or)g(not)h(a)f (function)h(is)f(b)s(eing)g(executed)h(t)m(wice)h(in)e(succession,)h (for)f(example.)3371 737 y([V)-8 b(ariable])-3598 b Fh(rl_hook_func_t) 57 b(*)52 b(rl_startup_hook)390 847 y Ft(If)34 b(non-zero,)i(this)e(is) h(the)f(address)f(of)i(a)g(function)f(to)h(call)g(just)f(b)s(efore)g Fs(readline)e Ft(prin)m(ts)i(the)390 956 y(\014rst)c(prompt.)3371 1176 y([V)-8 b(ariable])-3598 b Fh(rl_hook_func_t)57 b(*)52 b(rl_pre_input_hook)390 1285 y Ft(If)35 b(non-zero,)j(this)d(is) g(the)h(address)f(of)g(a)h(function)f(to)i(call)f(after)g(the)g (\014rst)f(prompt)f(has)i(b)s(een)390 1395 y(prin)m(ted)30 b(and)g(just)f(b)s(efore)h Fs(readline)f Ft(starts)h(reading)h(input)e (c)m(haracters.)3371 1614 y([V)-8 b(ariable])-3598 b Fh(rl_hook_func_t)57 b(*)52 b(rl_event_hook)390 1724 y Ft(If)40 b(non-zero,)k(this)d(is)f(the)h(address)f(of)h(a)g(function) f(to)h(call)h(p)s(erio)s(dically)f(when)f(Readline)h(is)390 1833 y(w)m(aiting)30 b(for)f(terminal)h(input.)39 b(By)30 b(default,)g(this)f(will)g(b)s(e)g(called)h(at)g(most)f(ten)h(times)f (a)h(second)390 1943 y(if)g(there)h(is)f(no)h(k)m(eyb)s(oard)f(input.) 3371 2162 y([V)-8 b(ariable])-3598 b Fh(rl_getc_func_t)57 b(*)52 b(rl_getc_function)390 2271 y Ft(If)30 b(non-zero,)h(Readline)g (will)g(call)h(indirectly)e(through)g(this)h(p)s(oin)m(ter)f(to)h(get)h (a)e(c)m(haracter)i(from)390 2381 y(the)21 b(input)g(stream.)38 b(By)21 b(default,)j(it)e(is)f(set)h(to)g Fs(rl_getc)p Ft(,)f(the)h(default)f(Readline)h(c)m(haracter)h(input)390 2491 y(function)f(\(see)i(Section)g(2.4.8)g([Character)g(Input],)f (page)h(38\).)39 b(In)22 b(general,)k(an)c(application)i(that)390 2600 y(sets)31 b Fj(rl)p 635 2600 28 4 v 40 w(getc)p 835 2600 V 41 w(function)f Ft(should)g(consider)g(setting)h Fj(rl)p 2234 2600 V 40 w(input)p 2487 2600 V 39 w(a)m(v)-5 b(ailable)p 2867 2600 V 43 w(ho)s(ok)36 b Ft(as)30 b(w)m(ell.)3371 2819 y([V)-8 b(ariable])-3598 b Fh(rl_hook_func_t)57 b(*)52 b(rl_signal_event_hook)390 2929 y Ft(If)27 b(non-zero,)h(this)f (is)g(the)g(address)f(of)i(a)f(function)g(to)g(call)i(if)e(a)g(read)g (system)g(call)h(is)g(in)m(terrupted)390 3039 y(when)h(Readline)i(is)g (reading)f(terminal)h(input.)3371 3258 y([V)-8 b(ariable])-3598 b Fh(rl_hook_func_t)57 b(*)52 b(rl_input_available_ho)q(ok)390 3367 y Ft(If)28 b(non-zero,)j(Readline)e(will)g(use)g(this)g (function's)g(return)f(v)-5 b(alue)29 b(when)f(it)i(needs)e(to)i (determine)390 3477 y(whether)42 b(or)g(not)h(there)f(is)h(a)m(v)-5 b(ailable)45 b(input)c(on)i(the)f(curren)m(t)g(input)g(source.)77 b(The)42 b(default)390 3587 y(ho)s(ok)25 b(c)m(hec)m(ks)i Fs(rl_instream)p Ft(;)d(if)i(an)f(application)i(is)e(using)g(a)h (di\013eren)m(t)g(input)e(source,)j(it)f(should)390 3696 y(set)34 b(the)f(ho)s(ok)h(appropriately)-8 b(.)50 b(Readline)34 b(queries)f(for)h(a)m(v)-5 b(ailable)35 b(input)e(when)f(implemen)m (ting)390 3806 y(in)m(tra-k)m(ey-sequence)f(timeouts)e(during)e(input)g (and)h(incremen)m(tal)h(searc)m(hes.)41 b(This)27 b(ma)m(y)i(use)f(an) 390 3915 y(application-sp)s(eci\014c)22 b(timeout)g(b)s(efore)f (returning)f(a)h(v)-5 b(alue;)25 b(Readline)c(uses)f(the)i(v)-5 b(alue)21 b(passed)f(to)390 4025 y Fs(rl_set_keyboard_input_ti)o(meou)o (t\(\))e Ft(or)24 b(the)g(v)-5 b(alue)25 b(of)g(the)f(user-settable)i Fj(k)m(eyseq-timeout)390 4134 y Ft(v)-5 b(ariable.)48 b(This)31 b(is)i(designed)f(for)g(use)g(b)m(y)g(applications)i(using)e (Readline's)h(callbac)m(k)h(in)m(terface)390 4244 y(\(see)d(Section)f (2.4.12)i([Alternate)f(In)m(terface],)h(page)e(42\),)i(whic)m(h)d(ma)m (y)h(not)g(use)g(the)g(traditional)390 4354 y Fs(read\(2\))39 b Ft(and)g(\014le)i(descriptor)f(in)m(terface,)45 b(or)c(other)f (applications)i(using)e(a)h(di\013eren)m(t)g(input)390 4463 y(mec)m(hanism.)k(If)31 b(an)g(application)i(uses)e(an)h(input)e (mec)m(hanism)i(or)g(ho)s(ok)f(that)h(can)g(p)s(oten)m(tially)390 4573 y(exceed)38 b(the)e(v)-5 b(alue)37 b(of)g Fj(k)m(eyseq-timeout)p Ft(,)k(it)c(should)e(increase)j(the)e(timeout)i(or)f(set)g(this)f(ho)s (ok)390 4682 y(appropriately)d(ev)m(en)g(when)e(not)h(using)g(the)h (callbac)m(k)h(in)m(terface.)48 b(In)31 b(general,)j(an)f(application) 390 4792 y(that)e(sets)g Fj(rl)p 832 4792 V 40 w(getc)p 1032 4792 V 41 w(function)f Ft(should)g(consider)g(setting)h Fj(rl)p 2431 4792 V 40 w(input)p 2684 4792 V 39 w(a)m(v)-5 b(ailable)p 3064 4792 V 43 w(ho)s(ok)36 b Ft(as)30 b(w)m(ell.)3371 5011 y([V)-8 b(ariable])-3598 b Fh(rl_voidfunc_t)56 b(*)d (rl_redisplay_function)390 5121 y Ft(If)36 b(non-zero,)i(Readline)e (will)h(call)g(indirectly)f(through)g(this)g(p)s(oin)m(ter)g(to)g(up)s (date)g(the)g(displa)m(y)390 5230 y(with)27 b(the)g(curren)m(t)g(con)m (ten)m(ts)h(of)f(the)h(editing)f(bu\013er.)39 b(By)27 b(default,)h(it)g(is)f(set)g(to)h Fs(rl_redisplay)p Ft(,)390 5340 y(the)j(default)f(Readline)h(redispla)m(y)g(function)f(\(see)h (Section)g(2.4.6)h([Redispla)m(y],)g(page)f(37\).)p eop end %%Page: 30 34 TeXDict begin 30 33 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(30)3371 299 y([V)-8 b(ariable])-3598 b Fh(rl_vintfunc_t)56 b(*)d (rl_prep_term_function)390 408 y Ft(If)24 b(non-zero,)i(Readline)e (will)h(call)g(indirectly)g(through)e(this)h(p)s(oin)m(ter)g(to)h (initialize)h(the)e(terminal.)390 518 y(The)37 b(function)f(tak)m(es)j (a)e(single)h(argumen)m(t,)i(an)d Fs(int)f Ft(\015ag)h(that)h(sa)m(ys)g (whether)e(or)h(not)g(to)h(use)390 628 y(eigh)m(t-bit)e(c)m(haracters.) 53 b(By)35 b(default,)g(this)f(is)g(set)h(to)g Fs(rl_prep_terminal)29 b Ft(\(see)35 b(Section)g(2.4.9)390 737 y([T)-8 b(erminal)31 b(Managemen)m(t],)i(page)e(39\).)3371 915 y([V)-8 b(ariable])-3598 b Fh(rl_voidfunc_t)56 b(*)d(rl_deprep_term_functio)q(n)390 1024 y Ft(If)36 b(non-zero,)j(Readline)e(will)g(call)h(indirectly)f (through)f(this)g(p)s(oin)m(ter)h(to)g(reset)g(the)g(terminal.)390 1134 y(This)d(function)h(should)f(undo)g(the)h(e\013ects)h(of)f Fs(rl_prep_term_function)p Ft(.)49 b(By)35 b(default,)i(this)390 1243 y(is)30 b(set)h(to)g Fs(rl_deprep_terminal)26 b Ft(\(see)31 b(Section)g(2.4.9)i([T)-8 b(erminal)30 b(Managemen)m(t],)j (page)e(39\).)3371 1421 y([V)-8 b(ariable])-3598 b Fh(Keymap)54 b(rl_executing_keymap)390 1530 y Ft(This)35 b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m(eymap)h(\(see)g(Section)f(2.4.2)i ([Keymaps],)g(page)e(32\))i(in)d(whic)m(h)390 1640 y(the)c(curren)m (tly)f(executing)i(readline)e(function)g(w)m(as)h(found.)3371 1817 y([V)-8 b(ariable])-3598 b Fh(Keymap)54 b(rl_binding_keymap)390 1927 y Ft(This)35 b(v)-5 b(ariable)37 b(is)f(set)g(to)h(the)f(k)m (eymap)h(\(see)g(Section)f(2.4.2)i([Keymaps],)g(page)e(32\))i(in)d (whic)m(h)390 2036 y(the)c(last)g(k)m(ey)g(binding)e(o)s(ccurred.)3371 2213 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(rl_executing_macro)390 2323 y Ft(This)30 b(v)-5 b(ariable)31 b(is)f(set)h(to)g(the)g(text)g (of)g(an)m(y)f(curren)m(tly-executing)i(macro.)3371 2500 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_executing_key)390 2610 y Ft(The)30 b(k)m(ey)h(that)g(caused)f(the)h(dispatc)m(h)g(to)g (the)f(curren)m(tly-executing)i(Readline)f(function.)3371 2787 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(rl_executing_keyseq) 390 2897 y Ft(The)35 b(full)g(k)m(ey)h(sequence)g(that)g(caused)g(the)g (dispatc)m(h)f(to)i(the)e(curren)m(tly-executing)i(Readline)390 3006 y(function.)3371 3184 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_key_sequence_lengt)q(h)390 3293 y Ft(The)30 b(n)m(um)m(b)s(er)f(of)h(c)m(haracters)i(in)e Fj(rl)p 1617 3293 28 4 v 40 w(executing)p 2032 3293 V 41 w(k)m(eyseq)p Ft(.)3371 3471 y([V)-8 b(ariable])-3598 b Fh(int)53 b (rl_readline_state)390 3580 y Ft(A)35 b(v)-5 b(ariable)35 b(with)f(bit)g(v)-5 b(alues)35 b(that)g(encapsulate)h(the)e(curren)m(t) h(Readline)g(state.)54 b(A)34 b(bit)h(is)f(set)390 3690 y(with)k(the)g Fs(RL_SETSTATE)c Ft(macro,)41 b(and)c(unset)h(with)f (the)h Fs(RL_UNSETSTATE)d Ft(macro.)63 b(Use)39 b(the)390 3799 y Fs(RL_ISSTATE)34 b Ft(macro)k(to)g(test)g(whether)f(a)h (particular)f(state)i(bit)e(is)g(set.)62 b(Curren)m(t)36 b(state)j(bits)390 3909 y(include:)390 4064 y Fs(RL_STATE_NONE)870 4173 y Ft(Readline)31 b(has)f(not)h(y)m(et)g(b)s(een)f(called,)i(nor)e (has)g(it)h(b)s(egun)e(to)i(initialize.)390 4328 y Fs (RL_STATE_INITIALIZING)870 4437 y Ft(Readline)g(is)f(initializing)j (its)e(in)m(ternal)g(data)g(structures.)390 4592 y Fs (RL_STATE_INITIALIZED)870 4702 y Ft(Readline)g(has)f(completed)h(its)g (initialization.)390 4856 y Fs(RL_STATE_TERMPREPPED)870 4966 y Ft(Readline)e(has)g(mo)s(di\014ed)e(the)i(terminal)g(mo)s(des)f (to)i(do)e(its)i(o)m(wn)e(input)g(and)g(redis-)870 5076 y(pla)m(y)-8 b(.)390 5230 y Fs(RL_STATE_READCMD)870 5340 y Ft(Readline)31 b(is)f(reading)h(a)g(command)f(from)g(the)g(k)m(eyb)s (oard.)p eop end %%Page: 31 35 TeXDict begin 31 34 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(31)390 299 y Fs(RL_STATE_METANEXT)870 408 y Ft(Readline)31 b(is)f(reading)h (more)f(input)g(after)h(reading)f(the)h(meta-pre\014x)f(c)m(haracter.) 390 576 y Fs(RL_STATE_DISPATCHING)870 686 y Ft(Readline)h(is)f(dispatc) m(hing)h(to)g(a)g(command.)390 853 y Fs(RL_STATE_MOREINPUT)870 963 y Ft(Readline)g(is)f(reading)h(more)f(input)g(while)g(executing)i (an)e(editing)h(command.)390 1130 y Fs(RL_STATE_ISEARCH)870 1240 y Ft(Readline)g(is)f(p)s(erforming)g(an)g(incremen)m(tal)i (history)e(searc)m(h.)390 1408 y Fs(RL_STATE_NSEARCH)870 1517 y Ft(Readline)h(is)f(p)s(erforming)g(a)g(non-incremen)m(tal)i (history)e(searc)m(h.)390 1685 y Fs(RL_STATE_SEARCH)870 1794 y Ft(Readline)21 b(is)f(searc)m(hing)i(bac)m(kw)m(ard)e(or)h(forw) m(ard)e(through)h(the)h(history)f(for)g(a)h(string.)390 1962 y Fs(RL_STATE_NUMERICARG)870 2072 y Ft(Readline)31 b(is)f(reading)h(a)g(n)m(umeric)f(argumen)m(t.)390 2239 y Fs(RL_STATE_MACROINPUT)870 2349 y Ft(Readline)25 b(is)f(curren)m(tly) g(getting)i(its)f(input)e(from)h(a)g(previously-de\014ned)f(k)m(eyb)s (oard)870 2458 y(macro.)390 2626 y Fs(RL_STATE_MACRODEF)870 2736 y Ft(Readline)31 b(is)f(curren)m(tly)h(reading)f(c)m(haracters)i (de\014ning)e(a)g(k)m(eyb)s(oard)h(macro.)390 2903 y Fs(RL_STATE_OVERWRITE)870 3013 y Ft(Readline)g(is)f(in)g(o)m(v)m (erwrite)i(mo)s(de.)390 3180 y Fs(RL_STATE_COMPLETING)870 3290 y Ft(Readline)f(is)f(p)s(erforming)g(w)m(ord)g(completion.)390 3458 y Fs(RL_STATE_SIGHANDLER)870 3567 y Ft(Readline)h(is)f(curren)m (tly)h(executing)g(the)g(readline)g(signal)g(handler.)390 3735 y Fs(RL_STATE_UNDOING)870 3844 y Ft(Readline)g(is)f(p)s(erforming) g(an)g(undo.)390 4012 y Fs(RL_STATE_INPUTPENDING)870 4122 y Ft(Readline)h(has)f(input)g(p)s(ending)f(due)g(to)i(a)g(call)h (to)f Fs(rl_execute_next\(\))p Ft(.)390 4289 y Fs(RL_STATE_TTYCSAVED) 870 4399 y Ft(Readline)g(has)f(sa)m(v)m(ed)i(the)e(v)-5 b(alues)31 b(of)f(the)h(terminal's)g(sp)s(ecial)g(c)m(haracters.)390 4566 y Fs(RL_STATE_CALLBACK)870 4676 y Ft(Readline)44 b(is)f(curren)m(tly)g(using)f(the)h(alternate)i(\(callbac)m(k\))h(in)m (terface)e(\(see)g(Sec-)870 4786 y(tion)31 b(2.4.12)h([Alternate)h(In)m (terface],)f(page)f(42\).)390 4953 y Fs(RL_STATE_VIMOTION)870 5063 y Ft(Readline)g(is)f(reading)h(the)f(argumen)m(t)h(to)g(a)g(vi-mo) s(de)g Fs(")p Ft(motion)p Fs(")f Ft(command.)390 5230 y Fs(RL_STATE_MULTIKEY)870 5340 y Ft(Readline)h(is)f(reading)h(a)g(m)m (ultiple-k)m(eystrok)m(e)i(command.)p eop end %%Page: 32 36 TeXDict begin 32 35 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(32)390 299 y Fs(RL_STATE_VICMDONCE)870 408 y Ft(Readline)40 b(has)f(en)m(tered)g(vi)g(command)g(\(mo)m(v)m(emen)m(t\))j(mo)s(de)d (at)h(least)g(one)f(time)870 518 y(during)29 b(the)i(curren)m(t)f(call) i(to)f Fs(readline\(\))p Ft(.)390 671 y Fs(RL_STATE_DONE)870 781 y Ft(Readline)d(has)g(read)f(a)i(k)m(ey)f(sequence)g(b)s(ound)e(to) i Fs(accept-line)d Ft(and)i(is)h(ab)s(out)f(to)870 891 y(return)i(the)i(line)g(to)g(the)f(caller.)3371 1066 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_explicit_arg)390 1175 y Ft(Set)39 b(to)g(a)h(non-zero)f(v)-5 b(alue)39 b(if)g(an)g(explicit)h(n)m(umeric)e(argumen)m(t)i(w)m(as)f(sp)s (eci\014ed)f(b)m(y)g(the)h(user.)390 1285 y(Only)30 b(v)-5 b(alid)30 b(in)h(a)f(bindable)g(command)g(function.)3371 1460 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_numeric_arg)390 1570 y Ft(Set)45 b(to)h(the)g(v)-5 b(alue)46 b(of)f(an)m(y)h(n)m (umeric)f(argumen)m(t)h(explicitly)h(sp)s(eci\014ed)d(b)m(y)h(the)h (user)e(b)s(efore)390 1680 y(executing)27 b(the)f(curren)m(t)g (Readline)h(function.)38 b(Only)26 b(v)-5 b(alid)26 b(in)g(a)g (bindable)f(command)h(function.)3371 1855 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_editing_mode)390 1964 y Ft(Set)25 b(to)h(a)g(v)-5 b(alue)25 b(denoting)h(Readline's)f(curren)m(t)g(editing)h(mo)s(de.)39 b(A)25 b(v)-5 b(alue)25 b(of)h Fj(1)32 b Ft(means)25 b(Readline)390 2074 y(is)30 b(curren)m(tly)h(in)f(emacs)h(mo)s(de;)f Fj(0)38 b Ft(means)31 b(that)f(vi)h(mo)s(de)f(is)g(activ)m(e.)150 2309 y Fr(2.4)68 b(Readline)47 b(Con)l(v)l(enience)f(F)-11 b(unctions)150 2530 y Fi(2.4.1)63 b(Naming)41 b(a)g(F)-10 b(unction)150 2677 y Ft(The)24 b(user)h(can)g(dynamically)g(c)m(hange)h (the)f(bindings)f(of)h(k)m(eys)h(while)e(using)h(Readline.)39 b(This)24 b(is)h(done)g(b)m(y)150 2786 y(represen)m(ting)30 b(the)h(function)f(with)g(a)g(descriptiv)m(e)h(name.)41 b(The)30 b(user)f(is)i(able)f(to)h(t)m(yp)s(e)g(the)f(descriptiv)m(e) 150 2896 y(name)g(when)g(referring)g(to)h(the)f(function.)41 b(Th)m(us,)29 b(in)h(an)h(init)f(\014le,)h(one)g(migh)m(t)g(\014nd)390 3027 y Fs(Meta-Rubout:)92 b(backward-kill-word)275 3159 y Ft(This)84 b(binds)h(the)g(k)m(eystrok)m(e)j Fs(Meta-Rubout)82 b Ft(to)87 b(the)e(function)h Fk(descriptively)94 b Ft(named)150 3269 y Fs(backward-kill-word)p Ft(.)63 b(Y)-8 b(ou,)43 b(as)d(the)g(programmer,)i(should)c(bind)g(the)i(functions)f(y)m(ou)h (write)g(to)150 3378 y(descriptiv)m(e)31 b(names)g(as)f(w)m(ell.)42 b(Readline)31 b(pro)m(vides)f(a)h(function)f(for)g(doing)h(that:)3350 3553 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_add_defun)c Fg(\()p Ff(const)34 b(c)m(har)g(*name,)f(rl)p 1964 3553 30 5 v 43 w(command)p 2427 3553 V 45 w(func)p 2656 3553 V 45 w(t)g(*function,)565 3663 y(in)m(t)g(k)m(ey)p Fg(\))390 3773 y Ft(Add)h Fj(name)41 b Ft(to)36 b(the)f(list)h(of)g(named)e (functions.)55 b(Mak)m(e)37 b Fj(function)e Ft(b)s(e)g(the)g(function)g (that)h(gets)390 3882 y(called.)42 b(If)30 b Fj(k)m(ey)39 b Ft(is)30 b(not)h(-1,)g(then)f(bind)f(it)i(to)g Fj(function)f Ft(using)g Fs(rl_bind_key\(\))p Ft(.)275 4057 y(Using)g(this)g (function)g(alone)h(is)f(su\016cien)m(t)g(for)g(most)h(applications.)42 b(It)30 b(is)g(the)g(recommended)g(w)m(a)m(y)150 4167 y(to)e(add)e(a)h(few)g(functions)g(to)g(the)g(default)h(functions)e (that)i(Readline)f(has)g(built)g(in.)39 b(If)26 b(y)m(ou)i(need)e(to)i (do)150 4277 y(something)34 b(other)g(than)f(adding)h(a)g(function)f (to)h(Readline,)i(y)m(ou)e(ma)m(y)g(need)f(to)i(use)e(the)h(underlying) 150 4386 y(functions)c(describ)s(ed)f(b)s(elo)m(w.)150 4579 y Fi(2.4.2)63 b(Selecting)41 b(a)f(Keymap)150 4726 y Ft(Key)f(bindings)e(tak)m(e)j(place)g(on)f(a)g Fj(k)m(eymap)p Ft(.)66 b(The)38 b(k)m(eymap)h(is)g(the)g(asso)s(ciation)h(b)s(et)m(w)m (een)f(the)g(k)m(eys)150 4836 y(that)29 b(the)g(user)e(t)m(yp)s(es)i (and)f(the)g(functions)g(that)h(get)h(run.)39 b(Y)-8 b(ou)29 b(can)f(mak)m(e)i(y)m(our)e(o)m(wn)h(k)m(eymaps,)g(cop)m(y)150 4946 y(existing)i(k)m(eymaps,)g(and)f(tell)i(Readline)f(whic)m(h)f(k)m (eymap)h(to)g(use.)3350 5121 y([F)-8 b(unction])-3599 b Fh(Keymap)54 b(rl_make_bare_keymap)d Fg(\()p Ff(v)m(oid)p Fg(\))390 5230 y Ft(Returns)23 b(a)i(new,)g(empt)m(y)f(k)m(eymap.)40 b(The)23 b(space)i(for)f(the)g(k)m(eymap)h(is)f(allo)s(cated)i(with)e Fs(malloc\(\))p Ft(;)390 5340 y(the)31 b(caller)g(should)f(free)g(it)h (b)m(y)f(calling)i Fs(rl_free_keymap\(\))26 b Ft(when)j(done.)p eop end %%Page: 33 37 TeXDict begin 33 36 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(33)3350 299 y([F)-8 b(unction])-3599 b Fh(Keymap)54 b(rl_copy_keymap)c Fg(\()p Ff(Keymap)34 b(map)p Fg(\))390 408 y Ft(Return)c(a)g(new)g(k)m (eymap)h(whic)m(h)f(is)h(a)f(cop)m(y)h(of)g Fj(map)p Ft(.)3350 579 y([F)-8 b(unction])-3599 b Fh(Keymap)54 b(rl_make_keymap)c Fg(\()p Ff(v)m(oid)p Fg(\))390 689 y Ft(Return)31 b(a)g(new)g(k)m(eymap)h(with)f(the)h(prin)m(ting)f(c)m (haracters)i(b)s(ound)c(to)j(rl)p 2909 689 28 4 v 40 w(insert,)g(the)g(lo)m(w)m(ercase)390 798 y(Meta)24 b(c)m(haracters)g (b)s(ound)d(to)i(run)e(their)i(equiv)-5 b(alen)m(ts,)25 b(and)d(the)h(Meta)h(digits)f(b)s(ound)e(to)i(pro)s(duce)390 908 y(n)m(umeric)30 b(argumen)m(ts.)3350 1078 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_discard_keymap)c Fg(\()p Ff(Keymap)34 b(k)m(eymap)p Fg(\))390 1188 y Ft(F)-8 b(ree)30 b(the)g(storage)h(asso)s(ciated)g(with)e(the)g(data)h(in)f Fj(k)m(eymap)p Ft(.)41 b(The)29 b(caller)h(should)f(free)g Fj(k)m(eymap)p Ft(.)3350 1358 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_free_keymap)49 b Fg(\()p Ff(Keymap)34 b(k)m(eymap)p Fg(\))390 1468 y Ft(F)-8 b(ree)32 b(all)g(storage)g(asso) s(ciated)g(with)f Fj(k)m(eymap)p Ft(.)42 b(This)30 b(calls)i Fs(rl_discard_keymap)26 b Ft(to)32 b(free)f(sub-)390 1577 y(ordindate)f(k)m(eymaps)h(and)f(macros.)275 1748 y(Readline)45 b(has)g(sev)m(eral)i(in)m(ternal)f(k)m(eymaps.)86 b(These)45 b(functions)g(allo)m(w)h(y)m(ou)g(to)g(c)m(hange)g(whic)m(h) 150 1857 y(k)m(eymap)31 b(is)f(activ)m(e.)3350 2028 y([F)-8 b(unction])-3599 b Fh(Keymap)54 b(rl_get_keymap)c Fg(\()p Ff(v)m(oid)p Fg(\))390 2137 y Ft(Returns)29 b(the)i(curren)m(tly)f (activ)m(e)j(k)m(eymap.)3350 2308 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_set_keymap)49 b Fg(\()p Ff(Keymap)34 b(k)m(eymap)p Fg(\))390 2418 y Ft(Mak)m(es)e Fj(k)m(eymap)h Ft(the)e(curren)m(tly)f(activ)m(e)j(k)m(eymap.)3350 2588 y([F)-8 b(unction])-3599 b Fh(Keymap)54 b(rl_get_keymap_by_name)e Fg(\()p Ff(const)34 b(c)m(har)g(*name)p Fg(\))390 2698 y Ft(Return)e(the)i(k)m(eymap)f(matc)m(hing)i Fj(name)p Ft(.)49 b Fj(name)38 b Ft(is)c(one)f(whic)m(h)g(w)m(ould)g(b)s(e)f (supplied)g(in)h(a)h Fs(set)390 2807 y(keymap)29 b Ft(inputrc)g(line)i (\(see)g(Section)g(1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)3350 2978 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_get_keymap_name)f Fg(\()p Ff(Keymap)34 b(k)m(eymap)p Fg(\))390 3087 y Ft(Return)e(the)i (name)f(matc)m(hing)h Fj(k)m(eymap)p Ft(.)50 b Fj(name)38 b Ft(is)c(one)f(whic)m(h)g(w)m(ould)g(b)s(e)f(supplied)g(in)h(a)h Fs(set)390 3197 y(keymap)29 b Ft(inputrc)g(line)i(\(see)g(Section)g (1.3)h([Readline)f(Init)f(File],)i(page)f(4\).)150 3387 y Fi(2.4.3)63 b(Binding)42 b(Keys)150 3534 y Ft(Key)34 b(sequences)g(are)h(asso)s(ciate)h(with)e(functions)f(through)h(the)g (k)m(eymap.)52 b(Readline)35 b(has)f(sev)m(eral)h(in-)150 3643 y(ternal)30 b(k)m(eymaps:)40 b Fs(emacs_standard_keymap)p Ft(,)24 b Fs(emacs_meta_keymap)p Ft(,)h Fs(emacs_ctlx_keymap)p Ft(,)g Fs(vi_)150 3753 y(movement_keymap)p Ft(,)41 b(and)h Fs(vi_insertion_keymap)p Ft(.)71 b Fs(emacs_standard_keymap)37 b Ft(is)42 b(the)g(default,)150 3863 y(and)30 b(the)g(examples)h(in)f (this)h(man)m(ual)f(assume)g(that.)275 3992 y(Since)d Fs(readline\(\))e Ft(installs)j(a)g(set)g(of)g(default)g(k)m(ey)g (bindings)f(the)h(\014rst)e(time)j(it)f(is)f(called,)j(there)e(is)150 4102 y(alw)m(a)m(ys)34 b(the)f(danger)f(that)i(a)f(custom)g(binding)e (installed)j(b)s(efore)e(the)h(\014rst)e(call)j(to)g Fs(readline\(\))c Ft(will)150 4212 y(b)s(e)25 b(o)m(v)m(erridden.)39 b(An)26 b(alternate)h(mec)m(hanism)f(is)g(to)g(install)h(custom)f(k)m (ey)g(bindings)f(in)g(an)h(initialization)150 4321 y(function)37 b(assigned)g(to)h(the)f Fs(rl_startup_hook)c Ft(v)-5 b(ariable)38 b(\(see)g(Section)g(2.3)g([Readline)g(V)-8 b(ariables],)150 4431 y(page)31 b(27\).)275 4561 y(These)f(functions)g (manage)h(k)m(ey)g(bindings.)3350 4731 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_key)c Fg(\()p Ff(in)m(t)34 b(k)m(ey)-8 b(,)32 b(rl)p 1441 4731 30 5 v 43 w(command)p 1904 4731 V 45 w(func)p 2133 4731 V 45 w(t)h(*function)p Fg(\))390 4841 y Ft(Binds)f Fj(k)m(ey)42 b Ft(to)34 b Fj(function)e Ft(in)h(the)g(curren)m(tly)g(activ)m(e)i(k)m(eymap.)49 b(Returns)32 b(non-zero)i(in)f(the)g(case)390 4950 y(of)e(an)f(in)m(v) -5 b(alid)31 b Fj(k)m(ey)p Ft(.)3350 5121 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_key_in_map)e Fg(\()p Ff(in)m(t)34 b(k)m(ey)-8 b(,)32 b(rl)p 1807 5121 V 43 w(command)p 2270 5121 V 45 w(func)p 2499 5121 V 45 w(t)h(*function,)565 5230 y(Keymap)h(map)p Fg(\))390 5340 y Ft(Bind)c Fj(k)m(ey)39 b Ft(to)31 b Fj(function)f Ft(in)g Fj(map)p Ft(.)40 b(Returns)30 b(non-zero)h(in)f(the)h(case)g(of)f(an)h(in)m(v)-5 b(alid)31 b Fj(k)m(ey)p Ft(.)p eop end %%Page: 34 38 TeXDict begin 34 37 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(34)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_key_if_unboun)q(d)e Fg(\()p Ff(in)m(t)34 b(k)m(ey)-8 b(,)32 b(rl)p 2016 299 30 5 v 44 w(command)p 2480 299 V 44 w(func)p 2708 299 V 45 w(t)565 408 y(*function)p Fg(\))390 518 y Ft(Binds)43 b Fj(k)m(ey)53 b Ft(to)45 b Fj(function)e Ft(if)h(it)h(is)f(not)g (already)g(b)s(ound)e(in)i(the)g(curren)m(tly)g(activ)m(e)i(k)m(eymap.) 390 628 y(Returns)29 b(non-zero)i(in)f(the)h(case)g(of)g(an)f(in)m(v)-5 b(alid)31 b Fj(k)m(ey)39 b Ft(or)30 b(if)h Fj(k)m(ey)39 b Ft(is)30 b(already)h(b)s(ound.)3350 814 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_key_if_unboun)q(d_in)q(_ma)q(p)e Fg(\()p Ff(in)m(t)34 b(k)m(ey)-8 b(,)32 b(rl)p 2382 814 V 44 w(command)p 2846 814 V 44 w(func)p 3074 814 V 46 w(t)565 924 y(*function,)i(Keymap)g(map)p Fg(\))390 1033 y Ft(Binds)27 b Fj(k)m(ey)36 b Ft(to)28 b Fj(function)f Ft(if)g(it)h(is)f(not)h(already)g(b)s(ound)d(in)i Fj(map)p Ft(.)39 b(Returns)27 b(non-zero)g(in)g(the)h(case)390 1143 y(of)j(an)f(in)m(v)-5 b(alid)31 b Fj(k)m(ey)39 b Ft(or)30 b(if)g Fj(k)m(ey)39 b Ft(is)31 b(already)g(b)s(ound.)3350 1329 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_unbind_key)d Fg(\()p Ff(in)m(t)33 b(k)m(ey)p Fg(\))390 1439 y Ft(Bind)j Fj(k)m(ey)45 b Ft(to)37 b(the)f(n)m(ull)g(function)g(in)g(the)h(curren) m(tly)f(activ)m(e)i(k)m(eymap.)59 b(Returns)35 b(non-zero)i(in)390 1548 y(case)31 b(of)g(error.)3350 1734 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_unbind_key_in_map)f Fg(\()p Ff(in)m(t)33 b(k)m(ey)-8 b(,)33 b(Keymap)g(map)p Fg(\))390 1844 y Ft(Bind)d Fj(k)m(ey)39 b Ft(to)31 b(the)g(n)m(ull)f(function)g(in)g Fj(map)p Ft(.)40 b(Returns)30 b(non-zero)h(in)f(case)h(of)g(error.)3350 2030 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_unbind_function_in)q (_map)f Fg(\()p Ff(rl)p 1821 2030 V 44 w(command)p 2285 2030 V 45 w(func)p 2514 2030 V 45 w(t)33 b(*function,)565 2140 y(Keymap)h(map)p Fg(\))390 2250 y Ft(Un)m(bind)29 b(all)i(k)m(eys)g(that)g(execute)h Fj(function)e Ft(in)g Fj(map)p Ft(.)3350 2436 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_unbind_command_in_)q(map)f Fg(\()p Ff(const)34 b(c)m(har)g (*command,)f(Keymap)565 2545 y(map)p Fg(\))390 2655 y Ft(Un)m(bind)c(all)i(k)m(eys)g(that)g(are)g(b)s(ound)e(to)i Fj(command)i Ft(in)d Fj(map)p Ft(.)3350 2841 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_keyseq)d Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,)e(rl)p 2119 2841 V 44 w(command)p 2583 2841 V 44 w(func)p 2811 2841 V 46 w(t)565 2951 y(*function)p Fg(\))390 3061 y Ft(Bind)43 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g(the)g(string)g Fj(k)m(eyseq)j Ft(to)e(the)f(function)g Fj(function)p Ft(,)390 3170 y(b)s(eginning)27 b(in)h(the)h(curren)m(t)f(k)m(eymap.)40 b(This)28 b(mak)m(es)h(new)e(k)m(eymaps)i(as)f(necessary)-8 b(.)41 b(The)28 b(return)390 3280 y(v)-5 b(alue)31 b(is)f(non-zero)h (if)g Fj(k)m(eyseq)i Ft(is)d(in)m(v)-5 b(alid.)3350 3466 y([F)d(unction])-3599 b Fh(int)53 b(rl_bind_keyseq_in_map)f Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,)565 3576 y(rl)p 639 3576 V 44 w(command)p 1103 3576 V 44 w(func)p 1331 3576 V 45 w(t)f(*function,)h(Keymap)g(map)p Fg(\))390 3685 y Ft(Bind)25 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g (the)g(string)g Fj(k)m(eyseq)j Ft(to)e(the)f(function)g Fj(function)p Ft(.)39 b(This)390 3795 y(mak)m(es)30 b(new)f(k)m(eymaps) g(as)g(necessary)-8 b(.)42 b(Initial)30 b(bindings)d(are)j(p)s (erformed)e(in)g Fj(map)p Ft(.)40 b(The)29 b(return)390 3904 y(v)-5 b(alue)31 b(is)f(non-zero)h(if)g Fj(k)m(eyseq)i Ft(is)d(in)m(v)-5 b(alid.)3350 4091 y([F)d(unction])-3599 b Fh(int)53 b(rl_set_key)c Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,) e(rl)p 1910 4091 V 44 w(command)p 2374 4091 V 44 w(func)p 2602 4091 V 45 w(t)h(*function,)565 4200 y(Keymap)h(map)p Fg(\))390 4310 y Ft(Equiv)-5 b(alen)m(t)31 b(to)g Fs (rl_bind_keyseq_in_map)p Ft(.)3350 4496 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_keyseq_if_unb)q(ound)f Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,)565 4606 y(rl)p 639 4606 V 44 w(command)p 1103 4606 V 44 w(func)p 1331 4606 V 45 w(t)f(*function)p Fg(\))390 4715 y Ft(Binds)i Fj(k)m(eyseq)k Ft(to)d Fj(function)f Ft(if)g(it)h(is)g(not)g(already)g(b)s(ound)d(in)i (the)h(curren)m(tly)f(activ)m(e)j(k)m(eymap.)390 4825 y(Returns)29 b(non-zero)i(in)f(the)h(case)g(of)g(an)f(in)m(v)-5 b(alid)31 b Fj(k)m(eyseq)j Ft(or)c(if)g Fj(k)m(eyseq)k Ft(is)c(already)h(b)s(ound.)3350 5011 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_bind_keyseq_if_unb)q(ound)q(_in)q(_ma)q(p)e Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,)565 5121 y(rl)p 639 5121 V 44 w(command)p 1103 5121 V 44 w(func)p 1331 5121 V 45 w(t)f(*function,)h(Keymap)g(map)p Fg(\))390 5230 y Ft(Binds)d Fj(k)m(eyseq)k Ft(to)e Fj(function)f Ft(if)g(it)g(is)g(not)g(already)h(b)s(ound)d(in)h Fj(map)p Ft(.)46 b(Returns)31 b(non-zero)h(in)g(the)390 5340 y(case)f(of)g(an)f (in)m(v)-5 b(alid)31 b Fj(k)m(eyseq)j Ft(or)c(if)g Fj(k)m(eyseq)k Ft(is)c(already)h(b)s(ound.)p eop end %%Page: 35 39 TeXDict begin 35 38 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(35)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_generic_bind)d Fg(\()p Ff(in)m(t)34 b(t)m(yp)s(e,)f(const)g(c)m(har)h(*k)m(eyseq,)f(c) m(har)h(*data,)565 408 y(Keymap)g(map)p Fg(\))390 518 y Ft(Bind)27 b(the)g(k)m(ey)h(sequence)f(represen)m(ted)g(b)m(y)g(the)g (string)g Fj(k)m(eyseq)j Ft(to)e(the)f(arbitrary)g(p)s(oin)m(ter)g Fj(data)p Ft(.)390 628 y Fj(t)m(yp)s(e)34 b Ft(sa)m(ys)29 b(what)f(kind)g(of)g(data)h(is)g(p)s(oin)m(ted)f(to)h(b)m(y)g Fj(data)p Ft(;)h(this)e(can)h(b)s(e)f(a)g(function)g(\()p Fs(ISFUNC)p Ft(\),)h(a)390 737 y(macro)h(\()p Fs(ISMACR)p Ft(\),)f(or)g(a)h(k)m(eymap)g(\()p Fs(ISKMAP)p Ft(\).)40 b(This)28 b(mak)m(es)j(new)e(k)m(eymaps)g(as)h(necessary)-8 b(.)41 b(The)390 847 y(initial)32 b(k)m(eymap)e(in)h(whic)m(h)f(to)h (do)f(bindings)f(is)i Fj(map)p Ft(.)3350 1028 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_parse_and_bind)e Fg(\()p Ff(c)m(har)34 b(*line)p Fg(\))390 1137 y Ft(P)m(arse)c Fj(line)35 b Ft(as)29 b(if)h(it)g(had)e(b)s(een)h(read)g(from)g(the)h Fs(inputrc)d Ft(\014le)j(and)e(p)s(erform)g(an)m(y)i(k)m(ey)g(bindings) 390 1247 y(and)g(v)-5 b(ariable)31 b(assignmen)m(ts)g(found)e(\(see)i (Section)h(1.3)f([Readline)g(Init)f(File],)j(page)e(4\).)3350 1428 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_read_init_file)e Fg(\()p Ff(const)34 b(c)m(har)g(*\014lename)p Fg(\))390 1538 y Ft(Read)e(k)m(eybindings)f(and)g(v)-5 b(ariable)32 b(assignmen)m(ts)g(from)f Fj(\014lename)37 b Ft(\(see)32 b(Section)g(1.3)h([Readline)390 1647 y(Init)d(File],)i(page)f(4\).)150 1844 y Fi(2.4.4)63 b(Asso)s(ciating)41 b(F)-10 b(unction)42 b(Names)f(and)g(Bindings)150 1991 y Ft(These)30 b(functions)g(allo)m(w) h(y)m(ou)g(to)f(\014nd)f(out)h(what)g(k)m(eys)h(in)m(v)m(ok)m(e)h (named)e(functions)g(and)f(the)h(functions)150 2101 y(in)m(v)m(ok)m(ed) f(b)m(y)e(a)h(particular)g(k)m(ey)g(sequence.)40 b(Y)-8 b(ou)28 b(ma)m(y)g(also)h(asso)s(ciate)g(a)f(new)f(function)g(name)h (with)f(an)150 2210 y(arbitrary)j(function.)3350 2391 y([F)-8 b(unction])-3599 b Fh(rl_command_func_t)57 b(*)c (rl_named_function)e Fg(\()p Ff(const)34 b(c)m(har)g(*name)p Fg(\))390 2501 y Ft(Return)c(the)g(function)g(with)g(name)h Fj(name)p Ft(.)3350 2682 y([F)-8 b(unction])-3599 b Fh (rl_command_func_t)57 b(*)c(rl_function_of_keyseq)f Fg(\()p Ff(const)34 b(c)m(har)565 2791 y(*k)m(eyseq,)f(Keymap)g(map,)g(in)m(t)h (*t)m(yp)s(e)p Fg(\))390 2901 y Ft(Return)e(the)g(function)h(in)m(v)m (ok)m(ed)h(b)m(y)e Fj(k)m(eyseq)k Ft(in)c(k)m(eymap)h Fj(map)p Ft(.)47 b(If)32 b Fj(map)j Ft(is)d Fs(NULL)p Ft(,)g(the)h(curren)m(t)390 3011 y(k)m(eymap)k(is)g(used.)60 b(If)37 b Fj(t)m(yp)s(e)42 b Ft(is)37 b(not)g Fs(NULL)p Ft(,)h(the)f(t)m(yp)s(e)g(of)g(the)g(ob)5 b(ject)38 b(is)f(returned)f (in)h(the)g Fs(int)390 3120 y Ft(v)-5 b(ariable)31 b(it)g(p)s(oin)m(ts) f(to)h(\(one)g(of)g Fs(ISFUNC)p Ft(,)e Fs(ISKMAP)p Ft(,)g(or)h Fs(ISMACR)p Ft(\).)3350 3301 y([F)-8 b(unction])-3599 b Fh(char)54 b(**)e(rl_invoking_keyseqs)g Fg(\()p Ff(rl)p 1717 3301 30 5 v 44 w(command)p 2181 3301 V 44 w(func)p 2409 3301 V 45 w(t)33 b(*function)p Fg(\))390 3411 y Ft(Return)d(an)i(arra)m(y)f(of)h(strings)f(represen)m(ting)g(the)g(k)m (ey)h(sequences)g(used)e(to)i(in)m(v)m(ok)m(e)h Fj(function)e Ft(in)390 3520 y(the)g(curren)m(t)f(k)m(eymap.)3350 3701 y([F)-8 b(unction])-3599 b Fh(char)54 b(**)e(rl_invoking_keyseqs_i)q (n_m)q(ap)g Fg(\()p Ff(rl)p 2083 3701 V 44 w(command)p 2547 3701 V 44 w(func)p 2775 3701 V 45 w(t)565 3811 y(*function,)34 b(Keymap)g(map)p Fg(\))390 3920 y Ft(Return)c(an)i(arra)m(y)f(of)h (strings)f(represen)m(ting)g(the)g(k)m(ey)h(sequences)g(used)e(to)i(in) m(v)m(ok)m(e)h Fj(function)e Ft(in)390 4030 y(the)g(k)m(eymap)f Fj(map)p Ft(.)3350 4211 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_function_dumper)c Fg(\()p Ff(in)m(t)34 b(readable)p Fg(\))390 4321 y Ft(Prin)m(t)29 b(the)h(readline)f(function)g(names)g (and)g(the)g(k)m(ey)h(sequences)g(curren)m(tly)f(b)s(ound)e(to)j(them)f (to)390 4430 y Fs(rl_outstream)p Ft(.)36 b(If)27 b Fj(readable)33 b Ft(is)28 b(non-zero,)h(the)e(list)i(is)e(formatted)h(in)f(suc)m(h)g (a)h(w)m(a)m(y)h(that)f(it)g(can)390 4540 y(b)s(e)i(made)g(part)g(of)h (an)f Fs(inputrc)f Ft(\014le)h(and)g(re-read.)3350 4721 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_list_funmap_names)d Fg(\()p Ff(v)m(oid)p Fg(\))390 4830 y Ft(Prin)m(t)30 b(the)h(names)f(of)h(all)g(bindable)f(Readline)h(functions)f(to)h Fs(rl_outstream)p Ft(.)3350 5011 y([F)-8 b(unction])-3599 b Fh(const)54 b(char)f(**)g(rl_funmap_names)d Fg(\()p Ff(v)m(oid)p Fg(\))390 5121 y Ft(Return)25 b(a)i(NULL)f(terminated)g (arra)m(y)h(of)f(kno)m(wn)f(function)h(names.)39 b(The)26 b(arra)m(y)g(is)g(sorted.)39 b(The)390 5230 y(arra)m(y)28 b(itself)h(is)f(allo)s(cated,)j(but)c(not)h(the)h(strings)e(inside.)40 b(Y)-8 b(ou)29 b(should)e(free)h(the)g(arra)m(y)-8 b(,)29 b(but)f(not)390 5340 y(the)j(p)s(oin)m(ters,)f(using)g Fs(free)f Ft(or)i Fs(rl_free)d Ft(when)h(y)m(ou)i(are)g(done.)p eop end %%Page: 36 40 TeXDict begin 36 39 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(36)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_add_funmap_entry)e Fg(\()p Ff(const)34 b(c)m(har)g(*name,)g(rl)p 2331 299 30 5 v 43 w(command)p 2794 299 V 45 w(func)p 3023 299 V 45 w(t)565 408 y(*function)p Fg(\))390 518 y Ft(Add)e Fj(name)38 b Ft(to)33 b(the)g(list)h(of)f(bindable)f(Readline)h (command)g(names,)g(and)f(mak)m(e)i Fj(function)f Ft(the)390 628 y(function)d(to)h(b)s(e)f(called)h(when)f Fj(name)35 b Ft(is)c(in)m(v)m(ok)m(ed.)150 832 y Fi(2.4.5)63 b(Allo)m(wing)41 b(Undoing)150 979 y Ft(Supp)s(orting)34 b(the)i(undo)e(command)i(is)g (a)g(painless)g(thing,)h(and)e(mak)m(es)i(y)m(our)f(functions)f(m)m(uc) m(h)h(more)150 1089 y(useful.)k(It)30 b(is)h(certainly)g(easy)g(to)g (try)g(something)g(if)f(y)m(ou)h(kno)m(w)f(y)m(ou)h(can)f(undo)g(it.) 275 1229 y(If)40 b(y)m(our)h(function)f(simply)g(inserts)h(text)h (once,)i(or)d(deletes)h(text)g(once,)i(and)c(uses)h Fs(rl_insert_)150 1338 y(text\(\))26 b Ft(or)i Fs(rl_delete_text\(\))23 b Ft(to)29 b(do)f(it,)h(then)f(undoing)f(is)g(already)i(done)f(for)f(y) m(ou)h(automatically)-8 b(.)275 1478 y(If)20 b(y)m(ou)g(do)h(m)m (ultiple)g(insertions)f(or)h(m)m(ultiple)g(deletions,)j(or)c(an)m(y)h (com)m(bination)h(of)e(these)h(op)s(erations,)150 1588 y(y)m(ou)38 b(should)f(group)h(them)g(together)h(in)m(to)g(one)f(op)s (eration.)64 b(This)37 b(is)h(done)g(with)g Fs(rl_begin_undo_)150 1697 y(group\(\))28 b Ft(and)i Fs(rl_end_undo_group\(\))p Ft(.)275 1837 y(The)f(t)m(yp)s(es)i(of)f(ev)m(en)m(ts)i(that)f(can)g(b) s(e)e(undone)h(are:)390 1954 y Fe(enum)40 b(undo_code)h({)f (UNDO_DELETE,)i(UNDO_INSERT,)g(UNDO_BEGIN,)g(UNDO_END)f(};)275 2094 y Ft(Notice)32 b(that)f Fs(UNDO_DELETE)c Ft(means)j(to)h(insert)f (some)h(text,)h(and)d Fs(UNDO_INSERT)e Ft(means)k(to)g(delete)150 2204 y(some)d(text.)41 b(That)27 b(is,)i(the)e(undo)g(co)s(de)h(tells)g (what)g(to)g(undo,)f(not)h(ho)m(w)g(to)g(undo)e(it.)41 b Fs(UNDO_BEGIN)25 b Ft(and)150 2314 y Fs(UNDO_END)j Ft(are)j(tags)g(added)f(b)m(y)g Fs(rl_begin_undo_group\(\))25 b Ft(and)30 b Fs(rl_end_undo_group\(\))p Ft(.)3350 2508 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_begin_undo_group)e Fg(\()p Ff(v)m(oid)p Fg(\))390 2618 y Ft(Begins)32 b(sa)m(ving)g(undo)d (information)j(in)e(a)i(group)e(construct.)43 b(The)30 b(undo)g(information)h(usually)390 2728 y(comes)42 b(from)f(calls)i(to) f Fs(rl_insert_text\(\))37 b Ft(and)k Fs(rl_delete_text\(\))p Ft(,)f(but)h(could)h(b)s(e)f(the)390 2837 y(result)30 b(of)h(calls)g(to)g Fs(rl_add_undo\(\))p Ft(.)3350 3032 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_end_undo_group)e Fg(\()p Ff(v)m(oid)p Fg(\))390 3142 y Ft(Closes)29 b(the)h(curren)m(t)e (undo)g(group)h(started)g(with)g Fs(rl_begin_undo_group)c(\(\))p Ft(.)39 b(There)29 b(should)390 3251 y(b)s(e)h(one)g(call)i(to)f Fs(rl_end_undo_group\(\))25 b Ft(for)30 b(eac)m(h)i(call)g(to)f Fs(rl_begin_undo_group\(\))p Ft(.)3350 3446 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_add_undo)48 b Fg(\()p Ff(en)m(um)35 b(undo)p 1558 3446 V 45 w(co)s(de)e(what,)g(in)m(t)g(start,)g(in)m(t)g (end,)h(c)m(har)565 3556 y(*text)p Fg(\))390 3666 y Ft(Remem)m(b)s(er)g (ho)m(w)g(to)h(undo)d(an)i(ev)m(en)m(t)i(\(according)f(to)g Fj(what)r Ft(\).)52 b(The)33 b(a\013ected)j(text)f(runs)d(from)390 3775 y Fj(start)h Ft(to)e Fj(end)p Ft(,)f(and)g(encompasses)h Fj(text)p Ft(.)3350 3970 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_free_undo_list)c Fg(\()p Ff(v)m(oid)p Fg(\))390 4080 y Ft(F)-8 b(ree)31 b(the)g(existing)g(undo)f(list.)3350 4275 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_do_undo)c Fg(\()p Ff(v)m(oid)p Fg(\))390 4384 y Ft(Undo)22 b(the)h(\014rst)g (thing)f(on)h(the)g(undo)f(list.)39 b(Returns)22 b Fs(0)g Ft(if)h(there)g(w)m(as)g(nothing)g(to)h(undo,)f(non-zero)390 4494 y(if)30 b(something)h(w)m(as)g(undone.)275 4689 y(Finally)-8 b(,)32 b(if)f(y)m(ou)h(neither)f(insert)g(nor)f(delete)j (text,)f(but)f(directly)g(mo)s(dify)g(the)g(existing)h(text)g(\(e.g.,) 150 4799 y(c)m(hange)40 b(its)f(case\),)j(call)e Fs(rl_modifying\(\))35 b Ft(once,)42 b(just)c(b)s(efore)g(y)m(ou)h(mo)s(dify)f(the)h(text.)67 b(Y)-8 b(ou)39 b(m)m(ust)150 4908 y(supply)29 b(the)h(indices)h(of)f (the)h(text)g(range)g(that)g(y)m(ou)g(are)g(going)g(to)g(mo)s(dify)-8 b(.)3350 5103 y([F)g(unction])-3599 b Fh(int)53 b(rl_modifying)c Fg(\()p Ff(in)m(t)34 b(start,)e(in)m(t)i(end)p Fg(\))390 5213 y Ft(T)-8 b(ell)41 b(Readline)g(to)g(sa)m(v)m(e)g(the)g(text)g(b)s (et)m(w)m(een)g Fj(start)i Ft(and)c Fj(end)k Ft(as)e(a)f(single)h(undo) e(unit.)70 b(It)40 b(is)390 5322 y(assumed)30 b(that)h(y)m(ou)f(will)h (subsequen)m(tly)f(mo)s(dify)f(that)i(text.)p eop end %%Page: 37 41 TeXDict begin 37 40 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(37)150 299 y Fi(2.4.6)63 b(Redispla)m(y)3350 491 y Ft([F)-8 b(unction])-3599 b Fh(void)54 b(rl_redisplay)49 b Fg(\()p Ff(v)m(oid)p Fg(\))390 601 y Ft(Change)38 b(what's)f(displa)m(y)m(ed)i (on)e(the)h(screen)g(to)h(re\015ect)f(the)g(curren)m(t)g(con)m(ten)m (ts)h(of)f Fs(rl_line_)390 711 y(buffer)p Ft(.)3350 889 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_forced_update_disp)q(lay)f Fg(\()p Ff(v)m(oid)p Fg(\))390 998 y Ft(F)-8 b(orce)41 b(the)f(line)g(to)h(b)s(e)e(up)s(dated)f(and)h(redispla)m(y)m(ed,)k (whether)c(or)g(not)h(Readline)h(thinks)e(the)390 1108 y(screen)30 b(displa)m(y)h(is)f(correct.)3350 1286 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_on_new_line)d Fg(\()p Ff(v)m(oid)p Fg(\))390 1395 y Ft(T)-8 b(ell)31 b(the)f(up)s(date)f (functions)g(that)i(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)g(a)f (new)f(\(empt)m(y\))i(line,)g(usually)e(after)390 1505 y(outputting)i(a)f(newline.)3350 1683 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_on_new_line_with_p)q(romp)q(t)f Fg(\()p Ff(v)m(oid)p Fg(\))390 1793 y Ft(T)-8 b(ell)25 b(the)f(up)s(date)f (functions)h(that)h(w)m(e)f(ha)m(v)m(e)h(mo)m(v)m(ed)g(on)m(to)h(a)e (new)g(line,)i(with)d Fj(rl)p 3106 1793 28 4 v 40 w(prompt)i Ft(already)390 1902 y(displa)m(y)m(ed.)41 b(This)28 b(could)g(b)s(e)g (used)g(b)m(y)g(applications)i(that)f(w)m(an)m(t)h(to)f(output)f(the)h (prompt)f(string)390 2012 y(themselv)m(es,)h(but)e(still)h(need)g (Readline)g(to)g(kno)m(w)f(the)h(prompt)e(string)h(length)h(for)f (redispla)m(y)-8 b(.)41 b(It)390 2121 y(should)29 b(b)s(e)h(used)g (after)h(setting)g Fj(rl)p 1590 2121 V 40 w(already)p 1920 2121 V 41 w(prompted)p Ft(.)3350 2299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_clear_visible_line)f Fg(\()p Ff(v)m(oid)p Fg(\))390 2409 y Ft(Clear)31 b(the)f(screen)h(lines)f(corresp)s(onding) g(to)h(the)f(curren)m(t)g(line's)h(con)m(ten)m(ts.)3350 2587 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_reset_line_state)e Fg(\()p Ff(v)m(oid)p Fg(\))390 2697 y Ft(Reset)36 b(the)e(displa)m(y)h (state)h(to)g(a)f(clean)g(state)h(and)e(redispla)m(y)h(the)g(curren)m (t)g(line)g(starting)g(on)g(a)390 2806 y(new)30 b(line.)3350 2984 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_crlf)48 b Fg(\()p Ff(v)m(oid)p Fg(\))390 3094 y Ft(Mo)m(v)m(e)32 b(the)f(cursor)f(to)h(the)f(start)h(of)g(the)f(next)h(screen)f(line.) 3350 3272 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_show_char)c Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 3381 y Ft(Displa)m(y)g(c)m (haracter)g Fj(c)k Ft(on)32 b Fs(rl_outstream)p Ft(.)44 b(If)32 b(Readline)h(has)g(not)f(b)s(een)g(set)h(to)g(displa)m(y)g (meta)390 3491 y(c)m(haracters)27 b(directly)-8 b(,)29 b(this)c(will)i(con)m(v)m(ert)g(meta)g(c)m(haracters)h(to)e(a)h (meta-pre\014xed)f(k)m(ey)g(sequence.)390 3600 y(This)k(is)g(in)m (tended)g(for)g(use)g(b)m(y)h(applications)g(whic)m(h)f(wish)g(to)h(do) f(their)h(o)m(wn)f(redispla)m(y)-8 b(.)3350 3778 y([F)g(unction])-3599 b Fh(int)53 b(rl_message)c Fg(\()p Ff(const)34 b(c)m(har)g(*,)k(.)24 b(.)g(.)12 b Fg(\))390 3888 y Ft(The)20 b(argumen)m(ts)h(are)g(a)g (format)g(string)g(as)f(w)m(ould)h(b)s(e)f(supplied)f(to)j Fs(printf)p Ft(,)f(p)s(ossibly)e(con)m(taining)390 3998 y(con)m(v)m(ersion)45 b(sp)s(eci\014cations)g(suc)m(h)f(as)g(`)p Fs(\045d)p Ft(',)k(and)c(an)m(y)g(additional)h(argumen)m(ts)g (necessary)f(to)390 4107 y(satisfy)e(the)f(con)m(v)m(ersion)i(sp)s (eci\014cations.)74 b(The)41 b(resulting)h(string)f(is)g(displa)m(y)m (ed)h(in)f(the)h Fj(ec)m(ho)390 4217 y(area)p Ft(.)63 b(The)37 b(ec)m(ho)i(area)f(is)g(also)g(used)f(to)h(displa)m(y)g(n)m (umeric)f(argumen)m(ts)h(and)f(searc)m(h)h(strings.)390 4326 y(Y)-8 b(ou)34 b(should)e(call)j Fs(rl_save_prompt)29 b Ft(to)34 b(sa)m(v)m(e)h(the)f(prompt)e(information)i(b)s(efore)f (calling)i(this)390 4436 y(function.)3350 4614 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_clear_message)e Fg(\()p Ff(v)m(oid)p Fg(\))390 4724 y Ft(Clear)29 b(the)g(message)h(in)f(the)g (ec)m(ho)h(area.)41 b(If)29 b(the)g(prompt)f(w)m(as)h(sa)m(v)m(ed)h (with)f(a)g(call)i(to)e Fs(rl_save_)390 4833 y(prompt)38 b Ft(b)s(efore)h(the)g(last)h(call)h(to)f Fs(rl_message)p Ft(,)f(call)i Fs(rl_restore_prompt)34 b Ft(b)s(efore)39 b(calling)390 4943 y(this)30 b(function.)3350 5121 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_save_prompt)49 b Fg(\()p Ff(v)m(oid)p Fg(\))390 5230 y Ft(Sa)m(v)m(e)44 b(the)f(lo)s(cal)i (Readline)e(prompt)f(displa)m(y)i(state)g(in)f(preparation)g(for)g (displa)m(ying)g(a)g(new)390 5340 y(message)31 b(in)g(the)f(message)i (area)f(with)f Fs(rl_message\(\))p Ft(.)p eop end %%Page: 38 42 TeXDict begin 38 41 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(38)3350 299 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_restore_prompt)c Fg(\()p Ff(v)m(oid)p Fg(\))390 408 y Ft(Restore)44 b(the)e(lo)s(cal)i (Readline)g(prompt)d(displa)m(y)i(state)h(sa)m(v)m(ed)g(b)m(y)f(the)f (most)h(recen)m(t)h(call)g(to)390 518 y Fs(rl_save_prompt)p Ft(.)69 b(if)41 b Fs(rl_save_prompt)d Ft(w)m(as)j(called)i(to)f(sa)m(v) m(e)h(the)e(prompt)f(b)s(efore)h(a)h(call)390 628 y(to)37 b Fs(rl_message)p Ft(,)f(this)h(function)f(should)g(b)s(e)g(called)i(b) s(efore)f(the)g(corresp)s(onding)e(call)j(to)g Fs(rl_)390 737 y(clear_message)p Ft(.)3350 918 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_expand_prompt)e Fg(\()p Ff(c)m(har)34 b(*prompt)p Fg(\))390 1027 y Ft(Expand)41 b(an)m(y)j(sp)s(ecial)f(c)m (haracter)h(sequences)f(in)g Fj(prompt)g Ft(and)f(set)i(up)d(the)i(lo)s (cal)h(Readline)390 1137 y(prompt)35 b(redispla)m(y)h(v)-5 b(ariables.)57 b(This)35 b(function)h(is)g(called)h(b)m(y)e Fs(readline\(\))p Ft(.)55 b(It)35 b(ma)m(y)i(also)g(b)s(e)390 1246 y(called)22 b(to)g(expand)f(the)g(primary)f(prompt)g(if)i(the)f Fs(rl_on_new_line_with_prom)o(pt\()o(\))15 b Ft(function)390 1356 y(or)25 b Fs(rl_already_prompted)c Ft(v)-5 b(ariable)26 b(is)f(used.)39 b(It)25 b(returns)f(the)i(n)m(um)m(b)s(er)e(of)i (visible)f(c)m(haracters)390 1465 y(on)34 b(the)g(last)g(line)g(of)g (the)g(\(p)s(ossibly)f(m)m(ulti-line\))j(prompt.)50 b(Applications)34 b(ma)m(y)h(indicate)f(that)390 1575 y(the)28 b(prompt)f(con)m(tains)i (c)m(haracters)g(that)g(tak)m(e)g(up)e(no)h(ph)m(ysical)g(screen)g (space)g(when)f(displa)m(y)m(ed)390 1685 y(b)m(y)41 b(brac)m(k)m(eting) i(a)e(sequence)g(of)g(suc)m(h)g(c)m(haracters)h(with)f(the)g(sp)s (ecial)h(mark)m(ers)f Fs(RL_PROMPT_)390 1794 y(START_IGNORE)29 b Ft(and)j Fs(RL_PROMPT_END_IGNORE)26 b Ft(\(declared)33 b(in)f Fs(readline.h)p Ft(\).)44 b(This)32 b(ma)m(y)h(b)s(e)390 1904 y(used)d(to)h(em)m(b)s(ed)f(terminal-sp)s(eci\014c)h(escap)s(e)f (sequences)h(in)f(prompts.)3350 2084 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_set_prompt)d Fg(\()p Ff(const)34 b(c)m(har)g(*prompt)p Fg(\))390 2194 y Ft(Mak)m(e)28 b(Readline)g(use)f Fj(prompt)h Ft(for)e(subsequen)m(t)h(redispla)m(y)-8 b(.)40 b(This)26 b(calls)i Fs(rl_expand_prompt\(\))390 2303 y Ft(to)j(expand)f(the)g (prompt)g(and)g(sets)g Fs(rl_prompt)e Ft(to)j(the)g(result.)150 2500 y Fi(2.4.7)63 b(Mo)s(difying)43 b(T)-10 b(ext)3350 2694 y Ft([F)i(unction])-3599 b Fh(int)53 b(rl_insert_text)d Fg(\()p Ff(const)34 b(c)m(har)g(*text)p Fg(\))390 2804 y Ft(Insert)d Fj(text)k Ft(in)m(to)d(the)g(line)g(at)g(the)g(curren)m (t)f(cursor)g(p)s(osition.)45 b(Returns)30 b(the)i(n)m(um)m(b)s(er)f (of)g(c)m(har-)390 2913 y(acters)g(inserted.)3350 3093 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_delete_text)d Fg(\()p Ff(in)m(t)33 b(start,)g(in)m(t)g(end)p Fg(\))390 3203 y Ft(Delete)40 b(the)e(text)h(b)s(et)m(w)m(een)f Fj(start)i Ft(and)d Fj(end)k Ft(in)c(the)h(curren)m(t)g(line.)63 b(Returns)36 b(the)i(n)m(um)m(b)s(er)f(of)390 3313 y(c)m(haracters)32 b(deleted.)3350 3493 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_copy_text)d Fg(\()p Ff(in)m(t)34 b(start,)e(in)m(t)h(end)p Fg(\))390 3602 y Ft(Return)d(a)g(cop)m(y)h(of)g(the)g(text)g(b)s(et)m (w)m(een)g Fj(start)i Ft(and)d Fj(end)j Ft(in)d(the)h(curren)m(t)f (line.)3350 3783 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_kill_text)c Fg(\()p Ff(in)m(t)34 b(start,)e(in)m(t)i(end)p Fg(\))390 3892 y Ft(Cop)m(y)g(the)g(text)i(b)s(et)m(w)m(een)e Fj(start)j Ft(and)d Fj(end)j Ft(in)d(the)g(curren)m(t)g(line)g(to)h (the)f(kill)h(ring,)g(app)s(ending)390 4002 y(or)f(prep)s(ending)e(to)j (the)f(last)h(kill)f(if)g(the)g(last)h(command)f(w)m(as)g(a)h(kill)f (command.)51 b(The)34 b(text)h(is)390 4112 y(deleted.)51 b(If)33 b Fj(start)j Ft(is)e(less)g(than)f Fj(end)p Ft(,)h(the)g(text)g (is)g(app)s(ended,)f(otherwise)h(prep)s(ended.)48 b(If)33 b(the)390 4221 y(last)e(command)f(w)m(as)h(not)g(a)f(kill,)i(a)f(new)e (kill)i(ring)g(slot)g(is)f(used.)3350 4401 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_push_macro_input)e Fg(\()p Ff(c)m(har)35 b(*macro)p Fg(\))390 4511 y Ft(Cause)28 b Fj(macro)33 b Ft(to)c(b)s(e)f(inserted)g(in)m(to)h(the)g(line,)g(as)f(if)h(it)f (had)g(b)s(een)g(in)m(v)m(ok)m(ed)h(b)m(y)f(a)h(k)m(ey)g(b)s(ound)d(to) 390 4621 y(a)31 b(macro.)41 b(Not)31 b(esp)s(ecially)h(useful;)e(use)g Fs(rl_insert_text\(\))c Ft(instead.)150 4817 y Fi(2.4.8)63 b(Character)39 b(Input)3350 5011 y Ft([F)-8 b(unction])-3599 b Fh(int)53 b(rl_read_key)c Fg(\()p Ff(v)m(oid)p Fg(\))390 5121 y Ft(Return)29 b(the)g(next)h(c)m(haracter)h(a)m(v)-5 b(ailable)32 b(from)d(Readline's)h(curren)m(t)f(input)g(stream.)41 b(This)28 b(han-)390 5230 y(dles)e(input)g(inserted)g(in)m(to)i(the)e (input)g(stream)h(via)g Fj(rl)p 2226 5230 28 4 v 40 w(p)s(ending)p 2583 5230 V 38 w(input)h Ft(\(see)f(Section)h(2.3)f([Read-)390 5340 y(line)40 b(V)-8 b(ariables],)43 b(page)d(27\))g(and)f Fs(rl_stuff_char\(\))p Ft(,)f(macros,)k(and)d(c)m(haracters)h(read)f (from)p eop end %%Page: 39 43 TeXDict begin 39 42 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(39)390 299 y(the)34 b(k)m(eyb)s(oard.)52 b(While)35 b(w)m(aiting)g(for)f (input,)g(this)g(function)g(will)g(call)i(an)m(y)e(function)g(assigned) 390 408 y(to)d(the)g Fs(rl_event_hook)26 b Ft(v)-5 b(ariable.)3350 574 y([F)d(unction])-3599 b Fh(int)53 b(rl_getc)48 b Fg(\()p Ff(FILE)33 b(*stream)p Fg(\))390 684 y Ft(Return)20 b(the)i(next)f(c)m(haracter)i(a)m(v)-5 b(ailable)24 b(from)c Fj(stream)p Ft(,)k(whic)m(h)d(is)g(assumed)g(to)h(b)s(e)e(the)i(k)m (eyb)s(oard.)3350 850 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_stuff_char)d Fg(\()p Ff(in)m(t)33 b(c)p Fg(\))390 959 y Ft(Insert)f Fj(c)39 b Ft(in)m(to)34 b(the)f(Readline)g(input)f (stream.)49 b(It)33 b(will)g(b)s(e)f Fs(")p Ft(read)p Fs(")g Ft(b)s(efore)h(Readline)g(attempts)390 1069 y(to)27 b(read)g(c)m(haracters)h(from)f(the)g(terminal)g(with)f Fs(rl_read_key\(\))p Ft(.)36 b(Up)27 b(to)g(512)h(c)m(haracters)g(ma)m (y)390 1178 y(b)s(e)i(pushed)f(bac)m(k.)42 b Fs(rl_stuff_char)27 b Ft(returns)i(1)i(if)f(the)h(c)m(haracter)h(w)m(as)f(successfully)g (inserted;)390 1288 y(0)g(otherwise.)3350 1454 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_execute_next)d Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 1563 y Ft(Mak)m(e)j Fj(c)42 b Ft(b)s(e)35 b(the)h(next)f(command)h(to)g(b)s(e)f(executed)i(when)d Fs(rl_read_key\(\))e Ft(is)k(called.)58 b(This)390 1673 y(sets)31 b Fj(rl)p 635 1673 28 4 v 40 w(p)s(ending)p 992 1673 V 38 w(input)p Ft(.)3350 1839 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_clear_pending_inpu)q(t)e Fg(\()p Ff(v)m(oid)p Fg(\))390 1948 y Ft(Unset)42 b Fj(rl)p 729 1948 V 40 w(p)s(ending)p 1086 1948 V 38 w(input)p Ft(,)i(e\013ectiv)m(ely)h (negating)e(the)f(e\013ect)h(of)f(an)m(y)g(previous)f(call)i(to)g Fs(rl_)390 2058 y(execute_next\(\))p Ft(.)59 b(This)36 b(w)m(orks)i(only)g(if)f(the)h(p)s(ending)e(input)h(has)g(not)h (already)g(b)s(een)f(read)390 2167 y(with)30 b Fs(rl_read_key\(\))p Ft(.)3350 2333 y([F)-8 b(unction])-3599 b Fh(int)53 b (rl_set_keyboard_input)q(_tim)q(eou)q(t)e Fg(\()p Ff(in)m(t)34 b(u)p Fg(\))390 2443 y Ft(While)41 b(w)m(aiting)g(for)f(k)m(eyb)s(oard) g(input)f(in)h Fs(rl_read_key\(\))p Ft(,)f(Readline)i(will)f(w)m(ait)h (for)f Fj(u)g Ft(mi-)390 2552 y(croseconds)31 b(for)g(input)f(b)s (efore)g(calling)j(an)m(y)e(function)f(assigned)i(to)f Fs(rl_event_hook)p Ft(.)39 b Fj(u)30 b Ft(m)m(ust)390 2662 y(b)s(e)h(greater)i(than)f(or)g(equal)g(to)h(zero)f(\(a)h (zero-length)g(timeout)g(is)f(equiv)-5 b(alen)m(t)33 b(to)g(a)f(p)s(oll\).)45 b(The)390 2771 y(default)31 b(w)m(aiting)g(p)s(erio)s(d)e(is)i(one-ten)m(th)g(of)g(a)g(second.)40 b(Returns)30 b(the)g(old)h(timeout)g(v)-5 b(alue.)150 2958 y Fi(2.4.9)63 b(T)-10 b(erminal)41 b(Managemen)m(t)3350 3143 y Ft([F)-8 b(unction])-3599 b Fh(void)54 b(rl_prep_terminal)c Fg(\()p Ff(in)m(t)33 b(meta)p 1704 3143 30 5 v 44 w(\015ag)p Fg(\))390 3252 y Ft(Mo)s(dify)42 b(the)h(terminal)g(settings)g(for)f (Readline's)i(use,)h(so)e Fs(readline\(\))c Ft(can)k(read)f(a)h(single) 390 3362 y(c)m(haracter)32 b(at)g(a)f(time)h(from)e(the)h(k)m(eyb)s (oard.)43 b(The)30 b Fj(meta)p 2376 3362 28 4 v 41 w(\015ag)39 b Ft(argumen)m(t)31 b(should)f(b)s(e)g(non-zero)390 3471 y(if)g(Readline)h(should)f(read)g(eigh)m(t-bit)i(input.)3350 3637 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_deprep_terminal)c Fg(\()p Ff(v)m(oid)p Fg(\))390 3747 y Ft(Undo)31 b(the)h(e\013ects)h (of)f Fs(rl_prep_terminal\(\))p Ft(,)27 b(lea)m(ving)33 b(the)f(terminal)g(in)f(the)h(state)h(in)e(whic)m(h)390 3856 y(it)g(w)m(as)g(b)s(efore)f(the)g(most)h(recen)m(t)g(call)h(to)f Fs(rl_prep_terminal\(\))p Ft(.)3350 4022 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_tty_set_default_bindi)q(ngs)e Fg(\()p Ff(Keymap)34 b(kmap)p Fg(\))390 4132 y Ft(Read)j(the)g(op)s(erating)h (system's)f(terminal)g(editing)h(c)m(haracters)g(\(as)g(w)m(ould)e(b)s (e)h(displa)m(y)m(ed)g(b)m(y)390 4241 y Fs(stty)p Ft(\))30 b(to)h(their)f(Readline)h(equiv)-5 b(alen)m(ts.)42 b(The)30 b(bindings)f(are)i(p)s(erformed)e(in)h Fj(kmap)p Ft(.)3350 4407 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_tty_unset_default_bin)q (din)q(gs)e Fg(\()p Ff(Keymap)34 b(kmap)p Fg(\))390 4517 y Ft(Reset)f(the)f(bindings)e(manipulated)i(b)m(y)g Fs (rl_tty_set_default_bind)o(ing)o(s)26 b Ft(so)32 b(that)g(the)g(ter-) 390 4626 y(minal)40 b(editing)g(c)m(haracters)h(are)f(b)s(ound)e(to)i Fs(rl_insert)p Ft(.)66 b(The)39 b(bindings)f(are)i(p)s(erformed)e(in) 390 4736 y Fj(kmap)p Ft(.)3350 4902 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_tty_set_echoing)e Fg(\()p Ff(in)m(t)34 b(v)-6 b(alue)p Fg(\))390 5011 y Ft(Set)48 b(Readline's)g(idea)g(of)g (whether)f(or)g(not)h(it)g(is)f(ec)m(hoing)i(output)e(to)i(its)e (output)h(stream)390 5121 y(\()p Fj(rl)p 492 5121 V 40 w(outstream)p Ft(\).)j(If)32 b Fj(v)-5 b(alue)39 b Ft(is)34 b(0,)g(Readline)g(do)s(es)f(not)h(displa)m(y)f(output)g(to)h Fj(rl)p 3115 5121 V 40 w(outstream)p Ft(;)i(an)m(y)390 5230 y(other)43 b(v)-5 b(alue)43 b(enables)h(output.)77 b(The)43 b(initial)h(v)-5 b(alue)43 b(is)g(set)g(when)f(Readline)i (initializes)h(the)390 5340 y(terminal)31 b(settings.)42 b(This)29 b(function)h(returns)f(the)i(previous)f(v)-5 b(alue.)p eop end %%Page: 40 44 TeXDict begin 40 43 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(40)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_reset_terminal)e Fg(\()p Ff(const)34 b(c)m(har)g(*terminal)p 2232 299 30 5 v 43 w(name)p Fg(\))390 408 y Ft(Reinitialize)26 b(Readline's)f(idea)f(of)g(the)g(terminal)h(settings)f(using)g Fj(terminal)p 2977 408 28 4 v 40 w(name)29 b Ft(as)24 b(the)g(termi-)390 518 y(nal)32 b(t)m(yp)s(e)g(\(e.g.,)i Fs(vt100)p Ft(\).)44 b(If)31 b Fj(terminal)p 1753 518 V 41 w(name)37 b Ft(is)31 b Fs(NULL)p Ft(,)h(the)g(v)-5 b(alue)32 b(of)g(the)g Fs(TERM)e Ft(en)m(vironmen)m(t)390 628 y(v)-5 b(ariable)31 b(is)g(used.)150 822 y Fi(2.4.10)63 b(Utilit)m(y)40 b(F)-10 b(unctions)3350 1013 y Ft([F)i(unction])-3599 b Fh(int)53 b(rl_save_state)d Fg(\()p Ff(struct)34 b(readline)p 1759 1013 30 5 v 44 w(state)f(*sp)p Fg(\))390 1123 y Ft(Sa)m(v)m(e)d(a)f(snapshot)e(of)i(Readline's)g(in)m(ternal)g(state)h (to)f Fj(sp)p Ft(.)40 b(The)28 b(con)m(ten)m(ts)i(of)e(the)h Fj(readline)p 3518 1123 28 4 v 40 w(state)390 1232 y Ft(structure)g(are)g(do)s(cumen)m(ted)g(in)g Fs(readline.h)p Ft(.)38 b(The)28 b(caller)j(is)e(resp)s(onsible)f(for)h(allo)s(cating)j (the)390 1342 y(structure.)3350 1518 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_restore_state)e Fg(\()p Ff(struct)34 b(readline)p 1916 1518 30 5 v 44 w(state)f(*sp)p Fg(\))390 1628 y Ft(Restore)23 b(Readline's)g(in)m(ternal)g(state)g(to)g(that)g (stored)f(in)g Fj(sp)p Ft(,)i(whic)m(h)d(m)m(ust)h(ha)m(v)m(e)i(b)s (een)d(sa)m(v)m(ed)i(b)m(y)g(a)390 1737 y(call)30 b(to)g Fs(rl_save_state)p Ft(.)37 b(The)28 b(con)m(ten)m(ts)j(of)e(the)g Fj(readline)p 2470 1737 28 4 v 41 w(state)35 b Ft(structure)29 b(are)g(do)s(cumen)m(ted)390 1847 y(in)h Fs(readline.h)p Ft(.)38 b(The)30 b(caller)i(is)e(resp)s(onsible)f(for)i(freeing)f(the)h (structure.)3350 2023 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_free)47 b Fg(\()p Ff(v)m(oid)33 b(*mem)p Fg(\))390 2133 y Ft(Deallo)s(cate)25 b(the)c(memory)g(p)s(oin)m(ted)g(to)h(b)m(y) f Fj(mem)p Ft(.)38 b Fj(mem)21 b Ft(m)m(ust)g(ha)m(v)m(e)i(b)s(een)d (allo)s(cated)j(b)m(y)e Fs(malloc)p Ft(.)3350 2309 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_replace_line)c Fg(\()p Ff(const)34 b(c)m(har)f(*text,)g(in)m(t)g(clear)p 2406 2309 30 5 v 44 w(undo)p Fg(\))390 2419 y Ft(Replace)41 b(the)e(con)m(ten)m(ts)i(of)f Fs(rl_line_buffer)35 b Ft(with)k Fj(text)p Ft(.)69 b(The)39 b(p)s(oin)m(t)h(and)e(mark)h(are)h (pre-)390 2528 y(serv)m(ed,)27 b(if)e(p)s(ossible.)39 b(If)25 b Fj(clear)p 1422 2528 28 4 v 41 w(undo)k Ft(is)d(non-zero,)h (the)f(undo)e(list)i(asso)s(ciated)h(with)e(the)h(curren)m(t)390 2638 y(line)31 b(is)f(cleared.)3350 2814 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_extend_line_buffer)d Fg(\()p Ff(in)m(t)34 b(len)p Fg(\))390 2924 y Ft(Ensure)29 b(that)h Fs(rl_line_buffer)d Ft(has)j(enough)f(space)i(to)g(hold)f Fj(len)g Ft(c)m(haracters,)i(p)s (ossibly)d(real-)390 3034 y(lo)s(cating)j(it)f(if)f(necessary)-8 b(.)3350 3210 y([F)g(unction])-3599 b Fh(int)53 b(rl_initialize)d Fg(\()p Ff(v)m(oid)p Fg(\))390 3319 y Ft(Initialize)39 b(or)e(re-initialize)i(Readline's)f(in)m(ternal)f(state.)62 b(It's)37 b(not)g(strictly)h(necessary)f(to)h(call)390 3429 y(this;)31 b Fs(readline\(\))c Ft(calls)32 b(it)f(b)s(efore)f (reading)g(an)m(y)h(input.)3350 3605 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_ding)48 b Fg(\()p Ff(v)m(oid)p Fg(\))390 3715 y Ft(Ring)30 b(the)h(terminal)g(b)s(ell,)f(ob)s(eying)h(the)f (setting)i(of)e Fs(bell-style)p Ft(.)3350 3891 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_alphabetic)d Fg(\()p Ff(in)m(t)33 b(c)p Fg(\))390 4001 y Ft(Return)d(1)g(if)h Fj(c)36 b Ft(is)30 b(an)h(alphab)s(etic)g(c)m(haracter.)3350 4177 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_display_match_list)d Fg(\()p Ff(c)m(har)35 b(**matc)m(hes,)e(in)m(t)g(len,)h(in)m(t)f(max)p Fg(\))390 4287 y Ft(A)i(con)m(v)m(enience)h(function)e(for)g(displa)m (ying)h(a)g(list)g(of)g(strings)f(in)g(columnar)g(format)h(on)f(Read-) 390 4396 y(line's)g(output)f(stream.)51 b Fs(matches)31 b Ft(is)j(the)f(list)i(of)e(strings,)i(in)e(argv)h(format,)h(suc)m(h)e (as)h(a)g(list)g(of)390 4506 y(completion)26 b(matc)m(hes.)39 b Fs(len)24 b Ft(is)g(the)g(n)m(um)m(b)s(er)f(of)i(strings)f(in)g Fs(matches)p Ft(,)f(and)h Fs(max)f Ft(is)i(the)f(length)h(of)390 4616 y(the)h(longest)i(string)e(in)g Fs(matches)p Ft(.)37 b(This)25 b(function)h(uses)g(the)g(setting)i(of)e Fs (print-completions-)390 4725 y(horizontally)33 b Ft(to)k(select)h(ho)m (w)e(the)g(matc)m(hes)i(are)e(displa)m(y)m(ed)h(\(see)g(Section)g (1.3.1)h([Readline)390 4835 y(Init)30 b(File)h(Syn)m(tax],)g(page)g (4\).)42 b(When)29 b(displa)m(ying)i(completions,)h(this)e(function)g (sets)g(the)g(n)m(um-)390 4944 y(b)s(er)23 b(of)g(columns)g(used)g(for) h(displa)m(y)f(to)i(the)e(v)-5 b(alue)24 b(of)g Fs (completion-display-width)p Ft(,)19 b(the)k(v)-5 b(alue)390 5054 y(of)31 b(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)31 b Fs(COLUMNS)p Ft(,)e(or)h(the)h(screen)f(width,)g(in)g(that)h(order.) 275 5230 y(The)g(follo)m(wing)j(are)e(implemen)m(ted)h(as)f(macros,)h (de\014ned)e(in)h Fs(chardefs.h)p Ft(.)43 b(Applications)33 b(should)150 5340 y(refrain)d(from)g(using)g(them.)p eop end %%Page: 41 45 TeXDict begin 41 44 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(41)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_uppercase_p)d Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 408 y Ft(Return)c(1)g(if)h Fj(c)36 b Ft(is)30 b(an)h(upp)s(ercase)e(alphab)s(etic)i(c)m(haracter.) 3350 608 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_lowercase_p)d Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 718 y Ft(Return)c(1)g(if)h Fj(c)36 b Ft(is)30 b(a)h(lo)m(w)m(ercase)i(alphab)s(etic)e(c)m (haracter.)3350 918 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_digit_p)c Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 1028 y Ft(Return)c(1)g(if)h Fj(c)36 b Ft(is)30 b(a)h(n)m(umeric)f(c)m (haracter.)3350 1227 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_to_upper)c Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 1337 y Ft(If)23 b Fj(c)30 b Ft(is)24 b(a)g(lo)m(w)m(ercase)i(alphab)s (etic)e(c)m(haracter,)j(return)c(the)h(corresp)s(onding)e(upp)s(ercase) h(c)m(haracter.)3350 1537 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_to_lower)c Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 1647 y Ft(If)28 b Fj(c)35 b Ft(is)29 b(an)g(upp)s(ercase)f (alphab)s(etic)h(c)m(haracter,)i(return)d(the)h(corresp)s(onding)f(lo)m (w)m(ercase)j(c)m(harac-)390 1756 y(ter.)3350 1956 y([F)-8 b(unction])-3599 b Fh(int)53 b(_rl_digit_value)d Fg(\()p Ff(in)m(t)34 b(c)p Fg(\))390 2066 y Ft(If)c Fj(c)36 b Ft(is)31 b(a)f(n)m(um)m(b)s(er,)g(return)f(the)h(v)-5 b(alue)31 b(it)g(represen)m(ts.)150 2273 y Fi(2.4.11)63 b(Miscellaneous)42 b(F)-10 b(unctions)3350 2477 y Ft([F)i(unction]) -3599 b Fh(int)53 b(rl_macro_bind)d Fg(\()p Ff(const)34 b(c)m(har)g(*k)m(eyseq,)e(const)i(c)m(har)g(*macro,)565 2587 y(Keymap)g(map)p Fg(\))390 2696 y Ft(Bind)23 b(the)g(k)m(ey)h (sequence)g Fj(k)m(eyseq)i Ft(to)e(in)m(v)m(ok)m(e)h(the)f(macro)f Fj(macro)p Ft(.)39 b(The)23 b(binding)f(is)i(p)s(erformed)d(in)390 2806 y Fj(map)p Ft(.)39 b(When)28 b Fj(k)m(eyseq)i Ft(is)e(in)m(v)m(ok) m(ed,)i(the)d Fj(macro)33 b Ft(will)28 b(b)s(e)f(inserted)g(in)m(to)i (the)e(line.)41 b(This)26 b(function)390 2916 y(is)k(deprecated;)i(use) e Fs(rl_generic_bind\(\))25 b Ft(instead.)3350 3116 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_macro_dumper)c Fg(\()p Ff(in)m(t)33 b(readable)p Fg(\))390 3225 y Ft(Prin)m(t)27 b(the)g(k)m(ey)h(sequences)g(b)s(ound)d(to)j(macros)f(and)g(their)g(v) -5 b(alues,)28 b(using)f(the)g(curren)m(t)g(k)m(eymap,)390 3335 y(to)32 b Fs(rl_outstream)p Ft(.)40 b(If)31 b Fj(readable)36 b Ft(is)c(non-zero,)g(the)f(list)h(is)f(formatted)h(in)f(suc)m(h)g(a)g (w)m(a)m(y)i(that)e(it)390 3444 y(can)g(b)s(e)e(made)i(part)f(of)h(an)f Fs(inputrc)e Ft(\014le)j(and)e(re-read.)3350 3644 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_variable_bind)e Fg(\()p Ff(const)34 b(c)m(har)f(*v)-6 b(ariable,)33 b(const)h(c)m(har)f(*v)-6 b(alue)p Fg(\))390 3754 y Ft(Mak)m(e)31 b(the)e(Readline)g(v)-5 b(ariable)30 b Fj(v)-5 b(ariable)35 b Ft(ha)m(v)m(e)30 b Fj(v)-5 b(alue)p Ft(.)41 b(This)28 b(b)s(eha)m(v)m(es)h(as)h(if)f (the)g(readline)g(com-)390 3863 y(mand)h(`)p Fs(set)g Fl(variable)e(value)p Ft(')h(had)h(b)s(een)h(executed)g(in)g(an)f Fs(inputrc)f Ft(\014le)i(\(see)h(Section)f(1.3.1)390 3973 y([Readline)g(Init)f(File)i(Syn)m(tax],)f(page)g(4\).)3350 4173 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_variable_value)f Fg(\()p Ff(const)34 b(c)m(har)g(*v)-6 b(ariable)p Fg(\))390 4283 y Ft(Return)28 b(a)i(string)f(represen)m(ting)h(the)f(v)-5 b(alue)30 b(of)f(the)h(Readline)g(v)-5 b(ariable)30 b Fj(v)-5 b(ariable)p Ft(.)41 b(F)-8 b(or)30 b(b)s(o)s(olean)390 4392 y(v)-5 b(ariables,)31 b(this)g(string)f(is)g(either)h(`)p Fs(on)p Ft(')f(or)h(`)p Fs(off)p Ft('.)3350 4592 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_variable_dumper)c Fg(\()p Ff(in)m(t)34 b(readable)p Fg(\))390 4702 y Ft(Prin)m(t)29 b(the)f(readline)h(v)-5 b(ariable)30 b(names)e(and)g(their)h(curren)m (t)f(v)-5 b(alues)29 b(to)h Fs(rl_outstream)p Ft(.)37 b(If)28 b Fj(read-)390 4811 y(able)40 b Ft(is)34 b(non-zero,)i(the)e (list)g(is)g(formatted)h(in)f(suc)m(h)g(a)g(w)m(a)m(y)h(that)g(it)f (can)g(b)s(e)g(made)g(part)g(of)g(an)390 4921 y Fs(inputrc)28 b Ft(\014le)j(and)f(re-read.)3350 5121 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_set_paren_blink_ti)q(meou)q(t)f Fg(\()p Ff(in)m(t)33 b(u)p Fg(\))390 5230 y Ft(Set)25 b(the)h(time)f(in)m(terv) -5 b(al)27 b(\(in)e(microseconds\))h(that)g(Readline)f(w)m(aits)h(when) e(sho)m(wing)i(a)f(balancing)390 5340 y(c)m(haracter)32 b(when)d Fs(blink-matching-paren)c Ft(has)30 b(b)s(een)g(enabled.)p eop end %%Page: 42 46 TeXDict begin 42 45 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(42)3350 299 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_get_termcap)e Fg(\()p Ff(const)34 b(c)m(har)g(*cap)p Fg(\))390 408 y Ft(Retriev)m(e)29 b(the)e(string)g(v)-5 b(alue)27 b(of)g(the)h (termcap)f(capabilit)m(y)i Fj(cap)p Ft(.)40 b(Readline)27 b(fetc)m(hes)h(the)g(termcap)390 518 y(en)m(try)34 b(for)f(the)h (curren)m(t)f(terminal)h(name)g(and)f(uses)g(those)h(capabilities)h(to) f(mo)m(v)m(e)h(around)e(the)390 628 y(screen)21 b(line)h(and)e(p)s (erform)g(other)h(terminal-sp)s(eci\014c)h(op)s(erations,)h(lik)m(e)f (erasing)g(a)f(line.)38 b(Readline)390 737 y(do)s(es)d(not)g(use)g(all) g(of)h(a)f(terminal's)g(capabilities,)k(and)34 b(this)h(function)g (will)g(return)f(v)-5 b(alues)35 b(for)390 847 y(only)30 b(those)h(capabilities)i(Readline)e(uses.)3350 1017 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_clear_history)c Fg(\()p Ff(v)m(oid)p Fg(\))390 1127 y Ft(Clear)27 b(the)h(history)f(list)h(b)m (y)f(deleting)h(all)g(of)f(the)h(en)m(tries,)h(in)d(the)i(same)f (manner)g(as)g(the)g(History)390 1236 y(library's)42 b Fs(clear_history\(\))d Ft(function.)78 b(This)42 b(di\013ers)g(from)g Fs(clear_history)e Ft(b)s(ecause)i(it)390 1346 y(frees)30 b(priv)-5 b(ate)31 b(data)g(Readline)g(sa)m(v)m(es)h(in)e(the)h (history)f(list.)150 1536 y Fi(2.4.12)63 b(Alternate)40 b(In)m(terface)150 1683 y Ft(An)21 b(alternate)j(in)m(terface)f(is)f(a) m(v)-5 b(ailable)24 b(to)e(plain)g Fs(readline\(\))p Ft(.)35 b(Some)21 b(applications)i(need)f(to)g(in)m(terlea)m(v)m(e)150 1792 y(k)m(eyb)s(oard)35 b(I/O)h(with)f(\014le,)i(device,)h(or)e(windo) m(w)f(system)g(I/O,)h(t)m(ypically)i(b)m(y)d(using)g(a)h(main)g(lo)s (op)f(to)150 1902 y Fs(select\(\))42 b Ft(on)i(v)-5 b(arious)45 b(\014le)f(descriptors.)83 b(T)-8 b(o)45 b(accommo)s(date)h(this)e (need,)k(readline)d(can)f(also)i(b)s(e)150 2011 y(in)m(v)m(ok)m(ed)33 b(as)e(a)h(`callbac)m(k')h(function)e(from)g(an)g(ev)m(en)m(t)h(lo)s (op.)44 b(There)30 b(are)i(functions)f(a)m(v)-5 b(ailable)33 b(to)f(mak)m(e)150 2121 y(this)e(easy)-8 b(.)3350 2291 y([F)g(unction])-3599 b Fh(void)54 b(rl_callback_handler_inst)q(all)e Fg(\()p Ff(const)34 b(c)m(har)g(*prompt,)565 2401 y(rl)p 639 2401 30 5 v 44 w(v)m(cpfunc)p 1016 2401 V 45 w(t)f(*lhandler)p Fg(\))390 2510 y Ft(Set)25 b(up)f(the)h(terminal)g(for)f(readline)i (I/O)e(and)g(displa)m(y)h(the)g(initial)h(expanded)e(v)-5 b(alue)26 b(of)f Fj(prompt)p Ft(.)390 2620 y(Sa)m(v)m(e)34 b(the)f(v)-5 b(alue)33 b(of)g Fj(lhandler)39 b Ft(to)34 b(use)e(as)h(a)g(handler)f(function)h(to)g(call)h(when)e(a)h(complete)i (line)390 2730 y(of)h(input)f(has)g(b)s(een)g(en)m(tered.)57 b(The)35 b(handler)g(function)g(receiv)m(es)j(the)e(text)g(of)g(the)g (line)g(as)g(an)390 2839 y(argumen)m(t.)k(As)29 b(with)f Fs(readline\(\))p Ft(,)e(the)j(handler)e(function)h(should)g Fs(free)f Ft(the)h(line)h(when)e(it)i(it)390 2949 y(\014nished)g(with)h (it.)3350 3119 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_callback_read_char)d Fg(\()p Ff(v)m(oid)p Fg(\))390 3228 y Ft(Whenev)m(er)34 b(an)g(application)h(determines)e(that)i(k)m (eyb)s(oard)e(input)g(is)h(a)m(v)-5 b(ailable,)37 b(it)d(should)f(call) 390 3338 y Fs(rl_callback_read_char\(\))p Ft(,)17 b(whic)m(h)22 b(will)g(read)f(the)h(next)g(c)m(haracter)h(from)f(the)f(curren)m(t)h (input)390 3448 y(source.)40 b(If)27 b(that)i(c)m(haracter)g(completes) h(the)e(line,)h Fs(rl_callback_read_char)22 b Ft(will)28 b(in)m(v)m(ok)m(e)i(the)390 3557 y Fj(lhandler)47 b Ft(function)40 b(installed)i(b)m(y)e Fs(rl_callback_handler_insta)o(ll)35 b Ft(to)41 b(pro)s(cess)f(the)h(line.)390 3667 y(Before)j(calling)h (the)e Fj(lhandler)49 b Ft(function,)e(the)c(terminal)h(settings)g(are) g(reset)f(to)h(the)g(v)-5 b(alues)390 3776 y(they)44 b(had)e(b)s(efore)h(calling)i Fs(rl_callback_handler_insta)o(ll)p Ft(.)73 b(If)43 b(the)h Fj(lhandler)49 b Ft(function)390 3886 y(returns,)27 b(and)h(the)g(line)g(handler)f(remains)h(installed,) i(the)e(terminal)g(settings)h(are)f(mo)s(di\014ed)f(for)390 3996 y(Readline's)k(use)f(again.)42 b Fs(EOF)29 b Ft(is)i(indicated)g (b)m(y)f(calling)i Fj(lhandler)k Ft(with)30 b(a)h Fs(NULL)e Ft(line.)3350 4166 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_callback_sigcleanup)e Fg(\()p Ff(v)m(oid)p Fg(\))390 4275 y Ft(Clean)26 b(up)e(an)m(y)i(in)m(ternal)g(state)h(the)e(callbac) m(k)j(in)m(terface)f(uses)e(to)h(main)m(tain)g(state)h(b)s(et)m(w)m (een)f(calls)390 4385 y(to)35 b(rl)p 572 4385 28 4 v 40 w(callbac)m(k)p 928 4385 V 42 w(read)p 1142 4385 V 40 w(c)m(har)f(\(e.g.,)j(the)e(state)g(of)f(an)m(y)h(activ)m(e)h (incremen)m(tal)f(searc)m(hes\).)54 b(This)33 b(is)390 4495 y(in)m(tended)f(to)h(b)s(e)e(used)g(b)m(y)h(applications)h(that)g (wish)e(to)i(p)s(erform)d(their)j(o)m(wn)f(signal)g(handling;)390 4604 y(Readline's)f(in)m(ternal)g(signal)g(handler)f(calls)h(this)g (when)e(appropriate.)3350 4774 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_callback_handler_remo)q(ve)e Fg(\()p Ff(v)m(oid)p Fg(\))390 4884 y Ft(Restore)37 b(the)f(terminal)g(to)g (its)h(initial)g(state)g(and)e(remo)m(v)m(e)i(the)f(line)g(handler.)56 b(Y)-8 b(ou)36 b(ma)m(y)h(call)390 4994 y(this)25 b(function)g(from)g (within)g(a)h(callbac)m(k)i(as)d(w)m(ell)i(as)f(indep)s(enden)m(tly)-8 b(.)38 b(If)25 b(the)h Fj(lhandler)31 b Ft(installed)390 5103 y(b)m(y)25 b Fs(rl_callback_handler_insta)o(ll)19 b Ft(do)s(es)25 b(not)h(exit)g(the)g(program,)g(either)g(this)f (function)g(or)390 5213 y(the)32 b(function)f(referred)f(to)i(b)m(y)g (the)f(v)-5 b(alue)32 b(of)g Fs(rl_deprep_term_function)25 b Ft(should)30 b(b)s(e)h(called)390 5322 y(b)s(efore)f(the)h(program)f (exits)h(to)g(reset)g(the)f(terminal)h(settings.)p eop end %%Page: 43 47 TeXDict begin 43 46 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(43)150 299 y Fi(2.4.13)63 b(A)41 b(Readline)f(Example)150 446 y Ft(Here)34 b(is)g(a)g(function)g(whic)m(h)g(c)m(hanges)g(lo)m(w)m (ercase)j(c)m(haracters)e(to)f(their)g(upp)s(ercase)f(equiv)-5 b(alen)m(ts,)37 b(and)150 555 y(upp)s(ercase)d(c)m(haracters)j(to)f(lo) m(w)m(ercase.)58 b(If)35 b(this)g(function)g(w)m(as)h(b)s(ound)d(to)j (`)p Fs(M-c)p Ft(',)h(then)e(t)m(yping)g(`)p Fs(M-c)p Ft(')150 665 y(w)m(ould)c(c)m(hange)i(the)f(case)g(of)g(the)g(c)m (haracter)h(under)d(p)s(oin)m(t.)44 b(T)m(yping)31 b(`)p Fs(M-1)f(0)g(M-c)p Ft(')h(w)m(ould)g(c)m(hange)i(the)150 775 y(case)e(of)g(the)g(follo)m(wing)g(10)h(c)m(haracters,)g(lea)m (ving)g(the)e(cursor)g(on)g(the)h(last)g(c)m(haracter)h(c)m(hanged.)390 956 y Fs(/*)47 b(Invert)f(the)h(case)g(of)g(the)g(COUNT)f(following)g (characters.)e(*/)390 1066 y(int)390 1176 y(invert_case_line)f (\(count,)j(key\))629 1285 y(int)h(count,)f(key;)390 1395 y({)485 1504 y(register)g(int)h(start,)f(end,)h(i;)485 1724 y(start)g(=)g(rl_point;)485 1943 y(if)h(\(rl_point)d(>=)i (rl_end\))581 2052 y(return)f(\(0\);)485 2271 y(if)i(\(count)e(<)h(0\)) 581 2381 y({)676 2491 y(direction)f(=)h(-1;)676 2600 y(count)g(=)g(-count;)581 2710 y(})485 2819 y(else)581 2929 y(direction)e(=)j(1;)485 3148 y(/*)g(Find)e(the)h(end)g(of)g(the)g (range)g(to)g(modify.)f(*/)485 3258 y(end)h(=)h(start)e(+)i(\(count)e (*)h(direction\);)485 3477 y(/*)h(Force)e(it)h(to)g(be)h(within)e (range.)g(*/)485 3587 y(if)i(\(end)e(>)i(rl_end\))581 3696 y(end)f(=)g(rl_end;)485 3806 y(else)g(if)g(\(end)g(<)g(0\))581 3915 y(end)g(=)g(0;)485 4134 y(if)h(\(start)e(==)h(end\))581 4244 y(return)f(\(0\);)485 4463 y(if)i(\(start)e(>)h(end\))581 4573 y({)676 4682 y(int)g(temp)g(=)g(start;)676 4792 y(start)g(=)g(end;)676 4902 y(end)g(=)h(temp;)581 5011 y(})485 5230 y(/*)g(Tell)e(readline)g(that)g(we)i(are)f(modifying)e (the)i(line,)629 5340 y(so)g(it)g(will)g(save)f(the)h(undo)g (information.)d(*/)p eop end %%Page: 44 48 TeXDict begin 44 47 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(44)485 299 y Fs(rl_modifying)45 b(\(start,)h(end\);)485 518 y(for)h(\(i)h(=)f(start;)f(i)i(!=)f(end;)f(i++\))581 628 y({)676 737 y(if)i(\(_rl_uppercase_p)43 b(\(rl_line_buffer[i]\)\)) 772 847 y(rl_line_buffer[i])g(=)k(_rl_to_lower)e (\(rl_line_buffer[i]\);)676 956 y(else)i(if)g(\(_rl_lowercase_p)d (\(rl_line_buffer[i]\)\))772 1066 y(rl_line_buffer[i])f(=)k (_rl_to_upper)e(\(rl_line_buffer[i]\);)581 1176 y(})485 1285 y(/*)j(Move)e(point)h(to)g(on)g(top)g(of)g(the)g(last)g(character) e(changed.)g(*/)485 1395 y(rl_point)h(=)h(\(direction)e(==)j(1\))f(?)g (end)g(-)h(1)f(:)h(start;)485 1504 y(return)f(\(0\);)390 1614 y(})150 1847 y Fi(2.4.14)63 b(Alternate)40 b(In)m(terface)g (Example)150 1994 y Ft(Here)f(is)g(a)g(complete)h(program)e(that)h (illustrates)h(Readline's)f(alternate)h(in)m(terface.)67 b(It)38 b(reads)h(lines)150 2103 y(from)30 b(the)i(terminal)f(and)f (displa)m(ys)h(them,)h(pro)m(viding)f(the)g(standard)f(history)h(and)f (T)-8 b(AB)32 b(completion)150 2213 y(functions.)40 b(It)31 b(understands)d(the)j(EOF)f(c)m(haracter)i(or)e Fs(")p Ft(exit)p Fs(")h Ft(to)g(exit)g(the)g(program.)390 2381 y Fs(/*)47 b(Standard)f(include)g(files.)g(stdio.h)f(is)j(required.)d (*/)390 2491 y(#include)h()390 2600 y(#include)g() 390 2710 y(#include)g()390 2819 y(#include)g()390 3039 y(/*)h(Used)g(for)g(select\(2\))e(*/)390 3148 y(#include)h ()390 3258 y(#include)g()390 3477 y(#include)g()390 3696 y(#include)g()390 3915 y(/*)h(Standard)f(readline)f(include)h(files.)g(*/)390 4025 y(#include)g()390 4134 y(#include)g ()390 4354 y(static)g(void)h(cb_linehandler)d (\(char)i(*\);)390 4463 y(static)g(void)h(sighandler)e(\(int\);)390 4682 y(int)i(running;)390 4792 y(int)g(sigwinch_received;)390 4902 y(const)f(char)h(*prompt)f(=)h("rltest$)f(";)390 5121 y(/*)h(Handle)f(SIGWINCH)g(and)h(window)f(size)g(changes)g(when)h (readline)e(is)j(not)f(active)f(and)p 3922 5141 42 84 v 533 5230 a(reading)g(a)h(character.)e(*/)390 5340 y(static)h(void)p eop end %%Page: 45 49 TeXDict begin 45 48 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(45)390 299 y Fs(sighandler)45 b(\(int)i(sig\))390 408 y({)485 518 y(sigwinch_received)d(=)j(1;)390 628 y(})390 847 y(/*)g(Callback)f(function)f(called)h(for)h(each)g(line)g(when)f (accept-line)f(executed,)g(EOF)533 956 y(seen,)i(or)g(EOF)g(character)e (read.)94 b(This)47 b(sets)f(a)i(flag)e(and)h(returns;)f(it)h(could)533 1066 y(also)g(call)f(exit\(3\).)g(*/)390 1176 y(static)g(void)390 1285 y(cb_linehandler)e(\(char)i(*line\))390 1395 y({)485 1504 y(/*)i(Can)f(use)f(^D)i(\(stty)e(eof\))h(or)g(`exit')f(to)h(exit.) f(*/)485 1614 y(if)i(\(line)e(==)h(NULL)g(||)g(strcmp)f(\(line,)g ("exit"\))g(==)h(0\))581 1724 y({)676 1833 y(if)h(\(line)e(==)h(0\))772 1943 y(printf)f(\("\\n"\);)676 2052 y(printf)g(\("exit\\n"\);)676 2162 y(/*)i(This)e(function)g(needs)g(to)h(be)g(called)g(to)g(reset)f (the)h(terminal)f(settings,)p 3874 2182 42 84 v 820 2271 a(and)g(calling)g(it)h(from)g(the)g(line)g(handler)e(keeps)i(one)g (extra)f(prompt)g(from)p 3874 2292 42 76 v 820 2381 a(being)g (displayed.)f(*/)676 2491 y(rl_callback_handler_remove)c(\(\);)676 2710 y(running)46 b(=)i(0;)581 2819 y(})485 2929 y(else)581 3039 y({)676 3148 y(if)g(\(*line\))772 3258 y(add_history)d(\(line\);) 676 3367 y(printf)h(\("input)g(line:)h(\045s\\n",)f(line\);)676 3477 y(free)h(\(line\);)581 3587 y(})390 3696 y(})390 3915 y(int)390 4025 y(main)g(\(int)f(c,)h(char)g(**v\))390 4134 y({)485 4244 y(fd_set)g(fds;)485 4354 y(int)g(r;)485 4573 y(/*)h(Set)f(the)f(default)g(locale)g(values)g(according)g(to)h (environment)e(variables.)g(*/)p 3874 4593 42 84 v 485 4682 a(setlocale)h(\(LC_ALL,)f(""\);)485 4902 y(/*)j(Handle)e(window)g (size)g(changes)g(when)h(readline)e(is)j(not)f(active)f(and)h(reading) 629 5011 y(characters.)d(*/)485 5121 y(signal)j(\(SIGWINCH,)e (sighandler\);)485 5340 y(/*)j(Install)d(the)i(line)g(handler.)f(*/)p eop end %%Page: 46 50 TeXDict begin 46 49 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(46)485 299 y Fs(rl_callback_handler_instal)o(l)42 b(\(prompt,)j (cb_linehandler\);)485 518 y(/*)j(Enter)e(a)h(simple)g(event)f(loop.)94 b(This)47 b(waits)f(until)g(something)g(is)h(available)629 628 y(to)g(read)f(on)i(readline's)d(input)h(stream)g(\(defaults)f(to)j (standard)d(input\))h(and)629 737 y(calls)g(the)h(builtin)f(character)f (read)i(callback)e(to)i(read)g(it.)95 b(It)47 b(does)f(not)629 847 y(have)g(to)h(modify)g(the)f(user's)h(terminal)e(settings.)g(*/)485 956 y(running)h(=)i(1;)485 1066 y(while)f(\(running\))581 1176 y({)676 1285 y(FD_ZERO)f(\(&fds\);)676 1395 y(FD_SET)g(\(fileno)g (\(rl_instream\),)e(&fds\);)676 1614 y(r)k(=)f(select)f(\(FD_SETSIZE,)f (&fds,)h(NULL,)h(NULL,)f(NULL\);)676 1724 y(if)i(\(r)f(<)g(0)h(&&)f (errno)f(!=)h(EINTR\))772 1833 y({)867 1943 y(perror)f(\("rltest:)g (select"\);)867 2052 y(rl_callback_handler_remov)o(e)c(\(\);)867 2162 y(break;)772 2271 y(})676 2381 y(if)48 b(\(sigwinch_received\))390 2491 y({)485 2600 y(rl_resize_terminal)43 b(\(\);)485 2710 y(sigwinch_received)h(=)j(0;)390 2819 y(})676 2929 y(if)h(\(r)f(<)g(0\))390 3039 y(continue;)676 3258 y(if)h(\(FD_ISSET)d (\(fileno)h(\(rl_instream\),)e(&fds\)\))772 3367 y (rl_callback_read_char)e(\(\);)581 3477 y(})485 3696 y(printf)47 b(\("rltest:)e(Event)h(loop)h(has)g(exited\\n"\);)485 3806 y(return)g(0;)390 3915 y(})150 4164 y Fr(2.5)68 b(Readline)47 b(Signal)e(Handling)150 4323 y Ft(Signals)31 b(are)f(async)m(hronous)g(ev)m(en)m(ts)i(sen)m(t)f(to)g(a)g(pro)s(cess) f(b)m(y)h(the)f(Unix)g(k)m(ernel,)i(sometimes)f(on)g(b)s(ehalf)150 4433 y(of)k(another)g(pro)s(cess.)53 b(They)34 b(are)h(in)m(tended)g (to)g(indicate)h(exceptional)g(ev)m(en)m(ts,)i(lik)m(e)e(a)f(user)f (pressing)150 4543 y(the)g(in)m(terrupt)f(k)m(ey)h(on)g(his)f (terminal,)i(or)f(a)g(net)m(w)m(ork)g(connection)h(b)s(eing)e(brok)m (en.)50 b(There)34 b(is)f(a)h(class)150 4652 y(of)29 b(signals)g(that)h(can)f(b)s(e)f(sen)m(t)h(to)h(the)f(pro)s(cess)f (curren)m(tly)h(reading)g(input)f(from)g(the)h(k)m(eyb)s(oard.)40 b(Since)150 4762 y(Readline)45 b(c)m(hanges)g(the)g(terminal)g (attributes)g(when)e(it)i(is)g(called,)k(it)c(needs)f(to)h(p)s(erform)e (sp)s(ecial)150 4871 y(pro)s(cessing)27 b(when)g(suc)m(h)g(a)h(signal)g (is)g(receiv)m(ed)h(in)e(order)g(to)h(restore)h(the)e(terminal)h(to)h (a)f(sane)f(state,)j(or)150 4981 y(pro)m(vide)g(application)i(writers)e (with)g(functions)g(to)h(do)g(so)f(man)m(ually)-8 b(.)275 5121 y(Readline)40 b(con)m(tains)i(an)e(in)m(ternal)h(signal)g(handler) f(that)h(is)f(installed)h(for)f(a)h(n)m(um)m(b)s(er)e(of)h(signals)150 5230 y(\()p Fs(SIGINT)p Ft(,)e Fs(SIGQUIT)p Ft(,)f Fs(SIGTERM)p Ft(,)g Fs(SIGHUP)p Ft(,)g Fs(SIGALRM)p Ft(,)g Fs(SIGTSTP)p Ft(,)g Fs(SIGTTIN)p Ft(,)g(and)g Fs(SIGTTOU)p Ft(\).)59 b(When)150 5340 y(one)27 b(of)g(these)g(signals)g(is)g(receiv)m(ed,)i (the)e(signal)g(handler)f(will)h(reset)h(the)e(terminal)i(attributes)f (to)g(those)p eop end %%Page: 47 51 TeXDict begin 47 50 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(47)150 299 y(that)33 b(w)m(ere)g(in)f(e\013ect)h(b)s(efore)f Fs(readline\(\))e Ft(w)m(as)i(called,)j(reset)d(the)h(signal)g (handling)f(to)h(what)f(it)h(w)m(as)150 408 y(b)s(efore)26 b Fs(readline\(\))e Ft(w)m(as)j(called,)i(and)d(resend)g(the)h(signal)g (to)h(the)f(calling)h(application.)41 b(If)26 b(and)g(when)150 518 y(the)34 b(calling)i(application's)f(signal)g(handler)e(returns,)h (Readline)g(will)h(reinitialize)h(the)e(terminal)h(and)150 628 y(con)m(tin)m(ue)29 b(to)g(accept)h(input.)39 b(When)28 b(a)h Fs(SIGINT)d Ft(is)j(receiv)m(ed,)h(the)e(Readline)h(signal)g (handler)f(p)s(erforms)150 737 y(some)39 b(additional)h(w)m(ork,)h (whic)m(h)d(will)h(cause)g(an)m(y)h(partially-en)m(tered)g(line)f(to)h (b)s(e)e(ab)s(orted)g(\(see)i(the)150 847 y(description)30 b(of)h Fs(rl_free_line_state\(\))25 b Ft(b)s(elo)m(w\).)275 1017 y(There)e(is)i(an)f(additional)h(Readline)g(signal)g(handler,)g (for)f Fs(SIGWINCH)p Ft(,)g(whic)m(h)g(the)g(k)m(ernel)h(sends)e(to)j (a)150 1127 y(pro)s(cess)i(whenev)m(er)h(the)g(terminal's)g(size)h(c)m (hanges)g(\(for)f(example,)h(if)f(a)g(user)f(resizes)i(an)e Fs(xterm)p Ft(\).)39 b(The)150 1236 y(Readline)d Fs(SIGWINCH)e Ft(handler)g(up)s(dates)h(Readline's)h(in)m(ternal)h(screen)e(size)i (information,)g(and)e(then)150 1346 y(calls)g(an)m(y)f Fs(SIGWINCH)e Ft(signal)i(handler)f(the)h(calling)h(application)g(has)f (installed.)51 b(Readline)35 b(calls)g(the)150 1456 y(application's)i Fs(SIGWINCH)c Ft(signal)i(handler)g(without)g(resetting)h(the)g (terminal)f(to)h(its)g(original)g(state.)150 1565 y(If)31 b(the)i(application's)g(signal)g(handler)e(do)s(es)g(more)h(than)g(up)s (date)f(its)i(idea)f(of)g(the)g(terminal)h(size)g(and)150 1675 y(return)28 b(\(for)i(example,)h(a)f Fs(longjmp)d Ft(bac)m(k)k(to)f(a)g(main)g(pro)s(cessing)f(lo)s(op\),)h(it)g Fk(must)39 b Ft(call)31 b Fs(rl_cleanup_)150 1784 y(after_signal\(\))26 b Ft(\(describ)s(ed)k(b)s(elo)m(w\),)h(to)g(restore)g(the)g(terminal)g (state.)275 1955 y(When)38 b(an)h(application)h(is)f(using)g(the)g (callbac)m(k)i(in)m(terface)f(\(see)g(Section)g(2.4.12)h([Alternate)f (In-)150 2064 y(terface],)48 b(page)c(42\),)j(Readline)c(installs)h (signal)g(handlers)e(only)h(for)f(the)h(duration)g(of)g(the)g(call)h (to)150 2174 y Fs(rl_callback_read_char)p Ft(.)c(Applications)33 b(using)f(the)g(callbac)m(k)j(in)m(terface)e(should)f(b)s(e)f(prepared) g(to)150 2283 y(clean)d(up)d(Readline's)j(state)g(if)e(they)h(wish)f (to)h(handle)f(the)h(signal)h(b)s(efore)e(the)h(line)g(handler)f (completes)150 2393 y(and)k(restores)h(the)f(terminal)h(state.)275 2563 y(If)k(an)g(application)i(using)f(the)g(callbac)m(k)h(in)m (terface)h(wishes)d(to)h(ha)m(v)m(e)h(Readline)g(install)f(its)g (signal)150 2673 y(handlers)22 b(at)h(the)g(time)h(the)e(application)j (calls)e Fs(rl_callback_handler_instal)o(l)17 b Ft(and)22 b(remo)m(v)m(e)i(them)150 2783 y(only)f(when)g(a)g(complete)i(line)f (of)f(input)f(has)h(b)s(een)g(read,)i(it)e(should)g(set)g(the)h Fs(rl_persistent_signal_)150 2892 y(handlers)c Ft(v)-5 b(ariable)23 b(to)f(a)h(non-zero)f(v)-5 b(alue.)39 b(This)21 b(allo)m(ws)i(an)f(application)i(to)f(defer)e(all)i(of)f(the)h (handling)150 3002 y(of)j(the)h(signals)f(Readline)h(catc)m(hes)h(to)f (Readline.)39 b(Applications)27 b(should)f(use)f(this)h(v)-5 b(ariable)27 b(with)f(care;)150 3111 y(it)d(can)g(result)g(in)f (Readline)h(catc)m(hing)i(signals)e(and)f(not)h(acting)h(on)f(them)f (\(or)h(allo)m(wing)i(the)e(application)150 3221 y(to)36 b(react)g(to)g(them\))g(un)m(til)f(the)h(application)g(calls)h Fs(rl_callback_read_char)p Ft(.)49 b(This)35 b(can)g(result)g(in)150 3331 y(an)30 b(application)h(b)s(ecoming)f(less)g(resp)s(onsiv)m(e)f (to)i(k)m(eyb)s(oard)e(signals)h(lik)m(e)h(SIGINT.)f(If)f(an)h (application)150 3440 y(do)s(es)24 b(not)g(w)m(an)m(t)h(or)g(need)f(to) h(p)s(erform)d(an)m(y)j(signal)g(handling,)g(or)f(do)s(es)g(not)h(need) f(to)g(do)h(an)m(y)f(pro)s(cessing)150 3550 y(b)s(et)m(w)m(een)31 b(calls)h(to)f Fs(rl_callback_read_char)p Ft(,)24 b(setting)32 b(this)e(v)-5 b(ariable)31 b(ma)m(y)g(b)s(e)f(desirable.)275 3720 y(Readline)f(pro)m(vides)f(t)m(w)m(o)i(v)-5 b(ariables)29 b(that)h(allo)m(w)g(application)g(writers)e(to)h(con)m(trol)h(whether)e (or)h(not)150 3830 y(it)34 b(will)f(catc)m(h)i(certain)f(signals)f(and) g(act)h(on)f(them)g(when)f(they)i(are)f(receiv)m(ed.)51 b(It)33 b(is)g(imp)s(ortan)m(t)g(that)150 3939 y(applications)38 b(c)m(hange)g(the)e(v)-5 b(alues)37 b(of)g(these)g(v)-5 b(ariables)37 b(only)g(when)f(calling)i Fs(readline\(\))p Ft(,)d(not)i(in)g(a)150 4049 y(signal)31 b(handler,)f(so)g(Readline's)i (in)m(ternal)f(signal)g(state)h(is)e(not)h(corrupted.)3371 4305 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_catch_signals)390 4414 y Ft(If)28 b(this)h(v)-5 b(ariable)30 b(is)f(non-zero,)h(Readline) f(will)g(install)h(signal)f(handlers)f(for)h Fs(SIGINT)p Ft(,)f Fs(SIGQUIT)p Ft(,)390 4524 y Fs(SIGTERM)p Ft(,)h Fs(SIGHUP)p Ft(,)g Fs(SIGALRM)p Ft(,)f Fs(SIGTSTP)p Ft(,)h Fs(SIGTTIN)p Ft(,)f(and)i Fs(SIGTTOU)p Ft(.)390 4694 y(The)g(default)g(v)-5 b(alue)31 b(of)g Fs(rl_catch_signals)26 b Ft(is)k(1.)3371 4950 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_catch_sigwinch)390 5060 y Ft(If)37 b(this)h(v)-5 b(ariable)38 b(is)g(set)g(to)g(a)g(non-zero)g(v)-5 b(alue,)40 b(Readline)f(will)f(install)g(a)g(signal)g(handler)f(for)390 5170 y Fs(SIGWINCH)p Ft(.)390 5340 y(The)30 b(default)g(v)-5 b(alue)31 b(of)g Fs(rl_catch_sigwinch)25 b Ft(is)31 b(1.)p eop end %%Page: 48 52 TeXDict begin 48 51 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(48)3371 299 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_persistent_signal_)q (hand)q(ler)q(s)390 408 y Ft(If)31 b(an)h(application)g(using)g(the)f (callbac)m(k)j(in)m(terface)f(wishes)e(Readline's)h(signal)h(handlers)d (to)j(b)s(e)390 518 y(installed)21 b(and)f(activ)m(e)j(during)d(the)h (set)g(of)f(calls)i(to)g Fs(rl_callback_read_char)14 b Ft(that)22 b(constitutes)390 628 y(an)30 b(en)m(tire)i(single)f (line,)g(it)f(should)g(set)h(this)f(v)-5 b(ariable)31 b(to)g(a)g(non-zero)g(v)-5 b(alue.)390 775 y(The)30 b(default)g(v)-5 b(alue)31 b(of)g Fs(rl_persistent_signal_han)o(dle)o(rs)24 b Ft(is)31 b(0.)3371 986 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_change_environment)390 1096 y Ft(If)31 b(this)g(v)-5 b(ariable)32 b(is)f(set)h(to)g(a)g(non-zero)g(v)-5 b(alue,)32 b(and)f(Readline)h(is)f(handling)g Fs(SIGWINCH)p Ft(,)e(Read-)390 1205 y(line)h(will)h(mo)s(dify)e(the)h Fj(LINES)35 b Ft(and)29 b Fj(COLUMNS)35 b Ft(en)m(vironmen)m(t)30 b(v)-5 b(ariables)31 b(up)s(on)d(receipt)j(of)g(a)390 1315 y Fs(SIGWINCH)390 1463 y Ft(The)f(default)g(v)-5 b(alue)31 b(of)g Fs(rl_change_environment)24 b Ft(is)31 b(1.)275 1673 y(If)f(an)h(application)h(do)s(es)f(not)g(wish)f(to)i(ha)m(v)m(e)g (Readline)g(catc)m(h)g(an)m(y)f(signals,)h(or)f(to)h(handle)e(signals) 150 1783 y(other)39 b(than)f(those)h(Readline)h(catc)m(hes)g(\()p Fs(SIGHUP)p Ft(,)g(for)e(example\),)k(Readline)d(pro)m(vides)g(con)m(v) m(enience)150 1892 y(functions)30 b(to)h(do)f(the)h(necessary)g (terminal)g(and)e(in)m(ternal)i(state)h(clean)m(up)f(up)s(on)e(receipt) i(of)g(a)f(signal.)3350 2103 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_pending_signal)e Fg(\()p Ff(v)m(oid)p Fg(\))390 2213 y Ft(Return)27 b(the)g(signal)h(n)m(um)m(b)s(er)e(of)i (the)f(most)h(recen)m(t)h(signal)f(Readline)g(receiv)m(ed)g(but)f(has)g (not)h(y)m(et)390 2322 y(handled,)i(or)g(0)h(if)f(there)h(is)f(no)g(p)s (ending)f(signal.)3350 2533 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_cleanup_after_signal)e Fg(\()p Ff(v)m(oid)p Fg(\))390 2643 y Ft(This)33 b(function)h(will)g(reset)g(the)g(state)i (of)e(the)g(terminal)g(to)h(what)f(it)g(w)m(as)g(b)s(efore)g Fs(readline\(\))390 2752 y Ft(w)m(as)c(called,)h(and)d(remo)m(v)m(e)j (the)f(Readline)g(signal)g(handlers)e(for)h(all)h(signals,)h(dep)s (ending)d(on)h(the)390 2862 y(v)-5 b(alues)31 b(of)f Fs(rl_catch_signals)c Ft(and)k Fs(rl_catch_sigwinch)p Ft(.)3350 3072 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_free_line_state)c Fg(\()p Ff(v)m(oid)p Fg(\))390 3182 y Ft(This)38 b(will)i(free)f(an)m(y)h(partial)g(state)g(asso)s (ciated)h(with)e(the)g(curren)m(t)g(input)f(line)i(\(undo)e(infor-)390 3292 y(mation,)46 b(an)m(y)d(partial)h(history)e(en)m(try)-8 b(,)47 b(an)m(y)42 b(partially-en)m(tered)j(k)m(eyb)s(oard)d(macro,)47 b(and)42 b(an)m(y)390 3401 y(partially-en)m(tered)50 b(n)m(umeric)d(argumen)m(t\).)94 b(This)47 b(should)g(b)s(e)g(called)i (b)s(efore)e Fs(rl_cleanup_)390 3511 y(after_signal\(\))p Ft(.)74 b(The)42 b(Readline)h(signal)g(handler)f(for)h Fs(SIGINT)e Ft(calls)i(this)g(to)g(ab)s(ort)g(the)390 3620 y(curren)m(t)30 b(input)g(line.)3350 3831 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_reset_after_signal)d Fg(\()p Ff(v)m(oid)p Fg(\))390 3941 y Ft(This)28 b(will)g(reinitialize) j(the)e(terminal)g(and)f(reinstall)h(an)m(y)g(Readline)g(signal)g (handlers,)f(dep)s(end-)390 4050 y(ing)j(on)f(the)g(v)-5 b(alues)31 b(of)g Fs(rl_catch_signals)26 b Ft(and)j Fs (rl_catch_sigwinch)p Ft(.)275 4261 y(If)38 b(an)i(application)g(do)s (es)f(not)h(wish)f(Readline)h(to)g(catc)m(h)h Fs(SIGWINCH)p Ft(,)e(it)h(ma)m(y)g(call)h Fs(rl_resize_)150 4371 y(terminal\(\))24 b Ft(or)j Fs(rl_set_screen_size\(\))22 b Ft(to)28 b(force)g(Readline)f (to)h(up)s(date)f(its)g(idea)h(of)f(the)g(terminal)150 4480 y(size)k(when)f(a)g Fs(SIGWINCH)e Ft(is)j(receiv)m(ed.)3350 4691 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_echo_signal_char)d Fg(\()p Ff(in)m(t)33 b(sig)p Fg(\))390 4800 y Ft(If)43 b(an)g(application)i(wishes)e(to)i(install)f(its)g(o)m(wn)f(signal)i (handlers,)h(but)c(still)j(ha)m(v)m(e)g(readline)390 4910 y(displa)m(y)31 b(c)m(haracters)h(that)f(generate)h(signals,)f (calling)h(this)e(function)g(with)g Fj(sig)39 b Ft(set)31 b(to)g Fs(SIGINT)p Ft(,)390 5020 y Fs(SIGQUIT)p Ft(,)e(or)h Fs(SIGTSTP)e Ft(will)j(displa)m(y)g(the)f(c)m(haracter)i(generating)g (that)f(signal.)3350 5230 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_resize_terminal)c Fg(\()p Ff(v)m(oid)p Fg(\))390 5340 y Ft(Up)s(date)30 b(Readline's)h(in)m(ternal)g(screen)g (size)g(b)m(y)f(reading)h(v)-5 b(alues)31 b(from)f(the)g(k)m(ernel.)p eop end %%Page: 49 53 TeXDict begin 49 52 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(49)3350 299 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_set_screen_size)c Fg(\()p Ff(in)m(t)34 b(ro)m(ws,)f(in)m(t)g(cols)p Fg(\))390 408 y Ft(Set)28 b(Readline's)h(idea)f(of)g(the)g(terminal)g(size)h(to)g Fj(ro)m(ws)i Ft(ro)m(ws)d(and)f Fj(cols)33 b Ft(columns.)40 b(If)27 b(either)h Fj(ro)m(ws)390 518 y Ft(or)35 b Fj(columns)k Ft(is)c(less)g(than)g(or)g(equal)h(to)g(0,)h(Readline's)f(idea)g(of)f (that)h(terminal)f(dimension)g(is)390 628 y(unc)m(hanged.)275 817 y(If)d(an)i(application)g(do)s(es)f(not)h(w)m(an)m(t)g(to)g (install)g(a)g Fs(SIGWINCH)d Ft(handler,)j(but)e(is)i(still)g(in)m (terested)g(in)150 927 y(the)d(screen)f(dimensions,)g(Readline's)h (idea)g(of)g(the)f(screen)h(size)g(ma)m(y)g(b)s(e)f(queried.)3350 1117 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_get_screen_size)c Fg(\()p Ff(in)m(t)34 b(*ro)m(ws,)f(in)m(t)g(*cols)p Fg(\))390 1226 y Ft(Return)c(Readline's)i(idea)g(of)f(the)g(terminal's)h(size)g (in)f(the)g(v)-5 b(ariables)31 b(p)s(oin)m(ted)f(to)g(b)m(y)g(the)h (argu-)390 1336 y(men)m(ts.)3350 1525 y([F)-8 b(unction])-3599 b Fh(void)54 b(rl_reset_screen_size)d Fg(\()p Ff(v)m(oid)p Fg(\))390 1635 y Ft(Cause)30 b(Readline)h(to)g(reobtain)g(the)g(screen) f(size)h(and)f(recalculate)j(its)e(dimensions.)275 1825 y(The)e(follo)m(wing)j(functions)e(install)h(and)f(remo)m(v)m(e)i (Readline's)f(signal)g(handlers.)3350 2014 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_set_signals)d Fg(\()p Ff(v)m(oid)p Fg(\))390 2124 y Ft(Install)40 b(Readline's)h(signal)f(handler)f(for)h Fs(SIGINT)p Ft(,)h Fs(SIGQUIT)p Ft(,)f Fs(SIGTERM)p Ft(,)h Fs(SIGHUP)p Ft(,)g Fs(SIGALRM)p Ft(,)390 2234 y Fs(SIGTSTP)p Ft(,)35 b Fs(SIGTTIN)p Ft(,)f Fs(SIGTTOU)p Ft(,)h(and)g Fs(SIGWINCH)p Ft(,)f(dep)s(ending)g(on)h(the)g(v)-5 b(alues)36 b(of)f Fs(rl_catch_)390 2343 y(signals)28 b Ft(and)i Fs(rl_catch_sigwinch)p Ft(.)3350 2533 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_clear_signals)e Fg(\()p Ff(v)m(oid)p Fg(\))390 2642 y Ft(Remo)m(v)m(e)32 b(all)f(of)g(the)g(Readline)g (signal)g(handlers)e(installed)i(b)m(y)f Fs(rl_set_signals\(\))p Ft(.)150 2887 y Fr(2.6)68 b(Custom)45 b(Completers)150 3047 y Ft(T)m(ypically)-8 b(,)47 b(a)c(program)g(that)g(reads)f (commands)h(from)f(the)g(user)g(has)h(a)g(w)m(a)m(y)g(of)g(disam)m (biguating)150 3156 y(commands)35 b(and)g(data.)56 b(If)35 b(y)m(our)h(program)f(is)g(one)h(of)g(these,)h(then)e(it)h(can)g(pro)m (vide)f(completion)i(for)150 3266 y(commands,)29 b(data,)i(or)e(b)s (oth.)39 b(The)29 b(follo)m(wing)i(sections)f(describ)s(e)e(ho)m(w)i(y) m(our)f(program)g(and)f(Readline)150 3375 y(co)s(op)s(erate)j(to)h(pro) m(vide)e(this)g(service.)150 3577 y Fi(2.6.1)63 b(Ho)m(w)40 b(Completing)i(W)-10 b(orks)150 3724 y Ft(In)26 b(order)f(to)i (complete)h(some)f(text,)h(the)f(full)f(list)h(of)f(p)s(ossible)g (completions)h(m)m(ust)g(b)s(e)e(a)m(v)-5 b(ailable.)42 b(That)150 3834 y(is,)28 b(it)f(is)g(not)g(p)s(ossible)g(to)g (accurately)i(expand)d(a)h(partial)h(w)m(ord)f(without)f(kno)m(wing)i (all)f(of)g(the)g(p)s(ossible)150 3943 y(w)m(ords)33 b(whic)m(h)g(mak)m(e)h(sense)f(in)g(that)g(con)m(text.)51 b(The)33 b(Readline)h(library)e(pro)m(vides)i(the)f(user)f(in)m (terface)150 4053 y(to)d(completion,)h(and)e(t)m(w)m(o)i(of)e(the)h (most)f(common)h(completion)h(functions:)39 b(\014lename)29 b(and)e(username.)150 4163 y(F)-8 b(or)39 b(completing)g(other)f(t)m (yp)s(es)g(of)h(text,)i(y)m(ou)d(m)m(ust)g(write)g(y)m(our)g(o)m(wn)g (completion)h(function.)64 b(This)150 4272 y(section)32 b(describ)s(es)d(exactly)j(what)f(suc)m(h)f(functions)g(m)m(ust)g(do,)g (and)g(pro)m(vides)g(an)h(example.)275 4409 y(There)e(are)i(three)g(ma) 5 b(jor)30 b(functions)g(used)g(to)h(p)s(erform)e(completion:)199 4547 y(1.)61 b(The)43 b(user-in)m(terface)h(function)f Fs(rl_complete\(\))p Ft(.)76 b(This)43 b(function)g(is)g(called)i(with) e(the)h(same)330 4656 y(argumen)m(ts)36 b(as)g(other)g(bindable)f (Readline)h(functions:)51 b Fj(coun)m(t)38 b Ft(and)d Fj(in)m(v)m(oking)p 3107 4656 28 4 v 41 w(k)m(ey)p Ft(.)57 b(It)36 b(isolates)330 4766 y(the)i(w)m(ord)f(to)h(b)s(e)f(completed)i (and)d(calls)j Fs(rl_completion_matches\(\))31 b Ft(to)39 b(generate)g(a)f(list)g(of)330 4875 y(p)s(ossible)31 b(completions.)44 b(It)31 b(then)g(either)g(lists)h(the)f(p)s(ossible)g (completions,)h(inserts)f(the)g(p)s(ossible)330 4985 y(completions,)50 b(or)45 b(actually)i(p)s(erforms)d(the)h(completion,) 50 b(dep)s(ending)44 b(on)h(whic)m(h)g(b)s(eha)m(vior)g(is)330 5095 y(desired.)199 5230 y(2.)61 b(The)33 b(in)m(ternal)h(function)g Fs(rl_completion_matches\(\))27 b Ft(uses)33 b(an)g (application-supplied)h Fj(gener-)330 5340 y(ator)44 b Ft(function)37 b(to)h(generate)g(the)f(list)h(of)f(p)s(ossible)f (matc)m(hes,)k(and)d(then)f(returns)g(the)h(arra)m(y)h(of)p eop end %%Page: 50 54 TeXDict begin 50 53 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(50)330 299 y(these)39 b(matc)m(hes.)68 b(The)39 b(caller)h(should)e(place)i (the)f(address)f(of)h(its)g(generator)i(function)d(in)h Fs(rl_)330 408 y(completion_entry_functio)o(n)p Ft(.)199 553 y(3.)61 b(The)22 b(generator)i(function)f(is)g(called)h(rep)s (eatedly)f(from)g Fs(rl_completion_matches\(\))o Ft(,)c(returning)330 663 y(a)33 b(string)g(eac)m(h)h(time.)48 b(The)32 b(argumen)m(ts)h(to)h (the)f(generator)h(function)e(are)h Fj(text)j Ft(and)c Fj(state)p Ft(.)49 b Fj(text)330 773 y Ft(is)32 b(the)g(partial)h(w)m (ord)f(to)h(b)s(e)e(completed.)47 b Fj(state)38 b Ft(is)32 b(zero)h(the)f(\014rst)g(time)g(the)h(function)e(is)h(called,)330 882 y(allo)m(wing)46 b(the)e(generator)h(to)f(p)s(erform)f(an)m(y)h (necessary)g(initialization,)51 b(and)43 b(a)h(p)s(ositiv)m(e)h(non-) 330 992 y(zero)30 b(in)m(teger)h(for)d(eac)m(h)j(subsequen)m(t)d(call.) 42 b(The)29 b(generator)h(function)f(returns)f Fs(\(char)h(*\)NULL)e Ft(to)330 1101 y(inform)37 b Fs(rl_completion_matches\(\))32 b Ft(that)39 b(there)f(are)g(no)g(more)g(p)s(ossibilities)h(left.)65 b(Usually)330 1211 y(the)39 b(generator)h(function)e(computes)h(the)g (list)g(of)g(p)s(ossible)f(completions)i(when)e Fj(state)45 b Ft(is)39 b(zero,)330 1321 y(and)25 b(returns)f(them)i(one)f(at)i(a)f (time)g(on)f(subsequen)m(t)g(calls.)40 b(Eac)m(h)26 b(string)g(the)g (generator)g(function)330 1430 y(returns)31 b(as)h(a)g(matc)m(h)h(m)m (ust)f(b)s(e)f(allo)s(cated)j(with)d Fs(malloc\(\))p Ft(;)g(Readline)h(frees)g(the)g(strings)g(when)330 1540 y(it)i(has)g(\014nished)e(with)i(them.)51 b(Suc)m(h)33 b(a)h(generator)h(function)f(is)g(referred)f(to)h(as)h(an)e Fj(application-)330 1649 y(sp)s(eci\014c)d(completion)i(function)p Ft(.)3350 1876 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_complete)c Fg(\()p Ff(in)m(t)34 b(ignore,)e(in)m(t)i(in)m(v)m(oking)p 2020 1876 30 5 v 43 w(k)m(ey)p Fg(\))390 1985 y Ft(Complete)d(the)g(w)m (ord)g(at)g(or)g(b)s(efore)f(p)s(oin)m(t.)41 b(Y)-8 b(ou)32 b(ha)m(v)m(e)g(supplied)d(the)i(function)f(that)h(do)s(es)g(the)390 2095 y(initial)42 b(simple)f(matc)m(hing)i(selection)f(algorithm)h (\(see)f Fs(rl_completion_matches\(\))o Ft(\).)67 b(The)390 2204 y(default)31 b(is)f(to)h(do)f(\014lename)h(completion.)3371 2431 y([V)-8 b(ariable])-3598 b Fh(rl_compentry_func_t)58 b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 2540 y Ft(This)39 b(is)h(a)g(p)s(oin)m(ter)g(to)h(the)f(generator)h (function)f(for)f Fs(rl_completion_matches\(\))p Ft(.)63 b(If)40 b(the)390 2650 y(v)-5 b(alue)24 b(of)g Fs (rl_completion_entry_funct)o(ion)17 b Ft(is)24 b Fs(NULL)f Ft(then)g(the)h(default)g(\014lename)g(generator)390 2760 y(function,)49 b Fs(rl_filename_completion_)o(fun)o(ctio)o(n\(\))p Ft(,)42 b(is)j(used.)84 b(An)44 b Fj(application-sp)s(eci\014c)390 2869 y(completion)22 b(function)f Ft(is)g(a)h(function)e(whose)h (address)f(is)h(assigned)h(to)f Fs(rl_completion_entry_)390 2979 y(function)28 b Ft(and)i(whose)g(return)f(v)-5 b(alues)31 b(are)g(used)e(to)j(generate)f(p)s(ossible)f(completions.)150 3199 y Fi(2.6.2)63 b(Completion)41 b(F)-10 b(unctions)150 3346 y Ft(Here)31 b(is)f(the)h(complete)h(list)f(of)f(callable)j (completion)e(functions)f(presen)m(t)h(in)f(Readline.)3350 3572 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_complete_internal)f Fg(\()p Ff(in)m(t)33 b(what)p 1861 3572 V 44 w(to)p 1994 3572 V 43 w(do)p Fg(\))390 3682 y Ft(Complete)k(the)g(w)m(ord)f(at)i (or)e(b)s(efore)g(p)s(oin)m(t.)60 b Fj(what)p 2208 3682 28 4 v 40 w(to)p 2328 3682 V 41 w(do)41 b Ft(sa)m(ys)c(what)f(to)i(do)e (with)g(the)h(com-)390 3791 y(pletion.)44 b(A)31 b(v)-5 b(alue)32 b(of)f(`)p Fs(?)p Ft(')g(means)h(list)f(the)h(p)s(ossible)e (completions.)45 b(`)p Fs(TAB)p Ft(')31 b(means)g(do)g(standard)390 3901 y(completion.)44 b(`)p Fs(*)p Ft(')32 b(means)f(insert)g(all)h(of) f(the)g(p)s(ossible)g(completions.)44 b(`)p Fs(!)p Ft(')32 b(means)f(to)h(displa)m(y)f(all)390 4011 y(of)k(the)f(p)s(ossible)g (completions,)j(if)d(there)h(is)f(more)g(than)h(one,)g(as)g(w)m(ell)g (as)g(p)s(erforming)e(partial)390 4120 y(completion.)41 b(`)p Fs(@)p Ft(')27 b(is)h(similar)f(to)h(`)p Fs(!)p Ft(',)h(but)d(p)s(ossible)h(completions)i(are)e(not)h(listed)g(if)f (the)g(p)s(ossible)390 4230 y(completions)32 b(share)e(a)g(common)h (pre\014x.)3350 4456 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_complete)c Fg(\()p Ff(in)m(t)34 b(ignore,)e(in)m(t)i(in)m(v)m (oking)p 2020 4456 30 5 v 43 w(k)m(ey)p Fg(\))390 4566 y Ft(Complete)42 b(the)f(w)m(ord)g(at)h(or)f(b)s(efore)g(p)s(oin)m(t.) 73 b(Y)-8 b(ou)41 b(ha)m(v)m(e)i(supplied)c(the)j(function)f(that)g(do) s(es)390 4675 y(the)33 b(initial)h(simple)f(matc)m(hing)h(selection)h (algorithm)f(\(see)g Fs(rl_completion_matches\(\))27 b Ft(and)390 4785 y Fs(rl_completion_entry_func)o(tion)o Ft(\).)52 b(The)35 b(default)h(is)g(to)h(do)e(\014lename)h(completion.) 59 b(This)390 4894 y(calls)32 b Fs(rl_complete_internal\(\))24 b Ft(with)30 b(an)g(argumen)m(t)h(dep)s(ending)e(on)h Fj(in)m(v)m(oking)p 3314 4894 28 4 v 41 w(k)m(ey)p Ft(.)3350 5121 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_possible_completio)q(ns) f Fg(\()p Ff(in)m(t)33 b(coun)m(t,)h(in)m(t)f(in)m(v)m(oking)p 2622 5121 30 5 v 43 w(k)m(ey)p Fg(\))390 5230 y Ft(List)41 b(the)f(p)s(ossible)g(completions.)73 b(See)40 b(description)h(of)g Fs(rl_complete)27 b(\(\))p Ft(.)70 b(This)40 b(calls)i Fs(rl_)390 5340 y(complete_internal\(\))25 b Ft(with)30 b(an)g(argumen)m(t)h(of)g(`)p Fs(?)p Ft('.)p eop end %%Page: 51 55 TeXDict begin 51 54 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(51)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_insert_completions)f Fg(\()p Ff(in)m(t)34 b(coun)m(t,)f(in)m(t)g(in)m(v)m(oking)p 2517 299 30 5 v 44 w(k)m(ey)p Fg(\))390 408 y Ft(Insert)g(the)h(list)g (of)g(p)s(ossible)f(completions)i(in)m(to)f(the)g(line,)h(deleting)g (the)f(partially-completed)390 518 y(w)m(ord.)44 b(See)32 b(description)g(of)g Fs(rl_complete\(\))p Ft(.)41 b(This)31 b(calls)i Fs(rl_complete_internal\(\))25 b Ft(with)390 628 y(an)30 b(argumen)m(t)h(of)g(`)p Fs(*)p Ft('.)3350 808 y([F)-8 b(unction])-3599 b Fh(int)53 b(rl_completion_mode)e Fg(\()p Ff(rl)p 1455 808 V 44 w(command)p 1919 808 V 44 w(func)p 2147 808 V 46 w(t)33 b(*cfunc)p Fg(\))390 917 y Ft(Returns)40 b(the)i(appropriate)g(v)-5 b(alue)41 b(to)i(pass)e(to)h Fs(rl_complete_internal\(\))35 b Ft(dep)s(ending)40 b(on)390 1027 y(whether)g Fj(cfunc)46 b Ft(w)m(as)41 b(called)h(t)m(wice)g(in)f(succession)g(and)f(the)h(v)-5 b(alues)41 b(of)g(the)g Fs(show-all-if-)390 1137 y(ambiguous)25 b Ft(and)i Fs(show-all-if-unmodified)21 b Ft(v)-5 b(ariables.)41 b(Application-sp)s(eci\014c)29 b(completion)390 1246 y(functions)h(ma)m(y)h(use)f(this)g(function)g(to)h(presen)m(t)g(the)f (same)h(in)m(terface)h(as)f Fs(rl_complete\(\))p Ft(.)3350 1426 y([F)-8 b(unction])-3599 b Fh(char)54 b(**)e (rl_completion_matches)g Fg(\()p Ff(const)34 b(c)m(har)g(*text,)565 1536 y(rl)p 639 1536 V 44 w(comp)s(en)m(try)p 1145 1536 V 44 w(func)p 1373 1536 V 45 w(t)f(*en)m(try)p 1767 1536 V 44 w(func)p Fg(\))390 1646 y Ft(Returns)k(an)h(arra)m(y)g(of)g (strings)g(whic)m(h)f(is)h(a)g(list)h(of)f(completions)h(for)e Fj(text)p Ft(.)64 b(If)38 b(there)g(are)g(no)390 1755 y(completions,)f(returns)c Fs(NULL)p Ft(.)52 b(The)34 b(\014rst)f(en)m(try)i(in)f(the)h(returned)e(arra)m(y)i(is)g(the)f (substitution)390 1865 y(for)26 b Fj(text)p Ft(.)40 b(The)26 b(remaining)h(en)m(tries)g(are)g(the)f(p)s(ossible)g(completions.)40 b(The)26 b(arra)m(y)h(is)f(terminated)390 1974 y(with)k(a)h Fs(NULL)e Ft(p)s(oin)m(ter.)390 2107 y Fj(en)m(try)p 603 2107 28 4 v 40 w(func)44 b Ft(is)c(a)g(function)f(of)h(t)m(w)m(o)g (args,)j(and)38 b(returns)h(a)g Fs(char)30 b(*)p Ft(.)67 b(The)39 b(\014rst)g(argumen)m(t)h(is)390 2217 y Fj(text)p Ft(.)66 b(The)39 b(second)f(is)h(a)g(state)h(argumen)m(t;)j(it)c(is)g (zero)g(on)g(the)g(\014rst)f(call,)k(and)c(non-zero)h(on)390 2327 y(subsequen)m(t)33 b(calls.)52 b Fj(en)m(try)p 1320 2327 V 41 w(func)38 b Ft(returns)33 b(a)h Fs(NULL)f Ft(p)s(oin)m(ter)g (to)i(the)f(caller)h(when)e(there)h(are)g(no)390 2436 y(more)d(matc)m(hes.)3350 2616 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_filename_completion)q(_fu)q(nct)q(ion)g Fg(\()p Ff(const)34 b(c)m(har)g(*text,)e(in)m(t)565 2726 y(state)p Fg(\))390 2836 y Ft(A)26 b(generator)h(function)e(for)g (\014lename)h(completion)h(in)e(the)h(general)h(case.)40 b Fj(text)28 b Ft(is)e(a)g(partial)h(\014le-)390 2945 y(name.)38 b(The)21 b(Bash)g(source)h(is)g(a)f(useful)g(reference)h (for)f(writing)h(application-sp)s(eci\014c)h(completion)390 3055 y(functions)30 b(\(the)h(Bash)f(completion)i(functions)e(call)i (this)e(and)g(other)g(Readline)h(functions\).)3350 3235 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(rl_username_completion)q (_fu)q(nct)q(ion)g Fg(\()p Ff(const)34 b(c)m(har)g(*text,)e(in)m(t)565 3345 y(state)p Fg(\))390 3454 y Ft(A)d(completion)g(generator)h(for)e (usernames.)40 b Fj(text)31 b Ft(con)m(tains)f(a)f(partial)g(username)f (preceded)g(b)m(y)390 3564 y(a)j(random)f(c)m(haracter)i(\(usually)e(`) p Fs(~)p Ft('\).)42 b(As)31 b(with)f(all)h(completion)h(generators,)g Fj(state)37 b Ft(is)31 b(zero)g(on)390 3673 y(the)g(\014rst)e(call)j (and)e(non-zero)h(for)f(subsequen)m(t)f(calls.)150 3870 y Fi(2.6.3)63 b(Completion)41 b(V)-10 b(ariables)3371 4064 y Ft([V)i(ariable])-3598 b Fh(rl_compentry_func_t)58 b(*)53 b(rl_completion_entry_fun)q(cti)q(on)390 4173 y Ft(A)34 b(p)s(oin)m(ter)f(to)h(the)g(generator)h(function)e(for)g Fs(rl_completion_matches\(\))p Ft(.)44 b Fs(NULL)32 b Ft(means)h(to)390 4283 y(use)d Fs(rl_filename_completion_fu)o(nct)o (ion\()o(\))p Ft(,)25 b(the)30 b(default)h(\014lename)f(completer.)3371 4463 y([V)-8 b(ariable])-3598 b Fh(rl_completion_func_t)58 b(*)53 b(rl_attempted_completio)q(n_f)q(unct)q(ion)390 4573 y Ft(A)35 b(p)s(oin)m(ter)g(to)g(an)g(alternativ)m(e)i(function)d (to)i(create)g(matc)m(hes.)55 b(The)34 b(function)h(is)f(called)i(with) 390 4682 y Fj(text)p Ft(,)26 b Fj(start)p Ft(,)f(and)d Fj(end)p Ft(.)38 b Fj(start)25 b Ft(and)e Fj(end)j Ft(are)d(indices)g (in)g Fs(rl_line_buffer)c Ft(de\014ning)j(the)h(b)s(ound-)390 4792 y(aries)j(of)h Fj(text)p Ft(,)h(whic)m(h)d(is)h(a)h(c)m(haracter)g (string.)39 b(If)26 b(this)g(function)f(exists)i(and)e(returns)g Fs(NULL)p Ft(,)h(or)g(if)390 4902 y(this)c(v)-5 b(ariable)22 b(is)g(set)h(to)f Fs(NULL)p Ft(,)h(then)f Fs(rl_complete\(\))c Ft(will)k(call)h(the)f(v)-5 b(alue)23 b(of)f Fs(rl_completion_)390 5011 y(entry_function)i Ft(to)30 b(generate)f(matc)m(hes,)i(otherwise)d (the)h(arra)m(y)g(of)f(strings)h(returned)e(will)i(b)s(e)390 5121 y(used.)37 b(If)22 b(this)g(function)g(sets)h(the)g Fs(rl_attempted_completion)o(_ove)o(r)16 b Ft(v)-5 b(ariable)24 b(to)f(a)f(non-zero)390 5230 y(v)-5 b(alue,)35 b(Readline)g(will)f(not) g(p)s(erform)f(its)h(default)g(completion)h(ev)m(en)g(if)f(this)g (function)f(returns)390 5340 y(no)d(matc)m(hes.)p eop end %%Page: 52 56 TeXDict begin 52 55 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(52)3371 299 y([V)-8 b(ariable])-3598 b Fh(rl_quote_func_t)57 b(*)52 b(rl_filename_quoting_)q(func)q(tio)q(n)390 408 y Ft(A)33 b(p)s(oin)m(ter)f(to)h(a)g(function)g(that)g(will)g(quote)g (a)g(\014lename)f(in)h(an)f(application-sp)s(eci\014c)i(fashion.)390 518 y(This)k(is)i(called)g(if)f(\014lename)h(completion)g(is)f(b)s (eing)g(attempted)i(and)d(one)i(of)f(the)g(c)m(haracters)390 628 y(in)33 b Fs(rl_filename_quote_charac)o(ter)o(s)27 b Ft(app)s(ears)33 b(in)g(a)g(completed)h(\014lename.)50 b(The)32 b(function)390 737 y(is)37 b(called)h(with)e Fj(text)p Ft(,)k Fj(matc)m(h)p 1438 737 28 4 v 41 w(t)m(yp)s(e)p Ft(,)f(and)d Fj(quote)p 2119 737 V 41 w(p)s(oin)m(ter)p Ft(.)60 b(The)36 b Fj(text)k Ft(is)d(the)g(\014lename)g(to)h(b)s(e)390 847 y(quoted.)76 b(The)42 b Fj(matc)m(h)p 1210 847 V 41 w(t)m(yp)s(e)48 b Ft(is)42 b(either)h Fs(SINGLE_MATCH)p Ft(,)f(if)g(there)g(is)h(only)f(one)h(completion)390 956 y(matc)m(h,)33 b(or)e Fs(MULT_MATCH)p Ft(.)41 b(Some)31 b(functions)g(use)g(this)h(to)g(decide)f(whether)g(or)h(not)f(to)h (insert)g(a)390 1066 y(closing)22 b(quote)f(c)m(haracter.)40 b(The)20 b Fj(quote)p 1751 1066 V 41 w(p)s(oin)m(ter)27 b Ft(is)21 b(a)g(p)s(oin)m(ter)g(to)g(an)m(y)h(op)s(ening)e(quote)h(c)m (haracter)390 1176 y(the)31 b(user)e(t)m(yp)s(ed.)41 b(Some)30 b(functions)g(c)m(ho)s(ose)h(to)g(reset)g(this)g(c)m (haracter.)3371 1410 y([V)-8 b(ariable])-3598 b Fh(rl_dequote_func_t)57 b(*)c(rl_filename_dequoting_)q(fun)q(cti)q(on)390 1519 y Ft(A)30 b(p)s(oin)m(ter)f(to)i(a)f(function)f(that)h(will)g(remo)m(v) m(e)h(application-sp)s(eci\014c)g(quoting)f(c)m(haracters)h(from)390 1629 y(a)i(\014lename)g(b)s(efore)f(completion)h(is)g(attempted,)h(so)f (those)g(c)m(haracters)h(do)e(not)h(in)m(terfere)g(with)390 1738 y(matc)m(hing)39 b(the)f(text)i(against)f(names)f(in)g(the)g (\014lesystem.)64 b(It)38 b(is)g(called)i(with)d Fj(text)p Ft(,)42 b(the)c(text)390 1848 y(of)k(the)h(w)m(ord)f(to)g(b)s(e)g (dequoted,)j(and)d Fj(quote)p 2014 1848 V 41 w(c)m(har)p Ft(,)j(whic)m(h)d(is)h(the)f(quoting)h(c)m(haracter)g(that)390 1958 y(delimits)33 b(the)f(\014lename)g(\(usually)h(`)p Fs(')p Ft(')f(or)g(`)p Fs(")p Ft('\).)46 b(If)32 b Fj(quote)p 2368 1958 V 41 w(c)m(har)39 b Ft(is)32 b(zero,)i(the)e(\014lename)g(w)m (as)h(not)390 2067 y(in)d(an)g(em)m(b)s(edded)g(string.)3371 2301 y([V)-8 b(ariable])-3598 b Fh(rl_linebuf_func_t)57 b(*)c(rl_char_is_quoted_p)390 2411 y Ft(A)37 b(p)s(oin)m(ter)g(to)g(a)g (function)g(to)g(call)h(that)g(determines)f(whether)f(or)h(not)g(a)g (sp)s(eci\014c)f(c)m(haracter)390 2521 y(in)e(the)h(line)f(bu\013er)g (is)g(quoted,)i(according)g(to)f(whatev)m(er)g(quoting)g(mec)m(hanism)g (the)f(program)390 2630 y(calling)26 b(Readline)g(uses.)38 b(The)24 b(function)h(is)g(called)h(with)e(t)m(w)m(o)i(argumen)m(ts:)39 b Fj(text)p Ft(,)27 b(the)e(text)h(of)f(the)390 2740 y(line,)31 b(and)g Fj(index)p Ft(,)f(the)h(index)f(of)h(the)g(c)m (haracter)i(in)d(the)h(line.)42 b(It)31 b(is)g(used)f(to)h(decide)g (whether)g(a)390 2849 y(c)m(haracter)h(found)d(in)g Fs (rl_completer_word_break_ch)o(ara)o(cter)o(s)24 b Ft(should)29 b(b)s(e)h(used)f(to)i(break)390 2959 y(w)m(ords)f(for)g(the)h (completer.)3371 3193 y([V)-8 b(ariable])-3598 b Fh (rl_compignore_func_t)58 b(*)53 b(rl_ignore_some_complet)q(ion)q(s_fu)q (nct)q(ion)390 3303 y Ft(This)37 b(function,)i(if)f(de\014ned,)g(is)g (called)h(b)m(y)e(the)h(completer)h(when)e(real)h(\014lename)g (completion)390 3412 y(is)c(done,)h(after)f(all)h(the)g(matc)m(hing)g (names)e(ha)m(v)m(e)j(b)s(een)d(generated.)53 b(It)34 b(is)g(passed)f(a)i Fs(NULL)d Ft(ter-)390 3522 y(minated)f(arra)m(y)g (of)g(matc)m(hes.)43 b(The)31 b(\014rst)f(elemen)m(t)i(\()p Fs(matches[0])p Ft(\))d(is)h(the)h(maximal)h(substring)390 3631 y(common)d(to)g(all)h(matc)m(hes.)41 b(This)28 b(function)h(can)g (re-arrange)g(the)g(list)h(of)f(matc)m(hes)g(as)g(required,)390 3741 y(but)h(eac)m(h)h(elemen)m(t)h(deleted)f(from)f(the)h(arra)m(y)g (m)m(ust)f(b)s(e)g(freed.)3371 3975 y([V)-8 b(ariable])-3598 b Fh(rl_icppfunc_t)56 b(*)d(rl_directory_completio)q(n_ho)q(ok)390 4085 y Ft(This)44 b(function,)49 b(if)d(de\014ned,)i(is)d(allo)m(w)m (ed)i(to)f(mo)s(dify)e(the)i(directory)g(p)s(ortion)e(of)i(\014lenames) 390 4194 y(Readline)35 b(completes.)56 b(It)35 b(could)g(b)s(e)f(used)g (to)i(expand)e(sym)m(b)s(olic)h(links)g(or)g(shell)g(v)-5 b(ariables)35 b(in)390 4304 y(pathnames.)70 b(It)41 b(is)f(called)h (with)f(the)h(address)e(of)i(a)g(string)f(\(the)h(curren)m(t)f (directory)h(name\))390 4413 y(as)d(an)f(argumen)m(t,)j(and)d(ma)m(y)i (mo)s(dify)d(that)j(string.)62 b(If)37 b(the)h(string)f(is)h(replaced)g (with)f(a)h(new)390 4523 y(string,)j(the)d(old)h(v)-5 b(alue)39 b(should)e(b)s(e)h(freed.)64 b(An)m(y)39 b(mo)s(di\014ed)e (directory)i(name)f(should)g(ha)m(v)m(e)i(a)390 4633 y(trailing)c(slash.)54 b(The)35 b(mo)s(di\014ed)e(v)-5 b(alue)36 b(will)f(b)s(e)f(used)g(as)i(part)e(of)h(the)h(completion,)h (replacing)390 4742 y(the)32 b(directory)g(p)s(ortion)f(of)h(the)g (pathname)f(the)h(user)f(t)m(yp)s(ed.)44 b(A)m(t)33 b(the)f(least,)h (ev)m(en)g(if)e(no)h(other)390 4852 y(expansion)j(is)h(p)s(erformed,)f (this)h(function)f(should)g(remo)m(v)m(e)i(an)m(y)f(quote)g(c)m (haracters)h(from)e(the)390 4961 y(directory)c(name,)g(b)s(ecause)f (its)h(result)f(will)h(b)s(e)e(passed)h(directly)h(to)g Fs(opendir\(\))p Ft(.)390 5121 y(The)25 b(directory)i(completion)g(ho)s (ok)e(returns)g(an)h(in)m(teger)h(that)f(should)f(b)s(e)g(non-zero)i (if)e(the)i(func-)390 5230 y(tion)35 b(mo)s(di\014es)e(its)i(directory) f(argumen)m(t.)53 b(The)33 b(function)h(should)f(not)i(mo)s(dify)e(the) h(directory)390 5340 y(argumen)m(t)d(if)f(it)h(returns)e(0.)p eop end %%Page: 53 57 TeXDict begin 53 56 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(53)3371 299 y([V)-8 b(ariable])-3598 b Fh(rl_icppfunc_t)56 b(*)d (rl_directory_rewrite_h)q(ook;)390 408 y Ft(If)24 b(non-zero,)i(this)e (is)h(the)f(address)g(of)g(a)h(function)f(to)h(call)g(when)f (completing)h(a)g(directory)g(name.)390 518 y(This)h(function)g(tak)m (es)i(the)f(address)f(of)h(the)f(directory)h(name)g(to)g(b)s(e)f(mo)s (di\014ed)g(as)h(an)f(argumen)m(t.)390 628 y(Unlik)m(e)40 b Fs(rl_directory_completion_h)o(ook)p Ft(,)35 b(it)40 b(only)f(mo)s(di\014es)f(the)i(directory)f(name)h(used)390 737 y(in)35 b Fs(opendir)p Ft(,)g(not)g(what)h(is)f(displa)m(y)m(ed)h (when)e(the)i(p)s(ossible)f(completions)h(are)g(prin)m(ted)f(or)g(in-) 390 847 y(serted.)k(It)27 b(is)f(called)h(b)s(efore)f(rl)p 1463 847 28 4 v 40 w(directory)p 1859 847 V 41 w(completion)p 2333 847 V 41 w(ho)s(ok.)39 b(A)m(t)27 b(the)g(least,)h(ev)m(en)f(if)g (no)f(other)390 956 y(expansion)35 b(is)h(p)s(erformed,)f(this)h (function)f(should)g(remo)m(v)m(e)i(an)m(y)f(quote)g(c)m(haracters)h (from)e(the)390 1066 y(directory)c(name,)g(b)s(ecause)f(its)h(result)f (will)h(b)s(e)e(passed)h(directly)h(to)g Fs(opendir\(\))p Ft(.)390 1199 y(The)37 b(directory)i(rewrite)f(ho)s(ok)f(returns)g(an)h (in)m(teger)h(that)f(should)f(b)s(e)g(non-zero)i(if)e(the)i(func-)390 1309 y(tion)e(mo)s(d\014es)e(its)h(directory)h(argumen)m(t.)58 b(The)36 b(function)f(should)h(not)g(mo)s(dify)f(the)h(directory)390 1418 y(argumen)m(t)31 b(if)f(it)h(returns)e(0.)3371 1598 y([V)-8 b(ariable])-3598 b Fh(rl_icppfunc_t)56 b(*)d (rl_filename_stat_hook)390 1708 y Ft(If)30 b(non-zero,)h(this)f(is)g (the)g(address)f(of)h(a)h(function)f(for)f(the)i(completer)g(to)g(call) g(b)s(efore)f(deciding)390 1817 y(whic)m(h)g(c)m(haracter)i(to)e(app)s (end)f(to)i(a)f(completed)h(name.)41 b(This)29 b(function)h(mo)s (di\014es)f(its)i(\014lename)390 1927 y(name)36 b(argumen)m(t,)h(and)e (the)h(mo)s(di\014ed)e(v)-5 b(alue)36 b(is)g(passed)f(to)h Fs(stat\(\))e Ft(to)i(determine)g(the)g(\014le's)390 2037 y(t)m(yp)s(e)41 b(and)f(c)m(haracteristics.)73 b(This)40 b(function)g(do)s(es)g(not)h(need)f(to)h(remo)m(v)m(e)h(quote)f(c)m (haracters)390 2146 y(from)30 b(the)g(\014lename.)390 2279 y(The)i(stat)h(ho)s(ok)f(returns)f(an)h(in)m(teger)i(that)e (should)g(b)s(e)f(non-zero)i(if)f(the)g(function)g(mo)s(d\014es)g(its) 390 2389 y(directory)42 b(argumen)m(t.)73 b(The)40 b(function)h(should) f(not)h(mo)s(dify)f(the)h(directory)h(argumen)m(t)f(if)g(it)390 2498 y(returns)29 b(0.)3371 2679 y([V)-8 b(ariable])-3598 b Fh(rl_dequote_func_t)57 b(*)c(rl_filename_rewrite_ho)q(ok)390 2788 y Ft(If)39 b(non-zero,)k(this)d(is)f(the)h(address)f(of)h(a)g (function)g(called)g(when)f(reading)h(directory)g(en)m(tries)390 2898 y(from)f(the)h(\014lesystem)g(for)g(completion)h(and)e(comparing)i (them)e(to)i(the)f(partial)h(w)m(ord)e(to)i(b)s(e)390 3007 y(completed.)g(The)26 b(function)h(should)f(p)s(erform)f(an)m(y)j (necessary)f(application)i(or)e(system-sp)s(eci\014c)390 3117 y(con)m(v)m(ersion)35 b(on)g(the)f(\014lename,)i(suc)m(h)d(as)i (con)m(v)m(erting)h(b)s(et)m(w)m(een)f(c)m(haracter)g(sets)g(or)f(con)m (v)m(erting)390 3226 y(from)f(a)g(\014lesystem)h(format)g(to)g(a)f(c)m (haracter)i(input)e(format.)50 b(The)32 b(function)h(tak)m(es)i(t)m(w)m (o)g(argu-)390 3336 y(men)m(ts:)49 b Fj(fname)p Ft(,)36 b(the)e(\014lename)h(to)g(b)s(e)f(con)m(v)m(erted,)j(and)d Fj(fnlen)p Ft(,)h(its)g(length)g(in)f(b)m(ytes.)53 b(It)35 b(m)m(ust)390 3446 y(either)24 b(return)e(its)h(\014rst)g(argumen)m(t)g (\(if)h(no)f(con)m(v)m(ersion)h(tak)m(es)h(place\))g(or)e(the)g(con)m (v)m(erted)i(\014lename)390 3555 y(in)j(newly-allo)s(cated)i(memory)-8 b(.)41 b(The)27 b(con)m(v)m(erted)j(form)e(is)g(used)g(to)h(compare)f (against)i(the)e(w)m(ord)390 3665 y(to)g(b)s(e)e(completed,)j(and,)f (if)f(it)h(matc)m(hes,)h(is)e(added)f(to)i(the)g(list)f(of)h(matc)m (hes.)41 b(Readline)27 b(will)h(free)390 3774 y(the)j(allo)s(cated)h (string.)3371 3954 y([V)-8 b(ariable])-3598 b Fh(rl_compdisp_func_t)58 b(*)52 b(rl_completion_display)q(_ma)q(tch)q(es_h)q(ook)390 4064 y Ft(If)22 b(non-zero,)i(then)e(this)g(is)g(the)g(address)f(of)h (a)g(function)g(to)h(call)g(when)e(completing)i(a)g(w)m(ord)e(w)m(ould) 390 4174 y(normally)h(displa)m(y)h(the)f(list)h(of)f(p)s(ossible)g (matc)m(hes.)39 b(This)21 b(function)h(is)g(called)i(in)e(lieu)g(of)g (Readline)390 4283 y(displa)m(ying)37 b(the)h(list.)61 b(It)37 b(tak)m(es)i(three)e(argumen)m(ts:)54 b(\()p Fs(char)30 b(**)p Fj(matc)m(hes)p Ft(,)39 b Fs(int)d Fj(n)m(um)p 3370 4283 V 40 w(matc)m(hes)p Ft(,)390 4393 y Fs(int)26 b Fj(max)p 735 4393 V 40 w(length)p Ft(\))h(where)f Fj(matc)m(hes)31 b Ft(is)c(the)f(arra)m(y)h(of)g(matc)m(hing)g (strings,)h Fj(n)m(um)p 3152 4393 V 39 w(matc)m(hes)j Ft(is)c(the)390 4502 y(n)m(um)m(b)s(er)35 b(of)i(strings)f(in)g(that)h (arra)m(y)-8 b(,)39 b(and)d Fj(max)p 2073 4502 V 40 w(length)h Ft(is)g(the)f(length)h(of)g(the)f(longest)i(string)390 4612 y(in)f(that)i(arra)m(y)-8 b(.)63 b(Readline)39 b(pro)m(vides)e(a)h (con)m(v)m(enience)i(function,)f Fs(rl_display_match_list)p Ft(,)390 4722 y(that)33 b(tak)m(es)g(care)g(of)f(doing)g(the)g(displa)m (y)g(to)h(Readline's)g(output)e(stream.)46 b(Y)-8 b(ou)33 b(ma)m(y)f(call)h(that)390 4831 y(function)d(from)g(this)g(ho)s(ok.) 3371 5011 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_basic_word_break_ch)q(ara)q(cter)q(s)390 5121 y Ft(The)44 b(basic)g(list)h(of)f(c)m(haracters)i(that)f(signal)g(a)f(break)g(b)s (et)m(w)m(een)h(w)m(ords)f(for)g(the)g(completer)390 5230 y(routine.)61 b(The)37 b(default)g(v)-5 b(alue)37 b(of)h(this)f(v)-5 b(ariable)38 b(is)f(the)g(c)m(haracters)i(whic)m(h)e (break)g(w)m(ords)f(for)390 5340 y(completion)c(in)e(Bash:)41 b Fs(")30 b(\\t\\n\\"\\\\'`@$><=;|&{\(")p Ft(.)p eop end %%Page: 54 58 TeXDict begin 54 57 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(54)3371 299 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_basic_quote_charact)q(ers)390 408 y Ft(A)30 b(list)i(of)e(quote)h (c)m(haracters)h(whic)m(h)e(can)h(cause)g(a)f(w)m(ord)g(break.)3371 628 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_completer_word_brea)q(k_c)q(hara)q(cte)q(rs)390 737 y Ft(The)64 b(list)i(of)f(c)m(haracters)h(that)g(signal)g(a)f(break)g (b)s(et)m(w)m(een)g(w)m(ords)g(for)f Fs(rl_complete_)390 847 y(internal\(\))p Ft(.)38 b(The)30 b(default)g(list)h(is)g(the)f(v) -5 b(alue)31 b(of)g Fs(rl_basic_word_break_cha)o(ract)o(ers)p Ft(.)3371 1066 y([V)-8 b(ariable])-3598 b Fh(rl_cpvfunc_t)56 b(*)d(rl_completion_word_brea)q(k_ho)q(ok)390 1176 y Ft(If)31 b(non-zero,)i(this)e(is)h(the)f(address)g(of)g(a)h(function)g (to)g(call)h(when)d(Readline)i(is)g(deciding)f(where)390 1285 y(to)k(separate)g(w)m(ords)f(for)g(w)m(ord)g(completion.)54 b(It)34 b(should)f(return)g(a)i(c)m(haracter)h(string)e(lik)m(e)i Fs(rl_)390 1395 y(completer_word_break_cha)o(ract)o(ers)26 b Ft(to)34 b(b)s(e)e(used)g(to)i(p)s(erform)e(the)h(curren)m(t)f (completion.)390 1504 y(The)24 b(function)h(ma)m(y)g(c)m(ho)s(ose)h(to) f(set)g Fs(rl_completer_word_break_ch)o(arac)o(ter)o(s)19 b Ft(itself.)39 b(If)25 b(the)390 1614 y(function)30 b(returns)f Fs(NULL)p Ft(,)h Fs(rl_completer_word_break)o(_cha)o(rac)o (ters)24 b Ft(is)30 b(used.)3371 1833 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g(rl_completer_quote_cha)q(rac)q(ters)390 1943 y Ft(A)34 b(list)g(of)g(c)m(haracters)h(whic)m(h)e(can)h(b)s(e)g (used)e(to)j(quote)f(a)g(substring)f(of)h(the)f(line.)51 b(Completion)390 2052 y(o)s(ccurs)26 b(on)g(the)g(en)m(tire)i (substring,)e(and)f(within)h(the)g(substring)g Fs (rl_completer_word_break)o(_)390 2162 y(characters)32 b Ft(are)k(treated)g(as)f(an)m(y)h(other)f(c)m(haracter,)j(unless)d (they)g(also)h(app)s(ear)e(within)h(this)390 2271 y(list.)3371 2491 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_filename_quote_char)q(act)q(ers)390 2600 y Ft(A)34 b(list)g(of)g(c)m(haracters)h(that)f(cause)h(a)f(\014lename)g(to)g(b)s (e)f(quoted)h(b)m(y)f(the)h(completer)h(when)e(they)390 2710 y(app)s(ear)d(in)g(a)h(completed)g(\014lename.)41 b(The)30 b(default)g(is)h(the)f(n)m(ull)h(string.)3371 2929 y([V)-8 b(ariable])-3598 b Fh(const)54 b(char)f(*)g (rl_special_prefixes)390 3039 y Ft(The)27 b(list)i(of)e(c)m(haracters)j (that)e(are)g(w)m(ord)f(break)h(c)m(haracters,)i(but)d(should)f(b)s(e)h (left)i(in)e Fj(text)k Ft(when)390 3148 y(it)25 b(is)g(passed)f(to)h (the)g(completion)h(function.)38 b(Programs)25 b(can)g(use)f(this)h(to) g(help)f(determine)h(what)390 3258 y(kind)i(of)h(completing)h(to)f(do.) 40 b(F)-8 b(or)29 b(instance,)g(Bash)f(sets)g(this)g(v)-5 b(ariable)28 b(to)h Fs(")p Ft($@)p Fs(")e Ft(so)h(that)g(it)h(can)390 3367 y(complete)j(shell)e(v)-5 b(ariables)31 b(and)f(hostnames.)3371 3587 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_query_i)q (tems)390 3696 y Ft(Up)36 b(to)h(this)f(man)m(y)g(items)h(will)f(b)s(e) g(displa)m(y)m(ed)h(in)e(resp)s(onse)h(to)h(a)f(p)s (ossible-completions)h(call.)390 3806 y(After)28 b(that,)h(readline)f (asks)g(the)g(user)f(if)h(she)f(is)h(sure)f(she)h(w)m(an)m(ts)g(to)h (see)f(them)g(all.)40 b(The)28 b(default)390 3915 y(v)-5 b(alue)31 b(is)f(100.)42 b(A)31 b(negativ)m(e)h(v)-5 b(alue)31 b(indicates)g(that)g(Readline)g(should)f(nev)m(er)h(ask)f (the)h(user.)3371 4134 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_append_)q(char)q(act)q(er)390 4244 y Ft(When)33 b(a)h(single)f(completion)i(alternativ)m(e)h(matc)m(hes)e (at)g(the)f(end)g(of)g(the)h(command)f(line,)h(this)390 4354 y(c)m(haracter)23 b(is)e(app)s(ended)f(to)i(the)g(inserted)f (completion)i(text.)39 b(The)20 b(default)i(is)g(a)f(space)h(c)m (haracter)390 4463 y(\(`)31 b('\).)86 b(Setting)46 b(this)f(to)h(the)g (n)m(ull)f(c)m(haracter)i(\(`)p Fs(\\0)p Ft('\))f(prev)m(en)m(ts)g(an)m (ything)g(b)s(eing)f(app)s(ended)390 4573 y(automatically)-8 b(.)66 b(This)37 b(can)h(b)s(e)f(c)m(hanged)h(in)g(application-sp)s (eci\014c)h(completion)g(functions)e(to)390 4682 y(pro)m(vide)j(the)g (\\most)g(sensible)g(w)m(ord)f(separator)i(c)m(haracter")h(according)e (to)h(an)e(application-)390 4792 y(sp)s(eci\014c)30 b(command)g(line)h (syn)m(tax)g(sp)s(eci\014cation.)3371 5011 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_suppres)q(s_ap)q(pen)q(d)390 5121 y Ft(If)33 b(non-zero,)i Fj(rl)p 949 5121 28 4 v 39 w(completion)p 1421 5121 V 42 w(app)s(end)p 1755 5121 V 38 w(c)m(haracter)42 b Ft(is)33 b(not)g(app)s(ended)f(to)i(matc)m (hes)g(at)g(the)g(end)390 5230 y(of)28 b(the)f(command)h(line,)h(as)e (describ)s(ed)g(ab)s(o)m(v)m(e.)41 b(It)27 b(is)h(set)g(to)g(0)g(b)s (efore)g(an)m(y)f(application-sp)s(eci\014c)390 5340 y(completion)32 b(function)e(is)g(called,)i(and)e(ma)m(y)h(only)f(b)s (e)g(c)m(hanged)h(within)f(suc)m(h)g(a)h(function.)p eop end %%Page: 55 59 TeXDict begin 55 58 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(55)3371 299 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_quote_c)q (hara)q(cte)q(r)390 408 y Ft(When)36 b(Readline)h(is)f(completing)h (quoted)g(text,)h(as)f(delimited)g(b)m(y)f(one)g(of)g(the)h(c)m (haracters)g(in)390 518 y Fj(rl)p 457 518 28 4 v 40 w(completer)p 885 518 V 41 w(quote)p 1145 518 V 41 w(c)m(haracters)p Ft(,)43 b(it)c(sets)g(this)g(v)-5 b(ariable)40 b(to)g(the)f(quoting)g (c)m(haracter)i(found.)390 628 y(This)30 b(is)g(set)h(b)s(efore)f(an)m (y)h(application-sp)s(eci\014c)g(completion)h(function)e(is)h(called.) 3371 831 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_suppres)q (s_qu)q(ote)390 941 y Ft(If)32 b(non-zero,)h(Readline)g(do)s(es)f(not)h (app)s(end)d(a)j(matc)m(hing)g(quote)g(c)m(haracter)h(when)d(p)s (erforming)390 1050 y(completion)25 b(on)e(a)h(quoted)g(string.)38 b(It)24 b(is)f(set)h(to)h(0)f(b)s(efore)f(an)m(y)h(application-sp)s (eci\014c)h(completion)390 1160 y(function)30 b(is)g(called,)i(and)e (ma)m(y)h(only)g(b)s(e)e(c)m(hanged)i(within)f(suc)m(h)g(a)h(function.) 3371 1363 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_found_q) q(uote)390 1473 y Ft(When)31 b(Readline)i(is)e(completing)i(quoted)f (text,)h(it)f(sets)g(this)g(v)-5 b(ariable)32 b(to)h(a)f(non-zero)g(v) -5 b(alue)32 b(if)390 1583 y(the)21 b(w)m(ord)g(b)s(eing)g(completed)h (con)m(tains)g(or)f(is)g(delimited)h(b)m(y)f(an)m(y)g(quoting)h(c)m (haracters,)i(including)390 1692 y(bac)m(kslashes.)42 b(This)29 b(is)i(set)g(b)s(efore)f(an)m(y)g(application-sp)s(eci\014c)i (completion)g(function)e(is)g(called.)3371 1896 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_mark_sy)q(mlin)q(k_d)q (irs)390 2005 y Ft(If)31 b(non-zero,)i(a)f(slash)g(will)g(b)s(e)f(app)s (ended)f(to)j(completed)g(\014lenames)e(that)i(are)f(sym)m(b)s(olic)g (links)390 2115 y(to)25 b(directory)g(names,)g(sub)5 b(ject)24 b(to)h(the)f(v)-5 b(alue)25 b(of)f(the)h(user-settable)g Fj(mark-directories)k Ft(v)-5 b(ariable.)390 2225 y(This)27 b(v)-5 b(ariable)28 b(exists)g(so)f(that)h(application-sp)s(eci\014c)h (completion)g(functions)e(can)g(o)m(v)m(erride)i(the)390 2334 y(user's)42 b(global)h(preference)g(\(set)g(via)g(the)f Fj(mark-symlink)m(ed-directories)48 b Ft(Readline)43 b(v)-5 b(ariable\))390 2444 y(if)38 b(appropriate.)62 b(This)37 b(v)-5 b(ariable)38 b(is)g(set)g(to)g(the)g(user's)f (preference)g(b)s(efore)g(an)m(y)h(application-)390 2553 y(sp)s(eci\014c)31 b(completion)i(function)f(is)f(called,)j(so)e (unless)f(that)h(function)f(mo)s(di\014es)g(the)h(v)-5 b(alue,)33 b(the)390 2663 y(user's)d(preferences)g(are)h(honored.)3371 2866 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_ignore_completion_)q (dupl)q(ica)q(tes)390 2976 y Ft(If)30 b(non-zero,)h(then)f(duplicates)h (in)f(the)h(matc)m(hes)g(are)g(remo)m(v)m(ed.)42 b(The)29 b(default)i(is)f(1.)3371 3180 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_filename_completio)q(n_de)q(sir)q(ed)390 3289 y Ft(Non-zero)33 b(means)f(that)g(the)g(results)f(of)h(the)g(matc) m(hes)h(are)f(to)h(b)s(e)e(treated)i(as)f(\014lenames.)45 b(This)390 3399 y(is)40 b Fk(always)49 b Ft(zero)41 b(when)e (completion)i(is)f(attempted,)j(and)d(can)g(only)g(b)s(e)f(c)m(hanged)i (within)e(an)390 3508 y(application-sp)s(eci\014c)i(completion)g (function.)67 b(If)39 b(it)h(is)f(set)h(to)h(a)e(non-zero)h(v)-5 b(alue)40 b(b)m(y)f(suc)m(h)h(a)390 3618 y(function,)24 b(directory)f(names)f(ha)m(v)m(e)h(a)g(slash)f(app)s(ended)e(and)i (Readline)h(attempts)g(to)g(quote)g(com-)390 3727 y(pleted)35 b(\014lenames)g(if)g(they)h(con)m(tain)g(an)m(y)f(c)m(haracters)i(in)e Fs(rl_filename_quote_chara)o(cter)o(s)390 3837 y Ft(and)30 b Fs(rl_filename_quoting_des)o(ired)24 b Ft(is)30 b(set)h(to)g(a)g (non-zero)g(v)-5 b(alue.)3371 4041 y([V)d(ariable])-3598 b Fh(int)53 b(rl_filename_quoting_d)q(esir)q(ed)390 4150 y Ft(Non-zero)29 b(means)f(that)h(the)f(results)g(of)g(the)g(matc)m (hes)i(are)e(to)h(b)s(e)e(quoted)h(using)g(double)f(quotes)390 4260 y(\(or)43 b(an)f(application-sp)s(eci\014c)i(quoting)f(mec)m (hanism\))g(if)f(the)h(completed)g(\014lename)g(con)m(tains)390 4369 y(an)m(y)28 b(c)m(haracters)h(in)e Fs(rl_filename_quote_chars)p Ft(.)34 b(This)27 b(is)g Fk(always)37 b Ft(non-zero)28 b(when)f(comple-)390 4479 y(tion)h(is)g(attempted,)h(and)e(can)h(only)g (b)s(e)f(c)m(hanged)h(within)f(an)h(application-sp)s(eci\014c)h (completion)390 4589 y(function.)37 b(The)21 b(quoting)g(is)g (e\013ected)i(via)e(a)h(call)g(to)g(the)f(function)g(p)s(oin)m(ted)g (to)g(b)m(y)g Fs(rl_filename_)390 4698 y(quoting_function)p Ft(.)3371 4902 y([V)-8 b(ariable])-3598 b Fh(int)53 b (rl_attempted_completi)q(on_o)q(ver)390 5011 y Ft(If)93 b(an)h(application-sp)s(eci\014c)i(completion)f(function)f(assigned)g (to)h Fs(rl_attempted_)390 5121 y(completion_function)48 b Ft(sets)53 b(this)g(v)-5 b(ariable)54 b(to)g(a)f(non-zero)h(v)-5 b(alue,)60 b(Readline)53 b(will)h(not)390 5230 y(p)s(erform)28 b(its)i(default)g(\014lename)g(completion)h(ev)m(en)f(if)g(the)f (application's)i(completion)g(function)390 5340 y(returns)e(no)h(matc)m (hes.)42 b(It)31 b(should)e(b)s(e)h(set)h(only)f(b)m(y)h(an)f (application's)i(completion)f(function.)p eop end %%Page: 56 60 TeXDict begin 56 59 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(56)3371 299 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_sort_completion_ma)q (tche)q(s)390 408 y Ft(If)29 b(an)h(application)h(sets)f(this)g(v)-5 b(ariable)31 b(to)f(0,)h(Readline)f(will)g(not)g(sort)g(the)g(list)h (of)f(completions)390 518 y(\(whic)m(h)25 b(implies)f(that)i(it)f (cannot)g(remo)m(v)m(e)h(an)m(y)f(duplicate)g(completions\).)40 b(The)24 b(default)h(v)-5 b(alue)25 b(is)390 628 y(1,)32 b(whic)m(h)f(means)g(that)h(Readline)g(will)f(sort)h(the)f(completions) h(and,)f(dep)s(ending)f(on)h(the)g(v)-5 b(alue)390 737 y(of)31 b Fs(rl_ignore_completion_du)o(pli)o(cate)o(s)p Ft(,)25 b(will)30 b(attempt)i(to)f(remo)m(v)m(e)h(duplicate)f(matc)m (hes.)3371 922 y([V)-8 b(ariable])-3598 b Fh(int)53 b (rl_completion_type)390 1031 y Ft(Set)35 b(to)h(a)f(c)m(haracter)i (describing)e(the)g(t)m(yp)s(e)g(of)g(completion)i(Readline)e(is)g (curren)m(tly)h(attempt-)390 1141 y(ing;)f(see)f(the)g(description)f (of)g Fs(rl_complete_internal\(\))28 b Ft(\(see)34 b(Section)g(2.6.2)h ([Completion)390 1250 y(F)-8 b(unctions],)39 b(page)f(50\))f(for)g(the) g(list)g(of)g(c)m(haracters.)61 b(This)36 b(is)g(set)i(to)f(the)g (appropriate)f(v)-5 b(alue)390 1360 y(b)s(efore)31 b(an)m(y)h (application-sp)s(eci\014c)h(completion)g(function)f(is)f(called,)j (allo)m(wing)f(suc)m(h)e(functions)390 1469 y(to)g(presen)m(t)g(the)f (same)h(in)m(terface)h(as)e Fs(rl_complete\(\))p Ft(.)3371 1654 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_completion_invokin)q (g_ke)q(y)390 1763 y Ft(Set)41 b(to)g(the)g(\014nal)g(c)m(haracter)h (in)e(the)h(k)m(ey)g(sequence)h(that)f(in)m(v)m(ok)m(ed)h(one)f(of)g (the)g(completion)390 1873 y(functions)c(that)h(call)h Fs(rl_complete_internal\(\))p Ft(.)56 b(This)37 b(is)g(set)h(to)g(the)g (appropriate)f(v)-5 b(alue)390 1983 y(b)s(efore)30 b(an)m(y)h (application-sp)s(eci\014c)h(completion)f(function)f(is)h(called.)3371 2167 y([V)-8 b(ariable])-3598 b Fh(int)53 b(rl_inhibit_completion)390 2276 y Ft(If)28 b(this)g(v)-5 b(ariable)29 b(is)f(non-zero,)i (completion)f(is)f(inhibited.)40 b(The)28 b(completion)h(c)m(haracter)h (will)f(b)s(e)390 2386 y(inserted)h(as)h(an)m(y)g(other)f(b)s(ound)e (to)k Fs(self-insert)p Ft(.)150 2585 y Fi(2.6.4)63 b(A)40 b(Short)i(Completion)g(Example)150 2732 y Ft(Here)30 b(is)f(a)g(small)h(application)g(demonstrating)f(the)h(use)e(of)i(the)f (GNU)h(Readline)f(library)-8 b(.)40 b(It)30 b(is)f(called)150 2842 y Fs(fileman)p Ft(,)40 b(and)f(the)h(source)g(co)s(de)g(resides)f (in)g Fs(examples/fileman.c)p Ft(.)64 b(This)39 b(sample)h(application) 150 2951 y(pro)m(vides)26 b(completion)i(of)e(command)g(names,)h(line)f (editing)h(features,)h(and)d(access)j(to)f(the)f(history)g(list.)p eop end %%Page: 57 61 TeXDict begin 57 60 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(57)390 299 y Fe(/*)40 b(fileman.c)h(--)f(A)f(tiny)h(application)i(which)e (demonstrates)i(how)e(to)g(use)g(the)508 386 y(GNU)g(Readline)h (library.)80 b(This)40 b(application)i(interactively)g(allows)f(users) 508 473 y(to)e(manipulate)j(files)e(and)g(their)h(modes.)f(*/)390 648 y(#ifdef)h(HAVE_CONFIG_H)390 735 y(#)79 b(include)40 b()390 822 y(#endif)390 996 y(#include)h()390 1083 y(#ifdef)g(HAVE_SYS_FILE_H)390 1171 y(#)79 b(include)40 b()390 1258 y(#endif)390 1345 y(#include)h()390 1519 y(#ifdef)g(HAVE_UNISTD_H)390 1606 y(#)79 b(include)40 b()390 1694 y(#endif)390 1868 y(#include)h()390 1955 y(#include)g()390 2042 y(#include)g()390 2217 y(#if)f(defined)h(\(HAVE_STRING_H\))390 2304 y(#)79 b(include)40 b()390 2391 y(#else)g(/*)g(!HAVE_STRING_H)i(*/) 390 2478 y(#)79 b(include)40 b()390 2565 y(#endif)h(/*)e (!HAVE_STRING_H)k(*/)390 2740 y(#ifdef)e(HAVE_STDLIB_H)390 2827 y(#)79 b(include)40 b()390 2914 y(#endif)390 3088 y(#include)h()390 3263 y(#include)g() 390 3350 y(#include)g()390 3524 y(extern)g(char)f (*xmalloc)h(PARAMS\(\(size_t\)\);)390 3699 y(/*)f(The)g(names)g(of)g (functions)h(that)f(actually)h(do)f(the)g(manipulation.)i(*/)390 3786 y(int)e(com_list)h(PARAMS\(\(char)h(*\)\);)390 3873 y(int)e(com_view)h(PARAMS\(\(char)h(*\)\);)390 3960 y(int)e(com_rename) h(PARAMS\(\(char)h(*\)\);)390 4047 y(int)e(com_stat)h(PARAMS\(\(char)h (*\)\);)390 4134 y(int)e(com_pwd)h(PARAMS\(\(char)h(*\)\);)390 4222 y(int)e(com_delete)h(PARAMS\(\(char)h(*\)\);)390 4309 y(int)e(com_help)h(PARAMS\(\(char)h(*\)\);)390 4396 y(int)e(com_cd)g(PARAMS\(\(char)i(*\)\);)390 4483 y(int)e(com_quit)h (PARAMS\(\(char)h(*\)\);)390 4658 y(/*)e(A)f(structure)i(which)g (contains)g(information)h(on)d(the)h(commands)h(this)f(program)508 4745 y(can)g(understand.)h(*/)390 4919 y(typedef)g(struct)f({)468 5006 y(char)h(*name;)f(/*)g(User)g(printable)h(name)f(of)g(the)g (function.)h(*/)468 5093 y(rl_icpfunc_t)h(*func;)f(/*)f(Function)h(to)e (call)i(to)e(do)h(the)g(job.)g(*/)468 5181 y(char)h(*doc;)f(/*)g (Documentation)i(for)e(this)g(function.)80 b(*/)390 5268 y(})39 b(COMMAND;)p eop end %%Page: 58 62 TeXDict begin 58 61 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(58)390 386 y Fe(COMMAND)41 b(commands[])g(=)f({)468 473 y({)g("cd",)g(com_cd,) h("Change)g(to)f(directory)h(DIR")f(},)468 560 y({)g("delete",)h (com_delete,)h("Delete)f(FILE")f(},)468 648 y({)g("help",)h(com_help,)g ("Display)g(this)f(text")h(},)468 735 y({)f("?",)g(com_help,)h ("Synonym)g(for)f(`help'")h(},)468 822 y({)f("list",)h(com_list,)g ("List)f(files)h(in)e(DIR")i(},)468 909 y({)f("ls",)g(com_list,)i ("Synonym)f(for)f(`list'")g(},)468 996 y({)g("pwd",)g(com_pwd,)i ("Print)e(the)g(current)h(working)g(directory")g(},)468 1083 y({)f("quit",)h(com_quit,)g("Quit)f(using)h(Fileman")g(},)468 1171 y({)f("rename",)h(com_rename,)h("Rename)f(FILE)f(to)g(NEWNAME")h (},)468 1258 y({)f("stat",)h(com_stat,)g("Print)g(out)f(statistics)h (on)f(FILE")g(},)468 1345 y({)g("view",)h(com_view,)g("View)f(the)g (contents)h(of)f(FILE")g(},)468 1432 y({)g(\(char)g(*\)NULL,)h (\(rl_icpfunc_t)h(*\)NULL,)f(\(char)f(*\)NULL)h(})390 1519 y(};)390 1694 y(/*)f(Forward)g(declarations.)j(*/)390 1781 y(char)d(*stripwhite)i(\(\);)390 1868 y(COMMAND)f(*find_command)h (\(\);)390 2042 y(/*)e(The)g(name)g(of)f(this)i(program,)g(as)e(taken)i (from)f(argv[0].)h(*/)390 2130 y(char)f(*progname;)390 2304 y(/*)g(When)g(non-zero,)h(this)f(global)h(means)f(the)g(user)g(is) g(done)g(using)g(this)h(program.)g(*/)390 2391 y(int)f(done;)390 2565 y(char)g(*)390 2653 y(dupstr)h(\(s\))586 2740 y(char)f(*s;)390 2827 y({)468 2914 y(char)h(*r;)468 3088 y(r)f(=)f(xmalloc)i(\(strlen)g (\(s\))f(+)f(1\);)468 3176 y(strcpy)i(\(r,)f(s\);)468 3263 y(return)h(\(r\);)390 3350 y(})390 3524 y(main)f(\(argc,)h(argv\)) 586 3611 y(int)f(argc;)586 3699 y(char)g(**argv;)390 3786 y({)468 3873 y(char)h(*line,)f(*s;)468 4047 y(progname)h(=)f (argv[0];)468 4222 y(initialize_readline)k(\(\);)c(/*)g(Bind)g(our)g (completer.)h(*/)468 4396 y(/*)f(Loop)g(reading)h(and)f(executing)h (lines)g(until)f(the)g(user)g(quits.)h(*/)468 4483 y(for)f(\()g(;)f (done)h(==)g(0;)g(\))547 4570 y({)625 4658 y(line)g(=)g(readline)h (\("FileMan:)h("\);)625 4832 y(if)e(\(!line\))704 4919 y(break;)625 5093 y(/*)g(Remove)h(leading)f(and)g(trailing)h (whitespace)h(from)e(the)g(line.)743 5181 y(Then,)g(if)g(there)g(is)g (anything)h(left,)g(add)e(it)h(to)g(the)g(history)h(list)743 5268 y(and)f(execute)h(it.)f(*/)p eop end %%Page: 59 63 TeXDict begin 59 62 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(59)625 299 y Fe(s)40 b(=)f(stripwhite)j(\(line\);)625 473 y(if)e(\(*s\))704 560 y({)782 648 y(add_history)i(\(s\);)782 735 y(execute_line)g(\(s\);) 704 822 y(})625 996 y(free)e(\(line\);)547 1083 y(})468 1171 y(exit)h(\(0\);)390 1258 y(})390 1432 y(/*)f(Execute)g(a)g (command)h(line.)f(*/)390 1519 y(int)390 1606 y(execute_line)i (\(line\))586 1694 y(char)e(*line;)390 1781 y({)468 1868 y(register)h(int)f(i;)468 1955 y(COMMAND)h(*command;)468 2042 y(char)g(*word;)468 2217 y(/*)f(Isolate)h(the)f(command)h(word.)f (*/)468 2304 y(i)g(=)f(0;)468 2391 y(while)i(\(line[i])g(&&)f (whitespace)h(\(line[i]\)\))547 2478 y(i++;)468 2565 y(word)g(=)e(line)h(+)g(i;)468 2740 y(while)h(\(line[i])g(&&)f (!whitespace)h(\(line[i]\)\))547 2827 y(i++;)468 3001 y(if)f(\(line[i]\))547 3088 y(line[i++])h(=)f('\\0';)468 3263 y(command)h(=)f(find_command)i(\(word\);)468 3437 y(if)e(\(!command\))547 3524 y({)625 3611 y(fprintf)h(\(stderr,)g ("\045s:)f(No)g(such)g(command)h(for)f(FileMan.\\n",)i(word\);)625 3699 y(return)f(\(-1\);)547 3786 y(})468 3960 y(/*)f(Get)g(argument)h (to)f(command,)h(if)f(any.)g(*/)468 4047 y(while)h(\(whitespace)h (\(line[i]\)\))547 4134 y(i++;)468 4309 y(word)f(=)e(line)h(+)g(i;)468 4483 y(/*)g(Call)g(the)g(function.)h(*/)468 4570 y(return)g (\(\(*\(command->func\)\))j(\(word\)\);)390 4658 y(})390 4832 y(/*)c(Look)g(up)f(NAME)i(as)e(the)h(name)g(of)g(a)g(command,)h (and)e(return)i(a)f(pointer)g(to)g(that)508 4919 y(command.)80 b(Return)41 b(a)e(NULL)h(pointer)h(if)f(NAME)g(isn't)g(a)g(command)g (name.)h(*/)390 5006 y(COMMAND)g(*)390 5093 y(find_command)h(\(name\)) 586 5181 y(char)e(*name;)390 5268 y({)p eop end %%Page: 60 64 TeXDict begin 60 63 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(60)468 299 y Fe(register)41 b(int)f(i;)468 473 y(for)g(\(i)g(=)f(0;)h (commands[i].name;)j(i++\))547 560 y(if)d(\(strcmp)g(\(name,)h (commands[i].name\))i(==)d(0\))625 648 y(return)h(\(&commands[i]\);)468 822 y(return)g(\(\(COMMAND)g(*\)NULL\);)390 909 y(})390 1083 y(/*)f(Strip)g(whitespace)i(from)e(the)g(start)g(and)g(end)g(of)f (STRING.)81 b(Return)40 b(a)g(pointer)508 1171 y(into)g(STRING.)h(*/) 390 1258 y(char)f(*)390 1345 y(stripwhite)h(\(string\))586 1432 y(char)f(*string;)390 1519 y({)468 1606 y(register)h(char)g(*s,)f (*t;)468 1781 y(for)g(\(s)g(=)f(string;)i(whitespace)h(\(*s\);)e(s++\)) 547 1868 y(;)468 2042 y(if)g(\(*s)g(==)g(0\))547 2130 y(return)g(\(s\);)468 2304 y(t)g(=)f(s)h(+)f(strlen)i(\(s\))f(-)f(1;) 468 2391 y(while)i(\(t)e(>)h(s)f(&&)h(whitespace)i(\(*t\)\))547 2478 y(t--;)468 2565 y(*++t)f(=)e('\\0';)468 2740 y(return)i(s;)390 2827 y(})390 3001 y(/*)f(******************************)q(*****)q(****) q(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 3088 y(/*)2589 b(*/)390 3176 y(/*)707 b(Interface)41 b(to)f(Readline)h(Completion)629 b(*/)390 3263 y(/*)2589 b(*/)390 3350 y(/*)40 b(******************************)q(*****)q(****)q (*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 3524 y(char)40 b(*command_generator)j(PARAMS\(\(const)g(char)d(*,)f (int\)\);)390 3611 y(char)h(**fileman_completion)k(PARAMS\(\(const)e (char)e(*,)g(int,)g(int\)\);)390 3786 y(/*)g(Tell)g(the)g(GNU)g (Readline)h(library)g(how)e(to)h(complete.)81 b(We)39 b(want)h(to)g(try)g(to)g(complete)508 3873 y(on)f(command)i(names)g(if) e(this)h(is)g(the)g(first)g(word)g(in)g(the)g(line,)g(or)g(on)g (filenames)508 3960 y(if)f(not.)h(*/)390 4047 y(initialize_readline)k (\(\))390 4134 y({)468 4222 y(/*)c(Allow)g(conditional)i(parsing)f(of)f (the)g(~/.inputrc)h(file.)g(*/)468 4309 y(rl_readline_name)i(=)d ("FileMan";)468 4483 y(/*)g(Tell)g(the)g(completer)h(that)g(we)e(want)h (a)g(crack)g(first.)h(*/)468 4570 y(rl_attempted_completion_fun)q(ctio) q(n)k(=)39 b(fileman_completion;)390 4658 y(})390 4832 y(/*)h(Attempt)g(to)g(complete)h(on)f(the)g(contents)h(of)f(TEXT.)79 b(START)41 b(and)e(END)h(bound)h(the)508 4919 y(region)f(of)g (rl_line_buffer)i(that)f(contains)g(the)e(word)i(to)e(complete.)81 b(TEXT)40 b(is)508 5006 y(the)g(word)g(to)f(complete.)81 b(We)40 b(can)g(use)f(the)h(entire)h(contents)g(of)f(rl_line_buffer)508 5093 y(in)f(case)h(we)g(want)g(to)g(do)g(some)g(simple)g(parsing.)81 b(Return)40 b(the)g(array)h(of)e(matches,)508 5181 y(or)g(NULL)h(if)g (there)h(aren't)f(any.)g(*/)390 5268 y(char)g(**)p eop end %%Page: 61 65 TeXDict begin 61 64 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(61)390 299 y Fe(fileman_completion)43 b(\(text,)e(start,)g(end\))586 386 y(const)f(char)h(*text;)586 473 y(int)f(start,)h(end;)390 560 y({)468 648 y(char)g(**matches;)468 822 y(matches)g(=)f(\(char)g (**\)NULL;)468 996 y(/*)g(If)g(this)g(word)g(is)g(at)f(the)h(start)h (of)e(the)h(line,)h(then)f(it)g(is)f(a)h(command)586 1083 y(to)g(complete.)80 b(Otherwise)42 b(it)d(is)h(the)g(name)g(of)g (a)f(file)h(in)g(the)g(current)586 1171 y(directory.)i(*/)468 1258 y(if)e(\(start)h(==)e(0\))547 1345 y(matches)i(=)e (rl_completion_matches)44 b(\(text,)d(command_generator\);)468 1519 y(return)g(\(matches\);)390 1606 y(})390 1781 y(/*)f(Generator)h (function)g(for)f(command)h(completion.)81 b(STATE)40 b(lets)g(us)g(know)g(whether)508 1868 y(to)f(start)i(from)f(scratch;)h (without)g(any)f(state)g(\(i.e.)g(STATE)h(==)e(0\),)h(then)g(we)508 1955 y(start)g(at)g(the)g(top)g(of)f(the)h(list.)h(*/)390 2042 y(char)f(*)390 2130 y(command_generator)j(\(text,)e(state\))586 2217 y(const)f(char)h(*text;)586 2304 y(int)f(state;)390 2391 y({)468 2478 y(static)h(int)f(list_index,)i(len;)468 2565 y(char)f(*name;)468 2740 y(/*)f(If)g(this)g(is)g(a)f(new)h(word)g (to)g(complete,)h(initialize)h(now.)79 b(This)40 b(includes)586 2827 y(saving)h(the)f(length)g(of)g(TEXT)g(for)g(efficiency,)i(and)e (initializing)i(the)d(index)586 2914 y(variable)i(to)f(0.)g(*/)468 3001 y(if)g(\(!state\))547 3088 y({)625 3176 y(list_index)i(=)d(0;)625 3263 y(len)h(=)g(strlen)g(\(text\);)547 3350 y(})468 3524 y(/*)g(Return)h(the)f(next)g(name)g(which)g(partially)i(matches)e (from)h(the)e(command)i(list.)g(*/)468 3611 y(while)g(\(name)f(=)g (commands[list_index].name\))547 3699 y({)625 3786 y(list_index++;)625 3960 y(if)g(\(strncmp)h(\(name,)g(text,)f(len\))g(==)g(0\))704 4047 y(return)g(\(dupstr\(name\)\);)547 4134 y(})468 4309 y(/*)g(If)g(no)f(names)i(matched,)g(then)f(return)h(NULL.)f(*/)468 4396 y(return)h(\(\(char)g(*\)NULL\);)390 4483 y(})390 4658 y(/*)f(******************************)q(*****)q(****)q(*****)q (****)q(****)q(*****)q(****)q(***)45 b(*/)390 4745 y(/*)2589 b(*/)390 4832 y(/*)903 b(FileMan)41 b(Commands)1060 b(*/)390 4919 y(/*)2589 b(*/)390 5006 y(/*)40 b(******************************)q (*****)q(****)q(*****)q(****)q(****)q(*****)q(****)q(***)45 b(*/)390 5181 y(/*)40 b(String)g(to)g(pass)g(to)g(system)g(\(\).)80 b(This)40 b(is)f(for)h(the)g(LIST,)h(VIEW)f(and)g(RENAME)508 5268 y(commands.)h(*/)p eop end %%Page: 62 66 TeXDict begin 62 65 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(62)390 299 y Fe(static)41 b(char)f(syscom[1024];)390 473 y(/*)g(List)g(the)g (file\(s\))h(named)f(in)g(arg.)g(*/)390 560 y(com_list)h(\(arg\))586 648 y(char)f(*arg;)390 735 y({)468 822 y(if)g(\(!arg\))547 909 y(arg)g(=)f("";)468 1083 y(sprintf)i(\(syscom,)g("ls)f(-FClg)h (\045s",)f(arg\);)468 1171 y(return)h(\(system)g(\(syscom\)\);)390 1258 y(})390 1432 y(com_view)g(\(arg\))586 1519 y(char)f(*arg;)390 1606 y({)468 1694 y(if)g(\(!valid_argument)j(\("view",)e(arg\)\))547 1781 y(return)f(1;)390 1955 y(#if)g(defined)h(\(__MSDOS__\))468 2042 y(/*)f(more.com)h(doesn't)g(grok)f(slashes)h(in)f(pathnames)h(*/) 468 2130 y(sprintf)g(\(syscom,)g("less)g(\045s",)f(arg\);)390 2217 y(#else)468 2304 y(sprintf)h(\(syscom,)g("more)g(\045s",)f(arg\);) 390 2391 y(#endif)468 2478 y(return)h(\(system)g(\(syscom\)\);)390 2565 y(})390 2740 y(com_rename)g(\(arg\))586 2827 y(char)f(*arg;)390 2914 y({)468 3001 y(too_dangerous)j(\("rename"\);)468 3088 y(return)e(\(1\);)390 3176 y(})390 3350 y(com_stat)g(\(arg\))586 3437 y(char)f(*arg;)390 3524 y({)468 3611 y(struct)h(stat)f(finfo;)468 3786 y(if)g(\(!valid_argument)j(\("stat",)e(arg\)\))547 3873 y(return)f(\(1\);)468 4047 y(if)g(\(stat)g(\(arg,)h(&finfo\))g(==) e(-1\))547 4134 y({)625 4222 y(perror)i(\(arg\);)625 4309 y(return)g(\(1\);)547 4396 y(})468 4570 y(printf)g(\("Statistics)h (for)e(`\045s':\\n",)h(arg\);)468 4745 y(printf)g(\("\045s)f(has)g (\045d)g(link\045s,)h(and)f(is)f(\045d)h(byte\045s)g(in)g(length.\\n",) 468 4832 y(arg,)782 4919 y(finfo.st_nlink,)782 5006 y(\(finfo.st_nlink) j(==)d(1\))f(?)h("")f(:)h("s",)782 5093 y(finfo.st_size,)782 5181 y(\(finfo.st_size)j(==)c(1\))h(?)g("")f(:)h("s"\);)468 5268 y(printf)h(\("Inode)g(Last)f(Change)h(at:)f(\045s",)g(ctime)g (\(&finfo.st_ctime\)\);)p eop end %%Page: 63 67 TeXDict begin 63 66 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(63)468 299 y Fe(printf)41 b(\(")236 b(Last)40 b(access)h(at:)f(\045s",)g (ctime)g(\(&finfo.st_atime\)\);)468 386 y(printf)h(\(")157 b(Last)41 b(modified)g(at:)f(\045s",)g(ctime)g(\(&finfo.st_mtime\)\);) 468 473 y(return)h(\(0\);)390 560 y(})390 735 y(com_delete)g(\(arg\)) 586 822 y(char)f(*arg;)390 909 y({)468 996 y(too_dangerous)j (\("delete"\);)468 1083 y(return)e(\(1\);)390 1171 y(})390 1345 y(/*)f(Print)g(out)g(help)g(for)g(ARG,)g(or)g(for)g(all)g(of)f (the)h(commands)h(if)f(ARG)g(is)508 1432 y(not)g(present.)h(*/)390 1519 y(com_help)g(\(arg\))586 1606 y(char)f(*arg;)390 1694 y({)468 1781 y(register)h(int)f(i;)468 1868 y(int)g(printed)h(=)f (0;)468 2042 y(for)g(\(i)g(=)f(0;)h(commands[i].name;)j(i++\))547 2130 y({)625 2217 y(if)d(\(!*arg)h(||)e(\(strcmp)i(\(arg,)g (commands[i].name\))i(==)c(0\)\))704 2304 y({)782 2391 y(printf)i(\("\045s\\t\\t\045s.\\n",)i(commands[i].name,)g (commands[i].doc\);)782 2478 y(printed++;)704 2565 y(})547 2653 y(})468 2827 y(if)d(\(!printed\))547 2914 y({)625 3001 y(printf)h(\("No)f(commands)h(match)g(`\045s'.)79 b(Possibilties)42 b(are:\\n",)f(arg\);)625 3176 y(for)f(\(i)g(=)f(0;)h (commands[i].name;)j(i++\))704 3263 y({)782 3350 y(/*)d(Print)g(in)g (six)g(columns.)h(*/)782 3437 y(if)f(\(printed)h(==)f(6\))861 3524 y({)939 3611 y(printed)h(=)e(0;)939 3699 y(printf)i(\("\\n"\);)861 3786 y(})782 3960 y(printf)g(\("\045s\\t",)g(commands[i].name\);)782 4047 y(printed++;)704 4134 y(})625 4309 y(if)f(\(printed\))704 4396 y(printf)g(\("\\n"\);)547 4483 y(})468 4570 y(return)h(\(0\);)390 4658 y(})390 4832 y(/*)f(Change)g(to)g(the)g(directory)h(ARG.)f(*/)390 4919 y(com_cd)h(\(arg\))586 5006 y(char)f(*arg;)390 5093 y({)468 5181 y(if)g(\(chdir)h(\(arg\))f(==)g(-1\))547 5268 y({)p eop end %%Page: 64 68 TeXDict begin 64 67 bop 150 -116 a Ft(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(Readline)1683 b(64)625 299 y Fe(perror)41 b(\(arg\);)625 386 y(return)g(1;)547 473 y(})468 648 y(com_pwd)g(\(""\);)468 735 y(return)g(\(0\);)390 822 y(})390 996 y(/*)f(Print)g(out)g(the)g(current)h(working)g (directory.)g(*/)390 1083 y(com_pwd)g(\(ignore\))586 1171 y(char)f(*ignore;)390 1258 y({)468 1345 y(char)h(dir[1024],)g(*s;) 468 1519 y(s)f(=)f(getcwd)i(\(dir,)f(sizeof\(dir\))i(-)e(1\);)468 1606 y(if)g(\(s)g(==)f(0\))547 1694 y({)625 1781 y(printf)i(\("Error)g (getting)g(pwd:)f(\045s\\n",)g(dir\);)625 1868 y(return)h(1;)547 1955 y(})468 2130 y(printf)g(\("Current)g(directory)h(is)d(\045s\\n",)i (dir\);)468 2217 y(return)g(0;)390 2304 y(})390 2478 y(/*)f(The)g(user)g(wishes)g(to)g(quit)g(using)h(this)f(program.)80 b(Just)40 b(set)g(DONE)g(non-zero.)h(*/)390 2565 y(com_quit)g(\(arg\)) 586 2653 y(char)f(*arg;)390 2740 y({)468 2827 y(done)h(=)e(1;)468 2914 y(return)i(\(0\);)390 3001 y(})390 3176 y(/*)f(Function)h(which)f (tells)g(you)g(that)h(you)e(can't)i(do)e(this.)i(*/)390 3263 y(too_dangerous)h(\(caller\))586 3350 y(char)e(*caller;)390 3437 y({)468 3524 y(fprintf)h(\(stderr,)821 3611 y("\045s:)g(Too)f (dangerous)h(for)f(me)f(to)h(distribute.)81 b(Write)40 b(it)g(yourself.\\n",)821 3699 y(caller\);)390 3786 y(})390 3960 y(/*)g(Return)g(non-zero)h(if)f(ARG)g(is)g(a)f(valid)h(argument)h (for)f(CALLER,)h(else)f(print)508 4047 y(an)f(error)i(message)g(and)e (return)i(zero.)f(*/)390 4134 y(int)390 4222 y(valid_argument)i (\(caller,)f(arg\))586 4309 y(char)f(*caller,)h(*arg;)390 4396 y({)468 4483 y(if)f(\(!arg)g(||)g(!*arg\))547 4570 y({)625 4658 y(fprintf)h(\(stderr,)g("\045s:)f(Argument)h (required.\\n",)i(caller\);)625 4745 y(return)e(\(0\);)547 4832 y(})468 5006 y(return)g(\(1\);)390 5093 y(})p eop end %%Page: 65 69 TeXDict begin 65 68 bop 3659 -116 a Ft(65)150 299 y Fp(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Ft(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fq(\015)e Ft(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fs(http://fsf.org/)390 964 y Ft(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fj(free)36 b Ft(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 66 70 TeXDict begin 66 69 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(66)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fm(asci)r(i)g Ft(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fd(SGML)f Ft(or)f Fd(XML)g Ft(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Ft(,)h(and)c (standard-conforming)g(simple)h Fd(HTML)p Ft(,)i(P)m(ostScript)e(or)f Fd(PDF)h Ft(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fd(PNG)p Ft(,)i Fd(X)n(CF)330 2724 y Ft(and)e Fd(JPG)p Ft(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Ft(or)f Fd(XML)h Ft(for)g(whic)m(h)f(the)h Fd(DTD)g Ft(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fd(HTML)p Ft(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h Ft(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 67 71 TeXDict begin 67 70 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(67)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 68 72 TeXDict begin 68 71 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(68)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 69 73 TeXDict begin 69 72 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(69)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 70 74 TeXDict begin 70 73 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(70)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 71 75 TeXDict begin 71 74 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(71)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fs(http://www.gnu.org/copy)o(left)o(/)p Ft(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 72 76 TeXDict begin 72 75 bop 150 -116 a Ft(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(72)150 299 y Fr(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Ft(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fe(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Ft(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fe(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fc(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fc(list)p Fe(.)275 1868 y Ft(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Page: 73 77 TeXDict begin 73 76 bop 150 -116 a Ft(Concept)31 b(Index)2927 b(73)150 100 y Fp(Concept)52 b(Index)146 434 y Fr(A)150 550 y Fb(application-sp)r(eci\014c)27 b(completion)f(functions)e Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)37 b Fb(49)146 796 y Fr(C)150 913 y Fb(command)26 b(editing)6 b Fa(:)14 b(:)f(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(1)146 1159 y Fr(E)150 1275 y Fb(editing)26 b(command)g(lines)c Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(1)146 1522 y Fr(I)150 1638 y Fb(initialization)28 b(\014le,)e(readline)c Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)36 b Fb(4)150 1726 y(in)n(teraction,)27 b(readline)12 b Fa(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(1)146 1972 y Fr(K)150 2088 y Fb(kill)g(ring)12 b Fa(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(2)150 2176 y(killing)g(text)11 b Fa(:)h(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)26 b Fb(2)2021 434 y Fr(N)2025 566 y Fb(notation,)g (readline)17 b Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 32 b Fb(1)2021 970 y Fr(R)2025 1102 y Fb(readline,)26 b(function)18 b Fa(:)c(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)33 b Fb(24)2021 1507 y Fr(V)2025 1639 y Fb(v)l(ariables,)27 b(readline)11 b Fa(:)j(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) 26 b Fb(4)2021 2043 y Fr(Y)2025 2176 y Fb(y)n(anking)f(text)17 b Fa(:)12 b(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)32 b Fb(2)p eop end %%Page: 74 78 TeXDict begin 74 77 bop 3659 -116 a Ft(74)150 299 y Fp(F)-13 b(unction)52 b(and)h(V)-13 b(ariable)53 b(Index)p 156 740 41 6 v 150 864 a Fe(_rl_digit_p)10 b Fa(:)16 b(:)d(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(41)150 953 y Fe(_rl_digit_value)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)32 b Fb(41)150 1043 y Fe(_rl_lowercase_p)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(41)150 1132 y Fe(_rl_to_lower)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(41)150 1222 y Fe(_rl_to_upper)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(41)150 1309 y Fe(_rl_uppercase_p)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(41)146 1605 y Fr(A)150 1728 y Fe(abort)27 b(\(C-g\))17 b Fa(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)31 b Fb(22)150 1815 y Fe(accept-line)d(\(Newline)g(or)e(Return\))14 b Fa(:)g(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)28 b Fb(16)146 2111 y Fr(B)150 2234 y Fe(backward-char)h(\(C-b\))14 b Fa(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)28 b Fb(16)150 2324 y Fe(backward-delete-char)i(\(Rubout\))24 b Fa(:)14 b(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(18)150 2413 y Fe(backward-kill-line)30 b(\(C-x)c(Rubout\))7 b Fa(:)15 b(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)21 b Fb(19)150 2503 y Fe(backward-kill-word)30 b(\(M-DEL\))13 b Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)27 b Fb(20)150 2593 y Fe(backward-word)i(\(M-b\))14 b Fa(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)28 b Fb(16)150 2682 y Fe(beginning-of-history)i(\(M-<\))13 b Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(17)150 2772 y Fe(beginning-of-line)i(\(C-a\))22 b Fa(:)13 b(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(16)150 2861 y(b)r(ell-st)n(yle)9 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)24 b Fb(5)150 2951 y(bind-tt)n(y-sp)r(ecial-c)n(hars)c Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(5)150 3041 y(blink-matc)n(hing-paren)6 b Fa(:)12 b(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)21 b Fb(5)150 3128 y Fe(bracketed-paste-begin)30 b(\(\))18 b Fa(:)c(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)33 b Fb(18)146 3423 y Fr(C)150 3547 y Fe(call-last-kbd-macro)d(\(C-x)c(e\))17 b Fa(:)d(:)f(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(21)150 3636 y Fe(capitalize-word)d(\(M-c\))9 b Fa(:)14 b(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 23 b Fb(19)150 3726 y Fe(character-search)29 b(\(C-]\))6 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(22)150 3815 y Fe (character-search-backward)31 b(\(M-C-]\))12 b Fa(:)j(:)e(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)27 b Fb(22)150 3905 y Fe(clear-screen)h(\(C-l\))16 b Fa(:)f(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)31 b Fb(16)150 3995 y(colored-completion-pre\014x)9 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)24 b Fb(5)150 4084 y(colored-stats)17 b Fa(:)d(:)f(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)31 b Fb(5)150 4174 y(commen)n(t-b)r(egin)6 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(5)150 4263 y Fe(complete)27 b(\(TAB\))10 b Fa(:)k(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)24 b Fb(21)150 4353 y(completion-displa)n(y-width)10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)25 b Fb(5)150 4443 y (completion-ignore-case)c Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)34 b Fb(5)150 4532 y(completion-map-case)15 b Fa(:)f(:)f(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)30 b Fb(5)150 4622 y(completion-pre\014x-displa)n (y-length)14 b Fa(:)e(:)h(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)28 b Fb(5)150 4712 y(completion-query-items)6 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)21 b Fb(6)150 4801 y(con)n(v)n(ert-meta)9 b Fa(:)k(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)24 b Fb(6)150 4891 y Fe(copy-backward-word)30 b(\(\))9 b Fa(:)k(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)23 b Fb(20)150 4980 y Fe(copy-forward-word)29 b(\(\))11 b Fa(:)j(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(20)150 5068 y Fe(copy-region-as-kill)k(\(\))6 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(20)2021 817 y Fr(D)2025 935 y Fe(delete-char)28 b(\(C-d\))20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(18)2025 1023 y Fe(delete-char-or-list)c(\(\))6 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(21)2025 1111 y Fe (delete-horizontal-space)31 b(\(\))13 b Fa(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)28 b Fb(20)2025 1200 y Fe(digit-argument)h(\()p Fc(M-0)p Fe(,)d Fc(M-1)p Fe(,)h(...)f Fc(M--)p Fe(\))13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)28 b Fb(20)2025 1288 y(disable-completion)20 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)34 b Fb(6)2025 1376 y Fe(do-uppercase-version)c(\(M-a,)d(M-b,)f(M-)p Fc(x)p Fe(,)h(...\))12 b Fa(:)i(:)27 b Fb(22)2025 1464 y Fe(downcase-word)h(\(M-l\))14 b Fa(:)g(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)28 b Fb(19)2025 1552 y Fe(dump-functions)h(\(\))19 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(23)2025 1640 y Fe(dump-macros)28 b(\(\))10 b Fa(:)j(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)24 b Fb(23)2025 1727 y Fe(dump-variables)29 b(\(\))19 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(23)2021 1989 y Fr(E)2025 2108 y Fb(ec)n(ho-con)n(trol-c)n (haracters)13 b Fa(:)h(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)29 b Fb(6)2025 2196 y(editing-mo)r(de)10 b Fa(:)j(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)25 b Fb(6)2025 2284 y Fe(emacs-editing-mode)k(\(C-e\))18 b Fa(:)d(:)e(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(23)2025 2372 y(emacs-mo)r(de-string)18 b Fa(:)c(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(6)2025 2460 y(enable-brac)n(k)n (eted-paste)18 b Fa(:)12 b(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)33 b Fb(6)2025 2548 y(enable-k)n(eypad)7 b Fa(:)12 b(:)h(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)23 b Fb(7)2025 2636 y Fe(end-kbd-macro)28 b(\(C-x)f(\)\))16 b Fa(:)d(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)30 b Fb(21)2025 2724 y Fc(end-of-file)e Fe(\(usually)f(C-d\))d Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)37 b Fb(18)2025 2812 y Fe(end-of-history)29 b(\(M->\))11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(17)2025 2900 y Fe(end-of-line)i(\(C-e\))20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)34 b Fb(16)2025 2988 y Fe(exchange-point-and-mark)d(\(C-x) 26 b(C-x\))20 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(22)2025 3076 y(expand-tilde)19 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)35 b Fb(7)2021 3336 y Fr(F)2025 3455 y Fe(forward-backward-delete-char)d(\(\))17 b Fa(:)d(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)32 b Fb(18)2025 3543 y Fe(forward-char)c(\(C-f\))16 b Fa(:)f(:)e(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)31 b Fb(16)2025 3631 y Fe(forward-search-history)f (\(C-s\))8 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)23 b Fb(17)2025 3718 y Fe(forward-word)28 b(\(M-f\))16 b Fa(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(16)2021 3970 y Fr(H)2025 4089 y Fb(history-preserv)n(e-p)r(oin)n (t)15 b Fa(:)d(:)h(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)30 b Fb(7)2025 4177 y Fe(history-search-backward)h(\(\))13 b Fa(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)28 b Fb(17)2025 4265 y Fe(history-search-forward)i(\(\))16 b Fa(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)30 b Fb(17)2025 4353 y(history-size)22 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)37 b Fb(7)2025 4441 y Fe(history-substr-search-backward)32 b(\(\))12 b Fa(:)i(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)27 b Fb(17)2025 4529 y Fe(history-substr-search-forward)32 b(\(\))15 b Fa(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)29 b Fb(17)2025 4616 y(horizon)n(tal-scroll-mo)r(de)10 b Fa(:)15 b(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)25 b Fb(7)2021 4867 y Fr(I)2025 4986 y Fb(input-meta)9 b Fa(:)j(:)h(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)24 b Fb(7)2025 5074 y Fe(insert-comment)29 b(\(M-#\))11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(22)2025 5162 y Fe(insert-completions)j(\(M-*\))18 b Fa(:)d(:)e(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)33 b Fb(21)2025 5249 y(isearc)n(h-terminators)9 b Fa(:)14 b(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fb(7)p eop end %%Page: 75 79 TeXDict begin 75 78 bop 150 -116 a Ft(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(75)146 294 y Fr(K)150 426 y Fb(k)n(eymap)14 b Fa(:)e(:)h(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)29 b Fb(8)150 519 y Fe(kill-line)f(\(C-k\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(19)150 611 y Fe(kill-region)28 b(\(\))10 b Fa(:)j(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)24 b Fb(20)150 703 y Fe(kill-whole-line)29 b(\(\))16 b Fa(:)e(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)31 b Fb(19)150 791 y Fe(kill-word)d(\(M-d\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(19)146 1136 y Fr(M)150 1268 y Fb(mark-mo)r(di\014ed-lines)c Fa(:)c(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(8)150 1360 y(mark-symlink)n(ed-directories)14 b Fa(:)f(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)29 b Fb(8)150 1453 y(matc)n(h-hidden-\014les)7 b Fa(:)12 b(:)h(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(8)150 1545 y Fe(menu-complete)29 b(\(\))22 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)36 b Fb(21)150 1638 y Fe(menu-complete-backward)31 b(\(\))16 b Fa(:)d(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)30 b Fb(21)150 1730 y(men)n(u-complete-displa)n(y-pre\014x)10 b Fa(:)h(:)j(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)25 b Fb(8)150 1817 y(meta-\015ag)d Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)36 b Fb(7)146 2171 y Fr(N)150 2303 y Fe(next-history)28 b(\(C-n\))16 b Fa(:)f(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)31 b Fb(17)150 2387 y Fe(non-incremental-forward-)227 2474 y(search-history)e(\(M-n\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(17)150 2561 y Fe(non-incremental-reverse-)227 2648 y(search-history)29 b(\(M-p\))7 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(17)146 3012 y Fr(O)150 3145 y Fb(output-meta)d Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) 34 b Fb(8)150 3232 y Fe(overwrite-mode)29 b(\(\))19 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(19)146 3577 y Fr(P)150 3709 y Fb(page-completions)8 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)23 b Fb(9)150 3802 y Fe(possible-completions)30 b(\(M-?\))13 b Fa(:)h(:)g(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)27 b Fb(21)150 3894 y Fe(prefix-meta)h(\(ESC\))20 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(22)150 3987 y Fe(previous-history)c(\(C-p\))6 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)21 b Fb(16)150 4074 y Fe(print-last-kbd-macro)30 b(\(\))21 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)35 b Fb(21)146 4429 y Fr(Q)150 4556 y Fe(quoted-insert)29 b(\(C-q)d(or)g(C-v\))10 b Fa(:)k(:)f(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(18)2021 294 y Fr(R)2025 410 y Fe(re-read-init-file)29 b(\(C-x)e(C-r\))17 b Fa(:)d(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)32 b Fb(22)2025 498 y Fe(readline)18 b Fa(:)d(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)33 b Fb(24)2025 585 y Fe(redraw-current-line)d(\(\))6 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(16)2025 672 y Fe (reverse-search-history)30 b(\(C-r\))8 b Fa(:)15 b(:)e(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)23 b Fb(17)2025 760 y(rev)n(ert-all-at-newline)10 b Fa(:)k(:)f(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)26 b Fb(9)2025 847 y Fe(revert-line)i(\(M-r\))20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(22)2025 935 y Fe(rl_add_defun)8 b Fa(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(32)2025 1022 y Fe(rl_add_funmap_entry)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(36)2025 1109 y Fe(rl_add_undo)10 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(36)2025 1197 y Fe(rl_alphabetic)g Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)37 b Fb(40)2025 1284 y Fe(rl_begin_undo_group)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(36)2025 1371 y Fe(rl_bind_key)10 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)25 b Fb(33)2025 1459 y Fe(rl_bind_key_if_unbound)16 b Fa(:)i(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)31 b Fb(34)2025 1546 y Fe(rl_bind_key_if_unbound_in_map)16 b Fa(:)j(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)30 b Fb(34)2025 1633 y Fe(rl_bind_key_in_map)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(33)2025 1721 y Fe(rl_bind_keyseq)f Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)34 b Fb(34)2025 1808 y Fe(rl_bind_keyseq_if_unbound)9 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)23 b Fb(34)2025 1896 y Fe(rl_bind_keyseq_if_unbound_in_m)q (ap)8 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)23 b Fb(34)2025 1983 y Fe(rl_bind_keyseq_in_map)h Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)34 b Fb(34)2025 2070 y Fe (rl_callback_handler_install)27 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(42)2025 2158 y Fe(rl_callback_handler_remove)6 b Fa(:)19 b(:)13 b(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(42)2025 2245 y Fe(rl_callback_read_char)j Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(42)2025 2332 y Fe(rl_callback_sigcleanup)16 b Fa(:)i(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)31 b Fb(42)2025 2420 y Fe(rl_cleanup_after_signal)14 b Fa(:)k(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)28 b Fb(48)2025 2507 y Fe(rl_clear_history)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(42)2025 2595 y Fe(rl_clear_message)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)29 b Fb(37)2025 2682 y Fe(rl_clear_pending_input)16 b Fa(:)i(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)31 b Fb(39)2025 2769 y Fe(rl_clear_signals)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(49)2025 2857 y Fe(rl_clear_visible_line)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)34 b Fb(37)2025 2944 y Fe(rl_complete)10 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)25 b Fb(50)2025 3031 y Fe(rl_complete_internal)h Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(50)2025 3119 y Fe(rl_completion_matches)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(51)2025 3206 y Fe(rl_completion_mode)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(51)2025 3293 y Fe(rl_copy_keymap)f Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)34 b Fb(33)2025 3381 y Fe(rl_copy_text)8 b Fa(:)15 b(:)f(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)22 b Fb(38)2025 3468 y Fe(rl_crlf)g Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(37)2025 3556 y Fe(rl_delete_text)23 b Fa(:)13 b(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(38)2025 3643 y Fe(rl_deprep_terminal)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(39)2025 3730 y Fe(rl_ding)e Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(40)2025 3818 y Fe(rl_discard_keymap)12 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(33)2025 3905 y Fe(rl_display_match_list)d Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(40)2025 3992 y Fe(rl_do_undo)13 b Fa(:)i(:)e(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)27 b Fb(36)2025 4080 y Fe(rl_echo_signal_char)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) 22 b Fb(48)2025 4167 y Fe(rl_end_undo_group)12 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(36)2025 4255 y Fe(rl_execute_next)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)32 b Fb(39)2025 4342 y Fe(rl_expand_prompt)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)29 b Fb(38)2025 4429 y Fe(rl_extend_line_buffer)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)34 b Fb(40)2025 4517 y Fe (rl_filename_completion_functio)q(n)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(51)2025 4604 y Fe(rl_forced_update_display)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)26 b Fb(37)2025 4691 y Fe(rl_free)c Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(40)2025 4779 y Fe(rl_free_keymap)23 b Fa(:)13 b(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(33)2025 4866 y Fe(rl_free_line_state)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(48)2025 4954 y Fe(rl_free_undo_list)12 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(36)2025 5041 y Fe(rl_function_dumper)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)24 b Fb(35)2025 5128 y Fe(rl_function_of_keyseq)g Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(35)p eop end %%Page: 76 80 TeXDict begin 76 79 bop 150 -116 a Ft(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)2370 b(76)150 260 y Fe(rl_funmap_names)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)32 b Fb(35)150 347 y Fe(rl_generic_bind)17 b Fa(:)g(:)c(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(35)150 434 y Fe(rl_get_keymap)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(33)150 522 y Fe(rl_get_keymap_by_name)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)33 b Fb(33)150 609 y Fe(rl_get_keymap_name)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(33)150 696 y Fe(rl_get_screen_size)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)24 b Fb(49)150 783 y Fe(rl_get_termcap)f Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(42)150 871 y Fe(rl_getc)22 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)35 b Fb(39)150 958 y Fe(rl_initialize)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(40)150 1045 y Fe(rl_insert_completions)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)33 b Fb(51)150 1132 y Fe(rl_insert_text)23 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(38)150 1220 y Fe (rl_invoking_keyseqs)7 b Fa(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(35)150 1307 y Fe(rl_invoking_keyseqs_in_map)7 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)21 b Fb(35)150 1394 y Fe(rl_kill_text)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(38)150 1481 y Fe(rl_list_funmap_names)k Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)36 b Fb(35)150 1568 y Fe(rl_macro_bind)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(41)150 1656 y Fe(rl_macro_dumper)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(41)150 1743 y Fe(rl_make_bare_keymap)7 b Fa(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(32)150 1830 y Fe(rl_make_keymap)i Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)34 b Fb(33)150 1917 y Fe(rl_message)13 b Fa(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)27 b Fb(37)150 2005 y Fe(rl_modifying)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(36)150 2092 y Fe(rl_named_function)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(35)150 2179 y Fe(rl_on_new_line)d Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)34 b Fb(37)150 2266 y Fe(rl_on_new_line_with_prompt)7 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)21 b Fb(37)150 2354 y Fe(rl_parse_and_bind)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(35)150 2441 y Fe(rl_pending_signal)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)26 b Fb(48)150 2528 y Fe(rl_possible_completions)14 b Fa(:)k(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)28 b Fb(50)150 2615 y Fe(rl_prep_terminal)15 b Fa(:)h(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)29 b Fb(39)150 2703 y Fe(rl_push_macro_input)7 b Fa(:)17 b(:)d(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)21 b Fb(38)150 2790 y Fe(rl_read_init_file)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(35)150 2877 y Fe(rl_read_key)10 b Fa(:)16 b(:)d(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)25 b Fb(38)150 2964 y Fe(rl_redisplay)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)22 b Fb(37)150 3052 y Fe(rl_replace_line)17 b Fa(:)g(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)32 b Fb(40)150 3139 y Fe(rl_reset_after_signal)24 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)33 b Fb(48)150 3226 y Fe(rl_reset_line_state)7 b Fa(:)17 b(:)d(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)21 b Fb(37)150 3313 y Fe(rl_reset_screen_size)26 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)36 b Fb(49)150 3401 y Fe(rl_reset_terminal)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(40)150 3488 y Fe(rl_resize_terminal)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)24 b Fb(48)150 3575 y Fe(rl_restore_prompt)12 b Fa(:)17 b(:)c(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)26 b Fb(38)150 3662 y Fe(rl_restore_state)15 b Fa(:)h(:)e(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)29 b Fb(40)150 3750 y Fe(rl_save_prompt)23 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(37)150 3837 y Fe(rl_save_state)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(40)150 3924 y Fe(rl_set_key)13 b Fa(:)i(:)e(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(34)150 4011 y Fe (rl_set_keyboard_input_timeout)17 b Fa(:)h(:)c(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)30 b Fb(39)150 4099 y Fe(rl_set_keymap)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(33)150 4186 y Fe(rl_set_paren_blink_timeout)7 b Fa(:)18 b(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)21 b Fb(41)150 4273 y Fe(rl_set_prompt)k Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(38)150 4360 y Fe(rl_set_screen_size)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)24 b Fb(49)150 4447 y Fe(rl_set_signals)f Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)34 b Fb(49)150 4535 y Fe(rl_show_char)8 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)22 b Fb(37)150 4622 y Fe(rl_stuff_char)j Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)g(:)g(:)g(:)37 b Fb(39)150 4709 y Fe (rl_tty_set_default_bindings)27 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)35 b Fb(39)2025 260 y Fe(rl_tty_set_echoing)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(39)2025 347 y Fe(rl_tty_unset_default_bindings)16 b Fa(:)j(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)30 b Fb(39)2025 435 y Fe(rl_unbind_command_in_map)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)26 b Fb(34)2025 523 y Fe(rl_unbind_function_in_map)9 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)g(:)h(:)23 b Fb(34)2025 610 y Fe(rl_unbind_key)i Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)37 b Fb(34)2025 698 y Fe(rl_unbind_key_in_map)26 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)36 b Fb(34)2025 786 y Fe (rl_username_completion_functio)q(n)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)25 b Fb(51)2025 873 y Fe(rl_variable_bind)15 b Fa(:)h(:)d(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)29 b Fb(41)2025 961 y Fe(rl_variable_dumper)10 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)24 b Fb(41)2025 1048 y Fe(rl_variable_value)12 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)27 b Fb(41)2021 1292 y Fr(S)2025 1410 y Fe(self-insert)h(\(a,)e (b,)g(A,)g(1,)g(!,)g(...)q(\))15 b Fa(:)e(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)29 b Fb(18)2025 1497 y Fe(set-mark)e(\(C-@\))10 b Fa(:)k(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fb(22)2025 1585 y(sho)n(w-all-if-am)n(biguous)e Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)35 b Fb(9)2025 1672 y(sho)n(w-all-if-unmo)r(di\014ed)11 b Fa(:)j(:)f(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)27 b Fb(9)2025 1760 y(sho)n(w-mo)r(de-in-prompt)15 b Fa(:)d(:)h(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)30 b Fb(9)2025 1848 y(skip-completed-text)17 b Fa(:)11 b(:)j(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)32 b Fb(9)2025 1935 y Fe(skip-csi-sequence)d(\(\))11 b Fa(:)j(:)f(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(22)2025 2022 y Fe(start-kbd-macro)j(\(C-x)d(\(\))10 b Fa(:)k(:)f(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 b Fb(21)2021 2266 y Fr(T)2025 2383 y Fe(tab-insert)j(\(M-TAB\))16 b Fa(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(18)2025 2471 y Fe(tilde-expand)d(\(M-~\))16 b Fa(:)f(:)e(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)31 b Fb(22)2025 2558 y Fe(transpose-chars)e(\(C-t\))9 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)23 b Fb(19)2025 2645 y Fe(transpose-words)29 b(\(M-t\))9 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)23 b Fb(19)2021 2899 y Fr(U)2025 3016 y Fe(undo)j(\(C-_)h(or)f(C-x)g (C-u\))12 b Fa(:)i(:)f(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(22)2025 3104 y Fe(universal-argument)i(\(\))9 b Fa(:)14 b(:)f(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) 23 b Fb(20)2025 3192 y Fe(unix-filename-rubout)30 b(\(\))21 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)35 b Fb(20)2025 3279 y Fe(unix-line-discard)29 b(\(C-u\))22 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(19)2025 3367 y Fe(unix-word-rubout)29 b(\(C-w\))6 b Fa(:)14 b(:)g(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)21 b Fb(20)2025 3454 y Fe(upcase-word)28 b(\(M-u\))20 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(19)2021 3708 y Fr(V)2025 3825 y Fb(vi-cmd-mo)r(de-string)18 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)33 b Fb(10)2025 3913 y Fe(vi-editing-mode)c(\(M-C-j\))22 b Fa(:)13 b(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)35 b Fb(23)2025 4000 y(vi-ins-mo)r(de-string)8 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)23 b Fb(10)2025 4087 y(visible-stats)11 b Fa(:)j(:)f(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)26 b Fb(10)2021 4329 y Fr(Y)2025 4447 y Fe(yank)g(\(C-y\))21 b Fa(:)13 b(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)34 b Fb(20)2025 4534 y Fe(yank-last-arg)28 b(\(M-.)f(or)f(M-_\))10 b Fa(:)k(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)24 b Fb(18)2025 4622 y Fe(yank-nth-arg)k(\(M-C-y\))11 b Fa(:)k(:)e(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)26 b Fb(17)2025 4709 y Fe(yank-pop)h(\(M-y\))10 b Fa(:)k(:)f(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:) h(:)f(:)g(:)g(:)24 b Fb(20)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-7.0/doc/history.ps000664 000436 000024 00001374346 12764101651 016065 0ustar00chetstaff000000 000000 %!PS-Adobe-2.0 %%Creator: dvips(k) 5.996 Copyright 2016 Radical Eye Software %%Title: history.dvi %%CreationDate: Wed Sep 7 17:16:25 2016 %%Pages: 24 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMCSC10 CMSL10 CMSLTT10 %%+ CMSS10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o history.ps history.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2016.09.07:1716 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI9.) readonly def /FullName (CMMI9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBD07FC5A8862A8DB 7E2B90C16137614CDAFB584A32E50C0935109679E31306B8BDD29F1756946A67 7A7C2D9BA6FAB9B20A424AA0E6F4BA64C2801C2FB5A1156CBEED0ACB95F697B8 BC2A6E6AA7EB1F9FD8E3C9B1A16697EE1F0E7400421A7765AB218FC837A49365 82DC6B2C877A7DA84A81E6126EE96DB25C17A207D3020A045DCDAA064360DFFC E3CD50E21ED239D2A6450D04F879A26443ADEB6A20ACC504989876476C7D1A74 91564FEA1F4CC2C8C8FDF666DB537F315AE1886C73CB5B00E67E7B398A6C018E 540EAEE98BB8136C4F044EDD63C33431D2CF9740F051DF365A4045D9D8782112 7BB5D494D9235BA98CF2F30CB119F5A904C32AD04C960C43FC1F5FD8DA7D90D8 93AFB59F3FF4F796481AE2A7548F948FECFC6C127C4D3F159B08F206AE8C296D EE470DB2F879EA79475E029D22D7A8535C09A18689DB0609CC233E5199C02756 972CC9C94D9FCE264DEE5D75C8D651E4E2D1189AD9588CB815722BB5EE3C379A 6F31C2E6AE1AE4CCEB29766190AFA20EA937114978752189F1A9F42B39483149 796FCFA123BA9CCD1D9BE28289660BCAE16C40B5B504058D55CFCBFB4F4E3D94 DDBF39F157E63946534DA81C018B1C01B9F10DDB55E0A5C2B3985ED1977C039B D6755EA42CD09E27751E159C30B93F376DBE61CD3AED34BA36A768F232EB3B80 E3E6B77C4A48D408217818E398B83D995AB6BC871F20991DF57313D6EB0C793D 0F28088EBDB7F38DAF7E01AAB3476EC24D7BB38A9889A7D3038D930FF4289B83 F54A7BE1E2D98A3822098D2E4D067A0D400C20C0B2B4BBD74C13ED1B827490F9 ECF48F8C3994C1C5AAC9CF783BFA4F307528F51EAB55F961808A42ED53F00C97 72A432EAEDCFCFB622389BDA707B6ACC9433B065CF29EBFE93AD14B8ECD5F47F F073F11822C49B8BE924CDFA6348C3A75E9BB9BF3F31C41716B34794B28CDAC9 4DB8B087E180A9B3B17680F73D9C12C8D86A922C948093629F5D7F542ED882A1 692F4F6696865E53E3E2DD43B2D5E8C989CFAA5CA5C4C5999045E170BDE9921C BACD6F2863F5553EAB2BA2D4A9034729EC0C4201DE90DA89B0A27C5A5C974109 4E37BFB3F46B3A506169FB0C68E1CAFC844419A8D261A1FD86A3BB78E33D5FB1 CFC687A5975987CE45155E5FDFAF0CC5FD5568CB1C26212F92E88255F0549F59 41B33125946DE43436BEC00804063FBF03EC796E3361B1C852EC3038D107F80A 9198968265D5488B26D7670B22C2D75EDFFD1B7B4AAFA36DFD94640C9D0E2D20 5BCA18683EFB91834A3939AB8EB60E2F09655BE003582634C52770DA9668C292 2E02929D812EE2B0CC65F020064AD5BDAC5F5693B30508F40ED8E20E87149BD5 8DD41AFF83FD1944804017DC5A04512E593549FFFAE501131CE2FDB65EFD0B8B 33809CBAEE411B3941C241550B9C30DD28088708F1C0CC3125CBEDCD985EAD28 03313741F67DB5744A87B381147D5BA70AE1145C27F794854628D87D6C1ECCA1 749E3465B950175D3C3F40E344297BD92D3190041A4392033A79BEAEAABB8DBE CC14E39612F43721CFAE6F79074429221CA588AA2501DE520A464DE157A03AFE 3C082FAE7628FC0C57FFC61D0330AE6332D20FDBB09BF36848FE05E782D6379F 64F9C82C45402481B0A35989027F9756BF5A79DA2D96E10F39167ADB4305578F 90B509B6891338FA1D67DCFD61804AA6621526B2EE4769589A2646581712AC05 DA6E98D16494F07D612743058F54FEE516BD89A8EC3E03F9D7F905175D3412C8 F7329077FD6EB25213F3CAC94BA0C3363B759401B6EF7548C7D709F3241D030D 4EB46A1AE81863C412BDDAEA6084C37143A4C5E41BC646315B1CD09F934186CF 49D1D8239E363A435307030BD79536B50B723A39DD763DB539F24A10DDA12BD4 E467339D2D6DB177D6FC539FA77D2DE4118EBAC161E928749F7C753ADEF86117 58619F1155C563DF2E11ACA8347908B98113AED58FCD0394150EEC94B7F986EE 88BF7171D208D8F1774B1DD478F0C2958AE372D257E7EDF0F6B5D6059CC4D5D3 B00FCBD2E9CBE79235B9A5A3E943CC27AABB58728C95C7DBD4F4A1F8A4DA99AE 7377B0CC0BFBD454794398AE0D5F7281771FFE87B25A819F36E692286A42D776 01794A43CA9BB30FB8FFDAAF014F909A369E34C2F6C75B7D4EB9DB0580E33F46 19654443AFF8384B95600B86FF8E41FEFD032355626D60C7507C058EF832DF41 194B48A36F11082D1DCF4723E21401E0C7447AABFAB4639B26E3D2730E348F55 53EBFF39CDD03E06E2FA5FB379603C879EDB7E1A10F89695C9C47DEEE52BE0A3 F446F187AB9D7E93E6F9387F21129034F36DF40605D28FD526AF82CA9D232BE4 412567F06B38ECCD496EF40A7B243E46C9FEBA4F1BF4B1ECA029C5EC239353D6 C0B100BF7E7DB33BD1277DE104F15AA19F37340A777741AD1AD693BC76DA48CC C6F83CD84591ECFEE375979972B0FAC4C10B625E4BFB261B9FFFA83C31DA0108 4FFB6377466E9739E0EB64424BD9FC7239C7DD834EC6788A0F97FE714AF92831 E1BA36A8A9E24739F1DC82DC26CC3CE28C210AA7C569B19E1784D663A0CA4E81 AFF43E86D6F5F63778847700072CEB77A4EB946DC1F23DBC00BCE773203F76DF 00F0B085F31420672974DDC642D885E95BA6BBE43E1CA8ABF464D9881CDECC7A E98E31B9754C9B72A8BD5CF6D4D214DBC3BA7A0CDF6635953F5AC1E7639C4A91 C7AECE4C75CA3389C348F656FC2CC96C84C85A926237B6504DB51937C9CFCDAC B75C31ED570D180757884E27757783DB2D5F35ECC48C496CDA342D49AA947BF8 2FDAD2F19DFE8CD1C76A8FA08F33681F3E12E229D7DAB45BE3A3F258B5ED4980 F15340CF20D965252843E026803E8AEE736EC41CCA82167401977AB719AA2F50 0B791EEAA82027B3C712D2EB9D14BF8F94FBDE2227609BCAC41EC08DE2BAC023 28352F913F7DF08D4E1C66E83F764578B22B4EB7191E852B91ADCCB1BCFDB1F4 E63DFD152E86FA9DE9BC8908130EFDE29CC4401339C05B5B9764CF8EFF14951A C6C13AF979546996BF22F2B96D3D585B90CD27DADEC78914DA48432C6ACBDD42 20EF583FD41F2F6D6D10C3DF7DD077304B5940BB0462656E306CBD91EB9B756B 7014B1884A36201EC582FC9345C386043DD2818FC301EF78791C1D7854F8FACE 5DE9801DE9F59D5B4271E003AB897B2EF49501589D681D59CFFD9B03F722EEF4 74ABD29997515DA3591496B62666744EA76DCA45504F8075C0652D6779DBEAE4 90430C2945FBD60AD53B51DDBEFC7ED703C418B4B244C8FFA5A3C1B7600C5A55 3EBDB93C16AC191C3A28EB2279BD3F0D67C826BC6A73D3C0AD02262368AB4621 98A1605F2887BC5880E1AF2780330E0FD01D7CAACBB0F008A42C427F38236066 54799594E515B289044BAC4DADF8B3686B4372C5110201221FDA923F131E07E7 93C44BAD406838BA4D1C277EF74098B8C0EDC41EEDD58C195D7DFF5FEDBF96FC 19CEBC6C3006DD2CBF76916B4298BB915663C2F61AFD7747E03A03BD7280197A 9DA590E3D081C6F53DBF94E8D6FDDDD910A70AB18A0F6D48A590FFAB314D6CFD E3FB20C1F3C91063F00726A2C13A3D48323F9854839405E5A29D66A43E6E2B84 A8B3765F1D817071D4D6FF42BC785C2D11AB2B9452F141696CE19C6AFB9777DB 107D6E22D8CC6C26440BC48248AD8805C4329D46BF433741CB519B21663392DA 5DC7FC9BF37E5BC396BFADD7263D09F6B4D69594AB386B7BDFCF3BACB97A0E08 22013E716E642592A20136CF9CFD61D4E515D80E06A4CB4FC9D9B916C93CEA95 B83B98C48CF36C1D02291D4F5C0419338D64E33C90C90EDD2BA3B96D70FAFE0D 403A060CFF448D3E28A9B1E3916018465E86095BAAB4706CF7ED350D7C554789 D7F4FE5F180767DE8739259E68CF142040BE1E2E8C6152DE3417C1FAEA7584B6 20781DC4A9796431EE713DAC4E713C839D7A4FDC8AB6BFEFFE767AFD8B67FDA6 943AD387E5D3BCB09039ADB64ECC2BE2620C6EC269E708DD06C311F450099E33 AF46AEC644222E7DC4DBB9371EE12CFBC4F9B27AB46AD1DA96CE006E1DF8291F A550A93026CBFFC1087B134EC6EA76F5E109CDA58FF47338A0039A786A575F70 B8A03A4F9C8D07A4C856C77D9BCC8E3EAA740172D0C2D0A15BA35C9E5717D7FA 2691774DDE730BB9D7C70D7AE103DB8D35F3728470C76EBA0E670634E1A0BA84 2FA102BAD7271DF2680D86A4CA6FC353869987700E5E3FD778165456033D624F E9B3E80EBF431ACC934AA0357E824B8AD73E222B510DE8445C55C07C8E5DE46D E478F832BDDECAF2EBB11941DCF84CCD887043FAED9AA90D12BC8CA9A0C8D94F 8D3BF1F80B14B6CAE6BB1C6AA405AA64BB94D5A82CFEA548BA070796A02F9642 87326D066101435AB9EB40BA9EA9E61B363F5F5E3B924369796E8B78DE3414A4 2B79C6A13ECB2F34E6299658D07D2B3DEF3D4383CE009A927F0EF5C196652842 D96B857AB5E905201E7E8BA21A5EBED1FC6863BA9A1A6E5390407F75055E2EEC 512FBDB3E82CEA13663F1A1944DA072C765D8CED06AB461470C5723BDC1271D4 4D1D049D3EB131743F1EC9A6ADDAA038ACA2C41D139DC6A84EC3C61AC7F1E559 6155CC2F49171F6E07CF56D721D9728E87FC7DCBCAC46455A3694C765FE807E9 9CBC2D304AF37E0F28CCB22F239541B53A4D24D09C662559267467EA487BD33A 0BEFD4899B581D20582930703A868655C31BE935364CA6A95FBCB22CB714C040 9718824DFE97929D0482430726CCB5A5307957DD2432A9B6271E849148DEB76B FAA290FF6D0B18DC5B76407852E81C105EC6CFAB0F620C6DC9DA555A33C167B1 430A8BC338BFC7D75B7099CC906AD923FA107C74D3FBB719D77A4E5A685FF9D8 56424EE4AA074434B809D894ED50F6A60A035C5223EA25DD8983B9B34210DABE 718D7B2BEB293FF1B63CFB1CBDAFC69552963D90F5E3FF533A3FDBB626E9FAA3 F3C119E5E01C7BFF832A033C3515BF049E29558B1DAD652F2888E339E67D15AE 95F9BD14E3253DFE9072B24C0E7E85025B71096AF51C86AECB2921126A43156B EC812B32B1164BD9B2B947D503C015616DBF2024F5C8CB3236C1DCA653D661FE 6B1C19A22D272A176B7F1B7F9E67AF40DB0EFD4940E58B2A050249CA4E55CAF7 6ACFD84FB46FEF952D18552B3972D79D808B4C263B8C7E1BB647A2D03E102867 630D5C3F2C917F765A4F6FB8106BA6A9D0093E27A4CB6049C2371287D94B5111 6E7020776EBD744C6C920464BBBC0AC206033E8240017F8CCB112596ECD7CAFA 89950CF43FD87ACA750C03A778A37FBCE9C82C2F5ABB135BB02DA8E8C0D24475 3BEA9D79372D0022FF1ABD378C151417DBC69FE5C9CA38D23A3900E34BF924A2 90777ACDC37930B67DD44A2E76DDBD9B89598D5F626BFD325A978D277265DA47 38CFAF16E7FF1946E15F41CA73F7B4B02E5AE8FC4C37B115BC567E4EEEFEFC34 EC8974B1465AE57759EDDA28DD38A9210871D35D331AE1BE6097C3EC21C770C9 B25D040B2ECCC3AEB1EA1BF99E0C2C0F192C13BB9152CFCF75332E03F9CEC376 9B8C285A35F53655BE38713E09AE34BA2DA9C06FA42A6FD2D00CBF2AFD2BADB9 1571629C65DA38A431710CF5B01FCA68E8B8569922FBC3F9B64A5509B6F677AF 1B97E91FFFEB6308AB68AC58F9BA43DB5E764021E75B56170EB44C2C0A7DB86C 62B8982256D3621EBE3DB3994DBF5C5A14CF34B4AF3BD5697F8E3203085DE9D5 84B0598169760B925463E93DC87CE70AF4C2DF0F4287D2F2069847BCCF7A37A2 AD451D5ACE4DBCCB2E14D5DF38B226952E7446BF87BEC736EF3D5AE793304618 D66D3299AB9F9CA1D13F134FAEDF36750046E27706C7CBD8E0877BB6276E5196 BC2A355D109C0253644918E1CC11B717DE6FBDA201E769812752888CD66268F6 4ACF4A9449378F9F9923D584BA1B51F33663BE7A306887BC14A37E3C5A4654E6 531D6EB63DE3946BD8BA95CFB037991174F36D61D842071E6625605CAA350A24 FE551025D10871FE0E2599A63900C8520EF4911C53A03897C8BEE152451708E2 43FCF4E700C583A5E8DBCC03BF9CAB864DBD19E1760945DEA0EC0BA38BEA8256 D3A8D4F70F6685A99C6BD2BA8B412A26C002D76138CFCC7DF6802931E5D97BA6 0151F6A4C572235B4196B22B7B2D14B32886DF0D2CA8A277ABAAC53B63F64CE4 E4C088192AAB674497E8AF81961359C389B51F4A257373D907C615030BFBEF53 DBD99058FD06E352450B658478C10454AC8FC0232B70D5CB916981978053E358 99D322A07294748BA427FFD1E45C909171017B52B7C742FD77A8560852D819DD 8DD53211A14D7B2FD11E42941722FD3985D627FDAF87EB57326A0D290B5077D1 8A4230BEB40523A8565F95E0D44F036A571DB698EDD9D94FEC9512369E5E5E73 A3CA5C142617944F4F99C0697ED088ACAC007FCE06E5A6EDE7D0E03A3399DCE5 362271BC31533866BA79FD1FB3F608B22CCD4111FFB1BA35D920A23AD157C6B3 C3DAE11069D5E46DEDA7158C6478D8B8C0D9DC237CDF0CC6633911673C43FB79 E4F9B7F27495201E5ADE66255BC2CBE9D9F237DECB62A19D62CB41A1C92432D2 07F0629E913A71B3F1AAF8B8C5AC66D3C8605A48F8913E39C859E163DB1DBC8F 0ACFEE80A40B6172032E95A76B752B873FB4DF23CF3A655AF1A1B88C8DC156C6 190DE72973950565454C0A188A33395FD3D529A88F2B578356DE8EBBC12F04C4 5B899F667D9E6F3A4EC6DD8DE71FD4C2E2B6D56823EE4E0526679D71FF1B868D F261489F06F97B010CCBE640E2F57BA3DC3332B329F7958394BA9777D833AB50 005E8E9232547104065ACE33396772B0E0BD66D2C6CC54DEDD071E444D8C95F8 6F88B31E20FDB80F77C83151B7E25BD3736B4F9BDC52EE78C41E9475E5A6D94C D348AB42F5E36B4F167D29EBDFBD43B03F77EB296B06A36880FF17D412E77EA9 F2E7C25FD05E16BEC6732681EA21AC3FF6893B93FC09316A370CDDB86D9E6087 F6042C3F9ECD742778389170F5F041329782FB9F9702F7533E51F355F71825AE 2BF4F8FE50D413AC9A20C41B42537FDBE8DDC5A5C793D3760C1EE13716068752 F0AF10812250BEDFB4D7133FD58F4587BACD572505C84A7D3802D27443175FE0 0D89C3398B55176D8642AFBAB5CBCDFD6220C8488564B4306D74A58CD2921AAD 73CF803C754DAC2F30A5324886E273064FA51781D5BC596BFEDDCE3982EA1AA2 62CA7BAA1B16C6EBB99B2AAC4E6C9CEFB3D10F19987045C4918DB239E6E63D79 5F44B9D097118D081153AFF96E5EB39CBFBB99A3BE30909F614869031358EB98 F07A97EA78AE50375941B2474DB46AF3305F2B208D45921F93743A6CB8AC584F 6BEBE25ECAADD5A789EF60C9F54446687E7B030DA3E5243189F02BA46BFD28B7 DC14822E136AC7E40CE20458DDBF356488045C95907363864CD6943643BF0109 EE027A3091C11EA392EA91320EBFEA3B857370AD8EB86D73F035A476F7058222 E8CDE78CA1AA9EA69A8AA6EBFF3E67324C567B914134DE042D6F8F18A9373107 536E8D90189917D343F5299024239E2EC1D2D177D82DC8E344A7CF2AC71AEC18 36F139E7A4EB59A67192BCA9ED0EB25DE13032F6FEAFC3B1F4FC81BB0EDC41DF B9EB92618667C59EA499B788CD26C2137D70F1B0AF793AF5AD0D0941F2E746E3 F5A7F0288BC1EE11E982EAAE763CA422D72FBBC0D754AD58FBF92629DC8866A0 431213513744DB48E52EFC89C83FEB082588E4F30D7DA77BB598E51CAE7E4900 5CD570C914EFBA426BAFF7A56FC775ECF5BE13F2C42E51EF96784E5201C0B64C 074AC229FF0BFDF71E6D5E08D8755D2C12B770B6466A9C9C61C15582DCD2FF78 E9E74DC2B1CAA344EC0339EBFF92CD2CC1D62E2FA8FF15E7459A83C6CFA58A77 2F1A40BD276E76B675FD6834052B33BF9190F04DF6AA5FA3BB7D77A88DD5B600 324C5E28216F47682EC29EABF35BA842BA2294A3D72B126EBB852AB741186C9F FC84B12DC4A6CEC08F2D03EE61B65C845841EE17F1B765649A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR9 %!PS-AdobeFont-1.0: CMR9 003.002 %%Title: CMR9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR9.) readonly def /FullName (CMR9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 72 /H put dup 83 /S put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 103 /g put dup 104 /h put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 118 /v put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D 2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA 700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C 4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F 291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB 2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E 2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D 9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B 42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D 07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A 31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E 44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E 24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E 75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE 53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F 7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD 866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B 40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B 14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B 9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F 289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE 67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF 2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D 064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF 1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF 01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C 40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C 72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC 4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F 852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C 3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD 855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE 1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C 1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C 552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D 744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 5C7A69BCDFE8ECE3C5F1C047BDAC4B2DAF36832BB25487385C650FC3C30A0894 2CEB8973FA2E6C749D88789C550C32B2230FB689F0DB5E9F5E2A8133F6477232 AD8B11FBDB46362C03A2967EC7E875CC0D0C94437517736307F4B8887FD275E2 E346171058EC303E62B84EA810FCEBB2905DC186B95AFC6AD4127429E71BFC7B 79E612C18501DFE5AC0E7921BF1C6BD483FD867BC2938609EE52C0271A7ED1FD EFEA3CC6F0872C28108F7EBBF5BF770C0BA6C712275E1239FA44736247CBAAD5 B856D7BD6E5E186AC4C3913293D99529B8F9EAC85FE548406DE5D90A058F1106 F98799495DBB3A05C04BD649053FD29380E217942F71F70C30735423F6F13DC7 F5015DA9043FA42C1045FD7E0F586CBF2D967E468B2E8E763415D60AEBA2BE7A BC199BFE58FA66F52AD7C5ED80B4481C08EC8162D88EC52D2695B95EF03F1876 AC9810734E1170855B512185F1E45E61CAC2221E950F5714EA9DF794371055BF 78851B835E6E730E396BCBF73F5318AC157E3885B8EBDC35B42948DA8A6566CB 91770EC786E92873F356524D6E3279555FD1300570D2DB5A69B436E316D1600D 7F622135601C1318824C0E0CFD58F90452F7D584CD8675A3ADD544D9569A32C2 2A44C7F7F35FFE5F8B3C783D071BFACD74B1477B93807D36B8C8B29B24B3EDEB B76579FE5427A4E670588B703A9000F3EE635D22642493AAB21B7733EEA50010 2E39529212B65E7565AC5AF02340A8A15EE28E5772676DF8F2F603F3442EE12E 1998A90868C39500AAA7F469E6533983CDB9C1772CA11F9DE5E533A30B97B735 B1A91FC71909D220C7917389BCA4BAFAB242B26455E4B7FC1882D68E408D25E6 F6BAD98F84664993901FB2969C4996A0D326D478B77B433C225A6B9A2EEE56C7 44DF603A25947377A93A92566FF2547760227C5341B4D49238C74A49D0B13EEC 603D7D071A726F9C6592605A2060CDE6759F7BFC3AA4471093516DDCDF6ED4AC 5B1BAF7B8885AF7C01A2B72C2207B66C15430AD9390B592058557DF0E0356382 226C92B9537DF8C4F37383902B4E1666689E85822C8A5A6AF3CF47CA12DD24CB 847FE32E805AA98B3D6A16622A05CD8D0028621906425BC18C4B451A43766C89 5E1163433DE64437A88DB138B0F2C9A5BEA6DF789662C3CF926E47886163DD18 5B9F3417B3A9F7012AE2CABED179A20E9AB4E6CBE842A2159F2B9C8553313CA6 893456631FCDBBBB70B1B167EE5942B49EB55122727406AE71B298953C01ADE8 0BA8733B658176A881B33381A8A917587C9F2B88639153CE90DEDCC822B75C8D BB2F8F03639A13E6F3845521A3F159DF384FCF569CA71C0498117EE72EE057EC FDEE060EB580E8B7B48ECA10C3B9FD2498D84BAC4D6494E29F972442300CBA46 3409FAF6702F99DCEE4EC5CF909042CBF6BBDD15A822138A17ED1EC002BC8288 F04C3B656605946035533D25767E39EA6A0B2D2AD88FA8326EB1A2B451142445 E53F1AAD06EF339B64B8E7A5E197DE9923679488F8672E8184C3562FD546F1E5 0BFD41261815597158D89312F84726037763E7AD7B54E9FF4F5CB020AE75542D 71A58857864D6CE66005928BD0882690B48342CBB2EDDBB054C53634B2CC6133 8AB295BA408D5DAB41EA92DCB6A7E0D00876544B886DE6859A7D237EC785AA43 C8697A8DE30554471E819A3E56B07BFD0D4ED8AB7EC6DEC31397338605F49C34 9ADEA23D85498859140F30BED171CB7B15EE3A219CB005BB4C6B01495CCE1239 F406E4F7E9F5841710CFB152E86B4A799AB159E16A848F8FEF7A13CE20C001C4 1EB2BBEE086AC5CD6B4E69D1A26A9F33528AA0D878E715ED91610B773DF0861E 4D5C6B74289BE02C99A2436FB52ADF8D6075EBFDB3457D1F47AF297AD01A6ADA 27EF7645D470343E54A9DA9EC009876C4A2724C2F829BAD63257802ABCA948AA E532CB4BF794863380718A125CC162CFDBF0790B4021C80912E23698A8A37BF1 F9C5C0BAD7D5BB4F642581097F297E0D46B536754E408108D84B05C8942FBA21 BD8A8D9865DC739E89710B770ADFF369E0494FDD2BC8A5FFFFA48C58268A401C FF0633ACD4D4B11D0139D3D2EE212789BB96EA732CA519D548B8A5276CBAD81B 41BBEEB2BF708CFF62CB02512BA2E0D208573E8F1763C9D074804808C980CFC1 10A94039F2AFB2AFB8345DEED4F6023CBD3BDC0AB624502958705893327F23AC 5691F98E44F59700CC30C983BF9BF750B95282441C5C3DE6F424E95FC8EAF3AD 62D6B488A7003326C78437D973C478F880ECD5320F8B6F8147B34D6A19390D9F 54F5579BFCDD05E9CAF808A8A15F4267204349016F6C129721EA4F4404CF882E C7FD593BB1C9128B0938D27D49CA8DF644A4930EDE2CA73D756C92F94CBB55FC A7617F9A94B26421BE596C97E3C476232C566E5128B5CE25899C3C8919E49821 48F27D5D50B4D3AEFD4FE6B04147FD3866ED46C4F95F0A08B5F4675F72D17DBB 77CC6DE774B2D2D896514D039BC0F5F2D6168A058A7225A0BE39F3814C32B1AB FEF343268195E2685C7B71E15A719480511FA763680C62C441F121C1F2F62ADB EE0615C2868B9ABF3C704BD1140112C944C79C1AB82E25E7A344C8CEA0D46FD1 5783F80C7C11DD39ACDF8B2EECE08FF8160E8B729C73F31F45940017E93CD600 2CB347E2B4FC92713FDCDCBCCA009EC506F399177FC5A0F8D01754256B2CF7E0 55E2F4A3B152E0ACA549FC3D982F6A89C9C616A0FC24D96BA1C04A536AFE5D7F FDF5C951BB79A1405F41A2FB509AE5B105333C29E3F1C6CC4FE578373EBC50C6 BCCB4300230143828062A77F90F08DCC3F602A7E8F6A086F988A1D4059FB9CD3 0AEC529D64D6761E641E49354B9A9E6518121D606DA1DA14D404427367C38709 B984BDC423BB4CC58469DBC4F9B7CE8E57F766DD524CD00724EF31C8572C0EB6 3F813B564FC18F0AB8DC5432082088C053A75C4A731A6B8D73CE1B7CA3C8ABDF 514055CB3A70AF2A96D63E98BC88960143A6832D7A87E96BCB410ABF78018D94 39806824612C45C0B934E7AF984FEAA181C12C05D34DFABA37C3E337C5B6FBB3 4DF64167C63459FE744746B59DCBA94790D8E356903F6C5EC28CC90362468ECD 93FA69239B7A90EC28CAEF102994732F6F4876B2C32FCC9717E47918FADC747B 1F101711F779FD5DF45C8B1A4E441865AB1D87E80A3024CC9EBB2D7F8290B6A4 E270B71696A68BFDF9D1C93B79C6C609F67B340098C658BAC16A5EE1EA1AEF21 D6E085F2B4DBEB8766D245C997111A92B9AB165FC30632CA1D2BE76AF0273E0F D8FF941C7FABF16DF2ADBE453E47AE9A1509309119749993F549F88ACBC2D99A 898FB252F0A88BB96EA8EF9BFB743ABA1E42B50459DD427175A7827DF703FBB5 8E7939A3916BD6186A56F37BB142C332764B3BF8B92F61774648E4EC13BEDFF9 709D3CB1F54DDD881C35869FB133CDB4646A05037277824C7A59311D04AA3D0C 15D5D96F14C8DA0BD589BE22991B2ADAD8761701565B1B9AF9C71D8D17DF553D 1B267FF9F75E0D6C7ACC49FFEBF0526684668DD1B3A060DB398992F9C7522F99 9417384E4AB2FEB323FB3B8D1FA2041CE3BCCB92E6549786813F39346F915682 67F6A312A33E62F2748832616BF17B30F06A9BE8ED61F7962FEC47885CFC93E8 A3487DFE3C97A539259CDF60B1A4C41D5CA938F23F6C9B798016D53EE94DF128 E4E73A7B0F01FB6B722968162D5A82D5DCFD06DFC635A085AA797F1AE249386A B42DCC3D621482BCF99AADCF55677F1DEB22E0A260426BE41BCC1B963DFC1D7F 5B398D4C8018A420520AB2F1313BA4D25FE28C2DD586053B1FD62A2630436256 E0C0B4DC7754568B0064738D940A12C580343B8CF45DB56E83283189CB9EFCAC 4267C82C3605BB700E5ADB99093D1DDA033F261217921F85C4DABEF290E79095 2FE9796EAFEF4890B4AD4E173075EC4534DD5CBABA373EB3D1BBF24CD3587660 FD7D006BB84C1E8A97F5E47BF084DDCB905ED833E2A2ECFD3C399F29ADB6B306 AFBABA185852E4FFD6988CB290FA8E40B80B2E7130DB1146B5CE35E060AECF28 187DBA804CDF12A0B82654B7F2E836FBD6EC4303D5AD26BFF7327AB45CA4E741 DE4731C7707DD305AFC2694A6E64A51DCB4839E9C62EDAB3351EF93990371FAA 7B2245281E2038A36BDFCFFB40E3866F84CBE04283F4BCA5D04E57609428F4C2 892CB93DEA53B4B1303968E0477139619E93E1EAC69B49E7CCE0E169DC7940B2 2F6D8AA883F3A23AA7B85631D5AF2ED347E636DB8CE83C7F14E5C901353E3FDF 697C060BC582E78E3E62C0BCAD1050B26551D21B67072F86D7D801E5210474D2 6850E3202B67873F5A83527DD88D7EA37EF9995947A0A570BD7E6EBD07BEBD64 630D3B0BA39C74BDF84F34D6AB254798A815A5E9525C7926ED2F57E4328907BE 3537348976E30AE5E7663C939DEBB3C9B18A85F52C002CC0EF494678B8031C0D 0D0FE220B7A9ADCD2E69500D6344B946CE04F636EBC451678DE5C40AEF97C382 BA41C2FEB0D13E237BFEE8ED7599FC698C895969C0737C4233C4F973B3F63E09 BA4B70659BE66CE6A34E1D833C0F60F34D60504132CDC5E4F2A1957737D219A4 E2C41A70C5FB47DD7AE4F471294003B6EFE1AA402AFC090E01A872113DD64137 982FBF23DFFB39B1D7FFA6C8E2905085168AB6A562E0FC6789EC59B0714B76FD 42D025EC4B5B46A22E9B7D414B3FCAA3B7C6004576E031BA7E6555679C080CA3 2BF40C855B35684CB9D8D6CFA2C36B1C04F0C2EBE3E91B21018069F22B617B5A 06F1951FE45FF83575661E42FDED91584B239C9EBC96E932F3CA8109F7BCBFC7 130FD5A3FE2C735843B4CFE5C60EE5F7DEF09F937900A795A781B69627D0CEFB 483695744758CB55E7C68311F5094BF928666F805D47CD30AAFDF4D9B3D899DE B7A5FEA16ECE4B9F34C64DA16EA56BC0D570D1A6DCAD13A348D5B14165DDF06A 2532900442348D65C506734E33035B0159267E882B0444628B8A68A3CD273EA6 96BE26B957BD00F56C8F905185C0F94AFD2F7D266EF13D18FE46D55AD7D0CDF6 A25ECAA6CC0519167FD9585B2A7CC7C49032FF93E06F53B131E0FF8CB56A96DD A8735A20199CBF4D6B5EB194CC7EF59865AFCAEDDF0F820878AAFEFEE6FAC059 526F5788FC824D330BABF29F28C3CC3634C60E3F7BE16F03DEC298EAA13F7012 443DABD55069737C9BBF454DCF01BCF18A77FCB84FE818F6A007763491FC6C6A F078717E42B1369FCD4F8ABFFA0A7C5752DF27E31DEC70A28B169AC0B2D47ADE 9C8A60A78D3A571C1CF36E1281B6D688150CFB8FFCC0569C9AF619BAFC14ABA2 81A4BE84A42B32247BB1D7D92CB59510F7A6E8CA3EA0EF4CCBC044E06406AEE0 0382182D14343C18A9585812E09163812403D668A21EE37603F7B50998B76104 7E9819C576F67CF4701736E3916C128A7B548B816FB58945F672684E1F7F74F4 A597270B8A42DB7783A4B58BC4B0406CDAAD64C7BD98825D6C913D79D80F2600 6DA05A97C518E2DA6D26A37041D7DC1A946CD56AD0CB8C6DF58D0819C09D219A 8411E0594FED8A00BE066A83A99BDA43A6EB6DB7BAE07259029BC157FA5BB0D8 3099756B42A2F3FCAC397B6C6AA474E0D67F17BFD95CEAB82ED12AF02020A505 B70131B326A639137258A58FCC444D3426FE0587A408521297F47579A97A0DA1 56E7F304EA883B99E560AC0FA811E0A2FE2EB7EFB19907775992D4448FB0A0DE 4AD04DD37CC82487E81F71A5EB07B8E3F3E4C3E2A04DE71401EE8488638DDE69 E24652941D99D6DE77554F9BF4044CF33E917A57DCE21070E4E88C7DE8DDC312 9FF4B7645961D392AC2E03D295FA6420B0190AD5E7CEFE7A8FB8B40A943C6FEC E895F72E1929160D0EE7163CB8BA46AB9F46AE362596F011C297457B10D47BF9 051BC41B259E77A466EE08C66610B0450187B270FEA9AEB9A51057461AC3167E 55F6558D1281BF559CC09668B7069CFA2C9917F00ED029BC36D003E183E805A7 A4130DB6DB057234704E9735408F8659CAF3519F1C314FAA472EC3BE153A0992 258497B38A4F16B67961844E7CF1E4B0637E38E1031D99AF838FB1157855CCCA 0A6A82DD423BC09F6EC30223365A89F6336AEBCCCC471376C4E74A5E7529FEFE 570C08B37B2E960264032693E2FD76F644435BE1155C2A3FAB40A4F69BDAAD77 378A0777BE02DB97BF6200A3423F663202908E88FAFA2C6178B7ED65D182D4DD B9BB636A8D6D1727C304F2F36C5F1C50DBAEA96BA7079D20D84B4FFC26A1E631 4ACB088FD858AB301359D555D6560900806E2633DC41EFF903FA2574F603926C 47B74A598B04A03E03CF6FBDE8ADFD4AB480CA8835FF84AC77D5708999470CA5 6B723737C43D56AF8DEC794EAD4B43069AE408BBE843622E488C0E2FA1926709 F4E1390FC739FCA366B552F1F7126889FA3FD02303E7410F3E8504A79F18D410 806D1E20E7241B7759237FDE279ACC56EE7FB3D7D6B3AFBEA5ED8066FC526090 B3C1E7D8123E1B939B6330852B69980910C84D57D58640B7481CDB75496C8040 7F863A3FA81362CE2E8522E1857455697CDD15E7C4EDFFB3435562A957526E9E C5E076A27819B108417CFDFDD52864984BFEB8D96136B3EFEA4A1E57B84AA29B 08E7BE55EA267A7D613FF38D8BDDDD07FA43BF3BDBFA3995FC8FAC30BD8BEF67 F8B572E7E972AA1DE1058E2BCAF6A6A155F451AA398436AA5798A13B95963EAD 66A75A37C72215CB172ADA573E1F24D27312355E452879C21586CBA30161AD1B 6468AECDD9D0E2293123293C80227527B3B0F830B1ACDF3536961AAA5601A353 EB1E35BB1D0A93D13309B4ED3C2E269E7F9371F2F7AA34197E4516D43EDA99C7 E79A7DCD24C15B469E95677A74CF034FCAE91D016918E752875E25575A6878BF 63AA29C377C6EF3717E7D5B7408A44FAA1CB8B630B5BA17E2F7E552779AED502 6714A8740BDE5646C08323607EC198D04F6E265AB93C67F4AEA44515226F10D3 2E93D3A2729185DE41E00278115565D092529569F7DDBF97C00CE386AB6E1738 A1C197E40BCB26E73AF481770AE523B8DBED366E9AA68849087D5217631359BE 127B595DE2CBD9AC588289ADBD7EC6293EF82B2E6DDE4950BBE74A5CB5647B26 CA37AFC8E4E2C2D518A1E8D56228568259704779356C9FD4DC48D53FC28C32FC 3C97E6833AE3C9EE7AD45CB38CEB19653A94B85131343EAB8CEEC01B77730D58 075C925CF28D86E65B8A07DA41E18D4CAC0D77E695BEBD34893E84CBB7269F2E B422F7C060CA005582DF02CF49F69C962F34F545FD7EC1F33290C39145119750 3292DE1361F09BAC7F2A55506940C2816E71335FDBA538C68104B73E0FF4697E FA7D65FF1D691B96BE382AF92E6DF45D3D2374C7568076FF76F9C23AE3DF4D8B A7B2F416AAC3FC524063E7C9A4B49BD303B19F33D1DE4B6AE7EABD510908AD6F A8E0A18294E5C46FD41193DF4656F30DE28F08D81903CE40D467637694E1B383 1C4B1B0CA895F8413B6E686CFFAEAF61C6B7DCD846DB8A4E715307A7356DBD59 86D5619610EE086A39478AE985F33D170426508AF1EA81343CF615EF3E117E2D 4DBCA2B03C4355A59F3AD6F27EA0A5C05B10CDCE8DB7CE7771FAAD248F59C2E7 62474CC2C16928DD36590E4CA3695003BB960FD5 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 49 /one put dup 50 /two put dup 97 /a put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6291 4663BAB0C9AF29F46951712C354B1EB67CF3FFF6DB1FD83F056774CC7F2283B2 49B075479604C9B305D9C4587AC495570DF9C4F05525921AFF53D81C0D5AB7B5 6F00251395F7675345C050C6679867C964E82EE6981E93684B0B28AEEE03B79E 4C26DF3A514E97F57A397BEA4315C09652254E780916102F48220688AF69BE44 0C2CD2F43A576F4606BF4F1817C78B7068368AE36D593EC32F0C344B0D728A55 089C518FC3D903FBF3FC98EAC7567224389B666D105516F48B7F46FF5A13572C AA7A87B6AD749B9718946CFD1AE8B6D3CC90CF6A87B9B2F0C2F56D5FDA37CB61 6AC4D8EFFF054CC016233A437E615F13A2A393CF269C603D2D57683047A0685A E19032F5857E84E9DF2D16FCCDCE2C3679DD509E5A6058CC9FD78A7846017FD0 178C712CA8D1B9A9D2DFEF19887D01D19B7C3AB4A02D5CFDED33131B7E46AB35 3091A04328F530A8296C6F35EFA6182ABBB64C78682160034BC4D9F68EFD6000 0B844CCF122E632068853944E646E33AA88CB79B127254FB45132447BA9D7AC4 219AD1D5FD4D77723C4026768A051FFCF2AF1B7E22D2D598D0BB54669B0B81F6 E010506C1FFF5BF04BC512CD766A955212B373C41EFA8733798257736CFF8B51 52BE941B6791353A134E451A83BEA38C0A187DDFD23C2B7EEAC1A2505D0355DF 840C695952357E8780A6C9F47BD189EAC599A7C278B5E1E61467EB671953C2A1 C71E035F3C66D88DF56CD37A37A400BB39D5CFB15A5007F9B339A5DD70ECA10C BA6B38B84502FD74512D99E4B8E06409664C7523EB035E6188DD37140CD7FE55 3878C6AA72F2065C7DC50D34DF0308A2798BA4E69E96AF19B916002EFAD38731 EF1E8CB091AD21DBB2CDF345E5833EC2E51984A841B3EF04E0AE87D470288B7D D42BB81C4A732FDED84096C947AC915AC401AED151DB68FAAC3A721833673B14 3F7BB8111DC05BB7F707A9F57ABAD8B53337203640BA33B1689C9E431991EA36 EEB231066F374E62432DDD055189844E5695469DC4511CFFD616FC4803C864D0 873874A028907E5D0B8308DB5A19C65348926A62DF837AC247E7D6A55E23C696 5313A67FFD96DE214B403B5A8CDD93E4CA1945C89EC9057D0456621EFCC1C42F 61E7C1DBA1F6EDE6A4BDD6D319C6341059F62609F14EF9E82C965D20C44BCBC6 06B539365913C49FC2942C94E574415896FD459F5BCA2AE963891433545C5A11 A85AE5ACC8E5995CFEA2482BD2BB3CC844F2D3A83821ADD3724A180D1F042206 00581E061573D63C543AC5B9585B2A5D201A84A3434595C18761BEFDD00CA4E7 2956D4486197F5AA7024E5FBE2FE197BB6491508E89A67574A63AE346019D4D7 D4D23DE0B9D1D544ED82E0068BEDC5CB1E953204D731D9FA5AD7E8567E10B3F9 F54F745A44FE06E6B2CEF76DCE87281F2D4B57C343844CAC894C1E3074873B21 CC6DD0DDB106CBC6FF0DC13CE3132E9B86DC5DEAF638C0B240151ECC41DEABCA 0F1573C9B6A83E176FE8B160770AEB16E1AC0BE350165E28DBE259ED7BB1200D 83708D25774547C2D86354CD161F8DF70140EEB8DFEBF8B916005C5A5D3C1D59 6FBD8EAAC2A93F3061E700D2CD04E803DA26401743B9AC7CCBA5F99E88E401C0 453CBFB8309877E1003A65A898AF76F89C54FE4D5A4B51F07920967757FEEE7B 0836ECB7F66E922DAF520F32D9ECD0B83CD7719CB95579B6FC27D6E3E7DE3E8B 03965C6925CF9FCA4F06EDFE9EA48244C7A315B866D6B3F5C767B2B15FBCCD5E A609DB4FCAB2C2246D320DF17D60DEBD6C2E78FF32CB7D120E9D1251E0866D14 8B393910D9FBB4225C1B384BAD153C2B1FED53725B3F4FA46CB6DB649F6F1380 9ADDBD04FFF2A8F3E53A6AFD44A55A1C394E2FCC723EFE4A30FE24963472BC9A F349542BDE1FC7CE25DF0484ED3A1A344007FD9BDB04E863BBFB60996570557A 71EE4C77B244331147C5A70059A74064B3F2556E0B70E3A4BE685712379C35A4 E616230DD8C716EFC1E318BFC8770272A3A7DBA0E0EEB60419207B6B2855124E 70575EB86D2DABC9738141D3C2DAA80F4488F1AA94B3F0FAA24683F2370B1ABF 6D06D5C0BB9063171E0F8FA31D56A9793738B7653E05EC4D5F136BA8C6BE6256 2B0B79DAF5F989CEF8E5F0F42888D8EC9A32F2074DC9174776DEC9C3166E5B81 F44F7AFB85FF7F7E244D3D64856D71340A13B267D04F25CD68126F443E1215EB 3615891A22B8A27FACCABEAEDAAEF7F7DF4C0BB15C1B652ED6033A76C4538F10 324713DB4683F0A7C272895A0D9AAED5BDEC07080F9F19D61934A6B344216873 A618463B816701EAF3F507FA0C10FC3BD12A1118E5357F2C502DD25315363362 D0FA6C0BC28691C752DF717A651E8B0FB5B88696BC3ED7E23020CA9D6BD8D03F 7292E2C07399C40B9EDB7D161908BA250227EF489C16217EBDC6C3465481973B 72146FB3051DF328ADBD7A98986E7227821E2C24DF994A24884266AD2BCF0AC6 B36A938DAF8E8A40AB859290FA078CEDAC6B0210A181ADBC199AAEE6793F4F61 5504E4CCFD6DCA48F246F7F969633C70C5667B663E229592963ACD8A6982C6F8 F52F5116DEEEDE61302F89D92EE1CE0B1BA22CF9F017D7747394BC2ED5BC0141 6B247B07D0D2CFDAF75ECFCFA5D1CCE76CC9FFEC345B1B3A34194EDB4C75A06A B03502F7702D368F2BC048F42CDD18829CA3D96CC07946DB257A3580787A5C40 802A085E900E4785B1B9081DF4F0CC55CD292B034B4FFDC1E8326FB3170653CB 844636627878DDFFDE6CD0F6D8EE3FAC7AF79E03C3238AB517874DF858BF4D17 971BDC9EE0152E969BB876784D35317FF452AE220819D1F48DEF67D8F296735D BF445BD8815B21C3D9CB5A262DFCE53AC150206B32889B1E6A6C48452AA56EE8 E66A7F99EE0F7B5AA66109DA632FAA425646350E58EE8D9FDDAF4DAFCC33DADD C64D2A62092406E28C9483DB256D0BE9876D3E95F2715264B842193BF2860BA0 98A8DBD3043742744C8C60E4AF996C733570050B09D1CDEC63CA7AAC157CA349 B9E6188BA077DFE2FFAC844F6B6C3152670DB3C7FD149DDE67054B869A6EB19C C8756AD1987CEE857262450FC870503F54A0B2A6574F9BA63F43B72DE9CF0528 52BEE0FE270AA0D2E6B0D87B361CEFCB7F4635E4ACB38311428542A954C551D9 BF33B8194311C20FA0D97D411ECED2312DA77197E09239660AC6A9465B06E3A3 2AE9EAACF07AAE6D297DA00E3A366B0465E48117600936C8EFAB79D9D2A156E3 EF0EEA375EBAE7DE404ADACBDBB45F830E8BD185C8348316EE978598A80C83B7 24F89C1BA0BCCB2AA96B71D51BD66C3B87F58F9951F9872033109BE5CF1B4D68 B17EE96C0AA378FB7E1163A6F6BC130AFD2666C214414383D9E0EBCD993C7A32 0206A4DA1040CBE19B348701EC6015EF37BD273A46BDB64CDD80927BCB9D7B49 B5F7F69DB66215CFBAA85F8CE86B788520DE516F36F7ABC6AEB7EDAA268F8523 6008CA78284EA582E23C0F6E09B8C67C24711D65FC2C7C3AF48F8630D6AB7516 CC29F74199D60E0EDE2F50B3A1CE95354CBD122E1DEB06128527016F23E8696B 053936A66BBEF29330F33D578CF456CC65EF39AC87BF10B0C677C4E6D8B06915 ECFF2EAA9CF67139BA9249D581E9243AAD3E59FDAAC3B28A87758412D6F5D8F8 F79EC4C47A045BA16D3D6AE0F9AFB29C7A20DEA61B932FD7240087F64EBC6379 DC0E3F1DB7388853857E457D3B09536455528047E4DA6AA7938E3F656986B61A 21E73D3773CC66D813DC3DDD01C5E60E3CC098764E3C4EB309B6482A10F2C928 B10AF5138C4225967A8A801F0DEE929E63B1A16FCF9A4D75723BD63EA3458FC2 E3218E41839E091E134B655ED4049352A59B9BB7447BE1987ADB2C8309ABC25F 6743C6CBA2C0049869BCF800838E8356B5754274ADBCDA4F42034B5F49B971A9 E2FF41AC8951BDC0BCB23F90919477D227FB3DE0C205C53C6D1D4A995212AF25 06255B0BA2AB068CCE1685842774F1325B2594DD2C59BF414C6235879089A789 6AD3DCEA1F8271CA3F41269AA934CC3A60C25A91FC73FCAA66D7068176C8F777 01002FEB2343AB559B310FC5ECAE480FE0FC6A3D10B6037831852A654E2C326A 4EB26FE7155EAE63324E6796724B435522DC5935691F11D0B1DA1040F720768A DCEE90219413C6358C7A602B978339B22103890EC4ACB3425DA4A1DE274BF619 281DD83B9FBFFF431B06164A34F15CE90D76642D0587036FBE526ABFF1FA0694 526C25F271910751C5DB07ACB4429059B6B9C5644FFFE2C622F5F7B6ED859249 DD3E98EF0C0D6E0DB6CA03DD87BB9331797889A65C4708FE9A696041FC5D1EBF 107589B49CF9A04EE49AFBD59FA7FE9E3DAD2C46F44F6F54237302E498B80C61 A975FFF794971CB55252D049E414DB833A05BFB0AD2FF340D73893A3286A17AB C4ED27AE133D7FFD9FF0F2C9B96E83E566EBA52E5626CAACC6A569327C4F74C3 ECF1DA1AA4E562073458A21785766FB65F487CB2DB656C438FCD2D6D33692FF7 AA14958C5AAF35F8056304978BCA5901BFF9879441A81CBD9C270230A19269BF 110EE3382AC29404412E2B975D6C11CC5AD1825E10F74C632A7F54834C6BC433 0EA2A0B303057D8AF4C222CE233E408D02E0E8DC600BAA5A6D14025CE0459A34 B57B8CB8AF49A804EBDFED5276AD608FF1C8A9F299B9B5802225ACC1016F627C 9F457B3CDA742A6EC8507782C5009DD5F26090A1FB624186840F174609517773 DC17E6EF8DEEBDABCD84172AEAE450A585EA54FFCABB66E652B885000A457D7D 17B159385131907E7B82A978B73ECE7ADFA85E755CF11D4123BBE0991BB733E6 17F193AB516AF3D0D2A17FE00A9B3264953206CE596101D32EC850F5A5890CEF 00C261F646555B7BC183 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 14 /ffi put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D 3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE 4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B0B12D8E476305B912 30B51624D4605C45B514473F327DC3EE8BA69032A95301CF714F225A92C253D0 D943C80B9CD0524C5B87A8D052D2E47A9725EF869D3B89097CC13CA9BC695FF8 A9468004450A76A13B7EE78A03CC18917EC44036C2DD237344E594569B8F2DDB 21F7619180B8C760741961CCBE54FD6DD07C4CF73B346099234A1EFFEFC88574 6324E4232BA18A38EC9F0B780C298877EF0AF42C1EBC2EB52DB64A1E1E352503 36AA29953A073B864FCB31BA938A4163D000A159ED4D345331FA1EB4009CFF67 1D107BABA6AAA48075C6C50BC7683929EC146594E55B01D4F5B582328284068B 2AB05CE92EEE1DF4557DFC8FEF287CB7F961F4F1828EA48B0ACF5C63E1EEC8FB 6A0EFF132268B7DDF7B465D4A21B05993F4A4CFD168A700D04A7303BC2C00391 392C3FF97E770E6FAFFFE501242B20B4F7B6C17331C64BDBA3E59695E176CC79 E7632AC6D2E920AA048BD1EBCF9909D8C314D2EF3CFC5CF88D8570BAA814D467 96D86CF4415C5B739FA6FE7B4C228F06268D28EE33381982E7B005C26D2604B3 AA363CA4732B9BB0E4D4EE50556D777258A7BC232087C9F00B0D5EF70270B40D 3071E14E4E5AB5AF1C686C5A7C268D36A0787DC9300D4CFA004F89A73FFEF780 E6BBC957E31B764159C3ADF752E6E1A6C3B5B855F8A483497A347B601E3C8DE0 362D76B715916113CBD2D3765197074104C7E17B87670CDD5C227A1467BD678A BE442F196034B02132850CCB77143C2873447FDB8767C462C63916D9D4A13198 B7910E1B274B27644DFB2E8372C8CD55E6E2AA5CA952A079E1E6389927495921 CA39D69ECB4DF382FD2DC213EE382BA1A48CA886CB6AEF2B0C50CAB47B1FC40B 2C95E13190C92480439E3C56188D162C294F24987AAF4E15E8FF7ABBFF2A12FD AEB884FCFFD671EEB94CC075B815C6A45549EC23DB85923F4C37221641B75CE0 C5C8FA8403C2C9FFCB66CC74C5160D6C7042DDFF33A954DD01C8E21B21F8F364 F6FC735507D0DB5F68F2D8B520AAA7E0F1D503211339F9466006E9A148F39874 A1488F1F0458409D442D2BF5935A655AD4656A8411543F58C63DFF9C4FE56256 7F9F876B56BEB208F9DCA363D2E0F7DF3CCAFD5F9674675BF622CBFC2D1CEFA2 7A5323971101D3641E99D84197B00D67436843EB9CF74C273062159C361A07C6 E3F1E0E4666ABFD5C9AA8F914F05D02EE1906FCB66E421C73243257170617FEC 2F02D5A7F3347CC0D290E52FA815C4D5D2A16A4D4A5E0B50165B0C5C77B675F1 0EF343D70813346EC4D7384A9D9A091984AF29C810F8C3D4247D37F91C5DA967 747890DFFB25E67F6FB766168487AE8BD8E49C55BC1B68B831E3F510BA1DA3A3 9F810B865FA98AF89696CF7489BACBC1033A1C929023588E9E03FAD6D901DC52 A2F5EB74DB679A16DE42F7B47BCBE16617EDC7328A2CEB2C23733D98ED753C66 502DD2FC75CE2905A429B5B56C62C1C0FCE17144D96E0C615E7FEA48EFA05D9D 344ED266BD96C3296D6005D289228C62D572167E369AC65724E0E62AEAF608C3 423FD37E586D41B2AF9B10E0A36312AC1A6F61418BEBF528932FE61881636837 47CFEDDFEB25F7FC156AC7D6E78D608A91270FF6D1D510E8CD61C289F3E7960C B6093B333A0CA3CB8BE51107C5C1C085B3CF6D6F61379420AC1E5D9A3FABF084 80D6C719D93BF74A99D681726C81F9F83949E06A560F3B3905C0766134533256 6CEECBBE3EDC220193964706085526386391260838C2E885C88F882E29F31F69 149CB1B4B788BE82AEBD32B5A8F07D1F537D85077B4BD1FF945EED4BB41B79FC CA0B25D1D761129A6043D701AB1F6655C06DF7B0891C3C5224977B9464A6A794 5FAC6547F7548402420976CA3A644E5A7CD7F64974B71872B02756FF6A135EE7 BA60B9974A0A2CFA4E46D91B929A3A0DECDF44C39CC06BC2105538856718CF59 59B1D9BD88735ED4D83C17A67031178B43CFEB4C301E551D708F5F08E80E5A1E 5579CDA06C9902E412052CE7714A8BE29DF9911F556899F819A7FC2565522182 20918E8C476DFC00F79BCC4248BCAC6615891C3115B30A39B365044CDA0AB26F C8966DB46FB9FB7B7BB37C48B7CC4852C8C05A57D92ED8E6AAE6EE5A60BC81B8 C0B22E5E74610495094F12BA6D60DA3190C4CAC7F46D740005264BDBCDE61FB2 50B8DF1CBF41195E616F4595F7860F1538363D529E3E3FD2D408B56CE034521F 3D9AD6C30174D0AC1A9F9151C8C8DB6E7624290CEB82632679BD0A01EC30B3CF FCE72F32F4443E137EA554CDEF84B62CFE21A5E8BFB2EE52C87CBD603C8E0FC7 35A9ADA5E49FC4C7E3F1538C84761186C045B9F11074F8061F0F4BE061D22C85 2BDC140F6CCD858B1A4E9AE9444B4EE3DAEFF4E3760A8B851ED3B9780F990595 36210570D82E9DE83AFB3A20D0D955F69FD838B6F9F785231A84D8BF9F434665 CB62D518CD5F4623711E022DF76D2CF20202FBA15A1D1070FEA87D6BE954DEE0 370280ED09237334FCA7AFB1A0CBC9A153A25A929BEF57B202A5889958A9AEDA 535781A11DA8E2BB5C885BCB83053BEDE8436846C7B54B41703839F861F95D5E 3C34C4DC8FAADB39D20DC53F642A28B92D0BF1B02876E348B088AC9B2C55DB06 808BA40658ABE50D6956C9B1201C8D3D97CF9ACBE1FCDB7E7C02D1BB8D87AE61 2902D77900C11D1DA6CE808C425A7EC0B31BBDC690E98A09AB656294A1B17E00 2D12DDCAA5E0F1B44EC9D7CDFB5E916045F5CE852D3FF3E8D421A11356EB4392 F7DA22AFA6C18C7F507F5D8892E8F1DF11E5CC965A61D732F12EFA8339951645 CC3AF8C3EC88C5B372729EBBD3530439E0E8AE43B43CF57A5258AE8AB259EB71 9E1F057688B110D4177CF54B1D56D2EAB6B1DB603D6536EA9B9EA11DD57E7F3E DB574B05043CEDD701DF8C0982EE726187EAF637ADC279BF7C83A244D3EA9800 F9797A4D3E4D5F6669B49D2B37CC9BB1C9244B54DD62A5C4BE533DF46F618D3B 9FE2203DC6C75B25AD6B49B2A760D3604F156ACD80CF5458FEEA64E243B2E527 E750720E97CCFFE2322734D5DD0FB1A8FD8FA77AD87AA1C8EA1B023F70BCCF92 624F9A6B0B27B5C8A5AD21D8C08F62BA1738359A4D78439A7A580D605929D6D7 60790297E11930F43BA89832A2D351CAD0F77AF8BB70A2DD5DEDD4B34FCBC714 C2BEA2C26F768EE44D27F39021F5AC95FEF199F6ACC4A2F3109E081A3AC7F42D 1767C2A82683BED075A3293189784AC8D12F17FC3C15B83915E0425926D6069C 16D58DCF97B1D8E1021F51C47BDB1286B5F9CB60A2B2B7D3F219F20C8651DCCF 80B30FC5B20DD6D887BD571450A3A005F5980E90A649DEDD316A452589B2BBA4 BE8625C231E5D4886124B24580C7795F7B3D063667F400C18150A80DEA255943 B9BC4E1F0A0E5F5BFEF9F7322C836AE892F91A4B3291F216F99654C54BDEB5DD 87563AEAEED8D8E65D1B60795F1011C3CC63B8FAA15B381E04E1FBC2A5BA5EC8 B76DCA2AE3686F7D71CF0662338C5E468C0E8155715EE8DD963FA7C257214DB0 6E523E1370D0F14165FDEF1C9D2F9DDDB4C61DC764B946DC40BB897E8A0BD7A9 A7D9B684B5899E1A8F4CF9FF67EE19B4FCB61AA4463C5F06309C7B10A131AC21 63E04A69A223818185F44D48ED721CCCD98737DF4BD3CF6924C6EF30372E9E38 22B3230829B054EC1B8B42D29059AB5E706E5EBD6CAFA57502005BB170E5B471 8BC330C11C068849A61C37E5AEDFF994D9A53E73E12D3F7BF63CD6C435055F5C 875056658B8141B78E3E5050E3F8209CEDC015445893B5B798DED6777B98017B 4B9766F79E20DE51B4081215A072BF3BFDA0AA741D3EAB7F35138C2B32982453 5681A66A99A21F0663C8B559FA49AD7B854BD648335DC7B8F72EA85CEC66231B AE8F8FA55020FEB0FDA90055CE8255D02C0E2FCC829AEC8EFBAA08071CDD03E3 9FE8C4F28DB460E0AE8514E319ADE43559B190D9104C78DEB8DCD9E1B2118746 3DF257B5DA0A52F0F6F0F70352C2B1F851F14F3251A2CEF2B15590E4E80363ED 652CEA14D0CD2FAF8CD0CD6A7888159FEFC0A3D8978F49D85DC8BFBF33FEE7B3 C0B040618510F483EF114F46A509E86D08D9470B9A6293083E6FBD511C388D8E 5A16B5777FC9FF933366757609163E9567B121906BAAB48B1D3CEF9D0B1028C2 18E9B6536DDA27ACD9816D2D1D5571038F936FE496081B801485F9CCAFC7EE0A 34D2BF741863A5F639D9D4E123EE90AEB355314E4E38F3F4C243CAD3112A0504 48BBD089B189203DF7ED4933819A0C1D57ED8AE20B2B15F19F8A0CFD927CAC50 116B04C25A4E5B20C4C5864A8DCF8CC9BDF5CEA59D1EC52EF62CB642A8FCF1C9 3E036AA4DD6F4ADBA4F8CD013C622F831397B8640936910C6D1F82ACC6451C68 760E14BF5B7845762DFE0037BABBE5046C5F3CE3874702EE51D1A463F3B86C69 7C758A4B1960E1A796F07859A9B1860AE5BC7D5703E63A37B9334D67613241C2 5B606439A6AB29FA7386317DB876D26FAC05188B4C59672F2CD9A750A0E70CD5 AD69A8609AB0C78F625E7749C770391D5426D9C3CD1CD7D37445D9718C07A37B 5BECECE3E6F3147731D5C12C4946F88A7C82500F8C495FFA7E2FFF6A9C2F0BFA 8EF861E6C369C8DF969B5FB0F02CAC74E8E080B16BEF1CF0D1A81E90FA1612F1 FCF086961FDD981A8698FBDCE44A80E4290B7B553D9F46BDF6E346627437903D 499C80A29BE6E7A2C03D943D23C41F1B85C92FE922EE3A3E0601565564C55116 17F01B2DC9FACA12AC59950EA410D5533B0C31D89FA68D07E9FF1139554C7920 FF84CB51E13B7FA3EE6A32DDD9FCC192B576A871CBC9E04C5C66ABED560AFF24 6D6271979BC7D04F7287E32F52B1D2DF60B7D7A53A7D776FC36D70E9C6F54E97 44F15C5ABF2547DB40EC913EF0B9597A721563C3664E74E7283E9030CAE36B7A B14E781BC772691347ED48EBAFDF23EDC452EE8A118A840A185B7C1DFB7F3AF1 A2D64EFBA1C9F662A35F3B46CC8E2D7E7A7F63F9BFEBB6E4A6DB8FF0BDC83E9A A70438435C3B8A780F7F92578501656FF963ED66A73921E014A46385450D26F5 B73EDA0630201BEE50325B0F76B55E77BC55F4401251D083225EA5777F42A7C7 748FAE7C22E6A17E04BA9F6D451B35A63DA6F3D80B0365E159B3E993E0DAA242 2212784C9651F9A0766F473DF743748FAF491CB69728C2473ECC5524E0F2997C 2650BC1F945EDA4CE833980E706C4D413F7929804A0B1D182E26052876D6B836 01284296115233D90D2D0FE83317D4AA206A67207BD899DAC1D726C937A34193 F0B6EEDECB391C6434144275295014BA4283D4346BCC495AE3EC6EE9C4FA7711 BB6004D39D7BE17FAF0241F2798C36C451BCC4227899837FC244BEC3432ADE1D 9E4F47F45E9B1D2C832FEF6896C92A207AAED7AA924520D096F983D66DCAF476 83A2F6F1844E7EC5195EDD3E5FBD0FBAABACE5D13BF754BB2B0CC8FC633D83BA 3BB65BD9837B109AC1B5B255298E6B65AE4CEC0FFE24DDC3D1883FB0D6F8FE65 94D0A898278E0313303CF7DE2E37BE0152A1D4CDBA04ED61D54555B1B107D9CC C08C89BD2A19050191867EFAB8FD582226B03D7ACFA97C6D404BF99F39EAB7AA 9AA9397B57CD7CAC1B338C21579A593D7DE1241E6F77366CAB10C3FAA772C663 BD1051F9D791A84C35196E74D28D342553D344199CBEF83D3A6ABF05A4779B16 EAC70F7CEE167132D04BE5F56F8F20927DC3C7A20239AC6AAC2B57BBC83174D6 25F59228ED58B5D492B16ACF3EECA04054F59247A8E318B6F5A09F0A8B3820B7 2CE711056E3A3ED9300B6F2DFE2C665D7C3351D40A779FEDA09B406E804BFFDB 9831478F237DAF6352CADC53D6AE85A14E5FC7C0C1BA4009FF962FAA52499506 C6F3C18BD4C13C1272D844EE151CB5A0DB0188AB7FA2DD47A6A2CE8554A7CB82 C0CC30593F062451363778FD5A8D39C60835825D63CF3BEF323C8CBEF3055F61 294FE558C7542977A3C520DE15A984C6D82041E06C356FD7BE75D601CB95816F F05AA3F53144B7D768F6732339FB8E6A068F8E021C1BDDB26572385FD1B3794A 0E1C780576819CA271C78010D8416F6B19912227CE781CDF6AFEC335138203D0 ADEA0617451CE0BEB024CDE135922C72FE0932F10589F0FF9F1DA721D32B1583 8D032EB9049E4AC34B3AF16C4DC1A85CDD8B047035ED7D50CF8D9D02621BF6C8 2CCAA23DE753C7B0B8818B68D625F44A54689C0B1CA36FA7C68A567FDAB813A1 8B34DFF1300D5E42067F51ADDF7DC9BEC7D4376D304A417741E17AE427639676 407472CBFAABB5AB329AA7CCF130B3EC6DD588A1F44409FD239238B1A8884382 F04198DD7C5DC5E2288FE0B206C9D9516D468AA6E2B1183E2E906F9DE47C9209 578321590CF839C9FFD5FBC3393FFC75322B4E703EFE69534745D579B74AAE3A 2336823D2DD5F477F39AA9386736476F5C0B1CB19457D44AD6417BA503475D23 51A99BDC97751E7172363DB670AA50D21920E98BC1DE7349EF8B8C1E72CACB47 557B3E2BC30454F75CCC41B84A67648E894AA0A43C5A2BFB5BEE8D0BB07910B3 47EDA7B547EF357C2553933E0BDC0F05D596E4C55B33AD63E924164DEC1934E4 58F937DADD65AC866E4EA2BF02D36C54AE3E3727A8FF9F3658337D2BFAED5908 5BE3C1F4503843FFA47C83B3D9CBF1DF2AED7A6B97A7E68CB6B9E5420E70C5C4 36843B29D902584DF95CCD8C34647E87E2335371DCD89E495A92033BA482A62A 0D2D3A7BB06506E42A4926CA0AFF80EC8DA63D7B73E8A04B25312F03251B512D 76BBFD76C1F5207FD6A8E69ED9BF063C7DDD0FD4C6974BBC531429EBB55BB715 0D08FCB2F80275425FE42E87AEDCE78D2BDC07CED8BC49D260D1671BA0ABDDB8 98E0F7BA7EDA086F4E3585157A71CCEEA35750B9DC3195E3396F1161EE1E1D25 E6FE6E0B022A9625B5866B8EF59DFE5391AA7F033886402C654F4834F4E43138 EBAAA758DFC8C27356F012F4D0F398EB8D013678059D8419C2D947F3FB2BDA1F 70A5FCB549BFFAC288ACA7051BDAEA41A4AE0341035B4365A63C553DB80CE429 02670706A74AD397B49AF535067EB07CC3CB86704ED45301DDFD5238E7DF5ADA 8DF465E45F7514D7A0BAA202305CEC73032FC09294480796251045AFBCD6B081 8EE4481D29E817C7DC32539B364076672596DC24CA8AC45D60A8536865FB475A 3DB48E98C675A8BFA39792AFD17B5251D56F0D5C27E229DFA75FA3560E7ECFBB 8164E4FF15421846BA40EE13146A316D530287CC8652B58804B95C53F6FA9DF6 F84DE1E222C5D69E45E12C06C97E672D456E21B95584F8371FE34ECB0E6174BB 468EA60BB0C06B3DF48D996D9083F70181799CECC224FE60736CFCC6F246E5E2 EF465A6B1B411ACB7474A59BECA5935DFD15F5C18160D4AD4DE9767D6213C35E 08AB18F834CAB32013AEB8C634DD6382D4C7E49F10BC5113214A18A5EB31A0D6 923630A849327C1CAFEA3B8F5EBA83668E03EBE084ABC1A4C1DEFB333ACE0696 EB20FAB6FE6E61D38457C8E10D8FB7595C627E8FBE2D5563C4D50A6E1F3DCFF1 F5A2DF1A62301665C0E44C2257B4516B515FC995A52D4DBD54B3D4EFBFC63A8D F07C27065CFE19527AE04A9CA14935B7399E30EF88D2B63891A58044D7CE07F2 916EB8E9C65388A73956B3D82B4B41AC378B4B75AC304A32339CA7701636B6A3 84254743EA5F8525897D4FB054698031D1FFF4C971A10440212DE812752425D1 E71B02AAD20E994357EC8436BF1B74F016DD41D6B1F6C1578E4B261ADE5A7B31 2ECA2C16294C9309F200AE0AB5BDAF2BBCB3E97B0FC5556BD8208E50CDEB88BD F137D2F72258B6E41092F1256CA4AD867338DE757E29298F404FF94F247A805B 40524952A6D8581F065B11B6324F9F2821A3AAC2E7A583771EEE640F2FD0975D 299EACAB2A99942480DCCC95BC7CEA846EB1B2423FCE304596A2581583450455 CD1D56843DF8FFBA723FBE4A4AD8E539828BF48BFB4D0C4EAA68EADB81A2C58B EBF89CF83017DE3382BEF407B493FA5EEF810C740C3C8B646292AECE9A5180CE 07ADE6E6B2935B90BC521D3ECBE25B43F14DABCF49F378C26CDD2B27C690EAE1 E888EDC3C963F55F1AD13C8FBED4BE0BEFEF31C0636913B47205DB1D0DDDBEEF 4441A3DE9825160AD57948567EDE8660567998D41A0AE2D9A9B5BD4207F2A0F3 EE82DDE22D16C32A583613E0EC2BA331EA91042B8FA2865A8A7DE1BDAD0B6D33 3DB1409222AAD20577ABAA7A2DD6B302803FC7B4244ACFF725E37CB5926563D2 82AEF220424600581E25001DE71E1385C9D690747BCE051539AB8B03B2EA77BC 39B27AA8F63CA37E3886C50E125D3886C5132869596039589AD6A8421C8B7AF8 B0EE2872AF974A4B779F09DC1DF2BBF673A7FB32BD1BF3D8D99A94E1BCDFEF81 37B2D7BBB80ABEC1EAD544448E6A49DF730A1B7F63267C9DDFE81131867F0C0A 8D2B37E8B0AF2A6265C57CF9BCF98A01998081E7BBB94DD53FCAE52F3F5010C7 AFB011FC6FA98FFDF173FA0F935D33EC3DE55890BFAD217870974C00CBBB6C67 1CC558F6FB2C30B28B9987721722A27EBFA924A382569E3D7C47A3220F21EAB9 1011D71B104BAD1A47CDD9CD64487A8E9721CABFDB83FDEC748EBF0D08E77CFF 1A54D0B3ABF4024DAA403436C9F6CABF3B6CA7089776ACB183AC01C8E7F287FF 9DA7959C4B7D73F00976AC5C3E4B810DBCCE732E4C9ED9EF8006AFC7314F0055 FA3FAEC780434F273ADD7D07C2006E4B755B24A26341AA5AC2DCE258F8B03409 188109067E22F078E093A76FA372C87CAD401794D94317B2665DCC7E21FDF901 E1511307385B6EE148FE1666BB616351F48A8082ABF94040CDB058DD584364F8 CBE3E94DBB8A2450D18D435FF5C8CF2DBA1EB562E957A83F184C9F3CC43C1860 E6FBEE91C4D240C61D7A7D554A17B90D0A9CE1E7AAF7840846B3F1A1BB9926A7 CF8E9DA56DB81D35CB3687E9818CE74C0336DF7B2CEFD8BC432268AC93EB34E2 3D361A8387BC92B459F645BC069A49628D7382E22EB249BC7CAAE98AC55FBD24 F570D8D654B54710B809234AA2E662D2ACC44E1FE1AA63A497FDD94A46B9D1BC E37B29430A5E0C2E592F13BE227CD9A6556E9A0E1C3EAD9DCD742D1F9CF62014 5EA4510003418D1881C4EF1589A8B9EFB52DDBB67BCFC4E55B134A3C2E31AC1C 4658B592EF69C2E23E335499A35B91A58DF9A947712DD55BDCDB7E0AADD53E29 2777329340EC29A51E9020B8EBABB7B066113ED3A4791D3FBCABADC40CC45FB6 8744DC0116379D2649B216366C6FC83999E1FC558EEE5E17E13A12B252E5F7A9 E760CD51C96C1B4815BFE37D4D39621BCD10DA9428CF186E61E9921585C1944F DDC084DC9216FAB69CF54E456D47F65B3FB02F34B0CC998E12E41110A4791465 19780824EE2AC1B799655553375ECB24149100E539C23829944BCC82211A85E8 6A2D3559BBC0EDFEC2DA02AE3BB86A9E30AD5BF95E5CD956297C1F6AE85D0768 1F9D96DD8EAAAD78CFBB543E913951A78D3262CF08BE0DDE7D870FDA94C51A1B 1F8544122EDB7653E66D772E3EBCBCE4419F17500D8469EF4FBF93144B20DCD7 39B815E0B09D0BC3283E8B7A907F203EA3B22924419C1C3A8DEEAD335FD538F6 0D5ED1581BB64FAD4979D67D51F18B047E096747FC50C6A2B48377E458038374 7FF93A3A46E09ADA5A844EAAA3EEFA1625510D3AB7A74764FFB229725FDA314A 72CCE353A9693869F26CB904505B089DE6D41825336318DA00DAFD986779D4DE E8DC47E496A9936DD3CF46719D5E832E3B7C85B44D16D4BB588CADCCB90CBBF3 3589F08AF2AF77D7ECC3AB68D6409221B2ED853012C693C522407B4E97DD4F89 9EAA4CDA6C85F8B65F5E165399F6CA79550965F3AAF7D875CA947FD6BC42A4DA 1AF797BDBAEE65A1C3BAF00E8E48FE567E757715166DD2757F7DE6C45FE4B3FC A0C76D12FCB66B4CE9CCB47060AA5CB3FD427BCA5B549A4AF34CA654D9421C26 9EA4106806950525CA856624E9EFF9DC5B598AE4AFE928447D0704D4EE99DF07 69AC51F4D3163B7424059ABA4381DBBBD5C8C7DEEF723F163AE69C48962C34D5 7514F73FAF946C121EA5848C29E127DD0FDACDCB6B1AF4414EA369093282383D 0213B391666CF596FAB2AA27270FC273E32B90D3209091D8360A0D50F8F28D23 F7B8B097E2FCF2DCE92A7D5AB68EE680B691C2DC7BB846FD5132EB5789A30B8E 9B849C18E8560E9F49764CB89FE01E2E9968C769BAF6B44E08E45E563EB14BC0 70601E5133AAC33723E934677518C54A235EE9E4A832B363DE44FD82D37BEEF1 E9C842EF2570C97C3C5D6C0DE94DED4DC5B6681E4A04BAA725F0D9061B16C431 8ED6859AA5E5BF254BD3C29F100293FEF2D0D6EDAF428490E13B06527B5FCC90 54768BCE8007EAA2EB1AE14F3F577CC243BA416AB6E43E92EC4FC99775BC1D92 CECEA05EB8ADDA826E364921ABE388295AAEC6678C08D26415B2725025C70089 9F12735F37C45F00218EA2E398A8CB173086C43B2A7EE4C95852110F8DCD12DD 64AEA60156E560E8D8D84285B523515EC15888E9912C6C1AB91290E1D57D7595 1DF73319FCA62BE7C04F4E9968F7E453C384899736D48EE6FF64DF1260057C37 3082E207F796CE6AB2271E3F31AD2FF83B99FC3DF2826C07F4E4CD05077DCD69 A3B9EC76BC02C12A468AC4C0D7D83FD4BB4BC8ACF9C312CE3144E76D2F3C6246 A210DCC9834608CD0A52CC551FBC059B88BC2CEE954AC6B5811281737EC83C8D 72B39D016B0ECCED40BDC58706910851447C80E3FFFA9D57898204F9815DB6DB 1EB38FC10637CC50768703AF9FAE89A94B424A3C647A7870B26970954CEAAD68 E069ECBADBFC0519C33AEECE55AA93C75B6CF907DF65B98C7A9B043E4BB5840A 88DBB212EA2E86888D36B76D270926739B48D6435C1547D703FEA7B989CA60A4 87CDF9DF654919F730787D58680BAD0E5B506FDC2BF0C89569CFAF6BE11F80B2 07D69B417562178E087AE3AE9380CAF8CEEE40FD3989BB50E8521963B0617401 2996B2C32A3F03B7F312A211B605932233E7C230FA084BB912BFB20E85D721C9 532D22AB85802085C715206297C09713C3142039602BA9D607F7A52FEA25B0D9 FDB7E9FB15499E3DE1E47CCF2500BA8B8798497469DF248B8244493738C81815 1008200E9457B4CCA5740897B17F8832515EBAA84A237E17542B359F173E7868 64E99FD8159C9051E876C235E434BD5920F55084DD7F31C6FD2B6CB58E5FF307 0AF6020EA9012AEA47F9BCF018C30885988ADD1A630C2F1CBBCFD5A2C95028AA 6FC89D43E089957267B6F94C7F4E05FCFBAC85E879D27F7BA921FEDB4B551F9F 3B5D3197C0FCFE264D45F6C1181BA26796006B94BEFDC342C7CCDDBFAF332F8A D96D8D6C52ACBB10C871DAA7162501071CBC04CE01D8FDBAB48393E59ACCF1C3 9EE4972D7DABC3E639B1C2722F346553DA9E9F163DCE4CC7CB2D1B966F561A07 8862C3230BDB104C55DE3436ACA77800229637A6DFE1F041DB4B45B2D1A5481A 6641D77981CDA367CD23E64AD5355B484930C7B09B47ED6C79851844099A68C7 1F4E6ABBDDD7490259E856C267804A4EAF61246AB4C1233F025EE81793312479 CECC3813C2D887855573122E59FAD0B85DBD9AF66203F4618F22D6D56E1F7323 2BE1ABF7702D8BACA8AAB9FDEAB48E3ED56BC0D3E4696505E16473CAD93D0559 54E8991E7F146F4D4C9E3DFD35012F5830B57FA04BA42BEC724E5708FFB6D521 B209D2F6CDA86560921C705D6A99F822DD3B182B0BAC8AB381653298B82C86E5 098FBC2E1E30DDA83919362D1BCF4D91702B16E849E032B44EC2482369B4C342 211E7382390388FDDAC362431B45DCB55FEAA7C48C30996C47B0E21BB32FAA7B 14D6F0DB95C450B59975CE25D65E727148BC7400E00C249A415AA52DA829F547 8D7AF32D029BFB27EA195EA3E8A038493FE5BDDFD89597C420CA1ADDD2D5AE9D D3BF13CE3B530D78BB7413F47056F663395BEAFAF4002BAA6E9FFD3F1F0C7C72 03592F5627EA49F1C0E8C95813E1C30BC256C99A2F34A027D4552B650B0376EB 9BC2482C80F19BD6F9315C71A185EB246091F6D7D019637100B555077B1549FF 27446A2CA0C8C815B6CCEE95CF19B78908DEDB25C1F9A5E6C36FFE65E0A8F694 8A3E847529C50351F6CF88F1F3B901A78378BAE535678A6C60D7DF4A00505B14 FAFB1A1AE87CE09E1E90769C046C11309AA7BD8476AFAAC0EA48E6D32842E0FA 10CEE024B1B178D8B9A15E29F825E42564A8F8F1E1F1EC760FC03F1D5773DB78 E177A95C3D2E3FFEBA469404A866E662D217FEF7A99D6BEDF9F144A2A8B97542 9423BDE10EED471B99F70661A7AC7A260C6C32EB4D00F21F7A3A5257EC597EE4 885981989562FB08DBFCE4ADCBE6D9A1C92F6E9FF65A23BDF943835BBB7C29C4 0D7C987B626819583D4D52DA32BF7DF15C21BE5BB64B575C7F4B149AC539ACBD A49DF3F0480DCD61E3C14BBC956DE5D968E74DF4141BEB0106E6C5F7828E4F77 4EC7F0775CF320C26323EBD09354B3E2A52973E75E54CB42F6B0F5C10AE8A8E6 EB93124C15AD140C971D2E2D9C2B5275F93BA3B01556B72B7630CBE7AAF3D997 E82D11875B82071FE770B13C232388C07F2E6F7E9C6930F4D7379BF74FC3436C D301123050BECE20F2BF95FAD2E57FC50203EE6EC6D9420BF8C218D3D2F8B236 6572EB16DE1CB2AF00CF19C56BFD8D333FE1DA4494933BAD214701819B0C2ACE FD02F0682306A6B0039002B0B7095D992A30CB675CDA3D4B196C447F102DB4B2 FCE3AAF81D94B2FA40B31EAC2BEC613654B1D885EA590F675E6106BFD0575B1B 4AA50D0583A2BA2F79AFC2EF5640A9EDF12F6BFE45ADBBBA43B773B36DE8DD60 C4BB8FB6F09A334FD947877A785AFCC4F9D366326F5B609ABF1E0CB8942560D7 68D0FA410EB83A9BE859840A9E024FDF850DCBF5FA8D649B40505AE64B1BEEA3 6776EC44EA3298203B09990EAAA5FA937CB648A0377173CAAED6432A38B48DC7 906B730B6BFEB2B9B166526D1E8D4110C6A2A4CE1ADD2D0C9C179621F7867669 31D3A28EA97D1281E80B4B6A4F223D1FF77F8960CDB83E5768F3A8FE52120CA6 15164AA799E18FCBFD91697783BA537FA897D58726F5F3BAC1F0B20B57583374 35837E9EE8DD0DE39B6CFB69EE47ADEE4624EDF65E43781EDD056024FE108280 29E5A39815F494C65020B91F68D1187F815ED8A312150B414D9DA84F542E0F15 32351B82F2322C9200F987E477807E9E4051D4057240E99D42E6852164704F26 81A939AF1E3BD237C4FA341C702F7AB978F63CBA8DF745DC2C57AD5511D89AE5 B4A80BFC57B1A5CA1A110D3BD5859EF41959EB364DF07CE50F709B30EA099EB9 01C010ED4F4DA9AB062BB8E10F515559D2FEEE69C579859E43962AF7640A705B 2C3086E862AB4297EF9625C58AF049BDC0840F9562D8D8BC686CDECA7D4259C7 4C86D8C92909BAB7FA09AA2E83B4089B246F8B4AB7A086C5B9943773C496C62E 9E6344BBD213B44C821CDDA42B1BE933F74BC8FDFD0A85070F50D4881C7E875E DD689E97ABBF6AEEA6E8C8BA377BF3E4A8EEBBB1D47FBDAEC3B88462A62CF500 727EF93FD166092861FB67303490DCC4504B759BE754808BEDD580E6DC38223B E02EE2D9BB8F32E2D3386376F8E49A853F7C81650DBD33E23437EC98F4A6F7EC 12705E52817A7B647F4CDE1B173EC370C78589E329D93C35895CA8B3EA2B945D E30630DBCB2B8ACC49846C7835869202FB5231ED9167F307CBA31D2DC0B423D8 65DE2E24CABD53913C01C388F64BB66976FE3B0B421AAE861E0C0D495D5E0B26 1D207792F1072BABB49156544C024118BF0D239BCB1AEF8AB7F38EEB34C88CEC C7401AA6177E9B7849AAA081334E04A2205077A90C0377A363F22091678371F2 36A088CF84558630C3F370FE00FE97209AF40D77C6F70B1B4028F1680FF6268D EC09B05DB3F8DEE17678CFC46AE78E02DD01454A9A8ABBAE157086DDC92AD22B DBE7861A2909232DE46FFDB6FC84989B2B137C564FE84961BCD663B592FF2A85 A65D7B595113AA7DA8463F852A28233A754591A5F2D7F70649A12EB8CFA35361 1410C7E2F08EB5353A91CBF2109D6E279758B8E458DC7737369AA35B330A9229 B73DFB9E1745410440E440DEC966C0B21349149E08D57740773B1F17161217AE B0605236A44353081EA2248CBE9E8F4A0CE1499354F6475C10346F337227B8C0 2474942B49CF891C5D0953B1015203B1BFE0A7528C900968D16A876AFD9BF28F 43EAD0516A38FE48F7091219A717617CEF422F7E2054F3E40D7D6239F6744E44 86F62AD7ABB61DB0E75B245B44E7A6FF9D72DAB469A07D8046DAA059CA891766 1420C7A397CEFC7CBFC41A09C54FEC6E77312347C14CB8D87B313A0E7F2CABEF CEAC4B9E15C279A18BABC098027A02EEA025F481769AAC7A89F9F419A9EE5908 351B0D25A2F9FB805227F0ABC3D4A87C63C59E80B1BF915FBB1E1E164568CCEB 1EB5B1A19180F370EBF2DD11827844584475357DE9E31A138874E567B8E1DA93 FC5D6084A3737CA8EE391773F3F91C243AF33013891B4E7DCBA7BBE1E06C5031 C3C0FD60806B7052C5F7B069BFCF4F879914D9C2827EB53C505D5C738E1564D1 1FE8A3EFE5B3EDE0B766E816FF02473739FC5BED647CEB758C6D7457ACD5E352 1C3F13E6F1DBA43FACA8FB3D257B24902EBC64B10C7701AD3850BD845140C3D1 A6CB630AFD8E81ED647D65D7F51803369D37DA44F36D8AC77976AF53B9C4E56C 84D5969C27EE9DA518FBBD8430D5769AD02F28B6036D5D8AB73C784734C22D5C 7200D0A706326DB04C52907DC99648D46F2741B3A9BADAF9040F2CA68642156D E597FD6BDBB5658C87501440DA17A44557EDDEF1C576F8FE343A6E2DE27CDB35 8E62AA7C8367E3E44DA6E435DA063BAC3DE82D73AA2A147CC5A844187D29B83C D12D91B9018718B53C9CB11CABDC9F7A8848C19E73E1DA7067632DFED7994B8D 3A5E1260D0315558BA94389D996A960836FD9C7570F02C453129DA181B2BB9B6 56BDBA69A47729BB3EE50403667025273C0FA725D6742B32DF5E58BAF48BA6BD DB77F2571F3643E792CC757B8F1AABD13B60965B5F1AEFC5108B68126149F4F5 F54E72341790C7D75372F0550FF3C9FA8844DE0C6E71C261F94C2A763C6853CB 6179437BFB20949F530804A81C8C71B2E04531E2F3E0C158040763FF38F69682 F8FE6FC7F914C9BD77FD51B7F533FADAC22C819B6F7E3094BA3B4F96A74E43BF 240DB5BC95B8577597AB79D6ECCAB0D65EE279F5CB8527B05BB521EF2F7F23C8 42349BEDFD0E303A7969A9383A6290B9ACFF7C7D402EA8A7C9517F01C28D31A7 5B705C785F6418B802A18AB458C03291A0751FB55AB25515926778649BF7DC53 8E94F949469AB3EEC16FCA42F98220A5EAEE73D6E82C71779E8892B2BE652796 E12C2B6E3D535037013D60F8211EBA7119383CEE9B06981BFB98666749064BEF 338B4AD1C6300DA217F38EBF093C867A7B019F1C8F4C64226FAEFC38027AC7F3 A528689C44EC4CC0D0612AEF76650826D2B16F53675A57273A78A911647D112A 193F579ADA161BB62859141F9893013F55D636A595E532BCA11F26E5846724EE E6F3026983BA6E24C1E462CB599D2C6F3E7C0803244D9A773D1DE70325786EF5 C42D2E9F3DDA5F7108E3C28357AD1F088404AFF56EF5BC9ABC92A32BD46FAD66 4BF53BD32E3A6781F4DA33E25E0075638D941389DCF2D5F3FA3C9AD7DC26BC19 28D04510B6DC27C7C6EF0EF6189968C8759920E15F65108B389BAA1D2047B977 E1818381DF9FC5FC217DBBDCA80BAB7B98E7A00A97AA3BD47EF50ED526FC8583 1FF5B2B4B470642E3F575F4C0B1FC5EBBDA263F89E6D644E2F56DBC6FB50D23A A04A2ED571997F30657BEDF19D268F69D7A624FB11BBE30E94448708D077A238 CD4543C8E805BC0DE96A0F4E14E721CA75A34DF4F911034DCAF94C190380D55E 77BBA860C105DCBA06BB201281A02830F8FE7951855ECD7E13A2514B2EC6A93D A40D690A17709E21DA5305E3DFFB395708581573005A777EAFA0403B2F6ABC0B EAD09C5C3E2B111D8E3687DDA302B8AC5B11341E916A63832439057BC72B2E67 7BAA5ECF2A8FB4D60751A1F209BA3F80E2BDDD496106EE382F0B704B94A7EB2D 1659474F5B80774BB710BA2A744794A74061970230B044218212BF7C908A9F5C 8575922D7E0D13FE10CC1E548C182F402346C6E256C3C77E871703214488172A 76E46E6B5BF7B7704AA57E3C8CE8EABC9F8BF0A53538F3A09F27ABC005117354 39F733BCE06C01F617CA9552C01B0ECC3AD05D9C04E67CB7C194007C4C64A460 726BA5371B9B33A713C6B3D69A6DDA20E104580E1CCF7B0958E5086B31C28AF0 D645B982521DDF76581C7DE21C7FA385F5A5AE637169427D13300AA66B53DBCC 4CC79A0320A2C5379B7A9A54AC967163DBFB993753FA7AF4E4F7AB3710BDBF8C 3F10A9BCC0BB17ADB5C5727895910CD7CA7F4923F00B07FD16318E0A53633A3B 0501EA6D8851CB557D80120DF270B85DC721881CD897BEB71CD7EEC64CA12990 E8E580E138EF6F9EE2F8EBD3DDC3C5F63AAF381ECC7350379646788EDDE61725 C72975D2DBD54F7E7B5B1DCF78969BBCFDF726C8F7CB93F39CA28715C943C782 5CD1C1DDB42404E24E079ECB45A8C3625039AAE73D365CDE69473537D4E575A1 1D017E12D1FB54B41D956915EB6315A82EF3CA876200D5CF0973CE5F56649FEB F62747208C08C8C61A0AE81FC3A538B16DDB109177C7A686A256CF37D55DBDA7 8F807AD40060A99A44BEDF27C3B7178199E750C91119A7AF35496F6F1ACBD666 B5E1C8F49FF59AC5C5648011E2D0F7F85596705D4DF9CA26541624DD059E8E70 4E74F1743A6C6DFE15BF1FAC3CD9A004F3AD0828489706818A60C1661B9E09D3 3F18885643D21E8EFFA14F48E22ED8124BFBB4398024C177B02C760A59F7C0CE E1B619449022B819131DDCD178F826A0C2E9389C2B8B44B229F954FEB4D5FC0E CA84B53501FC1767BEED2381CF24BD89BAC6BFE1868C78416159F6F933E7C828 DB743BC92B2EC3DC2DBB0E14F569EF1BCFF9182C04627D1E2BD48EF654850CD8 7151797484EAFF38C38F8577737F5EE125EF08565E4F6E6603CB9CAFA165A355 4B06608C939495934D515A13D319F3F8C4C1425363C897D025D28BF1A4BFA09E 0F97561179C2C0F030F0B6A3C8591537506D9FDF232AC0BC848E517E61F2AB95 88D386584AB5F92CE4C68D1F419A32576D47EA6CEF4B37946B1E3DAB1E67FED4 A5B70D62A9F69C227C21C8AB490DB86DFB4CA788B6CBFF8F02B920F739B141DE 1A095167465D82714F492EA9D2B4F7BF14719BAB487EF25F8BD1B377FEC95E66 F3D7020294E06E743A606D61B27DE20252F211737C4026FF7B9B4945DBFC9809 8E1594CE15A1D7E5270B7448CDEC0E7D728AF99771E64A43B27A041FCE6B963D 42B6E1975F5F8F8C26602DC75D04ACF27CB1DA2B0841529E26CE6A1D0E5E9B31 0C191C39FDB29C4505CAAC095E91619AD29468DE658EFE5D5198FE5EEFB0A2E1 4D6A7F1BBBBE87D543592D0E658FAD7B5A002D6464C9A413D8952C533DAE8507 B88888C8BFC31C3F8838653527A3AF640BB9CF67FBB5844FA83E7D9D51D801F5 62C12CA2D6070801067033521249A56C5B0B77B19811FAD4951E34A6CE5CA1A8 443E4C5B72CAD2FFE1650FFF90A91EE8D7DD95D77F681C1858857EC9C449AA1B C0D7145473917BC9E1D8D6A691C91E1A9DBABCAB74BB080F506E992C1A974E26 00C556FE22EA28DF85CE94B3898AD28F137ED56D605CE095BAD1AC60BC6B73CF 85EA4ED98FC0ED5971DC5A75F289698FB94A4FEA6479479FB2A9BFED1859F69D 1EDF8BEFD567FA71B725B11D55B06CF0E95F817DD67612B41AD48934A4D5ED7B D888DD698395041DB1C9290F599BF0ACD24AD9EEE1ABCFEFABFFEEA96A02D292 C78CBAF56DC3AE9E909A2856E2614E2EB9D4F46289AF8248CACE1CFF69C66F94 F5B939A523DD14332C225110DA3446A4818FDD67B5D16FDACA990DDE72B9F10B F3924237D2B6069030B76DECAFFA70FE97F5C5C684A750AC53EE37B1E27C5910 48BDAC0DE147D16BEA29E4A67AB88588CD8F3B50C4EA3A18D81778949CB17F14 E4B19BBB9FE53ED4105C05FC9180CFF9F59F956CA0A6D11230499F04724051CA B98968E61ED0DF26ACB0D0EB7EC9BA825547B42F4A439AF0F1B4D4F9F4518ED9 4A80B709484E08438B6D103CA4F0C7C8CE75889EC2C501A375FD8D91722D5FF8 195D24FB5D569630D94FDEFA35A8D881FF0271B3D451A884D106735D4A2361A6 D71626BBDF60991E20045C1B980FDCA1F436C1EC063C9B454E55062FE19F88B3 C84211C2D38911CCC65C1B10931EBC9D633FF04826D1875DE425E69D60905013 3280E96B205088FA4C3AA2665B595DC5BE5AFF1C29FE961869F3A03AC93569CF A1EF8D26E4FCB55CC541FAD73B55A60A9AFDB07C4F26B7AAD34193D5D3E55B6E 53B7E8C23EF6AF8D363C59A59C1C5DF268B43E3BDE031C960662E3B308BDE103 5717C31227ED287DE82B9C1923F0FB2885C2AA2839273128EA545CB9704CC989 C4B324BB68E070E9F0810137F4B1FDAD4B7E959872BDB8929AE4855EB15D88BF F1A10FDD74B735B9EE49465875B67070F6D6CA219A64FA86934A4CB5EDF7073B B814B8C9892EF9A90129E3C0D84BC60C0DAED6A7CA8EF9164BAA7B3B11736AF8 C58302F9578CAF243178E37C0CC8C3C9544AFA68952BF4B02890A0D000645694 7AEBF900234A5374E199A5D90F10E57A1C123DEA596AC51BFD29DF7433141F90 E0656BECAFED14399A3CB3A7CC99D5B2A8F88FAF17C9EEE84C08D0EADBC15B41 7B21B8BF97FE52CEB94EBA37CEEB39EF757F7FC8A76B150796A27C646D5C85DD 69AFE8AAF7465D0BE73B348CCD8E6493AACB6CEA5C15A9636C2DF301E5C7F72C B8C6BA861E90D2015817619C9A013CA9E7D22D26C6E8393187F8179E1693EDEA F2531A7555FF7BA758D3792108786E9745DC6B235D02AEC8A65A45CD310169BB F8AE3BA1C8A88A4C2A8C2C730F428FDDE333C75558417E41F95D6DC547E0AE93 134F547C8F7BCA1D2FF766A9E2A2C799C529348871F5A56D5B8ADEA3B2A11DF0 545A0A5930AC1EB9B33D296DB9F1E8B815B741D855622350EC35DA65E002610F 4EBA010D0E018E168377533CC24CF7F4B79C90FD7C4AFAD40756621200E45012 6C65F1359854128910451346DB93A34374EBE00140D3BB639CC14901E7C448EA B7C6F6D76DD96CDB8910BC20869B7E235BEA990DC962554C1D92EC9625813BAC 252E58DF9D422C9C3645A999A3F25B5ECBE2B43926E2E9951E47DDC1E302FAC5 921AF039D110CAB81962ED99254457E99A142A2F3230492827806417B1480691 BE5511A7C1FAEC3B11745B30A10B8DDBFCBAC3B3B8122115F3E869C36AF8584C ACCD78A3B88E09C7AC348187D3D9B650827FACB330B2492DA961EAF8CBBE87C6 8ADD19B167EBE1A73EEFD7CC9239DBE4E8438A4A16A28F97A1C6CEB14F543C23 238478AC9630CDC4CD3A01C8DF7E06C8B8F033A32D2B4BF1C23CAA5366367DDC D3CA457D69489D0C84E56D50796B28F8BD089108F4D8C7FF554CC68309055B12 9F910D46D48AFF711073F5453D8DE7A781FD9DF4CF4B28799093DD8FC2055BCE E8129ED81391F18F26EED523B9BCC59E941DDED79B23E74FC37BFAE9724A9E24 5304601310BE6FF3B480C7BA9E0B72E4C6FC8BE2A0A9407109E1770ABC56FBC0 A8A44AC1496D3F41A74B8AB00435E679E7B107C133F3669697E8341B70DEDED3 48D6BCDD9BF9D336F25E5739A9CB1420D6F1813D1282C0E0EFBFD8DDE2C66089 8B82A466300D6356A3257222AD8B28F8185085218997DFE0FE1A1CE1AF554B98 A1699E9068CB49374FDEFFA433B638B71284FAA1211B65898C3C056802FD3AD2 3AA4F680922D437146E4F7DEC9CB8ABF1A8EBFCCFB7DC9B3BCE38C8C4F2A578F 51B3AA15BD2BA58496CF4BF26DB0DE0CE1214674239166AAA4A25606920B81D2 A0AD21E24B3AC6A74368F9E7F116BBA02DD2AECEC99F41BC3D955D43C2E22F2C 7C81B1EB554351D47461805FEEF5CB89426AD58246617F6E5135F7F735822D2A 8A41C2A685086F145175154762EB694EF1A877670A51C4A86139E64063A80933 61B9C6111F450BE26BB644316FE30986368945EFA43F6BD4BE3840F578C6B7E5 64E8BB87AF2A7E2F4A8B1AA257C2DEB9C8BDA8A5274E5076756B3E942A44F1BA D26498BF571F450D904733A0F796238403E5A781E640330D70AD296F6D74B679 B0B1168B656E9B28E4BC7026FD15197875D89A72696FD7B20A3EE4ECA24B78B6 6391F8DE690ED48966603F2186424B17A28CD3B64BE1E3768D8AE01954A4DC91 CDD6F3A30D3C4EB5F9C2CE00A5A64086FFE87EBD9B4ED432FE59DDBA942F72B0 F6B3C8CA4CCFA5DD2BB195FBE297F6E65CF6C06E9D4475EA2C41D61D39F0B25B 889E1EF856FF0817142ABA12DE2C80A2FBE0C0D98A60952D93E3AB87C644D4AA B7CD2011876AD53DE27BB957F69F4C4E48B292D916CEE8BDCF3AA2FF9C72E580 EB5482E26EB7719FC7BEBAEA7102D55048289FBEF5C5829D96A437F4F7CA57CF 9FDE380071F7859DC68EFD00288063EBAC1112227AF649694E3D2D63B6AFDD3C 7702EEE2F4ED8D760D2023EE1193D3266AD408AB8A3FFBBF6FB9FB1E8E849F75 D79AA064A146C42EBEC6B1F5B77A02D9C92DFE729DB8F03C6E67E9587346ADCE 213F08F02AE6C6D2340E8F041B212A760F0EB6D4C4F7AD11C0C7D003C384E9EC 8009BBF3B5351BAC77CBB2DEC5547D9C9F2ECFEBCAB4D48B5985E891E51C7BFA 0A02C7B166565EE79D8D5BDCA41C79C69399102BAB4561B1171CA99A57550363 3231BB3E3F48BEAE734E65310AFB89A170D7D2C23690D07050E6246647B2A3C5 BF170818138683EA1B4DEA8C2F018D0FD5778BEA72C72E6CDA1458BC8D1E553D E61050AA240D0677D9DA9D9C22810CBC6C0E441C02B27BEF9BB48027E07FC495 9E83F67BE50872095AD837B6BF75C0B5669091CD4923EE8929877CD0BBC624F9 17B90C8D5FCE286F68DE2FC1508373EE9F9FA6F5A3978C75F52DDC397E368A0B 57F5B40322053BBAFE6C7F8F293E0E3BACFE054A8AA7DCC3FF253F58C75B9D12 4669407237089506FE8CC6A24A1025C8B4673B48FF3174C042C4D66BE2AC584F 6A346027B020024CB9816965E99F62488D47EF144740C30CDDD2562F6BAC56EE 04AE0AA4421F68C2525130D92002CE82F361624166C24F7C2B11C69310B93719 0947BA4E74BA25398727049E1E8C94669B709718B2BA25D889BA48D66B0A9EF9 173C6CF93116BC0DCE2DD62D2A936341BA360D901BF23D9A6579977464D12A3E 14A083FB37A4049BDC5F4D9E8D49D05FC4213B01CFB0231D2B03F552F366846B 7AB75D68EB74D57CA505C571AE2086BBB8072B00881A57AEBE38304FD73F20D1 B3A3F4DBA7CD736A475A04B7785C64F8802DD8483C75E50F385FE63D063E7ADB 0FC45DC313B0585C605D1529D226FE08FF7ACA26E0CB2C1B23444E976107731F 1795EE18D69C11B9969542AA52BF0D3C4D00862494DF946B74718DB8FC586DAF 64BAE620E3C1512720B0ACB343DA448A0419975CD986B40D91192158129232C5 85E18BBA914D219AE5979CF98BC9A4006687095BB53215DEE575D4FF7FDFE94A 25A05F1CCE048E2F7A801C7AFACD586C218C1A04B43F167EEA5D6A4EC9DB4FB8 C2E56225709D9AF95C88DFFF3B7EB9C337069278D51F0824C96DF582C630BEE2 C4DFA3E9C9CE76D1B52A23CBAAC840EEC8B3786D45834D55942B46B6B4C612AF BFB077F21E0F7F0EC6436BDF1704EAC52789C75F7900EB441EF83E37C780A699 2E3B2F5222D7FC4440FFBD93A01205FC7E64CBE9849BD01FD4448B343FEA4101 9FFF4E1527F81F4DF3FEE2F42953C4BD655A50BDC6EFC02E25A5D8695544E166 7ECC195622F1911EE8D637DCEFD8686B01A130671BA5597768246CEEDB1DC252 214E01AB3AF7AB7E3D766C1FF37CFEFC2FBD4448DE566042D46B3F2A0CD85D27 52F4CBBF632139E86B8A2669321B4488AEE0E3EE016440B026BA4F3CDB798BF5 1E026DE9653F2851D1B095C7272112CC642066872578C2063921B1F1DC1DC37E 6FCA614E9EDC7EFBCADDF112E3127B753D0DBA1F920964D69C779343ABB1B56C EEF95475F7CCE12C08A5AC0502C65284DD6F34C8FC31E6D696D9B1075B6CA4E6 8857AE5D9267CF640DBEB733B3FA1DF1EE67D578445DA58492A8BC190AE91CAE DFE1F1C833312BD85578E1D63F8E593432BE3D4A9307127750DD9F9509660664 92F85F9C97860433F1190C2448AAEE97CEFD9E048681D41D17F5CD3B8C6C3AC9 E7D46179623C806085BB5D23E6ED26B2D900515216EFC224A9F25660536467B8 B47665F6514284E567397A7AC78784A8CF47B61DDC9A66B74C04FADC5074B8C0 476EAE541AB9F94E990FFC31CD94CAA9E93966096383C1951B00C4E79B51A728 7526A4FD3A5F6E9D673555CD7142C94EDE73E8A3295341698D777405898E3B4A E149CB4E9EF567CC18C35C3BA9354CDE55382A6569A8D0B2B7453E5008347B32 8B5745431E577B3525D343EEE8C0CE5CBE1CC6D3FD13AE8C5C9F672B10451183 3BDB33698C0D220902195138EF44A545EA6092A79C9F4AF24D73B735E3733FE6 67E47D76CE584299B16295BE997949021F949E035F49593BC128DFA89182F89B 2FC9EDE36D2010B1BA62A6D900B00C4524AC6981F0DDEE41043ED7500F574409 C275BD142BE36AD2F5B08121EB0EFD58E8EDF388CEE211D4FC3C2D04D09E8757 17CF2869D202B2302BF7F5741F4DF47C1D76962A3DE9E718ACF684751BD968F4 6B3488D623E734451674276CE47A465AE3F50B50A938C17DAEDBD7E40737FC3D 35A709ED283B930E0381A174F3804E78BDF8B8761BC37179A96FA636127145B8 639577E80613C9A547AA8C3441C85E8408C0C4C1A5143A3179F9366DECA49F47 324BCB48FFBF44DC15A98DF0A4F9331BCD908E5D516881A82ADA22B906A85015 6643813BFBBFBD2790451F64AF61E0252CA23D2C44BB92D546B50DF7C2F5F3B9 560117B9EC0D5DEC65A4404FD7CAB019E50B6C468DA7B5D2239F298DB98C83EC 8611CDF1D5207EE2F8F817958D2ECDC5557BA2D8023B69FE98BF4ADEBA5610DD F12B997F1D998441952BD2EB089AF2C6CC99FAD2E7E9AF14648BF99A09355470 F32C0A511E8A02FE7E24F7E535020C6FA0FC4D9015532467666B0192BAE64768 756C8AC401A71864A830359DEAC2919113979FE4DA48292EFC5DDD97A53377ED CB29E122DACB9C126F687AD2684F4EF885727C84F09CA8C579D48ADEF1F47859 DA6848081327E0316788D90F3F59452FC9EBDA175845FF0FD6178A0582E20436 4BCE9A140877B4DE31EC9006341568BDCCC9DF9DDA0B086DCF1D5A8BCE4060B4 1F13F5A274242B4A0990BE59BC8DD36A2AC264258E19CFDC1AA63432D07E9DFD C35528A40580887195D79101345AEBBD0041A765274D09780B2BE95BD42CD1E6 A5B490374097FA0E5B6F196A3C47C18E8499717C07A36BF3DEC7064845253515 E0299143BEED08AE775CADA4F8ACEB96D70F08779BEBF179B2BFB0DCB0F1C126 35B6BAB5C1F755CC9C40D5506135F11A22F802A9F3C79342B6FB9522729E681C C4A93373F8E6DB2CABFA5B7CAB4C243C975EFF5C5D634D4D311EEFADBF115E41 1C3EA696F82803A071B80E18BE67F7828DB353FDE5B51073E86E68486CDCE01F 5D79F3E3DB087505FCEF1F9B01908F1D9FE1EBEB25B6DDB40C119D5B28DECDDF 0F579BBDE6CA59B903368E3460730A756FBEBA62903512DEFDA5CE765C479DC4 5658ED736D9EEE0CCA46CD2676C475FD3F8E2BFEEF43E7B959F19468FDEDAB2E BDFF5ACA6119413724BA04E9B006C4AC43CF2A16FFDD90A1E46F52C661328295 B245F8 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 54 /six put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A20114 2248276B7E4F8924750C8361FDB1FA328B434499FE5DF14B96C1F5D03F1F2702 C77057AF82D3982C5EF8EA40D0B923249FD9810464A9EF6D1A99402DDF08120F FE77568235A193F5DAF57231E5095D4EF505A0FCD8E538D53C5E23E226B487CC 568F94438B050A4ACB53340A4054B02E8F4D8BB42E72FFD1124BFA91C22F3F76 3F3015809D6EA1CDBF7827ECF8893F550132A618BCA2B9CEC7A329460CF59E2E 3F0E70D05F42D3E37130429C984D24F49529F647CFCB675C7CB79749E35DBA8E E8A0B56EE8FD852899BA52B789CF2A5D4F1C948FD5F5C57DC8475E65C83FC690 28EDD11C5A7149D68B924EF92D73A70D37AFBB433D1563A034361A4415C1722B 7599BA7ABFB5D0189D99B2C48024088699820761A73762B4BEA323121D893572 DB414C845757270E9F21A5B2BBDEABEC09C5D030ACDBF5FD8FB7F9D62F13A93E AB6060F37CA8DFCFEFDF62CF0222FC4298247FF97BEFB153EB48A5654F570E17 1E1DFD669AD81A441A98F39A41352DD1447E6B923B88395230C74CF703375B82 8200F0186280DD3701067721E2DA2947A499A0974C5ED5C7BF3A226319D5E60E FC29B2484C062A0FC798C291CD5DF9CCDE6D548E2FD14853CBF563792BB38EA2 29E2FF53230B91825B5D239571581541B8BC60EB5CC943808DE2E587CD56AED3 BEC3DAA382464FA0DF0DCFC029DAB0DD3E3180ACFD8C81AC0484F0C096DCBA59 430CF139C30F8E45F15CCDCBBE3F96907ECC42F00DA70994C7E3DA894A5E4367 9131033E06F1AF4FE22FBBC261B490641D914837EC2715CB72E5DE97FDCAB119 77C8401699DE82B21695A2BBA34DE7E23FA3E4506CA817F20331D0710D2C9B08 F03F2C3322E96BFB5064EC80EF4DFEBD8367BB7EDA4344562CCD23259F7ACB48 04A9AD253332216DEF772A5438B95FCE3393CCBD5CFD3564B70A6B785E3FB2B5 A90A86D161B6F70006DC30254CFE76B55FEE58F2DEDC34C6DDCBF1A75674F657 2214FB982FDB68CFA80DE2485479759CE3DC6A7E73ED2BC4F1E12B16DA41A1C5 7BFC746498B0388AB63258419384F06BB89531E3CE7A320CC929BBA524CE6B78 7E9523EAEDAE6E724E6172A76C8B844B721C4CB17E831211FCB830B1ADDDAF2B F101C2E3F973E3EBF963B70A5B403CEF7E3D869AE8461BA22A21944F954F0784 911D337209C32F1ED5585735149343A8DF86749E395907A4DF47E3DD955632F4 2119F02BC4688C047960306B85C79FA5011A0A947B3D998078763E196AFC24C3 F4C5B764B1A90C2FC34808D92BB87AAA5328D35AFC5F6036147C906B7D1A3499 65C100A777CE69E53BB32D79075918510681B6932CDD71EA32D2B8D624249414 E5490FA6B660AB817752C9A70ABAD21AB8B1227D4C87532ECC8B504902FD53BE 5A130CFFCCE869C76BDE799CB07BE6E8A364CC42FCF642314329FA02D641D85A 20F2B7E13DEA7FF35CD9BA932B1ADC1BC32DD07EB048F4E87C200FC186942E89 9CA9E82EFC02119549CBA415130B0D98A471C970EB1EF7A3E8B7B8242F7E81C8 EF86B46A99759F12C62138634EF26C0D0942BAF165A40347CCCA16FC278F875A B0CC1515417283D9D093ACA02D40284BDF8604CF49C1BC391A14BF2FA0D2CBF0 FC6C63080242FB76CD082CD5F8B74D44AA03208458D4E76D5979CEED233CED2A 111A6D222DA6023A10721B41C8E3AAF75B687A8BFC5719E21101D005BB811172 4621B2493D36C2E4834F7187895F9AA31F67C06EF7F4C77B220D4FB889F8ED08 B29E10164249A7D5B7E5F0984DE91C1C5B28439EBD117BD235B700F0A962F781 5D085D110C2E73A70FBF1116A3089843598D04568166C344A1F41758470B6ED7 9184178DF09FEE308F775400B5573AADA47232243060D683C4E7850B70E7D798 802BCF2038A79D9C02702EF781BEDD831FAB3615DAE92498B0618859A00CF942 50187C26853134D471D76842C893C6D041566BC2A51858E41FC0E3DB1672B373 8F565BAE23909602161C8FA3B0A8CFA5B5A525EB95E477627C24707B7BCEDDB0 C8321822C491A5A86355857CB3BA92D4C5DC550FBCBB42A024479E71BC219C3F DE97CDDB5FC69007024B01BA460B522CDCF5D300293F8375127DCB1ABD94DBB5 A08B40555BA14BFC5E23F8165BA7B45154D3FF754428AEE97A1CFF07DFE06AE2 9C4D711D48AFDE0BC3A50FA23D09516EC4CBD986F746CACB8C95BA69DD20B1F2 08841D940741C960DB0E48623644599B17A04E7F500B64569516376156449033 2A8943AC82EBFE91990FCC2C99AEE28247B3D4DA7C5BF4DEAFDFA2CDD3D08BEC E4EAE749EC0F9A6A28850F201E3B2C79E920FBEA1A7F3CBE19F3F3B2BBA2009A 729D26431A31A7A3405F9BAB02A9F451A3591AA29334FCE6E7DAEB68DC34690F E189556BD67A31FE42BAFB929CCB0B6ACC4DC1649B03AE11042803B9A21C879E DA2E857A305DD86DDFDF10BDD0B7FE06FCE80BF6728A9BF434AA27A1FA11A164 D1584D7829EE7053D34AC69CE905871C3166C96740EBF60FE64730C11A63CC23 4EE4318CEEFB38885A3011812172A1C0ED6CAEDF62CDA8CFF9D0081F4B32FBED 6890FAC82FD2128DC38266AF0DE70FD90489229153F5D172B496B937D2BB8D65 2A86CDDB601218AD60E1B68CE245ED1D0E58CA1936908A114FC8C7A1EC53E3C4 64FCE5D1D94C899EC235DDE3748392BD878EBB8005B92F092F6470F435DBD0F6 59FF0448F92A1D6612BC766242754CECD05FDD77F837B411DD4DAF18DE438B44 833E0228C3349A29BDCA5EB57C81832D9703293BFDA307F8B3084AB5E82CAEBF DC71070017586387A94E218DF6DADDA303D892AC7198249FC769E64EB4010725 5704E6FD548FFBBEB2AF71FD922B8205FF782BFEDC44161AF9C6C366B837CC10 D2DAE81100064589CF1FD53847A0FE243383CC02D9C77E08FCF101D3C2C1C5AB 3177425910BB80B7626B8BE707271BF4A40B4143DBFAF11F30606698652A866C AC430FA8C48362C122C3D3E1A6CD487D49ED49B14270869E8D9AB138DFCE62A4 94DE6402E94C6923D5C7AB32B6C1C595ACB6B6C6D4637C0C33E5D278803A29C5 1970489E0DD6220824B012752FC60AF3D0CAFBE07E0D918E62A723A9E71F504D A5284AE855EA175D724B976D989CC7BBFA69019BB3958B7D61978959C2B12719 788FC7AAB8029B8895621F618DD67578AA066BBCC56649293791A1F07307A232 58EF97F617517F20843F0B317C6BC6F3EF64AD70DD35E6B25AEE4345CE0D3DEB 8DF2284BD0EE20D326FD65F759826D48148C4057DA66FE14CC14ED33F79B2F17 69AC90656F331371D13685AC5090A8653D3B256C5FCAE10A86011E25FF042BED D1346BC6046B0FD5BF7B8C2100A5CCE4DCBF9E882191AEF91C300FFB3EF52F03 EECE89C7D8B46A2C8F993C0A47B3494099403E9042EDC07CB6862531B2024899 A378960B55D3FE5998290457BA27337104887CE83A7CCB5E243097A7A86EBB37 600E7AB7655D3003A6E37AB275BDC82FB30F8E7AA1072AE291BC692A7B8C913E 0FE58AE6C100BEE929F86495D735CD59D277728A4C1D8CDB025785F09D14DCFF AC86E32A4A582CC053B4A60519EA32000AC3F372739D6973CE3C2DAB2794D923 AE6379DE839B195DB3A1EF5A7D1C40EC956F4928CC9C9BA7ABE78135DE7E8FE0 0A243119A8A652396BEE0C84C2B0FD19FC42B64CBF9D22CB75663FD43AC3EF1C 555611B1BA1D45F85D27FA3DF97F57C321AFA39566D5796BD7DA9D776214C53E A8ADB3C7478A2E779597D1F66C6E3B027E29C02A32CD02A6C8957ACFED6390F1 11DB06ABFFF7AE18923D4E4EF99EF4E0F58245357A9FF20283BD0A045446CE2B BDD97A4856CE8898CFD1A69BC87A1D8B155A9E3C337AB860D4B9C518580AC24D C89557495A65113EEE53502254B60A6457C73EDE878025E25760D1BF4050755F 7E73C95A73D7D83BCFC1EE63FFBED31D55149F98BBE60CB0075878C088C1C932 B3EBAA3FA7A98E01BBB900BC12C83E90E2E51BBD8F2C1FAA5DCCDAD3E89368C0 2441328E2963044B19A6014289D088C0434921CDAE975E9A547E41089F4B24A5 93435B3698FBBD0D4765CAD1DB922F95AD9452C483B53BAF5091EB7C5627BA57 0B89514654C04DF4552809C7C1EB967137FEA20FA1D92D261632AA66AC66C2BD 4E6584871E1CC55B702F05A97389C51BDA4FB131E9BAAC3345792E0657089179 909CB2EB0529A23BE5FD4AA804492AD5466AAC0B6534A63ABA1DA4EFEE1FC003 160F7EBA31A4BC54C4E327E40DCC1112B17D53D4BC3887FAD8189B8AAC3658A5 B44B1F10ADB62190E9A097637951B18DB403C20D93A65F602EF033D3EBAE895D 02CC3E72176D6BFC26B7AE9024945BC787B07310628D702580C0622EE5B624CE 45F40BD8C49CE83F7F807D586193961D3F2E802A57C299070B2D0F760BAC8879 7D619D7356596434A7822983D64F157ADADEEA2DAC8DDC362504FE79EB29F3D3 84354E9709F5968B0891E10C66EF859EA472E26F0DA704617370757C40FF2A61 6005169BAF7B3F6AC6AD6F4CA4E92B666C5942946303D7E8F284619CFB0C23B3 B2CE3368C46FA4EE95B893B3987FE902D0A553962D230730F00960E5EB7A4095 8DB86FC8FC5E1B519A63A10EB05B239BD980614EBE9F47A630A3E9960D1B1B30 ACF15F2B9BA83899455CB66EDE2804E4FCD5390BC6184AA466B65AF9C273C6CC 4CC9EFDD9DA23C2B6EE6D41897D75622D13639B48A934B71D8B5727FD3716690 9DB0B5CB21D990281E88930682FAC6C5F4E2F6B6275648A15CD4976BD7A2C3C9 3088AFB5C74CC7B013013FC07C1B0F3855B346153B65C1DBDCCE354C46997443 F0D88F3A566016F9DE8CC72E2533AB3D608C3879CA50A44987521E4AA87C7535 70D52212A6E9B20188A29AC8EC5BBDC36E5905AE8A98D98BEDB04CBCB86803E3 9C11481DC384480BA84D6739749755EEA5D13825E2A73CE60C4D9E895213DA3F D17614DE23A4F5BBB77CED37BC0EDD509FC982B6A384D354404888BF640EEE32 011B752126CDC123D644359A67CA221B943FC9F9AD3C21C6A6C200E1116C4EA3 6342DEB13641F27465E8BA07492CE3478456F4AD33F11396C683B645A9265A8F BFEA4B15045B6D086722C4DDCF6636F10B0C7AEF67DF5263BB3C3B0205BBBA6A 3CBB91361E9D6DCA886DA4811976AEEBDF9F693EF2B9C92AEFF1150396924FA5 6773EDDB28EDD632A6AB358D8D9481B681A4132718ADF8114A886D485BFE3B3D 5E4D38E5993452235ACE90DE18F05D3D8BA1BADA1C91E115FB44D97F3950404F BF60DE067BEA3DE4107DD9C602A1F79DB07FE8B9578253DE009329954D4FDFAC 03538C871E0E861A27010FA65520E2D64538E16207EB2E7480E120E7E951E687 53B3A675C2B7A33C87F74C712C6A3F7AECAE4B93B854BBD64B290AD73F418E24 ECC55323BC26742A57ADD9A875D54845CC152A0387796B2D4240D8FD233B7ADC 24320EF503F00864E616875A4A78E5C6812E4C080E1A9ED6FA5BAD10CA19F60E 75E9555D3DD97FA9D4FFFDD0A7F1976A5E6162C9274BCF9B54E70045C2DBCD45 DB89D6132634D5A247EE4D86CAF91169A3828801D6C809BA93731FDB1DAA57FE 32943D7D3777547C5667A36711BBD59519106F08EEA586F6AC76000B4B11F0ED AE10745950A200C4854DB95E19793DA183C0D65EA822A6E4B74D958C3C04C3BF 535B18FAB3A2ED655122C1936B010C5C386C4B7B9F0BE1D3540898DADCEDC7EE 15BD873F84D16075241F458C0CB77190A9AFDBCC06B8F9EF0826EB30ACAD19E7 E6F677680A43F868621D5F159E7D4FA6D02298013A38D07B95215341D825E7D2 6645DC4548F7638FA0E7C6623DB99DD3E5AFF3E98CE808EB2269D04F2974180C 5C6835B702BCB803ECED3E509E11F549D99E104D0072FD0AE0E3368B8BAAE93F D7FE42F04D18D1334487A4E264FE55637FB75AEDC315E26FA1B786EB7DD8B92D FFD25EC6CC2987C62DFFA29E8AD556D63CB52C5AC6892B6E1FF5634AA04381BC 1511469606DF08C618CF6458060F97F504AC0EA6313834D1A7CBF35EFFF4ED85 5E0778A7C485E61DAE41A5962822016DB270FCBAA00F6AEAFA29A4EBAD761C68 209ED228DF25730626741D50E19D1766BB895830397C8C1A72DB3BBA55F7DA7D 4148C1D90B37EF217AC492993BA2CEF9F2842004547AE32AD8A8999B3077AFEF 7672A0D505B382E6A41E9FA2D11C617A44D5AAC2042184266017C39B29540FC6 08B70ADDC1BDC711390DCF933A70D9DAD03EDAF54F8C38C9EFFD8EAD1FF65D45 11AD1CA1BE49E98BEF8BA210FDC8F146CA563F9A51AF0B1178502382A7482EDC EF1E313E3AD947109B58112FC644CF77308D2A8B377F5FB494E28B64E96B3F2D 7DC3A2D3F8E95EADBE7C11F92CC922FE78E07900D69898F357910436C69B63DA 2ECFCFC37CAE957B83C5B9E232E308B5090BB2A99C1A19ECA4763FFE3C9BB3F7 E7A8A66023438A6D0A2320F3CABF171C0B1910141987305A01E08FCB9D07BACB 54F5E23C26E05F97B2D8D4C29C3442EC472FC39C278AD0BE6DC19D91433BB8F2 0745D9639D35B97D9FEFEFDB3AECA7C3765A5E88B59B40E00A0088440F1D6E0E 01792EEBBECDE832E58A843D333DF394AE900C45C42C756D27DCC4B6CF6390C3 8450BC057D44E6E83D6CC28F81E99363615CDB0AAA8DD56BD454491A6E9F6B77 455CA95CF08A14C6326E78AA6FA39CA2053D332E1218056A952D1123C1C73A9F 6021124CAB7F23CC38A67F3FF7AD39041A290926E85E75D9ECBD7C78C05D8E5E F004D7B65CA97608F35E17C91A8C3ABBF76237B4B171AC566A0B9C34F578D551 1FB4317A794CE695A872463510543E212A8E61CBC6D762730E1FCBA388369494 9AB9DAB46D412CD198968F40A60335DFE34F255581923EE62B5A8984E50B34F8 AFF6606331FEECE433749E039AA1B74D4C6A27AA1F6730A86A7EBD67BD70C0C0 0D3999DE78836667371883ACEBFD70A6CD51D417ABEC5B2324D863D8DFBA6918 8ADBB879EE3823AF3DBD47E280814FA603F4B13AA966A7F7114BB0130E518715 C442CB4AE0D51C1F8811B902D25E8B2515DD537E9292429711D725F5613182A3 4AC989EE031908DD115C98349B9695F13969A43395604C2E19CA305FD1D60226 9CDC9C26724DE6F6B4819262B8E8A1114F633933B8E18AF2ED71BBAF27277935 41590F61F257066BC3F5A53A41E4AAC48C871C4CD6AD9FF3781B6038AE360DD7 955A4818950DA028D308779858C29E6D010F28451A3676A3EBF13F4F82A25D3F C470BC73BCA4C342967F3F77A0B971E5AF9AC80D5595FCDE497B774902B89B80 A58E83E55E40AE05E9BBC2C8BF914FAA83EE695EB109B713DB0A3FC67E102096 A7719209AD328C46C3F913A6CB7C78A290749BDE09D0C5C7947C715F1359C493 26A276EB34D9E0D1CCE459296FEC388078992BB794AEA66BB7C80743716FD0E9 E1D47B891D95ABA42352651B832AF5D8777AD257FC26E614C9B1807EB829951A 0153E30FF02B63ED75A314E206532D5A6F02F7D31EF1A4FDAF1DDB327DD36287 EC0226F0823954EB663F735073878B115EF2B0B069543626DD0292BA4C59974A 3710A723D9C00EEB118E98DA3A8934845C44C3F988B4553497248C3342122E2D A76A1FA97E5D1061D824999E0A67025E4BF678088B6B57B444C290DEE9D7C3AB B6848C14EF2FC6776A47BEE20CBFE61F667E9132E00EB96A581B154B437C8E2E 9E16A414F99AB459D532768C7905A37AC6F0DFE133B7D43F58AA2D43C0B63486 E769429461C0C574376291A00DC3E084CA171F9F546AD307098FE9E3AAD1DD61 DADD7AAB91DD6C00DABF4E6BDDD8BDD51D687F2E1B7162301F2B80BFCDDFC3DD EC3AF5030F284E2B869C89A196762FE21725A7F614C16144E0891EC814DF7CF0 5D4D3F66D56EEBAB3F8539D890B7D7C869648B58E6A51793C213A5D5D335E27E 3C6B2105D07E8751915662AA0B8F51FBA97169A66CF2195E09125F056735520E 6FC8AE0C5EBC2BF6380C1C6176B8C51F51772FB260C83C7CD256573AD0F36304 710A857C900B2BE113C5316A1825771F94321863F2E703AE4412E73001758478 94610FA250C774178992AE169A24F246F58632CFC2704CC92439AADC4ECDBE42 A35B595E632698D4AB4A56A8AA56BA77F732643753E34F6A6372BADB7DC4B872 3C336F6A425707F3A484CB46707D39C785419AA3B53A3346E1B51878AF2C93D6 5F81B5D88FD4AD6B0250E16394EF95AECF15B3F00D4247DB499B13FE31B73010 D2494176F67B8437C97401626DF51355C93C404461C4ABB7D92FFFC765E0BE89 84A227B1FEA694D32FCFF15D3EACBF9D33C5AD275B6AB76D2B79A3E0D0F7EE94 2046ACA982FD57F2415B6914733CA58DA9AD53B5169D973C3686FB1EE4CFB94B 8099312D9758B884768E82043A6345CFC2D05AD742B2B50A932D310200EA0207 FA6F0F78DF0F234C27C9A7D15491E6729C7665AF2BC732116EA2A2BD75A83596 6E4381DDD537450C431BFDDF20A784EF02B1FB68D64EA9B4DD4EDBC17AC6C60C 38D99AF68F29D5AE73FCEE7A36E77A46137953E9846F5B8F1E89A5A184AC3B66 9906B2715E3CA27FBD9A51220FC6B0CB3D7A2A1617D3C6B1ED4C98CEF3941EB2 508605E64D3ADA65B6260F0EDF3B483A7FD014F88E32BAAB33541FB16DE5FC99 D77018CE78471A24DC42A3E0CA3979527D049887023D024A3002B37EAEC9AC04 2D5F14E26213FE6047D0F4DDFB27972AF90D39BBD19417C0E7D682DE0F82900F C24B570F2EE7F2191FEF466CEB9846B1F387324D5B12B9795A13D8D454FF23DE 9D9221B1DE88CF14649B6C9F1FEB572D2BB11470C5D4AAF80CDC4E07E72E4FE2 658D8835158AD7B8AD06687BE521A647752838BBEFC0C9356A0CF1B73542B6CD 1DD5606CB6A9F6263B799230463616775209C2B2B8EC69C0FB00BFF103053EEF D164BE0ADD2D7234F5B93D9C79DBACF53630479948CB151A4BA659D490BD6B1B FE49EBEB01949EA4EFD789DC7F584D2D0FF4C2307BD49844C0A09B1152699CFD 00451F12C8041BC3569CDC068613BF42A3505E1E1EF7C15DCE095D4837A3B075 A1B8E329A5A264BD10C3C78FEBF4FD5963C0443E1B36B718ABC713CD4980DA0C 7E7B786EB989FF2DFD627A6132E360712F222988A4E6459225F4438F7464B01A 9B7F2C6EE557F6BF291DDBCF5BB3381F8C5AFD3DCB67CB8D885C38CB5CE49EB3 DA040612837DCE5DB1A56ACC3819EAE607D852BF64EC9BC75371A948541AF8EB DC5BC4583E013D578715034B7753D0BC6F55AB54C87B7FC771B1D0140341736E F99D7610E03ED6EECDD1046ADA13B865E118FB4322880C19BF933549CA1E31BB DE2DB4F370E015CF1DCBC99D792297189D7BDBE5EEDE7E30EE6650F33161D319 6F6BD222E804A6507BA2ACA37284B25E455B0537185DAF8773008BD6EBD113BC 7B27B47AB8E9CC8B6A21BD6FB58E3FA32C81CC3EFE9135234AAE897E191A2600 A6AE60220207E885422BB1B48B2AF4D4CD98554CA3BD3BB720FDA9E8540A1FD0 4B15777D2A23C60AE4E9A80B1A9A6273FEFEBB7AA57DD4931D88934A91490B06 F5AEF60987734D8435BCB113E56FE6F3FB2D3A0C057DF82611163D91E032B44F 3257510434B96168D0A1C91C12F669FAB09961CAA5759CB880F7CC8581FEB999 8D73181255DCDE6852FBF100DB92B70EA8C7E2B82C5C2D1B069E0B126FB09845 1F828A67AA70CD628BDEF776931920AA91A1861662B30367A8B75F7DB9585601 F3BC666F1E422E884A49156FB8DEE987F064788373A9C98B9A01C5E8526B6120 177D3BA99D17A99CFF561B8EA85AA74FB443F02AF95BADB1496CE49FAB52B3AB 6284DDC0B6F8E286FF527B0653FC3BCE3A791536C6662EEF3F21023DCF65B05D 3506D713EB4CAD909E57C9672D911DB320ACFCC0724F25E49DB713B979A9FE44 329918977D00E41BDCB4A8BBC984FD743BAFA0AF1845BE4AE1D47428D124909D BE639284E91D71CF630078EA2FB7408731A88E28A9768961C52E2E3FA37F3FD1 E34F85E189D822C9ECB971D9CD819CA028A138D741DFE1FE8373E3A7C3373270 82AA6B286D19C1DD7D16D61326009A75E2F23A68A5ACBCD453E5516D9198C125 3E3C172A730443463B36110E4B1CE6776077CF23700A36A4A434C641331626E4 4591E792928383A7463F3264DA88C9A22140B0752EB0EFF7BE8B684131FF4F4C 19377AE97D4EF96532FD72DBA9570CF8F52457CA48FB99ED65B8AE6E8AC2F982 03B338CFD36CB681279E9094CA6F110BBD4D633629CFB0C5DA424D2003CBF6DF 1965ADE0281C20C9C872A1B987BE11FF533F03EB9173739D68EA0E2FDE0C5BB2 9428A037DAF9AC7560A3551FAD938B6BA40D5F8F12BE6960325EE234F255DFCB FD86DBAF8B027C2A34C8AA4F0D0EAA3CB020591A784B25BEF370C99AE34E2202 6395AE62B5B71DD4A551BDFCBBFE8F7FA64CFF587EE5B03A8445BF66BF7DF203 6ED5104402FB9B5560FDF3AD85617DFFB4C8D0FB27931073F3CA6C55E6E54E02 82CB95E852170FAEC9D6E26B3B49152C3DBCD5BB22F5B212999D21D23CF371A6 02E8AADD793585C7B8BED25D7E6FC8509848EF83DA8B0CEBACFA64D22BFB0772 D5C50A431235520DE11BE4F280049613E70B53629E6D79305EC6333BC8485378 25630D8BD49F12963C1EDA7FEECE66B6989C18598F9F1D0E1DF584F83303AF24 29A47FA93BEB04D73913C112AF4F17BEC47D7A7658FC08346AFE4B2A7146BD61 5DC0395C52A0920393DBCBFB31CAE13E8B0C1AD9BE8AFC3CA81066890BB79CAC C8B083ED7853EB74795371A2C72983CD9F35C771C0707D9140C22F7E9D148D8B D8FD578E160ADA08568B9ADB7075F426097A0C3BD72C557D7B8D808A1D24BA33 06E970953C6A952AB7B9FA9DBD3AF93F39D953992396CB4A8CA699916FC666C1 BF279C4ADF1615EE65BF22C3DC916B0F9F7B2CC54EBEBFC9E6F47290896130AE DE1B1B599CCC39208D4142D529A8BF191B99B1C49E60F969647EF6FF5304103C 235F10E72AA15473AD31B7DFDCEBFEA40B73D98528B9BA34115E2D428AF84702 BD9B3296285CABADD2038A505F67CBC6226A942561D5076803C8E57012BDC5D0 143BA3A2F5C501AF422AEFB95116C5C40BFFACF1BF7F663D35551F8B270ADFA1 7C29847D1FC9C91188A3E30D35A357033C213FD9C4AAFFDFCEE8E56D0F494570 377825DB4DC78A2E4910321F7A99CA19D8F63B6AC5DB9DD3D25A6B7BD9B59A0E DB5F0A25DEC3BBC96B3D26FAB85CE144D7834A1CE02AC05898F11B8415A3CF25 AC20EA39612951A5AA6246DD379656C8E42007491461F6C237C6A21A4633ABC7 9096E45DCEFBFE5750F7D223C6D00DF0974B98FD99190E48E04D6AF706F3C9C2 4CC83AC842856F85563B0D48DF0B04B2FD6F3FFDD891F608782ED50A2C3BE1B9 2CBAA891ADDB4D65F2651F1DAD6C4A0A77B25F3B6867EAF356D30ADE19D406B6 B96E61E18FA814F25A4EC9A7DB9A97E7062DCA91768C2C57FB065B001D966263 21276E0CBB1ADB60360598561888946F39E0AAB25881B90D6B08698243086340 5EEA694B7CCCC012165C4E32F2272314252B5C937BB54329C078C37E8BBEBD96 82813CF7DFFDAB3F2DE684630B10BCD386D19E8E653E220F4403C5831EE96069 94F23EAD50696129006B8CC3160DE8086C978E92886169CADEDDC53C6D0EB174 DE2D95EE0AF5754A954E7806D202964D8E679CD7F93B8E5BBE02AB2417524888 1AC98AE1FA2D369C70C0179F086FD3B2A759D6219B6BC48252F970893C5C1DE9 5CCEA71B1A0F10BBECD9A63D30F6469E0AC94EFF99322190057B2FD5A1507AA3 D242FF2C3DA7CA93452BD6C658831FEFA2A2D0282EF662C3B0B8220176860CB9 4E2BA62E6E57048875EAF30B0093B782764422692D0067375843F96647735D41 8C19C1ABC9D8B0BDF3D97F21C5900BA2D9E45A0979B21FE7CA2FD50319EBE343 8A16E6DF19AE467FB3C19FDCBA1017211E259A3D8EC4714E38C8405C5B008626 175E959124BDE96372905BB9555798DF405DE23830F3F26BAE7058034A0FA2FC 0BE9640C22D88A8547FA1938DE72515AC0847A820BB6116C81FDC85DBCBB4BC7 D81815E0260D9FA0E759375A9E4721CC2204F4CE00D0CA74E51871FA34875C68 0B1E05DE1DCDDD21BF3AEF51482BBC19DC6E1AF3C2E3C915102FCA956BA86CFB 9FA5F50BA977A472DDDB35E477ED5AEA56C005157C7AC7627E529F60BDDB7422 BF4C061D7029C0F85DE7D266263FD23FA9EEEBE58ADA311BB0D36FF1FF0802B1 299762D3930C34D69EE4CE17AAA7326835A4D553BB045C4A216A4AEA82AF36FD 73944CB69AE75F9E79369F833EDF5930646C3BE057F457B21BC52206693E19F9 A390AB95E0FCBE021308220B9DCFA3A2C43627F105464F41CA9ACBF51DD01816 87595BFA78440BDE4C69A41DAC308F5D19720E1F01C2B3829160738FB498B2F9 C52ED576618B3998576443454A07B7784FA0CCC0831461954C05C364D9B0B09F 467043627E67D7FD66D583E92183A52C3EF8C0179E05661D41DF119605ED3202 3B3E1C232040B475CDEA8E0AB92B881720A079F93014937C4BB2450C8A7A6182 820CF7BFD92B71B2924972DF468BD9E120C8C3C96A3D38059DC95E2497BDF251 639DF3BA5D34B763AB8E8716FD5A9B8E1AA0E1C445B5417B16B3A2DE03C1564B 32A17598D24AEB4C51DCDD7D28BD0ECC39BCA860E5FA32FB8DA4FC960E488E52 EC7A3B42A9701DA7CE09FE0DC6844E26960C6B6F1D6EB3C07C903866117B3FE9 D51AD8C654048C70A94434B5A2C6FEA57D5071679FD41EBE6E6EB7C94FA9E49F 13534142F2FFFC56632873F5EDD88190A727A57EAFA05E07EECFB8E901A978FF 66B1B6026D59E36EE4D11B667161B01021B1697EAA4DAE1789C85E90276D6E80 3AE9EF553659116F60CA3790D10BB50E21DFF508E8C13AE909A031F320ED684A 4757DE36C67EF5A61A9382DDE8026F044EE45D9299BE637CE9F3FF1DF2612E94 F1AA8C6C9CF3E7A7DD54EA60DAC781FDFC79FA23A549F9D045B7D33815AD1862 B2443B02B7017DC77784967E9535452F3466796A1A79AFAEF033087852EEED3B F73B887659C3B5FCEFD0B3C6CBE54FDC4997B52331FD58FAB9A3636DA029B88A 85B74A691D803AA3A9C24032582F11E3EE8369B5F3B5E9D121896A29F2E6C65E 48692E4DAD0296BE653A632609DF2C7536DBCDCEBA1F3EA21D6E4848780E53C3 C850611024B2F2CE430F725091F4D94262A1963B6434A3B7F7DD2D48725A9530 D1588A863EF323BBB5A628472E87FDAC1F10EEEDF42334AD39F659AB1D3C174D E9CF07772CC74C112916CCE5E02EA1F813DD7BA5A2B8F5EE63529C4509900B2F 410B7B16E6119ADF83659EC1A742688C1A1699682B90C518B3DE85479C890E29 A99E798A4BB845A982169F7301CF3C4BBF583E6D79AD2E49CEAEC0E7D2311FA7 5756E69122F4CD6AF69057EB6D76BFF0C19343048B230A20361E33297D683AE1 45D1687D84ABD5C8BB836048B9B5E650ABBE68E66EF27C89AE01DE9BF0E1A0EF C5DAD166222EAA95986D0A31AD4FFB210D8DB5582D92AB2085FB6207313E3BD0 0B8D05218DCD8124F8E9AEE538C455AC0F3A121C53A27B963680D625AF421DFF 718D0682B8FC8994D10F80EE7CFEF3C7A22A2622E8B685132DB7AD8B8EB74891 A10B4DCEAE8EE380EDAA8F13931F9D3DCE875161CF52277757980ABFE42A15A2 9427A355A1D0E43D51E5259C1236925DC69CC205D8C4286E7579F990A29F6A98 C0148F081FEE5FEBA4CE1267AE67C854987B9B70A41F730768967A58046D80F4 9FC01AC85AF924C87CF6A97D017E382E2C888BB1C80138263B8E0DA15F82E169 7D23A24302AAB8CADEECA545700D979261D1F7F1142F2C0CC2F3390F58123B88 77DCF0DAC085BAF095BD3E158572FDD033E44E067F0D0447071AA62B1B4FF680 B841E0C19E5443970C937F80966046D7A00A5DD1AF38C18D95AE7732AB983511 30622485D8DFE310AA3613DB5F351C9D1DBA6FCD686E38148967004A5EBCAA78 9B6B31B3244FAA863022D2762D43BDED9A8CFE51DC9A8F545441E3A478F0933E B187A85A04E4857AC883BAC5F42A890C93D38C495F783CAF9780B6D2BF160363 2EC4DAEB9039526E575A4183F9C02B56785C6AD690B48110030507634EA65649 EBC356154C92197E63103FBB8E22D39003AE100B70A920CCF051D95BFA98A5FD 912B94289DDCB7C05C6ED85A75E27FD5F74F86486E23D2988B6DB358F41471AE FAE134BF06EA5B5D1831D9D68FA9791B72D3A2E54D1DE5C2C6A8DA1DBF18C280 C6073F817125B132928E2EFBA35BCFBE39C1B88FFD602D2D216EF0473CAE549D C6D0A2E6E82E68404259516F3591FD433517D9C9FCEFBC9A5CF7B5B27F5AB430 AB18435EC8BB9AC2843258FB72004AF4CF43228AAA717CFCE311ED7A785D1D19 41A7D56339F7D5A6DCBD8C2473738D9EE6F0AED82C56E7CC01CC7812ECE57061 43A65CF7C781FE0994ABAD729D54FF48C029DE1F8473FE2A77EEA482C87C0D31 E3D8B7C0B58C7B93A535B401725657E2B81F602C0EC9D5E38C1AF15718346664 0E95B89D0987153BEF53185D351D2AB2EBB8F88B44580A7C8D9114A1CB01D29A 788656E462955BEB11A3CC309E5349B033F33B0213C10166D67A24C877199DA0 76F0D03ECDB6EED7C23062FAD575FB03D34ECAA6CE3F3EF5A4A4F44B94955424 60598749E3D93B9FF2260A1EED71D6FE5D321F658DB5155130BC84C8AF3CE339 8F16E09681886C2A8456B547144B3E52571AC2E8E30E6CE628C48BE2D08E67C6 D2A79325EF9C6C4B9FBC621FDDCD1A9D62A618E924345ACF81154B583589DB80 6F572ED120A7067A893DFFFD64DBC2D7859B9329E417C0713A5FB0C19B10DE49 864629DAB75E73C3E82198B00E9F40AA40E51D8D64AB90C14E94F51298C8F20E FAEE0DB31426337836E77546A68D0C3BE4AE7E54A693E6645F4C86F0199BDF70 C9960A3CF831EF539CECE72B563E7DAA9423BC14BCB069F045D906DE885D7425 726DA4C547B99590E71B83335247A025A7D3DF1F6C37A9B330A62E8E09462C89 EBAC587566817177EFC52550D10043D933196549C0FE765F2581E74ACC018898 27561470E34FBE6D2A2685E6520A4414D7EE1E8A038E082CD20FDB77811766FA D06186B6AF02B84B0FE903B99ABF0C8C595D951458 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 42 /asterisk put dup 44 /comma put dup 49 /one put dup 50 /two put dup 65 /A put dup 69 /E put dup 72 /H put dup 73 /I put dup 78 /N put dup 79 /O put dup 82 /R put dup 83 /S put dup 84 /T put dup 89 /Y put dup 91 /bracketleft put dup 93 /bracketright put dup 97 /a put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B83BC0F1C097792CFFE7112D039CF77EAE73CB4E02BF 60F5C3F629F7BC5A27C207D70DE63FBE0E023452097D5B7AA5B2CAC668D4D075 1A0F70683E96AE35A6BA0B59619C215A7012568991AFC0C35789DD0ECE45C649 F44580845F0FA422868CFCC8029513235C0286B76196E350498845EA934DF289 1D0C954B079BD2977384B96D8460B4F50EE635A4C8F7A3B6866F93CA641F3F2C C93ECCD6BBCD792189A12FC9366BA7134EFD67A22B4FD62465250E0BA6B7C627 73E8F50E379328B7FABA341B0D50F9A2CFB055E01DDF6BBCF6FE4114BC36C10B E581D76A84EA12995506C33DAE9035683FBD5F54AA1545992B94B8ED946E5866 2F2CF263CBDE3B77E12E7D863F0A87788D89A93707CFEB6A5EA14C8BAC433C65 56730E3E8985960FC4D00F2B821A9218A20F11EEC2D6A153C403EC4BCD0B7573 5BA5398D8A252EA71E8928674FAB4CFC6C2FC36E7CB12136830849198CB0B249 74C07C83EC06B2E0A5323E3320ED056D02B614EAD64E0F8F083F5892BC3881A7 A9279ED632967D7F5BBA2B7CA37F7BE21987D8BD349C3DADF4682D4088DDBB35 D6F8F74749063C4F59AF41B9AC950E6E588B3856C7F7AA1C9030B9AEE3D70321 2DA63309EA56951A6E077EE1FEB9BA112BA69982E9EDCFC5A3B462FCA9D16A5B 951C2128F30DAFEAB3007F0DC4F16F3D38371618A2F4848A9D0D59062E63CBD4 E4E0F337CEEA736493E344617B5F1EBC96096B66ADEFD26110B4A59C69FC619F 4CBB9FAC2C9314C831A6399B611D597F4F817603450983BEEE834691DD492844 A222BFBD54593B70F18BBEF4D0969B1EA062F7DC61DB08F88E988B58EF871C3E EE1F380B98FBA95CA4E524DFC9DB291A5222D9792B9AE3A1F64E868B1BA4B5EA E2BC7C68C837776B01738FD3B8D41A3091D8B9A27050E56E0AA39F8F3AE52AC6 42D30C4363786477D1C2D2FD832C7E2418A7B1E24FAEA7AB5AD1B99E319E3319 BA790965EFBEDC46D4E7699CD4FA57A28ABCF8D4C05D4C7618C133ED3180C465 80FAD466CB46D5FD53216F0F15EB9776562B7B6F808A9D8D9F4DE099D7C99C9D 06588071FA8C36F774B05C0D65259DD0514539030DCDBAB67D6E1A19B2A6A547 3BACEF7DCCA65B35BF4FCA3531D08DC5A301E0C112FAE9D9173B7B47E7F7C531 3103B70633AA09E4F87D64CF5E3B7FEC94276E910FAED3C4B30C32C3743A5C39 B5FBFB0D16C2B1998F53A0C3CB48DF19B4FA9E98BA3D503F5B82EDC2EFCD8521 8C9006735D194CCCB8DEDF3D465F2C057E1F8F2D35B362EF9D084D429BB71584 62AE48163478E7FB8AD99F01600BAA8B77C6F98DB7DCBE7E0C46B917EDD2CFA1 F209D9A01CC283B773BC469257401809BFAAACC0C9980C497DEEA796A60B992E 39F098D4218AC55FF0ECE7BE1CA314F586AE82CE5B71E4AE1D768BB52FDAA949 AD21F4FBFC0EF3CDD44FE8D92EB97776F618AD9E38553BD0492149B3BACD7FBD 7440BB8786D93167C8E4FCF61AC3D360B06C4424F4D46FA91B862D7A27BCEEE6 C3ADEAB1CD0F8A8752EFCCB3E592162C57933169DA1DAEBFC2C866C10A5F7840 5447A38BD856996DDD56BCAFDFDA2979FBA4AB6D4FB7E70E20B76F5A2AA3442A 4EEF4B1CDBCB3278A1F55C99C7C4F7F34C81B063F8255348553E00D3CD5F5A33 C7FA5E4FFF58B2D19B9D04915B1A33903ECD61512AEEFB41E67535D32AAFA528 10FA9F87F68EF03DE847AD8BE921CF3D20D06098BE223F66DED6AD3BBA11F79F CE8F4EC2A83A6264406B36A48FF893E972BBD98613C6BA7C27804BCF2FD5A4CA D8DAA8D54F14C21A361CD594B9F76822908797D78288D86EBF0E627CC4C8F79C CBED3B764D2CA0D05BEDABDBAC5E09E2080CE815A76245D0E0F13314ADCE77A8 6656CFD4C2460601ACED80939C44F600BCA055BB0332198CC80ABD2A7E361E26 2AE4C41F97E34A97897586C5D79FFB57F5BEF34EC91CFEF1FF1F64F7D1FE945F F0DA4CCA520C5941F83318E765966FF0B9729FAED847F59264E7C5752AEB8AB1 77426AFF9CE3AF2C1A3FC8F8EFC4B6E74A2201B08036FAEE8F74D6E74A0D397C 7A7CE3E2D1F9BC1CDC1FDBE1647CA8FDD2AD012EBA5D8D4DBBA99BCF9ED3EEA8 E8773C09545D482E30653D9FBCC67B925D48363D75B11A0E402D9585C2D5D053 EBF046430962FA0D514308B0E9DCC14CFB51C0F9836B2244650E77777826DC35 B5480DF48F8D9A9D731D50FAE55365BAACBE23E7FD0F4F6E22EE8B17F1CB806E 3FA29E94280B973A85EB8CB57C047605811637076E0D98C349353BD4207FCA1D A11094D4DCDBB76B4AF79BBBC627ED1D176D82FE6CF34A24EF452B1F26F543ED 2193C75C0C003B6B3C030BD9AC90C312698C4EEEF07D64753999E7E45C326DE9 D5F1F3717D94E94E4B27F809444E1E474358D138DFABCBD6FC00E5DF2B6628F9 89CC2B4821E8486147E9EB9CC942809FD4514C3FFCB1A9DEAEFF56EF66277F41 8E3F7CB7997BDFAAC4429B1FBE3CEDC59DB54BA0A335AF065DE6A9981D9CB365 86B48861A11FE0AC44C1C6CC9EFE479427C4CC328AC44D3C4312EA23A04F6D82 A9A0062AB6D412C5A1A8CB99E7527C3B37FF79343AB8ACD53B6090341960823C D6F5B332A2EA6C19E5B237FED411F3C088AFFB94F1AE2E4EBCD67885214C1333 3644DA63A8BAD52C9408C0E34AF8ED898422A0A2A4B8E9698142B53D76462200 36CF4D53F66C51AFE6336651AC3CE180B9C382998331BFB6A86B973955D28045 E5106EF370EBD1B57300A0EC9EAF11BA81A19131076A75D6364556F0CCB5FBA3 872299EBC8A91563904119DA00450E360B5B7C5B6A6EEA87C10DE6B911109D46 FBF66B637688E63AFBA42D647637A654D7D16F5A85382EBF72A7103359CB5899 AFA4C0217EF645D765BA796BC00788DB7590F64EF066F5DEB3321090F544FFA6 1F2185AE24C9C6051D625C2FF4D0CE0A476178E9DEE5A1A76E2139419AC8C875 CABCCB25A1A1D18E4422015C6B8BB9EAC87F01E6DC4B5C194A0AFDAFADCABC1A 14F9B80BC7CF2B18E2C9140ECB160CE260278344E3168A17DFB3612E8336800D FF3A13DBE3EDA20852D38D89CAA2B692EAF9E380302C7587C5ABE01A862FD37C 1BD1315ECE39E266FEF9D847FD2A45DDD7A3E662C4182233EF90573138EEE323 F64817AA1398052715686BCF461D29AAB9957671EF40869821CD6D5D499C0862 17951DC682C529CBE8E8C0D49A5E6FA0956B2BD29EF5870CC2A2AF06EC743EAE 6D9530AE87BF2018CEF6408BC4D97086451A0124A841A094C34F2A6FEAA97D68 7F60A45619136B914439B1B12326314B821BEC74CC70ACB09953F287C5A0932B FF84B72200A20FFCC7F0038B44A5A0E9958490F023D786EB9E2C7C88D95C1EB5 570424C0A458E89B31F2E681B99CEEC4F6A72E7BC4B7E6F159C84268138AE583 138484A95D42F3743423480678BC749D90B1E0233071693B87E9277F3A1D9D43 1A0CCAC46EB872FD71CE75BFE106580A89DE930211125CC6255361FAAF2DAF57 9F4A86FB8F1FD6BFF647488691B113F5F4621614E87502EC3AD9C70B8770755F ECEC384171BE34CB185439F8B1CA228A0E1E2FA02D38FC2E6B1A1B1BDDA7648E C39306D18013CDF6F9FE27861C172CC1E5EBCA0F9395DA7C363799EB6476A573 CC95218E4B1387908DD37C402C5E14DB7E1236B1BC094407906120EFCE4D620B 6D8279BA52D64C5C3BE3D6E162975B61D1B8630C10A5F342D4244C9793C6651B 10B0B67CB877E7BBD8190FDB646C044734EDA86407D9E3414404E392EF366FCD C7461F6E08AB2B09B4FCC7C98C97E4ED4CDFBFF8AC9EE7E97C1A7B3A0DDAA3C2 F9849E4003A8F043BA005D297E5A292982CBB759439F9011B3261433C8EB3F92 E3AE95248806CB2665DCDF4B3759A48E1EE84BB1B8693AE805F4631974522203 3F467FDC225087213BF2D79B8B148A47D96DCF3F22F3005FF5541898F95B54C5 07B931899E8EA1BD0F4F46457F63D64E57CE355BBA9EC53AC8257B1B37ABF0EB 3429392E1427A120FEFAA66D1FDDED3F1D26439168690F10CA3C48C8921735D7 E059470DF5C64F1EA4A20857EBFB70FD768C2DF77B90FD83D907268269F2D233 D603056697E13F1B46DE86C3153A92A619912D6E5316E0D1DD7F5DD8C7FF1B5F F2FB39A652F6536A5BAD407AB9A5C9D93CA5A6284A9FAB4D353D54C5CE177C95 C2C3E5918524DA01F22BDC2E60FD35D43C46686877A088099F000C632412562B D30BFA5DA02A94740A250DA5F130E3ADCDC390F2BDB1192DC7C5A7E4D7D908AE 2E2D50846BBD1191FA262B2E38416B5F99EF71510530CD803DA1303CEA9CD053 24ED32D8F992521D8F3B358A56B42D89EC455210D052023EEFC35FBD2CEE6A76 A9F715D6A19BAACB7A6E56E4DF72F516C4F9354024800017E30C3D97EF968CF0 07992318D1C9B8DC96AA1639B0B0F460D679D6306B34CE67203A97C9A2043AC3 671DA26BFA89B90E564C29089000CE852D7E76776ED7BB562036B78CC746FD2A B45880E09EEF0F7BF4BEB7FD573382968226E4AD9094D801F07B16E63B83850E 88111A93497978E539051BD0176D51E8888C1CB09AB7B64333C87C5574772010 A74416F6D539634394B1BFFAED30DA7F67B36781606366C11D722A8C712638E9 0341CBA1A31CF39EA1EFDECD7969DC31B06538765A2E1C8C7267737847BDFEF8 971FBBFF86F375979CF48E6A34FC82FA9E2A934764DC72035324577A84225BE3 D0BB79BA56D8EAB0DDCB541E50A2DBB501D7CB45D8FE16C9655ADA08BFFCC38B 3077D05BA9ADC17F6EFE5F85125AE6A8935B00856BD588BDF0562E5224A4A4F5 3A863355F6067AC8BD4ADBAAC72A99F351D82404292DBE2EFAC89921EE4B4784 28661DEB2AF55AE6EEEAF6FB1C7483135D0D15ABFCA646FF3D64EC992ABA0FD5 A8FCFDBA5080ADC60FC4B93CF4A84FC30E122C67D92DB0DA18DFDCB0D6BA9FD9 E0F8C0286FF73E9129F37A863033C1E933896E2D47785B8FEE054EBAB376D670 3346EFE8319B56827B4448429C5CD70ED1138B209FE7CE20CB3CF16612657665 73856F9D127751D0F82A61FA10A366060746C0A627E39ADBB3B6A3056998D623 1A08E7F86E6CB07B00AF5781F287BB62B553BB1490CE885BEBB92C9240F1EFF2 CD6B893C8CF63B600B2FC17BC96AFB51C0BCE68427D843E5F98851B5AF735302 EB6EC9BE8DE93BC5C6F48B309CEC0006D15506538F01AE8773F457CDB07D8A98 EE767B499D60D9F115A692949754FF4983B95599F4DE322CA7F9DFAAC1658C36 C2268D5569835DCE35DB6E40030CB28B30E31AD16AC8395F66F39F5D9DCC0E5A 273E3111A4DD69ADE07B9FA18C7A7EA669164C6851A72EFFFFEA3E18B5B87D7F 9A5331599ECC82C362A2103DD50E9D8825898D360C73A7E1E4E9ED66130746F8 3BF5542959DC2210652383EFF1857D9657C67984629BC1E14570EB254C3D5043 1E8A0347F9ED66FBF17BDA2C713CD7DC0F5347F06B3432967D1D0C4F7211B5B5 CCD61164D5C9F01A0BA207D6EA2724F67F84BA845A28F1DCFB5E59D4DC57BFE1 50864ADC1A703DBA46EF00F2F4ACA298EC1C1DCD26D647014806CECCC8A93E87 158F2982A72C2B7167A87207D637B92826AFE261D9763A456F90E735DDFDBD09 1C176B0C0D1774D9FAA5462C2943715E71F3C8CCB0BEF0AEBB5D00812E64CFEE 282505EE165C6777C37A0CB2B7066F4CCF84B1578DC1A1165D1C60324CFA0263 08FD152E9D3BC399CF45036466B70C54DF463A19923356834E49FBAA86250899 4F1DA6637091255FB9B16BFC9DB377AC505FBBD1DAF88233EFCE65F1F91D7428 10BAFF60705AFB67647EF947A26D86E868681A18E60CBBB552B96FD411100658 1EF8A14F2E4373667B2879ABCB2D13D97A7084B345EDFEBC6B329CFF8F828330 8DAA4AE60B8B3BBE78C05ACD0DC43A6907EC875605F84716A4E95FB406A4EC1E C5DA35309A932CAB84F62A9045A2D391A7728D51B18ACB5CA1FD1AE58976FDA8 1F8D86E3052DA3A64360E1DF8B9407979E583F2EB2752C8317B255F73A2F87DF 8BB2B5FE9464B360868C02DC6182C634140D9D51206B57DA40198D911CEF0691 9EC2165F4BC87618D1177D281B5AD42F39FB0B76F678BAB0A757130078135EAA BB8A0260B772B9A748752D281FA0568790E80AFCBB1340C5E6DC160471802D8D D754FEE5FBA6532EAF51163DF21702C81E315834EE88F771CC9CF1D33E20F561 1E3E661D89EC5C535FF486DDD590AD7F072B432EB842C7A6CE4C52C2A5C1B80B EBBC113C933400A257B2E16888290B16DC53991FDC668B304842C8600B9313E9 08D29D7F02375F216DEE47DFD6E1D3C04F2D50977387457AF1A7FEA816D34427 0278A675204C264FFE5C0EE3A21CD6BE7FB3A025CD33D6FB112BB0D0D20A416B EBCF0FCDD560A5E0983019CC7AF66D92B52C881153E8E12AD300571ACB5BAE05 17C00671628B1E76E899D116B9A140BDD9CBCCDA64600402E6341305E77B1A7F 418E108F85A4427F425784705844344B6F405352259DC6DE7584C7E0E5E2D22B 6BA08FDA205B0DB705E8FBC9C917A0CE1C4AE14C17A0E98042CCAD0D2279BC79 FB504AD1E264015F95B5DECD45332947C70C69FA10CE0B5FE6C933960B4866DA 43E4B1283ADC307D18ABDFE9A8A2B10E862C5A771B346896C7FACE788569E483 FE26378F52AF1D05FF2CF8C09119F7250D4EDB175CB7B958A8013CF68483A2FF 93A39E2D0C51D4DEBC50E275869570686EA784F7F13401D7CD2619FC435F1344 320D875C32319F796E494F75604B326CBACA2D5E16F37DF3E0BE72A649BA7562 7EE30478DC8DE07D32A0FF5C7072D0A4C4CF36CD9E3E1DD20BD28B90776865E3 16334B2A74EBFA0185FA602445ED88AC4FC8ABD184BD0FEB2713A6DEF4CA992C FED715F768F9D9842BB6DBF76B201A04D23055193A9C93CCD0717A2045A7E0B9 0D6466D1B7FCBFDA58AB8F758593FA72A067C5C627C52EF12587397C6D626AE1 28C12AE56AA1ED22573AC2897FBB7CF56EBD98BFBE369545F66FE6B4350EE538 A419F9F61A592B7A54179B1CD577380DECBA2465B62EB9662BF2B82EB64279F5 728D63F13B123102FD0727CCB312918FF43FF5543BDF8A0B01A7881E71F4D05A 531BE4A89EA6809F2BB681A9DE9F53E37FA6E2E710086DFBD2FB8A7EC5060864 9DB12C1E043A0C0FDB3EA5EDC78F400753FDA077EAD9EFB407EFF4A4ACDC3BC1 0A149991A58B908EEB75581D2E2EF47E64EF9145485F652379E9A3C01117EDA2 281D91D363E8D7588F24794AD2CF2590995A3339C7430364163AEC6E31529CEF EDE730EFB5FBC05DFB61BC9BC79367E9FBDCA34A4A537F78AF4F141DF5291A77 A2225E7B7EA8DE8048F644DBEA4A47DDD8F275A462452E5737F8EFC04EF2D779 25BD61881D197873B097172331B61256D45FFB8447D6774AB3BD150CEF43E0BD 043C86D3C7427A3D521D2C484715E4A48693D647DE2D84003B48AED1A96FF440 4A586D53BA76A434AC33BA6F9C6F4B443135F1F35FB197B0FC92080ACEBB2DAC A46B38126DC5B87DB7E1E83C7DE21AE5C7156CA18005ED6AD02B4CDF99E1B21F 978FAFC5954EEDE6E394FEB95CC559A6DABF05ACDC0796DA6A39DD25A7BC9477 C4795C728928C1A9EE1672205D07B1EFAA8F4BB2BB413D45738E8D474CDE2299 552B37BF12EE136DC692F5E742D809DFE6D18BF866909A87A2C62C526BCE085E FE8C7ACCAF4A4B9561E3E3BE14A8633B885B86EC57C0D8095751536548C74963 054189593A7BDE80B28F6642190AA560ED47BFA85FBA91557627D3EE2BA2E851 DE2E17EFDEC23189CB308311FA623EF6F86EC34E231304DEEDF5E9C6BF964126 F79D5EBB5F22C70CA5EE66991CB1FAEEF95E7E14BD5D25E2871CBD2163DA990C FFDA3D174140C7635710C1B3B927989111A6D37C8749EED67FBDD93D0A45E873 E7398025B1DE7F4238A118977749B489923B4E6AE60162B6105F5E1FA02ABA5C 84C1B26EFA27D1A5F58822A1897A374F73EECCE0422CC1D0177505F132DD4C55 6AC7783729BB7B6A1CD33FC430A264F229D0C5A69DCF9F804FD1F01D575E77E2 67FC00F6ECF7B3F592A7A49E410E8314BE48BDC95560401700C11A15DFEB6B2C 189646F7FE7CAA7F938227F0B232BABE8865E8D3B764AFE6EB635ACAC6BA7C40 CBFD610D215D07209EDB7B60807FD3DEA51E9DB40968DA07248168B6DD4C3003 F5402EE2695D212B4DC983CC2EF4FC5BD59320EB462C88F2F4B62CEB6E22A726 09961D7E4F09260BD5711713C32FCE1689E2CC03BB005EBAEA2A942AF20E3635 D99B2D1C6E349EE350C923EFB6815F8BBA40D947E2619D62053E72601EAB54ED 5F20652B03C8E7E1D65896252B7D436B77D3692C115D114F5042605050C3E06B 2637DA6F0CC97AF4D51242D59D335491D67E95B7149C3D323BEAD304478F4196 7E473D7DD7C9B6E1E8EEDFDA487697286F939A445B5ECE89437FEBD59AF5836A 0FC41F7AEBCEC8EAC56D827587843055E19629E6BA0644DA586493763589549B C39EE3725E9C20692F2023862A3D29C4116F875DCF7D2BB4E79BFD54991A4FD9 A7E852BBD7CDB42B624C969FA6A7DA55CD2E92AADC4243ADFD124D941152C53F E3764D1EAD5A6623D94036E1A88C37791DD21C59727E6ED28FC5F644B6CEE4E4 9132042DF830F9DE1E6B78EC16EBF7687C4A4D07DF3ED52554F76996D88E40E8 C30572AD06D64FCD20532C2B6BE71E65136EAAF008638C9EF102EB32243FA5E7 1DDA1FEBF85FD71337C818C953219F592640A6171229F0D8E1447C4AB0E6622B 5124945199A32EDB5125FAD3C022FF2D0AE256749223A16829FB4E1A0B60590F 4268047D9DF9CCC59D3562D5E44E29E0F066F23AEEE045707647A75811D0351D AA4CC0841BDB7A63EA0BA675E4CE4CDE08975FA95C99A9CBA60817A52B5E6417 199173813190A6151058DB86852F2C1BE4DDD1266F911F2882B5376B60C9C38C 95B39F8511CAEB1E3003C279A4CA1FC38FF69C833DCCB586FDFE22BBB49D263C 6444EF2C6CB9979D0CF54FC8EB7BB49EB3569DDFCB71D0966D0F0D2CD69698DB 3862AA0B9B3D90FDE9B4BB39726EC682E8974AF9075539D975CE0CF5803EDD6F 9F9ED36969486CD805C96E5DAE2D50F1246F36E95A974327579DAA83A63AF308 7BFCFF42022C2D949B430C14B7536CA6AA82930B14112F87E9854AC8D6185267 0528A7107D396A034E337A4B73BFCC2F323D5768A1E987A2BF2C8F2306404EB1 26B3D2070A0CCE97065387D57FD9F733FD66997BE2E407F100E5E4021BAA9410 E07A7128B51C9D320BA607C06C7F184BC27E0B7002C0B4F19685B4A08E2DF900 16E82D6CDB0885F9260DFCE170996D78E8869A19125249AF59BF153D71E5F00E 433DCE51F0D8065D54B605A30D0A6108C34F4EB8E56D33ECB111BD38EC94ABB5 732AB831EF6CEE8B863D6C7CA4B95C2A154B94A16ED47B4A144153ABCDD8D206 7CDC3843F264A5B786AE843CE7D83B2DACDD82E09D38FDC0FCC56F0D8B91D8AC 51CF7E1DF59B11B4C5981C25E3C081E27866A3AD792C58C11C05B9EEC61AA9E5 BC923F96864DD5A754205EEEDEDA4B63E8DFE69C2478905CE7E277EC00EEE7BB C2B1765F00DA731BCEBE209D595FC9E0F89F1AE7260D59375B89F88641E9C697 E7766ACD81AE325EA386137FA6712FE56A3D4074BEEC88D76076E31C96838A2D 7C6BF02DCC26F98A18C4206B33ABF6E6CB0D36E21735B89C64964CF4E1B9A8B5 DDD1097309B975DD6D75824FB2D6C92EA2D010AA792228FC89B079771322BFF3 E91B92AFAFE64D84CF391236A83524B3D4957B1A2C78ABE1EA4312FC347D1430 43EEAD380C9ADDF5F459AFCC91682F8318DD22606240DF454E445491F07DA7EF 58D0C679D9E887ECB473520581DEF2DE4B2A04B5B849BAC43A414E11AA3A5B41 A7EAA9691400A3E935D922374043C8528394883DE9D7C98F9F7C814CFE8C7A46 D52353B0AE2461F404503C38D956ED7C9EB65E3A0058F9A26333B034B7C0A97D 28B8AD14F4DBB4D12122055E08FF3BC08D4709447D1C7A1CDE89AB45435DC837 ACD2B64D368CB767F9B1D06D720E3271EBC715D0E2711D6C343F09039033A82D 6716650CFDA57CEFCF25E8B86E243E77B4364B04BCA2D3BFA335C55FBB2ABA8B 98CC06C87794FC020E7E0041CFAA75A6EEE43F6A5CB49E75EDA9D28AC1310D58 DB1E938AEC9700C3F5102BAA6434D528C1C388BF13126C9E38173A1593895140 42B9C08F98BE436EB5AB4B41B5B7422D853F982A5A1993FF9C03CB7A2068FA75 F8E261E683E6F183EBEEEE8F407BF7024C6C66B0DF0379FD4A636F0EAF3940A5 F48A71B8DB7473892474063353CEDAE734B034D9F7CC60FF1FF349F9C073B88B 66E84AFCDE225BF8603C28BC8114DA9E9713C0246B4791AB5E55E0EA415D0163 CEB21A1007D6F060E4DFB0902980B806E8476149241CF2388A4F3A75DC92CBEC 303CA5829ED4BDE069F7FD3986D51D8A0BC0C7B6DE0FD5023A0B90075DEBAA48 F5A62FC091642A061800CEC50FDD9BB3BD9E016391DBE31871B6EF431BC14A0D 486D3827016B5A68A223117D416E86064A90A4B3B447977C0A681DBD07FCDC53 90D92DEFF3BBAE3404AF40A5D357AD532BF82A67293799A1223A0D4B21A7C590 D38CB008D97C51A2F2A64B35658795EF6CD44186263539760637F9C8DC75CC3E 0F5F14E7B46302816ABAD623C664CE96B237E61EDBFE55DC5D00D858B75C8F25 D33E2ED4643AE95E2470AE34CDFDA6C2B6D88AB81370F0C6A52E734164FB7611 54414E4FF7B929DF6C3774EC50D769E41EFA98A21277ACF2C9F23F042F74BDD6 B83A3156141787EBBAC8443CC276DEC97AFB922E5F4FFB16B79F913B874D29E4 E88768568C31B1E14F081CDBBCF94D7DC3F16FDCA2918B8D1193BF99D756EFE1 49BD3C3A0CE71BD20D416E0DCB6F83E8C3B9B4050A25DCF54962BB07865E3F24 EDD4946718F7210D839E1EF0445D68D10D8926470541CFC9F5A336363BF66E5C 9AEBCFFFB906E377ABE9025662729660B5AE961DFF59B4B11656295F0487E01D 0E9DA65A913F371EBEC1D8C89154D739423F6BDCF53437BB665DF3D17BEF6F3F 59D532D76B53A6240DEE8D68EDF71700AA468CC3E0CDD8DD50C3051608119713 F4D5E13CA685FD48D03E71726BCB26A4C885B025179C6C7BCBBB669EC6CA544E 16BE90184A5DF4A9532277C765CB25678D798E3E6BAFCCC1B0B31880526BFFFC B707D24FD48BC2DFB593285989EB1135D47FD2E30330943C5424550C4C17934D 2CC69FB31F81916BCB774D27AE711B0754E25655927429C626799846240E7AE7 5F662E4851322F94A14A73BB355C6DEEEB0809B730812B0798A4E0CDE08A0594 1D8C3FC7E055BCC948D74DDD4AFB62533B78BE85310B9BCCF61F1038BFFE4A3E 7B982D1756B58331F924D67A55F86CDB5BB347DD4EB04271D0FD2D25D3EF6682 2EEE955197ED008219F386F41539875CD8DD847499F9E56545DE11C43036CD5C E5C5262A59EE74E0CD303056D37C61F555DEEFC997CC80B06C47F90A3C46D097 610A281CF632C8E2F7B0D2F84A434BD575B49A795EA04CA3CA5AA86B299E9F77 78FC4C37568A66996722B764000A7915EED0B05CEC2942FF564B7C784B2A68A2 8CAFC810C16DE4691C98A7C99ECBB03BC1A16C7AA61931FEDE0E139AA1E294AF 9D0A84607DEEEC4DD4C35D5C9798655960A8F335FFF479D061EEC26555110D4C 5877552A318CACE59A4561BEE79F36E292C427F36EBCAEDCFDE161707FFA98F2 C87E128FC6998F2241E4A62C4860BBF4C6496DBB4F218D5FC94C2A40523B20A4 5A5C9FF7E16C377EFDEDD5B018D40AB01F26815275529D1359B60658FA1B7BAB FDF854786A00D61E1122C91C3DDFB2D8B66CC9E523CA09404A885256AC627FB4 E41918676F3E2B7762A1AF4DD985A4E133EED84E239E38BF4A737E2719409464 6A368163AE86C54CCBFAAE1B512103E458B2ACEB514D0C3227242B0969FD8F29 9DB6568F5EA741F84395753D67E291D1B08401574E79FB07969ADECF750D3FAD C12CAA382468F626D5D541C6A9BE2657A4C2504AFE6672F60DC3B3CF1A7F74BC 3B0157D9F19709623D01E657890A40C85B10868DAF4BF1D37C8FCD5D7D3E86AA 02A5FF16B3487240D84AFA03354B666C20D144D59AA23A265DA4E1D0AED3A934 C64F4C0738F8B1315BE988949C371284E5299E6BE88AF64E94DEE15E43EBDB03 AD261E1DC736BB5F413437F4CAA0C586AAF9801A041347627DE8DE18927C2CC6 A47653C740D5EAE722D730E17951E481DB07F3A0DBDFC4E3B7272F9FEF143A65 B18E766CEF8E256DDC5409DBE5CC46009BEF3195BEF390F8E2AD6D972B62A0E6 91D73A39FB27D355DC79BD514F9AC5B38FB6196CDA5DEC54E5A044661BD66975 2777FC133B8AC7A4B56A21F018079320A3F5F5997855117658B1DF49F5D259FC 80FF80DAAF9723E2A85467CD60861DAA5A8C80CDB1FDAEDEC2C603D44EBE2789 91800C4D327350CA005467F8E4941F1DD74B61C5BC8885D73FD4C68EF69FAE01 2C87B96DC09B516B2250C7E6A1F640D61A557F471C7CE4837317F885F94E7DC5 C561168BB8C390AECB871C6A782B1C82C1AFAB46C339ACF9B4C411C9CE0437EB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSS10 %!PS-AdobeFont-1.0: CMSS10 003.002 %%Title: CMSS10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSS10.) readonly def /FullName (CMSS10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 40 /parenleft put dup 41 /parenright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F 388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B 4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D 8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF 5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F 1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C 13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA 56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE 3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D 5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D 9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB 73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE 257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA 7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A 94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE 6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB 8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE 207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C 5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A 96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B 48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F 4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A 45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D 491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B 0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D 8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C 8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C 2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A 647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E 6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD 60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE 65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC 7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A 374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F 1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF 9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD 99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B 8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF 51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A 40E84014F5BF40948F05E8562C9CA9DDD71F89021BE238E74781A92D64E5F9E5 AD6C0D954C6686C714BF189E78EE47F1530CDB8376E52631A1A26E3021FAB977 DBF01167266AD68A779C0180E034A90CB77B86747395BE885E484BE4028B4093 8BE191D58D0BF85308C72E6384292A2E1CD06130A091F8AF9DC6C3E12B1E4BA2 BB2C37AB4AAFC0CCC7964C06B9EC1C7E3BDCB6BA265288D9C8625EBA35BD2A49 BC50472D7AE262237FF1EA8D9DEA3C0DBCF7C3B2DF5AFB1F31E46B48E096517A 0CEDD60F43DDB684BC6E4C3F6F3D70BD58AAB5052936EC4ED7140EDE795223D0 4E3B95161D16B0402EB45FE97ADAFA0433FCAF55E22BD7E4AD2030D9DC86F55A 8D7EA00901EB1351EE8A0F1BFE75CE46DA4165D78043F8F0741D4D9DE0CCA00E 5F7D89A849AD0F0CEBBCB948613028CFC39617FE9184753372C375A9896F5F1C 7E24255FD49D2109CFF9ADD9A118CA47CF58975A9CD3A960A8A08A078B98A50E 4DE619C8B2D3E15938C879D785539445AC468AABD6A6576AF0E8ED368A9350EC 717B7D3BB55AF58941B47FF639CA2946028CDDFDB84FF0060D330DCDEDF13BE1 FB1F743317C15C7A9F34408F5FF7CD9745217D9B809DACDDF7DAF9D821C06B37 25738F0D20F4A86A079EDF71583A9640173B3EC529B98899601F0EBDFE45BEF0 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 58 /colon put dup 59 /semicolon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 65 /A put dup 66 /B put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 94 /asciicircum put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A594210F B5200157C0F02340FDD61392BE9B0D9C46C1A0C4A3AB05918672D6D6020D3A88 8C18A08AFA6BBD8A513A3C06A29A0FE923ADB6F9996F3516967E5066FAEDE5F2 8317ADC676E012A737EFA5B743C0FEDB224E360B05D089459F860F97BA62BABC E86CF3127088FE3ADCC29BBCC991BF7A13A3A5BE34409C002DCF2B05C095A01A 12BBB5C8F3CE43DCDA76D261E3F7734DE2DB7D9A323CD68D78DB2A5DFBF469C3 D02FFFD3B21DFE7CBA8B9C7F438CDF8944DD5A06583A75079194054F8C06AA13 1698FDF6B55E5B1B11C5AE8BD7FBDB7BA6E90FDCD1802F2EC862FB85A143D7B2 99223ED8525202C26A53ECB0894A7A3A64569699C1C085B3CF6D6F6130C45C7F D74B5E4EF480988AA30EAC8CD07D10E5195B7199058C8B8EFBA9F66BBECEA137 33037B3072C48E8295A2185EB3B83956FB26033581A702C8A2C65FEE3EC92CBE 4FAB38A2F5BCDA2F6F6698E3A87BB14E848E1A67E3FF1DCC92B85461BF16C111 6D3A59FCCE098512A2B17ACB186BBCB369B984A363525211D9B83BA91C2B1EA4 3133C3CB489173988833DF780EBFFB461090B51E5C6454E4ACEFD98F22E80F8A 23ECAE2A7803B9200043E29AE21F7EDB5D73EC2BC7EFEC3468C239A1E1C5A2F3 B6A3D13C41A83DECA870ADAA461BAE73B44B9CBD7D9FC1D8BA7F096402CED6D3 0C0D5640646143431C318824FC397E06BA888D966E976366613AE3075D3ADF08 7E1730EFF0C108B268253AD90C929A8F9CE53FA3344692B4F2C8EE88C508D30C 7D3713DFBF78CB79AD34CFA007500B8D1EFB46C3902B183CE019A4656F585B91 337C8FB23A923689F96FA3FA862ACDB4DFCC63C202DEE6D52253A210F7FE163E BF0466BFC1104F859AC97006C5DAC76B68FBBBA1E86D352FF8299D5D94B6111C 4E4961C13C1980ED85E5BABDBC25E26BD2611CF9644C28F3F783C91FB71E6511 3305932CDB949C97E3C994AA9DE2E3069DB02FC5D1A7B552291D4FC01BD06992 7BB266B91E315382D3FBEE6578EF6BC38C8AC5D27C8075C3C6C90E1133DEABA2 600409713AABEDFB90A7D59DE9B1C55D5BF69E81500342759F8EAB102276AE4C 62226488BE3548335C8B5DF636318A758825ED631CC7897D81D8DB5E1BDC5FA5 472B07CAF20A93B34EE07C1F1B35CCE504BD00584F0AC929F8D276FBE1A906DA 76508D83491CE04DFA2D053CC70BD6F6D4F4FC37AE9574F0427F56D04FB60C65 40CD0C4F9D4B202B68C573C3883AF97D3679B67A9750ED2F7FA8C39E69967DA9 2D0BCBB592BB6DA1C14CFE5AE55BD8E1EF4D4D5CAD9543A3ADB8346D4F0372E7 7BAFCFBDBD48211C061927D955929DF620C0B3F9C5C62E8C2EBCB8C31065CC45 36857F4A093AE79BEBA97AE481ADCA3F806C26D1C407AC716C6CD1680E4FB711 EB5837E62986F81259FDD4BB7EF510B5A8068E167B6E9F79A85EAE7933D0593F E2E47F110DA4F91FE1D1C9EBAEA7AC1EE47C32B850413D2F151439B2CE1CADB4 7D369343F4FE7A23FE7225240EE5BB2EAD003B791E184C05E16E5B1237336108 42E036A6736612F2D560738B460C36B7D6BC9ACC66DDC5835744F58900D88F88 32F5A49330101FE11A2DCC0E1BE4BB40B798C0B17F06E93373736FF86328A280 439E9293434FEDB5174FB34CABE580EE7389CAF1DABBA6A053D514BE0C3F9CF0 F3B9E5D971C3E42711FE1426DD84C2A1462CE67A7E9CDA86B3581FE979B06C4B E02A9FC63EB240C890DDA668C586795961871B93E01E80D140B1D3E84DC0A522 86CE9CF8612A35940CF0DC3BFACCDAC376BDBB3A4B063E64C59C61CEDB570B32 315481B2D8127B9B6462C898A7FA5037DA8D88EFBCBE60B4A803C0E5D4722760 2FEDD14E231C6377F18BAC84FC907E25108902B9353CA450AFA7A2B028395D93 C547ACC959FC5F66D49CAFBF6090C67CA7CE8267C80C7AC2BD031CEA01EDE032 D124162800A144E00AF57B0F7683630F58A223111D278B122D39F1040A35A543 E850DA1DC3B6C24B1D0FDFD347427E1E0C089F7AF6F499B6DDC5D184EF6C3C22 2E4BC5A1E7741BD398A43D47BC25601671460EC39CEE52C9A63F03E014100CA3 9107C794F2A7EB2B5F75EBB0D1ADDBADBE84A42B32247BB1F48A1EA537D9B93A 9BE5CAEC478D7AAB59D92F1F96A76025C2EBBAB8480A7E7D1DA3C64540ACF041 1FF7A968795CD24C3B6302C9B95EE6AF47BF5B6F6AD4103A229AECD3B8D6F6F5 08EC913E120825E699EE78D8CD1202D2F57E2F7FF64AA7BC0B3A947FB07A149E 59A402E894363FE848DF9B84029A1CB228B5DCD030B86DAF7D7032AA640FA603 E7B28A4703D4D84D1B7BC417562B51DDEFAD015AF7A25409DF2DA380590D680C 5E9EC71AC9372D3EFDA6667CFD495C86E4233A490B9C4C72666174B0D320AFCA 66543CFB72EC10CE2E1E7625D2616C2571B6B2E33430E28BCED3FF154726E618 14F68511ECD14AC32539B0BEE272A1FD7BDD577A27C6D3BAE6AE3A25A924B50F 95A815EBAD7947FCB8C58C70A83181B8AA858A70D10F396AE89524407EB2ED07 68EA77EE29E32F040655EEC1FE51069E22329FCA0F3FD24DD2431A46634AD6D5 F242F5ED8508E7E1F2E6F8261558B2DB9CC40ABA2FA86E8C9F6D1112AA3EF18D 0D5BFB642F77D4DD7FC8D3CD74C6434DD634FCA744B58D80D76D446922068DD2 EB47C42C2EE8C96CC501699E50BB54274133348ECE59A563B4BE5B7CE1DED13F 0047C7A6B6CB384C8444936BD165B9C6A43EC34FB1BA55E7D63BBD9ACEA2F622 CF42EED2C3557519B5473BA4B765C75A66369389FC5B07B79B87015A90D2BEBB E91BDDA7F6DE559E13D6DB081965B83B050F97BEA2BA3FE20B1C80DB18388C0D 2FAE933C71CE4123BA815A50D93D97C29698C0C0C96838271AFAB4FF2BC830E6 184087C68A05C6ADCF9D87F949AC5667C0D2F8538D8D7A0862C62EDEB58CE413 3AD8C8280432E93ED5DD49EB1C47818D8EDE3B6BA4CD8D21EDD7071FB490ED10 C910F5399547FBF372840036E3D167CE36B7DA6E3EE3975934FD51A1B77FC8EB E576AC8AF5D3A9DE883BDD29FE161F0FD1FE61BAAC76E47CC4E4403A947ED8A0 36BE4184200F11DE0975421241E77D372C9FCCF8305F9E4679E87E7D0C9311E5 7CE314162DC520519578434AFC3E6694FC3C907BE36C433FEA335F47BC2332C4 E8AB9E715BB21D8016162429932C527FEC90A076BADCE3F14E6A8BB84B85F640 BE5CCB23E63C3334A84E606D014AFA5D22189E5F6697AE6958C6E4A9B14A1EA7 8A3C53174BE2458BA347038C3C67A8215EEB9909833F1973860F73C3C8E1BDB7 B3A4830A7A82BCAE2574C9662D9B79F7C9209F388EB655655268240DB3E87310 966464371A5F1C833894978FF20B2DED89C69ED956DDAB5B3B10A121D49DAC62 D56399106138052C66D44439EFFB6BA49FAD8823EFE66850FD534A86074C5EE6 141351C5319252D5DCF7FB36F0F868BA5BE6469BAAC008ADB1FFC72E4BEC7C57 6DB7B4B8BB56F2990E8A5F8368A67FAEBE4FF86FFFC5F914396E9D4536E3BFF0 32FF663883563606D288E4F747853EC60A535E19ECB75D4661F1967B55A7535F E6E214BA61CE6D84BC6F7D78FA0F7DA7E20B4DD668D016CD47C81E1E832F9D19 4CC0907B9A1CDD2C241A672A025EABF26DEEAF4074289CF072CDF858B4E61536 819A7B6A9F51F9EF82AA614FCF4C3C373E77A5B0413856EADE27601CF60EEBC6 0FE89D9A1D11129AC54B76C6215EE2DD0076C187D039351A8289809783D3FDE8 70F11D780FA6412CFA96D04798EF3209A1B6F81B14F283D5B3C8F118897F7D05 9FE1769DA0CB6048672F61B429FEE444967B4279B24C20890EE7B159132DCC36 DACCE06AFB113A96D8395BF21AE603D578C46E70012AD1E73448E306006DDE55 AF7EC201895FC7C241549CA800439276011BFFB3C8FAB1DE36C1108DCBE67B71 56CD9CAD7F14A6BEF3CC4B5E8711BA4ECF0ACAFBE613D5B96EECC0794FF10999 9EFCC16247FC0F4A09BF9BDB5F840EC4BB48DA4D8B5995FF535B45FB134DD2FE F2CBD655AC6F137EDAC2113F8E0C180E069C359B294B2F4C0055A06742D6AACF 35A519D3922F28C867ADA92F4961CA18A3D104BCA99E0B6452111DA91D39489B DBA169A25988765832AAE78B7263C2FED70309078F0EF08AC8614F475A0C5258 E68536E981EB9270B22D2B94D2892C1D6E447AF65EA74CB0A90A620CF61F1CE5 FC70CC7E6723171DB1E20AB4BC2AEFA9389F598222025D691E8525A478DCF513 6C72364F2666AB46677197399C3D68B4CF1F4F87F430A5806E2FD9E798D7AC5C 977D23EE3000795422818868AADCCC0AFA560830FB9E33D5D8B7C5E4A714FECC 7EF122247BB79641B10008EBE4AF583E7B89C97821C05075F46208FBA9F88B24 EBB4E80F0D93999670A3AA0BB5B7B5B72C35D317D27DF658382D849CFBED8D3F 64D88411ED621ADAD8948E9AC5A874837387E435C19EA34F010B27A0279036D0 0927647212F62332627582F78239539D7332B563CB823437958240F278E6CC47 BA53C09452990A4453F5119221D998B69C370EEB7FBB5EC946A2667805EDDE1C FCCEDF03BF98C2104673D26A09A249D57690B135537625E48258392840A73967 B967BE08B211837E50410E273B27B856F66772430F326E9BD0E619D70AF5190A D70D7497AA36C39A7579AA36BB89BE2CBBEB16DFB15042C9C2F37FF83E7DF8A5 36AC3F8AA0D7A78D430B643B6ED36DCA486A81B06951777335704851651CB4F0 5AFAE9EB706E9A3F8E4F7F131D9F24AD2ACD0F05144FE7CF8B09046628788B6C FAFB39E3709836C7B514C2FA8C9CA76A6CAE796E9D52AA6A0EF7260A10B429FF F91B1AE060E64B6E61A87484137BF6BA7709730C694015AE6DEEB97C9509C929 4CAB68E161E10FCF6E84D76C391343E4FA361B1E9F88AA2889B1684803269963 82BD49E653DD8D19247EA3074E60ABA1ED612C056B4F18962DE3086EA2283B43 9FD66FC6C08DBC5AC5DBBEBC7998D0EC16805E4080DF1C7F587FE226D9F76290 11B51364BB712DE2A413FF159C357534005A20CA77AC8F3437D7BCA1C2BE92DC FD81A74C007BDA36766FFBAD0AF3EFC3B60E24B2FC23E6E71FC11365B2E3022C 2C04E123D06919429FCD9F938F5ABB037B7C03061B9E7D883D953C20CE325C61 8944BF344D96FCB68BE7B872BA1FA3616D43C7C375A0845B5A0B469A091E4D59 676D53E592DD776AA99EF8196D1D1485AAC1D0EEAE079F0627DFD3B8F5D96E86 92BB272BF1A20FC52C709B4F9DF4805671082013007D6338185B6BA6AC572AA5 53CDD41F0CD270EE38ADC8FAA95AA16B68768DCDB552DEA2D6825EAE1B9038B4 48CEADED7C157695843FD9CF8D6B17D3B1B2F08DA18EA57CB90F47C8D2DC9F0B EC8AC42A758E812A549294FC224188F68B6894B08FDBB5EF274E41ADE95680AF 133B6D6CA99E90B527DE9B15F0C21FA640861E82F83327CEF9B0D4F6E689D1F1 6A92852DBEFD22B6F8DFBA577E173DD275621BA99E3BFF9C4F8FCD7420DE5810 A851488A5B968401A3CD8197DB19746EFC0331125B0A7016A9B8F84B0F8C7DC3 60FBA1201BE6645E37BB02824B2D712BBFB4442215E19D44084D066DA95D75BA 4446DB751955EA3C4BA900CE491EFC809EA1F8161175F282098ED54778DE77A9 598AD316C3C7BC26B301B7A12F1A82DA58D466939A23D7A786C9201930E4B750 AD10988EC2E5B461A2286CC39695B6A5A05B151BDB13066720F467C67EA9744B 944AB6261D889C365DB55E03334B29679A5F0FC301AA6FC0870B84B8263B1392 DDD3153B380FE80463ECDEF1318E838BB899D2F420D6C4F99A56D64A5D618E99 C86CA73DB8BCD3E76A869864DB0A7276F47EF594690C3CAE6E1C47C11887DA03 22B6F2E6E97A7338221E38AEF20726C9687D1B8280EACE8E8B0B842EDDFBC123 A6A090B89D5AD42C312418FDD834FD4F354AAAD5002ECC573FCA75E359B52C48 3ED5A6944A4B5CA3E6EE7FE01C70F8E059B986D7F54D003858569C207F6D4E21 51572D716A821B7FF136B2FC6649809599F77990E1935842AA0B34DD9AC288DD C7A08C49F96C99D716E17E84BF3B622D3DA4ABD0F7C2CD9247F84FF0A0CE3CD0 54A635725EB0A9B2BE2F6D421DF42C12A8F83CE4964A184D4CD2CC13056004FF 2654106BD9C6767094C7162231201C4E1FA16D5926BDA3B7467CA4937CA4319E 3C96B6C0E0043BED230592B06E18C7A1319A778DE99FFD8D9E4C75400CE635F1 85EF89D9BF91A246F4CBA5FF0C62748C958E3EE1F71CDE61E4C919CE74AB7E3F 5E5D26C498C7DEE52EA37F00A94F28A7ECF0F0A9EACC292A03E3F107A6C5F6F8 1EAA1ACADE655FD7A0A67D8682478F68B317EDAEFFF7B7461E0771DFAB0A948A 28E05549C7575588FD72FE2DD72FD72ECAF8D81CE40A818A655875C0B4894C23 C3A2E904FEE3ED5473091A41D3A209B818A91D6F1B41BF8E92A270FCAE2D7A0F FD60F2294DFCC98D65E33AD49E462599908E4DE5ED7E10BCCEAD3CD5A0B380B3 E2EB703723E4DF58B08F92BA0293BD16FACB5C78B9A1729E78BA2B7A89572709 9BD8806875F67C87CC1141E0ECC1C6A4897BD31556C81FA3E2F1E7A568531E6B 81CBD2DAB4B86410D615E8641F8064FF925171E54E165F33DCFA5113AFAB1E11 C0678CE2689C7CFCCCA3EAF5D84E715307EDBC68FE1703BC6601E0BDFD4D181A C6D7355D4D5A6509777D97F21834D834D905F58303433A49AA135FB8C7E7320C 24552D6F7E26065CAF3EC1BE08D14C539CB5787D6F119875F18ABBEC5B02D9BF CBBE4C315C7773DA59178EBBE098919CDB2B93A3DA0113CF5E4553EEACD7D937 D092CEF9DB58D3F69D577CA9C3415C710CE46E35D6B252186EF35D59BB97492D 496192F8D8BCA202442791B0B0A7149AE9BCE292AC6FC53B71D5F8349FF82C81 91684F71BF4CB9C72FA83B1E6549FADF452B3CE23C6DD3E788538AD9A02E702B 54BD07B019930E70D793BCE8E83475566B418C27352E1B7947F9E46BC0E5290B 7AC28B606FB74834085DB3ACE48669824239C4C85AE31C385C4A747E91EA352F E6CF035FDC13E146F78A06CF3D1DD83DCED5B0D10760E3A7273AE3172B4455CD 3BD17AE58B6E2B2D143AED816423A5DCDAFE0532E1A5E7E8CCCA0F3D4D3B98D2 C3AB43FD353E11C880917EE3189DDE2C1EF5B0E613303BCBB31183DAE43E06B2 9E8975C9CFEF26E225D83D6161C80FA6B142A3CBECEFFD2355AF6A2F9C590EB1 8FD3320F35150EFE4F96991345A1D430BCA481C86EC5993915FA62731A551E5D B680D4BA1BD02388006737C078F4D104D6F4D38F67F60EEA66C8AF2CBD5CC158 B342D6E992518A73CF14856DA38EA231FB26A6BB6D0222F5089712B721C80E73 02051D4DC608B394B2712362EEE267B5FEDCA41425981F8A746C31998132FA2A 11DBC1F88FD70E24ED19816541549859749854AC92E7000EEBEFD20FFD090D4A 88F4F27FB18D9E951827E39837B26B12A6C042B60257CFFC9195B371A1AF8E09 32C39E5B183DB4207C4FA28BA0861A0C4E81C6378F575D56AE2642F46E33F460 A6293898DF193C8AA496E3800FC23AE3B69463FE9DC9D8776A83F2086DFF16E4 D5C41FB0C09F1DD405193DFBB68A5EA027E034C69036D40C7BECBE1C6EBB13A5 1AC11FB6075C973A0A50DA0BDF3E371F4451915C23FC1B1DCAD3085717E6F190 088A6406038C39B1D8E5AC6C510CFA62222E079A5F94DB168104F4AD2D97253D 7EDFD74115F05048D4A02AF14202CAAFE8F24BAC11281B4896AFA52058BAF641 2645E49EE964530DEDDA4FD27FC52ADB572722E1E8CCF51EC924213FF00EF0A8 0BDD64D37B8A6D5EEEFE09DBA2E131A6EF79625983D31717CFC77C1B8B26EC15 83ED97C8543A876B22D31EFB2A33F7E6FD2ECD86FF9D428C800E761E49AC8A42 39BCA596FC08EF4F36E1167B1E9A4391E74E38EF571A2C302AF4C249A54A8297 C4FD21781920A37057A39B11114EA01A605D249726A950AB9CA13742904614EB 90EA7993298FF3759BFDE6697E3527036C4B8F37EE3D77BF6DC844E3FFE37161 C48ED17D1376ED07B8CDBA21F5FF282E1960C5F28219D8B0BC110E7BA3E19C3A 52F42215A32A050A9E7479065B1FDB644FC88F615877D6A78353945121DC3552 3F821B76B49A45B668120CC59C1EF57BE66CC57CD0311D57DDDC160872E598C0 3DC70F7294FFB2C3FFFC14B05934008892DCC197128D644E77767AA88D86FAD1 51AC3093BE3D8B801C36F94444B23EC3152C3DE0208D109BBE9DB2C632C4A425 5E49049D29785AD20C3FB106CF1AC5322F33177F4BAA9B5D4C86BBBB5374649F 83E7565448E89FBAF449922313E96A0C7C0AA2279DED3EED0CF58101DEE159C5 92DBDAD0A4EDB2FEA9A8CF30E41A12E1E426A92743C7BBDE0EBC948C9CF07AB7 FA41FC082F303281BEE558A79E3E77B31C752B2840298222F218D813CA7263F4 51488CFD1A57D7B00FCF5F246CFA7B6438CC0A0071148424D3A7114A358F36B3 71CB463BB9212F29A5289D0EFC07DE6A4536A030DA9096148ECE837611D1AC32 66FE24CE590349E3ED0B7DAF61EBE669689B7EA383BB8396A0662C6B7DB61B09 844EC6A4D0ECA6F09E1D7B3C0C194EC7203DD92D563CD5E4578112B5977C9B1E ACD4DA7A6388C0835D021838CB190C1C4A0C43AB7DB4F53A511165201BD8DEF5 CDB21DCEE81240FE961ED84FAC75E1A0C834D0F07D22D0A30F12126222E51C31 950433A6EA3DE6438E09724BCB18D6E54CEF6B8B058D1E43409736B7B6BD7D99 1E2390FAD64F6693F6F1DEBCF5AEFC0DEAC1800CFD326C61A5DD28C269F29F84 54A07482A7D3F57B789D5597FE88BC127420CB07B3B926EF18D385A7A326A2B0 87ADE9EDE8EF8887421E66924001C11325535E66EE4C351CC07F878550B5BB7D 6F3FF0178E710D1AB430A2EFE9ACAF098834059E52D687036ADFB3118F20A78A 28C559EF84C6CB99087FC344888536F3992571426A9D9F41C26D46B9AE842A7B DB9C9160D33BE70543B73BEC74D164E780EE98052D76C2AC8984D0DA790F775E 6D65AE5C896E2D1A9DBC6F1B9BDA40D6F610E32B4BC21AC198E9F5CA5FFBD93D AE97C90881FF85E9E12961B57FDD3103B1EEB05AB42507EA5240A9D3A45714E2 F79C63CA55E414218EDFEDEE8B782BA3E5D66350AC0F17882486C577DB57BA58 9B1024388912484C6BF9A0AC48AD306AF2034E7260B35DD6CBB70D48AD716529 5742DCA4C092EB0E1C420934E7317F0BED25F7F5E190FB708F2CE4AE0D14565C D1A77BAF88C75FCC37BDF41010F5D3510121B92338FCA01F4464B178391B5C95 5F1DB500644C369A7E678F2BAC5FC1124DC7D457376F955351C060D66B75297C 3D0EBB38119D5F9A930E1063B7DCA33208194907197635F839DE10D98A5A61BA 6638ACC396C609DF13BEEA0264D39E3D4FEBB8598ADEEF96B0B1BC242ACF137A F18B6363ADB7CB53BA96EB2076C7387F1A70C6550A5631B398392DA54EA178FE DDF58D0D1ED403F88489AFFBB86C7847DBF7F21BE25847B82DBCC87B46477839 BCC43986721734097461B8C6B9D0BF2B6EF3C15D44885433D2842A5EE41F2075 DE45DBBDDA19BB853D41142E1F55B2245ABEC6C01F3254357593397EACBE6A3D 4956A31982B83A688E0CF2F7426FA7C48DF17DEABC4D213DD5DEC551EFDC7218 28A68B9EB46AF707919FA0C06451FCFDED1ADD901032B2D403B20D6E8F63E43E 35591142FBBA5F13299E1C17D38A36AD3B0B89EE2A3DD3BBF875FFFEED310D68 FB7734479D284B2C0EB236E23202E1BA84A243593E213112286C032D6BE17238 0C078B117E4B25AC190D251C1ACB6B933C387BF6F02F2DFD8E7B237B52A1AA01 8E826235AFA451E3CC27B40D67931869C8C0EA92D1E08FC9C546C24F60895113 E9218BBCB58BF09F9220FFBBDD1B1CBB060B5BB3AE83501A79A78BB15D62B87C 031435CF68E4CC06593B3B3C5078251F615EF33FEF992E75F84E4D0B6769F73E E045A2A6B868AB740A5DDF2FEB58BD2FD74278F9C551522D7E5C722C9CEE6EEE D00182BF7E5E2C96058D5FB62D08AE837C727A147DA3A72B7C5487AE97C908AB 9BD6FFB71D1F69C903FDAD725BEABFD77E775A451B7EEC6881D18D5748E81EC3 54BC98BBB1FD5BA0E0189445CD489C32BF42884E7964A44054A656921857A2B9 7A04681CB650B641E19CB6709F10815537F88C9BDA1B55D77648643E2915D2A7 F46A6E9CBB8874EC1240EBE59C91A99D484DEBEBA60A760DACB8C4BD004547C5 97FB6384AFC98CD9BB053F335A28A11061CB3C6331B61A9AD32286D360D0DCCF 4ADE09AE98C56962017816C3563BC9D98C38CC09B1C11A36C17EF18E9C8FCD55 BE0FD8965DE846D2AF3025861CA5A7C19C2E80CB74F86CD53E8CC9DE6BE3BC10 386D56410A624BD602018985FA9C49730F20D19ED91BD77F29BAC81CA59ACDA6 CF14046FB202FF5D7A20D3A46FA47D7D7B85B87B18353FDB263983D9501F49B1 7A6938C305280A288A18B896725FB13CF0CDC435ECAE7B83428E5D60B6252082 38EBBC2930019564CA04B7AC91B949ED72EC204BAFB469F56A69A3C1C4326999 E300C14341F9E836005CF3F1D73C67A459D83832300ED1E6C3E027B828F39C86 53EB935D1D8D8222144EFBED18CE0548FC8B0996B192D92A69001A8CF42F5391 7DC08F94FB9DE42AFB9468F27A1B6013E86510A8570DE5743B07B069FBA9A38C F923D368622DB5A489A7B7E988BF8A7367B6E713FEA38726CBFE1A3A716B9BFB 6079389DE1341CC21795033C8AF45ACFEA4D61EB463CC92E543EB7150B5C009A 6DEF0A41CED12566968B60527F925ADDCE4C13F2046DC05F20201D9F5BE85564 BD91E07D49C8EBD39BFD36CE3D25B3823FEFAF33783150B23CB4546E81BE7921 7E7F3988BA130605D007BA0D32C76F4182628AE9C77F5BCE45BE41ABF426FDEE 276CF14DCD5DB2FF86757BA0FD92C09D343C20E2D28C90FE748C49B5112F34BF A7698C19D54FA504F6DDD3861F9199E9093051851212C61071BD7007E43A3190 844B5DEC290B844ECF3723DA15F60E49D9BEC8B2D1C4B757A35819001FEB97A9 EC1CDB6E0A5C047EBD0E58118C1F4AC99ABB99926068E157367D91D2D45B580C D969FC8F66C4B195084888D50E99A1813BCC3B2E137FA09BB94C96F3CABA8A31 8DEAE7E321FBA6BBF275E7FDCB0A9EBCCAC180BBFB8278854047284F3B4AA610 D8D6C8B944BA4E336D68E3FAFC62367EC250213DCFCE27E0B88EA9E85CE24281 BDC1FD6101E5C1D85F6C16A6F76A529EE35B53CA3B49F612C005AC54DB9DB8FB B1376B9DA3B5EF2616A005C012112C7C10DA19B9378A506027E493480D441493 764D48AD4C8E3CC115279F3687E89D87156E3FB7C062411360B8F7BFA4FEFD03 6310B69D83D8322DB0E5AA6218A96BBA3DEB66FB67C22587FCB01779F21B9EDE 2902AE0DDD9FF27D9AC17D5A6D0967A02A20CEA11EBB416B9C2C91D1F70C485A 39D7816D9B1E573C3BE6D6D002378C5A220CFA7ADB2DC09D9C4A1DD38D06BE06 AC204C44772FC9BA8CB5A7AC8E927A152BB4EDDF4528FA2D36436CAB54182D33 6205FAAB5932FC8FA1EC3DD1252A4C947405B72330C4418216D136C4B20B96CF 22CA8E2B471325B294C61C59FD32E7D2C148F8565DBBCD90B66FA40A83D4AC60 AC9F8DA1CB5D4E222C27767543EA86D83C3C66C8604A4FBBEA67B6833065E014 04DEF898EBAC3CD067C2E706E7D1C68F3A236EAE478040B730CE590ED38FE340 52EA7C1844C49B8911621046AB717AE6FBF3719F7941EC91235F21855B7FBF90 62C8F23BC153B74FA398F7ECE19CB38A490E534700F97E64984366C1061BEDBA 6358B94BD318574792A1D00851943BC899B60AB66FF8C64AC97E925AACF493CA CF1E2BDAC575E9EA58F82878A5C531CDFA79329DAF07A5D1FEEDBF771C205DB0 8F7FF003D0D4D382F175CE5DB7BD66FC2D4025FF06C96B99F37683D32B76D83C 4E4EA738FF8B368AD737273A5B5270C705D8D1824D1D21A8AF0ED7EB23619FB8 177A61E80C32CFCFD788B203F05B3B3B49F76FAFF5650CBB65FE0FA2FB5D5282 172A2835ADBAF0B9BC69CDF82AFB639285A250ED1340182F0B8A7CD3EB6E481F B1479530461DDAF09C567BF3A814A2B96F4681FB1ECF0FAE7D75EC91643AA71D 6A129F07276A8C7BACA7D0468CE0386D7667DFE04B09677D502A05C3874586AA DAAA13ABD2FB93B8F92F72CA2F38AF9D643F0C1A7786A15DEC80F3F13DC2EB0A 956A5DC1211D02E732476EFB7D999C63CE53B27759D7D93B47383DB234C4C384 E5E664206B8C833335CA6A89730543071E483CB92DA30755A982E25E1A268AE6 D1355E15CA20BFD7B9EA1F89C3C07F0EEDFDEA65F8A82C39BE3AE22E727D22F7 C8DD4788497AF3E6D9AF79471F575F989158977D3277AB36597BE0EC8347DD33 BF0D93288549C90642004A9F969893798F93C1EF3C7A6CAB9CADEBB6787C18CC 2232972AFD6BBC6317FA46765FA74DBD6F1FFD5491E0E6335F0D08605883DA1D 9E3A80097856D540B61473D573A9AF12B79AD066F09B2BAAEC9E46CBFD1046A9 1C07FD78B5C98E0F9847157361293ABBAE194FA860141A43482C7CA75F781351 E762FC9E3F892735C496DFB7045E86C7943775D96ACCF2DFA451089EBD4BA12B DDE24237724CA3ABB3AA061213185206F058C2CAFDF35535C1AB6EB38065CDFD E57123DB9B0C933C6796B59DB405093C8E429A0511B6A23D2A6FEE64DAF67F99 0A4B3772003EAC01BE1ED68FBA87079D0100BFBE054A3EAE2CAE8B01971FF85E 352F86A1A29ED975D4D69C748D244345E7486974F0D402ACED2B7DAD1E1C53FB A029DF4E5CBFD64C694B1D911E53900A38DFA5FBE785D35A2595BA71D5209E3F 803726BC42832EF1FFB227F6BC5691B2DD989BD48CAE99B4B69807E55DEEE2E6 1C2E43A3F90F08DA4049A65C2EBB68AB37CE0AF7C4ED41B27BDAFE3D37E982B5 17CD994BA4F8C064FBB1C4D477E177371D0589C4078CE74A1DC6BFBD2C76C8C4 4DF12316FC2294A8C834A2A1AB1271A7C3CAF90507679280F4BD0C6FF1121BA7 45ADFA2BAF226982DB7781A96434FA8495F971BB17475C7CDDD134AA6E87946E EC2BA6AE663F4317DB621CE3D2644A5B3B5F577DEBB33407D13D5BDB873A9622 5E0F138FF5EED620E4ECDCFC4BC8D43E46BC62FD90F59B06938D1405DD8F92AC 7985F4DBE35AB0AD927A7AA1AED8A3FCC9992B89D9CF9EFE02517A602C10CAA4 44C9FABBBF210F406B358DF144827E04540B47B01AA6631DF583A36A10944787 AF2F517BE8D6B8B43C4A97F49132467F0243735AAD44908C4FB05137A7374EC2 BBF2CA497924F050E7902E06785CD6BE7550360283D231BD53628F576B92B6C7 3A67EDB5366C3DD053660561D5EC2C7D7337E4A89AE89EE9F2ADF4D99A75ED5B 78C496422AA1B58B8ABC81F5AF8BDA7A3C65D221977FC6EDBAA2E98F26358788 29E0DC0A30527D64CBC82F2CCAE18ACCC1B2A64DF31030F0F14F233B5306D623 DCB30263BD18592A089CE4C2D0390126741EE14F7558ED949D13DDC9EEF0AB4A 3166F740E41EDA16F729F76E42DC1D18B2EC06D694781851E9C9ADDD139F7768 627A1D4BD88C1505F31911B1BF4AA76BF6866EF658F607EA4272095480CDF526 DD9FCE4FBD76AB86C887FEBD791AC89EE99AB5A2903FC1D4ECDBBC4AED1E2568 DC74937B487A36FDEFD62C230258B15372F25FDEF0B59A482A6FA149248743EB ADFCCAF718FD9D6B8576F8DC7DBBB96DD1FD3AD502F6F9FDEACDABD1A9D54290 C3417857F1818AB3AB34C1BAC6BD65D7A1A5B3480921E9E48546BB99D41FC796 D2D373042F1F4A796F8FA1AD43F1BCD937534ABB4BEE3F1BE7592C158885353A C2DF29E4E95EE1D526A064B5EBB9C5A53DF45876AF31DEABCEADCB5E4000497F 7A0CE6E11077A22DA49AE3416E9B3EA88F151CA288979D90D1F5B9CEC9F1B36A 7D5546E3B317556F0CBB4375AD06D7834A2B16B0F4A2BC18B3775EF4817CCB4B 51C75736D8E5CEE393965FBEDB98568BACC0CE59D39E0DB30D4D735566681A7A D7F39C19B682DC7B98B87772E9FDFF1A9848463EF22C76724B4FBFB5765DE1FE E57B45C65CCA8150A80DEA255943EADA2DD043C239AFFB5FCFB187B763A3BB27 CC0BC3936F5E9F833A745B3FD079BC7489104F77880229227F07B294BB9B14D7 62909E582CFC20A5C57CB42D90863F4B7A2BC6EFFE6CB02490D1E1953C5C5B77 BD5A751FA40E2E681D55AD39F5FEC3D1B564BD77899552874802D7E7C1236388 07E672122D3C4591E895B2792DB4E265AC250D2511AD07E43490004486C43471 38FB164E23466689B3CBD57555E84337B5D7F0B809B9524CA5AF7D1406F80EAB C72BFC9987447C62D70B4D88A54A6B8BED5F7200A00F59432CAEBD1120BC882E 82CA6223D0F60FE03319260659263AAAFA9A309D6B87A926821520FBA6B269CB C0245426B25DB5B5C9202AF788D8CE53F20EA1F18BB16EE5373AB5593AF0BDA4 D0BCF44B51AB29CEF3295C3CDE1A112043AB47F05812A5FBABEC2FBBF404C331 BE74B93237561CBFB1627AC5883F56EAD46A8B2132E352EAEFF95D79A9C36731 EF7DE5EC66671E4231A6784977C2883AC1597C73E047FFCF49D0E16E4355A8B6 60EA0698EDE972C32F0FD19754134B5D83C3FDB82D4F8904DDA62E22E2743A89 E79421A43FCAB3E6FF90C36E5A5B4F2FA2FEA6D0EE41AA3C44B727AF545A3B45 2D931C1BB522CE068979A7DED0470409E7999EEBD6C58A1F1909CDD00ED2180D 44A271811E80B3950222BA531719FC4B0ADB6255BAA63787774E2947CCA6519D E51D71A2ABD77B282CC8B4F8BAD57ADFED6818B3C24ABE0E668AB63CF2F17731 2F7C7A492A47EB38DBFAC5A36BBA799375A4EDDF6A0122789BF6F58F8EC9F0C1 49CF01C136A792BE4C6118DCDC0675459ECCCA754ECDA9D170708CE58A230DB7 D753C45E7434FFE711AA5DA45393DCA8B5C8920A95C94F3B89776C23B53F70BA B6D217CA58C551206918303DB33B6081E3391F10DDC5F58B1790028AA2150AFB 085185754358891D30992FFA2C23DB2A04521107101C2B52A1A168E2CE7C85FC 37D32B44FD1DC3BE4B28BBA9A9F91229C79997F5184F5E7143C838FDC8196C52 0B33A375B320A025180846736F0649DCA8FC61EBB6CC1974A4134EA26E6F5E5C A73992547B9A4E6BDA10FF2B41C9215F2F9AC755DB11C1CDAF34396E4B92DB64 83034FC2023D846B33DC7CD297527F183540456192DCF23BCB4A1DBBB7A2ECBB D938F9F3C03AA46A1893059A722AE7FA05CE716AC8D446D7F038D6C72C172A5F 05F91CB5FD5427E6C156F126F6B2014F97F5792F77CCDA6A802CD7E3405FA66B E32EECF53CA9071D1EE20AAFA9AF3DBF4CBD250650870F0B9A3923BC4484F349 EB072F3244C98AB39B6F708A4A52C0EA243DEB4DD77BBCE573A2E56323A18A0F 504EE24F90A29AFC5FD3002749E953E1E1E6E6E8989A029BADA9CA0A261884EB C6BC3BDE99849D6F05D8D1ABAF82A452EE116463444BE4D3DE38F63938BF69BD 10EEA7C68AA8077F412060D185E4187120926B4B209A74497A3C9065F1BAE8A3 C5DF1A6A01349D7E8D215FAA03677C682022A26D3179CABD03A0C4BC6B303BFF BC7B3FAF26B96747A840C12EF14E16A2DEC76B243519B53E04038D3FB13A2C24 B531C3147B51A8C3623F4C161B4097364608D5871A29006F7ACDE5ADA1F82C11 11BD9E2AAEA52D352D70FA4C94809422ED65C03C4A72DBE2FBF26F4CEACE9DDA F6D895413EC28F2F61F40D67AB8798DF36773780B292455A689B4B70F03D18E1 EEDF66F3C5823D47156B6B2D1A1006C513FCCA31D101DEBD474E72B49B664F35 86EBB75BDCCB5F4AF8B583B835449F7CAEE5E97A819AC9ECEDDD6AB2E7B326D2 A92F7568D8301B1F1485F234B32632E8725F8B637EEFA1397FF031342A03B602 815005BE674B52CD4744E20CCD2DB8F7F58D0717FCDF04001101A51B0926D53B BFF990D7B01091B64F85C9397DBE3F48A17BD2584141B3229CEAAA3F0546EC6A 4B9FBD4EED3EB6F78F8FE6D342B13F5BEEB210E4A527D83B9354A085AC87B359 4E5DB704BF8363E95FF526A56182093FBC89926FA47D90178A91CAA8D5A73F2A E38BFCF454444A79EB4AAA502292C08166EC7CBC37014DC7DCEB4DDDFF7B9A29 75A5DC4C86D19B4E9901464C7E81F251DD00CEB0A87C6DC15EDE276E8976DC6E 77642A3B502A160CA2AE5EF55BEFC154602E96F496F7A4D2F3D345F51B28543C DE2412AE9C332C5141F664C9B5BA61806420359A29A473E0BCA4FC49853F6622 A6EF486456683FF69DFE32EA117216FF797E3CFD8C4FE436CA7E1AF5F91DFDD0 408876DFC19DB1CD9EB2CE9AE76EEEE3E73E0F37BDBF4010B581C510B3DB0CA2 C340B265B989E1E682B4FF9EE3CF10B9166604FA8262B123C7333E91CEEC975C 80D73B4DE4F9A065B1D86A040B69197EDDFC955054AEBED3B93C9EE76A139D91 D8F1967EC2579F6E111AFCA78FDCA67DC154D4DB3CAD540024BDCAC2A28537F4 51BCBD448C87549379CE17DC363254735D586FC39A5BBCB4EFE907F37B4E9842 12BFA21977D0D519B0628AA31C58EF538A78402BC7611FFC01B6049A8437D319 9A9A1375578B7D36F14F6A31E2717F1DB8A55CB0624BD9BB4ACFEF4594715AD3 BEB006D593E3D0FB36A82813A39AA70E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 44 /comma put dup 46 /period put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 76 /L put dup 77 /M put dup 78 /N put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB658FDA800798803C3CD32B841E159AF0F748400314FAF5038EAD574 57D57A34CABDBE4B8D145E439A11585A0CEDB410973892F52DF26E116198F86D FD876B8299BCA27AEFEB72F9E8B4B7DA1110B52A0F96DE59A839E144184B72B6 E45614991F03299BF5D1365EF2E0D68B86CF619AED2B9D37876A796997CBFEB6 451B67B5EAE9120D0F8F9229332F23B6A10837AACB18CE42CA76F50FECE8A7D3 3213106308756303E821161BBA3576A83820B337E6A7E804D8CA26E226068104 0EB7484C4D980D7ABAF644B8B2A1BEC7E6506D965BA155349750E79A0C8A1AA6 5AFC6F9D9C691B47F45AE17E66D1B273AA58D2CBDAC9820F011DD77CB2F40495 540AE5327597D571CA7E202E2870297213BA4673BEA78368EBA8086EB422A59B C1B4B85378F2864B176AE297116D4771A393DA50F6905204CA54E10C929D3478 36DE51581F3D79B158CACE7B22DB5BF4F6B34803DB65FF139F2FE9E789E79035 47E746283E8BAB12A3592CF7AABD8836313D79BE940D246A1FC83026FD63925A 64D9A8E4A799A0706AE085365144A5DB7D4005EB07A1D1EFB18B8AD517FF5500 1597D3CB30D83856E4B83456C246AA8418D2BB350547F627611531515CDDB191 EDD72DBD79FBA622A1F06B48C412E37464B3B5BFD1614F54253D9DA82328E448 11C6A02E6323738819FEF776149B48D52C83CA39036DED2CC3D8C1E36320F674 C9B5D10D2DCA8320A2BAE92C9800FEABB7AFC0ACB2710F61DBAD38E8174FDA0C E8AAFBBE0F602AEA14D675DFB04790905077BB0FEEE4B7DB0A9717D37A627E6E CCDF58565FF1DFA6408CD17F71BA6BAEA2D4D99FF7628166BA93A5CBBEF1A839 2332FB0A14671F510DFAE662325952ACDA24EE9D79EE9402679F5B7FB73372BF 641E2C30C24A861F669FC28A2C1447EBD321E3BA9F29737CD880CE07D2295E72 9D2AB0C24E9A643A1BEB7F32D20A58E6E620C8F1768D3212FFC5ED912CF7C3D8 D507217D20A988699BBDC9D3FE095C8DAF9939B198F0A21DB77CD4C59FB771FA 9DE3286BB0DCEE0DA3782661356BB2691D830C00688D0B29651BBCC437532DAE 815AB03DE8F44AEC6112971E7231B30CC80D04970EC6C1E42A6AA0642BADC0C2 EAD884A4C33B25469B5FF3230ADF4EF607499F1EC3401FF7C6F844B93D95B202 1F661579C30C3E1DA2533836ED3445E59CA532AB1E8613EB4C78536ED00E1EF0 615359AD748D66F7C8A13B807650C963A962B831C55D25B0CF3EE4300F941C5B 61973842957CF64A65255CFCD3666728FD0CDF7B59DC9C2E3959735BA89C9AD4 98E0AB04FF7B07A138E77B97991379C4262C03F36DC55420A1DA7983AC156209 AE245CE6C064071323FEFF68797AD21DAB54A1B8CEF96A787DC9E90CE2DA1C27 08BE7D84C8491B98151D170434B4880F1550D55632ACE592BBC07466FEE6B7BA 3632C750DAB27A2A33C5BFB2C06B5DCB9A6243CBBA1A31C3D7DE7FF6B41F6E82 6A44428053C6C606E951A312495B47A6BBC2FAB44A62FC0D4A50E74D77E0BDD0 206BBE6BC9B1DC7A0FA3CC495CDF1CC5216428CA94D6F6715B920DC818B8463C 9E4120C397B8C9007E04347D305D021D5220E3E98FBC7A30211E6C4B1199488A EFCC8F2DDA888D213228C360FDD2D27A7B8D3578B3F16D9F73AB6D7DF413A84C B0B5FB73A7FEE60E68B98FDD312DFFF653D98FF04DFB4AFED129B33E6148FE7E EFE32787D41E567C0970FD535BBF95FF4C14832FD5181C6AFE9295665C6AFD2B 07DE351D3A9858ACCDA547DA19D30BED27B3A77C01CDDB62EA0C541E26B241AA EB6BB5D533A091A7C5AE32923E931A98B1A378CEDE4394E7615AEAE807C14E8C 818BBCE624387076111D1EDF5C61EA8809948D4906B2C05C01463C4DF4EA3A7D 6A4DFB643EB5AB2E09DCCC51CC16F68CAE87CDFB82F7A39129119C290A21DD0D 3A46F182963E7267C31F20B98914BACC48CCB4E0611C67BC595D00B633E7FFCE 17E311A7F4588FB6AE658377C08A215B79424635331DB4068BE99D308D6BC1FB 2DF73D26E0C6303F06946636B23742D57FB9D9A3BD099093A1C7BB31C02D5423 C7FA77892B3E560A5D115FDD512CB4CE82FE58A7AA72A233B02D6B48B90CF72B 6C9D1E25CE02FD2D8BD99802C12AE644185A5D70D63442C3514746A7222DCDA2 1DBBF4CBCC0B2342CB51BC7FC6423F7E95BC3EB407F0285FD449D8B636642BE6 131E0AE8A0B810C0D8253B249A103DF83004276605A33119A16BED4A7F2F295C 67757411FEBC5AE386358251D1A57A77C11951BB0533EE75223739B27D2C0EDE F12FCC8CEFA983BB6FF34301849D59A0282DB77AEACC51E2350636AB56FEEEEC FDFECCBEFB135A6005DC8D8E21B1484E5345FD64E26B296864D7E8884955679E 35F720AE6E52A89CDA315714FCAE93AAC470D2692650EA28CADDE043534014D5 17507253E7333EB8B44A5486828BCE2850FD95CAD5ACF132DFAA39E0007FFF26 497425189ADDD944FA5423B9305239BB25B4430D6AD6D698F9562B10FD9D75E2 4C7AB5047BE64C912105CD4A4DA988BD5ED3B612FA3D28C805E2A360F464178A 94CF4BA6A9FC5C18E56D8C0890CDEB4D14ED75F494F5D917A57F571760D02147 1D344B0D80E7064DE9D0A5992C3BBE55A7258C3DB693677765B514782170B8FB 6E0F5AFCBAEF7E3D161717D01090EA2316E0633DA73CF10C77C68BBF8123FB74 1945F0EDA652BB4F3693FE0F4FB0F5D5F57A6A1793C0F39ECEDA9079A5C497CF 1519DEDFE0FCF60994038D7A9F5374FAE1F132BECB1DC80EE2D09164C674C6FA D0881743FE49F5727756F05AC1709328C25EE1C4B8AD429CB90EE6023A226709 33C619C97D92A505C9B82B75241F7CA2604B8C65202E5546E9BD5C15394BC9C6 2A848D7141F8F57FC25DD20879EF0E968CE16C31FC537B74C429720B0D83A510 DF7E9C057609E3F35C2DA4EC56CC1C4BE0BD04A4B23AA52FFB3AAF096D6CFC3D 5CAEAF5B4577FAFDBCF41D81148C0226DD29E6D57B8C05E1C141B6D309D7273C 2832AF0AFE91CB8CC9FD1980605C5FE4D8DA726580676FCEB1021121DB2CAFB3 516426D78EE62D95A84B1ED786324569E604FF8D2E9EE071600B4820EF0CDDF2 51EBA811EC9A6A8F7E8533090E7D5FAE3592A6F7BE3C7DBEE4729DF5598EFC57 614441E5AE48AA6B3EF26C78C298B5F0EB05D67213915CBD611298A3492ECC50 3ACFFC5589E5625DC0BA66F06B15F35F73993CD514F8F952B9AB8550BD573B20 699B9CC30851C45EFF549F82433198FC6C217E2C6484DB1B349BE6AA81A32716 DADF7565299A4CCCB83121FD1CDF9E1DF7656273E59B60080928E8CE59184D32 9868A652C2AE09BF15F3DC3AE6AB5436D0CCF0EAB2AEE3A385A6A8A2F2BBFD4B B8EFF2818AF015263AA0A5C8215CEA00C62DF4B00540B091CAA144D6F94C093A 77375E33DF12B1928C9D17E6E3D658B8D26B5F9ECAF863FA7A93A53CB1BA6B9A CB4118471BF92D9DF22C820506CD74492F42CD49903EC50AAB51E9E6115EED20 08D8CEF153409DDBCF0EA91EF2BEDE757361403A94FD680F74E1B96BB88965E9 58F7A517FE9E1C781C3CBE6498E6623042E58762A2407A5FB8D24D89B93BACE2 7D92D50EA78D5BE442D4C49C56F57592C04ED3518C44A4F36B9819C27E93BA1F 2FA7C560668C355AAFB9A9F5BE6388B3E08E2FF8FB820BE492A1B0A067515A1B 5DF479992F4E62D27F713C7EF4B715FB341F35D8C9C4F62834E950C86561591B 8947FADE95A2BED5D595E81B1AAEFA2EC949A6E4610D372C8FFB23E28FC64153 E6A9F95E8C77FA57ACB91B1C7D6EB78EA40357C88754711D61977F8D1D8836C9 1D20A3DD14CDB6B7936233E524A990148D8B797ED4CC4D5BA8EC668DCA7C9C67 413662E9B57DA3233D0DEF0EFBE62B253E56F9FCD5E64B9AD2967BAA036EFD4E 990F9BCFB3113884F87FB79E7BF293FF3A920575795A964C662494B91E934107 D2E02B221294A4776CC9ECBD69A362E6CF668CC22C9F8DCFA29CE30CB8DE13C2 79167C1D4BF0751D491109BA8EE1ACD06DA832F48042BA3700CA0EA193D41AB1 72E1F02AFB3EE2E52A32CF8921A3DE2701541B66325142F9AE079F3A6C21DF90 EBE1EECB900ECF7FB6F001CFE6C0FA8E6413D39B70F8B4D68A5105F509E384B3 842F5753A6D78654BD508FAB1CD7E81FE0CE3527E7163EC56EC8BF3E242FAD38 A600E254EFA5BBD99C48AE102AB2DE4330EE93CE6CA6F61D99406DAD5AFDA2AF 2377B3E1CA0BBB1442DA68C316B0817DECBE32E2A4B7608D3007C740F78905CA EA5EC147472821B886FB1A678756DD584EFEE26C81F3A9545FDA4EFD44E545F1 8F936E4FECA8F5E7D3E68D71D3B8C122ABE07476B492685496588BDD8C639500 DD91F576C77C8C3D4F8E8AC2E6AC308F923BD2F231438AD39AB7FD5FEF428D61 DBBC7803F12DC84A81EA8CD982D6CA26A63C7776ADAC6A5F300656883AE97BBE 217CC1F3220B498527A826C557669132D2F97E20029BCF14A9A896012837CA40 EDBA10810F4E7A0BCB0F7EEB88842AA6C8360FE21247FB0C3BAA86A413DDD20E F5C3E5349A96BC9C7D54AE493AA18763F407040C89464F1F9474CF00DA0A6B49 02604EDA77354E75B67CBAF2051BC92EEFB603D712A8A6DBA63A0A89F37451FA E3E99B5039EC4478106FDE29E4D7BE88537C97A2E03372C07EC4D6EC3E159618 6479EAD51CE224EA90C9C951CBD81E02D30D9DAE9277FAB7533CDB40AF16A1DD 35D5FA847311A5868596C49549BC2CB7FB11334A5DC0235BC107EEDB05B92A85 B198C70DCDE3B70BCF42FBDA810A3DEF5802821B55B42C4653C61DEABDFEB3E0 9A595EB54994A4B866A99F23CC95697F90B0A4B460994016D12B85D2CC92B572 F62B9A1AABF2D9CBDB887D1F58A824E080562A3E4A7C6AA02EAAA47907EE67E5 46169E42148793FEAB87D15B626EAEB86BDEC8CFFA2B84F52BD34A2056765E09 63E0BC58FC24B297D68D8A1D3332792C4DD29EE1728FAB873198F893E21C8AFA D2DEDFB86AA5343984A6E366F837AF76EE986ECC5BDC880F087B6F71CBDBF917 8B38EA2EFFD281B1A8E46666A74F11D849709F871C45DA532D12541BD8F74899 95F4B59B9DFE7F6F5FD49789865298C244D95881D2DB1889D0A41FC7A34777D6 9E6947A3DDE605111352262F0990A9E558274D66601BF2B67D55159C7514F1E1 1A7E5C074DE75B9A612A762C3153B326C6BDDD276C2066F50899A6EC8D4E1DDC 6FE4C7056EC63A2E1F6872D0C74FBA9700C6C4E3689F8ABA302F49A7E3EA2B4B BCFB7FBD3420D588F61AFA044EB78DF7C3881017C753DB1DA3F35933B19656CC 3CED882CE92EC2AD79698EF383D113D85C6F3DCC4B0787F3CA994A0830EE3703 0BA4F77439094180813BD2E230F2010ABD7868EB171307253CE61F9B228C6687 F849FD6EE7BFDCA93B097A1F1DCFA09E351F1713E4E297F10C1CA62A8F461B5D A696C14A1917F2C92B885193465E63F94C151DFF3E463DC3767771BA45DACCFE 9A7C1A408A0BA54170D70A72A936CE4C0D4DC4C185040D5530F02A9443615826 7BF99C96AC1F027CD229A9ED6BEBEFB54752EAD461E112597F63247C83ACDC2D 2F02720E242C0FE40F92ACD4526E93679B6D801A9C6461491A070850CC24B3A8 78D8E1A70440B37FBB23FE8B3F562191F410C6E68E7286BC35423C1821F06304 4F4DF0FD723BC06365B3EB2D0C5C83D219F92688D798FE1555BFC2E3AA8E18F0 58DBDC9827E06520AA3937E0D01E0966FB90C3E32965018AE2B5F2CA42794CE1 2A22A211CE8D96A5FF98BBBC1DDA78BD9EF66F34D74F9D28F7CD1B4891FF2355 D05F8609E03969EE85696CD194287A1A1909C091835BBB4C4FDE8AF355B1EA02 7C3BAF3782E46F2FE41CCA69C346C4F88B640A25C51B85D1535CB65A10316C65 8AA3914E00671E0DDC0C41D560C66E677BE305B1C9A167496E9BC55E3E61FBF0 454ED084CA7B8542D09C19A0414782A2EC87700A7DBCABB76F32D20479CAAF1A B9FE677A9BC68A04FC04211F65CF6B7AE4BCD58D8EDD334101BB4AA9F426404B 73C5E96532F99284B408438EB48650A90FD34A2120977F5F7DD6301E993FD1EF 675A7E6176BF57276D3FAE1380D9B1E4B2CF158046EEA40E87928CE9B19A249C E2C45BBFE7EC8302D794893656C086031AF9578BFAF49E6A866F98D1CC1DE410 C2667F4A82EB71BF6436DF43BE28138EEA6A33A04B0B414450950C40708E2058 2CB26EC69D1645BE59C79BE73F9767C75667463546B650502FC81F21B5C4D406 DBA42CE9F1CF16561266E05874C91490DB83C01EE0339E7A8DCC5AFF63D3FA4B 552926E42DE881BBB4B0D0BB380E0ED76B72A756B4CAEB91722F993A6B4F49AE A404FBBCAF83B786A3D5D0C5AC21D499C743D5A9375DDB1697D28E13F47FA43A FE64426660F078609C14EC6383561C2ED52C3B0F22D404776673B382CC17BBE6 ADCF4A7F3F7D167DE46D8DEBAE03648685FDBB2367F40B6FDC44090F32AF4802 BD5EBADD37B82B429A0E22E9278F2E1C6BCC2D8649A949FA59A8E1CBEBD883A5 430CD0968816244C9D05C948102A9B9D9CF0023B7AB5E3481A1C2EADCB42B6A1 D5891F3115E42F0A18E30735F156160E24E38D358D4376E0BB35EA62F73DADC5 0EAF316D1FEFFCBCC1808EF642F285D3B67E279BB617E29B10E46C92496A7568 900465D114CAFFA796FB47AD526011D42B486078629D6196F9485B66966D0D47 9C6DC7350979D07D8925A1CD3934495B034456D8BA32203DDDC3C545E1FEEB3C 85A12370148A0ED20D56DA8A34409226A4D38D350433B0590B93DBF4EE792A6C 28F5D36D91A0CC9374BFB366B81EE8FC4A29E287B597A845B45C7486E3F76BD1 13418C33B8FCBB118BA3419B55D291BE1D200023002FC6DF412DB7FA559C2CEB 2A4E359CCEEEC0B7709C8D41BF93B42448582C8E8A3E8160BD43186A96C66BBE 591DDE7BAD8CD956DE262047E7CF1F174F462FA6DFDD274772F331F95D6B3557 BB8E02973A3AB6F3B8C0D8BA680777510A0FC83689E15220D618FE48AA0BF540 11AECC854D11EDBAA8B7A8C95D9F4385407F5E8324A2B249A3E50F983445FFBB 3DC77A4A6D7CA7ABA7341501988E6A446B85484641B0ECD10492D6804F0FE1A3 7FD639D14146B5AA2899CB7BBD4537A37B3890CD1C2A3B3147F71A5B974E4750 A0444C4E14BFD00A9A5E7F4E30948CE9FA820D15250A2A1D87E7F1686972D0FE 80DCACE154D3E7AE9D7BB1CF4D2E893B5F010D8B1268116147F6D7328F260BE8 BAC184DFCC2745560910ED3901D4AA5BC1AF68CB14A3BA66E235299024C2BA29 65CBE67B56A6A5FD4B4AB404DDD02E520E2084082A6ABBC6F62F3BD146388B26 A107DB3FFA2DDE3AD94A267D1403E8F0D018948F91349C870AA70AAFBD2CB866 58D40D1439AD4BEFFCDE627E56AB5E78CE0213C214001FBE22809BE3FDA6D380 31EDE1E121168BAF879532F11B02A0EDC08A53AE7B0B27605C4D726816E08CD5 47550ED2014B1062C1F35F3F3A3290018E2B459CEBC43BDFC8AA6B0653A838A1 D832CAA078C802C0E0F4125911CA9118AB0EF5C38EE0EF4E5A898D4E8E81182A B2754E36F9846CA5A95D72AECF41F7E2DAAC726AACA518E585261014859EF503 B0A00369FB384E5321F2EF712053C34B81F235FFB9E95638688FC56360681C19 5E70974D7C64FA3B885D0C435335C62344F3FB675546CF255B3E350095154EDE 7227589C6D73A140E577645D0A6B45ECDF28A5F7FC3E0AC6A893662E66756A22 485E8EED9448335A643E67C2EEF06998083C39DB6024884182436DBBD4FF630F 38CA84DEB883C104C6BA4757A8816160F21AC23067BD91DCF8173361372F1E53 1ACF0FFCEABA31C4E2FD3E5A6E28FF3D480E6062FB210CCBD995BEEC93989852 FF223550E7100E2CDEBD81C548DD3F0B4FB9C694BF14D7C1D842DA4B50647318 45452B2E61CCC0992B66DACBD66664AF8E14BD784C309DAAE8336321C2A40625 94ACC155EAB00D6B5EE04A4A31416B4D1EDD27FF915F43B77DBD567F201F8C12 DF9B272813D89C9F960A9BB37BEE79CE8701E418B03AEF4604C273DFCD380F54 350608AEA632A54BED07DC0690448576C5449AD9465CF06B5611ACEE28C94631 B5CD0E1EE997E23966E494EAC2E397A604AF67D0E55F48B46ACF92DE6E13B8A3 39C0FBF7B87218D04C6614FE336FEA49E26B7045370DB4847F80A86B3A97933F 4F5BDC84B75E7A01B36D1C2D5A0F4F2C873AE44D804732847525C15F900EB9C4 65B90F90F343E0420392AA43A4F9F836ECF2CB9FCF4A7AC4E564F71506C04423 C42CC07FA4F4B4EF5BF5464D4E76976DC5164A0E134329D962EF72E36C2374EC 339DDFEF01B8D43459AFA427B44EA035C41936DB61E512EB99B1B98C94E56775 442484DE5A25E67F347BB5A4F1DC5E3C50901187F6081C2547A71E13B3657243 EBADB0BB43F920C15CE4D4ED45E481A40E6A5EBB944B2D44D7E1CF2D130A7B2C 25AB9A8D48CBD56637B3888CD66135BEB00915550CC2EA18229B068E5091B2BB 0EE55CFEDE2695316911B60C66FAE3A47AF8C778399F1E029C8AC3898602E89A 2E83824A18D289A571B9F14D5113543F14D4C085ECBC20CA010503A068530D54 5966DD29C1E04FC8CC14E684F1D523FF8D5C16E776499A9BCC5546C3019A7363 8AA39908E2AB0F4236C6B453B2BE8046F6D512929283718F8C0EAE110A7E7F3A E649D9C76F21F3C98D274E40D1E7F7E9211F6ADE82BD73353095A862EBF943E2 744D66C11EDD6AB4CA6DFBE231750132A1419F961B75F654957CD33B4D21C038 D88322B91EA35235D83618A10F040FF284674D7AFC91D58B50BD591B870D9B79 F79F5E9BFDDEBB9AE3CA2A17A439082898598ADF8DD54A42F82046299153096E FABA8F1A4FAC50ED0CF9CEA7208B5F39514BD52F4B93BBD32BA4E19A8C02D1BD 764F7CC39729AE94D83620269E1EE32C5E7CB173ED2947580C39F1AF782B1465 F8A4CAD36261FEB051A0677217FCF3017FFD173DB260DC6C66F907C252CAF4D6 1DC423516B3487E74E6108DD038E4CCF7E008C3286A9BE150F46DF0D24AED27A D0AE2B1F60899E9E1872832673EB28E2E465BF0734AC459829D42D7E31EAFDDD DD5F63364872EF24C99EC5A346F60DED135EAAE1CBF8F9D051CA39DAA3F592AB 34193B2AADFAF020FE42293BEC723633B38A2C8C65FAB0CF772209FA8E1E7A82 15316ECD908F1A8355BD409B11EBAB00D80AD389BEBE357D107827D49CE9A014 5A7536AB85AE8206F5F43AC6409F59FFBDACE58AF87D3C4C6EBEACCD801FA923 AA04E542D23E389415F423065111046BE1AABF234AA8156C0F0E05BE139F82F9 489A8766716287088F451179E180572C60478099C6A507D2B8A9D2E330872A83 9A56ABDD97A467F5ADB9E08A9ECD62AB1F600E7A6F4C8905497E7965873448EC C2529C56986FE1E3C48652DD02495A53089569183CF75C89FAF88E38192987BA C061B029A1475CFBD00157F1256365A741144EA2EF4FA2039A2555CCB89734CD A6B4DA0482B2906ADFF83F749C52A1474DF2832A4659B60CE2F203A9B14A8D9A 088B48B32D3D1E13EC4A1587CB18EF1E15933762E7DCEFF2E8671311A092B2C5 9AC2102CF157EE42B88050AF6B9600745BBC7583999F3CA0962F073FBF7279BA D3F16ECF48D5973D3610B8CD7F9FCBB48E5D6F8D8FC4BA703F7C92454DFB2BF9 DE7812C8370F30424E4EEC4C3EA5B1F3137B16E3418A4C73A9EAE3A06E5560E3 494E71B8159D7CB23FC90FD651AEB07867C8A2E656FA36B193AA9261C98D0C45 0735570192FC3EA22DA0A8874ADED40D3AE130C051D266ABB4F65DD7E9A68BFB 097E2A5EFF411D26B9581F0D61753440F91C325699E7CEA90107F55F9BD478D6 F17042E710C9387F975A3BD7654DC113F17182497A4289F3C81A37A48BA8D66D 3DF02BCCAA5C32D71B6E4C7316C9CAFFD1173A352831D6110ACAAADB21C4751D 4F2C35A8490999013485F6AB5E4497880CCBE78CE8ED5BC623BD2F4E230F0DB8 6522E203445073A11C4663E7D0C1724992072519DB39389662F75CAC57FF20CA B4AD604ACDD7D40560125B9A77613FF1C51BBB91C75653A2800C40545D446F56 9663AD7CE3B3E9CC3BA7D907561FF498C1519BE0C9984F7A3A33573F262D9E75 F547366E8EFC46F1F984E2C6841FF9ACEF44D8804A2A567E0A75F842BB57DB2A 7F4DD6738CEF16A4007A3E8FAABBBD19853CBD70AC8CF599C651E27AF4AC2E4D 4A87A9616732B81947B13AE0223BC0DA77C206072C7538574608C8DFB40E407C AF01507296F1FED01FE9DAEC841864D857FAC306EF001053DDA9854EEEF09ADD 0C3221E3F45DAA2C747C468D471DE4DB8C091C9CF7A22043B9D9AF23AD2EE11A 154BF601D6DAB725C5CBD7D23B955ACDCC8DA70D53396C0B0D3CF5D7B110E9FF 17DD2D73BBB99594C2262231BBB56FE443015D813C3323929349D06B51275B40 84A7BD1875411E68FD8FBB062023CB0EC186FF8027AEAC6F35B00EF9669047EB B0E87B06EB40A9968052CEC8E4BC2354A963CB5956CB300624BF3AB78A3D1A63 CA4A40270DBFFFAC07F8EE8019DD1003A07CFCA1635ED2A51428362DD52D7826 DED05A0778ED5024012CC2ECBF1A9914D8F81A02DA5328B2E32BA78FC15CE60C 622021E0CFDE12AF3B284CFCF047867D399A8DD70844D12A34AE7EA5DCAF6CF6 16C62406927FE0CD3A76A5DDCB6035E2A45A0A1EC85CD2AF59E7275322CAF01A D54F3C49382A065D5D4932562F964CBF2174D0FA07A6FC3B0BE43EA1CFDA4B88 BF507F964DD52B6EF9C2844F880271F7639B4C571922A6154AA02FF5D042FEBB 506976CAA4B8DEB70BA2B063E07B874AF5F198D7C45E229AD80D394D7EF7375A A70B62D2719C6598C6124DDC0B562FE0659BCFD22CB3B1AB5D7E2726CDFCF88F B13DE122F2A3DEFDC2E99C902C5761E43C7A1A43F677931AB005746566FE3C2E 962BD9163E099B57E0DAB0DEB69497F6E9B851264EE594FD90A67843AD7E05EE 90119F7D88483955AC3FDB0D32B7B1F1E31B7E572AD62CEDA14028F3EAD01434 9106CD651516E13997EAFA17A8B5026B9506C66151CA9EDAFA128B13C99FF662 CBC821CBD3768C3D4A7C3DFD2A6C27F643D905181E7E088C7B619D118F4B58E7 E1A27289F377B188D374682A266BE157CB0B478484016BF6984013572FB3DCE4 00776B23D3F2DC8DBBAADC2E618AB399061C94FFF2A9A47835AF1E2C92ED0610 5176407975A0345D5371843EEF46D445082B9780ED5D326AD2AA7591AA726BF6 9FA17265E93F600D76FEE14C9106A94DA0DEA690A073ED19888E38BE279F22B0 3651B85A662314C10DF7C74D89848148486C33372D688167F95A956280BD5A83 8C06D67C02A6AA3C55CF799DB8557FF823F062D9150341F98BC2B2BFB84DD14D FCAF2CE7042F7FBA8754A59B1BF1476468EDA717B266D35EEA7C4107D4954757 F762245CCD997C8451E5E9E845A6583D8DCCDD7ACD65136C2F382EF8DFEF4738 3C8CCEA8F8A5DE43BC6E5968E2DCB22E237FB65357383412A9083B7A9BA06B60 669A320D295D41B9CC65A05F1C3CF4C860324E424B74B50E68F67F84C176D7E7 22E2E0E85FA0BEA08476CE11F8930000B6096A512044D54F3FCB7F7BCC719723 7394DCC3B33C292ADAB50AE17C454333D4F93D938F934E0F1AEFC5F2BC488883 44CC90AA3FD17CA3B2117E6E2DC1FED5EDE855A4169F238181C77CE4ACEDE8F5 E77B4A07D17D173C82F0B62D33AAE40213E5BA93C2930DFCFFEB9DAE024BF85A 90BFCCFE3FC5F99D39B2E8D2686AE1417AC1E5BB58D105024703F38AE3D90F30 EE950E8C86ED718598CA966D841BD379C8FCF356CA568F995846CD2F4B0DBA7B 46FBA479EA98E3B92EE5C76B63AFD766CCDF0560148F30A29BE6EFC725EE60F2 F5F7EC808795BB8C59B568CB6B927A2E3F8206180A735B57FAE842082ABCBB2B A65E38BC4E9253D728DA0F8BEA769428F5E8328F4AF412CA14B056B2A8AEA438 B4AE59E74AE6F3432AB8C729045C302EB3EFABD4D14DD542AB22E67A1D4DDA44 8D528DC404FF90FC92B736DDE0C2D4E1D8AAD0C4C285AD83E9E16A2BF5D3643E 5334AC1AC57C48A8B0875E379F4A7EDE97DBD65920EE20C60F16128324B23BFB 369A4F92832E679FC855451BC789F97D1997A73A4DBBDAF68D14C7713A4F1B56 F55CA97A5E120E013FB41A469668B02B3027617FCC9EEA2BC6FBDED8948CB4F6 C76ED2C725B016741936BB7AD5000E89CDFCD7B51A18037B6CB661E95F3E00F2 99FAC8D75C1B8AC2F3BD84DE2417C0D7AA6526DF55DB0560BF4BE43EEFB23ABB 9282709C58B1200CD1C967F06CB311BC3BFC8B651CB0F6B34F6E96ECF5C51649 BD4C142EDF0BCF97AAA83ED6231483539AA4776C92C4A968FEECE297435AD0C1 F27C45798F0671AE7D36862A7C4AAD5523F96698D1BC679103435FDA131ADC34 326BBAA7F7BB7C47A232629435AA4C9DCB6A2E1A0DBA73DC6859FAE5FA6F15DB C38A6DD13B45C55D6EAF468E22A24FE97C854FD8B42B63A456FB62F4B6004A6F 2F81104D3A740690B7896D7140FC5DEE2A803AB13AFF0B26BFD0578B0F2407E4 A5D5FB3128D0BFD6BB49FB727452F84EA5A2AD6792E91D4E6F55462701F85ECD 8611A2FF2F2EA8DC783774F860D01C616E4B37AC8074EE264D5F5448DC91EA2A E7E261C7827787D9F4442B969353A49C948B6BDF7E868C8B9AD10AB31E8C2746 E9AB0ECD16F0AF5BF7DF3570A7663B0E200E26F7745D6CBC1B0E77028A66C6FB 076A779124F2C19E77200F7D74F30CCC8C7574CAC587D7BBB7802AC878AAEA83 C81BC3880512B7612605EA397468A5C43D666D7D9A6E3384500B516E86F14C81 6643E5833A2B0D57AC3A39CDFED704DE32519B62532E6CCB85A37FE6B58D8348 7CA452751F2E75D5287E4DF94C8512014A74977CD682E08D3C884653A495A254 4ADA8E700D0D39D3A122E720EA9CE938C4711D117B5A27C8FA799E402C4B40CF 91AA834656B4064D8B40F620ECFB315EE9C555CCCF8AF57CB5968A37ECF13DB0 EFC479FE9716E6B79C9FDB4E22106802EF1D248D664528F37E2E4446F6B10BD2 A4D5D4179101EAEF55D57898C3784111BF27D744C382058C 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 103 /g put dup 105 /i put dup 110 /n put dup 115 /s put dup 117 /u put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB090930493E00607B9F8C32D24F07482266E 09ACF6B41349E00C8B421ED5C40D3C40923D21F107185B5A135B36FBADE488C1 8F0C2DEF08A6B185F2D25B8FD8DE7EBC71DD9C15C9F590FCD7B4B8E9690079F5 39D809ABDDD79A632C99FBDFEDE0A89341919C6B397AD1C8FB7F3BF8C52C1B46 7BFA51A4DA496B810689769986D6A625AEA159AB2F6C7EDA6E04F0B2631E5E0F 942624C194230D8A6EF32B3E1B4A5C37C6092246B328CFC926D17AE3B559ECD6 2FA448C0FA94956EFED3BD7920EF42BB3F25907F097FA990FBEB88E78FDC74AF D3D7BC983DE0F33C53780C9A8E98A40C2EFEE93067232133F83C4EB0B2AF0EFE D1B3417DE2966B2BA85FB7A32A1B6B57D0EC8645FE35571746F760EF7ED4B9FC 53857A279CF19C0625D3FA9733C918A74E592DDA7FC1B088A8E323C9845306B2 9C474BF8FC5F285E76B64020C2A377AA104483039805B8963116E882A0ED9417 F56A2B0CC9B0857AB0D1B0FB080AC608952DE7DE07F81AF14AB81F90A76F288F 3B1095F9BD7BF8FAE8294990F0EFA45CDDCE3E24BE64C706C5031856E795A079 C062F5C28B2429CAE52817C005CB1CB8F97FC6DB2E731FF72D8CD75FE7314C11 3C83F93A5D1F5A4D928A8D9CBF8F66980FA36717E2BD4D7B52C7F7931CB91E80 396D5593E022810BA1D5952138AA44DA13E001BE8F854D1AC6773C10F5E8C5E5 FAC9C1C00D691A1D84FA88AB7A972CB521449280428B3B6B62AA1D7586C5016C FD2F558F09577665CB2CA7998B1F54661994EDF2B82229F55A9C657B1E0206FF 4F8D30F309A2C988FE06D7E6A77AE5A44765FB88A4CED66F8DC8FD7469C483E1 9849B7A365121843AA23E554102363A21342EEF1C13688E9FA27ACBC3E479F5B E64E99C1DB82AC245BE81B1898EAF293D9CE70F1E5B2F5052CF248028DE1944F E1416FF897BB9855119C4F5D237A38CAAC27F5E4A9696EDAAA485305A3691ECC C283663B80248DF419E3F267BD10B935E88850FD369A91F34A6F3AA6A11A6254 63FA3BB611268DCD43DAF1F273CFF5AA40177709DD3B5029D6135A47D7E4A76F 03EDD4DBFAD427D55EDB1D318749E5F3D7F3CFF981214960E8AAD77C0B9BBD24 29089C360B059722B67B148CA77CC7BD0A3AD65539A373359FDAEAEAF0FB3455 3D781BB5D8ABE9FCA148C0D612FCB9E33BAD7492CBE37F4ACD720B61B638C141 CF3F06378534263DF7A7016BC0F159120F2B211FC57203652189D3D1F1EB2FBA 73248CEB7DCEF5DCACF8250B1582BDA94E3C2E4565EE0D7450761F0EE8A8B0B9 F62F5D5048E22205C8F61EE206359DFA6318C8F9F67FEA6C0A13A9A4E2F195CF 2E83FD136DF96EAD2F930FEC1461C89B7755EB308D92A51834C0D0868CF34731 4FEBCE3AC5B80C92BC4E3364C61F68C34A146D2901A2E4E2EDD9AAE00D964486 2DD43FAA44163CBDCDD514EC0C9276900A047CB0FB70E21E618AC4B18495D9E2 2D227915E49156E06E3753326CBCFADAE75F6505CB19D1E803BC2A83D5F3B200 E4E8D4BD1CA4A3695FBCD4965AAE58587DC18B677E85E05F80FF870EC8B383C9 21AEF9EF540EB0D7F7F73A56ED422C876FF091DBDCB4B2B7E3A4A25816EB6F8F 719CDE34FA58AA1738EAF33A81CB0F8B4A35804D62EFF869B14C4E275E4899C4 9CF66CAE18DD7E93D4DE571177E8B1E3ADA0C216D2C984B9F2E23E8CEB48228E D76C7CCD00 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (history.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 41 1[41 1[30 30 30 1[43 38 43 4[21 43 38 1[34 43 34 1[38 13[43 10[58 14[38 38 38 5[38 49[{}22 74.7198 /CMR9 rf /Fc 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fd 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fe 130[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 1[39 2[39 39 39 39 39 1[39 1[39 1[39 2[39 39 39 39 39 39 39 39 39 2[39 39 39 39 39 3[39 1[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 33[{}77 74.7198 /CMTT9 rf /Ff 134[53 53 72 53 55 39 39 39 53 55 50 55 83 28 2[28 55 50 30 44 55 44 1[50 7[75 4[72 55 73 2[77 75 4[36 75 2[68 3[75 20[28 1[50 29[55 58 11[{}36 99.6264 /CMSL10 rf /Fg 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fh 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 5[52 4[52 52 52 2[52 52 4[52 52 2[52 3[52 22[52 42[{}37 99.6264 /CMTT10 rf /Fi 134[48 48 48 1[48 48 48 48 2[48 48 1[48 2[48 1[48 48 48 48 49[48 48 49[{}17 90.9091 /CMSLTT10 rf /Fj 133[55 65 65 1[65 68 48 48 50 1[68 61 68 102 34 2[34 68 61 37 56 68 55 68 60 9[127 3[68 5[116 74 2[46 96 1[77 81 94 2[93 9[61 61 61 61 61 61 61 2[34 33[68 12[{}41 109.091 /CMBX12 rf /Fk 134[48 48 66 48 51 35 36 36 48 51 45 51 76 25 2[25 51 45 28 40 51 40 1[45 3[25 1[25 40[45 45 6[45 29[51 53 11[{}29 90.9091 /CMSL10 rf /Fl 138[56 1[42 4[56 4[27 1[58 3[54 1[56 97[{}7 90.9091 /CMCSC10 rf /Fm 134[85 85 117 85 90 63 64 66 1[90 81 90 134 45 2[45 90 81 49 74 90 72 90 78 10[122 124 112 3[110 1[126 1[97 2[60 126 127 101 1[124 117 115 122 14[81 81 49[{}38 143.462 /CMBX12 rf /Fn 242[91 13[{}1 90.9091 /CMSY10 rf /Fo 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 9[139 102 103 1[75 100 1[92 1[105 128 81 2[50 105 1[85 88 103 97 96 102 6[37 4[67 67 67 67 67 2[37 1[37 44[{}47 119.552 /CMBX12 rf /Fp 129[48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 1[48 3[48 48 48 48 1[48 48 48 1[48 2[48 48 48 48 48 48 1[48 48 1[48 48 48 48 48 48 7[48 48 48 48 48 48 1[48 48 48 48 1[48 48 48 48 48 48 33[{}71 90.9091 /CMTT10 rf /Fq 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 19[76 51 51 53 11[{}82 90.9091 /CMR10 rf /Fr 134[102 4[75 76 79 2[97 5[54 6[108 94 11[149 6[151 1[116 3[151 152 71[{}13 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fr(GNU)65 b(History)h(Library)p 150 1418 3600 34 v 1920 1515 a Fq(Edition)31 b(7.0,)h(for)e Fp(History)e(Library)h Fq(V)-8 b(ersion)31 b(7.0.)3367 1623 y(July)f(2016)150 4927 y Fo(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l(ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F) -11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fq(This)31 b(do)s(cumen)m(t)h(describ) s(es)f(the)h(GNU)h(History)f(library)g(\(v)m(ersion)g(7.0,)i(16)f(July) e(2016\),)k(a)d(program-)150 4523 y(ming)38 b(to)s(ol)h(that)f(pro)m (vides)g(a)g(consisten)m(t)i(user)d(in)m(terface)i(for)f(recalling)h (lines)g(of)f(previously)f(t)m(yp)s(ed)150 4633 y(input.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fn(\015)30 b Fq(1988{2016)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h (to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s (cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fq(i)150 299 y Fm(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 3705 -116 a Fq(1)150 299 y Fm(1)80 b(Using)53 b(History)g(In)l(teractiv)l(ely)150 549 y Fq(This)42 b(c)m(hapter)h(describ)s(es)f(ho)m(w)g(to)h(use)g(the)f Fl(gnu)h Fq(History)g(Library)e(in)m(teractiv)m(ely)-8 b(,)50 b(from)42 b(a)h(user's)150 659 y(standp)s(oin)m(t.)76 b(It)42 b(should)f(b)s(e)h(considered)g(a)g(user's)g(guide.)76 b(F)-8 b(or)43 b(information)f(on)g(using)g(the)g Fl(gnu)150 769 y Fq(History)36 b(Library)e(in)h(y)m(our)f(o)m(wn)i(programs,)g (see)f(Chapter)g(2)g([Programming)g(with)g(GNU)h(History],)150 878 y(page)31 b(4.)150 1127 y Fo(1.1)68 b(History)46 b(Expansion)150 1287 y Fq(The)f(History)h(library)e(pro)m(vides)i(a)f (history)g(expansion)g(feature)h(that)g(is)f(similar)h(to)g(the)f (history)150 1396 y(expansion)g(pro)m(vided)f(b)m(y)h Fp(csh)p Fq(.)83 b(This)44 b(section)i(describ)s(es)e(the)h(syn)m(tax)h (used)e(to)i(manipulate)f(the)150 1506 y(history)30 b(information.)275 1646 y(History)h(expansions)f(in)m(tro)s(duce)g(w)m(ords)g(from)g(the)h (history)f(list)h(in)m(to)g(the)g(input)f(stream,)h(making)150 1755 y(it)g(easy)g(to)g(rep)s(eat)g(commands,)f(insert)g(the)h(argumen) m(ts)f(to)h(a)g(previous)f(command)g(in)m(to)i(the)e(curren)m(t)150 1865 y(input)f(line,)i(or)g(\014x)f(errors)f(in)h(previous)g(commands)g (quic)m(kly)-8 b(.)275 2005 y(History)37 b(expansion)f(tak)m(es)i (place)g(in)e(t)m(w)m(o)i(parts.)59 b(The)36 b(\014rst)g(is)h(to)g (determine)g(whic)m(h)f(line)h(from)150 2115 y(the)42 b(history)f(list)h(should)e(b)s(e)h(used)f(during)g(substitution.)74 b(The)40 b(second)i(is)f(to)h(select)h(p)s(ortions)e(of)150 2224 y(that)31 b(line)g(for)f(inclusion)h(in)m(to)g(the)g(curren)m(t)f (one.)42 b(The)30 b(line)h(selected)h(from)e(the)h(history)f(is)h (called)h(the)150 2334 y Fk(ev)m(en)m(t)p Fq(,)e(and)c(the)i(p)s (ortions)e(of)i(that)f(line)h(that)g(are)f(acted)i(up)s(on)c(are)j (called)g Fk(w)m(ords)p Fq(.)39 b(V)-8 b(arious)28 b Fk(mo)s(di\014ers)150 2443 y Fq(are)33 b(a)m(v)-5 b(ailable)36 b(to)d(manipulate)h(the)f(selected)h(w)m(ords.)48 b(The)32 b(line)i(is)f(brok)m(en)f(in)m(to)i(w)m(ords)f(in)f(the)i(same)150 2553 y(fashion)23 b(that)g(Bash)g(do)s(es,)h(so)f(that)h(sev)m(eral)g (w)m(ords)e(surrounded)e(b)m(y)j(quotes)g(are)g(considered)g(one)g(w)m (ord.)150 2662 y(History)37 b(expansions)g(are)g(in)m(tro)s(duced)f(b)m (y)h(the)g(app)s(earance)g(of)g(the)g(history)f(expansion)h(c)m (haracter,)150 2772 y(whic)m(h)30 b(is)h(`)p Fp(!)p Fq(')f(b)m(y)g (default.)150 2977 y Fj(1.1.1)63 b(Ev)m(en)m(t)39 b(Designators)150 3124 y Fq(An)32 b(ev)m(en)m(t)j(designator)e(is)g(a)g(reference)g(to)h (a)f(command)f(line)h(en)m(try)g(in)g(the)g(history)g(list.)48 b(Unless)33 b(the)150 3233 y(reference)e(is)f(absolute,)i(ev)m(en)m(ts) f(are)g(relativ)m(e)i(to)e(the)f(curren)m(t)g(p)s(osition)h(in)f(the)h (history)f(list.)150 3401 y Fp(!)432 b Fq(Start)34 b(a)f(history)h (substitution,)g(except)g(when)f(follo)m(w)m(ed)i(b)m(y)e(a)h(space,)h (tab,)f(the)g(end)f(of)630 3511 y(the)e(line,)g(or)f(`)p Fp(=)p Fq('.)150 3675 y Fp(!)p Fi(n)384 b Fq(Refer)30 b(to)i(command)e(line)g Fk(n)p Fq(.)150 3840 y Fp(!-)p Fi(n)336 b Fq(Refer)30 b(to)i(the)e(command)g Fk(n)g Fq(lines)h(bac)m(k.)150 4005 y Fp(!!)384 b Fq(Refer)30 b(to)i(the)e(previous)g(command.)40 b(This)30 b(is)g(a)h(synon)m(ym)f (for)g(`)p Fp(!-1)p Fq('.)150 4170 y Fp(!)p Fi(string)144 b Fq(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g (the)g(curren)m(t)g(p)s(osition)g(in)g(the)g(history)630 4280 y(list)31 b(starting)g(with)f Fk(string)p Fq(.)150 4445 y Fp(!?)p Fi(string)p Fp([?])630 4554 y Fq(Refer)25 b(to)h(the)f(most)h(recen)m(t)g(command)f(preceding)g(the)g(curren)m(t) g(p)s(osition)g(in)g(the)g(history)630 4664 y(list)32 b(con)m(taining)i Fk(string)p Fq(.)45 b(The)31 b(trailing)i(`)p Fp(?)p Fq(')f(ma)m(y)g(b)s(e)f(omitted)i(if)f(the)g Fk(string)39 b Fq(is)32 b(follo)m(w)m(ed)630 4773 y(immediately)g(b)m(y)e(a)h (newline.)150 4938 y Fp(^)p Fi(string1)p Fp(^)p Fi(string2)p Fp(^)630 5048 y Fq(Quic)m(k)h(Substitution.)44 b(Rep)s(eat)32 b(the)g(last)h(command,)f(replacing)g Fk(string1)40 b Fq(with)31 b Fk(string2)p Fq(.)630 5157 y(Equiv)-5 b(alen)m(t)31 b(to)g Fp(!!:s/)p Fi(string1)p Fp(/)p Fi(string2)p Fp(/)p Fq(.)150 5322 y Fp(!#)384 b Fq(The)30 b(en)m(tire)h(command)f(line)h(t) m(yp)s(ed)f(so)h(far.)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 150 -116 a Fq(Chapter)30 b(1:)41 b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(2)150 299 y Fj(1.1.2)63 b(W)-10 b(ord)41 b(Designators)150 446 y Fq(W)-8 b(ord)27 b(designators)h(are)g(used)e(to)i(select)h (desired)d(w)m(ords)h(from)f(the)i(ev)m(en)m(t.)41 b(A)27 b(`)p Fp(:)p Fq(')g(separates)h(the)f(ev)m(en)m(t)150 555 y(sp)s(eci\014cation)38 b(from)e(the)h(w)m(ord)f(designator.)61 b(It)37 b(ma)m(y)h(b)s(e)e(omitted)i(if)e(the)h(w)m(ord)g(designator)g (b)s(egins)150 665 y(with)30 b(a)g(`)p Fp(^)p Fq(',)g(`)p Fp($)p Fq(',)g(`)p Fp(*)p Fq(',)h(`)p Fp(-)p Fq(',)f(or)g(`)p Fp(\045)p Fq('.)41 b(W)-8 b(ords)30 b(are)g(n)m(um)m(b)s(ered)e(from)i (the)g(b)s(eginning)f(of)h(the)g(line,)g(with)g(the)150 775 y(\014rst)f(w)m(ord)f(b)s(eing)h(denoted)h(b)m(y)f(0)h(\(zero\).)41 b(W)-8 b(ords)30 b(are)g(inserted)f(in)m(to)h(the)g(curren)m(t)f(line)g (separated)h(b)m(y)150 884 y(single)h(spaces.)275 1026 y(F)-8 b(or)31 b(example,)150 1197 y Fp(!!)384 b Fq(designates)37 b(the)f(preceding)g(command.)57 b(When)35 b(y)m(ou)i(t)m(yp)s(e)f (this,)h(the)f(preceding)g(com-)630 1307 y(mand)30 b(is)g(rep)s(eated)g (in)g(toto.)150 1474 y Fp(!!:$)288 b Fq(designates)23 b(the)g(last)g(argumen)m(t)g(of)f(the)h(preceding)f(command.)38 b(This)22 b(ma)m(y)h(b)s(e)e(shortened)630 1583 y(to)31 b Fp(!$)p Fq(.)150 1750 y Fp(!fi:2)240 b Fq(designates)30 b(the)g(second)f(argumen)m(t)h(of)f(the)h(most)f(recen)m(t)i(command)e (starting)h(with)f(the)630 1860 y(letters)j Fp(fi)p Fq(.)275 2031 y(Here)e(are)h(the)g(w)m(ord)f(designators:)150 2202 y Fp(0)g(\(zero\))114 b Fq(The)30 b Fp(0)p Fq(th)g(w)m(ord.)40 b(F)-8 b(or)31 b(man)m(y)g(applications,)h(this)e(is)g(the)h(command)f (w)m(ord.)150 2369 y Fi(n)432 b Fq(The)30 b Fk(n)p Fq(th)g(w)m(ord.)150 2536 y Fp(^)432 b Fq(The)30 b(\014rst)f(argumen)m(t;)j(that)f(is,)f(w)m (ord)g(1.)150 2703 y Fp($)432 b Fq(The)30 b(last)h(argumen)m(t.)150 2870 y Fp(\045)432 b Fq(The)30 b(w)m(ord)g(matc)m(hed)h(b)m(y)f(the)h (most)g(recen)m(t)g(`)p Fp(?)p Fi(string)p Fp(?)p Fq(')e(searc)m(h.)150 3037 y Fi(x)p Fp(-)p Fi(y)336 b Fq(A)30 b(range)h(of)g(w)m(ords;)f(`)p Fp(-)p Fi(y)p Fq(')g(abbreviates)h(`)p Fp(0-)p Fi(y)p Fq('.)150 3204 y Fp(*)432 b Fq(All)28 b(of)g(the)g(w)m(ords,)g(except)h (the)e Fp(0)p Fq(th.)40 b(This)27 b(is)g(a)h(synon)m(ym)f(for)h(`)p Fp(1-$)p Fq('.)39 b(It)28 b(is)g(not)g(an)f(error)630 3313 y(to)j(use)g(`)p Fp(*)p Fq(')f(if)h(there)g(is)g(just)f(one)h(w)m (ord)f(in)g(the)h(ev)m(en)m(t;)i(the)d(empt)m(y)i(string)e(is)h (returned)e(in)630 3423 y(that)j(case.)150 3590 y Fi(x)p Fp(*)384 b Fq(Abbreviates)31 b(`)p Fi(x)p Fp(-$)p Fq(')150 3757 y Fi(x)p Fp(-)384 b Fq(Abbreviates)31 b(`)p Fi(x)p Fp(-$)p Fq(')f(lik)m(e)h(`)p Fi(x)p Fp(*)p Fq(',)g(but)f(omits)h(the)f (last)h(w)m(ord.)275 3928 y(If)i(a)h(w)m(ord)g(designator)g(is)g (supplied)f(without)h(an)g(ev)m(en)m(t)h(sp)s(eci\014cation,)h(the)e (previous)f(command)150 4038 y(is)d(used)g(as)h(the)f(ev)m(en)m(t.)150 4244 y Fj(1.1.3)63 b(Mo)s(di\014ers)150 4391 y Fq(After)29 b(the)g(optional)g(w)m(ord)g(designator,)g(y)m(ou)g(can)g(add)f(a)h (sequence)g(of)g(one)g(or)f(more)h(of)g(the)f(follo)m(wing)150 4501 y(mo)s(di\014ers,)h(eac)m(h)j(preceded)e(b)m(y)g(a)h(`)p Fp(:)p Fq('.)150 4672 y Fp(h)432 b Fq(Remo)m(v)m(e)32 b(a)f(trailing)g(pathname)g(comp)s(onen)m(t,)g(lea)m(ving)h(only)e(the) h(head.)150 4839 y Fp(t)432 b Fq(Remo)m(v)m(e)32 b(all)f(leading)h (pathname)e(comp)s(onen)m(ts,)h(lea)m(ving)h(the)e(tail.)150 5006 y Fp(r)432 b Fq(Remo)m(v)m(e)32 b(a)f(trailing)g(su\016x)f(of)g (the)h(form)f(`)p Fp(.)p Fi(suffix)p Fq(',)f(lea)m(ving)j(the)f (basename.)150 5173 y Fp(e)432 b Fq(Remo)m(v)m(e)32 b(all)f(but)f(the)h (trailing)g(su\016x.)150 5340 y Fp(p)432 b Fq(Prin)m(t)30 b(the)h(new)f(command)g(but)g(do)g(not)g(execute)i(it.)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fq(Chapter)30 b(1:)41 b(Using)30 b(History)h(In)m(teractiv)m(ely)2016 b(3)150 299 y Fp(s/)p Fi(old)p Fp(/)p Fi(new)p Fp(/)630 408 y Fq(Substitute)32 b Fk(new)40 b Fq(for)32 b(the)h(\014rst)f(o)s (ccurrence)h(of)f Fk(old)37 b Fq(in)32 b(the)h(ev)m(en)m(t)h(line.)48 b(An)m(y)32 b(delimiter)630 518 y(ma)m(y)25 b(b)s(e)g(used)f(in)g (place)i(of)f(`)p Fp(/)p Fq('.)39 b(The)24 b(delimiter)h(ma)m(y)h(b)s (e)e(quoted)h(in)f Fk(old)29 b Fq(and)24 b Fk(new)32 b Fq(with)25 b(a)630 628 y(single)k(bac)m(kslash.)40 b(If)28 b(`)p Fp(&)p Fq(')g(app)s(ears)g(in)f Fk(new)p Fq(,)i(it)f(is)h(replaced)f(b)m(y)g Fk(old)p Fq(.)40 b(A)28 b(single)h(bac)m(kslash)630 737 y(will)35 b(quote)g(the)g(`)p Fp(&)p Fq('.)54 b(The)34 b(\014nal)g(delimiter)i(is)e(optional)i(if)f (it)g(is)f(the)h(last)h(c)m(haracter)g(on)630 847 y(the)31 b(input)e(line.)150 1006 y Fp(&)432 b Fq(Rep)s(eat)31 b(the)f(previous)g(substitution.)150 1166 y Fp(g)150 1275 y(a)432 b Fq(Cause)38 b(c)m(hanges)i(to)f(b)s(e)f(applied)h(o)m(v) m(er)h(the)f(en)m(tire)g(ev)m(en)m(t)h(line.)66 b(Used)39 b(in)f(conjunction)630 1385 y(with)30 b(`)p Fp(s)p Fq(',)h(as)f(in)h Fp(gs/)p Fi(old)p Fp(/)p Fi(new)p Fp(/)p Fq(,)c(or)j(with)h(`)p Fp(&)p Fq('.)150 1544 y Fp(G)432 b Fq(Apply)30 b(the)g(follo)m(wing)i (`)p Fp(s)p Fq(')f(mo)s(di\014er)e(once)i(to)g(eac)m(h)h(w)m(ord)e(in)g (the)g(ev)m(en)m(t.)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 3705 -116 a Fq(4)150 299 y Fm(2)80 b(Programming)54 b(with)f(GNU)h(History)150 544 y Fq(This)41 b(c)m(hapter)i(describ)s(es)e(ho)m(w)h(to)h(in)m(terface)g(programs)f (that)g(y)m(ou)h(write)f(with)f(the)i Fl(gnu)e Fq(History)150 654 y(Library)-8 b(.)48 b(It)33 b(should)e(b)s(e)i(considered)f(a)h (tec)m(hnical)i(guide.)48 b(F)-8 b(or)34 b(information)f(on)g(the)g(in) m(teractiv)m(e)i(use)150 763 y(of)c Fl(gnu)f Fq(History)-8 b(,)31 b(see)g(Chapter)f(1)h([Using)g(History)g(In)m(teractiv)m(ely],)i (page)e(1.)150 1010 y Fo(2.1)68 b(In)l(tro)t(duction)45 b(to)g(History)150 1169 y Fq(Man)m(y)31 b(programs)f(read)g(input)g (from)f(the)i(user)f(a)g(line)h(at)g(a)g(time.)41 b(The)30 b Fl(gnu)g Fq(History)h(library)f(is)g(able)150 1279 y(to)f(k)m(eep)h(trac)m(k)g(of)f(those)g(lines,)h(asso)s(ciate)g (arbitrary)f(data)g(with)g(eac)m(h)h(line,)f(and)g(utilize)h (information)150 1388 y(from)g(previous)g(lines)g(in)g(comp)s(osing)h (new)f(ones.)275 1527 y(The)d(programmer)g(using)g(the)g(History)h (library)f(has)h(a)m(v)-5 b(ailable)29 b(functions)e(for)h(remem)m(b)s (ering)f(lines)150 1636 y(on)21 b(a)g(history)f(list,)k(asso)s(ciating) e(arbitrary)e(data)i(with)e(a)h(line,)i(remo)m(ving)f(lines)f(from)f (the)h(list,)i(searc)m(hing)150 1746 y(through)35 b(the)g(list)h(for)f (a)h(line)f(con)m(taining)i(an)e(arbitrary)g(text)h(string,)h(and)e (referencing)g(an)m(y)h(line)f(in)150 1855 y(the)c(list)g(directly)-8 b(.)43 b(In)30 b(addition,)h(a)g(history)g Fk(expansion)g Fq(function)f(is)h(a)m(v)-5 b(ailable)33 b(whic)m(h)d(pro)m(vides)h (for)g(a)150 1965 y(consisten)m(t)h(user)d(in)m(terface)j(across)f (di\013eren)m(t)g(programs.)275 2103 y(The)c(user)g(using)g(programs)h (written)g(with)g(the)g(History)g(library)g(has)f(the)h(b)s(ene\014t)f (of)h(a)h(consisten)m(t)150 2213 y(user)38 b(in)m(terface)j(with)e(a)g (set)g(of)h(w)m(ell-kno)m(wn)f(commands)g(for)g(manipulating)g(the)g (text)h(of)f(previous)150 2323 y(lines)28 b(and)f(using)g(that)h(text)g (in)g(new)f(commands.)39 b(The)27 b(basic)h(history)g(manipulation)f (commands)h(are)150 2432 y(similar)j(to)g(the)f(history)h(substitution) f(pro)m(vided)g(b)m(y)g Fp(csh)p Fq(.)275 2570 y(If)f(the)g(programmer) g(desires,)h(he)g(can)f(use)h(the)f(Readline)i(library)-8 b(,)30 b(whic)m(h)f(includes)g(some)h(history)150 2680 y(manipulation)h(b)m(y)f(default,)h(and)e(has)i(the)f(added)g(adv)-5 b(an)m(tage)32 b(of)f(command)f(line)g(editing.)275 2818 y(Before)39 b(declaring)f(an)m(y)h(functions)e(using)h(an)m(y)g (functionalit)m(y)i(the)e(History)h(library)e(pro)m(vides)h(in)150 2928 y(other)29 b(co)s(de,)g(an)g(application)h(writer)f(should)e (include)i(the)g(\014le)f Fp()23 b Fq(in)29 b(an)m(y)g(\014le)150 3037 y(that)c(uses)e(the)h(History)h (library's)e(features.)39 b(It)24 b(supplies)f(extern)h(declarations)i (for)d(all)i(of)f(the)g(library's)150 3147 y(public)30 b(functions)g(and)f(v)-5 b(ariables,)32 b(and)d(declares)j(all)f(of)f (the)h(public)f(data)h(structures.)150 3393 y Fo(2.2)68 b(History)46 b(Storage)150 3553 y Fq(The)30 b(history)g(list)h(is)g(an) f(arra)m(y)h(of)f(history)h(en)m(tries.)41 b(A)31 b(history)f(en)m(try) h(is)f(declared)h(as)f(follo)m(ws:)390 3691 y Fp(typedef)46 b(void)g(*histdata_t;)390 3910 y(typedef)g(struct)g(_hist_entry)f({)485 4020 y(char)i(*line;)485 4129 y(char)g(*timestamp;)485 4239 y(histdata_t)e(data;)390 4349 y(})i(HIST_ENTRY;)275 4487 y Fq(The)29 b(history)i(list)g(itself)g(migh)m(t)g(therefore)g(b)s (e)f(declared)g(as)390 4625 y Fp(HIST_ENTRY)45 b(**the_history_list;) 275 4763 y Fq(The)29 b(state)j(of)f(the)f(History)h(library)f(is)h (encapsulated)g(in)m(to)g(a)g(single)g(structure:)390 4902 y Fp(/*)438 5011 y(*)47 b(A)h(structure)d(used)i(to)g(pass)f (around)g(the)h(current)f(state)h(of)g(the)g(history.)438 5121 y(*/)390 5230 y(typedef)f(struct)g(_hist_state)f({)485 5340 y(HIST_ENTRY)g(**entries;)g(/*)j(Pointer)d(to)j(the)f(entries)e (themselves.)g(*/)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(5)485 299 y Fp(int)47 b(offset;)523 b(/*)48 b(The)f(location)e(pointer)h (within)g(this)h(array.)f(*/)485 408 y(int)h(length;)523 b(/*)48 b(Number)e(of)h(elements)e(within)i(this)f(array.)g(*/)485 518 y(int)h(size;)619 b(/*)48 b(Number)e(of)h(slots)f(allocated)g(to)h (this)f(array.)g(*/)485 628 y(int)h(flags;)390 737 y(})g (HISTORY_STATE;)275 869 y Fq(If)29 b(the)i(\015ags)g(mem)m(b)s(er)e (includes)h Fp(HS_STIFLED)p Fq(,)e(the)j(history)f(has)g(b)s(een)g (sti\015ed.)150 1106 y Fo(2.3)68 b(History)46 b(F)-11 b(unctions)150 1265 y Fq(This)33 b(section)j(describ)s(es)d(the)i (calling)g(sequence)g(for)f(the)g(v)-5 b(arious)34 b(functions)g(exp)s (orted)g(b)m(y)g(the)g Fl(gnu)150 1375 y Fq(History)d(library)-8 b(.)150 1569 y Fj(2.3.1)63 b(Initializing)40 b(History)i(and)f(State)f (Managemen)m(t)150 1716 y Fq(This)21 b(section)i(describ)s(es)f (functions)f(used)g(to)i(initialize)h(and)e(manage)h(the)f(state)h(of)g (the)f(History)g(library)150 1826 y(when)29 b(y)m(ou)i(w)m(an)m(t)g(to) g(use)f(the)h(history)f(functions)g(in)g(y)m(our)h(program.)3350 2003 y([F)-8 b(unction])-3599 b Fh(void)54 b(using_history)49 b Fg(\()p Ff(v)m(oid)p Fg(\))390 2113 y Fq(Begin)41 b(a)f(session)g(in) g(whic)m(h)f(the)h(history)g(functions)f(migh)m(t)i(b)s(e)e(used.)69 b(This)39 b(initializes)j(the)390 2222 y(in)m(teractiv)m(e)33 b(v)-5 b(ariables.)3350 2400 y([F)d(unction])-3599 b Fh(HISTORY_STATE)56 b(*)d(history_get_history_st)q(ate)f Fg(\()p Ff(v)m(oid)p Fg(\))390 2509 y Fq(Return)30 b(a)g(structure)g (describing)g(the)h(curren)m(t)f(state)i(of)e(the)h(input)e(history)-8 b(.)3350 2687 y([F)g(unction])-3599 b Fh(void)54 b (history_set_history_stat)q(e)e Fg(\()p Ff(HISTOR)-8 b(Y)p 2262 2687 30 5 v 44 w(ST)g(A)g(TE)32 b(*state)p Fg(\))390 2796 y Fq(Set)f(the)f(state)i(of)e(the)h(history)f(list)h (according)h(to)f Fk(state)p Fq(.)150 2991 y Fj(2.3.2)63 b(History)41 b(List)g(Managemen)m(t)150 3138 y Fq(These)32 b(functions)f(manage)i(individual)f(en)m(tries)g(on)g(the)g(history)g (list,)h(or)f(set)h(parameters)f(managing)150 3247 y(the)f(list)g (itself.)3350 3425 y([F)-8 b(unction])-3599 b Fh(void)54 b(add_history)48 b Fg(\()p Ff(const)34 b(c)m(har)g(*string)p Fg(\))390 3534 y Fq(Place)d Fk(string)38 b Fq(at)31 b(the)f(end)f(of)h (the)g(history)g(list.)42 b(The)29 b(asso)s(ciated)i(data)g(\014eld)f (\(if)g(an)m(y\))h(is)f(set)g(to)390 3644 y Fp(NULL)p Fq(.)3350 3821 y([F)-8 b(unction])-3599 b Fh(void)54 b(add_history_time)c Fg(\()p Ff(const)34 b(c)m(har)g(*string)p Fg(\))390 3931 y Fq(Change)c(the)h(time)g(stamp)f(asso)s(ciated)i(with) e(the)h(most)f(recen)m(t)i(history)e(en)m(try)h(to)g Fk(string)p Fq(.)3350 4108 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(remove_history)d Fg(\()p Ff(in)m(t)33 b(whic)m(h)p Fg(\))390 4218 y Fq(Remo)m(v)m(e)47 b(history)f(en)m(try)f (at)i(o\013set)f Fk(whic)m(h)f Fq(from)g(the)h(history)-8 b(.)86 b(The)45 b(remo)m(v)m(ed)i(elemen)m(t)g(is)390 4328 y(returned)29 b(so)i(y)m(ou)g(can)f(free)h(the)f(line,)h(data,)h (and)d(con)m(taining)j(structure.)3350 4505 y([F)-8 b(unction])-3599 b Fh(histdata_t)55 b(free_history_entry)c Fg(\()p Ff(HIST)p 1992 4505 V 44 w(ENTR)-8 b(Y)33 b(*histen)m(t)p Fg(\))390 4615 y Fq(F)-8 b(ree)29 b(the)f(history)g(en)m(try)g Fk(histen)m(t)j Fq(and)c(an)m(y)i(history)e(library)h(priv)-5 b(ate)28 b(data)h(asso)s(ciated)g(with)f(it.)390 4724 y(Returns)h(the)i(application-sp)s(eci\014c)h(data)f(so)g(the)f(caller) i(can)e(disp)s(ose)g(of)h(it.)3350 4902 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(replace_history_entry)f Fg(\()p Ff(in)m(t)33 b(whic)m(h,)h(const)g(c)m(har)g(*line,)565 5011 y(histdata)p 927 5011 V 44 w(t)f(data)p Fg(\))390 5121 y Fq(Mak)m(e)c(the)f(history)f(en)m(try)h(at)h(o\013set)f Fk(whic)m(h)g Fq(ha)m(v)m(e)g Fk(line)33 b Fq(and)27 b Fk(data)p Fq(.)41 b(This)27 b(returns)f(the)i(old)g(en)m(try)390 5230 y(so)37 b(the)h(caller)g(can)f(disp)s(ose)g(of)g(an)m(y)g (application-sp)s(eci\014c)i(data.)61 b(In)37 b(the)g(case)h(of)f(an)g (in)m(v)-5 b(alid)390 5340 y Fk(whic)m(h)p Fq(,)30 b(a)h Fp(NULL)e Fq(p)s(oin)m(ter)i(is)f(returned.)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(6)3350 299 y([F)-8 b(unction])-3599 b Fh(void)54 b(clear_history)49 b Fg(\()p Ff(v)m(oid)p Fg(\))390 408 y Fq(Clear)31 b(the)f(history)h (list)g(b)m(y)f(deleting)h(all)h(the)e(en)m(tries.)3350 586 y([F)-8 b(unction])-3599 b Fh(void)54 b(stifle_history)49 b Fg(\()p Ff(in)m(t)34 b(max)p Fg(\))390 695 y Fq(Sti\015e)c(the)h (history)f(list,)h(remem)m(b)s(ering)f(only)h(the)f(last)i Fk(max)k Fq(en)m(tries.)3350 872 y([F)-8 b(unction])-3599 b Fh(int)53 b(unstifle_history)e Fg(\()p Ff(v)m(oid)p Fg(\))390 982 y Fq(Stop)27 b(sti\015ing)h(the)f(history)-8 b(.)40 b(This)27 b(returns)f(the)h(previously-set)h(maxim)m(um)f(n)m (um)m(b)s(er)f(of)i(history)390 1091 y(en)m(tries)g(\(as)f(set)g(b)m(y) g Fp(stifle_history\(\))p Fq(\).)35 b(The)27 b(v)-5 b(alue)27 b(is)g(p)s(ositiv)m(e)g(if)g(the)g(history)g(w)m(as)g(sti\015ed,)390 1201 y(negativ)m(e)33 b(if)d(it)h(w)m(asn't.)3350 1378 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_is_stifled)e Fg(\()p Ff(v)m(oid)p Fg(\))390 1488 y Fq(Returns)29 b(non-zero)i(if)g (the)f(history)h(is)f(sti\015ed,)g(zero)i(if)e(it)h(is)f(not.)150 1682 y Fj(2.3.3)63 b(Information)42 b(Ab)s(out)f(the)g(History)g(List) 150 1829 y Fq(These)30 b(functions)g(return)f(information)i(ab)s(out)f (the)h(en)m(tire)g(history)f(list)h(or)g(individual)e(list)i(en)m (tries.)3350 2006 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(**)e(history_list)c Fg(\()p Ff(v)m(oid)p Fg(\))390 2116 y Fq(Return)30 b(a)h Fp(NULL)e Fq(terminated)i(arra)m(y)g(of)f Fp(HIST_ENTRY)e(*)i Fq(whic)m(h)g(is)h(the)g(curren)m(t)f(input)f (history)-8 b(.)390 2225 y(Elemen)m(t)31 b(0)g(of)g(this)f(list)h(is)f (the)h(b)s(eginning)f(of)g(time.)42 b(If)29 b(there)i(is)f(no)h (history)-8 b(,)31 b(return)e Fp(NULL)p Fq(.)3350 2402 y([F)-8 b(unction])-3599 b Fh(int)53 b(where_history)d Fg(\()p Ff(v)m(oid)p Fg(\))390 2512 y Fq(Returns)29 b(the)i(o\013set)g (of)g(the)g(curren)m(t)f(history)g(elemen)m(t.)3350 2689 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(current_history)d Fg(\()p Ff(v)m(oid)p Fg(\))390 2798 y Fq(Return)24 b(the)h(history)g (en)m(try)g(at)h(the)f(curren)m(t)f(p)s(osition,)j(as)e(determined)f(b) m(y)h Fp(where_history\(\))p Fq(.)390 2908 y(If)30 b(there)g(is)h(no)f (en)m(try)h(there,)g(return)e(a)i Fp(NULL)e Fq(p)s(oin)m(ter.)3350 3085 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(history_get)c Fg(\()p Ff(in)m(t)33 b(o\013set)p Fg(\))390 3195 y Fq(Return)41 b(the)g(history)h(en)m(try)g(at)g(p)s(osition)g Fk(o\013set)p Fq(,)j(starting)e(from)e Fp(history_base)d Fq(\(see)k(Sec-)390 3304 y(tion)32 b(2.4)i([History)e(V)-8 b(ariables],)35 b(page)d(8\).)47 b(If)31 b(there)i(is)f(no)g(en)m(try)g(there,)h(or)f (if)g Fk(o\013set)j Fq(is)d(greater)390 3414 y(than)e(the)h(history)f (length,)h(return)e(a)i Fp(NULL)e Fq(p)s(oin)m(ter.)3350 3591 y([F)-8 b(unction])-3599 b Fh(time_t)54 b(history_get_time)c Fg(\()p Ff(HIST)p 1678 3591 30 5 v 45 w(ENTR)-8 b(Y)32 b(*en)m(try)p Fg(\))390 3700 y Fq(Return)g(the)i(time)g(stamp)f(asso)s (ciated)h(with)f(the)g(history)g(en)m(try)h Fk(en)m(try)p Fq(.)49 b(If)33 b(the)g(timestamp)h(is)390 3810 y(missing)c(or)h(in)m (v)-5 b(alid,)31 b(return)e(0.)3350 3987 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_total_bytes)e Fg(\()p Ff(v)m(oid)p Fg(\))390 4097 y Fq(Return)27 b(the)h(n)m(um)m(b)s(er)e(of)i(b)m(ytes)g (that)g(the)g(primary)e(history)i(en)m(tries)g(are)g(using.)39 b(This)27 b(function)390 4206 y(returns)i(the)i(sum)e(of)i(the)f (lengths)h(of)f(all)i(the)e(lines)h(in)f(the)g(history)-8 b(.)150 4401 y Fj(2.3.4)63 b(Mo)m(ving)41 b(Around)h(the)f(History)g (List)150 4548 y Fq(These)30 b(functions)g(allo)m(w)i(the)e(curren)m(t) h(index)f(in)m(to)h(the)f(history)h(list)g(to)g(b)s(e)f(set)h(or)f(c)m (hanged.)3350 4725 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_set_pos)d Fg(\()p Ff(in)m(t)34 b(p)s(os)p Fg(\))390 4834 y Fq(Set)j(the)g(curren)m(t)f(history)g(o\013set)i(to)f Fk(p)s(os)p Fq(,)h(an)f(absolute)g(index)f(in)m(to)i(the)e(list.)60 b(Returns)36 b(1)h(on)390 4944 y(success,)31 b(0)g(if)f Fk(p)s(os)j Fq(is)e(less)f(than)h(zero)g(or)f(greater)i(than)e(the)g(n) m(um)m(b)s(er)f(of)i(history)f(en)m(tries.)3350 5121 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(previous_history)d Fg(\()p Ff(v)m(oid)p Fg(\))390 5230 y Fq(Bac)m(k)30 b(up)e(the)h (curren)m(t)g(history)f(o\013set)i(to)g(the)f(previous)f(history)h(en)m (try)-8 b(,)30 b(and)e(return)g(a)h(p)s(oin)m(ter)390 5340 y(to)i(that)g(en)m(try)-8 b(.)41 b(If)30 b(there)h(is)f(no)h (previous)f(en)m(try)-8 b(,)31 b(return)e(a)i Fp(NULL)e Fq(p)s(oin)m(ter.)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(7)3350 299 y([F)-8 b(unction])-3599 b Fh(HIST_ENTRY)55 b(*)e(next_history)c Fg(\()p Ff(v)m(oid)p Fg(\))390 408 y Fq(If)20 b(the)h(curren)m(t)f (history)h(o\013set)g(refers)g(to)g(a)g(v)-5 b(alid)21 b(history)f(en)m(try)-8 b(,)24 b(incremen)m(t)d(the)g(curren)m(t)f (history)390 518 y(o\013set.)41 b(If)27 b(the)g(p)s(ossibly-incremen)m (ted)g(history)h(o\013set)g(refers)f(to)h(a)f(v)-5 b(alid)28 b(history)f(en)m(try)-8 b(,)29 b(return)390 628 y(a)i(p)s(oin)m(ter)f (to)h(that)g(en)m(try;)g(otherwise,)g(return)e(a)i Fp(BNULL)e Fq(p)s(oin)m(ter.)150 823 y Fj(2.3.5)63 b(Searc)m(hing)40 b(the)h(History)h(List)150 970 y Fq(These)36 b(functions)g(allo)m(w)i (searc)m(hing)f(of)f(the)h(history)f(list)h(for)f(en)m(tries)h(con)m (taining)h(a)f(sp)s(eci\014c)f(string.)150 1079 y(Searc)m(hing)28 b(ma)m(y)g(b)s(e)f(p)s(erformed)f(b)s(oth)h(forw)m(ard)f(and)h(bac)m (kw)m(ard)h(from)f(the)h(curren)m(t)f(history)h(p)s(osition.)150 1189 y(The)j(searc)m(h)h(ma)m(y)g(b)s(e)e Fk(anc)m(hored)p Fq(,)i(meaning)g(that)g(the)f(string)h(m)m(ust)f(matc)m(h)h(at)g(the)g (b)s(eginning)e(of)i(the)150 1299 y(history)e(en)m(try)-8 b(.)3350 1477 y([F)g(unction])-3599 b Fh(int)53 b(history_search)d Fg(\()p Ff(const)34 b(c)m(har)g(*string,)e(in)m(t)i(direction)p Fg(\))390 1586 y Fq(Searc)m(h)29 b(the)g(history)g(for)g Fk(string)p Fq(,)g(starting)h(at)f(the)g(curren)m(t)g(history)g (o\013set.)41 b(If)28 b Fk(direction)i Fq(is)f(less)390 1696 y(than)40 b(0,)j(then)c(the)h(searc)m(h)h(is)f(through)f(previous) h(en)m(tries,)j(otherwise)d(through)g(subsequen)m(t)390 1806 y(en)m(tries.)i(If)30 b Fk(string)38 b Fq(is)30 b(found,)g(then)g(the)g(curren)m(t)h(history)f(index)g(is)g(set)h(to)h (that)f(history)f(en)m(try)-8 b(,)390 1915 y(and)33 b(the)g(v)-5 b(alue)34 b(returned)e(is)i(the)g(o\013set)g(in)f(the)h(line)f(of)h (the)g(en)m(try)f(where)g Fk(string)41 b Fq(w)m(as)34 b(found.)390 2025 y(Otherwise,)c(nothing)h(is)f(c)m(hanged,)h(and)f(a)h (-1)g(is)f(returned.)3350 2203 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_search_prefix)f Fg(\()p Ff(const)34 b(c)m(har)g(*string,)f(in)m(t)g(direction)p Fg(\))390 2312 y Fq(Searc)m(h)41 b(the)g(history)f(for)g Fk(string)p Fq(,)k(starting)d(at)g(the)g(curren)m(t)f(history)h(o\013set.)72 b(The)40 b(searc)m(h)h(is)390 2422 y(anc)m(hored:)f(matc)m(hing)31 b(lines)f(m)m(ust)f(b)s(egin)g(with)g Fk(string)p Fq(.)40 b(If)29 b Fk(direction)h Fq(is)g(less)f(than)g(0,)i(then)e(the)390 2532 y(searc)m(h)j(is)f(through)g(previous)g(en)m(tries,)h(otherwise)g (through)e(subsequen)m(t)h(en)m(tries.)44 b(If)31 b Fk(string)39 b Fq(is)390 2641 y(found,)33 b(then)f(the)h(curren)m(t)g(history)g (index)g(is)g(set)g(to)h(that)g(en)m(try)-8 b(,)34 b(and)f(the)g (return)f(v)-5 b(alue)33 b(is)g(0.)390 2751 y(Otherwise,)d(nothing)h (is)f(c)m(hanged,)h(and)f(a)h(-1)g(is)f(returned.)3350 2929 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_search_pos)e Fg(\()p Ff(const)34 b(c)m(har)g(*string,)f(in)m(t)g(direction,)g(in)m (t)g(p)s(os)p Fg(\))390 3039 y Fq(Searc)m(h)h(for)g Fk(string)42 b Fq(in)34 b(the)h(history)f(list,)i(starting)f(at)g Fk(p)s(os)p Fq(,)g(an)f(absolute)h(index)e(in)m(to)j(the)e(list.)390 3148 y(If)i Fk(direction)g Fq(is)g(negativ)m(e,)k(the)c(searc)m(h)h (pro)s(ceeds)f(bac)m(kw)m(ard)g(from)g Fk(p)s(os)p Fq(,)h(otherwise)f (forw)m(ard.)390 3258 y(Returns)43 b(the)h(absolute)h(index)f(of)g(the) g(history)g(elemen)m(t)h(where)f Fk(string)52 b Fq(w)m(as)44 b(found,)i(or)e(-1)390 3367 y(otherwise.)150 3563 y Fj(2.3.6)63 b(Managing)41 b(the)g(History)h(File)150 3709 y Fq(The)26 b(History)h(library)f(can)h(read)g(the)f(history)h(from)f(and)g(write)h (it)g(to)g(a)g(\014le.)40 b(This)26 b(section)h(do)s(cumen)m(ts)150 3819 y(the)k(functions)e(for)i(managing)g(a)g(history)f(\014le.)3350 3997 y([F)-8 b(unction])-3599 b Fh(int)53 b(read_history)c Fg(\()p Ff(const)34 b(c)m(har)g(*\014lename)p Fg(\))390 4107 y Fq(Add)29 b(the)h(con)m(ten)m(ts)h(of)f Fk(\014lename)k Fq(to)d(the)f(history)f(list,)i(a)f(line)g(at)g(a)g(time.)41 b(If)29 b Fk(\014lename)35 b Fq(is)30 b Fp(NULL)p Fq(,)390 4216 y(then)g(read)g(from)g Fp(~/.history)p Fq(.)38 b(Returns)30 b(0)g(if)h(successful,)f(or)g Fp(errno)f Fq(if)i(not.)3350 4395 y([F)-8 b(unction])-3599 b Fh(int)53 b(read_history_range)e Fg(\()p Ff(const)34 b(c)m(har)g(*\014lename,)g(in)m(t)f(from,)g(in)m(t) g(to)p Fg(\))390 4504 y Fq(Read)28 b(a)g(range)h(of)f(lines)g(from)f Fk(\014lename)p Fq(,)i(adding)e(them)h(to)h(the)f(history)g(list.)40 b(Start)28 b(reading)g(at)390 4614 y(line)f Fk(from)e Fq(and)h(end)f(at)i Fk(to)p Fq(.)41 b(If)25 b Fk(from)h Fq(is)g(zero,)i(start)f(at)g(the)f(b)s(eginning.)39 b(If)26 b Fk(to)31 b Fq(is)c(less)f(than)g Fk(from)p Fq(,)390 4723 y(then)33 b(read)g(un)m(til)g(the)g(end)g(of)g(the)g(\014le.)49 b(If)33 b Fk(\014lename)38 b Fq(is)33 b Fp(NULL)p Fq(,)g(then)g(read)g (from)f Fp(~/.history)p Fq(.)390 4833 y(Returns)d(0)i(if)g(successful,) f(or)g Fp(errno)f Fq(if)i(not.)3350 5011 y([F)-8 b(unction])-3599 b Fh(int)53 b(write_history)d Fg(\()p Ff(const)34 b(c)m(har)g (*\014lename)p Fg(\))390 5121 y Fq(W)-8 b(rite)36 b(the)e(curren)m(t)h (history)f(to)h Fk(\014lename)p Fq(,)h(o)m(v)m(erwriting)g Fk(\014lename)k Fq(if)34 b(necessary)-8 b(.)54 b(If)34 b Fk(\014lename)390 5230 y Fq(is)27 b Fp(NULL)p Fq(,)g(then)g(write)g (the)h(history)f(list)g(to)h Fp(~/.history)p Fq(.)37 b(Returns)26 b(0)i(on)f(success,)h(or)f Fp(errno)f Fq(on)390 5340 y(a)31 b(read)f(or)g(write)h(error.)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(8)3350 299 y([F)-8 b(unction])-3599 b Fh(int)53 b(append_history)d Fg(\()p Ff(in)m(t)33 b(nelemen)m(ts,)i(const)f(c)m(har)f(*\014lename)p Fg(\))390 408 y Fq(App)s(end)g(the)i(last)g Fk(nelemen)m(ts)k Fq(of)c(the)g(history)f(list)i(to)f Fk(\014lename)p Fq(.)54 b(If)34 b Fk(\014lename)40 b Fq(is)34 b Fp(NULL)p Fq(,)h(then)390 518 y(app)s(end)29 b(to)i Fp(~/.history)p Fq(.)38 b(Returns)29 b(0)i(on)f(success,)h(or)f Fp(errno)f Fq(on)i(a)f(read)h(or)f(write)h (error.)3350 694 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_truncate_file)f Fg(\()p Ff(const)34 b(c)m(har)g(*\014lename,) f(in)m(t)h(nlines)p Fg(\))390 804 y Fq(T)-8 b(runcate)39 b(the)f(history)h(\014le)f Fk(\014lename)p Fq(,)j(lea)m(ving)f(only)f (the)g(last)g Fk(nlines)j Fq(lines.)65 b(If)38 b Fk(\014lename)44 b Fq(is)390 914 y Fp(NULL)p Fq(,)29 b(then)i Fp(~/.history)c Fq(is)k(truncated.)40 b(Returns)30 b(0)g(on)h(success,)g(or)f Fp(errno)f Fq(on)h(failure.)150 1107 y Fj(2.3.7)63 b(History)41 b(Expansion)150 1254 y Fq(These)30 b(functions)g(implemen)m(t)h (history)f(expansion.)3350 1431 y([F)-8 b(unction])-3599 b Fh(int)53 b(history_expand)d Fg(\()p Ff(c)m(har)34 b(*string,)f(c)m(har)h(**output)p Fg(\))390 1540 y Fq(Expand)f Fk(string)p Fq(,)j(placing)f(the)f(result)h(in)m(to)g Fk(output)p Fq(,)g(a)g(p)s(oin)m(ter)f(to)h(a)g(string)f(\(see)i (Section)f(1.1)390 1650 y([History)c(In)m(teraction],)i(page)e(1\).)41 b(Returns:)390 1804 y Fp(0)432 b Fq(If)37 b(no)g(expansions)g(to)s(ok)i (place)f(\(or,)i(if)d(the)h(only)f(c)m(hange)i(in)e(the)g(text)i(w)m (as)f(the)870 1913 y(remo)m(v)-5 b(al)31 b(of)g(escap)s(e)f(c)m (haracters)i(preceding)e(the)g(history)g(expansion)g(c)m(haracter\);) 390 2067 y Fp(1)432 b Fq(if)30 b(expansions)g(did)g(tak)m(e)i(place;) 390 2222 y Fp(-1)384 b Fq(if)30 b(there)h(w)m(as)g(an)f(error)g(in)g (expansion;)390 2376 y Fp(2)432 b Fq(if)28 b(the)f(returned)g(line)g (should)g(b)s(e)g(displa)m(y)m(ed,)i(but)e(not)h(executed,)h(as)f(with) f(the)h Fp(:p)870 2485 y Fq(mo)s(di\014er)h(\(see)j(Section)f(1.1.3)h ([Mo)s(di\014ers],)e(page)i(2\).)390 2639 y(If)e(an)g(error)g(o)s (ccurred)g(in)g(expansion,)g(then)g Fk(output)i Fq(con)m(tains)g(a)f (descriptiv)m(e)g(error)f(message.)3350 2815 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(get_history_event)f Fg(\()p Ff(const)34 b(c)m(har)g(*string,)e(in)m(t)h(*cindex,)h(in)m(t) 565 2925 y(qc)m(har)p Fg(\))390 3035 y Fq(Returns)45 b(the)g(text)i(of)e(the)h(history)f(ev)m(en)m(t)i(b)s(eginning)e(at)h Fk(string)53 b Fp(+)45 b Fk(*cindex)p Fq(.)87 b Fk(*cindex)52 b Fq(is)390 3144 y(mo)s(di\014ed)28 b(to)i(p)s(oin)m(t)f(to)h(after)g (the)g(ev)m(en)m(t)h(sp)s(eci\014er.)39 b(A)m(t)31 b(function)e(en)m (try)-8 b(,)30 b Fk(cindex)36 b Fq(p)s(oin)m(ts)29 b(to)h(the)390 3254 y(index)35 b(in)m(to)i Fk(string)44 b Fq(where)35 b(the)h(history)g(ev)m(en)m(t)h(sp)s(eci\014cation)g(b)s(egins.)57 b Fk(qc)m(har)42 b Fq(is)36 b(a)g(c)m(haracter)390 3363 y(that)27 b(is)g(allo)m(w)m(ed)i(to)f(end)e(the)h(ev)m(en)m(t)h(sp)s (eci\014cation)g(in)f(addition)g(to)g(the)g(\\normal")h(terminating)390 3473 y(c)m(haracters.)3350 3649 y([F)-8 b(unction])-3599 b Fh(char)54 b(**)e(history_tokenize)f Fg(\()p Ff(const)34 b(c)m(har)g(*string)p Fg(\))390 3759 y Fq(Return)c(an)h(arra)m(y)g(of)g (tok)m(ens)h(parsed)e(out)h(of)g Fk(string)p Fq(,)h(m)m(uc)m(h)e(as)i (the)f(shell)g(migh)m(t.)43 b(The)30 b(tok)m(ens)390 3868 y(are)h(split)g(on)f(the)h(c)m(haracters)h(in)e(the)h Fk(history)p 2006 3868 28 4 v 40 w(w)m(ord)p 2241 3868 V 39 w(delimiters)k Fq(v)-5 b(ariable,)32 b(and)e(shell)g(quoting)390 3978 y(con)m(v)m(en)m(tions)i(are)f(ob)s(ey)m(ed.)3350 4154 y([F)-8 b(unction])-3599 b Fh(char)54 b(*)e(history_arg_extract)f Fg(\()p Ff(in)m(t)34 b(\014rst,)f(in)m(t)g(last,)g(const)h(c)m(har)f (*string)p Fg(\))390 4264 y Fq(Extract)41 b(a)g(string)f(segmen)m(t)i (consisting)f(of)f(the)h Fk(\014rst)g Fq(through)f Fk(last)j Fq(argumen)m(ts)e(presen)m(t)f(in)390 4373 y Fk(string)p Fq(.)h(Argumen)m(ts)30 b(are)h(split)f(using)g Fp(history_tokenize)p Fq(.)150 4609 y Fo(2.4)68 b(History)46 b(V)-11 b(ariables)150 4768 y Fq(This)26 b(section)i(describ)s(es)e(the)h(externally-visible)i (v)-5 b(ariables)28 b(exp)s(orted)e(b)m(y)h(the)g Fl(gnu)g Fq(History)g(Library)-8 b(.)3371 4945 y([V)g(ariable])-3598 b Fh(int)53 b(history_base)390 5054 y Fq(The)30 b(logical)j(o\013set)e (of)g(the)f(\014rst)g(en)m(try)g(in)h(the)f(history)g(list.)3371 5230 y([V)-8 b(ariable])-3598 b Fh(int)53 b(history_length)390 5340 y Fq(The)30 b(n)m(um)m(b)s(er)f(of)h(en)m(tries)i(curren)m(tly)e (stored)h(in)f(the)g(history)g(list.)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1780 b(9)3371 299 y([V)-8 b(ariable])-3598 b Fh(int)53 b(history_max_entries)390 408 y Fq(The)45 b(maxim)m(um)h(n)m(um)m(b)s(er)f(of)h(history)g(en)m (tries.)88 b(This)45 b(m)m(ust)h(b)s(e)f(c)m(hanged)i(using)e Fp(stifle_)390 518 y(history\(\))p Fq(.)3371 742 y([V)-8 b(ariable])-3598 b Fh(int)53 b(history_write_timesta)q(mps)390 852 y Fq(If)44 b(non-zero,)49 b(timestamps)c(are)g(written)g(to)g(the)g (history)f(\014le,)49 b(so)c(they)f(can)h(b)s(e)f(preserv)m(ed)390 962 y(b)s(et)m(w)m(een)31 b(sessions.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(0,)h(meaning)g(that)g(timestamps)g(are)g(not)f(sa)m(v) m(ed.)390 1116 y(The)41 b(curren)m(t)g(timestamp)h(format)g(uses)f(the) h(v)-5 b(alue)42 b(of)f Fk(history)p 2697 1116 28 4 v 41 w(commen)m(t)p 3098 1116 V 41 w(c)m(har)48 b Fq(to)42 b(delimit)390 1226 y(timestamp)h(en)m(tries)g(in)f(the)g(history)h (\014le.)76 b(If)42 b(that)h(v)-5 b(ariable)43 b(do)s(es)f(not)g(ha)m (v)m(e)i(a)f(v)-5 b(alue)42 b(\(the)390 1335 y(default\),)31 b(timestamps)g(will)g(not)f(b)s(e)g(written.)3371 1560 y([V)-8 b(ariable])-3598 b Fh(char)54 b(history_expansion_char)390 1669 y Fq(The)35 b(c)m(haracter)i(that)e(in)m(tro)s(duces)g(a)h (history)f(ev)m(en)m(t.)57 b(The)34 b(default)i(is)f(`)p Fp(!)p Fq('.)56 b(Setting)35 b(this)h(to)g(0)390 1779 y(inhibits)30 b(history)g(expansion.)3371 2003 y([V)-8 b(ariable])-3598 b Fh(char)54 b(history_subst_char)390 2113 y Fq(The)40 b(c)m(haracter)i(that)g(in)m(v)m(ok)m(es)g(w)m(ord)f (substitution)f(if)h(found)e(at)i(the)g(start)g(of)g(a)g(line.)72 b(The)390 2222 y(default)31 b(is)f(`)p Fp(^)p Fq('.)3371 2447 y([V)-8 b(ariable])-3598 b Fh(char)54 b(history_comment_char)390 2556 y Fq(During)37 b(tok)m(enization,)43 b(if)38 b(this)f(c)m (haracter)j(is)e(seen)f(as)h(the)g(\014rst)f(c)m(haracter)j(of)e(a)g(w) m(ord,)h(then)390 2666 y(it)44 b(and)e(all)j(subsequen)m(t)d(c)m (haracters)j(up)d(to)i(a)g(newline)f(are)h(ignored,)i(suppressing)c (history)390 2776 y(expansion)30 b(for)g(the)h(remainder)f(of)g(the)h (line.)41 b(This)29 b(is)i(disabled)f(b)m(y)g(default.)3371 3000 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e (history_word_delimiter)q(s)390 3110 y Fq(The)27 b(c)m(haracters)i (that)f(separate)h(tok)m(ens)f(for)f Fp(history_tokenize\(\))p Fq(.)35 b(The)27 b(default)h(v)-5 b(alue)28 b(is)f Fp(")390 3219 y(\\t\\n\(\)<>;&|")p Fq(.)3371 3444 y([V)-8 b(ariable])-3598 b Fh(char)54 b(*)e(history_search_delimit)q(er_)q(cha)q(rs)390 3553 y Fq(The)26 b(list)g(of)g(additional)h(c)m(haracters)h(whic)m(h)e (can)g(delimit)h(a)f(history)g(searc)m(h)h(string,)g(in)f(addition)390 3663 y(to)31 b(space,)g(T)-8 b(AB,)32 b(`)p Fp(:)p Fq(')e(and)g(`)p Fp(?)p Fq(')g(in)g(the)h(case)g(of)g(a)g(substring)e(searc)m(h.)41 b(The)30 b(default)h(is)f(empt)m(y)-8 b(.)3371 3887 y([V)g(ariable]) -3598 b Fh(char)54 b(*)e(history_no_expand_char)q(s)390 3997 y Fq(The)29 b(list)i(of)f(c)m(haracters)h(whic)m(h)e(inhibit)h (history)g(expansion)f(if)h(found)e(immediately)j(follo)m(wing)390 4106 y Fk(history)p 672 4106 V 40 w(expansion)p 1104 4106 V 40 w(c)m(har)p Fq(.)41 b(The)30 b(default)g(is)h(space,)g(tab,)g (newline,)f(carriage)i(return,)e(and)g(`)p Fp(=)p Fq('.)3371 4331 y([V)-8 b(ariable])-3598 b Fh(int)53 b(history_quotes_inhibi)q (t_ex)q(pan)q(sio)q(n)390 4440 y Fq(If)27 b(non-zero,)i(double-quoted)f (w)m(ords)g(are)g(not)g(scanned)f(for)h(the)g(history)g(expansion)f(c)m (haracter)390 4550 y(or)j(the)h(history)f(commen)m(t)i(c)m(haracter.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g(0.)3371 4774 y([V)-8 b(ariable])-3598 b Fh(rl_linebuf_func_t)57 b(*)c (history_inhibit_expans)q(ion)q(_fu)q(ncti)q(on)390 4884 y Fq(This)32 b(should)h(b)s(e)f(set)i(to)g(the)g(address)e(of)i(a)f (function)g(that)h(tak)m(es)h(t)m(w)m(o)g(argumen)m(ts:)46 b(a)34 b Fp(char)29 b(*)390 4994 y Fq(\()p Fk(string)8 b Fq(\))27 b(and)f(an)g Fp(int)g Fq(index)g(in)m(to)i(that)f(string)f (\()p Fk(i)5 b Fq(\).)40 b(It)27 b(should)f(return)f(a)i(non-zero)g(v) -5 b(alue)27 b(if)g(the)390 5103 y(history)i(expansion)g(starting)h(at) g Fk(string[i])j Fq(should)28 b(not)i(b)s(e)e(p)s(erformed;)h(zero)h (if)f(the)g(expansion)390 5213 y(should)i(b)s(e)g(done.)45 b(It)32 b(is)g(in)m(tended)g(for)g(use)g(b)m(y)f(applications)i(lik)m (e)h(Bash)e(that)g(use)g(the)g(history)390 5322 y(expansion)e(c)m (haracter)i(for)e(additional)i(purp)s(oses.)39 b(By)30 b(default,)h(this)f(v)-5 b(ariable)31 b(is)g(set)g(to)g Fp(NULL)p Fq(.)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1734 b(10)150 299 y Fo(2.5)68 b(History)46 b(Programming)g(Example)150 458 y Fq(The)30 b(follo)m(wing)i(program)e(demonstrates)h(simple)f(use) g(of)h(the)f Fl(gnu)g Fq(History)h(Library)-8 b(.)390 633 y Fe(#include)41 b()390 720 y(#include)g ()390 894 y(main)f(\(argc,)h(argv\))586 981 y(int)f(argc;)586 1068 y(char)g(**argv;)390 1156 y({)468 1243 y(char)h(line[1024],)g(*t;)468 1330 y(int)f(len,)g(done)h (=)e(0;)468 1504 y(line[0])i(=)f(0;)468 1679 y(using_history)j(\(\);) 468 1766 y(while)e(\(!done\))547 1853 y({)625 1940 y(printf)g (\("history$)g("\);)625 2027 y(fflush)g(\(stdout\);)625 2115 y(t)f(=)f(fgets)i(\(line,)f(sizeof)h(\(line\))f(-)g(1,)g(stdin\);) 625 2202 y(if)g(\(t)g(&&)f(*t\))704 2289 y({)782 2376 y(len)h(=)g(strlen)g(\(t\);)782 2463 y(if)g(\(t[len)h(-)e(1])h(==)f ('\\n'\))861 2550 y(t[len)h(-)g(1])f(=)h('\\0';)704 2638 y(})625 2812 y(if)g(\(!t\))704 2899 y(strcpy)g(\(line,)h("quit"\);)625 3073 y(if)f(\(line[0]\))704 3161 y({)782 3248 y(char)g(*expansion;)782 3335 y(int)g(result;)782 3509 y(result)h(=)e(history_expand)k(\(line,)d (&expansion\);)782 3597 y(if)g(\(result\))861 3684 y(fprintf)h (\(stderr,)g("\045s\\n",)f(expansion\);)782 3858 y(if)g(\(result)h(<)e (0)h(||)f(result)i(==)f(2\))861 3945 y({)939 4032 y(free)g (\(expansion\);)939 4120 y(continue;)861 4207 y(})782 4381 y(add_history)i(\(expansion\);)782 4468 y(strncpy)f(\(line,)g (expansion,)g(sizeof)g(\(line\))f(-)g(1\);)782 4555 y(free)g (\(expansion\);)704 4643 y(})625 4817 y(if)g(\(strcmp)h(\(line,)f ("quit"\))h(==)f(0\))704 4904 y(done)g(=)f(1;)625 4991 y(else)h(if)g(\(strcmp)h(\(line,)g("save"\))f(==)g(0\))704 5078 y(write_history)i(\("history_file"\);)625 5166 y(else)e(if)g (\(strcmp)h(\(line,)g("read"\))f(==)g(0\))704 5253 y(read_history)i (\("history_file"\);)625 5340 y(else)e(if)g(\(strcmp)h(\(line,)g ("list"\))f(==)g(0\))p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fq(Chapter)30 b(2:)41 b(Programming)30 b(with)g(GNU)h(History)1734 b(11)704 299 y Fe({)782 386 y(register)41 b(HIST_ENTRY)h(**the_list;)782 473 y(register)f(int)f(i;)782 648 y(the_list)h(=)f(history_list)i (\(\);)782 735 y(if)e(\(the_list\))861 822 y(for)g(\(i)f(=)h(0;)f (the_list[i];)j(i++\))939 909 y(printf)f(\("\045d:)f(\045s\\n",)h(i)e (+)h(history_base,)i(the_list[i]->line\);)704 996 y(})625 1083 y(else)e(if)g(\(strncmp)h(\(line,)g("delete",)g(6\))f(==)f(0\))704 1171 y({)782 1258 y(int)h(which;)782 1345 y(if)g(\(\(sscanf)h(\(line)f (+)g(6,)g("\045d",)g(&which\)\))h(==)f(1\))861 1432 y({)939 1519 y(HIST_ENTRY)i(*entry)e(=)g(remove_history)i(\(which\);)939 1606 y(if)e(\(!entry\))1018 1694 y(fprintf)g(\(stderr,)i("No)d(such)i (entry)f(\045d\\n",)h(which\);)939 1781 y(else)1018 1868 y({)1096 1955 y(free)f(\(entry->line\);)1096 2042 y(free)g(\(entry\);) 1018 2130 y(})861 2217 y(})782 2304 y(else)861 2391 y({)939 2478 y(fprintf)h(\(stderr,)g("non-numeric)h(arg)e(given)g(to)g (`delete'\\n"\);)861 2565 y(})704 2653 y(})547 2740 y(})390 2827 y(})p eop end %%Page: 12 15 TeXDict begin 12 14 bop 3659 -116 a Fq(12)150 299 y Fm(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fq(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fn(\015)e Fq(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fp(http://fsf.org/)390 964 y Fq(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fk(free)36 b Fq(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(13)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fl(asci)r(i)g Fq(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fd(SGML)f Fq(or)f Fd(XML)g Fq(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fd(DTD)p Fq(,)h(and)c (standard-conforming)g(simple)h Fd(HTML)p Fq(,)i(P)m(ostScript)e(or)f Fd(PDF)h Fq(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fd(PNG)p Fq(,)i Fd(X)n(CF)330 2724 y Fq(and)e Fd(JPG)p Fq(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fd(SGML)54 b Fq(or)f Fd(XML)h Fq(for)g(whic)m(h)f(the)h Fd(DTD)g Fq(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fd(HTML)p Fq(,)330 3052 y(P)m(ostScript)31 b(or)f Fd(PDF)h Fq(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(14)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(15)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(16)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(17)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(18)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fp(http://www.gnu.org/copy)o(left)o(/)p Fq(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fq(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(19)150 299 y Fo(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fq(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fe(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fe(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Fq(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fe(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fe(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fc(list)p Fe(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fc(list)p Fe(.)275 1868 y Fq(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fq(App)s(endix)29 b(B:)i(Concept)f(Index)2391 b(20)150 100 y Fm(App)t(endix)52 b(B)81 b(Concept)51 b(Index)146 434 y Fo(A)150 550 y Fb(anc)n(hored)26 b(searc)n(h)12 b Fa(:)i(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)g(:)h(:)f(:)27 b Fb(7)146 782 y Fo(E)150 898 y Fb(ev)n(en)n(t)e(designators)7 b Fa(:)14 b(:)f(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)22 b Fb(1)146 1140 y Fo(H)150 1256 y Fb(history)k(ev)n(en)n(ts)12 b Fa(:)h(:)g(:)g(:)g(:)g(:)g(:)g(:) g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)27 b Fb(1)150 1344 y(history)f(expansion)18 b Fa(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f (:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)g(:)g(:)34 b Fb(1)150 1431 y(History)26 b(Searc)n(hing)16 b Fa(:)d(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)31 b Fb(7)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fq(App)s(endix)29 b(C:)h(F)-8 b(unction)31 b(and)f(V)-8 b(ariable)32 b(Index)1832 b(21)150 100 y Fm(App)t(endix)52 b(C)81 b(F)-13 b(unction)52 b(and)h(V)-13 b(ariable)53 b(Index)150 400 y Fe(history_base)10 b Fa(:)16 b(:)d(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:) g(:)25 b Fb(8)150 487 y Fe(history_comment_char)7 b Fa(:)17 b(:)c(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)22 b Fb(9)150 574 y Fe (history_expansion_char)i Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)34 b Fb(9)150 661 y Fe(history_inhibit_expansion_fun)q(ctio)q(n)28 b Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)37 b Fb(9)150 749 y Fe(history_length)25 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:) f(:)g(:)g(:)g(:)g(:)37 b Fb(8)150 836 y Fe(history_max_entries)9 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)24 b Fb(9)150 923 y Fe(history_no_expand_chars)16 b Fa(:)i(:)c(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(9)150 1010 y Fe(history_quotes_inhibit_expans)q(ion)11 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)25 b Fb(9)150 1097 y Fe(history_search_delimiter_char)q(s)15 b Fa(:)k(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)30 b Fb(9)150 1184 y Fe(history_subst_char)12 b Fa(:)17 b(:)c(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)27 b Fb(9)150 1272 y Fe(history_word_delimiters)16 b Fa(:)i(:)c(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)31 b Fb(9)150 1359 y Fe(history_write_timestamps)13 b Fa(:)19 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)g(:)h(:)28 b Fb(9)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-7.0/doc/rluserman.ps000664 000436 000024 00001524174 12764101651 016370 0ustar00chetstaff000000 000000 %!PS-Adobe-2.0 %%Creator: dvips(k) 5.996 Copyright 2016 Radical Eye Software %%Title: rluserman.dvi %%CreationDate: Wed Sep 7 17:16:25 2016 %%Pages: 34 %%PageOrder: Ascend %%BoundingBox: 0 0 612 792 %%DocumentFonts: CMBX12 CMR10 CMTT10 CMSY10 CMMI12 CMMI10 CMCSC10 %%+ CMSLTT10 CMTI10 CMSL10 CMTT9 %%DocumentPaperSizes: Letter %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -D 600 -t letter -o rluserman.ps rluserman.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2016.09.07:1716 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMSLTT10 %!PS-AdobeFont-1.0: CMSLTT10 003.002 %%Title: CMSLTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSLTT10.) readonly def /FullName (CMSLTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 45 /hyphen put dup 48 /zero put dup 49 /one put dup 67 /C put dup 68 /D put dup 69 /E put dup 72 /H put dup 74 /J put dup 76 /L put dup 77 /M put dup 92 /backslash put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F36932A8A2DB BAD87DCC271657EDF942834AD01C0C35437042331634D36C594CCBD796BB1562 C5AEFD595E35264ABB2ABFEC7A2E066A7A454659804F6CD9DC64DE1112D95B55 72AE34B6153425A5D15D9F944A3DB6D580C2A01E308E2CDB032F99617A73866D F2F2FB6E8617873AC82D4E2224049BC2FEBFE49527DAD70C079B92F08DC30095 AE63E3E2FA213D52A347347371724EF08B39D7383D27131F75C2211F82C35CDF B78708DE910A5ABCA3075D985AB2E2EAEC2BB6159094F0C0C775C25AFF4F507B 20070C4FB570D5CBCF40C7DE889378A9EE7E38175ABC3D5B047D1DD925990A04 76EE4083F3CAEB8F1FF3D8FB0210C93738D68EE884FF86416A2EEF2356DB80C8 39749F31D1D3751E91D84246B56D759969A6D52832891375DC26E92B7DC756A1 A02F951C898CF665AB0C2C6D5B455FCA6D20E7F998D2523112A08E8EFE1B5DBE 940EEB362AEE4EF83237348F7F0C08B490D125BD90107A035A8F5330F0F296F3 DF4579D7B4A947CA1EC8975B1F6B7E3B077A75F2F42DE456E0D540CDFDECC95D F5B3FBB43590ED54FD98CBFD3A20C42C5B6B5ED2A5F0D4F06414757F992487C9 83CCE2B4BA91825D14090D1EFC53596F92757BE8DCCB7EFA24C3A3D52DB61312 C04533EE4424F37EE45DC6BDB79519A62454194332562388F3BF0246B40E9108 7B64FC57054131DA8A4699CF65BFBB862D05519755E207BD0C5E4FF56AC2BAEA 5D4FC6443069F6314E124BC02D210B8726D3ADF2EDB35E7CB1F92BB412C2AF7D 547A1E309A63114B38B352702F7E48B931550F79C2487152A5A5CBD19C429BF1 747D88BF1EC932CBC93F006EC34F9197CB9FD486F42A0D5D72AFBF21B9BD131A C89A979FA65013B3CDDA5D164DE3BB762BBB7A4D0DC3ABF3CF906549E2F76C17 DF8BDB44689AA9140ABCF001781B8906C2B020EB95FE36B8978FA04BEC5E4D82 B4A537520BDA62736EA2CD9B1EE4A126D7A76BE51C96AC556AE5BFF978C1598B 6CA42A76139448EA4C8AC849AA3AD204D158854FAC6D7D43BE038F022460A50C 1DC2B6932CC3DBCBC1C27390E29A474712004A5EA3E0A3E62786C2487EFA767F BCDEEAA4875ECA8A9A7C6F2FD1EB9DB79B7489FA8249D33E38599B948CBB7328 430476A7489C004F1411BA1D5FCD64D478424920EF72530F3C4CCA9EE495ECCD 125E4E2BB37BD4D4175950422517021F8EC140BC3B11BAA9E513F3DAB63CD245 27A0A6F69A964E9BFAF575B5E36556A15B2F2FF787DFCC1EE704994A52F2E726 958538808EE9BCC31BD5E126F848FFE5CDA11FD3F0377D9B814F515750374452 D7A4BEE6B14BF4C1A75B2BA8083ED62E61155F1B396D960066D0A35D7CF19A5E C7856AEA2C505E68C8A0736CC1675F740A662AA8BFFFFE507465E7ECF934DB6F 75004934154AA82EA699EABE6318E7E5B51DE3387AEBF11E41A413D986947FD8 23ACB99110C93391DA8FD87341F337F1FBDAFD306B4B08FC69EFF21A6F581420 893E94073A20778ACCDB074613F7FD68999BCA1F03A0E298CCE83D3D8C25E1DD 8C25F57C440C5580C87C67C8F391C900F6615ECBA0AA505333A0E00F229F03B8 69EF147556CCBD10694CB23EEA74CCEE50CA5E8F3DCC8225B950B51C7F0AA44B C1200E688A8A7CCB8CD763390992ECCE85F4855DA86ECFD21F57F12CEC09A5A0 0A50B388C378EEB1C4BBC2BC19ADE95C3CE8A6CD901EEAA8DC6F62BD33A18368 1B0C445FF57CAA3F690D872D42FE746D3AC94DC889F4AA191E824D66E8ADC3ED D7F7507F1DFD560D3D339C528714AEC12609448660243A1C24C8A31FEAA55E96 5512E63BFF9CB87AA8805D066E71C70DC175FA3449879A44A1A6343561CBBF33 B6465433C3C99BD06F2FB6A0CB4AE950A3F2F428AA2E5E344439E77B623E959C 27CBD22A9B092B2604EE92524DF014DAD590A4F474484C2BA41343306A620019 15B96AF752C312187FF3C1555B5142354F2E947391A96E64DFEEA65D99FCD2B6 3BC07AB8D7709033C83DE8C9E18BF1490BCCF65D3E1CCD62FC09F7DCBD0A31EF 70F21BC631CF5F4C112B64B4CA88662103C4343B55FDA36B0F78B6BE583E3134 464FA2B9C8A2C5BA01338C0A0AEA7DC2CCD0D0E7A02C835C1072830582825BCC E7F31BD6C7A20413F5D21C054CD6389DE00C846AE1B558EAFF7E85D07C73C4D9 CD9A1F33E0328C3B9340DC87FE981D655905D4E2341966C80787F35EAB88792A B2F35D91BDAE613DECD5DA192ED10FF454B0A754A14A565DCF8AC760007A333E 413B53F179AFB886747C2460AADF6FD1DC09012A2ADFFA6FE5228177535E91DE 71F9C9D82F84CA13A2F55E9EA931B1E89213EE9817DBB433A7EF0316E0624C1D 45965146A28962980436F050A1E7EB35D18BB8BF8B82F97D64C827F68374CFC0 E4DB0FFF944DDC0279F2E02108815F40E04EFC82368D19B89F357138F65EF9CA 878AC45EF423580843F481F1394D5DEE995E0DDB18E2B5E2D04A463672BFFE79 BB6D9957D3C2BA22DB79CD75DF28B99E6473FC222C6722B9C877D097BFB29C6D E5444CFD34880261E7008A372F128BE5CEE9D057486C1AD98E7AE24292D12231 CCFE1B54DB8623BF68DBECAEC105E446891BF4473765DCCA7EFDA9FE6DF8E6D4 90C70A79B1AF7AFE9AC5CBA07D0B839AAC2EA62842FEC9117959B10530C8A76E 85F59E6BF476A0660025900EFD8D714A018AB06240808CFFE5A3766818603531 AF3FA35AD28CA2C9BA31A2F42FB80BC1ECE71EFE2CD184B4FDC5F76AC2F549FF 33AC81C11411C47D4857E5E6DB9204AEA0F7545ADAEA22BE42CC3BA7EA3F8B90 C5FEC359641487D93C52D78CE25535A2A686DD4764C072FA8A56B982A3A7787A F124475DD5C2754430C7EC3527D81C272FB7AFEDC6F79E1988AF9401F2B989A8 CFE1BD96B21D817BBC93BF77B99C8E008E7CC2E34F0AAF20AE88FFC0BC6C3721 485DD1F25103245E854AB2B60226693E0AFA3EAE85CA52BD938BF31ABFEBEC6F 4079449F99B5EF0A46E77B6254D4FAAE33FF8B2AA3469F0F0DD625BC4FFD004E E6C301A8052043E22ED0FA663364CC9200ACE4CDADCFBD28B721FB43EA7A3B6B F6112C35C224543482A7564D62A4A8F15FE329BBF3934DF9345320561E88CBDA 1C0BF61D400C1539818D2BE38165B6439EA9B45CD0A686C7CF1310604309DE5B 22987BC91A8E913F6EBAF74C65E8A546D876E46A50BB9A3420D5BE001E0CB34A A143776196BF8167006A1052A54001134D539870CECFFD45B6E37D5EF5A9878D 2A2BB28710DD767C746767498AB23FBDD80706727CF0F556DF7A47A90DE30E5C A81522D5EC8C478BB58ACD1D1F0139D4C3561DB574AA8B1FBF0AB0A001FF78E3 2A646659407760996E97CE00295CDA398DC0E8374B6A13C3EB2BE4226F01E76B A932DDAFD90D0FB739B9EDFB9A2472D6424A45D1A698D70766469EBFD9957CF1 511F6BC41FB43B9517AADD5DF7997A4A8A8F3A5103BF6730B81845F20D160DC0 E5AD923D9E24AA7DC293E45FBF7422B952A91A97139B15235D29CC52C5084F01 DE89D2F11E7283A60E4688B54191DDC1159998D10215FE53FD89C87CE9D19041 1F1E73F063436E786959943B496172A1C497DC002E00B29A4F752CA28BAC5434 A98F9438064838B0D6252A05052EC8871CEF9FEF05A07B1E401E49324D463E41 6B7DEBD3B405C9DC5953B93E48162D93438237F11ABE83189F9C1FE70E1A56A4 CF539F7E9BA6B2B35BEB1586F59897F6E64340B88CA079DFDD1E987198604D2C 3EB5C8178AAEB19B8D2840F0EF36CCEC7D25080CD1E0BD2B3317603E86FFDC4B A453AE086CE8AFB093D57733AA40977E9C8D33E3C87DE2D4C0522C40AF2C01C5 2A7B86C2571F9B67AD85B35EC83224029832D2ADCE65E37748CE08A600641E03 6BFCF2F024ECDB4AC2C4AFC4987D01C8F8E74715567F7116597A4318331A35E0 7BB15E134CD721CBF49210AC06D161E7FE9146D43CB1181F464C7D3BB0BB40EA D19E1C33D6D9924AB13EE6C31428D6CDD9AEEBAE6510CDA14F23159CCD725A3E 1F97ED8DCB17A10783B8CDC9315FC86703FAB6A70DF55E0AB8B4C24862CDCF11 5F10FAA5E4E54660EA5EA05EAE168E36CA5255DAA0ADF9461176EDC9E3989A84 0D8D7EAA08F4C766E1A078C3B7D091B9E22A9247A655CE4190A0217ECAF88495 5DE38DD317E459AC61336D6E403CF8DD2ADD2946F933E1A72C18DFA96EF7C0E4 0A2D84D3414F3DB23EE3BB5049B174431F4EEA10415D25E41C2094CC2D37C669 2C46EA4568BB0BC49D1806B98607B8C12AB897E6AF402C6126D4484EB7D9CF81 B603EECFD92EE41FEBA5F38A93DD24A239BA253BE3776F2368E1664142FF2A53 5B40B694B20818A2A43226871AF1F7A5A68113CC55AABEAFEEE21E0F4E7641FE BB5403E96064650AE2703E43DF01A1594C8FE8646A44323D78E7A5A7CE2C2FAE F98F7D9A2CF888DD195FAEBFD1BBB05CE078C6003F9438205F8A3C2977C1827B 906386BD4B483966FD903432A3A9A54AB0C4E7826CBB97C6808B5B529D5E24CE 8C76A35EB073FD65944F54D1733FF75FD7F78F524F81CE0D92328FC171AC3DBF DB81784F11106137B72B473AB91F40F73B0B410547F5CF6613EEFDBF0F05092C 3688C3C208E1C9FBF51B505FA0B5F906C5B0A05277772FF9EC806702F0E346BE 83A535578789733FA68FAD54992C16F3F5F1B7560A729226FDADE4FB96AC09A6 4C5D79CB60D85AACBCC89C04068803B47CF0FAB92F4267438A2E7CF7CD5C1796 B07071D9F5A6DB95514B1B60EFE74DD9A028CBCBE850052EC2EFF81C411348E3 F1ABDF1A4CBBFD7EBECC48F89B18E159DC1CFA0606C3BECE071E4C1759BE2716 0705460FA9E022BDA1CFB2324C8B51B4E297838F07A5FE8E05FD99600F9E79D5 490C251772EA34DA6649D421A872CF78A9B55BC0FA47E056A6CA9491ED65E181 58E2A5EDC038C9BD89B3E975837FDBE2A9AD81F700BD263C25C85873E08DBCE9 7CC2FBD904038CE72A110493B7ACCA882FD48F54B4E0109B095838F30D80917E 5C81948F74E7F0D41652480CAB3B24E90570BF861EE2E3A5E1735636C7849C1D 60FDFAB5386526F7312481A5146C18321F425EC74ED0D778926854C5CA875A57 9205076C19AB866F5FD0439154484DA165A7CB69746199399E66E662EC2AAF66 501B6706BA1ACA001546B753B0785AC885A5F13BFB4F76F05AEADA1D290708A8 22A24FFEEAAAF3C70F89CB52EB655774832296C1FB440B4DC4957C7C32588435 4FA6775C4BB9070641EB6CB74857A346B38E0F441D61D27489CB0230A23AB63B 052C8453C969BA44B2B6E700D6286084AFD49A79DA416803200F715CFD9B42A8 D53BC397262BB8F94C7D0A2D83E1249563098645D0E82959B76E1B05BEB19430 4080218E58354FAE323F4CB4A3E20B21FF9FB791391956336DF8A6FB49A2DD6F A1F06C8C02464E67CDCB9013A4F8229E5A4F136A11AA204001D16C213691EBA2 2789C03C9122FF21B891569D4D26C2487401AF4C9B310CADE991ADA6D091248F 30D40520D46944AFEEE4B71D005191AD057AAF2BDCC166F084F29EBF3868C433 5552509FC469A57DE66010A0538D2CEB7692D1A54B5139D2FC7FCE96C4E1A82F 578703BE28B82622297BB08F76DB9D8E2A7C4B38C7A819372F72900506CBAD7A 4B0014B7A9DA2E9AE84B24A83E0BD86D3BD8E0F37F9F0E56D6102C0CAA768E4E 9BFCDB116780773E04554E67AFA899C9B8AE526257FBD25125EB7644E1AB35FA E9D6D716877D2A5E17130740CEFF27133D6A38BD2B2BB7BD17E04C21802EF184 0AD5C85EDFF4234DE6B89B40F7489B4CD79F54B9B8683E611E372768C55FD93E 3BFDDBA88B1B60240AC09A05960F9134700A97DE7E6031F5644F83B5A10264D9 6118C440225E4864A2AFC406BE4A8AF3F6AF8F3B48AF8EEAB503BF7A66C840F9 825D9D44DEDCD92A11EA70FE597AD39C0CA0F1C6AFD5750D6BCA09D230024DAF 09F807B23F356891C031E0DAB363DADC371166D728755CA4C375A846C46E7B37 695A8C66F99132593D066D0757C3E92F64AFF193D211B41405A3E528172C2592 30A0E1E147E95C002F2BE67E1FAC9C062FBF5182A0726E21CB87BC80E15FA68D 9E8FEB1888C4717BAA97A135EC4B5234135A64DE68833D1FB55EA7A327C5A9A9 78312C6B32D66B57A4834D6004D83FDDAB7905D94E0AD3DFAB8A4D5D081F2FD1 4CEDB8C3D8A344C3596A6E033DB4CC4A2BCA9A86D8858830DD5006D7C7D91F53 560F76B6B4BAAF3DCEC3704E922E3F32C3A450BCCC92E359265201F07B99BD2C 24377943614ED7A97E19D988476569CD51B0E85672F4AE6D6D46382A73DA624C 5188F727DACE6E5BC2F33411206A566B6F830EBE79CC97F295A269141FA8E565 496EBED5EBDA3E6C7DD9ACDC9AA9864C7F26227F68DAD420BF8AFA428D66F3ED 3919E517437B7BE7C9550B250E90F7E004B3C3D30D9872B84376C84B913D0032 9B2280354630E263E101EB02C92FD77A76BAA8CB1C5B5C555C81F6ED6A31B3EC 356BDF27A16C319DE965D8BE1D654A6E1980C8FC535B72BD951FBED2C6A9FC82 FA152728191760F9C54E52D900675AE8A88F7867E0A5E5465FC2ABB868B3D227 8A0DABCA6264CE647623418DC7850FCA18C34AE8532AF543E46B585E20BD1E9A E210B1DB301C81537F068B42BDB1B93FB4618B618B34E7D42251DFDF3491472B 62EE41B9F4C2F1EE43C29AD841A1264285FA4DDFDC07323A24F00EC12627CDCE 2DB8592A29424150DC72611D88D29267B1F98F386053BD9188CC91FD52876731 1DE8DF9085F0F49CA5B14089B55E2E9386D59DFA0116C800A5204F6BC0032F6B BF15CC4A142729DC002844F5A418C164C1AF0F69353121E4E680199C752AFFF7 C961E4AD7F5E48212297A346A6FD1E7CA0B7A51670631878D69A60639FB9A150 30446595791BB1F97919D034BFC08998AE74431E65800A11648D8E5ED18C95C6 F3F033B3F3E4F7077216D316CA981B5B4EF0C33A7DDB14BF11F496D754D93C6A BACDE5D2B6EC1126A0531B61B38E73F377CFED681C9DD5A804BC1B7FD78F6ABD 1EDAD16A0D3E4BCE8A12291230D94AC0E0CB7D258E46B5D1CEC91B0CE18B1412 56AF3A04F80C1655C6DB8A9105D611819D4BB6B920F975D0A19104D8239448E6 B8F4804F6088435C6C2750932C56753D14C5921DC9D871AE804AAE6D2AE9A3E7 192DAA0D6F9E1E7C22BD2A0E80216723E09213905F4F291D2540F24798CCE9A6 B6E9E7866CF589DC2CAE23A7945B52E862975F0578F7D8866DA6DF2ABAB1AB11 12FB5B9AE7C3DF18F726BC7B51C57BF184D42944FCCB796ABE1869AC8F5BDA42 0EBCA3366E46D6A9030B2EFA1767BD295731CD1DB7FFA74288CD586CE553CA71 C69BF555CE828D291172D22DF6B1FF97833BCF7BF569CD79C67A65B8D32AE176 0F8EF4CDFC09F35100D23ABFD911931C51F71EB0D37157CB9C9984A6F107C365 48AFAD53E3B33EDF970F19D59CD6D5C1D7962CEA24F4AE9C45425589124A7578 D40D09FB8BE3B386682B9919756D4EF4AFC2450C6A298450DE1A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT9 %!PS-AdobeFont-1.0: CMTT9 003.002 %%Title: CMTT9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT9.) readonly def /FullName (CMTT9) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 49 /one put dup 51 /three put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 70 /F put dup 71 /G put dup 73 /I put dup 76 /L put dup 78 /N put dup 80 /P put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA 610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE 510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF 93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A 09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C 0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C 94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF 409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A 0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B 3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B 7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D 8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC 2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C 54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD 6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB 3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF 573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA 9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D 15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC 9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A 1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA 4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D 4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D 80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F 66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E 2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A 1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC 887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD 15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B 9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B 7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B 9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A 97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF 1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E 29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D 99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE 480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB 587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C 839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C 320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F 461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A 3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 097C4995B60BF4D8B3AFD0A002B3A6E4FA114131410D5658999B86DFDD3005F3 AED1FA8F077AD1F27EA249221585703F20FB70E37A26C6C3F2E101693C94612B 65BF89F37AA3C10A40EE8E49915F1A1B95D2193D8003DECEF9D76FDAA33B1AA9 CEDCB21C2A3B05747FB3ABDBD904B66EEC60CED2867442F5FE445587EB8C6D14 87A6B1B4871A8371A7ECA6A159EAB295B167CC35ADEB8512FD0C237421773BE8 A081FB687F9C5D676F2944DE6E6B639C37E8E49BD4A6F0903E0C31EAFC4C7ED2 C3C67E71D8BE2B8D5784E8A6F19A9A8929DF9833440E160945274682F435DFAC 575048CC768BB8F13AA21C6B125E6073611BE138AE06D13E62E7EDE3D0239474 E040B3E446165FFE60E20B75D2A5F9EE021B22256621C290A8F3342F0347B8EC CFA6AD68D47C05268EE3AC8683F4840D736EAB585C6284018DC94FC103B4A882 ADAEFB625EA966F3877B3FFEA518B809A4BD184FE4923BFE783B4131410D018B E0FF5CB22D92CB1D1C8854DAE543594DBCACC60041E0B906FE5E692CFA6D2B4F 31CF357A50CB1CBDC0BAE6C841A8C0A605330138715CAFE6EC005E8174AB7D9C 9A9AE616B75DC1CC62B7F9EE69DB9ED2351442BD48E8D0A467E28525BEB6961B CF586AE20AAAA47D9B93AE7B0A4B992B61360AE1A51EA3FC550B5EA3720DCD75 DD8D07C26180748FE67B2CB3BEB2EFB690657B726CB850C964A773F0EDE2C0D9 9D7DBED1E5E1E18F68B114C42EB6D734DABD111596AB68D8DEC5246926DB5E4E D7D701358D7972B2995C7900DFAD6F78AA604C326024C0E35EA5F2E99B2540CF D72644DBB5EFA49C1D91FCD8AA69EF3AC33385AF45F42D1B8DBCF688A431DFC3 EF8EF75EED3CA8EC03195F410A062E0400499BCF9017D11C9A4E00AECF98D318 994CBB28D7FBD01C3AE3EEDBEAAAAF122BCA7A10544804177CC0760AD483D5F1 4DA0ABD57795A29AE0BAFF8ACE042ED8D5C95DBD358C2529B33856B0E442DF62 F86CAAB5A854D6B1E30E7E671B9B57B0DD28793445FBC64EF5469CD7A3322311 E24AF1836C6981566C2B8C83D91079DFA5D02A974D3B83DFE932C0D0C8EEBB40 CFBA6E52A7A2A313CFA0DB34093C1B6E6D740548B9FA9E8A1A4D0956A3D44931 882578D2BCBC7FA215D51AFD9209524EB158E4E3FD4DCE581E3871AE2D4FAEF1 6F25B0BA20F1FBD0943FEA005DFEBBDB1CED7F22C8C8A7FBCEA1642AFDE9AB00 28624D29374A5CA5BD0060BD399B8750B55455FC22A0D8C5EA953A3CC77DD3A3 472B6E9EEF8C58E28E19DFDFD99ED3FFDBBF3F164196BDAF0BD36479D927F876 E2C9F0B20CFC925FFF969EEE5C116ED17F17E2682C997C29325D94E6B28799BC 877868ED48D7B1D23107A5BFB734DE47CB46EB46B636317431E1BAA8F6DC1817 28CCF87463C739E8E68C40288B69A9E790EB8229DE60BD665964AA130E564EDD CAFDD7DE4DFA4B553B695CB12CECEE7617CCEA9C7F5BD466DD88C177D116B243 B4FB4DD3D2A809A379413566E118EFF3254260E73A55C03FC56A9ACCEC19493A 6E8815D0B40B2A48E7DBC6DCC5E181F86BF252A4F312FB1EE7833D001520255B 64B2889C78B19822D3A20363DEE900F0BA53D9CE738F25709C81F90891D4C279 C5394DD55982721167BFA1C69C55852F92CD6BDDEFD9DCA73DC39791A85908B7 CC7E5136823E6F4608529995F72C0A7D50874B93B0FC6D6A773A571E5AA0FF10 C92F4F5E2931177CFC8B8E39AEBE9A5ECF7D6D3DA706E5924B84B8FA2FB56A55 1130E7001543079C533248B118CD4543EC1BDEDB2BDEF437CCCB539676CDFF28 9C05CAF4B8A1ED5720768705EE47AF1162E5B979153CCC82A8A9AD1393505BDA 26FB54D3FDE40B8D2AB3F2DE79A0B483F7AFFB6022B81328727F66B4801BAAC5 2EC53EAEBC6D8552AC3EF2E16F2977B8F80E8F2F682674C09CBC26C80D849237 9D01AEAA507F5481FDFF95DA933BB57CFB64C016DDE71BE1557C659D09A9710F A073A68EA7B6BE1F70F3C8E7308B276065284DF6584107A76823B9B0778528C8 ECD793F36CA5C1C405DF3A9F254C4E959337490840EC48DC14D2AD399111FEF4 D2A870BE8203798A17D97E39BC7D3A0C9F21D609D6B5FCA9001428DC67C9066A BED5FB94E6F9EFD725B23AA3CCC97EAF1033C9B48E8682BEF2CEAC57F21C7658 81A3B8028E6005AC2C13E0C807D92FD343F074F5C543F4B53D2B14FD50B45A30 86C9775D4AAF93C2E2FE76467BBC2E3A6A95AFBFAAA36D8A9AEFF25C3BDD51DD D4B4E2B7C6FEA1F4C1A367D12531326160D859E83F458CD782294CDF38E3794E 510F1C1704848465FC209C7E26472EA60F8001E945620857F4885CE61F78F66A 4190871A4136695B576E39D87E5302EB61600EC42B2218CEF1F649F29383FD6E 341F3A27793909A05FCC5A87AD7742BB41ED886460F0832E6BB8D443318AFED0 528ADA31AE91D2D0889A755FBEB9C33AFACB902E3919605A9A8F9FC44C3F528E 8BFD4F509761F1F513FE45863A1EBDD514E210C108DD567C06D446728217176A 800B542834A5ED0874D4D5556898DFBA679C8AAB914F840C0C9ADEE375269981 92DDF4B3F3E6226A6657B69604C6536785169F7301CF3C4BBF602C847E01D7B3 C3824CA683D80C2B06BC68942C8CA4DB60D80043F07DC63E6B31B6A87B3674F0 FC529D63C6CA00F3B4F2386DA7AE63BD2AA93523E3D70313687D297FCCE6270E 3B5513CACCF8AC2045944C559F001791F06A2AEB21869BBEFFD79EA7BA743A70 7917186B0E2E20CEDB0A583BADBACC2F4B3DB64A8A3F927D2000B81046D577CE 43BB0DC4AD99E609EFD5F55DE8B5A41FD92F34FC96816E948168EE17CAC0D120 13CC349F8B1225F396CFC62E3502A43F7ED355E901CA9E60687A8D5B597EB356 7E1FE367860AFD2EE7B722F22473C968C6E91E7E8A4DE41DA2DD35D51E7DEA3E D9117DE9E874092248493F0FEA331AE639578A9322B1D3E6A9E866BAE054F555 3DA676E2B24D1D4C8832355C6AB10F776F24412B106B03085AAEF2F5FDCBFC7D DBC4CC9F95E945A4E690AA2E8E16ADDD52CE957E883F09D141C560FF4A53ABBB 45B07823B592960D914C54E09E44904BB28DFF1B805A1F72BDFC5D4A8BB5BBCD EC19366A8E3E08C100E8ADC25118F79BCC38E0D56E2870BA307EDDAC7EE3590C 39C825E8958787A9F4370176A09984491EA71285ECE7AA6D60DB5ECED84E6A9B 242B0472EE67542C4CBC98AB661DABC0BEE7B548EF06C347F287598B249615E9 86081DE85D56453F3FAC216CD3F3E436735A593F4C8F3E28D5914DDF9DB7EADA 516FF8FB621DD043CD00624FCCAC51EE263B86F46A9162B18FA26E1DCAFFE7DC 974554DF975D02C2948EF4814A5345DCA12047176CBB7B68244528B6A3EF1CC7 ECE0B8D472DCF741C82801D2BE5877EC14652819A739C6C8E7653B2671E83276 75FB5C4D67331989BF8F0E699C0B8FCE9EED69F7ECF5B2127C4EBAA283D7B011 7F30CF0CFED36D7A81856B746E7B08108C9C9AB484E2760D9678B82C956EEE36 463826DF521155993F33DD1AC5F76B1CBB689999631298D2217B022744312A90 2541727F580A4902637EE49DBC39ABD68BBB15BDEA8F8713F0B309B9EBB363AE A20BB2AAC22039C90BDC4FF6459814D11ED09CDC7992237B69315F56F9021FE2 3BD0EE582D1FB0623A17775292868230D4D36CA7741D10B6C4A7890276C825D8 7F4F04EA3144B8004821F5078C83ADBD3BC7588D856421AD4561AF9DBC18ADF7 8F9CA070E79C15790E718ADCE4796C2CF3C777B2692A28F0F208FC2DB5F3F2BA 1C3F731F596FA303E9DB14CB2D5281AF7A574831257A4B4D3E78D964BFDDB79D 58497074BE55D6397C986981686771459B619C0FE8E2AE1066DFFDDE92F95251 EB30125E767F8C4B673B8D733BD22ACFDFA7B2AEEB52D2F6C4C3579FAB300B20 55FB500454327D13AF2DFCAC2A170678730D302168B433E462227D5200CC3473 8165558FBC94E9041B2D5F44B4373A60737C63F2D1E126272B8CFE386BF8CF12 511686330C6B61E5AED76AC3A475B8046736F5DF0D92C8F48A0A73FBB788463C A50B2266E2AF8E6A88E0385A485752229990FFCC06F517BE2A507A6BD7FA30A4 2CDD60E5680B321662125EAA1A5C7C62A251C762EE0A028A8E8CA439F788D2A6 54E47C631B9C1E86E47AC755BE98E7E3BF1B200E10758AE9A8D98935E2941A4F FFDFB8F5CF4472A296D6843299EA45776AB68295630A18AE7D28729C3DF2B6AA DCFA02D731A1BF2BB4715D0A9F86C45E6260E4D6213EB4A95628ED04D57935FF C24806343324305E4D81AED1E5AEEBB42CF2540FF8C96769F04FEE0864A7F085 DB143D8224A796C6D983B342A95125662E65F969D1546BC8D907B002E46CE298 900978B43AC371B432EF75E20302B1482B0BE4A1D5F933957F694ECFA8F5E776 278E430635B727DBF26863E1DD9D36013F2A53F79884B99D4F81AC2CDD3D25B5 92E870D36B2C8DA33341D19F1357D583C093A65C8B49561EFC71C37E25A74D7B C0112D1B4AE64F0B0B73405B416683AE878443FA527EEA2EF14A0234D36FF51B ACC4BE38DF8A92B6272B23E344FF4AF04CD3869988EDFDB3058C3E90E7A9659F 311DE9F880061347C3FF6D326F18C9B67121013499C63E343CC0CB02EF6AE9FF FF9F2E46D176B884917823AA077C399E7D7C7780777F02315FC5C0CEFEC3E0C0 DB1B562F6C1F61939D57267DBB35F449A69BDC6D93793CB7CE9ADB178BA79518 A43D081F81DDE88BD16F2958EB56FA45516131655B273C8CE060BBA62CC59D6B 93DD62347C2C68670073843422C24E25E891A4D5322CA595B9D9E45A4D958384 48636974E6AEFA2A58D8F70953D7805D10AA76A13C75AC5535467DE9F943C582 98545E8653E95751A2E605192A3EA7576DDC2B3EEE28037914AA83ABE4E8296E F0B84055E5413D56EE98A7337D4DD923D49C6BA4FFA8B6DBAC52E1C2B40F68CF 9AB0FED29250B1B41E9F67656E098020658418BE1B7BBB8029973BEDF017544F 713CAAA3211CE1E348BC5A56C12C516DF69EDAC03D886F0ABB2212913048FB99 FB9B1E6802D75A38003C7785EF1A1377972B7DAC156A1B41DE4D6E811290727A 9E2960C690A4BB5FFB8F0E264908175DA0751FFBB4D51E96DD1190ECDF2BC005 F6F5B75CDAB236DED30E4F71F42F15C413D07B53672BB60795604BF2CAC6EEF3 A5DD8F45023F33A77ECCFEC5402D5BE46E4F8F0CE4EC0F32F86B283A43C25235 EE90E1C05B47BE5F33F1FFF0B69456110B9A8BBC03D3FDC8454D661E711B7B92 338C0CBDDF9E9832E687AE4456DCDF304A482A72B86EF41F8447D401315B27D6 3995B7F4280F2ACC8F7031BB26D3240A1407DC0CCFDF0651AAC6F9721B8A9398 21BA080FA31CCD478972838819A4A1588D230C76C14B86EE189A124C315AA914 25649216EC8C3F1EC35457264B5C394573C71A3203663ECC797AF3AA36B4C24D D6BA6B0EB5F531B8A25AD01BD94EC56BA1C926D753C7B391DBC3DBEE2C2E8C09 15348A7E8ABB1B14AFD7A5AA07C65204ADA6A6CF391E38485BCDF8C905CFDD1F 181313BE7025266AE9422E6BDAB3B93936B7C93EB07DBE70F2DB2B7F7958D7E7 283E2A530B5BD7A41CDFF4A8C057D1DBFADBA85E9CE45A8947618AAE1CB3042F 9957928296A4BA11CC2EDFB8485CE6D255B00B2F15BCE80D4E88188959722957 5EEFD638B94E1BC01662E00DE2882C87AB937D47C81242F1C64AB7DB6C334F5F F5B73BB8A489629A36D58DBB7999ED2E0C6438272E4DB2CECCC1E64A49472FD0 AE3AE0AAD5DE8E961D14D070964E2B11E18D9EE65D657E1959738BE1A0890202 2F447A746243F878CD6FDCFC1C1F688AE4C532F2384BA60EE7243C8FAFEB483B F7042EA915A31940BE017AFC5842C951204574C0760A2010A197A7A8D1235CEA C7AEE034424412EA4A84B909A275C5BEA94F0E4D63F7E10FDAE75F8CDF7F835E F0D99AA64B6A9AAFB358ED698B10E275E1C734BC0B2804A19BD70782CA469865 281B93F0C09BF0462B817443F3425DF2F006DD7BB238CC4A94619D41F71DE01E AC9B92D6D6CA965A9224A1114C9BA2BECA3F8C26AA02DCA5A0C636DF64310E60 60BA72FE671E07136DD843743ECA7F915211B6F2D6411FDECE80DB5775DBA596 BE97576B965191E407B394AF393D858847A0854EF280953D70A727707F9A46C9 1B8A51FC1A19589750FC47058AEFF8AD1EB827CA0F3C78C859290D851D57848F E23A1703B33E474B48CAA4DCA698CC878136903D82624ED218A737F6C7D4591F C04044287D4977D8C9C50FF760AF82E80F3E6E3CAD0F034C00EEE8791F7C8E17 000FB21D8F0222103D8F7BE5FD1996F8AAE791679A62F992246AC211D139ACEB 1DEAE8EA556EB93BC2123C0B9819671EB214546344B935C99B9F3AD1B61914F5 AD96D7D63772F933D785CA563AEF0CB3F71289E5AF02B18ACB028496BF8C82A5 18DBA1A715DBDD10C9A0FCC32C5456BEDB824C59B1F9DC1528B82C235F45DB96 0271BA11D75B66DF50FF54B234B4FD9768FA146E489E257D9F5C62578B3A0D61 A468AFA9EA6F16C25D5FA4DC5D5F2A4AAC8669CA059BD9363EF6467E1EC13AF5 747BB3D6B6EC468CBFD294409145E61F5AE298785D9F7DFF54498251C5E3B87D 387ED09003333963CBEB24659ACFD273273D5655A9A01307CCA16E1FBE241192 F6E31AC8D490E31C9D0CC49AD6067C60D1CC7A2F0FEF5B2B7AAFFBECDFBB5B27 08E35A37C41A85F330ECB2C88B94CA5A9E4E047B7C700C32EDFA055335C04F40 E345BDFD69377877897B25021DE05CFA7ACE7F89389922CA0386DE41E5F97580 9FF6AD204597C7FA731DD1AC4FCAB912EEC7029FD2C829987AFE21D24F742D77 F6F689EB2576E386B632F6C3155068C53C2940F731EB37C7905CFB16594428BE 7B327CC0796E3B3FD6F7719B836A314DD685428419DC74E534E480D17A495921 5C0DEF9A7AB28CBC1C7EC5642C693E4285EBCCA41E713E1B9FF3F597948E405F F7FA11F6A8E43FD5ECEC0CE1B07959A325B49C00483656713A0DF26165CE0BD9 144079AAC23D7B2E24F73839C01B971542915D70737BB184846EB670EA3BD6AA F63B5DE5A709199EAE53CA83D8A248A80CA9FA65F03D0AF0D17CD290A62B8429 6FBB59FBD51F3280BDCE40E021D9F0552F8601F4837325B87EB8BFFE373251E3 D76880A6CB90A6920276343452E0854A7ECC84D743C59E8C4EF59FDEAC252242 90B9C6B666E94CEF8B1A5A05D7940D877EDB1D52B0588C77BFB3149951CC7B41 F2E77A627C62D6099BBFB571D90D98ADC819DA5691E297F776241EB5CBAD1BE7 6A2F5A44F5475A6AFCB4683A3FDA9442B5B9C3B4F47D40100B8ECC366BD49DB1 63AC7485A5B74EA699318C045528C1378CD84D77E0880850F723D341BB904FC0 C4764E52C0A92058B8AA8ED472473692870B09AF6E22DC29991DEB71002EC47A 5D8E90392533F3EB4BAEC3FE5F26CFDDFD28CAADE3519AC92B92BC9CB8639D6A E8296BA76587587344DFB67AE6C55C81710E9DF937FD98EE8D136A1A2A269917 D191B4EDE291A7B3E38AD610CD2C79737F7992F8C932AC0426987D029C7E628B 99B5A35ED77C5943CBEA4591A8A3521BF101BE5195E7D04001E8FB2C9BEDFE8A 16E60F3F30042A6E33DE1508B471776D74A5C66CD7672B0DE4CC002A63A78001 5BDFF52FAD0AB9815F70713442CCBFFAC8255EE0BF295F15860CB0AF53BA966B BE8856AD62DFF9CEF8679E66A156B8262D394AC2FF8732C235F4909A25E0E6D6 F44FD9C8B99E2D1A7EB964BC39E95A0D9A1B03530EF9BE6991CA16FDDC5F04EB BE6A74F1EDDF7E6FCA0C28E813555BE7F133A7A0E7D33FB311A2A211A22CF727 1ECF662DE52E971F6A420460194CBA17C19F8992C7C1A52EA49FA708FD097B3D BB797E6B86359164BAEE0CA06BA124FEEBA40C4ACDB58587CF914CEEB7CBBD2C 747BF8E016AE6DE5BEEB9C9DAA15CDC37F27E5A1EDA91099ACFDC5D7A07F491A 7179D4A2D5B5F045F824F126BB52B8BA1CD8DF1E31C45DA9126CE1BE450B6B3F 7465E896A0EF8E6BE25B6135F5C9EE3D0E8BB30B2B7C594B8306CA078D9512E9 6A35B94D24669491080AE1B9A1568ACD117B4D4A6AB6C0325EAB351655A8AEEE FC9D1C21AC27D92F53A9E41A0CCF29D98E032098F4EA9C3F6653F84C48AF4AB8 F7BE53D9B609668997EB4E3B38ACC423ED28D8832D7DE94F63B369C62795FBC0 3138CC22C0250F5CE92B0F97BC78DAB5F00EFBB57491ED59DDC547FCBDCEB9DF B3D8C0826780A9E0C5DFD394357E6BA6311C4B7E569E9353D872AE90EA4AE7BA 33F62ABF92642F00495CB99D685ED803687B61462B342BDBE629F372EEE7CC48 68012C362E27001FACA2D0CF46FFC80A2E3956F9501D2637AA1DE848A21F5D56 0A7A6965B7CA30CC20FFF711457F9B332103EB1770E3D45B853D8205577E16D4 8E15BAE0901F6EE488206A9827173C21B663CAF46118EEC9C2D86CF9314CC3D7 E9AE5273CC2716FFF1A486299C00AFE7E28697F82102A4FC554867C401F9E96D 669D48EFAE660E6C060E2917CA8F34D52DFD08428109E69BE69C49016263517C 3015CABC10001BF2515E59CB5A0D1430ED0BEFE8E5DF037C816C7BE5E0144B95 89FBA15801A48A7867D9607D694779BB772D10B6FC498929A4A689D218350740 D68A8B8B619F8E427D21F7D0F55FEB9065F3C62A24F076884ADDAE44D7EBCFEF 703C9E342555C8F985C73D05D5733F206A7568A9F3F58A8754C00223A1C5F3F0 72F387704E979796C5B525E07B52B3DA1BA60BBE7869AB5296C70DE428227E2B 8BA35911916054F35B5194CF2F67D2FA90BAD0E08BEA7ACDCF8852F22D77E461 020B6568CCA168EE756DA60BA381881F7BDE913CA63766E9380D4D52371CA9BD 4D88F97EEC9C9FEA8310BE410D0F01459BE8AC4FF81AF70E094EC9EAB7AFCF7A D70D69CC45C1857C6B2872D1B141D68341F36AD9126346230421291F24540713 177E40B77E99A825AEE693906EFF6BD3B37AEA4425F8525353F5B2BE6AAE27FD 800E0A44A75F5EFD9EBCA37878C3AA86BADD21070B825EF79FE864C8FAC2F4B4 CC3255F76A697DF96B49B7477F4ACE3E01C3B308B5047BEC9475FE9D51866376 00F8D88203A31054CA687E9395AB5E2A39F5DA26BC62F95B3E90CF97214E1DD4 3E6442F1E59E154C5F6F65C7F8221FE80EF5C389AB47F70F6B929FB4C8D8F51B 8A64A4E6831B67F27E96AE2B4E030BF39ED862F097DA695EF32D9D4C6B224A20 049A643796FACCDC81504563547E574958F55D4980602FF40D3A1E945ABF3B97 03A3E87F2826092B0632077DA7B44319E18341C0A3D1008B7C877A87252C90BF D18F22185A572F1A72D141F11A4975B4DC2134275B93AB85ECD20205B690A763 D689601CE4F859791C32BD4F42400CDF8A711F9CA54C921021FFABAA4BACF191 0D03B17046E2D6189FFA68152657AE9B54EAF9567A655CDB97DF85BFF36F3316 501203209E372AC415DFFDECD6ABDAE58C4C80A2FEDE0E29D666FF1C3D345E24 B8F0E42DB633E7254DD7EF171911B360B4B8BED9424922C4DC228A11B2E998B1 533B734E5090972DE90739E8BD1429EBAF4A40A8197B46623B193ACD00A1406D E3C887E010C3E71ED3DED4F1E44D5AA2220956849AEADB10AAF9E8B6B05FDC80 8E8247306178B255B90BCE6B21BC8C2951C8AB203B97AB3080387DA3EE38825E 561D3E738C63300CF1 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMR10 %!PS-AdobeFont-1.0: CMR10 003.002 %%Title: CMR10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMR10.) readonly def /FullName (CMR10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 11 /ff put dup 12 /fi put dup 13 /fl put dup 34 /quotedblright put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 58 /colon put dup 59 /semicolon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 74 /J put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 87 /W put dup 88 /X put dup 89 /Y put dup 90 /Z put dup 91 /bracketleft put dup 92 /quotedblleft put dup 93 /bracketright put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /endash put dup 124 /emdash put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A 2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E 3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B 03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A 8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E 94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C 8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A 64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B 07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC 1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A 5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE 0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D 38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C 0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D 4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F 3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE 15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF 7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA 4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B 3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED 49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B 8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B 5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC 17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D 364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F 7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F 26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD 8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A 65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A 5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C 9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B 72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB 3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF 2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF 9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A 2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED 6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B 7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A 8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC 41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F 4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF 9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 AAAEC15ED0F362471AA58488620156F3474FA59CA080EA96FE995D2B3DEEADF3 3141D157481C66507725ACA5953CBBE1ACEE7E3F02C72C6552D15EB3D612730E 61A06A43575568DC3CF3844BABF04CA767E299575EF2ECAAC7649193843D694E 6CA59318C01132C361A3E43BE637B70B9966664E12EF4707F6B100BC37778D1C F1806B1DE081D2C9B995BF1EE3842EFFBB8416161FE31633A6EDA118E563BDC1 C42F403BE8A009FC756406669E34C6A08668808E0C31A589D0720BE32F3181F9 8039645643E15D25917F38DFFD8BD08A420854DE15AF291ED675A634C151193D 29AA6E04E84A598350AF17E71973854842AFEC3EB1B58E4D4433309BF5ED9D86 32C4BD136C89169D45718A88BABE25072D8E552AA4CA3F840ECB11519B06EB44 13026DD6800CBAA90F3BF0022E66A54BE1059BD5D224B674AD3199379D82D571 ABF7BDD1BFA45A0F0E9ACA0A400BC5FE22DF4A041BCCB93DC23D547CDF0A49CC 6C7DAFF30FE0843CB3324AAA3B92F543A985027FD2715F4182BAB1640F391992 E4DB6C19A96D1D48EE4A4DD94D6443467C61CDFEC9B11E07DBD7F7BC33B34BF3 EB97A7C3D0C4E322ADAF9CB6320A64DF78223011738501A124CAAF7D717983FD 8BABC1AE4CB0FD382E26BE0A83169B6C371950D7E9A94FD82BD20A3E2112F447 F1E4203D9978E6D9B8DF24E670E2D4BD160D5CABF3C460F00B5229B48CAD82CA 9ECAB97B709C0C4FED12CD9B497B4D5E505A22F12589E28B0C3017683A6EEE2F 2928DDF7763CD8F58B531F526EE267EFEDF72DCFC8E547F329A7C6BAE64C2800 AE848C69574115EB02F9CBA61ABF99AE6DEB18BA4DD295682F10B960D8F0DA3B B4D6190603E95B7F8102DE04DBED3AF90DC3CF440F60CF50A8AA982FB965DD80 E0B8F62F1589924262E1B3292F82EAC5A888AB240D40F889F9CE2CBD7F2F2E8C A1E4479DF6E27D00D4347DFBB8B977D8B1ED261C3CE14538C0AF23BF0B4825F0 39B2F2AC125BD84B6B9626300A2C001119893830B3542A09B6986620B6E9200B BBC5CA508A4D0A31B72EAF25651A806F88A2943849C5CC2CEC3C79ABA958B020 6B8ECADB5438E230ACF8939688C11F16242C5D58A55AFBAC2971E09C0F7A2D20 2B26FE7FDEF8203A73EB4E47F9953B6EC5ED9985C6D84CAFB3DAE3C39B1EE33E 8D54A862ABA4FD8C0E9787B5B71E960FBB9C3003F8034CDB16A0D8D0709D18F0 22679AA4339CF26E41992B5B5B33D59D937892983C5B1151AD6EB37B065E8E99 6E9BB66724E0CF4044C77E79B6D697D9F368A76B76C93ED4BE9C4E0B61B26919 976BCD5FA3F527BB093BBB0BB979131EF153F77845B4EB6B7378A17DD297E656 0BAA38BDB532CB389E2C60778B658220CEBF7F77DD6677D8248975B86D52ED2F 1DD38A57ABE4ECCF554EFE937070D7F73B8B51F59449236E33FB1C6BE506F7CA DABDB3E38B70398F5FD377E00C7DBDBCCA9D82180EEA815E0E2231789FF7FB88 67F04D4049A6FC4CD8F12202CE784F633E3161FA9E4CD2F3401BBEA11B43D1E4 A99FEE87D0E97CF4FA509B30F1E0672AD64EBB14C9F19F9E6DD333B78E91E4D7 058517DCD523FE710FF61D766E9B334BDD7EA54C5BDCF6D612B27BF30449DB57 9D45152EE0223988AB6689FF07658436359C2461BEA57F9CC512BDC51EF25493 2C25DBC52DCBC0278D296FB8094DF33E7E3631228639796FAB8E7F3C78D26C89 F15B4D251835074FF6EFB9261E2702167F46BBD87AF1CCE46D69A9E54B3F19D4 CDBF4689E4A980A46CB0F8259DAD1CE5C25567321F929B7F501E86FEBFF155EB CFBCE24CB837F1299635927640256B311272C6EF36DDC649D05DBA7F9F4536A0 B3B9513B8FBC8E3A547542F1DD0C6306693FE71BAD597591FF53046DC982506C D0A8EF82F11B01A588399B10AF852A61A96D0D8B416DD36D776B23192FBD8B67 230D93BE0C1238D5FD5E8A762BD8197B11E1B0AAD547A5C203EFF7027AF9017A D70DEF3A45D5C32BF964200A3D9BDF03B1CDE2A50601E5F8D083AF733C5D9B28 39579CC1D94AD59B64555DEA0DA13E2E771517EB7DB91660365FBD319FB79828 FF9FE5E425F710BC2A5250765A9D4B494028762ADA4FCC849CEB3A4F4CBC3FC7 9298A3450323174ED9835CCDDAAFFBBD380E889A002CB98D1E46747F6EC97E4F CEF493E6729F14AE0F28AAF68F401CDFC05A1D52C92E90E6D61163B99DC7E2FE 663D254BC29F0923C210385FD72FDE4ACEED53562ADC89CF698C61B81F426408 6A4F7E6211243D2894A2490C78DDF108FEF22D595919F8176C9151F9C4EC7FB1 CCFFE2DAED0451C01DCC92B8DA7C897314C6464CB96FE5E9AE8D09FF5356642D 5BEFFB636CDA259DF1056A41B007AF086F3299DDCB4BFE497658EABF868FE2C8 17F3F289BB8EE99476366FD4B5FCA6FF6D2B9DDE027C36C3DEA8D9FB8E1E315C F7AAAF23098FABCBA9ECA1B3B62D97C718E9CC920D6060DB63D12C54F40A8AF9 8414ADA57B34319E1B9DCFE37E37DD2419A93FF824AA210581867974EE20376D 20927C4E0EF852EE9EEAA6C3C33ADEBB54B04F8130C9FFE841BAB8CCFB29DCCC AEDB97A11253347D0A93054103092489A7A0FD2DA57144A996C857A51A8D59DE 97736B5DD55E7D1F3DD15B563C9EB1ECD180E405EBF83F2CE8D8E3BB3CFAD4FC 3B56C5E371D1F24F8B87871AA4DC5D36402F73E935548AC7CE28D7AF7D503969 364DB58C5D8C449D9A1CCE52D60FD42EDDAB0E92E04D4085570FC95378DB0E9D 29177299929C8B877397FCBDA368848AE438EB03B2380B4892FCEC5A6398F275 C8B9430614CADF97BA564CB4FDA21CCC0BC080D9148D461190E7A68007BAE7AC 863F39346F91568267DBB3B5AAD9AF3354222301F3ED3E144067310C29E86A68 680D1F9DABD82E2D6FAD321A778F6A7F4B4848EE947AD1BF122365095AF25FEA 3B3574B9CCEA66FF03751A4D75176773043BDA6569691729EA8B552FEB498FBF CFE32B8B3C37F71B0695A4B1578DD1B8E0D0CBFB6A2CF5BF3D35B63BFA956368 39F112348E15E0B1DEA4BA6FE0AE44F6A92B0917F673673592085CC2AC0208DE 2D2CA8E867D68BA9DEDDAAB83FC929D38927F5E5E65F97A160DD4D9A3DB6E76F 6AD8C92454E46405AA43F782C9C7F3EAAB984F2D26C47C3794586065392A043F C8F670C06322769837C380DD81277AD8FB61E2F17D2E6D044EF64802A82227ED 8947FB5A9D39C3C7BF66900819EDC802B10A867130FF9ACC42B885DDD5652727 A4F54338B7D8CCD04DE347E31DD5EB6BDBBFACD0F605EFC0825D6E4560174995 5A3AC5F7C57BCAFB5EDE28FB8FEA0015CCA84A4F421F64B9BAC351E4C9918123 CC9A9C56FAB9C164E12EA420B0B65521D001040257AD908B17527740A4BE8B4E 518472003DA96D02A04B567A806D6FCC1AB6581C255047F98C302CF6A3C38A3E 255CCC51C41FED45DF5A8DCB7CA3FA3D4018AB1B3C5A3A5655BC02EDC17DE7F2 946449F7B2552C97BFBD1C6C80E3CE122755E1679511101386A75345277E293C 6BB60E204B16949F9FA0E6802D61128023A73771AA40254F4F7F54F2518A4086 C8343A5EF3F620329AC04682962E7C2580A0C23ADF1096031DF2C0FA8B578222 6309D0ABE027DB4E7F59A0D0F33022188CAF881F52A0EB544E53701C7819128C 96E26E9CDF47938D16143720A9F774D36EF27770625017EF94F3BE6C97FB75F4 A3B44E10F6D3ABB303CE4F63501FC5C91691D5803CC94C4A4E5211BFDF5EF0E5 451D2073481EAB5035A78F14D2BC63852BF3A41D51B5A4048D514E16E3519D24 B1E2A278771055679E561A2632E9DDD7EDEA3599B28ED4C10F1929D10F093018 22937E17BD99FA33CC4EBCC92A6C21B130F0FABCC7CBE12408C1186CBA3B13CE D69E501C346EEA662F847C756DE1616B5B5E4B670FABFFE4889A85AA9AE8DF53 A2A29D710FEAAF5F275C317A07F484DF206BD0C4CAE557ED66399494FF2C1587 A6630861B8E5E62D7B02E3F6D98AD4F5D6D3FD34754DC20C8C69325CF4F43117 80CF56F55822EEFE030D837AD51B2FB722B25098E976AA164939CCEBFE453C40 54DA26BB8277E5FCB0B209B090001C202B1D417BD407D74C96CE6E315CDCC416 7EADCF5EA7356F9150A92B5F496E54A4BE33EC139C33FA3D7AE1AEFEA515F540 299DB28C9EBC83E3C89409F5D528A3CB3F59C1311A1AF0A136E237D91A1E4134 5EA52642D2D4B151D532F29BCDC1E8FA7EC77B3FDBF561F7707C46753EB922F1 FC0A0F94D7B9DF786EFEB034179022B5D8D77E368FEBD1BC318DDCCC8126888E 3277B6F6C9BD74743D3EF6A6D1DA3F7F69E0689B2712DB9CA8C96A1928309695 D64EFA85FC190E9A88B638FF4314150220DD3DC50A630F19A21D78441BA9A4A3 E3E0D201086BE1A1BDB1F9F4E6F8ED30903CBFD91F43B8B56FB269929C431F13 BD550F401CD9FC0A612F61A635C4B778DCF19D773AC9F83E5B393F969F0A6F2D 2C3399578ADD321DFB6FFC828BC708C132EEEF51812305C5AA9C5123EA790995 B17C609E9BBAE75AE816CB02FA63A5508EC4D6F5E68B7C69B3A7A743AFE1C00B 479D1F4D93A85A0AEA989D01CA06485F69A76148A5D541D834864447661987D9 A81CA3F0AFC109E62D4334B1958B0C260CEC205E37F608D53BC5CC5DE889C156 D24EE0442D2E487C9425C59EAF0DFC887D850F2AAE32FE27BEFEBF16ED33449F 746284FD593654A134EA7CB1BA98A9205BED9C2E7625BD7A614DF27C3A72B163 F57788C67D91F7299AAC5682F031353E80A7FCB23C9DB3CF6440B3223132325A D55382F07F7D83C1E7F0F1B5D751FF1F39AB6A357E08D34FF625544F0B62D92A 0441FE53F5C5068A3FE0A80729DA7693BF377C79FF3F279C52F72F03E439B688 3552A1F0429477294E062ACB878CD3955BDB1050195EF91F2010611D1680D510 33154CDEF24459E6FCC010D53C07AE9052CE784D8D060265885B93E5D201A3A8 39ED6B100E14C87992A5FC12587123D59E9C70096C0B8CCE18996C7A04061127 37CB2FE94AD25A8894EAB6543B4EDE18178B7CA02251752EAEE9007FE645DCE8 76E505CC7CB133F1ECA70526437ABA8C3E966B5F7929042A91745F43058F3018 C135ED93815B54CE444E864F840483D4B9D44CE0202019CBD40B108E1D8B4A0C CD10B442AE5C78CB3BED5E7AD9B89DE52CDC3D3FF506159E73F84CAE0C4B19B3 310F6288DC7A1C13043951094729C2D036E1B268FC30334A61057253D5ADBB06 062D9CAC36325D9668175C046E8E554101C89F31E0821FACEF7474774EC36C39 62909FCA2682F0CF31802754757EEBFBB5F98DC008B534245782D12EB30A3DF4 B892B1E064EB271FA436464256905FF2E91042882267A75914104243B60F12FE 3A9B5D9754026FCF038A8655423230E5F2984457B260354E75E7E8E438995E0A 41CE6D077EF1E08257CE1B8BE3A2397A490DACFF0F3FF8D20CFFE6BD58968AC1 321A49B21C324F322B5FDE900D9E055BF6A020156CD67EAA1AF90BC64A1E1731 D95EEB12AEF53754C7FE33167B9874D896FC5984CB032C60D66F09CBF5B045B1 EC95734469F57212202F37D6E294E73BBFB66C4B821C5D844CE81981D7D50327 F42D8210216D6A4826197CC24865813A441931DA18893031AA1EA62321B0DA7E CBAEA839D114032906E18FA1C661C1E88DE33C6337929C6FC8B09B1CC5B95BA3 E1C71C33CD9A3E4999BDCB55F0F931FE0F7A3EF924368616449551E3B0FE20F3 6B26C6317A782DDAEDC91723E25A5A325B288416E06A62FACC35A22F7B1AFD01 6530D0D6E80C193A2E891BBA5CEAAC8315281BA873C95C642253BFC2BAF34605 9EAB0AF45C3D049A8F433472560AB5DC2561FCA3A2B89AC95B15CBCD15AD6CA1 C1E7175097D316CBCC0F5785A1CB9EF5D109356B07EC553765C3542CCD4D4A71 A6D402D95A9869E5194E2B4591CD6A89A83D1ACD0F3AF7ADECBF37C69960526C CD96CEB82DB4F1504DB80C171383052DE99AD7A48CF508BE024BD574B06E4A7F CCAA259439F581467CC43F1775A797ED8151A08B898A4B4A5E2F2BC98C4410F1 108393AFB7031C8C1B4CC0880DE20C3BAE0DD0EA1F15DDA20448F7893995F28B 0608C5D9F4D434FC6B36C56A5A5748BBE676E00C3A9F418FC82F08F7C2650792 BF935B7ECF4B4B2868A4646D3AF8442072DDB42CBD89671E3D8EE4E0C946ACAB 2D7DFAD319C93B6474B36F4398D06961CE2EBC611BDFC74C06AF95BF565DDC42 1F7932FFF7A5658514C04D79CE7888CAB8C0C13E13A0A38DCA8F99A2B0BB9F08 89F413B0BB6C208C0843F607D1DD21D2D2857F5B15113FCDDF9012C68466EF82 C9E67E81904730359D72118965173587DA5EE59F28B0A101A8F641F1EFB084DA CEF86B85151E31B21F66BD9055293B5878339FCF27216CB67805247EA7166DEA 065F283E2BC91E9C526024B6954410ED143A88AA91DE752F5CBA7129236D8426 DB326A5A9DE91A2709F7114049A8FB333E87CF5D1D839F4F79D08FE684A7AE1D 20AA674461DDEDDE23167D5881AAAB018DDEEA28157CF944C55E0E7C7010FBC4 7884F438049A6F596912E65A54CE36C42B22AC762362CC4EC9F9213FCB908814 E63D7E10D6BA9CCF802B662586B6E5DDE8C7D5B7BA6D9C8792E87349A1811F96 C5A88467B93EAA04D84764C10B344D51541A987548D4F24482902A7744535988 09DC57E9031AF5955F5659922D46FF6727BE8AABB889563878CD8907E86742CC AA1424363B562FE791EB65AE23596095311612AA0720655CBAEC471721635BEA 2E322E3603F763E4A151AB2A8608BBC11AF4B9EED89930B48627D12C7857D906 E1BA68C9D2401056C6A100D5EA2A29E34DFB839A22F726508BD77D445EAE286A 50D46337619F86AF82DC4C2F0D1DAA005E17AB38E54756D48689EEBCB2B70924 D913013BA5A330D69B7B4A6B30A7396CE684D46DF2C24925CDE10CAC5AFA48E8 29AA959AFB2ECBB95FE16B483B49A6E10B009E48968EC7EBF2CA18B3A5175499 8AD1CEFEE2E3A5CB84185BE886B912F4F9BD1859E86C0F2B3BA8E4CDCC509C8B 70A0226609B2E5B3C693588F89B8B9FD3DDC670B0818D59B1AB6392B61567113 DE0F0AE4B5402ABBBC5EC181E3F9131E42B4D72FD500AF4A40ABB47FC78EC4C4 340810870CBAEDB3ED8B6991611F978A9851DBF989CB54A7FB6C5590D6F389ED 63AE2BBDB9640A581A3D0D56394345EC8A621E639A36D7A3567ED4C646782491 E6FC3D0A16096A748BCED36335A39D30BA544F5E3250C9A8465BB4BF1F78783A A6F4C8AE394E45388641DE0810E79CECA8CCB82EB5B01AEB294BFC1E797CA973 653AA8E25F12FD4637D4274540476E3BBBA984EC2B58B678650BB30D074713F5 E6A5579EB116C013DD4BDC716EDBC4B0680BC1D1670BF465BC7575EA0C0FAF7B 50B4CDA35F6CB2F3801EA75F8B8D13D5CD2B81035C06440EBFEB05C43920C8AF 161BE712A91A009B3C1DE9CE9A29149E81A30BBC08A7DFE5291A137937AE8CF1 D24CAA2620309F0CBDADE912CEE0801BA72A097446FE8DE2C494E5E7AB790D3C 46A4AA9628D791FA83B3FF9DD11F115669209BE8B4FD1EE6627E179BB53C245B 3AE42A6A95D73A45E7D9A78C2C46544DA9BF229077FADC8BB0A288B044AB219F C62E33225DB5B58C19A0894F14C57E318FD66A56BA936DA1DA059FB5E4C89134 909D531F94915EBD4309465038E6E2D0223EDCC2D9030BC5E6B07C12A28AE03B E58266B28B0A4111B445670449021001771205A0016DC0534E84E02007A65E4E DA5212D4668270F11113293A1A0FAF9E7F5ECF382760365DF24DFB1A49D50116 D2959974973840F8BACAADA175B18B0CF49E47728F744F3D3405951EC677C4DE F2A8B4AFB9740765742F701691B79309E7F8A9BA9CA4734BD8D6AB97F0B8DCC6 A77EA6F065844656ABF04A6224CBC9BBBC929E1A4BD3230B901AE1E18FEBC2DD 1642AB4A5ED317F9AADBDA2062510300CA34A7897D0EAB3DAC7DD375C24221F3 03E0A4697C6BF80426393BC326893D524CD60CCA3EAA8F09FCEDCE2F08F2DFF2 CD8C8E6CA25343FC294DF8AAF1C4938DD7BCE943E92CB8C70ACCD03CB2589CA4 E12353188F519A9E50AD95EB772C39F0D0BCC02DCC9A02C55303B370A511B396 486313903405479B23FDD01A7D1644212EC65BE4DE730ABEC92F9E5573A7353F 139BADF8C69BC5EC022D92360A28C66992515A7AC3E1AF4F87BDA91832003EAF 02B611681A280492A0C0653A7B0502FA0F036B80B1EB5A92B6E2E34F1D3048D7 9DCBC1994908801E17FC33109B407613C5537C04FFC152072F78F1591D6CEBA5 37F9E385CB0330754F7FD33255353EFB68A88B6B65D378F90E85996E29E8F888 E1C837F735FE92E1906D6A3991E23C5F4B6ADAE7F80B134DB3F2E9B45316B5C6 AAA37C479979F320C431641B87D5164CAAE38089BFC5A0466523901846DDBB97 7E626FA4406E96E5911BA848F9FDECC660F0D9C8C51855AE6F61E80CC6D7E4EE 8171B10C33B62C9FB6421E50ADAD266816B3D11B62926EC7674795A37B117816 3DC5AE02F71DE34EA896ACB2DDC623C44CECCD8D6631517D3B0D51E3F5F373E0 BA991518CE7A61A4CA01365C812DA9A27A7BF7F61B70BAE4A25353475AB28D20 0EE8A274B7B81324CED23F8144C859318D24039DF4104EFF6A46A3E4AFABB7C0 5D54A42B98554FDD4761FADED865F6CC6A62999A6D5E428B87773E34A3D59886 1AD7953B918FF207806D89C4DA9E29FC56B5335F46516FFF9B0077EF6ABE1B64 050AF7D08B8E0CA34BBAD1B70B040992EB6905A8C5453EF2A589F51ACB37D2F6 D7435FDFE1D2647F8E7C9EE8E55F375AD259E806348D28F26685AE4E64CB08C2 8479514C4F2BE9419CB9D2FE84B2551511171384BFE1FF2514948AC8E0011459 0194392A0B0CEA69357E0957CF64187606C24B66E75B90E65F6BCBA6B9507400 FF673F3ECE5DFBBDD8594B2FA9F7FFC6C9EF9E7690D1697E3286C9FEC9CDB3D0 56F9D219C8A5E8BA1E6EF3C56B279998EA9B86E18678E1D94F1C51AFD500DD7A 20FD646AC1723028CB77572685818024324CEE2DD03EE89953602B0BEBF931A2 76549FE146CF4211F5D7BA4CE8A4626D6B6DAB552E158DCB9A85A656F0470F84 396B9537A99EB633499B8D06C66D543B638282133067A5EAC753FC7B68735FFE DE9C5F435282BE7192F9F44D6716BB17CABC23970253B1C4297CCDF520407603 87E0B3D295DAA1A72034D94CA5417B0E6B5E148A2F3B842A77C54EA8010642F6 3C45F39A391F146FC070A9384872321AF86924A5C79C4932BA1E0E25EB8C76AE C2FABB9F40A19CAB8CE845AF2161E6C5CA4F1F28DF86D04385DA654DDDF4EBE7 C2067556D6E9C3326F8578DC526050B58962B3FEEADA9E30FD98162A7690B2D6 31BA0428550DE10F9A61D02A2A978709FD31D2A208379E53B1A29D111ECCE4F4 BDD9B8E29576B2F18DD4AB9FC631C5BF6ACD81CE8C9F194138A2A9497D966444 F0868CA92BB615B511B7370CFF55492C57ABBC22FD278E6396B70BD34192F086 A98492AC442E001B9B77807E3ED26260D69FCAD22B7733708CCBE7F84F7EC267 53F8163315FADE113CC938E49AC9E00928D16A317AE338E91E38AF8B894EC75C B5F3BFE33ADDC0A27F0E754D2CDBFAB0BBCF94A1BEB2F286CEB90AED9C34963F 39B63EE068288431BA3B31E134AD75D563F5B81782AF676FF5E39AF212EE0282 D66687205CB81F973D1624F14D1E424EEE9FC189327F1A502F6B45CF3C2D469E A6D952A5854556DD6C70382A7939F4333B6F4494D8FB50B1CB27C4700696BACB 087E7C705250D49F5298C5419F03F713619DC5AA7AF817A48C5E1702E1ED4482 ECEA7E7EA2DD3B1BDAEE6B4E203346CD7F7024D0AFC488F4420CFE1ACFF96E8B F52D2B9D084FA37FC69ABA82C5C1918ECD8A94CC7E3B85DBFC2EA7579AFC0749 8812579E9D682FF0EB5C00BB9BC897CE9F6BF1F00510F1DDFB17C6FC832E0CA9 79193FC6DE4EEAEF899448D12826E0AA8799B3E487916017CC3C0FBC559D5921 78BFF1C4D4C351C472C00B3AF94436C142C8C70189805894A010BE3B8FBD3A08 97DF5961E9AF3C9B374D733D7049EF23483003189AAE67517A5C953F010B4473 99EB286E4AB8DFF15C226B1B5BB0CDC1BD1B5890B49525EC07FD9E757864E4D7 1CEA3FF16FBCA03FE72D50A5FB75463D974BF5A8B9F4F8BF7909059FEA775D23 5E8A48A69592DD766EBA72EC27126AB1537E8A9E40B8E908A968AB71AE86E9B4 E34C4C0DDAA6CAE34DA06795C5C23B61F1B3029299CEA838209B9CE83B92BF1B 81DAFBEB500E13C5C9EBB2D7AC1A9F2428286F5CE7482BF12132F263742E83C4 B99633A0EC4DFC9C06964FB47FA7E8E6C5A76536ECBA7187092BB64C97B51063 03409528242E0D79AAE56E8EEC79D10809E0FC4C7894DB3675BE52AD3D954689 23FD259BC85866AC5626C80E19B46D46BE344EEBB27BE626F03E2AF83287910E F1137C184D279F0886A00191DD1E78EFCFB193145ECBEF516BAD89911E0F1261 E9AA1E7AEAB774443B5B47580E94E8D11CFC72CE036D292DE29C0E458CCB0CD9 B9FC222E3244A0B41A2FFEF2BB88AD788609E5E244C6C88B093582ECD05782A5 010C2030B988B7DB1E30C6D8E54837865246B93CE7E040E2A482FD0E1AC9D50E 632B6508154A39BBF6D4A6BFE0C835B057D5953BA5EE7E0941146E9AFA61FC98 0182BA32BFC0E8DDB61F96BD482A3F3BB5109B08A97F0C369E9B77CC863B5E5B F7086A48F59EC18497AA38753F2CFFF02461FA37E4B555C0F292BFA8ECC2B3D4 5B41FD849C8E94FC2F8A8FF379961E28EC3DB127D9F006C6F2B91168DEE7255F 4BA8FC35765D75A2A2C9065570592C25E1726B492819927E6A0278C26072A01A C3FCCFEEFD6C303C9BD2189DF98E538140E7ADF92CE4673930E950CB2A5D4F1C 948FD5F5C0F58D730E710EFB86D7121A8C77DCDFF7563E756A63CA0DCE6699A4 DFDC0E17DCE17BD056757E944D2A0EE68E819D2FD3326F9C3204CD04363B2767 1765E56741FB06DFB613B2305AA464B3A2C5950392B7DC4A37FB532B128A76F8 7BB70D92F0A5A84118658061D40DA770B3A2D8DA3F1EBA9754C451C8147BD4C8 C8CA37F12C3B3E83DE897CE25B437A079BC16C1046C3935792EF7685B3F234DF 14DD781A80C66B7B315B2FFE93DB467323E01F0426DA7F488D5B28EC0C4F061D CEE054FA05071CDCF0AEA789EAE744D80392BD557F4023ED1937A1B53C757AD3 185C0710907E7B87482C48A1E13D2BB81F6924FD8E9E8D99756BBAAA03EF85BC DE6E14CAD1265E16E781AB6FF98492DD8D479AC2E5206D2917C97966110AD848 C41687115E67B559D183A07037D04E8E2FD40A5A40E7D87649739CBA8CDCF443 C587F0D9C00B9A808F4E649AE7C767B35ED489246AAAB778D5E63AB7FD2777C1 26A941846E215BC7496D78D098CB4FEFB819FE8E5F98E50677D238A1CD1D661C 67BE46A67131B095025421A13FCDA084279959705D53F0A940AD96948DB37000 A68603C8843CA4E7444435F17DA361F2048D216763FC5DA7C687C6AC40AA7318 677599384F99D33DE44040D7DE5A870A420F638E83A811283290F0D5357A0048 8C1EC53D383C8E5E7895581B59691EE045883E3E779FB0470F901BD8613DB965 D1D005E804FA715EBA9CCB6623C51F41FE9A5FC108647517FEF1E9407D4F2527 8E593E8284E9FECAF7653D668F975436E4B44E15A8CBE5CA08C04DBCEB7E40C0 496E22802F2938433DBBCC34A0BE026AE1C21CB0B89E81159316D6F847CBF057 5DFA1AFB203BB574E7D5A78C468C285A098798A223A3234500C2564A07F416FC 3A313DD014ED39222BC4DF4F9C9500095A1F79F71DD3F065C95C3ECBBE57B714 71FDF51CAED45DE330BB35CA4D3854DD4A353623BDB414C852C8CBC4B1AC6ABD 6A3F00DA0CB3DCA3189176A2116D9AD01E4A53B7A67158D52D6C36052C625F30 F443FC0656863F451E67ADE57F662345C33A479B1832928B5220544ED54EFE3B 7517CA769B4CC4BD91C9A602B9DAFB48B89C3E490613A9B07C4385A121909511 5A6B9DF7D5FA5381FDB8B456400EFFB006F15DC1EB93D74288E7227C8FE6E137 56382C86FBFAE90C1E1F9325CB3E872E430F8525EF5A5B34BD7CA45362AC2729 E1B39550E3BA8E2D29160058F7DA661C17E009762D0D99995E0EEAF8F8893802 946EA5CF487C25E4C91A2A6B98E5B6DEDBC1BBB01FF8EF23C9928CBFE5DE8040 390BAAA66997E936B50A1FEC18A90894D832CFAA5C35891CC01CE5DBAB20FD45 C069106615C30C00758DE66ECB7CED5E8680417DFCBD9DBB672A71530254C71C DDE3144D20DAE4B196C462D8828A3D612A998C8CB163BFA33CC62CBE83E63DD8 3C4709E156A92123BF5FDB588353ECDD293A7281408B73530BE4806BB589C691 5C10A1472D6C311AE6C173EB4A3CB06B7A3E2626D7979C427C8C11EA06C95904 CF8A3D509C72C31AC379642EF9C292DEA069347C9136D71F44D39F4CC3E51525 10403CCDD038D3ED6C6464989218475DD58B27153F0A5FA890029A928C053AD0 2989CBB3B0176D2F88702D00DBA0177EC51B08D7E0F9333DC89C0E69B470F52E 38E750F11701B957A3161364F6BA74A8B8429DD87D0981597DA9206A46795412 225635933413394E4BA04A632695F37E253760874E813FD8F4275BCBB0E4C6B0 D81D546DBB99E27FF7A1AD640364EF547CB5D2DC12D7D609DB0B9E4EC651EA41 0E3362B3745F9F1B3849E2C047138C4589137160F63FB5C093FE743F9B2A3907 B08B14F51FD277EC66F56E19DFA0B0727CACD93ECB1580946C9E0092F94F740F F1347CF42AFD46F3CFC4E44BA60BFEC83F31381DDF20EC1808CE650BBB75D8A3 77827873700806A2A7D3264B95119514AB9940C0593F3EC58D3CB7281F2EA154 E1C2FA3BDE6DFBED2CE4D7A74EC9718DF075B6928437E54872C8C66EA7C17012 DEDE74F0185C67C4D884C0DF21C6F80D0820CAE35C6BAC3A9EEC4183DF461FB2 93E2172FFA04E5470C9D87A71327278B2395201343AD09AFEB35F8501B24445D 9B2614D75523AB7A8ACB67301FAAF55321FAB88DFD65577E2980418C6EF5D8FF 52678F027130DAD71117820C20DFB4A24092D8FAED4B8D926CF8C3E054AD0389 A2C37BBFE78622CCBB3CC1853E90E6E4D906410BA8FCAD74A04C51CF2691AE9C 6C462FC60E1A644EE0D90FBFA4D099F8B354A7E835BFB1C6569CA247C10B45AB F7DBBA63B937012C6E1FA810B83D449D53331DE1379E0F820F43679145B59B4C CDD277AD2EF9D907E940E4477D80EBCC77014FF7622E5AA8577C889FA8CBA263 72510B0F22D28E2C5360B2B2C7ABC7A93AB6C3D728844FC7B841CC53EDEB082A 2253170E67AE6EA143B5CA64C28EE34917ABB202F2C0BFC6F8223EC68893E887 3CEDF6706042F4F95D761D4B916DA6E946E66EB78C8A2512DBE6866F181F7480 387C49646C79DD1C174C26DD5F142EF203E0E7567A680A35A7B7C9EF3FC361F8 1101E034F202C5DB0D8CE9DC4BAB1BB9CC04CD0036139E96BA34B8F6C37EFCCF 4081A2B9F1305CC79BD3742DE74B82E39C533D4C2E65C7CD55625673B11AFC34 2BC54054EED14E9AF22B578A36D638EBBE40075D3206294844283CDE49B54E6E 11CA2540C763EC4CC7C389051324238D0D380AC81AF4EE04989A762637CF871B C43D284D7D5191C68BEEF0060081B16CD93E9F677300422A7CD2D4EC541A6AA0 DAA2A8A44BFE7BDB65A989AC89E5332DCA160C92D2177ABA2B3CC510B1E6CB2E F4C92839132A822CB52941E83E9360A96BA996B0FECF3EAD5DA932DACC0163FC EAC4FA40275965FAF0920001F087EA4820B87A49CC4CAAB6C336FB89FAF09AC4 BACEECDF4B4C106F70576C53F55390D50C6B8EAB81320400A24626E246EA71AC 98607D9733764521EDA48A56F6B9476030471DBB3D91854D4D6388D0A62F9E3A F5086060024541499A375347F861343AE902C150AF033B8F955CB664FA657742 93AA641F64599C02373F1881272B4A08A44D583D76110A43832F6F22B86DC5A2 D33053854E746DF104241714A2B17E10EEF0AC2929B4C15C5CE3D5D7C2EA7FA1 28335A0087CED3DA9536E8460CE5E957747422A3644F96C80714E3B7DC76BB0F 73D6229AD8FE72FF8FB58EC577F2253E2D5C27168D00401C94201E64EF770A07 DA43FD8C31F41943E46EB80DD3D9CE38F72AADA9E70B772A692CA7A41573FCA6 C46E4F9543C004167529716EC417B5EA6AEA374EC7EA6F0F79A5F32B6F40A6E4 13329175694D7869E60B837C4230269922B681DD5588EF0B0D77050B71D3258A 89DFDA0E7B4EBDA9F050951D4573EA959E5499DFB5BA7FC894229B26DAE9B82B 8963640EBE6E892C84FB3954ED3B0EE64E273761B4CCC34E06D88C630A92A79E E2B0526201FCD0835D5760F680BFC51573894FF976BF8E6DE378E3B24261C8DD BBFE0C9619F2800F807716E9353489EA192157AFB5184B4D4847157491D61C9A 93AA2DA0B076444CCE6A2065BA5708FD5ABF50A8AFA43AE65982F596CCE43B0B 550C4D63590E0B8C48884B2388B1E3A050035DFDEB1DA220ABBC945B542E4551 A039914EF703EAF77FF5A8F53073775703CB7681AC0ABA95E1CF016BDBDB0277 AC407281BB4A5DB2FDC550DBB92130234AD7054C851A56EE0AD6827B89BCC5A5 2748735C0F862AF250B55D2CB737DD5B0572F7C129C09828E4D71419C27B59BD F9AB2A053F432A956EA9E6801986D3B1E55A80C4397E458ABEDE8E9087B07FBC 101F3BD84D24C5BB61CED41E292B9CCC884681A3072E0D420F0EE2B1129FC5AF C74D2A359AFACFB92A1C849559DFBF0D09018496369B5377E696C1CC6B9D9B67 030342943DBAA19E677DB0A8DDE0066D8E6896CBBBFDEFE13EF9E5A85D2A9ED3 9540316EFA056C11A8E65480F85A0CC8D0DE150B8C7D22E45DE10710952C3974 C9D6026A9A6894C1AE2C650EB15EDE4E87E4F457FC7B8EAD32BCC5FE508C9284 EB456AA6FB8D297C3F5E71AB1526956C66CECD83124EC68AE6546E9C3BBB42F6 045F4A6A557145FD982F599F8B285C0772D6F1EC2F73ABC61E7EA0E6A8A4D391 B5CCC56AF378E9CF4DF4732548024D51CFB3DA18D78747566A7F7E9249834BC4 6557A1CF2489EF195FAB236BB48FF427FD32E1903B8FF82EBEAD2E1CC6D54821 FB3F6763D2CB4E6E383324443D1CB3295BABE7328B9FA95813932A37FFC3A9EA E45196FCB6236C73CF95FFB675510259939F4525B298B3A69D0B52472BD31D45 24CBED3F82F7477A180FF3430212B1CDC21EEA48F799B01B763C93CA93398E46 360707E212942E17BF445D2E054EB9C35B4204A7AD6E72CAD1DE1589219E6530 7E67859BB41148903CE77201B8FEE094EB659865F6A20E3DDD920CD27B118249 FBBC11810A14E60E8C09E00363C039AA0360BDA398F3C65085905EE781AD5726 DBF612DFCAB47C9E9E3E516CF26F53B6605124DAB8C876F50973BD3038B03EA9 AFA4C6769405477A68BC4D7900E1DE54207FC766AD11F19A64AE8D9A2C058BE1 E89035EDDA2E568783B36154DAAC4E3A980A38968FF9B81573D5C2B3FDC093F9 A98050E3E1406E2FAC3D1F9D11BD6F511B1A044D5D62329DFC901E6F962A3DF0 3663AFFE48E0154AC5AB244524B79B5D5649A2F9C2223DD97594E3BF55225858 1E8173B8A7BCE623F9B641AB8AAC88B9224622E102CF2D091ABD006875F6C616 FC7220BE93F77A11E729F04733D12F8E49AEDA23A449CE772971CDE7A8065888 0032E17FD396B162C22EC213E0D303297FDB3160B303F1EF69851506E3332994 760B7E59FEEC01445E28C6681E85D90BE5680020976DFAB52AB29EE292747C5B 41752846FCD3C2E0A2D0F0E8DE92D16B1B5DD41899AAB80EDCF2487E1A986E59 F7442F68B05C8E1FF12D0D0CC808ECBE51CA429D9FE388929125DB8F03036C95 39BA0153733DF29B00DA9C96303D265CBB80D314EFEBD2AA26FEDC7328937612 BBF2714552B94C8EB9A567928C0D275C72AEB08638DE4324115AB9A451ECC6A4 F0E47E73CECFA0AACD1DD82232540A7D1FBA6075745EC8FC36FD31E3BEAB060C BF19783B8B65519FDA47D5BEF90ECA881ED512D200188ED498781F6EA83DC1FE 95815D1B4F05A33230ABA8A1FE53E13F35B92C1D76E15265C1B6F69103FA33D8 A90B1176439861ABD9324D2AB91EC9A216BD93472BD9162F9B9D1C0FFD26B185 A696D9C1927ECB9B20F1F7E1454AF91F9A4A3D129C4B034BA2D85BFCE6A2A1BB 97B5674A51D56C6DB03A8F26CBFE9DD301513B2671F0BF7B074C4D159F9FEDDC B1225B515C1088056A9D81E6FB640FC7D37D3B9174FB65BAF5AE5A5906A5B250 B7B297C805A087FAEE9D888E0844014C3E4931F29D4B75F8A31C02B0B69A56FF A2FE418192D1E3E30FE8414A1E1852C8CC2EEC091F635F6A76EF82878A260F9F D9CB3BD28EED2307F1E8A0FEBF82E7B2862E176EEC2947307D81607CE8761480 6DB2053DEEA46B9391ECF931F0F9BB8BBC097A37C6B02AC724D839BD5AF43C5D 7DB5146B769DD171844C8EDC0C4F93A63CCBE7519DA6654422B1E4049AF6E96B 0B23AE5997644EDBDB0C139BD45CD8708824AECA2B07200CF7B384B72D23D60F DCC3A98CEF3F6F4744276C714C08B835FA11619580E8E0F433E8D069636BC321 42D6BFA12DEE9F2D22293950E5097AE72625C6A8BECAB5C0656716D4AF11C755 298500684671ED70FCA40239AD0A04F4BAA1426B5931BA1196F1C97C765B1C05 602B887B8482F9A4134E3F0C557E1420A9AFF802445DA1F631B82AEDABA2B98C 716B9DABFE8E40585EA65D7910A2965F99C5A63BD178E607547A12D60ADC5DAD 589F7EDD6482FDB2113622C07B0444DA233213846A61C260DE760485A35A47BD C020482DEB042B4D7295A7F90032F7228AA7529E7E2C9BB2DCBA64D5BC6D5419 41D306C16B0DA13DBC5EB7C6874B5362A6300CDDCA16425AF32FDD997E48429C EB4B6ED76765939DF0EEB4DA1C58D79BE11980B636C9ACAB2776D3549CCBF157 4D640A86E1B6DCD14E56F18B0B30CC1FEFA6199BCF33C80FE48EBE85BEFA1174 4F52F67C06D192B48A79BA47D4E6790563DAA2F1B2967B655FA0111741854C3B B53410C582011F89D2BD1509718DED0DA887E39D1FFCBA9BEFF793085A448AAF 2798D65DB0A3D66D235C00A9977F2D3D3E978F4A03FFF783BAF0C33949D42541 FB24EFAADA5632EB66A1CB60E22C957B13C7E52D8F49B5C99A52FCEBC7159E33 749A4F647936CF51D5EC511720FD6DC01A4B0C2D3120D4DEE5E498412213DD20 5C10975536EEF28F9BDBDA565779E3C9F1C3A087295F6C1D4DF2CB44104BAA81 C5C8D6B4811AF48F65A3D5BB01B982423E372D612FF20012B0909EC8E41DD25E 9B21963AF687A9678FD79FB8953CA5A1E38E709457C196D3D080BD764E898617 F7EDFF583D9D75D8632BBBC57982BC9BD23BB6D9E6C06497CB4C01625579ABEF 1BB42CA4BD7261CAE0CDFA67F50A1563307DB14C7D3ACD49E59E3842343A97F0 A5C45A8BD3D80A583B90D88D8829F27B093FDB2E91FF5ECDEAA81DBE611D93D3 F4FD48F3B74EFD140EB1EC4BD5A463DCC84E2E7B157C778368E46D81A7B29F4C D4794473886CF8E2CDC60D2FAA4F537C969175E3D428A3918CBEEF307B34E981 9534B42005097443968D4291F3CEA793E707B37CA63CB2516E8575B8FAC0EEC8 48C4CD48E2819E4DB18E428BF7A933753845B5ADFE3C0662C147667BF0FAAE19 3B6CB8CD20C9D1B5657265EC8F04AB427FFF352BC8A343F98D1AFF1EB6EC03B2 FEF15CD3CE27135CFFBC2EDBF29E3918330D13516DA2FD899299F4DD996083B2 AA5CBAF791C8BFC31D25EE31BD8F9E1946FCF35DAC9ECC347BC33E82BE5E5236 27E424FC8F18B01BDDF1B633C8BEEC69B772F2CFCB521FF7ADF2CD57C6AE9FF9 B39BE3E3A5CCA2DB161A441246D970484B146B3275557216D001553A58859F12 9A102D85699E24B901FC3B4D93B84F83BC0DE7AAFCD886703EB065BBDE63C83A 958EFCD18D53136A283E821E7AEA7EFEFC14602B1E4C428AF80AD991EEC31E69 B0989D19353B1818874BCD39DA51EEDFE7EA12375B6CF462385963D5CA49F7C1 E8DE6BDDB7807C3AB5F232E9C8B242F09B18EF6B7C4D88E47E3BA33EE16E0A3A DBE6CD175E403DBB1EA5EA1A74C72D749D743C63203050E87A60C952E9925ED9 9C509459F31F7B69E38E737EC96EAB6B2402F689C10567BB758B9844623C96A5 9206B8B17A51D67745312CC02028917150D16CDC362E4052C6F5D4405B686A6D B7D7CA7E60A99533D0AAA5C0797BDDBC078997FCC20645763F4B5F9E4BCCBE92 E2E928BDFCB3EC1A9941CBB04D85A0BC386A612A655D849A34A76E3E3E1C91A6 35ED8D77D27B090DAB616F8772481C57741CD4A3803A35E863D9D2C4863F0AEC 305059A8C70BBC916AAF8A79077287783F2F01C0F676678D6EE8D1E7F5855D48 958D0C1304F94B4FC6BAD1FC62DC3834713803B58C680E1AD81E70A09143509C B79A5BD469AD6D63AB7C8709BD8457A635E85EE5CE2B81B565CAEA18E6A6F738 9E40522E0D7B3CD35B68CC2B88FE81279F379DD01643DD52D74046A0D0FCE216 BCA962C1D10BEF7FE76C602CF2F8DAE1F7160555A806CE3F1F817A3694A2601E 443A85C32E47393B3D4C08ECB5F507C7A12536B89B446569E5E54512A4897EF9 84513C8BA4B9C8AF4ACF81B2BEDA480003360DD08DCF43DB57EBD401C9C7C4AC E08BDA494B711F9F2E2F954051D7A759BC73E5446ACB973F2EB4764BF8227DFB 08BA8DCC4CC289E367EB6CB79B8798FEBD585E4C3DEF59834570935A6A3DB3DD 9630020F4390FED9215ACAFD4683FE82E1F67CBCA8CDEDBDBEE29776AEF92743 8A28B00C873FEB39A9C693770B410F1B91F631948247658632896F821A43C3BC E0E9B92E8017F7E5138F1A472FF1C4BBD64F1642A5818F138B35EAC4C7C1FF6E 917F0AB74AAA9752283E94DA08563A52BBEFBB97E43121E5FDD1383FD94177C5 FC7B706A19FF4B8434B33D603E4F05B5FEC2D8A6315D2CBD03527403FBB25632 4720C539EA5DC49727BF459E73770E64674E49FB76DC914572E9CE7B0CE5EBDD 50CF330BC6DACA9981FC741455FFAB7E5C4095B0FBB4ED94F327A5D0AFBBFCB5 5F795A9DB07C04BF326B8C95A73BE943EAB0203DD488FA7F6167CF77638D98B5 FA44BE3FE030953CAB6CE9F0BD0258FC6862CE8A29D16528CA5597E7997B8078 70534850BDC3647ADD483C6BC7081EFC121819CCE63A080642ABFF4A223C1CC6 A866AF0B64EAADE21E55123A8181A1C7F36D5BC654C6B31231B6839FFFE492A4 E5700603C7B28333967D1F17875ECCFB3590F84451374E30A8962EF0DB618EEE D15660CA35168EB3531EF23370A13D629CD1B601178A2A78FAB7EF75D59BD3B3 3C0F6A0A2483964AA9621848310A1BB3D9AC3EF682D6B2713F821DEFB9208388 09862D1F53E11B5B822A4F3B02AC5C6CD27B7EC5C20CB2726E811034B360C16F 7E0B3CDA6E68A36944337E9277FF66379D8CA2D67BE9BDCD844B6FA85DB222A5 DA51BBFCF8656D5038CB442C49700AABCA3EAAD9AA163B43EA2502CACB0FC4C8 FB9E6520CB42F5BA1175E9E56A13E4627B81FFF8865DAC818B0A9C2624DD436D A2E91BB348E4754020ABA942C7D521B1052D8FE4ED5B5680DA3E33F08B0021F4 8D62D2DE042B497D8DD8B37CE488FD543A1706F1C87BC111CF8AB593E35CA099 4D2A02E0FA787B6C090023AC5F62F86E1591E37EA20006B9D3195D8C047CC5B2 A120139181147628CBEF57F3FEDFEDEAB16B4B7282DC465FC53E50F199A79B48 8D966083736285148FC1A76382E4991C7EA605B05AB1460C2CCBF10A2EBBE340 ED042D2A9D2092F3E91CD4C7BA6D9E60EFDA103206E67C6501CC95062F70ED73 3A591E7FC37CB5A10C92FA2808B494E4BEFC956FEAA6EE82F8D03663BE9C9139 836AE3D1F88C0B7DBD8AD9FF3BDB7F36DE336D4C0774149A9810C27B3A2EA083 BA59788788002481964B952182374BD1F9A72545CBC4B0F53EE7411E35C04128 5CDE87DB0C69A2B8AB74C702A74130B302A8BA4B85D021BD021A68C76357505C F439AB81B5FA7834BB48049DF25EEEF85887AEA66DA7234F11FEEF9E665EA2D6 2F896E5720679F8546C80B37FB91AC7A1EE7182851B3F20BAEC72E1C74E18755 3B908AFCD384F44E26674D13F3FFE746A718A04F7C92D0E09C21C1AF7267AA50 0C7C0438E3AC17251A08C4A39142273868BA91E4B9A41A159E6C7B3EE1B95894 625F2AE90DFB33B36425BCDB41AC15EE4588EF93C29E60071F247432C76BDC13 7270E92989CFDB470685F6B5D187E15C9078E09A0CC2A46B9229FDE4EC46B236 4BCEC1E9E0AC88617DED14FF9ADD9B3C874541E226EEB642A3762A382988A15E C1BA3F257880D0B0CA7912BF529F626E76D1B242833921A29725CEE9A66C0068 3232BC8A3170DC768E8D9947B62742B9342B01AEF38E8331B997AF996A73FC48 C8A457977CF1B4251E645F327B1CF9376D15ACD06D5AE59270E7254A56FB6852 19CDAC3B14512CAA4D00823B693A1FF0C4E2462E3058DE548CF52047D9F9A39E 109C9CB83E5AAD0A3C958FC40FFE45415B1EE51132FF593913F3BEE1C01AC778 1BADA832CADA92FD40EF207617857160563BEB866C76D14FA651507C6739FA28 FDDDDEA39E858CF7439BE229697565228F4CEB4C94A6878D30D32A00A1E5960B 2D32953BCB686E0DA000AEA0192BD53618AF9481121779CACA0DE4F2FD4CF81F 8D4B9D3846AEB66795F81D6EDBAE8BBC60AAE4540E19A6D2173C22D50F9CAF4F C4373617F5E449AE35F9820A53893570545D5EA6AE1E8B3D7775535041FD7860 FCE9F0C78D142172CFB777081BB039877B98D59C797BB2CBB6E17E42DAF185DD E593D88552CA8605F910FB64C4292052F781FF971200FD88FFA5BC85CEC50068 A91B20C2D4129FACF68EE0DB5D814B107AD35571F3BACD2C754EBC6175522881 25D2168FBAC61AAEBDFC1F5D64F2BBDD8615623BCDAD49F21F7FA77743CC827D BF98D727204FBFB424F16C7151C282925198C644119FD82B9402D268755501E5 7382AF8B16A825AF7368B2D04B77EA16B9A107F6588C346805EC51AA2954E3EB 59F5C44A28A31E7AB1724337C42F4950651DDDC87F5EFFEA1B537F92A3F60058 F99F05AF0E58FEEF778DE67A0FABBD933F0FC8D82C9A463088D46BB24D649C60 C32571EE3E11E17317459D2CB58CB54027F895A862C18999BC0B10B1FA9C0B8D CDC2DE7847F8FAE9CEE8D817B4650D730B52506D2FDDB02B0B8FFE375E885C3A 0F4A747C63BC4D70751B98A32FD386FC8BCC07CD52A9AE3C959311941C77A5C8 6A5109E4F43C7B79A779FE30DE2AB50F4D3CCFD51C5CD55D7C43917491B364FA 3BDC3B24043741B0C5D617688A05BCC8F01A14D643214E3B186E6D791A2AF3D3 A972AF68CF394DE082CFCEC222EC928825CEEFAD02E84F845A5744EB7FB9841C F73384071D6DB7E6692B8792DC38256446FA4CC2D3D1E6F7436C568B97AC2950 167FCA9D6D997218C05A905DDE26DDD283F64E21B11BA2D9217D93DDB0D2F985 10770F9D756090F8D5F3B09A8B917F12D8D43C4B354FC26C8D56F53C62872CF5 E32D25F0A993BC0F2E4F0E2103DA6E729996268A3FE96EA48EB6EA6B9C21D042 BBC55FBCDEF0C786F1CAB555DEA42862F3B6B212952C1D944B010EC51DAEB5AD 6E0D7361AAF600CD2659DC59DAEFCE791D9B0D3B718D45A1F93CDE3B2ED72E70 13EE1705DBC0A8F0CDA57068E671B86F35CEF8161355336342F2B95D4092EF3A D403C417A5DACD576CC9DE10F0F837240B3669AABAC540361BC69F31AE7ABFED 96838D6B70DBF3BE145BC07C60FE6498A925C51471788AA5D8E1E69010C8C513 87C6602BCBD4AE75DCE4BC916D8E4F7B663EFC9939F55A6A8BA7D445D849BCB1 2BD64A02224B841BC9872865F9A4068DBF73AF28DFCCDA23CFA589FAF6483E4C 1A0D5D377CC241047AF5172C4E1A7E6C16750E53E61A74BE0CA3EA6E65E9D53A 912578C709131FEDCBFCD1EFC0610F6D105438CF64A7F259737C3FBE09DA07CF 8C67CC6FFA640DA3D57B3E2D695DFECF53981357BC06FCD7D089859064651EE6 607BA03B0C3D7DDB0EAF225F1F28E0E4B38BBC08C76B6C42C4B1747AFCA9F2D5 BFD0073C03841155CCF38214F48EAE34507272EE5CE69051CA87A6B6214C7A0E 27F9F3AC4C962E920542C762510244A6B61502684BC99F9867557926066754FF D707640D0EE946F98922EC777B3631BFC5230B3892FBA074E6B0C91CBB36E51F 4BEFA5CE13B58B6278D9A5D82C7EFE170EC2BE0367BF8531C7495C37B848DFE5 3E789822DAC88A3D5ED772D681F4915983B3A67D3949FFD1A659F936771AAFA8 C61C3C884F3BEFF84407144332DEAE18923FBD1CCB54DDE059694BB3E46BC0AE 8C5B914EAA3EC71DA87B4E08CAE59E839546E0D89B3287EF19796E397826E7CF 3E966F623FF66FD752460A15A7D85F84DEE0BAA16DBA3A649DD0420B28B4C39F D49F2058BC109C46C58AE2A9CF47FB3EE019BE11817C2623B473BED923955FED 5CC714083DE1710E8648B6CE7F900F15C44344B2FAB16355FBD00ED9D16E4396 36AAA4F49EEFF25401EAC8143E549824FD3949091BD47F24A84987379E3C3526 8378C1BC4A12B09DD99B6AC638532477CCA879518994B01CD21A3930F1D9669B 8A778E0CB2A68114D40996A3CE8E55436C5E8F20359E45A434EA9261AAF98F82 269F021803FB661D4F8C881ADC90A09A1FBB2D03AC115D3421F122D01376AB23 0220BA0DEA220D22E1490FFE1DD1CFC30986ABFED309FE126F0AEFFDD76EA1EF 65DBF44E3765AF88E235C74E5242B02C802E4FDA8147D8874CE1C71669F4C261 E06BA951DABCD307393DBE0F01349B66B8CFFEC90C39DD30BB8FEF864F5D85A8 B46D8A796F5E25D033E59E14EA5E480F34807F92056CB5C143434525B32A77C9 A76C1713EEB2D49C346D4B256D14EA6B0ECE2709A9E500C4EF203E031AA43459 66CC59AB6C19BA33D153A4C53BD6B6037C59BF2C5EBC14563D97E38742FC23E0 E6C5A1E8896CFA9A03FA76F1947FF788C7FC7C9973B958CE08BD2671C87A4EAC BFC023F12BDC146A49533435C0A60D313E0A08173288432DBC2D9DF015547B95 A09D740908831AB01ACD75AA036961BAE0EF713470E727FBCA880F252116EBAB 47A38B2D4901C84496FE92D31BBA8CFD8987FFF5E6E290EAF41E4EE3C9C7188A 76AAA149913F62391663E75BA83A077EDA63A5982C3FE0EAE75C5D9EE8E17E5E 21454664F25BC0684A225B5F3615205A85C07DF069BD1FE0FC10F12CD65CF334 1C656085F29212B1E06834F4914260FF7862337BB4A256EF78D068C307947F30 89C19617889308331CB4B53BA71E38AAB0D161B4112223719DD8D6D63C33FE3F 569132EA533758DB58E180CFBBD49DCD306FDF0ECADE93EA5495F03AA370C394 F8BA290FE270F202AEF202A6D15311D2F6EF4D7240E86F95224F6B2B58E0F81F 82D037BB45D290EBD666AA3A3047484A4EC3ECE51978D2C860FAA066FC97C07D D6CE20450B310D93EEA5A306DA97CD6FC055ED1BC298F994CF8A92F2F8335EEB DAAED0BB928567A3F61A08AA1760B22413020CAFEBEC16A4AB9FBB6C0FCFAABF FF240F40CDFB5AFA8814156921831411912E2B8529325C35E7EA940610C46CCE ECC4090734C7DEF297B88B4B4119BD386E51730A492D9A53996A5E611ADED22D C6D38152834AD04CC9996E2FBFA34C90BF57ED326BCC7AB3010273E5EE8F1EE9 60184E436768D65329665FD1043B419D165C12223A22242D03BBAF6FD6DDDD5C 25570137EB04CAFF3B54198F049A587AEB1DB7604A79F5F25AAB7D457910A1A7 A5C57B2626502F2C1B0A943C28CA273AD4E8750452FBBCF0DCF9A3E5A40DB15C EA31013596481168DC5C66DB2C1A5C18E8A6C8DFCA1BE89FF5727CAE7E9C5250 67EA84EC9B60DF4CEFF2F4B127D9E6B000B543048D67884E11A41EE56D2D7736 E1867FEFF8C8B97DFF3749A6C583AD095B8EDE970E3E2011996E4158CFC4E538 F2951A95B1D9B7D778AA7252BBF3AA1FE817B6E1A3F3831F981DBBE0232B783C 4BAFD6B0CD 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMBX12 %!PS-AdobeFont-1.0: CMBX12 003.002 %%Title: CMBX12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMBX12.) readonly def /FullName (CMBX12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Bold) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 44 /comma put dup 46 /period put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 89 /Y put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27932ADC486BD9CC130D94BBD05 43872FEBA04FB8866ABCB4D379696E73B84BBE98FBC4A16CFF22F8A7AF754624 2912C228030FF7EF23D51DD61BEB5171AD31E2B630475E16B6E0F3C78D44AC30 712D165DB658FDA800798803C3CD32B841E159AF0F748400314FAF5038EAD574 57D57A34CABDBE4B8D145E439A11585A0CEDB161559AEE6459EB57592ECBF980 681ACF9AD4AA4BF09071C600432BC884639C5F2C3AC4B53CA6285AD78B3070A8 4912ADB3C55A03A6E1A795BE1026EBB6C6E90DB03B110D3F098CB97BFFD836AB EFFE06DABB1B3AF419BB3E10009AD2DA9CB7B01EDC45BD60B4BFF2C7E54036E8 5B6BEF57D32A76AADAB3B1683A49F317F6ADC62E5AC8BA5514F1B560FE8C3394 7B6536F37C106A2F7A346EFD1B0279949DDAB840CB184F55E74A1517222483F2 F8DD0E850E93B6F294F711DBB234D59406AC5BA131B55185128B95723E5F064A 8C00EF33860A0467B3ECF05E9CCAE87111A62D6FAE5A661014C7D1E7292AF006 F77D59DD6993FA330DFF85CBDAC37A18D22AF83571E74E93E55AF28C9438D71A CF5AADB51C830DFB43104B9094BCF1241DCF70C3481D70B0A96718ABA59A9912 3D012E528626FDE23D941ABACDD35F58F19DA750BA17D5785FA604F4D91FFE46 B0AB1158E2E16D72C6C1D563E647AAFF306E3156A8DE6384030E1F83FA970026 795E8C9905CCF7E0C355BF05638D13FA6B0DF34FC42F166AC2B66607E3DD6A0B 0F19D8DBE03FEB652D9962B9CAA991223F58B3B945FD7E893EC56412F1D6DCE0 2BC705DC83EA7109A632270F024264A2DA7311C4E185AFADC8D2C6B58C0BD2C3 4B38AFDB4EFE7E6E03F76E53C4B9751C138349D42FF32951B446AAAF50C4A9BA 90650B757DAC00A06C047685725F0D1D8E0A7534B26261AB4E79B5B88182AE6D E6FBB991E6BA763687CC9FCBDD922BEC387620F818A7389157AB8D41792E7CE7 649B1FDF4B05EAAAE1B7301710559EE1E232AF70DD2E137157657237DC466C09 183D1EFD1439003BF9D14D4CBAD51274816E094ECDD8D4477FE9D58122AA92A3 1BA2D3F48A9951FDCACEC51FF9835B21C8BC0E1ADDDCEBBD3FF56BE075236F90 31A61C56B7AFDDB9AA121A24F1D48FCE58E1C584F05B5556592B80824BD2F9E5 88ED93DB19CFE5082E12B3158444A5F955A2392D840B3E52C74651ABDF75263E 68C8B20F6108EE6EEBDC836838FF413958C294E140FB3679963224E6288EF036 654CDE66C9FF8BB505AF95F29A5EE796B58B7205698375727743A69920D43D65 C1F9F203722B0C6F400BA4F72AF4973CD6772BE36E304EF8983793547EBCB7E7 5B93EB6160FF8860E4B0DC3BEB649C7D8E8BBFFE919E67661C00A7AAD0E92D38 5BAB4A07BDF83A31AA8CAA6B995B8B7D0CF168E7488D4CD98A7AC3F0A03E2BD1 0F6D9E915C1511976BBAE3C6000D428A52114A7DEBE35275E642B01C92BF9F8D E48CAAF7DF91E17359FCB334E5189359A26848FB3D21368120A93965C5E695BA 49D584FFE6A7463499E10AA7D453B7B39A4E69395C9142150AFC85B6EA0D59D1 D2749DF1E7B14F7C1977C9117A1D7295F527D4FCAC5610CFCA887632DDD84014 7104D659F4EB53A4C92D553EFED124192BAC43D6BDEF60F3CE6A8F7E1946A2D0 125435F0889CD55C6B77B5BCB9A76D142E802B56CDF2235A070B88AF1CB857AF 8B11DDE2A9086BF1D250C2E355A4C72A20956992B43013F0E5258165467AFDE4 9CDF57B377F18E497004A59EAC9D60F72C8138AF828A73AB373D97AC2654E2D2 58150C99F15AC779ED77FC223B3E7945A29C8F12653ACA9A717CA5FB39209005 2894F70E3D5F027319264BD398F94E4445E4A4D54E3CA1EEC859118192E0118E 78F9ED10596D2F87816D710DF57315BE9FB0BDFE63E74E4023A8320DE5CDCEE3 44534F95653A5109043AB0AE1E838A85538DF788BCE8C3603DA2A51909B61DF6 046778206655ABD87C14583EABA345328C776F58DBE125AD481D4E922593B8D1 15972DB2E1C6BED5870572216EDF4C19D7C12ED2C37E49E6E6CF552B0E9D9EDD 4F659CB21F3EBD36F28275D69105BF903309C8A7B20258A9642B0541E033646A 61601867A46F2A577265222BE3978E6F84C29576F2DDFAE642CB5F42DF45FB24 FA36EC2575A286E4CDFA7F27D535E408716EA40BDCFD7096A5358E9A98F123D7 92E8314B8D51D763A84993E7D45BEA3195EC3DAB2998DE69CBE2C92A15680F91 76A05F32B384AFF81750D6A1662179FEE5C1CA80AC689148F3D99E0726D68566 2256010D2B2274742DEDEF94B338525FEF89E5722CAD34EC2C2BA8AD1E7A1CC4 E5B71EAA6D0069DE687C6306C3419A4F9BD7E5C9D9BB215E410FFBBD6436B57F C4B18AFB2A3412EE490726FB568CDE52E15CF7F12B360DFD08F6F43F295C4E9A 6FA45D706C707B37FF0CE27BCCFABFF5417DE624A266BADCA629870EEFB43B41 C5859A5219C9520087C213583AA21695E020B4A4743C06F3A1557AC56CDD305D D68D482A6D43F8E9E6135EA1C1F2AEABF167FF4869B46F57207502A39DFD1DC1 25270E5A3BC02A042E2F98539F53A563364793966D809E17DFA9C91089D7B8F7 B0169FF8AD8D88BB5903406070AAC303369FC4B7CCDC42105A69674BADCD17FF F90270B5CA84DE742E5593596E1ADA971066DE7A9A6AAF884C9312BA73313289 28F80F803BE810B0C62278C925B41E22441F3018DBEFB30E9AF1C11712CCCB23 E392DF6721C557E3523478F913EE3CB5CD1A0F6FD60E32D5F00E281B87E1846B C629E4896288B86097A2F02DEA398F16E09681886C1453CB71FB4EED50EA998E 36F164980A2663428298DEEC9851F7174394DB1D21EFE96A3960A7BEC512162C 72D1E85E823B0FE1600C36971B94A505A085E3FF9BE58FB6205ACB7353C03FE3 71F64580C76AE11F25425D9C0682F42E9316F5BFCEC0F5D8D9D830FB41AEDA9B C02D1A77C1CE5FC6442311150BC3E4ADBFD779DC186592D4A548634F07A16C26 B79B9D641EF2AA8FE056AF840F16FD232AE1A530B8D23B99D0984D7E98C90B55 CF4D97F40CC83455CF898CD9A6F8051C30B151219B60F9468790F0A7F4CD053E 542E1EFF158D94F4ADBF05DAAE0581F56E0F5C8952470EA0D1245680A5AE661F D2C83B8D7339D55401690648D47AE9828D233DB32F6C9D9493255E9BAB57C9D5 3D08E5975F1A844CDCAAC830DD6D2B99C6BE2D2690726A913FFC41DB353B905B 5B6AB3ED132B53F19F52A6F82ABA5077E0E5E7CFB1087A01B311E943CAC3F44D 72F28E989AD53808A158A37E73B8E5AB83A920AB36C07BC8EA85A9C78B12E68F 359661C847BCAB2A6D223CCC012528D868DFCA908C09C0FC39785CCC20D87781 F165109222779410AF291A3655E2E8199314278E52CF03F93F02502D878583CB F75E27B85DFC0B00A2D475201786A32059E04B7F0FAD834A622932600BBB4747 8A62B566D161E96ABD0195F7164CD84632372541A039E98F75B5B3947281F5B1 FDD2A16FC8A06A9D16A3886216E1B7DA3EB4E07D25BA5841A21E926072050BF0 FBD35652E7F3E33B911280C1D2BB6F62CDB5F5CC92540E34949B0BE3E8591084 6946C8345A0A04BB51574D376C0BC65C7A10F2B1109DB99E62B75B591830BED5 295C0204A5199E70974A10E61F5DFD751092EC081D9986A1D39D9035237AA552 CFF4CEAC9CCCC5E5BD17E52E1E80CD0EEFF7F54A9F428D2D6EF035C8434FB215 1F64D22D77A744D02291B06BFAA9EF6602E0E0DCDE7CC0F45A778D9793FC5281 8D4269E2F9B61EDC1A3B8D8A75E65D4DA5B3EAE95153EF55504373C24C43D768 A6D1E210D22FAA4D08F99474BDE3C4E0CBEFA6AB7F6E0153AFE7B2D3A6FC2B4A 9C4955C15873D2460C94519A5605040F866AB6DCE24200ACCC6A7F685BB96737 5F82C2B20D6D33E8C482241B82BF228568C542758207B3F26BED5AFE57A0BBC6 589A676A958E8B444EB839F1508FD1B8D995969BFA5D4DDF345D536F24DA0052 6C626FD8800C04C8E41A523B9DC0C4EE10D456995C2304C36CD4E867DFE91510 36D534CF0C8E60CA8DC1815C6256484010BED831F0CB0CDD8FA8303A504B7BE7 75C5DCA66AB89167236F6983219DE903DE58DB7EE2F04A501E573AACBA610D77 F4445E54AD79B901DA24C399DDCCB7AC66249E53DB1C3E8AB1B7CD20F0183412 D10E911CB758B93D6BABECCB29621EC1F1487183603C68AF7130E06413CDF3D8 9E7EE2263B5D753ECB3795E8E6ACE1BD5EAD4E646F1D76A482BE76D09DE51427 EB3CAF3876095E404BBDAC2095D8BEABE73C3E97725C34EE9D4449A1F998C318 A85F8D78F772E4F67B2F84368E1E77BD9B9610BAC6FAD54E047FB71F824568A5 7AFD5293F486E26BCDB1D39972A30C87D4385088F7D5982D9845F8520CA165F7 E78E259C139520722D213C9BC811979E84AC1C2054C46D560135F19B87D7539B E851A4F76AEC7773F782CCDB2B6DABDEB5711E4CD431A86F5CEFEA6A4C60CC03 1A1034EE91202F9941FB29D9486042B3BF9A70F9FE0B6D85C50D9B96BE3EAE92 03331644C25882D3CD9E082D3A2A52798F51DD903CC927AA44C766B782D5A9B1 54EC47ACEC605C2365E206980EB767E1ACE381154509BADCDA7C1EB736DD01CA DCB8D7F7F235A8C7D2E34A5C989C2098AC19067AB250D7C16ABBBD2FC8E4D79F F07B9CD3667D19FBFF96BB389F3F753645BA0DEC0A123621D506BC31E9095722 10EDEE90C92670CDA95C17E4D7CAB6337C8FC0F20152DAB6D3BDEB16D336F478 FE9A56C823B84FB62AB0AE6C4DADF7A0E7371AB52354A1DF0E9119746808255A 95013629C536E1DAB1D4288171244D5F5135003EA03D23E222E805EC2E00271F 9894A9E82B1F9EB36061D92836F31DE252E30954AEE7CAF8DBDD66114FA2B2F9 9CAC74B353B7656E05835172735979E7DB48681B641A7485F18E460398028B02 AC62210C0F36A7FECC771106BCED57DF6334EE566E0FE2BAA03E6557AC99D81A CA025C8D1D2719861FB05F3901C313AE4189A403BDC9A7D648CAC3561612E0F7 3F668F58CCCEA9A1C6F4229D575B397FF16FE843C9875D7007408CEE84F6EB63 5DB941E9AB63B18DA328A44D401AE71A13CA2164C4A5BA7BF78B0EF2AC20EA97 780F5BE7AEDBB15A4D135BE7B322254E32EAEE7DE78EDC69872E6AA4D15BABF9 EA2D5723EE875ED677D294CE2A476731E010D3C204CA8063D56F1EA7FAFDA2A6 A906C3F80DB19183D048D140AE163BD785E3DD7545432F25FC63D2368E506EE5 6326065BA138CEFD02AF2055D38E5918CAA4BF97C94418EC6F3E14F70140CFEB 432923B2EE162EA0C3DE430E908DF4545B058ADE35FAFD0C82AD8018ABA534A6 946ADAB80E5D410F034EB0E22938953E2A1855387CE4FE9A5AA9CE5A74864B19 E0E9100B09A76442AA75BB5CB4F622AA74319EDB66E30F16CD3FD203362935AA 180EE9918F4CAFB782E0741EE6196B640E3F0F2AD00B9E9EE198C85AFDA53319 180EEA95DE8A78F9781B9787529A75E890E9014A2AAF772520CDEBD3DB92A429 E125581B1CFE03FB7570FEB4F821AE0889D05B9E011643EF88E888801FF81457 ABFE4B89A160C84C69B129A8434EA9F396DE4011A4E89DF1D27967646FAD2339 78A9F37E1F730EE96EE3A1D98851C45C5F16122639B326DA74B63F637084678B 30DAD882C0F0D25AB93A7A4DE413A41381A35E2927D4444257AEF9ADB5260A35 8E74E6A8CC720DED20CA0C1539FB47F96156450C57E7C0FE5DEAF92F47F2E0F5 BA9FCDBA25BF9B8326004755A4F4008EE63FD7789666788AB1F3613AE5ADEC78 0A5ABC85E7DEB5508BFFBA9279C50EF9D5E9907E38EB0225C7562B8D857548A3 EBCFE3A8F0EF5C3DB8955FB995BA5A482F9FCE4987FABD8D375AC72E4FF7C774 F48C17F9B55BF5AF12906AA0FAD20934C7F080C49BCBB3F321A222ADEF47D283 859755588716B89EAD7AB3AD5CF9E0DCB524EEA4A6353BDCF51A5AA45F7F830C 606181EA7158FE373CADAEA1EE6B0528D95DA03C7A03A1BB2CCE4136198972BD 445CE59483ACD728B42C40DB7A072F6C82C7F4FF01F8C9FC525E4A2DCC965FEE 20880CC3A8543F15082C382C30F4FE654A6092B10DFD020B790B2D74BAC86D04 D16E66EED137407055A86070985E41312C5DE0E899EEFDC13C070CFAA40AA4FD 3CF1B702A713E877B3AB844E8F639ACFBCF275003F6A3A1B5AF4FBBB0AB04AA0 52CF9E7B50CAAF2A7D76AB50236694CE617A75AAA31C0DB404298234666CF92C 9D80B402E7711C7F5489BA6E08CDF0E47866D8EE5F74755BF55B10150D59CA85 3395C4AD476C07C9E3F2F09698FEA720AA3C1B63611CCB1B56193594A24D5F41 E6ACEF5989585051EA8650A20D727C179C17C40C6CDC9A7B796596EBA4BDF916 7A3110FF3D5400ECEB533BFA9D16A931FCFDFC36C1C62F7C09A0AB3E08489F4F D6ED312B44B5A8FBCD38F04C89E3BD0BD14C2746C499B08DB1C2922CD7AA770F 0506823B6007604A490950D6790D024FA38A62762CD693EA10A147CE22107376 AAED22AE7F02FE1B4810A96A3840741F12AF3E57FC5849A4DE53E296A2B78E7F 58085E498B304CC62F513ACDF0EA9EA29E8A39E67AF057CE3735E8612F98D9EE 77EFA7B090BC8169534E3FFE43F392292D231BD04591AD35BBCF6AC5B29E805F 79994B73DBE38ED215A3DBAA3E4FE249E59CBF889E3129C99590536BB69EAFDE 94946A9E58AB3488F0E6B820E64D50D65C4D399AC35894DCFBD1358802F5C0F1 0F628AD4048701ADE6522EEE704105230336F14FB81A3F2D84ADE5EEC2439A87 BA5A647767EB8A7273CBAE6DB0E5DB87C00AD1C8CDF539F6D00DD61F102DA4BE EA6637A9681163EAD32D8913200EA059833DC67AD40A0B69427A588F0DC0A93E E86697619084EB4B3B3952EDC511879FC526C4A702B7E6453B16727E51610E5F BAB227F6C24874BDEFD5428D9254D4A87526A3324AD6F63557F7296B377CE53A A6E27FCFCF9F6170289187C5F9701B35D822E764C1E25296C5747A216384DD55 B641F02F3756BAFDAA08B7D2BB293D9028D8392551F5BE3C9906926FC2F5BE7A 3124813C8AF7BEE14C184AEA21515452C07B0D3D4EA3AD6AB8F9E5B7093112D7 ED9E958AF921B6EAD2DCE5CC74D651996F81F5A5EC55D438C7E4DD3248862F57 3DC28CAE798B543C6B8FEF03B55B158C96340D27A5A57B39A53883D174ED7A83 0A2CBF5DF06999630A74A63B59888ACC88E96A13BC788F02C5433A0044D86DBC 7F8F5D5FC2CD8C6AE4E0867DBE1140B2E2C90F4CEFB00692765854327A9A73CC 9B52513076AD8B265E94CB4B8FC0033CEEF644EDD772CAF83DF7F0949BBDBD2C F681D17D257787B3B93C4FC5B5ECA7DC18466FB5DD0F2A3D360A9B35F39D57D0 105A0A5FA461AA14DDF1A95CACDBB531755D85867336F5491A1B147DC530EA8C 1DF6660FE3558EC163C8B0BB9E4DE424AF228819DE1EB8168C3187C6590372C9 2FDAB4A0E5A08F1121A7F2642946DDB6D1E278B44F9337D31DAB725A2B6250AA 4CDD4FD6D91CC78EC693AFD3FD30F697446B3B45DB48467CCB4903C25B0BA209 24EA4BCB450A1FF5153ED0FF51C4C2767821A63281070E8458501627BDEE7B62 166A66F840493795981162D9C4F19787C4EFF2058CD685DF1DB94102FB88F631 87B546184C81D6953BA2D749203FAC6520DFBC1898DD01D18F7A3ACA2FEAEE7C F013E36C83CE5B56A79FB90E3F3BED6CCBE8433C8A9699DC7CEDB60BC1534271 4CDFE08C178BDF612E4EB8FAD203B08EBF8D43F0762F09E1773715E75138E932 B291DBBEBDBF9269833A2605A3DD5C36804077C7A408A1055EFA2A1776E1F9DC 914C5965795508E5A65D185596A37BF91CF5D72FF27BB20FC9013F7EA391C892 8BC7C738413CA8D3FBEC8E1DFEAE2DD22E768B5D503A722A430DD6B88E69B2A9 1AC29D68B111019886484CCDC696C6A87F1F67462D3232C84F431588D38EFBAE D8C9D1418D81561F75632154173FA6ACB8A8CD8B7DB19B50A54A265C0CA7B0BC DFA77DB810691538ECD0D9615528F7DDD83CD80F97534C7B79ACB57E7DD37038 B0FDED1E2A80716D2687C4ED42669C280CC14A116FFD9218C0FA289D24A03E51 2DF267ABC9F9AB70CEA856A0A5EC28017174BF03E32ED851734DA4E20C282201 3090E1A218C3BF3B1AA3B28732A4D8F552E9A9163BCC6EA10F708972A8BBA763 9D489A1CC41FE78302CFA605583450FC7215E141AE43AAFFEB28C19411D5F5FF 2F43DE7454CE4F6AF1A4CD704E8EAFC757AB202753DDF31D8676730D737F4051 54A920003A0F336567F245356C6EDF40810B532AB5B475E116045C7798EFD152 D76F0B5AAFD5A581AEFDE044360CA79D5F6776D75BCDBCDA149C2CABE1CCD237 D1DD3C5166D7C3782540C9EFD1EB34B735C943A5CC7F7B804F92110A5AA95E7F 8AFFD2884BB7522392AE92A89913DCEA0F28B7B89A244C992A15D0B8881E6F37 D5B1ABB54B970B61DE93578A12D81E4CC21861BCB1D287CAC00502477850CC0D 0DDC29D2DE7B362703D7CB938DEB1A64935B5C07B25F589E3C2369E1CC12CE57 5BE15FADB9E65068B94B16242D3F0181DC92BF0B04C81716F4E197F04C17C568 416ED85007EF4CAB706BFC780F584633922547178C2D4AE60A8D2B7BC2628674 15D8AFEF916B6A2EAFB651697BB665A9D53DD0D0B569F8270C1E35C24DD5D2A6 90257BE909FD3F2FC2BA7EDDE451764CB87897823AFDB0D2109AEDCC5087362C 783D3276D3388841FFEFE969601A775CFC5AB41137D5E2B86F30C5A2DE485434 F372BFA764BA67A1B7F54BBD37FFA74A7A927C25CB63032C194F1CEF1D861829 2EBA90769496984256A7BD0F2A427B76964882486906BACCE372616088E59E34 603A6862A0AA2CF780DADBD2FEDD4C74FEEC3DD5E9DE299EA4FE3E60A2EFDF13 EEA265F9988A2DCEF04FC29753F88E30AB8AC6F11935D4863F57BC12D38EFDA5 CB566A8FCBB2211B58B4E99545EE6E1BD1478B3D4191799E3234132BCCF021C1 D4FCD08752F2BF8F4A2A05E5ABD47F163D95CF160CDCF82429A6BDB4F72D497A 8C3C4847EB6F91BDB98786FEC2150C0707D9F1D7E4FF61685EF0BEDA88765072 E29ADDCE776BDAB6808573E82ED790444457D1584004DA42192932A06ECC3F52 42EBC78FAD914F5A85E892FEF5EFD24D011C5F0A177D61688A7877B5EEA3F9BC 97DFE25CC815A67858FB7A11D40EC1538B1879051120FA3A55C089BB9090360A 5D4BA4A68C8F94D99142E37D619723534A00DC29AF3F1031A6B6F9B2B3CFE40F 9E538DCFFA89CDED0FE65BAACCD42EAF4AC81E0E3544C118A4223D87C9D82B4C E7F3D5DF5D04423A3F809B3806481D689AF165EC25FA0BBE9F052DCD8FEC161A 1491AF032649472B5ED62E74CAE799A744EBAFA9EAFD33B09BFEDAB70ECC45E1 461F22F533596013B865CE7C6B0DD363AD150085615C36F4012B0C2367898DEC 6367112417D2C477D1674C091F1B87575F0107DE1E6919A0B3E23089D6371942 93E2454C74599C144AFC5ED60AF6B27671821F08063FD47B6BB88D37B2D7074F D0CCA9AE060E99856D7612BCAAF9AA1F38879B07D1D7F568D872194A862C211A B959CA73B5042E1F024FF6C46D1CCB93179B8EF60B7C003FEF273F4A8BB18F3C F51F479543497B252548A219EF8C3643383362D6CB8D990415579589DB86E011 457535ED6E63B9D9ACC38959D6C68069DFB9D3F72A9B0E0707EC0D6B89A5CAD9 A8D74A1A1FB61788514579DD347B64681BC247B4E2391B92198BB9B7A16C8D5C C29B1F2EE9C5E2484D915EB6862034DEF5D7757588CD8F44EFF325293A8E2CAB 3D75CDF690359CD1BB95A8DBFCCCB815A5B1DB3B8C7EFC795D1F5B07A08C6E42 01C46FC11BCCE630AF5055380EAEF2BBE7B124FABD4702D0C620ABD776AEDE72 E7EE27B34B23CF701C3E305B3D06087658BA8443DF6B6530EE3D2F548463EFB9 3F86D99FEE1640753685D68ACAE49ABC661CD9408D49588161B2B8F5C9760B62 90EF02FCCE05EB43BDEE228B11A0F2A0E25AF8DEAA21ED34907094D57602F530 93B2FBF0BFEEE3AEB27E97D19AB6751A7D7091B58912EB954EEC6FC62CA1FEAB 3F878C9214BD5085D49ECD04D8A811047F9B1E3D9E23510BF03F4D2FCC62AD51 C36BB125B68D83A57CCD1B5C06876793C373FF0F201A83F3435CEB3A67C44048 65D41E0EDB005F84318BE1947C8C66D79F36DECA043975383524A20A3A71D703 613F52BBB49FE292871F5D87F18D24B4AB1D4492EC457856915A1DB3F13A6E6A 445A3CF286DDBFD282FFAA768C2B019C8C329B2E61EC3DCC8D16A5DC2D781C7E 0FF005826FA22BECE6978B61C4BE296D35546EC1D754A9A916C236BA6ABA545C A5ACB0C001365EEB32CA78B773C81EE63299CE728C349F28589D5DD4E9C3A81B 2EE0DA75AA8ED5C6B23FC630C5C3907BBBCD01C83D5F2D07E936AC4B09333C78 6004D36BB2943B4A5B644636C65753899448E04E967A7F48B186EAE079041782 C75552B617052ED972D7B6FC5520266582D1F487EB4EF1A3FBD1E0848C80BC20 066B7443434F1E2CBBDEBA68BBFBC8A38279178D4227821E8DFC21D0E2EBE901 F9B5A8040AD1132B312A6B0EE9D79B2922C972A24BDA1349A3564C3CC5F02E91 E3DB08FB2DA6DE7E255907B259FCF7E164154AB4D72CEC17F2E75085B0D1868A 8A58A959BA88E506D8BFC0A184EC7888EEF77C5E2B5BCD22ACC4E6B00B139783 E39069AFA2A37B2B4967AE46B9AD37659A3AE9A3DB12FEF79CB6AF18AA1D7A5C B2DFE741C367C6C4CA243309056EB3B1E108D9FB6EC8AD273DCD90F47FA5E2B1 AA7C4F9FDC46E6BDDBC9F1322F019F105BE7DBED29488F3CA28F9190095A552C CCF84B07899129672812CB1569716951E8F5725BED497AF4E30359682C293BD7 C6A56260826EED8D01A243CEB4E90F199AC0E13B169DD71031A34DCD0416F6E2 5F64628BE29EFEA5F2D1BB19E16801A3E1141031B26A8FCBE9A743200179E8D7 1119B503EB36E2948DF7FA999B9B727341FE50434ACE2C3C652CEBC5F6BFF03E 2A33576E534068DADDD223AF11E43B8C4BB5D1200B4254CCE5643CBD73398234 0C23EFF923ACA9153E65E63E37274D9BEBC952914026E0D661C41620027B5B3B 016EEC9C0442F1C3C59F8F38BEB118FEB9FCB2815BEA7763B5917A2C6F46949A 3D1D30605B4AE5D3298F4E96C2094D7B2AD397E4931CE82CC820928B215C70AE 5A48E61E9B457E869D2D99E34023553B90836C6A836791C8B8E817C57BAE9348 CBC2EC7A2438FAF387BAC96986380BD874C29EE03DA2C9783C84CDE58F15773C 15568C23154F885838BF4E8F7F9A0BE9E9480D0CE94E769EDA4AB3BDE1DD30CE B2A8B8ED3843CE96A201A423E39E3A45986537A3ADA499C61FC9F5D538A291CC F6CF384AF64B8E1348673CC6B317B02AB47A88C4BAA6F8FFA0FA674F600C0120 98314DEA39A7B5099F513283D572127EEA6439F9ADACCC981CA002E9E9052846 B5B6CDF69389187DF7BC8942408C71B87C1BDB0E500E9B2E4212FC21340045F3 E4C421BB9BE10E4C5802524500F4031AA36935F92D8DA29782A13D8D80AC6A57 D2ECF2235FBCF6E0488C4523B69448D4D6D2040F7204FA910F09973EE65502E6 4912276255CCC93F30471E517B2636754BFEB588A110BB0992A8AC423E83B22B 5591FF12D13011F30C5D8C6A3E53F72195C815AE0E613551D4A5BF7ADD5EE851 78459EFE389D7213812607C981F3F336D3872DC617E687E4C8639F5F58DF1B0D 9F8F89EA14EB56A0F6BB0B40F9E98EF7F1774F756E8A1249BDF018B7C106B6E5 E3DA46DC768B2BC9E6E0BFD0948F28FF5186B81A6D9ACA6F87979BE5B243819B C341C6B5F9FBD2709D5DD4514F55B16EF6C20A6DB1EEE8D06AC53D6A593596E3 5CFFF0EED18A48A8A94217F8F656E7FF0815C7A99DEAE190A46F6705FE75EA36 F4F40100E125A77EE96425FB83E4B470E37AB52CB7E12D57B52C5C856BC1B634 5A9FD75F12854EDEC5B49A4EB5A4506A073971BA96D86E8EFBE4AA55A80F08E4 F9FE6F7EAD3BFE9D6AD23CE23A42508B3D1F0C5C706C1EEBEECDE969D33880D1 DC553F44709645866F3BD1BCB8E768B0921A5EF72DCAACC194A56F970B363E20 6F427BB9F981224745489CFB750C01A3F0B7FA898E23A3FCEC7ACBF263A4CD6B 9BB07614881C937DC99A90AF67A9D7F98D90CB6BC7E68A35A198124F3C4ABBA1 B2166DAB62F411469AD070C81C11D79FD6B7698E45759695CBA05E7B7880DDB9 E4E2F989CBCEED6C0F3F164ADCC88967C29D59FADA20AF5FC2FEE18FD0201DE8 F49D96FE359741C7FA44FDF60BB354DA8116FD5B1910D5A26DA3693AF9EDAA68 21955C318B5BC1C0C020ECB1AFB1090F4584B6BB616BCE5FEF3C0FEEECC545D1 DE92766EC499E8BF2CE72DE9FE7611CAF4929E7B60DBF82175757080DCD053E3 E6E8AEE50B540A0C27BB02D4ECBD3EE8B7ADC3312FA31F6C2586DD03505FE6DA B462E28B67938BE4B6748B6C8C8A773D454C7D537A695EA8AF0D84D846CF3B27 D43D15B2263E8ECB5C3BDC91DC45A4E1A3E74DF11CFBB148472B9B320CAE6035 57DD58C6C05877AC98507619AF78FF76F8C31F04487D82D11CB645C8927D3421 0C9F889882086C4082B91D3737DC1222FCB6304CC8582628F84D7F88411DAF98 D2B31E67725F103EFA380555C09A9C01778A05EAD5549DC599CC377D38AE5300 5AC88D41BDD304409891F0162D3903075A4277813378ED1530310EE75A28EEE5 489BBED315CEE9928C012B9210E7DD4598996CD7A4A896DAE05724EC43FACD97 1511EE90285EDA062C703A602B14872122778BE37609FAA932EF0CE234BB4941 562C19702DBB1016FC64D60CE11C1BF1A5C4CA404CEC577A350C27F87CDBBCB9 29720680F80556201296302B64B82782C34DABC6222A36CBDEAC67306AC65870 B4CF79FBC80ECB5F99121058F1609E1EF924181D1A819602B5398845A70A5D6C 424E3A5C6BDA08FD2937871ED1D82C616F78D56C9307A62D654E2F41EA6CC1D9 595963C8F308A250B855DBDDAD4A608B9A1579756B70E643EE3850010C1D8B7D 35252716C4806A79BE13FE4CAD5269EA3B2134EF402478A5A0ED0A0D27AF1EED 36F9F96A058957C383A19015531250B07A63ADF11769031F86AC1925A0FEE3C9 ABA906808A9D8CFB58C3D09593ACC2B735B956E21B5C1139AB40CBC12F9C3C9F EAF0A42CA26A61424B047531F5C32E0A331960A08BBA8107608BAFC9DB2C76CC 974E9EDA3840ED36B798902674A27352645858730DFEB91DCD0C2EA4514D5D37 B4E4BBAE31D3F6282800B92D9B76AD55121D66F35BF1650B09F058D728ADF379 1D9F342FABFF3EC15D45B8580599C10D0F5E82A490BFF210B8439249A483BF18 64B6CE120278AFF67DAC16723E1A9056163215EA597947555C22C196D92A6C4D 2BAEBD772B7CD296EACCE2555DB375D7435A0AFE58D9C6BC8744DA241A1E5836 75C54C03CC4065A8FA402518FCE53BFFB202403352B6CFD49B83D50B1F1AECCE 2D03FDE4CA913E7CED2CA42BE3F96CBCAEE028E4F619C788CB5AC5436EC8D21E 26A3098D6F093002BFD7E71A8F3A024AC612A38759DE7F0CE54767C2122FC1E2 5EFF6B6A88CDE57566FC4CB6883FC070A0043E847A74307798346E0CDFEE858C 300E92C2AD0A625E2A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSL10 %!PS-AdobeFont-1.0: CMSL10 003.002 %%Title: CMSL10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSL10.) readonly def /FullName (CMSL10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -9.46 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 45 /hyphen put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 97 /a put dup 98 /b put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B1455867E510E9D8A0B83CB645BCABDCDBFCD51A4E12 60CFFEF0CCA548F654037D01CD631FC4E1F97B4F65DA9AE79D99F13A726E93DC BBB027B7D175FD17A704C4668F6F8428262959DACA9F8C687C923CFA053804C9 9B2005FA7E0F07D81E52A9A37AD5CEBA8EA63929093ED0DAB9F7C99C82A50E6C 6440387049A0C359218F5268C9A28F581783BB9D29E08772D7252FAFA6739687 22570150178893C418531769CB3D96F799BF1C6415820F96B6EFAB5344E82796 38A0DF66609F5EA332C1065274EC93027D264B84B52AA8AD82E13E2A41AED340 B240D1888CB89FBB748FD10B214773D466A44AA2AF44371CA8B9A4450DA76EDC 0167B4015A270B9983B89EFFA023A3DFFDE181B90C51D70557B0844362B0652A 6345C6EC83DFEFE099455232455943718297254186940D6305C96EE2B9E3E7C9 A622D25E0471AC31A8ED3AF8897BD19E322CFC3BD3860D8A0634081D9AF53A9D 84F4ED39D8127CBCAF9AD48E9CBD10A67A2CD0CF93D61A5CA71D73ADBC8C6C3D D9E388D86A4BAC64F0C72D81B5302EF6EA042B155D45427E2A28B75CD98478F8 36F926EC6BCD9641D2BB87BFC81AF6BEB934EA33028F1646E09AFBB80F49A382 501E00C22F2FCC5DBEAE35F9210F3FA32BE3B16589B20A16C2E1CEC96613109F 94F168C15C2F926C52162F50ABC9568CF2039792768461F6B5C9E87963E5A121 F114D952CE508922D73520F1EC5B79AB4DD5C9F0F640069E650F9C0948FB240A B4FC01D353718C6FDA13E72505E89E3CB502C07987E9F8DE0CFD71C58010C076 A5C92D28309E7FBC721658C721A15648A8500E035C03AA523C29B78392725A8F AAAF709E72C509210DB0737C7E4D08DC11618B3FD9D6DF89A1C3D902F0BC2764 5549A49E9EBF0B31DA04E1DE6E2BD42F71B392E9A80F80407BB08213CF81DFAB 9498D3F780548FEEE87F3A0493BE20D464E926A1827FA5EA99632EF0999B76A7 32976C66FCA857FAEC97BB2573611F5B14455C432CB0EC061C76A65F52B819C2 63DE11E4A0325F0AE07795688D96E18144BB94C568D0FDA013A018D2014DE062 E8E0B7971B16EDC8397C06604287BF746143F33EB31D0DCF16D659CC02EC227D C175F343A99FD844371159A32794B7827533980D2D187D4257B9474F6506C41D 6D835027661A7D3790F8C59FC2782DCDD735CB7ABB302F9C01F3FE2DD3ED41CA 789FCC866ADEB5C67DA985D95673ADE94AC9764B2AD6EF47FD8D0A24A7511E9E 00BA3BD9CC08700727E6C4B2FFDDBBB9D9649E1F3A258C06C5423CBDBA8B5F7E 23691878C0298108BBC7E61B020ABB184C9D917EE339AC9DDA97611505EB9FE1 DDA9333CB5685B9D4C292B4119B093FDDB3C1F32C00CC9949A3ECF95ED5417C9 182AAA3158DE3BDF900B4700D6431E9A349737FB4234275151C14BB582C3488D 803FBC397FA9D68114924786A8E4A0118281DA9919EB8BAA92B7BEDD432E37A3 8312BDB187E55DA5C4B405DDDE855ADF7B406EFADCE82109FBAA2A39788EFD37 64C8E7977C4C06D20628DE93183A0F62B88ECC3248AAC9A9EEE5E70217394308 039C8A27591E2209E8C134E5D95BBD45440B92DBD5A4B905AF2922663BC14478 6F7799DA30A6A0E944A54A6C148E0644097E10312504FE53D0C3CE16FC0EAA58 4169280BF125B55FE858254DBD66C1FC8B15CB18526DFDF7BE18D91031239421 9DFCB27BCEEA63A7E29506B1C1B3E8A432E70912B4FE6E4CF2D6031830C2A536 6F87B16B4139B9D8E591DC489F49EA0673A6DB11991383F737AB8ACA9C2C433E 6A855C1B0F134CFB8FD560670C896D2294219BF50D1690D8727BA48A63D599FE EE225D9220BA891B1DA4BE86C0F55361AF8E56CCFEC6024A8F18119A2A21F688 A61FEFE80CF5107E1F84B1E3EC425C7E3CD57033086556777C6C103CB01D772A BAB3CBCA65859E76399BCB9F5969DF80E4FEE4F804A7E8B631FE7439CFED28BE 3DBF3902EF41BF139623011012DF0B1909FE53FAA4CD9E8CD0E5582F5590073D BA2FBE6D848692B05EC3A5B43FFD7EB6AEA3FFCB5BE6664D4936258DBD84607A 6C15A0BE197575B5CBC7C4ACB5EE8FDF125B01336E2516EB148111C863FAA96D 43398B332FA3299DFAF393A5CDD5D566052A1F6FB1842065FDE28F1C6756E3AD FE087DF02E38732963FD78A75A307D33CC1A1C4E227B1C626EF538C30211F2E7 2DA21239D7EB2B133298B19864B59E7ECA955E1FAB6F019E48802857BF73C179 1FC71444FACBEF208D3545D6E5D538F5538D6A3B472C4F08824BFCD397595C45 3BC9ADDE8DCFFE524AE8508659F514FB5FC7D77BC569424065880FD8C401D63A 81F9232763B7453882CEF6CF90EA2A981B60BA420C0BE853C7B32107F46DC7A6 B5DC2F23AEC929DFC0B383994E440F139CE756F4F61736863B616D392A168005 6E935DACE037159F2A1C23100AECDF1E6A86231429A1A3642C654116477ABF49 218559EE3C3393BD4457271427D791E9A8DED9AFBE9605E5613271ADE5A8235C 47E9145F1B4B8184AE50F0979F110128C5BDA54A46CB32707B1DA7DFA0B74F31 F3CE304DDF3ED459FF2601BEBF37D3B12011CE3203688663F39D3D0A022E755F 7C6BA39C2EA012634F6392D1C68EBA82159143E5B92E4BDE0A9B277EA8FAB0AC BB099FF370DAAC82A0923BA2FEBFE2B8CFFE433FE70B5F6129FEC95A6870B8ED 0F7A4225684E69538BF0D7CE8026517D05DEFE93877F73EC803BA467411DDC37 ECC4622B3E0E15A168E0278D76950FE9C284CB566D8F9C22C80BFD665A9CF5BA 7B9805679DFD50234F78CE49D7E8ED29D09D8A4D881AC1C5A4FB17DB4C32B06F D147A2003BC92295019390D74A7620FFAAA8CD4702A6418774B440F7736A4B74 7DBEDE25B1D552D6DF0C278DC2AD4AE4BFF8CE835EB9F13C846DCE264D40BF5D EACEC137284DCB24BF6A4C4CEF98D5ED1822B7A693231CDCFE2EFB95F40801C6 F2B4195E723544026E94ECD6B3C99F8B0975200FDC6F81841A3E14F546336E24 3EC1AAE6C3E22A1515E429F6688B467820566463E3108FBB0F5806D8211F1D27 FBFF7659316BD1148185C77A9363999D06D93CCFD86E7C5EC830913A1B316611 B24678A78E7352C48C374BA974F60378F312EEB055AE523232D85EB43334CB19 9EB5F69EA6FD7C7720DF0D56410E00EB238BC1DD9AED3747AACCAC094D7918C9 0038F6E0B9EFC8A034E74FBDFBC112AF25DC3F0C2D5B885B80BC141EA4CC5B14 ADD3956407BB74641659F3FF632CC67AF8816489C8D9F79C3924F621B4658D52 1D298131DE98303DB87629DF82CA16A4428AC05BBA58D2AF843BE0203EF2984B 9BDDCA03A54FC05F5C8BCCBAB5F5DAE63436F3AEFE2B09018E2E89FB043D5214 431BCEC6F1C4E5476CA69B7A3FE7EA256624CB5ADBFF4A3D6FE386F872F54107 9C17ADA22072B6AB3BCBDA76CE3FC3ABE9DC54C26B1C8DC50B26F5137C6331B7 9548AB2C3616FFE6153DD86C36F8FAC8FF5C37F8EEBFD23E763B790C77BDA2A3 AA2CE83EF647AB2EE373894C427843E4543E89959C8BD9DBEB27EEF19BF06859 FFC94842AC3646106254351C2BFDA5411C97C1CA15F4943DAA6E76A182659028 8397891FF6CB1CC566A20B9F9F5065D65A421B4D19C4A95B06A4CF9732DA78C3 E6560B839C001970E891A85C84BA091F2553DD0CDDA866DA8A22C4D85EC5343A 79F54B36FE2E697793420347FC81C079982D584674C0B53DF9B16AF4926A1463 39495876642A862EE192AE0BDAC9B432E5CB88DA54DA8F2FDD73723DB183F6B2 86F546E7C5D0318ABE81BD715FFD71DF611D5C38DC15CCC4A2AA93CE0B45665E C0CA6FEBBF51710392CB6C88A4648ABD5C71841F49294A32867A6B095F1DC048 D9510610165C11E85471193C15C8906CE53F1AF0C6F4FC38FAD80C1CC0478F85 94605E690DD8107ADE5285914D1391EBEF151B611FF691A6ADAA30BF0B96F204 A84EE3A78AB9B6D0CDEEC78883CB62254D97D137C50E41D4647CCF9C94EC1BE9 5B42A097EC252AF0213F30B5BFC8AB8AE7853A4F9651A912DBF286EAD5CC63D5 8A14ADEDBA49E667E39C4BA9BFE4B50739B7AE378F59E770CD037C4017FADB71 C207E70DC78A7B11A9EA70EDFC8A1F925E8D2979627FA3676BFAF441B3CF34FE 4C62665C1D8BCD81E38BC6EBD06DD226324C074E84A2A60D47491D3B4E55B434 71C72A2F021A81EFCB9D03C987A47AAAB5E15A7562BCDC63109E3FDAF1D909DE D9AF044A7E66B06C504A75BCFF16DF21E3C332CD82A5BE3B40A2F2AC9917D2CE BE6C6CA371855E59FAE01D5EF2B2685F9A02409AD54128F0042A50BD3D4EFEC1 31372A2D75A40EA84FEB1ADD040075B2B697A96ECC051C73B21CC0EB83B33CB8 7047E0C98245F46A9EE03F2A0B42C93D031307848ADA04AFF6591FBEAB5F9E84 DAC2C8D2DD74CC284DD3EB0BB7C4E5F23922D159055ADB2655C63BF637175148 C31BDC54A013F15A02085A9DA121C129AD041BBC7C671DABE6E10BF03130A373 34BE05218E494856A3FB0D96BA175BF620DE541A95205A5039F9966FD32DD0FE 169BA181B3A06F4BBEEE9AA7B233F70DDADF04EB41B93CF58DBF050E08ABAB47 EE21D8204EE354C521ACDEE383614D564D9BB8EE2177E36831D57AA26F9A6E0B 906092DD3AB73631346C0D0065178C1C34515AD1DCCA5A6C76094EB9ED2516E5 46DEA262C32DFF65B8E2180D75A143B2F55A114C40D8A59DFC11A965D4CA70C6 A064F7790967B718552CCB01765D2BB4DC510E90D10B6654D3E8E9B00847748E 27F08F533E7A1ECAAE36882872F259125A2B46ED6E01905EA05D859C827C439F 75143A8525F7C2A7A397B2E23E6638E4BD9DA5275682B1369BCD420D02A67BC9 08050F5E06DBDD1E327C090067BFEBE134132AB1E9154C0275F219610FAF1260 2F46B763F033BD9FA3AFD1A6BFE15140279730F725D2775EB46184EDD08AD2CF 29623B5D295E24B33259438422698575CA2B2A6C5BF708B3338F341309CF4A62 5D9F4B20BA741F9A9E0FDD13C93B59FB01FC6DCA0011FF63DA94EF606CCCB3C1 4325C65A896548D3409CADC9307880E104E29B3F4B37231F10FCEC6990080B25 E132C6728236CCC3E5FE8F3321AA7AFB57D2C4B71EF95D1D4018A9884EAC7157 D826D5D7FE2839C972B57A452681682E788EFA4A1FD076F29194C7709B67A94F E9F2059C0029AF5CE1AC6159A6B555D00E3C554ADDE130C4A65778B2D01A03B0 DC9458400AFEB75FEF9E180CDCE4B32A357E9CDBBF5BC6A1D086ED771601D6EB C71F80DFFD2324B1754787B58B493D9F4964CE424BF3F9917AB031560E3719FC 19DEB610DF00DE8CED6DA01287AC961A024A4435AD16FE58CC5EFBAB0BE6279D 816F646808F0B95D943442366E9C1B658382CB11FF898275F2201CAA1F0AECB2 617D9C58B394851EE9226559D22C1B8B5585B5DAA8AE153FF04BEE43ED74EB56 1A45F53B6C74D64FA0EA9236C00176889AC0E813B53FFA1C1FB091CCB789A9C7 31838C4D9B98BF4623525A6E3ADD71E90AF0B536FD16907446C7D7B38BCAFB3B 88C288DEC4466A0ADF73C04F8876134E5B5DA19762386214F88F1C8FD4B84617 86575A10AD69A1DC1214AEAA0E55EC57632C41F6365D561211F5E2F0095C70F8 42707CF23A1A5E90C9B99E03A6BCA7BBA0C9B204F2365A4570EB224749FC6E04 D9DF87731573AB7D97B04DD51951247700326C54B81B64CCDE48B1E4805418C5 990F3DFA35E5BEA7529BE2473FD026E15332938B2AB4F1EF69C1F2A70D861A27 00CB9618CAA6D9A1FCB5861F58D1447EB9A7374E76BB98C9FAF11693A4D4E37B 6AADA4BEF82485DA916A8D7D07557E3DCF9BD6A19169C7679B26A291225B8AA0 4D9DACF88D1CA65F83275B91B679B63B5EAB051C927BF29F8E9FA0AE5B56429A CDD1CE35E7D5460EF05BE6447D14CA0A1C4863C5417A7E9C110EB07C3D194035 0A09EC8E504E2B75B26DDB484DB9534C295C9007DDADB53BB6250551C34C4F58 416B4E9F773B324EE6E1CDA1048F1342B6CF625EBF75D538EDF9D4C6D960DE99 806024D4ECBE45A69003CC24211F007AD2B713D87EB926D99058F1B8A2E53835 87BF135686AF641AB0BC1122C8C81E14687579C43FD8012E92529492175EE7EE 34C4E0B792C751DE462B789F96FC6A013CF9D3AC63655CD2DECE38BB75B3E547 F1D42820FBDC04FEE1EB362464695F58CB7C6334221FB660B46CD0F98222AD05 CDCB50BBF41C0159F11747C7EF37F6ACFEEE7F24C5CE0B12D1B6AB35B1AF0310 D41FB521926868E44D345D578D83B805AEF7BF209BC34A7F83CA5E109A146D4C 012D25B8DDE2AD426A2A9907AA2C63F06357A3B8B37B2323067793825093CC45 7A595BB54452B11B8ECE761708C8FBB73DAD3A0D75167F91CCEB009947EF868A C4807F7A3E735A4841D1841EA31FDA3B82301CD1126C33CBD1AC45F710C36EF8 83AA4BFE530DA078F648804176E74FC948AE369E36A809847FE1A61C1D16BEC0 ADA4CB7149AC5E3B3D8F5B1559ECBDF839CC9BFCDF1FD5542C8B9B381DD99BAC 119ED65807DCFBD91B867B7C5E5096CDCEE2FF2CB195D70D521347B8A8116F41 E5B98924F5CA2465633D482142C2E83552F38097D2519B56DA5F666A6C9E27D3 195115D9F98BB0174BB91D4FE8183A1C95EEF2CA921585D15EFE268F87AC8431 419F7D17580AC8D4D8371D70D397D8181B6368A5E1BF79FCE976107CBED4A610 95563CEA9BA22D7C894443A5896FB4D31A87B9F2EA644AA6EB63907F48E8B6F5 56C8D8DF5EA4E6AE2A6167DC4FA496FB24ECD9CACDF076B2467307DDAFA220D7 226215F7E5B73F323A2A2B51336E92076011B084023C1B54ADCB2E126C46FE39 F1AF5CCE1D85D668A955BFBF8953B6D3F3028A9BDAAF48FB203E0EC7798A04B7 0CD6070D106873A3F86735A5B3AF8236CFF53C22CE451DF3F6C5D12CB99848C1 60EF8551EFF8D71767B78180EA959234F20C1CDA398EEF9EA71DDCF4685E08F8 FA7B4DDB72B6B1D07B77A0FCADB177AAE2D2D8760A8586F9CBD96739F338EA9B 5ABB8C5E5CF035C7F6B7A839649913A0B41C43C3CB4A224DF41E181105B2B009 72087CE176852E7F64A50C5BFE76ED67DE4ECDF164D2A9C80E0D2727283C29B7 E9D09CE886EFF897940031BDD677D5C7CD437523F1873DD7B056D3A32CF731C7 57604F91C71ED4F372B7770E1C64ACD097F82C7FE1D4519D2820622E1B8A8A1B BB55E0C2D344FD1E5FD466D2F71555EE704C2E2A4BF9EA55DD1384EA172B648F 4909C291760E2524643EC90ACB5F39569B5E24F31A4AC3C59EA80217C2714DF2 CB44104C78C87CAFB2A68C8A932B6A167ACB2C306C756A237ABECC98F045A64A 3819E33D5CF306C79305D3FB32478A5427FF5697D64E627F1A8642D9EF3B0A7C 5B924916DD79D8DFC4793A33E635184E99635D993A4E7BC77634EA1268C3C46B BA74E26F4A85134C75CF6C7FB5EC30A3E71A8AD0278E0DF9B0D05394DA240E20 880D5B8D888D972CBF13CB5F6DCF4645741B0F7154657AEAAED76E2E9E2C3FF0 0CDD1958B8B7A7E4E9A7598B66BA569B15417213805251663DA07FAA62C59B33 71F200C55E2D451EC251460E91086C1DDE4D9E47DBDF449974F42D1D0E92ACAC EF5DE2CC7365C7F59DD0B2F20D38F80C6FBDE47E1F3C98A0C25DDB03BA643DC9 3B72E52324034C0046E703713AC9525F7F2A44CF33862328BD7083353EEBD56D 658A83900E5393EA8154F916DC15E43DA15AB7D9AF5B46DE78862D475C790578 E80981B931AE8ECADDAD817B02B439DDA2FAD039B7566FE9A1870AAAE1A8F9DA 0974971C236ADCE18BD79E419D5861F521B5CF47C2A52AF54399096ED71DF71E 2B35BD42980551BA7DD5188ADF2402C69B5495A65A0E769794A996BBFA687209 978EBF888CF88D30C4BA8CB9E87A612285F75F5486EB9E44AC2CC861B6FD4496 5392CB19213E7368947552002DA2FB501865EC1D4BBDAAEC1621372A3660D97E E9008373A972ED3B963BD5E6C37E84B445551D88BEB48174405A1714AE47CE58 AF424E63D0BA721665AD96A58A39CF36D779AB7B2184126E54199BA8ABEE5230 B51BD62B286E5AC061DA76689B572781EA72713F72ADE8733688ACC5CB453440 DC8C28F0E74CA97CEB88B520256D89DBC91F149136835BC4F019FFD60AB292E7 82AAFD0F87EF36F6E1BC72FD0A50196428923B9CF72A712C87E93265365655A8 A830112F6EB412699CAACF5EBED5BDA0930DB4F1116EE3D0DFD1F8EDD67BF633 FFF3C5CCB4109CC8E796C6BE653D34E43CE19D4F2C0D1D29FA2623840F93B819 7A90C668BA96EE19F1C905A022284E64D270E10D372752ED6F42CE56172E83C8 F5C171E5EEE3AAB7893239BF125CD76969E5BD708CD2AC00B0FD20B684C574FF DB4DF2BAE71180CBEE7365507A0970EC7F7E6F483316CD1A120E5BD344173F2D 78C7F53BDBA2BE1E5ABCFFA9F8E96D3AE4E6B85D2D7E32CAFB0786AE4EAC77E8 7C65C16C6E3DA64CF39288965123E53B040ED24EE45F62585D241457471CC607 90E04F49CC846B6DAD3BD6C56F6BB62F702DE3B92761065CFF0984D94025A021 8C5E0493594473A82439D0A9A4DBC9CCBD9FE492C6843A0E4187FA649084F06A C4F360225EE43CD621EC0332FA046ABE76743BB2B76C78D5A18752DD1367E95A 01C61D5F2DC81B93860E2AE67F958B845BD5A09E06471618B3D76A7344DB5340 344659983A87333A5F31E13768C5B3B3537CEB2EA557D0DD56DD71A34D182984 D9C6FC7710832FE04EE7D22358A0111933BA8955E0AFFE938994CCF6D3CA8C58 BEC29AB25142EE5FAEDF98014633598B35AF6548F7525C97AA3BC800F9580981 9CF173CEBD3DC80D2FC49F1F1E5B2EC5B8659647F4DFA2D3342E0E6F12C219BC DA4550E58AC70E12C08D0544D25CD618C4F254ADD2291B2D84F311800788C3E3 AE541D222EF6B375525E0DD224845A0297EAF99ABBD80EE40B7FE1C6D9781CB9 994B356640E6152C3AE819F5E6912C1ABEF73E9251BC7E4C9E3C6960859F2A9C 5FF301B97A715CFE7A441EACAD7B89EA64AD532D1783D2D7883DC8B22C5B331B A9657BCE7045E43F11298F2B2891A09E15031740D1776CCB2109133CF83070CE EA54B97C4D609B47FFF0F20046C4AB71A2588B99A27802D0A5B2F44CC9E8DE08 1355C405C2FC8E1245D9E55D02C10414321B1757DE0914AC924828A7E3CEA0D4 1741E9A60BDEE828CEFF9AA91E79D4A1355249578E9F3F472881823262292CDC 0A02059F0BD178D1BD9A5967388D54F605C045B7472109F3BB6C732E191487DE 20E7DB95DA669788102357DD3BC004AB8E71970A33413DE6C6689B4A8C16E7A5 0D0014CEB0B5DF6AB32F1B5174221C777329535DAEE9D8C1C4E31137704AC157 8C76EEA3FE634F8262A8B4F87E5485F6DD9AAA7C1B2BEBD9A30D2F0605436322 C10ACF037DDFF785E9319F91B78A845BE510A7066847F6E8B4E8592698827B2F B15C50ED71AD2ED486AD68C388342F50E628DE8E9385B2E3CE8BD2644F951248 597263173C83EA45758A64EBAC15AFB13616D4CBB1683C330B1AA5343683EA2A 7352F21E648D73548DDFC68780266FF85F967894819CD33DE1968AB5468E7055 E2E3FADB699C3E158C2B3E2A81186C35CAFF79B19B1D7F8985E7254B69407797 F452451A38803A7F5339D39F89FE7098031B4DED5B55B2049C58223D3101C419 DC8AAF5420640E1D588D876B4DBA192267D882FE1B90D183F05AF6C920141393 366814BF1F15B4D8B42741DAEB26D06B34D18657DEDB450756C0E9E07B82423F 0499E01B6A66E87EB4C5599775EF22DA15854F2C62F944758A438E145D4B21F8 C2A6D3B77A58A1DB1FAD71C69F5CFC5B5AE6649E0DF1070C1222E689E7175890 D417E9CC41A64E91DAEB542F58A45C3613FA23EF766DF95707CA1D8E213E344E 9D7C72BB70B8AB4DD2F858EE63EC2511F936A5ED103138F9839A3BAFD49C099B D284F8796636033AA4B1FA24A7AD9926A85EE16702C33B7E92084F95CECF2552 F399AD837C7D96FF932BDF988A20B94579736A518CF87C27E2EF2118E7A1A46A CC50B001D9C21E7B670570A8CBB74FDD867FC4E6B082A60FBB8240B2E61107A4 AD6AA8351F647ABD73937498AD366684AFB5EF84F4469F6D8DC03E7AD8123D8D 754F914AB68B859DA2985F27140F1F33CD3F026AF93730F0BDE8D2F63EB76F6E 5C44FE4A1F66E46418F49628A4657771A349B4054206AF41266E92C2D9D92F58 CC8AECA0CD0A69E2FDDCB4E5D0F9F9BB726352038EE6BA1ED40AA5757639CF36 608AD8D72B3BEF5FF08F533DF679202853FC1DCDD99EB84608153B02A22ACC0E 8F9B0C54B89D48236A813AFDD4A8AFB074F9A87409B764435602057811A56956 44AA307E1539632F91CAA64DA77525E7291019CFB0A8A3F697B5A94868FF0C25 9AC8528408EAB5500FADE5FEBAC49CB16D50D9CA16726FF4B9228741E5E51B43 9B78EE224C09DBCA64E2059FA2B9F8DA7971B1A576B336D1F7024E9C3AB9209D 3D99E46C6915C5CA0BCDE15C224923C300BCFA44854E15AE10AAFAF6F67B0C56 6D12852E70A087E1FB1477455060D01CAD9181C51F72B17A34273E67146C6F41 CAE3C2952D6AA312CD9E5FDD63E0CED803F99188932F478D12D7114076DB0ED8 9BAE4588E788D2CC9A8836EE6514888DB2727CACD93ECB1580EA61FB778C562C B27763BBBEA8BAB40635C3E7E5BB788EDC5088A8A86C935417E993A468C70EC1 1ACF5BC3396025572AD97ED758B04C71E769C52CECF31034F94CC088382AFFD1 CD158230E71000717231DBDDE0896F94C5ABE7F1BF0EE6046CC83F79B811DA96 29FC33BA65ECA3EB763A850439C7B97D648D400F09C21A6C3DD01E616E94BA03 06CFE7FB7E83CDEAAB85E5ED98CC623334580F2B28FDF4257D3BFB008AD81D58 6570382A2B25112279BA39EBEFB4A6334E529D76D68F93583EC352E6CEDCAB76 CF18602C7FCD02B82747C47F18DC85B867AADE10C5B88FF4CB319C981DB89FAB FB4911C8D5F249F58B28B63A80460E3217A67585BFA4660156C2CEDFBA07B445 E739AD58D0BCC5E0C1CA1E9271622E6497FC7F517E560A6ECD4FEA69BF8D3B43 A099FECA870CBB8904E8CACC5D5C1B95981DC73C09D058183DF154ECEAD47E19 92A355967C631948ED38C1E47172782CCB52AB4CB78F6A94FBCFC0AC5247F272 7239FC6A41655715BD870D7E55B4CE58513CC17BC2EAF4F237BB6AAC15ED6818 245C112A4C29F487CD6AA69212F7C45D77CF3DF902D0A4F2213BFDF2AE5B8ABD 243F1EA4F5D0C2C4197729D74E71416098D8924FAE68F7F14E32CE0DDDB6A47D E665F6FBFD5EE5FEC326C5E20C32C65A99E61AF5C3190E8912D3D6E21A2739DA E2219CBA41C20721265E258440C7A3883A59F583722031FE4983F237F3FCD8F4 F48B7B3F9713D493BEE9DB2C53DA12C79451E0F8221FF6E1B0A277D6DDD9E100 0C444B6051B845AD321C179DC62944F9BEF9C6E5E5510749DB5762A4D00E908E 01127E880CCB7B438887E9F98A8A66CE96244CA87AC11895D0DB9A92552D9273 C056AB06F93D7574D30EB03988B4B040933D919D99D517DF808E775481FC6B00 5DED9F8B9F17165CEB8FF7F2A7BF58E60943205B046B69C070428BE8874F4975 6E8B36AFC9FF2D790FD978C71B496B2CB0E71D471B16C6D0D4DB22C517DE6A09 0FA78BF29FB208D84C1964E3CA6420800253249179318570BD38725F3109E65A 006C6C5C99BFAC1DE70B4AFABA79257C6496F591B0DDB23A40D45EE0F05E8123 F2397E5CA900272A4250CB50A2D2ACAFCBC57ABB24DA551FFC9CD87D24D65961 BD75ECE1D29DF16D4B0A676BCFAEEA38BBA059F73C2EA04789E8E2871DC343F1 10E8140BC4C0632AE737237189DE6C7FF27CB1DB5C49F9D2EB255B610EE00127 FFADDBEF2616FE47A098A713205784F0FD6D083CBA7F9288D90374A1B9582A20 13E7069FEF28B208DE72B21E4C3180CA858B2644577CA492D931C95A48E1EB09 4BAA1F5FF22AA00B8C60940A1A7B10FF68DE6924F384086BA9E606BE261603E0 F6C9FD17EB30A41BA32AE5869C56E8C66A0F13DCEE95869913C6A81A209DBF6D 9D6DEA469E8C247EAC48E0F2FEF2E1010E6F1A24939B9F6CA41DFA79BD6829CC 4A6E0402249738660D3E38B8D96146AC0218DA0C99949432FB5C4985790514B2 1DBB52BB7AB2A2EA3B33837D1633D71D17C67320714DC98AAC7784074DC78508 53AB088214763B4F35EE87D7520C93E3736DD177A36EC40E3F9BBFBC8C117390 182990D7C252AF33EE8039549B519707FDA4440D254C44A5CF19FA19E4D0C4D3 7A8B2EC19FD27A4643E3A88F5826D82014EA58AEDDA621815EF27BBFD771D6AD D5C014C0555637D37899D15D1257BD0E75C84291C4A96C0BED70FF29D24BF675 4EC766E78CFD0E576BB5113B1B6CCB859B3BE6A98AD80AC2FBB4D7F7BFD1BEEB 2FD01E50695D54111AF85CF5120FB0802387415E1B8EA85AA74FB443B5DC9D38 F5D8D602D545E78766CB621D51B434A7A06E8F1B6EDEC8D0456F0883868F9A3F 4B2FCE7D71DEE094777406F2FC4E7652C7265380F08629EBB9E2FD2CE7EF0493 8943C1CC164652B21DBA5FAF09FAC7B91F3F7988A662D5FD3F11DCF5B768D98D 80C673EC1D4CF10ED0B696546B04B6D5BB28828BC51FBDADB085099BB3AD8241 7E4936BE686C34F521FD973566703731C3264E068CA15BEEC4E4707B5125E045 87C3C9EC8DBEF8EA7122D6BF05632C07208922D07C05AC0F6CDA6B42A71C555A 0349D2ED7C500C393EE38710FDEEE0F786ECB00A6A33FA7FCE4613A4F18C691F 3743ED9E3633375FF58551B91ADD5DC185998547B78F34816E7F333F90E18231 27B055E454DD37D7B064B0A996244BAD4676BBCBBA2727396E044FEF13046D64 E297C7DA27FEC2B0A7DFEC067168F6117C46903296EE144862F58C53C4BFEA69 49C3F31322DEA89944314AA41EFF120DC542D71969277400F911718DB0B93D7F 3E4AB21386913ADCE58C2B1CB5633E89244E52743F7B44A2F9A0DFE0899C2D3F 6F7A47889D82118AE8D151CDBCFC6D6C57E5145740DDC5F8077E4A8637AFB1C6 D7F295A0DD49B9D7E525E5E5E39C915ABB0B778D8EF1E1BF0C90570A260EE0EC CDD7122C832CBA4C0AC959FBF9FE98E4A11EEDE727E6D9C43BFB90D0AFF1ECCA 0A6BCA5825259081906845ED1528BA18A34DA0E983FEA8B08D300AC564931992 D1783BCF1296D835D913008C08DAD381831DF05DF42ED7DD1E14F1F3B06B147F 1BA1E6A4E866183AF593EBB1BDA8AFE81A67D76B27492D9BF2E64690533F0B72 B1B3AD206F81F5A795616F5F512EA329FDE80AA930F23C8E0C7E6B58623A1919 8814037A8EE703F49874F4A384FB2A3D01E03DCB9BCE150A391BE36FB15CC00C A691F862D14D65846520E242D119836D421E3999EF87658D88CC19AA50486E47 B68AFA052AE380E0B495D5BF3197E483B182A232403FEA80C8491CE99E09C6C0 0CBBAA0E5F50535B56C70B218A078AD48E8C6B11F3B32D218439F3CF7E2671AD 33D321CF8F8F6BAF362B1DE0BDD85557AC85E8BD7B4C6934E9ACCEFE81A5C420 8B5A7A98723A5138A44E6BFCF1386B3DDB12F2F1E0359BF9F5348EB134313225 2E6C17B2 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTI10 %!PS-AdobeFont-1.0: CMTI10 003.002 %%Title: CMTI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup /UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTI10 def /FontBBox {-35 -250 1124 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTI10.) readonly def /FullName (CMTI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 12 /fi put dup 103 /g put dup 105 /i put dup 110 /n put dup 114 /r put dup 115 /s put dup 116 /t put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E 2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD 8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC 32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF 118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA 8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A 30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF 0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D 9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC 8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F 42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F 7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C 0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB 8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A 21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA 206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B 55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E 9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F 220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D 981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F 337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B 1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC 100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A 1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB 72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D 310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB 865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B 301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E 2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A 44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F 03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD 9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F 821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B 9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E 81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C 6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C 392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F 464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA 147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB 61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C 2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C 7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C 9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D 8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B 02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF 9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD 751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A 40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A 0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E 8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 AFFD0B2B724EF0F28393F3CB6A4DCBBA655E3D6E27F87E6D8BE12A15D35E1E75 D36532B9C5000C06A58822444593A1038EEB23C7AFC9EEE3907DF8232322B09B 230015E014F1B4CEB866234266440AD3686E30ABD086CF9C0926E711F0757925 5DEB3D39C8E6D6F0C05A364A0DBF90F6E32CD28887F7E237E04093E07A94C973 462254BC1B1586AAC29FC7F15A80FB5993ED22E79A0FB5BF0F7362CFA24BB2F3 D4EF7D39E1902C53053C27E2AA49C4DE54A05AFB1AA6C7CCFBD9F72150DE259A BEBFCA5C7E828BE667E9C72222B84C4C79C2DEB885A69861DDB635B02814BAAD 9672A14E50D6A2A236AB35C6DCBFA1165F47F8F52B0787EB4B70BFE3CAA8B511 A630E8148A51C1394C7C321156CF52EE7BFE07B6C354CB65782464D2BE42C0D8 14EAFBE88DA3D5C90614F22E02626ABD343F3AC0A9698AE84CB97F1CC421D34F 98B69FF4C335B95F4222A8BAB77662B4A57A4B574265A679334D5EBCB073FF69 66BD9322B1C2253AE85AB38889B26761BA509C7F638C6CBC4BBCDBBBF4BFE1AE 855973129978F707C87462B67509FE6EEFB5E0949674C34768F001827F12F1BA 77AE866711077C30DC0E40C2D8A6EF4D85355E596E26B675E8D223D4E55C3580 5B79260E90985DA5E5B2F43DE7713D5E67080D2843D44A3585E078615BEA476C 88233D241D3A427F9B1AD26ECD535E46C137084A835CD816CCA936D0011C53E7 B33D5B50ED7BF3F41289F48E394BDC963EB1AFD6F14F0C146E0F13B03E76B389 8AD8E81E41F14D1682A113D8BA1482D9DDFDE71208AFC351B62E028C3D50BE01 FC9CD5D5F36E28DADB469201F41E9F39098B65E43FD1227A26F6FF812CE452F8 B5476C28FC1B1B3E5FEF3A3B94CD552E29288AB0A3ABCEAAEACBD2D5E9001579 738029B0E7F635C6C4962340187558084D9CD408EF7FDCE23F465AFCAA8EAAC4 8855BF64EC9BC75371A98095CB51BE7FF107E4C6C2107D887716F94563768073 B8C4238F51C1E63C279B23DE3DF51F656B90880333880515945253BE08582F17 8888FF4AB1EA0051CC41CDCF6C2D4B2F19C17FDF8A8664754A884EB6A4311C08 074B3CFC4E20FF71191E3C1648D2C38260315702E80A6425361E89CAE7108A3F C7FB9AD79D51427F8FAE45D1B02FA9083F76469C3378D3510246D81F10F3F48F 9CF6D65D2F32BA1B012BAD2FDD43CE879EBFE2E5DC3BEC2EF496DD2C3848D655 AAE8EB7970EF9F9A5AC6BF1C30B61659B7E8075DC32A70F10CBCAE6122894309 5A0250411E81644F995A049EEEB89045B21B7741FE92A75A72C8B0A406275099 8D134C8CB0CDFFE48353CE37202D9686FD7AF16500245B88C1C5B88E3DBC3B43 BFDA072390A1D964E90FEA605DC6AEC44AA1D700017FB1F41C13A2C37B83FB64 E63E895CE647A545FD5CA85463960331495B05929F57DC349736AF84A5687549 CD60A676FD984F0C50AFC2F783594DE38ADF685F5E2937C95B50D07C6316ABC0 8495EF319D914D65E08722DCE6A5762EDB87EA4AD820C359201059F56296F608 395942723FB853CB67F553F689BBFDF60264E90AE6A7FBF7AEF443A3F760B490 8C3513FCA7ECCA5A363D7F72C62DFB1773CF88D2D7E1F0FD606878C4F274F285 5A3EF87C541495A067498702A89961BEFC26B229894408B4BAD353FE06295037 9E55663FC427EAFBF65F616CE7A771421FCB22006B241CDB156035A428CFC241 C3FB0343C9C040CA92ABC487113E09074631B554366DAD01C246F4E082C64B7A E9BE7C172B606786E702BA6D036D10682AD61CD0776567E40D095756D3D02704 DA8492D994448DA3E66366CF2D712AC596DE587E976936D0B5B0E2F02724414B 5AA83C1B3F8EFE2C0DB65600DA12E74A4E6D474A985BE62E8B0E6C0AA9E739B7 D1A6359CB3AC713C743C7CDEE58649C4B6953E5671540BFB5FE80776FDA87A1C 3B3B342B7AE56D96AA8F18DFD6A8DA83196B9F5DA844E622A6717CBCDB06B0A7 70C750DE8AB3960E58BAA873F0C21D1157A2909231C41889BA6CFF45FC41F07E 9F56466016A3C7BB340FD6B6321A5CB19788A886D0B5909DEF40ECE8923E7EC5 CD3881FA4311C937C0572619DDEB4618EA621867B1B8556E73DB25F5E86C0D27 913B40450E452906B5528E86B0F08246B595BC6487543AC0B789D555594ED997 911B9D19F01232F69A42F99FFA56DC7DB66BD6B9158E32511F945E11724CF164 DAF26FF59D8B728188A609D1D868C2536150F333BDD1DBE091283F1884D320EF 908F80BBD8AA0C8BDFE625F34B41BDBB60DD9A6AB33298DBAF5224EB27D47B8F 69588EA13F414A6E6EF3924EB12BD7DFA8F9628C4924BB5C065A6A581B31D314 6AC33A670CAE923A46883115C5B26E3566D2811EB20634B14B53CF46E0C66F92 4D5906B71A17C8E38C1EDC9A45C0E3472E4BD49FBC8F8D1226C8A020932DAA0E 2FADA6A30D305693AB8E3E08897AF9EDCA74EA769AAA7D6824F01C3733E73214 2D9AA6EF67203CC27E3E7510D09015533CC5CBDF4A4F43761B5019433B615A95 F5D1FD30B1FF23619141C06772C69C0340C90443F192EFBC342D1ADEFCC125FC 4BCD134167487DAC3A1C5D18CB454EB3BE7F3DFE59BC6F349395066C17BAD3A9 94F54B393C29D53A3668370DC085A703FDC91930B0CD6F7FD4EC1F338D7DF701 E96536126691975CF22A54EB33D276E0F67FCBE601DDBC41BDC763D9EC78D386 51A7F72FF1338CB14A6F09670E67F472D6F57C6447F5C82305B56BFDEBC0B324 EA6FD3853C831681645B10C42B9165789D5FB6EE1BCE6B3E908AFC374688E720 5A3930D9918DB4189CCD63E6F4BD9ED18FC1F0F3E85D51E3615FBFA4F1E9A746 96B0F85B468281C142E707271350C29703F947292B191990DDC3A13A60A981DD FA1F8B9151C8CB3738AEE8FF27E3390404F5C96874BE9290AE811A35E0C4727C C7425896985C8324159C8A3A4576BDBC6EE02323CF51ACA4AFEE28A4AFE6344F 54C5064B9A124AD5E6B2B2CEE087768B97DA1468ABDE4FB32C632E1CC6BBF007 B8C36E1D3F7696415EF51B3EA956FB3612B12FAF9B511F9D6B29DDD7C89FF065 1752A6E7826C367ED149527468A9A8F3730DB8E6C7DA1EFD1BB1DD2693BB2421 52733EE07D56146CD064222CA4D765AE3A1AC8366538BCF0101BD74F7DA3D330 04575D95799244593ED3EA108FB8FCE3A8BC431416A6D60E27C9096444E8C225 3B838FD5B8C78ADD9B7DF7EFBA6A6A466CD243EFFDAF90ABFE82CF2B9E06DCF3 046758EFF0C168001B0AF208160B773913DEEAF4F167B0BCBA1EE3A51766C9B0 D3440CE0A46DC741B417E21502354EB5DC09B91231A5B79FBE4F80028C01B505 91866DE115685EA48FFF22ED898D8E64C7A9C9D8CB20451DEF0551610C6D1255 7DEB229CD4AA2C8F0AA989EE31BB94D940835BA22BBD1607C8944C84226F1F59 35248C1A4AA7F0AD631CB66B7A149AAC76044376FD050E367D993144111232DA DF4650BB5F45B791FB1221B54F88798E8619A3E82EA65C4A3DDD98A3E7D6B296 EA6739A97A0771E6270528213FC6F372DF4F1FBB80A47FF62FFD5287C9AA4F91 5064F8D3CE7B4C71156E4D21658D626B97E01711F123719E3DEA49CF8981DEDA CBDE3182826A 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMCSC10 %!PS-AdobeFont-1.0: CMCSC10 003.002 %%Title: CMCSC10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMCSC10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMCSC10 known{/CMCSC10 findfont dup/UniqueID known{dup /UniqueID get 5087402 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMCSC10 def /FontBBox {14 -250 1077 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMCSC10.) readonly def /FullName (CMCSC10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 97 /a put dup 99 /c put dup 101 /e put dup 102 /f put dup 103 /g put dup 105 /i put dup 110 /n put dup 111 /o put dup 112 /p put dup 115 /s put dup 117 /u put dup 120 /x put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BB89566A9BDEC70EB4F2 048A6EB631F05C014D372103E37FC3FA317EBC9973565A638403DA02E48B7D31 CFF6C241DC5CDB470561002FF46437C06EF93BC99352DF04393C661FFFBF4BA2 0723ABD9B3E9CA9E63BA57EFDBAE684655CBBDBA15ADAE43E1A2C98A3CF060A3 D16AF8FE3A49B50A24C20EEED716E49AF6013D4D38CD9CC41A91C17E4D04D79D 567E1EF49110AA9C34464E95D81A730ECEB2C9AF38FBA6B45E253288438B4CB3 DC75B3A906D4357293BA41E59C35223A6C9CBD6FF5FC90C2D07CBB376C7320FF 435A6251822BFCBB612CE630EDF826C37E95F541C21B93FCE127591D5E38165E 2B58A34AAE37712BC58B63FFD70AB80F4F24612CFD2F1466BAAF3CA2BCB45148 D0DEA0E9B8FBA4C4FF5B8B3CB02E461355051842BD1C94F41066B9B909DB83B1 DCDCBEF7CD00A43E4C0B8191A29600CA197F0BA227FB8309BB539D2A620BAC70 8A1AB2DFA51ADC9873B8E5582DCD3ED154E5D727D1665F99BD89883D69E6CC2F DB3A57AEB612171A88E22F038461DE03FC357F771675E34E90D4D19B4B36891C 9D2333960400E97494F4FC4DBCE6A73C34A0409E433BBDC0AAAEBA7D3555066E 1CFBB4515C8B573C9B9DD12ED5B6ECEBE35AD0DDEA9DB004FC6CB540B5117B49 59CABE5FD74C6F5B6482B42C20B5FF0467D1DBD7CED2CC651CA57852B6FBB402 A6764DB342889132C911CAA713A7F2FDD8A5E849345D6C81025E02F5B8B682BA 90CC9B467FBC37362436EA6BF8EB62D784B01D5430147945BC09D1F49EE89F2E 3E2B8E6D439248A56F82F2E03EA5C7A922F2813BE6538A3A423BEBC55B345AFB 3B3C125306749E137C647D78028AE1FBF3E1A82C260132832A9668F454D39C41 736717DED0A99F6B11F005F0E1D07FE84713AAB4C042FDC166AA146D7B5E9198 E4F485BE5B135EA281FF1C1E616B5AAF02771F58C5840CB5A427FF9794F93E94 17FD799C78AED1DC4810BCEF4C6C51D3C1504EA2C6F2B29805B7ECF97B5F637D FE92E168CB9029E90404CB54FB312FC7AA8A9F2F524C03E61F03B1E31D4F061E 1677B39D5D30C9FD4673E1723F4AE3CCF38593AD6D7F61E9DF3C010E51F25085 35D51105E1464BA146A78D7297D4D310AD91342A0BB942034A3EC0696B467367 3E39D202D637E6B14D0EBCA6AD3CF22B07D4CA69C0FCBB6C93782B2F0DFC5AC1 5D8A16CB5EDB671A0C1BA9D10F63CEAFCD0E06E42C730C8EF769CCFD57937245 658F486036D37E8BDDE5670A212FB488A8753322A5B170C9662750AA958C0BBD 8E97D8239D2A08B30416504DEEC4E506013E037C91785C674F8A6A44E23FEE6F CCC00CC5E4D355B0871FDB8ECD64F70EE32449BB5D6F84F8C8AA2D5B1A489BA9 D7FF2DBAA8D0B84054E93D64D3E77850A3724824914A0F821EEC3D605DD851A7 606936B8B9E24D6E932E16C448140FE94DD96C75AECB73850035ED9C04A1D93C 64B21E7D4657E030483EC5C3554AEF8BE4D0FE5B9743B875340B09E01273DAE8 F256C50A1A8F2E0417440A8BB0173F59E11523E1CEF2593A4AC5AF2167627B00 C5EA97D125EB8A4BD4C372877ABF10F5B7B149D73787E0834BFB3084E9508DF7 072DD71637019599252059738D4D6BC57A9358E4B14F6AF9C4B31DB8E25C29B3 7A15F9953BD73ACDE5F0445A5DC406BB4635FAE51C1D8202AE31730E6F355317 1DC197DB0B6177307C60E5D38F4487363EE051B2E609A52BC4D45B14B6558B6B 5E1618748794B8340752CDBE7756C068975B559615D4CD5A97CE30BAA7B2B1A3 2FEF2E055232B24FD8A21BECDE1B6A479A28EC80AE2CD16DB50B30B4A6CFCF06 491C7CD5AC29FB964D4846415233947522676DEABDA0D9535F8507D33693930C B4E4240A02B0CE7EA288516B8A6EF908D7F8BAF9012D052C6AC96D9F8F6ADB07 8984F3559C5E7E3022A957982155FC9CD599C74E18328D3AB46F9DD15D1C4C3F 9B93ADB4489BA02CFCF57DE6270F3AD2F8597BE71786510EF08142F430EE5568 4F9DDB792B7C46B6135E341DBBF062FBC50FABA80CD4A384157BAE57CBEA9781 AA4416323265168AC097DE7E30A0D4750143A4FCE70A863A31876A8FA5327C3E 36E89589E363AA2B1A6E8B09F5AEB8FFFD0396067173465B6503383DE517A6EA 88C0FC08578398C2A721E5AEB29F4AC9BC990A50CD87BD35A11F9E81F68E7B85 5E5B95A4F9A5D30379EF90D78E1E466DEF867BAEFC4F5ED2C762BFF099C1C2B3 5E0DA1C2FB33BE1379413CDDB1EE6BB3A495331F72F2FAEB8152E8AD5FD334A8 AAB0082A71D5574B618EA8D487B8FAF1B445F3395B1E21224F5492A0E06F5152 7726835C900E2E52BE3B7B654183AEDEC68053DD0AF19EF6DBC10B6FC08EC7D0 CC0E2C8FAF8C9A4C21FB7C34E074BBA4EE64226BEC8C928A784C1BEE35B72EC8 E9295240B29DDC2539CD118BAC38DB3917D14CD33AB45FE47E827F2A2B193AFF 53C5396C52CEA4F43F06AC2D08C74CC85D608CBA267175EC31311EE25AB48DD9 FE811B411AE426C9FC0B6044D1EBF130231623F1566CEA4D1C06D8032FD9808A 94479C842BC41B675CF6B90113BD681F8D43F51D5016D80EDC11D7640FB950D4 E709A46184406ED90D0892A4CD9062938A8205697A200DBE1F38EB166EFEA0EC 4FCB45CDAF82EA103DD6FDD03D146F3E42EDA6496064DB3F4FC1C5280C9E604B D5EBCA08BF2AAC90156C11EF68137DC76502EBF216F3AF3EE30DD2676D218428 F41C655093F8B530FCA378B5769F262A6FDB4B66B83F18F050E77227E28D71F4 5F4425CB8D51B3DAE872CD86D7804F870BC564A6DA1CA13EDB00D131CE4F6460 7021661B99612629DCC20C85CF155EDC5111E015A77B0B82A8FC1EBB374B7EF2 361419BA93B857D5C9944BB5B4AEDD86ABCC261542077FE09701C96370168579 5F89D5AAA08D700E2643E88C2FB8D1D56D37AAA9744872E7C050B4CE046B47A7 83F224FA9FD311C955EFBF173042C8FC66524135F579B1397828870D5C9DC71F 8615FADE2A1CFAEA90F732B6C266E2F3048FC43EDA7A6B6D98E9DB793CF457B3 F5877E7A055C92B0246FEA8C72B3B3456F93BF36E2651D32CD614C3AECC0B4BC F824C8363E593A6458D37408FC5B09883B280005DD24123E2D4B1B85F4113327 EEDD9186A4AF2CD6439B46C5C168C125CA80F9EE9E68906620EE126CFBF26E15 B269838A54224EDCFE2A373EB750D4829BFA410DE5F1541E428BB1E024AF496D F5F1C151F5A645C8622F2EF9088D57A2811868A8A8BFCDBFCE3ACB8463AC35B4 8B6F44E1C1232805842F56FA468F81FF37D5D55B81CA56058558544C142EB3BE 07CFB1F75DECB1E48C14D6AFDD455989AA6FFE8B8DC54F462B3C20E31D270BCE 8E68E2B43A6625AC7E9792704FAAD6CE8BBE0B341DA7189EBB3E9D5375B27FD4 12506D5BCA50AEDC6955E6C3C7BAA84BACAF7ABDF3A270C7734EC3C6EC22793B E67B0E288F99699D38DA8B79F2D21DD97945FBDDD132A8F0BF947950D3C0B4AA EB7B2C435AFE54489E1930610311D718AC610C21A644F34CB2D1959B3066F39B EADEAB5CFC6AF4D191D86B02402B00D1C5262707861C5308730579795EB53207 A291A27A8B5C4DAE0A87A0C6A260026CA3CB620E1002E066A515D7990F3DEA29 0FAC962E0B82B7A6C86B1EDC54007822BAECED673FAAEF88C8109777EB79A53F AF3C58546974F2F56E70E9B5CB59ACB5C27CB01895557B2D82134D7F02029B24 3331621F38E68717F5CB68A8892D0B9C0A8ED4F8BB56E80505170D44C6856128 2DED0254ADA4875CF56B4D97372AAE730D4C77A2940DC8C178274DF88A9EE037 215C6FE7B9D481EE4DE809B124C0270782411ACCCF89906A8B143D0BA8B2CEDE E9B90465C3E57A4FD9AD2702323450256ABD09A1F8C26F08480317C08B75B720 70A161C99715A35A94DD5C9647ED0F8A5337B774C8E54F9653AC859485A1FED5 37B725A7E4BA58711CBCDA6054E34CBD8E9F9460179DA7DBD243D81A1531FDDE BF2BD425BD9DBE75EAA333B1F5793669A215549A774597E6ADA16D323FE5601A EDA41092730009A99BF5B5AAE281844A6BF3292D4D4EDE36B4FD8BCAEB6EB72F AC5D3CD53D0D621CA9EA8D254FDCB2B5161EE9E80B266563F669805A3A15271A 0753983004A1ECC7FBADF62AFEA4DAB49A178C231759857DB910668BDB07CB3F 7E8EC24901863088B3231EE3FA563924032C91CA9D68DB398F9BD9AC0C651EC8 9051C9F709CD784F3FF5951DECD7E869ACC34B83AECDB011E6594347855EE7F5 28811F744A4BD70D4E9077EA7EC19FFCF612689F12B34332857AE41F13E6D16A 962DB9B6AAAC167B9FBDF0068EA13412F318384134B29F3F0C399F1973A3564E F9C3C39B5BDD4C98D81A6CB476E565860B50704BD65ABD630A5F1372F2D826F3 3AD47C08B8AD3176A170C369EF3CEEB190134006D6135C5B8CCDBE1C11FFF1EC 3F6D8C46E15C4F5EB9ED9F31A129594D542D40DC3815CD075A0DBB648D868AF5 15A05C4BDB28BF23653A3AD96CF6AFC065DCCCB23D5D9A945F8CBB539DD3BFA8 DB8F1FBF9B6F25B41EB4309995CA3D5D6ABD70CBB4A2F0C6364E5439AD1045FF 72F6B45A30BD3A548CFAADDCC6C15D46F6D783D3E520215751DC98335A4ED512 D7D19235CDF911CC69F3CF4365B678EBF3E87C456A4E77339C74930083445588 462529C22A96A28C5CE87AFA0C981F26CAED5A1C8DBCDDA612624DBE0373F026 465185A4D8C73CCD8D71EE97116F8F7D341B87FD78F9CCB9FBDA2A7799711607 6BBA855AE9D5C505870DC85FDFAAA130A351D56AADBFBD6A7D52055E3200F8B7 8AE9A00092B55DEA8BDE224B4BA7FD4A191CB1FFC4CB995FEE1AC2883AB69E1A AFFC09AB5B9AE311A030A5BA05E2213F9BBF016C8FA80689C069314D91274B20 53FCC65C7D7B3A7504887525BFFA060304931672A078BCD7F269595686310E34 E1ECA868899BC402D17EC36CE40D5041D7CEDA77F7764C9D98793F5334F574DF E93CB10A5E8ADAE95CE63D2339557091B4B4911A4987CF21B7F1DBADBC2DD605 8EB72473C1F2EABCC44E0D0339EECB55DA74085606C3F89D57ACFBF5755A5395 CA8D4BD47E4EE8D8B882D3AB31A1F0C62E74654C7E041E4FF2693A38A9796064 46526B0A37E6B5BF8E48E80EDEF81E34DA8F6CC9025936A4D0E6D709D61B7B5C AB550397117F3F9D2F5A542A64DEA8E1178F7337124D6B56BA92F659AAD694D7 391028731E01284BFEA635314A8DA8DF7A34EA3B6B2F8803BE6DCB423A9E8015 55EBD90EBAE8A00298B3B6B1C02BA516AF528122C1F2B07EF69F5466C2C36643 0D665D6561705509B7582D8301AF3C32E2F3B9433E3E04D62117C7E8A368BDE1 0D4DAA1C415B2A6573116D2A169AFEF700A83F55D88813585E89C94C07802BA8 3AE8F9BC3CDBFD9C2E35D062B1FD6E79E1EF104FC70B0AB09D12CA027F33F85A 22F0ECBB4AD55FE8C616B82C46CE69A600E4F767BD7A9C5F9B37A3196B038384 5DEF76A8884425FE598A63AEB19FA698C2AF7CAA4983CEC789268E22BA051EE0 20A40633D22D8F707626ED30E8273EAAD1C065F0B2E1718B5AC853ABE09330C3 B0082A71D557169BC1559B6D285A3499D41C4CCF1F74884EC3917EB9C574371E AFE8578DDCA459B8D22C0188A8D150437B05FB92022C95EB6FBCC954216B5FED CBC7C90B9A1F061376A9840FB64390A6BA99CFC8279A86A730C6DBFD14C53C4B 7277D676BD42203677E9ABEEC8C97E13DAA626474513B06F8734DD784F2FBBB9 B3B448B8E8221E380AB4A86D3A683B86A54129519D50DD4FE63B30954D805CED A9A5D9A39C58B65B08E1C19555E927C6DBF7FD07252B2B57F62B905D6B488201 213D106A41033B26FFBAC2E616DA6ADA6D560BADF10E68872806CFD6F6E19D7B 57CF1F7A030A7BAD374F16A977E0ECB8742D034ADAF9C247DA19C8AEA74EF6CE DAFD6B1DC562FD3B77E4D008BDE4D8C7FCA9895DA1AC9EAA01C32A0DA712B082 9438E77230D38FC4153E1711417B918BA6CC03203A5FF082AF880F48518D8271 C1121E4F1386B30A7F1BC6F10EA98443F8A65C867A109336B808BC9A8E2A75AC F950835AA84B56F59DA4C8A18859C3B68F6B6DE09A6675F639EA9107BDB67B0F 54EBC564BC2D781B61C14363A54956BA78A2BB89C9F966C94EEFC29EE9F4E23E C0BF750144DC289F0DEE1F8A25BB52E54F656FAFEE4BD2DA57E1306BBE648051 1D0CFD6A23A3DF082E3CF13197BF1B7FB22B2CD427BB78F455C9634DF989DC90 7BB2AE247B1C99AB2062855B2948341B0F857ACD750B59E370A6698C6A1F5287 72A4A9628A592E313956C242DF8277EDD2F1FDFB07CDC104275FFBF796D7518A DF49FF3CDEC3BDFF1D290C382F244DF18005ECDABF0C5C2C64EEC4383E2E07DC 5C82587C071E59B46B7BEF31D268F39D9B12D534344FBA515E9DE8F166FAD1E2 7D1558967AAAD3829D3F7EC6938D20E5379F414532976ABA844D97A5E9078901 EAE4D0ED1F4C7EE7A2D80D891A5013D6409A38ACFA497F5A169EB7F9F4890DC4 62FA6A89EA48267331F086992B9CA9305E16611E6AEE67DCDD588A25D37F45B1 0DE75C802EE021E574B64B3969DE2E5061ED9364B646C38D4BBA86802CA6338A 94E135D2256920EBFB1AA22D9E90C7D16853F0DF9F2D942748EE540E4FCE63C6 5380D7AB4ADD6CB00FE8F7867E4862D8DB432F28331428CC350CDF7F447A65ED D7683ECA35A22ADD06E9FE6BAF060913AEEE7B2B8EE4798E437698CC9EB2428E 74CE73F84D0D2292DE709D71FFF8901C3505370E6F1D4E28E6B7372492C65A88 159371B1D60D77CEC93B272B6C5394EE1D2EF9969DB2838B8E128553879A1BA5 2884B0A596E8FC3D1E648B7E26A4AC57DF09B9CE09B2F91D8CA618CA52AB3DBD D005A56A420366069B73146A6F58E88BA49671A1AB7C2070C3D42AA770285143 40AE7D7868C0E1993506B07C086AD7D4F28CE2D15853FC5FBCBF9425D8012B9E DB6E1E5002517659C8DA69DCEACA94F368537668843D281FC11782F1C5F71977 CA215349EE6F20565DE3D8D8212A40E1227A4B22965FA64A0B02C62BFDE97E6F C3C54FED4057EF9D258C42D7440C78C5E0CC58A40DD74ECED4152F70A93CE71A 1B3A57C46F74A6D27BF98C97CCD31A8EA487260F224A3E40F52C65490AB4098A 7B9EEB54A5A415C8C88568F7D9EFE74BBB785FA18AA27D9201F28BBC477A20A5 D1307AA78EB8C7CAD409AB64B29E4115E45F5FADDCC80CA74B296C4265A40614 37F2ACD8386AC0202D6FDB6711E8CB06442F209D781E940ADDD6D881D4F8E874 357C533115923B90138FFE31D3577C6AAE60D768970FAAB682CD0DCA3E9A9A68 6393E4B772691C1013ADFFC90C508D51B02D2518ADCC7E79F7DE5DF9D18B8435 6129064DD1A3995E5A6F45D78287CC10A0EAFBF47223494C5EA934B1BC2F7C53 686C5880303F9E3ADC8B100D441D944686E1FD811C646C6DD0224F6CF55FA87F D132EF50450879A25242A18683BD6D0266F8F333F3768D1952B0F32AA75106D8 EC0AB703F287E847CB91FFB88CD9DA174B49171822BDE34621CF41EA772230A6 3088F8D19CF2364A329162D39E166AC728B267758341630B00398D64538FCC4D E3E6CF103794C29AEF7F7E56970F6B1ABA87DC8D23E280EDC77556593D02DFF3 154883CFE4EF04E07E7539A4750FA1CF1A994E99B656E728D140C83AE1F196AD 9F049188A4184C84556C0476BE46DDA8ED86888DDA3065C5091D99EEEAC43092 40B97AE327215024ACC0134CBE91FD761C26A48EDFF9028DA28222985FAED7B6 A1CC891D07185666E34BEFBBF77C6C32B88FF3F1046E4EB2CD942E70746DDCDE 002E74BA03A2B15E0529E61DCAC207A71F61C89D81B3C53C5B458EAC70ADFC54 810310CB04E1A21FFBC5DE2429EC0989A3F2B6AE4290A005FBE736750956765D 637B7CABF7F9A593D9FF6C322895835C0007A78771D1404671122F9CF898AB24 1A5648EF8C40B27FD537612C4CBC6E584FBD058DBD4F0A00C63A79077826D3F1 859589B221F7F82DBE392601B0A89142648EB40BCD943E382FC7758A10F978FF 6DD9C3C1D284C5642C812DBF29A75A50BF63F788CBEA5883DC1544ABB49289EE 2C99CB03C1BA72C7320904C7EC94736825A793D5629EABFCEFAB8D28B6F23858 89A6967942A943FAB5E5B26B8567CC9606DE60329C6D890843F700FC1F60656A 38164ED7976AD47A8E54940B9E340D61353AAD260C9273D45772AEC8E9F4F045 9CC576D152757AF3B74DFB9B6962001EA9FF7F62C2E36F71D9B76BB99DA7631F 774795B8CD1E08480153496DE5E08A1F4BEA681D0C1D6336A49A222B0537ABD9 75A3A9D27D0B71B8913E9355F8E56C5FB3E14B9D5ACC4F87339FF9D9039ADEEC 660B5CEF75E7C1772D4A3A4D0C8976A165766D9DBD0CA8132D17E5149AE716A9 2E255277FB5294A96194C462C74AAB251A36941768EDB3EC6DC2C481393ABA6C 8BC2F3AB0BF5A6E5619BE16DF43BB099C6CEA5044ABACC419174664232E97B29 ED32362D219AF109E5D8CA751EB1F9F31BDD08C93AE018E5269AC327FEC67D99 588CA80F068AEB94A7B943BAD5EC8D89C0B8D153B4345E77A5AD9B4522208A33 DA92CDF765B44123C6EBAA06D629EB9E8D0FDD29BFD60EB582CB369474767FE4 C0947F27DCFE0C8BD3CF5131E706E02ED136DBCE6363CB5CA637E08C3D832037 5AAA88B746B6D915EE72D7B458C55598DA6284F362D2DBF06C51DB50A9FFFB5E EBFD69D8D06AB0A6DF2D03F6E14FF290B1A1531109E43892B82B29395910021F A6EA74B8420A14FC189741ECF67F81686BD3C5559DAF75DF9FEF3346CCC35AC5 37A1E30C2602945974A2359EE3183A1AA568978F7732C35BE2B9224C27161748 515E5899B0387F0640DE1D712F390A8A026FC5C5A893E98F46B418B7B32BEF07 AD0EEA87737D929180B2BE697D0DFD46CF307E4FF76BC03492E66633F1357848 AA5A594EB8CC5913E76602C9CF8B7428F67965D5BAAA29BD6C978EF6B22B0BEF 4203B223443554971EFE558FD2F51D01B35D2194A1F6820293385CF12DC1ED73 79EA6082A30796D5EB72A67C5DB42A01F18CCBFEBE2F10B091C43C2CBACD8914 D665B340281C1EBF92249FBDAA577CB7769974B669DA0B74E822EE5DCF3A32D8 9C6714D8C82CE9BF3F16E6336094BC55381E73A96D45B7A70AE00F9CB8348E08 2A64E4B40B3BD0A653B423C5D3C1ECB62F5E05393FB8C9B0C44AB26F6BF796BF 5B51601913014ED708B97731A5642351ECD0F6CA9C06832E0BCD0055E9BA51CB 7242CD34AF0B75F3594AF9235C42B974074665C5B6C934B08E5C7F55638E7DB5 312BC541A8000E69A92ED6C63AA6485A50DFAA1DCF9B0DDAD23C43DF22F3000C 0CBF6F8F64F37BDF8F8DF321FD8F42C3FF774A388F9C033572B177A493814ECC BE19595AD285F11763857603EAE0D6AED509225CACBC49351E6BF1457BD11490 EDA1C3DD6DE8C7036464CF80FE562CDA51ED2EB92BBC79252FA79EAFE5E6BD4F DC16AB83B2C902A9027BA4AE30ABADFF6D513BEA850FF35416E76FE62D8E88DC 69F0C60921B33BA59FA3EDC8F532B47FF2A5E5680BEFCDAEA4474DFA2F8FD68F 74B5837A22984A7534A5321B83459E436AE4C498702EA14A77D3F78DAEA47BA0 1BE6CFAD95132683BCE0601F3EDDEFF5207FD5FF3CC9093ABD946CC7C1076DB9 4DAF08C682269CEE980159541D92FFE484B7440E5AC58D7707BAE579605D1EB6 42C396807AA13B3ACEDBF3A465CBD56F076FA9319E43907B6522904F92483537 6102700CEAA52EE916B80AA4C5F8C98C9AC9557F97784F075D37A83649D632F5 82A519507162012A671F3B4DBAC454D920606E9C87CADCAA1172A04E445A28A7 0FA9545E5FFD15302664B5C2C4F479C8C760C2A015F5F5CB51EC6C0260154D37 4A65B01E58B458ED0FEBBE74884C9DF7D50770153FB498E94F65475A5EA6A687 543DEA3156D3E5CEE23923120DF4D561D2C082F1F3BFC5039A1DFC1C9C3A328E 6F879AB979F2C177FBA357FD63F8CC21E8AF632D6B01A3AC3EA7DE91C17B8120 42E78A1AA2E04581B1C434A8147DBE81A87C73782DAF4BD5F309280FEA22DBAF 586AF386182364E45D7DEAFFA74E338E875B64B13CFC909B30E074D777D347ED 3A58A82D5F6A6E913054F9FABFDD9ABD8BBF54DC3480F3A90965A0081092714B D77604CC7275050DBCCC800BCD8E2BA540B18CB07AF27D66F8887A571685600F 3FF8C7A4966A8CF8CB25DE0495CD4E048999ECE6579AFA82D1644FE160E2D3F0 EE7CE89045332B172425D7D1443E8DD9043A12042ADD7EC106CB4DAAEAB310E5 85F93869A1C519DC0E3CF8F4C05030F0BF7054C5859A74ECE7D6FC5644C5B84A F3EDF0C4B2DCDD0D193599CB3CA00464A90AB55674F884001EC896726A9B374B 3A73AECDCBE06895E87FCE6267091C6CED0E779DEC36D8CC35184E00247AB90C 37161FFEE7CABFD7499859042093BCAE22D6B811FD16EFBC8AAE6283881C12CA 98E0792640063169F76B18EF543AFE7951E82EDB1DB9597F2F9C959B69943379 CC7F5BDBD1BAFF7C77AD8D504D5F17E1B7DFFC515AC237748D33FB6B9D7DD903 2F3E9768290A90A5FC5EA516A94C1885B17676D33CE4124CED1359E473305B02 03C28731C0FC52B18FC14360C9494FF2A86AEE929E4022ACB78C02ADD6174FD0 D35105BB00643F6560A9CCBB3E5CE2F79F0EB9BA774D27DC476867C991598380 F77CC0444500CF43DAB8D729B31EA5A3184F178F82622A8B711A9CA6A770971C 521C44969E814B44D8E1927C283E6A38B78D7C258630730EA463FEEEAB263838 2A517BA176D1C137AAE7430532FFB0FFCA8BF110DECB42B1A7A9457A9ECCABFA D6CC11CD925518857AAA8498CEF35377CF92FEA77C09E6AE25DB2D09F1E355BD 7F7F5C72A76315F3C2B6BEA1AF7BA5D0E8000778A0FB2C60FF677ADBA9156A11 A5B0B7AE92DB368571C040FD7A29C3DF384CCC29A0E9F40FA385630D23AC1E97 C15C06848761CC7D19D208BC115A6A2933056BCEB3717CE2488E86D0B0D6D276 22B2FF1E77FA719372BE62A5B6E10D3DFCA57DE70AE16C57718B86C58B6A7F3D C6DD45D7559F9A0ED8889E707FE7622997F2D573F7688621245E0FB3D34A08C6 40B72F4BDA0394CBF90735B9E6B3928AD56F50FEF9A5DA8B195008164EC03424 7F5317FB8157C33F6903FD6D4B4728F82F1B02046DA16F4285DF088E08A136FD 1366494E3F5AEBED4B48B3B9072BC811A700940FF4B2A51C0434ABF225B37BBF E4AB11F394332D66393420D4B843CAB6AAD9C32418CFE6A2A1260BF430E61176 4B1762E3C9F1727BA47AAE4C7589E7099A56F5E1CB6BD64C0C8D026ED60EAFBC BAD1476E98F5F12ED94BDB1E4B0D8FE9E36CF40DA6F5B2E1BC41EF5F7CB49825 EA5058FF7C49C5FA11F9F9F575AB4D8237FFC2573F94B695CBE9BC44A1BB26DD C6E55627BA16E5197CADA519CC7302DBE77F1FE4CF68C558D8F6E264 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI10 %!PS-AdobeFont-1.0: CMMI10 003.002 %%Title: CMMI10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI10.) readonly def /FullName (CMMI10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBC7878DFBD546AC2 1EF6CC527FEEA044B7C8E686367E920F575AD585387358FFF41BCB212922791C 7B0BD3BED7C6D8F3D9D52D0F181CD4D164E75851D04F64309D810A0DEA1E257B 0D7633CEFE93FEF9D2FB7901453A46F8ACA007358D904E0189AE7B7221545085 EDD3D5A3CEACD6023861F13C8A345A68115425E94B8FDCCEC1255454EC3E7A37 404F6C00A3BCCF851B929D4FE66B6D8FD1C0C80130541609759F18EF07BCD133 78CBC4A0D8A796A2574260C6A952CA73D9EB5C28356F5C90D1A59DC788762BFF A1B6F0614958D09751C0DB2309406F6B4489125B31C5DD365B2F140CB5E42CEE 88BE11C7176E6BBC90D24E40956279FBDC9D89A6C4A1F4D27EC57F496602FBC4 C854143903A53EF1188D117C49F8B6F2498B4698C25F2C5E8D8BD833206F88FC BD5B495EB993A26B6055BD0BBA2B3DDFD462C39E022D4A1760C845EA448DED88 98C44BAAB85CD0423E00154C4741240EB3A2290B67144A4C80C88BE3D59AD760 E553DAC4E8BA00B06398B1D0DFE96FB89449D4AE18CE8B27AFE75D2B84EFDB44 143FD887F8FB364D000651912E40B0BAEDDA5AD57A3BC0E411E1AD908C77DCE3 981985F98E258A9BB3A1B845FC4A21BCC54559E51BC0E6C22F0C38540F8C9490 88A0E23EA504FA79F8960CC9D58611C519D3ACDC63FB2FBCAE6674357D7F2285 4BCC9F54D3DA421D744D3A341DA3B494BB526C0734E1A8FC71501745399F7683 FD17EC3044419A88C3979FD2ABA5B0130907B145A8462AAF0A9B511D2C8A7C7F 347FF6AC057E6512902BFD2918E2CD31DE615F5D643764E900B60287670AE18F FDE15545D8BC69591A8CBBB275AFFC9B14BD68DF0AAB32268FB84844D4DBC7BB C591C1AC5102C50A9C7BAAA848DA88B0519F0F5F0813BF055CF0E3C86F633A04 B779D2E8E656DB1E09A66A85FE21CA8BA5523F472A229E83F2C4E91ABA46C733 F3C7B5775B06C97782BC225C46385BEBDC61572458EFC5CF4190AB7A9C1C92DA 29F84BAACF552089195966E3AD9E57CC914D20B6962BE80429A16D4DF1ECAA66 36C4343FADF0B2B48F12E2EB8443C4AA29D00949255F3968617F98B8ABD4CC12 048B838EE243A21AC808BD295195E4AE9027005F52258BFCA915C8D9AED9A2C0 80814F79CF943FBE3594C530A22A92E11BE80FCEC1684C4F56712D5846B0749C 9B54A979B315222F209DEE72583B03093EC38F7C5B9F9BCB21DBE8EDDAE9BE8B 75ACE6B12A31083AC8348EC84D1D29D2297A266284B7E9734E207DAF59A25F4E 4AA38509E993C5394FED76E6A2F25462685C4C86C6E8CFC9863338EC1428BDFC 74616BB1BC8948B0ED4C87C15B4405F3A7796F9DB3798FFFE8BD0A94E834817B D5E9812E308D0CC920470A6F2CD088FCB80462BF7CB3F039A7DF3DAF5B2B5355 E083A385CD2EAF0FC181E40E96DD7E9AB9EF5C7E6866A13B8A54718E950FE097 EF0951A357114F18CE9933D28B3A77AA71E3CE884661F13284BCED5D5FD1A86D 543E588FF473DC2CF9A4DC312500135F29C2D0174B32018C8DBD40EF9A232883 710A1F2AB2CD11312300ACDF789A9B7B93D2035D81D1C84984D92D78A53A00C6 EDA94B24BBAC1AD17774A4E07E6F74ABD90415965616AD540C8ECD8C3A44EE4F 7F4F6BB6238C5062D63FA59B7BF08BE93FAEA70A2AB08FBEAAF7DBF56B95FD93 03CA406543BA6C9527D0DF01F5108D31A51778A5EB1C93F27B72B46146A353A2 01CACBC829603B9989A87CF64528682CCBA0562A8165B185C58A5C6BB72F5E89 500ACCAAB8ECEFBB2640E99EAEEC4EA979AA793D013D61D8ACF8784FF8D9398F F6A252A709324FB39509F0B3A4E725E82F53543383C6765BE556CC897C758208 AA3AD37B0406E4A79F8F0A6C1983FC73E71CD858C0DB66ED66D5D992978614EE 1EA91EBE191E082EBA1FC040AF19A2202575C2EBEB8058833E3520FA03D2F915 85C1ED337E457B9FEEB0C6EF2735EFDA6E0D05FA641BCF698AC6B97751E8306C 4DF00A39B8581FF53DB8F8525FDB196D85950906CCB59B8EF171349AA3B567B1 6A00819947A995FB383C3C1709C9A2C113B2E40BB832B7D4A0FBA0B16A2C455F 55809CC425C403E9668DC66BE45B71A81C332FD4DB279D22A2959962304A8F18 085893DAC61317D24A8F198FDAB95F3B86F0AFD35047B868A9A17037A2829A02 BAB042F75F349E197A7EED41984C2859754CAFD0251439921C248B463B516951 2E1322C80D73F9CBCAA63A585450275AC2492E4D3FB78E800F788254DB5E610D CF788DF5C70FF99892BCDF16133E34B24B77C8F097F546B87C603DDB8998B66E BACB68BA27462AF54AA405682EC96D701F0D474DECD5F95CA2102DF639EB169E D518162C2BAE45FF698B6DE15FC6E7DE48C336C40A670FD26952A6BAB09115E1 991F0073419F2CC2A1C08BE91096936AA0C37E4ED3CCCEE235476074B8FF1125 6BDE3701F85532D8BB64CCC927CC335281C95EA689706F0AC717DC2CF680C754 E5EFD7FA4BB8880B2B727A964C876D4A223069D4E6001771F0E23EAD2A4BBC80 E76675297B2EF05F52BF4E71B3EE2BE3048CF088C79540113C66AE98B2FD3CB1 B0741A215FD070882C52765009D7D711DAA2508F19AE7DDA15229A856AC49BC3 4DDF40814FF96500E4B9B02D412E94623C5FDCC76C0FB8E42DF56A904FE49D65 1DA7C53901B2EA71AB658A464D3ABDE27D9DB8D9E0B48F64E61A2495AD5D8DAB B5E72424AD017DF37964AF911BD7FA21A5EB4775DC8E95EF0C0EB856B00D89D7 8172A1DE8530767D317B8256103E53CFB877E10686A04F5A08F8DC58D843DEBA FD5F40597588663D103689F6EB3EB14D06E18C8078F2538B43E712DF491FC5C6 AF639256C8C6134B64D560D8476DEA6329D995E46CC4BC78841C59E73648B47E BFA7DE0846422F738454AE77E822A083405289247BD7C478BE4974F742CD6051 E99FBB1D1B3FBABFEE855174734EE45E87D0AADF32B1283B911162A9955847FD 38944D70584FAA6B1A7191C5C134B73F98EB632B69E2F0C0F94156787C34C8A3 7622A029D58F9626B74F8A8A1F3803E0BC20E0EADEB1E99B70F1BD9F980FB751 2A842843DE42EB142A84D5D3138629AE9EAF6F3479C423E8829C8816FA6EFA27 DCE5580E65AA9854B1C64163DC318420CD993C15BFD76A8BA1182860A6B03D6D 22B8CF43CFE6C8AB27C64842E239CAE707D3086BADDE1D7C94E3BC96319470D6 8D26915C575CFDD03271D6BB9DE86A0EB6EEA6E768B224A626C62A9AB48A6EDB 44F70BB5AF991CDF9736D65933E81CC57A78F623F33EC9AF535F2F25FA4EEC90 D50DB7E87F31E971A75A33A301CA6013EEC5A4E179D695B33DADF2C98364434A 42926776000B610E17524162253F6FA638D6581C18F99EA0BD1D2E24D2424ADF C05010D08192485153DD03930C7BF45237593E484F9851E6D464FA10FECA5D9E 0C8CCC97DE029030900CDBB491C5CF226DBF903CFE7735D939C3FDF3A20B70CE 66579B28B99313FEE914E295388C7BC8E055A2E54EA3A8206D3C8F4F7C0BA5E6 E519419FD8CE215F7B8E9BEC604A9E3FE272A0328A24E31997C8A91E0946BCF1 6943A97CBED2AB9FC636B49828BBB8B89E0BBC2653796431224895ABA5DAC41E 1854BD9764E86147FD7624F736F40DE3B7582EDDFD15C2BDE3F22B5A54D7DF10 B87A1301CE85CFC061689A890A321412A13314AE96DCD3EDA75035FDD8F4AB9B 897A2C68263A68457032C469987970648BA2D88B1C5375DFEAA35A917B8A952E EE670427942AEDB3CB599C5746180E392837D371E15D860620ABDB6AA7772C40 A5E346661673ACA530BE3D8E3FFB895E5DA3DC23B1B43C080C77F7E47847F0F3 F3AA5CA9E4BF75FC5EBD18D19F21A7DAA3B11CABC6E4070A15F7DBC8B05EB6AA A02EF1B078EB66D61D6AFE41DA9B36FE7EC9EF94D1EA26282A9871E2CACB3126 2AD49C2D9B50A6E47D8F2CCAD50992D1B430979A45FD9E76182A19964BB2A1F6 51779A2B258DC1DF4C2F3074621286831F3848AC152DDD2BA561E6586ADA88D3 598A2CE2CD048F027CE0008B828BD915887D7785341E8305DF2346ADB76BE99F 87B02173BDC334E9221C8DF54114A6B24C1C5340299512FA6C8C51AB4C8778CE 178CEF531C6D1B5FF0A1BE8EFF767F959BD4C345C52699A29A17B2A230842BF6 4B011217D6D24EDAC3F6D53482786F1CA33169B90ECD499407D37CE9B70DDF78 7B7547B32952535BA9ACD1E244447AE3FCED3AF28717083CF9590A09780984D6 AF0743C82AE4FB3E2BB2856A4153A3967A023FFC35382D6C22D84A924900B6A6 3DDD400E6D2418DA6C27F2FA34C075C902B89EBAE658B3C9A18EEE449DA5A379 337DE95CB7AB3F0970CF1A5D8FAD8090E495570FDFB2FBBA79244780D8035547 C5A55BB21A2270F724BF5D442CDC5BB9F09BE0CAE59B1C2270F0BDACE698F2C5 DE8F66BFB9634904B161F5BA2B1950048300D69BABD312D58D89C4ED527AF7BA 7DA2478EDC2CDEE3473DD8A8ED9D891CD1FC21F23013228BB3281B71FCE959BD 6F8E9059D682A7FCC5265A0620992D4FA8D78377EB34CE3ECA070EE3707239BC 98907DB0120CE42ABA32CF97127E28382BDDFD685674279F588D4F951216C355 821361790F64C2CC720DE97E8ECB57326C43EE47367628E05769E106868B54F4 C33C9951908DF6FC4F5ED2C7787BD8FA591BBB3E9C6C1DA94CC5E38D9B20C886 7D237572FF46DD896A4D6163408EA6CEFAC398EE041EAE29D577E75326CA17A6 B072D47A7B13EC441CE6DAA042ECD02134CBFA6809A435050413817193DAEB16 A5882C8AEA44BCF36E74E9ECCDFE7E19FF5A5DD7A94E5AB4F8702C3DA7F42325 23C808670A0490F5B373DADE40814FF9650241D3D69C91FBC5ECE728F827D9BF C928602E05477903449E079164CA39859C4BCA60C579F490AA455F82B5050BB3 969AFB478E0D4A257B3356EA3CD62051FCE6C6B1929CFF85BFDF166BEF658E10 3A55E007F38EBBB248B3F0B8ED1925106B499B762E45113AE1AC9DE09644C84B 9C08034B297314EE69BC32DB6E7D7FB9913CE5AC17E7335979E9DCCE2BAB3725 1976155551F9706A576FE0E3ADCCF72C87683291528ECB749CB0ED291966E239 B5E3630676BD409E08F85BC1AEC9A2D4135376284A96EA24431243BD6FE8B966 95F11A4BB53F392E0AEFEA623064FF8A7002367B0A515635CB2D2DDFB9B4A8D7 FE721754E81BBA548848A235B91AD4E4F7DB19CCE2F61D277FC00AB956EB93BE 44AB4970CA56BF59506C94ED160FB1E25D3DF2988A532BDB787BFB8539D22986 FDC378AC31444E63C4727FEE121A43751043849E6DCAC5B59D0FC703AAFBBFD4 E8B7C268F21615AD02CE9DABEFA27B5FE6A6441B619539CAB1F810F1263447AA 633F5DAF483752EF1A0421740E3A811D2D2898CBF53E7F686C9223FD7235F02D 6F90D2D48CC20AB87778DE3C6FB335E0F0EC20B5DC5B65223FE117526DE2C72F FE839DF93CB2A7D66CD900CB325F891E311BEC932F703FB4FEFA29DB8B9C88DD 375EC71B3D58C7BC59ADA91971A3BDA1ADEA629CE6CC92BD542CDDFAA7706FB2 6CDDE2DF07E56D6741916AE8E8744339816F3E6C38062747AA9FDA2A2678A6B7 EFEA870AA3A4D71B25EE3013EAB1DBA34401B867C7A41AE51E0421D41D3BB83C E120C8FEABA6E5DEC53A689C21426D4BBCB68CB37568761C360E6D4E3596FB7D F4DEC7918E58C0293D12D6DDA7E9DCDAAD7C939F55CD1BC4A228B31E9A904156 DA6B40B08E6ACE674618B768DD681C772A3E55FE096CF949CF3B0460ABDCD891 D17B37B355B29AB5137899C036F31DA026244FA25FB798FBE5105BDA29F46538 D3D3AC1001A7BCECE64DE94FFE6C354166A0F97256137BDFA07F6E22A3D1D2F4 9588DBAE95E895BC5E64DDCBBAA8D0A22C229B42CB717FC711E7E9DF793DF80B 9F14754585A3C7E17F37B32924B9F9870DA8635E3E18BD1DCD81EDF01834D9C6 B33F23C956C2FCBFA47D84422F583459D827D1E120B97694D12F1F54D02379C0 D288F7104F3FFCF4F76E3494F4ACBD1BE3A15543CC680924C78A473F8E311ADF 8FE00A04C6C393DE61AD3EDA5BC031E2353076A2489391B52632387CA28A7B93 FBB065A6EF3658AE80B1ADA47E9B2539E73A71FA75645F85ED8ECC257FB4CF26 B6C912DE9D0F9899E70BECCB934AD32CF49A093371A9F73DE6255EBC39DE1E7F 00D0CBDABD4D0383977E694890E71FBE5C376BE5F3A80C28987417504F515C50 909F3D31178BB9B1D085BE514F71B910A9085BD6122DDC72A150BFE266920E49 5661BCB4BAB51D6DEFE32B616963DBD989FCDD1637B294CE4E288655FBEFA1BF 7F25BBF8CF17C2D5FD161A7C2CC9CC7490D9BF15A1D35B3BFA43ADE256E88BDA BD490D92907C57BAC408A575EC84D6AEE070148C7C9A91C03B09FDBD792E8FF0 C0B886AAD2EDD86541E5E579359D40E3AC312ACD3D8FD49F71BD533DDF8859B1 BAF17F1884E331DD07CEEF93B71D492AEBAADF7A263450A7A72210CE630A0D37 BF024BDC09ACC882816B8C22C62AE38A3A8D0F6EBC2B1B2C0B8161A8B076DD5D 4B779C0788546BB4CF57332230D237856B00D79C28A7C01D11F44B7304F69075 94B97A745DA43D1BE561372CE611C345A843834E46AD9DDB16CABCD3FA33D6F1 F6B5C0497F5EE5400B305CDC16A7EC286AA4D45D0EEBB9DA06AC9C5294D68EC9 E4DC3CA2B92CE8FC0526184A86EDC7AB34D67E60AC12D9CA8FD300235EC968BA 92C6FBDA47572BC5600F25249F60AD287CBDAE980E747FCBE7EE5CD323E733F0 63553B494D3DDEB9CC1480B5C3BB79A28E419AA65B18CB297AB383419E890E2A CE6F98C9900CCB4675280A10CF060B8D220DDA1BE55DFA65715EABCC1AFAA271 B1F8732341613E17B231231A0D24D4D7FC198AE04D89A99C4536217769C6FBD9 5EE24A6302F97438F7C0E311C878F674B4477A5ADA3952CDE4055AC408B8174E 86F8FB797646DFFFE0ECA25D1BAB9A9F71F3926D3D85AA63E7A8C931D71E79E0 AF1EAC26FADE468F4FF7F3861D14C10E3BE1F9EAFD6D3A544E8108D5DAB5B180 3950C74818BC8AF4758A108F462EF1826647A49667F5E482038C54716856D9BC 35F29922846D2148F92F943E951D7438C73D6A60459A8003174036C64E1629CD 155D47FD04B03C023AD67CD5A70C98AB556EEAB8C48169706E5B352F6505D580 AC945171BFE62E81F8F500438AC3B64D857BA5BC54C2C4BBB237F8FA51296255 E66A92A61FE13FDE781D393557EB72CEBAD86511035F775FAC39A0479CCD400F 226709118F887F47CC2ECC8F79816D4A945B2845F50AFD62D8C9A9BBF4739496 9E644BC9F7B04803B7EE75A09EAE94365F6F374B4FCEB0B506C76297564B9B6B 8B812BC3A33929AA94692572B010E6210AEAA312BDFC88BF302244AB9D587A9B 919823FD01DE12438D960944D1977800FEB49E638C32E5B188B1CA033E0C37EE A142F746367888AA119535F0CCAF7EAA461B790EB089D2D6962E28A398439BB7 9C9943654D7A2D765B46BC0DD1F915327F369162E1BA1BA83110B93F442905E0 523BFF5E279508A98568CD5CFD18FABBE9D17265A9081E7BF64155A2CE3C0DF7 88D00671AD65654709589BAD7EA65BBA811387ABA5CA0BC3F66D3D48597A0D1D 2C268375DF47CCF62166262AE4840AB03BF49BE67A05EF66328EC729F03CA5FF AD3937FC053E223303565DC771ACF32E63DFB96D5030E787961D72D02C195C66 B48E9AF0309DC169CFE8D16E2818DA94693A18F027DEA0D916672480464F7E22 CA6E431FE38D3FC019BDD229E064B72C545C61C6EA55984565CCA88ACB01F744 3B4593CC8944C70F30925FB48A16342CC26D444F54CA15E5A624C4A2DAA2AEF8 404145BBA339F2A2D6FC2F3ECE54387761CA1213C8D56FF96E37C6147CA44B84 262EA87E7CC10D931E6B5B80D7F09813498497AA84ACB4AC69BC6C8481ED2953 084F560D7B1CF90555E69BD2AF7C5D944E8E3506165014652462BE1BC81CA341 E1B0725159D36DA0FFF3577D1DEBC5D91AE683FB0384 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMMI12 %!PS-AdobeFont-1.0: CMMI12 003.002 %%Title: CMMI12 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMMI12.) readonly def /FullName (CMMI12) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def /ascent 750 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 58 /period put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3C05EF98F858322DCEA45E0874C5 45D25FE192539D9CDA4BAA46D9C431465E6ABF4E4271F89EDED7F37BE4B31FB4 7934F62D1F46E8671F6290D6FFF601D4937BF71C22D60FB800A15796421E3AA7 72C500501D8B10C0093F6467C553250F7C27B2C3D893772614A846374A85BC4E BEC0B0A89C4C161C3956ECE25274B962C854E535F418279FE26D8F83E38C5C89 974E9A224B3CBEF90A9277AF10E0C7CAC8DC11C41DC18B814A7682E5F0248674 11453BC81C443407AF41AF8A831A85A700CFC65E2181BCBFBFE3573BF464E2BE 882A715BE109B49A15C32F62CF5C10257E5EA12C24F72137EB63297C28625AC3 2274038691582D6D75FE8F895A0813982793297E49CC9B54053BA2ABD429156A 7FFCD7B19DAA44E2107720921B74185AE507AC33141819511A6AC20BC20FB541 0B5AAEC5743673E9E39C1976D5E6EB4E4D8E2B31BEA302E5AF1B2FBCEC6D9E69 987970648B9276232093695D55A806D87648B1749CB537E78BB08AA83A5001F7 609CD1D17FFA1043EB3807AF0B596AF38C91A9675E2A53196FEF45849C95F7DC 182A5EC0EC4435A8A4B6E1CDBF9A5AF457564EA72BF85228EB6FD244F2511F5A CA9B71A65D53CC06EF5F7EC3A85106139A4D312378BC22183C09A229577B793A 1B7422611C03E84BF809F46C62CE52D3AE29CE01C32B202ACDAA5B72733EB0AE C31D7EF7BA88D2D14F85313F7A8B9B7A5B124B03AB923744D336C969E5CE304D 3AD977A46664479EDEFB69F113024E761C05FA48A54072DF9E12C2F352ACB3E6 D04F6EEFFDE209E7FA3DA22E5B1D1409461F4286B7F4F8251B44E5CB7805762E E129FF4A06A7458F3191926B1CAF70E32C6571AD2DC07C34FF62840896F4D200 761B1A7FA356526D1E3AB4C542AF13623BAEB9F61B1BEEF79A9205B1FEFDAE24 8799D516A9ACC30BC0139C63C9A0523E9D5439213B67D490C96F902958779B8F 68BD8E9FDDCE8A3A2E35877DB6C94B7612382ED8F218EB1157D2ADD090A2448D 10B99FBC9211C5629ED1C61C74FE93041E5AA03EA4AC3FFDA00C2B6E719CFAA4 262FE17F66804A6B54D3669836EE4367D2A2991580C5564463C973CA0DA38AC6 922716E13B4A807B50304B8826CEFEAA47C305FC07EB2AF25FA7945797237B16 56CDE17AB0834F5C97E0CC5741B061C6FF3A8DD1A79B9A173B66A6A750538E26 32FBC92E75BA15CFFE22A7302F47908547007402569158F62C29BA2956534FEA 7DACF1E507AC309DAE8C325F2A6023D2FBD81EF42146BFCE6A16A6310A650460 7B07BB7647C8760FADDF0DBBCD3DA6CC4645D1732DB3A22D8B76E1D2D48E4D4A 46F4BEB80CE65F3517283A1AE08391FD1C10ED452133706BC6725AABC80107FD 754A8BA47B0281D479F052CE26A723EFFACB79B213041A536542AB334769A2BF 88505D82C498ABDD5A73EB539530F47CAC52825D16A969C8BB56D4A7F2830B8F CB63B92B576E7BD922A4B25E634751F8A3B7C4EBAFCB373EDC8B8281B1D1371A 7844E9AD990CFF09F0D7ED73A5CF873D2D5C9E8A9923CFA31E1A4B4CCCC40760 8B3AC8FC3C88BC08BD7407725281BB879A1A822D94997826418F1B89D303F2C0 BE7A0102E6F529630CBF1BC5BF3E4578C164A3DDE45E62A957EF3FB7F0FBBA6B CA1E79A1ED195B6A11CFB345B663C5E72FA55D80476F604F6C4257B51686AE25 8F7D159FE605DDA0AC74BAA5034F29FFFD403070013C6E2D8EF6A0990D91173B D5A3AEB98B64E412991505C3CB7C2CDE13C091FEB3DFBCAF30C4C19511102300 135BD5D444BB55692013F52056908DFAB2ABFACE81A58423ACEC59344CEF7D4A C5A3EFFFFF70759BC3E593D878281225060B97D1BEE6B26EED90571FEAFA1812 1115C0EEC892F5DE6FDD68321A0B3F10A2D771B79BD85476AF6018472A499A86 07D64CFF4550866AFE590C471C80EB12CB3A989A60BC7BED39097C12D9286E39 14C7952C4C64820B4DE44A1827B7B0B535244E93FDB80036D6332F90F95B472D 7031E7E3819E881BD0313CFA112EB3AAE943C99C47635CCA7E34DC0306C04E5D 2E9F60FF037EB11602BE74E8E6B711392E866E3E55D988F7C856417A2B9C186D 639819B4786D039B77F8578EF63C088FF28BD08D8353031445C8498A8F445BC3 D08923D32AC04BF3CAFEFCCC1E77EA894F4E846F47EF62D6841B8D8576FEAE8F 90044626869D04D61D64D56E8C51AF8C18D6CC3FEF3B6C4F7D56FE3260354948 10104F69B117FB8269292579A7D52FED688C663B643D8D99F13956612271073E 1A337AED059B7A93819A28CDF01569CBEB51069D22ADAE25C47355560F402B2E 8C9900DA82B79C64497C8494F42FABE5AC41791C2010D98FB7E593C744F250DC D837DB0EAA4F75D0016970F3AE8359878A08CF9A697A06C5EA945819151265B9 1A12122B98F79185DF852257BB4798E7DC03712EA6ED34F6E6AE1476788DBC33 9229FADB8D581BE1A63F596698DBD6DB98A092F67197A4FD4A50B648F2691875 EE2495D6BB310078F516785A0CEC7EB6E8305FDBAEB1D15690409FE32DD9CFAE DBD3866FB63EBCAAB73E3E4BE5D7F3AA44793938AAF3F8341683F0790F1D46A3 60CE083F9BEDDA22E0639A92393960F86602216FA51E2754BC2F4CD0BDECE3D8 FFAB7E0E49613DD4956C9A10AEA798BDA1F756C755BEC12147ADECAB0FB73B7D 203A11D84DD2AB5AA98FD38C1C2573570FD49A4924A94A106D2A7D850E793608 FB135853E8C4204441CDBE697FD0CB330B1C3596F32D2BCBF263237EAB362D09 DA6F531B40384DC91F30674760CA7B64BA1968F6A7FC9EBEF431A1AFC5E76D7F 2D44DCB7F61C7F6B16196B3E8B47343F572DBA8B8B21B43E35BB6B2DD5C7982D 244FD4304D254D6CCB5E8CF70E77F50812F41A988EEB3B26BF0F6F69BBA18077 31134B5A5823D10FEF6201D045AEE7A24E0F25376E9FC66340C56C05F6CD810B 724D85CC4BB8D789834A447CBBA159565D08BA5793D8599035BB5063271518E8 F6C50E7DCE71B1D186270DDC860C6DC0CD506010EB5B1FDF6BE47A9A18CC15D7 D657E58BED9EECAD5CE5D49F63139A39BC52C6584BB2C3264D51BD584B40F8EA AFCD8B83F548594386EB2B05CE803105E84931DC6E7A1398073D48E130E0D907 CD0F1ECC3254EDF5D4DDBF44415DC9BA66C673820CDB0FDF033D59BE2B5EFCEF 01FF9D33EDC88F8D522E07F1689D024DBCD09A16A63519E1764C8630FF36058D CFC07027E0ECDA01E0E85B166C613B22F587B4D355EB018BA93E92A36007B4DA 287FF5A91F7D8A0EDF5554ACCF45AC8066E88865C5692E63EB99CAC81367B605 8E6C19EB98EBFE0D2D161B447B9A70CDD1122C7B78A413369016E6D8481E2AE9 9AA97B5DD0ACC9B0820F7742CEB2F46F89F3E2092621969A88DC0156B4F941A1 6BF1546D4B136657C47B082A8A35FE96016BAF3D9679B8C32EDDD6AE6DF3BFB5 7854074FA019707FC22BFA82299E72ADF9A980AE29A8E2434277E58B01F6B03C 192E1E25DADD49F6E3F69799AE62B56E00B60A031BF8721DB8B2CB6D4A4C15CA AB1FDE010AB7DC0DDED977389B101B8E53A949222FAA126656E02817DD32B0D4 A49516CEC2B97EA7C78FD66229B044EB92F502384BCC6CCDFFF995EABE3BB7A9 50D5D1AED861E7D3BA8D333026C673C5762712E763E59261426044583D789C67 A606B96F97663F92BF104CE02FBFDFC521EC0D6670B7D4F85A229F51426DE912 3B729C4A535FB7C88D0A5E78074751B58885DD6BDD2DD9E9C83F105E8CF63DDF CA7DB39D0319CA7CC2E73F42747F007574DE25AE1538B4D493D22D0D5F0F80C6 5F6FA3937C8391DE2F0116F81DB2DB0EF751EC838A7F85F163A6F48804E84B96 8D715EF25B7E2A5CAECC558D80F421052A1D698F3B8452AC27E30A4E6226E3CE 084C8A83ADA0818A110923CF7AC7AD4CB92AE4ABBE0A9EC1FF935FD02774C1F7 92A278E513012AD17722A23C55EF82E18F8847B5CCE47F4FE3EC508BA563F7B2 AE56C94285A18DED4D432FB0CEFC05A20BC17DDF9FF919C724810A8ED7358A27 97EC93C1A13C443A91947FE1F6F528EA7B628917FA7E554A1D7B31ED46C5ABCF 92BA57961C8876DB4041305EBB029B03D8351D5E2819FF87E97ED214D8F1CEF5 7F7668DDE223721C0B810F4A4AC81CA4EAC86EAE546E1B15D91E626FB9A31824 5BFF17C4E79FD56ADBF6DBF01BAF6453A81EBDCB38A5FC0FD0FF0646B3B0D199 13E2E59A1B5CAB6DE5329BE389BA0E2A2AB55CA40B711ED746C24F1E48892E76 6DACF7DA163CDC90CF076763008E7A899870CDED5A80758E6177BE6B93B07EB1 5800A3BF7B9AAC3FA825CE594EF5B7546B181375FA8F37608DF17856D2F8EBD5 6030A9E6F6BEAF224AD2AEF76D03B023E2FCB922CB8E3C6816AABB61FE6E4F83 F21B4935102C860ECA03DBEFCA461F0E5B93E5A8D18440BCF7D1D6252A24CB6E A64FDAC8B67C4888519AA368D9C4A8C08C7155DF5BACD75C5196C571C3C456C4 7CE8D90215FA6EE8CDD72C48740F7F5930EC3632DB63A9C8D2DA125088C0F05A 9FC83D16B7F53163F4EB6FF372C6C3115F1E68EB35967D11126EDEDF0BF80817 E68A698183B3EB0A207DB43786E1B9D289359D75AD5E465328CAA90E712C2962 AE2A466173F2FF30EB535A6054BB0B875DC8552C16B49DF17CF84D98D35497BD F55E273FCBB0C735899529A69990E09149FBD2DDE64B7FA8D50AE83925DF03C8 0B63EA158FBABB12A028803DA4B9DD6C48C0FEC469C4E730729F4BB420D5B003 1918B4AE9CF35CFD31E8E62A44C0484E3D00143BF1D330235E821E5CFEAB4D31 7CB4604DB1F310457FCF9075A3527279644D908DE847CCD00B6F50DBDEF91D3E 38238CAF550FDCABA2C3A46237218DCC5A09AFAF69997E1EBDA7EFE6FC99ECC8 5D4AFD5EE35FE2346BE79B499EC8EC436868154A947D13BC02C780EBA4B9E64F 3026F1BF5DC1F8D64FEA1281EA40B4BC355638A3A59BD9055BCBB232FA45EA0B B405131B64F105814019BC55466EE78E9E9ABB62DB30EA452F7EFD7196C76A85 15B2CFCD89922CADC0F392B0C54A231F3999AEFB53C24EB0C63B0C8A1A1ABB6B AAB2F93E5ECC7AB90EADA320E918106BAAFC1F8C425C617639984629018BA674 6FF4F338AC43E23BC3740542911C058D43A49A11CB3A0CC8E3088BB5BA6048D6 CC2AD250DE956BFBE83BB24C945C20D9C22E7105983F284EF478F9B68BFB0322 EEB7D62802CBAAEFF1C2332159DCC7243EA40CE15C734EA905E04C476B178B82 A08ABCB0B86A7330C75E62EE7844C9E22DDB013ADDF20AFE08122EE1B930A81D 806A0F8CC584CB7FF5F56F9B35E5FF78FD93E7E4A40C64537464EAA275FE88F4 461FC6A467C8A69B9A9FBC10D44AC1B753D313A8E7D97F5FAEB60F82855658D1 4DCEE043C8FCDFD8A29DD091F3BA55874A458B2B8989F35055C72FC411382361 9AADC717E602B48D7C9521D3971A6F7EB19D539445DDE9EFBC5B58FA9E5E426C 172C45CDA24985FC4632287FC3B15849DEB56F5A061993AB10A6BC59868534E6 69888175053108B77E4978D971B4EC57224C0F93EEA4C15AE92254140A94704E ED5666FC06C5341F643F779CC88A9E81891565C63B6F7F6286E664F4E0A48690 356DC96F1B98026C563700772485B83BFA06435D4E0793EF822F423C93FBACA0 E5D889D2B76771C6F0EE997A5DB43C2F6921132890406E3C33F6F159B14C5D78 7C151BDFFDD02B697315F191B5490073EB418A4FF2A398C68D44F0CD1B87CF9C B52F12728B72F94D752D23151196A256908135C87991E508B8906CE2539DCA8A 31F86809C8C6C18A09F6129BD7CDC6B37E76B648788056851F22BD3E3B5772FF EC01D822B57FFDB3BAE624F05531292641FD6A7E3666152D18F6C653048DD7D7 98A942C840C4A0FA662F260B21C64214152BB86F03662A330109C5AC0A5EBA30 C6201F558858130703DF76AF4FBBEE069BDE45C0D9467077D85FFED4F9BA9C61 AED87D67CDCA453A6528AC5BA153E1039D9CCC556CEA5CBB542265FF54A1B208 E0E13740E7E7C26AA00AEE909F8F3ADC2726081A744D8EF6BB711BF5F611A900 76F91C26A338DA13A7160A9F42410CCEB3190000D963D036FDA05A29F598EF40 8FAE6F8E7E6F50C99C3304A573501C13A00023085F057DF331E3354CBE65D573 CAE73BF15B3B96B502E0AAF2B4A86237E98A997AAEFFF4227D5A26E8972C48E7 761F430733E6EF8AB2D903C17FAFBFA21C25F8A0AC157D397BF3CC1AE7598F0A 2BE4FB46B29443CE57F41FD5F91122E9D86F903E94D5B55E2BB95949C156D138 89883BEFD634311F9280C7F028DCA6408D3A682DF5B55B9F7ABF08F019190F60 D39E4F0E80F0594235B09A5320109638B938633A2C196E4ED2B43DCD8643C3CF C6123B076B7F73352F906D96FDE0FBF50CCCA432712C574D5857838BAC30B485 D25024EB254A7EFE57D1DF0892C275CDB3DF77602F0FED0FAEBC644BCACA04B8 B424DB125E487794CAB36E01B5E1A26F5E1E97A739AA36D77A12F5B45338EB39 AF36CEBDED55DCBFCF497FD475FC6BAB5530AD6153C6BD982564EE8712185F1F D5EA7ADF4104661168A01994C1FD773A50C8AD6A3E4D332E4D59521BB8BBC6C3 866EB4AC3EA4532477E6CBF6BBF0860031C3B916AA25E3492670EA67F55CF4FD 207C684A0DDB6F4AD21B2909CBA71BCE2E762012B0927BA72367A6AE0AF87F73 756C9BC85E4EDE35317E2CCCD138C02C7A8013AFDC1A48C3A4BB8EF257BDEEA7 60E012F54D12D31D18DC59D5E526F12567B8688B4B67E16B56713870300016BD A3B9DA87FDC865246AF8E94316799110D86B1DDADB8A673402D4226C519C058A 1D1E5A5778584FC28AF12819B1924060BC4F54B1054EA6AB0149E04B8C4302D4 A56D8A347EB5D3D2A0E12CF7E35059BDB53D9FF6BD25F6D9619BC4669CFC1048 C6C9978B8751B840F27D82A69075832BE59F55C1737CBB1220FB8FF691FDBDF3 03BD7D225A9372AC221C38245E48320E1CCF898D9EEDD678E5B8C65B7F588321 1A3953EEB9B39EA9A8CB72DB08C3E9234DFFF5FDF9DF804C021D57E97DA7622B 97F4CB6E0EB640E0DC9EA15C5193F92A3A7565F4C7A4C9CC327F7CD2C44900AE D9E76FFE62FC37FA376E77131B566AE67C3E09DA80F198BBB995EE8FA47EEDB8 4B467C6C7DB8AEA745CF8C56B8BE56534E9C56FCB2B7006426DFE93D728FA4CF 94F131C549814E54ECE7C914C5FE8E4961D3437CE7475D03534B62650F551D97 201C794AA877445DBEB11C85ADF6119B05360700F8CEDE4766E3A1D7A35CDDC7 9ABF7C619E3868A39D1852DBE1EEAF5D7898C78323873AC005542B68C43C5000 CC58F675EB595F87C879694751494676465891E8A897158B481F11A171CCBBD7 29603F00210CFD7FF31FE3D273933ECC34AFBCC4108D9B76D9ECE63EA06CF939 4799092A54A749DACB82C1424E9879672C8BC084C360014C9C1B6D5D65C68AED 66CE329C3AD712C0A36BE7EF03FDF339CAA2E0336D387A693B1DFAB5D5164E31 14755A158168962C9B399F8F1DF3FF5060D7464D5071058C30C572A2BC7DEE53 84BD7614A4BEC4C84E18CF7EC81C811724463BD46CECA5FB57B0F55EAE20CC74 6AD815D1897B037C197D2456797B992C20C70B663BF99FE28C513B4E221C8E12 49779F8C0AE8517048ADDF7CDF0D698E3EFE60071C4997B7F5EF12B6CB65390C 224F13FBB99FFC034C0710F05019899689B6D3350BBA65C7CE7C2AB03D81B9A5 5F3D65E4D462DAB189006669F7390A78A1B8908A4C913B15DB8827DFF15BB9A4 A6037DDB643103B937257A7DAB025F09D53FBBC2BCB6B0BCD8D56B2B2784E498 1F6CF8470DCC892AD0CFE11578718948BABF9C1427084643B66BB9181094E29D 5FBE37708E1D8A6B7518A96876844CB66954227A7A6AF28DD075A462526DD5D6 40EECC56FA366106E55C7068997B54B7F0D03AC1AD45D28C67C7ECA99DBEDB1C E18A79C353113E2E05B837E703278B202112B1C69E42A69D64B62F0E7D8F7E5B C1F93F0F99EC20EF312046F4B0CD7DAB31E422070B629A7FA96583CF3F1519CD CF08806F40ACD7BB5C960F21E9DA7FB3C72CBA0801ADE83DF738A4EC94F2977D 2B95A166BA4AE28CAD1E37FBBF49D342CDB4DF615E2C5F3076313AC517C350DE 710F5D52DE31DF69864D29DABF14234DF13904BA4333B0D714EEA55CDD79DE45 FF5D64259C877191547076B1C7684CD252C0337BD9DF66CDC5DBAA4F3102F2E8 FE48385C55727B80D11F3BE0B7568AA9356FB2B180A6B1392D620DED02F0B736 5F4399FB9D32DFBC8ED942AD311C82250DA8BFE98D65 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMSY10 %!PS-AdobeFont-1.0: CMSY10 003.002 %%Title: CMSY10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMSY10.) readonly def /FullName (CMSY10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle -14.04 def /isFixedPitch false def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 13 /circlecopyrt put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD 028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A 11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F 10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D 7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B 491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D 9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E 0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD 5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B 5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB 54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD 2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C 16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F 483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA 051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B 8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB 0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD 8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F 153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A 98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B 888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D 052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F 07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D 3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F 849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE 84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA 2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD 2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E 4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB 8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C 4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF 035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B 0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E 2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B 60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E 94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA 343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE 894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F 8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC 4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A 60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E 71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 F1795501020D5FF0AD25584C1D47BE08ED6CE96278050BA67680A3B973613647 A93FAEC756FC253B3693FA2D6491B276EF45751EFB306961788E7C15297A5822 AFC5A2DABD0DBBFF0BE135267EA6B9D1B4E4760ED14895FFE1F8C3F564830001 EFA901B8442BD2D98561BAB9A0FD939E0F856E4D2EB04A9A4496704109B8A84C EA06AB0999427B3B1BE776004AE906D0F22159C051D88CF573A0255D99B56781 CF326CD11919AA40B096769CD6D0ADF3ACEC7957621084ACF21AF1F265416628 86B67FCBDE9370D4F5C6F5CC67EBB0A2727E074090DBCA459AFA1A4778AED4C9 AE5400775223E684BFCB 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont %%BeginFont: CMTT10 %!PS-AdobeFont-1.0: CMTT10 003.002 %%Title: CMTT10 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\051, with Reserved Font Name CMTT10.) readonly def /FullName (CMTT10) readonly def /FamilyName (Computer Modern) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -100 def /UnderlineThickness 50 def end readonly def /Encoding 256 array 0 1 255 {1 index exch /.notdef put} for dup 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 48 /zero put dup 49 /one put dup 50 /two put dup 53 /five put dup 55 /seven put dup 56 /eight put dup 58 /colon put dup 60 /less put dup 61 /equal put dup 62 /greater put dup 63 /question put dup 64 /at put dup 65 /A put dup 66 /B put dup 67 /C put dup 68 /D put dup 69 /E put dup 70 /F put dup 71 /G put dup 72 /H put dup 73 /I put dup 75 /K put dup 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 81 /Q put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 89 /Y put dup 91 /bracketleft put dup 92 /backslash put dup 93 /bracketright put dup 95 /underscore put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 125 /braceright put dup 126 /asciitilde put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C3ECC63492962B685F789DE4E796D1EE2F23B7C9F9A1656B85982FFAD6E2889C 7A667DB07ADDE075297F9E5808A98A05DA37D8F23C62115D1C08A331532770B1 E0C7B867A3C0DB7557FC8207C80F6E3717180E7D4F3D6B66C7406275A3206C80 4CAB4DA1D6EABF67CB1B8D2E34F25900927BABC9BB12685D7D153D0960692BF6 93BFCD7FD07158CECA1F10A5D75C8B02FB448147838490E80AFCBB1340C523C7 E247273704AF5EFBC8FE5526AE4159CCFE773D9AD5893EAFABB4C4259D5A5BE2 1B50B7377C8D45B3D39C45726F023EA52AFCD5C7FC6577880BEFBFF509D61A27 A58C80AAFD09CBB71E088D7C414275F6256511CF4FE9B3F3E74D8B491F2E775A 0495EC4C7C74092A337AF57451EC45DD1BE65EBB4F6F2AC454F58EDCC6B7AB68 0728EBB958A1D5AED112BD7193A3047D23C8AEEAC26C7FFC1E78386C0FA6BA73 DBD43E42A5C77201D4CD352EC3E9C496D2EA2BF7995852A50B29D3E2B16F9DE4 A769ECC02C227A8487D22BE8EBA57308B5992B9433D88982233FA0C895FEDFB9 10B63714A2FC8B9396F9D625DEC3240EB2AD54E3F08238AD01C665529018529F D078C2C287675D7315CA64E907C3D428ECF2F3283C5CCE860EC461D403251DC1 75E7ACB31F8958132F3D57AB5E34F05EA9F5042786C108E51B07635DC743D063 11AC9348380109216561C53A74F4C3D595426A1A86E9150D3A9EE3B09D7670CD D4F33FE94D92E8981FEAE708E978EBCE5A6D17B4A1D1D9161156127EC0AB5B6E 22B801EF92649437D89CE344D6E4C92F942AC811710D83589A03AA83B229D3CE 861D48CFA69CFB61BF3A6176FCE2E406CFB30ECBA8F9595CA3405C8F0FE23DAB A06D1300C586F8DBD775F22F2368B6714FAAE85868C9EB6F7548E63D6E08EAB8 B6764FEA41156D3FAF9BCFDC75113B8E73AA4F31F475BE491B45FAC197ADA3E1 57E0DFC05232D2596F7B69CBD593181849FCAD6FC6CE7217D6C6CAA328BF57F4 FBEE4E16CE5035383201CDE43EF601624AA1E9061821345302A49C06AF6B003F 14B42E6CE14F978F194F0502B7E610DC069791E52CE628CB5452BD6080C37F1B 0A7E8F6FB6C40329A70AA824616CE893FFECD2EDD9F8EFABC788BD415FF70F0B F584471FC7DFFCDB8B5653DCBE2D191E1BCDCB83FAEDE288C9FC34C6D35E6738 64F02C8A76BD7CAD08F318050E711C1687BB8C208C8ACA101470AB06D4975F82 65EC88DFB0CE26289E3840E8D3E7146C9A03F3CE9D6434B04B0310308C221E7B 8D8709D363DED43CA5FF1C8CE6CD13B5906236DDC75FF76DAB5A38765CADE270 3BB52ECACFCEDB884D1453E01A9653816ED352AAED96DE3D2894D64D1FE67656 57E1E7E51CC85CCA202965C0AB8DE87E729BE4D7F1C631B6DB9F0C901E83D397 791E4DAAE3B96B8C7AE44F70AAFEFA1E8FE0EE6A8E811652DBB48F2336AED844 3BFC598A713C268C171BA0331D042C38001800A4C8C647055A0B064DB18A9D3A AC9798AA8208FB2862002C164D0FCF6FC38B33F2AD7E48C29D349583E02248FD 61E03C71E686B96B4D4E0124EE78FA97082369335AAAD3429F5A961BF05A228F 11A453C158B731A5805EDA613947AE9FB40782C1077A71E5C95228916E337821 DCE43615341DA9FA362007D0ADDAF128E4E336E0DC8190C5CE43B13C27519FD6 8638AABF83D71DBA3B68D64A5E62CD663F9D79E56AABAB474EEBD3B4BC812DC5 165D4777602F732DCC2A342BBDBD3215CC7360DE6902096DADAC86D9C2D17F9C 23C68E22931E91FF5DB218AE2CA8EEF4F3FBE930FC47141078B466AB2C564FAB EA33AE882A540B806AB69CBD2A8E55D3C26BDF7A0FF87FB47A2839A2A7896502 47F1C68F882E38CA6994D57D8EBC8F15FF8E091E3F1C87CB83A65571ABC8BC42 F2D2E63D7D777AF0C2DD7E5BAF96F20E29D2F08BB1290FD43DCCB7C0C7F7B5FB BF67E1289014DA74C35B6734D3618489DB97DCDE55F701A63A70E3F59A3DDB7F C6A25976EC99019C6680BEB374214E92BB04498556D84BFE289BF1E02E07486E 91F9E5E5FAD11E65FA0356054F352E3489ED93DF3A241CA4A354EDF0C5858517 4C7B889D256FF8721CCC80D14C7B40B6CE001EB5EEFA0E2C991EFA6B80D1E6AB 19B86AEEDEAEA08876BE071C01D801489F0775E46460F6DBAAB3F2C2C7F95394 4CB70205A4CF5DF4CBCC45E8FCA893CCF96BFB8D08F2E439DD00EB511CA34AFE 22AE0ED77D48EA49EAC1E2EA81594EBEBD0539801393C118CA227A95968FCB1C 0AC1B08AC36A6CAC79E033E4283A38BAA3F3081D9AF5108E5185175C2D1CF1FA CCCBB612308A6A8ED21199759C04CCCCD3BEF1631AF6EBE4437900A3A581ADAA 3DEF3F55C84532F7A083D553E91A965A732388B1440116903A65EB8D151C7135 AB91DDBF69A6386B15C104868DB82ADB1FAAD169531A04FF73D89C8ED2356F8D 6E6EC6D1476B8345D340D8B6827760CEF6C191E8843F12F3772EED191E596728 80651E10D1B307DF76A84028EA7E64321F59B4EB9149B347248517A513750E53 E61A74BE0CAF41F18C7AA88EEEDE0ED3D5CD84754657A92669CC9BFDEFAB9CE8 11355329988AF84EF116B0E2F68451E799EDBA2007CDF555637E247F5E01D3EB CE40A4264D275863AB55D61C0533A4F49D64EEA8E05B2EB93366C64FCFF33D6B 718706490AE470C0F297A27F4C1A269A3E9B75E9EE8CBEFCC44FE045B62B66FD 47A2CDF0F19DC5210B65EECDA51DA371BE25DBABB2D13AB45F3B7BCAE838E26D B5319199372E44FD4BBE1C09AA6DB28CBA5D2EA7B9486B36BC7613A0F0246543 B3824B039C624E2A05E4D3E10656D67DB6D7E5B4C2EF7D50C3A6F64CB2F35563 43366F65963EA1EA05FDFEEF8A833B17DE2F15F77E8D1545EA1AF87EE6F50A85 ABF31B62E3BE1DD013BFB96A574738360B1A6C9F649FD44176F5D4FC98A44707 DCF14B274F902BC4580FF1E61176AAA10879A94A8BE4B7B8F191B2E624482DCA F73DBE465958ECE3902EB75059E17F3DCA96CB235B22332CB80FA23DC537231E 02A005794EE621B1814B612EA22ED5710DDBE8F6616F1D67F8909018DF3377FA D66C42BD2C15D185C7B9CE30E8B27E6A142E89E6EA90FC9A02A52F5615394448 923B60EE0CDB61683D6D6F786A20316B992FA8D6BA3738BB66CD55C1988F572E 627FB1ADE7B5D74A54A8AF5A621AEA30899A3B1D45D75252AC88A7933ED97847 B972F944716D8664A2E2E4BC4C28358583BD960AD45261866136E0A626C36842 93F9D95A23EC5721F7783BCEBCFF7433D1FB87E6FCE3F16FDEAE6A34EC296E4E BE5A6B30FBB47562B4D2E8A1B3FB5F2AB273CCA2B4F32353A51541FD44E76060 8889B4A454C42A159A0239B1E451987846DC2B5A1795DF53458AE0995EEA0521 867422FD27F7DE1F177F9DDE065C882EB1AE2ECCDD5646D93B7FC13379451C78 DA50030751DAE5776B8CB90DC02512BFA79391BF8B8BD3B7E893FDC359A36822 536F79289BA4D82FAF112AC06A4EE34C8499CC7AE22F3F5DF7E096FC1748D1F1 CEF00A20701BF1E476E19B8C904B4302D80D18F49E30DAAE2548EA21BCD8519D F1EF0D99125463A8E9B5E6943D1C18E1FD1DEA5073B6DDF91CC8D4FABDB5446D 73F0A0CFB4BF1C4C74BD32FC0E299E355F3FBDF6E0A75285E2EEEA66E4EB2513 995F1117FC751D55BB5B66CF37573A8A932A34AC29581D46D5AB5ED21A5C6AF7 938C400AB449B328285B211E54FB22F2620E1908DB3F3396F91C5A87C4C4726C C8A54D630E9F3D878592520AE5E5B53668BE3FC3D1E4D263FF5C6A84BB5D55C5 467BF67904172EF0CE6772759EB0F75D2403F8A0B40D6DB9F5D74C3A5FB6C30D D04B316A8B11B9611743BEA5CE92D8730E577B13B84283BBD970DF44BBB87A80 959D4303F25033127E48173120E3C3595D095843F2467A3473C498CEB9075A20 5DBB9F82DB7125B631139286D6C5633F94C4D5097EC8B7A8D096DFADDBC89C22 135440B7929C0724EB1FB9D8C9D5480E97BB4606EE6976418A96B42FB0556928 ECC51275CFA1D0ACBFFF46FC0B04CC70CF302406767C7FA493DF1EB10A5F9CEE B3AED9CD32F93D862FA2FFCADB986F443F088DAFA906D950D3257F24C64DFEEE C48CE69284FABA482D68FF726EB83685DD48052F130E18132954B3E44FD3E22F B39515841BEB0A79DAD72984C39DD4FB8C4FC508AFF5B45ECB4B23789F0EE906 9EABEB099EBC24D1393866FD9F4CC79BC57C87D5F027501DA894F237A87BB9FB B09039B4E9CA8E767319630FA2CE444EB878069DA89D36AE4D9CE4E7F8ECC5B0 06D85CF8ED33138F3F7D664E275D9041BA70C6CB4F9BF26EC2B9C5EF2BB9AA2A B5FF38657170B736D0A06F148970A385895F4C2F524A582CE0E224E778585652 7C186BA249BEE06DFC457D728C6226027B8F92A0DF24E7F9E3A7AAE93FDF6F87 E694DD95CCD0BC2504F3D9087210CE220862D34139D33EB505D90D39E7DEE3D9 4DAF699231D57B5AC3DC301B2DD84F6B64D3EACF5D0B690D0BB7007693A72DD7 949C98D8EB9035A0ECECD035CDC6E7B8A007BFD3EB3D8DFCD130158E473E636A 3D00F8A2183766C422991EA3FB1A6F5DC967EF9C8736FB190191154216B7AC75 F5E269CC1AB5FD8B1B8F1632E9496BF02CECAA66532357A0DB3AE03D98351FF7 0A2AC142089A891607B075019E60BBC5CDB1AB6E31DFECD6500C6E40074023DB 11474C87E51DC00983F99863097050A7E428E3BA47F9E40C9EF1B5F0590217A0 A9DB1CAD41A5D420F20BC2AFF0A25BBEA832C3128628C241DF5FE78884C6ADDC E617893C14876F6330D6951DD113F3C4F8678EB201A60F4D9C07A3E29D763741 10751577429E325609A544F60D83D0FD5D44990D5ED78A02BDB2467C8815F792 804C8C32AF13EA9476679DDC9504C39846228B064450180C894451A8D43597EA 50C94125A083C5A0F2E38E993B049C75AE05949B5B09DCCE5EED7C91601BD79A EA08883D8AA2D08C9D5E296AFD13383B457231E8797E5F8C73D0D56A1F7E1ACD 3A1C48486E9CC4DF715366FAFC79A197595F18B60FC89EB02C9B8136131137AB 222A517CD5F5797D6A65BE553168878325162072BA5D719F3510639FDBCBB448 5DFA0B1774CFA961558A0A72D139AF0D5B42EF7897F697CB5942DB7B2FCCDB9D 71472A56B663D2E55A7263E24137165D2F917DCABF63814C818CDE0B03B6E961 9F220CA7EC58283B36F3B7AC37F415FDD00C248DECE7E9B57B07D0DC7A106C69 55BD5F726687151CE743BA4703F19721E773F3BF02E67130F273D35DCF38642F 919D3D0CC9434EBE1126FFED9D7D3DF75B2BBE10CD30D8B8C0903CD1FE3ABBB8 BC90B87AC4478CD688616E797B2DBEE120183ED696226DA703C0CA001BE9D46B B306E7F7F63BED6FC610B8A89B00A5A95701FCC80D83C50874EE764B7C487097 DBBB0146746FFE1CBFCF7D7195F08231FB46755C1DF964C7CCD803E7E69722F6 9D5B3CC4890090A74AB2121E464354F724AB7D39E8DC2234DDA3674EF0695148 63176CEB812F168A0A7498C96AF70A1A7FE2769A3E725883D789ACC8C71D0278 CF3538E7AF786E5F241B9F91FB0604DD3EB2E444F548F5248F65DF7D175A0343 DEB9AFE845F8975DA301F1A4C4CFEE3234AED965B423E4D203C9CA88AA967195 B23B4CD359F7F4AD551BC2564E677FBBAB954D0C3EE386139F7F5A4B1DCF7FC7 7230BCF476051638B337BCC8F5A9145AF38D4987A65FD5A7E8301F4B8D06F9E5 B26EBA34CDB951F14C7B0BE1CFAB8098F64D529F70B452492A1B29E03AA1D0FA B54AA53EDD3EE3F74E230CABB2B94FEBE4913EF0A30E0C4F27A7E29FFE700BBE D43233DA1A0E4A32B0EEBC1B2F9FB7F6885992E21BD1BE5D912F282B0FCF1EFE 62013C4B5C1CE5B8AE189B28747FD30961A3FB1C58C700C9119E592B7F52E24A F9AB44BA92AB05E2CA9CA2C443CC9E7E0165D8345BD37D961D945027E01DDEB1 1DBB608A3A7995A9E99ADC90970D7F4EC02EDCB7D32AB877BF4797F38CE514F2 C7F43965C3135FCBB4D8A986E119C562E6973942ADE968B09A36DBC5391321AE 97265D39A7B7EE00ACD0661D426EA4E5E8114D65587170C73D3559258A172128 5CA211EC04137A6227810826C10E676E9595F9880C0DAE45050EBA9FD950A591 16A39911D102EC836D067418E3FE7B361BA40987B660717E4CCF43CBCF5D3668 6AFE35386A12B9992F9EF7CE7A326A8C02EB51E90837A75A0B781DA6516F96AF F7BCC0503C01FF3C7DD5B574307D454E664CE49E37E01EDB9BAE51D41BAC615F 08590D7A5CCD633E8EB051D8A4C066F0D63CBE9D2A0A38CF97401B541668661C 7ABECADEE4BCBDEA822919196BF14DCFF9CD143FE5ECEE374907F17ABE47AD79 B88BD1B6D6A8DDD56A95A2DAD1B2D3C45D19389F9CAAC36CB03641BB8CAB7C93 69F7418CE2956990036E3A8BB0E48FADB3B56D08EBB536E3A2D176159DEBF462 295F700F66A6917DD457589CCE6B33F498859C33E35F2D46336776BB31686529 B303BA134073508E67ED9FCC2023873B21EE627CD2DFB6F4EBCCA944C3AD2B92 4F9411C31ABE2FBC265D09AC7315F74D393AF906055A304AD1636A5CD22D2684 83BE15E9A035804414CC68914F260510A30219E72F1C4D63363FE03C220A44BE 90009E869C2DA6D639759EC8436096B593A917B3B604271F75C6941DC839EFA3 0B9A58F85E67EBBD0895EF6BEA57CD716017EC0BCF009D27434156CD86F0B768 175571C451520F4AA26BD45AF025C230BB98A9350407BE5C1F1C71F83517E580 7F3A2542F4D6DFB5BA77D93116800A66D29B916F2FC78042068D44A8D6620DCE 97A64BF9A7A488CBF302A6F0173EF1350FBBD46E307FA637AF4600D643372835 04F98F008F3DBDF3D584D936FC268B799340D8647F0262B3C9DCE41687A8CC27 0D6B2DD19FCB4E3AE162CC44390DF0D2A6A3BFD0DD5156B5ED3C031A371A24D4 4DA4CB9B961C5447242055FA6CF13F67C155E6F36215628736704094836F03CF 1D2823E43F30B68B4C0A95EDE5356C2654F9782FF4CAB180ED7B362914F4882A F765062AE02E2AB49E3FA86FBCC730849CE306949294893D2CF06DE88A7776E7 ED162FAA07057BC0C1F5FC70326B2884A5E4685505E19DA512EE2C90EF91D7C0 13F41B468ABDD40FA91430DE8289D65ACECF7BB7A4162949AEF4BCFB5B329542 31F35AECE5E5641E9217BFCF742B8B908D54431CD98DFF97989F901C114984FA 0B2726174AB60C6415A71CC1373AEE18D5A29C34C66E8822C2C298E912F2E217 44B52FBD94B98CC6BD235322BCB219185B4273195271FD3DD5625D9483069494 526694DD7B5632E9FBE1E6C71D50781FC5E4C578579CBF97288A9E92D84B6C5D 055EBE77F09EF26329C9D687E89F7307650AF8E45713B65CB92C6C356EC62F33 DCA398238DED9E66283D790346C019900C3EC090F97A9153F5E1BA5460B5E4C7 52C9C90BE107B5341621E6D3BB7EB0F2AC3D11595F8F6DEAD3B9310B9F706A3E A3CD958623CC42ABE4E8BA63E102D56838503B608D5DFD3DF3BEC35C7157576F AF584C90AEB1012890559BAE9C90E3935CC1EA4E913FFEA421ECD35AA6F6C089 82078877FD89A115C98F61E0999ED37FE634B710854AFE360201E858FC4F10B4 9F3887390A579E01928F8C5AD522DA87167E6F1D2153A48397D23A9803F08478 AD3ABCAAB2ADA02F36C06FA7B262AD0BD026E6500FA6600D71BEE0A365DDBA7D 71A812EBBB71766909A02AE6DE30A9EC76F56E17D811B2EF177CF3537F1A4CCD 5D39BA029F063080AC2ABF0D9EE11BD2593E3D637DC34D4E815BD6664FEA4969 8F5E128D85484125F78AB2E16BB78E605A389377EC9E1876E5028830360F668C C77F377D1854ADA97454DBF45CBD2F10DBC4E9C6B29AA8A875B2012441653008 F5EB97CA0AB351859499FD9F5ABA5464D1BF21CD3D3C1277F8B9796D98BF4CDA C045E7E674DC7B472D05ACF65FDE581C93A0B213C8EB8163957F28627EF14A72 6049530168A4E11D2B7F4FD9391130007C67C4792CA94A72B8ABA43CB4B708CF DD0C96BE177380FDEE3E46DD584FA820C67463CD4031CE04652993FF3DBA19D1 D0A520FD0E52DD5BE265CBADED20CE377F90F876998006F67AEDD30E3E8CAB3D 4B2518556A99AA4FFABBB1E6ACCBEEDBAE2BC1DBE9D8292AEDB8E3F103DBF748 D9E0C6C3F0A4A203DE481A462379216B3CCA465A41D0B9B5090206D797D3A3EA 6E750E5C13F6DDFFF42CA7F046DB5699AA2209A038519F515B4886AFF04FF03C 1DB46BCE65DBA0C4352D85F88E4AF74FC376B8476F610846100AC2A5C1CDB880 A959EB2E020529E3C8456CDF94C36581409E8E1789B2B45AFB8FB541D431A748 35443C33F1E4191B71A3996F53B98722DBF5E30717629EA737E4EB1F7F3A0F7A C0879729840AE4C830E3A2CC3ADD62C1145BF535D121E3875F12228B90561B82 EB2CDB4F8BBF201769BBFDAAED00E9CFE295023034AADC12C217B0100CE8055A 8D2DB665537FEBACD5BCD69D50F72DC60BE0DDC9AAF703C8041A3353DBB0244C A8488514C101E4D662D394A84C5B9048F2EEFF7931A3BDEA5DA02F3C4D564F1E 73DDC5FE2CD57134C1DB9468A2DC585717F65E68CA931CC16F0F7887D2BF2375 FD28B4C0D900692E944BF5710273E30138F4775422955D09B22B738142A37FCD 83ACFD05B6AE9D17C673B24855F74FE10844B5ED73C25221623FCCDFED42D395 DD426D6EAF323A54510021065F91B6248E1D8B0F466E3BE65C203FA87F98A297 E5A95829A4E0A910FEAACD69F6FA81A9AB404778AE7C3BA4DAECDE05C1F86749 66BB8107BA7F1AB76CA04C8C00262F0735ECB6D815C7B2AD937BB50275E1617F 01F89AC79015E809211847CACEDAD713FED01470469311C9F6AA26EDA3021D7B A1C9E4E0F3D073B66BD9C3FBCB6B97FB5C48991C14F8459AAFFAEF73F83F4074 96D705FABBFF885B801AEF577C84BADF4AC26B30A94B8C54B1229E666BD2FF2C A17D7743EAB5AD6E1C2A38BD2A7FED4300A81D982633440A01C55331895BC45B 4B9DC7C0F43FBE75C02BE6ED47836EB92D7B6332D9867DBEB2F015C5A0F3F522 20E262070FD52EE2BB71BEE7B0113B1FC80054ABBF13A376849751AE61ADF535 4B95D1BD84934DDCA41015CD6BB80C324AE8B2772B073C437714B2CE80E11F2B 76DB0DB35372C642AE7BC605B52C844F088CC468FCB9CFB13C6A4DA589049160 2E1174520BD195FFEF8EB36EE6CF7C7138ACD19BA70CD00E7C6A18E0E0BF7C81 295CE640135318682A1A4285C68B52DF7F950CE1BD26F6A5A51BF6C6766D2E66 423B44BA965BBF34AD26D5A0F284B9D9E275AC18D80112EE8AEDBF5E2A6A58C2 937E25BD76655873F1863056E3AE2325CE6F463D89A6178E3FF77351470579EA 3BC3F74D30EE32192FBF71756BACC7E5BC8CA579247276A109093DA0F830A790 9A3671B00269E0D361D7D08A09920B895D1F89346FF161A125E5892DBCC7F52A 2848001F31BAB732EB4E00C976320F04088D0204434C9230B3D2D276A3481389 49CC6E3FA168E4157858C7C6B50A8773F7F7625104C19AD63F2DA9503DA5ADB8 8F8808FA9BC76E2FAA41B2A3BE135390C866A8B822C6E0AF049D82498FE60CEE 529477538C36578BAA7C843BC8FC8659A1F685EF19BA5D5DC53167092562EA73 BA7FE5D104E616DFDFA9331F7D6C9109FE513CD31940D87D0382E7157CF171E4 A9236D5250DE6BCF0F246C5680A8D92791CA155AE942C1D8A77A9DCD88CF49B3 663E993B0B1389DF2DE4420F29C0EC1FBED031486AE43137C68D3CB178B44D4B B181F63B11D2A21DE4A1E748C530CD046643BA951A81B3C0A5D78F53DE84D930 033793C346BF6F1534037CC10E4468D0E359D6EC741C09E4A6EA4D8CEC41F846 81CB64FAC81C877FC43DB4D00BE2D0EB06A80BAF795333376EB46FB942D38E90 F3EE4A987EF66419E7989984ED8B36E9D936FDAF433D1A26DBFD21E69D37117B 12426FE996620C50B0CE91BE8814410442FFB26273FC1F2C1FF4C9CFD3CDB6B8 789B5DAD9E9E95474160F8F293F2D70ED25850C6EB5890D6BCED0B92B197C3A3 431F2098DAB97889705FF519F48284CE07ADE6E6B2935BEE3BE6143EFF691949 17BABBCA7B31E6F671DE31E5EF9B63C4C655460FFE6EE62852945BB1138052CA 35CF43563ECA3587FD9F8290DFC9AB53D599428841AE1C67B22CFDA355FE092C 252048396D0CABA7154EE336D1F021F4C0CC7C3EF47C33407D8F64741642DCDF C9B4C3B90A8AA883A327B95164F17A73F8BFF93F9C9BC8CA3075AF420D4A68A4 CCA219B3D3BC5AA25486046277CEE16F512132FAE2D02CFDDCAA396083AF0B89 591C79C211F90E5AB011E52B36827C7D3DFFDAAE45E196F3A37C0254B076E857 5ACBF02204E8B1E01FA474C2CE29F8FF4B58E4A9DBADA84ADEC02749830CCCC4 2ECB73AEACD6481FF0039067C298760A48C561AA968666F012037DA102DC4B7E 450DB77AB426236601E8B53FC2D483FE9C47C8C645539B41D84C837E1875BBBD 963D87D00BCD894434C466F39F7CF2F1CD1DF157A8F096FEE3B05E250290C74D 8683F09F2CC02DC1B61149332E829494EB03469353948AC5AD5D84F04B4A6BFC C48A9455D3DBEC6F970E72A4F1BAE25D729B32280A43D16E0D780DA82518F0CD D7FC7FDBF93310A5C1B9CA867B436CB37DC30328966F8E6D85CC3BEE3ACAAFBB 7AD796D617A6B480DCB507A605FD1347A693FF85C5DE7E864694EAB70D92FE56 2E5BD7D673F3CD0D83F64192AA679CC947AD12FFC7026C7082AED8441A1A4008 1761C4F442D8366B9505301526445E821C9713B00D6462E0D1236A363B9A143D 5755999AA3254174F5401F03592133E2924D4994A97A620AE2A307BEDB04D9DA 92D617AA7E1DC41B9F486196F85B0F9D4C26F4D67D74A3F8BE6A5E05F302E15C 0D74CF24E14C4BB5625501A6863B1EE19032C3A28B07899B21E0A8DF706EA672 D9DD51A2F5027A99E2B58E626FBF060BF25200B484060450ACF9C64318A86F69 990ADC813C1EAAA76830206527AB4240EF28F04D538E98E31AD943D8B155ECCD 98C39C82D7E43481202EF89CD4F871D3C997BA62B8DDF0CD885A6576CF1FC080 412A9B9BF9FFCBB8DE22D63F6DDB9841ED350AA719EDA87A18DF0E776660023F FEAD68C95A159E5CE4731AA7FEF11A62FEF73CF850142CA18B29FD4981B2B461 AEE5B1ECB409E9CEAB2F2A83940E79FA805E71646A48C120FF056D978F9D931F D5CA93F27B4855E6ED4D7121A56B90D9463EC6F9B76F4A262313A08E76BEA626 3D33C83EA3262C03B5ED7B4C10F687E88F3FFE3B5F3BAF16F25003A21432826E D1C17D67172C5BD9B1D5E3DCAC4C14E0BE2D194F2D42DE37659C704C518E749A 77E1AD2B11CAA8514791C9AD8DB8FBA16905349A0C8A176620C23342F68E8E27 3880EBDBCA5F32FAEE3680092934BC7243500E2DE3A22DD325246F39ABA0F354 36289AB53D71B147C85088703C683C1D96F47EA244E8513814769A7B30D52CF8 49C9DCE11E912F7BFF5CFD25BAC588E476C76B5064D528381C6882CB3BA73A8E C1E605B14304D5BD1A755DEFE9C4D6D5100C1B810C622DF4990C4CFF82187FCA 8CE5A717B266D35EEA7C2719E3AA0829704B3FDC4B0DCFA34E1EEBFB9B8BCAFD 7036015D1D26573C8DD513B8E617746F89E6C890D11721AA61419CC3A3D256B6 47E79645560AE6FBC56725850C60D68ABF8FF3514AAFE242CE44EF87F851E991 C525AE6E8CCD5D2FD7E091972E688B826CCE918852E4FBF9DCA5AC377F7F0195 8CCFA0A096C20318C5BA8628F1B3C553C1E0E083F24E22ADE00B2DB1C8439E8E F2138E45D8D6775B2910E50B91A04CB493A0E6E3F1A971ECC92E71F3E8F14DB8 32CD332FB4C9D0C89CF1F1CCD77536DE9FA04DC3354910E3494B91659DACA558 EC0F8CCFB7E0603570FD5CEE33FB603405D211B6C734BD2DC3378370B93087DD 3EBD7184464B513DE3164CB0C10F5BF386D1308FB4AF8C26308C93ECAEA20C12 D9716C8B29FC3367B36C77BA6F0B40B6220D70AA4C699FEBA3D9DA0655ECB2E8 74CE90B53D74EDDECC270BD267886768DF920E850FBB196080512A0AE489D11C 27D0DDC0DE1456EBE8376163C48ED8899E5C2BEF686464ED53277C764A1D8D80 EC7812F2BA5B7E65349582CF436ABFF6249B4141EC6F21CD7CD4C1A23C8D017C DB296BF885E5B09B8EB36F9799E0355CAD64B60611D64001B91FF15FFCCEC35F 4C4A4FF37124D8497F0508E52BA7C490F2481C833A8072A120ED280BC79336EE B03F07034E8EC04890779D7D222FDA4C4A282705B8A3E66BD5D96FABDCCFBD8C 4F0B6AB3CB420978C2DECAB2D3CD19334396397432D8577CAB85D875E3ABEA8A 51A1D8643619BAA52B7DD571939A2C327955DFC03F61527EC239E696E7C0B78E 73A6D83EBF19244882785A3F582161D4492EE515C99623E0E0E3FCF6E38B4721 7EB379E4491CE7343B593A8A266B83BE2A2277D5CC84335A776E658FF85D39C7 9612211B3BC71E2B8D85474B18957807E746DA079887E28DECB9B3CE7E94669E EC25FF3035BBE99A7E2314FF4A8C4CEB5ECDDA4999B9B2500B46028A9B370B91 61F6EE06F9E4C02EEA683FEE392659CDF283E39B61BFE99DCE8F30F5EC630067 42D44AC6F7647AC4424E0C4964D8CA25CA6152364AD67638F2B7397413809F1E 24F916933FA452A8683A953462BAC73128F890B07E9454FB4059D69B5851D744 AB67E7C0A61414200E9813D685BC535D2B621F8C75F56014014D610FFC4C56FA 06A81021A818D6D368EEDD862C9BB334F050F5502BC63CE2006DD12273746CB0 4335C8E25C462E4DEF12DE2C80A2F25E81A04AE22205C8F61EE20636C2E1BA41 00CE04BC0FE7A2128ED163112F69BDC089FBCD33545A412E24F1B885A315C1E2 361FEBAC883956CFC4F9D2CA2998A8C882A678AE2F282C8E03AEDB9EB7D4F471 55A5F118459A68150BCB2BD96FEA71221EAD5BE0B2CF5C80895F8CC2954A670B 32BEFAA720634E28A6EC26B3F87C74AB7EE8812DA0D25444CA546A29CE234F7D 09BE4F16D64B517D6DE603CCDDEEA0CBF3AA4E01EBC780B3481F8666B11B1C75 C9EE8989EF359CAE9A3B90A20B946F6FB3E178A459BF425984666B617D9BE899 1DFD5E21DDD66D2C064ED0FF7DE1307C3F0A720E0A97EE937B2ACD5518CFD8D1 CB354D53E09E7F5576F456E0D48A5B17487FBF7418509B2E3B64C9B55282C9AF 034233818D88FCC291FE5CDF13DC78D85AAE8892407AEE591B1E9AC0F54513FC BC04173FE429E9A56139B59EF1E68966418316B704C87F1E6A65B71776E90790 6FA2275B1E008FAA1C24F1A81C96AE91620C54F48083A32C22DC34A4F3DB63AC 39A3A61843C9D5F585AF29A534C5D81A4CDA1C29EDFCF2C85937206EB4CB1ADB B9616941A8E3F09E5CA686AC3C48D822A9D427C4A40ACC498E53A98704334CD6 0570E591AF9C82168F3640BB70E1ACE1ED7DB6394603DC325CBD657A6333482F B53F47CE8207A268408B4C514C7BD1816C7E3B39262506597110CBF5B2C39863 4272EFF639940302C2576A440B8D6D5D42DE3DE12F9A72DDB062805155DF7831 18E426B79F4DAC9CD8A7A770CA7AD3CF6E980F1E3B970C9924E037F238A1D136 EAB6923A8777D40C107AE9C94F6DF96C7906DC4D3F316517461AA237A4524E29 044C718C69A97B882C85825DE80D2EF200A80C4ABED634374F207D96F86CD82E BE667AC443760263ABF558A985DB39268FBA2E269F8C2FD530EDBAE11F8B675F 04002CC02F06FA8F0DD337CA95BBE3900CEC3FC4A779CC786E75519021848414 C627B78999A01E4F1DD583A59F5C214B0237CCAFC61AC72FF1EEBA89290919B1 5A45EF986EA5BBADFD24A349ED6A045519F74A5E562088FCD777DF45C6FB3453 E4D353C5743FFE7081E04325E7EDA574DD56F297527EF7DABEB9F743EAB4F519 600668E4454EA430D311BA1FA97D1C14DD3404B460C0F409C3E39CF779AB4F1D 17B67BC88081D452039777E5D8D47D77D324EA364FEBE33D7B1A08828CD8FB05 3DE0ED55F3E530AF1633E458852B735929381835DC00DFEE3D300F52896E5079 7297820CD077E2F0E0ED088584EB67E64C99A62CC8AE9A9B3F5253E81A4BC631 BF7332968C6C2CEE6ED5A3F1D2E1DB8D362A7B09BEB329B43716CFD997BA30D1 074821847E87737B51490856228FFF070B7FC27DF6C18CECD5FC2FD568723BC2 E9620AA94742606023A015F445B9B3BC89B5AF91962C4E659B2CAE981E4637D9 5B5D074474973DBEDB804148DAEB0CFF939C282918A219726227BFEF91EFE98E F274D8A8A0E32EF7301BAE01A83E7FDBEEF87D87BCCEA23BA55F4DCE15F0E05F 0EC406A4CD62E867A7CA57DD3D019BA08780F859EE584313D9240A8C3ED2BAE6 9D5AB6B07424651AF5ADE40A7673DC5B3FDA0CD476DB9BE966E696F914D22014 F46330ABB20E75EB0DB3A5A727CE54E08B44842F2787CF6BBCB7AB230EB5436E 08B1D0D9F60572CACEA793A91F90C836F83E022F3C8D648839C630CDA27E74AD 8A91F120882446E4AF11C73D525EDE5C005649A880FDE689467CB09A642EA5B8 3C0DC11578DAD76E7017B88CFB546A081762C963DA2480430071D8A123DCD6D8 A350B33C66E11B08E6B62CAB222D160E6C48776913331628DE5F0710F87B1C22 C77F2D888F5C01BFF9879441A81CB7992A2BC042013008BE382206D45DB802BF BABFCA10AACD0E4FED2E035179BA5134073C1010226DEAF9DEDC976F0C524625 4C4ED71C9F114B381AF4371A8E95352B648CA9F681978A49093A6C40E338CF75 49F7998CFDC29670BAAE16189D6635A80B6793AB9186B66B8814BEF45B359F41 EB3F7AA1E75D8D91373EB23CAC6E9A2C69F153AE238C6DCB7A4A4326099572D1 AAE06D49343427770F37ED208FE983DFFDD3C7E32E0E9281578E115ABAA0EDE2 0291B95A050B24D486D5F2CDB12F615AAE8C56C6D07DD22FF592BFCAE7A01E67 333F90B0F07751621B32913A2DB059CC00F537425EA4EEDB491E595EF709B414 7634D80E767BAF9FEBC1FC41D0FB3F5D162F66311F416A93BA6301ABB5AC7173 7CBBA52D93D5031D1B7F2BB8595FA1C84E440D99BBA7E8EAC149DFF18C7049DA 2788E3F847DC10DD9439C584D0446309206AC1C1D2A172BE0A6C5D8C5C0DC137 CF56300F4156F86A1F4D502A0001BCFE8E82AA4212FF2864B1E081B3504C9ED3 A508FFDB26EBEA894C33CE7B4FEC09F475F585B2E61599B4FCF4EFCC08B48CDF D2BEC7557520C0DC7A69A74CBC4C765025ACB960C010986BC5E2A96F5DEE58F7 D05BB869712E6E66AEBFDCF2F90530B4262FE620D9F8D66B352A529488C005BA C3144B6A47053E9975DCBA568BB914F6FEB4E1804D2D99C56FACE488C8ECBF90 BED15297E72E45A12C2D7D2A9D072B11EF324C6B5115076928B694E39E50C386 F11C687EFADDB68C57AA29E3064CC387ACD573B2F29D27746F169902D3957EE1 A02EC362C66754EFDA5A4644559536D3FC592F158C77B50708E74507A8AE6324 3023BB7C93882B2675D612ACA1198C3B2813BA6E04AF30C98F3C0CDD9C63DEC1 D0E9AC3764C872EE8D7D525F8AF36BDAA0B0CC112D2B46FF2EE95EA351321B94 93BB28CD9BB63AC0841EB3070A33A016E1D6C87A55057118D14F7F53E18EAB1C 09D22FBC1FA42CC6C7975E4FB0268944EE843E4A90D7F0AA228F0BE55B42EBD3 EC32E11924F5D9742BE8E7A803FB25CD75DE330AC140601ACED8B1452BF8B2B4 C55AFEF142AF8CCB3F394E5859EA994E3ABFF4C77871DC8668E47C858C35770B D9BC3BE31CD67C6B5E607F6DFFDC7EE338711C98C2A30AC2B612089CDE630E04 A73B07518B9EA8A3AA324B6AEF0E5D7612DBE06BF7DE4A55796DAB2C81CFE23D 0132797108BBB0193CE77D91DA6B48E951338E1E0DE6054FBD1A4FCAD95479DD 2DFBFE923FB7A3B06B7085793C165A20D79BF09BE800B2ED7FBF43436EE7676C FD2EE1495E13D572912BE7C2379C8D1E7DA4A6A2EF9FE33AA14A75377A356DEC 6AF1106AA3D780D1A99DD2E0CC66CCEBB8CA3CC418DE0A267E8E5D34EE925E2F 827461088DB60E0D56BBD217D9E0C3D2B591CC60468A3F7A5A6D49FD8F64DD46 BAC6215C2E56E67A10F69219E1C8A09DED4A745CD53E5748A7C2B57FCEFDE598 A026E280A1E5767ECBD3A3ECC41D52232674BE60A3A8BB6FF9EE627AA4B2CC24 9474949DAEA29AB9586836860AE1FFB4AADC75B0760015C86FE32F49F26FF44C C03D4BD3CDE93C57329410FA84900B19338CAC1C55B507A6B130EEFFB01A5E44 0E3E133C17A0AA4ADF837C5D6CE284D053DCBB3C03F59C5C9BB80C0C4BEA25B6 5FD00C833BDAEC0A4607285DEFBBC7D3A6A100E8D6453115233D76CA2C132D31 A3A3FEA39606F68F0AC10CFD4F5701C4B2A7B6848C77A903BDA77904D038A1C5 6014E31F975CF627D67B0D3F3AAEE72D32EA80709CF712A6EB46E508177AFA03 F275DA9768CD589CB298322B0BF50B578E9E4B58989DDE12CBAAAEB7E36655C2 842F5C7FC004B8B8516D8CD35543F3D2182DACC5EE8750A0CAB151C6EED04063 71B111101991BABA8B86E9F6F718B9ED1E69D91EEB503C6AE45B661C8CA8B1CB 20A9C01764DC4CC575C636B84755614BBFC242A5865469F87FF4F97A43B5A651 B2DAF746AA69FA6B9CFC9FF4A2590DA2D23BEF1EA97DE3FF48A0A23369B90395 0DFD36B3C7A992CDC1E49F42DE7C37CDEEC35A7AF8CADC2CA0BBB01895613E03 9C157B1683F1421F74B08184D56DEFCA72132550C6C1061B36769DBD39EC22CF 238641C90BB9510D564C0AB202205358CE42CDA4723E5506BF5A274236A6E9E4 DD21C0FC9FE57974FCABC6C808856B5F837AF759863BEF5BB381E2A729C6C4DE 2F53DD2DC92BAEAD141FD5FFE341E0FD5AEE566E2E1C6A44E94071DA0C3D4F57 07B02D120D95B21086CC12F33FC4D0C7C8B6147928A00339324024F787193073 13DD96DBC559F2339FB51C6123A3C51C70B7676B39255F589A80747491320833 0FD6685904C70A865AABFCBB7F5E351BEF3B535D00403E1B5C4C64E8DE7061DC A1D9D4AE825BFEE090412772E057A13FCD3A897FDE348FD50E50C620C89461B8 BE07B057B796B16E06CD314943153935D91152BC6E331DA67D73524ED7548385 0F087BB2F0023532B945ECC61B6E3075FCDAA3ABBF945B64AADA7213C590A9B5 11D068C9183BC0D2238DB3844BB4C7596E00BF6A67B6BDA2F85D5D603B80035B 5DF1EC6C3570609A972B752550C89C34B8E14BD1E0A030303D9015EBC9114F57 2899C129E72055B92DF22636EC479B03277E3E60DCAD36EB35CC3898C056C72D B58CCC6FCE3B2FFDCF560E130B196BC278224FD4901DD2F2F753494FFF4AAD61 002715D828FCC2B6BA8794D843C1144231E818579B305AB9022AD279E0514068 F4330A1C2C2C3FBDD150098C5B7DED6374D6B45CDBB7C88C78343959CC260B39 986001C07720E3B745CAAFF84F858CF3AC4440B592D5A83BD96FB5980286CCB3 6EDA47D11381FEE3F3CAEFB2D6E35F2B896DA68E8567D9327FB956733DA2896D 1A63B1FB168529BE23A7D04607085DA1596BA1858B1A07F3F37A233D2E81D599 82D885596BD3D041DBB2F3972CF605C0FD781C1360B368B49C4E41D2BF45FC3B 15460C0D9AFB5BDBC87FEE463493E471DB54CFC064DBAF00EB126DEE19C58319 71E77AFADB3B1256673E0B9226177A6161133FB030F063FA67C6 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 40258431 52099146 1000 600 600 (rluserman.dvi) @start /Fa 134[39 3[39 39 39 39 2[39 39 39 39 2[39 39 2[39 3[39 97[{}13 74.7198 /CMSLTT10 rf /Fb 134[39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 9[39 39 39 39 2[39 1[39 1[39 2[39 1[39 39 1[39 39 39 39 5[39 7[39 1[39 1[39 39 39 39 2[39 39 39 39[{}48 74.7198 /CMTT9 rf /Fc 167[62 3[60 46 2[57 1[62 76 52 1[43 1[62 65 54 1[63 60 67[{}13 83.022 /CMR10 rf /Fd 134[65 65 1[65 68 48 48 50 1[68 61 68 102 34 65 1[34 68 61 37 56 68 55 68 60 7[93 4[85 68 92 3[96 116 74 96 1[46 96 1[77 81 1[89 87 93 8[61 61 61 61 61 61 61 61 2[34 46[{}46 109.091 /CMBX12 rf /Fe 133[40 48 48 66 1[51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 1[40 51 45 9[93 1[68 66 51 67 1[62 71 68 1[57 71 1[33 68 1[59 62 69 66 64 68 19[30 45[{}42 90.9091 /CMSL10 rf /Ff 139[30 37 38 3[51 4[28 1[42 90[51 12[{}7 90.9091 /CMTI10 rf /Fg 134[48 48 48 48 48 1[48 48 48 1[48 48 1[48 48 48 48 1[48 48 48 48 1[48 48 1[48 2[48 14[48 48 1[48 1[48 2[48 48 48 17[48 48 2[48 5[48 39[{}33 90.9091 /CMSLTT10 rf /Fh 135[56 2[56 1[42 2[51 58 56 4[27 1[58 49 51 1[54 1[56 97[{}12 90.9091 /CMCSC10 rf /Fi 197[25 58[{}1 90.9091 /CMMI10 rf /Fj 197[33 58[{}1 119.552 /CMMI12 rf /Fk 135[85 2[90 63 64 66 1[90 81 90 134 45 2[45 1[81 49 74 90 72 90 78 11[124 112 5[126 1[97 4[127 101 106 124 117 1[122 15[81 49[{}29 143.462 /CMBX12 rf /Fl 242[91 13[{}1 90.9091 /CMSY10 rf /Fm 134[71 71 97 71 75 52 53 55 1[75 67 75 112 37 2[37 75 67 41 61 75 60 75 65 9[139 1[103 1[75 100 3[105 128 81 2[50 105 106 85 88 103 97 96 102 6[37 4[67 67 67 67 67 2[37 1[37 44[{}46 119.552 /CMBX12 rf /Fn 129[48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 48 1[48 3[48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 1[48 48 1[48 2[48 48 48 48 48 48 48 1[48 48 48 48 2[48 48 48 48 33[{}78 90.9091 /CMTT10 rf /Fo 131[91 45 40 48 48 66 48 51 35 36 36 48 51 45 51 76 25 48 28 25 51 45 28 40 51 40 51 45 25 2[25 45 25 56 68 68 93 68 68 66 51 67 71 62 71 68 83 57 71 47 33 68 71 59 62 69 66 64 68 5[25 25 45 45 45 45 45 45 45 45 45 45 45 25 30 25 2[35 35 25 4[45 20[51 51 53 11[{}81 90.9091 /CMR10 rf /Fp 134[102 4[75 76 79 3[108 1[54 2[54 2[59 88 108 86 108 94 11[149 2[144 3[151 1[116 2[72 1[152 71[{}19 172.154 /CMBX12 rf end %%EndProlog %%BeginSetup %%Feature: *Resolution 600dpi TeXDict begin %%BeginPaperSize: Letter /setpagedevice where { pop << /PageSize [612 792] >> setpagedevice } { /letter where { pop letter } if } ifelse %%EndPaperSize end %%EndSetup %%Page: 1 1 TeXDict begin 1 0 bop 150 1318 a Fp(GNU)65 b(Readline)g(Library)g(User) g(In)-5 b(terface)p 150 1418 3600 34 v 1873 1515 a Fo(Edition)30 b(7.0,)i(for)e Fn(Readline)e(Library)h Fo(V)-8 b(ersion)31 b(7.0.)3367 1623 y(July)f(2016)150 4927 y Fm(Chet)45 b(Ramey)-11 b(,)46 b(Case)g(W)-11 b(estern)46 b(Reserv)l(e)g(Univ)l (ersit)l(y)150 5068 y(Brian)f(F)-11 b(o)l(x,)45 b(F)-11 b(ree)45 b(Soft)l(w)l(are)h(F)-11 b(oundation)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4413 a Fo(This)29 b(man)m(ual)g(describ)s(es) g(the)h(end)e(user)h(in)m(terface)i(of)f(the)f(GNU)h(Readline)g (Library)f(\(v)m(ersion)h(7.0,)h(16)150 4523 y(July)25 b(2016\),)j(a)e(library)f(whic)m(h)f(aids)i(in)f(the)g(consistency)h (of)f(user)g(in)m(terface)i(across)e(discrete)h(programs)150 4633 y(whic)m(h)k(pro)m(vide)h(a)f(command)g(line)h(in)m(terface.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fl(\015)f Fo(1988{2016)35 b(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 4902 y(P)m(ermission)21 b(is)f(gran)m(ted)h (to)g(cop)m(y)-8 b(,)24 b(distribute)c(and/or)h(mo)s(dify)e(this)i(do)s (cumen)m(t)f(under)f(the)390 5011 y(terms)25 b(of)h(the)f(GNU)h(F)-8 b(ree)27 b(Do)s(cumen)m(tation)g(License,)g(V)-8 b(ersion)26 b(1.3)g(or)f(an)m(y)h(later)g(v)m(ersion)390 5121 y(published)43 b(b)m(y)h(the)h(F)-8 b(ree)46 b(Soft)m(w)m(are)g(F)-8 b(oundation;)53 b(with)44 b(no)g(In)m(v)-5 b(arian)m(t)46 b(Sections,)j(no)390 5230 y(F)-8 b(ron)m(t-Co)m(v)m(er)31 b(T)-8 b(exts,)30 b(and)f(no)f(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts.)41 b(A)29 b(cop)m(y)h(of)f(the)g(license)h(is)f(included)390 5340 y(in)h(the)h(section)g(en)m(titled)h(\\GNU)f(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License".)p eop end %%Page: -1 3 TeXDict begin -1 2 bop 3725 -116 a Fo(i)150 299 y Fk(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 649 y Fm(1)135 b(Command)45 b(Line)g(Editing)26 b Fj(:)20 b(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)39 b Fm(1)275 786 y Fo(1.1)92 b(In)m(tro)s(duction)30 b(to)h(Line)f (Editing)17 b Fi(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)31 b Fo(1)275 896 y(1.2)92 b(Readline)31 b(In)m(teraction)19 b Fi(:)e(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:) f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)32 b Fo(1)399 1005 y(1.2.1)93 b(Readline)31 b(Bare)g(Essen)m(tials)18 b Fi(:)e(:)g(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)31 b Fo(1)399 1115 y(1.2.2)93 b(Readline)31 b(Mo)m(v)m(emen)m(t)i (Commands)18 b Fi(:)d(:)g(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)32 b Fo(2)399 1225 y(1.2.3)93 b(Readline)31 b(Killing)g(Commands)10 b Fi(:)k(:)h(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)23 b Fo(2)399 1334 y(1.2.4)93 b(Readline)31 b(Argumen)m(ts)22 b Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)36 b Fo(3)399 1444 y(1.2.5)93 b(Searc)m(hing)31 b(for)f(Commands)f(in)h(the)h(History)20 b Fi(:)c(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)33 b Fo(3)275 1553 y(1.3)92 b(Readline)31 b(Init)f(File)13 b Fi(:)k(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)27 b Fo(4)399 1663 y(1.3.1)93 b(Readline)31 b(Init)f(File)i(Syn)m(tax)26 b Fi(:)15 b(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:) 39 b Fo(4)399 1773 y(1.3.2)93 b(Conditional)31 b(Init)f(Constructs)16 b Fi(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)29 b Fo(12)399 1882 y(1.3.3)93 b(Sample)30 b(Init)g(File)22 b Fi(:)17 b(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)35 b Fo(12)275 1992 y(1.4)92 b(Bindable)30 b(Readline)h(Commands)22 b Fi(:)15 b(:)g(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)35 b Fo(16)399 2101 y(1.4.1)93 b(Commands)29 b(F)-8 b(or)31 b(Mo)m(ving)18 b Fi(:)f(:)f(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)31 b Fo(16)399 2211 y(1.4.2)93 b(Commands)29 b(F)-8 b(or)31 b(Manipulating)g(The)f(History)f Fi(:)15 b(:)h(:)f(:)h(:)f(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fo(16)399 2320 y(1.4.3)93 b(Commands)29 b(F)-8 b(or)31 b(Changing)f(T)-8 b(ext)12 b Fi(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)25 b Fo(18)399 2430 y(1.4.4)93 b(Killing)31 b(And)e(Y)-8 b(anking)13 b Fi(:)k(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:) h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)26 b Fo(19)399 2540 y(1.4.5)93 b(Sp)s(ecifying)30 b(Numeric)g(Argumen)m(ts)e Fi(:)15 b(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)41 b Fo(20)399 2649 y(1.4.6)93 b(Letting)31 b(Readline)g(T)m(yp)s(e)f(F)-8 b(or)31 b(Y)-8 b(ou)22 b Fi(:)17 b(:)e(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)35 b Fo(21)399 2759 y(1.4.7)93 b(Keyb)s(oard)29 b(Macros)11 b Fi(:)17 b(:)e(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)24 b Fo(21)399 2868 y(1.4.8)93 b(Some)30 b(Miscellaneous)j(Commands)16 b Fi(:)e(:)h(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)29 b Fo(22)275 2978 y(1.5)92 b(Readline)31 b(vi)f(Mo)s(de)10 b Fi(:)16 b(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)23 b Fo(23)150 3229 y Fm(App)t(endix)44 b(A)119 b(GNU)39 b(F)-11 b(ree)38 b(Do)t(cumen)l(tation)i(License)25 b Fj(:)20 b(:)32 b Fm(24)p eop end %%Page: 1 4 TeXDict begin 1 3 bop 3705 -116 a Fo(1)150 299 y Fk(1)80 b(Command)54 b(Line)f(Editing)150 527 y Fo(This)30 b(c)m(hapter)h (describ)s(es)e(the)i(basic)g(features)f(of)h(the)f Fh(gnu)g Fo(command)h(line)f(editing)h(in)m(terface.)150 766 y Fm(1.1)68 b(In)l(tro)t(duction)45 b(to)g(Line)h(Editing)150 925 y Fo(The)30 b(follo)m(wing)i(paragraphs)d(describ)s(e)h(the)h (notation)g(used)f(to)h(represen)m(t)f(k)m(eystrok)m(es.)275 1058 y(The)35 b(text)i Fg(C-k)f Fo(is)g(read)g(as)h(`Con)m(trol-K')g (and)f(describ)s(es)f(the)h(c)m(haracter)i(pro)s(duced)d(when)g(the)h Fn(k)150 1168 y Fo(k)m(ey)31 b(is)g(pressed)e(while)h(the)h(Con)m(trol) g(k)m(ey)g(is)g(depressed.)275 1301 y(The)g(text)i Fg(M-k)e Fo(is)h(read)f(as)i(`Meta-K')g(and)f(describ)s(es)f(the)h(c)m(haracter) h(pro)s(duced)e(when)f(the)i(Meta)150 1411 y(k)m(ey)i(\(if)f(y)m(ou)h (ha)m(v)m(e)g(one\))g(is)f(depressed,)g(and)f(the)h Fn(k)g Fo(k)m(ey)h(is)f(pressed.)48 b(The)32 b(Meta)j(k)m(ey)e(is)h(lab)s (eled)f Fn(ALT)150 1521 y Fo(on)c(man)m(y)h(k)m(eyb)s(oards.)40 b(On)29 b(k)m(eyb)s(oards)g(with)h(t)m(w)m(o)h(k)m(eys)f(lab)s(eled)g Fn(ALT)e Fo(\(usually)i(to)g(either)g(side)g(of)g(the)150 1630 y(space)h(bar\),)f(the)g Fn(ALT)f Fo(on)h(the)g(left)h(side)f(is)g (generally)h(set)f(to)h(w)m(ork)f(as)g(a)h(Meta)g(k)m(ey)-8 b(.)42 b(The)29 b Fn(ALT)g Fo(k)m(ey)i(on)150 1740 y(the)c(righ)m(t)h (ma)m(y)g(also)g(b)s(e)f(con\014gured)f(to)i(w)m(ork)f(as)h(a)f(Meta)i (k)m(ey)f(or)f(ma)m(y)h(b)s(e)e(con\014gured)h(as)g(some)h(other)150 1849 y(mo)s(di\014er,)i(suc)m(h)g(as)g(a)h(Comp)s(ose)f(k)m(ey)h(for)f (t)m(yping)h(accen)m(ted)h(c)m(haracters.)275 1983 y(If)23 b(y)m(ou)i(do)f(not)h(ha)m(v)m(e)h(a)f(Meta)g(or)g Fn(ALT)e Fo(k)m(ey)-8 b(,)27 b(or)e(another)f(k)m(ey)i(w)m(orking)e(as)h(a)g (Meta)h(k)m(ey)-8 b(,)27 b(the)d(iden)m(tical)150 2092 y(k)m(eystrok)m(e)30 b(can)f(b)s(e)f(generated)h(b)m(y)g(t)m(yping)g Fn(ESC)e Ff(\014rst)p Fo(,)j(and)e(then)g(t)m(yping)h Fn(k)p Fo(.)40 b(Either)28 b(pro)s(cess)g(is)g(kno)m(wn)150 2202 y(as)j Fe(metafying)39 b Fo(the)30 b Fn(k)g Fo(k)m(ey)-8 b(.)275 2335 y(The)39 b(text)j Fg(M-C-k)d Fo(is)h(read)g(as)h (`Meta-Con)m(trol-k')j(and)39 b(describ)s(es)h(the)g(c)m(haracter)i (pro)s(duced)d(b)m(y)150 2445 y Fe(metafying)g Fg(C-k)p Fo(.)275 2578 y(In)c(addition,)j(sev)m(eral)f(k)m(eys)g(ha)m(v)m(e)g (their)f(o)m(wn)g(names.)58 b(Sp)s(eci\014cally)-8 b(,)38 b Fn(DEL)p Fo(,)f Fn(ESC)p Fo(,)g Fn(LFD)p Fo(,)g Fn(SPC)p Fo(,)g Fn(RET)p Fo(,)150 2688 y(and)d Fn(TAB)f Fo(all)j(stand)e(for)g (themselv)m(es)i(when)d(seen)i(in)f(this)g(text,)j(or)d(in)h(an)f(init) h(\014le)f(\(see)i(Section)f(1.3)150 2797 y([Readline)c(Init)e(File],)j (page)e(4\).)41 b(If)29 b(y)m(our)h(k)m(eyb)s(oard)f(lac)m(ks)i(a)f Fn(LFD)f Fo(k)m(ey)-8 b(,)31 b(t)m(yping)g Fn(C-j)d Fo(will)i(pro)s (duce)f(the)150 2907 y(desired)h(c)m(haracter.)42 b(The)30 b Fn(RET)g Fo(k)m(ey)h(ma)m(y)g(b)s(e)e(lab)s(eled)i Fn(Return)e Fo(or)h Fn(Enter)f Fo(on)h(some)h(k)m(eyb)s(oards.)150 3145 y Fm(1.2)68 b(Readline)47 b(In)l(teraction)150 3305 y Fo(Often)32 b(during)g(an)g(in)m(teractiv)m(e)j(session)e(y)m(ou)g(t) m(yp)s(e)g(in)f(a)h(long)g(line)g(of)f(text,)j(only)d(to)i(notice)g (that)f(the)150 3414 y(\014rst)f(w)m(ord)g(on)g(the)g(line)h(is)g (missp)s(elled.)46 b(The)32 b(Readline)h(library)f(giv)m(es)h(y)m(ou)g (a)g(set)g(of)f(commands)g(for)150 3524 y(manipulating)e(the)g(text)h (as)f(y)m(ou)g(t)m(yp)s(e)g(it)g(in,)g(allo)m(wing)h(y)m(ou)f(to)h (just)e(\014x)g(y)m(our)h(t)m(yp)s(o,)g(and)g(not)g(forcing)150 3634 y(y)m(ou)e(to)h(ret)m(yp)s(e)g(the)f(ma)5 b(jorit)m(y)29 b(of)f(the)h(line.)40 b(Using)28 b(these)h(editing)g(commands,)f(y)m (ou)h(mo)m(v)m(e)g(the)g(cursor)150 3743 y(to)35 b(the)f(place)i(that)e (needs)g(correction,)j(and)d(delete)h(or)f(insert)h(the)f(text)h(of)g (the)f(corrections.)54 b(Then,)150 3853 y(when)24 b(y)m(ou)h(are)g (satis\014ed)g(with)g(the)g(line,)i(y)m(ou)e(simply)f(press)g Fn(RET)p Fo(.)39 b(Y)-8 b(ou)25 b(do)g(not)g(ha)m(v)m(e)h(to)g(b)s(e)e (at)h(the)h(end)150 3962 y(of)33 b(the)h(line)g(to)g(press)e Fn(RET)p Fo(;)i(the)g(en)m(tire)g(line)f(is)h(accepted)g(regardless)g (of)f(the)h(lo)s(cation)h(of)e(the)h(cursor)150 4072 y(within)c(the)g(line.)150 4269 y Fd(1.2.1)63 b(Readline)40 b(Bare)h(Essen)m(tials)150 4416 y Fo(In)31 b(order)h(to)h(en)m(ter)g(c) m(haracters)g(in)m(to)g(the)g(line,)g(simply)e(t)m(yp)s(e)i(them.)46 b(The)31 b(t)m(yp)s(ed)h(c)m(haracter)i(app)s(ears)150 4525 y(where)e(the)h(cursor)e(w)m(as,)j(and)e(then)g(the)h(cursor)e(mo) m(v)m(es)j(one)f(space)g(to)g(the)g(righ)m(t.)47 b(If)32 b(y)m(ou)h(mist)m(yp)s(e)g(a)150 4635 y(c)m(haracter,)f(y)m(ou)f(can)g (use)f(y)m(our)g(erase)h(c)m(haracter)h(to)f(bac)m(k)g(up)f(and)f (delete)j(the)f(mist)m(yp)s(ed)e(c)m(haracter.)275 4768 y(Sometimes)i(y)m(ou)g(ma)m(y)h(mist)m(yp)s(e)e(a)i(c)m(haracter,)g (and)e(not)i(notice)g(the)f(error)f(un)m(til)h(y)m(ou)g(ha)m(v)m(e)h(t) m(yp)s(ed)150 4878 y(sev)m(eral)e(other)f(c)m(haracters.)42 b(In)28 b(that)i(case,)g(y)m(ou)f(can)g(t)m(yp)s(e)h Fg(C-b)d Fo(to)j(mo)m(v)m(e)g(the)f(cursor)g(to)g(the)g(left,)i(and)150 4987 y(then)f(correct)i(y)m(our)e(mistak)m(e.)42 b(Afterw)m(ards,)31 b(y)m(ou)f(can)h(mo)m(v)m(e)h(the)e(cursor)g(to)h(the)g(righ)m(t)g (with)f Fg(C-f)p Fo(.)275 5121 y(When)i(y)m(ou)h(add)f(text)h(in)f(the) h(middle)f(of)h(a)g(line,)h(y)m(ou)e(will)h(notice)h(that)f(c)m (haracters)h(to)g(the)e(righ)m(t)150 5230 y(of)d(the)g(cursor)f(are)h (`pushed)e(o)m(v)m(er')j(to)g(mak)m(e)f(ro)s(om)g(for)f(the)h(text)h (that)f(y)m(ou)g(ha)m(v)m(e)h(inserted.)40 b(Lik)m(ewise,)150 5340 y(when)d(y)m(ou)g(delete)i(text)g(b)s(ehind)c(the)j(cursor,)h(c)m (haracters)g(to)f(the)g(righ)m(t)g(of)g(the)g(cursor)e(are)i(`pulled)p eop end %%Page: 2 5 TeXDict begin 2 4 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(2)150 299 y(bac)m(k')24 b(to)f(\014ll)g(in)f(the)h(blank)f(space)i(created)f(b)m(y)g(the)g (remo)m(v)-5 b(al)24 b(of)f(the)g(text.)39 b(A)23 b(list)g(of)g(the)g (bare)f(essen)m(tials)150 408 y(for)30 b(editing)h(the)g(text)g(of)g (an)f(input)f(line)i(follo)m(ws.)150 571 y Fg(C-b)336 b Fo(Mo)m(v)m(e)32 b(bac)m(k)g(one)e(c)m(haracter.)150 732 y Fg(C-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(one)h(c)m(haracter.) 150 893 y Fn(DEL)e Fo(or)i Fn(Backspace)630 1003 y Fo(Delete)i(the)d(c) m(haracter)i(to)f(the)g(left)g(of)f(the)h(cursor.)150 1164 y Fg(C-d)336 b Fo(Delete)33 b(the)d(c)m(haracter)i(underneath)d (the)i(cursor.)150 1325 y(Prin)m(ting)g(c)m(haracters)630 1435 y(Insert)f(the)g(c)m(haracter)i(in)m(to)g(the)e(line)h(at)g(the)g (cursor.)150 1596 y Fg(C-_)e Fo(or)i Fg(C-x)e(C-u)630 1706 y Fo(Undo)k(the)h(last)g(editing)g(command.)50 b(Y)-8 b(ou)34 b(can)f(undo)g(all)h(the)f(w)m(a)m(y)i(bac)m(k)f(to)g(an)g (empt)m(y)630 1815 y(line.)150 1977 y(\(Dep)s(ending)29 b(on)h(y)m(our)f(con\014guration,)i(the)e Fn(Backspace)e Fo(k)m(ey)k(b)s(e)d(set)j(to)f(delete)h(the)e(c)m(haracter)i(to)g(the) 150 2087 y(left)37 b(of)f(the)h(cursor)e(and)h(the)g Fn(DEL)g Fo(k)m(ey)h(set)f(to)h(delete)h(the)e(c)m(haracter)i (underneath)d(the)h(cursor,)i(lik)m(e)150 2196 y Fg(C-d)p Fo(,)30 b(rather)g(than)g(the)h(c)m(haracter)h(to)f(the)f(left)h(of)g (the)f(cursor.\))150 2398 y Fd(1.2.2)63 b(Readline)40 b(Mo)m(v)m(emen)m(t)h(Commands)150 2545 y Fo(The)27 b(ab)s(o)m(v)m(e)i (table)g(describ)s(es)e(the)g(most)i(basic)f(k)m(eystrok)m(es)h(that)f (y)m(ou)g(need)g(in)f(order)g(to)i(do)e(editing)i(of)150 2654 y(the)k(input)f(line.)49 b(F)-8 b(or)34 b(y)m(our)f(con)m(v)m (enience,)j(man)m(y)d(other)g(commands)f(ha)m(v)m(e)j(b)s(een)d(added)g (in)h(addition)150 2764 y(to)j Fg(C-b)p Fo(,)f Fg(C-f)p Fo(,)g Fg(C-d)p Fo(,)h(and)e Fn(DEL)p Fo(.)54 b(Here)35 b(are)g(some)h(commands)e(for)h(mo)m(ving)h(more)f(rapidly)f(ab)s(out)h (the)150 2873 y(line.)150 3035 y Fg(C-a)336 b Fo(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(line.)150 3197 y Fg(C-e)336 b Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 3358 y Fg(M-f)336 b Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(w)m(ord,)f (where)g(a)h(w)m(ord)f(is)g(comp)s(osed)g(of)h(letters)h(and)d(digits.) 150 3519 y Fg(M-b)336 b Fo(Mo)m(v)m(e)32 b(bac)m(kw)m(ard)f(a)g(w)m (ord.)150 3680 y Fg(C-l)336 b Fo(Clear)31 b(the)f(screen,)h(reprin)m (ting)f(the)h(curren)m(t)f(line)h(at)g(the)f(top.)275 3843 y(Notice)c(ho)m(w)f Fg(C-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(c)m (haracter,)j(while)d Fg(M-f)e Fo(mo)m(v)m(es)j(forw)m(ard)e(a)h(w)m (ord.)39 b(It)24 b(is)h(a)g(lo)s(ose)150 3952 y(con)m(v)m(en)m(tion)32 b(that)f(con)m(trol)g(k)m(eystrok)m(es)h(op)s(erate)e(on)g(c)m (haracters)h(while)f(meta)h(k)m(eystrok)m(es)h(op)s(erate)e(on)150 4062 y(w)m(ords.)150 4263 y Fd(1.2.3)63 b(Readline)40 b(Killing)i(Commands)150 4410 y Fe(Killing)35 b Fo(text)28 b(means)e(to)h(delete)h(the)f(text)g(from)g(the)f(line,)i(but)e(to)h (sa)m(v)m(e)h(it)g(a)m(w)m(a)m(y)g(for)e(later)i(use,)f(usually)150 4519 y(b)m(y)g Fe(y)m(anking)35 b Fo(\(re-inserting\))28 b(it)g(bac)m(k)f(in)m(to)h(the)f(line.)40 b(\(`Cut')27 b(and)g(`paste')h(are)f(more)g(recen)m(t)h(jargon)f(for)150 4629 y(`kill')32 b(and)d(`y)m(ank'.\))275 4765 y(If)g(the)i (description)f(for)g(a)h(command)f(sa)m(ys)g(that)h(it)g(`kills')g (text,)h(then)e(y)m(ou)g(can)h(b)s(e)e(sure)h(that)h(y)m(ou)150 4875 y(can)g(get)g(the)g(text)g(bac)m(k)g(in)f(a)h(di\013eren)m(t)g (\(or)g(the)f(same\))h(place)h(later.)275 5011 y(When)23 b(y)m(ou)g(use)g(a)h(kill)g(command,)g(the)g(text)g(is)f(sa)m(v)m(ed)i (in)e(a)g Fe(kill-ring)p Fo(.)39 b(An)m(y)24 b(n)m(um)m(b)s(er)e(of)h (consecutiv)m(e)150 5121 y(kills)31 b(sa)m(v)m(e)i(all)f(of)f(the)g (killed)h(text)g(together,)g(so)g(that)f(when)f(y)m(ou)h(y)m(ank)h(it)f (bac)m(k,)h(y)m(ou)g(get)g(it)f(all.)43 b(The)150 5230 y(kill)33 b(ring)f(is)g(not)h(line)g(sp)s(eci\014c;)g(the)g(text)g (that)g(y)m(ou)g(killed)f(on)h(a)f(previously)g(t)m(yp)s(ed)h(line)f (is)h(a)m(v)-5 b(ailable)150 5340 y(to)31 b(b)s(e)f(y)m(ank)m(ed)h(bac) m(k)g(later,)h(when)d(y)m(ou)i(are)g(t)m(yping)f(another)h(line.)p eop end %%Page: 3 6 TeXDict begin 3 5 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(3)275 299 y(Here)30 b(is)h(the)f(list)h(of)g(commands)f(for)g(killing)h(text.)150 456 y Fg(C-k)336 b Fo(Kill)31 b(the)f(text)i(from)e(the)g(curren)m(t)g (cursor)g(p)s(osition)h(to)g(the)f(end)g(of)g(the)h(line.)150 614 y Fg(M-d)336 b Fo(Kill)27 b(from)f(the)g(cursor)g(to)h(the)f(end)g (of)h(the)f(curren)m(t)g(w)m(ord,)h(or,)h(if)e(b)s(et)m(w)m(een)h(w)m (ords,)g(to)g(the)630 723 y(end)j(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ord)30 b(b)s(oundaries)f(are)i(the)g(same)f(as)h(those)g(used) f(b)m(y)g Fg(M-f)p Fo(.)150 881 y Fg(M-DEL)240 b Fo(Kill)31 b(from)f(the)h(cursor)f(the)g(start)h(of)g(the)g(curren)m(t)f(w)m(ord,) h(or,)f(if)h(b)s(et)m(w)m(een)g(w)m(ords,)f(to)i(the)630 991 y(start)39 b(of)f(the)h(previous)f(w)m(ord.)64 b(W)-8 b(ord)39 b(b)s(oundaries)e(are)i(the)f(same)h(as)g(those)f(used)g(b)m (y)630 1100 y Fg(M-b)p Fo(.)150 1258 y Fg(C-w)336 b Fo(Kill)35 b(from)g(the)g(cursor)f(to)i(the)f(previous)g(whitespace.)55 b(This)34 b(is)h(di\013eren)m(t)h(than)e Fg(M-DEL)630 1367 y Fo(b)s(ecause)c(the)h(w)m(ord)f(b)s(oundaries)f(di\013er.)275 1525 y(Here)42 b(is)f(ho)m(w)h(to)g Fe(y)m(ank)47 b Fo(the)42 b(text)g(bac)m(k)h(in)m(to)f(the)g(line.)74 b(Y)-8 b(anking)43 b(means)e(to)h(cop)m(y)h(the)e(most-)150 1634 y(recen)m(tly-killed)33 b(text)e(from)f(the)g(kill)i(bu\013er.)150 1792 y Fg(C-y)336 b Fo(Y)-8 b(ank)31 b(the)f(most)h(recen)m(tly)h(killed)f(text)g(bac)m (k)g(in)m(to)h(the)e(bu\013er)g(at)h(the)f(cursor.)150 1949 y Fg(M-y)336 b Fo(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h (the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h (the)g(prior)630 2059 y(command)30 b(is)h Fg(C-y)e Fo(or)h Fg(M-y)p Fo(.)150 2256 y Fd(1.2.4)63 b(Readline)40 b(Argumen)m(ts)150 2403 y Fo(Y)-8 b(ou)40 b(can)f(pass)g(n)m(umeric)f(argumen)m(ts)i(to)f (Readline)h(commands.)67 b(Sometimes)39 b(the)g(argumen)m(t)h(acts)150 2513 y(as)g(a)h(rep)s(eat)f(coun)m(t,)j(other)e(times)f(it)h(is)f(the)g Ff(sign)47 b Fo(of)41 b(the)f(argumen)m(t)g(that)h(is)f(signi\014can)m (t.)71 b(If)40 b(y)m(ou)150 2622 y(pass)33 b(a)h(negativ)m(e)i(argumen) m(t)e(to)g(a)g(command)f(whic)m(h)g(normally)h(acts)g(in)f(a)h(forw)m (ard)f(direction,)i(that)150 2732 y(command)g(will)h(act)g(in)f(a)h (bac)m(kw)m(ard)f(direction.)57 b(F)-8 b(or)36 b(example,)h(to)f(kill)g (text)g(bac)m(k)g(to)g(the)g(start)g(of)150 2842 y(the)31 b(line,)g(y)m(ou)f(migh)m(t)h(t)m(yp)s(e)g(`)p Fn(M--)f(C-k)p Fo('.)275 2975 y(The)d(general)i(w)m(a)m(y)h(to)e(pass)g(n)m(umeric)g (argumen)m(ts)h(to)g(a)f(command)g(is)g(to)h(t)m(yp)s(e)f(meta)i (digits)e(b)s(efore)150 3085 y(the)j(command.)42 b(If)30 b(the)h(\014rst)f(`digit')i(t)m(yp)s(ed)f(is)g(a)g(min)m(us)f(sign)h (\(`)p Fn(-)p Fo('\),)h(then)f(the)g(sign)f(of)h(the)g(argumen)m(t)150 3194 y(will)39 b(b)s(e)e(negativ)m(e.)66 b(Once)38 b(y)m(ou)h(ha)m(v)m (e)g(t)m(yp)s(ed)f(one)h(meta)g(digit)g(to)f(get)i(the)e(argumen)m(t)h (started,)i(y)m(ou)150 3304 y(can)29 b(t)m(yp)s(e)g(the)g(remainder)f (of)h(the)g(digits,)h(and)f(then)f(the)h(command.)40 b(F)-8 b(or)30 b(example,)g(to)f(giv)m(e)i(the)e Fg(C-d)150 3414 y Fo(command)37 b(an)g(argumen)m(t)h(of)g(10,)i(y)m(ou)e(could)f (t)m(yp)s(e)h(`)p Fn(M-1)29 b(0)h(C-d)p Fo(',)39 b(whic)m(h)e(will)h (delete)h(the)e(next)h(ten)150 3523 y(c)m(haracters)32 b(on)e(the)h(input)e(line.)150 3720 y Fd(1.2.5)63 b(Searc)m(hing)40 b(for)i(Commands)g(in)f(the)g(History)150 3867 y Fo(Readline)22 b(pro)m(vides)f(commands)g(for)g(searc)m(hing)h(through)f(the)g (command)h(history)f(for)g(lines)g(con)m(taining)150 3977 y(a)31 b(sp)s(eci\014ed)e(string.)41 b(There)30 b(are)h(t)m(w)m(o)g(searc)m(h)g(mo)s(des:)41 b Fe(incremen)m(tal)35 b Fo(and)30 b Fe(non-incremen)m(tal)p Fo(.)275 4111 y(Incremen)m(tal)c (searc)m(hes)h(b)s(egin)e(b)s(efore)g(the)h(user)f(has)h(\014nished)e (t)m(yping)i(the)g(searc)m(h)g(string.)39 b(As)26 b(eac)m(h)150 4220 y(c)m(haracter)37 b(of)e(the)h(searc)m(h)g(string)f(is)h(t)m(yp)s (ed,)g(Readline)g(displa)m(ys)g(the)f(next)h(en)m(try)g(from)e(the)i (history)150 4330 y(matc)m(hing)25 b(the)f(string)g(t)m(yp)s(ed)g(so)g (far.)39 b(An)23 b(incremen)m(tal)j(searc)m(h)e(requires)g(only)g(as)g (man)m(y)g(c)m(haracters)i(as)150 4439 y(needed)i(to)i(\014nd)d(the)i (desired)f(history)h(en)m(try)-8 b(.)41 b(T)-8 b(o)29 b(searc)m(h)h(bac)m(kw)m(ard)f(in)f(the)h(history)g(for)f(a)i (particular)150 4549 y(string,)g(t)m(yp)s(e)f Fg(C-r)p Fo(.)40 b(T)m(yping)29 b Fg(C-s)g Fo(searc)m(hes)h(forw)m(ard)f (through)g(the)g(history)-8 b(.)41 b(The)29 b(c)m(haracters)i(presen)m (t)150 4658 y(in)38 b(the)g(v)-5 b(alue)38 b(of)g(the)g Fn(isearch-terminators)33 b Fo(v)-5 b(ariable)39 b(are)f(used)f(to)i (terminate)g(an)f(incremen)m(tal)150 4768 y(searc)m(h.)71 b(If)40 b(that)h(v)-5 b(ariable)41 b(has)f(not)h(b)s(een)e(assigned)i (a)f(v)-5 b(alue,)44 b(the)c Fn(ESC)g Fo(and)f Fg(C-J)h Fo(c)m(haracters)i(will)150 4878 y(terminate)h(an)g(incremen)m(tal)g (searc)m(h.)78 b Fg(C-g)41 b Fo(will)i(ab)s(ort)f(an)g(incremen)m(tal)i (searc)m(h)f(and)f(restore)h(the)150 4987 y(original)30 b(line.)41 b(When)28 b(the)h(searc)m(h)h(is)f(terminated,)h(the)f (history)g(en)m(try)g(con)m(taining)h(the)f(searc)m(h)h(string)150 5097 y(b)s(ecomes)h(the)f(curren)m(t)g(line.)275 5230 y(T)-8 b(o)31 b(\014nd)e(other)j(matc)m(hing)g(en)m(tries)g(in)e(the)h (history)g(list,)h(t)m(yp)s(e)g Fg(C-r)e Fo(or)h Fg(C-s)f Fo(as)h(appropriate.)43 b(This)150 5340 y(will)26 b(searc)m(h)h(bac)m (kw)m(ard)g(or)f(forw)m(ard)g(in)f(the)i(history)f(for)g(the)g(next)g (en)m(try)h(matc)m(hing)g(the)f(searc)m(h)h(string)p eop end %%Page: 4 7 TeXDict begin 4 6 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(4)150 299 y(t)m(yp)s(ed)37 b(so)h(far.)63 b(An)m(y)38 b(other)f(k)m(ey)i(sequence)f(b)s(ound)e(to) i(a)g(Readline)h(command)e(will)h(terminate)h(the)150 408 y(searc)m(h)26 b(and)f(execute)i(that)f(command.)39 b(F)-8 b(or)26 b(instance,)h(a)f Fn(RET)f Fo(will)g(terminate)i(the)f (searc)m(h)g(and)e(accept)150 518 y(the)30 b(line,)g(thereb)m(y)f (executing)i(the)e(command)g(from)g(the)h(history)f(list.)41 b(A)29 b(mo)m(v)m(emen)m(t)j(command)d(will)150 628 y(terminate)i(the)g (searc)m(h,)g(mak)m(e)h(the)e(last)h(line)g(found)e(the)i(curren)m(t)f (line,)h(and)f(b)s(egin)g(editing.)275 777 y(Readline)35 b(remem)m(b)s(ers)f(the)h(last)h(incremen)m(tal)g(searc)m(h)f(string.) 54 b(If)34 b(t)m(w)m(o)j Fg(C-r)p Fo(s)c(are)i(t)m(yp)s(ed)g(without) 150 886 y(an)m(y)i(in)m(terv)m(ening)g(c)m(haracters)h(de\014ning)e(a)h (new)f(searc)m(h)h(string,)h(an)m(y)f(remem)m(b)s(ered)e(searc)m(h)i (string)g(is)150 996 y(used.)275 1145 y(Non-incremen)m(tal)48 b(searc)m(hes)g(read)e(the)h(en)m(tire)h(searc)m(h)f(string)g(b)s (efore)f(starting)h(to)h(searc)m(h)f(for)150 1255 y(matc)m(hing)d (history)e(lines.)78 b(The)42 b(searc)m(h)h(string)g(ma)m(y)g(b)s(e)f (t)m(yp)s(ed)g(b)m(y)g(the)h(user)f(or)h(b)s(e)f(part)g(of)h(the)150 1364 y(con)m(ten)m(ts)32 b(of)f(the)f(curren)m(t)g(line.)150 1627 y Fm(1.3)68 b(Readline)47 b(Init)e(File)150 1786 y Fo(Although)f(the)g(Readline)g(library)f(comes)i(with)e(a)h(set)h(of) f(Emacs-lik)m(e)h(k)m(eybindings)f(installed)g(b)m(y)150 1896 y(default,)26 b(it)g(is)e(p)s(ossible)h(to)g(use)f(a)i(di\013eren) m(t)f(set)g(of)g(k)m(eybindings.)38 b(An)m(y)25 b(user)f(can)h (customize)h(programs)150 2005 y(that)45 b(use)f(Readline)h(b)m(y)f (putting)g(commands)g(in)g(an)g Fe(inputrc)49 b Fo(\014le,)g(con)m(v)m (en)m(tionally)e(in)d(his)g(home)150 2115 y(directory)-8 b(.)39 b(The)23 b(name)h(of)f(this)h(\014le)f(is)g(tak)m(en)i(from)e (the)g(v)-5 b(alue)24 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)25 b Fn(INPUTRC)p Fo(.)150 2224 y(If)30 b(that)g(v)-5 b(ariable)31 b(is)f(unset,)g(the)h(default)f(is)g Fn(~/.inputrc)p Fo(.)38 b(If)30 b(that)g(\014le)h(do)s(es)e(not)i(exist)g(or)f(cannot)h (b)s(e)150 2334 y(read,)g(the)f(ultimate)i(default)e(is)h Fn(/etc/inputrc)p Fo(.)275 2483 y(When)e(a)h(program)f(whic)m(h)h(uses) f(the)h(Readline)g(library)f(starts)h(up,)f(the)h(init)g(\014le)f(is)h (read,)g(and)f(the)150 2593 y(k)m(ey)i(bindings)e(are)i(set.)275 2742 y(In)26 b(addition,)i(the)f Fn(C-x)i(C-r)d Fo(command)h(re-reads)g (this)f(init)h(\014le,)h(th)m(us)f(incorp)s(orating)g(an)m(y)g(c)m (hanges)150 2851 y(that)k(y)m(ou)g(migh)m(t)g(ha)m(v)m(e)g(made)g(to)g (it.)150 3065 y Fd(1.3.1)63 b(Readline)40 b(Init)h(File)g(Syn)m(tax)150 3212 y Fo(There)f(are)i(only)f(a)g(few)g(basic)g(constructs)h(allo)m(w) m(ed)h(in)d(the)h(Readline)h(init)f(\014le.)73 b(Blank)41 b(lines)h(are)150 3322 y(ignored.)72 b(Lines)41 b(b)s(eginning)f(with)h (a)g(`)p Fn(#)p Fo(')g(are)h(commen)m(ts.)73 b(Lines)41 b(b)s(eginning)f(with)g(a)i(`)p Fn($)p Fo(')f(indicate)150 3431 y(conditional)i(constructs)e(\(see)i(Section)f(1.3.2)h ([Conditional)f(Init)f(Constructs],)j(page)f(12\).)74 b(Other)150 3541 y(lines)31 b(denote)g(v)-5 b(ariable)31 b(settings)g(and)f(k)m(ey)h(bindings.)150 3722 y(V)-8 b(ariable)32 b(Settings)630 3832 y(Y)-8 b(ou)41 b(can)g(mo)s(dify)e (the)i(run-time)f(b)s(eha)m(vior)g(of)h(Readline)g(b)m(y)f(altering)h (the)g(v)-5 b(alues)41 b(of)630 3941 y(v)-5 b(ariables)34 b(in)f(Readline)i(using)e(the)g Fn(set)g Fo(command)g(within)g(the)h (init)g(\014le.)50 b(The)33 b(syn)m(tax)630 4051 y(is)d(simple:)870 4193 y Fn(set)47 b Fg(variable)e(value)630 4335 y Fo(Here,)29 b(for)e(example,)h(is)g(ho)m(w)f(to)h(c)m(hange)g(from)f(the)g(default) h(Emacs-lik)m(e)h(k)m(ey)f(binding)e(to)630 4444 y(use)k Fn(vi)g Fo(line)h(editing)g(commands:)870 4586 y Fn(set)47 b(editing-mode)d(vi)630 4728 y Fo(V)-8 b(ariable)36 b(names)f(and)g(v) -5 b(alues,)36 b(where)f(appropriate,)h(are)g(recognized)g(without)f (regard)630 4837 y(to)c(case.)42 b(Unrecognized)31 b(v)-5 b(ariable)31 b(names)g(are)f(ignored.)630 4979 y(Bo)s(olean)c(v)-5 b(ariables)26 b(\(those)g(that)g(can)f(b)s(e)f(set)i(to)g(on)f(or)g (o\013)7 b(\))25 b(are)h(set)f(to)h(on)f(if)g(the)g(v)-5 b(alue)26 b(is)630 5089 y(n)m(ull)e(or)g(empt)m(y)-8 b(,)27 b Fe(on)d Fo(\(case-insensitiv)m(e\),)29 b(or)24 b(1.)39 b(An)m(y)25 b(other)f(v)-5 b(alue)25 b(results)f(in)g(the)g(v) -5 b(ariable)630 5198 y(b)s(eing)30 b(set)h(to)g(o\013.)630 5340 y(A)f(great)i(deal)f(of)g(run-time)f(b)s(eha)m(vior)g(is)g(c)m (hangeable)j(with)d(the)g(follo)m(wing)i(v)-5 b(ariables.)p eop end %%Page: 5 8 TeXDict begin 5 7 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(5)630 299 y Fn(bell-style)1110 408 y Fo(Con)m(trols)44 b(what)g(happ)s(ens)e(when)h(Readline)i(w)m(an) m(ts)f(to)h(ring)e(the)h(termi-)1110 518 y(nal)37 b(b)s(ell.)61 b(If)37 b(set)h(to)g(`)p Fn(none)p Fo(',)g(Readline)g(nev)m(er)g(rings) e(the)i(b)s(ell.)61 b(If)36 b(set)i(to)1110 628 y(`)p Fn(visible)p Fo(',)32 b(Readline)i(uses)f(a)g(visible)g(b)s(ell)g(if)g (one)g(is)g(a)m(v)-5 b(ailable.)51 b(If)33 b(set)g(to)1110 737 y(`)p Fn(audible)p Fo(')j(\(the)i(default\),)i(Readline)e(attempts) g(to)h(ring)e(the)g(terminal's)1110 847 y(b)s(ell.)630 993 y Fn(bind-tty-special-chars)1110 1103 y Fo(If)e(set)g(to)h(`)p Fn(on)p Fo(')f(\(the)g(default\),)i(Readline)f(attempts)g(to)g(bind)d (the)i(con)m(trol)1110 1212 y(c)m(haracters)30 b(treated)g(sp)s (ecially)g(b)m(y)f(the)g(k)m(ernel's)h(terminal)f(driv)m(er)g(to)h (their)1110 1322 y(Readline)h(equiv)-5 b(alen)m(ts.)630 1468 y Fn(blink-matching-paren)1110 1577 y Fo(If)36 b(set)g(to)h(`)p Fn(on)p Fo(',)h(Readline)f(attempts)g(to)g(brie\015y)e(mo)m(v)m(e)j (the)f(cursor)e(to)i(an)1110 1687 y(op)s(ening)k(paren)m(thesis)h(when) f(a)h(closing)h(paren)m(thesis)e(is)h(inserted.)74 b(The)1110 1797 y(default)31 b(is)f(`)p Fn(off)p Fo('.)630 1943 y Fn(colored-completion-prefi)o(x)1110 2052 y Fo(If)f(set)h(to)g(`)p Fn(on)p Fo(',)g(when)e(listing)i(completions,)h(Readline)f(displa)m(ys) g(the)f(com-)1110 2162 y(mon)c(pre\014x)f(of)i(the)f(set)h(of)g(p)s (ossible)f(completions)h(using)f(a)h(di\013eren)m(t)g(color.)1110 2271 y(The)39 b(color)i(de\014nitions)f(are)g(tak)m(en)h(from)f(the)g (v)-5 b(alue)40 b(of)g(the)g Fn(LS_COLORS)1110 2381 y Fo(en)m(vironmen)m(t)31 b(v)-5 b(ariable.)41 b(The)30 b(default)h(is)f(`)p Fn(off)p Fo('.)630 2527 y Fn(colored-stats)1110 2637 y Fo(If)c(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(displa)m(ys)g (p)s(ossible)f(completions)h(using)f(di\013eren)m(t)1110 2746 y(colors)40 b(to)g(indicate)g(their)f(\014le)h(t)m(yp)s(e.)67 b(The)38 b(color)j(de\014nitions)d(are)i(tak)m(en)1110 2856 y(from)24 b(the)h(v)-5 b(alue)25 b(of)g(the)g Fn(LS_COLORS)d Fo(en)m(vironmen)m(t)j(v)-5 b(ariable.)40 b(The)24 b(default)1110 2966 y(is)30 b(`)p Fn(off)p Fo('.)630 3112 y Fn(comment-begin)1110 3221 y Fo(The)62 b(string)g(to)h(insert)f(at)h(the)g(b)s(eginning)e(of) h(the)h(line)f(when)g(the)1110 3331 y Fn(insert-comment)26 b Fo(command)31 b(is)f(executed.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f Fn("#")p Fo(.)630 3477 y Fn(completion-display-width) 1110 3587 y Fo(The)41 b(n)m(um)m(b)s(er)f(of)i(screen)g(columns)f(used) g(to)h(displa)m(y)g(p)s(ossible)f(matc)m(hes)1110 3696 y(when)28 b(p)s(erforming)g(completion.)41 b(The)29 b(v)-5 b(alue)29 b(is)g(ignored)g(if)g(it)h(is)f(less)g(than)1110 3806 y(0)e(or)f(greater)h(than)f(the)g(terminal)h(screen)f(width.)39 b(A)26 b(v)-5 b(alue)27 b(of)f(0)h(will)f(cause)1110 3915 y(matc)m(hes)32 b(to)f(b)s(e)e(displa)m(y)m(ed)i(one)g(p)s(er)e (line.)41 b(The)30 b(default)h(v)-5 b(alue)31 b(is)f(-1.)630 4061 y Fn(completion-ignore-case)1110 4171 y Fo(If)d(set)h(to)g(`)p Fn(on)p Fo(',)g(Readline)g(p)s(erforms)e(\014lename)h(matc)m(hing)i (and)e(completion)1110 4281 y(in)j(a)h(case-insensitiv)m(e)i(fashion.) 40 b(The)30 b(default)h(v)-5 b(alue)30 b(is)h(`)p Fn(off)p Fo('.)630 4427 y Fn(completion-map-case)1110 4536 y Fo(If)22 b(set)g(to)h(`)p Fn(on)p Fo(',)h(and)e Fe(completion-ignore-case)31 b Fo(is)22 b(enabled,)i(Readline)f(treats)1110 4646 y(h)m(yphens)29 b(\(`)p Fn(-)p Fo('\))j(and)e(underscores)g(\(`)p Fn(_)p Fo('\))i(as)f(equiv)-5 b(alen)m(t)32 b(when)e(p)s(erforming)1110 4756 y(case-insensitiv)m(e)j(\014lename)d(matc)m(hing)i(and)e (completion.)630 4902 y Fn(completion-prefix-displa)o(y-le)o(ngth)1110 5011 y Fo(The)h(length)g(in)g(c)m(haracters)i(of)f(the)f(common)h (pre\014x)e(of)h(a)h(list)g(of)f(p)s(ossible)1110 5121 y(completions)g(that)f(is)g(displa)m(y)m(ed)g(without)g(mo)s (di\014cation.)41 b(When)29 b(set)h(to)h(a)1110 5230 y(v)-5 b(alue)26 b(greater)h(than)e(zero,)j(common)e(pre\014xes)e (longer)j(than)e(this)g(v)-5 b(alue)27 b(are)1110 5340 y(replaced)k(with)f(an)g(ellipsis)h(when)e(displa)m(ying)i(p)s(ossible) f(completions.)p eop end %%Page: 6 9 TeXDict begin 6 8 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(6)630 299 y Fn (completion-query-items)1110 408 y Fo(The)26 b(n)m(um)m(b)s(er)f(of)h (p)s(ossible)g(completions)h(that)g(determines)f(when)f(the)i(user)1110 518 y(is)i(ask)m(ed)h(whether)f(the)h(list)g(of)f(p)s(ossibilities)h (should)e(b)s(e)h(displa)m(y)m(ed.)41 b(If)29 b(the)1110 628 y(n)m(um)m(b)s(er)d(of)h(p)s(ossible)f(completions)i(is)f(greater)h (than)e(this)h(v)-5 b(alue,)28 b(Readline)1110 737 y(will)f(ask)g(the)f (user)g(whether)g(or)g(not)h(he)f(wishes)g(to)i(view)e(them;)i (otherwise,)1110 847 y(they)d(are)f(simply)g(listed.)40 b(This)23 b(v)-5 b(ariable)25 b(m)m(ust)g(b)s(e)e(set)i(to)g(an)g(in)m (teger)g(v)-5 b(alue)1110 956 y(greater)26 b(than)f(or)f(equal)i(to)f (0.)40 b(A)24 b(negativ)m(e)j(v)-5 b(alue)26 b(means)e(Readline)i (should)1110 1066 y(nev)m(er)31 b(ask.)41 b(The)29 b(default)i(limit)g (is)g Fn(100)p Fo(.)630 1285 y Fn(convert-meta)1110 1395 y Fo(If)22 b(set)g(to)h(`)p Fn(on)p Fo(',)h(Readline)f(will)f(con)m(v)m (ert)i(c)m(haracters)f(with)f(the)g(eigh)m(th)h(bit)f(set)1110 1504 y(to)33 b(an)e Fh(asci)r(i)h Fo(k)m(ey)h(sequence)f(b)m(y)g (stripping)f(the)h(eigh)m(th)h(bit)f(and)f(pre\014xing)1110 1614 y(an)24 b Fn(ESC)g Fo(c)m(haracter,)j(con)m(v)m(erting)f(them)f (to)g(a)g(meta-pre\014xed)f(k)m(ey)h(sequence.)1110 1724 y(The)i(default)h(v)-5 b(alue)28 b(is)f(`)p Fn(on)p Fo(',)i(but)d(will) i(b)s(e)f(set)h(to)g(`)p Fn(off)p Fo(')g(if)f(the)h(lo)s(cale)h(is)f (one)1110 1833 y(that)j(con)m(tains)h(eigh)m(t-bit)g(c)m(haracters.)630 2052 y Fn(disable-completion)1110 2162 y Fo(If)k(set)h(to)h(`)p Fn(On)p Fo(',)g(Readline)f(will)g(inhibit)f(w)m(ord)h(completion.)60 b(Completion)1110 2271 y(c)m(haracters)28 b(will)e(b)s(e)f(inserted)h (in)m(to)h(the)g(line)f(as)g(if)g(they)h(had)e(b)s(een)g(mapp)s(ed)1110 2381 y(to)31 b Fn(self-insert)p Fo(.)38 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 2600 y Fn(echo-control-characters)1110 2710 y Fo(When)f(set)h(to)g(`)p Fn(on)p Fo(',)f(on)g(op)s(erating)h (systems)f(that)h(indicate)g(they)g(supp)s(ort)1110 2819 y(it,)i(readline)e(ec)m(ho)s(es)i(a)f(c)m(haracter)h(corresp)s(onding)d (to)j(a)f(signal)g(generated)1110 2929 y(from)e(the)g(k)m(eyb)s(oard.) 41 b(The)30 b(default)g(is)h(`)p Fn(on)p Fo('.)630 3148 y Fn(editing-mode)1110 3258 y Fo(The)d Fn(editing-mode)e Fo(v)-5 b(ariable)29 b(con)m(trols)h(whic)m(h)e(default)h(set)h(of)e(k) m(ey)i(bind-)1110 3367 y(ings)25 b(is)g(used.)38 b(By)26 b(default,)g(Readline)g(starts)f(up)f(in)h(Emacs)g(editing)h(mo)s(de,) 1110 3477 y(where)j(the)g(k)m(eystrok)m(es)i(are)e(most)h(similar)f(to) h(Emacs.)40 b(This)29 b(v)-5 b(ariable)30 b(can)1110 3587 y(b)s(e)g(set)h(to)g(either)g(`)p Fn(emacs)p Fo(')e(or)h(`)p Fn(vi)p Fo('.)630 3806 y Fn(emacs-mode-string)1110 3915 y Fo(This)f(string)h(is)f(displa)m(y)m(ed)i(immediately)g(b)s(efore)e (the)h(last)g(line)h(of)e(the)h(pri-)1110 4025 y(mary)43 b(prompt)g(when)f(emacs)i(editing)g(mo)s(de)f(is)g(activ)m(e.)82 b(The)43 b(v)-5 b(alue)44 b(is)1110 4134 y(expanded)28 b(lik)m(e)i(a)f(k)m(ey)g(binding,)f(so)h(the)g(standard)f(set)h(of)g (meta-)g(and)f(con-)1110 4244 y(trol)36 b(pre\014xes)e(and)h(bac)m (kslash)h(escap)s(e)g(sequences)g(is)f(a)m(v)-5 b(ailable.)58 b(Use)36 b(the)1110 4354 y(`)p Fn(\\1)p Fo(')i(and)f(`)p Fn(\\2)p Fo(')h(escap)s(es)g(to)h(b)s(egin)e(and)h(end)f(sequences)h (of)g(non-prin)m(ting)1110 4463 y(c)m(haracters,)27 b(whic)m(h)c(can)h (b)s(e)f(used)f(to)j(em)m(b)s(ed)e(a)h(terminal)g(con)m(trol)h (sequence)1110 4573 y(in)m(to)31 b(the)g(mo)s(de)f(string.)41 b(The)29 b(default)i(is)f(`)p Fn(@)p Fo('.)630 4792 y Fn(enable-bracketed-paste)1110 4902 y Fo(When)24 b(set)h(to)h(`)p Fn(On)p Fo(',)g(Readline)f(will)g(con\014gure)f(the)h(terminal)g(in)f (a)h(w)m(a)m(y)g(that)1110 5011 y(will)k(enable)f(it)h(to)g(insert)g (eac)m(h)g(paste)g(in)m(to)g(the)g(editing)g(bu\013er)e(as)i(a)f (single)1110 5121 y(string)33 b(of)f(c)m(haracters,)j(instead)e(of)g (treating)h(eac)m(h)g(c)m(haracter)g(as)f(if)f(it)i(had)1110 5230 y(b)s(een)e(read)i(from)e(the)i(k)m(eyb)s(oard.)49 b(This)32 b(can)h(prev)m(en)m(t)h(pasted)f(c)m(haracters)1110 5340 y(from)d(b)s(eing)g(in)m(terpreted)h(as)f(editing)h(commands.)41 b(The)29 b(default)i(is)f(`)p Fn(off)p Fo('.)p eop end %%Page: 7 10 TeXDict begin 7 9 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(7)630 299 y Fn(enable-keypad)1110 408 y Fo(When)23 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g (try)f(to)h(enable)g(the)f(application)i(k)m(eypad)1110 518 y(when)h(it)h(is)f(called.)41 b(Some)27 b(systems)f(need)h(this)f (to)h(enable)g(the)g(arro)m(w)g(k)m(eys.)1110 628 y(The)j(default)g(is) h(`)p Fn(off)p Fo('.)630 800 y Fn(enable-meta-key)1110 909 y Fo(When)40 b(set)g(to)g(`)p Fn(on)p Fo(',)j(Readline)d(will)g (try)g(to)g(enable)g(an)m(y)g(meta)h(mo)s(di\014er)1110 1019 y(k)m(ey)i(the)e(terminal)i(claims)f(to)h(supp)s(ort)d(when)h(it)h (is)g(called.)76 b(On)41 b(man)m(y)1110 1129 y(terminals,)c(the)e(meta) h(k)m(ey)g(is)f(used)g(to)h(send)e(eigh)m(t-bit)j(c)m(haracters.)56 b(The)1110 1238 y(default)31 b(is)f(`)p Fn(on)p Fo('.)630 1410 y Fn(expand-tilde)1110 1520 y Fo(If)d(set)h(to)h(`)p Fn(on)p Fo(',)f(tilde)g(expansion)g(is)f(p)s(erformed)f(when)h (Readline)h(attempts)1110 1630 y(w)m(ord)i(completion.)42 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 1802 y Fn(history-preserve-point)1110 1911 y Fo(If)41 b(set)h(to)h(`)p Fn(on)p Fo(',)i(the)c(history)h(co)s(de)g(attempts)h(to)f(place)h(the)f (p)s(oin)m(t)f(\(the)1110 2021 y(curren)m(t)35 b(cursor)g(p)s (osition\))g(at)h(the)g(same)f(lo)s(cation)i(on)e(eac)m(h)h(history)g (line)1110 2131 y(retriev)m(ed)h(with)f Fn(previous-history)c Fo(or)37 b Fn(next-history)p Fo(.)55 b(The)36 b(default)1110 2240 y(is)30 b(`)p Fn(off)p Fo('.)630 2412 y Fn(history-size)1110 2522 y Fo(Set)39 b(the)g(maxim)m(um)g(n)m(um)m(b)s(er)f(of)h(history)g (en)m(tries)h(sa)m(v)m(ed)g(in)f(the)g(history)1110 2632 y(list.)51 b(If)34 b(set)g(to)h(zero,)g(an)m(y)f(existing)h(history)f (en)m(tries)g(are)g(deleted)h(and)e(no)1110 2741 y(new)e(en)m(tries)i (are)f(sa)m(v)m(ed.)46 b(If)31 b(set)h(to)h(a)f(v)-5 b(alue)32 b(less)g(than)f(zero,)i(the)f(n)m(um)m(b)s(er)1110 2851 y(of)f(history)f(en)m(tries)h(is)g(not)g(limited.)42 b(By)30 b(default,)h(the)g(n)m(um)m(b)s(er)e(of)i(history)1110 2960 y(en)m(tries)j(is)f(not)g(limited.)49 b(If)32 b(an)h(attempt)h(is) f(made)g(to)h(set)f Fe(history-size)39 b Fo(to)1110 3070 y(a)34 b(non-n)m(umeric)f(v)-5 b(alue,)34 b(the)g(maxim)m(um)f(n)m(um)m (b)s(er)f(of)h(history)h(en)m(tries)g(will)1110 3180 y(b)s(e)c(set)h(to)g(500.)630 3352 y Fn(horizontal-scroll-mode)1110 3461 y Fo(This)k(v)-5 b(ariable)37 b(can)f(b)s(e)f(set)h(to)h(either)f (`)p Fn(on)p Fo(')g(or)g(`)p Fn(off)p Fo('.)57 b(Setting)36 b(it)g(to)h(`)p Fn(on)p Fo(')1110 3571 y(means)26 b(that)h(the)f(text)h (of)g(the)f(lines)g(b)s(eing)g(edited)h(will)f(scroll)h(horizon)m (tally)1110 3680 y(on)32 b(a)g(single)g(screen)g(line)g(when)e(they)i (are)g(longer)h(than)e(the)h(width)f(of)h(the)1110 3790 y(screen,)27 b(instead)g(of)f(wrapping)f(on)m(to)i(a)f(new)g(screen)g (line.)39 b(By)27 b(default,)g(this)1110 3900 y(v)-5 b(ariable)31 b(is)g(set)f(to)i(`)p Fn(off)p Fo('.)630 4072 y Fn(input-meta)1110 4181 y Fo(If)f(set)g(to)h(`)p Fn(on)p Fo(',)g(Readline)g(will)f(enable)h(eigh)m(t-bit)h(input)d(\(it) i(will)f(not)h(clear)1110 4291 y(the)40 b(eigh)m(th)g(bit)g(in)f(the)h (c)m(haracters)h(it)f(reads\),)j(regardless)c(of)h(what)g(the)1110 4401 y(terminal)k(claims)h(it)f(can)g(supp)s(ort.)79 b(The)44 b(default)g(v)-5 b(alue)44 b(is)g(`)p Fn(off)p Fo(',)j(but)1110 4510 y(Readline)24 b(will)h(set)f(it)g(to)h(`)p Fn(on)p Fo(')e(if)h(the)g(lo)s(cale)i(con)m(tains)f(eigh)m(t-bit)g(c)m (haracters.)1110 4620 y(The)30 b(name)g Fn(meta-flag)e Fo(is)j(a)f(synon)m(ym)g(for)g(this)h(v)-5 b(ariable.)630 4792 y Fn(isearch-terminators)1110 4902 y Fo(The)51 b(string)h(of)g(c)m (haracters)h(that)f(should)e(terminate)j(an)f(incremen)m(tal)1110 5011 y(searc)m(h)25 b(without)g(subsequen)m(tly)g(executing)h(the)f(c)m (haracter)h(as)f(a)g(command)1110 5121 y(\(see)45 b(Section)h(1.2.5)g ([Searc)m(hing],)j(page)d(3\).)84 b(If)44 b(this)g(v)-5 b(ariable)45 b(has)g(not)1110 5230 y(b)s(een)35 b(giv)m(en)h(a)g(v)-5 b(alue,)37 b(the)f(c)m(haracters)h Fn(ESC)d Fo(and)h Fg(C-J)g Fo(will)h(terminate)g(an)1110 5340 y(incremen)m(tal)c(searc)m (h.)p eop end %%Page: 8 11 TeXDict begin 8 10 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(8)630 299 y Fn(keymap)192 b Fo(Sets)39 b(Readline's)g(idea)h(of)f(the)g(curren)m(t)f(k)m(eymap)h (for)g(k)m(ey)g(binding)f(com-)1110 408 y(mands.)81 b(Acceptable)47 b Fn(keymap)42 b Fo(names)i(are)h Fn(emacs)p Fo(,)i Fn(emacs-standard)p Fo(,)1110 518 y Fn(emacs-meta)p Fo(,)99 b Fn(emacs-ctlx)p Fo(,)f Fn(vi)p Fo(,)j Fn(vi-move)p Fo(,)f Fn(vi-command)p Fo(,)f(and)1110 628 y Fn(vi-insert)p Fo(.)81 b Fn(vi)44 b Fo(is)h(equiv)-5 b(alen)m(t)46 b(to)g Fn(vi-command)c Fo(\()p Fn(vi-move)h Fo(is)i(also)h(a)1110 737 y(synon)m(ym\);)g Fn(emacs)39 b Fo(is)i(equiv)-5 b(alen)m(t)42 b(to)g Fn(emacs-standard)p Fo(.)68 b(The)40 b(default)1110 847 y(v)-5 b(alue)52 b(is)f Fn(emacs)p Fo(.)103 b(The)51 b(v)-5 b(alue)52 b(of)f(the)h Fn(editing-mode)c Fo(v)-5 b(ariable)52 b(also)1110 956 y(a\013ects)32 b(the)e(default)h(k)m(eymap.)630 1113 y Fn(keyseq-timeout)1110 1223 y Fo(Sp)s(eci\014es)25 b(the)g(duration)g(Readline)h(will)g(w)m(ait)g(for)g(a)f(c)m(haracter)i (when)e(read-)1110 1332 y(ing)30 b(an)g(am)m(biguous)g(k)m(ey)h (sequence)f(\(one)g(that)h(can)f(form)g(a)g(complete)h(k)m(ey)1110 1442 y(sequence)j(using)e(the)i(input)e(read)h(so)g(far,)h(or)g(can)f (tak)m(e)i(additional)f(input)1110 1551 y(to)g(complete)g(a)f(longer)h (k)m(ey)f(sequence\).)49 b(If)33 b(no)f(input)g(is)h(receiv)m(ed)h (within)1110 1661 y(the)43 b(timeout,)48 b(Readline)43 b(will)g(use)g(the)g(shorter)g(but)f(complete)j(k)m(ey)e(se-)1110 1771 y(quence.)c(Readline)26 b(uses)f(this)h(v)-5 b(alue)26 b(to)g(determine)g(whether)f(or)g(not)h(input)1110 1880 y(is)31 b(a)m(v)-5 b(ailable)33 b(on)d(the)h(curren)m(t)f(input)g (source)h(\()p Fn(rl_instream)d Fo(b)m(y)i(default\).)1110 1990 y(The)25 b(v)-5 b(alue)26 b(is)f(sp)s(eci\014ed)f(in)h (milliseconds,)j(so)d(a)h(v)-5 b(alue)26 b(of)f(1000)i(means)e(that) 1110 2099 y(Readline)e(will)g(w)m(ait)g(one)g(second)f(for)g (additional)i(input.)37 b(If)22 b(this)g(v)-5 b(ariable)23 b(is)1110 2209 y(set)28 b(to)h(a)f(v)-5 b(alue)29 b(less)f(than)g(or)f (equal)i(to)f(zero,)i(or)e(to)g(a)h(non-n)m(umeric)e(v)-5 b(alue,)1110 2318 y(Readline)30 b(will)f(w)m(ait)i(un)m(til)e(another)h (k)m(ey)g(is)f(pressed)g(to)h(decide)f(whic)m(h)g(k)m(ey)1110 2428 y(sequence)i(to)g(complete.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g Fn(500)p Fo(.)630 2585 y Fn(mark-directories)1110 2694 y Fo(If)38 b(set)g(to)h(`)p Fn(on)p Fo(',)i(completed)e(directory) f(names)g(ha)m(v)m(e)i(a)e(slash)g(app)s(ended.)1110 2804 y(The)30 b(default)g(is)h(`)p Fn(on)p Fo('.)630 2960 y Fn(mark-modified-lines)1110 3070 y Fo(This)k(v)-5 b(ariable,)38 b(when)d(set)h(to)h(`)p Fn(on)p Fo(',)g(causes)g (Readline)f(to)h(displa)m(y)f(an)f(as-)1110 3180 y(terisk)f(\(`)p Fn(*)p Fo('\))h(at)f(the)g(start)g(of)g(history)g(lines)g(whic)m(h)f (ha)m(v)m(e)i(b)s(een)e(mo)s(di\014ed.)1110 3289 y(This)d(v)-5 b(ariable)31 b(is)f(`)p Fn(off)p Fo(')g(b)m(y)g(default.)630 3446 y Fn(mark-symlinked-directori)o(es)1110 3555 y Fo(If)59 b(set)h(to)g(`)p Fn(on)p Fo(',)67 b(completed)60 b(names)f(whic)m(h)g (are)h(sym)m(b)s(olic)g(links)f(to)1110 3665 y(directories)71 b(ha)m(v)m(e)f(a)g(slash)f(app)s(ended)f(\(sub)5 b(ject)70 b(to)g(the)g(v)-5 b(alue)70 b(of)1110 3774 y Fn(mark-directories)p Fo(\).)37 b(The)30 b(default)g(is)g(`)p Fn(off)p Fo('.)630 3931 y Fn(match-hidden-files)1110 4041 y Fo(This)21 b(v)-5 b(ariable,)25 b(when)d(set)g(to)h(`)p Fn(on)p Fo(',)h(causes)f (Readline)g(to)g(matc)m(h)g(\014les)f(whose)1110 4150 y(names)44 b(b)s(egin)g(with)g(a)g(`)p Fn(.)p Fo(')g(\(hidden)f (\014les\))i(when)e(p)s(erforming)g(\014lename)1110 4260 y(completion.)75 b(If)41 b(set)g(to)h(`)p Fn(off)p Fo(',)i(the)e (leading)g(`)p Fn(.)p Fo(')f(m)m(ust)g(b)s(e)g(supplied)f(b)m(y)1110 4369 y(the)34 b(user)g(in)g(the)g(\014lename)g(to)h(b)s(e)f(completed.) 53 b(This)33 b(v)-5 b(ariable)35 b(is)f(`)p Fn(on)p Fo(')g(b)m(y)1110 4479 y(default.)630 4635 y Fn(menu-complete-display-pr)o(efix)1110 4745 y Fo(If)f(set)h(to)g(`)p Fn(on)p Fo(',)h(men)m(u)e(completion)i (displa)m(ys)e(the)h(common)g(pre\014x)e(of)i(the)1110 4855 y(list)k(of)g(p)s(ossible)f(completions)i(\(whic)m(h)e(ma)m(y)h(b) s(e)f(empt)m(y\))i(b)s(efore)e(cycling)1110 4964 y(through)30 b(the)g(list.)42 b(The)29 b(default)i(is)f(`)p Fn(off)p Fo('.)630 5121 y Fn(output-meta)1110 5230 y Fo(If)35 b(set)h(to)g(`)p Fn(on)p Fo(',)h(Readline)f(will)g(displa)m(y)f(c)m (haracters)i(with)e(the)h(eigh)m(th)g(bit)1110 5340 y(set)h(directly)g (rather)f(than)g(as)h(a)g(meta-pre\014xed)f(escap)s(e)h(sequence.)59 b(The)p eop end %%Page: 9 12 TeXDict begin 9 11 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2153 b(9)1110 299 y(default)26 b(is)f(`)p Fn(off)p Fo(',)i(but)e(Readline)h(will)g(set)g(it)g(to)h(`)p Fn(on)p Fo(')e(if)h(the)f(lo)s(cale)j(con)m(tains)1110 408 y(eigh)m(t-bit)k(c)m(haracters.)630 596 y Fn(page-completions)1110 706 y Fo(If)h(set)i(to)f(`)p Fn(on)p Fo(',)h(Readline)g(uses)e(an)h(in) m(ternal)h Fn(more)p Fo(-lik)m(e)f(pager)g(to)h(displa)m(y)1110 816 y(a)e(screenful)f(of)g(p)s(ossible)g(completions)i(at)f(a)g(time.) 47 b(This)31 b(v)-5 b(ariable)34 b(is)e(`)p Fn(on)p Fo(')1110 925 y(b)m(y)e(default.)630 1113 y Fn(print-completions-horizo)o(ntal)o (ly)1110 1223 y Fo(If)23 b(set)i(to)g(`)p Fn(on)p Fo(',)g(Readline)g (will)f(displa)m(y)g(completions)h(with)f(matc)m(hes)h(sorted)1110 1332 y(horizon)m(tally)45 b(in)e(alphab)s(etical)i(order,)i(rather)c (than)g(do)m(wn)g(the)h(screen.)1110 1442 y(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)630 1630 y Fn(revert-all-at-newline)1110 1739 y Fo(If)e(set)h(to)g(`)p Fn(on)p Fo(',)g(Readline)g(will)g(undo)f (all)h(c)m(hanges)h(to)f(history)g(lines)f(b)s(efore)1110 1849 y(returning)f(when)f Fn(accept-line)f Fo(is)j(executed.)41 b(By)29 b(default,)g(history)g(lines)1110 1958 y(ma)m(y)42 b(b)s(e)g(mo)s(di\014ed)e(and)h(retain)i(individual)e(undo)g(lists)h (across)g(calls)h(to)1110 2068 y Fn(readline)p Fo(.)38 b(The)30 b(default)h(is)f(`)p Fn(off)p Fo('.)630 2256 y Fn(show-all-if-ambiguous)1110 2365 y Fo(This)f(alters)i(the)f (default)g(b)s(eha)m(vior)g(of)g(the)h(completion)g(functions.)40 b(If)29 b(set)1110 2475 y(to)f(`)p Fn(on)p Fo(',)g(w)m(ords)f(whic)m(h) g(ha)m(v)m(e)i(more)f(than)f(one)h(p)s(ossible)f(completion)h(cause) 1110 2585 y(the)39 b(matc)m(hes)h(to)g(b)s(e)e(listed)h(immediately)i (instead)e(of)g(ringing)g(the)g(b)s(ell.)1110 2694 y(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fn(off)p Fo('.)630 2882 y Fn(show-all-if-unmodified)1110 2992 y Fo(This)38 b(alters)h(the)g(default)g(b)s(eha)m(vior)g(of)f(the)h(completion)h (functions)e(in)h(a)1110 3101 y(fashion)25 b(similar)h(to)g Fe(sho)m(w-all-if-am)m(biguous)p Fo(.)41 b(If)25 b(set)h(to)h(`)p Fn(on)p Fo(',)f(w)m(ords)f(whic)m(h)1110 3211 y(ha)m(v)m(e)32 b(more)f(than)f(one)i(p)s(ossible)e(completion)i(without)f(an)m(y)g(p)s (ossible)f(par-)1110 3320 y(tial)43 b(completion)h(\(the)f(p)s(ossible) f(completions)h(don't)f(share)g(a)h(common)1110 3430 y(pre\014x\))30 b(cause)g(the)h(matc)m(hes)g(to)g(b)s(e)f(listed)g (immediately)i(instead)e(of)h(ring-)1110 3540 y(ing)g(the)f(b)s(ell.)41 b(The)30 b(default)g(v)-5 b(alue)31 b(is)f(`)p Fn(off)p Fo('.)630 3727 y Fn(show-mode-in-prompt)1110 3837 y Fo(If)g(set)g(to)h (`)p Fn(on)p Fo(',)f(add)f(a)i(c)m(haracter)g(to)g(the)f(b)s(eginning)g (of)g(the)g(prompt)f(indi-)1110 3947 y(cating)j(the)g(editing)f(mo)s (de:)42 b(emacs,)33 b(vi)e(command,)g(or)g(vi)g(insertion.)43 b(The)1110 4056 y(mo)s(de)30 b(strings)g(are)h(user-settable.)42 b(The)30 b(default)g(v)-5 b(alue)31 b(is)g(`)p Fn(off)p Fo('.)630 4244 y Fn(skip-completed-text)1110 4354 y Fo(If)h(set)i(to)f (`)p Fn(on)p Fo(',)h(this)f(alters)g(the)g(default)g(completion)h(b)s (eha)m(vior)f(when)f(in-)1110 4463 y(serting)d(a)h(single)g(matc)m(h)f (in)m(to)h(the)g(line.)40 b(It's)30 b(only)f(activ)m(e)i(when)d(p)s (erform-)1110 4573 y(ing)35 b(completion)h(in)e(the)h(middle)f(of)h(a)f (w)m(ord.)53 b(If)35 b(enabled,)g(readline)g(do)s(es)1110 4682 y(not)41 b(insert)f(c)m(haracters)i(from)e(the)h(completion)h (that)f(matc)m(h)g(c)m(haracters)1110 4792 y(after)c(p)s(oin)m(t)g(in)g (the)g(w)m(ord)f(b)s(eing)g(completed,)k(so)d(p)s(ortions)f(of)h(the)g (w)m(ord)1110 4902 y(follo)m(wing)c(the)f(cursor)f(are)h(not)g (duplicated.)45 b(F)-8 b(or)32 b(instance,)h(if)f(this)f(is)h(en-)1110 5011 y(abled,)43 b(attempting)f(completion)g(when)d(the)i(cursor)f(is)g (after)h(the)g(`)p Fn(e)p Fo(')f(in)1110 5121 y(`)p Fn(Makefile)p Fo(')c(will)i(result)f(in)g(`)p Fn(Makefile)p Fo(')f(rather)h(than)h(`) p Fn(Makefilefile)p Fo(',)1110 5230 y(assuming)d(there)g(is)h(a)f (single)h(p)s(ossible)f(completion.)56 b(The)35 b(default)g(v)-5 b(alue)1110 5340 y(is)30 b(`)p Fn(off)p Fo('.)p eop end %%Page: 10 13 TeXDict begin 10 12 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(10)630 299 y Fn (vi-cmd-mode-string)1110 408 y Fo(This)29 b(string)h(is)f(displa)m(y)m (ed)i(immediately)g(b)s(efore)e(the)h(last)g(line)h(of)e(the)h(pri-) 1110 518 y(mary)21 b(prompt)g(when)f(vi)i(editing)g(mo)s(de)f(is)g (activ)m(e)j(and)d(in)g(command)g(mo)s(de.)1110 628 y(The)38 b(v)-5 b(alue)39 b(is)f(expanded)f(lik)m(e)j(a)f(k)m(ey)g(binding,)g (so)g(the)f(standard)g(set)h(of)1110 737 y(meta-)30 b(and)e(con)m(trol) i(pre\014xes)e(and)g(bac)m(kslash)h(escap)s(e)g(sequences)g(is)g(a)m(v) -5 b(ail-)1110 847 y(able.)50 b(Use)33 b(the)h(`)p Fn(\\1)p Fo(')f(and)g(`)p Fn(\\2)p Fo(')g(escap)s(es)g(to)h(b)s(egin)f(and)g (end)f(sequences)i(of)1110 956 y(non-prin)m(ting)40 b(c)m(haracters,)45 b(whic)m(h)40 b(can)g(b)s(e)g(used)g(to)h(em)m(b)s(ed)f(a)g(terminal) 1110 1066 y(con)m(trol)32 b(sequence)f(in)m(to)g(the)f(mo)s(de)g (string.)41 b(The)30 b(default)h(is)f(`)p Fn(\(cmd\))p Fo('.)630 1209 y Fn(vi-ins-mode-string)1110 1319 y Fo(This)f(string)h (is)f(displa)m(y)m(ed)i(immediately)g(b)s(efore)e(the)h(last)g(line)h (of)e(the)h(pri-)1110 1428 y(mary)25 b(prompt)f(when)g(vi)h(editing)h (mo)s(de)e(is)i(activ)m(e)h(and)d(in)h(insertion)g(mo)s(de.)1110 1538 y(The)38 b(v)-5 b(alue)39 b(is)f(expanded)f(lik)m(e)j(a)f(k)m(ey)g (binding,)g(so)g(the)f(standard)g(set)h(of)1110 1648 y(meta-)30 b(and)e(con)m(trol)i(pre\014xes)e(and)g(bac)m(kslash)h (escap)s(e)g(sequences)g(is)g(a)m(v)-5 b(ail-)1110 1757 y(able.)50 b(Use)33 b(the)h(`)p Fn(\\1)p Fo(')f(and)g(`)p Fn(\\2)p Fo(')g(escap)s(es)g(to)h(b)s(egin)f(and)g(end)f(sequences)i (of)1110 1867 y(non-prin)m(ting)40 b(c)m(haracters,)45 b(whic)m(h)40 b(can)g(b)s(e)g(used)g(to)h(em)m(b)s(ed)f(a)g(terminal) 1110 1976 y(con)m(trol)32 b(sequence)f(in)m(to)g(the)f(mo)s(de)g (string.)41 b(The)30 b(default)h(is)f(`)p Fn(\(ins\))p Fo('.)630 2120 y Fn(visible-stats)1110 2229 y Fo(If)h(set)i(to)f(`)p Fn(on)p Fo(',)h(a)f(c)m(haracter)i(denoting)e(a)g(\014le's)g(t)m(yp)s (e)g(is)g(app)s(ended)e(to)j(the)1110 2339 y(\014lename)e(when)e (listing)i(p)s(ossible)f(completions.)42 b(The)30 b(default)g(is)h(`)p Fn(off)p Fo('.)150 2482 y(Key)f(Bindings)630 2592 y(The)41 b(syn)m(tax)i(for)f(con)m(trolling)h(k)m(ey)g(bindings)e(in)h(the)g (init)g(\014le)g(is)g(simple.)75 b(First)43 b(y)m(ou)630 2701 y(need)27 b(to)i(\014nd)d(the)i(name)f(of)h(the)g(command)f(that)i (y)m(ou)f(w)m(an)m(t)g(to)g(c)m(hange.)41 b(The)27 b(follo)m(wing)630 2811 y(sections)37 b(con)m(tain)g(tables)g(of)f(the)g(command)f(name,)j (the)e(default)g(k)m(eybinding,)h(if)f(an)m(y)-8 b(,)630 2921 y(and)30 b(a)h(short)f(description)g(of)h(what)f(the)g(command)h (do)s(es.)630 3047 y(Once)36 b(y)m(ou)g(kno)m(w)g(the)g(name)g(of)g (the)g(command,)h(simply)f(place)h(on)e(a)i(line)f(in)g(the)g(init)630 3157 y(\014le)e(the)g(name)f(of)h(the)g(k)m(ey)g(y)m(ou)g(wish)f(to)h (bind)f(the)h(command)f(to,)i(a)f(colon,)i(and)d(then)630 3266 y(the)f(name)h(of)f(the)g(command.)46 b(There)32 b(can)g(b)s(e)g(no)g(space)g(b)s(et)m(w)m(een)h(the)f(k)m(ey)h(name)g (and)630 3376 y(the)41 b(colon)h({)f(that)g(will)g(b)s(e)g(in)m (terpreted)g(as)g(part)f(of)h(the)g(k)m(ey)h(name.)72 b(The)40 b(name)h(of)630 3485 y(the)35 b(k)m(ey)g(can)g(b)s(e)f (expressed)f(in)i(di\013eren)m(t)g(w)m(a)m(ys,)h(dep)s(ending)d(on)h (what)h(y)m(ou)g(\014nd)e(most)630 3595 y(comfortable.)630 3721 y(In)i(addition)h(to)h(command)f(names,)i(readline)e(allo)m(ws)h (k)m(eys)g(to)g(b)s(e)e(b)s(ound)f(to)j(a)f(string)630 3831 y(that)31 b(is)f(inserted)h(when)e(the)i(k)m(ey)g(is)f(pressed)g (\(a)h Fe(macro)5 b Fo(\).)630 3974 y Fe(k)m(eyname)g Fo(:)42 b Fe(function-name)35 b Fo(or)c Fe(macro)1110 4084 y(k)m(eyname)k Fo(is)29 b(the)f(name)h(of)g(a)g(k)m(ey)h(sp)s (elled)e(out)h(in)g(English.)39 b(F)-8 b(or)30 b(example:)1350 4210 y Fn(Control-u:)45 b(universal-argument)1350 4320 y(Meta-Rubout:)f(backward-kill-word)1350 4430 y(Control-o:)h(">)i (output")1110 4556 y Fo(In)94 b(the)g(ab)s(o)m(v)m(e)i(example,)111 b Fg(C-u)94 b Fo(is)g(b)s(ound)f(to)i(the)f(function)1110 4666 y Fn(universal-argument)p Fo(,)124 b Fg(M-DEL)107 b Fo(is)i(b)s(ound)e(to)j(the)f(function)1110 4775 y Fn(backward-kill-word)p Fo(,)75 b(and)69 b Fg(C-o)g Fo(is)h(b)s(ound)e (to)j(run)d(the)i(macro)1110 4885 y(expressed)45 b(on)h(the)g(righ)m(t) g(hand)e(side)i(\(that)h(is,)i(to)e(insert)e(the)h(text)h(`)p Fn(>)1110 4994 y(output)p Fo(')29 b(in)m(to)i(the)g(line\).)1110 5121 y(A)62 b(n)m(um)m(b)s(er)e(of)i(sym)m(b)s(olic)h(c)m(haracter)g (names)f(are)g(recognized)h(while)1110 5230 y(pro)s(cessing)40 b(this)f(k)m(ey)i(binding)e(syn)m(tax:)60 b Fe(DEL)p Fo(,)42 b Fe(ESC)p Fo(,)g Fe(ESCAPE)p Fo(,)f Fe(LFD)p Fo(,)1110 5340 y Fe(NEWLINE)p Fo(,)31 b Fe(RET)p Fo(,)f Fe(RETURN)p Fo(,)g Fe(R)m(UBOUT)p Fo(,)h Fe(SP)-8 b(A)m(CE)p Fo(,)31 b Fe(SPC)p Fo(,)e(and)h Fe(T)-8 b(AB)p Fo(.)p eop end %%Page: 11 14 TeXDict begin 11 13 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(11)630 299 y Fn(")p Fe(k)m(eyseq)r Fn(")p Fo(:)41 b Fe(function-name)36 b Fo(or)30 b Fe(macro)1110 408 y(k)m(eyseq)k Fo(di\013ers)d(from)f Fe(k)m(eyname)37 b Fo(ab)s(o)m(v)m(e)32 b(in)f(that)h(strings)f (denoting)g(an)g(en-)1110 518 y(tire)j(k)m(ey)h(sequence)f(can)g(b)s(e) f(sp)s(eci\014ed,)h(b)m(y)f(placing)i(the)f(k)m(ey)g(sequence)g(in)1110 628 y(double)29 b(quotes.)41 b(Some)29 b Fh(gnu)h Fo(Emacs)f(st)m(yle)i (k)m(ey)f(escap)s(es)g(can)g(b)s(e)f(used,)g(as)1110 737 y(in)k(the)h(follo)m(wing)i(example,)f(but)e(the)h(sp)s(ecial)h(c)m (haracter)g(names)f(are)g(not)1110 847 y(recognized.)1350 981 y Fn("\\C-u":)46 b(universal-argument)1350 1091 y("\\C-x\\C-r":)f (re-read-init-file)1350 1200 y("\\e[11~":)g("Function)h(Key)g(1")1110 1334 y Fo(In)64 b(the)g(ab)s(o)m(v)m(e)i(example,)74 b Fg(C-u)64 b Fo(is)g(again)i(b)s(ound)c(to)k(the)e(function)1110 1444 y Fn(universal-argument)39 b Fo(\(just)k(as)h(it)g(w)m(as)g(in)g (the)f(\014rst)g(example\),)49 b(`)p Fg(C-x)1110 1554 y(C-r)p Fo(')30 b(is)g(b)s(ound)e(to)j(the)g(function)f Fn(re-read-init-file)p Fo(,)c(and)j(`)p Fn(ESC)h([)g(1)g(1)1110 1663 y(~)p Fo(')g(is)h(b)s(ound)d(to)j(insert)f(the)h(text)g(`)p Fn(Function)e(Key)g(1)p Fo('.)630 1822 y(The)g(follo)m(wing)i Fh(gnu)f Fo(Emacs)g(st)m(yle)h(escap)s(e)f(sequences)g(are)g(a)m(v)-5 b(ailable)32 b(when)d(sp)s(ecifying)630 1932 y(k)m(ey)i(sequences:)630 2091 y Fg(\\C-)336 b Fo(con)m(trol)32 b(pre\014x)630 2250 y Fg(\\M-)336 b Fo(meta)31 b(pre\014x)630 2408 y Fg(\\e)384 b Fo(an)30 b(escap)s(e)h(c)m(haracter)630 2567 y Fg(\\\\)384 b Fo(bac)m(kslash)630 2726 y Fg(\\)p Fn(")g(")p Fo(,)30 b(a)h(double)f(quotation)i(mark)630 2885 y Fg(\\')384 b Fn(')p Fo(,)30 b(a)h(single)g(quote)g(or)f(ap)s (ostrophe)630 3044 y(In)d(addition)h(to)g(the)g Fh(gnu)f Fo(Emacs)h(st)m(yle)h(escap)s(e)f(sequences,)h(a)f(second)f(set)h(of)g (bac)m(kslash)630 3154 y(escap)s(es)j(is)f(a)m(v)-5 b(ailable:)630 3313 y Fn(\\a)384 b Fo(alert)31 b(\(b)s(ell\))630 3471 y Fn(\\b)384 b Fo(bac)m(kspace)630 3630 y Fn(\\d)g Fo(delete)630 3789 y Fn(\\f)g Fo(form)30 b(feed)630 3948 y Fn(\\n)384 b Fo(newline)630 4107 y Fn(\\r)g Fo(carriage)32 b(return)630 4266 y Fn(\\t)384 b Fo(horizon)m(tal)32 b(tab)630 4425 y Fn(\\v)384 b Fo(v)m(ertical)32 b(tab)630 4584 y Fn(\\)p Fg(nnn)288 b Fo(the)35 b(eigh)m(t-bit)h(c)m(haracter)g(whose)e(v)-5 b(alue)35 b(is)g(the)f(o)s(ctal)i(v)-5 b(alue)35 b Fe(nnn)e Fo(\(one)i(to)1110 4693 y(three)c(digits\))630 4852 y Fn(\\x)p Fg(HH)288 b Fo(the)38 b(eigh)m(t-bit)i(c)m(haracter)g(whose)e (v)-5 b(alue)39 b(is)f(the)h(hexadecimal)g(v)-5 b(alue)39 b Fe(HH)1110 4962 y Fo(\(one)31 b(or)f(t)m(w)m(o)i(hex)e(digits\))630 5121 y(When)37 b(en)m(tering)h(the)g(text)g(of)g(a)g(macro,)i(single)e (or)f(double)g(quotes)h(m)m(ust)f(b)s(e)g(used)f(to)630 5230 y(indicate)23 b(a)e(macro)h(de\014nition.)38 b(Unquoted)21 b(text)i(is)e(assumed)g(to)h(b)s(e)f(a)h(function)f(name.)38 b(In)630 5340 y(the)22 b(macro)f(b)s(o)s(dy)-8 b(,)23 b(the)e(bac)m(kslash)h(escap)s(es)g(describ)s(ed)e(ab)s(o)m(v)m(e)j (are)e(expanded.)37 b(Bac)m(kslash)p eop end %%Page: 12 15 TeXDict begin 12 14 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(12)630 299 y(will)40 b(quote)h(an)m(y)f(other)g(c)m(haracter)i(in)d(the)i(macro)f(text,)k (including)39 b(`)p Fn(")p Fo(')h(and)g(`)p Fn(')p Fo('.)69 b(F)-8 b(or)630 408 y(example,)28 b(the)e(follo)m(wing)h(binding)d (will)i(mak)m(e)h(`)p Fg(C-x)j Fn(\\)p Fo(')c(insert)f(a)h(single)h(`)p Fn(\\)p Fo(')f(in)m(to)g(the)g(line:)870 536 y Fn("\\C-x\\\\":)45 b("\\\\")150 721 y Fd(1.3.2)63 b(Conditional)41 b(Init)g(Constructs)150 868 y Fo(Readline)c(implemen)m(ts)g(a)h(facilit)m(y)g(similar)f(in)g (spirit)f(to)i(the)f(conditional)h(compilation)g(features)f(of)150 978 y(the)31 b(C)f(prepro)s(cessor)g(whic)m(h)g(allo)m(ws)i(k)m(ey)g (bindings)d(and)h(v)-5 b(ariable)32 b(settings)f(to)h(b)s(e)e(p)s (erformed)f(as)i(the)150 1087 y(result)f(of)h(tests.)41 b(There)30 b(are)h(four)f(parser)f(directiv)m(es)j(used.)150 1233 y Fn($if)336 b Fo(The)31 b Fn($if)f Fo(construct)i(allo)m(ws)h (bindings)d(to)i(b)s(e)e(made)i(based)f(on)g(the)g(editing)h(mo)s(de,)g (the)630 1342 y(terminal)39 b(b)s(eing)e(used,)j(or)e(the)g (application)h(using)f(Readline.)64 b(The)38 b(text)h(of)f(the)g(test) 630 1452 y(extends)30 b(to)h(the)g(end)f(of)g(the)h(line;)g(no)f(c)m (haracters)i(are)f(required)e(to)i(isolate)i(it.)630 1597 y Fn(mode)288 b Fo(The)30 b Fn(mode=)e Fo(form)i(of)g(the)h Fn($if)e Fo(directiv)m(e)j(is)e(used)f(to)i(test)g(whether)e(Read-)1110 1707 y(line)44 b(is)f(in)g Fn(emacs)f Fo(or)h Fn(vi)g Fo(mo)s(de.)79 b(This)42 b(ma)m(y)i(b)s(e)e(used)h(in)g(conjunction) 1110 1816 y(with)c(the)h(`)p Fn(set)29 b(keymap)p Fo(')38 b(command,)k(for)d(instance,)j(to)e(set)g(bindings)e(in)1110 1926 y(the)32 b Fn(emacs-standard)c Fo(and)j Fn(emacs-ctlx)d Fo(k)m(eymaps)k(only)g(if)g(Readline)g(is)1110 2036 y(starting)f(out)g (in)f Fn(emacs)f Fo(mo)s(de.)630 2181 y Fn(term)288 b Fo(The)26 b Fn(term=)g Fo(form)g(ma)m(y)i(b)s(e)e(used)g(to)i(include)f (terminal-sp)s(eci\014c)g(k)m(ey)h(bind-)1110 2291 y(ings,)38 b(p)s(erhaps)c(to)j(bind)e(the)h(k)m(ey)h(sequences)f(output)g(b)m(y)g (the)g(terminal's)1110 2400 y(function)24 b(k)m(eys.)39 b(The)23 b(w)m(ord)h(on)f(the)i(righ)m(t)f(side)g(of)g(the)g(`)p Fn(=)p Fo(')g(is)g(tested)h(against)1110 2510 y(b)s(oth)k(the)h(full)g (name)g(of)g(the)g(terminal)h(and)e(the)i(p)s(ortion)e(of)h(the)g (terminal)1110 2619 y(name)k(b)s(efore)f(the)g(\014rst)g(`)p Fn(-)p Fo('.)50 b(This)33 b(allo)m(ws)i Fn(sun)e Fo(to)h(matc)m(h)g(b)s (oth)f Fn(sun)g Fo(and)1110 2729 y Fn(sun-cmd)p Fo(,)c(for)h(instance.) 630 2874 y Fn(application)1110 2984 y Fo(The)21 b Fe(application)j Fo(construct)e(is)g(used)f(to)i(include)f(application-sp)s(eci\014c)h (set-)1110 3093 y(tings.)39 b(Eac)m(h)26 b(program)e(using)g(the)h (Readline)g(library)g(sets)g(the)g Fe(application)1110 3203 y(name)p Fo(,)g(and)e(y)m(ou)g(can)h(test)g(for)f(a)g(particular)h (v)-5 b(alue.)39 b(This)22 b(could)h(b)s(e)g(used)f(to)1110 3313 y(bind)32 b(k)m(ey)h(sequences)g(to)h(functions)e(useful)g(for)h (a)g(sp)s(eci\014c)f(program.)48 b(F)-8 b(or)1110 3422 y(instance,)35 b(the)e(follo)m(wing)h(command)f(adds)f(a)i(k)m(ey)f (sequence)h(that)f(quotes)1110 3532 y(the)e(curren)m(t)f(or)g(previous) g(w)m(ord)g(in)g(Bash:)1350 3659 y Fn($if)47 b(Bash)1350 3769 y(#)g(Quote)g(the)g(current)f(or)h(previous)e(word)1350 3878 y("\\C-xq":)h("\\eb\\"\\ef\\"")1350 3988 y($endif)150 4133 y($endif)192 b Fo(This)29 b(command,)i(as)f(seen)h(in)f(the)g (previous)g(example,)h(terminates)g(an)g Fn($if)e Fo(command.)150 4279 y Fn($else)240 b Fo(Commands)29 b(in)h(this)h(branc)m(h)e(of)i (the)f Fn($if)g Fo(directiv)m(e)i(are)f(executed)g(if)f(the)h(test)g (fails.)150 4424 y Fn($include)96 b Fo(This)43 b(directiv)m(e)i(tak)m (es)g(a)e(single)i(\014lename)e(as)h(an)f(argumen)m(t)h(and)f(reads)g (commands)630 4534 y(and)38 b(bindings)f(from)h(that)i(\014le.)65 b(F)-8 b(or)39 b(example,)j(the)d(follo)m(wing)h(directiv)m(e)g(reads)e (from)630 4643 y Fn(/etc/inputrc)p Fo(:)870 4771 y Fn($include)46 b(/etc/inputrc)150 4956 y Fd(1.3.3)63 b(Sample)41 b(Init)g(File)150 5103 y Fo(Here)27 b(is)f(an)h(example)g(of)f(an)h Fe(inputrc)k Fo(\014le.)39 b(This)26 b(illustrates)h(k)m(ey)h(binding,)e(v)-5 b(ariable)27 b(assignmen)m(t,)i(and)150 5212 y(conditional)j(syn)m (tax.)p eop end %%Page: 13 16 TeXDict begin 13 15 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(13)p eop end %%Page: 14 17 TeXDict begin 14 16 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(14)390 408 y Fn(#)47 b(This)g(file)g(controls)e(the)i(behaviour)e(of)j(line)e(input)h (editing)e(for)390 518 y(#)i(programs)f(that)h(use)g(the)f(GNU)h (Readline)f(library.)93 b(Existing)390 628 y(#)47 b(programs)f(include) g(FTP,)g(Bash,)h(and)g(GDB.)390 737 y(#)390 847 y(#)g(You)g(can)g (re-read)f(the)h(inputrc)f(file)g(with)h(C-x)g(C-r.)390 956 y(#)g(Lines)g(beginning)e(with)i('#')g(are)g(comments.)390 1066 y(#)390 1176 y(#)g(First,)g(include)e(any)i(system-wide)e (bindings)h(and)g(variable)390 1285 y(#)h(assignments)e(from)i (/etc/Inputrc)390 1395 y($include)f(/etc/Inputrc)390 1614 y(#)390 1724 y(#)h(Set)g(various)f(bindings)g(for)h(emacs)f(mode.) 390 1943 y(set)h(editing-mode)d(emacs)390 2162 y($if)j(mode=emacs)390 2381 y(Meta-Control-h:)91 b(backward-kill-word)43 b(Text)k(after)f(the) h(function)f(name)g(is)h(ignored)p 3970 2401 42 76 v 390 2600 a(#)390 2710 y(#)g(Arrow)g(keys)f(in)i(keypad)e(mode)390 2819 y(#)390 2929 y(#"\\M-OD":)379 b(backward-char)390 3039 y(#"\\M-OC":)g(forward-char)390 3148 y(#"\\M-OA":)g (previous-history)390 3258 y(#"\\M-OB":)g(next-history)390 3367 y(#)390 3477 y(#)47 b(Arrow)g(keys)f(in)i(ANSI)e(mode)390 3587 y(#)390 3696 y("\\M-[D":)380 b(backward-char)390 3806 y("\\M-[C":)g(forward-char)390 3915 y("\\M-[A":)g (previous-history)390 4025 y("\\M-[B":)g(next-history)390 4134 y(#)390 4244 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(keypad)f(mode) 390 4354 y(#)390 4463 y(#"\\M-\\C-OD":)331 b(backward-char)390 4573 y(#"\\M-\\C-OC":)g(forward-char)390 4682 y(#"\\M-\\C-OA":)g (previous-history)390 4792 y(#"\\M-\\C-OB":)g(next-history)390 4902 y(#)390 5011 y(#)47 b(Arrow)g(keys)f(in)i(8)f(bit)g(ANSI)g(mode) 390 5121 y(#)390 5230 y(#"\\M-\\C-[D":)331 b(backward-char)390 5340 y(#"\\M-\\C-[C":)g(forward-char)p eop end %%Page: 15 18 TeXDict begin 15 17 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(15)390 299 y Fn(#"\\M-\\C-[A":)331 b(previous-history)390 408 y(#"\\M-\\C-[B":)g(next-history)390 628 y(C-q:)47 b(quoted-insert)390 847 y($endif)390 1066 y(#)g(An)h(old-style)d(binding.)93 b(This)47 b(happens)f(to)h(be)g(the) g(default.)390 1176 y(TAB:)g(complete)390 1395 y(#)g(Macros)g(that)f (are)h(convenient)e(for)i(shell)f(interaction)390 1504 y($if)h(Bash)390 1614 y(#)g(edit)g(the)g(path)390 1724 y("\\C-xp":)f("PATH=${PATH}\\e\\C-e\\C-a)o(\\ef)o(\\C-f)o(")390 1833 y(#)h(prepare)f(to)h(type)g(a)h(quoted)e(word)g(--)390 1943 y(#)h(insert)g(open)f(and)h(close)f(double)h(quotes)390 2052 y(#)g(and)g(move)g(to)g(just)g(after)f(the)h(open)g(quote)390 2162 y("\\C-x\\"":)e("\\"\\"\\C-b")390 2271 y(#)i(insert)g(a)g (backslash)e(\(testing)h(backslash)f(escapes)390 2381 y(#)i(in)h(sequences)d(and)i(macros\))390 2491 y("\\C-x\\\\":)e("\\\\") 390 2600 y(#)i(Quote)g(the)g(current)f(or)h(previous)e(word)390 2710 y("\\C-xq":)h("\\eb\\"\\ef\\"")390 2819 y(#)h(Add)g(a)h(binding)e (to)h(refresh)f(the)h(line,)f(which)g(is)h(unbound)390 2929 y("\\C-xr":)f(redraw-current-line)390 3039 y(#)h(Edit)g(variable)f (on)h(current)f(line.)390 3148 y("\\M-\\C-v":)f ("\\C-a\\C-k$\\C-y\\M-\\C-e\\C-)o(a\\C-)o(y=")390 3258 y($endif)390 3477 y(#)i(use)g(a)h(visible)e(bell)g(if)h(one)g(is)h (available)390 3587 y(set)f(bell-style)e(visible)390 3806 y(#)i(don't)g(strip)f(characters)f(to)i(7)h(bits)e(when)h(reading) 390 3915 y(set)g(input-meta)e(on)390 4134 y(#)i(allow)g(iso-latin1)e (characters)g(to)i(be)g(inserted)f(rather)390 4244 y(#)h(than)g (converted)e(to)j(prefix-meta)c(sequences)390 4354 y(set)j (convert-meta)d(off)390 4573 y(#)j(display)f(characters)f(with)i(the)g (eighth)f(bit)h(set)g(directly)390 4682 y(#)g(rather)g(than)f(as)h (meta-prefixed)e(characters)390 4792 y(set)i(output-meta)e(on)390 5011 y(#)i(if)h(there)e(are)h(more)g(than)f(150)h(possible)f (completions)e(for)390 5121 y(#)j(a)h(word,)e(ask)h(the)g(user)g(if)g (he)g(wants)f(to)i(see)f(all)f(of)i(them)390 5230 y(set)f (completion-query-items)42 b(150)p eop end %%Page: 16 19 TeXDict begin 16 18 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(16)390 299 y Fn(#)47 b(For)g(FTP)390 408 y($if)g(Ftp)390 518 y("\\C-xg":)f("get)g(\\M-?")390 628 y("\\C-xt":)g("put)g(\\M-?")390 737 y("\\M-.":)g(yank-last-arg)390 847 y($endif)150 1085 y Fm(1.4)68 b(Bindable)45 b(Readline)i(Commands) 150 1244 y Fo(This)25 b(section)i(describ)s(es)d(Readline)j(commands)e (that)h(ma)m(y)g(b)s(e)f(b)s(ound)f(to)i(k)m(ey)h(sequences.)39 b(Command)150 1354 y(names)30 b(without)h(an)f(accompan)m(ying)i(k)m (ey)f(sequence)g(are)g(un)m(b)s(ound)c(b)m(y)k(default.)275 1487 y(In)25 b(the)h(follo)m(wing)i(descriptions,)f Fe(p)s(oin)m(t)h Fo(refers)e(to)h(the)f(curren)m(t)g(cursor)g(p)s(osition,)h(and)f Fe(mark)31 b Fo(refers)150 1597 y(to)40 b(a)f(cursor)f(p)s(osition)h (sa)m(v)m(ed)h(b)m(y)f(the)g Fn(set-mark)d Fo(command.)66 b(The)38 b(text)i(b)s(et)m(w)m(een)g(the)f(p)s(oin)m(t)g(and)150 1706 y(mark)30 b(is)h(referred)e(to)i(as)g(the)f Fe(region)p Fo(.)150 1903 y Fd(1.4.1)63 b(Commands)42 b(F)-10 b(or)41 b(Mo)m(ving)150 2074 y Fn(beginning-of-line)26 b(\(C-a\))630 2183 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(start)h(of)g(the)f(curren)m(t)g (line.)150 2340 y Fn(end-of-line)d(\(C-e\))630 2450 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(line.)150 2607 y Fn(forward-char)c(\(C-f\))630 2716 y Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(a)h(c)m(haracter.)150 2873 y Fn(backward-char)c(\(C-b\)) 630 2983 y Fo(Mo)m(v)m(e)32 b(bac)m(k)g(a)e(c)m(haracter.)150 3140 y Fn(forward-word)d(\(M-f\))630 3249 y Fo(Mo)m(v)m(e)32 b(forw)m(ard)e(to)h(the)f(end)g(of)g(the)h(next)f(w)m(ord.)41 b(W)-8 b(ords)30 b(are)h(comp)s(osed)f(of)g(letters)i(and)630 3359 y(digits.)150 3516 y Fn(backward-word)27 b(\(M-b\))630 3625 y Fo(Mo)m(v)m(e)36 b(bac)m(k)e(to)g(the)g(start)g(of)g(the)g (curren)m(t)f(or)g(previous)g(w)m(ord.)50 b(W)-8 b(ords)34 b(are)g(comp)s(osed)630 3735 y(of)d(letters)g(and)f(digits.)150 3892 y Fn(clear-screen)d(\(C-l\))630 4001 y Fo(Clear)g(the)g(screen)f (and)h(redra)m(w)f(the)h(curren)m(t)f(line,)i(lea)m(ving)g(the)f (curren)m(t)g(line)g(at)g(the)g(top)630 4111 y(of)k(the)f(screen.)150 4268 y Fn(redraw-current-line)25 b(\(\))630 4377 y Fo(Refresh)30 b(the)g(curren)m(t)h(line.)41 b(By)30 b(default,)h(this)f(is)h(un)m(b)s (ound.)150 4574 y Fd(1.4.2)63 b(Commands)42 b(F)-10 b(or)41 b(Manipulating)h(The)f(History)150 4745 y Fn(accept-line)27 b(\(Newline)h(or)i(Return\))630 4854 y Fo(Accept)36 b(the)g(line)f (regardless)h(of)f(where)g(the)g(cursor)g(is.)55 b(If)34 b(this)h(line)h(is)f(non-empt)m(y)-8 b(,)37 b(it)630 4964 y(ma)m(y)32 b(b)s(e)g(added)f(to)h(the)g(history)g(list)h(for)e (future)g(recall)j(with)d Fn(add_history\(\))p Fo(.)42 b(If)31 b(this)630 5074 y(line)g(is)f(a)h(mo)s(di\014ed)e(history)h (line,)h(the)g(history)f(line)h(is)f(restored)h(to)g(its)g(original)g (state.)150 5230 y Fn(previous-history)26 b(\(C-p\))630 5340 y Fo(Mo)m(v)m(e)32 b(`bac)m(k')g(through)e(the)g(history)h(list,)g (fetc)m(hing)g(the)g(previous)f(command.)p eop end %%Page: 17 20 TeXDict begin 17 19 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(17)150 299 y Fn(next-history)27 b(\(C-n\))630 408 y Fo(Mo)m(v)m(e)32 b(`forw)m(ard')f(through)e(the)i (history)f(list,)i(fetc)m(hing)f(the)g(next)f(command.)150 558 y Fn(beginning-of-history)25 b(\(M-<\))630 667 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(\014rst)g(line)g(in)h(the)f(history)-8 b(.)150 817 y Fn(end-of-history)26 b(\(M->\))630 927 y Fo(Mo)m(v)m(e)32 b(to)g(the)e(end)g(of)g(the)h(input)e(history)-8 b(,)31 b(i.e.,)h(the)f(line)f(curren)m(tly)h(b)s(eing)f(en)m(tered.)150 1076 y Fn(reverse-search-history)24 b(\(C-r\))630 1186 y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g(the)f(curren)m(t)g (line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g(his-)630 1295 y(tory)g(as)f(necessary)-8 b(.)42 b(This)29 b(is)i(an)f(incremen)m (tal)i(searc)m(h.)150 1445 y Fn(forward-search-history)24 b(\(C-s\))630 1554 y Fo(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h (the)e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the) 630 1664 y(history)30 b(as)h(necessary)-8 b(.)41 b(This)30 b(is)g(an)h(incremen)m(tal)g(searc)m(h.)150 1813 y Fn (non-incremental-reverse-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-p\))630 1923 y Fo(Searc)m(h)31 b(bac)m(kw)m(ard)h(starting)g(at)g (the)f(curren)m(t)g(line)g(and)g(mo)m(ving)h(`up')e(through)h(the)g (his-)630 2032 y(tory)36 b(as)g(necessary)h(using)e(a)i(non-incremen)m (tal)g(searc)m(h)f(for)g(a)g(string)g(supplied)f(b)m(y)h(the)630 2142 y(user.)k(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an)m (ywhere)g(in)f(a)h(history)f(line.)150 2291 y Fn (non-incremental-forward-)o(sear)o(ch-h)o(ist)o(ory)24 b(\(M-n\))630 2401 y Fo(Searc)m(h)44 b(forw)m(ard)f(starting)h(at)h (the)e(curren)m(t)h(line)g(and)f(mo)m(ving)h(`do)m(wn')g(through)f(the) 630 2511 y(history)27 b(as)f(necessary)i(using)e(a)h(non-incremen)m (tal)g(searc)m(h)h(for)e(a)h(string)g(supplied)e(b)m(y)i(the)630 2620 y(user.)40 b(The)30 b(searc)m(h)h(string)f(ma)m(y)h(matc)m(h)g(an) m(ywhere)g(in)f(a)h(history)f(line.)150 2770 y Fn (history-search-forward)24 b(\(\))630 2879 y Fo(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g(the)h(string)f(of)h(c)m (haracters)h(b)s(et)m(w)m(een)f(the)630 2989 y(start)36 b(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.)58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3098 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3208 y(command)d(is)h(un)m(b)s(ound.)150 3357 y Fn(history-search-backward)24 b(\(\))630 3467 y Fo(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 3577 y(start)g(of)h(the)f(curren)m(t)f(line)i(and)e(the)h(p)s(oin)m(t.) 58 b(The)35 b(searc)m(h)i(string)e(m)m(ust)h(matc)m(h)h(at)g(the)630 3686 y(b)s(eginning)32 b(of)g(a)h(history)g(line.)47 b(This)32 b(is)h(a)f(non-incremen)m(tal)i(searc)m(h.)48 b(By)33 b(default,)g(this)630 3796 y(command)d(is)h(un)m(b)s(ound.)150 3945 y Fn(history-substr-search-fo)o(rwar)o(d)24 b(\(\))630 4055 y Fo(Searc)m(h)42 b(forw)m(ard)f(through)f(the)i(history)f(for)g (the)h(string)f(of)h(c)m(haracters)h(b)s(et)m(w)m(een)f(the)630 4164 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4274 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4384 y(is)e(un)m(b)s(ound.)150 4533 y Fn (history-substr-search-ba)o(ckwa)o(rd)24 b(\(\))630 4643 y Fo(Searc)m(h)35 b(bac)m(kw)m(ard)g(through)f(the)h(history)g(for)g (the)f(string)h(of)g(c)m(haracters)h(b)s(et)m(w)m(een)g(the)630 4752 y(start)29 b(of)g(the)g(curren)m(t)g(line)g(and)f(the)h(p)s(oin)m (t.)40 b(The)29 b(searc)m(h)g(string)g(ma)m(y)g(matc)m(h)h(an)m(ywhere) 630 4862 y(in)i(a)h(history)g(line.)47 b(This)32 b(is)g(a)h (non-incremen)m(tal)h(searc)m(h.)47 b(By)33 b(default,)h(this)e (command)630 4971 y(is)e(un)m(b)s(ound.)150 5121 y Fn(yank-nth-arg)d (\(M-C-y\))630 5230 y Fo(Insert)37 b(the)g(\014rst)f(argumen)m(t)i(to)f (the)h(previous)e(command)h(\(usually)g(the)g(second)g(w)m(ord)630 5340 y(on)32 b(the)g(previous)f(line\))i(at)f(p)s(oin)m(t.)46 b(With)32 b(an)g(argumen)m(t)g Fe(n)p Fo(,)g(insert)g(the)g Fe(n)p Fo(th)f(w)m(ord)g(from)p eop end %%Page: 18 21 TeXDict begin 18 20 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(18)630 299 y(the)35 b(previous)f(command)h(\(the)g(w)m(ords)g(in)f(the)h(previous)g (command)f(b)s(egin)h(with)f(w)m(ord)630 408 y(0\).)69 b(A)40 b(negativ)m(e)h(argumen)m(t)f(inserts)g(the)f Fe(n)p Fo(th)g(w)m(ord)g(from)g(the)h(end)f(of)h(the)f(previous)630 518 y(command.)48 b(Once)33 b(the)g(argumen)m(t)h Fe(n)e Fo(is)h(computed,)h(the)f(argumen)m(t)g(is)g(extracted)i(as)e(if)630 628 y(the)e(`)p Fn(!)p Fg(n)p Fo(')f(history)g(expansion)g(had)g(b)s (een)g(sp)s(eci\014ed.)150 775 y Fn(yank-last-arg)d(\(M-.)i(or)h(M-_\)) 630 885 y Fo(Insert)k(last)i(argumen)m(t)g(to)g(the)f(previous)f (command)h(\(the)h(last)f(w)m(ord)g(of)g(the)g(previous)630 994 y(history)e(en)m(try\).)51 b(With)34 b(a)g(n)m(umeric)g(argumen)m (t,)h(b)s(eha)m(v)m(e)f(exactly)h(lik)m(e)g Fn(yank-nth-arg)p Fo(.)630 1104 y(Successiv)m(e)26 b(calls)g(to)f Fn(yank-last-arg)c Fo(mo)m(v)m(e)27 b(bac)m(k)e(through)f(the)h(history)g(list,)i (inserting)630 1214 y(the)c(last)g(w)m(ord)f(\(or)h(the)g(w)m(ord)f(sp) s(eci\014ed)g(b)m(y)g(the)h(argumen)m(t)g(to)g(the)g(\014rst)f(call\))i (of)f(eac)m(h)h(line)630 1323 y(in)36 b(turn.)58 b(An)m(y)36 b(n)m(umeric)h(argumen)m(t)f(supplied)g(to)h(these)g(successiv)m(e)g (calls)h(determines)630 1433 y(the)d(direction)g(to)h(mo)m(v)m(e)g (through)e(the)h(history)-8 b(.)54 b(A)35 b(negativ)m(e)i(argumen)m(t)e (switc)m(hes)h(the)630 1542 y(direction)23 b(through)g(the)g(history)f (\(bac)m(k)i(or)f(forw)m(ard\).)38 b(The)22 b(history)h(expansion)g (facilities)630 1652 y(are)28 b(used)f(to)h(extract)h(the)f(last)g (argumen)m(t,)h(as)e(if)h(the)g(`)p Fn(!$)p Fo(')f(history)g(expansion) h(had)f(b)s(een)630 1762 y(sp)s(eci\014ed.)150 1949 y Fd(1.4.3)63 b(Commands)42 b(F)-10 b(or)41 b(Changing)g(T)-10 b(ext)150 2115 y Fg(end-of-file)27 b Fn(\(usually)h(C-d\))630 2225 y Fo(The)e(c)m(haracter)h(indicating)h(end-of-\014le)e(as)h(set,)g (for)f(example,)i(b)m(y)e Fn(stty)p Fo(.)39 b(If)25 b(this)h(c)m (harac-)630 2334 y(ter)c(is)g(read)g(when)e(there)i(are)h(no)e(c)m (haracters)j(on)d(the)h(line,)i(and)d(p)s(oin)m(t)h(is)g(at)h(the)f(b)s (eginning)630 2444 y(of)31 b(the)f(line,)h(Readline)g(in)m(terprets)g (it)g(as)f(the)h(end)f(of)g(input)f(and)h(returns)f Fh(eof)p Fo(.)150 2591 y Fn(delete-char)e(\(C-d\))630 2701 y Fo(Delete)35 b(the)f(c)m(haracter)h(at)f(p)s(oin)m(t.)49 b(If)33 b(this)g(function)g (is)g(b)s(ound)e(to)j(the)g(same)f(c)m(haracter)630 2811 y(as)e(the)f(tt)m(y)i Fh(eof)d Fo(c)m(haracter,)j(as)f Fg(C-d)e Fo(commonly)i(is,)g(see)g(ab)s(o)m(v)m(e)h(for)e(the)g (e\013ects.)150 2958 y Fn(backward-delete-char)25 b(\(Rubout\))630 3068 y Fo(Delete)32 b(the)f(c)m(haracter)g(b)s(ehind)e(the)h(cursor.)40 b(A)30 b(n)m(umeric)g(argumen)m(t)h(means)f(to)h(kill)g(the)630 3177 y(c)m(haracters)h(instead)e(of)h(deleting)g(them.)150 3325 y Fn(forward-backward-delete-)o(char)24 b(\(\))630 3434 y Fo(Delete)40 b(the)f(c)m(haracter)h(under)c(the)j(cursor,)h (unless)d(the)i(cursor)e(is)h(at)h(the)g(end)e(of)i(the)630 3544 y(line,)33 b(in)e(whic)m(h)g(case)i(the)f(c)m(haracter)h(b)s (ehind)d(the)i(cursor)f(is)g(deleted.)46 b(By)32 b(default,)g(this)630 3654 y(is)e(not)h(b)s(ound)d(to)j(a)g(k)m(ey)-8 b(.)150 3801 y Fn(quoted-insert)27 b(\(C-q)i(or)h(C-v\))630 3911 y Fo(Add)j(the)i(next)f(c)m(haracter)i(t)m(yp)s(ed)e(to)h(the)f(line)h (v)m(erbatim.)53 b(This)33 b(is)i(ho)m(w)f(to)h(insert)f(k)m(ey)630 4020 y(sequences)d(lik)m(e)g Fg(C-q)p Fo(,)f(for)g(example.)150 4168 y Fn(tab-insert)e(\(M-TAB\))630 4278 y Fo(Insert)i(a)h(tab)f(c)m (haracter.)150 4425 y Fn(self-insert)d(\(a,)j(b,)g(A,)f(1,)h(!,)g(...)o (\))630 4535 y Fo(Insert)g(y)m(ourself.)150 4682 y Fn (bracketed-paste-begin)25 b(\(\))630 4792 y Fo(This)f(function)h(is)f (in)m(tended)h(to)h(b)s(e)e(b)s(ound)f(to)i(the)g Fn(")p Fo(brac)m(k)m(eted)h(paste)p Fn(")f Fo(escap)s(e)h(sequence)630 4902 y(sen)m(t)38 b(b)m(y)f(some)h(terminals,)i(and)d(suc)m(h)g(a)h (binding)e(is)i(assigned)f(b)m(y)h(default.)62 b(It)38 b(allo)m(ws)630 5011 y(Readline)33 b(to)g(insert)g(the)f(pasted)h(text) g(as)g(a)g(single)g(unit)f(without)h(treating)h(eac)m(h)f(c)m(har-)630 5121 y(acter)40 b(as)f(if)g(it)g(had)f(b)s(een)g(read)h(from)f(the)h(k) m(eyb)s(oard.)66 b(The)39 b(c)m(haracters)h(are)f(inserted)630 5230 y(as)i(if)g(eac)m(h)i(one)e(w)m(as)h(b)s(ound)d(to)i Fn(self-insert)p Fo(\))e(instead)i(of)h(executing)g(an)m(y)f(editing) 630 5340 y(commands.)p eop end %%Page: 19 22 TeXDict begin 19 21 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(19)150 299 y Fn(transpose-chars)26 b(\(C-t\))630 408 y Fo(Drag)33 b(the)f(c)m(haracter)h(b)s(efore)f(the)g (cursor)f(forw)m(ard)h(o)m(v)m(er)h(the)f(c)m(haracter)i(at)e(the)g (cursor,)630 518 y(mo)m(ving)k(the)g(cursor)f(forw)m(ard)g(as)g(w)m (ell.)57 b(If)35 b(the)h(insertion)g(p)s(oin)m(t)f(is)g(at)i(the)e(end) g(of)h(the)630 628 y(line,)24 b(then)e(this)g(transp)s(oses)f(the)h (last)h(t)m(w)m(o)g(c)m(haracters)g(of)f(the)h(line.)38 b(Negativ)m(e)25 b(argumen)m(ts)630 737 y(ha)m(v)m(e)32 b(no)e(e\013ect.)150 907 y Fn(transpose-words)c(\(M-t\))630 1016 y Fo(Drag)33 b(the)g(w)m(ord)f(b)s(efore)g(p)s(oin)m(t)g(past)g (the)h(w)m(ord)f(after)g(p)s(oin)m(t,)i(mo)m(ving)f(p)s(oin)m(t)f(past) g(that)630 1126 y(w)m(ord)c(as)h(w)m(ell.)41 b(If)27 b(the)i(insertion)f(p)s(oin)m(t)h(is)f(at)h(the)g(end)e(of)i(the)f (line,)i(this)e(transp)s(oses)g(the)630 1236 y(last)j(t)m(w)m(o)h(w)m (ords)e(on)g(the)h(line.)150 1405 y Fn(upcase-word)c(\(M-u\))630 1515 y Fo(Upp)s(ercase)32 b(the)g(curren)m(t)g(\(or)g(follo)m(wing\))i (w)m(ord.)45 b(With)32 b(a)g(negativ)m(e)j(argumen)m(t,)e(upp)s(er-)630 1624 y(case)e(the)g(previous)f(w)m(ord,)g(but)g(do)g(not)h(mo)m(v)m(e)h (the)e(cursor.)150 1794 y Fn(downcase-word)d(\(M-l\))630 1904 y Fo(Lo)m(w)m(ercase)c(the)f(curren)m(t)f(\(or)h(follo)m(wing\))i (w)m(ord.)37 b(With)22 b(a)g(negativ)m(e)i(argumen)m(t,)g(lo)m(w)m (ercase)630 2013 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f(mo)m (v)m(e)i(the)f(cursor.)150 2183 y Fn(capitalize-word)26 b(\(M-c\))630 2292 y Fo(Capitalize)d(the)f(curren)m(t)f(\(or)g(follo)m (wing\))i(w)m(ord.)38 b(With)21 b(a)h(negativ)m(e)h(argumen)m(t,)h (capitalize)630 2402 y(the)31 b(previous)e(w)m(ord,)i(but)e(do)i(not)f (mo)m(v)m(e)i(the)f(cursor.)150 2571 y Fn(overwrite-mode)26 b(\(\))630 2681 y Fo(T)-8 b(oggle)35 b(o)m(v)m(erwrite)g(mo)s(de.)48 b(With)33 b(an)g(explicit)h(p)s(ositiv)m(e)g(n)m(umeric)f(argumen)m(t,) h(switc)m(hes)630 2791 y(to)22 b(o)m(v)m(erwrite)i(mo)s(de.)37 b(With)22 b(an)g(explicit)h(non-p)s(ositiv)m(e)f(n)m(umeric)g(argumen)m (t,)i(switc)m(hes)e(to)630 2900 y(insert)30 b(mo)s(de.)41 b(This)30 b(command)h(a\013ects)h(only)e Fn(emacs)f Fo(mo)s(de;)i Fn(vi)f Fo(mo)s(de)g(do)s(es)g(o)m(v)m(erwrite)630 3010 y(di\013eren)m(tly)-8 b(.)42 b(Eac)m(h)31 b(call)h(to)f Fn(readline\(\))c Fo(starts)k(in)f(insert)g(mo)s(de.)630 3149 y(In)52 b(o)m(v)m(erwrite)h(mo)s(de,)58 b(c)m(haracters)c(b)s (ound)c(to)j Fn(self-insert)c Fo(replace)k(the)g(text)g(at)630 3259 y(p)s(oin)m(t)59 b(rather)f(than)h(pushing)e(the)i(text)g(to)h (the)f(righ)m(t.)126 b(Characters)59 b(b)s(ound)d(to)630 3369 y Fn(backward-delete-char)25 b Fo(replace)31 b(the)g(c)m(haracter) h(b)s(efore)e(p)s(oin)m(t)g(with)g(a)h(space.)630 3508 y(By)g(default,)f(this)h(command)f(is)g(un)m(b)s(ound.)150 3718 y Fd(1.4.4)63 b(Killing)42 b(And)e(Y)-10 b(anking)150 3895 y Fn(kill-line)28 b(\(C-k\))630 4004 y Fo(Kill)j(the)f(text)i (from)e(p)s(oin)m(t)g(to)h(the)g(end)e(of)i(the)f(line.)150 4174 y Fn(backward-kill-line)25 b(\(C-x)30 b(Rubout\))630 4283 y Fo(Kill)h(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f(b)s (eginning)g(of)h(the)f(curren)m(t)g(line.)150 4453 y Fn(unix-line-discard)c(\(C-u\))630 4562 y Fo(Kill)31 b(bac)m(kw)m(ard)g(from)e(the)i(cursor)f(to)h(the)f(b)s(eginning)g(of)h (the)f(curren)m(t)g(line.)150 4732 y Fn(kill-whole-line)c(\(\))630 4842 y Fo(Kill)37 b(all)g(c)m(haracters)h(on)f(the)f(curren)m(t)h (line,)h(no)f(matter)g(where)f(p)s(oin)m(t)h(is.)59 b(By)36 b(default,)630 4951 y(this)30 b(is)h(un)m(b)s(ound.)150 5121 y Fn(kill-word)d(\(M-d\))630 5230 y Fo(Kill)i(from)f(p)s(oin)m(t)g (to)h(the)g(end)e(of)i(the)f(curren)m(t)h(w)m(ord,)f(or)g(if)h(b)s(et)m (w)m(een)g(w)m(ords,)f(to)h(the)g(end)630 5340 y(of)h(the)f(next)h(w)m (ord.)40 b(W)-8 b(ord)31 b(b)s(oundaries)e(are)h(the)h(same)g(as)f Fn(forward-word)p Fo(.)p eop end %%Page: 20 23 TeXDict begin 20 22 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(20)150 299 y Fn (backward-kill-word)25 b(\(M-DEL\))630 408 y Fo(Kill)k(the)g(w)m(ord)g (b)s(ehind)e(p)s(oin)m(t.)40 b(W)-8 b(ord)29 b(b)s(oundaries)f(are)h (the)g(same)g(as)g Fn(backward-word)p Fo(.)150 577 y Fn(unix-word-rubout)d(\(C-w\))630 686 y Fo(Kill)32 b(the)g(w)m(ord)f(b) s(ehind)f(p)s(oin)m(t,)i(using)f(white)h(space)g(as)g(a)g(w)m(ord)f(b)s (oundary)-8 b(.)43 b(The)31 b(killed)630 796 y(text)g(is)g(sa)m(v)m(ed) g(on)g(the)f(kill-ring.)150 964 y Fn(unix-filename-rubout)25 b(\(\))630 1073 y Fo(Kill)37 b(the)f(w)m(ord)g(b)s(ehind)f(p)s(oin)m (t,)j(using)e(white)g(space)h(and)f(the)g(slash)g(c)m(haracter)i(as)f (the)630 1183 y(w)m(ord)30 b(b)s(oundaries.)39 b(The)30 b(killed)h(text)g(is)g(sa)m(v)m(ed)g(on)g(the)f(kill-ring.)150 1351 y Fn(delete-horizontal-space)24 b(\(\))630 1461 y Fo(Delete)33 b(all)e(spaces)g(and)e(tabs)i(around)e(p)s(oin)m(t.)41 b(By)31 b(default,)f(this)h(is)f(un)m(b)s(ound.)150 1629 y Fn(kill-region)d(\(\))630 1738 y Fo(Kill)k(the)f(text)i(in)e(the)g (curren)m(t)h(region.)41 b(By)31 b(default,)f(this)h(command)f(is)g(un) m(b)s(ound.)150 1906 y Fn(copy-region-as-kill)25 b(\(\))630 2016 y Fo(Cop)m(y)34 b(the)g(text)h(in)f(the)g(region)g(to)h(the)f (kill)h(bu\013er,)f(so)g(it)h(can)f(b)s(e)f(y)m(ank)m(ed)i(righ)m(t)f (a)m(w)m(a)m(y)-8 b(.)630 2125 y(By)31 b(default,)f(this)h(command)f (is)g(un)m(b)s(ound.)150 2293 y Fn(copy-backward-word)25 b(\(\))630 2403 y Fo(Cop)m(y)38 b(the)h(w)m(ord)f(b)s(efore)g(p)s(oin)m (t)g(to)i(the)e(kill)h(bu\013er.)64 b(The)38 b(w)m(ord)g(b)s(oundaries) f(are)i(the)630 2513 y(same)31 b(as)f Fn(backward-word)p Fo(.)38 b(By)30 b(default,)h(this)f(command)g(is)h(un)m(b)s(ound.)150 2681 y Fn(copy-forward-word)26 b(\(\))630 2790 y Fo(Cop)m(y)31 b(the)g(w)m(ord)g(follo)m(wing)h(p)s(oin)m(t)f(to)h(the)f(kill)h (bu\013er.)42 b(The)30 b(w)m(ord)h(b)s(oundaries)e(are)j(the)630 2900 y(same)f(as)f Fn(forward-word)p Fo(.)38 b(By)30 b(default,)h(this)g(command)f(is)g(un)m(b)s(ound.)150 3068 y Fn(yank)f(\(C-y\))630 3177 y Fo(Y)-8 b(ank)31 b(the)f(top)h(of)g(the)f(kill)h(ring)f(in)m(to)i(the)e(bu\013er)g(at)h (p)s(oin)m(t.)150 3346 y Fn(yank-pop)d(\(M-y\))630 3455 y Fo(Rotate)36 b(the)f(kill-ring,)i(and)d(y)m(ank)h(the)f(new)g(top.)54 b(Y)-8 b(ou)35 b(can)g(only)f(do)h(this)f(if)h(the)g(prior)630 3565 y(command)30 b(is)h Fn(yank)e Fo(or)h Fn(yank-pop)p Fo(.)150 3773 y Fd(1.4.5)63 b(Sp)s(ecifying)42 b(Numeric)f(Argumen)m (ts)150 3949 y Fn(digit-argument)26 b(\()p Fg(M-0)p Fn(,)j Fg(M-1)p Fn(,)h(...)f Fg(M--)p Fn(\))630 4058 y Fo(Add)d(this)h(digit)g (to)h(the)f(argumen)m(t)g(already)h(accum)m(ulating,)h(or)e(start)h(a)f (new)f(argumen)m(t.)630 4168 y Fg(M--)j Fo(starts)i(a)g(negativ)m(e)i (argumen)m(t.)150 4336 y Fn(universal-argument)25 b(\(\))630 4446 y Fo(This)g(is)g(another)h(w)m(a)m(y)g(to)h(sp)s(ecify)e(an)g (argumen)m(t.)40 b(If)25 b(this)g(command)h(is)f(follo)m(w)m(ed)i(b)m (y)f(one)630 4555 y(or)k(more)f(digits,)i(optionally)g(with)e(a)h (leading)h(min)m(us)e(sign,)h(those)g(digits)g(de\014ne)f(the)h(ar-)630 4665 y(gumen)m(t.)41 b(If)28 b(the)i(command)f(is)g(follo)m(w)m(ed)h(b) m(y)f(digits,)i(executing)f Fn(universal-argument)630 4774 y Fo(again)j(ends)e(the)h(n)m(umeric)f(argumen)m(t,)i(but)e(is)h (otherwise)g(ignored.)45 b(As)32 b(a)g(sp)s(ecial)h(case,)630 4884 y(if)g(this)g(command)f(is)h(immediately)h(follo)m(w)m(ed)h(b)m(y) d(a)h(c)m(haracter)i(that)e(is)g(neither)g(a)g(digit)630 4994 y(nor)41 b(min)m(us)f(sign,)k(the)e(argumen)m(t)f(coun)m(t)h(for)f (the)h(next)f(command)g(is)g(m)m(ultiplied)h(b)m(y)630 5103 y(four.)54 b(The)35 b(argumen)m(t)g(coun)m(t)h(is)f(initially)h (one,)h(so)e(executing)i(this)e(function)f(the)i(\014rst)630 5213 y(time)29 b(mak)m(es)h(the)e(argumen)m(t)i(coun)m(t)f(four,)f(a)h (second)g(time)g(mak)m(es)h(the)e(argumen)m(t)h(coun)m(t)630 5322 y(sixteen,)i(and)f(so)h(on.)40 b(By)31 b(default,)g(this)f(is)g (not)h(b)s(ound)d(to)k(a)e(k)m(ey)-8 b(.)p eop end %%Page: 21 24 TeXDict begin 21 23 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(21)150 299 y Fd(1.4.6)63 b(Letting)40 b(Readline)h(T)m(yp)s(e)g(F)-10 b(or)42 b(Y)-10 b(ou)150 483 y Fn(complete)28 b(\(TAB\))630 593 y Fo(A)m(ttempt)c(to)f(p)s(erform)e(completion)j(on)f(the)g(text)g(b)s (efore)f(p)s(oin)m(t.)39 b(The)22 b(actual)i(completion)630 702 y(p)s(erformed)29 b(is)h(application-sp)s(eci\014c.)42 b(The)30 b(default)h(is)f(\014lename)h(completion.)150 886 y Fn(possible-completions)25 b(\(M-?\))630 996 y Fo(List)35 b(the)g(p)s(ossible)f(completions)i(of)e(the)h(text)h(b)s (efore)e(p)s(oin)m(t.)54 b(When)34 b(displa)m(ying)h(com-)630 1105 y(pletions,)f(Readline)f(sets)f(the)h(n)m(um)m(b)s(er)e(of)i (columns)f(used)f(for)i(displa)m(y)f(to)h(the)g(v)-5 b(alue)33 b(of)630 1215 y Fn(completion-display-width)o Fo(,)g(the)j(v)-5 b(alue)37 b(of)g(the)f(en)m(vironmen)m(t)h(v)-5 b(ariable)38 b Fn(COLUMNS)p Fo(,)630 1325 y(or)30 b(the)h(screen)f (width,)g(in)g(that)h(order.)150 1509 y Fn(insert-completions)25 b(\(M-*\))630 1618 y Fo(Insert)30 b(all)h(completions)h(of)f(the)g (text)g(b)s(efore)f(p)s(oin)m(t)h(that)g(w)m(ould)f(ha)m(v)m(e)i(b)s (een)e(generated)630 1728 y(b)m(y)g Fn(possible-completions)p Fo(.)150 1912 y Fn(menu-complete)d(\(\))630 2021 y Fo(Similar)d(to)g Fn(complete)p Fo(,)f(but)h(replaces)g(the)g(w)m(ord)g(to)g(b)s(e)f (completed)i(with)e(a)i(single)f(matc)m(h)630 2131 y(from)37 b(the)h(list)h(of)f(p)s(ossible)f(completions.)64 b(Rep)s(eated)39 b(execution)g(of)f Fn(menu-complete)630 2241 y Fo(steps)i(through)g (the)g(list)h(of)f(p)s(ossible)g(completions,)k(inserting)c(eac)m(h)i (matc)m(h)f(in)f(turn.)630 2350 y(A)m(t)e(the)f(end)f(of)h(the)g(list)g (of)g(completions,)i(the)e(b)s(ell)g(is)g(rung)f(\(sub)5 b(ject)36 b(to)i(the)f(setting)630 2460 y(of)f Fn(bell-style)p Fo(\))e(and)h(the)h(original)i(text)f(is)f(restored.)57 b(An)36 b(argumen)m(t)h(of)f Fe(n)f Fo(mo)m(v)m(es)i Fe(n)630 2569 y Fo(p)s(ositions)e(forw)m(ard)f(in)g(the)h(list)h(of)e (matc)m(hes;)39 b(a)c(negativ)m(e)i(argumen)m(t)e(ma)m(y)g(b)s(e)f (used)g(to)630 2679 y(mo)m(v)m(e)40 b(bac)m(kw)m(ard)e(through)g(the)g (list.)65 b(This)38 b(command)g(is)g(in)m(tended)g(to)h(b)s(e)f(b)s (ound)e(to)630 2789 y Fn(TAB)p Fo(,)30 b(but)f(is)i(un)m(b)s(ound)d(b)m (y)i(default.)150 2973 y Fn(menu-complete-backward)24 b(\(\))630 3082 y Fo(Iden)m(tical)36 b(to)g Fn(menu-complete)p Fo(,)d(but)h(mo)m(v)m(es)j(bac)m(kw)m(ard)e(through)f(the)i(list)f(of)g (p)s(ossible)630 3192 y(completions,)d(as)e(if)h Fn(menu-complete)26 b Fo(had)k(b)s(een)g(giv)m(en)h(a)g(negativ)m(e)i(argumen)m(t.)150 3376 y Fn(delete-char-or-list)25 b(\(\))630 3485 y Fo(Deletes)41 b(the)e(c)m(haracter)h(under)e(the)h(cursor)f(if)h(not)g(at)g(the)h(b)s (eginning)e(or)h(end)f(of)h(the)630 3595 y(line)50 b(\(lik)m(e)h Fn(delete-char)p Fo(\).)96 b(If)49 b(at)h(the)g(end)f(of)h(the)f(line,) 55 b(b)s(eha)m(v)m(es)c(iden)m(tically)g(to)630 3705 y Fn(possible-completions)p Fo(.)35 b(This)30 b(command)g(is)g(un)m(b)s (ound)e(b)m(y)i(default.)150 3928 y Fd(1.4.7)63 b(Keyb)s(oard)41 b(Macros)150 4113 y Fn(start-kbd-macro)26 b(\(C-x)j(\(\))630 4222 y Fo(Begin)i(sa)m(ving)h(the)e(c)m(haracters)i(t)m(yp)s(ed)e(in)m (to)h(the)g(curren)m(t)f(k)m(eyb)s(oard)g(macro.)150 4406 y Fn(end-kbd-macro)d(\(C-x)i(\)\))630 4516 y Fo(Stop)e(sa)m(ving)h (the)g(c)m(haracters)g(t)m(yp)s(ed)f(in)m(to)i(the)e(curren)m(t)g(k)m (eyb)s(oard)g(macro)h(and)f(sa)m(v)m(e)i(the)630 4625 y(de\014nition.)150 4809 y Fn(call-last-kbd-macro)c(\(C-x)k(e\))630 4919 y Fo(Re-execute)37 b(the)e(last)h(k)m(eyb)s(oard)f(macro)h (de\014ned,)f(b)m(y)h(making)f(the)g(c)m(haracters)i(in)e(the)630 5029 y(macro)c(app)s(ear)f(as)g(if)h(t)m(yp)s(ed)f(at)h(the)f(k)m(eyb)s (oard.)150 5213 y Fn(print-last-kbd-macro)25 b(\(\))630 5322 y Fo(Prin)m(t)30 b(the)h(last)g(k)m(eb)s(oard)f(macro)h(de\014ned) e(in)i(a)f(format)h(suitable)g(for)f(the)h Fe(inputrc)k Fo(\014le.)p eop end %%Page: 22 25 TeXDict begin 22 24 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(22)150 299 y Fd(1.4.8)63 b(Some)41 b(Miscellaneous)i(Commands)150 466 y Fn(re-read-init-file)26 b(\(C-x)j(C-r\))630 576 y Fo(Read)22 b(in)g(the)g(con)m(ten)m(ts)h(of)f (the)g Fe(inputrc)27 b Fo(\014le,)d(and)d(incorp)s(orate)h(an)m(y)h (bindings)d(or)i(v)-5 b(ariable)630 685 y(assignmen)m(ts)31 b(found)e(there.)150 836 y Fn(abort)g(\(C-g\))630 945 y Fo(Ab)s(ort)d(the)h(curren)m(t)f(editing)h(command)f(and)g(ring)h (the)f(terminal's)h(b)s(ell)g(\(sub)5 b(ject)26 b(to)i(the)630 1055 y(setting)j(of)g Fn(bell-style)p Fo(\).)150 1205 y Fn(do-uppercase-version)25 b(\(M-a,)k(M-b,)g(M-)p Fg(x)p Fn(,)g(...)o(\))630 1315 y Fo(If)e(the)h(meta\014ed)g(c)m(haracter)h Fe(x)34 b Fo(is)28 b(lo)m(w)m(ercase,)i(run)d(the)g(command)h(that)g (is)g(b)s(ound)d(to)k(the)630 1425 y(corresp)s(onding)g(upp)s(ercase)h (c)m(haracter.)150 1575 y Fn(prefix-meta)d(\(ESC\))630 1685 y Fo(Metafy)39 b(the)e(next)h(c)m(haracter)h(t)m(yp)s(ed.)62 b(This)37 b(is)g(for)h(k)m(eyb)s(oards)f(without)g(a)h(meta)g(k)m(ey)-8 b(.)630 1794 y(T)m(yping)30 b(`)p Fn(ESC)g(f)p Fo(')g(is)h(equiv)-5 b(alen)m(t)31 b(to)g(t)m(yping)g Fg(M-f)p Fo(.)150 1945 y Fn(undo)e(\(C-_)g(or)h(C-x)g(C-u\))630 2054 y Fo(Incremen)m(tal)h (undo,)f(separately)h(remem)m(b)s(ered)f(for)g(eac)m(h)i(line.)150 2205 y Fn(revert-line)27 b(\(M-r\))630 2314 y Fo(Undo)33 b(all)h(c)m(hanges)g(made)f(to)h(this)f(line.)49 b(This)32 b(is)h(lik)m(e)i(executing)f(the)f Fn(undo)f Fo(command)630 2424 y(enough)e(times)h(to)g(get)h(bac)m(k)f(to)g(the)f(b)s(eginning.) 150 2574 y Fn(tilde-expand)d(\(M-~\))630 2684 y Fo(P)m(erform)j(tilde)h (expansion)g(on)f(the)g(curren)m(t)h(w)m(ord.)150 2834 y Fn(set-mark)d(\(C-@\))630 2944 y Fo(Set)33 b(the)g(mark)f(to)i(the)f (p)s(oin)m(t.)48 b(If)32 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g (supplied,)f(the)h(mark)g(is)f(set)630 3054 y(to)f(that)g(p)s(osition.) 150 3204 y Fn(exchange-point-and-mark)24 b(\(C-x)29 b(C-x\))630 3314 y Fo(Sw)m(ap)i(the)g(p)s(oin)m(t)g(with)g(the)g(mark.)43 b(The)31 b(curren)m(t)g(cursor)f(p)s(osition)i(is)f(set)h(to)f(the)h (sa)m(v)m(ed)630 3423 y(p)s(osition,)f(and)e(the)i(old)g(cursor)e(p)s (osition)i(is)f(sa)m(v)m(ed)i(as)e(the)h(mark.)150 3574 y Fn(character-search)26 b(\(C-]\))630 3683 y Fo(A)f(c)m(haracter)h(is) f(read)g(and)f(p)s(oin)m(t)h(is)g(mo)m(v)m(ed)h(to)g(the)f(next)g(o)s (ccurrence)g(of)g(that)g(c)m(haracter.)630 3793 y(A)30 b(negativ)m(e)j(coun)m(t)e(searc)m(hes)g(for)f(previous)g(o)s (ccurrences.)150 3943 y Fn(character-search-backwar)o(d)24 b(\(M-C-]\))630 4053 y Fo(A)45 b(c)m(haracter)h(is)f(read)g(and)f(p)s (oin)m(t)h(is)g(mo)m(v)m(ed)h(to)f(the)g(previous)f(o)s(ccurrence)h(of) g(that)630 4162 y(c)m(haracter.)d(A)31 b(negativ)m(e)h(coun)m(t)f (searc)m(hes)h(for)e(subsequen)m(t)f(o)s(ccurrences.)150 4313 y Fn(skip-csi-sequence)d(\(\))630 4422 y Fo(Read)i(enough)f(c)m (haracters)h(to)g(consume)f(a)h(m)m(ulti-k)m(ey)h(sequence)f(suc)m(h)f (as)g(those)h(de\014ned)630 4532 y(for)37 b(k)m(eys)h(lik)m(e)g(Home)g (and)f(End.)60 b(Suc)m(h)37 b(sequences)g(b)s(egin)g(with)g(a)h(Con)m (trol)g(Sequence)630 4642 y(Indicator)f(\(CSI\),)f(usually)h(ESC-[.)59 b(If)36 b(this)g(sequence)h(is)g(b)s(ound)d(to)k Fn("\\)p Fo(e[)p Fn(")p Fo(,)g(k)m(eys)f(pro-)630 4751 y(ducing)31 b(suc)m(h)h(sequences)g(will)h(ha)m(v)m(e)g(no)f(e\013ect)h(unless)e (explicitly)j(b)s(ound)c(to)i(a)h(readline)630 4861 y(command,)f (instead)g(of)g(inserting)g(stra)m(y)h(c)m(haracters)g(in)m(to)g(the)f (editing)h(bu\013er.)44 b(This)31 b(is)630 4970 y(un)m(b)s(ound)d(b)m (y)i(default,)h(but)f(usually)g(b)s(ound)e(to)j(ESC-[.)150 5121 y Fn(insert-comment)26 b(\(M-#\))630 5230 y Fo(Without)36 b(a)g(n)m(umeric)g(argumen)m(t,)h(the)f(v)-5 b(alue)36 b(of)g(the)g Fn(comment-begin)c Fo(v)-5 b(ariable)36 b(is)g(in-)630 5340 y(serted)c(at)g(the)g(b)s(eginning)f(of)h(the)f (curren)m(t)h(line.)45 b(If)31 b(a)h(n)m(umeric)f(argumen)m(t)h(is)g (supplied,)p eop end %%Page: 23 26 TeXDict begin 23 25 bop 150 -116 a Fo(Chapter)30 b(1:)41 b(Command)29 b(Line)i(Editing)2107 b(23)630 299 y(this)36 b(command)h(acts)g(as)g(a)g(toggle:)55 b(if)37 b(the)f(c)m(haracters)i (at)g(the)e(b)s(eginning)g(of)h(the)g(line)630 408 y(do)30 b(not)h(matc)m(h)h(the)f(v)-5 b(alue)31 b(of)f Fn(comment-begin)p Fo(,)e(the)i(v)-5 b(alue)31 b(is)g(inserted,)g(otherwise)g(the)630 518 y(c)m(haracters)42 b(in)d Fn(comment-begin)e Fo(are)j(deleted)h (from)f(the)g(b)s(eginning)g(of)g(the)g(line.)71 b(In)630 628 y(either)31 b(case,)h(the)e(line)h(is)f(accepted)i(as)f(if)f(a)h (newline)f(had)g(b)s(een)f(t)m(yp)s(ed.)150 787 y Fn(dump-functions)d (\(\))630 897 y Fo(Prin)m(t)g(all)i(of)e(the)h(functions)f(and)g(their) g(k)m(ey)h(bindings)e(to)j(the)e(Readline)h(output)f(stream.)630 1006 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is)g(supplied,)f(the)h (output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a)m(y)g(that)630 1116 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fe(inputrc)k Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c(b)m(y)k (default.)150 1275 y Fn(dump-variables)26 b(\(\))630 1385 y Fo(Prin)m(t)21 b(all)h(of)g(the)f(settable)i(v)-5 b(ariables)22 b(and)f(their)g(v)-5 b(alues)22 b(to)g(the)f(Readline)h (output)f(stream.)630 1494 y(If)31 b(a)h(n)m(umeric)g(argumen)m(t)g(is) g(supplied,)f(the)h(output)f(is)h(formatted)g(in)f(suc)m(h)h(a)g(w)m(a) m(y)g(that)630 1604 y(it)f(can)g(b)s(e)e(made)i(part)f(of)g(an)h Fe(inputrc)k Fo(\014le.)41 b(This)29 b(command)h(is)h(un)m(b)s(ound)c (b)m(y)k(default.)150 1763 y Fn(dump-macros)c(\(\))630 1873 y Fo(Prin)m(t)34 b(all)g(of)g(the)g(Readline)g(k)m(ey)h(sequences) f(b)s(ound)e(to)i(macros)g(and)f(the)h(strings)g(they)630 1983 y(output.)53 b(If)35 b(a)g(n)m(umeric)f(argumen)m(t)i(is)e (supplied,)h(the)g(output)g(is)f(formatted)i(in)e(suc)m(h)h(a)630 2092 y(w)m(a)m(y)c(that)g(it)f(can)g(b)s(e)g(made)g(part)f(of)i(an)e Fe(inputrc)35 b Fo(\014le.)41 b(This)29 b(command)h(is)g(un)m(b)s(ound) d(b)m(y)630 2202 y(default.)150 2361 y Fn(emacs-editing-mode)e(\(C-e\)) 630 2471 y Fo(When)30 b(in)g Fn(vi)g Fo(command)g(mo)s(de,)g(this)h (causes)f(a)h(switc)m(h)g(to)g Fn(emacs)e Fo(editing)i(mo)s(de.)150 2630 y Fn(vi-editing-mode)26 b(\(M-C-j\))630 2740 y Fo(When)k(in)g Fn(emacs)f Fo(editing)i(mo)s(de,)f(this)h(causes)f(a)h(switc)m(h)g(to)g Fn(vi)f Fo(editing)h(mo)s(de.)150 2980 y Fm(1.5)68 b(Readline)47 b(vi)e(Mo)t(de)150 3140 y Fo(While)32 b(the)g(Readline)g(library)f(do)s (es)g(not)h(ha)m(v)m(e)h(a)f(full)f(set)h(of)g Fn(vi)f Fo(editing)h(functions,)f(it)h(do)s(es)g(con)m(tain)150 3249 y(enough)i(to)h(allo)m(w)g(simple)f(editing)h(of)f(the)g(line.)52 b(The)34 b(Readline)g Fn(vi)g Fo(mo)s(de)f(b)s(eha)m(v)m(es)i(as)f(sp)s (eci\014ed)f(in)150 3359 y(the)e Fh(posix)e Fo(standard.)275 3494 y(In)f(order)g(to)i(switc)m(h)g(in)m(teractiv)m(ely)i(b)s(et)m(w)m (een)d Fn(emacs)f Fo(and)g Fn(vi)h Fo(editing)g(mo)s(des,)g(use)g(the)g (command)150 3603 y Fg(M-C-j)36 b Fo(\(b)s(ound)h(to)h (emacs-editing-mo)s(de)i(when)d(in)g Fn(vi)h Fo(mo)s(de)f(and)g(to)i (vi-editing-mo)s(de)g(in)e Fn(emacs)150 3713 y Fo(mo)s(de\).)k(The)30 b(Readline)h(default)f(is)g Fn(emacs)f Fo(mo)s(de.)275 3847 y(When)g(y)m(ou)i(en)m(ter)f(a)h(line)f(in)g Fn(vi)f Fo(mo)s(de,)h(y)m(ou)h(are)f(already)h(placed)f(in)g(`insertion')g(mo)s (de,)g(as)h(if)f(y)m(ou)150 3957 y(had)f(t)m(yp)s(ed)g(an)g(`)p Fn(i)p Fo('.)41 b(Pressing)29 b Fn(ESC)f Fo(switc)m(hes)i(y)m(ou)g(in)m (to)h(`command')e(mo)s(de,)h(where)e(y)m(ou)i(can)g(edit)g(the)150 4066 y(text)35 b(of)f(the)g(line)g(with)f(the)h(standard)f Fn(vi)g Fo(mo)m(v)m(emen)m(t)j(k)m(eys,)g(mo)m(v)m(e)f(to)f(previous)g (history)f(lines)h(with)150 4176 y(`)p Fn(k)p Fo(')d(and)e(subsequen)m (t)h(lines)h(with)f(`)p Fn(j)p Fo(',)g(and)g(so)h(forth.)p eop end %%Page: 24 27 TeXDict begin 24 26 bop 3659 -116 a Fo(24)150 299 y Fk(App)t(endix)52 b(A)81 b(GNU)54 b(F)-13 b(ree)53 b(Do)t(cumen)l(tation)e(License)1359 502 y Fo(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 635 y(Cop)m(yrigh)m(t)842 632 y(c)817 635 y Fl(\015)e Fo(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 745 y Fn(http://fsf.org/)390 964 y Fo(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1074 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1207 y(0.)61 b(PREAMBLE)330 1340 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1450 y(useful)29 b(do)s(cumen)m(t)h Fe(free)36 b Fo(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1559 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1669 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 1778 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 1888 y(made)30 b(b)m(y)h(others.)330 2021 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2131 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2240 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2373 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2483 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2592 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2702 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 2812 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 2921 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3054 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3187 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3297 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3407 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3516 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3626 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3735 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 3845 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 3978 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4088 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4197 y(another)31 b(language.)330 4330 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4440 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4549 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4659 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 4769 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 4878 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 4988 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5097 y(them.)330 5230 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 5340 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)p eop end %%Page: 25 28 TeXDict begin 25 27 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(25)330 299 y(under)26 b(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 408 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 518 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 669 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 778 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 888 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 998 y(b)s(e)k(at)h(most)g(25)g(w)m (ords.)330 1148 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g (the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m(hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1258 y(in)d(a)h(format)g(whose)g(sp)s (eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g (public,)h(that)f(is)g(suitable)g(for)330 1367 y(revising)c(the)g(do)s (cumen)m(t)f(straigh)m(tforw)m(ardly)i(with)e(generic)i(text)g(editors) f(or)f(\(for)h(images)h(com-)330 1477 y(p)s(osed)23 b(of)h(pixels\))g (generic)h(pain)m(t)f(programs)g(or)f(\(for)h(dra)m(wings\))g(some)g (widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1587 y(editor,)k(and)f(that)g(is)g(suitable)h(for)f(input)f(to)i(text)g (formatters)f(or)g(for)g(automatic)i(translation)f(to)330 1696 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input) g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g (otherwise)330 1806 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g (whose)f(markup,)i(or)e(absence)h(of)g(markup,)g(has)g(b)s(een)f (arranged)g(to)330 1915 y(th)m(w)m(art)27 b(or)g(discourage)g (subsequen)m(t)f(mo)s(di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2025 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g (substan)m(tial)h(amoun)m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g (is)330 2134 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i (\\Opaque".)330 2285 y(Examples)53 b(of)g(suitable)h(formats)f(for)g(T) -8 b(ransparen)m(t)53 b(copies)h(include)f(plain)g Fh(asci)r(i)g Fo(without)330 2395 y(markup,)37 b(T)-8 b(exinfo)36 b(input)f(format,)j (LaT)1759 2414 y(E)1810 2395 y(X)e(input)f(format,)j Fc(SGML)f Fo(or)f Fc(XML)g Fo(using)g(a)g(publicly)330 2504 y(a)m(v)-5 b(ailable)42 b Fc(DTD)p Fo(,)h(and)c (standard-conforming)g(simple)h Fc(HTML)p Fo(,)i(P)m(ostScript)e(or)f Fc(PDF)h Fo(designed)330 2614 y(for)e(h)m(uman)f(mo)s(di\014cation.)65 b(Examples)38 b(of)h(transparen)m(t)f(image)h(formats)g(include)f Fc(PNG)p Fo(,)i Fc(X)n(CF)330 2724 y Fo(and)e Fc(JPG)p Fo(.)64 b(Opaque)38 b(formats)h(include)f(proprietary)h(formats)f(that) h(can)g(b)s(e)f(read)h(and)f(edited)330 2833 y(only)54 b(b)m(y)f(proprietary)h(w)m(ord)f(pro)s(cessors,)59 b Fc(SGML)54 b Fo(or)f Fc(XML)h Fo(for)g(whic)m(h)f(the)h Fc(DTD)g Fo(and/or)330 2943 y(pro)s(cessing)61 b(to)s(ols)h(are)f(not)g (generally)i(a)m(v)-5 b(ailable,)71 b(and)60 b(the)h(mac)m (hine-generated)j Fc(HTML)p Fo(,)330 3052 y(P)m(ostScript)31 b(or)f Fc(PDF)h Fo(pro)s(duced)d(b)m(y)j(some)f(w)m(ord)g(pro)s (cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3203 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m(ted)f(b) s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f(follo)m (wing)330 3313 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g(legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h(app)s(ear)f (in)h(the)330 3422 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h(an)m(y)e (title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3532 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3641 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3792 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 3902 y(to)c(the)g(public.)330 4052 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4162 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4271 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4381 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4491 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4600 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4751 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 4861 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 4970 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5080 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5189 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)199 5340 y(2.)61 b(VERBA)-8 b(TIM)31 b(COPYING)p eop end %%Page: 26 29 TeXDict begin 26 28 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(26)330 299 y(Y)-8 b(ou)39 b(ma)m(y)f(cop)m(y)h(and)e(distribute)h (the)g(Do)s(cumen)m(t)h(in)f(an)m(y)g(medium,)h(either)g(commercially)h (or)330 408 y(noncommercially)-8 b(,)48 b(pro)m(vided)42 b(that)h(this)f(License,)47 b(the)42 b(cop)m(yrigh)m(t)i(notices,)j (and)42 b(the)h(license)330 518 y(notice)37 b(sa)m(ying)g(this)e (License)i(applies)e(to)i(the)f(Do)s(cumen)m(t)g(are)g(repro)s(duced)e (in)i(all)g(copies,)j(and)330 628 y(that)27 b(y)m(ou)g(add)f(no)h (other)f(conditions)h(whatso)s(ev)m(er)h(to)f(those)g(of)g(this)f (License.)40 b(Y)-8 b(ou)27 b(ma)m(y)g(not)g(use)330 737 y(tec)m(hnical)35 b(measures)d(to)i(obstruct)f(or)g(con)m(trol)h (the)f(reading)g(or)g(further)e(cop)m(ying)j(of)f(the)g(copies)330 847 y(y)m(ou)25 b(mak)m(e)g(or)g(distribute.)38 b(Ho)m(w)m(ev)m(er,)28 b(y)m(ou)d(ma)m(y)g(accept)h(comp)s(ensation)f(in)f(exc)m(hange)j(for)d (copies.)330 956 y(If)32 b(y)m(ou)g(distribute)g(a)h(large)g(enough)f (n)m(um)m(b)s(er)f(of)h(copies)h(y)m(ou)f(m)m(ust)h(also)g(follo)m(w)g (the)f(conditions)330 1066 y(in)e(section)i(3.)330 1200 y(Y)-8 b(ou)21 b(ma)m(y)h(also)f(lend)g(copies,)i(under)d(the)h(same)g (conditions)g(stated)h(ab)s(o)m(v)m(e,)i(and)c(y)m(ou)h(ma)m(y)g (publicly)330 1310 y(displa)m(y)31 b(copies.)199 1443 y(3.)61 b(COPYING)30 b(IN)g(QUANTITY)330 1577 y(If)25 b(y)m(ou)g(publish)f(prin)m(ted)g(copies)i(\(or)g(copies)g(in)f(media)g (that)h(commonly)g(ha)m(v)m(e)g(prin)m(ted)f(co)m(v)m(ers\))i(of)330 1687 y(the)32 b(Do)s(cumen)m(t,)h(n)m(um)m(b)s(ering)e(more)h(than)f (100,)j(and)d(the)h(Do)s(cumen)m(t's)h(license)f(notice)h(requires)330 1797 y(Co)m(v)m(er)i(T)-8 b(exts,)36 b(y)m(ou)f(m)m(ust)f(enclose)i (the)e(copies)h(in)f(co)m(v)m(ers)i(that)f(carry)-8 b(,)36 b(clearly)f(and)f(legibly)-8 b(,)37 b(all)330 1906 y(these)j(Co)m(v)m (er)g(T)-8 b(exts:)59 b(F)-8 b(ron)m(t-Co)m(v)m(er)41 b(T)-8 b(exts)40 b(on)f(the)g(fron)m(t)g(co)m(v)m(er,)44 b(and)38 b(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts)40 b(on)330 2016 y(the)29 b(bac)m(k)h(co)m(v)m(er.)42 b(Both)30 b(co)m(v)m(ers)h(m) m(ust)e(also)h(clearly)g(and)f(legibly)h(iden)m(tify)f(y)m(ou)h(as)f (the)h(publisher)330 2125 y(of)k(these)h(copies.)53 b(The)34 b(fron)m(t)h(co)m(v)m(er)h(m)m(ust)e(presen)m(t)g(the)h(full)f(title)i (with)d(all)j(w)m(ords)d(of)i(the)f(title)330 2235 y(equally)e (prominen)m(t)e(and)g(visible.)43 b(Y)-8 b(ou)31 b(ma)m(y)g(add)g (other)g(material)h(on)f(the)g(co)m(v)m(ers)h(in)e(addition.)330 2345 y(Cop)m(ying)36 b(with)g(c)m(hanges)h(limited)g(to)g(the)g(co)m(v) m(ers,)i(as)d(long)h(as)g(they)f(preserv)m(e)g(the)h(title)g(of)g(the) 330 2454 y(Do)s(cumen)m(t)h(and)e(satisfy)i(these)f(conditions,)j(can)d (b)s(e)g(treated)h(as)f(v)m(erbatim)h(cop)m(ying)g(in)f(other)330 2564 y(resp)s(ects.)330 2698 y(If)32 b(the)h(required)f(texts)i(for)e (either)h(co)m(v)m(er)i(are)e(to)s(o)g(v)m(oluminous)g(to)g(\014t)g (legibly)-8 b(,)35 b(y)m(ou)e(should)f(put)330 2807 y(the)h(\014rst)f (ones)h(listed)g(\(as)h(man)m(y)f(as)g(\014t)g(reasonably\))g(on)g(the) g(actual)h(co)m(v)m(er,)h(and)e(con)m(tin)m(ue)h(the)330 2917 y(rest)d(on)m(to)g(adjacen)m(t)h(pages.)330 3051 y(If)27 b(y)m(ou)g(publish)e(or)i(distribute)g(Opaque)f(copies)i(of)f (the)h(Do)s(cumen)m(t)f(n)m(um)m(b)s(ering)f(more)i(than)e(100,)330 3160 y(y)m(ou)i(m)m(ust)g(either)h(include)e(a)i(mac)m(hine-readable)g (T)-8 b(ransparen)m(t)28 b(cop)m(y)h(along)g(with)e(eac)m(h)i(Opaque) 330 3270 y(cop)m(y)-8 b(,)38 b(or)d(state)h(in)f(or)g(with)g(eac)m(h)h (Opaque)e(cop)m(y)i(a)g(computer-net)m(w)m(ork)g(lo)s(cation)h(from)d (whic)m(h)330 3380 y(the)24 b(general)i(net)m(w)m(ork-using)f(public)e (has)h(access)i(to)f(do)m(wnload)f(using)g(public-standard)f(net)m(w)m (ork)330 3489 y(proto)s(cols)40 b(a)f(complete)h(T)-8 b(ransparen)m(t)39 b(cop)m(y)g(of)g(the)h(Do)s(cumen)m(t,)i(free)d(of)g (added)f(material.)67 b(If)330 3599 y(y)m(ou)39 b(use)g(the)g(latter)h (option,)h(y)m(ou)f(m)m(ust)e(tak)m(e)j(reasonably)e(pruden)m(t)e (steps,)k(when)d(y)m(ou)h(b)s(egin)330 3708 y(distribution)f(of)g (Opaque)g(copies)h(in)e(quan)m(tit)m(y)-8 b(,)43 b(to)38 b(ensure)g(that)h(this)f(T)-8 b(ransparen)m(t)38 b(cop)m(y)h(will)330 3818 y(remain)30 b(th)m(us)g(accessible)i(at)f(the)f(stated)h(lo)s (cation)h(un)m(til)e(at)h(least)h(one)e(y)m(ear)h(after)g(the)f(last)h (time)330 3927 y(y)m(ou)37 b(distribute)f(an)h(Opaque)f(cop)m(y)i (\(directly)g(or)e(through)g(y)m(our)h(agen)m(ts)h(or)f(retailers\))h (of)f(that)330 4037 y(edition)31 b(to)g(the)g(public.)330 4171 y(It)k(is)f(requested,)i(but)e(not)h(required,)g(that)g(y)m(ou)g (con)m(tact)h(the)f(authors)f(of)h(the)g(Do)s(cumen)m(t)g(w)m(ell)330 4281 y(b)s(efore)28 b(redistributing)g(an)m(y)h(large)h(n)m(um)m(b)s (er)d(of)i(copies,)h(to)f(giv)m(e)h(them)f(a)g(c)m(hance)h(to)f(pro)m (vide)g(y)m(ou)330 4390 y(with)h(an)g(up)s(dated)f(v)m(ersion)i(of)g (the)f(Do)s(cumen)m(t.)199 4524 y(4.)61 b(MODIFICA)-8 b(TIONS)330 4658 y(Y)g(ou)26 b(ma)m(y)g(cop)m(y)g(and)f(distribute)g(a) h(Mo)s(di\014ed)f(V)-8 b(ersion)26 b(of)g(the)g(Do)s(cumen)m(t)g(under) e(the)h(conditions)330 4768 y(of)c(sections)h(2)g(and)e(3)h(ab)s(o)m(v) m(e,)k(pro)m(vided)20 b(that)i(y)m(ou)f(release)i(the)e(Mo)s(di\014ed)f (V)-8 b(ersion)22 b(under)d(precisely)330 4877 y(this)29 b(License,)h(with)f(the)g(Mo)s(di\014ed)f(V)-8 b(ersion)30 b(\014lling)f(the)g(role)h(of)f(the)g(Do)s(cumen)m(t,)h(th)m(us)f (licensing)330 4987 y(distribution)k(and)h(mo)s(di\014cation)g(of)h (the)f(Mo)s(di\014ed)f(V)-8 b(ersion)35 b(to)g(who)s(ev)m(er)f(p)s (ossesses)f(a)i(cop)m(y)g(of)330 5096 y(it.)41 b(In)30 b(addition,)h(y)m(ou)f(m)m(ust)h(do)f(these)h(things)f(in)g(the)h(Mo)s (di\014ed)e(V)-8 b(ersion:)357 5230 y(A.)60 b(Use)33 b(in)f(the)h(Title)h(P)m(age)g(\(and)f(on)f(the)h(co)m(v)m(ers,)i(if)e (an)m(y\))g(a)g(title)h(distinct)f(from)g(that)g(of)g(the)510 5340 y(Do)s(cumen)m(t,)j(and)d(from)g(those)i(of)f(previous)f(v)m (ersions)h(\(whic)m(h)g(should,)g(if)g(there)g(w)m(ere)g(an)m(y)-8 b(,)p eop end %%Page: 27 30 TeXDict begin 27 29 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(27)510 299 y(b)s(e)31 b(listed)h(in)f(the)g(History)h(section)g(of)g (the)f(Do)s(cumen)m(t\).)45 b(Y)-8 b(ou)32 b(ma)m(y)g(use)f(the)g(same) h(title)h(as)510 408 y(a)e(previous)f(v)m(ersion)g(if)h(the)f(original) i(publisher)d(of)h(that)h(v)m(ersion)g(giv)m(es)h(p)s(ermission.)360 545 y(B.)61 b(List)31 b(on)f(the)h(Title)g(P)m(age,)i(as)d(authors,)h (one)g(or)f(more)h(p)s(ersons)e(or)h(en)m(tities)j(resp)s(onsible)c (for)510 655 y(authorship)c(of)h(the)h(mo)s(di\014cations)f(in)g(the)g (Mo)s(di\014ed)f(V)-8 b(ersion,)28 b(together)g(with)d(at)i(least)h (\014v)m(e)510 765 y(of)c(the)g(principal)g(authors)f(of)i(the)f(Do)s (cumen)m(t)g(\(all)h(of)g(its)f(principal)g(authors,)h(if)f(it)g(has)g (few)m(er)510 874 y(than)30 b(\014v)m(e\),)h(unless)f(they)h(release)g (y)m(ou)g(from)f(this)g(requiremen)m(t.)359 1011 y(C.)60 b(State)32 b(on)e(the)h(Title)h(page)f(the)g(name)g(of)g(the)g (publisher)e(of)i(the)g(Mo)s(di\014ed)f(V)-8 b(ersion,)32 b(as)f(the)510 1121 y(publisher.)355 1258 y(D.)61 b(Preserv)m(e)31 b(all)g(the)g(cop)m(yrigh)m(t)h(notices)f(of)g(the)f(Do)s(cumen)m(t.) 363 1395 y(E.)60 b(Add)30 b(an)i(appropriate)f(cop)m(yrigh)m(t)i (notice)f(for)g(y)m(our)f(mo)s(di\014cations)g(adjacen)m(t)i(to)f(the)g (other)510 1504 y(cop)m(yrigh)m(t)g(notices.)365 1641 y(F.)61 b(Include,)28 b(immediately)h(after)f(the)h(cop)m(yrigh)m(t)g (notices,)h(a)e(license)h(notice)g(giving)g(the)f(public)510 1751 y(p)s(ermission)23 b(to)j(use)e(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)25 b(under)e(the)i(terms)f(of)h(this)f(License,)j(in)d(the)g (form)510 1861 y(sho)m(wn)30 b(in)g(the)g(Addendum)f(b)s(elo)m(w.)353 1998 y(G.)61 b(Preserv)m(e)23 b(in)g(that)g(license)h(notice)g(the)f (full)g(lists)g(of)g(In)m(v)-5 b(arian)m(t)23 b(Sections)h(and)e (required)g(Co)m(v)m(er)510 2107 y(T)-8 b(exts)31 b(giv)m(en)g(in)f (the)h(Do)s(cumen)m(t's)g(license)h(notice.)357 2244 y(H.)60 b(Include)30 b(an)g(unaltered)g(cop)m(y)h(of)g(this)f(License.) 392 2381 y(I.)60 b(Preserv)m(e)33 b(the)f(section)h(En)m(titled)g (\\History",)h(Preserv)m(e)f(its)f(Title,)i(and)d(add)h(to)h(it)f(an)g (item)510 2491 y(stating)d(at)g(least)g(the)g(title,)h(y)m(ear,)g(new)d (authors,)i(and)e(publisher)f(of)j(the)f(Mo)s(di\014ed)f(V)-8 b(ersion)510 2600 y(as)32 b(giv)m(en)g(on)f(the)h(Title)g(P)m(age.)45 b(If)31 b(there)h(is)f(no)g(section)i(En)m(titled)f(\\History")h(in)e (the)g(Do)s(cu-)510 2710 y(men)m(t,)37 b(create)f(one)f(stating)h(the)f (title,)i(y)m(ear,)g(authors,)f(and)e(publisher)f(of)i(the)g(Do)s (cumen)m(t)510 2819 y(as)h(giv)m(en)h(on)f(its)h(Title)g(P)m(age,)i (then)d(add)g(an)g(item)g(describing)g(the)g(Mo)s(di\014ed)g(V)-8 b(ersion)37 b(as)510 2929 y(stated)31 b(in)f(the)h(previous)f(sen)m (tence.)378 3066 y(J.)60 b(Preserv)m(e)33 b(the)g(net)m(w)m(ork)g(lo)s (cation,)i(if)d(an)m(y)-8 b(,)34 b(giv)m(en)f(in)g(the)f(Do)s(cumen)m (t)h(for)g(public)e(access)j(to)510 3176 y(a)e(T)-8 b(ransparen)m(t)30 b(cop)m(y)i(of)g(the)f(Do)s(cumen)m(t,)h(and)f(lik)m(ewise)h(the)g(net) m(w)m(ork)g(lo)s(cations)g(giv)m(en)g(in)510 3285 y(the)g(Do)s(cumen)m (t)g(for)g(previous)f(v)m(ersions)h(it)g(w)m(as)g(based)f(on.)45 b(These)31 b(ma)m(y)h(b)s(e)f(placed)h(in)g(the)510 3395 y(\\History")27 b(section.)40 b(Y)-8 b(ou)25 b(ma)m(y)h(omit)g(a)f(net) m(w)m(ork)h(lo)s(cation)g(for)f(a)h(w)m(ork)f(that)g(w)m(as)h (published)510 3504 y(at)36 b(least)h(four)e(y)m(ears)i(b)s(efore)e (the)h(Do)s(cumen)m(t)h(itself,)h(or)d(if)h(the)g(original)h(publisher) d(of)i(the)510 3614 y(v)m(ersion)31 b(it)g(refers)f(to)h(giv)m(es)h(p)s (ermission.)354 3751 y(K.)60 b(F)-8 b(or)24 b(an)m(y)h(section)f(En)m (titled)h(\\Ac)m(kno)m(wledgemen)m(ts")i(or)d(\\Dedications",)k (Preserv)m(e)c(the)g(Title)510 3861 y(of)j(the)f(section,)j(and)d (preserv)m(e)h(in)f(the)h(section)g(all)h(the)e(substance)h(and)f(tone) h(of)f(eac)m(h)i(of)f(the)510 3970 y(con)m(tributor)k(ac)m(kno)m (wledgemen)m(ts)i(and/or)d(dedications)h(giv)m(en)h(therein.)368 4107 y(L.)60 b(Preserv)m(e)36 b(all)g(the)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(of)f(the)h(Do)s(cumen)m(t,)h(unaltered)f (in)f(their)g(text)i(and)510 4217 y(in)f(their)g(titles.)58 b(Section)37 b(n)m(um)m(b)s(ers)d(or)i(the)g(equiv)-5 b(alen)m(t)38 b(are)e(not)g(considered)g(part)g(of)g(the)510 4326 y(section)c(titles.)341 4463 y(M.)61 b(Delete)33 b(an)m(y)e(section)h(En)m(titled)f(\\Endorsemen)m(ts".)42 b(Suc)m(h)30 b(a)i(section)f(ma)m(y)h(not)f(b)s(e)f(included)510 4573 y(in)g(the)h(Mo)s(di\014ed)e(V)-8 b(ersion.)357 4710 y(N.)60 b(Do)29 b(not)g(retitle)h(an)m(y)e(existing)i(section)f (to)g(b)s(e)f(En)m(titled)h(\\Endorsemen)m(ts")g(or)f(to)h(con\015ict)g (in)510 4819 y(title)j(with)e(an)m(y)h(In)m(v)-5 b(arian)m(t)31 b(Section.)354 4956 y(O.)60 b(Preserv)m(e)31 b(an)m(y)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 5121 y(If)h(the)g(Mo)s(di\014ed)g (V)-8 b(ersion)34 b(includes)f(new)g(fron)m(t-matter)i(sections)f(or)f (app)s(endices)g(that)h(qualify)330 5230 y(as)28 b(Secondary)g (Sections)g(and)f(con)m(tain)j(no)d(material)j(copied)e(from)f(the)h (Do)s(cumen)m(t,)i(y)m(ou)e(ma)m(y)g(at)330 5340 y(y)m(our)k(option)h (designate)h(some)e(or)h(all)g(of)f(these)h(sections)h(as)e(in)m(v)-5 b(arian)m(t.)48 b(T)-8 b(o)33 b(do)f(this,)h(add)f(their)p eop end %%Page: 28 31 TeXDict begin 28 30 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(28)330 299 y(titles)37 b(to)f(the)f(list)h(of)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(in)f(the)h(Mo)s(di\014ed)f(V)-8 b(ersion's)36 b(license)g(notice.)57 b(These)330 408 y(titles)32 b(m)m(ust)e(b)s(e)g(distinct)h(from)e(an)m(y)i(other)g (section)g(titles.)330 551 y(Y)-8 b(ou)43 b(ma)m(y)g(add)f(a)g(section) i(En)m(titled)f(\\Endorsemen)m(ts",)j(pro)m(vided)c(it)h(con)m(tains)g (nothing)g(but)330 661 y(endorsemen)m(ts)30 b(of)g(y)m(our)f(Mo)s (di\014ed)g(V)-8 b(ersion)31 b(b)m(y)e(v)-5 b(arious)30 b(parties|for)g(example,)g(statemen)m(ts)i(of)330 770 y(p)s(eer)27 b(review)g(or)g(that)h(the)f(text)i(has)d(b)s(een)h(appro) m(v)m(ed)g(b)m(y)g(an)h(organization)h(as)e(the)h(authoritativ)m(e)330 880 y(de\014nition)i(of)h(a)f(standard.)330 1022 y(Y)-8 b(ou)29 b(ma)m(y)g(add)e(a)i(passage)g(of)g(up)e(to)i(\014v)m(e)g(w)m (ords)e(as)i(a)g(F)-8 b(ron)m(t-Co)m(v)m(er)30 b(T)-8 b(ext,)30 b(and)e(a)g(passage)i(of)e(up)330 1132 y(to)g(25)g(w)m(ords)e (as)i(a)f(Bac)m(k-Co)m(v)m(er)j(T)-8 b(ext,)29 b(to)f(the)f(end)f(of)i (the)f(list)h(of)f(Co)m(v)m(er)h(T)-8 b(exts)27 b(in)g(the)h(Mo)s (di\014ed)330 1241 y(V)-8 b(ersion.)58 b(Only)35 b(one)h(passage)h(of)f (F)-8 b(ron)m(t-Co)m(v)m(er)38 b(T)-8 b(ext)36 b(and)g(one)g(of)g(Bac)m (k-Co)m(v)m(er)j(T)-8 b(ext)36 b(ma)m(y)h(b)s(e)330 1351 y(added)27 b(b)m(y)g(\(or)h(through)f(arrangemen)m(ts)h(made)g(b)m(y\)) g(an)m(y)g(one)f(en)m(tit)m(y)-8 b(.)42 b(If)27 b(the)h(Do)s(cumen)m(t) g(already)330 1461 y(includes)34 b(a)g(co)m(v)m(er)h(text)g(for)f(the)g (same)h(co)m(v)m(er,)h(previously)e(added)f(b)m(y)h(y)m(ou)g(or)g(b)m (y)g(arrangemen)m(t)330 1570 y(made)h(b)m(y)g(the)h(same)f(en)m(tit)m (y)i(y)m(ou)f(are)f(acting)i(on)e(b)s(ehalf)f(of,)j(y)m(ou)f(ma)m(y)g (not)f(add)g(another;)j(but)330 1680 y(y)m(ou)c(ma)m(y)h(replace)g(the) f(old)g(one,)i(on)e(explicit)h(p)s(ermission)e(from)g(the)i(previous)e (publisher)f(that)330 1789 y(added)e(the)g(old)h(one.)330 1932 y(The)25 b(author\(s\))h(and)f(publisher\(s\))f(of)i(the)f(Do)s (cumen)m(t)h(do)g(not)f(b)m(y)h(this)f(License)h(giv)m(e)h(p)s (ermission)330 2041 y(to)k(use)f(their)g(names)h(for)f(publicit)m(y)g (for)h(or)f(to)h(assert)g(or)f(imply)g(endorsemen)m(t)g(of)h(an)m(y)g (Mo)s(di\014ed)330 2151 y(V)-8 b(ersion.)199 2293 y(5.)61 b(COMBINING)31 b(DOCUMENTS)330 2436 y(Y)-8 b(ou)39 b(ma)m(y)g(com)m (bine)h(the)f(Do)s(cumen)m(t)g(with)g(other)f(do)s(cumen)m(ts)h (released)g(under)f(this)g(License,)330 2545 y(under)f(the)h(terms)g (de\014ned)f(in)h(section)h(4)g(ab)s(o)m(v)m(e)g(for)f(mo)s(di\014ed)f (v)m(ersions,)k(pro)m(vided)d(that)h(y)m(ou)330 2655 y(include)25 b(in)g(the)g(com)m(bination)i(all)f(of)g(the)f(In)m(v)-5 b(arian)m(t)26 b(Sections)g(of)g(all)g(of)f(the)h(original)g(do)s (cumen)m(ts,)330 2765 y(unmo)s(di\014ed,)g(and)g(list)h(them)g(all)g (as)g(In)m(v)-5 b(arian)m(t)28 b(Sections)f(of)g(y)m(our)g(com)m(bined) g(w)m(ork)f(in)h(its)g(license)330 2874 y(notice,)32 b(and)e(that)h(y)m(ou)f(preserv)m(e)h(all)g(their)g(W)-8 b(arran)m(t)m(y)32 b(Disclaimers.)330 3017 y(The)e(com)m(bined)g(w)m (ork)h(need)e(only)i(con)m(tain)g(one)g(cop)m(y)g(of)f(this)g(License,) i(and)d(m)m(ultiple)i(iden)m(tical)330 3126 y(In)m(v)-5 b(arian)m(t)33 b(Sections)g(ma)m(y)g(b)s(e)f(replaced)h(with)f(a)h (single)g(cop)m(y)-8 b(.)48 b(If)32 b(there)h(are)g(m)m(ultiple)g(In)m (v)-5 b(arian)m(t)330 3236 y(Sections)27 b(with)g(the)g(same)g(name)g (but)f(di\013eren)m(t)h(con)m(ten)m(ts,)i(mak)m(e)f(the)f(title)h(of)f (eac)m(h)h(suc)m(h)f(section)330 3345 y(unique)33 b(b)m(y)h(adding)f (at)i(the)f(end)g(of)g(it,)h(in)f(paren)m(theses,)i(the)e(name)g(of)g (the)g(original)h(author)f(or)330 3455 y(publisher)23 b(of)i(that)h(section)g(if)f(kno)m(wn,)h(or)f(else)h(a)f(unique)f(n)m (um)m(b)s(er.)38 b(Mak)m(e)26 b(the)g(same)f(adjustmen)m(t)330 3565 y(to)g(the)g(section)g(titles)h(in)e(the)h(list)g(of)f(In)m(v)-5 b(arian)m(t)26 b(Sections)f(in)f(the)g(license)i(notice)g(of)e(the)h (com)m(bined)330 3674 y(w)m(ork.)330 3817 y(In)41 b(the)g(com)m (bination,)46 b(y)m(ou)41 b(m)m(ust)g(com)m(bine)h(an)m(y)g(sections)g (En)m(titled)g(\\History")h(in)e(the)g(v)-5 b(ari-)330 3926 y(ous)32 b(original)h(do)s(cumen)m(ts,)g(forming)f(one)g(section)h (En)m(titled)g(\\History";)i(lik)m(ewise)f(com)m(bine)f(an)m(y)330 4036 y(sections)g(En)m(titled)f(\\Ac)m(kno)m(wledgemen)m(ts",)k(and)31 b(an)m(y)h(sections)h(En)m(titled)g(\\Dedications".)47 b(Y)-8 b(ou)330 4145 y(m)m(ust)30 b(delete)i(all)f(sections)h(En)m (titled)f(\\Endorsemen)m(ts.")199 4288 y(6.)61 b(COLLECTIONS)28 b(OF)i(DOCUMENTS)330 4430 y(Y)-8 b(ou)32 b(ma)m(y)h(mak)m(e)g(a)f (collection)i(consisting)f(of)f(the)g(Do)s(cumen)m(t)g(and)g(other)g (do)s(cumen)m(ts)f(released)330 4540 y(under)41 b(this)h(License,)k (and)c(replace)h(the)g(individual)f(copies)h(of)f(this)g(License)h(in)f (the)h(v)-5 b(arious)330 4650 y(do)s(cumen)m(ts)42 b(with)g(a)h(single) g(cop)m(y)h(that)f(is)f(included)g(in)g(the)h(collection,)48 b(pro)m(vided)42 b(that)i(y)m(ou)330 4759 y(follo)m(w)38 b(the)g(rules)e(of)h(this)g(License)h(for)f(v)m(erbatim)h(cop)m(ying)g (of)f(eac)m(h)h(of)f(the)h(do)s(cumen)m(ts)e(in)h(all)330 4869 y(other)31 b(resp)s(ects.)330 5011 y(Y)-8 b(ou)32 b(ma)m(y)g(extract)h(a)f(single)g(do)s(cumen)m(t)f(from)g(suc)m(h)g(a)h (collection,)i(and)d(distribute)g(it)h(individu-)330 5121 y(ally)k(under)d(this)i(License,)i(pro)m(vided)e(y)m(ou)g(insert)g (a)g(cop)m(y)h(of)f(this)g(License)g(in)m(to)h(the)g(extracted)330 5230 y(do)s(cumen)m(t,)d(and)f(follo)m(w)i(this)e(License)h(in)g(all)g (other)g(resp)s(ects)f(regarding)h(v)m(erbatim)g(cop)m(ying)h(of)330 5340 y(that)d(do)s(cumen)m(t.)p eop end %%Page: 29 32 TeXDict begin 29 31 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(29)199 299 y(7.)61 b(A)m(GGREGA)-8 b(TION)32 b(WITH)e(INDEPENDENT)h (W)m(ORKS)330 441 y(A)d(compilation)i(of)e(the)g(Do)s(cumen)m(t)h(or)f (its)g(deriv)-5 b(ativ)m(es)30 b(with)d(other)i(separate)g(and)e(indep) s(enden)m(t)330 551 y(do)s(cumen)m(ts)33 b(or)g(w)m(orks,)h(in)f(or)h (on)f(a)g(v)m(olume)h(of)g(a)f(storage)i(or)e(distribution)g(medium,)g (is)h(called)330 661 y(an)c(\\aggregate")k(if)c(the)g(cop)m(yrigh)m(t)i (resulting)e(from)f(the)i(compilation)g(is)f(not)h(used)e(to)i(limit)g (the)330 770 y(legal)d(righ)m(ts)f(of)g(the)g(compilation's)h(users)e (b)s(ey)m(ond)g(what)g(the)h(individual)f(w)m(orks)g(p)s(ermit.)39 b(When)330 880 y(the)g(Do)s(cumen)m(t)g(is)f(included)g(in)g(an)g (aggregate,)44 b(this)38 b(License)h(do)s(es)f(not)h(apply)f(to)h(the)g (other)330 989 y(w)m(orks)30 b(in)g(the)h(aggregate)i(whic)m(h)d(are)h (not)g(themselv)m(es)g(deriv)-5 b(ativ)m(e)32 b(w)m(orks)f(of)f(the)h (Do)s(cumen)m(t.)330 1132 y(If)22 b(the)h(Co)m(v)m(er)h(T)-8 b(ext)23 b(requiremen)m(t)g(of)g(section)h(3)f(is)g(applicable)h(to)f (these)h(copies)f(of)g(the)g(Do)s(cumen)m(t,)330 1241 y(then)f(if)g(the)h(Do)s(cumen)m(t)g(is)g(less)f(than)g(one)h(half)f (of)h(the)g(en)m(tire)g(aggregate,)k(the)c(Do)s(cumen)m(t's)g(Co)m(v)m (er)330 1351 y(T)-8 b(exts)27 b(ma)m(y)g(b)s(e)f(placed)h(on)g(co)m(v)m (ers)h(that)f(brac)m(k)m(et)h(the)f(Do)s(cumen)m(t)g(within)f(the)h (aggregate,)j(or)d(the)330 1461 y(electronic)37 b(equiv)-5 b(alen)m(t)36 b(of)g(co)m(v)m(ers)g(if)f(the)g(Do)s(cumen)m(t)h(is)f (in)g(electronic)i(form.)54 b(Otherwise)35 b(they)330 1570 y(m)m(ust)30 b(app)s(ear)g(on)g(prin)m(ted)g(co)m(v)m(ers)i(that)f (brac)m(k)m(et)h(the)f(whole)f(aggregate.)199 1713 y(8.)61 b(TRANSLA)-8 b(TION)330 1855 y(T)g(ranslation)41 b(is)f(considered)f(a) i(kind)e(of)h(mo)s(di\014cation,)j(so)d(y)m(ou)g(ma)m(y)h(distribute)e (translations)330 1965 y(of)45 b(the)f(Do)s(cumen)m(t)h(under)e(the)h (terms)h(of)f(section)i(4.)83 b(Replacing)45 b(In)m(v)-5 b(arian)m(t)45 b(Sections)g(with)330 2074 y(translations)h(requires)f (sp)s(ecial)h(p)s(ermission)f(from)g(their)g(cop)m(yrigh)m(t)i (holders,)i(but)c(y)m(ou)g(ma)m(y)330 2184 y(include)24 b(translations)i(of)e(some)h(or)g(all)g(In)m(v)-5 b(arian)m(t)25 b(Sections)g(in)f(addition)h(to)g(the)g(original)h(v)m(ersions)330 2293 y(of)32 b(these)f(In)m(v)-5 b(arian)m(t)33 b(Sections.)44 b(Y)-8 b(ou)32 b(ma)m(y)g(include)f(a)h(translation)g(of)g(this)f (License,)i(and)d(all)j(the)330 2403 y(license)42 b(notices)g(in)f(the) h(Do)s(cumen)m(t,)j(and)40 b(an)m(y)i(W)-8 b(arran)m(t)m(y)42 b(Disclaimers,)k(pro)m(vided)41 b(that)h(y)m(ou)330 2513 y(also)f(include)f(the)g(original)h(English)f(v)m(ersion)g(of)g(this)g (License)h(and)e(the)h(original)h(v)m(ersions)g(of)330 2622 y(those)35 b(notices)g(and)e(disclaimers.)53 b(In)33 b(case)i(of)g(a)f(disagreemen)m(t)h(b)s(et)m(w)m(een)g(the)f (translation)i(and)330 2732 y(the)f(original)i(v)m(ersion)e(of)h(this)f (License)h(or)f(a)g(notice)i(or)e(disclaimer,)i(the)f(original)g(v)m (ersion)g(will)330 2841 y(prev)-5 b(ail.)330 2984 y(If)28 b(a)h(section)h(in)e(the)h(Do)s(cumen)m(t)h(is)e(En)m(titled)i(\\Ac)m (kno)m(wledgemen)m(ts",)i(\\Dedications",)g(or)d(\\His-)330 3093 y(tory",)f(the)f(requiremen)m(t)f(\(section)i(4\))f(to)g(Preserv)m (e)g(its)f(Title)i(\(section)f(1\))g(will)g(t)m(ypically)h(require)330 3203 y(c)m(hanging)j(the)g(actual)h(title.)199 3345 y(9.)61 b(TERMINA)-8 b(TION)330 3488 y(Y)g(ou)30 b(ma)m(y)h(not)f(cop)m(y)-8 b(,)31 b(mo)s(dify)-8 b(,)30 b(sublicense,)g(or)g(distribute)f(the)h (Do)s(cumen)m(t)g(except)h(as)f(expressly)330 3598 y(pro)m(vided)38 b(under)f(this)i(License.)65 b(An)m(y)39 b(attempt)h(otherwise)f(to)g (cop)m(y)-8 b(,)42 b(mo)s(dify)-8 b(,)40 b(sublicense,)h(or)330 3707 y(distribute)30 b(it)h(is)f(v)m(oid,)h(and)f(will)h(automatically) i(terminate)f(y)m(our)e(righ)m(ts)h(under)e(this)h(License.)330 3850 y(Ho)m(w)m(ev)m(er,)35 b(if)e(y)m(ou)f(cease)i(all)f(violation)i (of)d(this)g(License,)i(then)e(y)m(our)h(license)g(from)f(a)h (particular)330 3959 y(cop)m(yrigh)m(t)k(holder)e(is)h(reinstated)h (\(a\))f(pro)m(visionally)-8 b(,)39 b(unless)c(and)g(un)m(til)h(the)g (cop)m(yrigh)m(t)h(holder)330 4069 y(explicitly)42 b(and)e(\014nally)h (terminates)g(y)m(our)g(license,)j(and)c(\(b\))h(p)s(ermanen)m(tly)-8 b(,)43 b(if)e(the)g(cop)m(yrigh)m(t)330 4178 y(holder)34 b(fails)h(to)g(notify)g(y)m(ou)g(of)f(the)h(violation)h(b)m(y)e(some)h (reasonable)g(means)g(prior)e(to)i(60)h(da)m(ys)330 4288 y(after)31 b(the)f(cessation.)330 4430 y(Moreo)m(v)m(er,)k(y)m(our)d (license)i(from)e(a)h(particular)f(cop)m(yrigh)m(t)i(holder)e(is)h (reinstated)g(p)s(ermanen)m(tly)f(if)330 4540 y(the)d(cop)m(yrigh)m(t)h (holder)f(noti\014es)g(y)m(ou)g(of)g(the)g(violation)h(b)m(y)f(some)g (reasonable)h(means,)f(this)g(is)g(the)330 4650 y(\014rst)f(time)i(y)m (ou)f(ha)m(v)m(e)h(receiv)m(ed)g(notice)g(of)f(violation)i(of)e(this)f (License)i(\(for)f(an)m(y)g(w)m(ork\))g(from)f(that)330 4759 y(cop)m(yrigh)m(t)33 b(holder,)g(and)e(y)m(ou)h(cure)g(the)g (violation)i(prior)d(to)i(30)f(da)m(ys)h(after)f(y)m(our)g(receipt)h (of)f(the)330 4869 y(notice.)330 5011 y(T)-8 b(ermination)28 b(of)g(y)m(our)f(righ)m(ts)h(under)e(this)i(section)g(do)s(es)f(not)h (terminate)h(the)e(licenses)i(of)f(parties)330 5121 y(who)38 b(ha)m(v)m(e)h(receiv)m(ed)h(copies)e(or)h(righ)m(ts)f(from)g(y)m(ou)g (under)f(this)h(License.)64 b(If)38 b(y)m(our)g(righ)m(ts)h(ha)m(v)m(e) 330 5230 y(b)s(een)25 b(terminated)i(and)e(not)h(p)s(ermanen)m(tly)g (reinstated,)i(receipt)f(of)f(a)g(cop)m(y)h(of)f(some)h(or)f(all)h(of)f (the)330 5340 y(same)31 b(material)h(do)s(es)e(not)g(giv)m(e)i(y)m(ou)f (an)m(y)g(righ)m(ts)f(to)i(use)e(it.)p eop end %%Page: 30 33 TeXDict begin 30 32 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(30)154 299 y(10.)61 b(FUTURE)30 b(REVISIONS)f(OF)i(THIS)e(LICENSE)330 433 y(The)41 b(F)-8 b(ree)43 b(Soft)m(w)m(are)f(F)-8 b(oundation)43 b(ma)m(y)f(publish)e(new,)k(revised)d(v)m(ersions)h(of)g (the)g(GNU)g(F)-8 b(ree)330 543 y(Do)s(cumen)m(tation)34 b(License)e(from)g(time)h(to)g(time.)46 b(Suc)m(h)31 b(new)h(v)m(ersions)g(will)h(b)s(e)e(similar)h(in)g(spirit)330 653 y(to)j(the)g(presen)m(t)f(v)m(ersion,)i(but)e(ma)m(y)h(di\013er)f (in)g(detail)h(to)g(address)f(new)g(problems)f(or)i(concerns.)330 762 y(See)c Fn(http://www.gnu.org/copy)o(left)o(/)p Fo(.)330 897 y(Eac)m(h)f(v)m(ersion)g(of)g(the)f(License)h(is)g(giv)m(en)g(a)g (distinguishing)f(v)m(ersion)h(n)m(um)m(b)s(er.)39 b(If)29 b(the)g(Do)s(cumen)m(t)330 1006 y(sp)s(eci\014es)45 b(that)h(a)g (particular)f(n)m(um)m(b)s(ered)f(v)m(ersion)i(of)f(this)g(License)h (\\or)g(an)m(y)g(later)g(v)m(ersion")330 1116 y(applies)33 b(to)g(it,)h(y)m(ou)e(ha)m(v)m(e)i(the)f(option)g(of)f(follo)m(wing)i (the)f(terms)f(and)g(conditions)h(either)g(of)f(that)330 1225 y(sp)s(eci\014ed)37 b(v)m(ersion)i(or)e(of)h(an)m(y)h(later)g(v)m (ersion)f(that)g(has)g(b)s(een)f(published)f(\(not)j(as)f(a)g(draft\))g (b)m(y)330 1335 y(the)33 b(F)-8 b(ree)34 b(Soft)m(w)m(are)f(F)-8 b(oundation.)49 b(If)32 b(the)h(Do)s(cumen)m(t)g(do)s(es)g(not)g(sp)s (ecify)f(a)h(v)m(ersion)g(n)m(um)m(b)s(er)f(of)330 1445 y(this)i(License,)j(y)m(ou)d(ma)m(y)i(c)m(ho)s(ose)f(an)m(y)g(v)m (ersion)g(ev)m(er)g(published)e(\(not)i(as)g(a)f(draft\))h(b)m(y)f(the) h(F)-8 b(ree)330 1554 y(Soft)m(w)m(are)33 b(F)-8 b(oundation.)46 b(If)32 b(the)g(Do)s(cumen)m(t)g(sp)s(eci\014es)g(that)g(a)h(pro)m(xy)f (can)g(decide)g(whic)m(h)g(future)330 1664 y(v)m(ersions)h(of)g(this)f (License)h(can)g(b)s(e)f(used,)g(that)i(pro)m(xy's)e(public)g(statemen) m(t)i(of)f(acceptance)i(of)e(a)330 1773 y(v)m(ersion)e(p)s(ermanen)m (tly)f(authorizes)h(y)m(ou)g(to)g(c)m(ho)s(ose)g(that)g(v)m(ersion)g (for)f(the)h(Do)s(cumen)m(t.)154 1908 y(11.)61 b(RELICENSING)330 2042 y(\\Massiv)m(e)39 b(Multiauthor)f(Collab)s(oration)g(Site")h(\(or) e(\\MMC)h(Site"\))h(means)e(an)m(y)h(W)-8 b(orld)37 b(Wide)330 2152 y(W)-8 b(eb)36 b(serv)m(er)g(that)h(publishes)d(cop)m(yrigh)m (table)k(w)m(orks)e(and)f(also)i(pro)m(vides)e(prominen)m(t)h (facilities)330 2262 y(for)27 b(an)m(yb)s(o)s(dy)g(to)h(edit)g(those)g (w)m(orks.)39 b(A)28 b(public)f(wiki)h(that)g(an)m(yb)s(o)s(dy)e(can)i (edit)g(is)f(an)h(example)g(of)330 2371 y(suc)m(h)33 b(a)h(serv)m(er.)51 b(A)34 b(\\Massiv)m(e)i(Multiauthor)e(Collab)s (oration")h(\(or)f(\\MMC"\))h(con)m(tained)g(in)f(the)330 2481 y(site)d(means)f(an)m(y)h(set)g(of)g(cop)m(yrigh)m(table)h(w)m (orks)e(th)m(us)g(published)f(on)h(the)h(MMC)f(site.)330 2615 y(\\CC-BY-SA")36 b(means)f(the)g(Creativ)m(e)i(Commons)e(A)m (ttribution-Share)g(Alik)m(e)i(3.0)f(license)g(pub-)330 2725 y(lished)27 b(b)m(y)f(Creativ)m(e)j(Commons)d(Corp)s(oration,)h(a) g(not-for-pro\014t)g(corp)s(oration)h(with)e(a)h(principal)330 2834 y(place)g(of)f(business)e(in)i(San)f(F)-8 b(rancisco,)29 b(California,)f(as)e(w)m(ell)h(as)f(future)f(cop)m(yleft)i(v)m(ersions) f(of)g(that)330 2944 y(license)31 b(published)e(b)m(y)h(that)h(same)g (organization.)330 3078 y(\\Incorp)s(orate")h(means)e(to)h(publish)e (or)i(republish)e(a)i(Do)s(cumen)m(t,)g(in)g(whole)g(or)f(in)g(part,)h (as)g(part)330 3188 y(of)g(another)f(Do)s(cumen)m(t.)330 3323 y(An)c(MMC)g(is)h(\\eligible)h(for)e(relicensing")h(if)g(it)f(is)h (licensed)f(under)f(this)h(License,)i(and)e(if)g(all)h(w)m(orks)330 3432 y(that)43 b(w)m(ere)f(\014rst)f(published)f(under)h(this)h (License)g(somewhere)g(other)g(than)g(this)g(MMC,)h(and)330 3542 y(subsequen)m(tly)34 b(incorp)s(orated)h(in)f(whole)h(or)g(in)f (part)h(in)m(to)h(the)f(MMC,)g(\(1\))h(had)e(no)h(co)m(v)m(er)h(texts) 330 3651 y(or)30 b(in)m(v)-5 b(arian)m(t)32 b(sections,)g(and)d(\(2\))j (w)m(ere)f(th)m(us)f(incorp)s(orated)g(prior)g(to)h(No)m(v)m(em)m(b)s (er)g(1,)g(2008.)330 3786 y(The)40 b(op)s(erator)h(of)g(an)f(MMC)h (Site)g(ma)m(y)g(republish)e(an)h(MMC)h(con)m(tained)h(in)e(the)h(site) g(under)330 3895 y(CC-BY-SA)30 b(on)g(the)h(same)f(site)h(at)g(an)m(y)g (time)g(b)s(efore)e(August)h(1,)h(2009,)h(pro)m(vided)e(the)g(MMC)h(is) 330 4005 y(eligible)h(for)e(relicensing.)p eop end %%Page: 31 34 TeXDict begin 31 33 bop 150 -116 a Fo(App)s(endix)29 b(A:)h(GNU)h(F)-8 b(ree)32 b(Do)s(cumen)m(tation)g(License)1603 b(31)150 299 y Fm(ADDENDUM:)45 b(Ho)l(w)h(to)f(use)g(this)h(License)f (for)g(y)l(our)g(do)t(cumen)l(ts)150 458 y Fo(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m(t)g(y)m(ou)f(ha)m(v)m(e) i(written,)g(include)f(a)f(cop)m(y)i(of)f(the)f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g(follo)m(wing)i(cop)m(yrigh) m(t)g(and)e(license)h(notices)g(just)f(after)h(the)g(title)h(page:)468 680 y Fb(Copyright)42 b(\(C\))79 b Fa(year)g(your)40 b(name)p Fb(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h (distribute)g(and/or)g(modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g(GNU)g(Free)g(Documentation)i (License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h (published)h(by)d(the)h(Free)g(Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f(no)f(Front-Cover)h(Texts,)g (and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f (license)i(is)f(included)h(in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation)h(License''.)275 1337 y Fo(If)d(y)m(ou)h (ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k (T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")41 b(line)31 b(with)f(this:)547 1559 y Fb(with)40 b(the)g(Invariant)h(Sections)g(being)g Fa(list)f(their)g(titles)p Fb(,)h(with)547 1646 y(the)f(Front-Cover)i (Texts)e(being)g Fa(list)p Fb(,)h(and)f(with)g(the)g(Back-Cover)h (Texts)547 1733 y(being)f Fa(list)p Fb(.)275 1868 y Fo(If)34 b(y)m(ou)i(ha)m(v)m(e)g(In)m(v)-5 b(arian)m(t)36 b(Sections)g(without)f (Co)m(v)m(er)h(T)-8 b(exts,)38 b(or)d(some)g(other)h(com)m(bination)g (of)g(the)150 1978 y(three,)31 b(merge)g(those)g(t)m(w)m(o)g (alternativ)m(es)i(to)e(suit)f(the)h(situation.)275 2112 y(If)23 b(y)m(our)h(do)s(cumen)m(t)f(con)m(tains)i(non)m(trivial)g (examples)g(of)f(program)f(co)s(de,)j(w)m(e)e(recommend)g(releasing)150 2222 y(these)44 b(examples)f(in)g(parallel)h(under)e(y)m(our)h(c)m (hoice)i(of)e(free)g(soft)m(w)m(are)h(license,)k(suc)m(h)43 b(as)g(the)g(GNU)150 2331 y(General)31 b(Public)f(License,)i(to)f(p)s (ermit)e(their)i(use)f(in)g(free)g(soft)m(w)m(are.)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF readline-7.0/doc/readline.dvi000664 000436 000024 00001135654 12764101644 016306 0ustar00chetstaff000000 000000 ; TeX output 2016.09.07:171633GKNj cmbx12KGNUqReadlineLibraryG 0 π6K`y 3 cmr10Editionf7.0,for7 b> 3 cmmi10:ۍ:::::::::::::::::::::::::::::::::::71 33!G1.2 5ReadlinefIn!teractionRd:ۍ:::::::::::::::::::::::::::::::::::::::::::ԫ10G1.2.1 5ReadlinefBareEssen!tials.:ۍ::::::::::::::::::::::::::::::::::10G1.2.2 5ReadlinefMo!vementCommandsB":ۍ:::::::::::::::::::::::::::i20G1.2.3 5ReadlinefKillingCommands1:ۍ:::::::::::::::::::::::::::::::20G1.2.4 5ReadlinefArgumen!ts:ۍ::::::::::::::::::::::::::::::::::::::5c30G1.2.5 5Searc!hingfforCommandsintheHistoryi:ۍ:::::::::::::::::::K3!G1.3 5ReadlinefInitFile:ۍ::::::::::::::::::::::::::::::::::::::::::::::)a40G1.3.1 5ReadlinefInitFileSyn!tax :ۍ:::::::::::::::::::::::::::::::::]40G1.3.2 5ConditionalfInitConstructs:ۍ::::::::::::::::::::::::::::::~X120G1.3.3 5SamplefInitFile΍:ۍ:::::::::::::::::::::::::::::::::::::::::A12!G1.4 5BindablefReadlineCommands:ۍ::::::::::::::::::::::::::::::::2 160G1.4.1 5CommandsfFeorMo!ving>H:ۍ::::::::::::::::::::::::::::::::::160G1.4.2 5CommandsfFeorManipulatingTheHistoryi:ۍ:::::::::::::::9160G1.4.3 5CommandsfFeorChangingText{:ۍ:::::::::::::::::::::::::::180G1.4.4 5KillingfAndYeankingǍ:ۍ:::::::::::::::::::::::::::::::::::::190G1.4.5 5SpMecifyingfNumericArgumen!ts^V:ۍ::::::::::::::::::::::::::200G1.4.6 5LettingfReadlineT!ypMeFeorYouҍ:ۍ::::::::::::::::::::::::::=210G1.4.7 5KeybMoardfMacrosdI:ۍ::::::::::::::::::::::::::::::::::::::::210G1.4.8 5SomefMiscellaneousCommands&:ۍ::::::::::::::::::::::::::zn22!G1.5 5ReadlinefviMoMdeE:ۍ::::::::::::::::::::::::::::::::::::::::::::: 2333G]232ProgrammingffwithGNUReadline׍32e:Q 32:32:32:32:32:32:32:32:32:32: O]24!G2.1 5BasicfBeha!vior䍑:ۍ:::::::::::::::::::::::::::::::::::::::::::::::U,24!G2.2 5CustomfFeunctionsF:ۍ::::::::::::::::::::::::::::::::::::::::::::250G2.2.1 5ReadlinefT!ypMedefsF:ۍ:::::::::::::::::::::::::::::::::::::::260G2.2.2 5WeritingfaNewFunction̍:ۍ:::::::::::::::::::::::::::::::::d26!G2.3 5ReadlinefVeariablesa:ۍ::::::::::::::::::::::::::::::::::::::::::::J27!G2.4 5ReadlinefCon!venienceFeunctions:ۍ::::::::::::::::::::::::::::::2320G2.4.1 5NamingfaFeunctionڍ:ۍ::::::::::::::::::::::::::::::::::::::"320G2.4.2 5SelectingfaKeymap%:ۍ::::::::::::::::::::::::::::::::::::::C320G2.4.3 5BindingfKeysn:ۍ::::::::::::::::::::::::::::::::::::::::::::O330G2.4.4 5AssoMciatingfFeunctionNamesandBindings'Í:ۍ::::::::::::::: 350G2.4.5 5Allo!wingfUndoingG:ۍ:::::::::::::::::::::::::::::::::::::::W360G2.4.6 5Redispla!y1:ۍ::::::::::::::::::::::::::::::::::::::::::::::::370G2.4.7 5MoMdifyingfTeext謍:ۍ::::::::::::::::::::::::::::::::::::::::::j380G2.4.8 5CharacterfInput:ۍ:::::::::::::::::::::::::::::::::::::::::%380G2.4.9 5TeerminalfManagemen!t :ۍ:::::::::::::::::::::::::::::::::::390G2.4.10 5Utilit!yfFeunctions:ۍ:::::::::::::::::::::::::::::::::::::::`7400G2.4.11 5MiscellaneousfFeunctionsR:ۍ::::::::::::::::::::::::::::::::P410G2.4.12 5AlternatefIn!terfaceT:ۍ:::::::::::::::::::::::::::::::::::::420G2.4.13 5AfReadlineExamples׍:ۍ::::::::::::::::::::::::::::::::::::43ii33͍0G2.4.14 5AlternatefIn!terfaceExampleB#:ۍ::::::::::::::::::::::::::::j44 33!G2.5 5ReadlinefSignalHandling/O:ۍ:::::::::::::::::::::::::::::::::::::46!G2.6 5CustomfCompleters?:ۍ::::::::::::::::::::::::::::::::::::::::::'490G2.6.1 5Ho!wfCompletingWeorksh&:ۍ::::::::::::::::::::::::::::::::::n490G2.6.2 5CompletionfFeunctionsR:ۍ:::::::::::::::::::::::::::::::::::500G2.6.3 5CompletionfVeariables*ԍ:ۍ::::::::::::::::::::::::::::::::::::510G2.6.4 5AfShortCompletionExample::ۍ::::::::::::::::::::::::::::S5633G]Apps3endixffAwLGNUFfreeDos3cumentationLicenseȓ32e:Q 32: @]65!GConceptffIndex#C32e:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32: ]73GFfunctionffandVariableIndex;32e:Q 32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32:32: 1]74>6e133͍GT1 QCommandzLineEditingnGThisfc!hapterdescribMesthebasicfeaturesofthe<- 3 cmcsc10gnucommandlineeditinginterface.䍍G]1.1Intros3ductionf@toLineEditing33GTheffollo!wingparagraphsdescribMethenotationusedtorepresentkeystrokes.!GTheYtextY=set5?to`on'(thedefault),XReadlineattemptstobindthecon!trol-c!haracters{wtreated{vspMeciallybythe{vkernel'sterminaldriver{vtotheir-ReadlinefequivdDalen!ts.K:blink-matching-paren-IfYsetYto`on',Readlineattemptstobrie ymo!vetheYcursortoan-opMeningparen!thesiswhenaclosingparenthesisisinserted.The-defaultfis`off'.K:colored-completion-prefix-Ifsetto`on',Wwhenlistingcompletions,Readlinedispla!ysthecom--mon pre x ofthesetofpMossiblecompletionsusingadi eren!tcolor.-The colorde nitionsaretak!enfromthevdDalueoftheLS_COLORS-en!vironmentfvdDariable.Thedefaultis`off'.K:colored-stats-If0*set0+to`on',GReadlinedispla!yspMossiblecompletionsusingdi eren!t-colorstoindicatetheir let!ypMe.iThecolorde nitionsaretak!en-from;theKik!eysequencebystrippingtheeighthbitandpre xing-anESCc!haracter,convertingthemtoameta-pre xedk!eysequence.-TheNdefaultNvdDalueis`on',`FbutwillbMesetto`off'iftheloMcaleisone-thatfcon!tainseight-bitcharacters.fgK:disable-completion-Ifgsettog`On',?Readlinewillginhibitw!ordcompletion.Completion-c!haracters!willbMe!insertedintothelineasif!theyhadbMeenmapped-tofself-insert.Thedefaultis`off'.K:echo-control-characters-Whensetto`on',onopMeratingsystemsthatindicatetheysuppMort-it,readlineec!hoMesacharactercorrespMondingtoasignalgenerated-fromfthek!eybMoard.Thedefaultis`on'.fgK:editing-mode-Therediting-modevdDariablecon!trolswhichrdefaultsetofkeybind--ings?is>used.&Bydefault,#ReadlinestartsupinEmacseditingmoMde,-where~the~k!eystrokesare~mostsimilartoEmacs.ПThisvdDariablecan-bMefsettoeither`emacs'or`vi'.K:emacs-mode-string-This#stringis"displa!yed#immediatelybMeforethelastlineofthepri--mary6\prompt6[whenemacseditingmoMdeisactiv!e. ThevdDalueis-expandedolik!eaokeybinding,zsothestandardsetofometa-andcon--trol?pre xes?andbac!kslashescapMesequencesisa!vdDailable._Usethe-`\1'and`\2'escapMestobMeginandendsequencesofnon-prin!ting-c!haracters,whichXcanYbMeusedtoem!bedaXterminalcon!trolsequence-in!tofthemoMdestring.Thedefaultis`@'.fgK:enable-bracketed-paste-Whensetto`On',{Readlinewillcon guretheterminalinaw!aythat-willg"enableittoinserteac!hpasteg#intotheeditingbu erasasingle-stringofc!haracters,>insteadoftreatingeachcharacterasifithad-bMeenreadfromthek!eyboard.Thiscanprev!entpastedcharacters-fromfbMeingin!terpretedaseditingcommands.Thedefaultis`off'.]GChapterf1:CommandLineEditingMH733͍K:enable-keypad 33-Whensetto`on',mReadlinewilltrytoenabletheapplicationk!eypad-when1it1iscalled.Somesystemsneedthistoenablethearro!wkeys.-Thefdefaultis`off'.-K:enable-meta-key-WhenJsetIto`on',Readlinewilltrytoenablean!ymetamoMdi er-k!eytheterminalclaimstosuppMortwhenitiscalled.Onman!y-terminals,^=the9ymetak!eyisusedtosendeight-bitcharacters.The-defaultfis`on'.K:expand-tilde-IfPsettoP`on',a[tildeexpansionispMerformedwhenReadlineattempts-w!ordfcompletion.Thedefaultis`off'.K:history-preserve-point-Ifsetto`on',ZthehistorycoMdeattemptstoplacethepMoin!t(the-curren!t;kcursor;jpMosition)atthesameloMcationoneac!hhistoryline-retriev!ed^withprevious-historyor^next-history.Thedefault-isf`off'.,K:history-size-Setthemaxim!umnumbMerofhistoryen!triessavedinthehistory-list.Ifmsettozero,(oan!yexistinghistoryentriesarendeletedandno-newqen!triesarepsaved.XIfsetqtoavdDalueplessthanzero,ٳthenumbMer-ofhistoryen!triesisnotlimited.Bydefault,then!umbMerofhistory-en!triesbisnotalimited.Ifanattemptismadetosethistory-sizeito-anon-n!umericvdDalue,VthemaximumnumbMerofhistoryentrieswill-bMefsetto500.K:horizontal-scroll-mode-ThisNvdDariableNcanbMesettoeither`on'or`off'. Settingitto`on'-means$jthatthetextofthe$ilinesbMeingeditedwillscrollhorizon!tally-onasinglescreenlinewhentheyarelongerthanthewidthofthe-screen,:insteadofwrappingon!toanewscreenline.Bydefault,this-vdDariablefissetto`off'.K:input-meta-Ifsetto`on',Readlinewillenableeigh!t-bitinput(itwillnotclear-the"eigh!thbitin!thecharactersitreads), Pregardlessofwhatthe-terminalC-claimsitcansuppMort. 3ThedefaultvdDalueis`off',^but-Readlineۂwillsetitto`on'ہiftheloMcalecon!tainseight-bitcharacters.-Thefnamemeta-flagisasynon!ymforthisvdDariable.K:isearch-terminators-The5string5ofc!haractersthatshouldterminateanincremen!tal-searc!h|withoutsubsequentlyexecutingthecharacterasacommand-(seeZSection1.2.5[Searc!hing],page3). IfthisvdDariablehasnot-bMeenBggiv!enavdDalue,igthecharactersBfESCandC-Jwillterminatean-incremen!talfsearch.$GChapterf1:CommandLineEditingMH833͍K:keymapRSets5Readline's6ideaofthecurren!tkeymap6forkey6bindingcom- 33-mands. AcceptableSPkeymapSOnamesareemacs,emacs-standard,-emacs-meta, 0emacs-ctlx,vi, 0vi-move,vi-command,and-vi-insert. 2viaisequivdDalen!ttovi-command(vi-moveaisalsoa-synon!ym);-emacsisequivdDalenttoemacs-standard.lThedefault-vdDalue/isemacs. wThevalueoftheediting-modevariablealso-a ectsfthedefaultk!eymap.oK:keyseq-timeout-SpMeci es thedurationReadlinewillw!ait foracharacterwhenread--inganam!biguouskeysequence(onethatcanformacompletek!ey-sequence-using.theinputreadsofar,orcantak!eadditionalinput-toKcompletealongerk!eysequence).ČIfnoinputisreceivedwithin-the*timeout,Readline*willusetheshorterbutcompletek!eyse--quence.ReadlineusesthisvdDaluetodeterminewhetherornotinput-isa!vdDailableonthecurren!tinputsource(rl_instreamb!ydefault).-The vdDalueisspMeci edinmilliseconds,(soavalueof1000meansthat-Readlinewillw!aitonesecondforadditionalinput.RIfthisvdDariableis-setYtoYavdDaluelessthanorequaltozero,i.ortoanon-n!umericvdDalue,-Readlinewillw!aituntilanotherkeyispressedtodecidewhic!hkey-sequenceftocomplete.ThedefaultvdDalueis500.nK:mark-directories-Ifsetto`on',completeddirectorynamesha!veaslashappMended.-Thefdefaultis`on'.K:mark-modified-lines-ThisNvdDariable,xwhensetto`on',xcausesReadlinetodispla!yanas--terisk (`*') atthestartofhistorylineswhic!hhave bMeenmodi ed.-ThisfvdDariableis`off'b!ydefault.K:mark-symlinked-directories-If$set$to`on',mcompletednameswhic!haresym!bMoliclinksto-directories\ha!veaslashappMended\(subjecttothevdDalueof-mark-directories).Thefdefaultis`off'.K:match-hidden-files-ThissvdDariable,ݣwhensetto`on',causesReadlinetormatc!h leswhose-namesMbMeginwitha`.'(hidden les)whenperforming lename-completion.Ifsetto`off',Jtheleading`.'m!ustbMesuppliedby-theLuserMinthe lenametobMecompleted.9ThisvdDariableis`on'b!y-default.nK:menu-complete-display-prefix-Ifsetto`on',men!ucompletiondisplaysthecommonpre xofthe-listXofYpMossiblecompletions(whic!hmayYbMeempty)YbMeforecycling-throughfthelist.Thedefaultis`off'.K:output-meta-IfAsetto`on',gReadlinewilldispla!ycharacterswiththeeighthbit-set`!directlyratherthanasa`"meta-pre xedescapMesequence. The 4GChapterf1:CommandLineEditingMH933͍-defaultkis`off',0butReadlinewillsetittoj`on'iftheloMcalecon!tains 33-eigh!t-bitfcharacters.덑K:page-completions-Ifsetto`on',,Readlineusesanin!ternalmore-likepagertodisplay-ascreenfulofpMossiblecompletionsatatime.ThisvdDariableis`on'-b!yfdefault.K:print-completions-horizontally-Ifsetto`on',Readlinewilldispla!ycompletionswithmatc!hessorted-horizon!tally8inalphabMeticalorder,oratherthandownthescreen.-Thefdefaultis`off'.K:revert-all-at-newline-Ifsetto`on',Readlinewillundoallc!hangestohistorylinesbMefore-returningqXwhenqYaccept-lineisexecuted.-Bydefault,{historylines-ma!ybMemodi edandretainindividualundolistsacrosscallsto-readline.Thefdefaultis`off'.K:show-all-if-ambiguous-This]altersthedefaultbMeha!viorofthe\completionfunctions.مIfset-toL`on',^.w!ordswhichL havemorethanL onepMossiblecompletioncause-thematc!hestobMelistedimmediatelyinsteadofringingthebell.-ThefdefaultvdDalueis`off'.K:show-all-if-unmodified-ThisaltersthedefaultbMeha!viorofthecompletionfunctionsina-fashionsimilartosho!w-all-if-ambiguous.Ifsetto`on',-w!ordswhich-ha!vemorethanonepMossiblecompletionwithoutan!ypossiblepar--tialcompletion(thepMossiblecompletionsdon'tshareacommon-pre x)causethematc!hestobMelistedimmediatelyinsteadofring--ingfthebMell.ThedefaultvdDalueis`off'.K:show-mode-in-prompt-Ifsetto`on',Vaddac!haractertothebMeginningofthepromptindi--catingtheeditingmoMde: "emacs,vicommand,orviinsertion. DThe-moMdefstringsareuser-settable.ThedefaultvdDalueis`off'.K:skip-completed-text-Ifjsetto`on',+thisialtersthedefaultcompletionbMeha!viorwhenin--serting}=a}output"-In \the \abMo!veexample, JSC-uisbMoundto \thefunction-universal-argument,|M-DEL &is %bMoundtothefunction-backward-kill-word, andiLC-oiKisbMoundtorunthemacro-expressed~Jonthe~Irigh!thandside(thatis,Btoinsertthetext`>-output'fin!totheline).-Anbn!umbMero[ofsym!bolicc!haracternamesarerecognizedwhile-proMcessing3thisk!eybindingsyntax:%wDEL,&ESC,ESCAPE,LFD,-NEWLINE,fRET,RETURN,R!UBOUT,SPeACE,SPC,andTeAB. yGChapterf1:CommandLineEditingӮ1133͍K:"k!eyseq@":function-nameCmorfmacro 33-k!eyseqdi ersfromkeynameVabMoveinthatstringsdenotinganen--tire hk!eysequencecanbMe gspeci ed,%by gplacing hthekeysequencein-doublequotes.bSomegnuEmacsst!ylekeyescapMescanbeused,as-inthefollo!wingexample,(butthespMecialc!haracternamesarenot-recognized.+"\C-u":universal-argument"\C-x\C-r":re-read-init-file"\e[11~":"FunctionKey1"-IntheabMo!veexample,C-uisagainboundtothefunction-universal-argument?(justasitw!asinthe rst?example),=`C-x-C-r'isbMoundtothefunctionre-read-init-file,&and`ESCf[11-~'fisbMoundtoinsertthetext`FunctionKey1'.#׍K:Thefollo!winggnuEmacsstyleescapMesequencesareavdDailablewhenspMecifyingK:k!eyfsequences:#؍K:\C-(con!trolfpre xK:\M-(metafpre xK:\e.QanfescapMec!haracterK:\\.Qbac!kslashK:\".Q",fadoublequotationmarkK:\'.Q',fasinglequoteorapMostropheK:InQadditiontoQthegnuEmacsst!yleescapMesequences,b)asecondsetofbac!kslash 33K:escapMesfisa!vdDailable:K:\a.Qalertf(bMell)K:\b.Qbac!kspaceK:\d.QdeleteK:\f.QformffeedK:\n.QnewlineK:\r.QcarriagefreturnK:\t.Qhorizon!talftabK:\v.Qv!erticalftabK:\nnn"Kthe$eigh!t-bitcharacter$whosevdDalueistheoMctalvalue$nnn(oneto 33-threefdigits)K:\xHH"Ktheeigh!t-bitcharacterwhosevdDalueisthehexadecimalvdDalueHH-(onefort!wofhexdigits)K:When}en!teringthetextofamacro,singleordoublequotesmustbMeusedtoK:indicateamacrode nition.?UnquotedtextisassumedtobMeafunctionname.?InK:themacrobModye,~thebac!kslashescapesdescribedabo!veareexpanded.Backslash ӎGChapterf1:CommandLineEditingӮ1233͍K:willquotean!yothercharacterinthemacrotext,including`"'and`''.RFeor 33K:example,4 thefollo!wingbindingwillmake`C-xf\'insertasingle`\'in!totheline:Zčhʏ"\C-x\\":"\\"O!Gg1.3.2d(ConditionalMInitConstructs3GReadlineiimplemen!tsafacilitysimilarinispirittotheconditionalcompilationfeaturesofGtheJCHpreproMcessorKwhic!hallowsKkeybindingsandKvdDariablesettingstobMeperformedKastheGresultfoftests.Therearefourparserdirectiv!esused.TG$if(TheN$ifconstructallo!wsbindingstobMeOmadebasedontheeditingmode,ʈtheK:terminalbMeingused,͘ortheapplicationusingReadline.VThetextofthetestK:extendsftotheendoftheline;noc!haractersarerequiredtoisolateit.K:mode"KThemode=formofthe$ifdirectiv!eisusedtotestwhetherRead--line3isin3emacsorvimoMde. Thisma!ybe3usedinconjunction-with the`setfkeymap'command,for!instance,to setbindingsin-theemacs-standardandemacs-ctlxk!eymapsonlyifReadlineis-startingfoutinemacsmoMde.UK:term"KThe<term=form<ma!ybMeusedtoincludeterminal-spMeci ck!eybind--ings,pMerhapsVtobindVthek!eysequencesoutputb!ytheterminal's-functionހk!eys.;Thewordontherightsideofthe`='istestedagainst-bMothPthefullnameoftheOterminalandtheportionoftheterminal-namebMeforethe rst`-'./Thisallo!wssuntomatc!hbMothsunand-sun-cmd,fforinstance.K:application-Theapplicationconstructisusedtoincludeapplication-spMeci cset--tings.mEac!hprogramusingtheReadlinelibrarysetstheapplication-name,wand)K:Mo!veftotheendoftheinputhistorye,i.e.,thelinecurren!tlybMeingentered.Greverse-search-historyf(C-r)K:Searc!h:backwardstarting;atthecurrentlineandmoving;`up'throughthehis-K:toryfasnecessarye.Thisisanincremen!talsearch.Gforward-search-historyf(C-s)K:Searc!h>Dforwardstartingatthecurrent>Clineandmoving`down'throughtheK:historyfasnecessarye.Thisisanincremen!talsearch.Gnon-incremental-reverse-search-historyf(M-p)K:Searc!h:backwardstarting;atthecurrentlineandmoving;`up'throughthehis-K:toryRyasnecessaryusingRxanon-incremen!talsearchforastringRxsuppliedbytheK:user.Thefsearc!hstringmaymatchanywhereinahistoryline.Gnon-incremental-forward-search-historyf(M-n)K:Searc!h>Dforwardstartingatthecurrent>Clineandmoving`down'throughtheK:history3as3necessaryusinganon-incremen!talsearchfor3astringsuppliedb!ytheK:user.Thefsearc!hstringmaymatchanywhereinahistoryline.Ghistory-search-forwardf()K:Searc!hOforwardthroughPthehistoryforthestringofc!haractersbMetweentheK:startQofQthecurren!tlineandthepMoin!t. ThesearchQstringmustmatchQattheK:bMeginning"ofahistoryline.Thisisanon-incremen!talsearch.Bydefault,thisK:commandfisun!bMound.Ghistory-search-backwardf()K:Searc!h-backward-throughthehistoryforthestringofc!haractersbMetween-theK:startQofQthecurren!tlineandthepMoin!t. ThesearchQstringmustmatchQattheK:bMeginning"ofahistoryline.Thisisanon-incremen!talsearch.Bydefault,thisK:commandfisun!bMound.Ghistory-substr-search-forwardf()K:Searc!hOforwardthroughPthehistoryforthestringofc!haractersbMetweentheK:startuofuthecurren!tlineandthepMoin!t.ͳThesearchstringmayumatchanywhereK:in"ahistoryline.Thisisanon-incremen!talsearch.Bydefault,thiscommandK:isfun!bMound.Ghistory-substr-search-backwardf()K:Searc!h-backward-throughthehistoryforthestringofc!haractersbMetween-theK:startuofuthecurren!tlineandthepMoin!t.ͳThesearchstringmayumatchanywhereK:in"ahistoryline.Thisisanon-incremen!talsearch.Bydefault,thiscommandK:isfun!bMound.Gyank-nth-argf(M-C-y)K:Insertsthes rstargumen!ttothepreviouscommand(usuallythesecondw!ordK:on|the}previousline)atpMoin!t.h!Withanargumen!tn,insertthenthw!ordfromWGChapterf1:CommandLineEditingӮ1833͍K:the0previouscommand(thew!ordsin0thepreviouscommandbMeginwithword 33K:0).-dAnegativ!eargumentinsertsthenthw!ordfromtheendofthepreviousK:command.OnceGtheargumen!tFniscomputed, >theargumentisextractedFasifK:thef`!n'historyexpansionhadbMeenspeci ed.jGyank-last-argf(M-.orM-_)K:Insert5Elast5Fargumen!ttothepreviouscommand(thelastw!ordofthepreviousK:history"en!try).Witha#numericargument, bMehaveexactly#likeyank-nth-arg.K:Successiv!e%calls&toyank-last-argmove&backthrough&thehistorylist,insertingK:thelastw!ord(orthewordspMeci edbytheargumenttothe rstcall)ofeac!hlineK:in`turn. An!ynumeric`argumentsuppliedto`thesesuccessive`callsdeterminesK:the-Idirection-Jtomo!vethrough-Ithehistorye.rA-'negative-Iargumentswitches-ItheK:directionthroughthehistory(bac!korforw!ard). ThehistoryexpansionfacilitiesK:areMusedtoMextractthelastargumen!t,_asifthe`!$'historyexpansionhadbMeenK:spMeci ed.6Gg1.4.3d(CommandsMFģorChangingTextOGend-of-filef(usuallyC-d)K:The%c!haracter%indicatingend-of- leasset,?bforexample,b!y%stty.Ifthisc!harac-K:terisreadwhentherearenoc!haractersontheline,andpMointisatthebMeginningK:offtheline,Readlinein!terpretsitastheendofinputandreturnseof.Gdelete-charf(C-d)K:Deletethec!haracteratpMoint.IfthisfunctionisbMoundtothesamecharacterK:asfthett!yeofcharacter,asC-dcommonlyis,seeabMoveforthee ects.iGbackward-delete-charf(Rubout)K:Deletethec!haracterbMehindthecursor.۝AnumericargumentmeanstokilltheK:c!haractersfinsteadofdeletingthem.Gforward-backward-delete-charf()K:Deletethec!haracterunderthecursor,unlessthecursorisattheendoftheK:line,~inͭwhic!hͬcasethecharacterͬbMehindthecursorisdeleted.SBydefault,~thisK:isfnotbMoundtoak!eye.Gquoted-insertf(C-qorC-v)K:Addthenextc!haractertypMedtothelineverbatim.CThisishowtoinsertkeyK:sequencesflik!eC-q,forexample.Gtab-insertf(M-TAB)K:Insertfatabc!haracter.iGself-insertf(a,b,A,1,!,...e)K:Insertfy!ourself.Gbracketed-paste-beginf()K:This6function7isin!tendedtobMeboundto7the"brac!ketedpaste"escapMe6sequenceK:sen!tbysometerminals,andsuchabindingisassignedb!ydefault.mItallowsK:Readlinetoinsertthepastedtextasasingleunitwithouttreatingeac!hchar-K:acterasifithadbMeenreadfromthek!eybMoard._ThecharactersareinsertedK:aswifxeac!honewasxbMoundtoself-insert)insteadofexecutingan!yeditingK:commands. cGChapterf1:CommandLineEditingӮ1933͍Gtranspose-charsf(C-t) 33K:Dragthec!haracterbMeforethecursorforwardoverthecharacteratthecursor,K:mo!vingC"thecursorC!forwardaswell.IftheinsertionC!pMointisattheC!endoftheK:line,thenthistranspMosesthelastt!wocharactersoftheline.Negativ!eargumentsK:ha!vefnoe ect.mGtranspose-wordsf(M-t)K:Dragthew!ordbMeforepoin!tpastthewordafterpMoint,movingpointpastthatK:w!ordgaswell.IftheinsertionpMointisattheendofthegline,tAthistranspMosestheK:lastft!wowordsontheline.mGupcase-wordf(M-u)K:UppMercasethecurren!t(orfollowing)word.o#Withanegativeargument,uppMer-K:casefthepreviousw!ord,butdonotmovethecursor.Gdowncase-wordf(M-l)K:Lo!wercasethecurrent(orfollowing)word.Withanegativeargument,˖lowercaseK:thefpreviousw!ord,butdonotmovethecursor.mGcapitalize-wordf(M-c)K:Capitalize6the5curren!t(orfollo!wing)word.#With5anegativeargument,rcapitalizeK:thefpreviousw!ord,butdonotmovethecursor.Goverwrite-modef()K:Teoggleo!verwritemoMde. Withanexplicitpositiv!e numericargument, switchesK:too!verwritemoMde.fWithanexplicitnon-pMositiv!enumericargument,ϮswitchestoK:insertmoMde.=Thiscommanda ectsonlyemacsmoMde;vimodedoeso!verwriteK:di eren!tlye.Eachfcalltoreadline()startsininsertmoMde.$K:InIo!verwritemoMde,charactersbMoundtoself-insertIreplacethetextatK:pMoin!tratherthanpushingthetexttotheright.CharactersbMoundtoK:backward-delete-charfreplacethec!haracterbMeforepoin!twithaspace.K:Byfdefault,thiscommandisun!bMound.9ፍGg1.4.4d(KillingMAndYģankingP$Gkill-linef(C-k)K:KillfthetextfrompMoin!ttotheendoftheline.mGbackward-kill-linef(C-xRubout)K:Killfbac!kwardfromthecursortothebMeginningofthecurrentline.mGunix-line-discardf(C-u)K:Killfbac!kwardfromthecursortothebMeginningofthecurrentline.Gkill-whole-linef()K:Killcjallc!haracterscionthecurrentline,nomatterwherepMointis.Bydefault,K:thisfisun!bMound.mGkill-wordf(M-d)K:Kill frompMoin!t totheendofthecurren!tword,Por ifbMetweenwords,QtotheendK:offthenextw!ord.WeordbMoundariesarethesameasforward-word.ȍGChapterf1:CommandLineEditingӮ2033͍Gbackward-kill-wordf(M-DEL) 33K:Killwtheww!ordbMehindpoin!t.XWeordwboundariesarewthesameasbackward-word.=Gunix-word-ruboutf(C-w)K:KillLthew!ordbMehindpoin!t,usingwhitespaceasawordbMoundarye.RThekilledK:textfissa!vedfonthekill-ring.Gunix-filename-ruboutf()K:Kill]thew!ordbMehindpoin!t,usingwhitespaceandtheslashcharacterastheK:w!ordfbMoundaries.Thekilledtextissavedonthekill-ring.=Gdelete-horizontal-spacef()K:DeletefallspacesandtabsaroundpMoin!t.Bydefault,thisisunbMound.Gkill-regionf()K:Killfthetextinthecurren!tregion.Bydefault,thiscommandisunbMound.Gcopy-region-as-killf()K:Cop!ythetextintheregiontothekillbu er,0EsoitcanbMey!ankedrightawaye.K:Byfdefault,thiscommandisun!bMound.Gcopy-backward-wordf()K:Cop!ythewordbMeforepoin!ttothekillbu er.ThewordbMoundariesaretheK:samefasbackward-word.Bydefault,thiscommandisun!bMound.Gcopy-forward-wordf()K:Cop!y8thewordfollowing9pMointtothekillbu er.SThe9wordbMoundariesaretheK:samefasforward-word.Bydefault,thiscommandisun!bMound.Gyankf(C-y)K:Yeankfthetopofthekillringin!tothebu eratpMoint.=Gyank-popf(M-y)K:Rotate'!thekill-ring,GPandy!ankthenewtop.`Yeoucan'"onlydothisifthepriorK:commandfisyankoryank-pop. |Gg1.4.5d(SpiecifyingMNumericArguments8qGdigit-argumentf(M-0,M-1,...M--)K:Add:Lthis:Kdigittotheargumen!talreadyaccumulating,Oorstarta:Knewargument.K:M--fstartsanegativ!eargument.Guniversal-argumentf()K:Thiskisanotherw!ayjtokspMecifyanargumen!t.Ifthiscommandisfollo!wedkbyoneK:ormoredigits,optionallywithaleadingmin!ussign,thosedigitsde nethear-K:gumen!t.If[the\commandisfollowedbydigits,*executinguniversal-argumentK:againѫendsѪthen!umericargument,{butisotherwiseѪignored._AsaspMecialcase,K:ifthiscommandisimmediatelyfollo!wedbyacharacterthatisneitheradigitK:normin!ussign,H{theargumentcountforthenextcommandismultipliedbyK:four.The6argumen!t6countisinitially6one,Zsoexecutingthisfunctionthe rstK:timeomak!esotheargumentocountfour,z&aosecondtimemak!estheargumen!tcountK:sixteen,fandsoon.Bydefault,thisisnotbMoundtoak!eye.%GChapterf1:CommandLineEditingӮ2133͍Gg1.4.6d(LettingMReadlineTypieFģorYou.Gcompletef(TAB) 33K:A!ttempttopMerformcompletiononthetextbMeforepoin!t. TheactualcompletionK:pMerformedfisapplication-speci c.Thedefaultis lenamecompletion.*ƍGpossible-completionsf(M-?)K:List)the)pMossiblecompletionsofthetextbMeforepoin!t.gWhendisplaying)com-K:pletions,fReadlinesetsthen!umbMerofcolumnsusedfordispla!ytothevdDalueofK:completion-display-width,UtheavdDalueoftheen!vironmentavariableCOLUMNS,K:orfthescreenwidth,inthatorder.*ǍGinsert-completionsf(M-*)K:InsertallcompletionsofthetextbMeforepoin!tthatwouldhavebMeengeneratedK:b!yfpossible-completions.Gmenu-completef()K:SimilarVtocomplete,butreplacesthew!ordtoWbMecompletedwithasinglematchK:fromthelistofpMossiblecompletions.^Repeatedexecutionofmenu-completeK:stepsկthroughհthelistofpMossiblecompletions,!insertingeac!hmatchհinturn.K:A!tjtheendofjthelistofcompletions,thebMellisrung(subjecttothesettingK:ofThbell-style)andtheTioriginaltextisrestored.Anargumen!tofnmo!vesThnK:pMositions,Rforw!ard,Qinthelistofmatc!hes;oGanegative,QargumentmaybMe,QusedtoK:mo!vebackwardthroughthelist.VThiscommandisintendedtobMeboundtoK:TAB,fbutisun!bMoundbydefault.*ǍGmenu-complete-backwardf()K:Iden!tical5atomenu-complete,Ybut5`movesbackwardthroughthe5`listofpMossibleK:completions,fasifmenu-completehadbMeengiv!enanegativeargument.Gdelete-char-or-listf()K:Deletesthec!haracterunderthecursorifnotatthebMeginningorendoftheK:line(lik!edelete-char). 4Ifattheendoftheline,bMeha!vesidenticallytoK:possible-completions.Thisfcommandisun!bMoundbydefault.Gg1.4.7d(KeybioardMMacros.Gstart-kbd-macrof(C-x()K:Beginfsa!vingthecharacterstypMedintothecurrentkeybMoardmacro.Gend-kbd-macrof(C-x))K:StopG!sa!vingthecharactersG"typMedintothecurrentkeybMoardmacroG"andsavetheK:de nition.*ǍGcall-last-kbd-macrof(C-xe)K:Re-execute9Bthelast9Ck!eybMoardmacrode ned,]bymakingthe9CcharactersintheK:macrofappMearasift!ypedatthek!eyboard.Gprint-last-kbd-macrof()K:Prin!tfthelastkebMoardmacrode nedinaformatsuitablefortheinputrcPj le.1GChapterf1:CommandLineEditingӮ2233͍Gg1.4.8d(SomeMMiscellaneousCommands(Gre-read-init-filef(C-xC-r) 33K:Readkinthejcon!tentskoftheinputrcJo le,andincorpMoratean!ybindingsorvdDariableK:assignmen!tsffoundthere.Gabortf(C-g)K:AbMort/the/curren!teditingcommandandringtheterminal'sbMell(subjecttotheK:settingfofbell-style).Gdo-uppercase-versionf(M-a,M-b,M-x,...e)K:IfQthemeta edc!haracterxTislowercase,brunthecommandthatisbMoundtotheK:correspMondingfuppercasec!haracter.Gprefix-metaf(ESC)K:Metafy2the1nextc!haractertypMed.q@This2isfork!eybMoardswithoutametak!eye.K:T!ypingf`ESCf'isequivdDalenttotypingM-f.Gundof(C-_orC-xC-u)K:Incremen!talfundo,separatelyremembMeredforeachline.Grevert-linef(M-r)K:Undoallc!hangesmadetothisline.ThisislikeexecutingtheundocommandK:enoughftimestogetbac!ktothebMeginning.Gtilde-expandf(M-~)K:P!erformftildeexpansiononthecurrentword.Gset-markf(C-@)K:SetthemarktothepMoin!t.Ifanumericargumentissupplied,ythemarkissetK:tofthatpMosition.Gexchange-point-and-markf(C-xC-x)K:Sw!apthepMointwiththemark.'"ThecurrentcursorpMositionissettothesavedK:pMosition,fandtheoldcursorpositionissa!vedfasthemark.Gcharacter-searchf(C-])K:A&c!haracterQisRreadandpMointRismovedtoRthenextoMccurrenceofthatc!haracter.K:Afnegativ!ecountsearchesforpreviousoMccurrences.Gcharacter-search-backwardf(M-C-])K:Ac"c!haracterciscreadandpMoin!tismovedctothepreviousoMccurrenceofthatK:c!haracter.AfnegativecountsearchesforsubsequentoMccurrences.Gskip-csi-sequencef()K:ReadGenoughc!haractersGtoconsumeamulti-keysequencesuchGasthosede nedK:forzk!eyslikezHomeandEnd.[SuchsequencesbMeginwithzaControlSequenceK:IndicatorfM(CSI),usuallyfLESC-[.IfthisfMsequenceisbMoundfLto"\e[",Fk!eyspro-K:ducing։suc!hsequenceswillֈhavenoe ectunlessexplicitlybMoundֈtoareadlineK:command,insteadXofinsertingstra!ycharactersintotheeditingWbu er.gThisisK:un!bMoundfbydefault,butusuallybMoundtoESC-[.Ginsert-commentf(M-#)K:WithoutGaGn!umericargument,p*thevdDalueGofthecomment-beginvdDariableisin-K:sertedatthebMeginningofthecurren!tline.QdIfanumericargumentissupplied,=QGChapterf1:CommandLineEditingӮ2333͍K:thisccommandactsasatoggle:Yifcthec!haractersatthebMeginningoftheline 33K:donotmatc!hthevdDalueofcomment-begin,Ythevalueisinserted,YotherwisetheK:c!haracters6incomment-beginare5deletedfromthebMeginningoftheline.dMInK:eitherfcase,thelineisacceptedasifanewlinehadbMeent!yped.33Gdump-functionsf()K:Prin!t,Qall,Pofthefunctionsandtheirk!eybindingstotheReadlineoutputstream.K:Ifan!umericargumentissupplied,theoutputisformattedinsuc!hawaythatK:itfcanbMemadepartofaninputrcPj le.Thiscommandisun!boundb!ydefault.Gdump-variablesf()K:Prin!tallofthesettablevdDariablesandtheirvaluestotheReadlineoutputstream.K:Ifan!umericargumentissupplied,theoutputisformattedinsuc!hawaythatK:itfcanbMemadepartofaninputrcPj le.Thiscommandisun!boundb!ydefault.Gdump-macrosf()K:Prin!t allofthe ReadlinekeysequencesbMoundtomacros andthestringstheyK:output.rIf-Jan!umericargumentis-Ksupplied,Otheoutputisformattedinsuc!haK:w!aythatitcanbMemadepartofaninputrcD le.Thiscommandisun!bMoundbyK:default.Gemacs-editing-modef(C-e)K:WhenfinvicommandmoMde,thiscausesaswitc!htoemacseditingmode.Gvi-editing-modef(M-C-j)K:WhenfinemacseditingmoMde,thiscausesaswitc!htovieditingmode.G]1.5Readlinef@viMos3deGWhile`theReadline_librarydoMesnotha!ve`afullsetofvieditingfunctions,itdoMescon!tainGenoughtoallo!wsimpleeditingoftheline..TheReadlinevimoMdebeha!vesasspMeci edinGthefposixstandard.33!GIn|Uorder|Vtoswitc!hinteractively|UbMetweenemacs|UandvieditingmoMdes,usethecommandGM-C-ji(bMoundjtoemacs-editing-modewheninjvimodeandtojvi-editing-modeinemacsGmoMde).ThefReadlinedefaultisemacsmode.!GWheny!ouenteralineinvimoMde,youarealreadyplacedin`insertion'moMde,asifyouGhadt!ypMedan`i'.PressingESCswitchesyouinto`command'moMde,(whereyoucanedittheGtextofthelinewiththestandardvimo!vementkeys,);movetoprevioushistorylineswithG`k'fandsubsequen!tlineswith`j',andsoforth.I52433͍GT2 QProgrammingzwithGNUReadline$GThis c!hapterdescribMestheinterfacebMetweenthegnuReadlineLibraryandotherprograms. 33GIf}y!ouareaprogrammer,andyouwishtoincludethefeaturesfoundingnuReadlinesuchGascompletion,llineediting,andin!teractivehistorymanipulationiny!ourownprograms,lthisGsectionfisfory!ou.ꍍG]2.1Basicf@Behavior33GMan!yprogramsprovideacommandlineinterface,suchasmail,ftp,andsh.FeorsuchGprograms,xthemFdefaultbMeha!viourofReadlineissucient.ThissectiondescribMeshowtouseGReadline!tinthe!usimplestw!ay!tpMossible,@8perhapstoreplace!ucallsiny!ourcode!utogets()orGfgets().(!GThefunctionreadline()prin!tsapromptprompt%andthenreadsandreturnsasingleGlineoftextfromtheuser.Ifprompt*isNULLortheempt!ystring,xnopromptisdisplayed.GTheu}lineu|readlinereturnsisalloMcatedwithmalloc();thecallershouldfree()thelineGwhenfithas nishedwithit.ThedeclarationforreadlineinANSICis.char*readline(constchar*prompt);)GSo,fonemigh!tsay.char*line=readline("Enteraline:");Ginordertoreadalineoftextfromtheuser.Thelinereturnedhasthe nalnewlineremo!ved,Gsofonlythetextremains.!GIfreadlineencoun!tersanEOFwhilereadingtheline,*^andthelineisemptyatthatGpMoin!t,^then(charf*)NULLisreturned.oOtherwise,thelineisendedjustasifanewlinehadGbMeenft!yped.!GIf=Ay!ouwant=BtheusertobMeabletogetatthelinelater,RI(withC-pforexample),y!oumustGcallfadd_history()tosa!vefthelinea!wayfinahistory~listofsuc!hlines..add_history(line);GFeorffulldetailsontheGNUHistoryLibrary,seetheassoMciatedman!ual.!GItÍispreferabletoa!voidÌsavingÍemptylinesonthehistorylist,sinceusersrarelyhaveaGburning4needto5reuseablankline.Hereisafunctionwhic!husefullyreplacesthestandardGgets()flibraryfunction,andhastheadvdDan!tageofnostaticbu ertoover ow:./*Astaticvariableforholdingtheline.*/.staticchar*line_read=(char*)NULL;ff./*Readastring,andreturnapointertoit.@8ReturnsNULLonEOF.*/.char*.rl_gets().{:x/*Ifthebufferhasalreadybeenallocated,Kreturnthememorytothefreepool.*/:xif(line_read)ED{Qwfree(line_read);TFGChapterf2:ProgrammingwithGNUReadlineʗ2533͍Qwline_read=(char*)NULL; 33ED}ff:x/*Getalinefromtheuser.*/:xline_read=readline("");:x/*Ifthelinehasanytextinit,Ksaveitonthehistory.*/:xif(line_read&&*line_read)EDadd_history(line_read);:xreturn(line_read);.}S!GThis`functiongiv!estheuserthedefaultbMehaviourofTABcompletion:completionon leGnames.Ify!oudonotwantReadlinetocompleteon lenames,youcanchangethebindingGofftheTABk!eywithrl_bind_key()..intrl_bind_key(intkey,rl_command_func_t*function);!Grl_bind_key()tak!estwoarguments:?keyisthecharacterthatyouwanttobind,andGfunctionistheaddressofthefunctiontocallwhenk!eyispressed.XBindingTABtorl_Ginsert()wmak!esxTABinsertitself.rl_bind_key()returnsnon-zeroifk!eyisnotavdDalidGASCIMIfc!haractercode(bet!weenf0and255).!GTh!us,ftodisablethedefaultTABbMehavior,thefollowingsuces:.rl_bind_key('\t',rl_insert);!GThis+coMdeshould+beexecutedonceat+thestartofy!ourprogram;T,youmight+writeafunc-Gtioncalledinitialize_readline()whic!hpMerformsthisandotherdesiredinitializations,Gsuc!hfasinstallingcustomcompleters(seeSection2.6[CustomCompleters],page49). 0G]2.2Customf@Ffunctions33GReadlineEpro!videsmanyfunctionsforEmanipulatingthetextoftheline,Y3butitisn'tpMossibleGtodcan!ticipatethedbneedsofallprograms.ThissectiondescribMesthevdDariousfunctionsandGvdDariables"de nedwithinthe"Readlinelibrarywhic!hallowauser"programtoaddcustomizedGfunctionalit!yftoReadline.!GBeforeadeclaringaan!yfunctionsthatcustomizeReadline'sbMeha!vior,orusingan!yfunc-Gtionalit!yxQReadlinexRprovidesinxRothercoMde,anapplicationwritershouldincludethe leGinan!y lethatusesReadline'sfeatures.?Sincesomeofthede -Gnitionsinreadline.husethestdiolibrarye,ċthe leshouldbMeincludedbMeforeGreadline.h.!Greadline.h2de nes3aC1preproMcessorvdDariablethatshouldbMetreatedasanin!teger,RL_GREADLINE_VERSION,whic!h(maybMeusedtoconditionallycompileapplicationcodedependingGon4theinstalled4Readlinev!ersion.ThevdDalueisahexadecimalencoMdingofthemajorandGminorPv!ersionnumbMersOofthelibrarye,8oftheform0xMMmm.setfromtheargumen!ttoreadline(),=yandshould.not:^bMeassignedto:]directlye.Therl_set_prompt()function(seeSection2.4.6[Redis-.pla!y],fpage37)maybMeusedtomodifythepromptstringaftercallingreadline().p3[Veariable]G@charL*rl_display_prompt.Thestringdispla!yedastheprompt.Z=Thisisusuallyiden!ticaltorl>xHtprompt,9butma!y.bMe[c!hangedtemporarilyb!yfunctionsthatusethepromptstringasamessagearea,.suc!hfasincrementalsearch.p3[Veariable]G@intLrl_already_prompted.If\Xanapplicationwishes\Wtodispla!ythepromptitself,ratherthanha!ve\XReadlinedo.it9the rsttimereadline()iscalled,mitshouldsetthisvdDariabletoanon-zerovalue.afterdispla!yingtheprompt. ThepromptmustalsobMepassedastheargumen!tto.readline() sotheredispla!yfunctionscanupMdatethedisplaypropMerlye.Thecalling.applicationfisrespMonsibleformanagingthevdDalue;Readlinenev!ersetsit.3[Veariable]G@constLchar*rl_library_version.Thefv!ersionnumbMerofthisrevisionofthelibrarye.p3[Veariable]G@intLrl_readline_version.Anin!tegerencoMdingthecurren!tversionofthelibrarye.4bTheencoMdingisoftheform.0xMMmm,wherebMMvisbthet!wo-digitbmajorv!ersionnumbMer,andmmbisthetwo-.digit{minor{v!ersionnumbMer.]Feorexample, for{Readline-4.2,rl_readline_version.w!ouldfhavethevdDalue0x0402.3[Veariable]G@intLrl_gnu_readline_p.Alw!aysfsetto1,denotingthatthisisgnureadlineratherthansomeem!ulation.3[Veariable]G@constLchar*rl_terminal_name.The_terminal_t!ypMe,mKusedforinitialization.Ifnotsetb!ytheapplication,mJReadlinesets.thisftothevdDalueoftheTERMen!vironmentfvariablethe rsttimeitiscalled.p3[Veariable]G@constLchar*rl_readline_name.ThisvdDariableissettoauniquenameb!yeachapplicationusingReadline.)4ThevdDalue.allo!ws]wconditionalparsing]voftheinputrc le(seeSection1.3.2[ConditionalInitCon-.structs],fpage12).3[Veariable]G@FILEL*rl_instream.Thestdiostreamfromwhic!hReadlinereadsinput.*IfNULL,?FReadlinedefaultsto.stdin.p3[Veariable]G@FILEL*rl_outstream.The#Rstdio#Qstreamtowhic!hReadlinepMerformsoutput.TIfNULL,BReadlinedefaultsto.stdout.3[Veariable]G@intLrl_prefer_env_winsize.Ifh non-zero,tReadlinegiv!esvdDaluesfoundinthehLINESandCOLUMNSenvironmentvdDari-.ablesgreaterprecedencethanvdDaluesfetc!hedfromthekernelwhencomputingthe.screenfdimensions.׍GChapterf2:ProgrammingwithGNUReadlineʗ2933͍3[Veariable]G@rl_command_func_tL*rl_last_func 33.The-)addressofthelastcommandfunctionReadline-*executed.r&Ma!ybMeusedtotest.whetherfornotafunctionisbMeingexecutedt!wiceinsuccession,forexample.fg3[Veariable]G@rl_hook_func_tL*rl_startup_hook.Ifnon-zero,>thisistheaddressofafunctiontocalljustbMeforereadlineprin!tsthe. rstfprompt.fh3[Veariable]G@rl_hook_func_tL*rl_pre_input_hook.IfCnon-zero,k9thisCistheaddressofafunctiontocallafterthe rstprompthasbMeen.prin!tedfandjustbMeforereadlinestartsreadinginputcharacters.3[Veariable]G@rl_hook_func_tL*rl_event_hook.Ifnon-zero,0thisistheaddressofafunctiontocallpMeriodicallywhenReadlineis.w!aiting*forterminal)input.Bydefault,this*willbMecalledatmosttentimesasecond.iffthereisnok!eybMoardinput.3[Veariable]G@rl_getc_func_tL*rl_getc_function.IfWnon-zero,ReadlinewillcallindirectlythroughthispMoin!tertogetacharacterfrom.theinputstream.EBydefault,itissettorl_getc,thedefaultReadlinec!haracterinput.function(seeSection2.4.8[CharacterInput],page38).Ingeneral,anapplicationthat.setsfrl>xHtgetc>xHfunctionshouldconsidersettingrl>xHinput>xHa!vdDailable>xHhoMokPjasw!ell.3[Veariable]G@rl_hook_func_tL*rl_signal_event_hook.If>non-zero,Sthisis>theaddressofafunctiontocallifareadsystemcallisin!terrupted.whenfReadlineisreadingterminalinput.fh3[Veariable]G@rl_hook_func_tL*rl_input_available_hook.Ifznon-zero,Readlinezwillusethisfunction'sreturnvdDaluewhenitneedstodetermine.whetherornotthereisa!vdDailableinputonthecurrentinputsource. 8LThedefault.hoMok #c!hecks $rl_instream;@:ifanapplicationisusingadi eren!tinputsource,+itshould.setthehoMokappropriatelye.vReadlinequeriesfora!vdDailableinputwhenimplemen!ting.in!tra-key-sequencecStimeoutsduringinputandincremen!talsearches.ǂThismayusean.application-spMeci ctimeoutbeforereturningavdDalue;ReadlineusesthevdDaluepassedto.rl_set_keyboard_input_timeout()9or:thevdDalueoftheuser-settablek!eyseq-timeout.vdDariable.Thisuistdesignedforuseb!yapplicationsusingReadline'scallbac!kinterface.(seeRSectionS2.4.12[AlternateIn!terface],page42),whic!hRmaynotRusethetraditional.read(2)Kand ledescriptorin!terface,,Corotherapplicationsusingadi erentinput.mec!hanism.LIfqanapplicationusesaninputmechanismorhoMokthatcanpoten!tially.exceeddthevdDalueofdk!eyseq-timeout,itshouldincreasethetimeoutorsetthishoMok.appropriatelyev!enwhennotusingthecallbac!kinterface.wIngeneral,anapplication.thatfsetsrl>xHtgetc>xHfunctionfshouldconsidersettingrl>xHtinput>xHa!vdDailable>xHhoMokPjasfwell.3[Veariable]G@rl_voidfunc_tL*rl_redisplay_function.IfSnon-zero,~ReadlinewillcallindirectlythroughthisSpMoin!tertoupdatethedispla!y.with=thecurren!t=contents=oftheeditingbu er.Bydefault,Ritissettorl_redisplay,.thefdefaultReadlineredispla!yfunction(seeSection2.4.6[Redisplay],page37).HGChapterf2:ProgrammingwithGNUReadlineʗ3033͍3[Veariable]G@rl_vintfunc_tL*rl_prep_term_function 33.Ifnon-zero, ReadlinewillcallindirectlythroughthispMoin!tertoinitializetheterminal..Theufunctiontak!esausingleargument,Ganint agthatsayswhetheruornottouse.eigh!t-bitcharacters.5Bydefault,5athisissettorl_prep_terminal(seeSection2.4.9.[TeerminalfManagemen!t],page39).Z[3[Veariable]G@rl_voidfunc_tL*rl_deprep_term_function.Ifeynon-zero,>ReadlineezwillcallindirectlythroughthispMoin!tertoresettheterminal..This4functionshouldundo4thee ectsofrl_prep_term_function.YBydefault,Xthis.isfsettorl_deprep_terminal(seeSection2.4.9[TeerminalManagemen!t],page39).3[Veariable]G@KeymapLrl_executing_keymap.ThisROvdDariableRNissettothek!eymap(seeSection2.4.2[Keymaps],}Hpage32)inwhic!h.thefcurren!tlyexecutingreadlinefunctionwasfound.ZZ3[Veariable]G@KeymapLrl_binding_keymap.ThisROvdDariableRNissettothek!eymap(seeSection2.4.2[Keymaps],}Hpage32)inwhic!h.theflastk!eybindingoMccurred.3[Veariable]G@charL*rl_executing_macro.ThisfvdDariableissettothetextofan!ycurrently-executingmacro.3[Veariable]G@intLrl_executing_key.Thefk!eythatcausedthedispatchtothecurrently-executingReadlinefunction.3[Veariable]G@charL*rl_executing_keyseq.TheCfullk!eyCsequencethatcausedthedispatchtoCthecurrently-executingReadline.function.3[Veariable]G@intLrl_key_sequence_length.Thefn!umbMerofcharactersinrl>xHtexecuting>xHk!eyseq.3[Veariable]G@intLrl_readline_state.A#vdDariable#with#bitvalues#thatencapsulatethecurren!tReadlinestate.VA#bitisset.withtheRL_SETSTATEmacro,ǓandunsetwiththeRL_UNSETSTATEmacro.Usethe.RL_ISSTATEzmacrotoztestwhetheraparticularstatebitisset.XCurren!tstatebits.include:.RL_STATE_NONEhʏReadlinefhasnoty!etbMeencalled,norhasitbeguntoinitialize..RL_STATE_INITIALIZINGhʏReadlinefisinitializingitsin!ternaldatastructures..RL_STATE_INITIALIZEDhʏReadlinefhascompleteditsinitialization..RL_STATE_TERMPREPPEDhʏReadliner[hasmoMdi edtheterminalmodestodoitso!wninputandredis-hʏpla!ye..RL_STATE_READCMDhʏReadlinefisreadingacommandfromthek!eybMoard.MGChapterf2:ProgrammingwithGNUReadlineʗ3133͍.RL_STATE_METANEXT 33hʏReadlinefisreadingmoreinputafterreadingthemeta-pre xc!haracter.00.RL_STATE_DISPATCHINGhʏReadlinefisdispatc!hingtoacommand.01.RL_STATE_MOREINPUThʏReadlinefisreadingmoreinputwhileexecutinganeditingcommand..RL_STATE_ISEARCHhʏReadlinefispMerforminganincremen!talhistorysearch.01.RL_STATE_NSEARCHhʏReadlinefispMerforminganon-incremen!talhistorysearch..RL_STATE_SEARCHhʏReadlinepispsearc!hingbackwardorpforwardthroughpthehistoryforastring..RL_STATE_NUMERICARGhʏReadlinefisreadingan!umericargument.01.RL_STATE_MACROINPUThʏReadlineiscurren!tlygettingitsinputfromapreviously-de nedk!eybMoardhʏmacro..RL_STATE_MACRODEFhʏReadlinefiscurren!tlyreadingcharactersde ningakeybMoardmacro.01.RL_STATE_OVERWRITEhʏReadlinefisino!verwritefmoMde..RL_STATE_COMPLETINGhʏReadlinefispMerformingw!ordcompletion.01.RL_STATE_SIGHANDLERhʏReadlinefiscurren!tlyexecutingthereadlinesignalhandler..RL_STATE_UNDOINGhʏReadlinefispMerforminganundo..RL_STATE_INPUTPENDINGhʏReadlinefhasinputpMendingduetoacalltorl_execute_next().01.RL_STATE_TTYCSAVEDhʏReadlinefhassa!vedfthevdDaluesoftheterminal'sspMecialc!haracters..RL_STATE_CALLBACKhʏReadline+is+curren!tlyusingthealternate(callbac!k)interface+(seeSec-hʏtionf2.4.12[AlternateIn!terface],page42).01.RL_STATE_VIMOTIONhʏReadlinefisreadingtheargumen!ttoavi-moMde"motion"command..RL_STATE_MULTIKEYhʏReadlinefisreadingam!ultiple-keystrokefcommand. ܍GChapterf2:ProgrammingwithGNUReadlineʗ3233͍.RL_STATE_VICMDONCE 33hʏReadlinehasen!teredvicommand(mo!vement)moMdeatleastonetimehʏduringfthecurren!tcalltoreadline().y].RL_STATE_DONEhʏReadlineThasreadak!eysequenceTbMoundtoaccept-lineandisabouttohʏreturnfthelinetothecaller.s3[Veariable]G@intLrl_explicit_arg.Set]toanon-zero\vdDalueifanexplicitn!umericargumentwas\spMeci edbytheuser..OnlyfvdDalidinabindablecommandfunction.r3[Veariable]G@intLrl_numeric_arg.Setr,tothevdDalueofan!ynumericr-argumentexplicitlyspMeci edbytheuserbMefore.executingthecurren!tReadlinefunction.MOnlyvdDalidinabindablecommandfunction.3[Veariable]G@intLrl_editing_mode.SetptooavdDaluedenotingReadline'scurren!teditingmoMde.AFvdDalueof1meansReadline.isfcurren!tlyinemacsmoMde;0meansthatvimodeisactiv!e.F*G]2.4Readlinef@ConvenienceFfunctionsGg2.4.1d(NamingMaFģunction3GTheusercandynamicallyc!hangethebindingsofkeyswhileusingReadline.]ThisisdonebyGrepresen!ting"the#functionwithadescriptiv!ename.Theuserisabletot!ypMethedescriptiv!eGnamefwhenreferringtothefunction.Th!us,inaninit le,onemight ndH.Meta-Rubout: Tbackward-kill-word!GThis Mtbindsthek!eystroke MtMeta-Rubout Mutothefunctiondescriptively Eunamed 33Gbackward-kill-word.4Yeou, asYtheprogrammer, shouldbindthefunctionsZy!ouwritetoGdescriptiv!efnamesaswell.Readlineprovidesafunctionfordoingthat:z[Feunction]G@intLrl_add_defuny;m#R 3 cmss10(Ap0J cmsl10Aconstochar*name,rlFGcommandFfuncFto*function,DGintkey).AddxHtinsert,|thelowercase.Metac!haractersbMoundtoruntheirequivdDalents,andtheMetadigitsbMoundtoproduce.n!umericfarguments.Hz[Feunction]G@voidLrl_discard_keymapy(AKeymapkeymap).FereethestorageassoMciatedwiththedataink!eymap. Thecallershouldfreek!eymap.z[Feunction]G@voidLrl_free_keymapy(AKeymapkeymap).FereeallstorageassoMciatedwithk!eymap.Thiscallsrl_discard_keymaptofreesub-.ordindatefk!eymapsandmacros.!GReadlineqhassev!eralqinternalqkeymaps. >ThesefunctionsallowyouqtochangewhichGk!eymapfisactive.z[Feunction]G@KeymapLrl_get_keymapy(Avoid).Returnsfthecurren!tlyactivekeymap.Hz[Feunction]G@voidLrl_set_keymapy(AKeymapkeymap).Mak!esfkeymapgthecurrentlyactivekeymap.z[Feunction]G@KeymapLrl_get_keymap_by_namey(Aconstchar*name).Return>thek!eymap=matching>name.dnameEisonewhic!hwould>bMesuppliedinaset.keymapfinputrcline(seeSection1.3[ReadlineInitFile],page4).z[Feunction]G@charL*rl_get_keymap_namey(AKeymapkeymap).Return>thename=matc!hingkeymap.dnameEisonewhich=wouldbMesuppliedin=aset.keymapfinputrcline(seeSection1.3[ReadlineInitFile],page4).dGg2.4.3d(BindingMKeys3GKeysequencesareassoMciatewithfunctionsthroughthek!eymap.2;Readlinehassev!eralin-Gternalk!eymaps:emacs_standard_keymap,GChapterf2:ProgrammingwithGNUReadlineʗ3433͍z[Feunction]G@intLrl_bind_key_if_unboundy(Aintkey,rlFGcommandFfuncFt 33DG*function).BindsIk!ey9-tofunctionifIitisnotalreadybMoundinthecurren!tlyactiveIkeymap..Returnsfnon-zerointhecaseofanin!vdDalidkey~orifkey~isalreadybMound.pz[Feunction]G@intLrl_bind_key_if_unbound_in_mapy(Aintkey,rlFGcommandFfuncFtDG*function,Keymapmap).BindsGk!ey7tofunctionifitisnotalreadybMoundinmap.WReturnsnon-zerointhecase.offanin!vdDalidkey~orifkey~isalreadybMound.pz[Feunction]G@intLrl_unbind_keyy(Aintkey).Bind[rk!eyKtothe[snullfunction[sinthecurren!tlyactive[skeymap.Returnsnon-zero[rin.casefoferror.z[Feunction]G@intLrl_unbind_key_in_mapy(Aintkey,Keymapmap).Bindfk!ey~tothenullfunctioninmap.Returnsnon-zeroincaseoferror.pz[Feunction]G@intLrl_unbind_function_in_mapy(ArlFGcommandFfuncFt*function,DGKeymapmap).Un!bindfallkeysthatexecutefunctioninmap.z[Feunction]G@intLrl_unbind_command_in_mapy(Aconstchar*command,KeymapDGmap).Un!bindfallkeysthatarebMoundtocommandinmap.z[Feunction]G@intLrl_bind_keyseqy(Aconstchar*keyseq,rlFGcommandFfuncFtDG*function).Bind,thek!eysequence,representedbythestringkeyseqmtto,thefunctionfunction,.bMeginningcincthecurren!tkeymap.ǠThismakescnewk!eymapsasnecessarye.ǟThereturn.vdDaluefisnon-zeroifk!eyseqLisinvdDalid.pz[Feunction]G@intLrl_bind_keyseq_in_mapy(Aconstchar*keyseq,DGrlFGcommandFfuncFt*function,Keymapmap).Bindthek!eysequencerepresentedbythestringkeyseqBtothefunctionfunction.This.mak!es&newkeymapsasnecessarye.Initial%bindingsarepMerformedinmap.Thereturn.vdDaluefisnon-zeroifk!eyseqLisinvdDalid.z[Feunction]G@intLrl_set_keyy(Aconstchar*keyseq,rlFGcommandFfuncFt*function,DGKeymapmap).EquivdDalen!tftorl_bind_keyseq_in_map.pz[Feunction]G@intLrl_bind_keyseq_if_unboundy(Aconstchar*keyseq,DGrlFGcommandFfuncFt*function).BindsCk!eyseqtofunctionifCitisnotalreadybMoundinthecurren!tlyactiveCkeymap..Returnsfnon-zerointhecaseofanin!vdDalidkeyseqLorifkeyseqLisalreadybMound.z[Feunction]G@intLrl_bind_keyseq_if_unbound_in_mapy(Aconstchar*keyseq,DGrlFGcommandFfuncFt*function,Keymapmap).Bindsk!eyseqtofunctionifitisnotalreadybMoundinmap.oReturnsnon-zerointhe.casefofanin!vdDalidkeyseqLorifkeyseqLisalreadybMound.#XGChapterf2:ProgrammingwithGNUReadlineʗ3533͍z[Feunction]G@intLrl_generic_bindy(AinttypUVe,constchar*keyseq,char*data, 33DGKeymapmap).Bind>the>k!eysequencerepresen!tedby>thestringk!eyseqtothearbitrarypMoin!terdata..t!ypMesaysjwhatjkindofdataispoin!tedjtobydata;~thiscanbMeajfunction(ISFUNC),va.macro(ISMACR),(orak!eymap(ISKMAP).ԙThismak!esnewkeymapsasnecessarye.ԙThe.initialfk!eymapinwhichtodobindingsismap.덍z[Feunction]G@intLrl_parse_and_bindy(Achar*line).P!arseyline$asxifithadbMeenreadfromtheinputrc leandpMerforman!ykeybindings.andfvdDariableassignmen!tsfound(seeSection1.3[ReadlineInitFile],page4).썍z[Feunction]G@intLrl_read_init_filey(Aconstchar* lename).Read8k!eybindingsand9vdDariableassignmentsfrom lenamee?(see9Section1.3[Readline.InitfFile],page4).%Gg2.4.4d(AssoiciatingMFģunctionNamesandBindings3GThesefunctionsallo!wyouto ndoutwhatk!eysinvokenamedfunctionsandthefunctionsGin!vokedMLbyMMaparticularkeysequence.*YeouMMmayalsoassoMciateMManewfunctionnamewithanGarbitraryffunction.z[Feunction]G@rl_command_func_tL*rl_named_functiony(Aconstchar*name).Returnfthefunctionwithnamename.덍z[Feunction]G@rl_command_func_tL*rl_function_of_keyseqy(AconstcharDG*keyseq,Keymapmap,int*typUVe).Returnthefunctionin!vokedbykeyseq)inkeymapmap.Ifmap=isNULL,Ethecurren!t.k!eymapqisqused.?IftypMeisnotqNULL,sthetypMeqoftheobjectqisreturnedintheint.vdDariablefitpMoin!tsto(oneofISFUNC,ISKMAP,orISMACR).z[Feunction]G@charL**rl_invoking_keyseqsy(ArlFGcommandFfuncFt*function).Returnanarra!yofstringsrepresen!tingthek!eysequencesusedtoin!vokefunctionin.thefcurren!tkeymap.썍z[Feunction]G@charL**rl_invoking_keyseqs_in_mapy(ArlFGcommandFfuncFtDG*function,Keymapmap).Returnanarra!yofstringsrepresen!tingthek!eysequencesusedtoin!vokefunctionin.thefk!eymapmap.z[Feunction]G@voidLrl_function_dumpery(Aintreadable).Prin!tthereadlinefunctionnamesandthekeysequencescurrentlybMoundtothemto.rl_outstream.IfLLreadableTisLMnon-zero,^Rthelistisformattedinsuc!hawaythatLLitcan.bMefmadepartofaninputrc leandre-read.썍z[Feunction]G@voidLrl_list_funmap_namesy(Avoid).Prin!tfthenamesofallbindableReadlinefunctionstorl_outstream.z[Feunction]G@constLchar**rl_funmap_namesy(Avoid).ReturnSaRNULL1terminatedarra!yofkno!wnfunctionnames.Thearra!yissorted.The.arra!y\hitself\iisalloMcated,k5butnotthestringsinside.3Yeoushouldfreethearra!ye,k5butnot.thefpMoin!ters,usingfreeorrl_freewhenyouaredone.$GChapterf2:ProgrammingwithGNUReadlineʗ3633͍z[Feunction]G@intLrl_add_funmap_entryy(Aconstchar*name,rlFGcommandFfuncFt 33DG*function).AddnametothelistofbindableReadlinecommandnames,Gandmak!efunctionthe.functionftobMecalledwhennameCmisin!voked.Gg2.4.5d(AllowingMUndoing3GSuppMortingLtheLundocommandisapainlessthing,vGandmak!esyourLfunctionsmuchLmoreGuseful.Itfiscertainlyeasytotrysomethingify!ouknowyoucanundoit.!GIf*y!our+functionsimplyinsertstextonce,8ordeletestextonce,8andusesrl_insert_Gtext()Y)orrl_delete_text()Y*todoit,hthenundoingisalreadydonefory!ouautomaticallye.!GIfuy!oudomultipleinsertionsormultipledeletions,oranycombinationoftheseopMerations,Gy!oushouldgroupthemtogetherin!tooneopMeration.\Thisisdonewithrl_begin_undo_Ggroup()fandrl_end_undo_group().!GTheft!ypMesofeventsthatcanbMeundoneare:$.ߤN cmtt9enumundo_code{UNDO_DELETE,UNDO_INSERT,UNDO_BEGIN,UNDO_END};!GNoticethatUNDO_DELETEmeanstoinsertsometext,:andUNDO_INSERTmeanstodeleteGsomeOtext.Thatis,a theundocoMdetellswhatOtoundo,notho!wtoundoit.UNDO_BEGINandGUNDO_ENDfaretagsaddedb!yrl_begin_undo_group()andrl_end_undo_group().|z[Feunction]G@intLrl_begin_undo_groupy(Avoid).Beginssa!vingundoinformationinagroupconstruct.ATheundoinformationusually.comesIfromHcallstorl_insert_text()andrl_delete_text(),TAbutcouldbMethe.resultfofcallstorl_add_undo().z[Feunction]G@intLrl_end_undo_groupy(Avoid).Closes{the{curren!tundogroupstartedwithrl_begin_undo_groupf().mThereshould.bMefonecalltorl_end_undo_group()foreac!hcalltorl_begin_undo_group().z[Feunction]G@voidLrl_add_undoy(AenumundoFGcoUVdewhat,intstart,intend,charDG*text).Remem!bMerhowtoundoanevent(accordingtowhat=)./rThea ectedtextrunsfrom.startftofend,andencompassestext.z[Feunction]G@voidLrl_free_undo_listy(Avoid).Fereeftheexistingundolist.z[Feunction]G@intLrl_do_undoy(Avoid).Undothe rstthingontheundolist.Returns0iftherew!asnothingtoundo,non-zero.iffsomethingw!asundone.!GFinallye,#ify!ouneitherinsertnordeletetext,#butdirectlymoMdifytheexistingtext(e.g.,Gc!hangeitscase),Kcallrl_modifying()once,LjustbMeforeyoumoMdifythetext.YeoumustGsupplyftheindicesofthetextrangethaty!ouaregoingtomoMdifye.z[Feunction]G@intLrl_modifyingy(Aintstart,intend).Teell-Readlineto.sa!ve-thetextbMet!weenstart-and-endBasasingleundounit.g3Itis.assumedfthaty!ouwillsubsequentlymoMdifythattext.%퍟GChapterf2:ProgrammingwithGNUReadlineʗ3733͍Gg2.4.6d(Redisplay1z[Feunction]G@voidLrl_redisplayy(Avoid) 33.Changewhat'sdispla!yedonthescreentore ectthecurren!tcontentsofrl_line_.buffer.p͍z[Feunction]G@intLrl_forced_update_displayy(Avoid).FeorcethelinetobMeupdatedandredispla!yed, whetherornotReadlinethinksthe.screenfdispla!yiscorrect.z[Feunction]G@intLrl_on_new_liney(Avoid).TeelltheupMdatefunctionsthatw!ehavemovedontoanew(empty)line,!usuallyafter.outputtingfanewline.p΍z[Feunction]G@intLrl_on_new_line_with_prompty(Avoid).Teell_the`upMdatefunctionsthatw!ehavemoved`ontoanew`line, `withrl>xHtprompt _already.displa!yed.ˮThisocouldbMeousedb!yapplicationsthatw!antotooutputthepromptstring.themselv!es,\butJ_stillneedReadlinetoknowthepromptstringlengthforredisplaye.0It.shouldfbMeusedaftersettingrl>xHtalready>xHprompted.z[Feunction]G@intLrl_clear_visible_liney(Avoid).ClearfthescreenlinescorrespMondingtothecurren!tline'scontents.z[Feunction]G@intLrl_reset_line_statey(Avoid).Reset*the*displa!ystatetoacleanstateandredispla!ythecurren!tlinestartingona.newfline.p΍z[Feunction]G@intLrl_crlfy(Avoid).Mo!vefthecursortothestartofthenextscreenline.z[Feunction]G@intLrl_show_chary(Aintc).Displa!ycharacterconrl_outstream.IfReadlinehasnotbMeensettodispla!ymeta.c!haractersdirectlye,9(thiswillconvertmetacharacterstoameta-pre xedk!eysequence..Thisfisin!tendedforusebyapplicationswhichwishtodotheirownredisplaye.z[Feunction]G@intLrl_messagey(Aconstchar*,/...).Theyargumen!tsareyaformatstringaswouldybMesuppliedtoprintf,possiblycon!taining.con!versionNspMeci cationsNsuchas`%d',andanyadditionalargumentsNnecessaryto.satisfythecon!versionspMeci cations.iTheresultingstringisdispla!yedintheec!ho.area.qTheLec!hoareaisalsousedtodisplaynumericargumentsandsearchstrings..Yeoushouldcallrl_save_prompttosa!vethepromptinformationbMeforecallingthis.function.p΍z[Feunction]G@intLrl_clear_messagey(Avoid).Clearzthemessagezintheec!hoarea.Ifthepromptw!assavedwithazcalltorl_save_.promptobMeforetheplastcalltorl_message,callrl_restore_promptbMeforecalling.thisffunction.z[Feunction]G@voidLrl_save_prompty(Avoid).Sa!ve,the, loMcalReadlinepromptdispla!ystateinpreparationfordispla!yinganew.messagefinthemessageareawithrl_message().&΍GChapterf2:ProgrammingwithGNUReadlineʗ3833͍z[Feunction]G@voidLrl_restore_prompty(Avoid) 33.Restore!PtheloMcal!OReadlinepromptdispla!ystatesa!ved!Pbythemost!Orecentcallto.rl_save_prompt.ifmrl_save_promptnw!ascalledtosaventhepromptbMeforeacall.tok7rl_message,kthisk6functionshouldbMecalledbeforethek6correspondingcalltorl_.clear_message.$z[Feunction]G@intLrl_expand_prompty(Achar*prompt).Expand#&an!y#%spMecialcharacter#%sequencesinprompt`&andsetuptheloMcalReadline.promptM%redispla!yM$vdDariables.Thisfunctioniscalledb!yreadline().ItmayM%alsobMe.calledvtouexpandtheprimarypromptiftherl_on_new_line_with_prompt()function.or rl_already_promptedvdDariableisused. Itreturnsthen!umbMer ofvisiblec!haracters.on/thelastlineofthe(pMossiblym!ulti-line).prompt.8Applicationsmayindicatethat.theXFpromptcon!tainscharactersXGthattakeupnophysicalscreenXGspacewhendisplayed.b!yxbracketingwasequenceofsuc!hcharactersxwiththespMecialmark!ersRL_PROMPT_.START_IGNOREandRL_PROMPT_END_IGNORE(declaredinreadline.h).ZThisma!ybMe.usedftoem!bMedterminal-speci cescapesequencesinprompts.z[Feunction]G@intLrl_set_prompty(Aconstchar*prompt).Mak!e;Readlineusepromptxforsubsequentredisplaye.LThiscallsrl_expand_prompt().tofexpandthepromptandsetsrl_prompttotheresult.LGg2.4.7d(MoidifyingMTģext`~z[Feunction]G@intLrl_insert_texty(Aconstchar*text).Inserttextin!tothelineatthecurren!tcursorpMosition.MReturnsthen!umbMerofchar-.actersfinserted.z[Feunction]G@intLrl_delete_texty(Aintstart,intend).DeletethetextbMet!weenstartŁandendinthecurren!tline..Returnsthen!umbMerof.c!haractersfdeleted.z[Feunction]G@charL*rl_copy_texty(Aintstart,intend).Returnfacop!yofthetextbMetweenstartfandendinthecurrentline.z[Feunction]G@intLrl_kill_texty(Aintstart,intend).Cop!ythetextbMetweenstartWandendinthecurrentlinetothekillring,7appMending.orprepMendingtothelastkillifthelastcommandw!asakillcommand.)Thetextis.deleted.If_startE_islessthan^end, thetext_isappMended, otherwiseprepended.Ifthe.lastfcommandw!asnotakill,anewkillringslotisused.z[Feunction]G@intLrl_push_macro_inputy(Achar*macro).CausedmacrobtobMeinsertedin!totheline,qasifithadbeenin!vokeddbyakeybMoundto.afmacro.NotespMeciallyuseful;userl_insert_text()instead.LGg2.4.8d(CharacterMInput`~z[Feunction]G@intLrl_read_keyy(Avoid).Return7the8nextc!haracteravdDailable7fromReadline'scurren!tinputstream.yThishan-.dles.Sinputinsertedin!totheinputstream.Tviarl>xHtpMending>xHinputkS(see.SSection2.3[Read-.lineVeariables],:page27)andrl_stuff_char(),9macros,andc!haractersreadfrom' zGChapterf2:ProgrammingwithGNUReadlineʗ3933͍.thek!eybMoard.2.Whilewaitingforinput,43thisfunctionwillcallan!yfunctionassigned 33.toftherl_event_hookvdDariable.덍z[Feunction]G@intLrl_getcy(AFILE*stream).Returnthenextc!haracteravdDailablefromstream,whichisassumedtobMethekeybMoard.z[Feunction]G@intLrl_stuff_chary(Aintc).Insertcin!totheReadlineinputstream.ItwillbMe"read"beforeReadlineattempts.to6read6c!haractersfromtheterminalwithrl_read_key().Upto512c!haractersmay.bMe+pushedbac!k.,rl_stuff_charreturns1ifthecharacterwassuccessfullyinserted;.0fotherwise.z[Feunction]G@intLrl_execute_nexty(Aintc).Mak!eHcbMetheHnextcommandtobMeexecutedwhenrl_read_key()iscalled.This.setsfrl>xHtpMending>xHinput.z[Feunction]G@intLrl_clear_pending_inputy(Avoid).Unset|rl>xHtpMending>xHinput,\e ectiv!elynegatingthee ect{ofanypreviouscalltorl_.execute_next().zYThis:w!orksonlyifthepMendinginputhasnotalreadybeenread.withfrl_read_key().z[Feunction]G@intLrl_set_keyboard_input_timeouty(Aintu).Whileюw!aitingforэkeybMoardinputinrl_read_key(),WReadlinewillwaitэforumi-.crosecondsforinputbMeforecallingan!yfunctionassignedtorl_event_hook. um!ust.bMeӐgreaterthanorequaltozero(azero-lengthtimeoutisequivdDalen!ttoapoll).e[The.defaultfw!aitingpMeriodfisone-tenthofasecond.ReturnstheoldtimeoutvdDalue.{Gg2.4.9d(TģerminalMManagement5z[Feunction]G@voidLrl_prep_terminaly(AintmetaFG ag).MoMdifytheterminalsettingsforReadline'suse,wsoreadline()canreadasingle.c!haracter,at-atimefromthek!eybMoard. 0Themeta>xHt agDargument,shouldbMenon-zero.iffReadlineshouldreadeigh!t-bitinput.z[Feunction]G@voidLrl_deprep_terminaly(Avoid).Undo˭theˬe ectsofrl_prep_terminal(),lea!vingtheterminalinthestateinwhic!h.itfw!asbMeforethemostrecentcalltorl_prep_terminal().z[Feunction]G@voidLrl_tty_set_default_bindingsy(AKeymapkmap).ReadotheoopMeratingsystem'sterminaleditingc!haracters(aswouldbMeodisplayedby.stty)ftotheirReadlineequivdDalen!ts.ThebindingsarepMerformedinkmap.z[Feunction]G@voidLrl_tty_unset_default_bindingsy(AKeymapkmap).Reset;thebindingsmanipulatedb!y:rl_tty_set_default_bindingssothattheter-.minal¯editing°c!haractersarebMoundtorl_insert.2ThebindingsarepMerformedin.kmap.z[Feunction]G@intLrl_tty_set_echoingy(AintvUUalue).SetReadline'sideaofwhetherornotitisec!hoingoutputtoitsoutputstream.(rl>xHtoutstream).IfvdDalueis0,TReadlinedoMesnotdispla!youtputtorl>xHtoutstream;,an!y.other'vdDalue'enablesoutput. _TheinitialvdDalueissetwhenReadlineinitializesthe.terminalfsettings.ThisfunctionreturnsthepreviousvdDalue.(GChapterf2:ProgrammingwithGNUReadlineʗ4033͍z[Feunction]G@intLrl_reset_terminaly(Aconstchar*terminalFGname) 33.ReinitializeReadline'sideaoftheterminalsettingsusingterminal>xHtnamexasthetermi-.nalѢt!ypMeѡ(e.g.,qvt100)._Ifterminal>xHtnamenisNULL,theѡvdDalueoftheTERMen!vironment.vdDariablefisused.\~Gg2.4.10d(UtilityMFģunctionsz[Feunction]G@intLrl_save_statey(AstructreadlineFGstate*sp).Sa!vekaksnapshotofReadline'sin!ternalstatetosp.Thecon!tentskofthereadline>xHtstate.structurearedoMcumen!tedinreadline.h.ѶThecallerisresponsibleforallocatingthe.structure.=z[Feunction]G@intLrl_restore_statey(AstructreadlineFGstate*sp).Restore Readline'sin!ternalstatetothatstoredinsp,whic!hmusthavebMeensavedbya.call|torl_save_state.The|con!tents|ofthereadline>xHtstatestructurearedoMcumen!ted.infreadline.h.ThecallerisrespMonsibleforfreeingthestructure.z[Feunction]G@voidLrl_freey(Avoid*mem).DealloMcatethememorypoin!tedtobymem.memmusthavebMeenallocatedb!ymalloc.z[Feunction]G@voidLrl_replace_liney(Aconstchar*text,intclearFGundo).ReplaceJtheKcon!tentsofrl_line_bufferKwithtext.ThepMoin!tandmarkarepre-.serv!ed,.eifepMossible.Ifclear>xHtundo5isdnon-zero,.ftheundolistassoMciatedwiththecurren!t.linefiscleared.z[Feunction]G@voidLrl_extend_line_buffery(Aintlen).Ensure4thatrl_line_bufferhas5enoughspacetoholdlenc!haracters,pMossiblyreal-.loMcatingfitifnecessarye.z[Feunction]G@intLrl_initializey(Avoid).Initializen8orn7re-initializeReadline'sin!ternalstate.5RIt'snotstrictlynecessarytocall.this;freadline()callsitbMeforereadingan!yinput.z[Feunction]G@intLrl_dingy(Avoid).RingftheterminalbMell,obeyingthesettingofbell-style.z[Feunction]G@intLrl_alphabeticy(Aintc).Returnf1ifcPjisanalphabMeticc!haracter.z[Feunction]G@voidLrl_display_match_listy(Achar**matches,intlen,intmax).A#;con!venience#[functionfordispla!yingalistofstringsincolumnarformatonRead-.line'swoutputxstream.matchesisthelistofstrings,inargvformat,suc!hasalistof.completion9matc!hes.lenisthenumbMerofstringsinmatches,andmaxisthelengthof.the$longest$stringinmatches.Thisfunctionusesthesettingofprint-completions-.horizontallyYtoYselectho!wthematchesYaredisplayed(seeSectionY1.3.1[Readline.InitFileSyn!tax], page4).ۢWhendisplayingcompletions, thisfunctionsetsthenum-.bMerTofScolumnsusedfordispla!ytothevdDalueofcompletion-display-width,WthevdDalue.offtheen!vironmentfvdDariableCOLUMNS,orthescreenwidth,inthatorder.!GThefollo!wingareimplementedasmacros,lik!eerasingaline.}Readline.doMes4Anotuse4@allofaterminal'scapabilities,WandthisfunctionwillreturnvdDaluesfor.onlyfthosecapabilitiesReadlineuses.1z[Feunction]G@voidLrl_clear_historyy(Avoid).ClearC%thehistoryC$listb!ydeletingalloftheen!tries,VinthesamemannerastheHistory.library's%>clear_history()%=function. ZeThisdi ersfromclear_historybMecauseit.freesfprivdDatedataReadlinesa!vesfinthehistorylist.Gg2.4.12d(AlternateMInterface3GAnalternatein!terfaceisavdDailabletoplainreadline().RSomeapplicationsneedtoin!terleaveGk!eybMoardF'I/OEwithF( le,ndevice,orwindo!wF'systemI/O,typicallyF(byusingamainF(loMoptoGselect()VonVvdDarious ledescriptors. TeoaccommoMdatethisneed,readlinecanalsobMeGin!voked=asa>`callbac!k'functionfromanevent>loMop.%bTherearefunctionsa!vdDailabletomakeGthisfeasye.2z[Feunction]G@voidLrl_callback_handler_instally(Aconstchar*prompt,DGrlFGvcpfuncFt*lhandler).SetuptheterminalforreadlineI/Oanddispla!ytheinitialexpandedvdDalueofprompt..Sa!vexHtcallbac!k>xHread>xHchar9(e.g.,5thestateof8anyactiveincrementalsearches).6UThisis.in!tendedtobMeusedb!yapplicationsthatwishtopMerformtheiro!wnsignalhandling;.Readline'sfin!ternalsignalhandlercallsthiswhenappropriate.z[Feunction]G@voidLrl_callback_handler_removey(Avoid).RestoreL)theL(terminaltoitsinitialstateandremo!vetheL)linehandler.%YeoumayL)call.thisfunctionfromwithinacallbac!kasw!ellasindepMenden!tlye.NIfthelhandlerinstalled.b!y 1rl_callback_handler_install 0doMesnotexittheprogram,*;eitherthisfunctionor.theMfunctionLreferredtob!ythevdDalueofrl_deprep_term_functionshouldbMecalled.bMeforeftheprogramexitstoresettheterminalsettings.+DGChapterf2:ProgrammingwithGNUReadlineʗ4333͍Gg2.4.13d(AMReadlineExample3GHere.is/afunctionwhic!hchanges/lowercasecharacterstotheir/uppMercaseequivdDalents,+and 33GuppMercase>c!haracterstolowercase.XIfthisfunctionwasbMoundto`M-c',dthentyping`M-c'Gw!ouldɳchangeɴthecaseofthec!haracterunderpMoin!t.GTypingɴ`M-1f0M-c'w!ouldɴchangetheGcasefofthefollo!wing10characters,leavingthecursoronthelastcharacterchanged.o./*InvertthecaseoftheCOUNTfollowingcharacters.*/.int.invert_case_line(count,key)Kintcount,key;.{:xregisterintstart,end,i;ff:xstart=rl_point;:xif(rl_point>=rl_end) 33EDreturn(0);:xif(count<0)ED{Qwdirection=-1;Qwcount=-count;ED}:xelseEDdirection=1;:x/*Findtheendoftherangetomodify.*/:xend=start+(count*direction);:x/*Forceittobewithinrange.*/:xif(end>rl_end)EDend=rl_end;:xelseif(end<0)EDend=0;:xif(start==end)EDreturn(0);:xif(start>end)ED{Qwinttemp=start;Qwstart=end;Qwend=temp;ED}:x/*Tellreadlinethatwearemodifyingtheline,Ksoitwillsavetheundoinformation.*/,VGChapterf2:ProgrammingwithGNUReadlineʗ4433͍:xrl_modifying(start,end);ff:xfor(i=start;i!=end;i++) 33ED{Qwif(_rl_uppercase_p(rl_line_buffer[i]))\rl_line_buffer[i]=_rl_to_lower(rl_line_buffer[i]);Qwelseif(_rl_lowercase_p(rl_line_buffer[i]))\rl_line_buffer[i]=_rl_to_upper(rl_line_buffer[i]);ED}:x/*Movepointtoontopofthelastcharacterchanged.*/:xrl_point=(direction==1)?end-1:start;:xreturn(0);.} эGg2.4.14d(AlternateMInterfaceExample3GHereisacompleteprogramthatillustratesReadline'salternatein!terface. ItreadslinesGfrom0theterminalanddispla!ysthem,providingthestandardhistoryandTeAB+completionGfunctions.ItfunderstandstheEOFc!haracteror"exit"toexittheprogram.@./*Standardincludefiles.stdio.hisrequired.*/.#include.#include.#include.#include./*Usedforselect(2)*/.#include.#include.#include.#include./*Standardreadlineincludefiles.*/.#include.#include.staticvoidcb_linehandler(char*);.staticvoidsighandler(int);.intrunning;.intsigwinch_received;.constchar*prompt="rltest$";./*HandleSIGWINCHandwindowsizechangeswhenreadlineisnotactiveandn @8readingacharacter.*/.staticvoid-\(GChapterf2:ProgrammingwithGNUReadlineʗ4533͍.sighandler(intsig) 33.{:xsigwinch_received=1;.}ff./*Callbackfunctioncalledforeachlinewhenaccept-lineexecuted,EOF@8seen,orEOFcharacterread. TThissetsaflagandreturns;itcould@8alsocallexit(3).*/.staticvoid.cb_linehandler(char*line).{:x/*Canuse^D(sttyeof)or`exit'toexit.*/:xif(line==NULL||strcmp(line,"exit")==0)ED{Qwif(line==0)\printf("\n");Qwprintf("exit\n");Qw/*Thisfunctionneedstobecalledtoresettheterminalsettings,n bandcallingitfromthelinehandlerkeepsoneextrapromptfromn bbeingdisplayed.*/Qwrl_callback_handler_remove();Qwrunning=0;ED}:xelseED{Qwif(*line)\add_history(line);Qwprintf("inputline:%s\n",line);Qwfree(line);ED}.}.int.main(intc,char**v).{:xfd_setfds;:xintr;:x/*Setthedefaultlocalevaluesaccordingtoenvironmentvariables.*/n :xsetlocale(LC_ALL,"");:x/*HandlewindowsizechangeswhenreadlineisnotactiveandreadingKcharacters.*/:xsignal(SIGWINCH,sighandler);:x/*Installthelinehandler.*/.cGChapterf2:ProgrammingwithGNUReadlineʗ4633͍:xrl_callback_handler_install(prompt,cb_linehandler);ff:x/*Enterasimpleeventloop. TThiswaitsuntilsomethingisavailable 33Ktoreadonreadline'sinputstream(defaultstostandardinput)andKcallsthebuiltincharacterreadcallbacktoreadit. TItdoesnotKhavetomodifytheuser'sterminalsettings.*/:xrunning=1;:xwhile(running)ED{QwFD_ZERO(&fds);QwFD_SET(fileno(rl_instream),&fds);Qwr=select(FD_SETSIZE,&fds,NULL,NULL,NULL);Qwif(r<0&&errno!=EINTR)\{hv@perror("rltest:select");hv@rl_callback_handler_remove();hv@break;\}Qwif(sigwinch_received).{:xrl_resize_terminal();:xsigwinch_received=0;.}Qwif(r<0).continue;Qwif(FD_ISSET(fileno(rl_instream),&fds))\rl_callback_read_char();ED}:xprintf("rltest:Eventloophasexited\n");:xreturn0;.}ȍG]2.5Readlinef@SignalHandling33GSignalsareasync!hronouseventssenttoaproMcessbytheUnixkernel,sometimesonbMehalfGof*anotherproMcess.jTheyarein!tended*toindicateexceptionalevents,Klike*auserpressingGthe 'in!terruptkeyonhisterminal,#oranetworkconnectionbMeingbroken. ThereisaclassGofusignalsuthatcanbMesen!ttotheproMcesscurren!tlyreadinginputfromthek!eybMoard.͐SinceGReadlineWc!hangesWtheterminalattributeswhenitiscalled,itneedstopMerformspecialGproMcessingOBwhenOAsuc!hasignalisreceiv!edinordertorestoretheterminaltoasanestate,`orGpro!videfapplicationwriterswithfunctionstodosomanuallye. !GReadlinecon!tainsaninternalsignalhandlerthatisinstalledforan!umbMerofsignalsG(SIGINT, SIGQUIT,SIGTERM, SIGHUP,SIGALRM,SIGTSTP,SIGTTIN,andvSIGTTOU).LWhenGone5Fofthesesignalsisreceiv!ed,Kthesignal5Ghandlerwillresettheterminalattributestothose/h獟GChapterf2:ProgrammingwithGNUReadlineʗ4733͍Gthat w!ereine ectbMeforereadline()w!ascalled,resetthesignalhandlingtowhatitw!as 33GbMefore4readline()4w!ascalled,KUandresendthesignaltothecallingapplication.IfandwhenGthe"calling!application'ssignalhandlerreturns,0ReadlinewillreinitializetheterminalandGcon!tinuedLtoacceptdMinput.WhenaSIGINTisreceiv!ed,qtheReadlinesignalhandlerpMerformsGsomeadditionalw!ork,whichwillcausean!ypartially-enteredlinetobMeaborted(seetheGdescriptionfofrl_free_line_state()bMelo!w).!GThereisanadditionalReadlinesignalhandler,forSIGWINCH,whic!hthekernelsendstoaGproMcessv`whenev!erv_theterminal'ssizec!hanges(forexample,ifauserresizesanxterm).TheGReadlineGtSIGWINCHhandlerGsupMdatesReadline'sin!ternalscreensizeinformation,oandthenGcallsan!ySIGWINCHsignalhandlerthecallingapplicationhasinstalled.ReadlinecallstheGapplication's;SIGWINCHsignal; handlerwithoutresettingtheterminaltoitsoriginalstate.GIf֫theapplication'ssignalhandlerdoMesmorethan֬updateitsideaoftheterminalsizeandGreturn(forexample,alongjmpbac!ktoamainproMcessingloop),itmustcallrl_cleanup_Gafter_signal()f(describMedbelo!w),torestoretheterminalstate. !GWhenanapplicationisusingthecallbac!kinterface(seeSection2.4.12[AlternateIn-Gterface],page(42),Readlineinstalls(signalhandlersonlyforthedurationofthecalltoGrl_callback_read_char.Applicationsݣusingtheݢcallbac!kinterfaceshouldbMepreparedtoGclean3upReadline's3stateiftheywishtohandlethesignalbMeforethelinehandlercompletesGandfrestorestheterminalstate.!GIfKanapplicationusingKthecallbac!kinterfacewishestohaveKReadlineinstallitssignalGhandlersatthetimetheapplicationcallsrl_callback_handler_installandremo!vethemGonly\whenacomplete[lineofinputhasbMeenread,^itshouldsettherl_persistent_signal_GhandlersqvdDariabletopanon-zerovalue.6Thisallo!wsanpapplicationtodeferallofthehandlingGof!the!signalsReadlinecatc!hestoReadline.ApplicationsshouldusethisvdDariablewithcare;Git(canresult)inReadlinecatc!hingsignalsandnotactingonthem(orallo!wingtheapplicationGto<reactto< them)un!tiltheapplicationcallsrl_callback_read_char.ThiscanresultinGanapplicationbMecominglessresponsiv!etokeybMoardsignalslikeSIGINT.IfanapplicationGdoMesnotw!antorneedtoperforman!ysignalhandling,ordoesnotneedtodoan!yprocessingGbMet!weenfcallstorl_callback_read_char,settingthisvdDariablema!ybedesirable.!GReadlineo#pro!videstwovdDariablesthatallowo"applicationwriterstocontrolwhetherornotGit.will/catc!hcertainsignalsandactonthemwhentheyarereceiv!ed.6ItisimpMortan!tthatGapplicationsfc!hangefthevdDaluesofthesevdDariablesonlywhencallingreadline(),notinaGsignalfhandler,soReadline'sin!ternalsignalstateisnotcorrupted. 3[Veariable]G@intLrl_catch_signals.Ifw*thisw)vdDariableisnon-zero,ReadlinewillinstallsignalhandlersforSIGINT,SIGQUIT,.SIGTERM,fSIGHUP,SIGALRM,SIGTSTP,SIGTTIN,andSIGTTOU..ThefdefaultvdDalueofrl_catch_signalsis1. 3[Veariable]G@intLrl_catch_sigwinch.IfTthisvdDariableissettoanon-zerovalue,Readlinewillinstallasignalhandlerfor.SIGWINCH..ThefdefaultvdDalueofrl_catch_sigwinchis1.0rGChapterf2:ProgrammingwithGNUReadlineʗ4833͍3[Veariable]G@intLrl_persistent_signal_handlers 33.If!an applicationusingthecallbac!kinterface wishesReadline'ssignalhandlerstobMe.installedzandactiv!eduringthesetzofcallstorl_callback_read_charthatconstitutes.anfen!tiresingleline,itshouldsetthisvdDariabletoanon-zerovalue.>.ThefdefaultvdDalueofrl_persistent_signal_handlersis0.aH3[Veariable]G@intLrl_change_environment.If2this1vdDariableissettoanon-zerovdDalue,eandReadlineishandlingSIGWINCH,dRead-.linewillmoMdifytheLINES?IandCOLUMNS?Hen!vironmentvdDariablesupMonreceiptofa.SIGWINCH=.ThefdefaultvdDalueofrl_change_environmentis1.aI!GIf0anapplication/doMesnotwishtoha!ve0Readlinecatc!hany/signals,orto0handlesignalsGotherthanthoseReadlinecatc!hes(SIGHUP,Zforexample),Readlinepro!videsconvenienceGfunctionsftodothenecessaryterminalandin!ternalstatecleanupupMonreceiptofasignal.z[Feunction]G@intLrl_pending_signaly(Avoid).ReturnItheIsignaln!umbMerofIthemostrecen!tsignalReadlinereceiv!edbuthasnoty!et.handled,for0ifthereisnopMendingsignal.z[Feunction]G@voidLrl_cleanup_after_signaly(Avoid).Thisfunctionwillresetthestateoftheterminaltowhatitw!asbMeforereadline().w!ascalled,~andremovetheReadlinesignalhandlersforallsignals,depMendingonthe.vdDaluesfofrl_catch_signalsandrl_catch_sigwinch.z[Feunction]G@voidLrl_free_line_statey(Avoid).Thiswillfree~an!ypartialstateassoMciatedwiththecurren!tinputline(undoinfor-.mation,z$an!ypartialhistoryentrye,z#anypartially-enteredkeybMoardmacro,z$andany.partially-en!terednumericargument). $*ThisshouldbMecalledbMeforerl_cleanup_.after_signal(). LThe Readlinesignalhandler forSIGINTcallsthistoabMortthe.curren!tfinputline.z[Feunction]G@voidLrl_reset_after_signaly(Avoid).Thiskwillreinitializetheterminalandreinstallkan!yReadlinesignalhandlers,wsdepMend-.ingfonthevdDaluesofrl_catch_signalsandrl_catch_sigwinch.aI!GIfanapplicationdoMesnotwishReadlinetocatc!hSIGWINCH, itmaycallrl_resize_Gterminal()Borrl_set_screen_size()toforceReadlinetoupMdateitsideaoftheterminalGsizefwhenaSIGWINCHisreceiv!ed.z[Feunction]G@voidLrl_echo_signal_chary(Aintsig).If;anapplicationwishestoinstallits;o!wnsignalhandlers,butstillhavereadline.displa!ycharactersthatgeneratesignals,gcallingthisfunctionwithsigsettoSIGINT,.SIGQUIT,forSIGTSTPwilldispla!ythecharactergeneratingthatsignal.z[Feunction]G@voidLrl_resize_terminaly(Avoid).UpMdatefReadline'sin!ternalscreensizebyreadingvdDaluesfromthekernel.1GChapterf2:ProgrammingwithGNUReadlineʗ4933͍z[Feunction]G@voidLrl_set_screen_sizey(Aintrows,intcols) 33.SetXReadline'sideaXoftheterminalsizetoro!wsGrowsXandcolscolumns.Ifeitherro!ws.or9columnsZislessthan9orequalto0,^Readline'sideaofthatterminaldimensionis.unc!hanged.ٍ!GIfanapplicationdoMesnotw!anttoinstallaSIGWINCHhandler,butisstillin!terestedinGthefscreendimensions,Readline'sideaofthescreensizema!ybMequeried.ڍz[Feunction]G@voidLrl_get_screen_sizey(Aint*rows,int*cols).ReturnGReadline'sideaofHtheterminal'ssizeinthevdDariablespMoin!tedtob!ytheargu-.men!ts.z[Feunction]G@voidLrl_reset_screen_sizey(Avoid).CausefReadlinetoreobtainthescreensizeandrecalculateitsdimensions.ڍ!GTheffollo!wingfunctionsinstallandremoveReadline'ssignalhandlers.z[Feunction]G@intLrl_set_signalsy(Avoid).InstallReadline'ssignalhandlerforSIGINT,SIGQUIT,SIGTERM,SIGHUP,SIGALRM,.SIGTSTP,aSIGTTIN,aSIGTTOU,andxHtkey.Itisolates'the,w!ordtobMecompletedandcalls+rl_completion_matches()togeneratealistof'pMossible?completions.iIt@theneitherliststhepMossiblecompletions,insertsthepMossible'completions,ormactuallym pMerformsthecompletion,depMendingmonwhic!hbeha!vioris'desired.\-2.'Thein!ternalfunctionrl_completion_matches()usesanapplication-suppliedgener-'ator:yfunctionqQtoqPgeneratethelistofpMossiblematc!hes, andthenreturnsthearra!yof2jGChapterf2:ProgrammingwithGNUReadlineʗ5033͍'these>matc!hes.fThecallershouldplacetheaddressofits?generatorfunctioninrl_ 33'completion_entry_function.w-3.'ThegeneratorfunctioniscalledrepMeatedlyfromrl_completion_matches(),Lreturning'anstringeac!htime.Theargumentstoothegeneratorfunctionaretext+nandstate.text'isthepartialw!ordtobMecompleted.xRstateviszerothe rsttimethefunctioniscalled,'allo!wingG2thegeneratortoG3pMerformanynecessaryinitialization,eandapMositivenon-'zeroin!tegerforeachsubsequentcall.ћThegeneratorfunctionreturns(charf*)NULLto'informrl_completion_matches()thattherearenomorepMossibilitiesleft.Usually'the^generatorfunctioncomputesthelistof]pMossiblecompletionswhenstateDeiszero,'andjreturnskthemoneatatimeonsubsequen!tcalls.Eachstringjthegeneratorfunction'returnsԨasamatc!hmustbMeallocatedwithmalloc();Readlinefreesthestringswhen'ithas nishedwiththem.TSuc!hageneratorfunctionisreferredtoasanapplication-'spMeci cfcompletionfunction.Bɍz[Feunction]G@intLrl_completey(Aintignore,intinvokingFGkey).Completetthesw!ordatorbMeforepoin!t.YeouhavesuppliedsthefunctionthatdoMesthe.initialsimplematc!hingselectionalgorithm(seerl_completion_matches()).wThe.defaultfistodo lenamecompletion.3[Veariable]G@rl_compentry_func_tL*rl_completion_entry_function.ThisJisIapMoin!tertothegeneratorfunctionforrl_completion_matches().OIfthe.vdDalueofrl_completion_entry_functionisNULLthenthedefault lenamegenerator.function,rl_filename_completion_function(),isgused. !Anapplication-spMeci c.completionfunctionisafunctionwhoseaddressisassignedtorl_completion_entry_.functionfandwhosereturnvdDaluesareusedtogeneratepMossiblecompletions.̍Gg2.6.2d(CompletionMFģunctions3GHerefisthecompletelistofcallablecompletionfunctionspresen!tinReadline.z[Feunction]G@intLrl_complete_internaly(AintwhatFGtoFdo).Completefthew!ordfatorbMeforepoin!t.what>xHtto>xHdosaysfwhatftodowiththecom-.pletion.(AcvdDaluejof`?'meanslistthepMossiblecompletions.(`TAB'meansdostandard.completion.&'`*'~meansinsertallofthepMossiblecompletions.&'`!'meanstodispla!yall.of!)thepMossiblecompletions,?ifthereis!*morethanone,?asw!ellaspMerformingpartial.completion.*`@'GMisGNsimilarto`!',ZRbutpMossiblecompletionsarenotlistedifthepMossible.completionsfshareacommonpre x.Bʍz[Feunction]G@intLrl_completey(Aintignore,intinvokingFGkey).Completethew!ordatorbMeforepoin!t.aYeouhavesuppliedthefunctionthatdoMes.theinitialsimplematc!hingselectionalgorithm(seerl_completion_matches()and.rl_completion_entry_function).XTheNdefaultNistodo lenamecompletion.XThis.callsfrl_complete_internal()withanargumen!tdepMendingoninvoking>xHtkey.z[Feunction]G@intLrl_possible_completionsy(Aintcount,intinvokingFGkey).ListthepMossiblecompletions.Seedescriptionofrl_completef().Thiscallsrl_.complete_internal()fwithanargumen!tof`?'.3 GChapterf2:ProgrammingwithGNUReadlineʗ5133͍z[Feunction]G@intLrl_insert_completionsy(Aintcount,intinvokingFGkey) 33.Insert the listofpMossiblecompletionsin!totheline,"deletingthepartially-completed.w!ord.WSeedescriptionofrl_complete().Thiscallsrl_complete_internal()with.anfargumen!tof`*'.|z[Feunction]G@intLrl_completion_modey(ArlFGcommandFfuncFt*cfunc).ReturnstheappropriatevdDaluetopasstorl_complete_internal()depMendingon.whetherxcfunc{w!ascalledwtwiceinwsuccessionandthevdDaluesoftheshow-all-if-.ambiguousOandOshow-all-if-unmodifiedvdDariables.Application-spMeci ccompletion.functionsfma!yusethisfunctiontopresentthesameinterfaceasrl_complete().z[Feunction]G@charL**rl_completion_matchesy(Aconstchar*text,DGrlFGcompUVentryFfuncFt*entryFfunc).Returns^an]arra!yofstringswhich]isalistofcompletionsfortext.Ifthereareno.completions,C;returns#NULL.VCThe# rsten!tryinthereturnedarra!yisthesubstitution.for)Gtext.(Theremainingen!triesarethepMossiblecompletions.Thearra!yisterminated.withfaNULLpMoin!ter..en!try>xHtfunchoislakfunctionoft!woargs,mandreturnsalcharf*.%The rstargumen!tis.text.Thedsecondisastateeargumen!t;#bitiszeroonthe rstcall,andnon-zeroon.subsequen!t~calls.#entry>xHtfuncreturnsa}NULLpMointer}tothecallerwhenthereareno.morefmatc!hes.{z[Feunction]G@charL*rl_filename_completion_functiony(Aconstchar*text,intDGstate).Ageneratorfunctionfor lenamecompletioninthegeneralcase.textPisapartial le-.name.UTheBashsourceisausefulreferenceforwritingapplication-spMeci ccompletion.functionsf(theBashcompletionfunctionscallthisandotherReadlinefunctions).z[Feunction]G@charL*rl_username_completion_functiony(Aconstchar*text,intDGstate).Al&completionl4generatorl5forusernames.xtext4con!tainsapartialusernameprecededb!y.arandomc!haracter(usually`~').Aswithallcompletiongenerators,stateHiszeroon.thef rstcallandnon-zeroforsubsequen!tcalls.Gg2.6.3d(CompletionMVģariables^3[Veariable]G@rl_compentry_func_tL*rl_completion_entry_function.A{pMoin!tertothegeneratorfunctionforrl_completion_matches().dNULLmeansto.usefrl_filename_completion_function(),thedefault lenamecompleter.3[Veariable]G@rl_completion_func_tL*rl_attempted_completion_function.A,pMoin!ter,to,analternative,functiontocreatematc!hes.pThefunctioniscalledwith.text,start,and end.qstart andend/rareindicesinrl_line_bufferde ningthebMound-.ariesoftext,9\whic!hisac!haracterstring.nIfthisfunctionexistsandreturnsNULL,9]orif.thisvdDariableissettoNULL,thenrl_complete()willcallthevdDalueofrl_completion_.entry_functionhtohgeneratematc!hes,u)otherwisethearra!yofstringsreturnedwillbMe.used.tIf,this+functionsetstherl_attempted_completion_overvdDariabletoanon-zero.vdDalue,-ReadlinewillnotpMerformitsdefaultcompletionev!enifthisfunctionreturns.nofmatc!hes.4)GChapterf2:ProgrammingwithGNUReadlineʗ5233͍3[Veariable]G@rl_quote_func_tL*rl_filename_quoting_function 33.ApMoin!tertoafunctionthatwillquotea lenameinanapplication-spMeci cfashion..ThisKiscalledif lenamecompletionisJbMeingattemptedandoneofthec!haracters.inrl_filename_quote_charactersappMearsinacompleted lename.`Thefunction.ismPcalledwithmQtext, matc!h>xHttypMe, andmPquote>xHpoin!ter.2ThemPtextPisthemQ lenametobMe.quoted. (TThematc!h>xHttypMeiseitherSINGLE_MATCH,pifthereisonlyonecompletion.matc!h,̂orMULT_MATCH.9SSomefunctionsusethistodecidewhetherornottoinserta.closingquotec!haracter.{Thequote>xHtpMointerIisapMointertoanyopMeningquotecharacter.thefusert!ypMed.SomefunctionschoMosetoresetthischaracter.353[Veariable]G@rl_dequote_func_tL*rl_filename_dequoting_function.ApMoin!tertoafunctionthatwillremo!veapplication-spMeci cquotingc!haractersfrom.a lenamebMeforecompletionisattempted,sothosec!haractersdonotinterferewith.matc!hingthetextagainstnamesinthe lesystem.NItiscalledwithtext,@thetext.ofxthew!ordtowbMedequoted,m|andquote>xHtchar,m|whichiswthequotingcharacterthat.delimits>the lename?(usually`''or`"').fIfquote>xHtc!hargiszero,the lenamew!asnot.infanem!bMeddedstring.3[Veariable]G@rl_linebuf_func_tL*rl_char_is_quoted_p.AkpMoin!terl2toafunctiontocallthatdetermineswhetherornotaspeci cc!haracter.in#^theline#_bu erisquoted,Baccordingtowhatev!erquotingmec!hanismtheprogram.callingReadlineuses.Thefunctioniscalledwitht!woarguments:text, thetextofthe.line,andindex,theindexofthec!haracterintheline.!Itisusedtodecidewhethera.c!haracterFfoundEinrl_completer_word_break_charactersshouldbMeusedtobreak.w!ordsfforthecompleter.343[Veariable]G@rl_compignore_func_tL*rl_ignore_some_completions_function.Thishfunction,hifde ned,iiscalledb!ythecompleterwhenreal lenamecompletion.isdone,1afterallthematc!hingnamesha!vebMeengenerated.+ItispassedaNULLter-.minatedZarra!yYofmatches.The rstelementY(matches[0])isthemaximalsubstring.commontEtotFallmatc!hes.(Thisfunctioncanre-arrangethelistofmatc!hesasrequired,.butfeac!helementdeletedfromthearraymustbMefreed.3[Veariable]G@rl_icppfunc_tL*rl_directory_completion_hook.ThisqAfunction,ifde ned,isallo!wedq@toqAmoMdifythedirectorypMortionof lenames.Readline0completes.} It0couldbMeusedtoexpandsym!bMoliclinksorshellvdDariablesin.pathnames.tItwisxcalledwiththeaddressofastring(thecurren!tdirectoryname).as6anargumen!t,andmaymoMdifythatstring.zMIfthestringisreplacedwithanew.string,UtheYoldvdDalueshouldbMefreed.ŶAn!yXmodi eddirectorynameshouldha!veYa.trailing2slash.ThemoMdi edvdDalue2willbeusedas2partofthecompletion,Ureplacing.the}directory~pMortionofthepathnametheusert!ypMed.S#Atthe}least,Devenif~noother.expansionEQispMerformed,m thisfunctionshouldremo!veEQanyERquotecharactersfromthe.directoryfname,bMecauseitsresultwillbepasseddirectlytoopendir().34.ThedirectorycompletionhoMokreturnsanin!tegerthatshouldbMenon-zeroifthefunc-.tionmoMdi esitsdirectoryargumen!t.;ThefunctionshouldnotmoMdifythedirectory.argumen!tfifitreturns0.5QGChapterf2:ProgrammingwithGNUReadlineʗ5333͍3[Veariable]G@rl_icppfunc_tL*rl_directory_rewrite_hook; 33.Ifnon-zero,dthisistheaddressofafunctiontocallwhencompletingadirectoryname..This2}functiontak!esthe2~addressofthedirectorynametobMemodi ed2}asanargumen!t..Unlik!erl_directory_completion_hook,itonlymoMdi esthedirectorynameused.in>opendir,enotwhatisdispla!yed>when>thepMossiblecompletionsareprin!tedorin-.serted.NIt&is&calledbMeforerl>xHtdirectory>xHcompletion>xHhook.NA!t&the&least,@Bevenif&noother.expansionEQispMerformed,m thisfunctionshouldremo!veEQanyERquotecharactersfromthe.directoryfname,bMecauseitsresultwillbepasseddirectlytoopendir().Q.The*directory+rewritehoMokreturnsanin!tegerthatshouldbMenon-zeroifthefunc-.tionVmoMd esitsdirectoryargumen!t.addressofafunctionforthecompletertocallbMeforedeciding.whic!hcharactertoappMendtoacompletedname.ThisfunctionmoMdi esits lename.nameFargumen!t,mandthemoMdi edvdDalueispassedtostat()todeterminethe le's.t!ypMe:andcharacteristics.YThisfunction;doMesnotneedtoremovequotecharacters.fromfthe lename..ThestathoMokreturnsanin!tegerthatshouldbMenon-zeroifthefunctionmoMd esits.directoryeargumen!t.ThefunctionfshouldnotmoMdifythedirectoryargumen!tifit.returnsf0.3[Veariable]G@rl_dequote_func_tL*rl_filename_rewrite_hook.If non-zero,thisistheaddressofafunctioncalledwhenreadingdirectoryen!tries.fromthe lesystemforcompletionandcomparingthemtothepartialw!ordtobMe.completed.zThe?>function?=shouldpMerforman!ynecessaryapplicationorsystem-spMeci c.con!versiononthe lename,9$suc!hascon!vertingbMetweencharactersetsorcon!verting.froma lesystemformattoac!haracterinputformat.8Thefunctiontak!estwoargu-.men!ts:Rfname,Cthe$! lename$ tobMecon!verted,Cand$!fnlen,itslength$ inb!ytes.W Itmust.eitherȊreturnits rstargumen!t(ifnoȋconversiontakesplace)ortheconverted lename.indnewly-alloMcatedmemorye.Thedcon!verteddformisusedtocompareagainstthew!ord.toBbMeBcompleted,Vand,ifitBmatc!hes,isaddedBtothelistofmatc!hes.Readlinewillfree.thefalloMcatedstring.3[Veariable]G@rl_compdisp_func_tL*rl_completion_display_matches_hook.Ifxnon-zero,Athenthisistheaddressofafunctiontocallwhencompletingaw!ordwould.normallydispla!ythelistofpMossiblematc!hes.MThisfunctioniscalledinlieuofReadline.displa!yings7thelist.DPIts8takesthreearguments:w(charf**matches,kintnum>xHtmatches,.int-max>xHtlength)-wherematc!hesisthearra!yofmatc!hingstrings,EUnum>xHtmatchesisthe.n!umbMeracofabstringsinthatarra!ye,!andmax>xHtlengthisthelengthofthelongeststring.inthatarra!ye.Readlineprovidesaconveniencefunction,rl_display_match_list,.that\tak!es[careofdoingthedispla!ytoReadline'soutputstream.pYeouma!ycallthat.functionffromthishoMok.3[Veariable]G@constLchar*rl_basic_word_break_characters.TheOobasiclistofc!haractersthatsignalOnabreakbMetweenwordsforthecompleter.routine.MThev[defaultvdDalueofthisv\variableisthec!haracterswhichbreakwordsfor.completionfinBash:"\t\n\"\\'`@$><=;|&{(".6ОGChapterf2:ProgrammingwithGNUReadlineʗ5433͍3[Veariable]G@constLchar*rl_basic_quote_characters 33.Aflistofquotec!haracterswhichcancauseawordbreak.fg3[Veariable]G@constLchar*rl_completer_word_break_characters.Thelistofc!haractersthatsignal~abreakbMetweenwordsforrl_complete_.internal().ThefdefaultlististhevdDalueofrl_basic_word_break_characters.3[Veariable]G@rl_cpvfunc_tL*rl_completion_word_break_hook.Ifnon-zero,ьthisistheaddressofafunctiontocallwhenReadlineisdecidingwhere.toseparatew!ordsforwordcompletion.FItshouldreturnacharacterstringlikerl_.completer_word_break_characterstobMeusedtoperformthecurren!tcompletion..TheMfunctionma!yLchoMoseMtosetrl_completer_word_break_charactersitself.Ifthe.functionfreturnsNULL,rl_completer_word_break_charactersisused.3[Veariable]G@constLchar*rl_completer_quote_characters.A Clist ^ofc!haracters ]which ^canbMeusedtoquoteasubstringoftheline.Completion.oMccurs&on&theen!tiresubstring,@8andwithinthesubstringrl_completer_word_break_.characters8\are8[treatedasan!yotherc!haracter,\unlesstheyalsoappMearwithinthis.list.fh3[Veariable]G@constLchar*rl_filename_quote_characters.A ]list vof wc!haractersthatcausea lenametobMequotedb!ythecompleterwhenthey.appMearfinacompleted lename.Thedefaultisthen!ullstring.3[Veariable]G@constLchar*rl_special_prefixes.TheSlistSofc!haractersthatarew!ordbreakcharacters,d8butSshouldbMeleftintextwhen.itispassedtothecompletionfunction.Programscanusethistohelpdeterminewhat.kindUofUcompletingtodo. Feorinstance,fBashsetsthisvdDariableto"$@"sothatitcan.completefshellvdDariablesandhostnames.3[Veariable]G@intLrl_completion_query_items.UpYAtothisman!yitemswillbMedisplayedinrespMonsetoapossible-completionscall..AfterVthat,f&readlineasksVtheuserifsheissureshew!antsVtoseethemall.Thedefault.vdDaluefis100.Anegativ!evalueindicatesthatReadlineshouldnev!erasktheuser.3[Veariable]G@intLrl_completion_append_character.Whenasinglecompletionalternativ!ematchesattheendofthecommandline,this.c!haracter?isappMendedtotheinsertedcompletiontext.Thedefaultisaspacecharacter.(`f'). FSettingsthistothesn!ullcharacter(`\0')preventssanythingbMeingappended.automaticallye.ThiscanbMec!hangedinapplication-speci ccompletionfunctionsto.pro!videthe\mostsensiblew!ordseparatorcharacter"accordingtoanapplication-.spMeci cfcommandlinesyn!taxspeci cation.3[Veariable]G@intLrl_completion_suppress_append.Ifnon-zero,rl>xHtcompletion>xHappMend>xHc!haracterisnotappMendedtomatc!hesattheend.ofOthecommandOline,`asdescribMedabo!ve.ItOissetto0Obeforean!yapplication-speci c.completionffunctioniscalled,andma!yonlybMechangedwithinsuchafunction.7*GChapterf2:ProgrammingwithGNUReadlineʗ5533͍3[Veariable]G@intLrl_completion_quote_character 33.WhenX;ReadlineisX:completingquotedtext,asdelimitedb!yoneofthec!haractersin.rl>xHtcompleter>xHquote>xHc!haracters,CitsetsthisvdDariabletothequotingc!haracterfound..ThisfissetbMeforean!yapplication-speci ccompletionfunctioniscalled.3[Veariable]G@intLrl_completion_suppress_quote.IfDnon-zero,ReadlineCdoMesnotappMendamatc!hingquotec!haracterwhenpMerforming.completionGonFaquotedstring.~Itissetto0bMeforean!yapplication-spMeci ccompletion.functionfiscalled,andma!yonlybMechangedwithinsuchafunction.3[Veariable]G@intLrl_completion_found_quote.WhenReadlineiscompletingquotedtext,֟itsetsthisvdDariabletoanon-zerovdDalueif.thew!ordbMeingcompletedcontainsorisdelimitedbyanyquotingcharacters,including.bac!kslashes.ThisfissetbMeforeanyapplication-spMeci ccompletionfunctioniscalled.3[Veariable]G@intLrl_completion_mark_symlink_dirs.Ifѧnon-zero,waslashwillbMeappendedtocompleted lenamesthataresym!boliclinks.tordirectorysnames, subjecttothevdDalueoftheuser-settablemark-directoriesYvdDariable..ThisImvdDariableexistssothatapplication-spMeci ccompletionfunctionscano!verrideImthe.user'sglobalpreference(setviathemark-symlink!ed-directoriesReadlinevdDariable).ifappropriate.vThisvdDariableissettotheuser'spreferencebMeforean!yapplication-.spMeci ccompletionfunctioniscalled,sounlessthatfunctionmoMdi esthevdDalue,the.user'sfpreferencesarehonored.3[Veariable]G@intLrl_ignore_completion_duplicates.Iffnon-zero,thenduplicatesinthematc!hesareremoved.Thedefaultis1.3[Veariable]G@intLrl_filename_completion_desired.Non-zeromeansthat theresultsofthematc!hesaretobMetreatedas lenames.]This.is'always?zero(whencompletionisattempted,andcanonlybMec!hangedwithinan.application-spMeci ccompletionfunction.!Ifitissettoanon-zerovdDalueb!ysucha.function,directory namesha!ve a slashappMendedandReadlineattemptstoquotecom-.pleted6 lenamesifthey6!con!tainanycharactersinrl_filename_quote_characters.andfrl_filename_quoting_desiredissettoanon-zerovdDalue.3[Veariable]G@intLrl_filename_quoting_desired.Non-zero^nmeansthatthe^mresultsofthematc!hesaretobMequotedusingdoublequotes.(or8anapplication-spMeci cquotingmec!hanism)7ifthecompleted lenamecontains.an!yQJcharactersQIinrl_filename_quote_chars.~Thisisalways7bnon-zerowhencomple-.tionQ isQattempted,bandcanonlybMec!hangedwithinanapplication-spMeci ccompletion.function.}Thequotingise ectedviaacalltothefunctionpMoin!tedtob!yrl_filename_.quoting_function.3[Veariable]G@intLrl_attempted_completion_over.If Oanapplication-spMeci ccompletion Ofunctionassignedtorl_attempted_.completion_functionbsetsbthisvdDariabletoanon-zerovdDalue,Readlinewillnot.pMerformitsdefault lenamecompletionev!eniftheapplication'scompletionfunction.returnsfnomatc!hes.ItshouldbMesetonlybyanapplication'scompletionfunction.8鍟GChapterf2:ProgrammingwithGNUReadlineʗ5633͍3[Veariable]G@intLrl_sort_completion_matches 33.IfanapplicationsetsthisvdDariableto0,WReadlinewillnotsortthelistofcompletions.(whic!himpliesthatitcannotremoveanyduplicatecompletions).ThedefaultvdDalueis.1,whic!hmeansthatReadlinewillsortthecompletionsand,depMendingonthevdDalue.offrl_ignore_completion_duplicates,willattempttoremo!vefduplicatematc!hes.333[Veariable]G@intLrl_completion_type.Set61to62ac!haracterdescribingthet!ypMeofcompletionReadlineiscurren!tlyattempt-.ing;.qseethedescriptionofrl_complete_internal()(seeSection2.6.2[Completion.Feunctions],%pageg50)forthelistofc!haracters."ThisissettotheappropriatevdDalue.bMefore͡an!y͠application-speci ccompletionfunctionis͠called,pallo!wingsuch͡functions.tofpresen!tthesameinterfaceasrl_complete().3[Veariable]G@intLrl_completion_invoking_key.SetRtoQthe nalc!haracterinthek!eysequencethatin!vokedoneRofthecompletion.functionsthatcallrl_complete_internal().o(ThisissettotheappropriatevdDalue.bMeforefan!yapplication-speci ccompletionfunctioniscalled.3[Veariable]G@intLrl_inhibit_completion.Ifd`thisdavdDariableisnon-zero,qcompletionisinhibited.Thecompletionc!haracterwillbMe.insertedfasan!yotherbMoundtoself-insert.Gg2.6.4d(AMShortCompletionExample3GHere}aisa}`smallapplicationdemonstratingtheuseoftheGNU}VReadlinelibrarye.0ItiscalledGfileman, 0andthesourcecoMderesidesinexamples/fileman.c.6)ThissampleapplicationGpro!vides#completionof#commandnames,>lineeditingfeatures,andaccessto#thehistorylist.9GChapterf2:ProgrammingwithGNUReadlineʗ5733͍./*fileman.c--Atinyapplicationwhichdemonstrateshowtousethe =&^GNUReadlinelibrary. s,Thisapplicationinteractivelyallowsusers=&^tomanipulatefilesandtheirmodes.*/.#ifdefHAVE_CONFIG_H.# s,include.#endif.#include.#ifdefHAVE_SYS_FILE_H.# s,include.#endif.#include.#ifdefHAVE_UNISTD_H.# s,include.#endif.#include.#include.#include.#ifdefined(HAVE_STRING_H).# s,include.#else/*!HAVE_STRING_H*/.# s,include.#endif/*!HAVE_STRING_H*/.#ifdefHAVE_STDLIB_H.# s,include.#endif.#include.#include.#include.externchar*xmallocPARAMS((size_t));./*Thenamesoffunctionsthatactuallydothemanipulation.*/.intcom_listPARAMS((char*));.intcom_viewPARAMS((char*));.intcom_renamePARAMS((char*));.intcom_statPARAMS((char*));.intcom_pwdPARAMS((char*));.intcom_deletePARAMS((char*));.intcom_helpPARAMS((char*));.intcom_cdPARAMS((char*));.intcom_quitPARAMS((char*));./*Astructurewhichcontainsinformationonthecommandsthisprogram=&^canunderstand.*/.typedefstruct{8lchar*name;/*Userprintablenameofthefunction.*/8lrl_icpfunc_t*func;/*Functiontocalltodothejob.*/8lchar*doc;/*Documentationforthisfunction. s,*/.}COMMAND;: GChapterf2:ProgrammingwithGNUReadlineʗ5833L͍.COMMANDcommands[]={ 8l{"cd",com_cd,"ChangetodirectoryDIR"},8l{"delete",com_delete,"DeleteFILE"},8l{"help",com_help,"Displaythistext"},8l{"?",com_help,"Synonymfor`help'"},8l{"list",com_list,"ListfilesinDIR"},8l{"ls",com_list,"Synonymfor`list'"},8l{"pwd",com_pwd,"Printthecurrentworkingdirectory"},8l{"quit",com_quit,"QuitusingFileman"},8l{"rename",com_rename,"RenameFILEtoNEWNAME"},8l{"stat",com_stat,"PrintoutstatisticsonFILE"},8l{"view",com_view,"ViewthecontentsofFILE"},8l{(char*)NULL,(rl_icpfunc_t*)NULL,(char*)NULL}.};./*Forwarddeclarations.*/.char*stripwhite();.COMMAND*find_command();./*Thenameofthisprogram,astakenfromargv[0].*/.char*progname;./*Whennon-zero,thisglobalmeanstheuserisdoneusingthisprogram.*/.intdone;.char*.dupstr(s)Fchar*s;.{8lchar*r;8lr=xmalloc(strlen(s)+1);8lstrcpy(r,s);8lreturn(r);.}.main(argc,argv)Fintargc;Fchar**argv;.{8lchar*line,*s;8lprogname=argv[0];8linitialize_readline();/*Bindourcompleter.*/8l/*Loopreadingandexecutinglinesuntiltheuserquits.*/8lfor(;done==0;)A{KS line=readline("FileMan:");KS if(!line)TLbreak;KS /*Removeleadingandtrailingwhitespacefromtheline.YThen,ifthereisanythingleft,addittothehistorylistYandexecuteit.*/;GChapterf2:ProgrammingwithGNUReadlineʗ5933͍KS s=stripwhite(line);KS if(*s) TL{^9xadd_history(s);^9xexecute_line(s);TL}KS free(line);A}8lexit(0);.}./*Executeacommandline.*/.int.execute_line(line)Fchar*line;.{8lregisterinti;8lCOMMAND*command;8lchar*word;8l/*Isolatethecommandword.*/8li=0;8lwhile(line[i]&&whitespace(line[i]))Ai++;8lword=line+i;8lwhile(line[i]&&!whitespace(line[i]))Ai++;8lif(line[i])Aline[i++]='\0';8lcommand=find_command(word);8lif(!command)A{KS fprintf(stderr,"%s:NosuchcommandforFileMan.\n",word);KS return(-1);A}8l/*Getargumenttocommand,ifany.*/8lwhile(whitespace(line[i]))Ai++;8lword=line+i;8l/*Callthefunction.*/8lreturn((*(command->func))(word));.}./*LookupNAMEasthenameofacommand,andreturnapointertothat=&^command. s,ReturnaNULLpointerifNAMEisn'tacommandname.*/.COMMAND*.find_command(name)Fchar*name;.{<ōGChapterf2:ProgrammingwithGNUReadlineʗ6033͍8lregisterinti;8lfor(i=0;commands[i].name;i++) Aif(strcmp(name,commands[i].name)==0)KS return(&commands[i]);8lreturn((COMMAND*)NULL);.}./*StripwhitespacefromthestartandendofSTRING. s,Returnapointer=&^intoSTRING.*/.char*.stripwhite(string)Fchar*string;.{8lregisterchar*s,*t;8lfor(s=string;whitespace(*s);s++)A;8lif(*s==0)Areturn(s);8lt=s+strlen(s)-1;8lwhile(t>s&&whitespace(*t))At--;8l*++t='\0';8lreturns;.}./******************************************************************/./*7ج*/./*U InterfacetoReadlineCompletionK`*/./*7ج*/./******************************************************************/.char*command_generatorPARAMS((constchar*,int));.char**fileman_completionPARAMS((constchar*,int,int));./*TelltheGNUReadlinelibraryhowtocomplete. s,Wewanttotrytocomplete=&^oncommandnamesifthisisthefirstwordintheline,oronfilenames=&^ifnot.*/.initialize_readline().{8l/*Allowconditionalparsingofthe~/.inputrcfile.*/8lrl_readline_name="FileMan";8l/*Tellthecompleterthatwewantacrackfirst.*/8lrl_attempted_completion_function=fileman_completion;.}./*AttempttocompleteonthecontentsofTEXT. s,STARTandENDboundthe=&^regionofrl_line_bufferthatcontainsthewordtocomplete. s,TEXTis=&^thewordtocomplete. s,Wecanusetheentirecontentsofrl_line_buffer=&^incasewewanttodosomesimpleparsing. s,Returnthearrayofmatches,=&^orNULLiftherearen'tany.*/.char**=GChapterf2:ProgrammingwithGNUReadlineʗ6133͍.fileman_completion(text,start,end) Fconstchar*text;Fintstart,end;.{8lchar**matches;8lmatches=(char**)NULL;8l/*Ifthiswordisatthestartoftheline,thenitisacommand Ftocomplete. s,OtherwiseitisthenameofafileinthecurrentFdirectory.*/8lif(start==0)Amatches=rl_completion_matches(text,command_generator);8lreturn(matches);.}./*Generatorfunctionforcommandcompletion. s,STATEletsusknowwhether=&^tostartfromscratch;withoutanystate(i.e.STATE==0),thenwe=&^startatthetopofthelist.*/.char*.command_generator(text,state)Fconstchar*text;Fintstate;.{8lstaticintlist_index,len;8lchar*name;8l/*Ifthisisanewwordtocomplete,initializenow. s,ThisincludesFsavingthelengthofTEXTforefficiency,andinitializingtheindexFvariableto0.*/8lif(!state)A{KS list_index=0;KS len=strlen(text);A}8l/*Returnthenextnamewhichpartiallymatchesfromthecommandlist.*/8lwhile(name=commands[list_index].name)A{KS list_index++;KS if(strncmp(name,text,len)==0)TLreturn(dupstr(name));A}8l/*Ifnonamesmatched,thenreturnNULL.*/8lreturn((char*)NULL);.}./******************************************************************/./*7ج*/./*lzFileManCommands*/./*7ج*/./******************************************************************/./*Stringtopasstosystem(). s,ThisisfortheLIST,VIEWandRENAME=&^commands.*/>$덟GChapterf2:ProgrammingwithGNUReadlineʗ6233͍.staticcharsyscom[1024];./*Listthefile(s)namedinarg.*/ .com_list(arg)Fchar*arg;.{8lif(!arg)Aarg="";8lsprintf(syscom,"ls-FClg%s",arg);8lreturn(system(syscom));.}.com_view(arg)Fchar*arg;.{8lif(!valid_argument("view",arg))Areturn1;.#ifdefined(__MSDOS__)8l/*more.comdoesn'tgrokslashesinpathnames*/8lsprintf(syscom,"less%s",arg);.#else8lsprintf(syscom,"more%s",arg);.#endif8lreturn(system(syscom));.}.com_rename(arg)Fchar*arg;.{8ltoo_dangerous("rename");8lreturn(1);.}.com_stat(arg)Fchar*arg;.{8lstructstatfinfo;8lif(!valid_argument("stat",arg))Areturn(1);8lif(stat(arg,&finfo)==-1)A{KS perror(arg);KS return(1);A}8lprintf("Statisticsfor`%s':\n",arg);8lprintf("%shas%dlink%s,andis%dbyte%sinlength.\n",8larg,^9xfinfo.st_nlink,^9x(finfo.st_nlink==1)?"":"s",^9xfinfo.st_size,^9x(finfo.st_size==1)?"":"s");8lprintf("InodeLastChangeat:%s",ctime(&finfo.st_ctime));?,uGChapterf2:ProgrammingwithGNUReadlineʗ6333͍8lprintf("YLastaccessat:%s",ctime(&finfo.st_atime)); 8lprintf("XLastmodifiedat:%s",ctime(&finfo.st_mtime));8lreturn(0);.}.com_delete(arg)Fchar*arg;.{8ltoo_dangerous("delete");8lreturn(1);.}./*PrintouthelpforARG,orforallofthecommandsifARGis=&^notpresent.*/.com_help(arg)Fchar*arg;.{8lregisterinti;8lintprinted=0;8lfor(i=0;commands[i].name;i++)A{KS if(!*arg||(strcmp(arg,commands[i].name)==0))TL{^9xprintf("%s\t\t%s.\n",commands[i].name,commands[i].doc);^9xprinted++;TL}A}8lif(!printed)A{KS printf("Nocommandsmatch`%s'. s,Possibiltiesare:\n",arg);KS for(i=0;commands[i].name;i++)TL{^9x/*Printinsixcolumns.*/^9xif(printed==6)g{qprinted=0;qprintf("\n");g}^9xprintf("%s\t",commands[i].name);^9xprinted++;TL}KS if(printed)TLprintf("\n");A}8lreturn(0);.}./*ChangetothedirectoryARG.*/.com_cd(arg)Fchar*arg;.{8lif(chdir(arg)==-1)A{@2GChapterf2:ProgrammingwithGNUReadlineʗ6433͍KS perror(arg); KS return1;A}8lcom_pwd("");8lreturn(0);.}./*Printoutthecurrentworkingdirectory.*/.com_pwd(ignore)Fchar*ignore;.{8lchardir[1024],*s;8ls=getcwd(dir,sizeof(dir)-1);8lif(s==0)A{KS printf("Errorgettingpwd:%s\n",dir);KS return1;A}8lprintf("Currentdirectoryis%s\n",dir);8lreturn0;.}./*Theuserwishestoquitusingthisprogram. s,JustsetDONEnon-zero.*/.com_quit(arg)Fchar*arg;.{8ldone=1;8lreturn(0);.}./*Functionwhichtellsyouthatyoucan'tdothis.*/.too_dangerous(caller)Fchar*caller;.{8lfprintf(stderr,b"%s:Toodangerousformetodistribute. s,Writeityourself.\n",bcaller);.}./*Returnnon-zeroifARGisavalidargumentforCALLER,elseprint=&^anerrormessageandreturnzero.*/.int.valid_argument(caller,arg)Fchar*caller,*arg;.{8lif(!arg||!*arg)A{KS fprintf(stderr,"%s:Argumentrequired.\n",caller);KS return(0);A}8lreturn(1);.}A76533͍GTApp=endixzA QGNUzFaGreeDocumenutationLicenseAVeersionf1.3,3No!vembMerf2008Q.Cop!yrightcf @2000,f2001,2002,2007,2008FereeSoft!warefFoundation,Inc. 33.http://fsf.org/ff.Ev!eryonefispMermittedtocop!yanddistributeverbatimcopies.offthislicensedoMcumen!t,butchangingitisnotallowed.-0.'PREAMBLE'ThevQpurpMosevRofthisLicenseistomak!eaman!ual,LtextbMook,orvQothervRfunctionaland'usefuldoMcumen!tfree;inthesenseoffreedom:!toassureev!eryonethee ectivefreedom'to9cop!y:andredistributeit,.withorwithoutmoMdifyingit,.eithercommerciallyornon-'commerciallye.cSecondarily,Hthis(aLicense(bpreserv!esfortheauthorandpublisheraw!ay'toW9getcreditW8fortheirw!ork,mwhilenotbMeingconsideredrespMonsibleformodi cations'madefb!yothers.'This/License0isakindof\cop!yleft",which/meansthatderivdDativ!eworksof0thedoMcument'm!ustthemselvesbMefreeinthesamesense. Itcomplemen!tstheGNUGeneralPublic'License,fwhic!hisacopyleftlicensedesignedforfreesoftware.'Wee#ha!vedesignedthisLicenseinordertouseit"formanualsforfreesoftware,bMecause'free?soft!wareneedsfree>doMcumentation:afreeprogramshould>comewithmanuals'pro!vidingurtheussamefreedomsthatthesoft!wareurdoMes.͌ButthisLicenseisnotlimitedto'soft!waremanuals;itcanbMeusedforan!ytextualw!ork,regardlessofsubjectmatteror'whether2itispublishedasaprin!tedbMook.@BWee2recommendthisLicenseprincipallyfor'w!orksfwhosepurpMoseisinstructionorreference.-1.'APPLICABILITYfANDDEFINITIONSP'This>License=appliestoan!ymanual=orotherwork,inany=medium,thatcontains>a'noticeplacedb!ythecop!yrightholdersayingitcanbMedistributedundertheterms'ofthisLicense.l=Suc!hanoticegrantsaworld-wide, royalty-freelicense,unlimitedin'duration, toouseothatw!orkundertheconditionsstatedherein. 9The\DoMcumen!t",'bMelo!w,tkrefersgtoanysuchgmanualorwork. AnymembMerofthegpublicisalicensee,tkand'isaddressedas\y!ou".@Yeouacceptthelicenseifyoucopye, moMdifyordistributethework'infaw!ayfrequiringpMermissionundercop!yrightflaw.'A \MoMdi ed Veersion" oftheDocumen!tmeans anyworkcontainingthe DoMcumentor'ahpMortiongofit,heithercopiedv!erbatim,horwithmoMdi cationsand/ortranslatedin!to'anotherflanguage.'A\SecondarySection"isanamedappMendixorafron!t-mattersectionoftheDoMcumen!t'that/dealsexclusiv!ely0withtherelationshipofthepublishersorauthorsoftheDoMcumen!t'toz thezDoMcumen!t'soverallzsubject(ortorelatedmatters)andcon!tainsnothingthat'couldخfallدdirectlywithinthato!verallsubject.t(Thus,%@iftheخDoMcumentisinدparta'textbMookՆofՅmathematics,MaSecondarySectionma!ynotexplainan!ymathematics.)=The'relationshipGcouldbMeamatterofhistoricalconnectionwiththesubjectorwithrelated'matters,jorBofBlegal,commercial,jphilosophical,ethicalorpMoliticalBpositionregarding'them.'Ther\In!vdDariantsSections"arecertainSecondarySectionswhosetitlesaredesignated,0as'bMeing2Dthose2CofIn!vdDariant2DSections,I}inthenoticethatsa!ysthattheDoMcumen!tisreleasedB=GAppMendixfA:GNUFereeDocumen!tationLicense:6633͍'underS5thisLicense."IfS4asectiondoMesnot ttheabMo!veS5de nitionofSecondarythenitis 33'notӍallo!wedtoӎbMedesignatedasInvdDariant.eSTheDoMcumentmayӎcontainzeroInvdDariant'Sections.IftheDoMcumen!tdoesnotiden!tifyanyInvdDariantSectionsthentherearenone.&g'Thef\Co!verfTeexts"arecertainshortpassagesoftextthatarelisted,asFeron!t-Cover'Teexts-orBac!k-Cover,Texts,"8in-thenoticethat,sa!ysthattheDoMcument,isreleasedunder'thisLicense.AAnFeron!t-CoverTeextmaybMeatmost5words,6andaBack-CoverTeextmay'bMefatmost25w!ords.&h'AC\Teransparen!t"CcopyofCtheDoMcumentmeansaCmachine-readablecopye,k(represented'inJmaformatJnwhosespMeci cationisa!vdDailabletothegeneralpublic,snthatissuitablefor'revisingthedoMcumen!tstraightforwardlywithgenerictexteditorsor(forimagescom-'pMosedofpixels)genericpain!tprogramsor(fordra!wings)somewidelya!vdDailabledrawing'editor,and}thatissuitableforinputto}textformattersorforautomatictranslationto'a9OvdDariet!yof9Nformatssuitableforinputtotextformatters.A93cop!ymadeinanotherwise'Teransparen!t leformatwhosemarkup,orabsenceofmarkup,hasbMeenarrangedto'th!wart0or0discouragesubsequen!tmoMdi cationb!yreadersisnotTeransparen!t.Animage'format isnotTeransparen!tifused foranysubstantialamountoftext.MA copythatis'notf\Teransparen!t"iscalled\Opaque".'ExamplescXofsuitablecWformatsforTeransparen!tcopiesincludeplainasci>Kiwithout'markup,TeexinfoXIinputformat,LaT,[wEB XXJinputformat,K`y cmr10SGMLorXJXMLusingapublicly'a!vdDailableDTD,andstandard-conformingsimpleHTML,P!ostScriptorPDFdesigned'for.h!umanmoMdi cation.4ExamplesoftransparentimageformatsincludePNG,ԟXCF'andJPG.OpaqueformatsincludeproprietaryformatsthatcanbMereadandedited'onlysb!ysproprietarywordsproMcessors,&JSGMLorXMLforwhic!htheDTDand/or'proMcessingW*toolsarenotW)generallya!vdDailable,CYandthemachine-generatedHTML,'P!ostScriptforPDFproMducedbysomewordproMcessorsforoutputpurposesonlye.'The\TitleP!age"means,or7state7inorwitheac!hOpaquecopy7acomputer-networkloMcation7fromwhich'theSgeneralRnet!work-usingpublichasRaccesstodownloadusingRpublic-standardnetwork'protoMcols=acomplete>Teransparen!tcopyoftheDoMcument,freeofaddedmaterial.cIf'y!ouusethelatteroption,youmusttakereasonablyprudentsteps,whenyoubMegin'distributionlofmOpaquecopiesinquan!titye,ӮtolensurethatthisTeransparen!tcopylwill'remainCth!usaccessibleDatthestatedloMcationuntilDatleastoneyearafterDthelasttime'y!oukdistributekanOpaquecopyk(directlyorthroughyourkagentsorretailers)kofthat'editionftothepublic.'It&Nisrequested,FHbutnotrequired,FGthaty!oucontacttheauthorsoftheDoMcumentwell'bMeforeoredistributingoan!ylargenumbMeroofcopies,ztogiv!ethemac!hancetopro!videyou'withfanupMdatedv!ersionoftheDocumen!t.-4.'MODIFICAeTIONS'Yeou*ma!ycopyand)distributeaMoMdi edVeersionoftheDoMcumen!tundertheconditions'ofsections2and3abMo!ve,]providedthatyoureleasetheMoMdi edVeersionunderprecisely'this{License,`withthe{MoMdi edVeersion llingtheroleoftheDoMcumen!t,`thus{licensing'distributionandmoMdi cationoftheModi edVeersiontowhoev!erpossessesacop!yof'it.Infaddition,y!oumustdothesethingsintheMoMdi edVeersion:*A.=nUsepintheTitleP!age(andonthecovers,2ifany)atitledistinctfromthatofthe=nDoMcumen!t,+andfromthoseofpreviousversions(whichshould,+iftherewereanye,D_GAppMendixfA:GNUFereeDocumen!tationLicense:6833͍=nbMelistedintheHistorysectionoftheDocumen!t).3Yeoumayusethesametitleas 33=nafpreviousv!ersioniftheoriginalpublisherofthatversiongivespMermission.+gB.=nList\ontheTitle[P!age,Zasauthors,YoneormorepMersonsoren!titiesrespMonsiblefor=nauthorship"of"themoMdi cationsintheMoMdi edVeersion,<|togetherwithatleast v!e=nof߸theprincipalauthorsoftheDoMcumen!t(allofitsprincipalauthors,uifithasfewer=nthanf v!e),unlesstheyreleaseyoufromthisrequirement.+@C.=nStateontheTitlepagethenameofthepublisheroftheMoMdi edVeersion,asthe=npublisher.*D.=nPreserv!efallthecopyrightnoticesoftheDoMcument.+oE.=nAddeandappropriatecop!yrightnoticeeforyouremoMdi cationsadjacentetotheother=ncop!yrightfnotices.,LF.=nInclude,hSimmediatelyXafterthecop!yrightXnotices,alicensenoticegivingthepublic=npMermissiontousetheMoMdi edVeersionunderthetermsofthisLicense,Pintheform=nsho!wnfintheAddendumbMelow.*nG.=nPreserv!eminlthatlicensenoticethefulllistsofIn!vdDariantSectionsmandrequiredCo!ver=nTeextsfgiv!enintheDoMcument'slicensenotice.*H.=nIncludefanunalteredcop!yofthisLicense./4I.=nPreserv!eچtheڇsectionEntitledڇ\History",PreserveitsڇTitle,andaddtoitanitem=nstating_ at_ leastthetitle,mQy!ear,newauthors,and_ publisheroftheMoMdi edVeersion=nasXgiv!enonWtheTitlePage.7IfWthereisnosectionEntitled\History"WintheDoMcu-=nmen!t,O#create-eone-dstatingthetitle,O$year,O#authors,and-epublisher-doftheDoMcument=nasWgiv!enonitsTitlePage,FthenaddanitemdescribingtheMoMdi edVeersionas=nstatedfintheprevioussen!tence.-J.=nPreserv!ethenetworkloMcation,ifanye,givenintheDoMcumentforpublicaccessto=naTeransparen!tcopyoftheDoMcument,MandlikewisethenetworkloMcationsgivenin=nthë́DoMcumen!t̓forpreviousversions̓itwasbasedon.S6These̓maybMeplaced̓inthe=n\History"8section.Yeou9ma!yomitanet!work8loMcationforaw!orkthatw!aspublished=natKleastfourKy!earsbMeforetheDocumen!titself,t@oriftheoriginalKpublisherofthe=nv!ersionfitreferstogivespMermission.*K.=nFeorran!ysectionEntitled\Acknowledgements"or\Dedications",oPreservetheTitle=nof/Rthe/Qsection,G#andpreserv!einthesectionallthesubstanceandtoneofeac!hofthe=ncon!tributorfacknowledgementsand/ordedicationsgiventherein.,Q*L.=nPreserv!e?all?theInvdDariant?SectionsoftheDoMcumen!t,f/unalteredintheirtextand=ninPtheirPtitles.@Sectionn!umbMersorPtheequivdDalentParenotconsideredpartofthe=nsectionftitles.)M.=nDelete5an!ysectionEntitled4\Endorsements".JSuchasection4maynotbMeincluded=ninftheMoMdi edVeersion.*N.=nDog!notg"retitlean!yexistingsectiontobMeEn!titled\Endorsements"g"ortocon ictin=ntitlefwithan!yInvdDariantSection.*O.=nPreserv!efanyWearrantyDisclaimers.΍'IftheMoMdi edVeersionincludesnewfron!t-mattersectionsorappMendicesthatqualify'asXSecondaryX Sectionsandcon!tainnomaterialcopiedfromtheDoMcumen!t,gyoumayXat'y!ourkoptionldesignatesomeorallofthesesectionsasin!vdDariant.Teodokthis,addtheirEr]GAppMendixfA:GNUFereeDocumen!tationLicense:6933͍'titles@tothelist@ofIn!vdDariant@SectionsintheMoMdi edVeersion'slicensenotice.These 33'titlesfm!ustbMedistinctfromanyothersectiontitles.('Yeoupma!yqaddasectionEntitledq\Endorsements",sprovideditcontainsqnothingbut'endorsemen!tsofyourMoMdi edVeersionbyvdDariousparties|forexample,Zstatementsof'pMeerD revieworDthatthetexthasbeenDappro!vedD byanorganizationDastheauthoritative'de nitionfofastandard.('Yeouf,ma!yf-addapassageofupto v!ewordsf-asaFeron!t-Coverf,Text,sandf-apassageofup'to@25w!ords@asaBack-CoverTeext,Tto@theendofthelistofCo!ver@TeextsintheMoMdi ed'Veersion.+OnlyN+oneN*passageofFron!t-CoverN*TextN+andoneN*ofBac!k-CoverN+TextN*mayN+bMe'addedNb!y(orthrougharrangementsmadeby)Nanyoneentitye.IftheDoMcumentalready'includesaco!vertextforthesameco!ver,/!previouslyaddedbyyouorbyarrangement'made:b!ythesameentityyouareactingonbMehalfof,_youmay:notaddanother;but'y!ou)mayreplace*theoldone,2onexplicitpMermissionfromthepreviouspublisherthat'addedftheoldone.'The^author(s)]andpublisher(s)oftheDoMcumen!tdonotb!ythisLicensegiv!epMermission'tojusetheirknamesforpublicit!yforortoassertorimplyendorsemen!tofan!yMoMdi ed'Veersion.(-5.'COMBININGfDOCUMENTS'Yeouma!ycombinetheDoMcumentwithotherdoMcumen!tsreleasedunderthisLicense,'understhetermstde nedinsection4abMo!vesformodi edv!ersions,ӷprovidedsthaty!ou'include in thecom!binationalloftheIn!vdDariant SectionsofalloftheoriginaldoMcumen!ts,'unmoMdi ed,L3and5list5themallasIn!vdDariant5Sectionsofy!ourcombined5workin5itslicense'notice,fandthaty!oupreservealltheirWearrantyDisclaimers.'The@com!binedworkneedonlycontainonecopyofthisLicense,andmultipleidentical'In!vdDariantSectionsma!ybMereplacedwithasinglecopye.BIftherearemultipleInvdDariant'Sections6with6thesamenamebutdi eren!tcontents,Mmake6thetitleofeac!hsuch6section'uniquebb!ycaddingattheendofit,1"inparen!theses,1!thenameoftheoriginalauthoror'publisherofthat~sectionifkno!wn,!orelseauniquen!umbMer.Makethesameadjustmen!t'tothesectiontitlesinthelistofIn!vdDariantSectionsinthelicensenoticeofthecom!bined'w!ork.('In"the#com!bination,Jyoumust#combineany#sectionsEntitled#\History"inthevdDari-'ousoriginaldoMcumen!ts,xformingonesectionEn!titled\History";likewisecombineany'sectionsEn!titled\Acknowledgements",ۿandanysectionsEntitled\Dedications".]Yeou'm!ustfdeleteallsectionsEntitled\Endorsements."-6.'COLLECTIONSfOFDOCUMENTS('YeouҤma!ymakeacollectionconsistingofңtheDoMcumentandotherdoMcumentsreleased'underthisLicense,sandreplacetheindividualcopiesofthisLicenseinthevdDarious'doMcumen!tsDwithCasinglecopyCthatisincludedinthecollection,ypro!videdthaty!ou'follo!wtthetrulesofthisLicenseforv!erbatimcopyingtofeachtofthedoMcumen!tsinall'otherfrespMects.'Yeou=ma!yextractasingledoMcumentfromsuchacollection,2anddistributeitindividu-'ally4under4thisLicense,Wnpro!videdyou4insertacop!yofthisLicensein!totheextracted'doMcumen!t,andBfollowAthisLicenseinallotherrespMectsregardingv!erbatimcopyingAof'thatfdoMcumen!t.FGAppMendixfA:GNUFereeDocumen!tationLicense:7033͍-7.'A!GGREGAeTIONfWITHINDEPENDENTWORKS('A]compilation]oftheDoMcumen!t]oritsderivdDativeswithother]separateandindepMendent 33'doMcumen!tshoriworks,inoroniavolumeiofastorageordistributionmedium,iscalled'an \aggregate"ifthe cop!yright resultingfromthecompilationisnotusedtolimitthe'legal1 righ!ts1ofthecompilation'susersbMey!ondwhattheindividualw!orkspMermit.When'theDoMcumen!tisincludedinanaggregate,thisLicensedoesnotapplytotheother'w!orksfintheaggregatewhicharenotthemselvesderivdDativeworksoftheDoMcument.('IfVtheCo!verVTeextrequiremen!tofsection3UisapplicabletothesecopiesoftheDoMcument,'thenDifEtheDoMcumen!tislessthanonehalfoftheen!tireaggregate,~theDoMcumen!t'sCover'Teexts0ma!ybMeplacedoncoversthatbrackettheDoMcumentwithinthe0aggregate,Gorthe'electronic5qequivdDalen!t5pofcovers5piftheDoMcumen!tisinelectronicform.Otherwisethey'm!ustfappMearonprintedcoversthatbracketthewholeaggregate.-8.'TRANSLAeTION('Teranslation̯is̰consideredakindofmoMdi cation,Asoy!oumay̰distributetranslations'ofTtheTDoMcumen!tunderthetermsofsection4. ReplacingIn!vdDariantSectionsTwith'translationsvrequiresvspMecialpermissionfromtheirvcop!yrightvholders,butyouvmay'includektranslationsofsomejorallIn!vdDariantkSectionsinadditiontotheoriginalv!ersions'oftheseIn!vdDariantSections.=YeoumayincludeatranslationofthisLicense, andallthe'licensenoticesintheDoMcumen!t,FandanyWearrantyDisclaimers,Fprovidedthatyou'alsoincludetheoriginalEnglishv!ersionofthisLicenseandtheoriginalv!ersionsof'thosenoticesanddisclaimers.5Incaseofadisagreemen!tbMetweenthetranslationand'the:original:v!ersionofthisLicenseoranoticeordisclaimer,_theoriginalv!ersionwill'prevdDail.'IfpasectioninptheDoMcumen!tisEntitled\Acknowledgements",{\Dedications",orp\His-'tory",Athe(requiremen!t(section4)toPreserveitsTitle(section1)willtypicallyrequire'c!hangingftheactualtitle.-9.'TERMINAeTION('Yeouma!ynotcopye,moMdify,sublicense,ordistributetheDoMcumen!texceptasexpressly'pro!videdunderthisLicense.|Anyattemptotherwisetocop!ye,moMdify,sublicense,or'distributefitisv!oid,andwillautomaticallyterminateyourrightsunderthisLicense.'Ho!wever,ifAyou@ceaseallviolationofthisLicense,theny!ourlicensefromaparticular'cop!yrightJholderisJreinstated(a)pro!visionallye,sunlessanduntilJthecopyrightholder'explicitly_and nallyterminatesy!ourlicense,0and(b)pMermanentlye,0ifthecopyright'holder"failstonotifyy!ouoftheviolation"bysomereasonablemeanspriorto60days'afterfthecessation.('Moreo!ver,8your licensefromaparticularcop!yright holderisreinstatedpMermanen!tlyif'theV`cop!yrightholderVanoti esyouoftheviolationVabysomereasonablemeans,fbthisisthe' rstWtimey!ouWhaveWreceivednoticeofviolationWofthisLicense(foranyWwork)fromthat'cop!yrightholder,andy!oucuretheviolationpriorto30daysafteryourreceiptofthe'notice.'TeerminationNuofy!ourrightsunderthissectionNtdoMesnotterminatethelicensesofparties'whoqha!vereceivedcopiesorrightsfromyoupunderthisLicense.Ifyourrightshave'bMeenterminatedandnotpermanen!tlyreinstated,:receiptofacopyofsomeorallofthe'samefmaterialdoMesnotgiv!eyouanyrightstouseit.G#GAppMendixfA:GNUFereeDocumen!tationLicense:7133͍10.'FUTUREfREVISIONSOFTHISLICENSE33'TheaFereebSoft!wareFeoundationbmaypublishbnew,Urevisedv!ersionsoftheGNU Feree 33'DoMcumen!tationLicensefromtimetotime.xRSuchnewversionswillbMesimilarinspirit'to thepresen!tversion,?butmaydi erindetailtoaddress newproblemsorconcerns.'Seefhttp://www.gnu.org/copyleft/.'Eac!hversionoftheLicenseisgivenadistinguishingversionnumbMer.IftheDocumen!t'spMeci esrthataparticularn!umberedrversionofthisLicense\oranylaterversion"'appliesQtoPit,Ly!ouhaveQtheoptionPoffollowingthetermsPandconditionseitherofthat'spMeci edv!ersionorofanylaterversionthathasbMeenpublished(notasadraft)by'the!Feree"Soft!wareFeoundation.If"theDoMcument"does!notspecify"av!ersionnumbMer!of'this$License,D)y!oumaychoMose$anyversioneverpublished(notasadraft)bytheFeree'Soft!wareUFeoundation.mIftheDoMcumen!tspeci esthatapro!xyTcandecidewhichfuture'v!ersions)of*thisLicensecanbMeused,thatpro!xy'spublicstatement*ofacceptanceofa'v!ersionfpMermanentlyauthorizesyoutochoMosethatversionfortheDoMcument.11.'RELICENSING'\Massiv!e{"Multiauthor{#CollabMorationSite"(or\MMCzSite")meansany{#WeorldWide'WeebLeserv!erthatpublishescopyrightableLfworksandalsoprovidesprominentfacilities'forMan!ybModytoeditthosew!orks.EAMpublicwikithatManybModycaneditisanexampleof'suc!h Yaserver.A ?\Massive XMultiauthorCollabMoration"(or\MMC") >containedinthe'sitefmeansan!ysetofcopyrightableworksthuspublishedontheMMCsite.'\CC-BY-SA"8means8the8Creativ!eCommonsAttribution-Share8Alike3.08licensepub-'lished8b!y8CreativeCommons8CorpMoration,N(anot-for-pro tcorpMorationwithaprincipal'placeofbusinessinSanFerancisco,7California,7asw!ellasfuturecopyleftversionsofthat'licensefpublishedb!ythatsameorganization.'\IncorpMorate"zmeanstopublishyorrepublishaDocumen!t,?inwholeoryinpart,aspart'offanotherDoMcumen!t.'An&\MMC&)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:d}17end-of-lineT(C-e)YU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:P616exchange-point-and-markT(C-xC-x)U:pU:U:U:U:U:U:U:U:U:U22expand-tildeōU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:w7\k]FJforward-backward-delete-charT()_U:pU:U:U:U:U:U:U:U:U:U:U: 18forward-charT(C-f)@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:16 ȍforward-search-historyT(C-s)=@U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:17forward-wordT(M-f)@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:16\k]HJhistory-preserv9e-pAointU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:z7history-search-backwardT()fU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:C17 Ǎhistory-search-forwardT()(U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:֬17history-size+U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:7history-substr-search-backwardT()™U:pU:U:U:U:U:U:U:U:U:v17history-substr-search-forwardT(),U:pU:U:U:U:U:U:U:U:U:U: 17horizon9tal-scroll-moAdeNU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:D*7;Ik]IJinput-metaMpU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:L7insert-commentT(M-#)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:d}22insert-completionsT(M-*)wU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8i21isearc9h-terminatorsXU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:7KDzGFeunctionfandVariableIndex7533]KڍGk9eymapፑU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8 #(Gkill-lineT(C-k)GU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$19Gkill-regionT()lڍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:-20Gkill-whole-lineT()@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:19 Gkill-wordT(M-d)GU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:$19)]MGmark-moAdi ed-linesJ܍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 8Gmark-symlink9ed-directoriesU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:8Gmatc9h-hidden- les%U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:c8Gmenu-completeT()썑U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:ɬ21Gmenu-complete-backwardT()(U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:֬21Gmen9u-complete-display-pre xU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:E8 Gmeta- agU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:7*]NGnext-historyT(C-n)@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:17$Gnon-incremental-forward-QCsearch-historyT(M-n) U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:17Gnon-incremental-reverse-QCsearch-historyT(M-p) U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:17+܊]OٍGoutput-metaSU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:W/8Goverwrite-modeT()YU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:P619)]PGpage-completionsFjU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:G9 #(Gpossible-completionsT(M-?)fU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:C21Gprefix-metaT(ESC)YU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:P622Gprevious-historyT(C-p)zU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:W16 Gprint-last-kbd-macroT()U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:21*̇]QMGquoted-insertT(C-qorC-v)ppU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:1M18k]R re-read-init-fileT(C-xC-r)]U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ѭ22 readliner+U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:324 redraw-current-lineT()zU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:W16reverse-search-historyT(C-r)=@U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:17rev9ert-all-at-newlineU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ij9revert-lineT(M-r)YU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:P622rl_add_defun7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:32rl_add_funmap_entry U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:36rl_add_undorU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:GO36rl_alphabeticU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a40rl_begin_undo_group U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:36rl_bind_keyrU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:GO33rl_bind_key_if_unboundBU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:n34rl_bind_key_if_unbound_in_map*čU:pU:U:U:U:U:U:U:U:U:U:U:U:U:롬34rl_bind_key_in_mapnU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/33rl_bind_keyseqU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά34rl_bind_keyseq_if_unboundV؍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:34rl_bind_keyseq_if_unbound_in_map? U:pU:U:U:U:U:U:U:U:U:U:34rl_bind_keyseq_in_map$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R34rl_callback_handler_installꍑU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ǭ42rl_callback_handler_removeEU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:"42rl_callback_read_char$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R42rl_callback_sigcleanupBU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:n42rl_cleanup_after_signalU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:۬48rl_clear_history ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨42rl_clear_message ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨37rl_clear_pending_inputBU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:n39rl_clear_signals ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨49rl_clear_visible_line$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R37rl_completerU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:GO50rl_complete_internal߷U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:50rl_completion_matches$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R51rl_completion_modenU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/51rl_copy_keymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά33rl_copy_text7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:38rl_crlfU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:37rl_delete_textU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά38rl_deprep_terminalnU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/39rl_dingU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:40rl_discard_keymap8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~33rl_display_match_list$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R40rl_do_undoU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:36rl_echo_signal_char U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:48rl_end_undo_group8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~36rl_execute_nextZ^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:;39rl_expand_prompt ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨38rl_extend_line_buffer$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R40rl_filename_completion_functionU:pU:U:U:U:U:U:U:U:U:U:U:N{51rl_forced_update_displaykU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:fH37rl_freeU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:40rl_free_keymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά33rl_free_line_statenU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/48rl_free_undo_list8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~36rl_function_dumpernU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/35rl_function_of_keyseq$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R35LGFeunctionfandVariableIndex7633Grl_funmap_namesZ^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:;35 Grl_generic_bindZ^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:;35Grl_get_keymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a33 !Grl_get_keymap_by_name$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R33Grl_get_keymap_namenU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/33Grl_get_screen_sizenU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/49Grl_get_termcapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά42Grl_getcU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:39Grl_initializeU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a40Grl_insert_completions$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R51Grl_insert_textU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά38Grl_invoking_keyseqs U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:35Grl_invoking_keyseqs_in_mapEU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:"35Grl_kill_text7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:38Grl_list_funmap_names߷U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:35Grl_macro_bindU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a41Grl_macro_dumperZ^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:;41Grl_make_bare_keymap U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:32Grl_make_keymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά33Grl_messageU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:37Grl_modifying7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:36Grl_named_function8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~35Grl_on_new_lineU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά37Grl_on_new_line_with_promptEU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:"37Grl_parse_and_bind8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~35Grl_pending_signal8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~48Grl_possible_completionsU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:۬50Grl_prep_terminal ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨39Grl_push_macro_input U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:38Grl_read_init_file8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~35Grl_read_keyrU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:GO38Grl_redisplay7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:37Grl_replace_lineZ^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:;40Grl_reset_after_signal$U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:R48Grl_reset_line_state U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:37Grl_reset_screen_size߷U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:49Grl_reset_terminal8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~40Grl_resize_terminalnU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/48Grl_restore_prompt8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~38Grl_restore_state ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨40Grl_save_promptU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά37Grl_save_stateU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a40Grl_set_keyU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:34Grl_set_keyboard_input_timeout*čU:pU:U:U:U:U:U:U:U:U:U:U:U:U:롬39Grl_set_keymapU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a33Grl_set_paren_blink_timeoutEU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:"41Grl_set_promptU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a38Grl_set_screen_sizenU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/49Grl_set_signalsU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:iά49Grl_show_char7ߍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:37Grl_stuff_charU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a39Grl_tty_set_default_bindingsꍑU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:Ǭ39rl_tty_set_echoingnU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/39 Ǎrl_tty_unset_default_bindings*čU:pU:U:U:U:U:U:U:U:U:U:U:U:U:롬39rl_unbind_command_in_mapkU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:fH34rl_unbind_function_in_mapV؍U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:34rl_unbind_keyU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:a34rl_unbind_key_in_map߷U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:34rl_username_completion_functionU:pU:U:U:U:U:U:U:U:U:U:U:N{51 ƍrl_variable_bind ˍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:̨41rl_variable_dumpernU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:/41 rl_variable_value8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~41lk]S!self-insertT(a,b,A,1,!,...B)aU:pU:U:U:U:U:U:U:U:U:U:U:U:>18set-markT(C-@)lڍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:-22sho9w-all-if-ambiguousU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:k\9sho9w-all-if-unmoAdi edU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:jc9sho9w-moAde-in-prompt U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:c9skip-completed-textMU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U: 9skip-csi-sequenceT()U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:d}22 start-kbd-macroT(C-x()U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:J21Kk]T!tab-insertT(M-TAB)@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:18tilde-expandT(M-~)@ƍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:22transpose-charsT(C-t)U U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:19transpose-wordsT(M-t)U U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:19k]U!undoT(C-_orC-xC-u)8U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:~22universal-argumentT()U U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:20unix-filename-ruboutT()U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:20unix-line-discardT(C-u)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:19unix-word-ruboutT(C-w)zU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:W20upcase-wordT(M-u)YU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:P619k]V!vi-cmd-moAde-stringU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:M10vi-editing-modeT(M-C-j)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:23vi-ins-moAde-string=U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:z10visible-stats^U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:];10*Ek]Y!yankT(C-y)&U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:h20yank-last-argT(M-.orM-_)ppU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:1M18yank-nth-argT(M-C-y)U:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:d}17yank-popT(M-y)lڍU:pU:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:U:-20_;ïPgN # cmbx12egff cmmi12]Nff cmbx12TNG cmbx12KNj cmbx12F b> 3 cmmi10=inan!y leGthat?uses>theHistorylibrary'sfeatures.{Itsuppliesexterndeclarationsforallofthelibrary'sGpublicffunctionsandvdDariables,anddeclaresallofthepublicdatastructures.G]2.2Historyf@Storage33GThefhistorylistisanarra!yofhistoryentries.Ahistoryentryisdeclaredasfollows:.typedefvoid*histdata_t;ff.typedefstruct_hist_entry{:xchar*line;:xchar*timestamp;:xhistdata_tdata;.}HIST_ENTRY;B!GThefhistorylistitselfmigh!tthereforebMedeclaredas.HIST_ENTRY**the_history_list;!GThefstateoftheHistorylibraryisencapsulatedin!toasinglestructure:./*4F*Astructureusedtopassaroundthecurrentstateofthehistory.4F*/.typedefstruct_hist_state{:xHIST_ENTRY**entries;/*Pointertotheentriesthemselves.*/!GChapterf2:ProgrammingwithGNUHistory5533͍:xintoffset;?atto.%Iffromiszero,?startatthebMeginning.Iftoislessthanfrom,.thenreadun!tiltheendofthe le.׫If lenameisNULL,|thenreadfrom~/.history..Returnsf0ifsuccessful,orerrnoifnot.z[Feunction]G@intLwrite_historyy(Aconstchar* lename).Werite#%thecurren!thistoryto#$ lename,BUoverwriting lename,if#$necessarye.TIf lename.isBNULL,VthenBwritethehistorylistto~/.history.Returns0onsuccess,Vorerrnoon.afreadorwriteerror.G卟GChapterf2:ProgrammingwithGNUHistory5833͍z[Feunction]G@intLappend_historyy(Aintnelements,constchar* lename) 33.AppMend)thelast)nelemen!tsofthehistorylistto lename.g1If lenameƉisNULL,JIthen.appMendfto~/.history.Returns0onsuccess,orerrnoonareadorwriteerror.;?z[Feunction]G@intLhistory_truncate_filey(Aconstchar* lename,intnlines).Teruncatethehistory le lename,@lea!vingonlythelastnlinesclines.OIf lenamewherethehistoryev!entspMeci cationbegins.Vqc!har isNacharacter.that:Xisallo!wed:Xtoendtheev!ent:YspMeci cation:Xinadditiontothe\normal"terminating.c!haracters.z[Feunction]G@charL**history_tokenizey(Aconstchar*string).Returnanarra!yoftokensparsedoutofstring,[muchastheshellmight. _Thetokens.are6split7onthec!haractersinthehistory>xHtw!ord>xHdelimitersvdDariable,jandshell6quoting.con!ventionsfareobMey!ed.;@z[Feunction]G@charL*history_arg_extracty(Aint rst,intlast,constchar*string).ExtractHaGstringsegmen!tconsistingofthe rstGthroughlastHargumen!tspresentHin.string.Argumen!tsfaresplitusinghistory_tokenize.ZG]2.4Historyf@Vfariables33GThis:sectiondescribMestheexternally-visiblevdDariablesexportedb!ythegnuHistoryLibrarye.3[Veariable]G@intLhistory_base.Theflogicalo setofthe rsten!tryinthehistorylist.;?3[Veariable]G@intLhistory_length.Thefn!umbMerofentriescurrentlystoredinthehistorylist. XGChapterf2:ProgrammingwithGNUHistory5933͍3[Veariable]G@intLhistory_max_entries 33.TheZmaxim!umYnumbMerofhistoryYentries. zThismustZbMec!hangedusingstifle_.history().M3[Veariable]G@intLhistory_write_timestamps.If\non-zero,timestamps\arewrittentothehistory le,sotheycanbMepreserv!ed.bMet!weenfsessions.ThedefaultvdDalueis0,meaningthattimestampsarenotsa!ved.@.Thecurren!ttimestampformatusesthevdDalueofhistory>xHtcomment>xHchar#todelimit.timestampen!triesinthehistory le. +IfthatvdDariabledoMesnotha!veavdDalue(the.default),ftimestampswillnotbMewritten.3[Veariable]G@charLhistory_expansion_char.The;yc!haracterthatintroMduces;xahistoryevent.The;xdefaultis`!'.Setting;xthisto0.inhibitsfhistoryexpansion.3[Veariable]G@charLhistory_subst_char.The|c!haracter}thatinvokeswordsubstitution}iffoundatthestartofaline. The.defaultfis`^'.3[Veariable]G@charLhistory_comment_char.Duringtok!enization,¿ifthischaracterisseenasthe rstcharacterofaword,¿then.it4and4allsubsequen!tcharacters4uptoanewlineareignored,ysuppressinghistory.expansionffortheremainderoftheline.Thisisdisabledb!ydefault.L3[Veariable]G@charL*history_word_delimiters.TheMc!haractersthatMseparatetokensforhistory_tokenize().cThedefaultMvdDalueis".\t\n()<>;&|".3[Veariable]G@charL*history_search_delimiter_chars.The list ofadditionalc!haracterswhich candelimitahistorysearc!hstring,;inaddition.tofspace,TeAB,`:'and`?'inthecaseofasubstringsearc!h.Thedefaultisemptye.3[Veariable]G@charL*history_no_expand_chars.Theklistofc!haracterswhichinhibitlhistoryexpansioniffoundimmediatelyfollowing.history>xHtexpansion>xHc!har.Thefdefaultisspace,tab,newline,carriagereturn,and`='.3[Veariable]G@intLhistory_quotes_inhibit_expansion.IfWnon-zero,gMdouble-quotedw!ordsarenotscannedforWthehistoryexpansioncharacter.orfthehistorycommen!tcharacter.ThedefaultvdDalueis0.3[Veariable]G@rl_linebuf_func_tL*history_inhibit_expansion_function.This?should>bMesettotheaddressofafunctionthattak!estwo>arguments:acharf*.(string)0nandan0ointindexin!tothatstring(i).Itshouldreturnanon-zerovdDalueifthe.historyexpansionstartingatstring[i]shouldnotbMeperformed;zeroiftheexpansion.shouldObMePdone.mItisin!tendedforuseb!yapplicationslik!eBashthatusethehistory.expansionfc!haracterforadditionalpurpMoses.Bydefault,thisvdDariableissettoNULL. eٍGChapterf2:ProgrammingwithGNUHistoryл1033͍G]2.5Historyf@ProgrammingExample33GTheffollo!wingprogramdemonstratessimpleuseofthegnuHistoryLibrarye..ߤN cmtt9#include .#include.main(argc,argv)Fintargc;Fchar**argv;.{8lcharline[1024],*t;8lintlen,done=0;8lline[0]=0;8lusing_history();8lwhile(!done)A{KS printf("history$");KS fflush(stdout);KS t=fgets(line,sizeof(line)-1,stdin);KS if(t&&*t)TL{^9xlen=strlen(t);^9xif(t[len-1]=='\n')gt[len-1]='\0';TL}KS if(!t)TLstrcpy(line,"quit");KS if(line[0])TL{^9xchar*expansion;^9xintresult;^9xresult=history_expand(line,&expansion);^9xif(result)gfprintf(stderr,"%s\n",expansion);^9xif(result<0||result==2)g{qfree(expansion);qcontinue;g}^9xadd_history(expansion);^9xstrncpy(line,expansion,sizeof(line)-1);^9xfree(expansion);TL}KS if(strcmp(line,"quit")==0)TLdone=1;KS elseif(strcmp(line,"save")==0)TLwrite_history("history_file");KS elseif(strcmp(line,"read")==0)TLread_history("history_file");KS elseif(strcmp(line,"list")==0) s(GChapterf2:ProgrammingwithGNUHistoryл1133͍TL{ ^9xregisterHIST_ENTRY**the_list;^9xregisterinti;^9xthe_list=history_list();^9xif(the_list)gfor(i=0;the_list[i];i++)qprintf("%d:%s\n",i+history_base,the_list[i]->line);TL}KS elseif(strncmp(line,"delete",6)==0)TL{^9xintwhich;^9xif((sscanf(line+6,"%d",&which))==1)g{qHIST_ENTRY*entry=remove_history(which);qif(!entry)zfprintf(stderr,"Nosuchentry%d\n",which);qelsez{(free(entry->line);(free(entry);z}g}^9xelseg{qfprintf(stderr,"non-numericarggivento`delete'\n");g}TL}A}.} yA1233͍GTApp=endixzA QGNUzFaGreeDocumenutationLicenseAVeersionf1.3,3No!vembMerf2008Q.Cop!yrightcf @2000,f2001,2002,2007,2008FereeSoft!warefFoundation,Inc. 33.http://fsf.org/ff.Ev!eryonefispMermittedtocop!yanddistributeverbatimcopies.offthislicensedoMcumen!t,butchangingitisnotallowed.-0.'PREAMBLE'ThevQpurpMosevRofthisLicenseistomak!eaman!ual,LtextbMook,orvQothervRfunctionaland'usefuldoMcumen!tfree;inthesenseoffreedom:!toassureev!eryonethee ectivefreedom'to9cop!y:andredistributeit,.withorwithoutmoMdifyingit,.eithercommerciallyornon-'commerciallye.cSecondarily,Hthis(aLicense(bpreserv!esfortheauthorandpublisheraw!ay'toW9getcreditW8fortheirw!ork,mwhilenotbMeingconsideredrespMonsibleformodi cations'madefb!yothers.'This/License0isakindof\cop!yleft",which/meansthatderivdDativ!eworksof0thedoMcument'm!ustthemselvesbMefreeinthesamesense. Itcomplemen!tstheGNUGeneralPublic'License,fwhic!hisacopyleftlicensedesignedforfreesoftware.'Wee#ha!vedesignedthisLicenseinordertouseit"formanualsforfreesoftware,bMecause'free?soft!wareneedsfree>doMcumentation:afreeprogramshould>comewithmanuals'pro!vidingurtheussamefreedomsthatthesoft!wareurdoMes.͌ButthisLicenseisnotlimitedto'soft!waremanuals;itcanbMeusedforan!ytextualw!ork,regardlessofsubjectmatteror'whether2itispublishedasaprin!tedbMook.@BWee2recommendthisLicenseprincipallyfor'w!orksfwhosepurpMoseisinstructionorreference.-1.'APPLICABILITYfANDDEFINITIONSP'This>License=appliestoan!ymanual=orotherwork,inany=medium,thatcontains>a'noticeplacedb!ythecop!yrightholdersayingitcanbMedistributedundertheterms'ofthisLicense.l=Suc!hanoticegrantsaworld-wide, royalty-freelicense,unlimitedin'duration, toouseothatw!orkundertheconditionsstatedherein. 9The\DoMcumen!t",'bMelo!w,tkrefersgtoanysuchgmanualorwork. AnymembMerofthegpublicisalicensee,tkand'isaddressedas\y!ou".@Yeouacceptthelicenseifyoucopye, moMdifyordistributethework'infaw!ayfrequiringpMermissionundercop!yrightflaw.'A \MoMdi ed Veersion" oftheDocumen!tmeans anyworkcontainingthe DoMcumentor'ahpMortiongofit,heithercopiedv!erbatim,horwithmoMdi cationsand/ortranslatedin!to'anotherflanguage.'A\SecondarySection"isanamedappMendixorafron!t-mattersectionoftheDoMcumen!t'that/dealsexclusiv!ely0withtherelationshipofthepublishersorauthorsoftheDoMcumen!t'toz thezDoMcumen!t'soverallzsubject(ortorelatedmatters)andcon!tainsnothingthat'couldخfallدdirectlywithinthato!verallsubject.t(Thus,%@iftheخDoMcumentisinدparta'textbMookՆofՅmathematics,MaSecondarySectionma!ynotexplainan!ymathematics.)=The'relationshipGcouldbMeamatterofhistoricalconnectionwiththesubjectorwithrelated'matters,jorBofBlegal,commercial,jphilosophical,ethicalorpMoliticalBpositionregarding'them.'Ther\In!vdDariantsSections"arecertainSecondarySectionswhosetitlesaredesignated,0as'bMeing2Dthose2CofIn!vdDariant2DSections,I}inthenoticethatsa!ysthattheDoMcumen!tisreleased |GAppMendixfA:GNUFereeDocumen!tationLicense:1333͍'underS5thisLicense."IfS4asectiondoMesnot ttheabMo!veS5de nitionofSecondarythenitis 33'notӍallo!wedtoӎbMedesignatedasInvdDariant.eSTheDoMcumentmayӎcontainzeroInvdDariant'Sections.IftheDoMcumen!tdoesnotiden!tifyanyInvdDariantSectionsthentherearenone.&g'Thef\Co!verfTeexts"arecertainshortpassagesoftextthatarelisted,asFeron!t-Cover'Teexts-orBac!k-Cover,Texts,"8in-thenoticethat,sa!ysthattheDoMcument,isreleasedunder'thisLicense.AAnFeron!t-CoverTeextmaybMeatmost5words,6andaBack-CoverTeextmay'bMefatmost25w!ords.&h'AC\Teransparen!t"CcopyofCtheDoMcumentmeansaCmachine-readablecopye,k(represented'inJmaformatJnwhosespMeci cationisa!vdDailabletothegeneralpublic,snthatissuitablefor'revisingthedoMcumen!tstraightforwardlywithgenerictexteditorsor(forimagescom-'pMosedofpixels)genericpain!tprogramsor(fordra!wings)somewidelya!vdDailabledrawing'editor,and}thatissuitableforinputto}textformattersorforautomatictranslationto'a9OvdDariet!yof9Nformatssuitableforinputtotextformatters.A93cop!ymadeinanotherwise'Teransparen!t leformatwhosemarkup,orabsenceofmarkup,hasbMeenarrangedto'th!wart0or0discouragesubsequen!tmoMdi cationb!yreadersisnotTeransparen!t.Animage'format isnotTeransparen!tifused foranysubstantialamountoftext.MA copythatis'notf\Teransparen!t"iscalled\Opaque".'ExamplescXofsuitablecWformatsforTeransparen!tcopiesincludeplainasci>Kiwithout'markup,TeexinfoXIinputformat,LaT,[wEB XXJinputformat,K`y cmr10SGMLorXJXMLusingapublicly'a!vdDailableDTD,andstandard-conformingsimpleHTML,P!ostScriptorPDFdesigned'for.h!umanmoMdi cation.4ExamplesoftransparentimageformatsincludePNG,ԟXCF'andJPG.OpaqueformatsincludeproprietaryformatsthatcanbMereadandedited'onlysb!ysproprietarywordsproMcessors,&JSGMLorXMLforwhic!htheDTDand/or'proMcessingW*toolsarenotW)generallya!vdDailable,CYandthemachine-generatedHTML,'P!ostScriptforPDFproMducedbysomewordproMcessorsforoutputpurposesonlye.'The\TitleP!age"means,or7state7inorwitheac!hOpaquecopy7acomputer-networkloMcation7fromwhich'theSgeneralRnet!work-usingpublichasRaccesstodownloadusingRpublic-standardnetwork'protoMcols=acomplete>Teransparen!tcopyoftheDoMcument,freeofaddedmaterial.cIf'y!ouusethelatteroption,youmusttakereasonablyprudentsteps,whenyoubMegin'distributionlofmOpaquecopiesinquan!titye,ӮtolensurethatthisTeransparen!tcopylwill'remainCth!usaccessibleDatthestatedloMcationuntilDatleastoneyearafterDthelasttime'y!oukdistributekanOpaquecopyk(directlyorthroughyourkagentsorretailers)kofthat'editionftothepublic.'It&Nisrequested,FHbutnotrequired,FGthaty!oucontacttheauthorsoftheDoMcumentwell'bMeforeoredistributingoan!ylargenumbMeroofcopies,ztogiv!ethemac!hancetopro!videyou'withfanupMdatedv!ersionoftheDocumen!t.-4.'MODIFICAeTIONS'Yeou*ma!ycopyand)distributeaMoMdi edVeersionoftheDoMcumen!tundertheconditions'ofsections2and3abMo!ve,]providedthatyoureleasetheMoMdi edVeersionunderprecisely'this{License,`withthe{MoMdi edVeersion llingtheroleoftheDoMcumen!t,`thus{licensing'distributionandmoMdi cationoftheModi edVeersiontowhoev!erpossessesacop!yof'it.Infaddition,y!oumustdothesethingsintheMoMdi edVeersion:*A.=nUsepintheTitleP!age(andonthecovers,2ifany)atitledistinctfromthatofthe=nDoMcumen!t,+andfromthoseofpreviousversions(whichshould,+iftherewereanye,yGAppMendixfA:GNUFereeDocumen!tationLicense:1533͍=nbMelistedintheHistorysectionoftheDocumen!t).3Yeoumayusethesametitleas 33=nafpreviousv!ersioniftheoriginalpublisherofthatversiongivespMermission.+gB.=nList\ontheTitle[P!age,Zasauthors,YoneormorepMersonsoren!titiesrespMonsiblefor=nauthorship"of"themoMdi cationsintheMoMdi edVeersion,<|togetherwithatleast v!e=nof߸theprincipalauthorsoftheDoMcumen!t(allofitsprincipalauthors,uifithasfewer=nthanf v!e),unlesstheyreleaseyoufromthisrequirement.+@C.=nStateontheTitlepagethenameofthepublisheroftheMoMdi edVeersion,asthe=npublisher.*D.=nPreserv!efallthecopyrightnoticesoftheDoMcument.+oE.=nAddeandappropriatecop!yrightnoticeeforyouremoMdi cationsadjacentetotheother=ncop!yrightfnotices.,LF.=nInclude,hSimmediatelyXafterthecop!yrightXnotices,alicensenoticegivingthepublic=npMermissiontousetheMoMdi edVeersionunderthetermsofthisLicense,Pintheform=nsho!wnfintheAddendumbMelow.*nG.=nPreserv!eminlthatlicensenoticethefulllistsofIn!vdDariantSectionsmandrequiredCo!ver=nTeextsfgiv!enintheDoMcument'slicensenotice.*H.=nIncludefanunalteredcop!yofthisLicense./4I.=nPreserv!eچtheڇsectionEntitledڇ\History",PreserveitsڇTitle,andaddtoitanitem=nstating_ at_ leastthetitle,mQy!ear,newauthors,and_ publisheroftheMoMdi edVeersion=nasXgiv!enonWtheTitlePage.7IfWthereisnosectionEntitled\History"WintheDoMcu-=nmen!t,O#create-eone-dstatingthetitle,O$year,O#authors,and-epublisher-doftheDoMcument=nasWgiv!enonitsTitlePage,FthenaddanitemdescribingtheMoMdi edVeersionas=nstatedfintheprevioussen!tence.-J.=nPreserv!ethenetworkloMcation,ifanye,givenintheDoMcumentforpublicaccessto=naTeransparen!tcopyoftheDoMcument,MandlikewisethenetworkloMcationsgivenin=nthë́DoMcumen!t̓forpreviousversions̓itwasbasedon.S6These̓maybMeplaced̓inthe=n\History"8section.Yeou9ma!yomitanet!work8loMcationforaw!orkthatw!aspublished=natKleastfourKy!earsbMeforetheDocumen!titself,t@oriftheoriginalKpublisherofthe=nv!ersionfitreferstogivespMermission.*K.=nFeorran!ysectionEntitled\Acknowledgements"or\Dedications",oPreservetheTitle=nof/Rthe/Qsection,G#andpreserv!einthesectionallthesubstanceandtoneofeac!hofthe=ncon!tributorfacknowledgementsand/ordedicationsgiventherein.,Q*L.=nPreserv!e?all?theInvdDariant?SectionsoftheDoMcumen!t,f/unalteredintheirtextand=ninPtheirPtitles.@Sectionn!umbMersorPtheequivdDalentParenotconsideredpartofthe=nsectionftitles.)M.=nDelete5an!ysectionEntitled4\Endorsements".JSuchasection4maynotbMeincluded=ninftheMoMdi edVeersion.*N.=nDog!notg"retitlean!yexistingsectiontobMeEn!titled\Endorsements"g"ortocon ictin=ntitlefwithan!yInvdDariantSection.*O.=nPreserv!efanyWearrantyDisclaimers.΍'IftheMoMdi edVeersionincludesnewfron!t-mattersectionsorappMendicesthatqualify'asXSecondaryX Sectionsandcon!tainnomaterialcopiedfromtheDoMcumen!t,gyoumayXat'y!ourkoptionldesignatesomeorallofthesesectionsasin!vdDariant.Teodokthis,addtheirۍGAppMendixfA:GNUFereeDocumen!tationLicense:1633͍'titles@tothelist@ofIn!vdDariant@SectionsintheMoMdi edVeersion'slicensenotice.These 33'titlesfm!ustbMedistinctfromanyothersectiontitles.('Yeoupma!yqaddasectionEntitledq\Endorsements",sprovideditcontainsqnothingbut'endorsemen!tsofyourMoMdi edVeersionbyvdDariousparties|forexample,Zstatementsof'pMeerD revieworDthatthetexthasbeenDappro!vedD byanorganizationDastheauthoritative'de nitionfofastandard.('Yeouf,ma!yf-addapassageofupto v!ewordsf-asaFeron!t-Coverf,Text,sandf-apassageofup'to@25w!ords@asaBack-CoverTeext,Tto@theendofthelistofCo!ver@TeextsintheMoMdi ed'Veersion.+OnlyN+oneN*passageofFron!t-CoverN*TextN+andoneN*ofBac!k-CoverN+TextN*mayN+bMe'addedNb!y(orthrougharrangementsmadeby)Nanyoneentitye.IftheDoMcumentalready'includesaco!vertextforthesameco!ver,/!previouslyaddedbyyouorbyarrangement'made:b!ythesameentityyouareactingonbMehalfof,_youmay:notaddanother;but'y!ou)mayreplace*theoldone,2onexplicitpMermissionfromthepreviouspublisherthat'addedftheoldone.'The^author(s)]andpublisher(s)oftheDoMcumen!tdonotb!ythisLicensegiv!epMermission'tojusetheirknamesforpublicit!yforortoassertorimplyendorsemen!tofan!yMoMdi ed'Veersion.(-5.'COMBININGfDOCUMENTS'Yeouma!ycombinetheDoMcumentwithotherdoMcumen!tsreleasedunderthisLicense,'understhetermstde nedinsection4abMo!vesformodi edv!ersions,ӷprovidedsthaty!ou'include in thecom!binationalloftheIn!vdDariant SectionsofalloftheoriginaldoMcumen!ts,'unmoMdi ed,L3and5list5themallasIn!vdDariant5Sectionsofy!ourcombined5workin5itslicense'notice,fandthaty!oupreservealltheirWearrantyDisclaimers.'The@com!binedworkneedonlycontainonecopyofthisLicense,andmultipleidentical'In!vdDariantSectionsma!ybMereplacedwithasinglecopye.BIftherearemultipleInvdDariant'Sections6with6thesamenamebutdi eren!tcontents,Mmake6thetitleofeac!hsuch6section'uniquebb!ycaddingattheendofit,1"inparen!theses,1!thenameoftheoriginalauthoror'publisherofthat~sectionifkno!wn,!orelseauniquen!umbMer.Makethesameadjustmen!t'tothesectiontitlesinthelistofIn!vdDariantSectionsinthelicensenoticeofthecom!bined'w!ork.('In"the#com!bination,Jyoumust#combineany#sectionsEntitled#\History"inthevdDari-'ousoriginaldoMcumen!ts,xformingonesectionEn!titled\History";likewisecombineany'sectionsEn!titled\Acknowledgements",ۿandanysectionsEntitled\Dedications".]Yeou'm!ustfdeleteallsectionsEntitled\Endorsements."-6.'COLLECTIONSfOFDOCUMENTS('YeouҤma!ymakeacollectionconsistingofңtheDoMcumentandotherdoMcumentsreleased'underthisLicense,sandreplacetheindividualcopiesofthisLicenseinthevdDarious'doMcumen!tsDwithCasinglecopyCthatisincludedinthecollection,ypro!videdthaty!ou'follo!wtthetrulesofthisLicenseforv!erbatimcopyingtofeachtofthedoMcumen!tsinall'otherfrespMects.'Yeou=ma!yextractasingledoMcumentfromsuchacollection,2anddistributeitindividu-'ally4under4thisLicense,Wnpro!videdyou4insertacop!yofthisLicensein!totheextracted'doMcumen!t,andBfollowAthisLicenseinallotherrespMectsregardingv!erbatimcopyingAof'thatfdoMcumen!t.<GAppMendixfA:GNUFereeDocumen!tationLicense:1733͍-7.'A!GGREGAeTIONfWITHINDEPENDENTWORKS('A]compilation]oftheDoMcumen!t]oritsderivdDativeswithother]separateandindepMendent 33'doMcumen!tshoriworks,inoroniavolumeiofastorageordistributionmedium,iscalled'an \aggregate"ifthe cop!yright resultingfromthecompilationisnotusedtolimitthe'legal1 righ!ts1ofthecompilation'susersbMey!ondwhattheindividualw!orkspMermit.When'theDoMcumen!tisincludedinanaggregate,thisLicensedoesnotapplytotheother'w!orksfintheaggregatewhicharenotthemselvesderivdDativeworksoftheDoMcument.('IfVtheCo!verVTeextrequiremen!tofsection3UisapplicabletothesecopiesoftheDoMcument,'thenDifEtheDoMcumen!tislessthanonehalfoftheen!tireaggregate,~theDoMcumen!t'sCover'Teexts0ma!ybMeplacedoncoversthatbrackettheDoMcumentwithinthe0aggregate,Gorthe'electronic5qequivdDalen!t5pofcovers5piftheDoMcumen!tisinelectronicform.Otherwisethey'm!ustfappMearonprintedcoversthatbracketthewholeaggregate.-8.'TRANSLAeTION('Teranslation̯is̰consideredakindofmoMdi cation,Asoy!oumay̰distributetranslations'ofTtheTDoMcumen!tunderthetermsofsection4. ReplacingIn!vdDariantSectionsTwith'translationsvrequiresvspMecialpermissionfromtheirvcop!yrightvholders,butyouvmay'includektranslationsofsomejorallIn!vdDariantkSectionsinadditiontotheoriginalv!ersions'oftheseIn!vdDariantSections.=YeoumayincludeatranslationofthisLicense, andallthe'licensenoticesintheDoMcumen!t,FandanyWearrantyDisclaimers,Fprovidedthatyou'alsoincludetheoriginalEnglishv!ersionofthisLicenseandtheoriginalv!ersionsof'thosenoticesanddisclaimers.5Incaseofadisagreemen!tbMetweenthetranslationand'the:original:v!ersionofthisLicenseoranoticeordisclaimer,_theoriginalv!ersionwill'prevdDail.'IfpasectioninptheDoMcumen!tisEntitled\Acknowledgements",{\Dedications",orp\His-'tory",Athe(requiremen!t(section4)toPreserveitsTitle(section1)willtypicallyrequire'c!hangingftheactualtitle.-9.'TERMINAeTION('Yeouma!ynotcopye,moMdify,sublicense,ordistributetheDoMcumen!texceptasexpressly'pro!videdunderthisLicense.|Anyattemptotherwisetocop!ye,moMdify,sublicense,or'distributefitisv!oid,andwillautomaticallyterminateyourrightsunderthisLicense.'Ho!wever,ifAyou@ceaseallviolationofthisLicense,theny!ourlicensefromaparticular'cop!yrightJholderisJreinstated(a)pro!visionallye,sunlessanduntilJthecopyrightholder'explicitly_and nallyterminatesy!ourlicense,0and(b)pMermanentlye,0ifthecopyright'holder"failstonotifyy!ouoftheviolation"bysomereasonablemeanspriorto60days'afterfthecessation.('Moreo!ver,8your licensefromaparticularcop!yright holderisreinstatedpMermanen!tlyif'theV`cop!yrightholderVanoti esyouoftheviolationVabysomereasonablemeans,fbthisisthe' rstWtimey!ouWhaveWreceivednoticeofviolationWofthisLicense(foranyWwork)fromthat'cop!yrightholder,andy!oucuretheviolationpriorto30daysafteryourreceiptofthe'notice.'TeerminationNuofy!ourrightsunderthissectionNtdoMesnotterminatethelicensesofparties'whoqha!vereceivedcopiesorrightsfromyoupunderthisLicense.Ifyourrightshave'bMeenterminatedandnotpermanen!tlyreinstated,:receiptofacopyofsomeorallofthe'samefmaterialdoMesnotgiv!eyouanyrightstouseit.ӡGAppMendixfA:GNUFereeDocumen!tationLicense:1833͍10.'FUTUREfREVISIONSOFTHISLICENSE33'TheaFereebSoft!wareFeoundationbmaypublishbnew,Urevisedv!ersionsoftheGNU Feree 33'DoMcumen!tationLicensefromtimetotime.xRSuchnewversionswillbMesimilarinspirit'to thepresen!tversion,?butmaydi erindetailtoaddress newproblemsorconcerns.'Seefhttp://www.gnu.org/copyleft/.'Eac!hversionoftheLicenseisgivenadistinguishingversionnumbMer.IftheDocumen!t'spMeci esrthataparticularn!umberedrversionofthisLicense\oranylaterversion"'appliesQtoPit,Ly!ouhaveQtheoptionPoffollowingthetermsPandconditionseitherofthat'spMeci edv!ersionorofanylaterversionthathasbMeenpublished(notasadraft)by'the!Feree"Soft!wareFeoundation.If"theDoMcument"does!notspecify"av!ersionnumbMer!of'this$License,D)y!oumaychoMose$anyversioneverpublished(notasadraft)bytheFeree'Soft!wareUFeoundation.mIftheDoMcumen!tspeci esthatapro!xyTcandecidewhichfuture'v!ersions)of*thisLicensecanbMeused,thatpro!xy'spublicstatement*ofacceptanceofa'v!ersionfpMermanentlyauthorizesyoutochoMosethatversionfortheDoMcument.11.'RELICENSING'\Massiv!e{"Multiauthor{#CollabMorationSite"(or\MMCzSite")meansany{#WeorldWide'WeebLeserv!erthatpublishescopyrightableLfworksandalsoprovidesprominentfacilities'forMan!ybModytoeditthosew!orks.EAMpublicwikithatManybModycaneditisanexampleof'suc!h Yaserver.A ?\Massive XMultiauthorCollabMoration"(or\MMC") >containedinthe'sitefmeansan!ysetofcopyrightableworksthuspublishedontheMMCsite.'\CC-BY-SA"8means8the8Creativ!eCommonsAttribution-Share8Alike3.08licensepub-'lished8b!y8CreativeCommons8CorpMoration,N(anot-for-pro tcorpMorationwithaprincipal'placeofbusinessinSanFerancisco,7California,7asw!ellasfuturecopyleftversionsofthat'licensefpublishedb!ythatsameorganization.'\IncorpMorate"zmeanstopublishyorrepublishaDocumen!t,?inwholeoryinpart,aspart'offanotherDoMcumen!t.'An&\MMC& b> 3 cmmi10:ۍ:::::::::::::::::::::::::::::::::::71 33!G1.2 5ReadlinefIn!teractionRd:ۍ:::::::::::::::::::::::::::::::::::::::::::ԫ10G1.2.1 5ReadlinefBareEssen!tials.:ۍ::::::::::::::::::::::::::::::::::10G1.2.2 5ReadlinefMo!vementCommandsB":ۍ:::::::::::::::::::::::::::i20G1.2.3 5ReadlinefKillingCommands1:ۍ:::::::::::::::::::::::::::::::20G1.2.4 5ReadlinefArgumen!ts:ۍ::::::::::::::::::::::::::::::::::::::5c30G1.2.5 5Searc!hingfforCommandsintheHistoryi:ۍ:::::::::::::::::::K3!G1.3 5ReadlinefInitFile:ۍ::::::::::::::::::::::::::::::::::::::::::::::)a40G1.3.1 5ReadlinefInitFileSyn!tax :ۍ:::::::::::::::::::::::::::::::::]40G1.3.2 5ConditionalfInitConstructs:ۍ::::::::::::::::::::::::::::::~X120G1.3.3 5SamplefInitFile΍:ۍ:::::::::::::::::::::::::::::::::::::::::A12!G1.4 5BindablefReadlineCommands:ۍ::::::::::::::::::::::::::::::::2 160G1.4.1 5CommandsfFeorMo!ving>H:ۍ::::::::::::::::::::::::::::::::::160G1.4.2 5CommandsfFeorManipulatingTheHistoryi:ۍ:::::::::::::::9160G1.4.3 5CommandsfFeorChangingText{:ۍ:::::::::::::::::::::::::::180G1.4.4 5KillingfAndYeankingǍ:ۍ:::::::::::::::::::::::::::::::::::::190G1.4.5 5SpMecifyingfNumericArgumen!ts^V:ۍ::::::::::::::::::::::::::200G1.4.6 5LettingfReadlineT!ypMeFeorYouҍ:ۍ::::::::::::::::::::::::::=210G1.4.7 5KeybMoardfMacrosdI:ۍ::::::::::::::::::::::::::::::::::::::::210G1.4.8 5SomefMiscellaneousCommands&:ۍ::::::::::::::::::::::::::zn22!G1.5 5ReadlinefviMoMdeE:ۍ::::::::::::::::::::::::::::::::::::::::::::: 2333G]Apps3endixffAwLGNUFfreeDos3cumentationLicenseȓ32e:Q 32: @]24䍟6e133͍GT1 QCommandzLineEditingnGThisfc!hapterdescribMesthebasicfeaturesofthe<- 3 cmcsc10gnucommandlineeditinginterface.䍍G]1.1Intros3ductionf@toLineEditing33GTheffollo!wingparagraphsdescribMethenotationusedtorepresentkeystrokes.!GTheYtextY=set5?to`on'(thedefault),XReadlineattemptstobindthecon!trol-c!haracters{wtreated{vspMeciallybythe{vkernel'sterminaldriver{vtotheir-ReadlinefequivdDalen!ts.K:blink-matching-paren-IfYsetYto`on',Readlineattemptstobrie ymo!vetheYcursortoan-opMeningparen!thesiswhenaclosingparenthesisisinserted.The-defaultfis`off'.K:colored-completion-prefix-Ifsetto`on',Wwhenlistingcompletions,Readlinedispla!ysthecom--mon pre x ofthesetofpMossiblecompletionsusingadi eren!tcolor.-The colorde nitionsaretak!enfromthevdDalueoftheLS_COLORS-en!vironmentfvdDariable.Thedefaultis`off'.K:colored-stats-If0*set0+to`on',GReadlinedispla!yspMossiblecompletionsusingdi eren!t-colorstoindicatetheir let!ypMe.iThecolorde nitionsaretak!en-from;theKik!eysequencebystrippingtheeighthbitandpre xing-anESCc!haracter,convertingthemtoameta-pre xedk!eysequence.-TheNdefaultNvdDalueis`on',`FbutwillbMesetto`off'iftheloMcaleisone-thatfcon!tainseight-bitcharacters.fgK:disable-completion-Ifgsettog`On',?Readlinewillginhibitw!ordcompletion.Completion-c!haracters!willbMe!insertedintothelineasif!theyhadbMeenmapped-tofself-insert.Thedefaultis`off'.K:echo-control-characters-Whensetto`on',onopMeratingsystemsthatindicatetheysuppMort-it,readlineec!hoMesacharactercorrespMondingtoasignalgenerated-fromfthek!eybMoard.Thedefaultis`on'.fgK:editing-mode-Therediting-modevdDariablecon!trolswhichrdefaultsetofkeybind--ings?is>used.&Bydefault,#ReadlinestartsupinEmacseditingmoMde,-where~the~k!eystrokesare~mostsimilartoEmacs.ПThisvdDariablecan-bMefsettoeither`emacs'or`vi'.K:emacs-mode-string-This#stringis"displa!yed#immediatelybMeforethelastlineofthepri--mary6\prompt6[whenemacseditingmoMdeisactiv!e. ThevdDalueis-expandedolik!eaokeybinding,zsothestandardsetofometa-andcon--trol?pre xes?andbac!kslashescapMesequencesisa!vdDailable._Usethe-`\1'and`\2'escapMestobMeginandendsequencesofnon-prin!ting-c!haracters,whichXcanYbMeusedtoem!bedaXterminalcon!trolsequence-in!tofthemoMdestring.Thedefaultis`@'.fgK:enable-bracketed-paste-Whensetto`On',{Readlinewillcon guretheterminalinaw!aythat-willg"enableittoinserteac!hpasteg#intotheeditingbu erasasingle-stringofc!haracters,>insteadoftreatingeachcharacterasifithad-bMeenreadfromthek!eyboard.Thiscanprev!entpastedcharacters-fromfbMeingin!terpretedaseditingcommands.Thedefaultis`off'.kGChapterf1:CommandLineEditingMH733͍K:enable-keypad 33-Whensetto`on',mReadlinewilltrytoenabletheapplicationk!eypad-when1it1iscalled.Somesystemsneedthistoenablethearro!wkeys.-Thefdefaultis`off'.-K:enable-meta-key-WhenJsetIto`on',Readlinewilltrytoenablean!ymetamoMdi er-k!eytheterminalclaimstosuppMortwhenitiscalled.Onman!y-terminals,^=the9ymetak!eyisusedtosendeight-bitcharacters.The-defaultfis`on'.K:expand-tilde-IfPsettoP`on',a[tildeexpansionispMerformedwhenReadlineattempts-w!ordfcompletion.Thedefaultis`off'.K:history-preserve-point-Ifsetto`on',ZthehistorycoMdeattemptstoplacethepMoin!t(the-curren!t;kcursor;jpMosition)atthesameloMcationoneac!hhistoryline-retriev!ed^withprevious-historyor^next-history.Thedefault-isf`off'.,K:history-size-Setthemaxim!umnumbMerofhistoryen!triessavedinthehistory-list.Ifmsettozero,(oan!yexistinghistoryentriesarendeletedandno-newqen!triesarepsaved.XIfsetqtoavdDalueplessthanzero,ٳthenumbMer-ofhistoryen!triesisnotlimited.Bydefault,then!umbMerofhistory-en!triesbisnotalimited.Ifanattemptismadetosethistory-sizeito-anon-n!umericvdDalue,VthemaximumnumbMerofhistoryentrieswill-bMefsetto500.K:horizontal-scroll-mode-ThisNvdDariableNcanbMesettoeither`on'or`off'. Settingitto`on'-means$jthatthetextofthe$ilinesbMeingeditedwillscrollhorizon!tally-onasinglescreenlinewhentheyarelongerthanthewidthofthe-screen,:insteadofwrappingon!toanewscreenline.Bydefault,this-vdDariablefissetto`off'.K:input-meta-Ifsetto`on',Readlinewillenableeigh!t-bitinput(itwillnotclear-the"eigh!thbitin!thecharactersitreads), Pregardlessofwhatthe-terminalC-claimsitcansuppMort. 3ThedefaultvdDalueis`off',^but-Readlineۂwillsetitto`on'ہiftheloMcalecon!tainseight-bitcharacters.-Thefnamemeta-flagisasynon!ymforthisvdDariable.K:isearch-terminators-The5string5ofc!haractersthatshouldterminateanincremen!tal-searc!h|withoutsubsequentlyexecutingthecharacterasacommand-(seeZSection1.2.5[Searc!hing],page3). IfthisvdDariablehasnot-bMeenBggiv!enavdDalue,igthecharactersBfESCandC-Jwillterminatean-incremen!talfsearch.xyGChapterf1:CommandLineEditingMH833͍K:keymapRSets5Readline's6ideaofthecurren!tkeymap6forkey6bindingcom- 33-mands. AcceptableSPkeymapSOnamesareemacs,emacs-standard,-emacs-meta, 0emacs-ctlx,vi, 0vi-move,vi-command,and-vi-insert. 2viaisequivdDalen!ttovi-command(vi-moveaisalsoa-synon!ym);-emacsisequivdDalenttoemacs-standard.lThedefault-vdDalue/isemacs. wThevalueoftheediting-modevariablealso-a ectsfthedefaultk!eymap.oK:keyseq-timeout-SpMeci es thedurationReadlinewillw!ait foracharacterwhenread--inganam!biguouskeysequence(onethatcanformacompletek!ey-sequence-using.theinputreadsofar,orcantak!eadditionalinput-toKcompletealongerk!eysequence).ČIfnoinputisreceivedwithin-the*timeout,Readline*willusetheshorterbutcompletek!eyse--quence.ReadlineusesthisvdDaluetodeterminewhetherornotinput-isa!vdDailableonthecurren!tinputsource(rl_instreamb!ydefault).-The vdDalueisspMeci edinmilliseconds,(soavalueof1000meansthat-Readlinewillw!aitonesecondforadditionalinput.RIfthisvdDariableis-setYtoYavdDaluelessthanorequaltozero,i.ortoanon-n!umericvdDalue,-Readlinewillw!aituntilanotherkeyispressedtodecidewhic!hkey-sequenceftocomplete.ThedefaultvdDalueis500.nK:mark-directories-Ifsetto`on',completeddirectorynamesha!veaslashappMended.-Thefdefaultis`on'.K:mark-modified-lines-ThisNvdDariable,xwhensetto`on',xcausesReadlinetodispla!yanas--terisk (`*') atthestartofhistorylineswhic!hhave bMeenmodi ed.-ThisfvdDariableis`off'b!ydefault.K:mark-symlinked-directories-If$set$to`on',mcompletednameswhic!haresym!bMoliclinksto-directories\ha!veaslashappMended\(subjecttothevdDalueof-mark-directories).Thefdefaultis`off'.K:match-hidden-files-ThissvdDariable,ݣwhensetto`on',causesReadlinetormatc!h leswhose-namesMbMeginwitha`.'(hidden les)whenperforming lename-completion.Ifsetto`off',Jtheleading`.'m!ustbMesuppliedby-theLuserMinthe lenametobMecompleted.9ThisvdDariableis`on'b!y-default.nK:menu-complete-display-prefix-Ifsetto`on',men!ucompletiondisplaysthecommonpre xofthe-listXofYpMossiblecompletions(whic!hmayYbMeempty)YbMeforecycling-throughfthelist.Thedefaultis`off'.K:output-meta-IfAsetto`on',gReadlinewilldispla!ycharacterswiththeeighthbit-set`!directlyratherthanasa`"meta-pre xedescapMesequence. The GChapterf1:CommandLineEditingMH933͍-defaultkis`off',0butReadlinewillsetittoj`on'iftheloMcalecon!tains 33-eigh!t-bitfcharacters.덑K:page-completions-Ifsetto`on',,Readlineusesanin!ternalmore-likepagertodisplay-ascreenfulofpMossiblecompletionsatatime.ThisvdDariableis`on'-b!yfdefault.K:print-completions-horizontally-Ifsetto`on',Readlinewilldispla!ycompletionswithmatc!hessorted-horizon!tally8inalphabMeticalorder,oratherthandownthescreen.-Thefdefaultis`off'.K:revert-all-at-newline-Ifsetto`on',Readlinewillundoallc!hangestohistorylinesbMefore-returningqXwhenqYaccept-lineisexecuted.-Bydefault,{historylines-ma!ybMemodi edandretainindividualundolistsacrosscallsto-readline.Thefdefaultis`off'.K:show-all-if-ambiguous-This]altersthedefaultbMeha!viorofthe\completionfunctions.مIfset-toL`on',^.w!ordswhichL havemorethanL onepMossiblecompletioncause-thematc!hestobMelistedimmediatelyinsteadofringingthebell.-ThefdefaultvdDalueis`off'.K:show-all-if-unmodified-ThisaltersthedefaultbMeha!viorofthecompletionfunctionsina-fashionsimilartosho!w-all-if-ambiguous.Ifsetto`on',-w!ordswhich-ha!vemorethanonepMossiblecompletionwithoutan!ypossiblepar--tialcompletion(thepMossiblecompletionsdon'tshareacommon-pre x)causethematc!hestobMelistedimmediatelyinsteadofring--ingfthebMell.ThedefaultvdDalueis`off'.K:show-mode-in-prompt-Ifsetto`on',Vaddac!haractertothebMeginningofthepromptindi--catingtheeditingmoMde: "emacs,vicommand,orviinsertion. DThe-moMdefstringsareuser-settable.ThedefaultvdDalueis`off'.K:skip-completed-text-Ifjsetto`on',+thisialtersthedefaultcompletionbMeha!viorwhenin--serting}=a}output"-In \the \abMo!veexample, JSC-uisbMoundto \thefunction-universal-argument,|M-DEL &is %bMoundtothefunction-backward-kill-word, andiLC-oiKisbMoundtorunthemacro-expressed~Jonthe~Irigh!thandside(thatis,Btoinsertthetext`>-output'fin!totheline).-Anbn!umbMero[ofsym!bolicc!haracternamesarerecognizedwhile-proMcessing3thisk!eybindingsyntax:%wDEL,&ESC,ESCAPE,LFD,-NEWLINE,fRET,RETURN,R!UBOUT,SPeACE,SPC,andTeAB. ΍GChapterf1:CommandLineEditingӮ1133͍K:"k!eyseq@":function-nameCmorfmacro 33-k!eyseqdi ersfromkeynameVabMoveinthatstringsdenotinganen--tire hk!eysequencecanbMe gspeci ed,%by gplacing hthekeysequencein-doublequotes.bSomegnuEmacsst!ylekeyescapMescanbeused,as-inthefollo!wingexample,(butthespMecialc!haracternamesarenot-recognized.+"\C-u":universal-argument"\C-x\C-r":re-read-init-file"\e[11~":"FunctionKey1"-IntheabMo!veexample,C-uisagainboundtothefunction-universal-argument?(justasitw!asinthe rst?example),=`C-x-C-r'isbMoundtothefunctionre-read-init-file,&and`ESCf[11-~'fisbMoundtoinsertthetext`FunctionKey1'.#׍K:Thefollo!winggnuEmacsstyleescapMesequencesareavdDailablewhenspMecifyingK:k!eyfsequences:#؍K:\C-(con!trolfpre xK:\M-(metafpre xK:\e.QanfescapMec!haracterK:\\.Qbac!kslashK:\".Q",fadoublequotationmarkK:\'.Q',fasinglequoteorapMostropheK:InQadditiontoQthegnuEmacsst!yleescapMesequences,b)asecondsetofbac!kslash 33K:escapMesfisa!vdDailable:K:\a.Qalertf(bMell)K:\b.Qbac!kspaceK:\d.QdeleteK:\f.QformffeedK:\n.QnewlineK:\r.QcarriagefreturnK:\t.Qhorizon!talftabK:\v.Qv!erticalftabK:\nnn"Kthe$eigh!t-bitcharacter$whosevdDalueistheoMctalvalue$nnn(oneto 33-threefdigits)K:\xHH"Ktheeigh!t-bitcharacterwhosevdDalueisthehexadecimalvdDalueHH-(onefort!wofhexdigits)K:When}en!teringthetextofamacro,singleordoublequotesmustbMeusedtoK:indicateamacrode nition.?UnquotedtextisassumedtobMeafunctionname.?InK:themacrobModye,~thebac!kslashescapesdescribedabo!veareexpanded.Backslash ㍟GChapterf1:CommandLineEditingӮ1233͍K:willquotean!yothercharacterinthemacrotext,including`"'and`''.RFeor 33K:example,4 thefollo!wingbindingwillmake`C-xf\'insertasingle`\'in!totheline:Zčhʏ"\C-x\\":"\\"O!Gg1.3.2d(ConditionalMInitConstructs3GReadlineiimplemen!tsafacilitysimilarinispirittotheconditionalcompilationfeaturesofGtheJCHpreproMcessorKwhic!hallowsKkeybindingsandKvdDariablesettingstobMeperformedKastheGresultfoftests.Therearefourparserdirectiv!esused.TG$if(TheN$ifconstructallo!wsbindingstobMeOmadebasedontheeditingmode,ʈtheK:terminalbMeingused,͘ortheapplicationusingReadline.VThetextofthetestK:extendsftotheendoftheline;noc!haractersarerequiredtoisolateit.K:mode"KThemode=formofthe$ifdirectiv!eisusedtotestwhetherRead--line3isin3emacsorvimoMde. Thisma!ybe3usedinconjunction-with the`setfkeymap'command,for!instance,to setbindingsin-theemacs-standardandemacs-ctlxk!eymapsonlyifReadlineis-startingfoutinemacsmoMde.UK:term"KThe<term=form<ma!ybMeusedtoincludeterminal-spMeci ck!eybind--ings,pMerhapsVtobindVthek!eysequencesoutputb!ytheterminal's-functionހk!eys.;Thewordontherightsideofthe`='istestedagainst-bMothPthefullnameoftheOterminalandtheportionoftheterminal-namebMeforethe rst`-'./Thisallo!wssuntomatc!hbMothsunand-sun-cmd,fforinstance.K:application-Theapplicationconstructisusedtoincludeapplication-spMeci cset--tings.mEac!hprogramusingtheReadlinelibrarysetstheapplication-name,wand)K:Mo!veftotheendoftheinputhistorye,i.e.,thelinecurren!tlybMeingentered.Greverse-search-historyf(C-r)K:Searc!h:backwardstarting;atthecurrentlineandmoving;`up'throughthehis-K:toryfasnecessarye.Thisisanincremen!talsearch.Gforward-search-historyf(C-s)K:Searc!h>Dforwardstartingatthecurrent>Clineandmoving`down'throughtheK:historyfasnecessarye.Thisisanincremen!talsearch.Gnon-incremental-reverse-search-historyf(M-p)K:Searc!h:backwardstarting;atthecurrentlineandmoving;`up'throughthehis-K:toryRyasnecessaryusingRxanon-incremen!talsearchforastringRxsuppliedbytheK:user.Thefsearc!hstringmaymatchanywhereinahistoryline.Gnon-incremental-forward-search-historyf(M-n)K:Searc!h>Dforwardstartingatthecurrent>Clineandmoving`down'throughtheK:history3as3necessaryusinganon-incremen!talsearchfor3astringsuppliedb!ytheK:user.Thefsearc!hstringmaymatchanywhereinahistoryline.Ghistory-search-forwardf()K:Searc!hOforwardthroughPthehistoryforthestringofc!haractersbMetweentheK:startQofQthecurren!tlineandthepMoin!t. ThesearchQstringmustmatchQattheK:bMeginning"ofahistoryline.Thisisanon-incremen!talsearch.Bydefault,thisK:commandfisun!bMound.Ghistory-search-backwardf()K:Searc!h-backward-throughthehistoryforthestringofc!haractersbMetween-theK:startQofQthecurren!tlineandthepMoin!t. ThesearchQstringmustmatchQattheK:bMeginning"ofahistoryline.Thisisanon-incremen!talsearch.Bydefault,thisK:commandfisun!bMound.Ghistory-substr-search-forwardf()K:Searc!hOforwardthroughPthehistoryforthestringofc!haractersbMetweentheK:startuofuthecurren!tlineandthepMoin!t.ͳThesearchstringmayumatchanywhereK:in"ahistoryline.Thisisanon-incremen!talsearch.Bydefault,thiscommandK:isfun!bMound.Ghistory-substr-search-backwardf()K:Searc!h-backward-throughthehistoryforthestringofc!haractersbMetween-theK:startuofuthecurren!tlineandthepMoin!t.ͳThesearchstringmayumatchanywhereK:in"ahistoryline.Thisisanon-incremen!talsearch.Bydefault,thiscommandK:isfun!bMound.Gyank-nth-argf(M-C-y)K:Insertsthes rstargumen!ttothepreviouscommand(usuallythesecondw!ordK:on|the}previousline)atpMoin!t.h!Withanargumen!tn,insertthenthw!ordfrom׬GChapterf1:CommandLineEditingӮ1833͍K:the0previouscommand(thew!ordsin0thepreviouscommandbMeginwithword 33K:0).-dAnegativ!eargumentinsertsthenthw!ordfromtheendofthepreviousK:command.OnceGtheargumen!tFniscomputed, >theargumentisextractedFasifK:thef`!n'historyexpansionhadbMeenspeci ed.jGyank-last-argf(M-.orM-_)K:Insert5Elast5Fargumen!ttothepreviouscommand(thelastw!ordofthepreviousK:history"en!try).Witha#numericargument, bMehaveexactly#likeyank-nth-arg.K:Successiv!e%calls&toyank-last-argmove&backthrough&thehistorylist,insertingK:thelastw!ord(orthewordspMeci edbytheargumenttothe rstcall)ofeac!hlineK:in`turn. An!ynumeric`argumentsuppliedto`thesesuccessive`callsdeterminesK:the-Idirection-Jtomo!vethrough-Ithehistorye.rA-'negative-Iargumentswitches-ItheK:directionthroughthehistory(bac!korforw!ard). ThehistoryexpansionfacilitiesK:areMusedtoMextractthelastargumen!t,_asifthe`!$'historyexpansionhadbMeenK:spMeci ed.6Gg1.4.3d(CommandsMFģorChangingTextOGend-of-filef(usuallyC-d)K:The%c!haracter%indicatingend-of- leasset,?bforexample,b!y%stty.Ifthisc!harac-K:terisreadwhentherearenoc!haractersontheline,andpMointisatthebMeginningK:offtheline,Readlinein!terpretsitastheendofinputandreturnseof.Gdelete-charf(C-d)K:Deletethec!haracteratpMoint.IfthisfunctionisbMoundtothesamecharacterK:asfthett!yeofcharacter,asC-dcommonlyis,seeabMoveforthee ects.iGbackward-delete-charf(Rubout)K:Deletethec!haracterbMehindthecursor.۝AnumericargumentmeanstokilltheK:c!haractersfinsteadofdeletingthem.Gforward-backward-delete-charf()K:Deletethec!haracterunderthecursor,unlessthecursorisattheendoftheK:line,~inͭwhic!hͬcasethecharacterͬbMehindthecursorisdeleted.SBydefault,~thisK:isfnotbMoundtoak!eye.Gquoted-insertf(C-qorC-v)K:Addthenextc!haractertypMedtothelineverbatim.CThisishowtoinsertkeyK:sequencesflik!eC-q,forexample.Gtab-insertf(M-TAB)K:Insertfatabc!haracter.iGself-insertf(a,b,A,1,!,...e)K:Insertfy!ourself.Gbracketed-paste-beginf()K:This6function7isin!tendedtobMeboundto7the"brac!ketedpaste"escapMe6sequenceK:sen!tbysometerminals,andsuchabindingisassignedb!ydefault.mItallowsK:Readlinetoinsertthepastedtextasasingleunitwithouttreatingeac!hchar-K:acterasifithadbMeenreadfromthek!eybMoard._ThecharactersareinsertedK:aswifxeac!honewasxbMoundtoself-insert)insteadofexecutingan!yeditingK:commands.不GChapterf1:CommandLineEditingӮ1933͍Gtranspose-charsf(C-t) 33K:Dragthec!haracterbMeforethecursorforwardoverthecharacteratthecursor,K:mo!vingC"thecursorC!forwardaswell.IftheinsertionC!pMointisattheC!endoftheK:line,thenthistranspMosesthelastt!wocharactersoftheline.Negativ!eargumentsK:ha!vefnoe ect.mGtranspose-wordsf(M-t)K:Dragthew!ordbMeforepoin!tpastthewordafterpMoint,movingpointpastthatK:w!ordgaswell.IftheinsertionpMointisattheendofthegline,tAthistranspMosestheK:lastft!wowordsontheline.mGupcase-wordf(M-u)K:UppMercasethecurren!t(orfollowing)word.o#Withanegativeargument,uppMer-K:casefthepreviousw!ord,butdonotmovethecursor.Gdowncase-wordf(M-l)K:Lo!wercasethecurrent(orfollowing)word.Withanegativeargument,˖lowercaseK:thefpreviousw!ord,butdonotmovethecursor.mGcapitalize-wordf(M-c)K:Capitalize6the5curren!t(orfollo!wing)word.#With5anegativeargument,rcapitalizeK:thefpreviousw!ord,butdonotmovethecursor.Goverwrite-modef()K:Teoggleo!verwritemoMde. Withanexplicitpositiv!e numericargument, switchesK:too!verwritemoMde.fWithanexplicitnon-pMositiv!enumericargument,ϮswitchestoK:insertmoMde.=Thiscommanda ectsonlyemacsmoMde;vimodedoeso!verwriteK:di eren!tlye.Eachfcalltoreadline()startsininsertmoMde.$K:InIo!verwritemoMde,charactersbMoundtoself-insertIreplacethetextatK:pMoin!tratherthanpushingthetexttotheright.CharactersbMoundtoK:backward-delete-charfreplacethec!haracterbMeforepoin!twithaspace.K:Byfdefault,thiscommandisun!bMound.9ፍGg1.4.4d(KillingMAndYģankingP$Gkill-linef(C-k)K:KillfthetextfrompMoin!ttotheendoftheline.mGbackward-kill-linef(C-xRubout)K:Killfbac!kwardfromthecursortothebMeginningofthecurrentline.mGunix-line-discardf(C-u)K:Killfbac!kwardfromthecursortothebMeginningofthecurrentline.Gkill-whole-linef()K:Killcjallc!haracterscionthecurrentline,nomatterwherepMointis.Bydefault,K:thisfisun!bMound.mGkill-wordf(M-d)K:Kill frompMoin!t totheendofthecurren!tword,Por ifbMetweenwords,QtotheendK:offthenextw!ord.WeordbMoundariesarethesameasforward-word.GChapterf1:CommandLineEditingӮ2033͍Gbackward-kill-wordf(M-DEL) 33K:Killwtheww!ordbMehindpoin!t.XWeordwboundariesarewthesameasbackward-word.=Gunix-word-ruboutf(C-w)K:KillLthew!ordbMehindpoin!t,usingwhitespaceasawordbMoundarye.RThekilledK:textfissa!vedfonthekill-ring.Gunix-filename-ruboutf()K:Kill]thew!ordbMehindpoin!t,usingwhitespaceandtheslashcharacterastheK:w!ordfbMoundaries.Thekilledtextissavedonthekill-ring.=Gdelete-horizontal-spacef()K:DeletefallspacesandtabsaroundpMoin!t.Bydefault,thisisunbMound.Gkill-regionf()K:Killfthetextinthecurren!tregion.Bydefault,thiscommandisunbMound.Gcopy-region-as-killf()K:Cop!ythetextintheregiontothekillbu er,0EsoitcanbMey!ankedrightawaye.K:Byfdefault,thiscommandisun!bMound.Gcopy-backward-wordf()K:Cop!ythewordbMeforepoin!ttothekillbu er.ThewordbMoundariesaretheK:samefasbackward-word.Bydefault,thiscommandisun!bMound.Gcopy-forward-wordf()K:Cop!y8thewordfollowing9pMointtothekillbu er.SThe9wordbMoundariesaretheK:samefasforward-word.Bydefault,thiscommandisun!bMound.Gyankf(C-y)K:Yeankfthetopofthekillringin!tothebu eratpMoint.=Gyank-popf(M-y)K:Rotate'!thekill-ring,GPandy!ankthenewtop.`Yeoucan'"onlydothisifthepriorK:commandfisyankoryank-pop. |Gg1.4.5d(SpiecifyingMNumericArguments8qGdigit-argumentf(M-0,M-1,...M--)K:Add:Lthis:Kdigittotheargumen!talreadyaccumulating,Oorstarta:Knewargument.K:M--fstartsanegativ!eargument.Guniversal-argumentf()K:Thiskisanotherw!ayjtokspMecifyanargumen!t.Ifthiscommandisfollo!wedkbyoneK:ormoredigits,optionallywithaleadingmin!ussign,thosedigitsde nethear-K:gumen!t.If[the\commandisfollowedbydigits,*executinguniversal-argumentK:againѫendsѪthen!umericargument,{butisotherwiseѪignored._AsaspMecialcase,K:ifthiscommandisimmediatelyfollo!wedbyacharacterthatisneitheradigitK:normin!ussign,H{theargumentcountforthenextcommandismultipliedbyK:four.The6argumen!t6countisinitially6one,Zsoexecutingthisfunctionthe rstK:timeomak!esotheargumentocountfour,z&aosecondtimemak!estheargumen!tcountK:sixteen,fandsoon.Bydefault,thisisnotbMoundtoak!eye.GChapterf1:CommandLineEditingӮ2133͍Gg1.4.6d(LettingMReadlineTypieFģorYou.Gcompletef(TAB) 33K:A!ttempttopMerformcompletiononthetextbMeforepoin!t. TheactualcompletionK:pMerformedfisapplication-speci c.Thedefaultis lenamecompletion.*ƍGpossible-completionsf(M-?)K:List)the)pMossiblecompletionsofthetextbMeforepoin!t.gWhendisplaying)com-K:pletions,fReadlinesetsthen!umbMerofcolumnsusedfordispla!ytothevdDalueofK:completion-display-width,UtheavdDalueoftheen!vironmentavariableCOLUMNS,K:orfthescreenwidth,inthatorder.*ǍGinsert-completionsf(M-*)K:InsertallcompletionsofthetextbMeforepoin!tthatwouldhavebMeengeneratedK:b!yfpossible-completions.Gmenu-completef()K:SimilarVtocomplete,butreplacesthew!ordtoWbMecompletedwithasinglematchK:fromthelistofpMossiblecompletions.^Repeatedexecutionofmenu-completeK:stepsկthroughհthelistofpMossiblecompletions,!insertingeac!hmatchհinturn.K:A!tjtheendofjthelistofcompletions,thebMellisrung(subjecttothesettingK:ofThbell-style)andtheTioriginaltextisrestored.Anargumen!tofnmo!vesThnK:pMositions,Rforw!ard,Qinthelistofmatc!hes;oGanegative,QargumentmaybMe,QusedtoK:mo!vebackwardthroughthelist.VThiscommandisintendedtobMeboundtoK:TAB,fbutisun!bMoundbydefault.*ǍGmenu-complete-backwardf()K:Iden!tical5atomenu-complete,Ybut5`movesbackwardthroughthe5`listofpMossibleK:completions,fasifmenu-completehadbMeengiv!enanegativeargument.Gdelete-char-or-listf()K:Deletesthec!haracterunderthecursorifnotatthebMeginningorendoftheK:line(lik!edelete-char). 4Ifattheendoftheline,bMeha!vesidenticallytoK:possible-completions.Thisfcommandisun!bMoundbydefault.Gg1.4.7d(KeybioardMMacros.Gstart-kbd-macrof(C-x()K:Beginfsa!vingthecharacterstypMedintothecurrentkeybMoardmacro.Gend-kbd-macrof(C-x))K:StopG!sa!vingthecharactersG"typMedintothecurrentkeybMoardmacroG"andsavetheK:de nition.*ǍGcall-last-kbd-macrof(C-xe)K:Re-execute9Bthelast9Ck!eybMoardmacrode ned,]bymakingthe9CcharactersintheK:macrofappMearasift!ypedatthek!eyboard.Gprint-last-kbd-macrof()K:Prin!tfthelastkebMoardmacrode nedinaformatsuitablefortheinputrcPj le. ㍟GChapterf1:CommandLineEditingӮ2233͍Gg1.4.8d(SomeMMiscellaneousCommands(Gre-read-init-filef(C-xC-r) 33K:Readkinthejcon!tentskoftheinputrcJo le,andincorpMoratean!ybindingsorvdDariableK:assignmen!tsffoundthere.Gabortf(C-g)K:AbMort/the/curren!teditingcommandandringtheterminal'sbMell(subjecttotheK:settingfofbell-style).Gdo-uppercase-versionf(M-a,M-b,M-x,...e)K:IfQthemeta edc!haracterxTislowercase,brunthecommandthatisbMoundtotheK:correspMondingfuppercasec!haracter.Gprefix-metaf(ESC)K:Metafy2the1nextc!haractertypMed.q@This2isfork!eybMoardswithoutametak!eye.K:T!ypingf`ESCf'isequivdDalenttotypingM-f.Gundof(C-_orC-xC-u)K:Incremen!talfundo,separatelyremembMeredforeachline.Grevert-linef(M-r)K:Undoallc!hangesmadetothisline.ThisislikeexecutingtheundocommandK:enoughftimestogetbac!ktothebMeginning.Gtilde-expandf(M-~)K:P!erformftildeexpansiononthecurrentword.Gset-markf(C-@)K:SetthemarktothepMoin!t.Ifanumericargumentissupplied,ythemarkissetK:tofthatpMosition.Gexchange-point-and-markf(C-xC-x)K:Sw!apthepMointwiththemark.'"ThecurrentcursorpMositionissettothesavedK:pMosition,fandtheoldcursorpositionissa!vedfasthemark.Gcharacter-searchf(C-])K:A&c!haracterQisRreadandpMointRismovedtoRthenextoMccurrenceofthatc!haracter.K:Afnegativ!ecountsearchesforpreviousoMccurrences.Gcharacter-search-backwardf(M-C-])K:Ac"c!haracterciscreadandpMoin!tismovedctothepreviousoMccurrenceofthatK:c!haracter.AfnegativecountsearchesforsubsequentoMccurrences.Gskip-csi-sequencef()K:ReadGenoughc!haractersGtoconsumeamulti-keysequencesuchGasthosede nedK:forzk!eyslikezHomeandEnd.[SuchsequencesbMeginwithzaControlSequenceK:IndicatorfM(CSI),usuallyfLESC-[.IfthisfMsequenceisbMoundfLto"\e[",Fk!eyspro-K:ducing։suc!hsequenceswillֈhavenoe ectunlessexplicitlybMoundֈtoareadlineK:command,insteadXofinsertingstra!ycharactersintotheeditingWbu er.gThisisK:un!bMoundfbydefault,butusuallybMoundtoESC-[.Ginsert-commentf(M-#)K:WithoutGaGn!umericargument,p*thevdDalueGofthecomment-beginvdDariableisin-K:sertedatthebMeginningofthecurren!tline.QdIfanumericargumentissupplied,GChapterf1:CommandLineEditingӮ2333͍K:thisccommandactsasatoggle:Yifcthec!haractersatthebMeginningoftheline 33K:donotmatc!hthevdDalueofcomment-begin,Ythevalueisinserted,YotherwisetheK:c!haracters6incomment-beginare5deletedfromthebMeginningoftheline.dMInK:eitherfcase,thelineisacceptedasifanewlinehadbMeent!yped.33Gdump-functionsf()K:Prin!t,Qall,Pofthefunctionsandtheirk!eybindingstotheReadlineoutputstream.K:Ifan!umericargumentissupplied,theoutputisformattedinsuc!hawaythatK:itfcanbMemadepartofaninputrcPj le.Thiscommandisun!boundb!ydefault.Gdump-variablesf()K:Prin!tallofthesettablevdDariablesandtheirvaluestotheReadlineoutputstream.K:Ifan!umericargumentissupplied,theoutputisformattedinsuc!hawaythatK:itfcanbMemadepartofaninputrcPj le.Thiscommandisun!boundb!ydefault.Gdump-macrosf()K:Prin!t allofthe ReadlinekeysequencesbMoundtomacros andthestringstheyK:output.rIf-Jan!umericargumentis-Ksupplied,Otheoutputisformattedinsuc!haK:w!aythatitcanbMemadepartofaninputrcD le.Thiscommandisun!bMoundbyK:default.Gemacs-editing-modef(C-e)K:WhenfinvicommandmoMde,thiscausesaswitc!htoemacseditingmode.Gvi-editing-modef(M-C-j)K:WhenfinemacseditingmoMde,thiscausesaswitc!htovieditingmode.G]1.5Readlinef@viMos3deGWhile`theReadline_librarydoMesnotha!ve`afullsetofvieditingfunctions,itdoMescon!tainGenoughtoallo!wsimpleeditingoftheline..TheReadlinevimoMdebeha!vesasspMeci edinGthefposixstandard.33!GIn|Uorder|Vtoswitc!hinteractively|UbMetweenemacs|UandvieditingmoMdes,usethecommandGM-C-ji(bMoundjtoemacs-editing-modewheninjvimodeandtojvi-editing-modeinemacsGmoMde).ThefReadlinedefaultisemacsmode.!GWheny!ouenteralineinvimoMde,youarealreadyplacedin`insertion'moMde,asifyouGhadt!ypMedan`i'.PressingESCswitchesyouinto`command'moMde,(whereyoucanedittheGtextofthelinewiththestandardvimo!vementkeys,);movetoprevioushistorylineswithG`k'fandsubsequen!tlineswith`j',andsoforth.!2433͍GTApp=endixzA QGNUzFaGreeDocumenutationLicenseAVeersionf1.3,3No!vembMerf2008Q.Cop!yrightcf @2000,f2001,2002,2007,2008FereeSoft!warefFoundation,Inc. 33.http://fsf.org/ff.Ev!eryonefispMermittedtocop!yanddistributeverbatimcopies.offthislicensedoMcumen!t,butchangingitisnotallowed.-0.'PREAMBLE'ThevQpurpMosevRofthisLicenseistomak!eaman!ual,LtextbMook,orvQothervRfunctionaland'usefuldoMcumen!tfree;inthesenseoffreedom:!toassureev!eryonethee ectivefreedom'to9cop!y:andredistributeit,.withorwithoutmoMdifyingit,.eithercommerciallyornon-'commerciallye.cSecondarily,Hthis(aLicense(bpreserv!esfortheauthorandpublisheraw!ay'toW9getcreditW8fortheirw!ork,mwhilenotbMeingconsideredrespMonsibleformodi cations'madefb!yothers.'This/License0isakindof\cop!yleft",which/meansthatderivdDativ!eworksof0thedoMcument'm!ustthemselvesbMefreeinthesamesense. Itcomplemen!tstheGNUGeneralPublic'License,fwhic!hisacopyleftlicensedesignedforfreesoftware.'Wee#ha!vedesignedthisLicenseinordertouseit"formanualsforfreesoftware,bMecause'free?soft!wareneedsfree>doMcumentation:afreeprogramshould>comewithmanuals'pro!vidingurtheussamefreedomsthatthesoft!wareurdoMes.͌ButthisLicenseisnotlimitedto'soft!waremanuals;itcanbMeusedforan!ytextualw!ork,regardlessofsubjectmatteror'whether2itispublishedasaprin!tedbMook.@BWee2recommendthisLicenseprincipallyfor'w!orksfwhosepurpMoseisinstructionorreference.-1.'APPLICABILITYfANDDEFINITIONSP'This>License=appliestoan!ymanual=orotherwork,inany=medium,thatcontains>a'noticeplacedb!ythecop!yrightholdersayingitcanbMedistributedundertheterms'ofthisLicense.l=Suc!hanoticegrantsaworld-wide, royalty-freelicense,unlimitedin'duration, toouseothatw!orkundertheconditionsstatedherein. 9The\DoMcumen!t",'bMelo!w,tkrefersgtoanysuchgmanualorwork. AnymembMerofthegpublicisalicensee,tkand'isaddressedas\y!ou".@Yeouacceptthelicenseifyoucopye, moMdifyordistributethework'infaw!ayfrequiringpMermissionundercop!yrightflaw.'A \MoMdi ed Veersion" oftheDocumen!tmeans anyworkcontainingthe DoMcumentor'ahpMortiongofit,heithercopiedv!erbatim,horwithmoMdi cationsand/ortranslatedin!to'anotherflanguage.'A\SecondarySection"isanamedappMendixorafron!t-mattersectionoftheDoMcumen!t'that/dealsexclusiv!ely0withtherelationshipofthepublishersorauthorsoftheDoMcumen!t'toz thezDoMcumen!t'soverallzsubject(ortorelatedmatters)andcon!tainsnothingthat'couldخfallدdirectlywithinthato!verallsubject.t(Thus,%@iftheخDoMcumentisinدparta'textbMookՆofՅmathematics,MaSecondarySectionma!ynotexplainan!ymathematics.)=The'relationshipGcouldbMeamatterofhistoricalconnectionwiththesubjectorwithrelated'matters,jorBofBlegal,commercial,jphilosophical,ethicalorpMoliticalBpositionregarding'them.'Ther\In!vdDariantsSections"arecertainSecondarySectionswhosetitlesaredesignated,0as'bMeing2Dthose2CofIn!vdDariant2DSections,I}inthenoticethatsa!ysthattheDoMcumen!tisreleased,GAppMendixfA:GNUFereeDocumen!tationLicense:2533͍'underS5thisLicense."IfS4asectiondoMesnot ttheabMo!veS5de nitionofSecondarythenitis 33'notӍallo!wedtoӎbMedesignatedasInvdDariant.eSTheDoMcumentmayӎcontainzeroInvdDariant'Sections.IftheDoMcumen!tdoesnotiden!tifyanyInvdDariantSectionsthentherearenone.&g'Thef\Co!verfTeexts"arecertainshortpassagesoftextthatarelisted,asFeron!t-Cover'Teexts-orBac!k-Cover,Texts,"8in-thenoticethat,sa!ysthattheDoMcument,isreleasedunder'thisLicense.AAnFeron!t-CoverTeextmaybMeatmost5words,6andaBack-CoverTeextmay'bMefatmost25w!ords.&h'AC\Teransparen!t"CcopyofCtheDoMcumentmeansaCmachine-readablecopye,k(represented'inJmaformatJnwhosespMeci cationisa!vdDailabletothegeneralpublic,snthatissuitablefor'revisingthedoMcumen!tstraightforwardlywithgenerictexteditorsor(forimagescom-'pMosedofpixels)genericpain!tprogramsor(fordra!wings)somewidelya!vdDailabledrawing'editor,and}thatissuitableforinputto}textformattersorforautomatictranslationto'a9OvdDariet!yof9Nformatssuitableforinputtotextformatters.A93cop!ymadeinanotherwise'Teransparen!t leformatwhosemarkup,orabsenceofmarkup,hasbMeenarrangedto'th!wart0or0discouragesubsequen!tmoMdi cationb!yreadersisnotTeransparen!t.Animage'format isnotTeransparen!tifused foranysubstantialamountoftext.MA copythatis'notf\Teransparen!t"iscalled\Opaque".'ExamplescXofsuitablecWformatsforTeransparen!tcopiesincludeplainasci>Kiwithout'markup,TeexinfoXIinputformat,LaT,[wEB XXJinputformat,K`y cmr10SGMLorXJXMLusingapublicly'a!vdDailableDTD,andstandard-conformingsimpleHTML,P!ostScriptorPDFdesigned'for.h!umanmoMdi cation.4ExamplesoftransparentimageformatsincludePNG,ԟXCF'andJPG.OpaqueformatsincludeproprietaryformatsthatcanbMereadandedited'onlysb!ysproprietarywordsproMcessors,&JSGMLorXMLforwhic!htheDTDand/or'proMcessingW*toolsarenotW)generallya!vdDailable,CYandthemachine-generatedHTML,'P!ostScriptforPDFproMducedbysomewordproMcessorsforoutputpurposesonlye.'The\TitleP!age"means,or7state7inorwitheac!hOpaquecopy7acomputer-networkloMcation7fromwhich'theSgeneralRnet!work-usingpublichasRaccesstodownloadusingRpublic-standardnetwork'protoMcols=acomplete>Teransparen!tcopyoftheDoMcument,freeofaddedmaterial.cIf'y!ouusethelatteroption,youmusttakereasonablyprudentsteps,whenyoubMegin'distributionlofmOpaquecopiesinquan!titye,ӮtolensurethatthisTeransparen!tcopylwill'remainCth!usaccessibleDatthestatedloMcationuntilDatleastoneyearafterDthelasttime'y!oukdistributekanOpaquecopyk(directlyorthroughyourkagentsorretailers)kofthat'editionftothepublic.'It&Nisrequested,FHbutnotrequired,FGthaty!oucontacttheauthorsoftheDoMcumentwell'bMeforeoredistributingoan!ylargenumbMeroofcopies,ztogiv!ethemac!hancetopro!videyou'withfanupMdatedv!ersionoftheDocumen!t.-4.'MODIFICAeTIONS'Yeou*ma!ycopyand)distributeaMoMdi edVeersionoftheDoMcumen!tundertheconditions'ofsections2and3abMo!ve,]providedthatyoureleasetheMoMdi edVeersionunderprecisely'this{License,`withthe{MoMdi edVeersion llingtheroleoftheDoMcumen!t,`thus{licensing'distributionandmoMdi cationoftheModi edVeersiontowhoev!erpossessesacop!yof'it.Infaddition,y!oumustdothesethingsintheMoMdi edVeersion:*A.=nUsepintheTitleP!age(andonthecovers,2ifany)atitledistinctfromthatofthe=nDoMcumen!t,+andfromthoseofpreviousversions(whichshould,+iftherewereanye,O{GAppMendixfA:GNUFereeDocumen!tationLicense:2733͍=nbMelistedintheHistorysectionoftheDocumen!t).3Yeoumayusethesametitleas 33=nafpreviousv!ersioniftheoriginalpublisherofthatversiongivespMermission.+gB.=nList\ontheTitle[P!age,Zasauthors,YoneormorepMersonsoren!titiesrespMonsiblefor=nauthorship"of"themoMdi cationsintheMoMdi edVeersion,<|togetherwithatleast v!e=nof߸theprincipalauthorsoftheDoMcumen!t(allofitsprincipalauthors,uifithasfewer=nthanf v!e),unlesstheyreleaseyoufromthisrequirement.+@C.=nStateontheTitlepagethenameofthepublisheroftheMoMdi edVeersion,asthe=npublisher.*D.=nPreserv!efallthecopyrightnoticesoftheDoMcument.+oE.=nAddeandappropriatecop!yrightnoticeeforyouremoMdi cationsadjacentetotheother=ncop!yrightfnotices.,LF.=nInclude,hSimmediatelyXafterthecop!yrightXnotices,alicensenoticegivingthepublic=npMermissiontousetheMoMdi edVeersionunderthetermsofthisLicense,Pintheform=nsho!wnfintheAddendumbMelow.*nG.=nPreserv!eminlthatlicensenoticethefulllistsofIn!vdDariantSectionsmandrequiredCo!ver=nTeextsfgiv!enintheDoMcument'slicensenotice.*H.=nIncludefanunalteredcop!yofthisLicense./4I.=nPreserv!eچtheڇsectionEntitledڇ\History",PreserveitsڇTitle,andaddtoitanitem=nstating_ at_ leastthetitle,mQy!ear,newauthors,and_ publisheroftheMoMdi edVeersion=nasXgiv!enonWtheTitlePage.7IfWthereisnosectionEntitled\History"WintheDoMcu-=nmen!t,O#create-eone-dstatingthetitle,O$year,O#authors,and-epublisher-doftheDoMcument=nasWgiv!enonitsTitlePage,FthenaddanitemdescribingtheMoMdi edVeersionas=nstatedfintheprevioussen!tence.-J.=nPreserv!ethenetworkloMcation,ifanye,givenintheDoMcumentforpublicaccessto=naTeransparen!tcopyoftheDoMcument,MandlikewisethenetworkloMcationsgivenin=nthë́DoMcumen!t̓forpreviousversions̓itwasbasedon.S6These̓maybMeplaced̓inthe=n\History"8section.Yeou9ma!yomitanet!work8loMcationforaw!orkthatw!aspublished=natKleastfourKy!earsbMeforetheDocumen!titself,t@oriftheoriginalKpublisherofthe=nv!ersionfitreferstogivespMermission.*K.=nFeorran!ysectionEntitled\Acknowledgements"or\Dedications",oPreservetheTitle=nof/Rthe/Qsection,G#andpreserv!einthesectionallthesubstanceandtoneofeac!hofthe=ncon!tributorfacknowledgementsand/ordedicationsgiventherein.,Q*L.=nPreserv!e?all?theInvdDariant?SectionsoftheDoMcumen!t,f/unalteredintheirtextand=ninPtheirPtitles.@Sectionn!umbMersorPtheequivdDalentParenotconsideredpartofthe=nsectionftitles.)M.=nDelete5an!ysectionEntitled4\Endorsements".JSuchasection4maynotbMeincluded=ninftheMoMdi edVeersion.*N.=nDog!notg"retitlean!yexistingsectiontobMeEn!titled\Endorsements"g"ortocon ictin=ntitlefwithan!yInvdDariantSection.*O.=nPreserv!efanyWearrantyDisclaimers.΍'IftheMoMdi edVeersionincludesnewfron!t-mattersectionsorappMendicesthatqualify'asXSecondaryX Sectionsandcon!tainnomaterialcopiedfromtheDoMcumen!t,gyoumayXat'y!ourkoptionldesignatesomeorallofthesesectionsasin!vdDariant.Teodokthis,addtheiraݍGAppMendixfA:GNUFereeDocumen!tationLicense:2833͍'titles@tothelist@ofIn!vdDariant@SectionsintheMoMdi edVeersion'slicensenotice.These 33'titlesfm!ustbMedistinctfromanyothersectiontitles.('Yeoupma!yqaddasectionEntitledq\Endorsements",sprovideditcontainsqnothingbut'endorsemen!tsofyourMoMdi edVeersionbyvdDariousparties|forexample,Zstatementsof'pMeerD revieworDthatthetexthasbeenDappro!vedD byanorganizationDastheauthoritative'de nitionfofastandard.('Yeouf,ma!yf-addapassageofupto v!ewordsf-asaFeron!t-Coverf,Text,sandf-apassageofup'to@25w!ords@asaBack-CoverTeext,Tto@theendofthelistofCo!ver@TeextsintheMoMdi ed'Veersion.+OnlyN+oneN*passageofFron!t-CoverN*TextN+andoneN*ofBac!k-CoverN+TextN*mayN+bMe'addedNb!y(orthrougharrangementsmadeby)Nanyoneentitye.IftheDoMcumentalready'includesaco!vertextforthesameco!ver,/!previouslyaddedbyyouorbyarrangement'made:b!ythesameentityyouareactingonbMehalfof,_youmay:notaddanother;but'y!ou)mayreplace*theoldone,2onexplicitpMermissionfromthepreviouspublisherthat'addedftheoldone.'The^author(s)]andpublisher(s)oftheDoMcumen!tdonotb!ythisLicensegiv!epMermission'tojusetheirknamesforpublicit!yforortoassertorimplyendorsemen!tofan!yMoMdi ed'Veersion.(-5.'COMBININGfDOCUMENTS'Yeouma!ycombinetheDoMcumentwithotherdoMcumen!tsreleasedunderthisLicense,'understhetermstde nedinsection4abMo!vesformodi edv!ersions,ӷprovidedsthaty!ou'include in thecom!binationalloftheIn!vdDariant SectionsofalloftheoriginaldoMcumen!ts,'unmoMdi ed,L3and5list5themallasIn!vdDariant5Sectionsofy!ourcombined5workin5itslicense'notice,fandthaty!oupreservealltheirWearrantyDisclaimers.'The@com!binedworkneedonlycontainonecopyofthisLicense,andmultipleidentical'In!vdDariantSectionsma!ybMereplacedwithasinglecopye.BIftherearemultipleInvdDariant'Sections6with6thesamenamebutdi eren!tcontents,Mmake6thetitleofeac!hsuch6section'uniquebb!ycaddingattheendofit,1"inparen!theses,1!thenameoftheoriginalauthoror'publisherofthat~sectionifkno!wn,!orelseauniquen!umbMer.Makethesameadjustmen!t'tothesectiontitlesinthelistofIn!vdDariantSectionsinthelicensenoticeofthecom!bined'w!ork.('In"the#com!bination,Jyoumust#combineany#sectionsEntitled#\History"inthevdDari-'ousoriginaldoMcumen!ts,xformingonesectionEn!titled\History";likewisecombineany'sectionsEn!titled\Acknowledgements",ۿandanysectionsEntitled\Dedications".]Yeou'm!ustfdeleteallsectionsEntitled\Endorsements."-6.'COLLECTIONSfOFDOCUMENTS('YeouҤma!ymakeacollectionconsistingofңtheDoMcumentandotherdoMcumentsreleased'underthisLicense,sandreplacetheindividualcopiesofthisLicenseinthevdDarious'doMcumen!tsDwithCasinglecopyCthatisincludedinthecollection,ypro!videdthaty!ou'follo!wtthetrulesofthisLicenseforv!erbatimcopyingtofeachtofthedoMcumen!tsinall'otherfrespMects.'Yeou=ma!yextractasingledoMcumentfromsuchacollection,2anddistributeitindividu-'ally4under4thisLicense,Wnpro!videdyou4insertacop!yofthisLicensein!totheextracted'doMcumen!t,andBfollowAthisLicenseinallotherrespMectsregardingv!erbatimcopyingAof'thatfdoMcumen!t.r>GAppMendixfA:GNUFereeDocumen!tationLicense:2933͍-7.'A!GGREGAeTIONfWITHINDEPENDENTWORKS('A]compilation]oftheDoMcumen!t]oritsderivdDativeswithother]separateandindepMendent 33'doMcumen!tshoriworks,inoroniavolumeiofastorageordistributionmedium,iscalled'an \aggregate"ifthe cop!yright resultingfromthecompilationisnotusedtolimitthe'legal1 righ!ts1ofthecompilation'susersbMey!ondwhattheindividualw!orkspMermit.When'theDoMcumen!tisincludedinanaggregate,thisLicensedoesnotapplytotheother'w!orksfintheaggregatewhicharenotthemselvesderivdDativeworksoftheDoMcument.('IfVtheCo!verVTeextrequiremen!tofsection3UisapplicabletothesecopiesoftheDoMcument,'thenDifEtheDoMcumen!tislessthanonehalfoftheen!tireaggregate,~theDoMcumen!t'sCover'Teexts0ma!ybMeplacedoncoversthatbrackettheDoMcumentwithinthe0aggregate,Gorthe'electronic5qequivdDalen!t5pofcovers5piftheDoMcumen!tisinelectronicform.Otherwisethey'm!ustfappMearonprintedcoversthatbracketthewholeaggregate.-8.'TRANSLAeTION('Teranslation̯is̰consideredakindofmoMdi cation,Asoy!oumay̰distributetranslations'ofTtheTDoMcumen!tunderthetermsofsection4. ReplacingIn!vdDariantSectionsTwith'translationsvrequiresvspMecialpermissionfromtheirvcop!yrightvholders,butyouvmay'includektranslationsofsomejorallIn!vdDariantkSectionsinadditiontotheoriginalv!ersions'oftheseIn!vdDariantSections.=YeoumayincludeatranslationofthisLicense, andallthe'licensenoticesintheDoMcumen!t,FandanyWearrantyDisclaimers,Fprovidedthatyou'alsoincludetheoriginalEnglishv!ersionofthisLicenseandtheoriginalv!ersionsof'thosenoticesanddisclaimers.5Incaseofadisagreemen!tbMetweenthetranslationand'the:original:v!ersionofthisLicenseoranoticeordisclaimer,_theoriginalv!ersionwill'prevdDail.'IfpasectioninptheDoMcumen!tisEntitled\Acknowledgements",{\Dedications",orp\His-'tory",Athe(requiremen!t(section4)toPreserveitsTitle(section1)willtypicallyrequire'c!hangingftheactualtitle.-9.'TERMINAeTION('Yeouma!ynotcopye,moMdify,sublicense,ordistributetheDoMcumen!texceptasexpressly'pro!videdunderthisLicense.|Anyattemptotherwisetocop!ye,moMdify,sublicense,or'distributefitisv!oid,andwillautomaticallyterminateyourrightsunderthisLicense.'Ho!wever,ifAyou@ceaseallviolationofthisLicense,theny!ourlicensefromaparticular'cop!yrightJholderisJreinstated(a)pro!visionallye,sunlessanduntilJthecopyrightholder'explicitly_and nallyterminatesy!ourlicense,0and(b)pMermanentlye,0ifthecopyright'holder"failstonotifyy!ouoftheviolation"bysomereasonablemeanspriorto60days'afterfthecessation.('Moreo!ver,8your licensefromaparticularcop!yright holderisreinstatedpMermanen!tlyif'theV`cop!yrightholderVanoti esyouoftheviolationVabysomereasonablemeans,fbthisisthe' rstWtimey!ouWhaveWreceivednoticeofviolationWofthisLicense(foranyWwork)fromthat'cop!yrightholder,andy!oucuretheviolationpriorto30daysafteryourreceiptofthe'notice.'TeerminationNuofy!ourrightsunderthissectionNtdoMesnotterminatethelicensesofparties'whoqha!vereceivedcopiesorrightsfromyoupunderthisLicense.Ifyourrightshave'bMeenterminatedandnotpermanen!tlyreinstated,:receiptofacopyofsomeorallofthe'samefmaterialdoMesnotgiv!eyouanyrightstouseit.GAppMendixfA:GNUFereeDocumen!tationLicense:3033͍10.'FUTUREfREVISIONSOFTHISLICENSE33'TheaFereebSoft!wareFeoundationbmaypublishbnew,Urevisedv!ersionsoftheGNU Feree 33'DoMcumen!tationLicensefromtimetotime.xRSuchnewversionswillbMesimilarinspirit'to thepresen!tversion,?butmaydi erindetailtoaddress newproblemsorconcerns.'Seefhttp://www.gnu.org/copyleft/.'Eac!hversionoftheLicenseisgivenadistinguishingversionnumbMer.IftheDocumen!t'spMeci esrthataparticularn!umberedrversionofthisLicense\oranylaterversion"'appliesQtoPit,Ly!ouhaveQtheoptionPoffollowingthetermsPandconditionseitherofthat'spMeci edv!ersionorofanylaterversionthathasbMeenpublished(notasadraft)by'the!Feree"Soft!wareFeoundation.If"theDoMcument"does!notspecify"av!ersionnumbMer!of'this$License,D)y!oumaychoMose$anyversioneverpublished(notasadraft)bytheFeree'Soft!wareUFeoundation.mIftheDoMcumen!tspeci esthatapro!xyTcandecidewhichfuture'v!ersions)of*thisLicensecanbMeused,thatpro!xy'spublicstatement*ofacceptanceofa'v!ersionfpMermanentlyauthorizesyoutochoMosethatversionfortheDoMcument.11.'RELICENSING'\Massiv!e{"Multiauthor{#CollabMorationSite"(or\MMCzSite")meansany{#WeorldWide'WeebLeserv!erthatpublishescopyrightableLfworksandalsoprovidesprominentfacilities'forMan!ybModytoeditthosew!orks.EAMpublicwikithatManybModycaneditisanexampleof'suc!h Yaserver.A ?\Massive XMultiauthorCollabMoration"(or\MMC") >containedinthe'sitefmeansan!ysetofcopyrightableworksthuspublishedontheMMCsite.'\CC-BY-SA"8means8the8Creativ!eCommonsAttribution-Share8Alike3.08licensepub-'lished8b!y8CreativeCommons8CorpMoration,N(anot-for-pro tcorpMorationwithaprincipal'placeofbusinessinSanFerancisco,7California,7asw!ellasfuturecopyleftversionsofthat'licensefpublishedb!ythatsameorganization.'\IncorpMorate"zmeanstopublishyorrepublishaDocumen!t,?inwholeoryinpart,aspart'offanotherDoMcumen!t.'An&\MMC& b> 3 cmmi10=. * Menu: * Command Line Editing:: GNU Readline User's Manual. * Programming with GNU Readline:: GNU Readline Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables.  File: readline.info, Node: Command Line Editing, Next: Programming with GNU Readline, Prev: Top, Up: Top 1 Command Line Editing ********************** This chapter describes the basic features of the GNU command line editing interface. * Menu: * Introduction and Notation:: Notation used in this text. * Readline Interaction:: The minimum set of commands for editing a line. * Readline Init File:: Customizing Readline from a user's view. * Bindable Readline Commands:: A description of most of the Readline commands available for binding * Readline vi Mode:: A short description of how to make Readline behave like the vi editor.  File: readline.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing 1.1 Introduction to Line Editing ================================ The following paragraphs describe the notation used to represent keystrokes. The text 'C-k' is read as 'Control-K' and describes the character produced when the key is pressed while the Control key is depressed. The text 'M-k' is read as 'Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the key is pressed. The Meta key is labeled on many keyboards. On keyboards with two keys labeled (usually to either side of the space bar), the on the left side is generally set to work as a Meta key. The key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or key, or another key working as a Meta key, the identical keystroke can be generated by typing _first_, and then typing . Either process is known as "metafying" the key. The text 'M-C-k' is read as 'Meta-Control-k' and describes the character produced by "metafying" 'C-k'. In addition, several keys have their own names. Specifically, , , , , , and all stand for themselves when seen in this text, or in an init file (*note Readline Init File::). If your keyboard lacks a key, typing will produce the desired character. The key may be labeled or on some keyboards.  File: readline.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing 1.2 Readline Interaction ======================== Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The Readline library gives you a set of commands for manipulating the text as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with the line, you simply press . You do not have to be at the end of the line to press ; the entire line is accepted regardless of the location of the cursor within the line. * Menu: * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines.  File: readline.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction 1.2.1 Readline Bare Essentials ------------------------------ In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type 'C-b' to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with 'C-f'. When you add text in the middle of a line, you will notice that characters to the right of the cursor are 'pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are 'pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. 'C-b' Move back one character. 'C-f' Move forward one character. or Delete the character to the left of the cursor. 'C-d' Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. 'C-_' or 'C-x C-u' Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the key be set to delete the character to the left of the cursor and the key set to delete the character underneath the cursor, like 'C-d', rather than the character to the left of the cursor.)  File: readline.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction 1.2.2 Readline Movement Commands -------------------------------- The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to 'C-b', 'C-f', 'C-d', and . Here are some commands for moving more rapidly about the line. 'C-a' Move to the start of the line. 'C-e' Move to the end of the line. 'M-f' Move forward a word, where a word is composed of letters and digits. 'M-b' Move backward a word. 'C-l' Clear the screen, reprinting the current line at the top. Notice how 'C-f' moves forward a character, while 'M-f' moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.  File: readline.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction 1.2.3 Readline Killing Commands ------------------------------- "Killing" text means to delete the text from the line, but to save it away for later use, usually by "yanking" (re-inserting) it back into the line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.) If the description for a command says that it 'kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a "kill-ring". Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. 'C-k' Kill the text from the current cursor position to the end of the line. 'M-d' Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by 'M-f'. 'M-' Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by 'M-b'. 'C-w' Kill from the cursor to the previous whitespace. This is different than 'M-' because the word boundaries differ. Here is how to "yank" the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. 'C-y' Yank the most recently killed text back into the buffer at the cursor. 'M-y' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is 'C-y' or 'M-y'.  File: readline.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction 1.2.4 Readline Arguments ------------------------ You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type 'M-- C-k'. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first 'digit' typed is a minus sign ('-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the 'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will delete the next ten characters on the input line.  File: readline.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction 1.2.5 Searching for Commands in the History ------------------------------------------- Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: "incremental" and "non-incremental". Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type 'C-r'. Typing 'C-s' searches forward through the history. The characters present in the value of the 'isearch-terminators' variable are used to terminate an incremental search. If that variable has not been assigned a value, the and 'C-J' characters will terminate an incremental search. 'C-g' will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type 'C-r' or 'C-s' as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two 'C-r's are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.  File: readline.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing 1.3 Readline Init File ====================== Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an "inputrc" file, conventionally in his home directory. The name of this file is taken from the value of the environment variable 'INPUTRC'. If that variable is unset, the default is '~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is '/etc/inputrc'. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the 'C-x C-r' command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file.  File: readline.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File 1.3.1 Readline Init File Syntax ------------------------------- There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a '#' are comments. Lines beginning with a '$' indicate conditional constructs (*note Conditional Init Constructs::). Other lines denote variable settings and key bindings. Variable Settings You can modify the run-time behavior of Readline by altering the values of variables in Readline using the 'set' command within the init file. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key binding to use 'vi' line editing commands: set editing-mode vi Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. A great deal of run-time behavior is changeable with the following variables. 'bell-style' Controls what happens when Readline wants to ring the terminal bell. If set to 'none', Readline never rings the bell. If set to 'visible', Readline uses a visible bell if one is available. If set to 'audible' (the default), Readline attempts to ring the terminal's bell. 'bind-tty-special-chars' If set to 'on' (the default), Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. 'blink-matching-paren' If set to 'on', Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is 'off'. 'colored-completion-prefix' If set to 'on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the 'LS_COLORS' environment variable. The default is 'off'. 'colored-stats' If set to 'on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the 'LS_COLORS' environment variable. The default is 'off'. 'comment-begin' The string to insert at the beginning of the line when the 'insert-comment' command is executed. The default value is '"#"'. 'completion-display-width' The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. 'completion-ignore-case' If set to 'on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is 'off'. 'completion-map-case' If set to 'on', and COMPLETION-IGNORE-CASE is enabled, Readline treats hyphens ('-') and underscores ('_') as equivalent when performing case-insensitive filename matching and completion. 'completion-prefix-display-length' The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. 'completion-query-items' The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than this value, Readline will ask the user whether or not he wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is '100'. 'convert-meta' If set to 'on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an character, converting them to a meta-prefixed key sequence. The default value is 'on', but will be set to 'off' if the locale is one that contains eight-bit characters. 'disable-completion' If set to 'On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to 'self-insert'. The default is 'off'. 'echo-control-characters' When set to 'on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is 'on'. 'editing-mode' The 'editing-mode' variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either 'emacs' or 'vi'. 'emacs-mode-string' This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '@'. 'enable-bracketed-paste' When set to 'On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is 'off'. 'enable-keypad' When set to 'on', Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is 'off'. 'enable-meta-key' When set to 'on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is 'on'. 'expand-tilde' If set to 'on', tilde expansion is performed when Readline attempts word completion. The default is 'off'. 'history-preserve-point' If set to 'on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with 'previous-history' or 'next-history'. The default is 'off'. 'history-size' Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set HISTORY-SIZE to a non-numeric value, the maximum number of history entries will be set to 500. 'horizontal-scroll-mode' This variable can be set to either 'on' or 'off'. Setting it to 'on' means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. By default, this variable is set to 'off'. 'input-meta' If set to 'on', Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is 'off', but Readline will set it to 'on' if the locale contains eight-bit characters. The name 'meta-flag' is a synonym for this variable. 'isearch-terminators' The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been given a value, the characters and 'C-J' will terminate an incremental search. 'keymap' Sets Readline's idea of the current keymap for key binding commands. Acceptable 'keymap' names are 'emacs', 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', 'vi-command', and 'vi-insert'. 'vi' is equivalent to 'vi-command' ('vi-move' is also a synonym); 'emacs' is equivalent to 'emacs-standard'. The default value is 'emacs'. The value of the 'editing-mode' variable also affects the default keymap. 'keyseq-timeout' Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source ('rl_instream' by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is '500'. 'mark-directories' If set to 'on', completed directory names have a slash appended. The default is 'on'. 'mark-modified-lines' This variable, when set to 'on', causes Readline to display an asterisk ('*') at the start of history lines which have been modified. This variable is 'off' by default. 'mark-symlinked-directories' If set to 'on', completed names which are symbolic links to directories have a slash appended (subject to the value of 'mark-directories'). The default is 'off'. 'match-hidden-files' This variable, when set to 'on', causes Readline to match files whose names begin with a '.' (hidden files) when performing filename completion. If set to 'off', the leading '.' must be supplied by the user in the filename to be completed. This variable is 'on' by default. 'menu-complete-display-prefix' If set to 'on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is 'off'. 'output-meta' If set to 'on', Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is 'off', but Readline will set it to 'on' if the locale contains eight-bit characters. 'page-completions' If set to 'on', Readline uses an internal 'more'-like pager to display a screenful of possible completions at a time. This variable is 'on' by default. 'print-completions-horizontally' If set to 'on', Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is 'off'. 'revert-all-at-newline' If set to 'on', Readline will undo all changes to history lines before returning when 'accept-line' is executed. By default, history lines may be modified and retain individual undo lists across calls to 'readline'. The default is 'off'. 'show-all-if-ambiguous' This alters the default behavior of the completion functions. If set to 'on', words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is 'off'. 'show-all-if-unmodified' This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to 'on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is 'off'. 'show-mode-in-prompt' If set to 'on', add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. The default value is 'off'. 'skip-completed-text' If set to 'on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the 'e' in 'Makefile' will result in 'Makefile' rather than 'Makefilefile', assuming there is a single possible completion. The default value is 'off'. 'vi-cmd-mode-string' This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '(cmd)'. 'vi-ins-mode-string' This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '(ins)'. 'visible-stats' If set to 'on', a character denoting a file's type is appended to the filename when listing possible completions. The default is 'off'. Key Bindings The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command name, the default keybinding, if any, and a short description of what the command does. Once you know the name of the command, simply place on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon - that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). KEYNAME: FUNCTION-NAME or MACRO KEYNAME is the name of a key spelled out in English. For example: Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" In the above example, 'C-u' is bound to the function 'universal-argument', 'M-DEL' is bound to the function 'backward-kill-word', and 'C-o' is bound to run the macro expressed on the right hand side (that is, to insert the text '> output' into the line). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. "KEYSEQ": FUNCTION-NAME or MACRO KEYSEQ differs from KEYNAME above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the special character names are not recognized. "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" In the above example, 'C-u' is again bound to the function 'universal-argument' (just as it was in the first example), ''C-x' 'C-r'' is bound to the function 're-read-init-file', and ' <[> <1> <1> <~>' is bound to insert the text 'Function Key 1'. The following GNU Emacs style escape sequences are available when specifying key sequences: '\C-' control prefix '\M-' meta prefix '\e' an escape character '\\' backslash '\"' <">, a double quotation mark '\'' <'>, a single quote or apostrophe In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: '\a' alert (bell) '\b' backspace '\d' delete '\f' form feed '\n' newline '\r' carriage return '\t' horizontal tab '\v' vertical tab '\NNN' the eight-bit character whose value is the octal value NNN (one to three digits) '\xHH' the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including '"' and '''. For example, the following binding will make ''C-x' \' insert a single '\' into the line: "\C-x\\": "\\"  File: readline.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File 1.3.2 Conditional Init Constructs --------------------------------- Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. '$if' The '$if' construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test extends to the end of the line; no characters are required to isolate it. 'mode' The 'mode=' form of the '$if' directive is used to test whether Readline is in 'emacs' or 'vi' mode. This may be used in conjunction with the 'set keymap' command, for instance, to set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps only if Readline is starting out in 'emacs' mode. 'term' The 'term=' form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the '=' is tested against both the full name of the terminal and the portion of the terminal name before the first '-'. This allows 'sun' to match both 'sun' and 'sun-cmd', for instance. 'application' The APPLICATION construct is used to include application-specific settings. Each program using the Readline library sets the APPLICATION NAME, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash: $if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif '$endif' This command, as seen in the previous example, terminates an '$if' command. '$else' Commands in this branch of the '$if' directive are executed if the test fails. '$include' This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from '/etc/inputrc': $include /etc/inputrc  File: readline.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File 1.3.3 Sample Init File ---------------------- Here is an example of an INPUTRC file. This illustrates key binding, variable assignment, and conditional syntax. # This file controls the behaviour of line input editing for # programs that use the GNU Readline library. Existing # programs include FTP, Bash, and GDB. # # You can re-read the inputrc file with C-x C-r. # Lines beginning with '#' are comments. # # First, include any system-wide bindings and variable # assignments from /etc/Inputrc $include /etc/Inputrc # # Set various bindings for emacs mode. set editing-mode emacs $if mode=emacs Meta-Control-h: backward-kill-word Text after the function name is ignored # # Arrow keys in keypad mode # #"\M-OD": backward-char #"\M-OC": forward-char #"\M-OA": previous-history #"\M-OB": next-history # # Arrow keys in ANSI mode # "\M-[D": backward-char "\M-[C": forward-char "\M-[A": previous-history "\M-[B": next-history # # Arrow keys in 8 bit keypad mode # #"\M-\C-OD": backward-char #"\M-\C-OC": forward-char #"\M-\C-OA": previous-history #"\M-\C-OB": next-history # # Arrow keys in 8 bit ANSI mode # #"\M-\C-[D": backward-char #"\M-\C-[C": forward-char #"\M-\C-[A": previous-history #"\M-\C-[B": next-history C-q: quoted-insert $endif # An old-style binding. This happens to be the default. TAB: complete # Macros that are convenient for shell interaction $if Bash # edit the path "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" # prepare to type a quoted word -- # insert open and close double quotes # and move to just after the open quote "\C-x\"": "\"\"\C-b" # insert a backslash (testing backslash escapes # in sequences and macros) "\C-x\\": "\\" # Quote the current or previous word "\C-xq": "\eb\"\ef\"" # Add a binding to refresh the line, which is unbound "\C-xr": redraw-current-line # Edit variable on current line. "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" $endif # use a visible bell if one is available set bell-style visible # don't strip characters to 7 bits when reading set input-meta on # allow iso-latin1 characters to be inserted rather # than converted to prefix-meta sequences set convert-meta off # display characters with the eighth bit set directly # rather than as meta-prefixed characters set output-meta on # if there are more than 150 possible completions for # a word, ask the user if he wants to see all of them set completion-query-items 150 # For FTP $if Ftp "\C-xg": "get \M-?" "\C-xt": "put \M-?" "\M-.": yank-last-arg $endif  File: readline.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing 1.4 Bindable Readline Commands ============================== * Menu: * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default. In the following descriptions, "point" refers to the current cursor position, and "mark" refers to a cursor position saved by the 'set-mark' command. The text between the point and mark is referred to as the "region".  File: readline.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands 1.4.1 Commands For Moving ------------------------- 'beginning-of-line (C-a)' Move to the start of the current line. 'end-of-line (C-e)' Move to the end of the line. 'forward-char (C-f)' Move forward a character. 'backward-char (C-b)' Move back a character. 'forward-word (M-f)' Move forward to the end of the next word. Words are composed of letters and digits. 'backward-word (M-b)' Move back to the start of the current or previous word. Words are composed of letters and digits. 'clear-screen (C-l)' Clear the screen and redraw the current line, leaving the current line at the top of the screen. 'redraw-current-line ()' Refresh the current line. By default, this is unbound.  File: readline.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands 1.4.2 Commands For Manipulating The History ------------------------------------------- 'accept-line (Newline or Return)' Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with 'add_history()'. If this line is a modified history line, the history line is restored to its original state. 'previous-history (C-p)' Move 'back' through the history list, fetching the previous command. 'next-history (C-n)' Move 'forward' through the history list, fetching the next command. 'beginning-of-history (M-<)' Move to the first line in the history. 'end-of-history (M->)' Move to the end of the input history, i.e., the line currently being entered. 'reverse-search-history (C-r)' Search backward starting at the current line and moving 'up' through the history as necessary. This is an incremental search. 'forward-search-history (C-s)' Search forward starting at the current line and moving 'down' through the history as necessary. This is an incremental search. 'non-incremental-reverse-search-history (M-p)' Search backward starting at the current line and moving 'up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. 'non-incremental-forward-search-history (M-n)' Search forward starting at the current line and moving 'down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. 'history-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. 'history-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. 'history-substr-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. 'history-substr-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. 'yank-nth-arg (M-C-y)' Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument N, insert the Nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the Nth word from the end of the previous command. Once the argument N is computed, the argument is extracted as if the '!N' history expansion had been specified. 'yank-last-arg (M-. or M-_)' Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the '!$' history expansion had been specified.  File: readline.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands 1.4.3 Commands For Changing Text -------------------------------- 'end-of-file (usually C-d)' The character indicating end-of-file as set, for example, by 'stty'. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. 'delete-char (C-d)' Delete the character at point. If this function is bound to the same character as the tty EOF character, as 'C-d' commonly is, see above for the effects. 'backward-delete-char (Rubout)' Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. 'forward-backward-delete-char ()' Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. 'quoted-insert (C-q or C-v)' Add the next character typed to the line verbatim. This is how to insert key sequences like 'C-q', for example. 'tab-insert (M-)' Insert a tab character. 'self-insert (a, b, A, 1, !, ...)' Insert yourself. 'bracketed-paste-begin ()' This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one was bound to 'self-insert') instead of executing any editing commands. 'transpose-chars (C-t)' Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect. 'transpose-words (M-t)' Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. 'upcase-word (M-u)' Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. 'downcase-word (M-l)' Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. 'capitalize-word (M-c)' Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. 'overwrite-mode ()' Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only 'emacs' mode; 'vi' mode does overwrite differently. Each call to 'readline()' starts in insert mode. In overwrite mode, characters bound to 'self-insert' replace the text at point rather than pushing the text to the right. Characters bound to 'backward-delete-char' replace the character before point with a space. By default, this command is unbound.  File: readline.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands 1.4.4 Killing And Yanking ------------------------- 'kill-line (C-k)' Kill the text from point to the end of the line. 'backward-kill-line (C-x Rubout)' Kill backward from the cursor to the beginning of the current line. 'unix-line-discard (C-u)' Kill backward from the cursor to the beginning of the current line. 'kill-whole-line ()' Kill all characters on the current line, no matter where point is. By default, this is unbound. 'kill-word (M-d)' Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as 'forward-word'. 'backward-kill-word (M-)' Kill the word behind point. Word boundaries are the same as 'backward-word'. 'unix-word-rubout (C-w)' Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. 'unix-filename-rubout ()' Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. 'delete-horizontal-space ()' Delete all spaces and tabs around point. By default, this is unbound. 'kill-region ()' Kill the text in the current region. By default, this command is unbound. 'copy-region-as-kill ()' Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. 'copy-backward-word ()' Copy the word before point to the kill buffer. The word boundaries are the same as 'backward-word'. By default, this command is unbound. 'copy-forward-word ()' Copy the word following point to the kill buffer. The word boundaries are the same as 'forward-word'. By default, this command is unbound. 'yank (C-y)' Yank the top of the kill ring into the buffer at point. 'yank-pop (M-y)' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is 'yank' or 'yank-pop'.  File: readline.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands 1.4.5 Specifying Numeric Arguments ---------------------------------- 'digit-argument (M-0, M-1, ... M--)' Add this digit to the argument already accumulating, or start a new argument. 'M--' starts a negative argument. 'universal-argument ()' This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing 'universal-argument' again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. By default, this is not bound to a key.  File: readline.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands 1.4.6 Letting Readline Type For You ----------------------------------- 'complete ()' Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. 'possible-completions (M-?)' List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of 'completion-display-width', the value of the environment variable 'COLUMNS', or the screen width, in that order. 'insert-completions (M-*)' Insert all completions of the text before point that would have been generated by 'possible-completions'. 'menu-complete ()' Similar to 'complete', but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of 'menu-complete' steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of 'bell-style') and the original text is restored. An argument of N moves N positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to , but is unbound by default. 'menu-complete-backward ()' Identical to 'menu-complete', but moves backward through the list of possible completions, as if 'menu-complete' had been given a negative argument. 'delete-char-or-list ()' Deletes the character under the cursor if not at the beginning or end of the line (like 'delete-char'). If at the end of the line, behaves identically to 'possible-completions'. This command is unbound by default.  File: readline.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands 1.4.7 Keyboard Macros --------------------- 'start-kbd-macro (C-x ()' Begin saving the characters typed into the current keyboard macro. 'end-kbd-macro (C-x ))' Stop saving the characters typed into the current keyboard macro and save the definition. 'call-last-kbd-macro (C-x e)' Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. 'print-last-kbd-macro ()' Print the last keboard macro defined in a format suitable for the INPUTRC file.  File: readline.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands 1.4.8 Some Miscellaneous Commands --------------------------------- 're-read-init-file (C-x C-r)' Read in the contents of the INPUTRC file, and incorporate any bindings or variable assignments found there. 'abort (C-g)' Abort the current editing command and ring the terminal's bell (subject to the setting of 'bell-style'). 'do-uppercase-version (M-a, M-b, M-X, ...)' If the metafied character X is lowercase, run the command that is bound to the corresponding uppercase character. 'prefix-meta ()' Metafy the next character typed. This is for keyboards without a meta key. Typing ' f' is equivalent to typing 'M-f'. 'undo (C-_ or C-x C-u)' Incremental undo, separately remembered for each line. 'revert-line (M-r)' Undo all changes made to this line. This is like executing the 'undo' command enough times to get back to the beginning. 'tilde-expand (M-~)' Perform tilde expansion on the current word. 'set-mark (C-@)' Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. 'exchange-point-and-mark (C-x C-x)' Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. 'character-search (C-])' A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. 'character-search-backward (M-C-])' A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. 'skip-csi-sequence ()' Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. 'insert-comment (M-#)' Without a numeric argument, the value of the 'comment-begin' variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of 'comment-begin', the value is inserted, otherwise the characters in 'comment-begin' are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. 'dump-functions ()' Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'dump-variables ()' Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'dump-macros ()' Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'emacs-editing-mode (C-e)' When in 'vi' command mode, this causes a switch to 'emacs' editing mode. 'vi-editing-mode (M-C-j)' When in 'emacs' editing mode, this causes a switch to 'vi' editing mode.  File: readline.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing 1.5 Readline vi Mode ==================== While the Readline library does not have a full set of 'vi' editing functions, it does contain enough to allow simple editing of the line. The Readline 'vi' mode behaves as specified in the POSIX standard. In order to switch interactively between 'emacs' and 'vi' editing modes, use the command 'M-C-j' (bound to emacs-editing-mode when in 'vi' mode and to vi-editing-mode in 'emacs' mode). The Readline default is 'emacs' mode. When you enter a line in 'vi' mode, you are already placed in 'insertion' mode, as if you had typed an 'i'. Pressing switches you into 'command' mode, where you can edit the text of the line with the standard 'vi' movement keys, move to previous history lines with 'k' and subsequent lines with 'j', and so forth. This document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface. Copyright (C) 1988-2016 Free Software Foundation, Inc. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.  File: readline.info, Node: Programming with GNU Readline, Next: GNU Free Documentation License, Prev: Command Line Editing, Up: Top 2 Programming with GNU Readline ******************************* This chapter describes the interface between the GNU Readline Library and other programs. If you are a programmer, and you wish to include the features found in GNU Readline such as completion, line editing, and interactive history manipulation in your own programs, this section is for you. * Menu: * Basic Behavior:: Using the default behavior of Readline. * Custom Functions:: Adding your own functions to Readline. * Readline Variables:: Variables accessible to custom functions. * Readline Convenience Functions:: Functions which Readline supplies to aid in writing your own custom functions. * Readline Signal Handling:: How Readline behaves when it receives signals. * Custom Completers:: Supplanting or supplementing Readline's completion functions.  File: readline.info, Node: Basic Behavior, Next: Custom Functions, Up: Programming with GNU Readline 2.1 Basic Behavior ================== Many programs provide a command line interface, such as 'mail', 'ftp', and 'sh'. For such programs, the default behaviour of Readline is sufficient. This section describes how to use Readline in the simplest way possible, perhaps to replace calls in your code to 'gets()' or 'fgets()'. The function 'readline()' prints a prompt PROMPT and then reads and returns a single line of text from the user. If PROMPT is 'NULL' or the empty string, no prompt is displayed. The line 'readline' returns is allocated with 'malloc()'; the caller should 'free()' the line when it has finished with it. The declaration for 'readline' in ANSI C is char *readline (const char *PROMPT); So, one might say char *line = readline ("Enter a line: "); in order to read a line of text from the user. The line returned has the final newline removed, so only the text remains. If 'readline' encounters an 'EOF' while reading the line, and the line is empty at that point, then '(char *)NULL' is returned. Otherwise, the line is ended just as if a newline had been typed. If you want the user to be able to get at the line later, (with for example), you must call 'add_history()' to save the line away in a "history" list of such lines. add_history (line); For full details on the GNU History Library, see the associated manual. It is preferable to avoid saving empty lines on the history list, since users rarely have a burning need to reuse a blank line. Here is a function which usefully replaces the standard 'gets()' library function, and has the advantage of no static buffer to overflow: /* A static variable for holding the line. */ static char *line_read = (char *)NULL; /* Read a string, and return a pointer to it. Returns NULL on EOF. */ char * rl_gets () { /* If the buffer has already been allocated, return the memory to the free pool. */ if (line_read) { free (line_read); line_read = (char *)NULL; } /* Get a line from the user. */ line_read = readline (""); /* If the line has any text in it, save it on the history. */ if (line_read && *line_read) add_history (line_read); return (line_read); } This function gives the user the default behaviour of completion: completion on file names. If you do not want Readline to complete on filenames, you can change the binding of the key with 'rl_bind_key()'. int rl_bind_key (int KEY, rl_command_func_t *FUNCTION); 'rl_bind_key()' takes two arguments: KEY is the character that you want to bind, and FUNCTION is the address of the function to call when KEY is pressed. Binding to 'rl_insert()' makes insert itself. 'rl_bind_key()' returns non-zero if KEY is not a valid ASCII character code (between 0 and 255). Thus, to disable the default behavior, the following suffices: rl_bind_key ('\t', rl_insert); This code should be executed once at the start of your program; you might write a function called 'initialize_readline()' which performs this and other desired initializations, such as installing custom completers (*note Custom Completers::).  File: readline.info, Node: Custom Functions, Next: Readline Variables, Prev: Basic Behavior, Up: Programming with GNU Readline 2.2 Custom Functions ==================== Readline provides many functions for manipulating the text of the line, but it isn't possible to anticipate the needs of all programs. This section describes the various functions and variables defined within the Readline library which allow a user program to add customized functionality to Readline. Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file '' in any file that uses Readline's features. Since some of the definitions in 'readline.h' use the 'stdio' library, the file '' should be included before 'readline.h'. 'readline.h' defines a C preprocessor variable that should be treated as an integer, 'RL_READLINE_VERSION', which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0xMMMM. MM is the two-digit major version number; MM is the two-digit minor version number. For Readline 4.2, for example, the value of 'RL_READLINE_VERSION' would be '0x0402'. * Menu: * Readline Typedefs:: C declarations to make code readable. * Function Writing:: Variables and calling conventions.  File: readline.info, Node: Readline Typedefs, Next: Function Writing, Up: Custom Functions 2.2.1 Readline Typedefs ----------------------- For readability, we declare a number of new object types, all pointers to functions. The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values. For instance, say we want to declare a variable FUNC as a pointer to a function which takes two 'int' arguments and returns an 'int' (this is the type of all of the Readline bindable functions). Instead of the classic C declaration 'int (*func)();' or the ANSI-C style declaration 'int (*func)(int, int);' we may write 'rl_command_func_t *func;' The full list of function pointer types available is 'typedef int rl_command_func_t (int, int);' 'typedef char *rl_compentry_func_t (const char *, int);' 'typedef char **rl_completion_func_t (const char *, int, int);' 'typedef char *rl_quote_func_t (char *, int, char *);' 'typedef char *rl_dequote_func_t (char *, int);' 'typedef int rl_compignore_func_t (char **);' 'typedef void rl_compdisp_func_t (char **, int, int);' 'typedef int rl_hook_func_t (void);' 'typedef int rl_getc_func_t (FILE *);' 'typedef int rl_linebuf_func_t (char *, int);' 'typedef int rl_intfunc_t (int);' '#define rl_ivoidfunc_t rl_hook_func_t' 'typedef int rl_icpfunc_t (char *);' 'typedef int rl_icppfunc_t (char **);' 'typedef void rl_voidfunc_t (void);' 'typedef void rl_vintfunc_t (int);' 'typedef void rl_vcpfunc_t (char *);' 'typedef void rl_vcppfunc_t (char **);'  File: readline.info, Node: Function Writing, Prev: Readline Typedefs, Up: Custom Functions 2.2.2 Writing a New Function ---------------------------- In order to write new functions for Readline, you need to know the calling conventions for keyboard-invoked functions, and the names of the variables that describe the current state of the line read so far. The calling sequence for a command 'foo' looks like int foo (int count, int key) where COUNT is the numeric argument (or 1 if defaulted) and KEY is the key that invoked this function. It is completely up to the function as to what should be done with the numeric argument. Some functions use it as a repeat count, some as a flag, and others to choose alternate behavior (refreshing the current line as opposed to refreshing the screen, for example). Some choose to ignore it. In general, if a function uses the numeric argument as a repeat count, it should be able to do something useful with both negative and positive arguments. At the very least, it should be aware that it can be passed a negative argument. A command function should return 0 if its action completes successfully, and a value greater than zero if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions.  File: readline.info, Node: Readline Variables, Next: Readline Convenience Functions, Prev: Custom Functions, Up: Programming with GNU Readline 2.3 Readline Variables ====================== These variables are available to function writers. -- Variable: char * rl_line_buffer This is the line gathered so far. You are welcome to modify the contents of the line, but see *note Allowing Undoing::. The function 'rl_extend_line_buffer' is available to increase the memory allocated to 'rl_line_buffer'. -- Variable: int rl_point The offset of the current cursor position in 'rl_line_buffer' (the _point_). -- Variable: int rl_end The number of characters present in 'rl_line_buffer'. When 'rl_point' is at the end of the line, 'rl_point' and 'rl_end' are equal. -- Variable: int rl_mark The MARK (saved position) in the current line. If set, the mark and point define a _region_. -- Variable: int rl_done Setting this to a non-zero value causes Readline to return the current line immediately. -- Variable: int rl_num_chars_to_read Setting this to a positive value before calling 'readline()' causes Readline to return after accepting that many characters, rather than reading up to a character bound to 'accept-line'. -- Variable: int rl_pending_input Setting this to a value makes it the next keystroke read. This is a way to stuff a single character into the input stream. -- Variable: int rl_dispatching Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism. -- Variable: int rl_erase_empty_line Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line. -- Variable: char * rl_prompt The prompt Readline uses. This is set from the argument to 'readline()', and should not be assigned to directly. The 'rl_set_prompt()' function (*note Redisplay::) may be used to modify the prompt string after calling 'readline()'. -- Variable: char * rl_display_prompt The string displayed as the prompt. This is usually identical to RL_PROMPT, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search. -- Variable: int rl_already_prompted If an application wishes to display the prompt itself, rather than have Readline do it the first time 'readline()' is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to 'readline()' so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it. -- Variable: const char * rl_library_version The version number of this revision of the library. -- Variable: int rl_readline_version An integer encoding the current version of the library. The encoding is of the form 0xMMMM, where MM is the two-digit major version number, and MM is the two-digit minor version number. For example, for Readline-4.2, 'rl_readline_version' would have the value 0x0402. -- Variable: int rl_gnu_readline_p Always set to 1, denoting that this is GNU readline rather than some emulation. -- Variable: const char * rl_terminal_name The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the 'TERM' environment variable the first time it is called. -- Variable: const char * rl_readline_name This variable is set to a unique name by each application using Readline. The value allows conditional parsing of the inputrc file (*note Conditional Init Constructs::). -- Variable: FILE * rl_instream The stdio stream from which Readline reads input. If 'NULL', Readline defaults to STDIN. -- Variable: FILE * rl_outstream The stdio stream to which Readline performs output. If 'NULL', Readline defaults to STDOUT. -- Variable: int rl_prefer_env_winsize If non-zero, Readline gives values found in the 'LINES' and 'COLUMNS' environment variables greater precedence than values fetched from the kernel when computing the screen dimensions. -- Variable: rl_command_func_t * rl_last_func The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example. -- Variable: rl_hook_func_t * rl_startup_hook If non-zero, this is the address of a function to call just before 'readline' prints the first prompt. -- Variable: rl_hook_func_t * rl_pre_input_hook If non-zero, this is the address of a function to call after the first prompt has been printed and just before 'readline' starts reading input characters. -- Variable: rl_hook_func_t * rl_event_hook If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input. -- Variable: rl_getc_func_t * rl_getc_function If non-zero, Readline will call indirectly through this pointer to get a character from the input stream. By default, it is set to 'rl_getc', the default Readline character input function (*note Character Input::). In general, an application that sets RL_GETC_FUNCTION should consider setting RL_INPUT_AVAILABLE_HOOK as well. -- Variable: rl_hook_func_t * rl_signal_event_hook If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input. -- Variable: rl_hook_func_t * rl_input_available_hook If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks 'rl_instream'; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to 'rl_set_keyboard_input_timeout()' or the value of the user-settable KEYSEQ-TIMEOUT variable. This is designed for use by applications using Readline's callback interface (*note Alternate Interface::), which may not use the traditional 'read(2)' and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of KEYSEQ-TIMEOUT, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets RL_GETC_FUNCTION should consider setting RL_INPUT_AVAILABLE_HOOK as well. -- Variable: rl_voidfunc_t * rl_redisplay_function If non-zero, Readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to 'rl_redisplay', the default Readline redisplay function (*note Redisplay::). -- Variable: rl_vintfunc_t * rl_prep_term_function If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an 'int' flag that says whether or not to use eight-bit characters. By default, this is set to 'rl_prep_terminal' (*note Terminal Management::). -- Variable: rl_voidfunc_t * rl_deprep_term_function If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of 'rl_prep_term_function'. By default, this is set to 'rl_deprep_terminal' (*note Terminal Management::). -- Variable: Keymap rl_executing_keymap This variable is set to the keymap (*note Keymaps::) in which the currently executing readline function was found. -- Variable: Keymap rl_binding_keymap This variable is set to the keymap (*note Keymaps::) in which the last key binding occurred. -- Variable: char * rl_executing_macro This variable is set to the text of any currently-executing macro. -- Variable: int rl_executing_key The key that caused the dispatch to the currently-executing Readline function. -- Variable: char * rl_executing_keyseq The full key sequence that caused the dispatch to the currently-executing Readline function. -- Variable: int rl_key_sequence_length The number of characters in RL_EXECUTING_KEYSEQ. -- Variable: int rl_readline_state A variable with bit values that encapsulate the current Readline state. A bit is set with the 'RL_SETSTATE' macro, and unset with the 'RL_UNSETSTATE' macro. Use the 'RL_ISSTATE' macro to test whether a particular state bit is set. Current state bits include: 'RL_STATE_NONE' Readline has not yet been called, nor has it begun to initialize. 'RL_STATE_INITIALIZING' Readline is initializing its internal data structures. 'RL_STATE_INITIALIZED' Readline has completed its initialization. 'RL_STATE_TERMPREPPED' Readline has modified the terminal modes to do its own input and redisplay. 'RL_STATE_READCMD' Readline is reading a command from the keyboard. 'RL_STATE_METANEXT' Readline is reading more input after reading the meta-prefix character. 'RL_STATE_DISPATCHING' Readline is dispatching to a command. 'RL_STATE_MOREINPUT' Readline is reading more input while executing an editing command. 'RL_STATE_ISEARCH' Readline is performing an incremental history search. 'RL_STATE_NSEARCH' Readline is performing a non-incremental history search. 'RL_STATE_SEARCH' Readline is searching backward or forward through the history for a string. 'RL_STATE_NUMERICARG' Readline is reading a numeric argument. 'RL_STATE_MACROINPUT' Readline is currently getting its input from a previously-defined keyboard macro. 'RL_STATE_MACRODEF' Readline is currently reading characters defining a keyboard macro. 'RL_STATE_OVERWRITE' Readline is in overwrite mode. 'RL_STATE_COMPLETING' Readline is performing word completion. 'RL_STATE_SIGHANDLER' Readline is currently executing the readline signal handler. 'RL_STATE_UNDOING' Readline is performing an undo. 'RL_STATE_INPUTPENDING' Readline has input pending due to a call to 'rl_execute_next()'. 'RL_STATE_TTYCSAVED' Readline has saved the values of the terminal's special characters. 'RL_STATE_CALLBACK' Readline is currently using the alternate (callback) interface (*note Alternate Interface::). 'RL_STATE_VIMOTION' Readline is reading the argument to a vi-mode "motion" command. 'RL_STATE_MULTIKEY' Readline is reading a multiple-keystroke command. 'RL_STATE_VICMDONCE' Readline has entered vi command (movement) mode at least one time during the current call to 'readline()'. 'RL_STATE_DONE' Readline has read a key sequence bound to 'accept-line' and is about to return the line to the caller. -- Variable: int rl_explicit_arg Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function. -- Variable: int rl_numeric_arg Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function. -- Variable: int rl_editing_mode Set to a value denoting Readline's current editing mode. A value of 1 means Readline is currently in emacs mode; 0 means that vi mode is active.  File: readline.info, Node: Readline Convenience Functions, Next: Readline Signal Handling, Prev: Readline Variables, Up: Programming with GNU Readline 2.4 Readline Convenience Functions ================================== * Menu: * Function Naming:: How to give a function you write a name. * Keymaps:: Making keymaps. * Binding Keys:: Changing Keymaps. * Associating Function Names and Bindings:: Translate function names to key sequences. * Allowing Undoing:: How to make your functions undoable. * Redisplay:: Functions to control line display. * Modifying Text:: Functions to modify 'rl_line_buffer'. * Character Input:: Functions to read keyboard input. * Terminal Management:: Functions to manage terminal settings. * Utility Functions:: Generally useful functions and hooks. * Miscellaneous Functions:: Functions that don't fall into any category. * Alternate Interface:: Using Readline in a 'callback' fashion. * A Readline Example:: An example Readline function. * Alternate Interface Example:: An example program using the alternate interface.  File: readline.info, Node: Function Naming, Next: Keymaps, Up: Readline Convenience Functions 2.4.1 Naming a Function ----------------------- The user can dynamically change the bindings of keys while using Readline. This is done by representing the function with a descriptive name. The user is able to type the descriptive name when referring to the function. Thus, in an init file, one might find Meta-Rubout: backward-kill-word This binds the keystroke to the function _descriptively_ named 'backward-kill-word'. You, as the programmer, should bind the functions you write to descriptive names as well. Readline provides a function for doing that: -- Function: int rl_add_defun (const char *name, rl_command_func_t *function, int key) Add NAME to the list of named functions. Make FUNCTION be the function that gets called. If KEY is not -1, then bind it to FUNCTION using 'rl_bind_key()'. Using this function alone is sufficient for most applications. It is the recommended way to add a few functions to the default functions that Readline has built in. If you need to do something other than adding a function to Readline, you may need to use the underlying functions described below.  File: readline.info, Node: Keymaps, Next: Binding Keys, Prev: Function Naming, Up: Readline Convenience Functions 2.4.2 Selecting a Keymap ------------------------ Key bindings take place on a "keymap". The keymap is the association between the keys that the user types and the functions that get run. You can make your own keymaps, copy existing keymaps, and tell Readline which keymap to use. -- Function: Keymap rl_make_bare_keymap (void) Returns a new, empty keymap. The space for the keymap is allocated with 'malloc()'; the caller should free it by calling 'rl_free_keymap()' when done. -- Function: Keymap rl_copy_keymap (Keymap map) Return a new keymap which is a copy of MAP. -- Function: Keymap rl_make_keymap (void) Return a new keymap with the printing characters bound to rl_insert, the lowercase Meta characters bound to run their equivalents, and the Meta digits bound to produce numeric arguments. -- Function: void rl_discard_keymap (Keymap keymap) Free the storage associated with the data in KEYMAP. The caller should free KEYMAP. -- Function: void rl_free_keymap (Keymap keymap) Free all storage associated with KEYMAP. This calls 'rl_discard_keymap' to free subordindate keymaps and macros. Readline has several internal keymaps. These functions allow you to change which keymap is active. -- Function: Keymap rl_get_keymap (void) Returns the currently active keymap. -- Function: void rl_set_keymap (Keymap keymap) Makes KEYMAP the currently active keymap. -- Function: Keymap rl_get_keymap_by_name (const char *name) Return the keymap matching NAME. NAME is one which would be supplied in a 'set keymap' inputrc line (*note Readline Init File::). -- Function: char * rl_get_keymap_name (Keymap keymap) Return the name matching KEYMAP. NAME is one which would be supplied in a 'set keymap' inputrc line (*note Readline Init File::).  File: readline.info, Node: Binding Keys, Next: Associating Function Names and Bindings, Prev: Keymaps, Up: Readline Convenience Functions 2.4.3 Binding Keys ------------------ Key sequences are associate with functions through the keymap. Readline has several internal keymaps: 'emacs_standard_keymap', 'emacs_meta_keymap', 'emacs_ctlx_keymap', 'vi_movement_keymap', and 'vi_insertion_keymap'. 'emacs_standard_keymap' is the default, and the examples in this manual assume that. Since 'readline()' installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to 'readline()' will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the 'rl_startup_hook' variable (*note Readline Variables::). These functions manage key bindings. -- Function: int rl_bind_key (int key, rl_command_func_t *function) Binds KEY to FUNCTION in the currently active keymap. Returns non-zero in the case of an invalid KEY. -- Function: int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map) Bind KEY to FUNCTION in MAP. Returns non-zero in the case of an invalid KEY. -- Function: int rl_bind_key_if_unbound (int key, rl_command_func_t *function) Binds KEY to FUNCTION if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid KEY or if KEY is already bound. -- Function: int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map) Binds KEY to FUNCTION if it is not already bound in MAP. Returns non-zero in the case of an invalid KEY or if KEY is already bound. -- Function: int rl_unbind_key (int key) Bind KEY to the null function in the currently active keymap. Returns non-zero in case of error. -- Function: int rl_unbind_key_in_map (int key, Keymap map) Bind KEY to the null function in MAP. Returns non-zero in case of error. -- Function: int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map) Unbind all keys that execute FUNCTION in MAP. -- Function: int rl_unbind_command_in_map (const char *command, Keymap map) Unbind all keys that are bound to COMMAND in MAP. -- Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function) Bind the key sequence represented by the string KEYSEQ to the function FUNCTION, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if KEYSEQ is invalid. -- Function: int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Bind the key sequence represented by the string KEYSEQ to the function FUNCTION. This makes new keymaps as necessary. Initial bindings are performed in MAP. The return value is non-zero if KEYSEQ is invalid. -- Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map) Equivalent to 'rl_bind_keyseq_in_map'. -- Function: int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function) Binds KEYSEQ to FUNCTION if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is already bound. -- Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map) Binds KEYSEQ to FUNCTION if it is not already bound in MAP. Returns non-zero in the case of an invalid KEYSEQ or if KEYSEQ is already bound. -- Function: int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map) Bind the key sequence represented by the string KEYSEQ to the arbitrary pointer DATA. TYPE says what kind of data is pointed to by DATA; this can be a function ('ISFUNC'), a macro ('ISMACR'), or a keymap ('ISKMAP'). This makes new keymaps as necessary. The initial keymap in which to do bindings is MAP. -- Function: int rl_parse_and_bind (char *line) Parse LINE as if it had been read from the 'inputrc' file and perform any key bindings and variable assignments found (*note Readline Init File::). -- Function: int rl_read_init_file (const char *filename) Read keybindings and variable assignments from FILENAME (*note Readline Init File::).  File: readline.info, Node: Associating Function Names and Bindings, Next: Allowing Undoing, Prev: Binding Keys, Up: Readline Convenience Functions 2.4.4 Associating Function Names and Bindings --------------------------------------------- These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function. -- Function: rl_command_func_t * rl_named_function (const char *name) Return the function with name NAME. -- Function: rl_command_func_t * rl_function_of_keyseq (const char *keyseq, Keymap map, int *type) Return the function invoked by KEYSEQ in keymap MAP. If MAP is 'NULL', the current keymap is used. If TYPE is not 'NULL', the type of the object is returned in the 'int' variable it points to (one of 'ISFUNC', 'ISKMAP', or 'ISMACR'). -- Function: char ** rl_invoking_keyseqs (rl_command_func_t *function) Return an array of strings representing the key sequences used to invoke FUNCTION in the current keymap. -- Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map) Return an array of strings representing the key sequences used to invoke FUNCTION in the keymap MAP. -- Function: void rl_function_dumper (int readable) Print the readline function names and the key sequences currently bound to them to 'rl_outstream'. If READABLE is non-zero, the list is formatted in such a way that it can be made part of an 'inputrc' file and re-read. -- Function: void rl_list_funmap_names (void) Print the names of all bindable Readline functions to 'rl_outstream'. -- Function: const char ** rl_funmap_names (void) Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using 'free' or 'rl_free' when you are done. -- Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function) Add NAME to the list of bindable Readline command names, and make FUNCTION the function to be called when NAME is invoked.  File: readline.info, Node: Allowing Undoing, Next: Redisplay, Prev: Associating Function Names and Bindings, Up: Readline Convenience Functions 2.4.5 Allowing Undoing ---------------------- Supporting the undo command is a painless thing, and makes your functions much more useful. It is certainly easy to try something if you know you can undo it. If your function simply inserts text once, or deletes text once, and uses 'rl_insert_text()' or 'rl_delete_text()' to do it, then undoing is already done for you automatically. If you do multiple insertions or multiple deletions, or any combination of these operations, you should group them together into one operation. This is done with 'rl_begin_undo_group()' and 'rl_end_undo_group()'. The types of events that can be undone are: enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; Notice that 'UNDO_DELETE' means to insert some text, and 'UNDO_INSERT' means to delete some text. That is, the undo code tells what to undo, not how to undo it. 'UNDO_BEGIN' and 'UNDO_END' are tags added by 'rl_begin_undo_group()' and 'rl_end_undo_group()'. -- Function: int rl_begin_undo_group (void) Begins saving undo information in a group construct. The undo information usually comes from calls to 'rl_insert_text()' and 'rl_delete_text()', but could be the result of calls to 'rl_add_undo()'. -- Function: int rl_end_undo_group (void) Closes the current undo group started with 'rl_begin_undo_group ()'. There should be one call to 'rl_end_undo_group()' for each call to 'rl_begin_undo_group()'. -- Function: void rl_add_undo (enum undo_code what, int start, int end, char *text) Remember how to undo an event (according to WHAT). The affected text runs from START to END, and encompasses TEXT. -- Function: void rl_free_undo_list (void) Free the existing undo list. -- Function: int rl_do_undo (void) Undo the first thing on the undo list. Returns '0' if there was nothing to undo, non-zero if something was undone. Finally, if you neither insert nor delete text, but directly modify the existing text (e.g., change its case), call 'rl_modifying()' once, just before you modify the text. You must supply the indices of the text range that you are going to modify. -- Function: int rl_modifying (int start, int end) Tell Readline to save the text between START and END as a single undo unit. It is assumed that you will subsequently modify that text.  File: readline.info, Node: Redisplay, Next: Modifying Text, Prev: Allowing Undoing, Up: Readline Convenience Functions 2.4.6 Redisplay --------------- -- Function: void rl_redisplay (void) Change what's displayed on the screen to reflect the current contents of 'rl_line_buffer'. -- Function: int rl_forced_update_display (void) Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct. -- Function: int rl_on_new_line (void) Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline. -- Function: int rl_on_new_line_with_prompt (void) Tell the update functions that we have moved onto a new line, with RL_PROMPT already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting RL_ALREADY_PROMPTED. -- Function: int rl_clear_visible_line (void) Clear the screen lines corresponding to the current line's contents. -- Function: int rl_reset_line_state (void) Reset the display state to a clean state and redisplay the current line starting on a new line. -- Function: int rl_crlf (void) Move the cursor to the start of the next screen line. -- Function: int rl_show_char (int c) Display character C on 'rl_outstream'. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay. -- Function: int rl_message (const char *, ...) The arguments are a format string as would be supplied to 'printf', possibly containing conversion specifications such as '%d', and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the "echo area". The echo area is also used to display numeric arguments and search strings. You should call 'rl_save_prompt' to save the prompt information before calling this function. -- Function: int rl_clear_message (void) Clear the message in the echo area. If the prompt was saved with a call to 'rl_save_prompt' before the last call to 'rl_message', call 'rl_restore_prompt' before calling this function. -- Function: void rl_save_prompt (void) Save the local Readline prompt display state in preparation for displaying a new message in the message area with 'rl_message()'. -- Function: void rl_restore_prompt (void) Restore the local Readline prompt display state saved by the most recent call to 'rl_save_prompt'. if 'rl_save_prompt' was called to save the prompt before a call to 'rl_message', this function should be called before the corresponding call to 'rl_clear_message'. -- Function: int rl_expand_prompt (char *prompt) Expand any special character sequences in PROMPT and set up the local Readline prompt redisplay variables. This function is called by 'readline()'. It may also be called to expand the primary prompt if the 'rl_on_new_line_with_prompt()' function or 'rl_already_prompted' variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers 'RL_PROMPT_START_IGNORE' and 'RL_PROMPT_END_IGNORE' (declared in 'readline.h'). This may be used to embed terminal-specific escape sequences in prompts. -- Function: int rl_set_prompt (const char *prompt) Make Readline use PROMPT for subsequent redisplay. This calls 'rl_expand_prompt()' to expand the prompt and sets 'rl_prompt' to the result.  File: readline.info, Node: Modifying Text, Next: Character Input, Prev: Redisplay, Up: Readline Convenience Functions 2.4.7 Modifying Text -------------------- -- Function: int rl_insert_text (const char *text) Insert TEXT into the line at the current cursor position. Returns the number of characters inserted. -- Function: int rl_delete_text (int start, int end) Delete the text between START and END in the current line. Returns the number of characters deleted. -- Function: char * rl_copy_text (int start, int end) Return a copy of the text between START and END in the current line. -- Function: int rl_kill_text (int start, int end) Copy the text between START and END in the current line to the kill ring, appending or prepending to the last kill if the last command was a kill command. The text is deleted. If START is less than END, the text is appended, otherwise prepended. If the last command was not a kill, a new kill ring slot is used. -- Function: int rl_push_macro_input (char *macro) Cause MACRO to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use 'rl_insert_text()' instead.  File: readline.info, Node: Character Input, Next: Terminal Management, Prev: Modifying Text, Up: Readline Convenience Functions 2.4.8 Character Input --------------------- -- Function: int rl_read_key (void) Return the next character available from Readline's current input stream. This handles input inserted into the input stream via RL_PENDING_INPUT (*note Readline Variables::) and 'rl_stuff_char()', macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the 'rl_event_hook' variable. -- Function: int rl_getc (FILE *stream) Return the next character available from STREAM, which is assumed to be the keyboard. -- Function: int rl_stuff_char (int c) Insert C into the Readline input stream. It will be "read" before Readline attempts to read characters from the terminal with 'rl_read_key()'. Up to 512 characters may be pushed back. 'rl_stuff_char' returns 1 if the character was successfully inserted; 0 otherwise. -- Function: int rl_execute_next (int c) Make C be the next command to be executed when 'rl_read_key()' is called. This sets RL_PENDING_INPUT. -- Function: int rl_clear_pending_input (void) Unset RL_PENDING_INPUT, effectively negating the effect of any previous call to 'rl_execute_next()'. This works only if the pending input has not already been read with 'rl_read_key()'. -- Function: int rl_set_keyboard_input_timeout (int u) While waiting for keyboard input in 'rl_read_key()', Readline will wait for U microseconds for input before calling any function assigned to 'rl_event_hook'. U must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value.  File: readline.info, Node: Terminal Management, Next: Utility Functions, Prev: Character Input, Up: Readline Convenience Functions 2.4.9 Terminal Management ------------------------- -- Function: void rl_prep_terminal (int meta_flag) Modify the terminal settings for Readline's use, so 'readline()' can read a single character at a time from the keyboard. The META_FLAG argument should be non-zero if Readline should read eight-bit input. -- Function: void rl_deprep_terminal (void) Undo the effects of 'rl_prep_terminal()', leaving the terminal in the state in which it was before the most recent call to 'rl_prep_terminal()'. -- Function: void rl_tty_set_default_bindings (Keymap kmap) Read the operating system's terminal editing characters (as would be displayed by 'stty') to their Readline equivalents. The bindings are performed in KMAP. -- Function: void rl_tty_unset_default_bindings (Keymap kmap) Reset the bindings manipulated by 'rl_tty_set_default_bindings' so that the terminal editing characters are bound to 'rl_insert'. The bindings are performed in KMAP. -- Function: int rl_tty_set_echoing (int value) Set Readline's idea of whether or not it is echoing output to its output stream (RL_OUTSTREAM). If VALUE is 0, Readline does not display output to RL_OUTSTREAM; any other value enables output. The initial value is set when Readline initializes the terminal settings. This function returns the previous value. -- Function: int rl_reset_terminal (const char *terminal_name) Reinitialize Readline's idea of the terminal settings using TERMINAL_NAME as the terminal type (e.g., 'vt100'). If TERMINAL_NAME is 'NULL', the value of the 'TERM' environment variable is used.  File: readline.info, Node: Utility Functions, Next: Miscellaneous Functions, Prev: Terminal Management, Up: Readline Convenience Functions 2.4.10 Utility Functions ------------------------ -- Function: int rl_save_state (struct readline_state *sp) Save a snapshot of Readline's internal state to SP. The contents of the READLINE_STATE structure are documented in 'readline.h'. The caller is responsible for allocating the structure. -- Function: int rl_restore_state (struct readline_state *sp) Restore Readline's internal state to that stored in SP, which must have been saved by a call to 'rl_save_state'. The contents of the READLINE_STATE structure are documented in 'readline.h'. The caller is responsible for freeing the structure. -- Function: void rl_free (void *mem) Deallocate the memory pointed to by MEM. MEM must have been allocated by 'malloc'. -- Function: void rl_replace_line (const char *text, int clear_undo) Replace the contents of 'rl_line_buffer' with TEXT. The point and mark are preserved, if possible. If CLEAR_UNDO is non-zero, the undo list associated with the current line is cleared. -- Function: void rl_extend_line_buffer (int len) Ensure that 'rl_line_buffer' has enough space to hold LEN characters, possibly reallocating it if necessary. -- Function: int rl_initialize (void) Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; 'readline()' calls it before reading any input. -- Function: int rl_ding (void) Ring the terminal bell, obeying the setting of 'bell-style'. -- Function: int rl_alphabetic (int c) Return 1 if C is an alphabetic character. -- Function: void rl_display_match_list (char **matches, int len, int max) A convenience function for displaying a list of strings in columnar format on Readline's output stream. 'matches' is the list of strings, in argv format, such as a list of completion matches. 'len' is the number of strings in 'matches', and 'max' is the length of the longest string in 'matches'. This function uses the setting of 'print-completions-horizontally' to select how the matches are displayed (*note Readline Init File Syntax::). When displaying completions, this function sets the number of columns used for display to the value of 'completion-display-width', the value of the environment variable 'COLUMNS', or the screen width, in that order. The following are implemented as macros, defined in 'chardefs.h'. Applications should refrain from using them. -- Function: int _rl_uppercase_p (int c) Return 1 if C is an uppercase alphabetic character. -- Function: int _rl_lowercase_p (int c) Return 1 if C is a lowercase alphabetic character. -- Function: int _rl_digit_p (int c) Return 1 if C is a numeric character. -- Function: int _rl_to_upper (int c) If C is a lowercase alphabetic character, return the corresponding uppercase character. -- Function: int _rl_to_lower (int c) If C is an uppercase alphabetic character, return the corresponding lowercase character. -- Function: int _rl_digit_value (int c) If C is a number, return the value it represents.  File: readline.info, Node: Miscellaneous Functions, Next: Alternate Interface, Prev: Utility Functions, Up: Readline Convenience Functions 2.4.11 Miscellaneous Functions ------------------------------ -- Function: int rl_macro_bind (const char *keyseq, const char *macro, Keymap map) Bind the key sequence KEYSEQ to invoke the macro MACRO. The binding is performed in MAP. When KEYSEQ is invoked, the MACRO will be inserted into the line. This function is deprecated; use 'rl_generic_bind()' instead. -- Function: void rl_macro_dumper (int readable) Print the key sequences bound to macros and their values, using the current keymap, to 'rl_outstream'. If READABLE is non-zero, the list is formatted in such a way that it can be made part of an 'inputrc' file and re-read. -- Function: int rl_variable_bind (const char *variable, const char *value) Make the Readline variable VARIABLE have VALUE. This behaves as if the readline command 'set VARIABLE VALUE' had been executed in an 'inputrc' file (*note Readline Init File Syntax::). -- Function: char * rl_variable_value (const char *variable) Return a string representing the value of the Readline variable VARIABLE. For boolean variables, this string is either 'on' or 'off'. -- Function: void rl_variable_dumper (int readable) Print the readline variable names and their current values to 'rl_outstream'. If READABLE is non-zero, the list is formatted in such a way that it can be made part of an 'inputrc' file and re-read. -- Function: int rl_set_paren_blink_timeout (int u) Set the time interval (in microseconds) that Readline waits when showing a balancing character when 'blink-matching-paren' has been enabled. -- Function: char * rl_get_termcap (const char *cap) Retrieve the string value of the termcap capability CAP. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses. -- Function: void rl_clear_history (void) Clear the history list by deleting all of the entries, in the same manner as the History library's 'clear_history()' function. This differs from 'clear_history' because it frees private data Readline saves in the history list.  File: readline.info, Node: Alternate Interface, Next: A Readline Example, Prev: Miscellaneous Functions, Up: Readline Convenience Functions 2.4.12 Alternate Interface -------------------------- An alternate interface is available to plain 'readline()'. Some applications need to interleave keyboard I/O with file, device, or window system I/O, typically by using a main loop to 'select()' on various file descriptors. To accommodate this need, readline can also be invoked as a 'callback' function from an event loop. There are functions available to make this easy. -- Function: void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler) Set up the terminal for readline I/O and display the initial expanded value of PROMPT. Save the value of LHANDLER to use as a handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument. As with 'readline()', the handler function should 'free' the line when it it finished with it. -- Function: void rl_callback_read_char (void) Whenever an application determines that keyboard input is available, it should call 'rl_callback_read_char()', which will read the next character from the current input source. If that character completes the line, 'rl_callback_read_char' will invoke the LHANDLER function installed by 'rl_callback_handler_install' to process the line. Before calling the LHANDLER function, the terminal settings are reset to the values they had before calling 'rl_callback_handler_install'. If the LHANDLER function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. 'EOF' is indicated by calling LHANDLER with a 'NULL' line. -- Function: void rl_callback_sigcleanup (void) Clean up any internal state the callback interface uses to maintain state between calls to rl_callback_read_char (e.g., the state of any active incremental searches). This is intended to be used by applications that wish to perform their own signal handling; Readline's internal signal handler calls this when appropriate. -- Function: void rl_callback_handler_remove (void) Restore the terminal to its initial state and remove the line handler. You may call this function from within a callback as well as independently. If the LHANDLER installed by 'rl_callback_handler_install' does not exit the program, either this function or the function referred to by the value of 'rl_deprep_term_function' should be called before the program exits to reset the terminal settings.  File: readline.info, Node: A Readline Example, Next: Alternate Interface Example, Prev: Alternate Interface, Up: Readline Convenience Functions 2.4.13 A Readline Example ------------------------- Here is a function which changes lowercase characters to their uppercase equivalents, and uppercase characters to lowercase. If this function was bound to 'M-c', then typing 'M-c' would change the case of the character under point. Typing 'M-1 0 M-c' would change the case of the following 10 characters, leaving the cursor on the last character changed. /* Invert the case of the COUNT following characters. */ int invert_case_line (count, key) int count, key; { register int start, end, i; start = rl_point; if (rl_point >= rl_end) return (0); if (count < 0) { direction = -1; count = -count; } else direction = 1; /* Find the end of the range to modify. */ end = start + (count * direction); /* Force it to be within range. */ if (end > rl_end) end = rl_end; else if (end < 0) end = 0; if (start == end) return (0); if (start > end) { int temp = start; start = end; end = temp; } /* Tell readline that we are modifying the line, so it will save the undo information. */ rl_modifying (start, end); for (i = start; i != end; i++) { if (_rl_uppercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]); else if (_rl_lowercase_p (rl_line_buffer[i])) rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]); } /* Move point to on top of the last character changed. */ rl_point = (direction == 1) ? end - 1 : start; return (0); }  File: readline.info, Node: Alternate Interface Example, Prev: A Readline Example, Up: Readline Convenience Functions 2.4.14 Alternate Interface Example ---------------------------------- Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program. /* Standard include files. stdio.h is required. */ #include #include #include #include /* Used for select(2) */ #include #include #include #include /* Standard readline include files. */ #include #include static void cb_linehandler (char *); static void sighandler (int); int running; int sigwinch_received; const char *prompt = "rltest$ "; /* Handle SIGWINCH and window size changes when readline is not active and reading a character. */ static void sighandler (int sig) { sigwinch_received = 1; } /* Callback function called for each line when accept-line executed, EOF seen, or EOF character read. This sets a flag and returns; it could also call exit(3). */ static void cb_linehandler (char *line) { /* Can use ^D (stty eof) or `exit' to exit. */ if (line == NULL || strcmp (line, "exit") == 0) { if (line == 0) printf ("\n"); printf ("exit\n"); /* This function needs to be called to reset the terminal settings, and calling it from the line handler keeps one extra prompt from being displayed. */ rl_callback_handler_remove (); running = 0; } else { if (*line) add_history (line); printf ("input line: %s\n", line); free (line); } } int main (int c, char **v) { fd_set fds; int r; /* Set the default locale values according to environment variables. */ setlocale (LC_ALL, ""); /* Handle window size changes when readline is not active and reading characters. */ signal (SIGWINCH, sighandler); /* Install the line handler. */ rl_callback_handler_install (prompt, cb_linehandler); /* Enter a simple event loop. This waits until something is available to read on readline's input stream (defaults to standard input) and calls the builtin character read callback to read it. It does not have to modify the user's terminal settings. */ running = 1; while (running) { FD_ZERO (&fds); FD_SET (fileno (rl_instream), &fds); r = select (FD_SETSIZE, &fds, NULL, NULL, NULL); if (r < 0 && errno != EINTR) { perror ("rltest: select"); rl_callback_handler_remove (); break; } if (sigwinch_received) { rl_resize_terminal (); sigwinch_received = 0; } if (r < 0) continue; if (FD_ISSET (fileno (rl_instream), &fds)) rl_callback_read_char (); } printf ("rltest: Event loop has exited\n"); return 0; }  File: readline.info, Node: Readline Signal Handling, Next: Custom Completers, Prev: Readline Convenience Functions, Up: Programming with GNU Readline 2.5 Readline Signal Handling ============================ Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually. Readline contains an internal signal handler that is installed for a number of signals ('SIGINT', 'SIGQUIT', 'SIGTERM', 'SIGHUP', 'SIGALRM', 'SIGTSTP', 'SIGTTIN', and 'SIGTTOU'). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before 'readline()' was called, reset the signal handling to what it was before 'readline()' was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a 'SIGINT' is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of 'rl_free_line_state()' below). There is an additional Readline signal handler, for 'SIGWINCH', which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an 'xterm'). The Readline 'SIGWINCH' handler updates Readline's internal screen size information, and then calls any 'SIGWINCH' signal handler the calling application has installed. Readline calls the application's 'SIGWINCH' signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a 'longjmp' back to a main processing loop), it _must_ call 'rl_cleanup_after_signal()' (described below), to restore the terminal state. When an application is using the callback interface (*note Alternate Interface::), Readline installs signal handlers only for the duration of the call to 'rl_callback_read_char'. Applications using the callback interface should be prepared to clean up Readline's state if they wish to handle the signal before the line handler completes and restores the terminal state. If an application using the callback interface wishes to have Readline install its signal handlers at the time the application calls 'rl_callback_handler_install' and remove them only when a complete line of input has been read, it should set the 'rl_persistent_signal_handlers' variable to a non-zero value. This allows an application to defer all of the handling of the signals Readline catches to Readline. Applications should use this variable with care; it can result in Readline catching signals and not acting on them (or allowing the application to react to them) until the application calls 'rl_callback_read_char'. This can result in an application becoming less responsive to keyboard signals like SIGINT. If an application does not want or need to perform any signal handling, or does not need to do any processing between calls to 'rl_callback_read_char', setting this variable may be desirable. Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling 'readline()', not in a signal handler, so Readline's internal signal state is not corrupted. -- Variable: int rl_catch_signals If this variable is non-zero, Readline will install signal handlers for 'SIGINT', 'SIGQUIT', 'SIGTERM', 'SIGHUP', 'SIGALRM', 'SIGTSTP', 'SIGTTIN', and 'SIGTTOU'. The default value of 'rl_catch_signals' is 1. -- Variable: int rl_catch_sigwinch If this variable is set to a non-zero value, Readline will install a signal handler for 'SIGWINCH'. The default value of 'rl_catch_sigwinch' is 1. -- Variable: int rl_persistent_signal_handlers If an application using the callback interface wishes Readline's signal handlers to be installed and active during the set of calls to 'rl_callback_read_char' that constitutes an entire single line, it should set this variable to a non-zero value. The default value of 'rl_persistent_signal_handlers' is 0. -- Variable: int rl_change_environment If this variable is set to a non-zero value, and Readline is handling 'SIGWINCH', Readline will modify the LINES and COLUMNS environment variables upon receipt of a 'SIGWINCH' The default value of 'rl_change_environment' is 1. If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches ('SIGHUP', for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal. -- Function: int rl_pending_signal (void) Return the signal number of the most recent signal Readline received but has not yet handled, or 0 if there is no pending signal. -- Function: void rl_cleanup_after_signal (void) This function will reset the state of the terminal to what it was before 'readline()' was called, and remove the Readline signal handlers for all signals, depending on the values of 'rl_catch_signals' and 'rl_catch_sigwinch'. -- Function: void rl_free_line_state (void) This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before 'rl_cleanup_after_signal()'. The Readline signal handler for 'SIGINT' calls this to abort the current input line. -- Function: void rl_reset_after_signal (void) This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of 'rl_catch_signals' and 'rl_catch_sigwinch'. If an application does not wish Readline to catch 'SIGWINCH', it may call 'rl_resize_terminal()' or 'rl_set_screen_size()' to force Readline to update its idea of the terminal size when a 'SIGWINCH' is received. -- Function: void rl_echo_signal_char (int sig) If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with SIG set to 'SIGINT', 'SIGQUIT', or 'SIGTSTP' will display the character generating that signal. -- Function: void rl_resize_terminal (void) Update Readline's internal screen size by reading values from the kernel. -- Function: void rl_set_screen_size (int rows, int cols) Set Readline's idea of the terminal size to ROWS rows and COLS columns. If either ROWS or COLUMNS is less than or equal to 0, Readline's idea of that terminal dimension is unchanged. If an application does not want to install a 'SIGWINCH' handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried. -- Function: void rl_get_screen_size (int *rows, int *cols) Return Readline's idea of the terminal's size in the variables pointed to by the arguments. -- Function: void rl_reset_screen_size (void) Cause Readline to reobtain the screen size and recalculate its dimensions. The following functions install and remove Readline's signal handlers. -- Function: int rl_set_signals (void) Install Readline's signal handler for 'SIGINT', 'SIGQUIT', 'SIGTERM', 'SIGHUP', 'SIGALRM', 'SIGTSTP', 'SIGTTIN', 'SIGTTOU', and 'SIGWINCH', depending on the values of 'rl_catch_signals' and 'rl_catch_sigwinch'. -- Function: int rl_clear_signals (void) Remove all of the Readline signal handlers installed by 'rl_set_signals()'.  File: readline.info, Node: Custom Completers, Prev: Readline Signal Handling, Up: Programming with GNU Readline 2.6 Custom Completers ===================== Typically, a program that reads commands from the user has a way of disambiguating commands and data. If your program is one of these, then it can provide completion for commands, data, or both. The following sections describe how your program and Readline cooperate to provide this service. * Menu: * How Completing Works:: The logic used to do completion. * Completion Functions:: Functions provided by Readline. * Completion Variables:: Variables which control completion. * A Short Completion Example:: An example of writing completer subroutines.  File: readline.info, Node: How Completing Works, Next: Completion Functions, Up: Custom Completers 2.6.1 How Completing Works -------------------------- In order to complete some text, the full list of possible completions must be available. That is, it is not possible to accurately expand a partial word without knowing all of the possible words which make sense in that context. The Readline library provides the user interface to completion, and two of the most common completion functions: filename and username. For completing other types of text, you must write your own completion function. This section describes exactly what such functions must do, and provides an example. There are three major functions used to perform completion: 1. The user-interface function 'rl_complete()'. This function is called with the same arguments as other bindable Readline functions: COUNT and INVOKING_KEY. It isolates the word to be completed and calls 'rl_completion_matches()' to generate a list of possible completions. It then either lists the possible completions, inserts the possible completions, or actually performs the completion, depending on which behavior is desired. 2. The internal function 'rl_completion_matches()' uses an application-supplied "generator" function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in 'rl_completion_entry_function'. 3. The generator function is called repeatedly from 'rl_completion_matches()', returning a string each time. The arguments to the generator function are TEXT and STATE. TEXT is the partial word to be completed. STATE is zero the first time the function is called, allowing the generator to perform any necessary initialization, and a positive non-zero integer for each subsequent call. The generator function returns '(char *)NULL' to inform 'rl_completion_matches()' that there are no more possibilities left. Usually the generator function computes the list of possible completions when STATE is zero, and returns them one at a time on subsequent calls. Each string the generator function returns as a match must be allocated with 'malloc()'; Readline frees the strings when it has finished with them. Such a generator function is referred to as an "application-specific completion function". -- Function: int rl_complete (int ignore, int invoking_key) Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see 'rl_completion_matches()'). The default is to do filename completion. -- Variable: rl_compentry_func_t * rl_completion_entry_function This is a pointer to the generator function for 'rl_completion_matches()'. If the value of 'rl_completion_entry_function' is 'NULL' then the default filename generator function, 'rl_filename_completion_function()', is used. An "application-specific completion function" is a function whose address is assigned to 'rl_completion_entry_function' and whose return values are used to generate possible completions.  File: readline.info, Node: Completion Functions, Next: Completion Variables, Prev: How Completing Works, Up: Custom Completers 2.6.2 Completion Functions -------------------------- Here is the complete list of callable completion functions present in Readline. -- Function: int rl_complete_internal (int what_to_do) Complete the word at or before point. WHAT_TO_DO says what to do with the completion. A value of '?' means list the possible completions. 'TAB' means do standard completion. '*' means insert all of the possible completions. '!' means to display all of the possible completions, if there is more than one, as well as performing partial completion. '@' is similar to '!', but possible completions are not listed if the possible completions share a common prefix. -- Function: int rl_complete (int ignore, int invoking_key) Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see 'rl_completion_matches()' and 'rl_completion_entry_function'). The default is to do filename completion. This calls 'rl_complete_internal()' with an argument depending on INVOKING_KEY. -- Function: int rl_possible_completions (int count, int invoking_key) List the possible completions. See description of 'rl_complete ()'. This calls 'rl_complete_internal()' with an argument of '?'. -- Function: int rl_insert_completions (int count, int invoking_key) Insert the list of possible completions into the line, deleting the partially-completed word. See description of 'rl_complete()'. This calls 'rl_complete_internal()' with an argument of '*'. -- Function: int rl_completion_mode (rl_command_func_t *cfunc) Returns the appropriate value to pass to 'rl_complete_internal()' depending on whether CFUNC was called twice in succession and the values of the 'show-all-if-ambiguous' and 'show-all-if-unmodified' variables. Application-specific completion functions may use this function to present the same interface as 'rl_complete()'. -- Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func) Returns an array of strings which is a list of completions for TEXT. If there are no completions, returns 'NULL'. The first entry in the returned array is the substitution for TEXT. The remaining entries are the possible completions. The array is terminated with a 'NULL' pointer. ENTRY_FUNC is a function of two args, and returns a 'char *'. The first argument is TEXT. The second is a state argument; it is zero on the first call, and non-zero on subsequent calls. ENTRY_FUNC returns a 'NULL' pointer to the caller when there are no more matches. -- Function: char * rl_filename_completion_function (const char *text, int state) A generator function for filename completion in the general case. TEXT is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions). -- Function: char * rl_username_completion_function (const char *text, int state) A completion generator for usernames. TEXT contains a partial username preceded by a random character (usually '~'). As with all completion generators, STATE is zero on the first call and non-zero for subsequent calls.  File: readline.info, Node: Completion Variables, Next: A Short Completion Example, Prev: Completion Functions, Up: Custom Completers 2.6.3 Completion Variables -------------------------- -- Variable: rl_compentry_func_t * rl_completion_entry_function A pointer to the generator function for 'rl_completion_matches()'. 'NULL' means to use 'rl_filename_completion_function()', the default filename completer. -- Variable: rl_completion_func_t * rl_attempted_completion_function A pointer to an alternative function to create matches. The function is called with TEXT, START, and END. START and END are indices in 'rl_line_buffer' defining the boundaries of TEXT, which is a character string. If this function exists and returns 'NULL', or if this variable is set to 'NULL', then 'rl_complete()' will call the value of 'rl_completion_entry_function' to generate matches, otherwise the array of strings returned will be used. If this function sets the 'rl_attempted_completion_over' variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches. -- Variable: rl_quote_func_t * rl_filename_quoting_function A pointer to a function that will quote a filename in an application-specific fashion. This is called if filename completion is being attempted and one of the characters in 'rl_filename_quote_characters' appears in a completed filename. The function is called with TEXT, MATCH_TYPE, and QUOTE_POINTER. The TEXT is the filename to be quoted. The MATCH_TYPE is either 'SINGLE_MATCH', if there is only one completion match, or 'MULT_MATCH'. Some functions use this to decide whether or not to insert a closing quote character. The QUOTE_POINTER is a pointer to any opening quote character the user typed. Some functions choose to reset this character. -- Variable: rl_dequote_func_t * rl_filename_dequoting_function A pointer to a function that will remove application-specific quoting characters from a filename before completion is attempted, so those characters do not interfere with matching the text against names in the filesystem. It is called with TEXT, the text of the word to be dequoted, and QUOTE_CHAR, which is the quoting character that delimits the filename (usually ''' or '"'). If QUOTE_CHAR is zero, the filename was not in an embedded string. -- Variable: rl_linebuf_func_t * rl_char_is_quoted_p A pointer to a function to call that determines whether or not a specific character in the line buffer is quoted, according to whatever quoting mechanism the program calling Readline uses. The function is called with two arguments: TEXT, the text of the line, and INDEX, the index of the character in the line. It is used to decide whether a character found in 'rl_completer_word_break_characters' should be used to break words for the completer. -- Variable: rl_compignore_func_t * rl_ignore_some_completions_function This function, if defined, is called by the completer when real filename completion is done, after all the matching names have been generated. It is passed a 'NULL' terminated array of matches. The first element ('matches[0]') is the maximal substring common to all matches. This function can re-arrange the list of matches as required, but each element deleted from the array must be freed. -- Variable: rl_icppfunc_t * rl_directory_completion_hook This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to 'opendir()'. The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_icppfunc_t * rl_directory_rewrite_hook; If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike 'rl_directory_completion_hook', it only modifies the directory name used in 'opendir', not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to 'opendir()'. The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_icppfunc_t * rl_filename_stat_hook If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to 'stat()' to determine the file's type and characteristics. This function does not need to remove quote characters from the filename. The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0. -- Variable: rl_dequote_func_t * rl_filename_rewrite_hook If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: FNAME, the filename to be converted, and FNLEN, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string. -- Variable: rl_compdisp_func_t * rl_completion_display_matches_hook If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: ('char **'MATCHES, 'int' NUM_MATCHES, 'int' MAX_LENGTH) where MATCHES is the array of matching strings, NUM_MATCHES is the number of strings in that array, and MAX_LENGTH is the length of the longest string in that array. Readline provides a convenience function, 'rl_display_match_list', that takes care of doing the display to Readline's output stream. You may call that function from this hook. -- Variable: const char * rl_basic_word_break_characters The basic list of characters that signal a break between words for the completer routine. The default value of this variable is the characters which break words for completion in Bash: '" \t\n\"\\'`@$><=;|&{("'. -- Variable: const char * rl_basic_quote_characters A list of quote characters which can cause a word break. -- Variable: const char * rl_completer_word_break_characters The list of characters that signal a break between words for 'rl_complete_internal()'. The default list is the value of 'rl_basic_word_break_characters'. -- Variable: rl_cpvfunc_t * rl_completion_word_break_hook If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like 'rl_completer_word_break_characters' to be used to perform the current completion. The function may choose to set 'rl_completer_word_break_characters' itself. If the function returns 'NULL', 'rl_completer_word_break_characters' is used. -- Variable: const char * rl_completer_quote_characters A list of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring 'rl_completer_word_break_characters' are treated as any other character, unless they also appear within this list. -- Variable: const char * rl_filename_quote_characters A list of characters that cause a filename to be quoted by the completer when they appear in a completed filename. The default is the null string. -- Variable: const char * rl_special_prefixes The list of characters that are word break characters, but should be left in TEXT when it is passed to the completion function. Programs can use this to help determine what kind of completing to do. For instance, Bash sets this variable to "$@" so that it can complete shell variables and hostnames. -- Variable: int rl_completion_query_items Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user. -- Variable: int rl_completion_append_character When a single completion alternative matches at the end of the command line, this character is appended to the inserted completion text. The default is a space character (' '). Setting this to the null character ('\0') prevents anything being appended automatically. This can be changed in application-specific completion functions to provide the "most sensible word separator character" according to an application-specific command line syntax specification. -- Variable: int rl_completion_suppress_append If non-zero, RL_COMPLETION_APPEND_CHARACTER is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. -- Variable: int rl_completion_quote_character When Readline is completing quoted text, as delimited by one of the characters in RL_COMPLETER_QUOTE_CHARACTERS, it sets this variable to the quoting character found. This is set before any application-specific completion function is called. -- Variable: int rl_completion_suppress_quote If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function. -- Variable: int rl_completion_found_quote When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called. -- Variable: int rl_completion_mark_symlink_dirs If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable MARK-DIRECTORIES variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the MARK-SYMLINKED-DIRECTORIES Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored. -- Variable: int rl_ignore_completion_duplicates If non-zero, then duplicates in the matches are removed. The default is 1. -- Variable: int rl_filename_completion_desired Non-zero means that the results of the matches are to be treated as filenames. This is _always_ zero when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in 'rl_filename_quote_characters' and 'rl_filename_quoting_desired' is set to a non-zero value. -- Variable: int rl_filename_quoting_desired Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the completed filename contains any characters in 'rl_filename_quote_chars'. This is _always_ non-zero when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by 'rl_filename_quoting_function'. -- Variable: int rl_attempted_completion_over If an application-specific completion function assigned to 'rl_attempted_completion_function' sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function. -- Variable: int rl_sort_completion_matches If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of 'rl_ignore_completion_duplicates', will attempt to remove duplicate matches. -- Variable: int rl_completion_type Set to a character describing the type of completion Readline is currently attempting; see the description of 'rl_complete_internal()' (*note Completion Functions::) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as 'rl_complete()'. -- Variable: int rl_completion_invoking_key Set to the final character in the key sequence that invoked one of the completion functions that call 'rl_complete_internal()'. This is set to the appropriate value before any application-specific completion function is called. -- Variable: int rl_inhibit_completion If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to 'self-insert'.  File: readline.info, Node: A Short Completion Example, Prev: Completion Variables, Up: Custom Completers 2.6.4 A Short Completion Example -------------------------------- Here is a small application demonstrating the use of the GNU Readline library. It is called 'fileman', and the source code resides in 'examples/fileman.c'. This sample application provides completion of command names, line editing features, and access to the history list. /* fileman.c -- A tiny application which demonstrates how to use the GNU Readline library. This application interactively allows users to manipulate files and their modes. */ #ifdef HAVE_CONFIG_H # include #endif #include #ifdef HAVE_SYS_FILE_H # include #endif #include #ifdef HAVE_UNISTD_H # include #endif #include #include #include #if defined (HAVE_STRING_H) # include #else /* !HAVE_STRING_H */ # include #endif /* !HAVE_STRING_H */ #ifdef HAVE_STDLIB_H # include #endif #include #include #include extern char *xmalloc PARAMS((size_t)); /* The names of functions that actually do the manipulation. */ int com_list PARAMS((char *)); int com_view PARAMS((char *)); int com_rename PARAMS((char *)); int com_stat PARAMS((char *)); int com_pwd PARAMS((char *)); int com_delete PARAMS((char *)); int com_help PARAMS((char *)); int com_cd PARAMS((char *)); int com_quit PARAMS((char *)); /* A structure which contains information on the commands this program can understand. */ typedef struct { char *name; /* User printable name of the function. */ rl_icpfunc_t *func; /* Function to call to do the job. */ char *doc; /* Documentation for this function. */ } COMMAND; COMMAND commands[] = { { "cd", com_cd, "Change to directory DIR" }, { "delete", com_delete, "Delete FILE" }, { "help", com_help, "Display this text" }, { "?", com_help, "Synonym for `help'" }, { "list", com_list, "List files in DIR" }, { "ls", com_list, "Synonym for `list'" }, { "pwd", com_pwd, "Print the current working directory" }, { "quit", com_quit, "Quit using Fileman" }, { "rename", com_rename, "Rename FILE to NEWNAME" }, { "stat", com_stat, "Print out statistics on FILE" }, { "view", com_view, "View the contents of FILE" }, { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL } }; /* Forward declarations. */ char *stripwhite (); COMMAND *find_command (); /* The name of this program, as taken from argv[0]. */ char *progname; /* When non-zero, this global means the user is done using this program. */ int done; char * dupstr (s) char *s; { char *r; r = xmalloc (strlen (s) + 1); strcpy (r, s); return (r); } main (argc, argv) int argc; char **argv; { char *line, *s; progname = argv[0]; initialize_readline (); /* Bind our completer. */ /* Loop reading and executing lines until the user quits. */ for ( ; done == 0; ) { line = readline ("FileMan: "); if (!line) break; /* Remove leading and trailing whitespace from the line. Then, if there is anything left, add it to the history list and execute it. */ s = stripwhite (line); if (*s) { add_history (s); execute_line (s); } free (line); } exit (0); } /* Execute a command line. */ int execute_line (line) char *line; { register int i; COMMAND *command; char *word; /* Isolate the command word. */ i = 0; while (line[i] && whitespace (line[i])) i++; word = line + i; while (line[i] && !whitespace (line[i])) i++; if (line[i]) line[i++] = '\0'; command = find_command (word); if (!command) { fprintf (stderr, "%s: No such command for FileMan.\n", word); return (-1); } /* Get argument to command, if any. */ while (whitespace (line[i])) i++; word = line + i; /* Call the function. */ return ((*(command->func)) (word)); } /* Look up NAME as the name of a command, and return a pointer to that command. Return a NULL pointer if NAME isn't a command name. */ COMMAND * find_command (name) char *name; { register int i; for (i = 0; commands[i].name; i++) if (strcmp (name, commands[i].name) == 0) return (&commands[i]); return ((COMMAND *)NULL); } /* Strip whitespace from the start and end of STRING. Return a pointer into STRING. */ char * stripwhite (string) char *string; { register char *s, *t; for (s = string; whitespace (*s); s++) ; if (*s == 0) return (s); t = s + strlen (s) - 1; while (t > s && whitespace (*t)) t--; *++t = '\0'; return s; } /* **************************************************************** */ /* */ /* Interface to Readline Completion */ /* */ /* **************************************************************** */ char *command_generator PARAMS((const char *, int)); char **fileman_completion PARAMS((const char *, int, int)); /* Tell the GNU Readline library how to complete. We want to try to complete on command names if this is the first word in the line, or on filenames if not. */ initialize_readline () { /* Allow conditional parsing of the ~/.inputrc file. */ rl_readline_name = "FileMan"; /* Tell the completer that we want a crack first. */ rl_attempted_completion_function = fileman_completion; } /* Attempt to complete on the contents of TEXT. START and END bound the region of rl_line_buffer that contains the word to complete. TEXT is the word to complete. We can use the entire contents of rl_line_buffer in case we want to do some simple parsing. Return the array of matches, or NULL if there aren't any. */ char ** fileman_completion (text, start, end) const char *text; int start, end; { char **matches; matches = (char **)NULL; /* If this word is at the start of the line, then it is a command to complete. Otherwise it is the name of a file in the current directory. */ if (start == 0) matches = rl_completion_matches (text, command_generator); return (matches); } /* Generator function for command completion. STATE lets us know whether to start from scratch; without any state (i.e. STATE == 0), then we start at the top of the list. */ char * command_generator (text, state) const char *text; int state; { static int list_index, len; char *name; /* If this is a new word to complete, initialize now. This includes saving the length of TEXT for efficiency, and initializing the index variable to 0. */ if (!state) { list_index = 0; len = strlen (text); } /* Return the next name which partially matches from the command list. */ while (name = commands[list_index].name) { list_index++; if (strncmp (name, text, len) == 0) return (dupstr(name)); } /* If no names matched, then return NULL. */ return ((char *)NULL); } /* **************************************************************** */ /* */ /* FileMan Commands */ /* */ /* **************************************************************** */ /* String to pass to system (). This is for the LIST, VIEW and RENAME commands. */ static char syscom[1024]; /* List the file(s) named in arg. */ com_list (arg) char *arg; { if (!arg) arg = ""; sprintf (syscom, "ls -FClg %s", arg); return (system (syscom)); } com_view (arg) char *arg; { if (!valid_argument ("view", arg)) return 1; #if defined (__MSDOS__) /* more.com doesn't grok slashes in pathnames */ sprintf (syscom, "less %s", arg); #else sprintf (syscom, "more %s", arg); #endif return (system (syscom)); } com_rename (arg) char *arg; { too_dangerous ("rename"); return (1); } com_stat (arg) char *arg; { struct stat finfo; if (!valid_argument ("stat", arg)) return (1); if (stat (arg, &finfo) == -1) { perror (arg); return (1); } printf ("Statistics for `%s':\n", arg); printf ("%s has %d link%s, and is %d byte%s in length.\n", arg, finfo.st_nlink, (finfo.st_nlink == 1) ? "" : "s", finfo.st_size, (finfo.st_size == 1) ? "" : "s"); printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime)); printf (" Last access at: %s", ctime (&finfo.st_atime)); printf (" Last modified at: %s", ctime (&finfo.st_mtime)); return (0); } com_delete (arg) char *arg; { too_dangerous ("delete"); return (1); } /* Print out help for ARG, or for all of the commands if ARG is not present. */ com_help (arg) char *arg; { register int i; int printed = 0; for (i = 0; commands[i].name; i++) { if (!*arg || (strcmp (arg, commands[i].name) == 0)) { printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc); printed++; } } if (!printed) { printf ("No commands match `%s'. Possibilties are:\n", arg); for (i = 0; commands[i].name; i++) { /* Print in six columns. */ if (printed == 6) { printed = 0; printf ("\n"); } printf ("%s\t", commands[i].name); printed++; } if (printed) printf ("\n"); } return (0); } /* Change to the directory ARG. */ com_cd (arg) char *arg; { if (chdir (arg) == -1) { perror (arg); return 1; } com_pwd (""); return (0); } /* Print out the current working directory. */ com_pwd (ignore) char *ignore; { char dir[1024], *s; s = getcwd (dir, sizeof(dir) - 1); if (s == 0) { printf ("Error getting pwd: %s\n", dir); return 1; } printf ("Current directory is %s\n", dir); return 0; } /* The user wishes to quit using this program. Just set DONE non-zero. */ com_quit (arg) char *arg; { done = 1; return (0); } /* Function which tells you that you can't do this. */ too_dangerous (caller) char *caller; { fprintf (stderr, "%s: Too dangerous for me to distribute. Write it yourself.\n", caller); } /* Return non-zero if ARG is a valid argument for CALLER, else print an error message and return zero. */ int valid_argument (caller, arg) char *caller, *arg; { if (!arg || !*arg) { fprintf (stderr, "%s: Argument required.\n", caller); return (0); } return (1); }  File: readline.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU Readline, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful 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. 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. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. 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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. 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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. 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. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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. 4. 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: A. 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. B. 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 fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. 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. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve 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. J. 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. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. 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. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. 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. 5. 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, and that you preserve all their Warranty Disclaimers. 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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. 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. 7. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. 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 . 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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== 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: 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.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. 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.  File: readline.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top Concept Index ************* [index] * Menu: * application-specific completion functions: Custom Completers. (line 6) * command editing: Readline Bare Essentials. (line 6) * editing command lines: Readline Bare Essentials. (line 6) * initialization file, readline: Readline Init File. (line 6) * interaction, readline: Readline Interaction. (line 6) * kill ring: Readline Killing Commands. (line 18) * killing text: Readline Killing Commands. (line 6) * notation, readline: Readline Bare Essentials. (line 6) * readline, function: Basic Behavior. (line 12) * variables, readline: Readline Init File Syntax. (line 34) * yanking text: Readline Killing Commands. (line 6)  File: readline.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top Function and Variable Index *************************** [index] * Menu: * _rl_digit_p: Utility Functions. (line 64) * _rl_digit_value: Utility Functions. (line 75) * _rl_lowercase_p: Utility Functions. (line 61) * _rl_to_lower: Utility Functions. (line 71) * _rl_to_upper: Utility Functions. (line 67) * _rl_uppercase_p: Utility Functions. (line 58) * abort (C-g): Miscellaneous Commands. (line 10) * accept-line (Newline or Return): Commands For History. (line 6) * backward-char (C-b): Commands For Moving. (line 15) * backward-delete-char (Rubout): Commands For Text. (line 17) * backward-kill-line (C-x Rubout): Commands For Killing. (line 9) * backward-kill-word (M-): Commands For Killing. (line 24) * backward-word (M-b): Commands For Moving. (line 22) * beginning-of-history (M-<): Commands For History. (line 19) * beginning-of-line (C-a): Commands For Moving. (line 6) * bell-style: Readline Init File Syntax. (line 35) * bind-tty-special-chars: Readline Init File Syntax. (line 42) * blink-matching-paren: Readline Init File Syntax. (line 47) * bracketed-paste-begin (): Commands For Text. (line 36) * call-last-kbd-macro (C-x e): Keyboard Macros. (line 13) * capitalize-word (M-c): Commands For Text. (line 64) * character-search (C-]): Miscellaneous Commands. (line 41) * character-search-backward (M-C-]): Miscellaneous Commands. (line 46) * clear-screen (C-l): Commands For Moving. (line 26) * colored-completion-prefix: Readline Init File Syntax. (line 52) * colored-stats: Readline Init File Syntax. (line 59) * comment-begin: Readline Init File Syntax. (line 65) * complete (): Commands For Completion. (line 6) * completion-display-width: Readline Init File Syntax. (line 70) * completion-ignore-case: Readline Init File Syntax. (line 77) * completion-map-case: Readline Init File Syntax. (line 82) * completion-prefix-display-length: Readline Init File Syntax. (line 88) * completion-query-items: Readline Init File Syntax. (line 95) * convert-meta: Readline Init File Syntax. (line 105) * copy-backward-word (): Commands For Killing. (line 49) * copy-forward-word (): Commands For Killing. (line 54) * copy-region-as-kill (): Commands For Killing. (line 45) * delete-char (C-d): Commands For Text. (line 12) * delete-char-or-list (): Commands For Completion. (line 39) * delete-horizontal-space (): Commands For Killing. (line 37) * digit-argument (M-0, M-1, ... M--): Numeric Arguments. (line 6) * disable-completion: Readline Init File Syntax. (line 113) * do-uppercase-version (M-a, M-b, M-X, ...): Miscellaneous Commands. (line 14) * downcase-word (M-l): Commands For Text. (line 60) * dump-functions (): Miscellaneous Commands. (line 69) * dump-macros (): Miscellaneous Commands. (line 81) * dump-variables (): Miscellaneous Commands. (line 75) * echo-control-characters: Readline Init File Syntax. (line 118) * editing-mode: Readline Init File Syntax. (line 123) * emacs-editing-mode (C-e): Miscellaneous Commands. (line 87) * emacs-mode-string: Readline Init File Syntax. (line 129) * enable-bracketed-paste: Readline Init File Syntax. (line 139) * enable-keypad: Readline Init File Syntax. (line 147) * end-kbd-macro (C-x )): Keyboard Macros. (line 9) * end-of-file (usually C-d): Commands For Text. (line 6) * end-of-history (M->): Commands For History. (line 22) * end-of-line (C-e): Commands For Moving. (line 9) * exchange-point-and-mark (C-x C-x): Miscellaneous Commands. (line 36) * expand-tilde: Readline Init File Syntax. (line 158) * forward-backward-delete-char (): Commands For Text. (line 21) * forward-char (C-f): Commands For Moving. (line 12) * forward-search-history (C-s): Commands For History. (line 30) * forward-word (M-f): Commands For Moving. (line 18) * history-preserve-point: Readline Init File Syntax. (line 162) * history-search-backward (): Commands For History. (line 52) * history-search-forward (): Commands For History. (line 46) * history-size: Readline Init File Syntax. (line 168) * history-substr-search-backward (): Commands For History. (line 64) * history-substr-search-forward (): Commands For History. (line 58) * horizontal-scroll-mode: Readline Init File Syntax. (line 177) * input-meta: Readline Init File Syntax. (line 184) * insert-comment (M-#): Miscellaneous Commands. (line 60) * insert-completions (M-*): Commands For Completion. (line 18) * isearch-terminators: Readline Init File Syntax. (line 192) * keymap: Readline Init File Syntax. (line 199) * kill-line (C-k): Commands For Killing. (line 6) * kill-region (): Commands For Killing. (line 41) * kill-whole-line (): Commands For Killing. (line 15) * kill-word (M-d): Commands For Killing. (line 19) * mark-modified-lines: Readline Init File Syntax. (line 229) * mark-symlinked-directories: Readline Init File Syntax. (line 234) * match-hidden-files: Readline Init File Syntax. (line 239) * menu-complete (): Commands For Completion. (line 22) * menu-complete-backward (): Commands For Completion. (line 34) * menu-complete-display-prefix: Readline Init File Syntax. (line 246) * meta-flag: Readline Init File Syntax. (line 184) * next-history (C-n): Commands For History. (line 16) * non-incremental-forward-search-history (M-n): Commands For History. (line 40) * non-incremental-reverse-search-history (M-p): Commands For History. (line 34) * output-meta: Readline Init File Syntax. (line 251) * overwrite-mode (): Commands For Text. (line 68) * page-completions: Readline Init File Syntax. (line 257) * possible-completions (M-?): Commands For Completion. (line 11) * prefix-meta (): Miscellaneous Commands. (line 18) * previous-history (C-p): Commands For History. (line 12) * print-last-kbd-macro (): Keyboard Macros. (line 17) * quoted-insert (C-q or C-v): Commands For Text. (line 26) * re-read-init-file (C-x C-r): Miscellaneous Commands. (line 6) * readline: Basic Behavior. (line 12) * redraw-current-line (): Commands For Moving. (line 30) * reverse-search-history (C-r): Commands For History. (line 26) * revert-all-at-newline: Readline Init File Syntax. (line 267) * revert-line (M-r): Miscellaneous Commands. (line 25) * rl_add_defun: Function Naming. (line 18) * rl_add_funmap_entry: Associating Function Names and Bindings. (line 45) * rl_add_undo: Allowing Undoing. (line 39) * rl_alphabetic: Utility Functions. (line 38) * rl_already_prompted: Readline Variables. (line 63) * rl_attempted_completion_function: Completion Variables. (line 11) * rl_attempted_completion_over: Completion Variables. (line 253) * rl_basic_quote_characters: Completion Variables. (line 143) * rl_basic_word_break_characters: Completion Variables. (line 137) * rl_begin_undo_group: Allowing Undoing. (line 28) * rl_binding_keymap: Readline Variables. (line 184) * rl_bind_key: Binding Keys. (line 21) * rl_bind_keyseq: Binding Keys. (line 57) * rl_bind_keyseq_if_unbound: Binding Keys. (line 75) * rl_bind_keyseq_if_unbound_in_map: Binding Keys. (line 81) * rl_bind_keyseq_in_map: Binding Keys. (line 64) * rl_bind_key_if_unbound: Binding Keys. (line 30) * rl_bind_key_if_unbound_in_map: Binding Keys. (line 36) * rl_bind_key_in_map: Binding Keys. (line 25) * rl_callback_handler_install: Alternate Interface. (line 13) * rl_callback_handler_remove: Alternate Interface. (line 42) * rl_callback_read_char: Alternate Interface. (line 22) * rl_callback_sigcleanup: Alternate Interface. (line 35) * rl_catch_signals: Readline Signal Handling. (line 69) * rl_catch_sigwinch: Readline Signal Handling. (line 76) * rl_change_environment: Readline Signal Handling. (line 90) * rl_char_is_quoted_p: Completion Variables. (line 45) * rl_cleanup_after_signal: Readline Signal Handling. (line 107) * rl_clear_history: Miscellaneous Functions. (line 49) * rl_clear_message: Redisplay. (line 51) * rl_clear_pending_input: Character Input. (line 29) * rl_clear_signals: Readline Signal Handling. (line 166) * rl_clear_visible_line: Redisplay. (line 25) * rl_complete: How Completing Works. (line 46) * rl_complete <1>: Completion Functions. (line 19) * rl_completer_quote_characters: Completion Variables. (line 160) * rl_completer_word_break_characters: Completion Variables. (line 146) * rl_complete_internal: Completion Functions. (line 9) * rl_completion_append_character: Completion Variables. (line 184) * rl_completion_display_matches_hook: Completion Variables. (line 124) * rl_completion_entry_function: How Completing Works. (line 52) * rl_completion_entry_function <1>: Completion Variables. (line 6) * rl_completion_found_quote: Completion Variables. (line 212) * rl_completion_invoking_key: Completion Variables. (line 276) * rl_completion_mark_symlink_dirs: Completion Variables. (line 218) * rl_completion_matches: Completion Functions. (line 43) * rl_completion_mode: Completion Functions. (line 36) * rl_completion_query_items: Completion Variables. (line 178) * rl_completion_quote_character: Completion Variables. (line 200) * rl_completion_suppress_append: Completion Variables. (line 194) * rl_completion_suppress_quote: Completion Variables. (line 206) * rl_completion_type: Completion Variables. (line 268) * rl_completion_word_break_hook: Completion Variables. (line 151) * rl_copy_keymap: Keymaps. (line 16) * rl_copy_text: Modifying Text. (line 14) * rl_crlf: Redisplay. (line 33) * rl_delete_text: Modifying Text. (line 10) * rl_deprep_terminal: Terminal Management. (line 12) * rl_deprep_term_function: Readline Variables. (line 174) * rl_ding: Utility Functions. (line 35) * rl_directory_completion_hook: Completion Variables. (line 63) * rl_directory_rewrite_hook;: Completion Variables. (line 81) * rl_discard_keymap: Keymaps. (line 25) * rl_dispatching: Readline Variables. (line 40) * rl_display_match_list: Utility Functions. (line 41) * rl_display_prompt: Readline Variables. (line 58) * rl_done: Readline Variables. (line 27) * rl_do_undo: Allowing Undoing. (line 47) * rl_echo_signal_char: Readline Signal Handling. (line 130) * rl_editing_mode: Readline Variables. (line 281) * rl_end: Readline Variables. (line 18) * rl_end_undo_group: Allowing Undoing. (line 34) * rl_erase_empty_line: Readline Variables. (line 46) * rl_event_hook: Readline Variables. (line 123) * rl_execute_next: Character Input. (line 25) * rl_executing_key: Readline Variables. (line 191) * rl_executing_keymap: Readline Variables. (line 180) * rl_executing_keyseq: Readline Variables. (line 195) * rl_executing_macro: Readline Variables. (line 188) * rl_expand_prompt: Redisplay. (line 66) * rl_explicit_arg: Readline Variables. (line 272) * rl_extend_line_buffer: Utility Functions. (line 26) * rl_filename_completion_desired: Completion Variables. (line 233) * rl_filename_completion_function: Completion Functions. (line 57) * rl_filename_dequoting_function: Completion Variables. (line 36) * rl_filename_quote_characters: Completion Variables. (line 166) * rl_filename_quoting_desired: Completion Variables. (line 243) * rl_filename_quoting_function: Completion Variables. (line 23) * rl_filename_rewrite_hook: Completion Variables. (line 109) * rl_filename_stat_hook: Completion Variables. (line 97) * rl_forced_update_display: Redisplay. (line 10) * rl_free: Utility Functions. (line 17) * rl_free_keymap: Keymaps. (line 29) * rl_free_line_state: Readline Signal Handling. (line 113) * rl_free_undo_list: Allowing Undoing. (line 44) * rl_function_dumper: Associating Function Names and Bindings. (line 29) * rl_function_of_keyseq: Associating Function Names and Bindings. (line 13) * rl_funmap_names: Associating Function Names and Bindings. (line 39) * rl_generic_bind: Binding Keys. (line 87) * rl_getc: Character Input. (line 14) * rl_getc_function: Readline Variables. (line 128) * rl_get_keymap: Keymaps. (line 36) * rl_get_keymap_by_name: Keymaps. (line 42) * rl_get_keymap_name: Keymaps. (line 47) * rl_get_screen_size: Readline Signal Handling. (line 149) * rl_get_termcap: Miscellaneous Functions. (line 41) * rl_gnu_readline_p: Readline Variables. (line 82) * rl_ignore_completion_duplicates: Completion Variables. (line 229) * rl_ignore_some_completions_function: Completion Variables. (line 55) * rl_inhibit_completion: Completion Variables. (line 282) * rl_initialize: Utility Functions. (line 30) * rl_input_available_hook: Readline Variables. (line 140) * rl_insert_completions: Completion Functions. (line 31) * rl_insert_text: Modifying Text. (line 6) * rl_instream: Readline Variables. (line 96) * rl_invoking_keyseqs: Associating Function Names and Bindings. (line 20) * rl_invoking_keyseqs_in_map: Associating Function Names and Bindings. (line 24) * rl_key_sequence_length: Readline Variables. (line 199) * rl_kill_text: Modifying Text. (line 18) * rl_last_func: Readline Variables. (line 109) * rl_library_version: Readline Variables. (line 72) * rl_line_buffer: Readline Variables. (line 8) * rl_list_funmap_names: Associating Function Names and Bindings. (line 35) * rl_macro_bind: Miscellaneous Functions. (line 6) * rl_macro_dumper: Miscellaneous Functions. (line 13) * rl_make_bare_keymap: Keymaps. (line 11) * rl_make_keymap: Keymaps. (line 19) * rl_mark: Readline Variables. (line 23) * rl_message: Redisplay. (line 42) * rl_modifying: Allowing Undoing. (line 56) * rl_named_function: Associating Function Names and Bindings. (line 10) * rl_numeric_arg: Readline Variables. (line 276) * rl_num_chars_to_read: Readline Variables. (line 31) * rl_on_new_line: Redisplay. (line 14) * rl_on_new_line_with_prompt: Redisplay. (line 18) * rl_outstream: Readline Variables. (line 100) * rl_parse_and_bind: Binding Keys. (line 95) * rl_pending_input: Readline Variables. (line 36) * rl_pending_signal: Readline Signal Handling. (line 102) * rl_persistent_signal_handlers: Readline Signal Handling. (line 82) * rl_point: Readline Variables. (line 14) * rl_possible_completions: Completion Functions. (line 27) * rl_prefer_env_winsize: Readline Variables. (line 104) * rl_prep_terminal: Terminal Management. (line 6) * rl_prep_term_function: Readline Variables. (line 167) * rl_pre_input_hook: Readline Variables. (line 118) * rl_prompt: Readline Variables. (line 52) * rl_push_macro_input: Modifying Text. (line 25) * rl_readline_name: Readline Variables. (line 91) * rl_readline_state: Readline Variables. (line 202) * rl_readline_version: Readline Variables. (line 75) * rl_read_init_file: Binding Keys. (line 100) * rl_read_key: Character Input. (line 6) * rl_redisplay: Redisplay. (line 6) * rl_redisplay_function: Readline Variables. (line 161) * rl_replace_line: Utility Functions. (line 21) * rl_reset_after_signal: Readline Signal Handling. (line 121) * rl_reset_line_state: Redisplay. (line 29) * rl_reset_screen_size: Readline Signal Handling. (line 153) * rl_reset_terminal: Terminal Management. (line 34) * rl_resize_terminal: Readline Signal Handling. (line 136) * rl_restore_prompt: Redisplay. (line 60) * rl_restore_state: Utility Functions. (line 11) * rl_save_prompt: Redisplay. (line 56) * rl_save_state: Utility Functions. (line 6) * rl_set_key: Binding Keys. (line 71) * rl_set_keyboard_input_timeout: Character Input. (line 34) * rl_set_keymap: Keymaps. (line 39) * rl_set_paren_blink_timeout: Miscellaneous Functions. (line 36) * rl_set_prompt: Redisplay. (line 80) * rl_set_screen_size: Readline Signal Handling. (line 140) * rl_set_signals: Readline Signal Handling. (line 160) * rl_show_char: Redisplay. (line 36) * rl_signal_event_hook: Readline Variables. (line 136) * rl_sort_completion_matches: Completion Variables. (line 260) * rl_special_prefixes: Completion Variables. (line 171) * rl_startup_hook: Readline Variables. (line 114) * rl_stuff_char: Character Input. (line 18) * rl_terminal_name: Readline Variables. (line 86) * rl_tty_set_default_bindings: Terminal Management. (line 17) * rl_tty_set_echoing: Terminal Management. (line 27) * rl_tty_unset_default_bindings: Terminal Management. (line 22) * rl_unbind_command_in_map: Binding Keys. (line 53) * rl_unbind_function_in_map: Binding Keys. (line 49) * rl_unbind_key: Binding Keys. (line 41) * rl_unbind_key_in_map: Binding Keys. (line 45) * rl_username_completion_function: Completion Functions. (line 64) * rl_variable_bind: Miscellaneous Functions. (line 19) * rl_variable_dumper: Miscellaneous Functions. (line 30) * rl_variable_value: Miscellaneous Functions. (line 25) * self-insert (a, b, A, 1, !, ...): Commands For Text. (line 33) * set-mark (C-@): Miscellaneous Commands. (line 32) * show-all-if-ambiguous: Readline Init File Syntax. (line 273) * show-all-if-unmodified: Readline Init File Syntax. (line 279) * show-mode-in-prompt: Readline Init File Syntax. (line 288) * skip-completed-text: Readline Init File Syntax. (line 294) * skip-csi-sequence (): Miscellaneous Commands. (line 51) * start-kbd-macro (C-x (): Keyboard Macros. (line 6) * tab-insert (M-): Commands For Text. (line 30) * tilde-expand (M-~): Miscellaneous Commands. (line 29) * transpose-chars (C-t): Commands For Text. (line 45) * transpose-words (M-t): Commands For Text. (line 51) * undo (C-_ or C-x C-u): Miscellaneous Commands. (line 22) * universal-argument (): Numeric Arguments. (line 10) * unix-filename-rubout (): Commands For Killing. (line 32) * unix-line-discard (C-u): Commands For Killing. (line 12) * unix-word-rubout (C-w): Commands For Killing. (line 28) * upcase-word (M-u): Commands For Text. (line 56) * vi-cmd-mode-string: Readline Init File Syntax. (line 307) * vi-editing-mode (M-C-j): Miscellaneous Commands. (line 91) * vi-ins-mode-string: Readline Init File Syntax. (line 317) * visible-stats: Readline Init File Syntax. (line 327) * yank (C-y): Commands For Killing. (line 59) * yank-last-arg (M-. or M-_): Commands For History. (line 79) * yank-nth-arg (M-C-y): Commands For History. (line 70) * yank-pop (M-y): Commands For Killing. (line 62)  Tag Table: Node: Top861 Node: Command Line Editing1586 Node: Introduction and Notation2238 Node: Readline Interaction3862 Node: Readline Bare Essentials5054 Node: Readline Movement Commands6838 Node: Readline Killing Commands7799 Node: Readline Arguments9718 Node: Searching10763 Node: Readline Init File12916 Node: Readline Init File Syntax14070 Node: Conditional Init Constructs33977 Node: Sample Init File36503 Node: Bindable Readline Commands39621 Node: Commands For Moving40676 Node: Commands For History41537 Node: Commands For Text45796 Node: Commands For Killing49239 Node: Numeric Arguments51406 Node: Commands For Completion52546 Node: Keyboard Macros54515 Node: Miscellaneous Commands55203 Node: Readline vi Mode59054 Node: Programming with GNU Readline60871 Node: Basic Behavior61857 Node: Custom Functions65261 Node: Readline Typedefs66744 Node: Function Writing68378 Node: Readline Variables69692 Node: Readline Convenience Functions82364 Node: Function Naming83436 Node: Keymaps84698 Node: Binding Keys86691 Node: Associating Function Names and Bindings91239 Node: Allowing Undoing93524 Node: Redisplay96074 Node: Modifying Text100098 Node: Character Input101345 Node: Terminal Management103243 Node: Utility Functions105066 Node: Miscellaneous Functions108394 Node: Alternate Interface110983 Node: A Readline Example113725 Node: Alternate Interface Example115664 Node: Readline Signal Handling119196 Node: Custom Completers127579 Node: How Completing Works128299 Node: Completion Functions131606 Node: Completion Variables135180 Node: A Short Completion Example150824 Node: GNU Free Documentation License163603 Node: Concept Index188777 Node: Function and Variable Index190298  End Tag Table readline-7.0/doc/history.info000664 000436 000000 00000167241 12764101655 016366 0ustar00chetwheel000000 000000 This is history.info, produced by makeinfo version 6.1 from history.texi. This document describes the GNU History library (version 7.0, 16 July 2016), a programming tool that provides a consistent user interface for recalling lines of previously typed input. Copyright (C) 1988-2016 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Libraries START-INFO-DIR-ENTRY * History: (history). The GNU history library API. END-INFO-DIR-ENTRY  File: history.info, Node: Top, Next: Using History Interactively, Up: (dir) GNU History Library ******************* This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input. * Menu: * Using History Interactively:: GNU History User's Manual. * Programming with GNU History:: GNU History Programmer's Manual. * GNU Free Documentation License:: License for copying this manual. * Concept Index:: Index of concepts described in this manual. * Function and Variable Index:: Index of externally visible functions and variables.  File: history.info, Node: Using History Interactively, Next: Programming with GNU History, Prev: Top, Up: Top 1 Using History Interactively ***************************** This chapter describes how to use the GNU History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the GNU History Library in your own programs, *note Programming with GNU History::. * Menu: * History Interaction:: What it feels like using History as a user.  File: history.info, Node: History Interaction, Up: Using History Interactively 1.1 History Expansion ===================== The History library provides a history expansion feature that is similar to the history expansion provided by 'csh'. This section describes the syntax used to manipulate the history information. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the "event", and the portions of that line that are acted upon are called "words". Various "modifiers" are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is '!' by default. * Menu: * Event Designators:: How to specify which history line to use. * Word Designators:: Specifying which words are of interest. * Modifiers:: Modifying the results of substitution.  File: history.info, Node: Event Designators, Next: Word Designators, Up: History Interaction 1.1.1 Event Designators ----------------------- An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list. '!' Start a history substitution, except when followed by a space, tab, the end of the line, or '='. '!N' Refer to command line N. '!-N' Refer to the command N lines back. '!!' Refer to the previous command. This is a synonym for '!-1'. '!STRING' Refer to the most recent command preceding the current position in the history list starting with STRING. '!?STRING[?]' Refer to the most recent command preceding the current position in the history list containing STRING. The trailing '?' may be omitted if the STRING is followed immediately by a newline. '^STRING1^STRING2^' Quick Substitution. Repeat the last command, replacing STRING1 with STRING2. Equivalent to '!!:s/STRING1/STRING2/'. '!#' The entire command line typed so far.  File: history.info, Node: Word Designators, Next: Modifiers, Prev: Event Designators, Up: History Interaction 1.1.2 Word Designators ---------------------- Word designators are used to select desired words from the event. A ':' separates the event specification from the word designator. It may be omitted if the word designator begins with a '^', '$', '*', '-', or '%'. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces. For example, '!!' designates the preceding command. When you type this, the preceding command is repeated in toto. '!!:$' designates the last argument of the preceding command. This may be shortened to '!$'. '!fi:2' designates the second argument of the most recent command starting with the letters 'fi'. Here are the word designators: '0 (zero)' The '0'th word. For many applications, this is the command word. 'N' The Nth word. '^' The first argument; that is, word 1. '$' The last argument. '%' The word matched by the most recent '?STRING?' search. 'X-Y' A range of words; '-Y' abbreviates '0-Y'. '*' All of the words, except the '0'th. This is a synonym for '1-$'. It is not an error to use '*' if there is just one word in the event; the empty string is returned in that case. 'X*' Abbreviates 'X-$' 'X-' Abbreviates 'X-$' like 'X*', but omits the last word. If a word designator is supplied without an event specification, the previous command is used as the event.  File: history.info, Node: Modifiers, Prev: Word Designators, Up: History Interaction 1.1.3 Modifiers --------------- After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a ':'. 'h' Remove a trailing pathname component, leaving only the head. 't' Remove all leading pathname components, leaving the tail. 'r' Remove a trailing suffix of the form '.SUFFIX', leaving the basename. 'e' Remove all but the trailing suffix. 'p' Print the new command but do not execute it. 's/OLD/NEW/' Substitute NEW for the first occurrence of OLD in the event line. Any delimiter may be used in place of '/'. The delimiter may be quoted in OLD and NEW with a single backslash. If '&' appears in NEW, it is replaced by OLD. A single backslash will quote the '&'. The final delimiter is optional if it is the last character on the input line. '&' Repeat the previous substitution. 'g' 'a' Cause changes to be applied over the entire event line. Used in conjunction with 's', as in 'gs/OLD/NEW/', or with '&'. 'G' Apply the following 's' modifier once to each word in the event.  File: history.info, Node: Programming with GNU History, Next: GNU Free Documentation License, Prev: Using History Interactively, Up: Top 2 Programming with GNU History ****************************** This chapter describes how to interface programs that you write with the GNU History Library. It should be considered a technical guide. For information on the interactive use of GNU History, *note Using History Interactively::. * Menu: * Introduction to History:: What is the GNU History library for? * History Storage:: How information is stored. * History Functions:: Functions that you can use. * History Variables:: Variables that control behaviour. * History Programming Example:: Example of using the GNU History Library.  File: history.info, Node: Introduction to History, Next: History Storage, Up: Programming with GNU History 2.1 Introduction to History =========================== Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history "expansion" function is available which provides for a consistent user interface across different programs. The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by 'csh'. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file '' in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures.  File: history.info, Node: History Storage, Next: History Functions, Prev: Introduction to History, Up: Programming with GNU History 2.2 History Storage =================== The history list is an array of history entries. A history entry is declared as follows: typedef void *histdata_t; typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; The history list itself might therefore be declared as HIST_ENTRY **the_history_list; The state of the History library is encapsulated into a single structure: /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; If the flags member includes 'HS_STIFLED', the history has been stifled.  File: history.info, Node: History Functions, Next: History Variables, Prev: History Storage, Up: Programming with GNU History 2.3 History Functions ===================== This section describes the calling sequence for the various functions exported by the GNU History library. * Menu: * Initializing History and State Management:: Functions to call when you want to use history in a program. * History List Management:: Functions used to manage the list of history entries. * Information About the History List:: Functions returning information about the history list. * Moving Around the History List:: Functions used to change the position in the history list. * Searching the History List:: Functions to search the history list for entries containing a string. * Managing the History File:: Functions that read and write a file containing the history list. * History Expansion:: Functions to perform csh-like history expansion.  File: history.info, Node: Initializing History and State Management, Next: History List Management, Up: History Functions 2.3.1 Initializing History and State Management ----------------------------------------------- This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. -- Function: void using_history (void) Begin a session in which the history functions might be used. This initializes the interactive variables. -- Function: HISTORY_STATE * history_get_history_state (void) Return a structure describing the current state of the input history. -- Function: void history_set_history_state (HISTORY_STATE *state) Set the state of the history list according to STATE.  File: history.info, Node: History List Management, Next: Information About the History List, Prev: Initializing History and State Management, Up: History Functions 2.3.2 History List Management ----------------------------- These functions manage individual entries on the history list, or set parameters managing the list itself. -- Function: void add_history (const char *string) Place STRING at the end of the history list. The associated data field (if any) is set to 'NULL'. -- Function: void add_history_time (const char *string) Change the time stamp associated with the most recent history entry to STRING. -- Function: HIST_ENTRY * remove_history (int which) Remove history entry at offset WHICH from the history. The removed element is returned so you can free the line, data, and containing structure. -- Function: histdata_t free_history_entry (HIST_ENTRY *histent) Free the history entry HISTENT and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it. -- Function: HIST_ENTRY * replace_history_entry (int which, const char *line, histdata_t data) Make the history entry at offset WHICH have LINE and DATA. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid WHICH, a 'NULL' pointer is returned. -- Function: void clear_history (void) Clear the history list by deleting all the entries. -- Function: void stifle_history (int max) Stifle the history list, remembering only the last MAX entries. -- Function: int unstifle_history (void) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by 'stifle_history()'). The value is positive if the history was stifled, negative if it wasn't. -- Function: int history_is_stifled (void) Returns non-zero if the history is stifled, zero if it is not.  File: history.info, Node: Information About the History List, Next: Moving Around the History List, Prev: History List Management, Up: History Functions 2.3.3 Information About the History List ---------------------------------------- These functions return information about the entire history list or individual list entries. -- Function: HIST_ENTRY ** history_list (void) Return a 'NULL' terminated array of 'HIST_ENTRY *' which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return 'NULL'. -- Function: int where_history (void) Returns the offset of the current history element. -- Function: HIST_ENTRY * current_history (void) Return the history entry at the current position, as determined by 'where_history()'. If there is no entry there, return a 'NULL' pointer. -- Function: HIST_ENTRY * history_get (int offset) Return the history entry at position OFFSET, starting from 'history_base' (*note History Variables::). If there is no entry there, or if OFFSET is greater than the history length, return a 'NULL' pointer. -- Function: time_t history_get_time (HIST_ENTRY *entry) Return the time stamp associated with the history entry ENTRY. If the timestamp is missing or invalid, return 0. -- Function: int history_total_bytes (void) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history.  File: history.info, Node: Moving Around the History List, Next: Searching the History List, Prev: Information About the History List, Up: History Functions 2.3.4 Moving Around the History List ------------------------------------ These functions allow the current index into the history list to be set or changed. -- Function: int history_set_pos (int pos) Set the current history offset to POS, an absolute index into the list. Returns 1 on success, 0 if POS is less than zero or greater than the number of history entries. -- Function: HIST_ENTRY * previous_history (void) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a 'NULL' pointer. -- Function: HIST_ENTRY * next_history (void) If the current history offset refers to a valid history entry, increment the current history offset. If the possibly-incremented history offset refers to a valid history entry, return a pointer to that entry; otherwise, return a 'BNULL' pointer.  File: history.info, Node: Searching the History List, Next: Managing the History File, Prev: Moving Around the History List, Up: History Functions 2.3.5 Searching the History List -------------------------------- These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be "anchored", meaning that the string must match at the beginning of the history entry. -- Function: int history_search (const char *string, int direction) Search the history for STRING, starting at the current history offset. If DIRECTION is less than 0, then the search is through previous entries, otherwise through subsequent entries. If STRING is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where STRING was found. Otherwise, nothing is changed, and a -1 is returned. -- Function: int history_search_prefix (const char *string, int direction) Search the history for STRING, starting at the current history offset. The search is anchored: matching lines must begin with STRING. If DIRECTION is less than 0, then the search is through previous entries, otherwise through subsequent entries. If STRING is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. -- Function: int history_search_pos (const char *string, int direction, int pos) Search for STRING in the history list, starting at POS, an absolute index into the list. If DIRECTION is negative, the search proceeds backward from POS, otherwise forward. Returns the absolute index of the history element where STRING was found, or -1 otherwise.  File: history.info, Node: Managing the History File, Next: History Expansion, Prev: Searching the History List, Up: History Functions 2.3.6 Managing the History File ------------------------------- The History library can read the history from and write it to a file. This section documents the functions for managing a history file. -- Function: int read_history (const char *filename) Add the contents of FILENAME to the history list, a line at a time. If FILENAME is 'NULL', then read from '~/.history'. Returns 0 if successful, or 'errno' if not. -- Function: int read_history_range (const char *filename, int from, int to) Read a range of lines from FILENAME, adding them to the history list. Start reading at line FROM and end at TO. If FROM is zero, start at the beginning. If TO is less than FROM, then read until the end of the file. If FILENAME is 'NULL', then read from '~/.history'. Returns 0 if successful, or 'errno' if not. -- Function: int write_history (const char *filename) Write the current history to FILENAME, overwriting FILENAME if necessary. If FILENAME is 'NULL', then write the history list to '~/.history'. Returns 0 on success, or 'errno' on a read or write error. -- Function: int append_history (int nelements, const char *filename) Append the last NELEMENTS of the history list to FILENAME. If FILENAME is 'NULL', then append to '~/.history'. Returns 0 on success, or 'errno' on a read or write error. -- Function: int history_truncate_file (const char *filename, int nlines) Truncate the history file FILENAME, leaving only the last NLINES lines. If FILENAME is 'NULL', then '~/.history' is truncated. Returns 0 on success, or 'errno' on failure.  File: history.info, Node: History Expansion, Prev: Managing the History File, Up: History Functions 2.3.7 History Expansion ----------------------- These functions implement history expansion. -- Function: int history_expand (char *string, char **output) Expand STRING, placing the result into OUTPUT, a pointer to a string (*note History Interaction::). Returns: '0' If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); '1' if expansions did take place; '-1' if there was an error in expansion; '2' if the returned line should be displayed, but not executed, as with the ':p' modifier (*note Modifiers::). If an error occurred in expansion, then OUTPUT contains a descriptive error message. -- Function: char * get_history_event (const char *string, int *cindex, int qchar) Returns the text of the history event beginning at STRING + *CINDEX. *CINDEX is modified to point to after the event specifier. At function entry, CINDEX points to the index into STRING where the history event specification begins. QCHAR is a character that is allowed to end the event specification in addition to the "normal" terminating characters. -- Function: char ** history_tokenize (const char *string) Return an array of tokens parsed out of STRING, much as the shell might. The tokens are split on the characters in the HISTORY_WORD_DELIMITERS variable, and shell quoting conventions are obeyed. -- Function: char * history_arg_extract (int first, int last, const char *string) Extract a string segment consisting of the FIRST through LAST arguments present in STRING. Arguments are split using 'history_tokenize'.  File: history.info, Node: History Variables, Next: History Programming Example, Prev: History Functions, Up: Programming with GNU History 2.4 History Variables ===================== This section describes the externally-visible variables exported by the GNU History Library. -- Variable: int history_base The logical offset of the first entry in the history list. -- Variable: int history_length The number of entries currently stored in the history list. -- Variable: int history_max_entries The maximum number of history entries. This must be changed using 'stifle_history()'. -- Variable: int history_write_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved. The current timestamp format uses the value of HISTORY_COMMENT_CHAR to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. -- Variable: char history_expansion_char The character that introduces a history event. The default is '!'. Setting this to 0 inhibits history expansion. -- Variable: char history_subst_char The character that invokes word substitution if found at the start of a line. The default is '^'. -- Variable: char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. -- Variable: char * history_word_delimiters The characters that separate tokens for 'history_tokenize()'. The default value is '" \t\n()<>;&|"'. -- Variable: char * history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, TAB, ':' and '?' in the case of a substring search. The default is empty. -- Variable: char * history_no_expand_chars The list of characters which inhibit history expansion if found immediately following HISTORY_EXPANSION_CHAR. The default is space, tab, newline, carriage return, and '='. -- Variable: int history_quotes_inhibit_expansion If non-zero, double-quoted words are not scanned for the history expansion character or the history comment character. The default value is 0. -- Variable: rl_linebuf_func_t * history_inhibit_expansion_function This should be set to the address of a function that takes two arguments: a 'char *' (STRING) and an 'int' index into that string (I). It should return a non-zero value if the history expansion starting at STRING[I] should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to 'NULL'.  File: history.info, Node: History Programming Example, Prev: History Variables, Up: Programming with GNU History 2.5 History Programming Example =============================== The following program demonstrates simple use of the GNU History Library. #include #include main (argc, argv) int argc; char **argv; { char line[1024], *t; int len, done = 0; line[0] = 0; using_history (); while (!done) { printf ("history$ "); fflush (stdout); t = fgets (line, sizeof (line) - 1, stdin); if (t && *t) { len = strlen (t); if (t[len - 1] == '\n') t[len - 1] = '\0'; } if (!t) strcpy (line, "quit"); if (line[0]) { char *expansion; int result; result = history_expand (line, &expansion); if (result) fprintf (stderr, "%s\n", expansion); if (result < 0 || result == 2) { free (expansion); continue; } add_history (expansion); strncpy (line, expansion, sizeof (line) - 1); free (expansion); } if (strcmp (line, "quit") == 0) done = 1; else if (strcmp (line, "save") == 0) write_history ("history_file"); else if (strcmp (line, "read") == 0) read_history ("history_file"); else if (strcmp (line, "list") == 0) { register HIST_ENTRY **the_list; register int i; the_list = history_list (); if (the_list) for (i = 0; the_list[i]; i++) printf ("%d: %s\n", i + history_base, the_list[i]->line); } else if (strncmp (line, "delete", 6) == 0) { int which; if ((sscanf (line + 6, "%d", &which)) == 1) { HIST_ENTRY *entry = remove_history (which); if (!entry) fprintf (stderr, "No such entry %d\n", which); else { free (entry->line); free (entry); } } else { fprintf (stderr, "non-numeric arg given to `delete'\n"); } } } }  File: history.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Programming with GNU History, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful 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. 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. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. 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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. 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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. 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. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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. 4. 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: A. 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. B. 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 fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. 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. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve 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. J. 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. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. 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. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. 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. 5. 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, and that you preserve all their Warranty Disclaimers. 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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. 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. 7. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. 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 . 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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== 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: 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.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. 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.  File: history.info, Node: Concept Index, Next: Function and Variable Index, Prev: GNU Free Documentation License, Up: Top Appendix B Concept Index ************************ [index] * Menu: * anchored search: Searching the History List. (line 10) * event designators: Event Designators. (line 6) * history events: Event Designators. (line 8) * history expansion: History Interaction. (line 6) * History Searching: Searching the History List. (line 6)  File: history.info, Node: Function and Variable Index, Prev: Concept Index, Up: Top Appendix C Function and Variable Index ************************************** [index] * Menu: * add_history: History List Management. (line 9) * add_history_time: History List Management. (line 13) * append_history: Managing the History File. (line 28) * clear_history: History List Management. (line 34) * current_history: Information About the History List. (line 17) * free_history_entry: History List Management. (line 22) * get_history_event: History Expansion. (line 26) * history_arg_extract: History Expansion. (line 41) * history_base: History Variables. (line 9) * history_comment_char: History Variables. (line 37) * history_expand: History Expansion. (line 8) * history_expansion_char: History Variables. (line 29) * history_get: Information About the History List. (line 22) * history_get_history_state: Initializing History and State Management. (line 14) * history_get_time: Information About the History List. (line 28) * history_inhibit_expansion_function: History Variables. (line 62) * history_is_stifled: History List Management. (line 46) * history_length: History Variables. (line 12) * history_list: Information About the History List. (line 9) * history_max_entries: History Variables. (line 15) * history_no_expand_chars: History Variables. (line 52) * history_quotes_inhibit_expansion: History Variables. (line 57) * history_search: Searching the History List. (line 12) * history_search_delimiter_chars: History Variables. (line 47) * history_search_pos: Searching the History List. (line 31) * history_search_prefix: Searching the History List. (line 21) * history_set_history_state: Initializing History and State Management. (line 18) * history_set_pos: Moving Around the History List. (line 9) * history_subst_char: History Variables. (line 33) * history_tokenize: History Expansion. (line 35) * history_total_bytes: Information About the History List. (line 32) * history_truncate_file: Managing the History File. (line 33) * history_word_delimiters: History Variables. (line 43) * history_write_timestamps: History Variables. (line 19) * next_history: Moving Around the History List. (line 19) * previous_history: Moving Around the History List. (line 14) * read_history: Managing the History File. (line 9) * read_history_range: Managing the History File. (line 14) * remove_history: History List Management. (line 17) * replace_history_entry: History List Management. (line 27) * stifle_history: History List Management. (line 37) * unstifle_history: History List Management. (line 40) * using_history: Initializing History and State Management. (line 10) * where_history: Information About the History List. (line 14) * write_history: Managing the History File. (line 22)  Tag Table: Node: Top845 Node: Using History Interactively1490 Node: History Interaction1998 Node: Event Designators3422 Node: Word Designators4561 Node: Modifiers6198 Node: Programming with GNU History7421 Node: Introduction to History8165 Node: History Storage9855 Node: History Functions10990 Node: Initializing History and State Management11979 Node: History List Management12791 Node: Information About the History List14824 Node: Moving Around the History List16377 Node: Searching the History List17470 Node: Managing the History File19395 Node: History Expansion21215 Node: History Variables23125 Node: History Programming Example26195 Node: GNU Free Documentation License28872 Node: Concept Index54044 Node: Function and Variable Index54749  End Tag Table readline-7.0/doc/rluserman.info000664 000436 000000 00000247434 12764101656 016701 0ustar00chetwheel000000 000000 This is rluserman.info, produced by makeinfo version 6.1 from rluserman.texi. This manual describes the end user interface of the GNU Readline Library (version 7.0, 16 July 2016), a library which aids in the consistency of user interface across discrete programs which provide a command line interface. Copyright (C) 1988-2016 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Libraries START-INFO-DIR-ENTRY * RLuserman: (rluserman). The GNU readline library User's Manual. END-INFO-DIR-ENTRY  File: rluserman.info, Node: Top, Next: Command Line Editing, Up: (dir) GNU Readline Library ******************** This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is . * Menu: * Command Line Editing:: GNU Readline User's Manual. * GNU Free Documentation License:: License for copying this manual.  File: rluserman.info, Node: Command Line Editing, Next: GNU Free Documentation License, Prev: Top, Up: Top 1 Command Line Editing ********************** This chapter describes the basic features of the GNU command line editing interface. * Menu: * Introduction and Notation:: Notation used in this text. * Readline Interaction:: The minimum set of commands for editing a line. * Readline Init File:: Customizing Readline from a user's view. * Bindable Readline Commands:: A description of most of the Readline commands available for binding * Readline vi Mode:: A short description of how to make Readline behave like the vi editor.  File: rluserman.info, Node: Introduction and Notation, Next: Readline Interaction, Up: Command Line Editing 1.1 Introduction to Line Editing ================================ The following paragraphs describe the notation used to represent keystrokes. The text 'C-k' is read as 'Control-K' and describes the character produced when the key is pressed while the Control key is depressed. The text 'M-k' is read as 'Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the key is pressed. The Meta key is labeled on many keyboards. On keyboards with two keys labeled (usually to either side of the space bar), the on the left side is generally set to work as a Meta key. The key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters. If you do not have a Meta or key, or another key working as a Meta key, the identical keystroke can be generated by typing _first_, and then typing . Either process is known as "metafying" the key. The text 'M-C-k' is read as 'Meta-Control-k' and describes the character produced by "metafying" 'C-k'. In addition, several keys have their own names. Specifically, , , , , , and all stand for themselves when seen in this text, or in an init file (*note Readline Init File::). If your keyboard lacks a key, typing will produce the desired character. The key may be labeled or on some keyboards.  File: rluserman.info, Node: Readline Interaction, Next: Readline Init File, Prev: Introduction and Notation, Up: Command Line Editing 1.2 Readline Interaction ======================== Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The Readline library gives you a set of commands for manipulating the text as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with the line, you simply press . You do not have to be at the end of the line to press ; the entire line is accepted regardless of the location of the cursor within the line. * Menu: * Readline Bare Essentials:: The least you need to know about Readline. * Readline Movement Commands:: Moving about the input line. * Readline Killing Commands:: How to delete text, and how to get it back! * Readline Arguments:: Giving numeric arguments to commands. * Searching:: Searching through previous lines.  File: rluserman.info, Node: Readline Bare Essentials, Next: Readline Movement Commands, Up: Readline Interaction 1.2.1 Readline Bare Essentials ------------------------------ In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character. Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type 'C-b' to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with 'C-f'. When you add text in the middle of a line, you will notice that characters to the right of the cursor are 'pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are 'pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows. 'C-b' Move back one character. 'C-f' Move forward one character. or Delete the character to the left of the cursor. 'C-d' Delete the character underneath the cursor. Printing characters Insert the character into the line at the cursor. 'C-_' or 'C-x C-u' Undo the last editing command. You can undo all the way back to an empty line. (Depending on your configuration, the key be set to delete the character to the left of the cursor and the key set to delete the character underneath the cursor, like 'C-d', rather than the character to the left of the cursor.)  File: rluserman.info, Node: Readline Movement Commands, Next: Readline Killing Commands, Prev: Readline Bare Essentials, Up: Readline Interaction 1.2.2 Readline Movement Commands -------------------------------- The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to 'C-b', 'C-f', 'C-d', and . Here are some commands for moving more rapidly about the line. 'C-a' Move to the start of the line. 'C-e' Move to the end of the line. 'M-f' Move forward a word, where a word is composed of letters and digits. 'M-b' Move backward a word. 'C-l' Clear the screen, reprinting the current line at the top. Notice how 'C-f' moves forward a character, while 'M-f' moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.  File: rluserman.info, Node: Readline Killing Commands, Next: Readline Arguments, Prev: Readline Movement Commands, Up: Readline Interaction 1.2.3 Readline Killing Commands ------------------------------- "Killing" text means to delete the text from the line, but to save it away for later use, usually by "yanking" (re-inserting) it back into the line. ('Cut' and 'paste' are more recent jargon for 'kill' and 'yank'.) If the description for a command says that it 'kills' text, then you can be sure that you can get the text back in a different (or the same) place later. When you use a kill command, the text is saved in a "kill-ring". Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line. Here is the list of commands for killing text. 'C-k' Kill the text from the current cursor position to the end of the line. 'M-d' Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by 'M-f'. 'M-' Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by 'M-b'. 'C-w' Kill from the cursor to the previous whitespace. This is different than 'M-' because the word boundaries differ. Here is how to "yank" the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer. 'C-y' Yank the most recently killed text back into the buffer at the cursor. 'M-y' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is 'C-y' or 'M-y'.  File: rluserman.info, Node: Readline Arguments, Next: Searching, Prev: Readline Killing Commands, Up: Readline Interaction 1.2.4 Readline Arguments ------------------------ You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type 'M-- C-k'. The general way to pass numeric arguments to a command is to type meta digits before the command. If the first 'digit' typed is a minus sign ('-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the 'C-d' command an argument of 10, you could type 'M-1 0 C-d', which will delete the next ten characters on the input line.  File: rluserman.info, Node: Searching, Prev: Readline Arguments, Up: Readline Interaction 1.2.5 Searching for Commands in the History ------------------------------------------- Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: "incremental" and "non-incremental". Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type 'C-r'. Typing 'C-s' searches forward through the history. The characters present in the value of the 'isearch-terminators' variable are used to terminate an incremental search. If that variable has not been assigned a value, the and 'C-J' characters will terminate an incremental search. 'C-g' will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type 'C-r' or 'C-s' as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Readline remembers the last incremental search string. If two 'C-r's are typed without any intervening characters defining a new search string, any remembered search string is used. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.  File: rluserman.info, Node: Readline Init File, Next: Bindable Readline Commands, Prev: Readline Interaction, Up: Command Line Editing 1.3 Readline Init File ====================== Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an "inputrc" file, conventionally in his home directory. The name of this file is taken from the value of the environment variable 'INPUTRC'. If that variable is unset, the default is '~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is '/etc/inputrc'. When a program which uses the Readline library starts up, the init file is read, and the key bindings are set. In addition, the 'C-x C-r' command re-reads this init file, thus incorporating any changes that you might have made to it. * Menu: * Readline Init File Syntax:: Syntax for the commands in the inputrc file. * Conditional Init Constructs:: Conditional key bindings in the inputrc file. * Sample Init File:: An example inputrc file.  File: rluserman.info, Node: Readline Init File Syntax, Next: Conditional Init Constructs, Up: Readline Init File 1.3.1 Readline Init File Syntax ------------------------------- There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a '#' are comments. Lines beginning with a '$' indicate conditional constructs (*note Conditional Init Constructs::). Other lines denote variable settings and key bindings. Variable Settings You can modify the run-time behavior of Readline by altering the values of variables in Readline using the 'set' command within the init file. The syntax is simple: set VARIABLE VALUE Here, for example, is how to change from the default Emacs-like key binding to use 'vi' line editing commands: set editing-mode vi Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored. Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, ON (case-insensitive), or 1. Any other value results in the variable being set to off. A great deal of run-time behavior is changeable with the following variables. 'bell-style' Controls what happens when Readline wants to ring the terminal bell. If set to 'none', Readline never rings the bell. If set to 'visible', Readline uses a visible bell if one is available. If set to 'audible' (the default), Readline attempts to ring the terminal's bell. 'bind-tty-special-chars' If set to 'on' (the default), Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents. 'blink-matching-paren' If set to 'on', Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is 'off'. 'colored-completion-prefix' If set to 'on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the 'LS_COLORS' environment variable. The default is 'off'. 'colored-stats' If set to 'on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the 'LS_COLORS' environment variable. The default is 'off'. 'comment-begin' The string to insert at the beginning of the line when the 'insert-comment' command is executed. The default value is '"#"'. 'completion-display-width' The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. 'completion-ignore-case' If set to 'on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is 'off'. 'completion-map-case' If set to 'on', and COMPLETION-IGNORE-CASE is enabled, Readline treats hyphens ('-') and underscores ('_') as equivalent when performing case-insensitive filename matching and completion. 'completion-prefix-display-length' The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions. 'completion-query-items' The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than this value, Readline will ask the user whether or not he wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is '100'. 'convert-meta' If set to 'on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an character, converting them to a meta-prefixed key sequence. The default value is 'on', but will be set to 'off' if the locale is one that contains eight-bit characters. 'disable-completion' If set to 'On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to 'self-insert'. The default is 'off'. 'echo-control-characters' When set to 'on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is 'on'. 'editing-mode' The 'editing-mode' variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either 'emacs' or 'vi'. 'emacs-mode-string' This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '@'. 'enable-bracketed-paste' When set to 'On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is 'off'. 'enable-keypad' When set to 'on', Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is 'off'. 'enable-meta-key' When set to 'on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is 'on'. 'expand-tilde' If set to 'on', tilde expansion is performed when Readline attempts word completion. The default is 'off'. 'history-preserve-point' If set to 'on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with 'previous-history' or 'next-history'. The default is 'off'. 'history-size' Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set HISTORY-SIZE to a non-numeric value, the maximum number of history entries will be set to 500. 'horizontal-scroll-mode' This variable can be set to either 'on' or 'off'. Setting it to 'on' means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. By default, this variable is set to 'off'. 'input-meta' If set to 'on', Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is 'off', but Readline will set it to 'on' if the locale contains eight-bit characters. The name 'meta-flag' is a synonym for this variable. 'isearch-terminators' The string of characters that should terminate an incremental search without subsequently executing the character as a command (*note Searching::). If this variable has not been given a value, the characters and 'C-J' will terminate an incremental search. 'keymap' Sets Readline's idea of the current keymap for key binding commands. Acceptable 'keymap' names are 'emacs', 'emacs-standard', 'emacs-meta', 'emacs-ctlx', 'vi', 'vi-move', 'vi-command', and 'vi-insert'. 'vi' is equivalent to 'vi-command' ('vi-move' is also a synonym); 'emacs' is equivalent to 'emacs-standard'. The default value is 'emacs'. The value of the 'editing-mode' variable also affects the default keymap. 'keyseq-timeout' Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source ('rl_instream' by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is '500'. 'mark-directories' If set to 'on', completed directory names have a slash appended. The default is 'on'. 'mark-modified-lines' This variable, when set to 'on', causes Readline to display an asterisk ('*') at the start of history lines which have been modified. This variable is 'off' by default. 'mark-symlinked-directories' If set to 'on', completed names which are symbolic links to directories have a slash appended (subject to the value of 'mark-directories'). The default is 'off'. 'match-hidden-files' This variable, when set to 'on', causes Readline to match files whose names begin with a '.' (hidden files) when performing filename completion. If set to 'off', the leading '.' must be supplied by the user in the filename to be completed. This variable is 'on' by default. 'menu-complete-display-prefix' If set to 'on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is 'off'. 'output-meta' If set to 'on', Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is 'off', but Readline will set it to 'on' if the locale contains eight-bit characters. 'page-completions' If set to 'on', Readline uses an internal 'more'-like pager to display a screenful of possible completions at a time. This variable is 'on' by default. 'print-completions-horizontally' If set to 'on', Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is 'off'. 'revert-all-at-newline' If set to 'on', Readline will undo all changes to history lines before returning when 'accept-line' is executed. By default, history lines may be modified and retain individual undo lists across calls to 'readline'. The default is 'off'. 'show-all-if-ambiguous' This alters the default behavior of the completion functions. If set to 'on', words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is 'off'. 'show-all-if-unmodified' This alters the default behavior of the completion functions in a fashion similar to SHOW-ALL-IF-AMBIGUOUS. If set to 'on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is 'off'. 'show-mode-in-prompt' If set to 'on', add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. The default value is 'off'. 'skip-completed-text' If set to 'on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the 'e' in 'Makefile' will result in 'Makefile' rather than 'Makefilefile', assuming there is a single possible completion. The default value is 'off'. 'vi-cmd-mode-string' This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '(cmd)'. 'vi-ins-mode-string' This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the '\1' and '\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is '(ins)'. 'visible-stats' If set to 'on', a character denoting a file's type is appended to the filename when listing possible completions. The default is 'off'. Key Bindings The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command name, the default keybinding, if any, and a short description of what the command does. Once you know the name of the command, simply place on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon - that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a MACRO). KEYNAME: FUNCTION-NAME or MACRO KEYNAME is the name of a key spelled out in English. For example: Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" In the above example, 'C-u' is bound to the function 'universal-argument', 'M-DEL' is bound to the function 'backward-kill-word', and 'C-o' is bound to run the macro expressed on the right hand side (that is, to insert the text '> output' into the line). A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. "KEYSEQ": FUNCTION-NAME or MACRO KEYSEQ differs from KEYNAME above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the special character names are not recognized. "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" In the above example, 'C-u' is again bound to the function 'universal-argument' (just as it was in the first example), ''C-x' 'C-r'' is bound to the function 're-read-init-file', and ' <[> <1> <1> <~>' is bound to insert the text 'Function Key 1'. The following GNU Emacs style escape sequences are available when specifying key sequences: '\C-' control prefix '\M-' meta prefix '\e' an escape character '\\' backslash '\"' <">, a double quotation mark '\'' <'>, a single quote or apostrophe In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: '\a' alert (bell) '\b' backspace '\d' delete '\f' form feed '\n' newline '\r' carriage return '\t' horizontal tab '\v' vertical tab '\NNN' the eight-bit character whose value is the octal value NNN (one to three digits) '\xHH' the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including '"' and '''. For example, the following binding will make ''C-x' \' insert a single '\' into the line: "\C-x\\": "\\"  File: rluserman.info, Node: Conditional Init Constructs, Next: Sample Init File, Prev: Readline Init File Syntax, Up: Readline Init File 1.3.2 Conditional Init Constructs --------------------------------- Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. '$if' The '$if' construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test extends to the end of the line; no characters are required to isolate it. 'mode' The 'mode=' form of the '$if' directive is used to test whether Readline is in 'emacs' or 'vi' mode. This may be used in conjunction with the 'set keymap' command, for instance, to set bindings in the 'emacs-standard' and 'emacs-ctlx' keymaps only if Readline is starting out in 'emacs' mode. 'term' The 'term=' form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the '=' is tested against both the full name of the terminal and the portion of the terminal name before the first '-'. This allows 'sun' to match both 'sun' and 'sun-cmd', for instance. 'application' The APPLICATION construct is used to include application-specific settings. Each program using the Readline library sets the APPLICATION NAME, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash: $if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif '$endif' This command, as seen in the previous example, terminates an '$if' command. '$else' Commands in this branch of the '$if' directive are executed if the test fails. '$include' This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from '/etc/inputrc': $include /etc/inputrc  File: rluserman.info, Node: Sample Init File, Prev: Conditional Init Constructs, Up: Readline Init File 1.3.3 Sample Init File ---------------------- Here is an example of an INPUTRC file. This illustrates key binding, variable assignment, and conditional syntax. # This file controls the behaviour of line input editing for # programs that use the GNU Readline library. Existing # programs include FTP, Bash, and GDB. # # You can re-read the inputrc file with C-x C-r. # Lines beginning with '#' are comments. # # First, include any system-wide bindings and variable # assignments from /etc/Inputrc $include /etc/Inputrc # # Set various bindings for emacs mode. set editing-mode emacs $if mode=emacs Meta-Control-h: backward-kill-word Text after the function name is ignored # # Arrow keys in keypad mode # #"\M-OD": backward-char #"\M-OC": forward-char #"\M-OA": previous-history #"\M-OB": next-history # # Arrow keys in ANSI mode # "\M-[D": backward-char "\M-[C": forward-char "\M-[A": previous-history "\M-[B": next-history # # Arrow keys in 8 bit keypad mode # #"\M-\C-OD": backward-char #"\M-\C-OC": forward-char #"\M-\C-OA": previous-history #"\M-\C-OB": next-history # # Arrow keys in 8 bit ANSI mode # #"\M-\C-[D": backward-char #"\M-\C-[C": forward-char #"\M-\C-[A": previous-history #"\M-\C-[B": next-history C-q: quoted-insert $endif # An old-style binding. This happens to be the default. TAB: complete # Macros that are convenient for shell interaction $if Bash # edit the path "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f" # prepare to type a quoted word -- # insert open and close double quotes # and move to just after the open quote "\C-x\"": "\"\"\C-b" # insert a backslash (testing backslash escapes # in sequences and macros) "\C-x\\": "\\" # Quote the current or previous word "\C-xq": "\eb\"\ef\"" # Add a binding to refresh the line, which is unbound "\C-xr": redraw-current-line # Edit variable on current line. "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y=" $endif # use a visible bell if one is available set bell-style visible # don't strip characters to 7 bits when reading set input-meta on # allow iso-latin1 characters to be inserted rather # than converted to prefix-meta sequences set convert-meta off # display characters with the eighth bit set directly # rather than as meta-prefixed characters set output-meta on # if there are more than 150 possible completions for # a word, ask the user if he wants to see all of them set completion-query-items 150 # For FTP $if Ftp "\C-xg": "get \M-?" "\C-xt": "put \M-?" "\M-.": yank-last-arg $endif  File: rluserman.info, Node: Bindable Readline Commands, Next: Readline vi Mode, Prev: Readline Init File, Up: Command Line Editing 1.4 Bindable Readline Commands ============================== * Menu: * Commands For Moving:: Moving about the line. * Commands For History:: Getting at previous lines. * Commands For Text:: Commands for changing text. * Commands For Killing:: Commands for killing and yanking. * Numeric Arguments:: Specifying numeric arguments, repeat counts. * Commands For Completion:: Getting Readline to do the typing for you. * Keyboard Macros:: Saving and re-executing typed characters * Miscellaneous Commands:: Other miscellaneous commands. This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default. In the following descriptions, "point" refers to the current cursor position, and "mark" refers to a cursor position saved by the 'set-mark' command. The text between the point and mark is referred to as the "region".  File: rluserman.info, Node: Commands For Moving, Next: Commands For History, Up: Bindable Readline Commands 1.4.1 Commands For Moving ------------------------- 'beginning-of-line (C-a)' Move to the start of the current line. 'end-of-line (C-e)' Move to the end of the line. 'forward-char (C-f)' Move forward a character. 'backward-char (C-b)' Move back a character. 'forward-word (M-f)' Move forward to the end of the next word. Words are composed of letters and digits. 'backward-word (M-b)' Move back to the start of the current or previous word. Words are composed of letters and digits. 'clear-screen (C-l)' Clear the screen and redraw the current line, leaving the current line at the top of the screen. 'redraw-current-line ()' Refresh the current line. By default, this is unbound.  File: rluserman.info, Node: Commands For History, Next: Commands For Text, Prev: Commands For Moving, Up: Bindable Readline Commands 1.4.2 Commands For Manipulating The History ------------------------------------------- 'accept-line (Newline or Return)' Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with 'add_history()'. If this line is a modified history line, the history line is restored to its original state. 'previous-history (C-p)' Move 'back' through the history list, fetching the previous command. 'next-history (C-n)' Move 'forward' through the history list, fetching the next command. 'beginning-of-history (M-<)' Move to the first line in the history. 'end-of-history (M->)' Move to the end of the input history, i.e., the line currently being entered. 'reverse-search-history (C-r)' Search backward starting at the current line and moving 'up' through the history as necessary. This is an incremental search. 'forward-search-history (C-s)' Search forward starting at the current line and moving 'down' through the history as necessary. This is an incremental search. 'non-incremental-reverse-search-history (M-p)' Search backward starting at the current line and moving 'up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. 'non-incremental-forward-search-history (M-n)' Search forward starting at the current line and moving 'down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line. 'history-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. 'history-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound. 'history-substr-search-forward ()' Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. 'history-substr-search-backward ()' Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound. 'yank-nth-arg (M-C-y)' Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument N, insert the Nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the Nth word from the end of the previous command. Once the argument N is computed, the argument is extracted as if the '!N' history expansion had been specified. 'yank-last-arg (M-. or M-_)' Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like 'yank-nth-arg'. Successive calls to 'yank-last-arg' move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the '!$' history expansion had been specified.  File: rluserman.info, Node: Commands For Text, Next: Commands For Killing, Prev: Commands For History, Up: Bindable Readline Commands 1.4.3 Commands For Changing Text -------------------------------- 'end-of-file (usually C-d)' The character indicating end-of-file as set, for example, by 'stty'. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. 'delete-char (C-d)' Delete the character at point. If this function is bound to the same character as the tty EOF character, as 'C-d' commonly is, see above for the effects. 'backward-delete-char (Rubout)' Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them. 'forward-backward-delete-char ()' Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key. 'quoted-insert (C-q or C-v)' Add the next character typed to the line verbatim. This is how to insert key sequences like 'C-q', for example. 'tab-insert (M-)' Insert a tab character. 'self-insert (a, b, A, 1, !, ...)' Insert yourself. 'bracketed-paste-begin ()' This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one was bound to 'self-insert') instead of executing any editing commands. 'transpose-chars (C-t)' Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect. 'transpose-words (M-t)' Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line. 'upcase-word (M-u)' Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor. 'downcase-word (M-l)' Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor. 'capitalize-word (M-c)' Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor. 'overwrite-mode ()' Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only 'emacs' mode; 'vi' mode does overwrite differently. Each call to 'readline()' starts in insert mode. In overwrite mode, characters bound to 'self-insert' replace the text at point rather than pushing the text to the right. Characters bound to 'backward-delete-char' replace the character before point with a space. By default, this command is unbound.  File: rluserman.info, Node: Commands For Killing, Next: Numeric Arguments, Prev: Commands For Text, Up: Bindable Readline Commands 1.4.4 Killing And Yanking ------------------------- 'kill-line (C-k)' Kill the text from point to the end of the line. 'backward-kill-line (C-x Rubout)' Kill backward from the cursor to the beginning of the current line. 'unix-line-discard (C-u)' Kill backward from the cursor to the beginning of the current line. 'kill-whole-line ()' Kill all characters on the current line, no matter where point is. By default, this is unbound. 'kill-word (M-d)' Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as 'forward-word'. 'backward-kill-word (M-)' Kill the word behind point. Word boundaries are the same as 'backward-word'. 'unix-word-rubout (C-w)' Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring. 'unix-filename-rubout ()' Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. 'delete-horizontal-space ()' Delete all spaces and tabs around point. By default, this is unbound. 'kill-region ()' Kill the text in the current region. By default, this command is unbound. 'copy-region-as-kill ()' Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound. 'copy-backward-word ()' Copy the word before point to the kill buffer. The word boundaries are the same as 'backward-word'. By default, this command is unbound. 'copy-forward-word ()' Copy the word following point to the kill buffer. The word boundaries are the same as 'forward-word'. By default, this command is unbound. 'yank (C-y)' Yank the top of the kill ring into the buffer at point. 'yank-pop (M-y)' Rotate the kill-ring, and yank the new top. You can only do this if the prior command is 'yank' or 'yank-pop'.  File: rluserman.info, Node: Numeric Arguments, Next: Commands For Completion, Prev: Commands For Killing, Up: Bindable Readline Commands 1.4.5 Specifying Numeric Arguments ---------------------------------- 'digit-argument (M-0, M-1, ... M--)' Add this digit to the argument already accumulating, or start a new argument. 'M--' starts a negative argument. 'universal-argument ()' This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing 'universal-argument' again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. By default, this is not bound to a key.  File: rluserman.info, Node: Commands For Completion, Next: Keyboard Macros, Prev: Numeric Arguments, Up: Bindable Readline Commands 1.4.6 Letting Readline Type For You ----------------------------------- 'complete ()' Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion. 'possible-completions (M-?)' List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of 'completion-display-width', the value of the environment variable 'COLUMNS', or the screen width, in that order. 'insert-completions (M-*)' Insert all completions of the text before point that would have been generated by 'possible-completions'. 'menu-complete ()' Similar to 'complete', but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of 'menu-complete' steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of 'bell-style') and the original text is restored. An argument of N moves N positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to , but is unbound by default. 'menu-complete-backward ()' Identical to 'menu-complete', but moves backward through the list of possible completions, as if 'menu-complete' had been given a negative argument. 'delete-char-or-list ()' Deletes the character under the cursor if not at the beginning or end of the line (like 'delete-char'). If at the end of the line, behaves identically to 'possible-completions'. This command is unbound by default.  File: rluserman.info, Node: Keyboard Macros, Next: Miscellaneous Commands, Prev: Commands For Completion, Up: Bindable Readline Commands 1.4.7 Keyboard Macros --------------------- 'start-kbd-macro (C-x ()' Begin saving the characters typed into the current keyboard macro. 'end-kbd-macro (C-x ))' Stop saving the characters typed into the current keyboard macro and save the definition. 'call-last-kbd-macro (C-x e)' Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard. 'print-last-kbd-macro ()' Print the last keboard macro defined in a format suitable for the INPUTRC file.  File: rluserman.info, Node: Miscellaneous Commands, Prev: Keyboard Macros, Up: Bindable Readline Commands 1.4.8 Some Miscellaneous Commands --------------------------------- 're-read-init-file (C-x C-r)' Read in the contents of the INPUTRC file, and incorporate any bindings or variable assignments found there. 'abort (C-g)' Abort the current editing command and ring the terminal's bell (subject to the setting of 'bell-style'). 'do-uppercase-version (M-a, M-b, M-X, ...)' If the metafied character X is lowercase, run the command that is bound to the corresponding uppercase character. 'prefix-meta ()' Metafy the next character typed. This is for keyboards without a meta key. Typing ' f' is equivalent to typing 'M-f'. 'undo (C-_ or C-x C-u)' Incremental undo, separately remembered for each line. 'revert-line (M-r)' Undo all changes made to this line. This is like executing the 'undo' command enough times to get back to the beginning. 'tilde-expand (M-~)' Perform tilde expansion on the current word. 'set-mark (C-@)' Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. 'exchange-point-and-mark (C-x C-x)' Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. 'character-search (C-])' A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences. 'character-search-backward (M-C-])' A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences. 'skip-csi-sequence ()' Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. 'insert-comment (M-#)' Without a numeric argument, the value of the 'comment-begin' variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of 'comment-begin', the value is inserted, otherwise the characters in 'comment-begin' are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed. 'dump-functions ()' Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'dump-variables ()' Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'dump-macros ()' Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an INPUTRC file. This command is unbound by default. 'emacs-editing-mode (C-e)' When in 'vi' command mode, this causes a switch to 'emacs' editing mode. 'vi-editing-mode (M-C-j)' When in 'emacs' editing mode, this causes a switch to 'vi' editing mode.  File: rluserman.info, Node: Readline vi Mode, Prev: Bindable Readline Commands, Up: Command Line Editing 1.5 Readline vi Mode ==================== While the Readline library does not have a full set of 'vi' editing functions, it does contain enough to allow simple editing of the line. The Readline 'vi' mode behaves as specified in the POSIX standard. In order to switch interactively between 'emacs' and 'vi' editing modes, use the command 'M-C-j' (bound to emacs-editing-mode when in 'vi' mode and to vi-editing-mode in 'emacs' mode). The Readline default is 'emacs' mode. When you enter a line in 'vi' mode, you are already placed in 'insertion' mode, as if you had typed an 'i'. Pressing switches you into 'command' mode, where you can edit the text of the line with the standard 'vi' movement keys, move to previous history lines with 'k' and subsequent lines with 'j', and so forth.  File: rluserman.info, Node: GNU Free Documentation License, Prev: Command Line Editing, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful 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. 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. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. 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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. 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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. 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. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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. 4. 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: A. 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. B. 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 fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. 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. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve 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. J. 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. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. 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. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. 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. 5. 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, and that you preserve all their Warranty Disclaimers. 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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. 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. 7. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. 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 . 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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== 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: 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.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. 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.  Tag Table: Node: Top904 Node: Command Line Editing1426 Node: Introduction and Notation2080 Node: Readline Interaction3705 Node: Readline Bare Essentials4898 Node: Readline Movement Commands6683 Node: Readline Killing Commands7645 Node: Readline Arguments9565 Node: Searching10611 Node: Readline Init File12765 Node: Readline Init File Syntax13920 Node: Conditional Init Constructs33828 Node: Sample Init File36355 Node: Bindable Readline Commands39474 Node: Commands For Moving40530 Node: Commands For History41392 Node: Commands For Text45652 Node: Commands For Killing49096 Node: Numeric Arguments51264 Node: Commands For Completion52405 Node: Keyboard Macros54375 Node: Miscellaneous Commands55064 Node: Readline vi Mode58916 Node: GNU Free Documentation License59830  End Tag Table readline-7.0/doc/readline.html000664 000436 000000 00001305126 12764101652 016453 0ustar00chetwheel000000 000000 GNU Readline Library:
    ' . &t2h_anchor('', $href, $entry) . '  ' . $descr . "
    ' . $entry . '' . $descr . "
    [Top] [Contents] [Index] [ ? ]

    GNU Readline Library

    This document describes the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is http://www.gnu.org/software/readline/.

    1. Command Line Editing  GNU Readline User's Manual.
    2. Programming with GNU Readline  GNU Readline Programmer's Manual.
    A. GNU Free Documentation License  License for copying this manual.
    Concept Index  Index of concepts described in this manual.
    Function and Variable Index  Index of externally visible functions and variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Command Line Editing

    This chapter describes the basic features of the GNU command line editing interface.

    1.1 Introduction to Line Editing  Notation used in this text.
    1.2 Readline Interaction  The minimum set of commands for editing a line.
    1.3 Readline Init File  Customizing Readline from a user's view.
    1.4 Bindable Readline Commands  A description of most of the Readline commands available for binding
    1.5 Readline vi Mode  A short description of how to make Readline behave like the vi editor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Introduction to Line Editing

    The following paragraphs describe the notation used to represent keystrokes.

    The text C-k is read as `Control-K' and describes the character produced when the k key is pressed while the Control key is depressed.

    The text M-k is read as `Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the k key is pressed. The Meta key is labeled ALT on many keyboards. On keyboards with two keys labeled ALT (usually to either side of the space bar), the ALT on the left side is generally set to work as a Meta key. The ALT key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters.

    If you do not have a Meta or ALT key, or another key working as a Meta key, the identical keystroke can be generated by typing ESC first, and then typing k. Either process is known as metafying the k key.

    The text M-C-k is read as `Meta-Control-k' and describes the character produced by metafying C-k.

    In addition, several keys have their own names. Specifically, DEL, ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this text, or in an init file (see section 1.3 Readline Init File). If your keyboard lacks a LFD key, typing C-j will produce the desired character. The RET key may be labeled Return or Enter on some keyboards.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Readline Interaction

    Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The Readline library gives you a set of commands for manipulating the text as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with the line, you simply press RET. You do not have to be at the end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    1.2.1 Readline Bare Essentials  The least you need to know about Readline.
    1.2.2 Readline Movement Commands  Moving about the input line.
    1.2.3 Readline Killing Commands  How to delete text, and how to get it back!
    1.2.4 Readline Arguments  Giving numeric arguments to commands.
    1.2.5 Searching for Commands in the History  Searching through previous lines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.1 Readline Bare Essentials

    In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character.

    Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type C-b to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with C-f.

    When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    C-b
    Move back one character.
    C-f
    Move forward one character.
    DEL or Backspace
    Delete the character to the left of the cursor.
    C-d
    Delete the character underneath the cursor.
    Printing characters
    Insert the character into the line at the cursor.
    C-_ or C-x C-u
    Undo the last editing command. You can undo all the way back to an empty line.

    (Depending on your configuration, the Backspace key be set to delete the character to the left of the cursor and the DEL key set to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.2 Readline Movement Commands

    The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to C-b, C-f, C-d, and DEL. Here are some commands for moving more rapidly about the line.

    C-a
    Move to the start of the line.
    C-e
    Move to the end of the line.
    M-f
    Move forward a word, where a word is composed of letters and digits.
    M-b
    Move backward a word.
    C-l
    Clear the screen, reprinting the current line at the top.

    Notice how C-f moves forward a character, while M-f moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.3 Readline Killing Commands

    Killing text means to delete the text from the line, but to save it away for later use, usually by yanking (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)

    If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later.

    When you use a kill command, the text is saved in a kill-ring. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line.

    Here is the list of commands for killing text.

    C-k
    Kill the text from the current cursor position to the end of the line.

    M-d
    Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by M-f.

    M-DEL
    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    C-w
    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    Here is how to yank the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer.

    C-y
    Yank the most recently killed text back into the buffer at the cursor.

    M-y
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.4 Readline Arguments

    You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'.

    The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the C-d command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.5 Searching for Commands in the History

    Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: incremental and non-incremental.

    Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type C-r. Typing C-s searches forward through the history. The characters present in the value of the isearch-terminators variable are used to terminate an incremental search. If that variable has not been assigned a value, the ESC and C-J characters will terminate an incremental search. C-g will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line.

    To find other matching entries in the history list, type C-r or C-s as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a RET will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing.

    Readline remembers the last incremental search string. If two C-rs are typed without any intervening characters defining a new search string, any remembered search string is used.

    Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Readline Init File

    Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an inputrc file, conventionally in his home directory. The name of this file is taken from the value of the environment variable INPUTRC. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    1.3.1 Readline Init File Syntax  Syntax for the commands in the inputrc file.

    1.3.2 Conditional Init Constructs  Conditional key bindings in the inputrc file.

    1.3.3 Sample Init File  An example inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.1 Readline Init File Syntax

    There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a `#' are comments. Lines beginning with a `$' indicate conditional constructs (see section 1.3.2 Conditional Init Constructs). Other lines denote variable settings and key bindings.

    Variable Settings
    You can modify the run-time behavior of Readline by altering the values of variables in Readline using the set command within the init file. The syntax is simple:

     
    set variable value
    

    Here, for example, is how to change from the default Emacs-like key binding to use vi line editing commands:

     
    set editing-mode vi
    

    Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored.

    Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    A great deal of run-time behavior is changeable with the following variables.

    bell-style
    Controls what happens when Readline wants to ring the terminal bell. If set to `none', Readline never rings the bell. If set to `visible', Readline uses a visible bell if one is available. If set to `audible' (the default), Readline attempts to ring the terminal's bell.

    bind-tty-special-chars
    If set to `on' (the default), Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents.

    blink-matching-paren
    If set to `on', Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is `off'.

    colored-completion-prefix
    If set to `on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    colored-stats
    If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    comment-begin
    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    completion-display-width
    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1.

    completion-ignore-case
    If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'.

    completion-map-case
    If set to `on', and completion-ignore-case is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion.

    completion-prefix-display-length
    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    completion-query-items
    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than this value, Readline will ask the user whether or not he wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is 100.

    convert-meta
    If set to `on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an ESC character, converting them to a meta-prefixed key sequence. The default value is `on', but will be set to `off' if the locale is one that contains eight-bit characters.

    disable-completion
    If set to `On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to self-insert. The default is `off'.

    echo-control-characters
    When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'.

    editing-mode
    The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either `emacs' or `vi'.

    emacs-mode-string
    This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `@'.

    enable-bracketed-paste
    When set to `On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is `off'.

    enable-keypad
    When set to `on', Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is `off'.

    enable-meta-key
    When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'.

    expand-tilde
    If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'.

    history-preserve-point
    If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is `off'.

    history-size
    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set history-size to a non-numeric value, the maximum number of history entries will be set to 500.

    horizontal-scroll-mode
    This variable can be set to either `on' or `off'. Setting it to `on' means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. By default, this variable is set to `off'.

    input-meta
    If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is `off', but Readline will set it to `on' if the locale contains eight-bit characters. The name meta-flag is a synonym for this variable.

    isearch-terminators
    The string of characters that should terminate an incremental search without subsequently executing the character as a command (see section 1.2.5 Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    keymap
    Sets Readline's idea of the current keymap for key binding commands. Acceptable keymap names are emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, and vi-insert. vi is equivalent to vi-command (vi-move is also a synonym); emacs is equivalent to emacs-standard. The default value is emacs. The value of the editing-mode variable also affects the default keymap.

    keyseq-timeout
    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (rl_instream by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is 500.

    mark-directories
    If set to `on', completed directory names have a slash appended. The default is `on'.

    mark-modified-lines
    This variable, when set to `on', causes Readline to display an asterisk (`*') at the start of history lines which have been modified. This variable is `off' by default.

    mark-symlinked-directories
    If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is `off'.

    match-hidden-files
    This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default.

    menu-complete-display-prefix
    If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'.

    output-meta
    If set to `on', Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is `off', but Readline will set it to `on' if the locale contains eight-bit characters.

    page-completions
    If set to `on', Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is `on' by default.

    print-completions-horizontally
    If set to `on', Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is `off'.

    revert-all-at-newline
    If set to `on', Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. The default is `off'.

    show-all-if-ambiguous
    This alters the default behavior of the completion functions. If set to `on', words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-all-if-unmodified
    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-mode-in-prompt
    If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. The default value is `off'.

    skip-completed-text
    If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. The default value is `off'.

    vi-cmd-mode-string
    This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `(cmd)'.

    vi-ins-mode-string
    This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `(ins)'.

    visible-stats
    If set to `on', a character denoting a file's type is appended to the filename when listing possible completions. The default is `off'.

    Key Bindings
    The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command name, the default keybinding, if any, and a short description of what the command does.

    Once you know the name of the command, simply place on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable.

    In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a macro).

    keyname: function-name or macro
    keyname is the name of a key spelled out in English. For example:
     
    Control-u: universal-argument
    Meta-Rubout: backward-kill-word
    Control-o: "> output"
    

    In the above example, C-u is bound to the function universal-argument, M-DEL is bound to the function backward-kill-word, and C-o is bound to run the macro expressed on the right hand side (that is, to insert the text `> output' into the line).

    A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.

    "keyseq": function-name or macro
    keyseq differs from keyname above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the special character names are not recognized.

     
    "\C-u": universal-argument
    "\C-x\C-r": re-read-init-file
    "\e[11~": "Function Key 1"
    

    In the above example, C-u is again bound to the function universal-argument (just as it was in the first example), `C-x C-r' is bound to the function re-read-init-file, and `ESC [ 1 1 ~' is bound to insert the text `Function Key 1'.

    The following GNU Emacs style escape sequences are available when specifying key sequences:

    \C-
    control prefix
    \M-
    meta prefix
    \e
    an escape character
    \\
    backslash
    \"
    ", a double quotation mark
    \'
    ', a single quote or apostrophe

    In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available:

    \a
    alert (bell)
    \b
    backspace
    \d
    delete
    \f
    form feed
    \n
    newline
    \r
    carriage return
    \t
    horizontal tab
    \v
    vertical tab
    \nnn
    the eight-bit character whose value is the octal value nnn (one to three digits)
    \xHH
    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including `"' and `''. For example, the following binding will make `C-x \' insert a single `\' into the line:
     
    "\C-x\\": "\\"
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.2 Conditional Init Constructs

    Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used.

    $if
    The $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test extends to the end of the line; no characters are required to isolate it.

    mode
    The mode= form of the $if directive is used to test whether Readline is in emacs or vi mode. This may be used in conjunction with the `set keymap' command, for instance, to set bindings in the emacs-standard and emacs-ctlx keymaps only if Readline is starting out in emacs mode.

    term
    The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the `=' is tested against both the full name of the terminal and the portion of the terminal name before the first `-'. This allows sun to match both sun and sun-cmd, for instance.

    application
    The application construct is used to include application-specific settings. Each program using the Readline library sets the application name, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash:
     
    $if Bash
    # Quote the current or previous word
    "\C-xq": "\eb\"\ef\""
    $endif
    

    $endif
    This command, as seen in the previous example, terminates an $if command.

    $else
    Commands in this branch of the $if directive are executed if the test fails.

    $include
    This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from `/etc/inputrc':
     
    $include /etc/inputrc
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.3 Sample Init File

    Here is an example of an inputrc file. This illustrates key binding, variable assignment, and conditional syntax.

     
    # This file controls the behaviour of line input editing for
    # programs that use the GNU Readline library.  Existing
    # programs include FTP, Bash, and GDB.
    #
    # You can re-read the inputrc file with C-x C-r.
    # Lines beginning with '#' are comments.
    #
    # First, include any system-wide bindings and variable
    # assignments from /etc/Inputrc
    $include /etc/Inputrc
    
    #
    # Set various bindings for emacs mode.
    
    set editing-mode emacs 
    
    $if mode=emacs
    
    Meta-Control-h:	backward-kill-word	Text after the function name is ignored
    
    #
    # Arrow keys in keypad mode
    #
    #"\M-OD":        backward-char
    #"\M-OC":        forward-char
    #"\M-OA":        previous-history
    #"\M-OB":        next-history
    #
    # Arrow keys in ANSI mode
    #
    "\M-[D":        backward-char
    "\M-[C":        forward-char
    "\M-[A":        previous-history
    "\M-[B":        next-history
    #
    # Arrow keys in 8 bit keypad mode
    #
    #"\M-\C-OD":       backward-char
    #"\M-\C-OC":       forward-char
    #"\M-\C-OA":       previous-history
    #"\M-\C-OB":       next-history
    #
    # Arrow keys in 8 bit ANSI mode
    #
    #"\M-\C-[D":       backward-char
    #"\M-\C-[C":       forward-char
    #"\M-\C-[A":       previous-history
    #"\M-\C-[B":       next-history
    
    C-q: quoted-insert
    
    $endif
    
    # An old-style binding.  This happens to be the default.
    TAB: complete
    
    # Macros that are convenient for shell interaction
    $if Bash
    # edit the path
    "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
    # prepare to type a quoted word --
    # insert open and close double quotes
    # and move to just after the open quote
    "\C-x\"": "\"\"\C-b"
    # insert a backslash (testing backslash escapes
    # in sequences and macros)
    "\C-x\\": "\\"
    # Quote the current or previous word
    "\C-xq": "\eb\"\ef\""
    # Add a binding to refresh the line, which is unbound
    "\C-xr": redraw-current-line
    # Edit variable on current line.
    "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
    $endif
    
    # use a visible bell if one is available
    set bell-style visible
    
    # don't strip characters to 7 bits when reading
    set input-meta on
    
    # allow iso-latin1 characters to be inserted rather
    # than converted to prefix-meta sequences
    set convert-meta off
    
    # display characters with the eighth bit set directly
    # rather than as meta-prefixed characters
    set output-meta on
    
    # if there are more than 150 possible completions for
    # a word, ask the user if he wants to see all of them
    set completion-query-items 150
    
    # For FTP
    $if Ftp
    "\C-xg": "get \M-?"
    "\C-xt": "put \M-?"
    "\M-.": yank-last-arg
    $endif
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 Bindable Readline Commands

    1.4.1 Commands For Moving  Moving about the line.
    1.4.2 Commands For Manipulating The History  Getting at previous lines.
    1.4.3 Commands For Changing Text  Commands for changing text.
    1.4.4 Killing And Yanking  Commands for killing and yanking.
    1.4.5 Specifying Numeric Arguments  Specifying numeric arguments, repeat counts.
    1.4.6 Letting Readline Type For You  Getting Readline to do the typing for you.
    1.4.7 Keyboard Macros  Saving and re-executing typed characters
    1.4.8 Some Miscellaneous Commands  Other miscellaneous commands.

    This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.1 Commands For Moving

    beginning-of-line (C-a)
    Move to the start of the current line.

    end-of-line (C-e)
    Move to the end of the line.

    forward-char (C-f)
    Move forward a character.

    backward-char (C-b)
    Move back a character.

    forward-word (M-f)
    Move forward to the end of the next word. Words are composed of letters and digits.

    backward-word (M-b)
    Move back to the start of the current or previous word. Words are composed of letters and digits.

    clear-screen (C-l)
    Clear the screen and redraw the current line, leaving the current line at the top of the screen.

    redraw-current-line ()
    Refresh the current line. By default, this is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.2 Commands For Manipulating The History

    accept-line (Newline or Return)
    Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with add_history(). If this line is a modified history line, the history line is restored to its original state.

    previous-history (C-p)
    Move `back' through the history list, fetching the previous command.

    next-history (C-n)
    Move `forward' through the history list, fetching the next command.

    beginning-of-history (M-<)
    Move to the first line in the history.

    end-of-history (M->)
    Move to the end of the input history, i.e., the line currently being entered.

    reverse-search-history (C-r)
    Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search.

    forward-search-history (C-s)
    Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search.

    non-incremental-reverse-search-history (M-p)
    Search backward starting at the current line and moving `up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    non-incremental-forward-search-history (M-n)
    Search forward starting at the current line and moving `down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    history-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    yank-nth-arg (M-C-y)
    Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the `!n' history expansion had been specified.

    yank-last-arg (M-. or M-_)
    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.3 Commands For Changing Text

    end-of-file (usually C-d)
    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    delete-char (C-d)
    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    backward-delete-char (Rubout)
    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    forward-backward-delete-char ()
    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    quoted-insert (C-q or C-v)
    Add the next character typed to the line verbatim. This is how to insert key sequences like C-q, for example.

    tab-insert (M-TAB)
    Insert a tab character.

    self-insert (a, b, A, 1, !, ...)
    Insert yourself.

    bracketed-paste-begin ()
    This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one was bound to self-insert) instead of executing any editing commands.

    transpose-chars (C-t)
    Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect.

    transpose-words (M-t)
    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    upcase-word (M-u)
    Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor.

    downcase-word (M-l)
    Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor.

    capitalize-word (M-c)
    Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor.

    overwrite-mode ()
    Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode.

    In overwrite mode, characters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to backward-delete-char replace the character before point with a space.

    By default, this command is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.4 Killing And Yanking

    kill-line (C-k)
    Kill the text from point to the end of the line.

    backward-kill-line (C-x Rubout)
    Kill backward from the cursor to the beginning of the current line.

    unix-line-discard (C-u)
    Kill backward from the cursor to the beginning of the current line.

    kill-whole-line ()
    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    kill-word (M-d)
    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as forward-word.

    backward-kill-word (M-DEL)
    Kill the word behind point. Word boundaries are the same as backward-word.

    unix-word-rubout (C-w)
    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.

    unix-filename-rubout ()
    Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring.

    delete-horizontal-space ()
    Delete all spaces and tabs around point. By default, this is unbound.

    kill-region ()
    Kill the text in the current region. By default, this command is unbound.

    copy-region-as-kill ()
    Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound.

    copy-backward-word ()
    Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. By default, this command is unbound.

    copy-forward-word ()
    Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. By default, this command is unbound.

    yank (C-y)
    Yank the top of the kill ring into the buffer at point.

    yank-pop (M-y)
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is yank or yank-pop.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.5 Specifying Numeric Arguments

    digit-argument (M-0, M-1, ... M--)
    Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument.

    universal-argument ()
    This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing universal-argument again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. By default, this is not bound to a key.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.6 Letting Readline Type For You

    complete (TAB)
    Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion.

    possible-completions (M-?)
    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    insert-completions (M-*)
    Insert all completions of the text before point that would have been generated by possible-completions.

    menu-complete ()
    Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the original text is restored. An argument of n moves n positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to TAB, but is unbound by default.

    menu-complete-backward ()
    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    delete-char-or-list ()
    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. This command is unbound by default.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.7 Keyboard Macros

    start-kbd-macro (C-x ()
    Begin saving the characters typed into the current keyboard macro.

    end-kbd-macro (C-x ))
    Stop saving the characters typed into the current keyboard macro and save the definition.

    call-last-kbd-macro (C-x e)
    Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard.

    print-last-kbd-macro ()
    Print the last keboard macro defined in a format suitable for the inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.8 Some Miscellaneous Commands

    re-read-init-file (C-x C-r)
    Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.

    abort (C-g)
    Abort the current editing command and ring the terminal's bell (subject to the setting of bell-style).

    do-uppercase-version (M-a, M-b, M-x, ...)
    If the metafied character x is lowercase, run the command that is bound to the corresponding uppercase character.

    prefix-meta (ESC)
    Metafy the next character typed. This is for keyboards without a meta key. Typing `ESC f' is equivalent to typing M-f.

    undo (C-_ or C-x C-u)
    Incremental undo, separately remembered for each line.

    revert-line (M-r)
    Undo all changes made to this line. This is like executing the undo command enough times to get back to the beginning.

    tilde-expand (M-~)
    Perform tilde expansion on the current word.

    set-mark (C-@)
    Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.

    exchange-point-and-mark (C-x C-x)
    Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.

    character-search (C-])
    A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences.

    character-search-backward (M-C-])
    A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences.

    skip-csi-sequence ()
    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    insert-comment (M-#)
    Without a numeric argument, the value of the comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed.

    dump-functions ()
    Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    dump-variables ()
    Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    dump-macros ()
    Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    emacs-editing-mode (C-e)
    When in vi command mode, this causes a switch to emacs editing mode.

    vi-editing-mode (M-C-j)
    When in emacs editing mode, this causes a switch to vi editing mode.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 Readline vi Mode

    While the Readline library does not have a full set of vi editing functions, it does contain enough to allow simple editing of the line. The Readline vi mode behaves as specified in the POSIX standard.

    In order to switch interactively between emacs and vi editing modes, use the command M-C-j (bound to emacs-editing-mode when in vi mode and to vi-editing-mode in emacs mode). The Readline default is emacs mode.

    When you enter a line in vi mode, you are already placed in `insertion' mode, as if you had typed an `i'. Pressing ESC switches you into `command' mode, where you can edit the text of the line with the standard vi movement keys, move to previous history lines with `k' and subsequent lines with `j', and so forth.

    This document describes the GNU Readline Library, a utility for aiding in the consistency of user interface across discrete programs that need to provide a command line interface.

    Copyright (C) 1988--2016 Free Software Foundation, Inc.

    Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice pare preserved on all copies.

    Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.

    Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Foundation.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Programming with GNU Readline

    This chapter describes the interface between the GNU Readline Library and other programs. If you are a programmer, and you wish to include the features found in GNU Readline such as completion, line editing, and interactive history manipulation in your own programs, this section is for you.

    2.1 Basic Behavior  Using the default behavior of Readline.
    2.2 Custom Functions  Adding your own functions to Readline.
    2.3 Readline Variables  Variables accessible to custom functions.
    2.4 Readline Convenience Functions  Functions which Readline supplies to aid in writing your own custom functions.
    2.5 Readline Signal Handling  How Readline behaves when it receives signals.
    2.6 Custom Completers  Supplanting or supplementing Readline's completion functions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Basic Behavior

    Many programs provide a command line interface, such as mail, ftp, and sh. For such programs, the default behaviour of Readline is sufficient. This section describes how to use Readline in the simplest way possible, perhaps to replace calls in your code to gets() or fgets().

    The function readline() prints a prompt prompt and then reads and returns a single line of text from the user. If prompt is NULL or the empty string, no prompt is displayed. The line readline returns is allocated with malloc(); the caller should free() the line when it has finished with it. The declaration for readline in ANSI C is

     
    char *readline (const char *prompt);
    

    So, one might say
     
    char *line = readline ("Enter a line: ");
    
    in order to read a line of text from the user. The line returned has the final newline removed, so only the text remains.

    If readline encounters an EOF while reading the line, and the line is empty at that point, then (char *)NULL is returned. Otherwise, the line is ended just as if a newline had been typed.

    If you want the user to be able to get at the line later, (with C-p for example), you must call add_history() to save the line away in a history list of such lines.

     
    add_history (line);
    

    For full details on the GNU History Library, see the associated manual.

    It is preferable to avoid saving empty lines on the history list, since users rarely have a burning need to reuse a blank line. Here is a function which usefully replaces the standard gets() library function, and has the advantage of no static buffer to overflow:

     
    /* A static variable for holding the line. */
    static char *line_read = (char *)NULL;
    
    /* Read a string, and return a pointer to it.
       Returns NULL on EOF. */
    char *
    rl_gets ()
    {
      /* If the buffer has already been allocated,
         return the memory to the free pool. */
      if (line_read)
        {
          free (line_read);
          line_read = (char *)NULL;
        }
    
      /* Get a line from the user. */
      line_read = readline ("");
    
      /* If the line has any text in it,
         save it on the history. */
      if (line_read && *line_read)
        add_history (line_read);
    
      return (line_read);
    }
    

    This function gives the user the default behaviour of TAB completion: completion on file names. If you do not want Readline to complete on filenames, you can change the binding of the TAB key with rl_bind_key().

     
    int rl_bind_key (int key, rl_command_func_t *function);
    

    rl_bind_key() takes two arguments: key is the character that you want to bind, and function is the address of the function to call when key is pressed. Binding TAB to rl_insert() makes TAB insert itself. rl_bind_key() returns non-zero if key is not a valid ASCII character code (between 0 and 255).

    Thus, to disable the default TAB behavior, the following suffices:
     
    rl_bind_key ('\t', rl_insert);
    

    This code should be executed once at the start of your program; you might write a function called initialize_readline() which performs this and other desired initializations, such as installing custom completers (see section 2.6 Custom Completers).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 Custom Functions

    Readline provides many functions for manipulating the text of the line, but it isn't possible to anticipate the needs of all programs. This section describes the various functions and variables defined within the Readline library which allow a user program to add customized functionality to Readline.

    Before declaring any functions that customize Readline's behavior, or using any functionality Readline provides in other code, an application writer should include the file <readline/readline.h> in any file that uses Readline's features. Since some of the definitions in readline.h use the stdio library, the file <stdio.h> should be included before readline.h.

    readline.h defines a C preprocessor variable that should be treated as an integer, RL_READLINE_VERSION, which may be used to conditionally compile application code depending on the installed Readline version. The value is a hexadecimal encoding of the major and minor version numbers of the library, of the form 0xMMmm. MM is the two-digit major version number; mm is the two-digit minor version number. For Readline 4.2, for example, the value of RL_READLINE_VERSION would be 0x0402.

    2.2.1 Readline Typedefs  C declarations to make code readable.
    2.2.2 Writing a New Function  Variables and calling conventions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.1 Readline Typedefs

    For readability, we declare a number of new object types, all pointers to functions.

    The reason for declaring these new types is to make it easier to write code describing pointers to C functions with appropriately prototyped arguments and return values.

    For instance, say we want to declare a variable func as a pointer to a function which takes two int arguments and returns an int (this is the type of all of the Readline bindable functions). Instead of the classic C declaration

    int (*func)();

    or the ANSI-C style declaration

    int (*func)(int, int);

    we may write

    rl_command_func_t *func;

    The full list of function pointer types available is

    typedef int rl_command_func_t (int, int);

    typedef char *rl_compentry_func_t (const char *, int);

    typedef char **rl_completion_func_t (const char *, int, int);

    typedef char *rl_quote_func_t (char *, int, char *);

    typedef char *rl_dequote_func_t (char *, int);

    typedef int rl_compignore_func_t (char **);

    typedef void rl_compdisp_func_t (char **, int, int);

    typedef int rl_hook_func_t (void);

    typedef int rl_getc_func_t (FILE *);

    typedef int rl_linebuf_func_t (char *, int);

    typedef int rl_intfunc_t (int);
    #define rl_ivoidfunc_t rl_hook_func_t
    typedef int rl_icpfunc_t (char *);
    typedef int rl_icppfunc_t (char **);

    typedef void rl_voidfunc_t (void);
    typedef void rl_vintfunc_t (int);
    typedef void rl_vcpfunc_t (char *);
    typedef void rl_vcppfunc_t (char **);


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2.2 Writing a New Function

    In order to write new functions for Readline, you need to know the calling conventions for keyboard-invoked functions, and the names of the variables that describe the current state of the line read so far.

    The calling sequence for a command foo looks like

     
    int foo (int count, int key)
    

    where count is the numeric argument (or 1 if defaulted) and key is the key that invoked this function.

    It is completely up to the function as to what should be done with the numeric argument. Some functions use it as a repeat count, some as a flag, and others to choose alternate behavior (refreshing the current line as opposed to refreshing the screen, for example). Some choose to ignore it. In general, if a function uses the numeric argument as a repeat count, it should be able to do something useful with both negative and positive arguments. At the very least, it should be aware that it can be passed a negative argument.

    A command function should return 0 if its action completes successfully, and a value greater than zero if some error occurs. This is the convention obeyed by all of the builtin Readline bindable command functions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 Readline Variables

    These variables are available to function writers.

    Variable: char * rl_line_buffer
    This is the line gathered so far. You are welcome to modify the contents of the line, but see 2.4.5 Allowing Undoing. The function rl_extend_line_buffer is available to increase the memory allocated to rl_line_buffer.

    Variable: int rl_point
    The offset of the current cursor position in rl_line_buffer (the point).

    Variable: int rl_end
    The number of characters present in rl_line_buffer. When rl_point is at the end of the line, rl_point and rl_end are equal.

    Variable: int rl_mark
    The mark (saved position) in the current line. If set, the mark and point define a region.

    Variable: int rl_done
    Setting this to a non-zero value causes Readline to return the current line immediately.

    Variable: int rl_num_chars_to_read
    Setting this to a positive value before calling readline() causes Readline to return after accepting that many characters, rather than reading up to a character bound to accept-line.

    Variable: int rl_pending_input
    Setting this to a value makes it the next keystroke read. This is a way to stuff a single character into the input stream.

    Variable: int rl_dispatching
    Set to a non-zero value if a function is being called from a key binding; zero otherwise. Application functions can test this to discover whether they were called directly or by Readline's dispatching mechanism.

    Variable: int rl_erase_empty_line
    Setting this to a non-zero value causes Readline to completely erase the current line, including any prompt, any time a newline is typed as the only character on an otherwise-empty line. The cursor is moved to the beginning of the newly-blank line.

    Variable: char * rl_prompt
    The prompt Readline uses. This is set from the argument to readline(), and should not be assigned to directly. The rl_set_prompt() function (see section 2.4.6 Redisplay) may be used to modify the prompt string after calling readline().

    Variable: char * rl_display_prompt
    The string displayed as the prompt. This is usually identical to rl_prompt, but may be changed temporarily by functions that use the prompt string as a message area, such as incremental search.

    Variable: int rl_already_prompted
    If an application wishes to display the prompt itself, rather than have Readline do it the first time readline() is called, it should set this variable to a non-zero value after displaying the prompt. The prompt must also be passed as the argument to readline() so the redisplay functions can update the display properly. The calling application is responsible for managing the value; Readline never sets it.

    Variable: const char * rl_library_version
    The version number of this revision of the library.

    Variable: int rl_readline_version
    An integer encoding the current version of the library. The encoding is of the form 0xMMmm, where MM is the two-digit major version number, and mm is the two-digit minor version number. For example, for Readline-4.2, rl_readline_version would have the value 0x0402.

    Variable: int rl_gnu_readline_p
    Always set to 1, denoting that this is GNU readline rather than some emulation.

    Variable: const char * rl_terminal_name
    The terminal type, used for initialization. If not set by the application, Readline sets this to the value of the TERM environment variable the first time it is called.

    Variable: const char * rl_readline_name
    This variable is set to a unique name by each application using Readline. The value allows conditional parsing of the inputrc file (see section 1.3.2 Conditional Init Constructs).

    Variable: FILE * rl_instream
    The stdio stream from which Readline reads input. If NULL, Readline defaults to stdin.

    Variable: FILE * rl_outstream
    The stdio stream to which Readline performs output. If NULL, Readline defaults to stdout.

    Variable: int rl_prefer_env_winsize
    If non-zero, Readline gives values found in the LINES and COLUMNS environment variables greater precedence than values fetched from the kernel when computing the screen dimensions.

    Variable: rl_command_func_t * rl_last_func
    The address of the last command function Readline executed. May be used to test whether or not a function is being executed twice in succession, for example.

    Variable: rl_hook_func_t * rl_startup_hook
    If non-zero, this is the address of a function to call just before readline prints the first prompt.

    Variable: rl_hook_func_t * rl_pre_input_hook
    If non-zero, this is the address of a function to call after the first prompt has been printed and just before readline starts reading input characters.

    Variable: rl_hook_func_t * rl_event_hook
    If non-zero, this is the address of a function to call periodically when Readline is waiting for terminal input. By default, this will be called at most ten times a second if there is no keyboard input.

    Variable: rl_getc_func_t * rl_getc_function
    If non-zero, Readline will call indirectly through this pointer to get a character from the input stream. By default, it is set to rl_getc, the default Readline character input function (see section 2.4.8 Character Input). In general, an application that sets rl_getc_function should consider setting rl_input_available_hook as well.

    Variable: rl_hook_func_t * rl_signal_event_hook
    If non-zero, this is the address of a function to call if a read system call is interrupted when Readline is reading terminal input.

    Variable: rl_hook_func_t * rl_input_available_hook
    If non-zero, Readline will use this function's return value when it needs to determine whether or not there is available input on the current input source. The default hook checks rl_instream; if an application is using a different input source, it should set the hook appropriately. Readline queries for available input when implementing intra-key-sequence timeouts during input and incremental searches. This may use an application-specific timeout before returning a value; Readline uses the value passed to rl_set_keyboard_input_timeout() or the value of the user-settable keyseq-timeout variable. This is designed for use by applications using Readline's callback interface (see section 2.4.12 Alternate Interface), which may not use the traditional read(2) and file descriptor interface, or other applications using a different input mechanism. If an application uses an input mechanism or hook that can potentially exceed the value of keyseq-timeout, it should increase the timeout or set this hook appropriately even when not using the callback interface. In general, an application that sets rl_getc_function should consider setting rl_input_available_hook as well.

    Variable: rl_voidfunc_t * rl_redisplay_function
    If non-zero, Readline will call indirectly through this pointer to update the display with the current contents of the editing buffer. By default, it is set to rl_redisplay, the default Readline redisplay function (see section 2.4.6 Redisplay).

    Variable: rl_vintfunc_t * rl_prep_term_function
    If non-zero, Readline will call indirectly through this pointer to initialize the terminal. The function takes a single argument, an int flag that says whether or not to use eight-bit characters. By default, this is set to rl_prep_terminal (see section 2.4.9 Terminal Management).

    Variable: rl_voidfunc_t * rl_deprep_term_function
    If non-zero, Readline will call indirectly through this pointer to reset the terminal. This function should undo the effects of rl_prep_term_function. By default, this is set to rl_deprep_terminal (see section 2.4.9 Terminal Management).

    Variable: Keymap rl_executing_keymap
    This variable is set to the keymap (see section 2.4.2 Selecting a Keymap) in which the currently executing readline function was found.

    Variable: Keymap rl_binding_keymap
    This variable is set to the keymap (see section 2.4.2 Selecting a Keymap) in which the last key binding occurred.

    Variable: char * rl_executing_macro
    This variable is set to the text of any currently-executing macro.

    Variable: int rl_executing_key
    The key that caused the dispatch to the currently-executing Readline function.

    Variable: char * rl_executing_keyseq
    The full key sequence that caused the dispatch to the currently-executing Readline function.

    Variable: int rl_key_sequence_length
    The number of characters in rl_executing_keyseq.

    Variable: int rl_readline_state
    A variable with bit values that encapsulate the current Readline state. A bit is set with the RL_SETSTATE macro, and unset with the RL_UNSETSTATE macro. Use the RL_ISSTATE macro to test whether a particular state bit is set. Current state bits include:

    RL_STATE_NONE
    Readline has not yet been called, nor has it begun to initialize.
    RL_STATE_INITIALIZING
    Readline is initializing its internal data structures.
    RL_STATE_INITIALIZED
    Readline has completed its initialization.
    RL_STATE_TERMPREPPED
    Readline has modified the terminal modes to do its own input and redisplay.
    RL_STATE_READCMD
    Readline is reading a command from the keyboard.
    RL_STATE_METANEXT
    Readline is reading more input after reading the meta-prefix character.
    RL_STATE_DISPATCHING
    Readline is dispatching to a command.
    RL_STATE_MOREINPUT
    Readline is reading more input while executing an editing command.
    RL_STATE_ISEARCH
    Readline is performing an incremental history search.
    RL_STATE_NSEARCH
    Readline is performing a non-incremental history search.
    RL_STATE_SEARCH
    Readline is searching backward or forward through the history for a string.
    RL_STATE_NUMERICARG
    Readline is reading a numeric argument.
    RL_STATE_MACROINPUT
    Readline is currently getting its input from a previously-defined keyboard macro.
    RL_STATE_MACRODEF
    Readline is currently reading characters defining a keyboard macro.
    RL_STATE_OVERWRITE
    Readline is in overwrite mode.
    RL_STATE_COMPLETING
    Readline is performing word completion.
    RL_STATE_SIGHANDLER
    Readline is currently executing the readline signal handler.
    RL_STATE_UNDOING
    Readline is performing an undo.
    RL_STATE_INPUTPENDING
    Readline has input pending due to a call to rl_execute_next().
    RL_STATE_TTYCSAVED
    Readline has saved the values of the terminal's special characters.
    RL_STATE_CALLBACK
    Readline is currently using the alternate (callback) interface (see section 2.4.12 Alternate Interface).
    RL_STATE_VIMOTION
    Readline is reading the argument to a vi-mode "motion" command.
    RL_STATE_MULTIKEY
    Readline is reading a multiple-keystroke command.
    RL_STATE_VICMDONCE
    Readline has entered vi command (movement) mode at least one time during the current call to readline().
    RL_STATE_DONE
    Readline has read a key sequence bound to accept-line and is about to return the line to the caller.

    Variable: int rl_explicit_arg
    Set to a non-zero value if an explicit numeric argument was specified by the user. Only valid in a bindable command function.

    Variable: int rl_numeric_arg
    Set to the value of any numeric argument explicitly specified by the user before executing the current Readline function. Only valid in a bindable command function.

    Variable: int rl_editing_mode
    Set to a value denoting Readline's current editing mode. A value of 1 means Readline is currently in emacs mode; 0 means that vi mode is active.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 Readline Convenience Functions

    2.4.1 Naming a Function  How to give a function you write a name.
    2.4.2 Selecting a Keymap  Making keymaps.
    2.4.3 Binding Keys  Changing Keymaps.
    2.4.4 Associating Function Names and Bindings  Translate function names to key sequences.
    2.4.5 Allowing Undoing  How to make your functions undoable.
    2.4.6 Redisplay  Functions to control line display.
    2.4.7 Modifying Text  Functions to modify rl_line_buffer.
    2.4.8 Character Input  Functions to read keyboard input.
    2.4.9 Terminal Management  Functions to manage terminal settings.
    2.4.10 Utility Functions  Generally useful functions and hooks.
    2.4.11 Miscellaneous Functions  Functions that don't fall into any category.
    2.4.12 Alternate Interface  Using Readline in a `callback' fashion.
    2.4.13 A Readline Example  An example Readline function.
    2.4.14 Alternate Interface Example  An example program using the alternate interface.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.1 Naming a Function

    The user can dynamically change the bindings of keys while using Readline. This is done by representing the function with a descriptive name. The user is able to type the descriptive name when referring to the function. Thus, in an init file, one might find

     
    Meta-Rubout:	backward-kill-word
    

    This binds the keystroke Meta-Rubout to the function descriptively named backward-kill-word. You, as the programmer, should bind the functions you write to descriptive names as well. Readline provides a function for doing that:

    Function: int rl_add_defun (const char *name, rl_command_func_t *function, int key)
    Add name to the list of named functions. Make function be the function that gets called. If key is not -1, then bind it to function using rl_bind_key().

    Using this function alone is sufficient for most applications. It is the recommended way to add a few functions to the default functions that Readline has built in. If you need to do something other than adding a function to Readline, you may need to use the underlying functions described below.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.2 Selecting a Keymap

    Key bindings take place on a keymap. The keymap is the association between the keys that the user types and the functions that get run. You can make your own keymaps, copy existing keymaps, and tell Readline which keymap to use.

    Function: Keymap rl_make_bare_keymap (void)
    Returns a new, empty keymap. The space for the keymap is allocated with malloc(); the caller should free it by calling rl_free_keymap() when done.

    Function: Keymap rl_copy_keymap (Keymap map)
    Return a new keymap which is a copy of map.

    Function: Keymap rl_make_keymap (void)
    Return a new keymap with the printing characters bound to rl_insert, the lowercase Meta characters bound to run their equivalents, and the Meta digits bound to produce numeric arguments.

    Function: void rl_discard_keymap (Keymap keymap)
    Free the storage associated with the data in keymap. The caller should free keymap.

    Function: void rl_free_keymap (Keymap keymap)
    Free all storage associated with keymap. This calls rl_discard_keymap to free subordindate keymaps and macros.

    Readline has several internal keymaps. These functions allow you to change which keymap is active.

    Function: Keymap rl_get_keymap (void)
    Returns the currently active keymap.

    Function: void rl_set_keymap (Keymap keymap)
    Makes keymap the currently active keymap.

    Function: Keymap rl_get_keymap_by_name (const char *name)
    Return the keymap matching name. name is one which would be supplied in a set keymap inputrc line (see section 1.3 Readline Init File).

    Function: char * rl_get_keymap_name (Keymap keymap)
    Return the name matching keymap. name is one which would be supplied in a set keymap inputrc line (see section 1.3 Readline Init File).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.3 Binding Keys

    Key sequences are associate with functions through the keymap. Readline has several internal keymaps: emacs_standard_keymap, emacs_meta_keymap, emacs_ctlx_keymap, vi_movement_keymap, and vi_insertion_keymap. emacs_standard_keymap is the default, and the examples in this manual assume that.

    Since readline() installs a set of default key bindings the first time it is called, there is always the danger that a custom binding installed before the first call to readline() will be overridden. An alternate mechanism is to install custom key bindings in an initialization function assigned to the rl_startup_hook variable (see section 2.3 Readline Variables).

    These functions manage key bindings.

    Function: int rl_bind_key (int key, rl_command_func_t *function)
    Binds key to function in the currently active keymap. Returns non-zero in the case of an invalid key.

    Function: int rl_bind_key_in_map (int key, rl_command_func_t *function, Keymap map)
    Bind key to function in map. Returns non-zero in the case of an invalid key.

    Function: int rl_bind_key_if_unbound (int key, rl_command_func_t *function)
    Binds key to function if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid key or if key is already bound.

    Function: int rl_bind_key_if_unbound_in_map (int key, rl_command_func_t *function, Keymap map)
    Binds key to function if it is not already bound in map. Returns non-zero in the case of an invalid key or if key is already bound.

    Function: int rl_unbind_key (int key)
    Bind key to the null function in the currently active keymap. Returns non-zero in case of error.

    Function: int rl_unbind_key_in_map (int key, Keymap map)
    Bind key to the null function in map. Returns non-zero in case of error.

    Function: int rl_unbind_function_in_map (rl_command_func_t *function, Keymap map)
    Unbind all keys that execute function in map.

    Function: int rl_unbind_command_in_map (const char *command, Keymap map)
    Unbind all keys that are bound to command in map.

    Function: int rl_bind_keyseq (const char *keyseq, rl_command_func_t *function)
    Bind the key sequence represented by the string keyseq to the function function, beginning in the current keymap. This makes new keymaps as necessary. The return value is non-zero if keyseq is invalid.

    Function: int rl_bind_keyseq_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
    Bind the key sequence represented by the string keyseq to the function function. This makes new keymaps as necessary. Initial bindings are performed in map. The return value is non-zero if keyseq is invalid.

    Function: int rl_set_key (const char *keyseq, rl_command_func_t *function, Keymap map)
    Equivalent to rl_bind_keyseq_in_map.

    Function: int rl_bind_keyseq_if_unbound (const char *keyseq, rl_command_func_t *function)
    Binds keyseq to function if it is not already bound in the currently active keymap. Returns non-zero in the case of an invalid keyseq or if keyseq is already bound.

    Function: int rl_bind_keyseq_if_unbound_in_map (const char *keyseq, rl_command_func_t *function, Keymap map)
    Binds keyseq to function if it is not already bound in map. Returns non-zero in the case of an invalid keyseq or if keyseq is already bound.

    Function: int rl_generic_bind (int type, const char *keyseq, char *data, Keymap map)
    Bind the key sequence represented by the string keyseq to the arbitrary pointer data. type says what kind of data is pointed to by data; this can be a function (ISFUNC), a macro (ISMACR), or a keymap (ISKMAP). This makes new keymaps as necessary. The initial keymap in which to do bindings is map.

    Function: int rl_parse_and_bind (char *line)
    Parse line as if it had been read from the inputrc file and perform any key bindings and variable assignments found (see section 1.3 Readline Init File).

    Function: int rl_read_init_file (const char *filename)
    Read keybindings and variable assignments from filename (see section 1.3 Readline Init File).


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.4 Associating Function Names and Bindings

    These functions allow you to find out what keys invoke named functions and the functions invoked by a particular key sequence. You may also associate a new function name with an arbitrary function.

    Function: rl_command_func_t * rl_named_function (const char *name)
    Return the function with name name.

    Function: rl_command_func_t * rl_function_of_keyseq (const char *keyseq, Keymap map, int *type)
    Return the function invoked by keyseq in keymap map. If map is NULL, the current keymap is used. If type is not NULL, the type of the object is returned in the int variable it points to (one of ISFUNC, ISKMAP, or ISMACR).

    Function: char ** rl_invoking_keyseqs (rl_command_func_t *function)
    Return an array of strings representing the key sequences used to invoke function in the current keymap.

    Function: char ** rl_invoking_keyseqs_in_map (rl_command_func_t *function, Keymap map)
    Return an array of strings representing the key sequences used to invoke function in the keymap map.

    Function: void rl_function_dumper (int readable)
    Print the readline function names and the key sequences currently bound to them to rl_outstream. If readable is non-zero, the list is formatted in such a way that it can be made part of an inputrc file and re-read.

    Function: void rl_list_funmap_names (void)
    Print the names of all bindable Readline functions to rl_outstream.

    Function: const char ** rl_funmap_names (void)
    Return a NULL terminated array of known function names. The array is sorted. The array itself is allocated, but not the strings inside. You should free the array, but not the pointers, using free or rl_free when you are done.

    Function: int rl_add_funmap_entry (const char *name, rl_command_func_t *function)
    Add name to the list of bindable Readline command names, and make function the function to be called when name is invoked.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.5 Allowing Undoing

    Supporting the undo command is a painless thing, and makes your functions much more useful. It is certainly easy to try something if you know you can undo it.

    If your function simply inserts text once, or deletes text once, and uses rl_insert_text() or rl_delete_text() to do it, then undoing is already done for you automatically.

    If you do multiple insertions or multiple deletions, or any combination of these operations, you should group them together into one operation. This is done with rl_begin_undo_group() and rl_end_undo_group().

    The types of events that can be undone are:

     
    enum undo_code { UNDO_DELETE, UNDO_INSERT, UNDO_BEGIN, UNDO_END }; 
    

    Notice that UNDO_DELETE means to insert some text, and UNDO_INSERT means to delete some text. That is, the undo code tells what to undo, not how to undo it. UNDO_BEGIN and UNDO_END are tags added by rl_begin_undo_group() and rl_end_undo_group().

    Function: int rl_begin_undo_group (void)
    Begins saving undo information in a group construct. The undo information usually comes from calls to rl_insert_text() and rl_delete_text(), but could be the result of calls to rl_add_undo().

    Function: int rl_end_undo_group (void)
    Closes the current undo group started with rl_begin_undo_group (). There should be one call to rl_end_undo_group() for each call to rl_begin_undo_group().

    Function: void rl_add_undo (enum undo_code what, int start, int end, char *text)
    Remember how to undo an event (according to what). The affected text runs from start to end, and encompasses text.

    Function: void rl_free_undo_list (void)
    Free the existing undo list.

    Function: int rl_do_undo (void)
    Undo the first thing on the undo list. Returns 0 if there was nothing to undo, non-zero if something was undone.

    Finally, if you neither insert nor delete text, but directly modify the existing text (e.g., change its case), call rl_modifying() once, just before you modify the text. You must supply the indices of the text range that you are going to modify.

    Function: int rl_modifying (int start, int end)
    Tell Readline to save the text between start and end as a single undo unit. It is assumed that you will subsequently modify that text.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.6 Redisplay

    Function: void rl_redisplay (void)
    Change what's displayed on the screen to reflect the current contents of rl_line_buffer.

    Function: int rl_forced_update_display (void)
    Force the line to be updated and redisplayed, whether or not Readline thinks the screen display is correct.

    Function: int rl_on_new_line (void)
    Tell the update functions that we have moved onto a new (empty) line, usually after outputting a newline.

    Function: int rl_on_new_line_with_prompt (void)
    Tell the update functions that we have moved onto a new line, with rl_prompt already displayed. This could be used by applications that want to output the prompt string themselves, but still need Readline to know the prompt string length for redisplay. It should be used after setting rl_already_prompted.

    Function: int rl_clear_visible_line (void)
    Clear the screen lines corresponding to the current line's contents.

    Function: int rl_reset_line_state (void)
    Reset the display state to a clean state and redisplay the current line starting on a new line.

    Function: int rl_crlf (void)
    Move the cursor to the start of the next screen line.

    Function: int rl_show_char (int c)
    Display character c on rl_outstream. If Readline has not been set to display meta characters directly, this will convert meta characters to a meta-prefixed key sequence. This is intended for use by applications which wish to do their own redisplay.

    Function: int rl_message (const char *, ...)
    The arguments are a format string as would be supplied to printf, possibly containing conversion specifications such as `%d', and any additional arguments necessary to satisfy the conversion specifications. The resulting string is displayed in the echo area. The echo area is also used to display numeric arguments and search strings. You should call rl_save_prompt to save the prompt information before calling this function.

    Function: int rl_clear_message (void)
    Clear the message in the echo area. If the prompt was saved with a call to rl_save_prompt before the last call to rl_message, call rl_restore_prompt before calling this function.

    Function: void rl_save_prompt (void)
    Save the local Readline prompt display state in preparation for displaying a new message in the message area with rl_message().

    Function: void rl_restore_prompt (void)
    Restore the local Readline prompt display state saved by the most recent call to rl_save_prompt. if rl_save_prompt was called to save the prompt before a call to rl_message, this function should be called before the corresponding call to rl_clear_message.

    Function: int rl_expand_prompt (char *prompt)
    Expand any special character sequences in prompt and set up the local Readline prompt redisplay variables. This function is called by readline(). It may also be called to expand the primary prompt if the rl_on_new_line_with_prompt() function or rl_already_prompted variable is used. It returns the number of visible characters on the last line of the (possibly multi-line) prompt. Applications may indicate that the prompt contains characters that take up no physical screen space when displayed by bracketing a sequence of such characters with the special markers RL_PROMPT_START_IGNORE and RL_PROMPT_END_IGNORE (declared in `readline.h'). This may be used to embed terminal-specific escape sequences in prompts.

    Function: int rl_set_prompt (const char *prompt)
    Make Readline use prompt for subsequent redisplay. This calls rl_expand_prompt() to expand the prompt and sets rl_prompt to the result.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.7 Modifying Text

    Function: int rl_insert_text (const char *text)
    Insert text into the line at the current cursor position. Returns the number of characters inserted.

    Function: int rl_delete_text (int start, int end)
    Delete the text between start and end in the current line. Returns the number of characters deleted.

    Function: char * rl_copy_text (int start, int end)
    Return a copy of the text between start and end in the current line.

    Function: int rl_kill_text (int start, int end)
    Copy the text between start and end in the current line to the kill ring, appending or prepending to the last kill if the last command was a kill command. The text is deleted. If start is less than end, the text is appended, otherwise prepended. If the last command was not a kill, a new kill ring slot is used.

    Function: int rl_push_macro_input (char *macro)
    Cause macro to be inserted into the line, as if it had been invoked by a key bound to a macro. Not especially useful; use rl_insert_text() instead.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.8 Character Input

    Function: int rl_read_key (void)
    Return the next character available from Readline's current input stream. This handles input inserted into the input stream via rl_pending_input (see section 2.3 Readline Variables) and rl_stuff_char(), macros, and characters read from the keyboard. While waiting for input, this function will call any function assigned to the rl_event_hook variable.

    Function: int rl_getc (FILE *stream)
    Return the next character available from stream, which is assumed to be the keyboard.

    Function: int rl_stuff_char (int c)
    Insert c into the Readline input stream. It will be "read" before Readline attempts to read characters from the terminal with rl_read_key(). Up to 512 characters may be pushed back. rl_stuff_char returns 1 if the character was successfully inserted; 0 otherwise.

    Function: int rl_execute_next (int c)
    Make c be the next command to be executed when rl_read_key() is called. This sets rl_pending_input.

    Function: int rl_clear_pending_input (void)
    Unset rl_pending_input, effectively negating the effect of any previous call to rl_execute_next(). This works only if the pending input has not already been read with rl_read_key().

    Function: int rl_set_keyboard_input_timeout (int u)
    While waiting for keyboard input in rl_read_key(), Readline will wait for u microseconds for input before calling any function assigned to rl_event_hook. u must be greater than or equal to zero (a zero-length timeout is equivalent to a poll). The default waiting period is one-tenth of a second. Returns the old timeout value.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.9 Terminal Management

    Function: void rl_prep_terminal (int meta_flag)
    Modify the terminal settings for Readline's use, so readline() can read a single character at a time from the keyboard. The meta_flag argument should be non-zero if Readline should read eight-bit input.

    Function: void rl_deprep_terminal (void)
    Undo the effects of rl_prep_terminal(), leaving the terminal in the state in which it was before the most recent call to rl_prep_terminal().

    Function: void rl_tty_set_default_bindings (Keymap kmap)
    Read the operating system's terminal editing characters (as would be displayed by stty) to their Readline equivalents. The bindings are performed in kmap.

    Function: void rl_tty_unset_default_bindings (Keymap kmap)
    Reset the bindings manipulated by rl_tty_set_default_bindings so that the terminal editing characters are bound to rl_insert. The bindings are performed in kmap.

    Function: int rl_tty_set_echoing (int value)
    Set Readline's idea of whether or not it is echoing output to its output stream (rl_outstream). If value is 0, Readline does not display output to rl_outstream; any other value enables output. The initial value is set when Readline initializes the terminal settings. This function returns the previous value.

    Function: int rl_reset_terminal (const char *terminal_name)
    Reinitialize Readline's idea of the terminal settings using terminal_name as the terminal type (e.g., vt100). If terminal_name is NULL, the value of the TERM environment variable is used.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.10 Utility Functions

    Function: int rl_save_state (struct readline_state *sp)
    Save a snapshot of Readline's internal state to sp. The contents of the readline_state structure are documented in `readline.h'. The caller is responsible for allocating the structure.

    Function: int rl_restore_state (struct readline_state *sp)
    Restore Readline's internal state to that stored in sp, which must have been saved by a call to rl_save_state. The contents of the readline_state structure are documented in `readline.h'. The caller is responsible for freeing the structure.

    Function: void rl_free (void *mem)
    Deallocate the memory pointed to by mem. mem must have been allocated by malloc.

    Function: void rl_replace_line (const char *text, int clear_undo)
    Replace the contents of rl_line_buffer with text. The point and mark are preserved, if possible. If clear_undo is non-zero, the undo list associated with the current line is cleared.

    Function: void rl_extend_line_buffer (int len)
    Ensure that rl_line_buffer has enough space to hold len characters, possibly reallocating it if necessary.

    Function: int rl_initialize (void)
    Initialize or re-initialize Readline's internal state. It's not strictly necessary to call this; readline() calls it before reading any input.

    Function: int rl_ding (void)
    Ring the terminal bell, obeying the setting of bell-style.

    Function: int rl_alphabetic (int c)
    Return 1 if c is an alphabetic character.

    Function: void rl_display_match_list (char **matches, int len, int max)
    A convenience function for displaying a list of strings in columnar format on Readline's output stream. matches is the list of strings, in argv format, such as a list of completion matches. len is the number of strings in matches, and max is the length of the longest string in matches. This function uses the setting of print-completions-horizontally to select how the matches are displayed (see section 1.3.1 Readline Init File Syntax). When displaying completions, this function sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    The following are implemented as macros, defined in chardefs.h. Applications should refrain from using them.

    Function: int _rl_uppercase_p (int c)
    Return 1 if c is an uppercase alphabetic character.

    Function: int _rl_lowercase_p (int c)
    Return 1 if c is a lowercase alphabetic character.

    Function: int _rl_digit_p (int c)
    Return 1 if c is a numeric character.

    Function: int _rl_to_upper (int c)
    If c is a lowercase alphabetic character, return the corresponding uppercase character.

    Function: int _rl_to_lower (int c)
    If c is an uppercase alphabetic character, return the corresponding lowercase character.

    Function: int _rl_digit_value (int c)
    If c is a number, return the value it represents.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.11 Miscellaneous Functions

    Function: int rl_macro_bind (const char *keyseq, const char *macro, Keymap map)
    Bind the key sequence keyseq to invoke the macro macro. The binding is performed in map. When keyseq is invoked, the macro will be inserted into the line. This function is deprecated; use rl_generic_bind() instead.

    Function: void rl_macro_dumper (int readable)
    Print the key sequences bound to macros and their values, using the current keymap, to rl_outstream. If readable is non-zero, the list is formatted in such a way that it can be made part of an inputrc file and re-read.

    Function: int rl_variable_bind (const char *variable, const char *value)
    Make the Readline variable variable have value. This behaves as if the readline command `set variable value' had been executed in an inputrc file (see section 1.3.1 Readline Init File Syntax).

    Function: char * rl_variable_value (const char *variable)
    Return a string representing the value of the Readline variable variable. For boolean variables, this string is either `on' or `off'.

    Function: void rl_variable_dumper (int readable)
    Print the readline variable names and their current values to rl_outstream. If readable is non-zero, the list is formatted in such a way that it can be made part of an inputrc file and re-read.

    Function: int rl_set_paren_blink_timeout (int u)
    Set the time interval (in microseconds) that Readline waits when showing a balancing character when blink-matching-paren has been enabled.

    Function: char * rl_get_termcap (const char *cap)
    Retrieve the string value of the termcap capability cap. Readline fetches the termcap entry for the current terminal name and uses those capabilities to move around the screen line and perform other terminal-specific operations, like erasing a line. Readline does not use all of a terminal's capabilities, and this function will return values for only those capabilities Readline uses.

    Function: void rl_clear_history (void)
    Clear the history list by deleting all of the entries, in the same manner as the History library's clear_history() function. This differs from clear_history because it frees private data Readline saves in the history list.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.12 Alternate Interface

    An alternate interface is available to plain readline(). Some applications need to interleave keyboard I/O with file, device, or window system I/O, typically by using a main loop to select() on various file descriptors. To accommodate this need, readline can also be invoked as a `callback' function from an event loop. There are functions available to make this easy.

    Function: void rl_callback_handler_install (const char *prompt, rl_vcpfunc_t *lhandler)
    Set up the terminal for readline I/O and display the initial expanded value of prompt. Save the value of lhandler to use as a handler function to call when a complete line of input has been entered. The handler function receives the text of the line as an argument. As with readline(), the handler function should free the line when it it finished with it.

    Function: void rl_callback_read_char (void)
    Whenever an application determines that keyboard input is available, it should call rl_callback_read_char(), which will read the next character from the current input source. If that character completes the line, rl_callback_read_char will invoke the lhandler function installed by rl_callback_handler_install to process the line. Before calling the lhandler function, the terminal settings are reset to the values they had before calling rl_callback_handler_install. If the lhandler function returns, and the line handler remains installed, the terminal settings are modified for Readline's use again. EOF is indicated by calling lhandler with a NULL line.

    Function: void rl_callback_sigcleanup (void)
    Clean up any internal state the callback interface uses to maintain state between calls to rl_callback_read_char (e.g., the state of any active incremental searches). This is intended to be used by applications that wish to perform their own signal handling; Readline's internal signal handler calls this when appropriate.

    Function: void rl_callback_handler_remove (void)
    Restore the terminal to its initial state and remove the line handler. You may call this function from within a callback as well as independently. If the lhandler installed by rl_callback_handler_install does not exit the program, either this function or the function referred to by the value of rl_deprep_term_function should be called before the program exits to reset the terminal settings.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.13 A Readline Example

    Here is a function which changes lowercase characters to their uppercase equivalents, and uppercase characters to lowercase. If this function was bound to `M-c', then typing `M-c' would change the case of the character under point. Typing `M-1 0 M-c' would change the case of the following 10 characters, leaving the cursor on the last character changed.

     
    /* Invert the case of the COUNT following characters. */
    int
    invert_case_line (count, key)
         int count, key;
    {
      register int start, end, i;
    
      start = rl_point;
    
      if (rl_point >= rl_end)
        return (0);
    
      if (count < 0)
        {
          direction = -1;
          count = -count;
        }
      else
        direction = 1;
          
      /* Find the end of the range to modify. */
      end = start + (count * direction);
    
      /* Force it to be within range. */
      if (end > rl_end)
        end = rl_end;
      else if (end < 0)
        end = 0;
    
      if (start == end)
        return (0);
    
      if (start > end)
        {
          int temp = start;
          start = end;
          end = temp;
        }
    
      /* Tell readline that we are modifying the line,
         so it will save the undo information. */
      rl_modifying (start, end);
    
      for (i = start; i != end; i++)
        {
          if (_rl_uppercase_p (rl_line_buffer[i]))
            rl_line_buffer[i] = _rl_to_lower (rl_line_buffer[i]);
          else if (_rl_lowercase_p (rl_line_buffer[i]))
            rl_line_buffer[i] = _rl_to_upper (rl_line_buffer[i]);
        }
      /* Move point to on top of the last character changed. */
      rl_point = (direction == 1) ? end - 1 : start;
      return (0);
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4.14 Alternate Interface Example

    Here is a complete program that illustrates Readline's alternate interface. It reads lines from the terminal and displays them, providing the standard history and TAB completion functions. It understands the EOF character or "exit" to exit the program.

     
    /* Standard include files. stdio.h is required. */
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <locale.h>
    
    /* Used for select(2) */
    #include <sys/types.h>
    #include <sys/select.h>
    
    #include <signal.h>
    
    #include <stdio.h>
    
    /* Standard readline include files. */
    #include <readline/readline.h>
    #include <readline/history.h>
    
    static void cb_linehandler (char *);
    static void sighandler (int);
    
    int running;
    int sigwinch_received;
    const char *prompt = "rltest$ ";
    
    /* Handle SIGWINCH and window size changes when readline is not active and
       reading a character. */
    static void
    sighandler (int sig)
    {
      sigwinch_received = 1;
    }
    
    /* Callback function called for each line when accept-line executed, EOF
       seen, or EOF character read.  This sets a flag and returns; it could
       also call exit(3). */
    static void
    cb_linehandler (char *line)
    {
      /* Can use ^D (stty eof) or `exit' to exit. */
      if (line == NULL || strcmp (line, "exit") == 0)
        {
          if (line == 0)
            printf ("\n");
          printf ("exit\n");
          /* This function needs to be called to reset the terminal settings,
             and calling it from the line handler keeps one extra prompt from
             being displayed. */
          rl_callback_handler_remove ();
    
          running = 0;
        }
      else
        {
          if (*line)
            add_history (line);
          printf ("input line: %s\n", line);
          free (line);
        }
    }
    
    int
    main (int c, char **v)
    {
      fd_set fds;
      int r;
    
      /* Set the default locale values according to environment variables. */
      setlocale (LC_ALL, "");
    
      /* Handle window size changes when readline is not active and reading
         characters. */
      signal (SIGWINCH, sighandler);
    
      /* Install the line handler. */
      rl_callback_handler_install (prompt, cb_linehandler);
    
      /* Enter a simple event loop.  This waits until something is available
         to read on readline's input stream (defaults to standard input) and
         calls the builtin character read callback to read it.  It does not
         have to modify the user's terminal settings. */
      running = 1;
      while (running)
        {
          FD_ZERO (&fds);
          FD_SET (fileno (rl_instream), &fds);    
    
          r = select (FD_SETSIZE, &fds, NULL, NULL, NULL);
          if (r < 0 && errno != EINTR)
            {
              perror ("rltest: select");
              rl_callback_handler_remove ();
              break;
            }
          if (sigwinch_received)
    	{
    	  rl_resize_terminal ();
    	  sigwinch_received = 0;
    	}
          if (r < 0)
    	continue;     
    
          if (FD_ISSET (fileno (rl_instream), &fds))
            rl_callback_read_char ();
        }
    
      printf ("rltest: Event loop has exited\n");
      return 0;
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 Readline Signal Handling

    Signals are asynchronous events sent to a process by the Unix kernel, sometimes on behalf of another process. They are intended to indicate exceptional events, like a user pressing the interrupt key on his terminal, or a network connection being broken. There is a class of signals that can be sent to the process currently reading input from the keyboard. Since Readline changes the terminal attributes when it is called, it needs to perform special processing when such a signal is received in order to restore the terminal to a sane state, or provide application writers with functions to do so manually.

    Readline contains an internal signal handler that is installed for a number of signals (SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU). When one of these signals is received, the signal handler will reset the terminal attributes to those that were in effect before readline() was called, reset the signal handling to what it was before readline() was called, and resend the signal to the calling application. If and when the calling application's signal handler returns, Readline will reinitialize the terminal and continue to accept input. When a SIGINT is received, the Readline signal handler performs some additional work, which will cause any partially-entered line to be aborted (see the description of rl_free_line_state() below).

    There is an additional Readline signal handler, for SIGWINCH, which the kernel sends to a process whenever the terminal's size changes (for example, if a user resizes an xterm). The Readline SIGWINCH handler updates Readline's internal screen size information, and then calls any SIGWINCH signal handler the calling application has installed. Readline calls the application's SIGWINCH signal handler without resetting the terminal to its original state. If the application's signal handler does more than update its idea of the terminal size and return (for example, a longjmp back to a main processing loop), it must call rl_cleanup_after_signal() (described below), to restore the terminal state.

    When an application is using the callback interface (see section 2.4.12 Alternate Interface), Readline installs signal handlers only for the duration of the call to rl_callback_read_char. Applications using the callback interface should be prepared to clean up Readline's state if they wish to handle the signal before the line handler completes and restores the terminal state.

    If an application using the callback interface wishes to have Readline install its signal handlers at the time the application calls rl_callback_handler_install and remove them only when a complete line of input has been read, it should set the rl_persistent_signal_handlers variable to a non-zero value. This allows an application to defer all of the handling of the signals Readline catches to Readline. Applications should use this variable with care; it can result in Readline catching signals and not acting on them (or allowing the application to react to them) until the application calls rl_callback_read_char. This can result in an application becoming less responsive to keyboard signals like SIGINT. If an application does not want or need to perform any signal handling, or does not need to do any processing between calls to rl_callback_read_char, setting this variable may be desirable.

    Readline provides two variables that allow application writers to control whether or not it will catch certain signals and act on them when they are received. It is important that applications change the values of these variables only when calling readline(), not in a signal handler, so Readline's internal signal state is not corrupted.

    Variable: int rl_catch_signals
    If this variable is non-zero, Readline will install signal handlers for SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, and SIGTTOU.

    The default value of rl_catch_signals is 1.

    Variable: int rl_catch_sigwinch
    If this variable is set to a non-zero value, Readline will install a signal handler for SIGWINCH.

    The default value of rl_catch_sigwinch is 1.

    Variable: int rl_persistent_signal_handlers
    If an application using the callback interface wishes Readline's signal handlers to be installed and active during the set of calls to rl_callback_read_char that constitutes an entire single line, it should set this variable to a non-zero value.

    The default value of rl_persistent_signal_handlers is 0.

    Variable: int rl_change_environment
    If this variable is set to a non-zero value, and Readline is handling SIGWINCH, Readline will modify the LINES and COLUMNS environment variables upon receipt of a SIGWINCH

    The default value of rl_change_environment is 1.

    If an application does not wish to have Readline catch any signals, or to handle signals other than those Readline catches (SIGHUP, for example), Readline provides convenience functions to do the necessary terminal and internal state cleanup upon receipt of a signal.

    Function: int rl_pending_signal (void)
    Return the signal number of the most recent signal Readline received but has not yet handled, or 0 if there is no pending signal.

    Function: void rl_cleanup_after_signal (void)
    This function will reset the state of the terminal to what it was before readline() was called, and remove the Readline signal handlers for all signals, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    Function: void rl_free_line_state (void)
    This will free any partial state associated with the current input line (undo information, any partial history entry, any partially-entered keyboard macro, and any partially-entered numeric argument). This should be called before rl_cleanup_after_signal(). The Readline signal handler for SIGINT calls this to abort the current input line.

    Function: void rl_reset_after_signal (void)
    This will reinitialize the terminal and reinstall any Readline signal handlers, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    If an application does not wish Readline to catch SIGWINCH, it may call rl_resize_terminal() or rl_set_screen_size() to force Readline to update its idea of the terminal size when a SIGWINCH is received.

    Function: void rl_echo_signal_char (int sig)
    If an application wishes to install its own signal handlers, but still have readline display characters that generate signals, calling this function with sig set to SIGINT, SIGQUIT, or SIGTSTP will display the character generating that signal.

    Function: void rl_resize_terminal (void)
    Update Readline's internal screen size by reading values from the kernel.

    Function: void rl_set_screen_size (int rows, int cols)
    Set Readline's idea of the terminal size to rows rows and cols columns. If either rows or columns is less than or equal to 0, Readline's idea of that terminal dimension is unchanged.

    If an application does not want to install a SIGWINCH handler, but is still interested in the screen dimensions, Readline's idea of the screen size may be queried.

    Function: void rl_get_screen_size (int *rows, int *cols)
    Return Readline's idea of the terminal's size in the variables pointed to by the arguments.

    Function: void rl_reset_screen_size (void)
    Cause Readline to reobtain the screen size and recalculate its dimensions.

    The following functions install and remove Readline's signal handlers.

    Function: int rl_set_signals (void)
    Install Readline's signal handler for SIGINT, SIGQUIT, SIGTERM, SIGHUP, SIGALRM, SIGTSTP, SIGTTIN, SIGTTOU, and SIGWINCH, depending on the values of rl_catch_signals and rl_catch_sigwinch.

    Function: int rl_clear_signals (void)
    Remove all of the Readline signal handlers installed by rl_set_signals().


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6 Custom Completers

    Typically, a program that reads commands from the user has a way of disambiguating commands and data. If your program is one of these, then it can provide completion for commands, data, or both. The following sections describe how your program and Readline cooperate to provide this service.

    2.6.1 How Completing Works  The logic used to do completion.
    2.6.2 Completion Functions  Functions provided by Readline.
    2.6.3 Completion Variables  Variables which control completion.
    2.6.4 A Short Completion Example  An example of writing completer subroutines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.1 How Completing Works

    In order to complete some text, the full list of possible completions must be available. That is, it is not possible to accurately expand a partial word without knowing all of the possible words which make sense in that context. The Readline library provides the user interface to completion, and two of the most common completion functions: filename and username. For completing other types of text, you must write your own completion function. This section describes exactly what such functions must do, and provides an example.

    There are three major functions used to perform completion:

    1. The user-interface function rl_complete(). This function is called with the same arguments as other bindable Readline functions: count and invoking_key. It isolates the word to be completed and calls rl_completion_matches() to generate a list of possible completions. It then either lists the possible completions, inserts the possible completions, or actually performs the completion, depending on which behavior is desired.

    2. The internal function rl_completion_matches() uses an application-supplied generator function to generate the list of possible matches, and then returns the array of these matches. The caller should place the address of its generator function in rl_completion_entry_function.

    3. The generator function is called repeatedly from rl_completion_matches(), returning a string each time. The arguments to the generator function are text and state. text is the partial word to be completed. state is zero the first time the function is called, allowing the generator to perform any necessary initialization, and a positive non-zero integer for each subsequent call. The generator function returns (char *)NULL to inform rl_completion_matches() that there are no more possibilities left. Usually the generator function computes the list of possible completions when state is zero, and returns them one at a time on subsequent calls. Each string the generator function returns as a match must be allocated with malloc(); Readline frees the strings when it has finished with them. Such a generator function is referred to as an application-specific completion function.

    Function: int rl_complete (int ignore, int invoking_key)
    Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see rl_completion_matches()). The default is to do filename completion.

    Variable: rl_compentry_func_t * rl_completion_entry_function
    This is a pointer to the generator function for rl_completion_matches(). If the value of rl_completion_entry_function is NULL then the default filename generator function, rl_filename_completion_function(), is used. An application-specific completion function is a function whose address is assigned to rl_completion_entry_function and whose return values are used to generate possible completions.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.2 Completion Functions

    Here is the complete list of callable completion functions present in Readline.

    Function: int rl_complete_internal (int what_to_do)
    Complete the word at or before point. what_to_do says what to do with the completion. A value of `?' means list the possible completions. `TAB' means do standard completion. `*' means insert all of the possible completions. `!' means to display all of the possible completions, if there is more than one, as well as performing partial completion. `@' is similar to `!', but possible completions are not listed if the possible completions share a common prefix.

    Function: int rl_complete (int ignore, int invoking_key)
    Complete the word at or before point. You have supplied the function that does the initial simple matching selection algorithm (see rl_completion_matches() and rl_completion_entry_function). The default is to do filename completion. This calls rl_complete_internal() with an argument depending on invoking_key.

    Function: int rl_possible_completions (int count, int invoking_key)
    List the possible completions. See description of rl_complete (). This calls rl_complete_internal() with an argument of `?'.

    Function: int rl_insert_completions (int count, int invoking_key)
    Insert the list of possible completions into the line, deleting the partially-completed word. See description of rl_complete(). This calls rl_complete_internal() with an argument of `*'.

    Function: int rl_completion_mode (rl_command_func_t *cfunc)
    Returns the appropriate value to pass to rl_complete_internal() depending on whether cfunc was called twice in succession and the values of the show-all-if-ambiguous and show-all-if-unmodified variables. Application-specific completion functions may use this function to present the same interface as rl_complete().

    Function: char ** rl_completion_matches (const char *text, rl_compentry_func_t *entry_func)
    Returns an array of strings which is a list of completions for text. If there are no completions, returns NULL. The first entry in the returned array is the substitution for text. The remaining entries are the possible completions. The array is terminated with a NULL pointer.

    entry_func is a function of two args, and returns a char *. The first argument is text. The second is a state argument; it is zero on the first call, and non-zero on subsequent calls. entry_func returns a NULL pointer to the caller when there are no more matches.

    Function: char * rl_filename_completion_function (const char *text, int state)
    A generator function for filename completion in the general case. text is a partial filename. The Bash source is a useful reference for writing application-specific completion functions (the Bash completion functions call this and other Readline functions).

    Function: char * rl_username_completion_function (const char *text, int state)
    A completion generator for usernames. text contains a partial username preceded by a random character (usually `~'). As with all completion generators, state is zero on the first call and non-zero for subsequent calls.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.3 Completion Variables

    Variable: rl_compentry_func_t * rl_completion_entry_function
    A pointer to the generator function for rl_completion_matches(). NULL means to use rl_filename_completion_function(), the default filename completer.

    Variable: rl_completion_func_t * rl_attempted_completion_function
    A pointer to an alternative function to create matches. The function is called with text, start, and end. start and end are indices in rl_line_buffer defining the boundaries of text, which is a character string. If this function exists and returns NULL, or if this variable is set to NULL, then rl_complete() will call the value of rl_completion_entry_function to generate matches, otherwise the array of strings returned will be used. If this function sets the rl_attempted_completion_over variable to a non-zero value, Readline will not perform its default completion even if this function returns no matches.

    Variable: rl_quote_func_t * rl_filename_quoting_function
    A pointer to a function that will quote a filename in an application-specific fashion. This is called if filename completion is being attempted and one of the characters in rl_filename_quote_characters appears in a completed filename. The function is called with text, match_type, and quote_pointer. The text is the filename to be quoted. The match_type is either SINGLE_MATCH, if there is only one completion match, or MULT_MATCH. Some functions use this to decide whether or not to insert a closing quote character. The quote_pointer is a pointer to any opening quote character the user typed. Some functions choose to reset this character.

    Variable: rl_dequote_func_t * rl_filename_dequoting_function
    A pointer to a function that will remove application-specific quoting characters from a filename before completion is attempted, so those characters do not interfere with matching the text against names in the filesystem. It is called with text, the text of the word to be dequoted, and quote_char, which is the quoting character that delimits the filename (usually `'' or `"'). If quote_char is zero, the filename was not in an embedded string.

    Variable: rl_linebuf_func_t * rl_char_is_quoted_p
    A pointer to a function to call that determines whether or not a specific character in the line buffer is quoted, according to whatever quoting mechanism the program calling Readline uses. The function is called with two arguments: text, the text of the line, and index, the index of the character in the line. It is used to decide whether a character found in rl_completer_word_break_characters should be used to break words for the completer.

    Variable: rl_compignore_func_t * rl_ignore_some_completions_function
    This function, if defined, is called by the completer when real filename completion is done, after all the matching names have been generated. It is passed a NULL terminated array of matches. The first element (matches[0]) is the maximal substring common to all matches. This function can re-arrange the list of matches as required, but each element deleted from the array must be freed.

    Variable: rl_icppfunc_t * rl_directory_completion_hook
    This function, if defined, is allowed to modify the directory portion of filenames Readline completes. It could be used to expand symbolic links or shell variables in pathnames. It is called with the address of a string (the current directory name) as an argument, and may modify that string. If the string is replaced with a new string, the old value should be freed. Any modified directory name should have a trailing slash. The modified value will be used as part of the completion, replacing the directory portion of the pathname the user typed. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to opendir().

    The directory completion hook returns an integer that should be non-zero if the function modifies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_icppfunc_t * rl_directory_rewrite_hook;
    If non-zero, this is the address of a function to call when completing a directory name. This function takes the address of the directory name to be modified as an argument. Unlike rl_directory_completion_hook, it only modifies the directory name used in opendir, not what is displayed when the possible completions are printed or inserted. It is called before rl_directory_completion_hook. At the least, even if no other expansion is performed, this function should remove any quote characters from the directory name, because its result will be passed directly to opendir().

    The directory rewrite hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_icppfunc_t * rl_filename_stat_hook
    If non-zero, this is the address of a function for the completer to call before deciding which character to append to a completed name. This function modifies its filename name argument, and the modified value is passed to stat() to determine the file's type and characteristics. This function does not need to remove quote characters from the filename.

    The stat hook returns an integer that should be non-zero if the function modfies its directory argument. The function should not modify the directory argument if it returns 0.

    Variable: rl_dequote_func_t * rl_filename_rewrite_hook
    If non-zero, this is the address of a function called when reading directory entries from the filesystem for completion and comparing them to the partial word to be completed. The function should perform any necessary application or system-specific conversion on the filename, such as converting between character sets or converting from a filesystem format to a character input format. The function takes two arguments: fname, the filename to be converted, and fnlen, its length in bytes. It must either return its first argument (if no conversion takes place) or the converted filename in newly-allocated memory. The converted form is used to compare against the word to be completed, and, if it matches, is added to the list of matches. Readline will free the allocated string.

    Variable: rl_compdisp_func_t * rl_completion_display_matches_hook
    If non-zero, then this is the address of a function to call when completing a word would normally display the list of possible matches. This function is called in lieu of Readline displaying the list. It takes three arguments: (char **matches, int num_matches, int max_length) where matches is the array of matching strings, num_matches is the number of strings in that array, and max_length is the length of the longest string in that array. Readline provides a convenience function, rl_display_match_list, that takes care of doing the display to Readline's output stream. You may call that function from this hook.

    Variable: const char * rl_basic_word_break_characters
    The basic list of characters that signal a break between words for the completer routine. The default value of this variable is the characters which break words for completion in Bash: " \t\n\"\\'`@$><=;|&{(".

    Variable: const char * rl_basic_quote_characters
    A list of quote characters which can cause a word break.

    Variable: const char * rl_completer_word_break_characters
    The list of characters that signal a break between words for rl_complete_internal(). The default list is the value of rl_basic_word_break_characters.

    Variable: rl_cpvfunc_t * rl_completion_word_break_hook
    If non-zero, this is the address of a function to call when Readline is deciding where to separate words for word completion. It should return a character string like rl_completer_word_break_characters to be used to perform the current completion. The function may choose to set rl_completer_word_break_characters itself. If the function returns NULL, rl_completer_word_break_characters is used.

    Variable: const char * rl_completer_quote_characters
    A list of characters which can be used to quote a substring of the line. Completion occurs on the entire substring, and within the substring rl_completer_word_break_characters are treated as any other character, unless they also appear within this list.

    Variable: const char * rl_filename_quote_characters
    A list of characters that cause a filename to be quoted by the completer when they appear in a completed filename. The default is the null string.

    Variable: const char * rl_special_prefixes
    The list of characters that are word break characters, but should be left in text when it is passed to the completion function. Programs can use this to help determine what kind of completing to do. For instance, Bash sets this variable to "$@" so that it can complete shell variables and hostnames.

    Variable: int rl_completion_query_items
    Up to this many items will be displayed in response to a possible-completions call. After that, readline asks the user if she is sure she wants to see them all. The default value is 100. A negative value indicates that Readline should never ask the user.

    Variable: int rl_completion_append_character
    When a single completion alternative matches at the end of the command line, this character is appended to the inserted completion text. The default is a space character (` '). Setting this to the null character (`\0') prevents anything being appended automatically. This can be changed in application-specific completion functions to provide the "most sensible word separator character" according to an application-specific command line syntax specification.

    Variable: int rl_completion_suppress_append
    If non-zero, rl_completion_append_character is not appended to matches at the end of the command line, as described above. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function.

    Variable: int rl_completion_quote_character
    When Readline is completing quoted text, as delimited by one of the characters in rl_completer_quote_characters, it sets this variable to the quoting character found. This is set before any application-specific completion function is called.

    Variable: int rl_completion_suppress_quote
    If non-zero, Readline does not append a matching quote character when performing completion on a quoted string. It is set to 0 before any application-specific completion function is called, and may only be changed within such a function.

    Variable: int rl_completion_found_quote
    When Readline is completing quoted text, it sets this variable to a non-zero value if the word being completed contains or is delimited by any quoting characters, including backslashes. This is set before any application-specific completion function is called.

    Variable: int rl_completion_mark_symlink_dirs
    If non-zero, a slash will be appended to completed filenames that are symbolic links to directory names, subject to the value of the user-settable mark-directories variable. This variable exists so that application-specific completion functions can override the user's global preference (set via the mark-symlinked-directories Readline variable) if appropriate. This variable is set to the user's preference before any application-specific completion function is called, so unless that function modifies the value, the user's preferences are honored.

    Variable: int rl_ignore_completion_duplicates
    If non-zero, then duplicates in the matches are removed. The default is 1.

    Variable: int rl_filename_completion_desired
    Non-zero means that the results of the matches are to be treated as filenames. This is always zero when completion is attempted, and can only be changed within an application-specific completion function. If it is set to a non-zero value by such a function, directory names have a slash appended and Readline attempts to quote completed filenames if they contain any characters in rl_filename_quote_characters and rl_filename_quoting_desired is set to a non-zero value.

    Variable: int rl_filename_quoting_desired
    Non-zero means that the results of the matches are to be quoted using double quotes (or an application-specific quoting mechanism) if the completed filename contains any characters in rl_filename_quote_chars. This is always non-zero when completion is attempted, and can only be changed within an application-specific completion function. The quoting is effected via a call to the function pointed to by rl_filename_quoting_function.

    Variable: int rl_attempted_completion_over
    If an application-specific completion function assigned to rl_attempted_completion_function sets this variable to a non-zero value, Readline will not perform its default filename completion even if the application's completion function returns no matches. It should be set only by an application's completion function.

    Variable: int rl_sort_completion_matches
    If an application sets this variable to 0, Readline will not sort the list of completions (which implies that it cannot remove any duplicate completions). The default value is 1, which means that Readline will sort the completions and, depending on the value of rl_ignore_completion_duplicates, will attempt to remove duplicate matches.

    Variable: int rl_completion_type
    Set to a character describing the type of completion Readline is currently attempting; see the description of rl_complete_internal() (see section 2.6.2 Completion Functions) for the list of characters. This is set to the appropriate value before any application-specific completion function is called, allowing such functions to present the same interface as rl_complete().

    Variable: int rl_completion_invoking_key
    Set to the final character in the key sequence that invoked one of the completion functions that call rl_complete_internal(). This is set to the appropriate value before any application-specific completion function is called.

    Variable: int rl_inhibit_completion
    If this variable is non-zero, completion is inhibited. The completion character will be inserted as any other bound to self-insert.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.6.4 A Short Completion Example

    Here is a small application demonstrating the use of the GNU Readline library. It is called fileman, and the source code resides in `examples/fileman.c'. This sample application provides completion of command names, line editing features, and access to the history list.

     
    /* fileman.c -- A tiny application which demonstrates how to use the
       GNU Readline library.  This application interactively allows users
       to manipulate files and their modes. */
    
    #ifdef HAVE_CONFIG_H
    #  include <config.h>
    #endif
    
    #include <sys/types.h>
    #ifdef HAVE_SYS_FILE_H
    #  include <sys/file.h>
    #endif
    #include <sys/stat.h>
    
    #ifdef HAVE_UNISTD_H
    #  include <unistd.h>
    #endif
    
    #include <fcntl.h>
    #include <stdio.h>
    #include <errno.h>
    
    #if defined (HAVE_STRING_H)
    #  include <string.h>
    #else /* !HAVE_STRING_H */
    #  include <strings.h>
    #endif /* !HAVE_STRING_H */
    
    #ifdef HAVE_STDLIB_H
    #  include <stdlib.h>
    #endif
    
    #include <time.h>
    
    #include <readline/readline.h>
    #include <readline/history.h>
    
    extern char *xmalloc PARAMS((size_t));
    
    /* The names of functions that actually do the manipulation. */
    int com_list PARAMS((char *));
    int com_view PARAMS((char *));
    int com_rename PARAMS((char *));
    int com_stat PARAMS((char *));
    int com_pwd PARAMS((char *));
    int com_delete PARAMS((char *));
    int com_help PARAMS((char *));
    int com_cd PARAMS((char *));
    int com_quit PARAMS((char *));
    
    /* A structure which contains information on the commands this program
       can understand. */
    
    typedef struct {
      char *name;			/* User printable name of the function. */
      rl_icpfunc_t *func;		/* Function to call to do the job. */
      char *doc;			/* Documentation for this function.  */
    } COMMAND;
    
    COMMAND commands[] = {
      { "cd", com_cd, "Change to directory DIR" },
      { "delete", com_delete, "Delete FILE" },
      { "help", com_help, "Display this text" },
      { "?", com_help, "Synonym for `help'" },
      { "list", com_list, "List files in DIR" },
      { "ls", com_list, "Synonym for `list'" },
      { "pwd", com_pwd, "Print the current working directory" },
      { "quit", com_quit, "Quit using Fileman" },
      { "rename", com_rename, "Rename FILE to NEWNAME" },
      { "stat", com_stat, "Print out statistics on FILE" },
      { "view", com_view, "View the contents of FILE" },
      { (char *)NULL, (rl_icpfunc_t *)NULL, (char *)NULL }
    };
    
    /* Forward declarations. */
    char *stripwhite ();
    COMMAND *find_command ();
    
    /* The name of this program, as taken from argv[0]. */
    char *progname;
    
    /* When non-zero, this global means the user is done using this program. */
    int done;
    
    char *
    dupstr (s)
         char *s;
    {
      char *r;
    
      r = xmalloc (strlen (s) + 1);
      strcpy (r, s);
      return (r);
    }
    
    main (argc, argv)
         int argc;
         char **argv;
    {
      char *line, *s;
    
      progname = argv[0];
    
      initialize_readline ();	/* Bind our completer. */
    
      /* Loop reading and executing lines until the user quits. */
      for ( ; done == 0; )
        {
          line = readline ("FileMan: ");
    
          if (!line)
            break;
    
          /* Remove leading and trailing whitespace from the line.
             Then, if there is anything left, add it to the history list
             and execute it. */
          s = stripwhite (line);
    
          if (*s)
            {
              add_history (s);
              execute_line (s);
            }
    
          free (line);
        }
      exit (0);
    }
    
    /* Execute a command line. */
    int
    execute_line (line)
         char *line;
    {
      register int i;
      COMMAND *command;
      char *word;
    
      /* Isolate the command word. */
      i = 0;
      while (line[i] && whitespace (line[i]))
        i++;
      word = line + i;
    
      while (line[i] && !whitespace (line[i]))
        i++;
    
      if (line[i])
        line[i++] = '\0';
    
      command = find_command (word);
    
      if (!command)
        {
          fprintf (stderr, "%s: No such command for FileMan.\n", word);
          return (-1);
        }
    
      /* Get argument to command, if any. */
      while (whitespace (line[i]))
        i++;
    
      word = line + i;
    
      /* Call the function. */
      return ((*(command->func)) (word));
    }
    
    /* Look up NAME as the name of a command, and return a pointer to that
       command.  Return a NULL pointer if NAME isn't a command name. */
    COMMAND *
    find_command (name)
         char *name;
    {
      register int i;
    
      for (i = 0; commands[i].name; i++)
        if (strcmp (name, commands[i].name) == 0)
          return (&commands[i]);
    
      return ((COMMAND *)NULL);
    }
    
    /* Strip whitespace from the start and end of STRING.  Return a pointer
       into STRING. */
    char *
    stripwhite (string)
         char *string;
    {
      register char *s, *t;
    
      for (s = string; whitespace (*s); s++)
        ;
        
      if (*s == 0)
        return (s);
    
      t = s + strlen (s) - 1;
      while (t > s && whitespace (*t))
        t--;
      *++t = '\0';
    
      return s;
    }
    
    /* **************************************************************** */
    /*                                                                  */
    /*                  Interface to Readline Completion                */
    /*                                                                  */
    /* **************************************************************** */
    
    char *command_generator PARAMS((const char *, int));
    char **fileman_completion PARAMS((const char *, int, int));
    
    /* Tell the GNU Readline library how to complete.  We want to try to complete
       on command names if this is the first word in the line, or on filenames
       if not. */
    initialize_readline ()
    {
      /* Allow conditional parsing of the ~/.inputrc file. */
      rl_readline_name = "FileMan";
    
      /* Tell the completer that we want a crack first. */
      rl_attempted_completion_function = fileman_completion;
    }
    
    /* Attempt to complete on the contents of TEXT.  START and END bound the
       region of rl_line_buffer that contains the word to complete.  TEXT is
       the word to complete.  We can use the entire contents of rl_line_buffer
       in case we want to do some simple parsing.  Return the array of matches,
       or NULL if there aren't any. */
    char **
    fileman_completion (text, start, end)
         const char *text;
         int start, end;
    {
      char **matches;
    
      matches = (char **)NULL;
    
      /* If this word is at the start of the line, then it is a command
         to complete.  Otherwise it is the name of a file in the current
         directory. */
      if (start == 0)
        matches = rl_completion_matches (text, command_generator);
    
      return (matches);
    }
    
    /* Generator function for command completion.  STATE lets us know whether
       to start from scratch; without any state (i.e. STATE == 0), then we
       start at the top of the list. */
    char *
    command_generator (text, state)
         const char *text;
         int state;
    {
      static int list_index, len;
      char *name;
    
      /* If this is a new word to complete, initialize now.  This includes
         saving the length of TEXT for efficiency, and initializing the index
         variable to 0. */
      if (!state)
        {
          list_index = 0;
          len = strlen (text);
        }
    
      /* Return the next name which partially matches from the command list. */
      while (name = commands[list_index].name)
        {
          list_index++;
    
          if (strncmp (name, text, len) == 0)
            return (dupstr(name));
        }
    
      /* If no names matched, then return NULL. */
      return ((char *)NULL);
    }
    
    /* **************************************************************** */
    /*                                                                  */
    /*                       FileMan Commands                           */
    /*                                                                  */
    /* **************************************************************** */
    
    /* String to pass to system ().  This is for the LIST, VIEW and RENAME
       commands. */
    static char syscom[1024];
    
    /* List the file(s) named in arg. */
    com_list (arg)
         char *arg;
    {
      if (!arg)
        arg = "";
    
      sprintf (syscom, "ls -FClg %s", arg);
      return (system (syscom));
    }
    
    com_view (arg)
         char *arg;
    {
      if (!valid_argument ("view", arg))
        return 1;
    
    #if defined (__MSDOS__)
      /* more.com doesn't grok slashes in pathnames */
      sprintf (syscom, "less %s", arg);
    #else
      sprintf (syscom, "more %s", arg);
    #endif
      return (system (syscom));
    }
    
    com_rename (arg)
         char *arg;
    {
      too_dangerous ("rename");
      return (1);
    }
    
    com_stat (arg)
         char *arg;
    {
      struct stat finfo;
    
      if (!valid_argument ("stat", arg))
        return (1);
    
      if (stat (arg, &finfo) == -1)
        {
          perror (arg);
          return (1);
        }
    
      printf ("Statistics for `%s':\n", arg);
    
      printf ("%s has %d link%s, and is %d byte%s in length.\n",
    	  arg,
              finfo.st_nlink,
              (finfo.st_nlink == 1) ? "" : "s",
              finfo.st_size,
              (finfo.st_size == 1) ? "" : "s");
      printf ("Inode Last Change at: %s", ctime (&finfo.st_ctime));
      printf ("      Last access at: %s", ctime (&finfo.st_atime));
      printf ("    Last modified at: %s", ctime (&finfo.st_mtime));
      return (0);
    }
    
    com_delete (arg)
         char *arg;
    {
      too_dangerous ("delete");
      return (1);
    }
    
    /* Print out help for ARG, or for all of the commands if ARG is
       not present. */
    com_help (arg)
         char *arg;
    {
      register int i;
      int printed = 0;
    
      for (i = 0; commands[i].name; i++)
        {
          if (!*arg || (strcmp (arg, commands[i].name) == 0))
            {
              printf ("%s\t\t%s.\n", commands[i].name, commands[i].doc);
              printed++;
            }
        }
    
      if (!printed)
        {
          printf ("No commands match `%s'.  Possibilties are:\n", arg);
    
          for (i = 0; commands[i].name; i++)
            {
              /* Print in six columns. */
              if (printed == 6)
                {
                  printed = 0;
                  printf ("\n");
                }
    
              printf ("%s\t", commands[i].name);
              printed++;
            }
    
          if (printed)
            printf ("\n");
        }
      return (0);
    }
    
    /* Change to the directory ARG. */
    com_cd (arg)
         char *arg;
    {
      if (chdir (arg) == -1)
        {
          perror (arg);
          return 1;
        }
    
      com_pwd ("");
      return (0);
    }
    
    /* Print out the current working directory. */
    com_pwd (ignore)
         char *ignore;
    {
      char dir[1024], *s;
    
      s = getcwd (dir, sizeof(dir) - 1);
      if (s == 0)
        {
          printf ("Error getting pwd: %s\n", dir);
          return 1;
        }
    
      printf ("Current directory is %s\n", dir);
      return 0;
    }
    
    /* The user wishes to quit using this program.  Just set DONE non-zero. */
    com_quit (arg)
         char *arg;
    {
      done = 1;
      return (0);
    }
    
    /* Function which tells you that you can't do this. */
    too_dangerous (caller)
         char *caller;
    {
      fprintf (stderr,
               "%s: Too dangerous for me to distribute.  Write it yourself.\n",
               caller);
    }
    
    /* Return non-zero if ARG is a valid argument for CALLER, else print
       an error message and return zero. */
    int
    valid_argument (caller, arg)
         char *caller, *arg;
    {
      if (!arg || !*arg)
        {
          fprintf (stderr, "%s: Argument required.\n", caller);
          return (0);
        }
    
      return (1);
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful 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.

      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.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. 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.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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.

    5. 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:

      1. 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.

      2. 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 fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. 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.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve 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.

      10. 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.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. 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.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      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.

    6. 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, and that you preserve all their Warranty Disclaimers.

      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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. 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.

    8. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. 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 http://www.gnu.org/copyleft/.

      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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    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:

     
      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.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Concept Index

    Jump to:   A   C   E   I   K   N   R   V   Y  

    Index Entry Section

    A
    application-specific completion functions2.6 Custom Completers

    C
    command editing1.2.1 Readline Bare Essentials

    E
    editing command lines1.2.1 Readline Bare Essentials

    I
    initialization file, readline1.3 Readline Init File
    interaction, readline1.2 Readline Interaction

    K
    kill ring1.2.3 Readline Killing Commands
    killing text1.2.3 Readline Killing Commands

    N
    notation, readline1.2.1 Readline Bare Essentials

    R
    readline, function2.1 Basic Behavior

    V
    variables, readline1.3.1 Readline Init File Syntax

    Y
    yanking text1.2.3 Readline Killing Commands

    Jump to:   A   C   E   I   K   N   R   V   Y  


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    Function and Variable Index

    Jump to:   _  
    A   B   C   D   E   F   H   I   K   M   N   O   P   Q   R   S   T   U   V   Y  

    Index Entry Section

    _
    _rl_digit_p2.4.10 Utility Functions
    _rl_digit_value2.4.10 Utility Functions
    _rl_lowercase_p2.4.10 Utility Functions
    _rl_to_lower2.4.10 Utility Functions
    _rl_to_upper2.4.10 Utility Functions
    _rl_uppercase_p2.4.10 Utility Functions

    A
    abort (C-g)1.4.8 Some Miscellaneous Commands
    abort (C-g)1.4.8 Some Miscellaneous Commands
    accept-line (Newline or Return)1.4.2 Commands For Manipulating The History
    accept-line (Newline or Return)1.4.2 Commands For Manipulating The History

    B
    backward-char (C-b)1.4.1 Commands For Moving
    backward-char (C-b)1.4.1 Commands For Moving
    backward-delete-char (Rubout)1.4.3 Commands For Changing Text
    backward-delete-char (Rubout)1.4.3 Commands For Changing Text
    backward-kill-line (C-x Rubout)1.4.4 Killing And Yanking
    backward-kill-line (C-x Rubout)1.4.4 Killing And Yanking
    backward-kill-word (M-DEL)1.4.4 Killing And Yanking
    backward-kill-word (M-DEL)1.4.4 Killing And Yanking
    backward-word (M-b)1.4.1 Commands For Moving
    backward-word (M-b)1.4.1 Commands For Moving
    beginning-of-history (M-&#60;)1.4.2 Commands For Manipulating The History
    beginning-of-history (M-&#60;)1.4.2 Commands For Manipulating The History
    beginning-of-line (C-a)1.4.1 Commands For Moving
    beginning-of-line (C-a)1.4.1 Commands For Moving
    bell-style1.3.1 Readline Init File Syntax
    bind-tty-special-chars1.3.1 Readline Init File Syntax
    blink-matching-paren1.3.1 Readline Init File Syntax
    bracketed-paste-begin ()1.4.3 Commands For Changing Text
    bracketed-paste-begin ()1.4.3 Commands For Changing Text

    C
    call-last-kbd-macro (C-x e)1.4.7 Keyboard Macros
    call-last-kbd-macro (C-x e)1.4.7 Keyboard Macros
    capitalize-word (M-c)1.4.3 Commands For Changing Text
    capitalize-word (M-c)1.4.3 Commands For Changing Text
    character-search (C-])1.4.8 Some Miscellaneous Commands
    character-search (C-])1.4.8 Some Miscellaneous Commands
    character-search-backward (M-C-])1.4.8 Some Miscellaneous Commands
    character-search-backward (M-C-])1.4.8 Some Miscellaneous Commands
    clear-screen (C-l)1.4.1 Commands For Moving
    clear-screen (C-l)1.4.1 Commands For Moving
    colored-completion-prefix1.3.1 Readline Init File Syntax
    colored-stats1.3.1 Readline Init File Syntax
    comment-begin1.3.1 Readline Init File Syntax
    complete (TAB)1.4.6 Letting Readline Type For You
    complete (TAB)1.4.6 Letting Readline Type For You
    completion-display-width1.3.1 Readline Init File Syntax
    completion-ignore-case1.3.1 Readline Init File Syntax
    completion-map-case1.3.1 Readline Init File Syntax
    completion-prefix-display-length1.3.1 Readline Init File Syntax
    completion-query-items1.3.1 Readline Init File Syntax
    convert-meta1.3.1 Readline Init File Syntax
    copy-backward-word ()1.4.4 Killing And Yanking
    copy-backward-word ()1.4.4 Killing And Yanking
    copy-forward-word ()1.4.4 Killing And Yanking
    copy-forward-word ()1.4.4 Killing And Yanking
    copy-region-as-kill ()1.4.4 Killing And Yanking
    copy-region-as-kill ()1.4.4 Killing And Yanking

    D
    delete-char (C-d)1.4.3 Commands For Changing Text
    delete-char (C-d)1.4.3 Commands For Changing Text
    delete-char-or-list ()1.4.6 Letting Readline Type For You
    delete-char-or-list ()1.4.6 Letting Readline Type For You
    delete-horizontal-space ()1.4.4 Killing And Yanking
    delete-horizontal-space ()1.4.4 Killing And Yanking
    digit-argument (M-0, M-1, <small>...</small> M--)1.4.5 Specifying Numeric Arguments
    digit-argument (M-0, M-1, <small>...</small> M--)1.4.5 Specifying Numeric Arguments
    disable-completion1.3.1 Readline Init File Syntax
    do-uppercase-version (M-a, M-b, M-x, <small>...</small>)1.4.8 Some Miscellaneous Commands
    do-uppercase-version (M-a, M-b, M-x, <small>...</small>)1.4.8 Some Miscellaneous Commands
    downcase-word (M-l)1.4.3 Commands For Changing Text
    downcase-word (M-l)1.4.3 Commands For Changing Text
    dump-functions ()1.4.8 Some Miscellaneous Commands
    dump-functions ()1.4.8 Some Miscellaneous Commands
    dump-macros ()1.4.8 Some Miscellaneous Commands
    dump-macros ()1.4.8 Some Miscellaneous Commands
    dump-variables ()1.4.8 Some Miscellaneous Commands
    dump-variables ()1.4.8 Some Miscellaneous Commands

    E
    echo-control-characters1.3.1 Readline Init File Syntax
    editing-mode1.3.1 Readline Init File Syntax
    emacs-editing-mode (C-e)1.4.8 Some Miscellaneous Commands
    emacs-editing-mode (C-e)1.4.8 Some Miscellaneous Commands
    emacs-mode-string1.3.1 Readline Init File Syntax
    enable-bracketed-paste1.3.1 Readline Init File Syntax
    enable-keypad1.3.1 Readline Init File Syntax
    end-kbd-macro (C-x ))1.4.7 Keyboard Macros
    end-kbd-macro (C-x ))1.4.7 Keyboard Macros
    end-of-file (usually C-d)1.4.3 Commands For Changing Text
    end-of-file (usually C-d)1.4.3 Commands For Changing Text
    end-of-history (M-&#62;)1.4.2 Commands For Manipulating The History
    end-of-history (M-&#62;)1.4.2 Commands For Manipulating The History
    end-of-line (C-e)1.4.1 Commands For Moving
    end-of-line (C-e)1.4.1 Commands For Moving
    exchange-point-and-mark (C-x C-x)1.4.8 Some Miscellaneous Commands
    exchange-point-and-mark (C-x C-x)1.4.8 Some Miscellaneous Commands
    expand-tilde1.3.1 Readline Init File Syntax

    F
    forward-backward-delete-char ()1.4.3 Commands For Changing Text
    forward-backward-delete-char ()1.4.3 Commands For Changing Text
    forward-char (C-f)1.4.1 Commands For Moving
    forward-char (C-f)1.4.1 Commands For Moving
    forward-search-history (C-s)1.4.2 Commands For Manipulating The History
    forward-search-history (C-s)1.4.2 Commands For Manipulating The History
    forward-word (M-f)1.4.1 Commands For Moving
    forward-word (M-f)1.4.1 Commands For Moving

    H
    history-preserve-point1.3.1 Readline Init File Syntax
    history-search-backward ()1.4.2 Commands For Manipulating The History
    history-search-backward ()1.4.2 Commands For Manipulating The History
    history-search-forward ()1.4.2 Commands For Manipulating The History
    history-search-forward ()1.4.2 Commands For Manipulating The History
    history-size1.3.1 Readline Init File Syntax
    history-substr-search-backward ()1.4.2 Commands For Manipulating The History
    history-substr-search-backward ()1.4.2 Commands For Manipulating The History
    history-substr-search-forward ()1.4.2 Commands For Manipulating The History
    history-substr-search-forward ()1.4.2 Commands For Manipulating The History
    horizontal-scroll-mode1.3.1 Readline Init File Syntax

    I
    input-meta1.3.1 Readline Init File Syntax
    insert-comment (M-#)1.4.8 Some Miscellaneous Commands
    insert-comment (M-#)1.4.8 Some Miscellaneous Commands
    insert-completions (M-*)1.4.6 Letting Readline Type For You
    insert-completions (M-*)1.4.6 Letting Readline Type For You
    isearch-terminators1.3.1 Readline Init File Syntax

    K
    keymap1.3.1 Readline Init File Syntax
    kill-line (C-k)1.4.4 Killing And Yanking
    kill-line (C-k)1.4.4 Killing And Yanking
    kill-region ()1.4.4 Killing And Yanking
    kill-region ()1.4.4 Killing And Yanking
    kill-whole-line ()1.4.4 Killing And Yanking
    kill-whole-line ()1.4.4 Killing And Yanking
    kill-word (M-d)1.4.4 Killing And Yanking
    kill-word (M-d)1.4.4 Killing And Yanking

    M
    mark-modified-lines1.3.1 Readline Init File Syntax
    mark-symlinked-directories1.3.1 Readline Init File Syntax
    match-hidden-files1.3.1 Readline Init File Syntax
    menu-complete ()1.4.6 Letting Readline Type For You
    menu-complete ()1.4.6 Letting Readline Type For You
    menu-complete-backward ()1.4.6 Letting Readline Type For You
    menu-complete-backward ()1.4.6 Letting Readline Type For You
    menu-complete-display-prefix1.3.1 Readline Init File Syntax
    meta-flag1.3.1 Readline Init File Syntax

    N
    next-history (C-n)1.4.2 Commands For Manipulating The History
    next-history (C-n)1.4.2 Commands For Manipulating The History
    non-incremental-forward-search-history (M-n)1.4.2 Commands For Manipulating The History
    non-incremental-forward-search-history (M-n)1.4.2 Commands For Manipulating The History
    non-incremental-reverse-search-history (M-p)1.4.2 Commands For Manipulating The History
    non-incremental-reverse-search-history (M-p)1.4.2 Commands For Manipulating The History

    O
    output-meta1.3.1 Readline Init File Syntax
    overwrite-mode ()1.4.3 Commands For Changing Text
    overwrite-mode ()1.4.3 Commands For Changing Text

    P
    page-completions1.3.1 Readline Init File Syntax
    possible-completions (M-?)1.4.6 Letting Readline Type For You
    possible-completions (M-?)1.4.6 Letting Readline Type For You
    prefix-meta (ESC)1.4.8 Some Miscellaneous Commands
    prefix-meta (ESC)1.4.8 Some Miscellaneous Commands
    previous-history (C-p)1.4.2 Commands For Manipulating The History
    previous-history (C-p)1.4.2 Commands For Manipulating The History
    print-last-kbd-macro ()1.4.7 Keyboard Macros
    print-last-kbd-macro ()1.4.7 Keyboard Macros

    Q
    quoted-insert (C-q or C-v)1.4.3 Commands For Changing Text
    quoted-insert (C-q or C-v)1.4.3 Commands For Changing Text

    R
    re-read-init-file (C-x C-r)1.4.8 Some Miscellaneous Commands
    re-read-init-file (C-x C-r)1.4.8 Some Miscellaneous Commands
    readline2.1 Basic Behavior
    redraw-current-line ()1.4.1 Commands For Moving
    redraw-current-line ()1.4.1 Commands For Moving
    reverse-search-history (C-r)1.4.2 Commands For Manipulating The History
    reverse-search-history (C-r)1.4.2 Commands For Manipulating The History
    revert-all-at-newline1.3.1 Readline Init File Syntax
    revert-line (M-r)1.4.8 Some Miscellaneous Commands
    revert-line (M-r)1.4.8 Some Miscellaneous Commands
    rl_add_defun2.4.1 Naming a Function
    rl_add_funmap_entry2.4.4 Associating Function Names and Bindings
    rl_add_undo2.4.5 Allowing Undoing
    rl_alphabetic2.4.10 Utility Functions
    rl_already_prompted2.3 Readline Variables
    rl_attempted_completion_function2.6.3 Completion Variables
    rl_attempted_completion_over2.6.3 Completion Variables
    rl_basic_quote_characters2.6.3 Completion Variables
    rl_basic_word_break_characters2.6.3 Completion Variables
    rl_begin_undo_group2.4.5 Allowing Undoing
    rl_bind_key2.4.3 Binding Keys
    rl_bind_key_if_unbound2.4.3 Binding Keys
    rl_bind_key_if_unbound_in_map2.4.3 Binding Keys
    rl_bind_key_in_map2.4.3 Binding Keys
    rl_bind_keyseq2.4.3 Binding Keys
    rl_bind_keyseq_if_unbound2.4.3 Binding Keys
    rl_bind_keyseq_if_unbound_in_map2.4.3 Binding Keys
    rl_bind_keyseq_in_map2.4.3 Binding Keys
    rl_binding_keymap2.3 Readline Variables
    rl_callback_handler_install2.4.12 Alternate Interface
    rl_callback_handler_remove2.4.12 Alternate Interface
    rl_callback_read_char2.4.12 Alternate Interface
    rl_callback_sigcleanup2.4.12 Alternate Interface
    rl_catch_signals2.5 Readline Signal Handling
    rl_catch_sigwinch2.5 Readline Signal Handling
    rl_change_environment2.5 Readline Signal Handling
    rl_char_is_quoted_p2.6.3 Completion Variables
    rl_cleanup_after_signal2.5 Readline Signal Handling
    rl_clear_history2.4.11 Miscellaneous Functions
    rl_clear_message2.4.6 Redisplay
    rl_clear_pending_input2.4.8 Character Input
    rl_clear_signals2.5 Readline Signal Handling
    rl_clear_visible_line2.4.6 Redisplay
    rl_complete2.6.1 How Completing Works
    rl_complete2.6.2 Completion Functions
    rl_complete_internal2.6.2 Completion Functions
    rl_completer_quote_characters2.6.3 Completion Variables
    rl_completer_word_break_characters2.6.3 Completion Variables
    rl_completion_append_character2.6.3 Completion Variables
    rl_completion_display_matches_hook2.6.3 Completion Variables
    rl_completion_entry_function2.6.1 How Completing Works
    rl_completion_entry_function2.6.3 Completion Variables
    rl_completion_found_quote2.6.3 Completion Variables
    rl_completion_invoking_key2.6.3 Completion Variables
    rl_completion_mark_symlink_dirs2.6.3 Completion Variables
    rl_completion_matches2.6.2 Completion Functions
    rl_completion_mode2.6.2 Completion Functions
    rl_completion_query_items2.6.3 Completion Variables
    rl_completion_quote_character2.6.3 Completion Variables
    rl_completion_suppress_append2.6.3 Completion Variables
    rl_completion_suppress_quote2.6.3 Completion Variables
    rl_completion_type2.6.3 Completion Variables
    rl_completion_word_break_hook2.6.3 Completion Variables
    rl_copy_keymap2.4.2 Selecting a Keymap
    rl_copy_text2.4.7 Modifying Text
    rl_crlf2.4.6 Redisplay
    rl_delete_text2.4.7 Modifying Text
    rl_deprep_term_function2.3 Readline Variables
    rl_deprep_terminal2.4.9 Terminal Management
    rl_ding2.4.10 Utility Functions
    rl_directory_completion_hook2.6.3 Completion Variables
    rl_directory_rewrite_hook;2.6.3 Completion Variables
    rl_discard_keymap2.4.2 Selecting a Keymap
    rl_dispatching2.3 Readline Variables
    rl_display_match_list2.4.10 Utility Functions
    rl_display_prompt2.3 Readline Variables
    rl_do_undo2.4.5 Allowing Undoing
    rl_done2.3 Readline Variables
    rl_echo_signal_char2.5 Readline Signal Handling
    rl_editing_mode2.3 Readline Variables
    rl_end2.3 Readline Variables
    rl_end_undo_group2.4.5 Allowing Undoing
    rl_erase_empty_line2.3 Readline Variables
    rl_event_hook2.3 Readline Variables
    rl_execute_next2.4.8 Character Input
    rl_executing_key2.3 Readline Variables
    rl_executing_keymap2.3 Readline Variables
    rl_executing_keyseq2.3 Readline Variables
    rl_executing_macro2.3 Readline Variables
    rl_expand_prompt2.4.6 Redisplay
    rl_explicit_arg2.3 Readline Variables
    rl_extend_line_buffer2.4.10 Utility Functions
    rl_filename_completion_desired2.6.3 Completion Variables
    rl_filename_completion_function2.6.2 Completion Functions
    rl_filename_dequoting_function2.6.3 Completion Variables
    rl_filename_quote_characters2.6.3 Completion Variables
    rl_filename_quoting_desired2.6.3 Completion Variables
    rl_filename_quoting_function2.6.3 Completion Variables
    rl_filename_rewrite_hook2.6.3 Completion Variables
    rl_filename_stat_hook2.6.3 Completion Variables
    rl_forced_update_display2.4.6 Redisplay
    rl_free2.4.10 Utility Functions
    rl_free_keymap2.4.2 Selecting a Keymap
    rl_free_line_state2.5 Readline Signal Handling
    rl_free_undo_list2.4.5 Allowing Undoing
    rl_function_dumper2.4.4 Associating Function Names and Bindings
    rl_function_of_keyseq2.4.4 Associating Function Names and Bindings
    rl_funmap_names2.4.4 Associating Function Names and Bindings
    rl_generic_bind2.4.3 Binding Keys
    rl_get_keymap2.4.2 Selecting a Keymap
    rl_get_keymap_by_name2.4.2 Selecting a Keymap
    rl_get_keymap_name2.4.2 Selecting a Keymap
    rl_get_screen_size2.5 Readline Signal Handling
    rl_get_termcap2.4.11 Miscellaneous Functions
    rl_getc2.4.8 Character Input
    rl_getc_function2.3 Readline Variables
    rl_gnu_readline_p2.3 Readline Variables
    rl_ignore_completion_duplicates2.6.3 Completion Variables
    rl_ignore_some_completions_function2.6.3 Completion Variables
    rl_inhibit_completion2.6.3 Completion Variables
    rl_initialize2.4.10 Utility Functions
    rl_input_available_hook2.3 Readline Variables
    rl_insert_completions2.6.2 Completion Functions
    rl_insert_text2.4.7 Modifying Text
    rl_instream2.3 Readline Variables
    rl_invoking_keyseqs2.4.4 Associating Function Names and Bindings
    rl_invoking_keyseqs_in_map2.4.4 Associating Function Names and Bindings
    rl_key_sequence_length2.3 Readline Variables
    rl_kill_text2.4.7 Modifying Text
    rl_last_func2.3 Readline Variables
    rl_library_version2.3 Readline Variables
    rl_line_buffer2.3 Readline Variables
    rl_list_funmap_names2.4.4 Associating Function Names and Bindings
    rl_macro_bind2.4.11 Miscellaneous Functions
    rl_macro_dumper2.4.11 Miscellaneous Functions
    rl_make_bare_keymap2.4.2 Selecting a Keymap
    rl_make_keymap2.4.2 Selecting a Keymap
    rl_mark2.3 Readline Variables
    rl_message2.4.6 Redisplay
    rl_modifying2.4.5 Allowing Undoing
    rl_named_function2.4.4 Associating Function Names and Bindings
    rl_num_chars_to_read2.3 Readline Variables
    rl_numeric_arg2.3 Readline Variables
    rl_on_new_line2.4.6 Redisplay
    rl_on_new_line_with_prompt2.4.6 Redisplay
    rl_outstream2.3 Readline Variables
    rl_parse_and_bind2.4.3 Binding Keys
    rl_pending_input2.3 Readline Variables
    rl_pending_signal2.5 Readline Signal Handling
    rl_persistent_signal_handlers2.5 Readline Signal Handling
    rl_point2.3 Readline Variables
    rl_possible_completions2.6.2 Completion Functions
    rl_pre_input_hook2.3 Readline Variables
    rl_prefer_env_winsize2.3 Readline Variables
    rl_prep_term_function2.3 Readline Variables
    rl_prep_terminal2.4.9 Terminal Management
    rl_prompt2.3 Readline Variables
    rl_push_macro_input2.4.7 Modifying Text
    rl_read_init_file2.4.3 Binding Keys
    rl_read_key2.4.8 Character Input
    rl_readline_name2.3 Readline Variables
    rl_readline_state2.3 Readline Variables
    rl_readline_version2.3 Readline Variables
    rl_redisplay2.4.6 Redisplay
    rl_redisplay_function2.3 Readline Variables
    rl_replace_line2.4.10 Utility Functions
    rl_reset_after_signal2.5 Readline Signal Handling
    rl_reset_line_state2.4.6 Redisplay
    rl_reset_screen_size2.5 Readline Signal Handling
    rl_reset_terminal2.4.9 Terminal Management
    rl_resize_terminal2.5 Readline Signal Handling
    rl_restore_prompt2.4.6 Redisplay
    rl_restore_state2.4.10 Utility Functions
    rl_save_prompt2.4.6 Redisplay
    rl_save_state2.4.10 Utility Functions
    rl_set_key2.4.3 Binding Keys
    rl_set_keyboard_input_timeout2.4.8 Character Input
    rl_set_keymap2.4.2 Selecting a Keymap
    rl_set_paren_blink_timeout2.4.11 Miscellaneous Functions
    rl_set_prompt2.4.6 Redisplay
    rl_set_screen_size2.5 Readline Signal Handling
    rl_set_signals2.5 Readline Signal Handling
    rl_show_char2.4.6 Redisplay
    rl_signal_event_hook2.3 Readline Variables
    rl_sort_completion_matches2.6.3 Completion Variables
    rl_special_prefixes2.6.3 Completion Variables
    rl_startup_hook2.3 Readline Variables
    rl_stuff_char2.4.8 Character Input
    rl_terminal_name2.3 Readline Variables
    rl_tty_set_default_bindings2.4.9 Terminal Management
    rl_tty_set_echoing2.4.9 Terminal Management
    rl_tty_unset_default_bindings2.4.9 Terminal Management
    rl_unbind_command_in_map2.4.3 Binding Keys
    rl_unbind_function_in_map2.4.3 Binding Keys
    rl_unbind_key2.4.3 Binding Keys
    rl_unbind_key_in_map2.4.3 Binding Keys
    rl_username_completion_function2.6.2 Completion Functions
    rl_variable_bind2.4.11 Miscellaneous Functions
    rl_variable_dumper2.4.11 Miscellaneous Functions
    rl_variable_value2.4.11 Miscellaneous Functions

    S
    self-insert (a, b, A, 1, !, <small>...</small>)1.4.3 Commands For Changing Text
    self-insert (a, b, A, 1, !, <small>...</small>)1.4.3 Commands For Changing Text
    set-mark (C-@)1.4.8 Some Miscellaneous Commands
    set-mark (C-@)1.4.8 Some Miscellaneous Commands
    show-all-if-ambiguous1.3.1 Readline Init File Syntax
    show-all-if-unmodified1.3.1 Readline Init File Syntax
    show-mode-in-prompt1.3.1 Readline Init File Syntax
    skip-completed-text1.3.1 Readline Init File Syntax
    skip-csi-sequence ()1.4.8 Some Miscellaneous Commands
    skip-csi-sequence ()1.4.8 Some Miscellaneous Commands
    start-kbd-macro (C-x ()1.4.7 Keyboard Macros
    start-kbd-macro (C-x ()1.4.7 Keyboard Macros

    T
    tab-insert (M-TAB)1.4.3 Commands For Changing Text
    tab-insert (M-TAB)1.4.3 Commands For Changing Text
    tilde-expand (M-~)1.4.8 Some Miscellaneous Commands
    tilde-expand (M-~)1.4.8 Some Miscellaneous Commands
    transpose-chars (C-t)1.4.3 Commands For Changing Text
    transpose-chars (C-t)1.4.3 Commands For Changing Text
    transpose-words (M-t)1.4.3 Commands For Changing Text
    transpose-words (M-t)1.4.3 Commands For Changing Text

    U
    undo (C-_ or C-x C-u)1.4.8 Some Miscellaneous Commands
    undo (C-_ or C-x C-u)1.4.8 Some Miscellaneous Commands
    universal-argument ()1.4.5 Specifying Numeric Arguments
    universal-argument ()1.4.5 Specifying Numeric Arguments
    unix-filename-rubout ()1.4.4 Killing And Yanking
    unix-filename-rubout ()1.4.4 Killing And Yanking
    unix-line-discard (C-u)1.4.4 Killing And Yanking
    unix-line-discard (C-u)1.4.4 Killing And Yanking
    unix-word-rubout (C-w)1.4.4 Killing And Yanking
    unix-word-rubout (C-w)1.4.4 Killing And Yanking
    upcase-word (M-u)1.4.3 Commands For Changing Text
    upcase-word (M-u)1.4.3 Commands For Changing Text

    V
    vi-cmd-mode-string1.3.1 Readline Init File Syntax
    vi-editing-mode (M-C-j)1.4.8 Some Miscellaneous Commands
    vi-editing-mode (M-C-j)1.4.8 Some Miscellaneous Commands
    vi-ins-mode-string1.3.1 Readline Init File Syntax
    visible-stats1.3.1 Readline Init File Syntax

    Y
    yank (C-y)1.4.4 Killing And Yanking
    yank (C-y)1.4.4 Killing And Yanking
    yank-last-arg (M-. or M-_)1.4.2 Commands For Manipulating The History
    yank-last-arg (M-. or M-_)1.4.2 Commands For Manipulating The History
    yank-nth-arg (M-C-y)1.4.2 Commands For Manipulating The History
    yank-nth-arg (M-C-y)1.4.2 Commands For Manipulating The History
    yank-pop (M-y)1.4.4 Killing And Yanking
    yank-pop (M-y)1.4.4 Killing And Yanking

    Jump to:   _  
    A   B   C   D   E   F   H   I   K   M   N   O   P   Q   R   S   T   U   V   Y  


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Command Line Editing
    2. Programming with GNU Readline
    A. GNU Free Documentation License
    Concept Index
    Function and Variable Index

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by chet on September, 7 2016 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by chet on September, 7 2016 using texi2html readline-7.0/doc/history.html000664 000436 000000 00000305152 12764101652 016367 0ustar00chetwheel000000 000000 GNU History Library:
    [Top] [Contents] [Index] [ ? ]

    GNU History Library

    This document describes the GNU History library, a programming tool that provides a consistent user interface for recalling lines of previously typed input.

    1. Using History Interactively  GNU History User's Manual.
    2. Programming with GNU History  GNU History Programmer's Manual.
    A. GNU Free Documentation License  License for copying this manual.
    B. Concept Index  Index of concepts described in this manual.
    C. Function and Variable Index  Index of externally visible functions and variables.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Using History Interactively

    This chapter describes how to use the GNU History Library interactively, from a user's standpoint. It should be considered a user's guide. For information on using the GNU History Library in your own programs, see section 2. Programming with GNU History.

    1.1 History Expansion  What it feels like using History as a user.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 History Expansion

    The History library provides a history expansion feature that is similar to the history expansion provided by csh. This section describes the syntax used to manipulate the history information.

    History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly.

    History expansion takes place in two parts. The first is to determine which line from the history list should be used during substitution. The second is to select portions of that line for inclusion into the current one. The line selected from the history is called the event, and the portions of that line that are acted upon are called words. Various modifiers are available to manipulate the selected words. The line is broken into words in the same fashion that Bash does, so that several words surrounded by quotes are considered one word. History expansions are introduced by the appearance of the history expansion character, which is `!' by default.

    1.1.1 Event Designators  How to specify which history line to use.
    1.1.2 Word Designators  Specifying which words are of interest.
    1.1.3 Modifiers  Modifying the results of substitution.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.1 Event Designators

    An event designator is a reference to a command line entry in the history list. Unless the reference is absolute, events are relative to the current position in the history list.

    !
    Start a history substitution, except when followed by a space, tab, the end of the line, or `='.

    !n
    Refer to command line n.

    !-n
    Refer to the command n lines back.

    !!
    Refer to the previous command. This is a synonym for `!-1'.

    !string
    Refer to the most recent command preceding the current position in the history list starting with string.

    !?string[?]
    Refer to the most recent command preceding the current position in the history list containing string. The trailing `?' may be omitted if the string is followed immediately by a newline.

    ^string1^string2^
    Quick Substitution. Repeat the last command, replacing string1 with string2. Equivalent to !!:s/string1/string2/.

    !#
    The entire command line typed so far.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.2 Word Designators

    Word designators are used to select desired words from the event. A `:' separates the event specification from the word designator. It may be omitted if the word designator begins with a `^', `$', `*', `-', or `%'. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line separated by single spaces.

    For example,

    !!
    designates the preceding command. When you type this, the preceding command is repeated in toto.

    !!:$
    designates the last argument of the preceding command. This may be shortened to !$.

    !fi:2
    designates the second argument of the most recent command starting with the letters fi.

    Here are the word designators:

    0 (zero)
    The 0th word. For many applications, this is the command word.

    n
    The nth word.

    ^
    The first argument; that is, word 1.

    $
    The last argument.

    %
    The word matched by the most recent `?string?' search.

    x-y
    A range of words; `-y' abbreviates `0-y'.

    *
    All of the words, except the 0th. This is a synonym for `1-$'. It is not an error to use `*' if there is just one word in the event; the empty string is returned in that case.

    x*
    Abbreviates `x-$'

    x-
    Abbreviates `x-$' like `x*', but omits the last word.

    If a word designator is supplied without an event specification, the previous command is used as the event.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1.3 Modifiers

    After the optional word designator, you can add a sequence of one or more of the following modifiers, each preceded by a `:'.

    h
    Remove a trailing pathname component, leaving only the head.

    t
    Remove all leading pathname components, leaving the tail.

    r
    Remove a trailing suffix of the form `.suffix', leaving the basename.

    e
    Remove all but the trailing suffix.

    p
    Print the new command but do not execute it.

    s/old/new/
    Substitute new for the first occurrence of old in the event line. Any delimiter may be used in place of `/'. The delimiter may be quoted in old and new with a single backslash. If `&' appears in new, it is replaced by old. A single backslash will quote the `&'. The final delimiter is optional if it is the last character on the input line.

    &
    Repeat the previous substitution.

    g
    a
    Cause changes to be applied over the entire event line. Used in conjunction with `s', as in gs/old/new/, or with `&'.

    G
    Apply the following `s' modifier once to each word in the event.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2. Programming with GNU History

    This chapter describes how to interface programs that you write with the GNU History Library. It should be considered a technical guide. For information on the interactive use of GNU History, see section 1. Using History Interactively.

    2.1 Introduction to History  What is the GNU History library for?
    2.2 History Storage  How information is stored.
    2.3 History Functions  Functions that you can use.
    2.4 History Variables  Variables that control behaviour.
    2.5 History Programming Example  Example of using the GNU History Library.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.1 Introduction to History

    Many programs read input from the user a line at a time. The GNU History library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones.

    The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history expansion function is available which provides for a consistent user interface across different programs.

    The user using programs written with the History library has the benefit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are similar to the history substitution provided by csh.

    If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advantage of command line editing.

    Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file <readline/history.h> in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the public data structures.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.2 History Storage

    The history list is an array of history entries. A history entry is declared as follows:

     
    typedef void *histdata_t;
    
    typedef struct _hist_entry {
      char *line;
      char *timestamp;
      histdata_t data;
    } HIST_ENTRY;
    

    The history list itself might therefore be declared as

     
    HIST_ENTRY **the_history_list;
    

    The state of the History library is encapsulated into a single structure:

     
    /*
     * A structure used to pass around the current state of the history.
     */
    typedef struct _hist_state {
      HIST_ENTRY **entries; /* Pointer to the entries themselves. */
      int offset;           /* The location pointer within this array. */
      int length;           /* Number of elements within this array. */
      int size;             /* Number of slots allocated to this array. */
      int flags;
    } HISTORY_STATE;
    

    If the flags member includes HS_STIFLED, the history has been stifled.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3 History Functions

    This section describes the calling sequence for the various functions exported by the GNU History library.

    2.3.1 Initializing History and State Management  Functions to call when you want to use history in a program.
    2.3.2 History List Management  Functions used to manage the list of history entries.
    2.3.3 Information About the History List  Functions returning information about the history list.
    2.3.4 Moving Around the History List  Functions used to change the position in the history list.
    2.3.5 Searching the History List  Functions to search the history list for entries containing a string.
    2.3.6 Managing the History File  Functions that read and write a file containing the history list.
    2.3.7 History Expansion  Functions to perform csh-like history expansion.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.1 Initializing History and State Management

    This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program.

    Function: void using_history (void)
    Begin a session in which the history functions might be used. This initializes the interactive variables.

    Function: HISTORY_STATE * history_get_history_state (void)
    Return a structure describing the current state of the input history.

    Function: void history_set_history_state (HISTORY_STATE *state)
    Set the state of the history list according to state.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.2 History List Management

    These functions manage individual entries on the history list, or set parameters managing the list itself.

    Function: void add_history (const char *string)
    Place string at the end of the history list. The associated data field (if any) is set to NULL.

    Function: void add_history_time (const char *string)
    Change the time stamp associated with the most recent history entry to string.

    Function: HIST_ENTRY * remove_history (int which)
    Remove history entry at offset which from the history. The removed element is returned so you can free the line, data, and containing structure.

    Function: histdata_t free_history_entry (HIST_ENTRY *histent)
    Free the history entry histent and any history library private data associated with it. Returns the application-specific data so the caller can dispose of it.

    Function: HIST_ENTRY * replace_history_entry (int which, const char *line, histdata_t data)
    Make the history entry at offset which have line and data. This returns the old entry so the caller can dispose of any application-specific data. In the case of an invalid which, a NULL pointer is returned.

    Function: void clear_history (void)
    Clear the history list by deleting all the entries.

    Function: void stifle_history (int max)
    Stifle the history list, remembering only the last max entries.

    Function: int unstifle_history (void)
    Stop stifling the history. This returns the previously-set maximum number of history entries (as set by stifle_history()). The value is positive if the history was stifled, negative if it wasn't.

    Function: int history_is_stifled (void)
    Returns non-zero if the history is stifled, zero if it is not.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.3 Information About the History List

    These functions return information about the entire history list or individual list entries.

    Function: HIST_ENTRY ** history_list (void)
    Return a NULL terminated array of HIST_ENTRY * which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NULL.

    Function: int where_history (void)
    Returns the offset of the current history element.

    Function: HIST_ENTRY * current_history (void)
    Return the history entry at the current position, as determined by where_history(). If there is no entry there, return a NULL pointer.

    Function: HIST_ENTRY * history_get (int offset)
    Return the history entry at position offset, starting from history_base (see section 2.4 History Variables). If there is no entry there, or if offset is greater than the history length, return a NULL pointer.

    Function: time_t history_get_time (HIST_ENTRY *entry)
    Return the time stamp associated with the history entry entry. If the timestamp is missing or invalid, return 0.

    Function: int history_total_bytes (void)
    Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.4 Moving Around the History List

    These functions allow the current index into the history list to be set or changed.

    Function: int history_set_pos (int pos)
    Set the current history offset to pos, an absolute index into the list. Returns 1 on success, 0 if pos is less than zero or greater than the number of history entries.

    Function: HIST_ENTRY * previous_history (void)
    Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer.

    Function: HIST_ENTRY * next_history (void)
    If the current history offset refers to a valid history entry, increment the current history offset. If the possibly-incremented history offset refers to a valid history entry, return a pointer to that entry; otherwise, return a BNULL pointer.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.5 Searching the History List

    These functions allow searching of the history list for entries containing a specific string. Searching may be performed both forward and backward from the current history position. The search may be anchored, meaning that the string must match at the beginning of the history entry.

    Function: int history_search (const char *string, int direction)
    Search the history for string, starting at the current history offset. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where string was found. Otherwise, nothing is changed, and a -1 is returned.

    Function: int history_search_prefix (const char *string, int direction)
    Search the history for string, starting at the current history offset. The search is anchored: matching lines must begin with string. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned.

    Function: int history_search_pos (const char *string, int direction, int pos)
    Search for string in the history list, starting at pos, an absolute index into the list. If direction is negative, the search proceeds backward from pos, otherwise forward. Returns the absolute index of the history element where string was found, or -1 otherwise.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.6 Managing the History File

    The History library can read the history from and write it to a file. This section documents the functions for managing a history file.

    Function: int read_history (const char *filename)
    Add the contents of filename to the history list, a line at a time. If filename is NULL, then read from `~/.history'. Returns 0 if successful, or errno if not.

    Function: int read_history_range (const char *filename, int from, int to)
    Read a range of lines from filename, adding them to the history list. Start reading at line from and end at to. If from is zero, start at the beginning. If to is less than from, then read until the end of the file. If filename is NULL, then read from `~/.history'. Returns 0 if successful, or errno if not.

    Function: int write_history (const char *filename)
    Write the current history to filename, overwriting filename if necessary. If filename is NULL, then write the history list to `~/.history'. Returns 0 on success, or errno on a read or write error.

    Function: int append_history (int nelements, const char *filename)
    Append the last nelements of the history list to filename. If filename is NULL, then append to `~/.history'. Returns 0 on success, or errno on a read or write error.

    Function: int history_truncate_file (const char *filename, int nlines)
    Truncate the history file filename, leaving only the last nlines lines. If filename is NULL, then `~/.history' is truncated. Returns 0 on success, or errno on failure.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.3.7 History Expansion

    These functions implement history expansion.

    Function: int history_expand (char *string, char **output)
    Expand string, placing the result into output, a pointer to a string (see section 1.1 History Expansion). Returns:
    0
    If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character);
    1
    if expansions did take place;
    -1
    if there was an error in expansion;
    2
    if the returned line should be displayed, but not executed, as with the :p modifier (see section 1.1.3 Modifiers).

    If an error occurred in expansion, then output contains a descriptive error message.

    Function: char * get_history_event (const char *string, int *cindex, int qchar)
    Returns the text of the history event beginning at string + *cindex. *cindex is modified to point to after the event specifier. At function entry, cindex points to the index into string where the history event specification begins. qchar is a character that is allowed to end the event specification in addition to the "normal" terminating characters.

    Function: char ** history_tokenize (const char *string)
    Return an array of tokens parsed out of string, much as the shell might. The tokens are split on the characters in the history_word_delimiters variable, and shell quoting conventions are obeyed.

    Function: char * history_arg_extract (int first, int last, const char *string)
    Extract a string segment consisting of the first through last arguments present in string. Arguments are split using history_tokenize.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.4 History Variables

    This section describes the externally-visible variables exported by the GNU History Library.

    Variable: int history_base
    The logical offset of the first entry in the history list.

    Variable: int history_length
    The number of entries currently stored in the history list.

    Variable: int history_max_entries
    The maximum number of history entries. This must be changed using stifle_history().

    Variable: int history_write_timestamps
    If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that timestamps are not saved.

    The current timestamp format uses the value of history_comment_char to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written.

    Variable: char history_expansion_char
    The character that introduces a history event. The default is `!'. Setting this to 0 inhibits history expansion.

    Variable: char history_subst_char
    The character that invokes word substitution if found at the start of a line. The default is `^'.

    Variable: char history_comment_char
    During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default.

    Variable: char * history_word_delimiters
    The characters that separate tokens for history_tokenize(). The default value is " \t\n()<>;&|".

    Variable: char * history_search_delimiter_chars
    The list of additional characters which can delimit a history search string, in addition to space, TAB, `:' and `?' in the case of a substring search. The default is empty.

    Variable: char * history_no_expand_chars
    The list of characters which inhibit history expansion if found immediately following history_expansion_char. The default is space, tab, newline, carriage return, and `='.

    Variable: int history_quotes_inhibit_expansion
    If non-zero, double-quoted words are not scanned for the history expansion character or the history comment character. The default value is 0.

    Variable: rl_linebuf_func_t * history_inhibit_expansion_function
    This should be set to the address of a function that takes two arguments: a char * (string) and an int index into that string (i). It should return a non-zero value if the history expansion starting at string[i] should not be performed; zero if the expansion should be done. It is intended for use by applications like Bash that use the history expansion character for additional purposes. By default, this variable is set to NULL.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    2.5 History Programming Example

    The following program demonstrates simple use of the GNU History Library.

     
    #include <stdio.h>
    #include <readline/history.h>
    
    main (argc, argv)
         int argc;
         char **argv;
    {
      char line[1024], *t;
      int len, done = 0;
    
      line[0] = 0;
    
      using_history ();
      while (!done)
        {
          printf ("history$ ");
          fflush (stdout);
          t = fgets (line, sizeof (line) - 1, stdin);
          if (t && *t)
            {
              len = strlen (t);
              if (t[len - 1] == '\n')
                t[len - 1] = '\0';
            }
    
          if (!t)
            strcpy (line, "quit");
    
          if (line[0])
            {
              char *expansion;
              int result;
    
              result = history_expand (line, &expansion);
              if (result)
                fprintf (stderr, "%s\n", expansion);
    
              if (result < 0 || result == 2)
                {
                  free (expansion);
                  continue;
                }
    
              add_history (expansion);
              strncpy (line, expansion, sizeof (line) - 1);
              free (expansion);
            }
    
          if (strcmp (line, "quit") == 0)
            done = 1;
          else if (strcmp (line, "save") == 0)
            write_history ("history_file");
          else if (strcmp (line, "read") == 0)
            read_history ("history_file");
          else if (strcmp (line, "list") == 0)
            {
              register HIST_ENTRY **the_list;
              register int i;
    
              the_list = history_list ();
              if (the_list)
                for (i = 0; the_list[i]; i++)
                  printf ("%d: %s\n", i + history_base, the_list[i]->line);
            }
          else if (strncmp (line, "delete", 6) == 0)
            {
              int which;
              if ((sscanf (line + 6, "%d", &which)) == 1)
                {
                  HIST_ENTRY *entry = remove_history (which);
                  if (!entry)
                    fprintf (stderr, "No such entry %d\n", which);
                  else
                    {
                      free (entry->line);
                      free (entry);
                    }
                }
              else
                {
                  fprintf (stderr, "non-numeric arg given to `delete'\n");
                }
            }
        }
    }
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful 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.

      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.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. 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.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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.

    5. 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:

      1. 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.

      2. 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 fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. 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.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve 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.

      10. 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.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. 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.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      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.

    6. 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, and that you preserve all their Warranty Disclaimers.

      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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. 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.

    8. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. 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 http://www.gnu.org/copyleft/.

      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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    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:

     
      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.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    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.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    B. Concept Index

    Jump to:   A   E   H  

    Index Entry Section

    A
    anchored search2.3.5 Searching the History List

    E
    event designators1.1.1 Event Designators

    H
    history events1.1.1 Event Designators
    history expansion1.1 History Expansion
    History Searching2.3.5 Searching the History List

    Jump to:   A   E   H  


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    C. Function and Variable Index

    Jump to:   A   C   F   G   H   N   P   R   S   U   W  

    Index Entry Section

    A
    add_history2.3.2 History List Management
    add_history_time2.3.2 History List Management
    append_history2.3.6 Managing the History File

    C
    clear_history2.3.2 History List Management
    current_history2.3.3 Information About the History List

    F
    free_history_entry2.3.2 History List Management

    G
    get_history_event2.3.7 History Expansion

    H
    history_arg_extract2.3.7 History Expansion
    history_base2.4 History Variables
    history_comment_char2.4 History Variables
    history_expand2.3.7 History Expansion
    history_expansion_char2.4 History Variables
    history_get2.3.3 Information About the History List
    history_get_history_state2.3.1 Initializing History and State Management
    history_get_time2.3.3 Information About the History List
    history_inhibit_expansion_function2.4 History Variables
    history_is_stifled2.3.2 History List Management
    history_length2.4 History Variables
    history_list2.3.3 Information About the History List
    history_max_entries2.4 History Variables
    history_no_expand_chars2.4 History Variables
    history_quotes_inhibit_expansion2.4 History Variables
    history_search2.3.5 Searching the History List
    history_search_delimiter_chars2.4 History Variables
    history_search_pos2.3.5 Searching the History List
    history_search_prefix2.3.5 Searching the History List
    history_set_history_state2.3.1 Initializing History and State Management
    history_set_pos2.3.4 Moving Around the History List
    history_subst_char2.4 History Variables
    history_tokenize2.3.7 History Expansion
    history_total_bytes2.3.3 Information About the History List
    history_truncate_file2.3.6 Managing the History File
    history_word_delimiters2.4 History Variables
    history_write_timestamps2.4 History Variables

    N
    next_history2.3.4 Moving Around the History List

    P
    previous_history2.3.4 Moving Around the History List

    R
    read_history2.3.6 Managing the History File
    read_history_range2.3.6 Managing the History File
    remove_history2.3.2 History List Management
    replace_history_entry2.3.2 History List Management

    S
    stifle_history2.3.2 History List Management

    U
    unstifle_history2.3.2 History List Management
    using_history2.3.1 Initializing History and State Management

    W
    where_history2.3.3 Information About the History List
    write_history2.3.6 Managing the History File

    Jump to:   A   C   F   G   H   N   P   R   S   U   W  


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Using History Interactively
    2. Programming with GNU History
    A. GNU Free Documentation License
    B. Concept Index
    C. Function and Variable Index

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by chet on September, 7 2016 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by chet on September, 7 2016 using texi2html readline-7.0/doc/rluserman.html000664 000436 000000 00000361556 12764101653 016711 0ustar00chetwheel000000 000000 GNU Readline Library:
    [Top] [Contents] [Index] [ ? ]

    GNU Readline Library

    This document describes the end user interface of the GNU Readline Library, a utility which aids in the consistency of user interface across discrete programs which provide a command line interface. The Readline home page is http://www.gnu.org/software/readline/.

    1. Command Line Editing  GNU Readline User's Manual.
    A. GNU Free Documentation License  License for copying this manual.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1. Command Line Editing

    This chapter describes the basic features of the GNU command line editing interface.

    1.1 Introduction to Line Editing  Notation used in this text.
    1.2 Readline Interaction  The minimum set of commands for editing a line.
    1.3 Readline Init File  Customizing Readline from a user's view.
    1.4 Bindable Readline Commands  A description of most of the Readline commands available for binding
    1.5 Readline vi Mode  A short description of how to make Readline behave like the vi editor.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.1 Introduction to Line Editing

    The following paragraphs describe the notation used to represent keystrokes.

    The text C-k is read as `Control-K' and describes the character produced when the k key is pressed while the Control key is depressed.

    The text M-k is read as `Meta-K' and describes the character produced when the Meta key (if you have one) is depressed, and the k key is pressed. The Meta key is labeled ALT on many keyboards. On keyboards with two keys labeled ALT (usually to either side of the space bar), the ALT on the left side is generally set to work as a Meta key. The ALT key on the right may also be configured to work as a Meta key or may be configured as some other modifier, such as a Compose key for typing accented characters.

    If you do not have a Meta or ALT key, or another key working as a Meta key, the identical keystroke can be generated by typing ESC first, and then typing k. Either process is known as metafying the k key.

    The text M-C-k is read as `Meta-Control-k' and describes the character produced by metafying C-k.

    In addition, several keys have their own names. Specifically, DEL, ESC, LFD, SPC, RET, and TAB all stand for themselves when seen in this text, or in an init file (see section 1.3 Readline Init File). If your keyboard lacks a LFD key, typing C-j will produce the desired character. The RET key may be labeled Return or Enter on some keyboards.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2 Readline Interaction

    Often during an interactive session you type in a long line of text, only to notice that the first word on the line is misspelled. The Readline library gives you a set of commands for manipulating the text as you type it in, allowing you to just fix your typo, and not forcing you to retype the majority of the line. Using these editing commands, you move the cursor to the place that needs correction, and delete or insert the text of the corrections. Then, when you are satisfied with the line, you simply press RET. You do not have to be at the end of the line to press RET; the entire line is accepted regardless of the location of the cursor within the line.

    1.2.1 Readline Bare Essentials  The least you need to know about Readline.
    1.2.2 Readline Movement Commands  Moving about the input line.
    1.2.3 Readline Killing Commands  How to delete text, and how to get it back!
    1.2.4 Readline Arguments  Giving numeric arguments to commands.
    1.2.5 Searching for Commands in the History  Searching through previous lines.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.1 Readline Bare Essentials

    In order to enter characters into the line, simply type them. The typed character appears where the cursor was, and then the cursor moves one space to the right. If you mistype a character, you can use your erase character to back up and delete the mistyped character.

    Sometimes you may mistype a character, and not notice the error until you have typed several other characters. In that case, you can type C-b to move the cursor to the left, and then correct your mistake. Afterwards, you can move the cursor to the right with C-f.

    When you add text in the middle of a line, you will notice that characters to the right of the cursor are `pushed over' to make room for the text that you have inserted. Likewise, when you delete text behind the cursor, characters to the right of the cursor are `pulled back' to fill in the blank space created by the removal of the text. A list of the bare essentials for editing the text of an input line follows.

    C-b
    Move back one character.
    C-f
    Move forward one character.
    DEL or Backspace
    Delete the character to the left of the cursor.
    C-d
    Delete the character underneath the cursor.
    Printing characters
    Insert the character into the line at the cursor.
    C-_ or C-x C-u
    Undo the last editing command. You can undo all the way back to an empty line.

    (Depending on your configuration, the Backspace key be set to delete the character to the left of the cursor and the DEL key set to delete the character underneath the cursor, like C-d, rather than the character to the left of the cursor.)


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.2 Readline Movement Commands

    The above table describes the most basic keystrokes that you need in order to do editing of the input line. For your convenience, many other commands have been added in addition to C-b, C-f, C-d, and DEL. Here are some commands for moving more rapidly about the line.

    C-a
    Move to the start of the line.
    C-e
    Move to the end of the line.
    M-f
    Move forward a word, where a word is composed of letters and digits.
    M-b
    Move backward a word.
    C-l
    Clear the screen, reprinting the current line at the top.

    Notice how C-f moves forward a character, while M-f moves forward a word. It is a loose convention that control keystrokes operate on characters while meta keystrokes operate on words.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.3 Readline Killing Commands

    Killing text means to delete the text from the line, but to save it away for later use, usually by yanking (re-inserting) it back into the line. (`Cut' and `paste' are more recent jargon for `kill' and `yank'.)

    If the description for a command says that it `kills' text, then you can be sure that you can get the text back in a different (or the same) place later.

    When you use a kill command, the text is saved in a kill-ring. Any number of consecutive kills save all of the killed text together, so that when you yank it back, you get it all. The kill ring is not line specific; the text that you killed on a previously typed line is available to be yanked back later, when you are typing another line.

    Here is the list of commands for killing text.

    C-k
    Kill the text from the current cursor position to the end of the line.

    M-d
    Kill from the cursor to the end of the current word, or, if between words, to the end of the next word. Word boundaries are the same as those used by M-f.

    M-DEL
    Kill from the cursor the start of the current word, or, if between words, to the start of the previous word. Word boundaries are the same as those used by M-b.

    C-w
    Kill from the cursor to the previous whitespace. This is different than M-DEL because the word boundaries differ.

    Here is how to yank the text back into the line. Yanking means to copy the most-recently-killed text from the kill buffer.

    C-y
    Yank the most recently killed text back into the buffer at the cursor.

    M-y
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is C-y or M-y.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.4 Readline Arguments

    You can pass numeric arguments to Readline commands. Sometimes the argument acts as a repeat count, other times it is the sign of the argument that is significant. If you pass a negative argument to a command which normally acts in a forward direction, that command will act in a backward direction. For example, to kill text back to the start of the line, you might type `M-- C-k'.

    The general way to pass numeric arguments to a command is to type meta digits before the command. If the first `digit' typed is a minus sign (`-'), then the sign of the argument will be negative. Once you have typed one meta digit to get the argument started, you can type the remainder of the digits, and then the command. For example, to give the C-d command an argument of 10, you could type `M-1 0 C-d', which will delete the next ten characters on the input line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.2.5 Searching for Commands in the History

    Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: incremental and non-incremental.

    Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, Readline displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type C-r. Typing C-s searches forward through the history. The characters present in the value of the isearch-terminators variable are used to terminate an incremental search. If that variable has not been assigned a value, the ESC and C-J characters will terminate an incremental search. C-g will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line.

    To find other matching entries in the history list, type C-r or C-s as appropriate. This will search backward or forward in the history for the next entry matching the search string typed so far. Any other key sequence bound to a Readline command will terminate the search and execute that command. For instance, a RET will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing.

    Readline remembers the last incremental search string. If two C-rs are typed without any intervening characters defining a new search string, any remembered search string is used.

    Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3 Readline Init File

    Although the Readline library comes with a set of Emacs-like keybindings installed by default, it is possible to use a different set of keybindings. Any user can customize programs that use Readline by putting commands in an inputrc file, conventionally in his home directory. The name of this file is taken from the value of the environment variable INPUTRC. If that variable is unset, the default is `~/.inputrc'. If that file does not exist or cannot be read, the ultimate default is `/etc/inputrc'.

    When a program which uses the Readline library starts up, the init file is read, and the key bindings are set.

    In addition, the C-x C-r command re-reads this init file, thus incorporating any changes that you might have made to it.

    1.3.1 Readline Init File Syntax  Syntax for the commands in the inputrc file.

    1.3.2 Conditional Init Constructs  Conditional key bindings in the inputrc file.

    1.3.3 Sample Init File  An example inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.1 Readline Init File Syntax

    There are only a few basic constructs allowed in the Readline init file. Blank lines are ignored. Lines beginning with a `#' are comments. Lines beginning with a `$' indicate conditional constructs (see section 1.3.2 Conditional Init Constructs). Other lines denote variable settings and key bindings.

    Variable Settings
    You can modify the run-time behavior of Readline by altering the values of variables in Readline using the set command within the init file. The syntax is simple:

     
    set variable value
    

    Here, for example, is how to change from the default Emacs-like key binding to use vi line editing commands:

     
    set editing-mode vi
    

    Variable names and values, where appropriate, are recognized without regard to case. Unrecognized variable names are ignored.

    Boolean variables (those that can be set to on or off) are set to on if the value is null or empty, on (case-insensitive), or 1. Any other value results in the variable being set to off.

    A great deal of run-time behavior is changeable with the following variables.

    bell-style
    Controls what happens when Readline wants to ring the terminal bell. If set to `none', Readline never rings the bell. If set to `visible', Readline uses a visible bell if one is available. If set to `audible' (the default), Readline attempts to ring the terminal's bell.

    bind-tty-special-chars
    If set to `on' (the default), Readline attempts to bind the control characters treated specially by the kernel's terminal driver to their Readline equivalents.

    blink-matching-paren
    If set to `on', Readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. The default is `off'.

    colored-completion-prefix
    If set to `on', when listing completions, Readline displays the common prefix of the set of possible completions using a different color. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    colored-stats
    If set to `on', Readline displays possible completions using different colors to indicate their file type. The color definitions are taken from the value of the LS_COLORS environment variable. The default is `off'.

    comment-begin
    The string to insert at the beginning of the line when the insert-comment command is executed. The default value is "#".

    completion-display-width
    The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1.

    completion-ignore-case
    If set to `on', Readline performs filename matching and completion in a case-insensitive fashion. The default value is `off'.

    completion-map-case
    If set to `on', and completion-ignore-case is enabled, Readline treats hyphens (`-') and underscores (`_') as equivalent when performing case-insensitive filename matching and completion.

    completion-prefix-display-length
    The length in characters of the common prefix of a list of possible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possible completions.

    completion-query-items
    The number of possible completions that determines when the user is asked whether the list of possibilities should be displayed. If the number of possible completions is greater than this value, Readline will ask the user whether or not he wishes to view them; otherwise, they are simply listed. This variable must be set to an integer value greater than or equal to 0. A negative value means Readline should never ask. The default limit is 100.

    convert-meta
    If set to `on', Readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing an ESC character, converting them to a meta-prefixed key sequence. The default value is `on', but will be set to `off' if the locale is one that contains eight-bit characters.

    disable-completion
    If set to `On', Readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to self-insert. The default is `off'.

    echo-control-characters
    When set to `on', on operating systems that indicate they support it, readline echoes a character corresponding to a signal generated from the keyboard. The default is `on'.

    editing-mode
    The editing-mode variable controls which default set of key bindings is used. By default, Readline starts up in Emacs editing mode, where the keystrokes are most similar to Emacs. This variable can be set to either `emacs' or `vi'.

    emacs-mode-string
    This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `@'.

    enable-bracketed-paste
    When set to `On', Readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each character as if it had been read from the keyboard. This can prevent pasted characters from being interpreted as editing commands. The default is `off'.

    enable-keypad
    When set to `on', Readline will try to enable the application keypad when it is called. Some systems need this to enable the arrow keys. The default is `off'.

    enable-meta-key
    When set to `on', Readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. The default is `on'.

    expand-tilde
    If set to `on', tilde expansion is performed when Readline attempts word completion. The default is `off'.

    history-preserve-point
    If set to `on', the history code attempts to place the point (the current cursor position) at the same location on each history line retrieved with previous-history or next-history. The default is `off'.

    history-size
    Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set history-size to a non-numeric value, the maximum number of history entries will be set to 500.

    horizontal-scroll-mode
    This variable can be set to either `on' or `off'. Setting it to `on' means that the text of the lines being edited will scroll horizontally on a single screen line when they are longer than the width of the screen, instead of wrapping onto a new screen line. By default, this variable is set to `off'.

    input-meta
    If set to `on', Readline will enable eight-bit input (it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The default value is `off', but Readline will set it to `on' if the locale contains eight-bit characters. The name meta-flag is a synonym for this variable.

    isearch-terminators
    The string of characters that should terminate an incremental search without subsequently executing the character as a command (see section 1.2.5 Searching for Commands in the History). If this variable has not been given a value, the characters ESC and C-J will terminate an incremental search.

    keymap
    Sets Readline's idea of the current keymap for key binding commands. Acceptable keymap names are emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, and vi-insert. vi is equivalent to vi-command (vi-move is also a synonym); emacs is equivalent to emacs-standard. The default value is emacs. The value of the editing-mode variable also affects the default keymap.

    keyseq-timeout
    Specifies the duration Readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, Readline will use the shorter but complete key sequence. Readline uses this value to determine whether or not input is available on the current input source (rl_instream by default). The value is specified in milliseconds, so a value of 1000 means that Readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, Readline will wait until another key is pressed to decide which key sequence to complete. The default value is 500.

    mark-directories
    If set to `on', completed directory names have a slash appended. The default is `on'.

    mark-modified-lines
    This variable, when set to `on', causes Readline to display an asterisk (`*') at the start of history lines which have been modified. This variable is `off' by default.

    mark-symlinked-directories
    If set to `on', completed names which are symbolic links to directories have a slash appended (subject to the value of mark-directories). The default is `off'.

    match-hidden-files
    This variable, when set to `on', causes Readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to `off', the leading `.' must be supplied by the user in the filename to be completed. This variable is `on' by default.

    menu-complete-display-prefix
    If set to `on', menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. The default is `off'.

    output-meta
    If set to `on', Readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is `off', but Readline will set it to `on' if the locale contains eight-bit characters.

    page-completions
    If set to `on', Readline uses an internal more-like pager to display a screenful of possible completions at a time. This variable is `on' by default.

    print-completions-horizontally
    If set to `on', Readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. The default is `off'.

    revert-all-at-newline
    If set to `on', Readline will undo all changes to history lines before returning when accept-line is executed. By default, history lines may be modified and retain individual undo lists across calls to readline. The default is `off'.

    show-all-if-ambiguous
    This alters the default behavior of the completion functions. If set to `on', words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-all-if-unmodified
    This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to `on', words which have more than one possible completion without any possible partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. The default value is `off'.

    show-mode-in-prompt
    If set to `on', add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. The default value is `off'.

    skip-completed-text
    If set to `on', this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. For instance, if this is enabled, attempting completion when the cursor is after the `e' in `Makefile' will result in `Makefile' rather than `Makefilefile', assuming there is a single possible completion. The default value is `off'.

    vi-cmd-mode-string
    This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `(cmd)'.

    vi-ins-mode-string
    This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the `\1' and `\2' escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. The default is `(ins)'.

    visible-stats
    If set to `on', a character denoting a file's type is appended to the filename when listing possible completions. The default is `off'.

    Key Bindings
    The syntax for controlling key bindings in the init file is simple. First you need to find the name of the command that you want to change. The following sections contain tables of the command name, the default keybinding, if any, and a short description of what the command does.

    Once you know the name of the command, simply place on a line in the init file the name of the key you wish to bind the command to, a colon, and then the name of the command. There can be no space between the key name and the colon -- that will be interpreted as part of the key name. The name of the key can be expressed in different ways, depending on what you find most comfortable.

    In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a macro).

    keyname: function-name or macro
    keyname is the name of a key spelled out in English. For example:
     
    Control-u: universal-argument
    Meta-Rubout: backward-kill-word
    Control-o: "> output"
    

    In the above example, C-u is bound to the function universal-argument, M-DEL is bound to the function backward-kill-word, and C-o is bound to run the macro expressed on the right hand side (that is, to insert the text `> output' into the line).

    A number of symbolic character names are recognized while processing this key binding syntax: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB.

    "keyseq": function-name or macro
    keyseq differs from keyname above in that strings denoting an entire key sequence can be specified, by placing the key sequence in double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the special character names are not recognized.

     
    "\C-u": universal-argument
    "\C-x\C-r": re-read-init-file
    "\e[11~": "Function Key 1"
    

    In the above example, C-u is again bound to the function universal-argument (just as it was in the first example), `C-x C-r' is bound to the function re-read-init-file, and `ESC [ 1 1 ~' is bound to insert the text `Function Key 1'.

    The following GNU Emacs style escape sequences are available when specifying key sequences:

    \C-
    control prefix
    \M-
    meta prefix
    \e
    an escape character
    \\
    backslash
    \"
    ", a double quotation mark
    \'
    ', a single quote or apostrophe

    In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available:

    \a
    alert (bell)
    \b
    backspace
    \d
    delete
    \f
    form feed
    \n
    newline
    \r
    carriage return
    \t
    horizontal tab
    \v
    vertical tab
    \nnn
    the eight-bit character whose value is the octal value nnn (one to three digits)
    \xHH
    the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)

    When entering the text of a macro, single or double quotes must be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including `"' and `''. For example, the following binding will make `C-x \' insert a single `\' into the line:
     
    "\C-x\\": "\\"
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.2 Conditional Init Constructs

    Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used.

    $if
    The $if construct allows bindings to be made based on the editing mode, the terminal being used, or the application using Readline. The text of the test extends to the end of the line; no characters are required to isolate it.

    mode
    The mode= form of the $if directive is used to test whether Readline is in emacs or vi mode. This may be used in conjunction with the `set keymap' command, for instance, to set bindings in the emacs-standard and emacs-ctlx keymaps only if Readline is starting out in emacs mode.

    term
    The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the `=' is tested against both the full name of the terminal and the portion of the terminal name before the first `-'. This allows sun to match both sun and sun-cmd, for instance.

    application
    The application construct is used to include application-specific settings. Each program using the Readline library sets the application name, and you can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in Bash:
     
    $if Bash
    # Quote the current or previous word
    "\C-xq": "\eb\"\ef\""
    $endif
    

    $endif
    This command, as seen in the previous example, terminates an $if command.

    $else
    Commands in this branch of the $if directive are executed if the test fails.

    $include
    This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the following directive reads from `/etc/inputrc':
     
    $include /etc/inputrc
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.3.3 Sample Init File

    Here is an example of an inputrc file. This illustrates key binding, variable assignment, and conditional syntax.

     
    # This file controls the behaviour of line input editing for
    # programs that use the GNU Readline library.  Existing
    # programs include FTP, Bash, and GDB.
    #
    # You can re-read the inputrc file with C-x C-r.
    # Lines beginning with '#' are comments.
    #
    # First, include any system-wide bindings and variable
    # assignments from /etc/Inputrc
    $include /etc/Inputrc
    
    #
    # Set various bindings for emacs mode.
    
    set editing-mode emacs 
    
    $if mode=emacs
    
    Meta-Control-h:	backward-kill-word	Text after the function name is ignored
    
    #
    # Arrow keys in keypad mode
    #
    #"\M-OD":        backward-char
    #"\M-OC":        forward-char
    #"\M-OA":        previous-history
    #"\M-OB":        next-history
    #
    # Arrow keys in ANSI mode
    #
    "\M-[D":        backward-char
    "\M-[C":        forward-char
    "\M-[A":        previous-history
    "\M-[B":        next-history
    #
    # Arrow keys in 8 bit keypad mode
    #
    #"\M-\C-OD":       backward-char
    #"\M-\C-OC":       forward-char
    #"\M-\C-OA":       previous-history
    #"\M-\C-OB":       next-history
    #
    # Arrow keys in 8 bit ANSI mode
    #
    #"\M-\C-[D":       backward-char
    #"\M-\C-[C":       forward-char
    #"\M-\C-[A":       previous-history
    #"\M-\C-[B":       next-history
    
    C-q: quoted-insert
    
    $endif
    
    # An old-style binding.  This happens to be the default.
    TAB: complete
    
    # Macros that are convenient for shell interaction
    $if Bash
    # edit the path
    "\C-xp": "PATH=${PATH}\e\C-e\C-a\ef\C-f"
    # prepare to type a quoted word --
    # insert open and close double quotes
    # and move to just after the open quote
    "\C-x\"": "\"\"\C-b"
    # insert a backslash (testing backslash escapes
    # in sequences and macros)
    "\C-x\\": "\\"
    # Quote the current or previous word
    "\C-xq": "\eb\"\ef\""
    # Add a binding to refresh the line, which is unbound
    "\C-xr": redraw-current-line
    # Edit variable on current line.
    "\M-\C-v": "\C-a\C-k$\C-y\M-\C-e\C-a\C-y="
    $endif
    
    # use a visible bell if one is available
    set bell-style visible
    
    # don't strip characters to 7 bits when reading
    set input-meta on
    
    # allow iso-latin1 characters to be inserted rather
    # than converted to prefix-meta sequences
    set convert-meta off
    
    # display characters with the eighth bit set directly
    # rather than as meta-prefixed characters
    set output-meta on
    
    # if there are more than 150 possible completions for
    # a word, ask the user if he wants to see all of them
    set completion-query-items 150
    
    # For FTP
    $if Ftp
    "\C-xg": "get \M-?"
    "\C-xt": "put \M-?"
    "\M-.": yank-last-arg
    $endif
    


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4 Bindable Readline Commands

    1.4.1 Commands For Moving  Moving about the line.
    1.4.2 Commands For Manipulating The History  Getting at previous lines.
    1.4.3 Commands For Changing Text  Commands for changing text.
    1.4.4 Killing And Yanking  Commands for killing and yanking.
    1.4.5 Specifying Numeric Arguments  Specifying numeric arguments, repeat counts.
    1.4.6 Letting Readline Type For You  Getting Readline to do the typing for you.
    1.4.7 Keyboard Macros  Saving and re-executing typed characters
    1.4.8 Some Miscellaneous Commands  Other miscellaneous commands.

    This section describes Readline commands that may be bound to key sequences. Command names without an accompanying key sequence are unbound by default.

    In the following descriptions, point refers to the current cursor position, and mark refers to a cursor position saved by the set-mark command. The text between the point and mark is referred to as the region.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.1 Commands For Moving

    beginning-of-line (C-a)
    Move to the start of the current line.

    end-of-line (C-e)
    Move to the end of the line.

    forward-char (C-f)
    Move forward a character.

    backward-char (C-b)
    Move back a character.

    forward-word (M-f)
    Move forward to the end of the next word. Words are composed of letters and digits.

    backward-word (M-b)
    Move back to the start of the current or previous word. Words are composed of letters and digits.

    clear-screen (C-l)
    Clear the screen and redraw the current line, leaving the current line at the top of the screen.

    redraw-current-line ()
    Refresh the current line. By default, this is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.2 Commands For Manipulating The History

    accept-line (Newline or Return)
    Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with add_history(). If this line is a modified history line, the history line is restored to its original state.

    previous-history (C-p)
    Move `back' through the history list, fetching the previous command.

    next-history (C-n)
    Move `forward' through the history list, fetching the next command.

    beginning-of-history (M-<)
    Move to the first line in the history.

    end-of-history (M->)
    Move to the end of the input history, i.e., the line currently being entered.

    reverse-search-history (C-r)
    Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search.

    forward-search-history (C-s)
    Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search.

    non-incremental-reverse-search-history (M-p)
    Search backward starting at the current line and moving `up' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    non-incremental-forward-search-history (M-n)
    Search forward starting at the current line and moving `down' through the history as necessary using a non-incremental search for a string supplied by the user. The search string may match anywhere in a history line.

    history-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-forward ()
    Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    history-substr-search-backward ()
    Search backward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non-incremental search. By default, this command is unbound.

    yank-nth-arg (M-C-y)
    Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the `!n' history expansion had been specified.

    yank-last-arg (M-. or M-_)
    Insert last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the `!$' history expansion had been specified.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.3 Commands For Changing Text

    end-of-file (usually C-d)
    The character indicating end-of-file as set, for example, by stty. If this character is read when there are no characters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF.

    delete-char (C-d)
    Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects.

    backward-delete-char (Rubout)
    Delete the character behind the cursor. A numeric argument means to kill the characters instead of deleting them.

    forward-backward-delete-char ()
    Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cursor is deleted. By default, this is not bound to a key.

    quoted-insert (C-q or C-v)
    Add the next character typed to the line verbatim. This is how to insert key sequences like C-q, for example.

    tab-insert (M-TAB)
    Insert a tab character.

    self-insert (a, b, A, 1, !, ...)
    Insert yourself.

    bracketed-paste-begin ()
    This function is intended to be bound to the "bracketed paste" escape sequence sent by some terminals, and such a binding is assigned by default. It allows Readline to insert the pasted text as a single unit without treating each character as if it had been read from the keyboard. The characters are inserted as if each one was bound to self-insert) instead of executing any editing commands.

    transpose-chars (C-t)
    Drag the character before the cursor forward over the character at the cursor, moving the cursor forward as well. If the insertion point is at the end of the line, then this transposes the last two characters of the line. Negative arguments have no effect.

    transpose-words (M-t)
    Drag the word before point past the word after point, moving point past that word as well. If the insertion point is at the end of the line, this transposes the last two words on the line.

    upcase-word (M-u)
    Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move the cursor.

    downcase-word (M-l)
    Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move the cursor.

    capitalize-word (M-c)
    Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move the cursor.

    overwrite-mode ()
    Toggle overwrite mode. With an explicit positive numeric argument, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode.

    In overwrite mode, characters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to backward-delete-char replace the character before point with a space.

    By default, this command is unbound.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.4 Killing And Yanking

    kill-line (C-k)
    Kill the text from point to the end of the line.

    backward-kill-line (C-x Rubout)
    Kill backward from the cursor to the beginning of the current line.

    unix-line-discard (C-u)
    Kill backward from the cursor to the beginning of the current line.

    kill-whole-line ()
    Kill all characters on the current line, no matter where point is. By default, this is unbound.

    kill-word (M-d)
    Kill from point to the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as forward-word.

    backward-kill-word (M-DEL)
    Kill the word behind point. Word boundaries are the same as backward-word.

    unix-word-rubout (C-w)
    Kill the word behind point, using white space as a word boundary. The killed text is saved on the kill-ring.

    unix-filename-rubout ()
    Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring.

    delete-horizontal-space ()
    Delete all spaces and tabs around point. By default, this is unbound.

    kill-region ()
    Kill the text in the current region. By default, this command is unbound.

    copy-region-as-kill ()
    Copy the text in the region to the kill buffer, so it can be yanked right away. By default, this command is unbound.

    copy-backward-word ()
    Copy the word before point to the kill buffer. The word boundaries are the same as backward-word. By default, this command is unbound.

    copy-forward-word ()
    Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. By default, this command is unbound.

    yank (C-y)
    Yank the top of the kill ring into the buffer at point.

    yank-pop (M-y)
    Rotate the kill-ring, and yank the new top. You can only do this if the prior command is yank or yank-pop.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.5 Specifying Numeric Arguments

    digit-argument (M-0, M-1, ... M--)
    Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument.

    universal-argument ()
    This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is followed by digits, executing universal-argument again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit nor minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argument count four, a second time makes the argument count sixteen, and so on. By default, this is not bound to a key.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.6 Letting Readline Type For You

    complete (TAB)
    Attempt to perform completion on the text before point. The actual completion performed is application-specific. The default is filename completion.

    possible-completions (M-?)
    List the possible completions of the text before point. When displaying completions, Readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order.

    insert-completions (M-*)
    Insert all completions of the text before point that would have been generated by possible-completions.

    menu-complete ()
    Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the original text is restored. An argument of n moves n positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to TAB, but is unbound by default.

    menu-complete-backward ()
    Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument.

    delete-char-or-list ()
    Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. This command is unbound by default.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.7 Keyboard Macros

    start-kbd-macro (C-x ()
    Begin saving the characters typed into the current keyboard macro.

    end-kbd-macro (C-x ))
    Stop saving the characters typed into the current keyboard macro and save the definition.

    call-last-kbd-macro (C-x e)
    Re-execute the last keyboard macro defined, by making the characters in the macro appear as if typed at the keyboard.

    print-last-kbd-macro ()
    Print the last keboard macro defined in a format suitable for the inputrc file.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.4.8 Some Miscellaneous Commands

    re-read-init-file (C-x C-r)
    Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there.

    abort (C-g)
    Abort the current editing command and ring the terminal's bell (subject to the setting of bell-style).

    do-uppercase-version (M-a, M-b, M-x, ...)
    If the metafied character x is lowercase, run the command that is bound to the corresponding uppercase character.

    prefix-meta (ESC)
    Metafy the next character typed. This is for keyboards without a meta key. Typing `ESC f' is equivalent to typing M-f.

    undo (C-_ or C-x C-u)
    Incremental undo, separately remembered for each line.

    revert-line (M-r)
    Undo all changes made to this line. This is like executing the undo command enough times to get back to the beginning.

    tilde-expand (M-~)
    Perform tilde expansion on the current word.

    set-mark (C-@)
    Set the mark to the point. If a numeric argument is supplied, the mark is set to that position.

    exchange-point-and-mark (C-x C-x)
    Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark.

    character-search (C-])
    A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occurrences.

    character-search-backward (M-C-])
    A character is read and point is moved to the previous occurrence of that character. A negative count searches for subsequent occurrences.

    skip-csi-sequence ()
    Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\e[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[.

    insert-comment (M-#)
    Without a numeric argument, the value of the comment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, otherwise the characters in comment-begin are deleted from the beginning of the line. In either case, the line is accepted as if a newline had been typed.

    dump-functions ()
    Print all of the functions and their key bindings to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    dump-variables ()
    Print all of the settable variables and their values to the Readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    dump-macros ()
    Print all of the Readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. This command is unbound by default.

    emacs-editing-mode (C-e)
    When in vi command mode, this causes a switch to emacs editing mode.

    vi-editing-mode (M-C-j)
    When in emacs editing mode, this causes a switch to vi editing mode.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    1.5 Readline vi Mode

    While the Readline library does not have a full set of vi editing functions, it does contain enough to allow simple editing of the line. The Readline vi mode behaves as specified in the POSIX standard.

    In order to switch interactively between emacs and vi editing modes, use the command M-C-j (bound to emacs-editing-mode when in vi mode and to vi-editing-mode in emacs mode). The Readline default is emacs mode.

    When you enter a line in vi mode, you are already placed in `insertion' mode, as if you had typed an `i'. Pressing ESC switches you into `command' mode, where you can edit the text of the line with the standard vi movement keys, move to previous history lines with `k' and subsequent lines with `j', and so forth.


    [ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

    A. GNU Free Documentation License

    Version 1.3, 3 November 2008

     
    Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
    http://fsf.org/
    
    Everyone is permitted to copy and distribute verbatim copies
    of this license document, but changing it is not allowed.
    

    1. PREAMBLE

      The purpose of this License is to make a manual, textbook, or other functional and useful 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.

      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.

    2. APPLICABILITY AND DEFINITIONS

      This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law.

      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. (Thus, 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. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none.

      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 Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words.

      A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document 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, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. 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, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include 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, PostScript or PDF 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.

      The "publisher" means any person or entity that distributes copies of the Document to the public.

      A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition.

      The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License.

    3. 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.

    4. COPYING IN QUANTITY

      If you publish printed copies (or copies in media that commonly have printed covers) 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 computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. 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.

    5. 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:

      1. 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.

      2. 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 fewer than five), unless they release you from this requirement.

      3. State on the Title page the name of the publisher of the Modified Version, as the publisher.

      4. Preserve all the copyright notices of the Document.

      5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.

      6. 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.

      7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice.

      8. Include an unaltered copy of this License.

      9. Preserve the section Entitled "History", Preserve 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.

      10. 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.

      11. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein.

      12. 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.

      13. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version.

      14. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section.

      15. Preserve any Warranty Disclaimers.

      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.

    6. 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, and that you preserve all their Warranty Disclaimers.

      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 "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements."

    7. 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.

    8. 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, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which 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 half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate.

    9. 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, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail.

      If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title.

    10. TERMINATION

      You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License.

      However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation.

      Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice.

      Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, receipt of a copy of some or all of the same material does not give you any rights to use it.

    11. 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 http://www.gnu.org/copyleft/.

      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. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document.

    12. RELICENSING

      "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site.

      "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization.

      "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document.

      An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008.

      The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing.

    ADDENDUM: How to use this License for your documents

    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:

     
      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.3
      or any later version published by the Free Software Foundation;
      with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
      Texts.  A copy of the license is included in the section entitled ``GNU
      Free Documentation License''.
    

    If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this:

     
        with the Invariant Sections being list their titles, with
        the Front-Cover Texts being list, and with the Back-Cover Texts
        being list.
    

    If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation.

    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.


    [Top] [Contents] [Index] [ ? ]

    Table of Contents


    [Top] [Contents] [Index] [ ? ]

    Short Table of Contents

    1. Command Line Editing
    A. GNU Free Documentation License

    [Top] [Contents] [Index] [ ? ]

    About this document

    This document was generated by chet on September, 7 2016 using texi2html

    The buttons in the navigation panels have the following meaning:

    Button Name Go to From 1.2.3 go to
    [ < ] Back previous section in reading order 1.2.2
    [ > ] Forward next section in reading order 1.2.4
    [ << ] FastBack previous or up-and-previous section 1.1
    [ Up ] Up up section 1.2
    [ >> ] FastForward next or up-and-next section 1.3
    [Top] Top cover (top) of document  
    [Contents] Contents table of contents  
    [Index] Index concept index  
    [ ? ] About this page  

    where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
    • 1. Section One
      • 1.1 Subsection One-One
        • ...
      • 1.2 Subsection One-Two
        • 1.2.1 Subsubsection One-Two-One
        • 1.2.2 Subsubsection One-Two-Two
        • 1.2.3 Subsubsection One-Two-Three     <== Current Position
        • 1.2.4 Subsubsection One-Two-Four
      • 1.3 Subsection One-Three
        • ...
      • 1.4 Subsection One-Four


    This document was generated by chet on September, 7 2016 using texi2html readline-7.0/doc/readline.0000664 000436 000024 00000165005 12764101656 015656 0ustar00chetstaff000000 000000 READLINE(3) Library Functions Manual READLINE(3) NAME readline - get a line from a user with editing SYNOPSIS #include  #include  #include  char * readline (const char *prompt); COPYRIGHT Readline is Copyright (C) 1989-2014 Free Software Foundation, Inc. DESCRIPTION readline will read a line from the terminal and return it, using prompt as a prompt. If prompt is NULL or the empty string, no prompt is issued. The line returned is allocated with malloc(3); the caller must free it when finished. The line returned has the final newline removed, so only the text of the line remains. readline offers editing capabilities while the user is entering the line. By default, the line editing commands are similar to those of emacs. A vi-style line editing interface is also available. This manual page describes only the most basic use of readline. Much more functionality is available; see The GNU Readline Library and The GNU History Library for additional information. RETURN VALUE readline returns the text of the line read. A blank line returns the empty string. If EOF is encountered while reading a line, and the line is empty, NULL is returned. If an EOF is read with a non-empty line, it is treated as a newline. NOTATION An Emacs-style notation is used to denote keystrokes. Control keys are denoted by C-key, e.g., C-n means Control-N. Similarly, meta keys are denoted by M-key, so M-x means Meta-X. (On keyboards without a meta key, M-x means ESC x, i.e., press the Escape key then the x key. This makes ESC the meta prefix. The combination M-C-x means ESC-Control-x, or press the Escape key then hold the Control key while pressing the x key.) Readline commands may be given numeric arguments, which normally act as a repeat count. Sometimes, however, it is the sign of the argument that is significant. Passing a negative argument to a command that acts in the forward direction (e.g., kill-line) causes that command to act in a backward direction. Commands whose behavior with arguments deviates from this are noted below. When a command is described as killing text, the text deleted is saved for possible future retrieval (yanking). The killed text is saved in a kill ring. Consecutive kills cause the text to be accumulated into one unit, which can be yanked all at once. Commands which do not kill text separate the chunks of text on the kill ring. INITIALIZATION FILE Readline is customized by putting commands in an initialization file (the inputrc file). The name of this file is taken from the value of the INPUTRC environment variable. If that variable is unset, the default is ~/.inputrc. If that file does not exist or cannot be read, the ultimate default is /etc/inputrc. When a program which uses the readline library starts up, the init file is read, and the key bindings and variables are set. There are only a few basic constructs allowed in the readline init file. Blank lines are ignored. Lines beginning with a # are comments. Lines beginning with a $ indicate conditional constructs. Other lines denote key bindings and variable settings. Each program using this library may add its own commands and bindings. For example, placing M-Control-u: universal-argument or C-Meta-u: universal-argument into the inputrc would make M-C-u execute the readline command univer- sal-argument. The following symbolic character names are recognized while processing key bindings: DEL, ESC, ESCAPE, LFD, NEWLINE, RET, RETURN, RUBOUT, SPACE, SPC, and TAB. In addition to command names, readline allows keys to be bound to a string that is inserted when the key is pressed (a macro). Key Bindings The syntax for controlling key bindings in the inputrc file is simple. All that is required is the name of the command or the text of a macro and a key sequence to which it should be bound. The name may be speci- fied in one of two ways: as a symbolic key name, possibly with Meta- or Control- prefixes, or as a key sequence. The name and key sequence are separated by a colon. There can be no whitespace between the name and the colon. When using the form keyname:function-name or macro, keyname is the name of a key spelled out in English. For example: Control-u: universal-argument Meta-Rubout: backward-kill-word Control-o: "> output" In the above example, C-u is bound to the function universal-argument, M-DEL is bound to the function backward-kill-word, and C-o is bound to run the macro expressed on the right hand side (that is, to insert the text ``> output'' into the line). In the second form, "keyseq":function-name or macro, keyseq differs from keyname above in that strings denoting an entire key sequence may be specified by placing the sequence within double quotes. Some GNU Emacs style key escapes can be used, as in the following example, but the symbolic character names are not recognized. "\C-u": universal-argument "\C-x\C-r": re-read-init-file "\e[11~": "Function Key 1" In this example, C-u is again bound to the function universal-argument. C-x C-r is bound to the function re-read-init-file, and ESC [ 1 1 ~ is bound to insert the text ``Function Key 1''. The full set of GNU Emacs style escape sequences available when speci- fying key sequences is \C- control prefix \M- meta prefix \e an escape character \\ backslash \" literal ", a double quote \' literal ', a single quote In addition to the GNU Emacs style escape sequences, a second set of backslash escapes is available: \a alert (bell) \b backspace \d delete \f form feed \n newline \r carriage return \t horizontal tab \v vertical tab \nnn the eight-bit character whose value is the octal value nnn (one to three digits) \xHH the eight-bit character whose value is the hexadecimal value HH (one or two hex digits) When entering the text of a macro, single or double quotes should be used to indicate a macro definition. Unquoted text is assumed to be a function name. In the macro body, the backslash escapes described above are expanded. Backslash will quote any other character in the macro text, including " and '. Bash allows the current readline key bindings to be displayed or modi- fied with the bind builtin command. The editing mode may be switched during interactive use by using the -o option to the set builtin com- mand. Other programs using this library provide similar mechanisms. The inputrc file may be edited and re-read if a program does not pro- vide any other means to incorporate new bindings. Variables Readline has variables that can be used to further customize its behav- ior. A variable may be set in the inputrc file with a statement of the form set variable-name value Except where noted, readline variables can take the values On or Off (without regard to case). Unrecognized variable names are ignored. When a variable value is read, empty or null values, "on" (case-insen- sitive), and "1" are equivalent to On. All other values are equivalent to Off. The variables and their default values are: bell-style (audible) Controls what happens when readline wants to ring the terminal bell. If set to none, readline never rings the bell. If set to visible, readline uses a visible bell if one is available. If set to audible, readline attempts to ring the terminal's bell. bind-tty-special-chars (On) If set to On (the default), readline attempts to bind the con- trol characters treated specially by the kernel's terminal driver to their readline equivalents. blink-matching-paren (Off) If set to On, readline attempts to briefly move the cursor to an opening parenthesis when a closing parenthesis is inserted. colored-completion-prefix (Off) If set to On, when listing completions, readline displays the common prefix of the set of possible completions using a differ- ent color. The color definitions are taken from the value of the LS_COLORS environment variable. colored-stats (Off) If set to On, readline displays possible completions using dif- ferent colors to indicate their file type. The color defini- tions are taken from the value of the LS_COLORS environment variable. comment-begin (``#'') The string that is inserted in vi mode when the insert-comment command is executed. This command is bound to M-# in emacs mode and to # in vi command mode. completion-display-width (-1) The number of screen columns used to display possible matches when performing completion. The value is ignored if it is less than 0 or greater than the terminal screen width. A value of 0 will cause matches to be displayed one per line. The default value is -1. completion-ignore-case (Off) If set to On, readline performs filename matching and completion in a case-insensitive fashion. completion-map-case (Off) If set to On, and completion-ignore-case is enabled, readline treats hyphens (-) and underscores (_) as equivalent when per- forming case-insensitive filename matching and completion. completion-prefix-display-length (0) The length in characters of the common prefix of a list of pos- sible completions that is displayed without modification. When set to a value greater than zero, common prefixes longer than this value are replaced with an ellipsis when displaying possi- ble completions. completion-query-items (100) This determines when the user is queried about viewing the num- ber of possible completions generated by the possible-comple- tions command. It may be set to any integer value greater than or equal to zero. If the number of possible completions is greater than or equal to the value of this variable, the user is asked whether or not he wishes to view them; otherwise they are simply listed on the terminal. A negative value causes readline to never ask. convert-meta (On) If set to On, readline will convert characters with the eighth bit set to an ASCII key sequence by stripping the eighth bit and prefixing it with an escape character (in effect, using escape as the meta prefix). The default is On, but readline will set it to Off if the locale contains eight-bit characters. disable-completion (Off) If set to On, readline will inhibit word completion. Completion characters will be inserted into the line as if they had been mapped to self-insert. echo-control-characters (On) When set to On, on operating systems that indicate they support it, readline echoes a character corresponding to a signal gener- ated from the keyboard. editing-mode (emacs) Controls whether readline begins with a set of key bindings sim- ilar to Emacs or vi. editing-mode can be set to either emacs or vi. enable-bracketed-paste (Off) When set to On, readline will configure the terminal in a way that will enable it to insert each paste into the editing buffer as a single string of characters, instead of treating each char- acter as if it had been read from the keyboard. This can pre- vent pasted characters from being interpreted as editing com- mands. enable-keypad (Off) When set to On, readline will try to enable the application key- pad when it is called. Some systems need this to enable the arrow keys. enable-meta-key (On) When set to On, readline will try to enable any meta modifier key the terminal claims to support when it is called. On many terminals, the meta key is used to send eight-bit characters. expand-tilde (Off) If set to On, tilde expansion is performed when readline attempts word completion. history-preserve-point (Off) If set to On, the history code attempts to place point at the same location on each history line retrieved with previous-his- tory or next-history. history-size (unset) Set the maximum number of history entries saved in the history list. If set to zero, any existing history entries are deleted and no new entries are saved. If set to a value less than zero, the number of history entries is not limited. By default, the number of history entries is not limited. If an attempt is made to set history-size to a non-numeric value, the maximum number of history entries will be set to 500. horizontal-scroll-mode (Off) When set to On, makes readline use a single line for display, scrolling the input horizontally on a single screen line when it becomes longer than the screen width rather than wrapping to a new line. input-meta (Off) If set to On, readline will enable eight-bit input (that is, it will not clear the eighth bit in the characters it reads), regardless of what the terminal claims it can support. The name meta-flag is a synonym for this variable. The default is Off, but readline will set it to On if the locale contains eight-bit characters. isearch-terminators (``C-[ C-J'') The string of characters that should terminate an incremental search without subsequently executing the character as a com- mand. If this variable has not been given a value, the charac- ters ESC and C-J will terminate an incremental search. keymap (emacs) Set the current readline keymap. The set of legal keymap names is emacs, emacs-standard, emacs-meta, emacs-ctlx, vi, vi-move, vi-command, and vi-insert. vi is equivalent to vi-command; emacs is equivalent to emacs-standard. The default value is emacs. The value of editing-mode also affects the default keymap. emacs-mode-string (@) This string is displayed immediately before the last line of the primary prompt when emacs editing mode is active. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non- printing characters, which can be used to embed a terminal con- trol sequence into the mode string. keyseq-timeout (500) Specifies the duration readline will wait for a character when reading an ambiguous key sequence (one that can form a complete key sequence using the input read so far, or can take additional input to complete a longer key sequence). If no input is received within the timeout, readline will use the shorter but complete key sequence. The value is specified in milliseconds, so a value of 1000 means that readline will wait one second for additional input. If this variable is set to a value less than or equal to zero, or to a non-numeric value, readline will wait until another key is pressed to decide which key sequence to complete. mark-directories (On) If set to On, completed directory names have a slash appended. mark-modified-lines (Off) If set to On, history lines that have been modified are dis- played with a preceding asterisk (*). mark-symlinked-directories (Off) If set to On, completed names which are symbolic links to direc- tories have a slash appended (subject to the value of mark-directories). match-hidden-files (On) This variable, when set to On, causes readline to match files whose names begin with a `.' (hidden files) when performing filename completion. If set to Off, the leading `.' must be supplied by the user in the filename to be completed. menu-complete-display-prefix (Off) If set to On, menu completion displays the common prefix of the list of possible completions (which may be empty) before cycling through the list. output-meta (Off) If set to On, readline will display characters with the eighth bit set directly rather than as a meta-prefixed escape sequence. The default is Off, but readline will set it to On if the locale contains eight-bit characters. page-completions (On) If set to On, readline uses an internal more-like pager to dis- play a screenful of possible completions at a time. print-completions-horizontally (Off) If set to On, readline will display completions with matches sorted horizontally in alphabetical order, rather than down the screen. revert-all-at-newline (Off) If set to On, readline will undo all changes to history lines before returning when accept-line is executed. By default, his- tory lines may be modified and retain individual undo lists across calls to readline. show-all-if-ambiguous (Off) This alters the default behavior of the completion functions. If set to On, words which have more than one possible completion cause the matches to be listed immediately instead of ringing the bell. show-all-if-unmodified (Off) This alters the default behavior of the completion functions in a fashion similar to show-all-if-ambiguous. If set to On, words which have more than one possible completion without any possi- ble partial completion (the possible completions don't share a common prefix) cause the matches to be listed immediately instead of ringing the bell. show-mode-in-prompt (Off) If set to On, add a character to the beginning of the prompt indicating the editing mode: emacs, vi command, or vi insertion. The mode strings are user-settable. skip-completed-text (Off) If set to On, this alters the default completion behavior when inserting a single match into the line. It's only active when performing completion in the middle of a word. If enabled, readline does not insert characters from the completion that match characters after point in the word being completed, so portions of the word following the cursor are not duplicated. vi-cmd-mode-string ((cmd)) This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in command mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. vi-ins-mode-string ((ins)) This string is displayed immediately before the last line of the primary prompt when vi editing mode is active and in insertion mode. The value is expanded like a key binding, so the standard set of meta- and control prefixes and backslash escape sequences is available. Use the \1 and \2 escapes to begin and end sequences of non-printing characters, which can be used to embed a terminal control sequence into the mode string. visible-stats (Off) If set to On, a character denoting a file's type as reported by stat(2) is appended to the filename when listing possible com- pletions. Conditional Constructs Readline implements a facility similar in spirit to the conditional compilation features of the C preprocessor which allows key bindings and variable settings to be performed as the result of tests. There are four parser directives used. $if The $if construct allows bindings to be made based on the edit- ing mode, the terminal being used, or the application using readline. The text of the test extends to the end of the line; no characters are required to isolate it. mode The mode= form of the $if directive is used to test whether readline is in emacs or vi mode. This may be used in conjunction with the set keymap command, for instance, to set bindings in the emacs-standard and emacs-ctlx keymaps only if readline is starting out in emacs mode. term The term= form may be used to include terminal-specific key bindings, perhaps to bind the key sequences output by the terminal's function keys. The word on the right side of the = is tested against the full name of the terminal and the portion of the terminal name before the first -. This allows sun to match both sun and sun-cmd, for instance. application The application construct is used to include application- specific settings. Each program using the readline library sets the application name, and an initialization file can test for a particular value. This could be used to bind key sequences to functions useful for a specific program. For instance, the following command adds a key sequence that quotes the current or previous word in bash: $if Bash # Quote the current or previous word "\C-xq": "\eb\"\ef\"" $endif $endif This command, as seen in the previous example, terminates an $if command. $else Commands in this branch of the $if directive are executed if the test fails. $include This directive takes a single filename as an argument and reads commands and bindings from that file. For example, the follow- ing directive would read /etc/inputrc: $include /etc/inputrc SEARCHING Readline provides commands for searching through the command history for lines containing a specified string. There are two search modes: incremental and non-incremental. Incremental searches begin before the user has finished typing the search string. As each character of the search string is typed, read- line displays the next entry from the history matching the string typed so far. An incremental search requires only as many characters as needed to find the desired history entry. To search backward in the history for a particular string, type C-r. Typing C-s searches forward through the history. The characters present in the value of the isearch-terminators variable are used to terminate an incremental search. If that variable has not been assigned a value the Escape and C-J characters will terminate an incremental search. C-G will abort an incremental search and restore the original line. When the search is terminated, the history entry containing the search string becomes the current line. To find other matching entries in the history list, type C-s or C-r as appropriate. This will search backward or forward in the history for the next line matching the search string typed so far. Any other key sequence bound to a readline command will terminate the search and exe- cute that command. For instance, a newline will terminate the search and accept the line, thereby executing the command from the history list. A movement command will terminate the search, make the last line found the current line, and begin editing. Non-incremental searches read the entire search string before starting to search for matching history lines. The search string may be typed by the user or be part of the contents of the current line. EDITING COMMANDS The following is a list of the names of the commands and the default key sequences to which they are bound. Command names without an accom- panying key sequence are unbound by default. In the following descriptions, point refers to the current cursor posi- tion, and mark refers to a cursor position saved by the set-mark com- mand. The text between the point and mark is referred to as the region. Commands for Moving beginning-of-line (C-a) Move to the start of the current line. end-of-line (C-e) Move to the end of the line. forward-char (C-f) Move forward a character. backward-char (C-b) Move back a character. forward-word (M-f) Move forward to the end of the next word. Words are composed of alphanumeric characters (letters and digits). backward-word (M-b) Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits). clear-screen (C-l) Clear the screen leaving the current line at the top of the screen. With an argument, refresh the current line without clearing the screen. redraw-current-line Refresh the current line. Commands for Manipulating the History accept-line (Newline, Return) Accept the line regardless of where the cursor is. If this line is non-empty, it may be added to the history list for future recall with add_history(). If the line is a modified history line, the history line is restored to its original state. previous-history (C-p) Fetch the previous command from the history list, moving back in the list. next-history (C-n) Fetch the next command from the history list, moving forward in the list. beginning-of-history (M-<) Move to the first line in the history. end-of-history (M->) Move to the end of the input history, i.e., the line currently being entered. reverse-search-history (C-r) Search backward starting at the current line and moving `up' through the history as necessary. This is an incremental search. forward-search-history (C-s) Search forward starting at the current line and moving `down' through the history as necessary. This is an incremental search. non-incremental-reverse-search-history (M-p) Search backward through the history starting at the current line using a non-incremental search for a string supplied by the user. non-incremental-forward-search-history (M-n) Search forward through the history using a non-incremental search for a string supplied by the user. history-search-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the point). The search string must match at the beginning of a history line. This is a non-incremental search. history-search-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string must match at the beginning of a history line. This is a non-incremental search. history-substring-search-backward Search backward through the history for the string of characters between the start of the current line and the current cursor position (the point). The search string may match anywhere in a history line. This is a non-incremental search. history-substring-search-forward Search forward through the history for the string of characters between the start of the current line and the point. The search string may match anywhere in a history line. This is a non- incremental search. yank-nth-arg (M-C-y) Insert the first argument to the previous command (usually the second word on the previous line) at point. With an argument n, insert the nth word from the previous command (the words in the previous command begin with word 0). A negative argument inserts the nth word from the end of the previous command. Once the argument n is computed, the argument is extracted as if the "!n" history expansion had been specified. yank-last-arg (M-., M-_) Insert the last argument to the previous command (the last word of the previous history entry). With a numeric argument, behave exactly like yank-nth-arg. Successive calls to yank-last-arg move back through the history list, inserting the last word (or the word specified by the argument to the first call) of each line in turn. Any numeric argument supplied to these successive calls determines the direction to move through the history. A negative argument switches the direction through the history (back or forward). The history expansion facilities are used to extract the last argument, as if the "!$" history expansion had been specified. Commands for Changing Text end-of-file (usually C-d) The character indicating end-of-file as set, for example, by ``stty''. If this character is read when there are no charac- ters on the line, and point is at the beginning of the line, Readline interprets it as the end of input and returns EOF. delete-char (C-d) Delete the character at point. If this function is bound to the same character as the tty EOF character, as C-d commonly is, see above for the effects. backward-delete-char (Rubout) Delete the character behind the cursor. When given a numeric argument, save the deleted text on the kill ring. forward-backward-delete-char Delete the character under the cursor, unless the cursor is at the end of the line, in which case the character behind the cur- sor is deleted. quoted-insert (C-q, C-v) Add the next character that you type to the line verbatim. This is how to insert characters like C-q, for example. tab-insert (M-TAB) Insert a tab character. self-insert (a, b, A, 1, !, ...) Insert the character typed. transpose-chars (C-t) Drag the character before point forward over the character at point, moving point forward as well. If point is at the end of the line, then this transposes the two characters before point. Negative arguments have no effect. transpose-words (M-t) Drag the word before point past the word after point, moving point over that word as well. If point is at the end of the line, this transposes the last two words on the line. upcase-word (M-u) Uppercase the current (or following) word. With a negative argument, uppercase the previous word, but do not move point. downcase-word (M-l) Lowercase the current (or following) word. With a negative argument, lowercase the previous word, but do not move point. capitalize-word (M-c) Capitalize the current (or following) word. With a negative argument, capitalize the previous word, but do not move point. overwrite-mode Toggle overwrite mode. With an explicit positive numeric argu- ment, switches to overwrite mode. With an explicit non-positive numeric argument, switches to insert mode. This command affects only emacs mode; vi mode does overwrite differently. Each call to readline() starts in insert mode. In overwrite mode, charac- ters bound to self-insert replace the text at point rather than pushing the text to the right. Characters bound to back- ward-delete-char replace the character before point with a space. By default, this command is unbound. Killing and Yanking kill-line (C-k) Kill the text from point to the end of the line. backward-kill-line (C-x Rubout) Kill backward to the beginning of the line. unix-line-discard (C-u) Kill backward from point to the beginning of the line. The killed text is saved on the kill-ring. kill-whole-line Kill all characters on the current line, no matter where point is. kill-word (M-d) Kill from point the end of the current word, or if between words, to the end of the next word. Word boundaries are the same as those used by forward-word. backward-kill-word (M-Rubout) Kill the word behind point. Word boundaries are the same as those used by backward-word. unix-word-rubout (C-w) Kill the word behind point, using white space as a word bound- ary. The killed text is saved on the kill-ring. unix-filename-rubout Kill the word behind point, using white space and the slash character as the word boundaries. The killed text is saved on the kill-ring. delete-horizontal-space (M-\) Delete all spaces and tabs around point. kill-region Kill the text between the point and mark (saved cursor posi- tion). This text is referred to as the region. copy-region-as-kill Copy the text in the region to the kill buffer. copy-backward-word Copy the word before point to the kill buffer. The word bound- aries are the same as backward-word. copy-forward-word Copy the word following point to the kill buffer. The word boundaries are the same as forward-word. yank (C-y) Yank the top of the kill ring into the buffer at point. yank-pop (M-y) Rotate the kill ring, and yank the new top. Only works follow- ing yank or yank-pop. Numeric Arguments digit-argument (M-0, M-1, ..., M--) Add this digit to the argument already accumulating, or start a new argument. M-- starts a negative argument. universal-argument This is another way to specify an argument. If this command is followed by one or more digits, optionally with a leading minus sign, those digits define the argument. If the command is fol- lowed by digits, executing universal-argument again ends the numeric argument, but is otherwise ignored. As a special case, if this command is immediately followed by a character that is neither a digit or minus sign, the argument count for the next command is multiplied by four. The argument count is initially one, so executing this function the first time makes the argu- ment count four, a second time makes the argument count sixteen, and so on. Completing complete (TAB) Attempt to perform completion on the text before point. The actual completion performed is application-specific. Bash, for instance, attempts completion treating the text as a variable (if the text begins with $), username (if the text begins with ~), hostname (if the text begins with @), or command (including aliases and functions) in turn. If none of these produces a match, filename completion is attempted. Gdb, on the other hand, allows completion of program functions and variables, and only attempts filename completion under certain circumstances. possible-completions (M-?) List the possible completions of the text before point. When displaying completions, readline sets the number of columns used for display to the value of completion-display-width, the value of the environment variable COLUMNS, or the screen width, in that order. insert-completions (M-*) Insert all completions of the text before point that would have been generated by possible-completions. menu-complete Similar to complete, but replaces the word to be completed with a single match from the list of possible completions. Repeated execution of menu-complete steps through the list of possible completions, inserting each match in turn. At the end of the list of completions, the bell is rung (subject to the setting of bell-style) and the original text is restored. An argument of n moves n positions forward in the list of matches; a negative argument may be used to move backward through the list. This command is intended to be bound to TAB, but is unbound by default. menu-complete-backward Identical to menu-complete, but moves backward through the list of possible completions, as if menu-complete had been given a negative argument. This command is unbound by default. delete-char-or-list Deletes the character under the cursor if not at the beginning or end of the line (like delete-char). If at the end of the line, behaves identically to possible-completions. Keyboard Macros start-kbd-macro (C-x () Begin saving the characters typed into the current keyboard macro. end-kbd-macro (C-x )) Stop saving the characters typed into the current keyboard macro and store the definition. call-last-kbd-macro (C-x e) Re-execute the last keyboard macro defined, by making the char- acters in the macro appear as if typed at the keyboard. print-last-kbd-macro () Print the last keyboard macro defined in a format suitable for the inputrc file. Miscellaneous re-read-init-file (C-x C-r) Read in the contents of the inputrc file, and incorporate any bindings or variable assignments found there. abort (C-g) Abort the current editing command and ring the terminal's bell (subject to the setting of bell-style). do-uppercase-version (M-a, M-b, M-x, ...) If the metafied character x is lowercase, run the command that is bound to the corresponding uppercase character. prefix-meta (ESC) Metafy the next character typed. ESC f is equivalent to Meta-f. undo (C-_, C-x C-u) Incremental undo, separately remembered for each line. revert-line (M-r) Undo all changes made to this line. This is like executing the undo command enough times to return the line to its initial state. tilde-expand (M-&) Perform tilde expansion on the current word. set-mark (C-@, M-) Set the mark to the point. If a numeric argument is supplied, the mark is set to that position. exchange-point-and-mark (C-x C-x) Swap the point with the mark. The current cursor position is set to the saved position, and the old cursor position is saved as the mark. character-search (C-]) A character is read and point is moved to the next occurrence of that character. A negative count searches for previous occur- rences. character-search-backward (M-C-]) A character is read and point is moved to the previous occur- rence of that character. A negative count searches for subse- quent occurrences. skip-csi-sequence Read enough characters to consume a multi-key sequence such as those defined for keys like Home and End. Such sequences begin with a Control Sequence Indicator (CSI), usually ESC-[. If this sequence is bound to "\[", keys producing such sequences will have no effect unless explicitly bound to a readline command, instead of inserting stray characters into the editing buffer. This is unbound by default, but usually bound to ESC-[. insert-comment (M-#) Without a numeric argument, the value of the readline com- ment-begin variable is inserted at the beginning of the current line. If a numeric argument is supplied, this command acts as a toggle: if the characters at the beginning of the line do not match the value of comment-begin, the value is inserted, other- wise the characters in comment-begin are deleted from the begin- ning of the line. In either case, the line is accepted as if a newline had been typed. The default value of comment-begin makes the current line a shell comment. If a numeric argument causes the comment character to be removed, the line will be executed by the shell. dump-functions Print all of the functions and their key bindings to the read- line output stream. If a numeric argument is supplied, the out- put is formatted in such a way that it can be made part of an inputrc file. dump-variables Print all of the settable variables and their values to the readline output stream. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. dump-macros Print all of the readline key sequences bound to macros and the strings they output. If a numeric argument is supplied, the output is formatted in such a way that it can be made part of an inputrc file. emacs-editing-mode (C-e) When in vi command mode, this causes a switch to emacs editing mode. vi-editing-mode (M-C-j) When in emacs editing mode, this causes a switch to vi editing mode. DEFAULT KEY BINDINGS The following is a list of the default emacs and vi bindings. Charac- ters with the eighth bit set are written as M-, and are referred to as metafied characters. The printable ASCII characters not mentioned in the list of emacs standard bindings are bound to the self-insert function, which just inserts the given character into the input line. In vi insertion mode, all characters not specifically men- tioned are bound to self-insert. Characters assigned to signal genera- tion by stty(1) or the terminal driver, such as C-Z or C-C, retain that function. Upper and lower case metafied characters are bound to the same function in the emacs mode meta keymap. The remaining characters are unbound, which causes readline to ring the bell (subject to the setting of the bell-style variable). Emacs Mode Emacs Standard bindings "C-@" set-mark "C-A" beginning-of-line "C-B" backward-char "C-D" delete-char "C-E" end-of-line "C-F" forward-char "C-G" abort "C-H" backward-delete-char "C-I" complete "C-J" accept-line "C-K" kill-line "C-L" clear-screen "C-M" accept-line "C-N" next-history "C-P" previous-history "C-Q" quoted-insert "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-]" character-search "C-_" undo " " to "/" self-insert "0" to "9" self-insert ":" to "~" self-insert "C-?" backward-delete-char Emacs Meta bindings "M-C-G" abort "M-C-H" backward-kill-word "M-C-I" tab-insert "M-C-J" vi-editing-mode "M-C-M" vi-editing-mode "M-C-R" revert-line "M-C-Y" yank-nth-arg "M-C-[" complete "M-C-]" character-search-backward "M-space" set-mark "M-#" insert-comment "M-&" tilde-expand "M-*" insert-completions "M--" digit-argument "M-." yank-last-arg "M-0" digit-argument "M-1" digit-argument "M-2" digit-argument "M-3" digit-argument "M-4" digit-argument "M-5" digit-argument "M-6" digit-argument "M-7" digit-argument "M-8" digit-argument "M-9" digit-argument "M-<" beginning-of-history "M-=" possible-completions "M->" end-of-history "M-?" possible-completions "M-B" backward-word "M-C" capitalize-word "M-D" kill-word "M-F" forward-word "M-L" downcase-word "M-N" non-incremental-forward-search-history "M-P" non-incremental-reverse-search-history "M-R" revert-line "M-T" transpose-words "M-U" upcase-word "M-Y" yank-pop "M-\" delete-horizontal-space "M-~" tilde-expand "M-C-?" backward-kill-word "M-_" yank-last-arg Emacs Control-X bindings "C-XC-G" abort "C-XC-R" re-read-init-file "C-XC-U" undo "C-XC-X" exchange-point-and-mark "C-X(" start-kbd-macro "C-X)" end-kbd-macro "C-XE" call-last-kbd-macro "C-XC-?" backward-kill-line VI Mode bindings VI Insert Mode functions "C-D" vi-eof-maybe "C-H" backward-delete-char "C-I" complete "C-J" accept-line "C-M" accept-line "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-[" vi-movement-mode "C-_" undo " " to "~" self-insert "C-?" backward-delete-char VI Command Mode functions "C-D" vi-eof-maybe "C-E" emacs-editing-mode "C-G" abort "C-H" backward-char "C-J" accept-line "C-K" kill-line "C-L" clear-screen "C-M" accept-line "C-N" next-history "C-P" previous-history "C-Q" quoted-insert "C-R" reverse-search-history "C-S" forward-search-history "C-T" transpose-chars "C-U" unix-line-discard "C-V" quoted-insert "C-W" unix-word-rubout "C-Y" yank "C-_" vi-undo " " forward-char "#" insert-comment "$" end-of-line "%" vi-match "&" vi-tilde-expand "*" vi-complete "+" next-history "," vi-char-search "-" previous-history "." vi-redo "/" vi-search "0" beginning-of-line "1" to "9" vi-arg-digit ";" vi-char-search "=" vi-complete "?" vi-search "A" vi-append-eol "B" vi-prev-word "C" vi-change-to "D" vi-delete-to "E" vi-end-word "F" vi-char-search "G" vi-fetch-history "I" vi-insert-beg "N" vi-search-again "P" vi-put "R" vi-replace "S" vi-subst "T" vi-char-search "U" revert-line "W" vi-next-word "X" backward-delete-char "Y" vi-yank-to "\" vi-complete "^" vi-first-print "_" vi-yank-arg "`" vi-goto-mark "a" vi-append-mode "b" vi-prev-word "c" vi-change-to "d" vi-delete-to "e" vi-end-word "f" vi-char-search "h" backward-char "i" vi-insertion-mode "j" next-history "k" prev-history "l" forward-char "m" vi-set-mark "n" vi-search-again "p" vi-put "r" vi-change-char "s" vi-subst "t" vi-char-search "u" vi-undo "w" vi-next-word "x" vi-delete "y" vi-yank-to "|" vi-column "~" vi-change-case SEE ALSO The Gnu Readline Library, Brian Fox and Chet Ramey The Gnu History Library, Brian Fox and Chet Ramey bash(1) FILES ~/.inputrc Individual readline initialization file AUTHORS Brian Fox, Free Software Foundation bfox@gnu.org Chet Ramey, Case Western Reserve University chet.ramey@case.edu BUG REPORTS If you find a bug in readline, you should report it. But first, you should make sure that it really is a bug, and that it appears in the latest version of the readline library that you have. Once you have determined that a bug actually exists, mail a bug report to bug-readline@gnu.org. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to bug-readline@gnu.org or posted to the Usenet newsgroup gnu.bash.bug. Comments and bug reports concerning this manual page should be directed to chet.ramey@case.edu. BUGS It's too big and too slow. GNU Readline 7.0 2016 February 28 READLINE(3) readline-7.0/doc/history.0000664 000436 000024 00000065523 12544775027 015605 0ustar00chetstaff000000 000000 HISTORY(3) Library Functions Manual HISTORY(3) NAME history - GNU History Library COPYRIGHT The GNU History Library is Copyright (C) 1989-2014 by the Free Software Foundation, Inc. DESCRIPTION Many programs read input from the user a line at a time. The GNU His- tory library is able to keep track of those lines, associate arbitrary data with each line, and utilize information from previous lines in composing new ones. HISTORY EXPANSION The history library supports a history expansion feature that is iden- tical to the history expansion in bash. This section describes what syntax features are available. History expansions introduce words from the history list into the input stream, making it easy to repeat commands, insert the arguments to a previous command into the current input line, or fix errors in previous commands quickly. History expansion is usually performed immediately after a complete line is read. It takes place in two parts. The first is to determine which line from the history list to use during substitution. The sec- ond is to select portions of that line for inclusion into the current one. The line selected from the history is the event, and the portions of that line that are acted upon are words. Various modifiers are available to manipulate the selected words. The line is broken into words in the same fashion as bash does when reading input, so that sev- eral words that would otherwise be separated are considered one word when surrounded by quotes (see the description of history_tokenize() below). History expansions are introduced by the appearance of the history expansion character, which is ! by default. Only backslash (\) and single quotes can quote the history expansion character. Event Designators An event designator is a reference to a command line entry in the his- tory list. Unless the reference is absolute, events are relative to the current position in the history list. ! Start a history substitution, except when followed by a blank, newline, = or (. !n Refer to command line n. !-n Refer to the current command minus n. !! Refer to the previous command. This is a synonym for `!-1'. !string Refer to the most recent command preceding the current position in the history list starting with string. !?string[?] Refer to the most recent command preceding the current position in the history list containing string. The trailing ? may be omitted if string is followed immediately by a newline. ^string1^string2^ Quick substitution. Repeat the last command, replacing string1 with string2. Equivalent to ``!!:s/string1/string2/'' (see Mod- ifiers below). !# The entire command line typed so far. Word Designators Word designators are used to select desired words from the event. A : separates the event specification from the word designator. It may be omitted if the word designator begins with a ^, $, *, -, or %. Words are numbered from the beginning of the line, with the first word being denoted by 0 (zero). Words are inserted into the current line sepa- rated by single spaces. 0 (zero) The zeroth word. For the shell, this is the command word. n The nth word. ^ The first argument. That is, word 1. $ The last word. This is usually the last argument, but will expand to the zeroth word if there is only one word in the line. % The word matched by the most recent `?string?' search. x-y A range of words; `-y' abbreviates `0-y'. * All of the words but the zeroth. This is a synonym for `1-$'. It is not an error to use * if there is just one word in the event; the empty string is returned in that case. x* Abbreviates x-$. x- Abbreviates x-$ like x*, but omits the last word. If a word designator is supplied without an event specification, the previous command is used as the event. Modifiers After the optional word designator, there may appear a sequence of one or more of the following modifiers, each preceded by a `:'. h Remove a trailing file name component, leaving only the head. t Remove all leading file name components, leaving the tail. r Remove a trailing suffix of the form .xxx, leaving the basename. e Remove all but the trailing suffix. p Print the new command but do not execute it. q Quote the substituted words, escaping further substitutions. x Quote the substituted words as with q, but break into words at blanks and newlines. s/old/new/ Substitute new for the first occurrence of old in the event line. Any delimiter can be used in place of /. The final delimiter is optional if it is the last character of the event line. The delimiter may be quoted in old and new with a single backslash. If & appears in new, it is replaced by old. A sin- gle backslash will quote the &. If old is null, it is set to the last old substituted, or, if no previous history substitu- tions took place, the last string in a !?string[?] search. & Repeat the previous substitution. g Cause changes to be applied over the entire event line. This is used in conjunction with `:s' (e.g., `:gs/old/new/') or `:&'. If used with `:s', any delimiter can be used in place of /, and the final delimiter is optional if it is the last character of the event line. An a may be used as a synonym for g. G Apply the following `s' modifier once to each word in the event line. PROGRAMMING WITH HISTORY FUNCTIONS This section describes how to use the History library in other pro- grams. Introduction to History The programmer using the History library has available functions for remembering lines on a history list, associating arbitrary data with a line, removing lines from the list, searching through the list for a line containing an arbitrary text string, and referencing any line in the list directly. In addition, a history expansion function is avail- able which provides for a consistent user interface across different programs. The user using programs written with the History library has the bene- fit of a consistent user interface with a set of well-known commands for manipulating the text of previous lines and using that text in new commands. The basic history manipulation commands are identical to the history substitution provided by bash. If the programmer desires, he can use the Readline library, which includes some history manipulation by default, and has the added advan- tage of command line editing. Before declaring any functions using any functionality the History library provides in other code, an application writer should include the file  in any file that uses the History library's features. It supplies extern declarations for all of the library's public functions and variables, and declares all of the pub- lic data structures. History Storage The history list is an array of history entries. A history entry is declared as follows: typedef void * histdata_t; typedef struct _hist_entry { char *line; char *timestamp; histdata_t data; } HIST_ENTRY; The history list itself might therefore be declared as HIST_ENTRY ** the_history_list; The state of the History library is encapsulated into a single struc- ture: /* * A structure used to pass around the current state of the history. */ typedef struct _hist_state { HIST_ENTRY **entries; /* Pointer to the entries themselves. */ int offset; /* The location pointer within this array. */ int length; /* Number of elements within this array. */ int size; /* Number of slots allocated to this array. */ int flags; } HISTORY_STATE; If the flags member includes HS_STIFLED, the history has been stifled. History Functions This section describes the calling sequence for the various functions exported by the GNU History library. Initializing History and State Management This section describes functions used to initialize and manage the state of the History library when you want to use the history functions in your program. void using_history (void) Begin a session in which the history functions might be used. This initializes the interactive variables. HISTORY_STATE * history_get_history_state (void) Return a structure describing the current state of the input history. void history_set_history_state (HISTORY_STATE *state) Set the state of the history list according to state. History List Management These functions manage individual entries on the history list, or set parameters managing the list itself. void add_history (const char *string) Place string at the end of the history list. The associated data field (if any) is set to NULL. void add_history_time (const char *string) Change the time stamp associated with the most recent history entry to string. HIST_ENTRY * remove_history (int which) Remove history entry at offset which from the history. The removed element is returned so you can free the line, data, and containing structure. histdata_t free_history_entry (HIST_ENTRY *histent) Free the history entry histent and any history library private data associated with it. Returns the application-specific data so the call- er can dispose of it. HIST_ENTRY * replace_history_entry (int which, const char *line, hist- data_t data) Make the history entry at offset which have line and data. This returns the old entry so the caller can dispose of any application-spe- cific data. In the case of an invalid which, a NULL pointer is returned. void clear_history (void) Clear the history list by deleting all the entries. void stifle_history (int max) Stifle the history list, remembering only the last max entries. int unstifle_history (void) Stop stifling the history. This returns the previously-set maximum number of history entries (as set by stifle_history()). history was stifled. The value is positive if the history was stifled, negative if it wasn't. int history_is_stifled (void) Returns non-zero if the history is stifled, zero if it is not. Information About the History List These functions return information about the entire history list or individual list entries. HIST_ENTRY ** history_list (void) Return a NULL terminated array of HIST_ENTRY * which is the current input history. Element 0 of this list is the beginning of time. If there is no history, return NULL. int where_history (void) Returns the offset of the current history element. HIST_ENTRY * current_history (void) Return the history entry at the current position, as determined by where_history(). If there is no entry there, return a NULL pointer. HIST_ENTRY * history_get (int offset) Return the history entry at position offset, starting from his- tory_base. If there is no entry there, or if offset is greater than the history length, return a NULL pointer. time_t history_get_time (HIST_ENTRY *) Return the time stamp associated with the history entry passed as the argument. int history_total_bytes (void) Return the number of bytes that the primary history entries are using. This function returns the sum of the lengths of all the lines in the history. Moving Around the History List These functions allow the current index into the history list to be set or changed. int history_set_pos (int pos) Set the current history offset to pos, an absolute index into the list. Returns 1 on success, 0 if pos is less than zero or greater than the number of history entries. HIST_ENTRY * previous_history (void) Back up the current history offset to the previous history entry, and return a pointer to that entry. If there is no previous entry, return a NULL pointer. HIST_ENTRY * next_history (void) If the current history offset refers to a valid history entry, incre- ment the current history offset. If the possibly-incremented history offset refers to a valid history entry, return a pointer to that entry; otherwise, return a NULL pointer. Searching the History List These functions allow searching of the history list for entries con- taining a specific string. Searching may be performed both forward and backward from the current history position. The search may be anchored, meaning that the string must match at the beginning of the history entry. int history_search (const char *string, int direction) Search the history for string, starting at the current history offset. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that history entry, and the value returned is the offset in the line of the entry where string was found. Otherwise, nothing is changed, and a -1 is returned. int history_search_prefix (const char *string, int direction) Search the history for string, starting at the current history offset. The search is anchored: matching lines must begin with string. If direction is less than 0, then the search is through previous entries, otherwise through subsequent entries. If string is found, then the current history index is set to that entry, and the return value is 0. Otherwise, nothing is changed, and a -1 is returned. int history_search_pos (const char *string, int direction, int pos) Search for string in the history list, starting at pos, an absolute index into the list. If direction is negative, the search proceeds backward from pos, otherwise forward. Returns the absolute index of the history element where string was found, or -1 otherwise. Managing the History File The History library can read the history from and write it to a file. This section documents the functions for managing a history file. int read_history (const char *filename) Add the contents of filename to the history list, a line at a time. If filename is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. int read_history_range (const char *filename, int from, int to) Read a range of lines from filename, adding them to the history list. Start reading at line from and end at to. If from is zero, start at the beginning. If to is less than from, then read until the end of the file. If filename is NULL, then read from ~/.history. Returns 0 if successful, or errno if not. int write_history (const char *filename) Write the current history to filename, overwriting filename if neces- sary. If filename is NULL, then write the history list to ~/.history. Returns 0 on success, or errno on a read or write error. int append_history (int nelements, const char *filename) Append the last nelements of the history list to filename. If filename is NULL, then append to ~/.history. Returns 0 on success, or errno on a read or write error. int history_truncate_file (const char *filename, int nlines) Truncate the history file filename, leaving only the last nlines lines. If filename is NULL, then ~/.history is truncated. Returns 0 on suc- cess, or errno on failure. History Expansion These functions implement history expansion. int history_expand (char *string, char **output) Expand string, placing the result into output, a pointer to a string. Returns: 0 If no expansions took place (or, if the only change in the text was the removal of escape characters preceding the history expansion character); 1 if expansions did take place; -1 if there was an error in expansion; 2 if the returned line should be displayed, but not exe- cuted, as with the :p modifier. If an error ocurred in expansion, then output contains a descriptive error message. char * get_history_event (const char *string, int *cindex, int qchar) Returns the text of the history event beginning at string + *cindex. *cindex is modified to point to after the event specifier. At function entry, cindex points to the index into string where the history event specification begins. qchar is a character that is allowed to end the event specification in addition to the ``normal'' terminating charac- ters. char ** history_tokenize (const char *string) Return an array of tokens parsed out of string, much as the shell might. The tokens are split on the characters in the his- tory_word_delimiters variable, and shell quoting conventions are obeyed. char * history_arg_extract (int first, int last, const char *string) Extract a string segment consisting of the first through last arguments present in string. Arguments are split using history_tokenize(). History Variables This section describes the externally-visible variables exported by the GNU History Library. int history_base The logical offset of the first entry in the history list. int history_length The number of entries currently stored in the history list. int history_max_entries The maximum number of history entries. This must be changed using sti- fle_history(). int history_wite_timestamps If non-zero, timestamps are written to the history file, so they can be preserved between sessions. The default value is 0, meaning that time- stamps are not saved. The current timestamp format uses the value of history_comment_char to delimit timestamp entries in the history file. If that variable does not have a value (the default), timestamps will not be written. char history_expansion_char The character that introduces a history event. The default is !. Set- ting this to 0 inhibits history expansion. char history_subst_char The character that invokes word substitution if found at the start of a line. The default is ^. char history_comment_char During tokenization, if this character is seen as the first character of a word, then it and all subsequent characters up to a newline are ignored, suppressing history expansion for the remainder of the line. This is disabled by default. char * history_word_delimiters The characters that separate tokens for history_tokenize(). The default value is " \t\n()<>;&|". char * history_no_expand_chars The list of characters which inhibit history expansion if found immedi- ately following history_expansion_char. The default is space, tab, newline, \r, and =. char * history_search_delimiter_chars The list of additional characters which can delimit a history search string, in addition to space, tab, : and ? in the case of a substring search. The default is empty. int history_quotes_inhibit_expansion If non-zero, double-quoted words are not scanned for the history expan- sion character or the history comment character. The default value is 0. rl_linebuf_func_t * history_inhibit_expansion_function This should be set to the address of a function that takes two argu- ments: a char * (string) and an int index into that string (i). It should return a non-zero value if the history expansion starting at string[i] should not be performed; zero if the expansion should be done. It is intended for use by applications like bash that use the history expansion character for additional purposes. By default, this variable is set to NULL. FILES ~/.history Default filename for reading and writing saved history SEE ALSO The Gnu Readline Library, Brian Fox and Chet Ramey The Gnu History Library, Brian Fox and Chet Ramey bash(1) readline(3) AUTHORS Brian Fox, Free Software Foundation bfox@gnu.org Chet Ramey, Case Western Reserve University chet.ramey@case.edu BUG REPORTS If you find a bug in the history library, you should report it. But first, you should make sure that it really is a bug, and that it appears in the latest version of the history library that you have. Once you have determined that a bug actually exists, mail a bug report to bug-readline@gnu.org. If you have a fix, you are welcome to mail that as well! Suggestions and `philosophical' bug reports may be mailed to bug-readline@gnu.org or posted to the Usenet newsgroup gnu.bash.bug. Comments and bug reports concerning this manual page should be directed to chet.ramey@case.edu. GNU History 6.3 2015 May 24 HISTORY(3) readline-7.0/doc/readline_3.ps000664 000436 000024 00000266416 12764101651 016366 0ustar00chetstaff000000 000000 %!PS-Adobe-3.0 %%Creator: groff version 1.22.3 %%CreationDate: Wed Sep 7 17:16:26 2016 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%+ font Courier %%DocumentSuppliedResources: procset grops 1.22 3 %%Pages: 16 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait %%EndComments %%BeginDefaults %%PageMedia: Default %%EndDefaults %%BeginProlog %%BeginResource: procset grops 1.22 3 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin DEFS/BPhook known{DEFS begin BPhook end}if 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /setcmykcolor where{ pop /Ck/setcmykcolor load def }if /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def /setpagedevice{}def mark }bind def /PEND{ cleartomark countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%EndProlog %%BeginSetup %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic %%IncludeResource: font Courier grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/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]def /Courier@0 ENC0/Courier RE/Times-Italic@0 ENC0/Times-Italic RE /Times-Bold@0 ENC0/Times-Bold RE/Times-Roman@0 ENC0/Times-Roman RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 (readline \255 get a line from a user with editing)108 96 Q F1(SYNOPSIS) 72 112.8 Q/F2 10/Times-Bold@0 SF(#include )108 124.8 Q (#include )-.18 E(#include )-.7 E/F3 10/Times-Italic@0 SF -.15(ch)108 165.6 S(ar *).15 E F2 -.18(re)108 177.6 S(adline).18 E F0 (\()2.5 E F3(const c)A(har *pr)-.15 E(ompt)-.45 E F0(\);)A F1(COPYRIGHT) 72 194.4 Q F0(Readline is Cop)108 206.4 Q (yright \251 1989\2552014 Free Softw)-.1 E(are F)-.1 E(oundation, Inc.) -.15 E F1(DESCRIPTION)72 223.2 Q F2 -.18(re)108 235.2 S(adline).18 E F0 .088(will read a line from the terminal and return it, using)2.588 F F2 (pr)2.587 E(ompt)-.18 E F0 .087(as a prompt.)2.587 F(If)5.087 E F2(pr) 2.587 E(ompt)-.18 E F0(is)2.587 E F2(NULL)2.587 E F0(or)2.587 E .42 (the empty string, no prompt is issued.)108 247.2 R .421 (The line returned is allocated with)5.42 F F3(malloc)2.921 E F0 .421 (\(3\); the caller must free it).31 F(when \214nished.)108 259.2 Q (The line returned has the \214nal ne)5 E(wline remo)-.25 E -.15(ve)-.15 G(d, so only the te).15 E(xt of the line remains.)-.15 E F2 -.18(re)108 276 S(adline).18 E F0(of)3.79 E 1.29 (fers editing capabilities while the user is entering the line.)-.25 F 1.289(By def)6.289 F 1.289(ault, the line editing com-)-.1 F (mands are similar to those of emacs.)108 288 Q 2.5(Av)5 G (i\255style line editing interf)-2.5 E(ace is also a)-.1 E -.25(va)-.2 G (ilable.).25 E .272 (This manual page describes only the most basic use of)108 304.8 R F2 -.18(re)2.772 G(adline).18 E F0 5.272(.M)C .272 (uch more functionality is a)-5.272 F -.25(va)-.2 G .272(ilable; see).25 F F3(The GNU Readline Libr)108 316.8 Q(ary)-.15 E F0(and)2.5 E F3 (The GNU History Libr)2.5 E(ary)-.15 E F0(for additional information.) 2.5 E F1(RETURN V)72 333.6 Q(ALUE)-1.478 E F2 -.18(re)108 345.6 S (adline).18 E F0 1.09(returns the te)3.59 F 1.09(xt of the line read.) -.15 F 3.589(Ab)6.09 G 1.089(lank line returns the empty string.)-3.589 F(If)6.089 E F2(EOF)3.589 E F0 1.089(is encountered)3.589 F .283 (while reading a line, and the line is empty)108 357.6 R(,)-.65 E F2 (NULL)2.783 E F0 .283(is returned.)2.783 F .283(If an)5.283 F F2(EOF) 2.783 E F0 .283(is read with a non\255empty line, it)2.783 F (is treated as a ne)108 369.6 Q(wline.)-.25 E F1(NO)72 386.4 Q -.986(TA) -.438 G(TION)-.054 E F0 .077 (An Emacs-style notation is used to denote k)108 398.4 R -.15(ey)-.1 G (strok).15 E 2.576(es. Control)-.1 F -.1(ke)2.576 G .076 (ys are denoted by C\255)-.05 F F3 -.1(ke)C(y)-.2 E F0 2.576(,e)C .076 (.g., C\255n means)-2.576 F 2.582(Control\255N. Similarly)108 410.4 R(,) -.65 E F3(meta)2.962 E F0 -.1(ke)2.842 G .082(ys are denoted by M\255) -.05 F F3 -.1(ke)C(y)-.2 E F0 2.583(,s)C 2.583(oM)-2.583 G .083 (\255x means Meta\255X.)-2.583 F .083(\(On k)5.083 F -.15(ey)-.1 G .083 (boards without a).15 F F3(meta)108.38 422.4 Q F0 -.1(ke)3.472 G 2.012 -.65(y, M)-.05 H.65 E F3(x)A F0 .712(means ESC)3.212 F F3(x)3.212 E F0 3.212(,i)C .712(.e., press the Escape k)-3.212 F 1.011 -.15(ey t)-.1 H .711(hen the).15 F F3(x)3.981 E F0 -.1(ke)3.741 G 4.511 -.65(y. T)-.05 H .711(his mak).65 F .711(es ESC the)-.1 F F3 .711(meta pr)3.211 F (e\214x)-.37 E F0(.)A .48(The combination M\255C\255)108 434.4 R F3(x)A F0 .48(means ESC\255Control\255)2.98 F F3(x)A F0 2.98(,o)C 2.98(rp)-2.98 G .48(ress the Escape k)-2.98 F .78 -.15(ey t)-.1 H .48 (hen hold the Control k).15 F .78 -.15(ey w)-.1 H(hile).15 E (pressing the)108 446.4 Q F3(x)3.27 E F0 -.1(ke)3.03 G -.65(y.)-.05 G (\)).65 E .62(Readline commands may be gi)108 463.2 R -.15(ve)-.25 G 3.119(nn).15 G(umeric)-3.119 E F3(ar)3.119 E(guments)-.37 E F0 3.119(,w) .27 G .619(hich normally act as a repeat count.)-3.119 F(Sometimes,) 5.619 E(ho)108 475.2 Q(we)-.25 E -.15(ve)-.25 G 1.418 -.4(r, i).15 H 3.118(ti).4 G 3.119(st)-3.118 G .619(he sign of the ar)-3.119 F .619 (gument that is signi\214cant.)-.18 F -.15(Pa)5.619 G .619(ssing a ne) .15 F -.05(ga)-.15 G(ti).05 E .919 -.15(ve a)-.25 H -.18(rg).15 G .619 (ument to a command that).18 F 1.019(acts in the forw)108 487.2 R 1.018 (ard direction \(e.g.,)-.1 F F2(kill\255line)3.518 E F0 3.518(\)c)C 1.018(auses that command to act in a backw)-3.518 F 1.018 (ard direction.)-.1 F(Com-)6.018 E(mands whose beha)108 499.2 Q (vior with ar)-.2 E(guments de)-.18 E(viates from this are noted belo) -.25 E -.65(w.)-.25 G .811(When a command is described as)108 516 R F3 (killing)3.311 E F0(te)3.311 E .811(xt, the te)-.15 F .811 (xt deleted is sa)-.15 F -.15(ve)-.2 G 3.311(df).15 G .812 (or possible future retrie)-3.311 F -.25(va)-.25 G 3.312(l\().25 G F3 (yank-)-3.312 E(ing)108 528 Q F0 2.529(\). The)B .029(killed te)2.529 F .029(xt is sa)-.15 F -.15(ve)-.2 G 2.529(di).15 G 2.529(na)-2.529 G F3 .029(kill ring)B F0 5.029(.C)C(onsecuti)-5.029 E .329 -.15(ve k)-.25 H .029(ills cause the te).15 F .029(xt to be accumulated into one unit,) -.15 F .567(which can be yank)108 540 R .567(ed all at once.)-.1 F .567 (Commands which do not kill te)5.567 F .567 (xt separate the chunks of te)-.15 F .567(xt on the kill)-.15 F(ring.) 108 552 Q F1(INITIALIZA)72 568.8 Q(TION FILE)-1.04 E F0 .091(Readline i\ s customized by putting commands in an initialization \214le \(the)108 580.8 R F3(inputr)2.591 E(c)-.37 E F0 2.591(\214le\). The)2.591 F .091 (name of this \214le)2.591 F 1.442(is tak)108 592.8 R 1.443 (en from the v)-.1 F 1.443(alue of the)-.25 F F2(INPUTRC)3.943 E F0(en) 3.943 E 1.443(vironment v)-.4 F 3.943(ariable. If)-.25 F 1.443(that v) 3.943 F 1.443(ariable is unset, the def)-.25 F 1.443(ault is)-.1 F F3 (~/.inputr)108 604.8 Q(c)-.37 E F0 5.058(.I).31 G 2.558(ft)-5.058 G .058 (hat \214le)-2.558 F .058(does not e)5.058 F .058 (xist or cannot be read, the ultimate def)-.15 F .058(ault is)-.1 F F3 (/etc/inputr)2.557 E(c)-.37 E F0 5.057(.W).31 G .057(hen a program) -5.057 F 1.158(which uses the readline library starts up, the init \214\ le is read, and the k)108 616.8 R 1.459 -.15(ey b)-.1 H 1.159 (indings and v).15 F 1.159(ariables are set.)-.25 F .029 (There are only a fe)108 628.8 R 2.529(wb)-.25 G .029 (asic constructs allo)-2.529 F .028(wed in the readline init \214le.) -.25 F .028(Blank lines are ignored.)5.028 F .028(Lines be)5.028 F(gin-) -.15 E .553(ning with a)108 640.8 R F2(#)3.053 E F0 .554(are comments.) 3.053 F .554(Lines be)5.554 F .554(ginning with a)-.15 F F2($)3.054 E F0 .554(indicate conditional constructs.)3.054 F .554(Other lines denote) 5.554 F -.1(ke)108 652.8 S 2.987(yb)-.05 G .487(indings and v)-2.987 F .487(ariable settings.)-.25 F .487 (Each program using this library may add its o)5.487 F .486 (wn commands and bind-)-.25 F(ings.)108 664.8 Q -.15(Fo)108 681.6 S 2.5 (re).15 G(xample, placing)-2.65 E(M\255Control\255u: uni)144 698.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(or)108 710.4 Q (C\255Meta\255u: uni)144 722.4 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument) -.18 E(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(1)193.45 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E(into the)108 84 Q/F1 10 /Times-Italic@0 SF(inputr)2.51 E(c)-.37 E F0 -.1(wo)2.81 G(uld mak).1 E 2.5(eM)-.1 G(\255C\255u e)-2.5 E -.15(xe)-.15 G (cute the readline command).15 E F1(univer)2.5 E(sal\255ar)-.1 E(gument) -.37 E F0(.).68 E 2.795(The follo)108 100.8 R 2.795 (wing symbolic character names are recognized while processing k)-.25 F 3.095 -.15(ey b)-.1 H(indings:).15 E F1(DEL)5.295 E F0(,).53 E F1(ESC) 5.295 E F0(,).72 E F1(ESCAPE)108 112.8 Q F0(,).73 E F1(LFD)2.5 E F0(,) .28 E F1(NEWLINE)2.5 E F0(,).73 E F1(RET)2.5 E F0(,)1.27 E F1(RETURN)2.5 E F0(,)1.1 E F1 -.4(RU)2.5 G(BOUT).4 E F0(,)1.27 E F1(SP)2.5 E -.3(AC) -.9 G(E).3 E F0(,).73 E F1(SPC)2.5 E F0 2.5(,a).72 G(nd)-2.5 E F1 -.5 (TA)2.5 G(B).5 E F0(.).27 E .209 (In addition to command names, readline allo)108 129.6 R .209(ws k)-.25 F -.15(ey)-.1 G 2.709(st).15 G 2.709(ob)-2.709 G 2.709(eb)-2.709 G .209 (ound to a string that is inserted when the k)-2.709 F .509 -.15(ey i) -.1 H(s).15 E(pressed \(a)108 141.6 Q F1(macr)2.5 E(o)-.45 E F0(\).)A/F2 10/Times-Bold@0 SF -.25(Ke)87 158.4 S 2.5(yB).25 G(indings)-2.5 E F0 .366(The syntax for controlling k)108 170.4 R .666 -.15(ey b)-.1 H .366 (indings in the).15 F F1(inputr)2.876 E(c)-.37 E F0 .366 (\214le is simple.)3.176 F .366(All that is required is the name of the) 5.366 F .264(command or the te)108 182.4 R .264(xt of a macro and a k) -.15 F .564 -.15(ey s)-.1 H .264(equence to which it should be bound.) .15 F .263(The name may be speci-)5.264 F .853(\214ed in one of tw)108 194.4 R 3.353(ow)-.1 G .853(ays: as a symbolic k)-3.453 F 1.153 -.15 (ey n)-.1 H .853(ame, possibly with).15 F F1(Meta\255)3.353 E F0(or) 3.353 E F1(Contr)3.353 E(ol\255)-.45 E F0(pre\214x)3.353 E .853 (es, or as a k)-.15 F -.15(ey)-.1 G 2.919(sequence. The)108 206.4 R .419 (name and k)2.919 F .719 -.15(ey s)-.1 H .419 (equence are separated by a colon.).15 F .419 (There can be no whitespace between the)5.419 F(name and the colon.)108 218.4 Q .361(When using the form)108 235.2 R F2 -.1(ke)2.861 G(yname).1 E F0(:)A F1(function-name).833 E F0(or)2.861 E F1(macr)2.861 E(o)-.45 E F0(,)A F1 -.1(ke)2.861 G(yname)-.2 E F0 .362(is the name of a k)3.042 F .662 -.15(ey s)-.1 H .362(pelled out in Eng-).15 F 2.5(lish. F)108 247.2 R(or e)-.15 E(xample:)-.15 E(Control\255u: uni)144 271.2 Q -.15(ve)-.25 G(rsal\255ar).15 E(gument)-.18 E(Meta\255Rubout: backw)144 283.2 Q (ard\255kill\255w)-.1 E(ord)-.1 E(Control\255o: "> output")144 295.2 Q .148(In the abo)108 312 R .448 -.15(ve ex)-.15 H(ample,).15 E F1(C\255u) 2.488 E F0 .148(is bound to the function)2.898 F F2(uni)2.647 E -.1(ve) -.1 G(rsal\255ar).1 E(gument)-.1 E F0(,)A F1(M-DEL)3.327 E F0 .147 (is bound to the function)3.177 F F2(backward\255kill\255w)108 324 Q (ord)-.1 E F0 3.835(,a)C(nd)-3.835 E F1(C\255o)3.675 E F0 1.336 (is bound to run the macro e)4.016 F 1.336 (xpressed on the right hand side \(that is, to)-.15 F(insert the te)108 336 Q(xt)-.15 E/F3 10/Courier@0 SF 6(>o)2.5 G(utput)-6 E F0 (into the line\).)2.5 E .056(In the second form,)108 352.8 R F2("k)2.556 E(eyseq")-.1 E F0(:)A F1(function\255name).833 E F0(or)2.556 E F1(macr) 2.556 E(o)-.45 E F0(,)A F2 -.1(ke)2.556 G(yseq).1 E F0(dif)2.555 E .055 (fers from)-.25 F F2 -.1(ke)2.555 G(yname).1 E F0(abo)2.555 E .355 -.15 (ve i)-.15 H 2.555(nt).15 G .055(hat strings)-2.555 F 1.284 (denoting an entire k)108 364.8 R 1.584 -.15(ey s)-.1 H 1.284(equence m\ ay be speci\214ed by placing the sequence within double quotes.).15 F (Some)6.284 E .386(GNU Emacs style k)108 376.8 R .686 -.15(ey e)-.1 H .385(scapes can be used, as in the follo).15 F .385(wing e)-.25 F .385 (xample, b)-.15 F .385(ut the symbolic character names)-.2 F (are not recognized.)108 388.8 Q("\\C\255u": uni)144 412.8 Q -.15(ve) -.25 G(rsal\255ar).15 E(gument)-.18 E ("\\C\255x\\C\255r": re\255read\255init\255\214le)144 424.8 Q ("\\e[11~": "Function K)144 436.8 Q .3 -.15(ey 1)-.25 H(").15 E .198 (In this e)108 453.6 R(xample,)-.15 E F1(C-u)2.538 E F0 .199(is ag)2.949 F .199(ain bound to the function)-.05 F F2(uni)2.699 E -.1(ve)-.1 G (rsal\255ar).1 E(gument)-.1 E F0(.)A F1 .199(C-x C-r)5.039 F F0 .199 (is bound to the function)3.429 F F2 -.18(re)108 465.6 S.18 E (ead\255init\255\214le)-.18 E F0 2.5(,a)C(nd)-2.5 E F1(ESC [ 1 1 ~)3.01 E F0(is bound to insert the te)3.94 E(xt)-.15 E F3(Function Key 1)2.5 E F0(.)A(The full set of GNU Emacs style escape sequences a)108 482.4 Q -.25(va)-.2 G(ilable when specifying k).25 E .3 -.15(ey s)-.1 H (equences is).15 E F2<5c43ad>144 494.4 Q F0(control pre\214x)180 494.4 Q F2<5c4dad>144 506.4 Q F0(meta pre\214x)180 506.4 Q F2(\\e)144 518.4 Q F0 (an escape character)180 518.4 Q F2(\\\\)144 530.4 Q F0(backslash)180 530.4 Q F2(\\")144 542.4 Q F0(literal ", a double quote)180 542.4 Q F2 (\\')144 554.4 Q F0(literal ', a single quote)180 554.4 Q(In addition t\ o the GNU Emacs style escape sequences, a second set of backslash escap\ es is a)108 571.2 Q -.25(va)-.2 G(ilable:).25 E F2(\\a)144 583.2 Q F0 (alert \(bell\))180 583.2 Q F2(\\b)144 595.2 Q F0(backspace)180 595.2 Q F2(\\d)144 607.2 Q F0(delete)180 607.2 Q F2(\\f)144 619.2 Q F0 (form feed)180 619.2 Q F2(\\n)144 631.2 Q F0(ne)180 631.2 Q(wline)-.25 E F2(\\r)144 643.2 Q F0(carriage return)180 643.2 Q F2(\\t)144 655.2 Q F0 (horizontal tab)180 655.2 Q F2(\\v)144 667.2 Q F0 -.15(ve)180 667.2 S (rtical tab).15 E F2(\\)144 679.2 Q F1(nnn)A F0 (the eight-bit character whose v)180 679.2 Q(alue is the octal v)-.25 E (alue)-.25 E F1(nnn)2.5 E F0(\(one to three digits\))2.5 E F2(\\x)144 691.2 Q F1(HH)A F0(the eight-bit character whose v)180 691.2 Q (alue is the he)-.25 E(xadecimal v)-.15 E(alue)-.25 E F1(HH)2.5 E F0 (\(one or tw)2.5 E 2.5(oh)-.1 G .3 -.15(ex d)-2.5 H(igits\)).15 E .74 (When entering the te)108 708 R .74(xt of a macro, single or double quo\ tes should be used to indicate a macro de\214nition.)-.15 F .089 (Unquoted te)108 720 R .089(xt is assumed to be a function name.)-.15 F .09(In the macro body)5.089 F 2.59(,t)-.65 G .09 (he backslash escapes described abo)-2.59 F -.15(ve)-.15 G (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(2)193.45 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E(are e)108 84 Q 2.5 (xpanded. Backslash)-.15 F(will quote an)2.5 E 2.5(yo)-.15 G (ther character in the macro te)-2.5 E(xt, including " and '.)-.15 E/F1 10/Times-Bold@0 SF(Bash)108 100.8 Q F0(allo)2.93 E .43 (ws the current readline k)-.25 F .73 -.15(ey b)-.1 H .429 (indings to be displayed or modi\214ed with the).15 F F1(bind)2.929 E F0 -.2(bu)2.929 G .429(iltin command.).2 F 1.095 (The editing mode may be switched during interacti)108 112.8 R 1.395 -.15(ve u)-.25 H 1.095(se by using the).15 F F13.595 E F0 1.095 (option to the)3.595 F F1(set)3.595 E F0 -.2(bu)3.595 G 1.095 (iltin com-).2 F 3.076(mand. Other)108 124.8 R .576 (programs using this library pro)3.076 F .575(vide similar mechanisms.) -.15 F(The)5.575 E/F2 10/Times-Italic@0 SF(inputr)3.085 E(c)-.37 E F0 .575(\214le may be edited and)3.385 F(re-read if a program does not pro) 108 136.8 Q(vide an)-.15 E 2.5(yo)-.15 G(ther means to incorporate ne) -2.5 E 2.5(wb)-.25 G(indings.)-2.5 E F1 -.92(Va)87 153.6 S(riables).92 E F0 .043(Readline has v)108 165.6 R .043 (ariables that can be used to further customize its beha)-.25 F(vior)-.2 E 5.043(.A)-.55 G -.25(va)-2.5 G .043(riable may be set in the).25 F F2 (inpu-)2.554 E(tr)108 177.6 Q(c)-.37 E F0 (\214le with a statement of the form)2.81 E F1(set)144 194.4 Q F2 (variable\255name value)2.5 E F0 .79(Except where noted, readline v)108 211.2 R .79(ariables can tak)-.25 F 3.29(et)-.1 G .79(he v)-3.29 F (alues)-.25 E F1(On)3.29 E F0(or)3.29 E F1(Off)3.29 E F0 .79 (\(without re)3.29 F -.05(ga)-.15 G .79(rd to case\).).05 F(Unrecog-) 5.79 E .448(nized v)108 223.2 R .448(ariable names are ignored.)-.25 F .448(When a v)5.448 F .448(ariable v)-.25 F .448 (alue is read, empty or null v)-.25 F .449(alues, "on" \(case-insensi-) -.25 F(ti)108 235.2 Q -.15(ve)-.25 G .468(\), and "1" are equi).15 F -.25(va)-.25 G .468(lent to).25 F F1(On)2.968 E F0 5.468(.A)C .468 (ll other v)-5.468 F .468(alues are equi)-.25 F -.25(va)-.25 G .468 (lent to).25 F F1(Off)2.968 E F0 5.468(.T)C .467(he v)-5.468 F .467 (ariables and their def)-.25 F(ault)-.1 E -.25(va)108 247.2 S(lues are:) .25 E F1(bell\255style \(audible\))108 264 Q F0 .01 (Controls what happens when readline w)144 276 R .011 (ants to ring the terminal bell.)-.1 F .011(If set to)5.011 F F1(none) 2.511 E F0 2.511(,r)C .011(eadline ne)-2.511 F -.15(ve)-.25 G(r).15 E .94(rings the bell.)144 288 R .94(If set to)5.94 F F1(visible)3.44 E F0 3.44(,r)C .94(eadline uses a visible bell if one is a)-3.44 F -.25(va) -.2 G 3.44(ilable. If).25 F .94(set to)3.44 F F1(audible)3.44 E F0(,)A (readline attempts to ring the terminal')144 300 Q 2.5(sb)-.55 G(ell.) -2.5 E F1(bind\255tty\255special\255chars \(On\))108 312 Q F0 .333 (If set to)144 324 R F1(On)2.833 E F0 .334(\(the def)2.833 F .334 (ault\), readline attempts to bind the control characters)-.1 F .334 (treated specially by the)7.834 F -.1(ke)144 336 S(rnel').1 E 2.5(st) -.55 G(erminal dri)-2.5 E -.15(ve)-.25 G 2.5(rt).15 G 2.5(ot)-2.5 G (heir readline equi)-2.5 E -.25(va)-.25 G(lents.).25 E F1 (blink\255matching\255par)108 348 Q(en \(Off\))-.18 E F0 .21(If set to) 144 360 R F1(On)2.71 E F0 2.71(,r)C .21 (eadline attempts to brie\215y mo)-2.71 F .51 -.15(ve t)-.15 H .21 (he cursor to an opening parenthesis when a closing).15 F (parenthesis is inserted.)144 372 Q F1(color)108 384 Q (ed\255completion\255pr)-.18 E(e\214x \(Off\))-.18 E F0 .515(If set to) 144 396 R F1(On)3.015 E F0 3.015(,w)C .515(hen listing completions, rea\ dline displays the common pre\214x of the set of possible)-3.015 F 2.936 (completions using a dif)144 408 R 2.936(ferent color)-.25 F 7.936(.T) -.55 G 2.936(he color de\214nitions are tak)-7.936 F 2.935 (en from the v)-.1 F 2.935(alue of the)-.25 F F1(LS_COLORS)144 420 Q F0 (en)2.5 E(vironment v)-.4 E(ariable.)-.25 E F1(color)108 432 Q (ed\255stats \(Off\))-.18 E F0 1.579(If set to)144 444 R F1(On)4.079 E F0 4.079(,r)C 1.579(eadline displays possible completions using dif) -4.079 F 1.58(ferent colors to indicate their \214le)-.25 F 2.5 (type. The)144 456 R(color de\214nitions are tak)2.5 E(en from the v)-.1 E(alue of the)-.25 E F1(LS_COLORS)2.5 E F0(en)2.5 E(vironment v)-.4 E (ariable.)-.25 E F1(comment\255begin \(`)108 468 Q(`#')-.63 E('\))-.63 E F0 .062(The string that is inserted in)144 480 R F1(vi)2.562 E F0 .062 (mode when the)2.562 F F1(insert\255comment)2.562 E F0 .062 (command is e)2.562 F -.15(xe)-.15 G 2.562(cuted. This).15 F(com-)2.562 E(mand is bound to)144 492 Q F1(M\255#)2.5 E F0(in emacs mode and to)2.5 E F1(#)2.5 E F0(in vi command mode.)2.5 E F1 (completion\255display\255width \(-1\))108 504 Q F0 1.453(The number of\ screen columns used to display possible matches when performing comple\ tion.)144 516 R .194(The v)144 528 R .193(alue is ignored if it is less\ than 0 or greater than the terminal screen width.)-.25 F 2.693(Av)5.193 G .193(alue of 0 will)-2.943 F (cause matches to be displayed one per line.)144 540 Q(The def)5 E (ault v)-.1 E(alue is -1.)-.25 E F1(completion\255ignor)108 552 Q (e\255case \(Off\))-.18 E F0(If set to)144 564 Q F1(On)2.5 E F0 2.5(,r)C (eadline performs \214lename matching and completion in a case\255insen\ siti)-2.5 E .3 -.15(ve f)-.25 H(ashion.).05 E F1 (completion\255map\255case \(Off\))108 576 Q F0 .093(If set to)144 588 R F1(On)2.593 E F0 2.593(,a)C(nd)-2.593 E F1(completion\255ignor)2.593 E (e\255case)-.18 E F0 .093(is enabled, readline treats h)2.593 F .093 (yphens \()-.05 F F2A F0 2.593(\)a)C .094(nd underscores)-2.593 F (\()144 600 Q F2(_)A F0 2.5(\)a)C 2.5(se)-2.5 G(qui)-2.5 E -.25(va)-.25 G(lent when performing case\255insensiti).25 E .3 -.15(ve \214)-.25 H (lename matching and completion.).15 E F1(completion\255pr)108 612 Q (e\214x\255display\255length \(0\))-.18 E F0 .829(The length in charact\ ers of the common pre\214x of a list of possible completions that is di\ splayed)144 624 R 1.274(without modi\214cation.)144 636 R 1.274 (When set to a v)6.274 F 1.274(alue greater than zero, common pre\214x) -.25 F 1.275(es longer than this)-.15 F -.25(va)144 648 S(lue are repla\ ced with an ellipsis when displaying possible completions.).25 E F1 (completion\255query\255items \(100\))108 660 Q F0 .53 (This determines when the user is queried about vie)144 672 R .529 (wing the number of possible completions gen-)-.25 F .56(erated by the) 144 684 R F1(possible\255completions)3.06 E F0 3.06(command. It)3.06 F .561(may be set to an)3.061 F 3.061(yi)-.15 G(nte)-3.061 E .561(ger v) -.15 F .561(alue greater than or)-.25 F .783(equal to zero.)144 696 R .783(If the number of possible completions is greater than or equal to \ the v)5.783 F .782(alue of this)-.25 F -.25(va)144 708 S .237 (riable, the user is ask).25 F .237(ed whether or not he wishes to vie) -.1 F 2.737(wt)-.25 G .237(hem; otherwise the)-2.737 F 2.737(ya)-.15 G .237(re simply listed)-2.737 F(on the terminal.)144 720 Q 2.5(An)5 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve v)-.25 H (alue causes readline to ne)-.1 E -.15(ve)-.25 G 2.5(ra).15 G(sk.)-2.5 E (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(3)193.45 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (con)108 84 Q -.1(ve)-.4 G(rt\255meta \(On\)).1 E F0 .613(If set to)144 96 R F1(On)3.113 E F0 3.113(,r)C .613(eadline will con)-3.113 F -.15(ve) -.4 G .613(rt characters with the eighth bit set to an ASCII k).15 F .912 -.15(ey s)-.1 H .612(equence by).15 F 1.315(stripping the eighth b\ it and pre\214xing it with an escape character \(in ef)144 108 R 1.316 (fect, using escape as the)-.25 F/F2 10/Times-Italic@0 SF .503(meta pr) 144 120 R(e\214x)-.37 E F0 3.003(\). The)B(def)3.003 E .503(ault is)-.1 F F2(On)3.003 E F0 3.003(,b)C .503(ut readline will set it to)-3.203 F F2(Of)3.003 E(f)-.18 E F0 .502(if the locale contains eight-bit char) 3.003 F(-)-.2 E(acters.)144 132 Q F1(disable\255completion \(Off\))108 144 Q F0 .038(If set to)144 156 R F1(On)2.538 E F0 2.538(,r)C .038 (eadline will inhibit w)-2.538 F .038(ord completion.)-.1 F .038 (Completion characters will be inserted into the)5.038 F(line as if the) 144 168 Q 2.5(yh)-.15 G(ad been mapped to)-2.5 E F1(self-insert)2.5 E F0 (.)A F1(echo\255contr)108 180 Q(ol\255characters \(On\))-.18 E F0 1.211 (When set to)144 192 R F1(On)3.711 E F0 3.711(,o)C 3.711(no)-3.711 G 1.211(perating systems that indicate the)-3.711 F 3.711(ys)-.15 G 1.21 (upport it, readline echoes a character)-3.711 F (corresponding to a signal generated from the k)144 204 Q -.15(ey)-.1 G (board.).15 E F1(editing\255mode \(emacs\))108 216 Q F0 .141 (Controls whether readline be)144 228 R .141(gins with a set of k)-.15 F .441 -.15(ey b)-.1 H .141(indings similar to).15 F F2(Emacs)2.642 E F0 (or)2.642 E F2(vi)2.642 E F0(.)A F1(editing\255mode)5.142 E F0 (can be set to either)144 240 Q F1(emacs)2.5 E F0(or)2.5 E F1(vi)2.5 E F0(.)A F1(enable\255brack)108 252 Q(eted\255paste \(Off\))-.1 E F0 1.222 (When set to)144 264 R F1(On)3.721 E F0 3.721(,r)C 1.221 (eadline will con\214gure the terminal in a w)-3.721 F 1.221 (ay that will enable it to insert each)-.1 F .353 (paste into the editing b)144 276 R(uf)-.2 E .353(fer as a single strin\ g of characters, instead of treating each character as if)-.25 F .544 (it had been read from the k)144 288 R -.15(ey)-.1 G 3.043(board. This) .15 F .543(can pre)3.043 F -.15(ve)-.25 G .543 (nt pasted characters from being interpreted as).15 F(editing commands.) 144 300 Q F1(enable\255k)108 312 Q(eypad \(Off\))-.1 E F0 .892 (When set to)144 324 R F1(On)3.393 E F0 3.393(,r)C .893 (eadline will try to enable the application k)-3.393 F -.15(ey)-.1 G .893(pad when it is called.).15 F .893(Some sys-)5.893 F (tems need this to enable the arro)144 336 Q 2.5(wk)-.25 G -.15(ey)-2.6 G(s.).15 E F1(enable\255meta\255k)108 348 Q(ey \(On\))-.1 E F0 .64 (When set to)144 360 R F1(On)3.14 E F0 3.14(,r)C .64 (eadline will try to enable an)-3.14 F 3.14(ym)-.15 G .64 (eta modi\214er k)-3.14 F .94 -.15(ey t)-.1 H .64 (he terminal claims to support).15 F(when it is called.)144 372 Q (On man)5 E 2.5(yt)-.15 G(erminals, the meta k)-2.5 E .3 -.15(ey i)-.1 H 2.5(su).15 G(sed to send eight-bit characters.)-2.5 E F1 (expand\255tilde \(Off\))108 384 Q F0(If set to)144 396 Q F1(On)2.5 E F0 2.5(,t)C(ilde e)-2.5 E(xpansion is performed when readline attempts w) -.15 E(ord completion.)-.1 E F1(history\255pr)108 408 Q(eser)-.18 E -.1 (ve)-.1 G(\255point \(Off\)).1 E F0 1.338(If set to)144 420 R F1(On) 3.838 E F0 3.838(,t)C 1.338(he history code attempts to place point at \ the same location on each history line)-3.838 F(retrie)144 432 Q -.15 (ve)-.25 G 2.5(dw).15 G(ith)-2.5 E F1(pr)2.5 E -.15(ev)-.18 G (ious-history).15 E F0(or)2.5 E F1(next-history)2.5 E F0(.)A F1 (history\255size \(unset\))108 444 Q F0 .949 (Set the maximum number of history entries sa)144 456 R -.15(ve)-.2 G 3.448(di).15 G 3.448(nt)-3.448 G .948(he history list.)-3.448 F .948 (If set to zero, an)5.948 F 3.448(ye)-.15 G(xisting)-3.598 E .482 (history entries are deleted and no ne)144 468 R 2.982(we)-.25 G .483 (ntries are sa)-2.982 F -.15(ve)-.2 G 2.983(d. If).15 F .483(set to a v) 2.983 F .483(alue less than zero, the num-)-.25 F .356 (ber of history entries is not limited.)144 480 R .356(By def)5.356 F .355(ault, the number of history entries is not limited.)-.1 F .355 (If an)5.355 F 1.97(attempt is made to set)144 492 R F2(history\255size) 4.47 E F0 1.97(to a non-numeric v)4.47 F 1.97 (alue, the maximum number of history)-.25 F(entries will be set to 500.) 144 504 Q F1(horizontal\255scr)108 516 Q(oll\255mode \(Off\))-.18 E F0 .449(When set to)144 528 R F1(On)2.949 E F0 2.949(,m)C(ak)-2.949 E .448 (es readline use a single line for display)-.1 F 2.948(,s)-.65 G .448 (crolling the input horizontally on a)-2.948 F 1.194(single screen line\ when it becomes longer than the screen width rather than wrapping to a\ ne)144 540 R(w)-.25 E(line.)144 552 Q F1(input\255meta \(Off\))108 564 Q F0 .367(If set to)144 576 R F1(On)2.867 E F0 2.867(,r)C .367(eadline \ will enable eight-bit input \(that is, it will not clear the eighth bit\ in the char)-2.867 F(-)-.2 E .956(acters it reads\), re)144 588 R -.05 (ga)-.15 G .956(rdless of what the terminal claims it can support.).05 F .957(The name)5.956 F F1(meta\255\215ag)3.457 E F0 .957(is a)3.457 F (synon)144 600 Q .77(ym for this v)-.15 F 3.27(ariable. The)-.25 F(def) 3.27 E .77(ault is)-.1 F F2(Of)3.27 E(f)-.18 E F0 3.27(,b)C .77 (ut readline will set it to)-3.47 F F2(On)3.27 E F0 .77 (if the locale contains)3.27 F(eight-bit characters.)144 612 Q F1(isear) 108 624 Q(ch\255terminators \(`)-.18 E(`C\255[ C\255J')-.63 E('\))-.63 E F0 .439(The string of characters that should terminate an incremental s\ earch without subsequently e)144 636 R -.15(xe)-.15 G(cut-).15 E .935 (ing the character as a command.)144 648 R .935(If this v)5.935 F .935 (ariable has not been gi)-.25 F -.15(ve)-.25 G 3.434(nav).15 G .934 (alue, the characters)-3.684 F F2(ESC)3.434 E F0(and)144 660 Q F2 (C\255J)2.5 E F0(will terminate an incremental search.)2.5 E F1 -.1(ke) 108 672 S(ymap \(emacs\)).1 E F0 2.323(Set the current readline k)144 684 R -.15(ey)-.1 G 4.823(map. The).15 F 2.323(set of le)4.823 F -.05 (ga)-.15 G 4.823(lk).05 G -.15(ey)-4.923 G 2.323(map names is).15 F F2 2.324(emacs, emacs-standar)4.823 F(d,)-.37 E .809 (emacs-meta, emacs-ctlx, vi, vi-mo)144 696 R(ve)-.1 E 3.308(,v)-.1 G (i-command)-3.308 E F0 3.308(,a)C(nd)-3.308 E F2(vi-insert)3.308 E F0(.) .68 E F2(vi)5.808 E F0 .808(is equi)3.308 F -.25(va)-.25 G .808(lent to) .25 F F2(vi-command)3.308 E F0(;)A F2(emacs)144 708 Q F0 .697(is equi) 3.196 F -.25(va)-.25 G .697(lent to).25 F F2(emacs-standar)3.197 E(d) -.37 E F0 5.697(.T)C .697(he def)-5.697 F .697(ault v)-.1 F .697 (alue is)-.25 F F2(emacs)3.197 E F0 5.697(.T).27 G .697(he v)-5.697 F .697(alue of)-.25 F F1(editing\255mode)3.197 E F0(also af)144 720 Q (fects the def)-.25 E(ault k)-.1 E -.15(ey)-.1 G(map.).15 E (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(4)193.45 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (emacs\255mode\255string \(@\))108 84 Q F0 .051(This string is displaye\ d immediately before the last line of the primary prompt when emacs edi\ ting)144 96 R .292(mode is acti)144 108 R -.15(ve)-.25 G 5.292(.T).15 G .292(he v)-5.292 F .293(alue is e)-.25 F .293(xpanded lik)-.15 F 2.793 (eak)-.1 G .593 -.15(ey b)-2.893 H .293 (inding, so the standard set of meta- and control).15 F(pre\214x)144 120 Q .602(es and backslash escape sequences is a)-.15 F -.25(va)-.2 G 3.101 (ilable. Use).25 F .601(the \\1 and \\2 escapes to be)3.101 F .601 (gin and end)-.15 F .019(sequences of non-printing characters, which ca\ n be used to embed a terminal control sequence into)144 132 R (the mode string.)144 144 Q F1 -.1(ke)108 156 S(yseq\255timeout \(500\)) .1 E F0 .368(Speci\214es the duration)144 168 R/F2 10/Times-Italic@0 SF -.37(re)2.867 G(adline).37 E F0 .367(will w)2.867 F .367 (ait for a character when reading an ambiguous k)-.1 F .667 -.15(ey s) -.1 H(equence).15 E 1.356(\(one that can form a complete k)144 180 R 1.656 -.15(ey s)-.1 H 1.356(equence using the input read so f).15 F(ar) -.1 E 3.856(,o)-.4 G 3.856(rc)-3.856 G 1.356(an tak)-3.856 F 3.856(ea) -.1 G(dditional)-3.856 E .32(input to complete a longer k)144 192 R .62 -.15(ey s)-.1 H 2.82(equence\). If).15 F .32(no input is recei)2.82 F -.15(ve)-.25 G 2.82(dw).15 G .32(ithin the timeout,)-2.82 F F2 -.37(re) 2.82 G(adline).37 E F0(will)2.82 E .906(use the shorter b)144 204 R .907 (ut complete k)-.2 F 1.207 -.15(ey s)-.1 H 3.407(equence. The).15 F -.25 (va)3.407 G .907(lue is speci\214ed in milliseconds, so a v).25 F .907 (alue of)-.25 F .05(1000 means that)144 216 R F2 -.37(re)2.55 G(adline) .37 E F0 .05(will w)2.55 F .05(ait one second for additional input.)-.1 F .05(If this v)5.05 F .05(ariable is set to a v)-.25 F(alue)-.25 E .051 (less than or equal to zero, or to a non-numeric v)144 228 R(alue,)-.25 E F2 -.37(re)2.551 G(adline).37 E F0 .051(will w)2.551 F .051 (ait until another k)-.1 F .352 -.15(ey i)-.1 H 2.552(sp).15 G(ressed) -2.552 E(to decide which k)144 240 Q .3 -.15(ey s)-.1 H (equence to complete.).15 E F1(mark\255dir)108 252 Q(ectories \(On\)) -.18 E F0(If set to)144 264 Q F1(On)2.5 E F0 2.5(,c)C (ompleted directory names ha)-2.5 E .3 -.15(ve a s)-.2 H(lash appended.) .15 E F1(mark\255modi\214ed\255lines \(Off\))108 276 Q F0(If set to)144 288 Q F1(On)2.5 E F0 2.5(,h)C(istory lines that ha)-2.5 E .3 -.15(ve b) -.2 H(een modi\214ed are displayed with a preceding asterisk \().15 E F1 (*)A F0(\).)A F1(mark\255symlink)108 300 Q(ed\255dir)-.1 E (ectories \(Off\))-.18 E F0 .175(If set to)144 312 R F1(On)2.675 E F0 2.675(,c)C .175 (ompleted names which are symbolic links to directories ha)-2.675 F .475 -.15(ve a s)-.2 H .175(lash appended \(sub-).15 F(ject to the v)144 324 Q(alue of)-.25 E F1(mark\255dir)2.5 E(ectories)-.18 E F0(\).)A F1 (match\255hidden\255\214les \(On\))108 336 Q F0 .192(This v)144 348 R .192(ariable, when set to)-.25 F F1(On)2.692 E F0 2.692(,c)C .192 (auses readline to match \214les whose names be)-2.692 F .193 (gin with a `.)-.15 F 2.693('\()-.7 G(hidden)-2.693 E .457 (\214les\) when performing \214lename completion.)144 360 R .456 (If set to)5.456 F F1(Off)2.956 E F0 2.956(,t)C .456(he leading `.) -2.956 F 2.956('m)-.7 G .456(ust be supplied by the)-2.956 F (user in the \214lename to be completed.)144 372 Q F1 (menu\255complete\255display\255pr)108 384 Q(e\214x \(Off\))-.18 E F0 1.585(If set to)144 396 R F1(On)4.085 E F0 4.085(,m)C 1.585(enu complet\ ion displays the common pre\214x of the list of possible completions) -4.085 F(\(which may be empty\) before c)144 408 Q (ycling through the list.)-.15 E F1(output\255meta \(Off\))108 420 Q F0 .507(If set to)144 432 R F1(On)3.007 E F0 3.007(,r)C .507(eadline will \ display characters with the eighth bit set directly rather than as a me\ ta-)-3.007 F(pre\214x)144 444 Q .884(ed escape sequence.)-.15 F .884 (The def)5.884 F .884(ault is)-.1 F F2(Of)3.384 E(f)-.18 E F0 3.384(,b)C .884(ut readline will set it to)-3.584 F F2(On)3.384 E F0 .885 (if the locale contains)3.384 F(eight-bit characters.)144 456 Q F1 (page\255completions \(On\))108 468 Q F0 .809(If set to)144 480 R F1(On) 3.308 E F0 3.308(,r)C .808(eadline uses an internal)-3.308 F F2(mor) 3.308 E(e)-.37 E F0(-lik)A 3.308(ep)-.1 G .808 (ager to display a screenful of possible comple-)-3.308 F (tions at a time.)144 492 Q F1 (print\255completions\255horizontally \(Off\))108 504 Q F0 1.318 (If set to)144 516 R F1(On)3.818 E F0 3.818(,r)C 1.319(eadline will dis\ play completions with matches sorted horizontally in alphabetical)-3.818 F(order)144 528 Q 2.5(,r)-.4 G(ather than do)-2.5 E(wn the screen.)-.25 E F1 -2.29 -.18(re v)108 540 T(ert\255all\255at\255newline \(Off\)).08 E F0 .699(If set to)144 552 R F1(On)3.199 E F0 3.199(,r)C .699 (eadline will undo all changes to history lines before returning when) -3.199 F F1(accept\255line)3.198 E F0(is)3.198 E -.15(exe)144 564 S 2.686(cuted. By).15 F(def)2.686 E .186 (ault, history lines may be modi\214ed and retain indi)-.1 F .186 (vidual undo lists across calls to)-.25 F F1 -.18(re)144 576 S(adline) .18 E F0(.)A F1(sho)108 588 Q(w\255all\255if\255ambiguous \(Off\))-.1 E F0 .304(This alters the def)144 600 R .304(ault beha)-.1 F .304 (vior of the completion functions.)-.2 F .304(If set to)5.304 F F1(On) 2.804 E F0 2.803(,w)C .303(ords which ha)-2.903 F .603 -.15(ve m)-.2 H (ore).15 E 1.264(than one possible completion cause the matches to be l\ isted immediately instead of ringing the)144 612 R(bell.)144 624 Q F1 (sho)108 636 Q(w\255all\255if\255unmodi\214ed \(Off\))-.1 E F0 5.346 (This alters the def)144 648 R 5.346(ault beha)-.1 F 5.345 (vior of the completion functions in a f)-.2 F 5.345(ashion similar to) -.1 F F1(sho)144 660 Q(w\255all\255if\255ambiguous)-.1 E F0 6.69(.I)C 4.19(fs)-6.69 G 1.691(et to)-4.19 F F1(On)4.191 E F0 4.191(,w)C 1.691 (ords which ha)-4.291 F 1.991 -.15(ve m)-.2 H 1.691 (ore than one possible completion).15 F 1.04(without an)144 672 R 3.54 (yp)-.15 G 1.039 (ossible partial completion \(the possible completions don')-3.54 F 3.539(ts)-.18 G 1.039(hare a common pre\214x\))-3.539 F(cause the match\ es to be listed immediately instead of ringing the bell.)144 684 Q F1 (sho)108 696 Q(w\255mode\255in\255pr)-.1 E(ompt \(Off\))-.18 E F0 .251 (If set to)144 708 R F1(On)2.751 E F0 2.751(,a)C .252 (dd a character to the be)-2.751 F .252 (ginning of the prompt indicating the editing mode: emacs, vi)-.15 F (command, or vi insertion.)144 720 Q(The mode strings are user)5 E (-settable.)-.2 E(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(5) 193.45 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (skip\255completed\255text \(Off\))108 84 Q F0 .095(If set to)144 96 R F1(On)2.595 E F0 2.595(,t)C .095(his alters the def)-2.595 F .095 (ault completion beha)-.1 F .094 (vior when inserting a single match into the line.)-.2 F(It')144 108 Q 2.545(so)-.55 G .045(nly acti)-2.545 F .345 -.15(ve w)-.25 H .046 (hen performing completion in the middle of a w).15 F 2.546(ord. If)-.1 F .046(enabled, readline does not)2.546 F 1.394(insert characters from \ the completion that match characters after point in the w)144 120 R 1.394(ord being com-)-.1 F(pleted, so portions of the w)144 132 Q (ord follo)-.1 E(wing the cursor are not duplicated.)-.25 E F1 (vi\255cmd\255mode\255string \(\(cmd\)\))108 144 Q F0 1.198(This string\ is displayed immediately before the last line of the primary prompt wh\ en vi editing)144 156 R .522(mode is acti)144 168 R .822 -.15(ve a)-.25 H .522(nd in command mode.).15 F .522(The v)5.522 F .522(alue is e)-.25 F .522(xpanded lik)-.15 F 3.022(eak)-.1 G .821 -.15(ey b)-3.122 H .521 (inding, so the standard).15 F .869(set of meta- and control pre\214x) 144 180 R .869(es and backslash escape sequences is a)-.15 F -.25(va)-.2 G 3.37(ilable. Use).25 F .87(the \\1 and \\2)3.37 F .387(escapes to be) 144 192 R .386(gin and end sequences of non-printing characters, which \ can be used to embed a ter)-.15 F(-)-.2 E (minal control sequence into the mode string.)144 204 Q F1 (vi\255ins\255mode\255string \(\(ins\)\))108 216 Q F0 1.198(This string\ is displayed immediately before the last line of the primary prompt wh\ en vi editing)144 228 R .783(mode is acti)144 240 R 1.083 -.15(ve a)-.25 H .783(nd in insertion mode.).15 F .783(The v)5.783 F .783(alue is e) -.25 F .783(xpanded lik)-.15 F 3.283(eak)-.1 G 1.083 -.15(ey b)-3.383 H .783(inding, so the standard).15 F .869 (set of meta- and control pre\214x)144 252 R .869 (es and backslash escape sequences is a)-.15 F -.25(va)-.2 G 3.37 (ilable. Use).25 F .87(the \\1 and \\2)3.37 F .387(escapes to be)144 264 R .386(gin and end sequences of non-printing characters, which can be u\ sed to embed a ter)-.15 F(-)-.2 E (minal control sequence into the mode string.)144 276 Q F1 (visible\255stats \(Off\))108 288 Q F0 .846(If set to)144 300 R F1(On) 3.346 E F0 3.346(,ac)C .846(haracter denoting a \214le')-3.346 F 3.346 (st)-.55 G .846(ype as reported by)-3.346 F/F2 10/Times-Italic@0 SF (stat)3.346 E F0 .846(\(2\) is appended to the \214lename)B (when listing possible completions.)144 312 Q F1(Conditional Constructs) 87 328.8 Q F0 .05(Readline implements a f)108 340.8 R .05(acility simil\ ar in spirit to the conditional compilation features of the C preproces\ sor)-.1 F .096(which allo)108 352.8 R .096(ws k)-.25 F .396 -.15(ey b) -.1 H .096(indings and v).15 F .096 (ariable settings to be performed as the result of tests.)-.25 F .097 (There are four parser)5.096 F(directi)108 364.8 Q -.15(ve)-.25 G 2.5 (su).15 G(sed.)-2.5 E F1($if)108 381.6 Q F0(The)144 381.6 Q F1($if)2.963 E F0 .463(construct allo)2.963 F .462(ws bindings to be made based on t\ he editing mode, the terminal being used,)-.25 F .477 (or the application using readline.)144 393.6 R .477(The te)5.477 F .477 (xt of the test e)-.15 F .477 (xtends to the end of the line; no characters)-.15 F (are required to isolate it.)144 405.6 Q F1(mode)144 422.4 Q F0(The)180 422.4 Q F1(mode=)3.712 E F0 1.212(form of the)3.712 F F1($if)3.711 E F0 (directi)3.711 E 1.511 -.15(ve i)-.25 H 3.711(su).15 G 1.211 (sed to test whether readline is in emacs or vi)-3.711 F 3.065 (mode. This)180 434.4 R .565(may be used in conjunction with the)3.065 F F1 .565(set k)3.065 F(eymap)-.1 E F0 .565(command, for instance, to) 3.065 F .03(set bindings in the)180 446.4 R F2(emacs-standar)2.529 E(d) -.37 E F0(and)2.529 E F2(emacs-ctlx)2.529 E F0 -.1(ke)2.529 G .029 (ymaps only if readline is starting out)-.05 F(in emacs mode.)180 458.4 Q F1(term)144 475.2 Q F0(The)180 475.2 Q F1(term=)3.196 E F0 .696 (form may be used to include terminal-speci\214c k)3.196 F .996 -.15 (ey b)-.1 H .697(indings, perhaps to bind).15 F .654(the k)180 487.2 R .954 -.15(ey s)-.1 H .654(equences output by the terminal').15 F 3.154 (sf)-.55 G .654(unction k)-3.154 F -.15(ey)-.1 G 3.154(s. The).15 F -.1 (wo)3.154 G .654(rd on the right side of).1 F(the)180 499.2 Q F1(=)3.003 E F0 .503(is tested ag)3.003 F .504(ainst the full name of the terminal\ and the portion of the terminal name)-.05 F(before the \214rst)180 511.2 Q F12.5 E F0 5(.T)C(his allo)-5 E(ws)-.25 E F2(sun)2.84 E F0 (to match both)2.74 E F2(sun)2.84 E F0(and)2.74 E F2(sun\255cmd)2.5 E F0 2.5(,f).77 G(or instance.)-2.5 E F1(application)144 528 Q F0(The)180 540 Q F1(application)3.003 E F0 .503 (construct is used to include application-speci\214c settings.)3.003 F .503(Each program)5.503 F .114(using the readline library sets the)180 552 R F2 .114(application name)2.614 F F0 2.614(,a)C .114 (nd an initialization \214le can test for a)-2.614 F .501(particular v) 180 564 R 3.001(alue. This)-.25 F .501(could be used to bind k)3.001 F .801 -.15(ey s)-.1 H .5(equences to functions useful for a spe-).15 F .396(ci\214c program.)180 576 R -.15(Fo)5.396 G 2.896(ri).15 G .396 (nstance, the follo)-2.896 F .396(wing command adds a k)-.25 F .696 -.15 (ey s)-.1 H .397(equence that quotes the).15 F(current or pre)180 588 Q (vious w)-.25 E(ord in)-.1 E F1(bash)2.5 E F0(:)A F1($if)180 612 Q F0 (Bash)2.5 E 2.5(#Q)180 624 S(uote the current or pre)-2.5 E(vious w)-.25 E(ord)-.1 E("\\C-xq": "\\eb\\"\\ef\\"")180 636 Q F1($endif)180 648 Q ($endif)108 664.8 Q F0(This command, as seen in the pre)144 664.8 Q (vious e)-.25 E(xample, terminates an)-.15 E F1($if)2.5 E F0(command.) 2.5 E F1($else)108 681.6 Q F0(Commands in this branch of the)144 681.6 Q F1($if)2.5 E F0(directi)2.5 E .3 -.15(ve a)-.25 H(re e).15 E -.15(xe) -.15 G(cuted if the test f).15 E(ails.)-.1 E F1($include)108 698.4 Q F0 .357(This directi)144 710.4 R .657 -.15(ve t)-.25 H(ak).15 E .357 (es a single \214lename as an ar)-.1 F .356 (gument and reads commands and bindings from that)-.18 F 2.5(\214le. F) 144 722.4 R(or e)-.15 E(xample, the follo)-.15 E(wing directi)-.25 E .3 -.15(ve w)-.25 H(ould read).05 E F2(/etc/inputr)2.5 E(c)-.37 E F0(:)A (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(6)193.45 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF ($include)144 84 Q/F2 10/Times-Italic@0 SF(/etc/inputr)5.833 E(c)-.37 E /F3 10.95/Times-Bold@0 SF(SEARCHING)72 100.8 Q F0 1.003(Readline pro)108 112.8 R 1.003(vides commands for searching through the command history \ for lines containing a speci\214ed)-.15 F 2.5(string. There)108 124.8 R (are tw)2.5 E 2.5(os)-.1 G(earch modes:)-2.5 E F2(incr)2.51 E(emental) -.37 E F0(and)3.01 E F2(non-incr)2.5 E(emental)-.37 E F0(.).51 E .698 (Incremental searches be)108 141.6 R .698 (gin before the user has \214nished typing the search string.)-.15 F .697(As each character of the)5.697 F .112 (search string is typed, readline displays the ne)108 153.6 R .112 (xt entry from the history matching the string typed so f)-.15 F(ar)-.1 E 5.113(.A)-.55 G(n)-5.113 E .545 (incremental search requires only as man)108 165.6 R 3.045(yc)-.15 G .544(haracters as needed to \214nd the desired history entry)-3.045 F 5.544(.T)-.65 G 3.044(os)-6.344 G(earch)-3.044 E(backw)108 177.6 Q .18 (ard in the history for a particular string, type)-.1 F F1(C\255r)2.681 E F0 5.181(.T)C(yping)-5.981 E F1(C\255s)2.681 E F0 .181(searches forw) 2.681 F .181(ard through the history)-.1 F(.)-.65 E .354 (The characters present in the v)108 189.6 R .354(alue of the)-.25 F F1 (isear)2.854 E(ch-terminators)-.18 E F0 -.25(va)2.854 G .354 (riable are used to terminate an incremen-).25 F .6(tal search.)108 201.6 R .6(If that v)5.6 F .6(ariable has not been assigned a v)-.25 F .6(alue the)-.25 F F2(Escape)3.1 E F0(and)3.1 E F1(C\255J)3.1 E F0 .6 (characters will terminate an)3.1 F .123(incremental search.)108 213.6 R F1(C\255G)5.123 E F0 .123 (will abort an incremental search and restore the original line.)2.623 F .122(When the search is)5.122 F(terminated, the history entry containin\ g the search string becomes the current line.)108 225.6 Q 2.406 -.8 (To \214)108 242.4 T .806 (nd other matching entries in the history list, type).8 F F1(C\255s) 3.306 E F0(or)3.306 E F1(C\255r)3.306 E F0 .806(as appropriate.)3.306 F .807(This will search back-)5.806 F -.1(wa)108 254.4 S 1.309(rd or forw) .1 F 1.309(ard in the history for the ne)-.1 F 1.309 (xt line matching the search string typed so f)-.15 F(ar)-.1 E 6.309(.A) -.55 G 1.609 -.15(ny o)-6.309 H 1.308(ther k).15 F -.15(ey)-.1 G .317 (sequence bound to a readline command will terminate the search and e) 108 266.4 R -.15(xe)-.15 G .318(cute that command.).15 F -.15(Fo)5.318 G 2.818(ri).15 G(nstance,)-2.818 E 3.481(an)108 278.4 S -.25(ew)-3.481 G .981(line will terminate the search and accept the line, thereby e).25 F -.15(xe)-.15 G .98(cuting the command from the history).15 F 3.061 (list. A)108 290.4 R(mo)3.061 E -.15(ve)-.15 G .562 (ment command will terminate the search, mak).15 F 3.062(et)-.1 G .562 (he last line found the current line, and be)-3.062 F(gin)-.15 E (editing.)108 302.4 Q .567(Non-incremental searches read the entire sea\ rch string before starting to search for matching history lines.)108 319.2 R(The search string may be typed by the user or be part of the co\ ntents of the current line.)108 331.2 Q F3(EDITING COMMANDS)72 348 Q F0 1.391(The follo)108 360 R 1.391 (wing is a list of the names of the commands and the def)-.25 F 1.391 (ault k)-.1 F 1.691 -.15(ey s)-.1 H 1.391(equences to which the).15 F 3.892(ya)-.15 G(re)-3.892 E 2.5(bound. Command)108 372 R (names without an accompan)2.5 E(ying k)-.15 E .3 -.15(ey s)-.1 H (equence are unbound by def).15 E(ault.)-.1 E .055(In the follo)108 388.8 R .055(wing descriptions,)-.25 F F2(point)2.555 E F0 .055 (refers to the current cursor position, and)2.555 F F2(mark)2.555 E F0 .054(refers to a cursor position)2.554 F(sa)108 400.8 Q -.15(ve)-.2 G 2.5(db).15 G 2.5(yt)-2.5 G(he)-2.5 E F1(set\255mark)2.5 E F0 2.5 (command. The)2.5 F(te)2.5 E (xt between the point and mark is referred to as the)-.15 E F2 -.37(re) 2.5 G(gion)-.03 E F0(.)A F1(Commands f)87 417.6 Q(or Mo)-.25 E(ving)-.1 E(beginning\255of\255line \(C\255a\))108 429.6 Q F0(Mo)144 441.6 Q .3 -.15(ve t)-.15 H 2.5(ot).15 G(he start of the current line.)-2.5 E F1 (end\255of\255line \(C\255e\))108 453.6 Q F0(Mo)144 465.6 Q .3 -.15 (ve t)-.15 H 2.5(ot).15 G(he end of the line.)-2.5 E F1 -.25(fo)108 477.6 S(rward\255char \(C\255f\)).25 E F0(Mo)144 489.6 Q .3 -.15(ve f) -.15 H(orw).15 E(ard a character)-.1 E(.)-.55 E F1 (backward\255char \(C\255b\))108 501.6 Q F0(Mo)144 513.6 Q .3 -.15(ve b) -.15 H(ack a character).15 E(.)-.55 E F1 -.25(fo)108 525.6 S(rward\255w) .25 E(ord \(M\255f\))-.1 E F0(Mo)144 537.6 Q .822 -.15(ve f)-.15 H(orw) .15 E .522(ard to the end of the ne)-.1 F .523(xt w)-.15 F 3.023(ord. W) -.1 F .523(ords are composed of alphanumeric characters \(let-)-.8 F (ters and digits\).)144 549.6 Q F1(backward\255w)108 561.6 Q (ord \(M\255b\))-.1 E F0(Mo)144 573.6 Q 1.71 -.15(ve b)-.15 H 1.41 (ack to the start of the current or pre).15 F 1.41(vious w)-.25 F 3.91 (ord. W)-.1 F 1.41(ords are composed of alphanumeric)-.8 F (characters \(letters and digits\).)144 585.6 Q F1(clear\255scr)108 597.6 Q(een \(C\255l\))-.18 E F0 .993(Clear the screen lea)144 609.6 R .993(ving the current line at the top of the screen.)-.2 F -.4(Wi)5.993 G .993(th an ar).4 F .993(gument, refresh the)-.18 F (current line without clearing the screen.)144 621.6 Q F1 -.18(re)108 633.6 S(draw\255curr).18 E(ent\255line)-.18 E F0 (Refresh the current line.)144 645.6 Q F1(Commands f)87 662.4 Q (or Manipulating the History)-.25 E(accept\255line \(Newline, Retur)108 674.4 Q(n\))-.15 E F0 .365(Accept the line re)144 686.4 R -.05(ga)-.15 G .364(rdless of where the cursor is.).05 F .364 (If this line is non-empty)5.364 F 2.864(,i)-.65 G 2.864(tm)-2.864 G .364(ay be added to the)-2.864 F .74 (history list for future recall with)144 698.4 R F1(add_history\(\))3.24 E F0 5.741(.I)C 3.241(ft)-5.741 G .741 (he line is a modi\214ed history line, the history)-3.241 F (line is restored to its original state.)144 710.4 Q(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(7)193.45 E 0 Cg EP %%Page: 8 8 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (pr)108 84 Q -.15(ev)-.18 G(ious\255history \(C\255p\)).15 E F0 (Fetch the pre)144 96 Q(vious command from the history list, mo)-.25 E (ving back in the list.)-.15 E F1(next\255history \(C\255n\))108 108 Q F0(Fetch the ne)144 120 Q(xt command from the history list, mo)-.15 E (ving forw)-.15 E(ard in the list.)-.1 E F1 (beginning\255of\255history \(M\255<\))108 132 Q F0(Mo)144 144 Q .3 -.15 (ve t)-.15 H 2.5(ot).15 G(he \214rst line in the history)-2.5 E(.)-.65 E F1(end\255of\255history \(M\255>\))108 156 Q F0(Mo)144 168 Q .3 -.15 (ve t)-.15 H 2.5(ot).15 G(he end of the input history)-2.5 E 2.5(,i)-.65 G(.e., the line currently being entered.)-2.5 E F1 -2.29 -.18(re v)108 180 T(erse\255sear).08 E(ch\255history \(C\255r\))-.18 E F0 1.471 (Search backw)144 192 R 1.471(ard starting at the current line and mo) -.1 F 1.47(ving `up' through the history as necessary)-.15 F(.)-.65 E (This is an incremental search.)144 204 Q F1 -.25(fo)108 216 S (rward\255sear).25 E(ch\255history \(C\255s\))-.18 E F0 1.131 (Search forw)144 228 R 1.131(ard starting at the current line and mo)-.1 F 1.132(ving `do)-.15 F 1.132(wn' through the history as necessary)-.25 F(.)-.65 E(This is an incremental search.)144 240 Q F1(non\255incr)108 252 Q(emental\255r)-.18 E -2.3 -.15(ev e)-.18 H(rse\255sear).15 E (ch\255history \(M\255p\))-.18 E F0 .165(Search backw)144 264 R .164(ar\ d through the history starting at the current line using a non-incremen\ tal search for)-.1 F 2.5(as)144 276 S(tring supplied by the user)-2.5 E (.)-.55 E F1(non\255incr)108 288 Q(emental\255f)-.18 E(orward\255sear) -.25 E(ch\255history \(M\255n\))-.18 E F0 1.353(Search forw)144 300 R 1.354(ard through the history using a non-incremental search for a stri\ ng supplied by the)-.1 F(user)144 312 Q(.)-.55 E F1(history\255sear)108 324 Q(ch\255backward)-.18 E F0 .951(Search backw)144 336 R .951(ard thr\ ough the history for the string of characters between the start of the \ current)-.1 F .12(line and the current cursor position \(the)144 348 R /F2 10/Times-Italic@0 SF(point)2.62 E F0 2.62(\). The)B .12 (search string must match at the be)2.62 F .12(ginning of a)-.15 F (history line.)144 360 Q(This is a non-incremental search.)5 E F1 (history\255sear)108 372 Q(ch\255f)-.18 E(orward)-.25 E F0 .249 (Search forw)144 384 R .249(ard through the history for the string of c\ haracters between the start of the current line)-.1 F .035 (and the point.)144 396 R .035(The search string must match at the be) 5.035 F .036(ginning of a history line.)-.15 F .036 (This is a non-incre-)5.036 F(mental search.)144 408 Q F1 (history\255substring\255sear)108 420 Q(ch\255backward)-.18 E F0 .951 (Search backw)144 432 R .951(ard through the history for the string of \ characters between the start of the current)-.1 F .007 (line and the current cursor position \(the)144 444 R F2(point)2.507 E F0 2.507(\). The)B .007(search string may match an)2.507 F .007 (ywhere in a history)-.15 F 2.5(line. This)144 456 R (is a non-incremental search.)2.5 E F1(history\255substring\255sear)108 468 Q(ch\255f)-.18 E(orward)-.25 E F0 .249(Search forw)144 480 R .249(a\ rd through the history for the string of characters between the start o\ f the current line)-.1 F .318(and the point.)144 492 R .319 (The search string may match an)5.318 F .319(ywhere in a history line.) -.15 F .319(This is a non-incremental)5.319 F(search.)144 504 Q F1 (yank\255nth\255ar)108 516 Q 2.5(g\()-.1 G<4dad43ad7929>-2.5 E F0 .622 (Insert the \214rst ar)144 528 R .622(gument to the pre)-.18 F .622 (vious command \(usually the second w)-.25 F .622(ord on the pre)-.1 F .622(vious line\))-.25 F .794(at point.)144 540 R -.4(Wi)5.794 G .794 (th an ar).4 F(gument)-.18 E F2(n)3.294 E F0 3.294(,i).24 G .794 (nsert the)-3.294 F F2(n)3.294 E F0 .794(th w)B .794(ord from the pre) -.1 F .794(vious command \(the w)-.25 F .795(ords in the)-.1 F(pre)144 552 Q .292(vious command be)-.25 F .292(gin with w)-.15 F .291(ord 0\).) -.1 F 2.791(An)5.291 G -2.25 -.15(eg a)-2.791 H(ti).15 E .591 -.15(ve a) -.25 H -.18(rg).15 G .291(ument inserts the).18 F F2(n)2.791 E F0 .291 (th w)B .291(ord from the end of)-.1 F .281(the pre)144 564 R .281 (vious command.)-.25 F .281(Once the ar)5.281 F(gument)-.18 E F2(n)2.781 E F0 .281(is computed, the ar)2.781 F .281(gument is e)-.18 F .282 (xtracted as if the "!)-.15 F F2(n)A F0(")A(history e)144 576 Q (xpansion had been speci\214ed.)-.15 E F1(yank\255last\255ar)108 588 Q 2.5(g\()-.1 G -1.667(M\255. ,)-2.5 F -1.667(M\255_ \))2.5 F F0 1.308 (Insert the last ar)144 600 R 1.308(gument to the pre)-.18 F 1.307 (vious command \(the last w)-.25 F 1.307(ord of the pre)-.1 F 1.307 (vious history entry\).)-.25 F -.4(Wi)144 612 S .203(th a numeric ar).4 F .203(gument, beha)-.18 F .504 -.15(ve ex)-.2 H .204(actly lik).15 F(e) -.1 E F1(yank\255nth\255ar)2.704 E(g)-.1 E F0 5.204(.S)C(uccessi)-5.204 E .504 -.15(ve c)-.25 H .204(alls to).15 F F1(yank\255last\255ar)2.704 E (g)-.1 E F0(mo)144 624 Q .807 -.15(ve b)-.15 H .507 (ack through the history list, inserting the last w).15 F .507 (ord \(or the w)-.1 F .507(ord speci\214ed by the ar)-.1 F(gument)-.18 E 1.396(to the \214rst call\) of each line in turn.)144 636 R(An)6.396 E 3.896(yn)-.15 G 1.396(umeric ar)-3.896 F 1.397 (gument supplied to these successi)-.18 F 1.697 -.15(ve c)-.25 H(alls) .15 E .492(determines the direction to mo)144 648 R .792 -.15(ve t)-.15 H .492(hrough the history).15 F 5.491(.A)-.65 G(ne)-2.5 E -.05(ga)-.15 G (ti).05 E .791 -.15(ve a)-.25 H -.18(rg).15 G .491 (ument switches the direction).18 F .494 (through the history \(back or forw)144 660 R 2.994(ard\). The)-.1 F .494(history e)2.994 F .494(xpansion f)-.15 F .494 (acilities are used to e)-.1 F .494(xtract the last)-.15 F(ar)144 672 Q (gument, as if the "!$" history e)-.18 E(xpansion had been speci\214ed.) -.15 E F1(Commands f)87 688.8 Q(or Changing T)-.25 E(ext)-.92 E F2 (end\255of\255\214le)108 700.8 Q F1(\(usually C\255d\))2.5 E F0 .799 (The character indicating end-of-\214le as set, for e)144 712.8 R .799 (xample, by)-.15 F/F3 10/Courier@0 SF(stty)3.299 E F0 5.799(.I)C 3.298 (ft)-5.799 G .798(his character is read when)-3.298 F .592 (there are no characters on the line, and point is at the be)144 724.8 R .593(ginning of the line, Readline interprets it)-.15 F (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(8)193.45 E 0 Cg EP %%Page: 9 9 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E (as the end of input and returns)144 84 Q/F1 9/Times-Bold@0 SF(EOF)2.5 E /F2 9/Times-Roman@0 SF(.)A/F3 10/Times-Bold@0 SF (delete\255char \(C\255d\))108 96 Q F0 .442 (Delete the character at point.)144 108 R .442 (If this function is bound to the same character as the tty)5.442 F F3 (EOF)2.941 E F0(char)2.941 E(-)-.2 E(acter)144 120 Q 2.5(,a)-.4 G(s)-2.5 E F3(C\255d)2.5 E F0(commonly is, see abo)2.5 E .3 -.15(ve f)-.15 H (or the ef).15 E(fects.)-.25 E F3(backward\255delete\255char \(Rubout\)) 108 132 Q F0 .552(Delete the character behind the cursor)144 144 R 5.553 (.W)-.55 G .553(hen gi)-5.553 F -.15(ve)-.25 G 3.053(nan).15 G .553 (umeric ar)-3.053 F .553(gument, sa)-.18 F .853 -.15(ve t)-.2 H .553 (he deleted te).15 F .553(xt on)-.15 F(the kill ring.)144 156 Q F3 -.25 (fo)108 168 S(rward\255backward\255delete\255char).25 E F0 .474 (Delete the character under the cursor)144 180 R 2.974(,u)-.4 G .474 (nless the cursor is at the end of the line, in which case the)-2.974 F (character behind the cursor is deleted.)144 192 Q F3 (quoted\255insert \(C\255q, C\255v\))108 204 Q F0 1.228(Add the ne)144 216 R 1.228(xt character that you type to the line v)-.15 F 3.728 (erbatim. This)-.15 F 1.228(is ho)3.728 F 3.729(wt)-.25 G 3.729(oi) -3.729 G 1.229(nsert characters lik)-3.729 F(e)-.1 E F3(C\255q)144 228 Q F0 2.5(,f)C(or e)-2.5 E(xample.)-.15 E F3(tab\255insert \(M-T)108 240 Q (AB\))-.9 E F0(Insert a tab character)144 252 Q(.)-.55 E F3 (self\255insert \(a, b, A, 1, !, ...\))108 264 Q F0 (Insert the character typed.)144 276 Q F3(transpose\255chars \(C\255t\)) 108 288 Q F0 .322(Drag the character before point forw)144 300 R .321 (ard o)-.1 F -.15(ve)-.15 G 2.821(rt).15 G .321 (he character at point, mo)-2.821 F .321(ving point forw)-.15 F .321 (ard as well.)-.1 F 1.182 (If point is at the end of the line, then this transposes the tw)144 312 R 3.683(oc)-.1 G 1.183(haracters before point.)-3.683 F(Ne)6.183 E -.05 (ga)-.15 G(ti).05 E -.15(ve)-.25 G(ar)144 324 Q(guments ha)-.18 E .3 -.15(ve n)-.2 H 2.5(oe).15 G -.25(ff)-2.5 G(ect.).25 E F3 (transpose\255w)108 336 Q(ords \(M\255t\))-.1 E F0 .024(Drag the w)144 348 R .024(ord before point past the w)-.1 F .023(ord after point, mo) -.1 F .023(ving point o)-.15 F -.15(ve)-.15 G 2.523(rt).15 G .023(hat w) -2.523 F .023(ord as well.)-.1 F .023(If point)5.023 F (is at the end of the line, this transposes the last tw)144 360 Q 2.5 (ow)-.1 G(ords on the line.)-2.6 E F3(upcase\255w)108 372 Q (ord \(M\255u\))-.1 E F0 1.698(Uppercase the current \(or follo)144 384 R 1.698(wing\) w)-.25 F 4.198(ord. W)-.1 F 1.698(ith a ne)-.4 F -.05(ga) -.15 G(ti).05 E 1.999 -.15(ve a)-.25 H -.18(rg).15 G 1.699 (ument, uppercase the pre).18 F(vious)-.25 E -.1(wo)144 396 S(rd, b).1 E (ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F3(do)108 408 Q (wncase\255w)-.1 E(ord \(M\255l\))-.1 E F0(Lo)144 420 Q 1.648 (wercase the current \(or follo)-.25 F 1.648(wing\) w)-.25 F 4.148 (ord. W)-.1 F 1.647(ith a ne)-.4 F -.05(ga)-.15 G(ti).05 E 1.947 -.15 (ve a)-.25 H -.18(rg).15 G 1.647(ument, lo).18 F 1.647(wercase the pre) -.25 F(vious)-.25 E -.1(wo)144 432 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F3(capitalize\255w)108 444 Q (ord \(M\255c\))-.1 E F0 1.974(Capitalize the current \(or follo)144 456 R 1.974(wing\) w)-.25 F 4.474(ord. W)-.1 F 1.974(ith a ne)-.4 F -.05(ga) -.15 G(ti).05 E 2.274 -.15(ve a)-.25 H -.18(rg).15 G 1.975 (ument, capitalize the pre).18 F(vious)-.25 E -.1(wo)144 468 S(rd, b).1 E(ut do not mo)-.2 E .3 -.15(ve p)-.15 H(oint.).15 E F3 -.1(ove)108 480 S(rwrite\255mode).1 E F0 -.8(To)144 492 S .438(ggle o).8 F -.15(ve)-.15 G .438(rwrite mode.).15 F -.4(Wi)5.438 G .438(th an e).4 F .438 (xplicit positi)-.15 F .737 -.15(ve n)-.25 H .437(umeric ar).15 F .437 (gument, switches to o)-.18 F -.15(ve)-.15 G .437(rwrite mode.).15 F -.4 (Wi)144 504 S .78(th an e).4 F .781(xplicit non-positi)-.15 F 1.081 -.15 (ve n)-.25 H .781(umeric ar).15 F .781(gument, switches to insert mode.) -.18 F .781(This command af)5.781 F(fects)-.25 E(only)144 516 Q F3 (emacs)4.395 E F0(mode;)4.395 E F3(vi)4.395 E F0 1.894(mode does o)4.395 F -.15(ve)-.15 G 1.894(rwrite dif).15 F(ferently)-.25 E 6.894(.E)-.65 G 1.894(ach call to)-6.894 F/F4 10/Times-Italic@0 SF -.37(re)4.394 G (adline\(\)).37 E F0 1.894(starts in insert)4.394 F 3.968(mode. In)144 528 R -.15(ove)3.968 G 1.468(rwrite mode, characters bound to).15 F F3 (self\255insert)3.969 E F0 1.469(replace the te)3.969 F 1.469 (xt at point rather than)-.15 F .958(pushing the te)144 540 R .958 (xt to the right.)-.15 F .957(Characters bound to)5.958 F F3 (backward\255delete\255char)3.457 E F0 .957(replace the character)3.457 F(before point with a space.)144 552 Q(By def)5 E (ault, this command is unbound.)-.1 E F3(Killing and Y)87 568.8 Q (anking)-.85 E(kill\255line \(C\255k\))108 580.8 Q F0(Kill the te)144 592.8 Q(xt from point to the end of the line.)-.15 E F3 (backward\255kill\255line \(C\255x Rubout\))108 604.8 Q F0(Kill backw) 144 616.8 Q(ard to the be)-.1 E(ginning of the line.)-.15 E F3 (unix\255line\255discard \(C\255u\))108 628.8 Q F0(Kill backw)144 640.8 Q(ard from point to the be)-.1 E(ginning of the line.)-.15 E (The killed te)5 E(xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt) -2.5 G(he kill-ring.)-2.5 E F3(kill\255whole\255line)108 652.8 Q F0 (Kill all characters on the current line, no matter where point is.)144 664.8 Q F3(kill\255w)108 676.8 Q(ord \(M\255d\))-.1 E F0 1.308 (Kill from point the end of the current w)144 688.8 R 1.308 (ord, or if between w)-.1 F 1.308(ords, to the end of the ne)-.1 F 1.308 (xt w)-.15 F(ord.)-.1 E -.8(Wo)144 700.8 S (rd boundaries are the same as those used by).8 E F3 -.25(fo)2.5 G (rward\255w).25 E(ord)-.1 E F0(.)A(GNU Readline 7.0)72 768 Q (2016 February 28)123.74 E(9)193.45 E 0 Cg EP %%Page: 10 10 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (backward\255kill\255w)108 84 Q(ord \(M\255Rubout\))-.1 E F0(Kill the w) 144 96 Q(ord behind point.)-.1 E -.8(Wo)5 G (rd boundaries are the same as those used by).8 E F1(backward\255w)2.5 E (ord)-.1 E F0(.)A F1(unix\255w)108 108 Q(ord\255rubout \(C\255w\))-.1 E F0 .365(Kill the w)144 120 R .365 (ord behind point, using white space as a w)-.1 F .364(ord boundary)-.1 F 5.364(.T)-.65 G .364(he killed te)-5.364 F .364(xt is sa)-.15 F -.15 (ve)-.2 G 2.864(do).15 G 2.864(nt)-2.864 G(he)-2.864 E(kill-ring.)144 132 Q F1(unix\255\214lename\255rubout)108 144 Q F0 .166(Kill the w)144 156 R .166 (ord behind point, using white space and the slash character as the w) -.1 F .167(ord boundaries.)-.1 F(The)5.167 E(killed te)144 168 Q (xt is sa)-.15 E -.15(ve)-.2 G 2.5(do).15 G 2.5(nt)-2.5 G(he kill-ring.) -2.5 E F1(delete\255horizontal\255space \(M\255\\\))108 180 Q F0 (Delete all spaces and tabs around point.)144 192 Q F1(kill\255r)108 204 Q(egion)-.18 E F0 1.13(Kill the te)144 216 R 1.13 (xt between the point and)-.15 F/F2 10/Times-Italic@0 SF(mark)3.63 E F0 (\(sa)3.63 E -.15(ve)-.2 G 3.63(dc).15 G 1.13(ursor position\).)-3.63 F 1.13(This te)6.13 F 1.13(xt is referred to as the)-.15 F F2 -.37(re)144 228 S(gion)-.03 E F0(.)A F1(copy\255r)108 240 Q(egion\255as\255kill)-.18 E F0(Cop)144 252 Q 2.5(yt)-.1 G(he te)-2.5 E(xt in the re)-.15 E (gion to the kill b)-.15 E(uf)-.2 E(fer)-.25 E(.)-.55 E F1 (copy\255backward\255w)108 264 Q(ord)-.1 E F0(Cop)144 276 Q 4.8(yt)-.1 G 2.3(he w)-4.8 F 2.3(ord before point to the kill b)-.1 F(uf)-.2 E(fer) -.25 E 7.301(.T)-.55 G 2.301(he w)-7.301 F 2.301 (ord boundaries are the same as)-.1 F F1(back-)4.801 E(ward\255w)144 288 Q(ord)-.1 E F0(.)A F1(copy\255f)108 300 Q(orward\255w)-.25 E(ord)-.1 E F0(Cop)144 312 Q 4.508(yt)-.1 G 2.008(he w)-4.508 F 2.008(ord follo)-.1 F 2.008(wing point to the kill b)-.25 F(uf)-.2 E(fer)-.25 E 7.007(.T) -.55 G 2.007(he w)-7.007 F 2.007(ord boundaries are the same as)-.1 F F1 -.25(fo)4.507 G -.37(r-).25 G(ward\255w)144 324 Q(ord)-.1 E F0(.)A F1 (yank \(C\255y\))108 336 Q F0 -1(Ya)144 348 S (nk the top of the kill ring into the b)1 E(uf)-.2 E(fer at point.)-.25 E F1(yank\255pop \(M\255y\))108 360 Q F0 (Rotate the kill ring, and yank the ne)144 372 Q 2.5(wt)-.25 G 2.5 (op. Only)-2.5 F -.1(wo)2.5 G(rks follo).1 E(wing)-.25 E F1(yank)2.5 E F0(or)2.5 E F1(yank\255pop)2.5 E F0(.)A F1(Numeric Ar)87 388.8 Q (guments)-.1 E(digit\255ar)108 400.8 Q (gument \(M\2550, M\2551, ..., M\255\255\))-.1 E F0 .367 (Add this digit to the ar)144 412.8 R .367 (gument already accumulating, or start a ne)-.18 F 2.867(wa)-.25 G -.18 (rg)-2.867 G 2.867(ument. M\255\255).18 F .367(starts a ne)2.867 F -.05 (ga)-.15 G(-).05 E(ti)144 424.8 Q .3 -.15(ve a)-.25 H -.18(rg).15 G (ument.).18 E F1(uni)108 436.8 Q -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0 .779(This is another w)144 448.8 R .779(ay to specify an ar)-.1 F 3.279(gument. If)-.18 F .779(this command is follo)3.279 F .778 (wed by one or more digits,)-.25 F 1.376 (optionally with a leading minus sign, those digits de\214ne the ar)144 460.8 R 3.876(gument. If)-.18 F 1.376(the command is fol-)3.876 F(lo)144 472.8 Q 1.17(wed by digits, e)-.25 F -.15(xe)-.15 G(cuting).15 E F1(uni) 3.67 E -.1(ve)-.1 G(rsal\255ar).1 E(gument)-.1 E F0(ag)3.67 E 1.17 (ain ends the numeric ar)-.05 F 1.17(gument, b)-.18 F 1.17(ut is other) -.2 F(-)-.2 E .898(wise ignored.)144 484.8 R .898 (As a special case, if this command is immediately follo)5.898 F .898 (wed by a character that is)-.25 F .243 (neither a digit or minus sign, the ar)144 496.8 R .243 (gument count for the ne)-.18 F .243(xt command is multiplied by four) -.15 F 5.242(.T)-.55 G(he)-5.242 E(ar)144 508.8 Q .378 (gument count is initially one, so e)-.18 F -.15(xe)-.15 G .378 (cuting this function the \214rst time mak).15 F .378(es the ar)-.1 F .378(gument count)-.18 F(four)144 520.8 Q 2.5(,as)-.4 G(econd time mak) -2.5 E(es the ar)-.1 E(gument count sixteen, and so on.)-.18 E F1 (Completing)87 537.6 Q(complete \(T)108 549.6 Q(AB\))-.9 E F0 1.909 (Attempt to perform completion on the te)144 561.6 R 1.908 (xt before point.)-.15 F 1.908(The actual completion performed is)6.908 F(application-speci\214c.)144 573.6 Q F1(Bash)5.517 E F0 3.017(,f)C .518 (or instance, attempts completion treating the te)-3.017 F .518 (xt as a v)-.15 F .518(ariable \(if the)-.25 F(te)144 585.6 Q .657 (xt be)-.15 F .657(gins with)-.15 F F1($)3.156 E F0 .656 (\), username \(if the te)B .656(xt be)-.15 F .656(gins with)-.15 F F1 (~)3.156 E F0 .656(\), hostname \(if the te)B .656(xt be)-.15 F .656 (gins with)-.15 F F1(@)3.156 E F0 .656(\), or)B .929 (command \(including aliases and functions\) in turn.)144 597.6 R .93 (If none of these produces a match, \214lename)5.929 F 1.274 (completion is attempted.)144 609.6 R F1(Gdb)6.273 E F0 3.773(,o)C 3.773 (nt)-3.773 G 1.273(he other hand, allo)-3.773 F 1.273 (ws completion of program functions and)-.25 F -.25(va)144 621.6 S(riab\ les, and only attempts \214lename completion under certain circumstance\ s.).25 E F1(possible\255completions \(M\255?\))108 633.6 Q F0 .261 (List the possible completions of the te)144 645.6 R .262 (xt before point.)-.15 F .262 (When displaying completions, readline sets)5.262 F 1.002 (the number of columns used for display to the v)144 657.6 R 1.002 (alue of)-.25 F F1(completion-display-width)3.502 E F0 3.502(,t)C 1.002 (he v)-3.502 F 1.002(alue of)-.25 F(the en)144 669.6 Q(vironment v)-.4 E (ariable)-.25 E/F3 9/Times-Bold@0 SF(COLUMNS)2.5 E/F4 9/Times-Roman@0 SF (,)A F0(or the screen width, in that order)2.25 E(.)-.55 E F1 (insert\255completions \(M\255*\))108 681.6 Q F0 .783 (Insert all completions of the te)144 693.6 R .783 (xt before point that w)-.15 F .783(ould ha)-.1 F 1.083 -.15(ve b)-.2 H .783(een generated by).15 F F1(possible\255com-)3.283 E(pletions)144 705.6 Q F0(.)A(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(10) 188.45 E 0 Cg EP %%Page: 11 11 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (menu\255complete)108 84 Q F0 .929(Similar to)144 96 R F1(complete)3.429 E F0 3.429(,b)C .929(ut replaces the w)-3.629 F .929 (ord to be completed with a single match from the list of)-.1 F 1.193 (possible completions.)144 108 R 1.193(Repeated e)6.193 F -.15(xe)-.15 G 1.193(cution of).15 F F1(menu\255complete)3.694 E F0 1.194 (steps through the list of possible)3.694 F .829 (completions, inserting each match in turn.)144 120 R .828 (At the end of the list of completions, the bell is rung)5.828 F .727 (\(subject to the setting of)144 132 R F1(bell\255style)3.227 E F0 3.227 (\)a)C .727(nd the original te)-3.227 F .727(xt is restored.)-.15 F .727 (An ar)5.727 F .727(gument of)-.18 F/F2 10/Times-Italic@0 SF(n)3.227 E F0(mo)3.227 E -.15(ve)-.15 G(s).15 E F2(n)3.228 E F0 1.73 (positions forw)144 144 R 1.73(ard in the list of matches; a ne)-.1 F -.05(ga)-.15 G(ti).05 E 2.03 -.15(ve a)-.25 H -.18(rg).15 G 1.73 (ument may be used to mo).18 F 2.03 -.15(ve b)-.15 H(ackw).15 E(ard)-.1 E(through the list.)144 156 Q(This command is intended to be bound to)5 E F1 -.9(TA)2.5 G(B).9 E F0 2.5(,b)C(ut is unbound by def)-2.7 E(ault.) -.1 E F1(menu\255complete\255backward)108 168 Q F0 .82(Identical to)144 180 R F1(menu\255complete)3.32 E F0 3.32(,b)C .82(ut mo)-3.52 F -.15(ve) -.15 G 3.32(sb).15 G(ackw)-3.32 E .82 (ard through the list of possible completions, as if)-.1 F F1 (menu\255complete)144 192 Q F0(had been gi)2.5 E -.15(ve)-.25 G 2.5(nan) .15 G -2.25 -.15(eg a)-2.5 H(ti).15 E .3 -.15(ve a)-.25 H -.18(rg).15 G 2.5(ument. This).18 F(command is unbound by def)2.5 E(ault.)-.1 E F1 (delete\255char\255or\255list)108 204 Q F0 .374 (Deletes the character under the cursor if not at the be)144 216 R .373 (ginning or end of the line \(lik)-.15 F(e)-.1 E F1(delete-char)2.873 E F0(\).)A(If at the end of the line, beha)144 228 Q -.15(ve)-.2 G 2.5(si) .15 G(dentically to)-2.5 E F1(possible-completions)2.5 E F0(.)A F1 -.25 (Ke)87 244.8 S(yboard Macr).25 E(os)-.18 E(start\255kbd\255macr)108 256.8 Q 2.5(o\()-.18 G(C\255x \()-2.5 E(\)).833 E F0(Be)144 268.8 Q (gin sa)-.15 E(ving the characters typed into the current k)-.2 E -.15 (ey)-.1 G(board macro.).15 E F1(end\255kbd\255macr)108 280.8 Q 2.5(o\() -.18 G(C\255x \))-2.5 E(\)).833 E F0(Stop sa)144 292.8 Q (ving the characters typed into the current k)-.2 E -.15(ey)-.1 G (board macro and store the de\214nition.).15 E F1 (call\255last\255kbd\255macr)108 304.8 Q 2.5(o\()-.18 G(C\255x e\))-2.5 E F0(Re-e)144 316.8 Q -.15(xe)-.15 G .999(cute the last k).15 F -.15(ey) -.1 G .999(board macro de\214ned, by making the characters in the macro\ appear as if).15 F .663(typed at the k)144 328.8 R -.15(ey)-.1 G (board.).15 E F1(print\255last\255kbd\255macr)5.663 E 3.163(o\()-.18 G (\))-3.163 E F0 .663(Print the last k)3.163 F -.15(ey)-.1 G .663 (board macro de\214ned in a for).15 F(-)-.2 E(mat suitable for the)144 340.8 Q F2(inputr)2.5 E(c)-.37 E F0(\214le.)2.5 E F1(Miscellaneous)87 357.6 Q -.18(re)108 369.6 S.18 E (ead\255init\255\214le \(C\255x C\255r\))-.18 E F0 1.776 (Read in the contents of the)144 381.6 R F2(inputr)4.276 E(c)-.37 E F0 1.777(\214le, and incorporate an)4.276 F 4.277(yb)-.15 G 1.777 (indings or v)-4.277 F 1.777(ariable assignments)-.25 F(found there.)144 393.6 Q F1(abort \(C\255g\))108 405.6 Q F0 3.249 (Abort the current editing command and ring the terminal')144 417.6 R 5.748(sb)-.55 G 3.248(ell \(subject to the setting of)-5.748 F F1 (bell\255style)144 429.6 Q F0(\).)A F1(do\255upper)108 441.6 Q (case\255v)-.18 E(ersion \(M\255a, M\255b, M\255)-.1 E F2(x)A F1 2.5(,.) C(..\))-2.5 E F0 1.755(If the meta\214ed character)144 453.6 R F2(x) 4.255 E F0 1.755(is lo)4.255 F 1.756 (wercase, run the command that is bound to the corresponding)-.25 F (uppercase character)144 465.6 Q(.)-.55 E F1(pr)108 477.6 Q (e\214x\255meta \(ESC\))-.18 E F0(Metafy the ne)144 489.6 Q (xt character typed.)-.15 E/F3 9/Times-Bold@0 SF(ESC)5 E F1(f)2.25 E F0 (is equi)2.5 E -.25(va)-.25 G(lent to).25 E F1(Meta\255f)2.5 E F0(.)A F1 (undo \(C\255_, C\255x C\255u\))108 501.6 Q F0 (Incremental undo, separately remembered for each line.)144 513.6 Q F1 -2.29 -.18(re v)108 525.6 T(ert\255line \(M\255r\)).08 E F0 1.095 (Undo all changes made to this line.)144 537.6 R 1.095(This is lik)6.095 F 3.595(ee)-.1 G -.15(xe)-3.745 G 1.095(cuting the).15 F F1(undo)3.595 E F0 1.095(command enough times to)3.595 F (return the line to its initial state.)144 549.6 Q F1 (tilde\255expand \(M\255&\))108 561.6 Q F0(Perform tilde e)144 573.6 Q (xpansion on the current w)-.15 E(ord.)-.1 E F1 (set\255mark \(C\255@, M\255\))108 585.6 Q F0 (Set the mark to the point.)144 597.6 Q(If a numeric ar)5 E (gument is supplied, the mark is set to that position.)-.18 E F1 (exchange\255point\255and\255mark \(C\255x C\255x\))108 609.6 Q F0(Sw) 144 621.6 Q .282(ap the point with the mark.)-.1 F .283 (The current cursor position is set to the sa)5.283 F -.15(ve)-.2 G 2.783(dp).15 G .283(osition, and the old)-2.783 F(cursor position is sa) 144 633.6 Q -.15(ve)-.2 G 2.5(da).15 G 2.5(st)-2.5 G(he mark.)-2.5 E F1 (character\255sear)108 645.6 Q(ch \(C\255]\))-.18 E F0 3.036(Ac)144 657.6 S .536(haracter is read and point is mo)-3.036 F -.15(ve)-.15 G 3.035(dt).15 G 3.035(ot)-3.035 G .535(he ne)-3.035 F .535 (xt occurrence of that character)-.15 F 5.535(.A)-.55 G(ne)-2.5 E -.05 (ga)-.15 G(ti).05 E .835 -.15(ve c)-.25 H(ount).15 E(searches for pre) 144 669.6 Q(vious occurrences.)-.25 E F1(character\255sear)108 681.6 Q (ch\255backward \(M\255C\255]\))-.18 E F0 3.543(Ac)144 693.6 S 1.043 (haracter is read and point is mo)-3.543 F -.15(ve)-.15 G 3.544(dt).15 G 3.544(ot)-3.544 G 1.044(he pre)-3.544 F 1.044 (vious occurrence of that character)-.25 F 6.044(.A)-.55 G(ne)-2.5 E -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G (count searches for subsequent occurrences.)144 705.6 Q (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(11)188.45 E 0 Cg EP %%Page: 12 12 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E/F1 10/Times-Bold@0 SF (skip\255csi\255sequence)108 84 Q F0 1.827 (Read enough characters to consume a multi-k)144 96 R 2.126 -.15(ey s) -.1 H 1.826(equence such as those de\214ned for k).15 F -.15(ey)-.1 G 4.326(sl).15 G(ik)-4.326 E(e)-.1 E .79(Home and End.)144 108 R .791 (Such sequences be)5.79 F .791 (gin with a Control Sequence Indicator \(CSI\), usually ESC\255[.)-.15 F .332(If this sequence is bound to "\\[", k)144 120 R -.15(ey)-.1 G 2.831 (sp).15 G .331(roducing such sequences will ha)-2.831 F .631 -.15(ve n) -.2 H 2.831(oe).15 G -.25(ff)-2.831 G .331(ect unless e).25 F(xplic-) -.15 E .026(itly bound to a readline command, instead of inserting stra\ y characters into the editing b)144 132 R(uf)-.2 E(fer)-.25 E 5.026(.T) -.55 G(his)-5.026 E(is unbound by def)144 144 Q(ault, b)-.1 E (ut usually bound to ESC\255[.)-.2 E F1(insert\255comment \(M\255#\))108 156 Q F0 -.4(Wi)144 168 S .481(thout a numeric ar).4 F .481 (gument, the v)-.18 F .481(alue of the readline)-.25 F F1 (comment\255begin)2.981 E F0 -.25(va)2.981 G .48 (riable is inserted at the).25 F(be)144 180 Q .244 (ginning of the current line.)-.15 F .245(If a numeric ar)5.244 F .245 (gument is supplied, this command acts as a toggle: if)-.18 F .322 (the characters at the be)144 192 R .321 (ginning of the line do not match the v)-.15 F .321(alue of)-.25 F F1 (comment\255begin)2.821 E F0 2.821(,t)C .321(he v)-2.821 F .321(alue is) -.25 F 1.013(inserted, otherwise the characters in)144 204 R F1 (comment-begin)3.514 E F0 1.014(are deleted from the be)3.514 F 1.014 (ginning of the line.)-.15 F 1.469 (In either case, the line is accepted as if a ne)144 216 R 1.468 (wline had been typed.)-.25 F 1.468(The def)6.468 F 1.468(ault v)-.1 F 1.468(alue of)-.25 F F1(com-)3.968 E(ment\255begin)144 228 Q F0(mak) 2.982 E .483(es the current line a shell comment.)-.1 F .483 (If a numeric ar)5.483 F .483(gument causes the comment)-.18 F (character to be remo)144 240 Q -.15(ve)-.15 G(d, the line will be e).15 E -.15(xe)-.15 G(cuted by the shell.).15 E F1(dump\255functions)108 252 Q F0 .627(Print all of the functions and their k)144 264 R .927 -.15 (ey b)-.1 H .626(indings to the readline output stream.).15 F .626 (If a numeric ar)5.626 F(gu-)-.18 E (ment is supplied, the output is formatted in such a w)144 276 Q (ay that it can be made part of an)-.1 E/F2 10/Times-Italic@0 SF(inputr) 2.5 E(c)-.37 E F0(\214le.)2.5 E F1(dump\255v)108 288 Q(ariables)-.1 E F0 .283(Print all of the settable v)144 300 R .283(ariables and their v) -.25 F .283(alues to the readline output stream.)-.25 F .283 (If a numeric ar)5.283 F(gu-)-.18 E (ment is supplied, the output is formatted in such a w)144 312 Q (ay that it can be made part of an)-.1 E F2(inputr)2.5 E(c)-.37 E F0 (\214le.)2.5 E F1(dump\255macr)108 324 Q(os)-.18 E F0 .593 (Print all of the readline k)144 336 R .893 -.15(ey s)-.1 H .592 (equences bound to macros and the strings the).15 F 3.092(yo)-.15 G 3.092(utput. If)-3.092 F 3.092(an)3.092 G(umeric)-3.092 E(ar)144 348 Q .528(gument is supplied, the output is formatted in such a w)-.18 F .528 (ay that it can be made part of an)-.1 F F2(inputr)3.028 E(c)-.37 E F0 (\214le.)144 360 Q F1(emacs\255editing\255mode \(C\255e\))108 372 Q F0 (When in)144 384 Q F1(vi)2.5 E F0(command mode, this causes a switch to) 2.5 E F1(emacs)2.5 E F0(editing mode.)2.5 E F1 (vi\255editing\255mode \(M\255C\255j\))108 396 Q F0(When in)144 408 Q F1 (emacs)2.5 E F0(editing mode, this causes a switch to)2.5 E F1(vi)2.5 E F0(editing mode.)2.5 E/F3 10.95/Times-Bold@0 SF(DEF)72 424.8 Q -.548(AU) -.986 G 2.014 -1.007(LT K).548 H(EY BINDINGS)1.007 E F0 .065(The follo) 108 436.8 R .065(wing is a list of the def)-.25 F .065 (ault emacs and vi bindings.)-.1 F .064 (Characters with the eighth bit set are written as)5.064 F .527 (M\255, and are referred to as)108 448.8 R F2(meta\214ed) 3.407 E F0 3.027(characters. The)3.797 F .527 (printable ASCII characters not mentioned)3.027 F 1.116 (in the list of emacs standard bindings are bound to the)108 460.8 R F1 (self\255insert)3.615 E F0 1.115(function, which just inserts the gi) 3.615 F -.15(ve)-.25 G(n).15 E .945(character into the input line.)108 472.8 R .945(In vi insertion mode, all characters not speci\214cally me\ ntioned are bound to)5.945 F F1(self\255insert)108 484.8 Q F0 5.359(.C)C .359(haracters assigned to signal generation by)-5.359 F F2(stty)2.859 E F0 .359(\(1\) or the terminal dri).32 F -.15(ve)-.25 G 1.159 -.4(r, s) .15 H .358(uch as C-Z or C-C,).4 F .187(retain that function.)108 496.8 R .187(Upper and lo)5.187 F .188(wer case meta\214ed characters are bou\ nd to the same function in the emacs)-.25 F .305(mode meta k)108 508.8 R -.15(ey)-.1 G 2.805(map. The).15 F .305(remaining characters are unboun\ d, which causes readline to ring the bell \(subject)2.805 F (to the setting of the)108 520.8 Q F1(bell\255style)2.5 E F0 -.25(va)2.5 G(riable\).).25 E F1(Emacs Mode)87 537.6 Q F0(Emacs Standard bindings) 151.2 549.6 Q 2.5("C-@" set-mark)151.2 573.6 R 2.5("C-A" be)151.2 585.6 R(ginning-of-line)-.15 E 2.5("C-B" backw)151.2 597.6 R(ard-char)-.1 E 2.5("C-D" delete-char)151.2 609.6 R 2.5("C-E" end-of-line)151.2 621.6 R 2.5("C-F" forw)151.2 633.6 R(ard-char)-.1 E 2.5("C-G" abort)151.2 645.6 R 2.5("C-H" backw)151.2 657.6 R(ard-delete-char)-.1 E 2.5 ("C-I" complete)151.2 669.6 R 2.5("C-J" accept-line)151.2 681.6 R 2.5 ("C-K" kill-line)151.2 693.6 R 2.5("C-L" clear)151.2 705.6 R(-screen)-.2 E 2.5("C-M" accept-line)151.2 717.6 R 2.5("C-N" ne)151.2 729.6 R (xt-history)-.15 E(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E (12)188.45 E 0 Cg EP %%Page: 13 13 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E 2.5("C-P" pre)151.2 84 R (vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 96 R 2.5("C-R" re) 151.2 108 R -.15(ve)-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 120 R(ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 132 R 2.5 ("C-U" unix-line-discard)151.2 144 R 2.5("C-V" quoted-insert)151.2 156 R 2.5("C-W" unix-w)151.2 168 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 180 R 2.5("C-]" character)151.2 192 R(-search)-.2 E 2.5("C-_" undo)151.2 204 R 3.333("")151.2 216 S(to "/")-.833 E(self-insert)5 E 2.5("0" to)151.2 228 R 2.5("9" self-insert)2.5 F 2.5(":" to)151.2 240 R 2.5("~" self-insert) 2.5 F 2.5("C-?" backw)151.2 252 R(ard-delete-char)-.1 E (Emacs Meta bindings)151.2 268.8 Q 2.5("M-C-G" abort)151.2 292.8 R 2.5 ("M-C-H" backw)151.2 304.8 R(ard-kill-w)-.1 E(ord)-.1 E 2.5 ("M-C-I" tab-insert)151.2 316.8 R 2.5("M-C-J" vi-editing-mode)151.2 328.8 R 2.5("M-C-M" vi-editing-mode)151.2 340.8 R 2.5("M-C-R" re)151.2 352.8 R -.15(ve)-.25 G(rt-line).15 E 2.5("M-C-Y" yank-nth-ar)151.2 364.8 R(g)-.18 E 2.5("M-C-[" complete)151.2 376.8 R 2.5("M-C-]" character) 151.2 388.8 R(-search-backw)-.2 E(ard)-.1 E 2.5("M-space" set-mark)151.2 400.8 R 2.5("M-#" insert-comment)151.2 412.8 R 2.5("M-&" tilde-e)151.2 424.8 R(xpand)-.15 E 2.5("M-*" insert-completions)151.2 436.8 R 2.5 ("M--" digit-ar)151.2 448.8 R(gument)-.18 E 2.5("M-." yank-last-ar)151.2 460.8 R(g)-.18 E 2.5("M-0" digit-ar)151.2 472.8 R(gument)-.18 E 2.5 ("M-1" digit-ar)151.2 484.8 R(gument)-.18 E 2.5("M-2" digit-ar)151.2 496.8 R(gument)-.18 E 2.5("M-3" digit-ar)151.2 508.8 R(gument)-.18 E 2.5 ("M-4" digit-ar)151.2 520.8 R(gument)-.18 E 2.5("M-5" digit-ar)151.2 532.8 R(gument)-.18 E 2.5("M-6" digit-ar)151.2 544.8 R(gument)-.18 E 2.5 ("M-7" digit-ar)151.2 556.8 R(gument)-.18 E 2.5("M-8" digit-ar)151.2 568.8 R(gument)-.18 E 2.5("M-9" digit-ar)151.2 580.8 R(gument)-.18 E 2.5 ("M-<" be)151.2 592.8 R(ginning-of-history)-.15 E 2.5 ("M-=" possible-completions)151.2 604.8 R 2.5("M->" end-of-history)151.2 616.8 R 2.5("M-?" possible-completions)151.2 628.8 R 2.5("M-B" backw) 151.2 640.8 R(ard-w)-.1 E(ord)-.1 E 2.5("M-C" capitalize-w)151.2 652.8 R (ord)-.1 E 2.5("M-D" kill-w)151.2 664.8 R(ord)-.1 E 2.5("M-F" forw)151.2 676.8 R(ard-w)-.1 E(ord)-.1 E 2.5("M-L" do)151.2 688.8 R(wncase-w)-.25 E (ord)-.1 E 2.5("M-N" non-incremental-forw)151.2 700.8 R (ard-search-history)-.1 E 2.5("M-P" non-incremental-re)151.2 712.8 R -.15(ve)-.25 G(rse-search-history).15 E 2.5("M-R" re)151.2 724.8 R -.15 (ve)-.25 G(rt-line).15 E(GNU Readline 7.0)72 768 Q(2016 February 28) 123.74 E(13)188.45 E 0 Cg EP %%Page: 14 14 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E 2.5("M-T" transpose-w) 151.2 84 R(ords)-.1 E 2.5("M-U" upcase-w)151.2 96 R(ord)-.1 E 2.5 ("M-Y" yank-pop)151.2 108 R 2.5("M-\\" delete-horizontal-space)151.2 120 R 2.5("M-~" tilde-e)151.2 132 R(xpand)-.15 E 2.5("M-C-?" backw)151.2 144 R(ard-kill-w)-.1 E(ord)-.1 E 2.5("M-_" yank-last-ar)151.2 156 R(g)-.18 E (Emacs Control-X bindings)151.2 172.8 Q 2.5("C-XC-G" abort)151.2 196.8 R 2.5("C-XC-R" re-read-init-\214le)151.2 208.8 R 2.5("C-XC-U" undo)151.2 220.8 R 2.5("C-XC-X" e)151.2 232.8 R(xchange-point-and-mark)-.15 E 2.5 ("C-X\(" start-kbd-macro)151.2 244.8 R 2.5("C-X\)" end-kbd-macro)151.2 256.8 R 2.5("C-XE" call-last-kbd-macro)151.2 268.8 R 2.5("C-XC-?" backw) 151.2 280.8 R(ard-kill-line)-.1 E/F1 10/Times-Bold@0 SF (VI Mode bindings)87 309.6 Q F0(VI Insert Mode functions)151.2 321.6 Q 2.5("C-D" vi-eof-maybe)151.2 345.6 R 2.5("C-H" backw)151.2 357.6 R (ard-delete-char)-.1 E 2.5("C-I" complete)151.2 369.6 R 2.5 ("C-J" accept-line)151.2 381.6 R 2.5("C-M" accept-line)151.2 393.6 R 2.5 ("C-R" re)151.2 405.6 R -.15(ve)-.25 G(rse-search-history).15 E 2.5 ("C-S" forw)151.2 417.6 R(ard-search-history)-.1 E 2.5 ("C-T" transpose-chars)151.2 429.6 R 2.5("C-U" unix-line-discard)151.2 441.6 R 2.5("C-V" quoted-insert)151.2 453.6 R 2.5("C-W" unix-w)151.2 465.6 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 477.6 R 2.5("C-[" vi-mo) 151.2 489.6 R -.15(ve)-.15 G(ment-mode).15 E 2.5("C-_" undo)151.2 501.6 R 3.333("")151.2 513.6 S(to "~")-.833 E(self-insert)5 E 2.5("C-?" backw) 151.2 525.6 R(ard-delete-char)-.1 E(VI Command Mode functions)151.2 542.4 Q 2.5("C-D" vi-eof-maybe)151.2 566.4 R 2.5 ("C-E" emacs-editing-mode)151.2 578.4 R 2.5("C-G" abort)151.2 590.4 R 2.5("C-H" backw)151.2 602.4 R(ard-char)-.1 E 2.5("C-J" accept-line)151.2 614.4 R 2.5("C-K" kill-line)151.2 626.4 R 2.5("C-L" clear)151.2 638.4 R (-screen)-.2 E 2.5("C-M" accept-line)151.2 650.4 R 2.5("C-N" ne)151.2 662.4 R(xt-history)-.15 E 2.5("C-P" pre)151.2 674.4 R(vious-history)-.25 E 2.5("C-Q" quoted-insert)151.2 686.4 R 2.5("C-R" re)151.2 698.4 R -.15 (ve)-.25 G(rse-search-history).15 E 2.5("C-S" forw)151.2 710.4 R (ard-search-history)-.1 E 2.5("C-T" transpose-chars)151.2 722.4 R (GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(14)188.45 E 0 Cg EP %%Page: 15 15 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E 2.5 ("C-U" unix-line-discard)151.2 84 R 2.5("C-V" quoted-insert)151.2 96 R 2.5("C-W" unix-w)151.2 108 R(ord-rubout)-.1 E 2.5("C-Y" yank)151.2 120 R 2.5("C-_" vi-undo)151.2 132 R -4.166 3.333("" f)151.2 144 T(orw)-3.333 E (ard-char)-.1 E 2.5("#" insert-comment)151.2 156 R 2.5("$" end-of-line) 151.2 168 R 2.5("%" vi-match)151.2 180 R 2.5("&" vi-tilde-e)151.2 192 R (xpand)-.15 E 2.5("*" vi-complete)151.2 204 R 2.5("+" ne)151.2 216 R (xt-history)-.15 E 2.5("," vi-char)151.2 228 R(-search)-.2 E 2.5 ("-" pre)151.2 240 R(vious-history)-.25 E 2.5("." vi-redo)151.2 252 R 2.5("/" vi-search)151.2 264 R 2.5("0" be)151.2 276 R(ginning-of-line) -.15 E("1" to "9")151.2 288 Q(vi-ar)5 E(g-digit)-.18 E 2.5(";" vi-char) 151.2 300 R(-search)-.2 E 2.5("=" vi-complete)151.2 312 R 2.5 ("?" vi-search)151.2 324 R 2.5("A" vi-append-eol)151.2 336 R 2.5 ("B" vi-pre)151.2 348 R(v-w)-.25 E(ord)-.1 E 2.5("C" vi-change-to)151.2 360 R 2.5("D" vi-delete-to)151.2 372 R 2.5("E" vi-end-w)151.2 384 R(ord) -.1 E 2.5("F" vi-char)151.2 396 R(-search)-.2 E 2.5 ("G" vi-fetch-history)151.2 408 R 2.5("I" vi-insert-be)151.2 420 R(g) -.15 E 2.5("N" vi-search-ag)151.2 432 R(ain)-.05 E 2.5("P" vi-put)151.2 444 R 2.5("R" vi-replace)151.2 456 R 2.5("S" vi-subst)151.2 468 R 2.5 ("T" vi-char)151.2 480 R(-search)-.2 E 2.5("U" re)151.2 492 R -.15(ve) -.25 G(rt-line).15 E 2.5("W" vi-ne)151.2 504 R(xt-w)-.15 E(ord)-.1 E 2.5 ("X" backw)151.2 516 R(ard-delete-char)-.1 E 2.5("Y" vi-yank-to)151.2 528 R 2.5("\\" vi-complete)151.2 540 R 2.5("^" vi-\214rst-print)151.2 552 R 2.5("_" vi-yank-ar)151.2 564 R(g)-.18 E 2.5("`" vi-goto-mark)151.2 576 R 2.5("a" vi-append-mode)151.2 588 R 2.5("b" vi-pre)151.2 600 R(v-w) -.25 E(ord)-.1 E 2.5("c" vi-change-to)151.2 612 R 2.5("d" vi-delete-to) 151.2 624 R 2.5("e" vi-end-w)151.2 636 R(ord)-.1 E 2.5("f" vi-char)151.2 648 R(-search)-.2 E 2.5("h" backw)151.2 660 R(ard-char)-.1 E 2.5 ("i" vi-insertion-mode)151.2 672 R 2.5("j" ne)151.2 684 R(xt-history) -.15 E 2.5("k" pre)151.2 696 R(v-history)-.25 E 2.5("l" forw)151.2 708 R (ard-char)-.1 E 2.5("m" vi-set-mark)151.2 720 R(GNU Readline 7.0)72 768 Q(2016 February 28)123.74 E(15)188.45 E 0 Cg EP %%Page: 16 16 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF 117.355(READLINE\(3\) Library)72 48 R (Functions Manual)2.5 E(READLINE\(3\))119.855 E 2.5("n" vi-search-ag) 151.2 84 R(ain)-.05 E 2.5("p" vi-put)151.2 96 R 2.5("r" vi-change-char) 151.2 108 R 2.5("s" vi-subst)151.2 120 R 2.5("t" vi-char)151.2 132 R (-search)-.2 E 2.5("u" vi-undo)151.2 144 R 2.5("w" vi-ne)151.2 156 R (xt-w)-.15 E(ord)-.1 E 2.5("x" vi-delete)151.2 168 R 2.5("y" vi-yank-to) 151.2 180 R 2.5("|" vi-column)151.2 192 R 2.5("~" vi-change-case)151.2 204 R/F1 10.95/Times-Bold@0 SF(SEE ALSO)72 220.8 Q/F2 10/Times-Italic@0 SF(The Gnu Readline Libr)108 232.8 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2(The Gnu History Libr)108 244.8 Q (ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F2(bash)108 256.8 Q F0(\(1\))A F1(FILES)72 273.6 Q F2(~/.inputr)109.666 285.6 Q(c)-.37 E F0(Indi)144 297.6 Q(vidual)-.25 E/F3 10/Times-Bold@0 SF -.18(re)2.5 G(adline).18 E F0(initialization \214le)2.5 E F1 -.548(AU)72 314.4 S(THORS).548 E F0(Brian F)108 326.4 Q(ox, Free Softw)-.15 E(are F) -.1 E(oundation)-.15 E(bfox@gnu.or)108 338.4 Q(g)-.18 E(Chet Rame)108 355.2 Q 1.3 -.65(y, C)-.15 H(ase W).65 E(estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E(chet.rame)108 367.2 Q(y@case.edu) -.15 E F1 -.11(BU)72 384 S 2.738(GR).11 G(EPOR)-2.738 E(TS)-.438 E F0 .69(If you \214nd a b)108 396 R .69(ug in)-.2 F F3 -.18(re)3.19 G (adline,).18 E F0 .69(you should report it.)3.19 F .691 (But \214rst, you should mak)5.69 F 3.191(es)-.1 G .691 (ure that it really is a b)-3.191 F(ug,)-.2 E (and that it appears in the latest v)108 408 Q(ersion of the)-.15 E F3 -.18(re)2.5 G(adline).18 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.) .15 E .705(Once you ha)108 424.8 R 1.005 -.15(ve d)-.2 H .705 (etermined that a b).15 F .704(ug actually e)-.2 F .704(xists, mail a b) -.15 F .704(ug report to)-.2 F F2 -.2(bu)3.204 G(g\255r).2 E(eadline) -.37 E F0(@)A F2(gnu.or)A(g)-.37 E F0 5.704(.I)C 3.204(fy)-5.704 G(ou) -3.204 E(ha)108 436.8 Q 1.809 -.15(ve a \214)-.2 H 1.509 (x, you are welcome to mail that as well!).15 F 1.51 (Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F (mailed to)108 448.8 Q F2 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F2 (gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F3 (gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 465.6 Q (ug reports concerning this manual page should be directed to)-.2 E F2 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.).25 E F1 -.11(BU)72 482.4 S(GS).11 E F0(It')108 494.4 Q 2.5(st)-.55 G (oo big and too slo)-2.5 E -.65(w.)-.25 G(GNU Readline 7.0)72 768 Q (2016 February 28)123.74 E(16)188.45 E 0 Cg EP %%Trailer end %%EOF readline-7.0/doc/history_3.ps000664 000436 000024 00000132333 12544775016 016302 0ustar00chetstaff000000 000000 %!PS-Adobe-3.0 %%Creator: groff version 1.22.3 %%CreationDate: Wed Jul 1 10:32:47 2015 %%DocumentNeededResources: font Times-Roman %%+ font Times-Bold %%+ font Times-Italic %%DocumentSuppliedResources: procset grops 1.22 3 %%Pages: 7 %%PageOrder: Ascend %%DocumentMedia: Default 612 792 0 () () %%Orientation: Portrait %%EndComments %%BeginDefaults %%PageMedia: Default %%EndDefaults %%BeginProlog %%BeginResource: procset grops 1.22 3 %!PS-Adobe-3.0 Resource-ProcSet /setpacking where{ pop currentpacking true setpacking }if /grops 120 dict dup begin /SC 32 def /A/show load def /B{0 SC 3 -1 roll widthshow}bind def /C{0 exch ashow}bind def /D{0 exch 0 SC 5 2 roll awidthshow}bind def /E{0 rmoveto show}bind def /F{0 rmoveto 0 SC 3 -1 roll widthshow}bind def /G{0 rmoveto 0 exch ashow}bind def /H{0 rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /I{0 exch rmoveto show}bind def /J{0 exch rmoveto 0 SC 3 -1 roll widthshow}bind def /K{0 exch rmoveto 0 exch ashow}bind def /L{0 exch rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /M{rmoveto show}bind def /N{rmoveto 0 SC 3 -1 roll widthshow}bind def /O{rmoveto 0 exch ashow}bind def /P{rmoveto 0 exch 0 SC 5 2 roll awidthshow}bind def /Q{moveto show}bind def /R{moveto 0 SC 3 -1 roll widthshow}bind def /S{moveto 0 exch ashow}bind def /T{moveto 0 exch 0 SC 5 2 roll awidthshow}bind def /SF{ findfont exch [exch dup 0 exch 0 exch neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /MF{ findfont [5 2 roll 0 3 1 roll neg 0 0]makefont dup setfont [exch/setfont cvx]cvx bind def }bind def /level0 0 def /RES 0 def /PL 0 def /LS 0 def /MANUAL{ statusdict begin/manualfeed true store end }bind def /PLG{ gsave newpath clippath pathbbox grestore exch pop add exch pop }bind def /BP{ /level0 save def 1 setlinecap 1 setlinejoin DEFS/BPhook known{DEFS begin BPhook end}if 72 RES div dup scale LS{ 90 rotate }{ 0 PL translate }ifelse 1 -1 scale }bind def /EP{ level0 restore showpage }def /DA{ newpath arcn stroke }bind def /SN{ transform .25 sub exch .25 sub exch round .25 add exch round .25 add exch itransform }bind def /DL{ SN moveto SN lineto stroke }bind def /DC{ newpath 0 360 arc closepath }bind def /TM matrix def /DE{ TM currentmatrix pop translate scale newpath 0 0 .5 0 360 arc closepath TM setmatrix }bind def /RC/rcurveto load def /RL/rlineto load def /ST/stroke load def /MT/moveto load def /CL/closepath load def /Fr{ setrgbcolor fill }bind def /setcmykcolor where{ pop /Fk{ setcmykcolor fill }bind def }if /Fg{ setgray fill }bind def /FL/fill load def /LW/setlinewidth load def /Cr/setrgbcolor load def /setcmykcolor where{ pop /Ck/setcmykcolor load def }if /Cg/setgray load def /RE{ findfont dup maxlength 1 index/FontName known not{1 add}if dict begin { 1 index/FID ne 2 index/UniqueID ne and {def}{pop pop}ifelse }forall /Encoding exch def dup/FontName exch def currentdict end definefont pop }bind def /DEFS 0 def /EBEGIN{ moveto DEFS begin }bind def /EEND/end load def /CNT 0 def /level1 0 def /PBEGIN{ /level1 save def translate div 3 1 roll div exch scale neg exch neg exch translate 0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin 10 setmiterlimit []0 setdash /setstrokeadjust where{ pop false setstrokeadjust }if /setoverprint where{ pop false setoverprint }if newpath /CNT countdictstack def userdict begin /showpage{}def /setpagedevice{}def mark }bind def /PEND{ cleartomark countdictstack CNT sub{end}repeat level1 restore }bind def end def /setpacking where{ pop setpacking }if %%EndResource %%EndProlog %%BeginSetup %%BeginFeature: *PageSize Default << /PageSize [ 612 792 ] /ImagingBBox null >> setpagedevice %%EndFeature %%IncludeResource: font Times-Roman %%IncludeResource: font Times-Bold %%IncludeResource: font Times-Italic grops begin/DEFS 1 dict def DEFS begin/u{.001 mul}bind def end/RES 72 def/PL 792 def/LS false def/ENC0[/asciicircum/asciitilde/Scaron/Zcaron /scaron/zcaron/Ydieresis/trademark/quotesingle/Euro/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef /.notdef/.notdef/space/exclam/quotedbl/numbersign/dollar/percent /ampersand/quoteright/parenleft/parenright/asterisk/plus/comma/hyphen /period/slash/zero/one/two/three/four/five/six/seven/eight/nine/colon /semicolon/less/equal/greater/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O /P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft/backslash/bracketright/circumflex /underscore/quoteleft/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y /z/braceleft/bar/braceright/tilde/.notdef/quotesinglbase/guillemotleft /guillemotright/bullet/florin/fraction/perthousand/dagger/daggerdbl /endash/emdash/ff/fi/fl/ffi/ffl/dotlessi/dotlessj/grave/hungarumlaut /dotaccent/breve/caron/ring/ogonek/quotedblleft/quotedblright/oe/lslash /quotedblbase/OE/Lslash/.notdef/exclamdown/cent/sterling/currency/yen /brokenbar/section/dieresis/copyright/ordfeminine/guilsinglleft /logicalnot/minus/registered/macron/degree/plusminus/twosuperior /threesuperior/acute/mu/paragraph/periodcentered/cedilla/onesuperior /ordmasculine/guilsinglright/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]def /Times-Italic@0 ENC0/Times-Italic RE/Times-Bold@0 ENC0/Times-Bold RE /Times-Roman@0 ENC0/Times-Roman RE %%EndSetup %%Page: 1 1 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E/F1 10.95/Times-Bold@0 SF -.219(NA)72 84 S(ME).219 E F0 (history \255 GNU History Library)108 96 Q F1(COPYRIGHT)72 112.8 Q F0 (The GNU History Library is Cop)108 124.8 Q (yright \251 1989-2014 by the Free Softw)-.1 E(are F)-.1 E (oundation, Inc.)-.15 E F1(DESCRIPTION)72 141.6 Q F0(Man)108 153.6 Q 2.81(yp)-.15 G .31(rograms read input from the user a line at a time.) -2.81 F .309(The GNU History library is able to k)5.309 F .309 (eep track of)-.1 F .024(those lines, associate arbitrary data with eac\ h line, and utilize information from pre)108 165.6 R .024 (vious lines in composing)-.25 F(ne)108 177.6 Q 2.5(wo)-.25 G(nes.)-2.5 E F1(HIST)72 194.4 Q(OR)-.197 E 2.738(YE)-.383 G(XP)-2.738 E(ANSION)-.81 E F0 .823(The history library supports a history e)108 206.4 R .822 (xpansion feature that is identical to the history e)-.15 F .822 (xpansion in)-.15 F/F2 10/Times-Bold@0 SF(bash.)3.322 E F0 (This section describes what syntax features are a)108 218.4 Q -.25(va) -.2 G(ilable.).25 E 1.305(History e)108 235.2 R 1.305 (xpansions introduce w)-.15 F 1.306(ords from the history list into the\ input stream, making it easy to repeat)-.1 F .21 (commands, insert the ar)108 247.2 R .21(guments to a pre)-.18 F .209 (vious command into the current input line, or \214x errors in pre)-.25 F(vious)-.25 E(commands quickly)108 259.2 Q(.)-.65 E 1.296(History e)108 276 R 1.297(xpansion is usually performed immediately after a complete \ line is read.)-.15 F 1.297(It tak)6.297 F 1.297(es place in tw)-.1 F(o) -.1 E 2.855(parts. The)108 288 R .354(\214rst is to determine which lin\ e from the history list to use during substitution.)2.855 F .354 (The second is to)5.354 F .116 (select portions of that line for inclusion into the current one.)108 300 R .117(The line selected from the history is the)5.116 F/F3 10 /Times-Italic@0 SF -.15(ev)2.617 G(ent).15 E F0(,)A .846 (and the portions of that line that are acted upon are)108 312 R F3(wor) 3.346 E(ds)-.37 E F0 5.846(.V)C(arious)-6.956 E F3(modi\214er)3.346 E(s) -.1 E F0 .846(are a)3.346 F -.25(va)-.2 G .845(ilable to manipulate).25 F .304(the selected w)108 324 R 2.804(ords. The)-.1 F .304(line is brok) 2.804 F .304(en into w)-.1 F .304(ords in the same f)-.1 F .304 (ashion as)-.1 F F2(bash)2.804 E F0 .305(does when reading input, so) 2.804 F .539(that se)108 336 R -.15(ve)-.25 G .539(ral w).15 F .539 (ords that w)-.1 F .539 (ould otherwise be separated are considered one w)-.1 F .538 (ord when surrounded by quotes)-.1 F .307(\(see the description of)108 348 R F2(history_tok)2.807 E(enize\(\))-.1 E F0(belo)2.807 E 2.807 (w\). History)-.25 F -.15(ex)2.807 G .307 (pansions are introduced by the appearance of).15 F .52(the history e) 108 360 R .52(xpansion character)-.15 F 3.02(,w)-.4 G .52(hich is)-3.02 F F2(!)3.853 E F0 .52(by def)3.853 F 3.02(ault. Only)-.1 F .52 (backslash \()3.02 F F2(\\).833 E F0 3.02(\)a).833 G .52 (nd single quotes can quote the)-3.02 F(history e)108 372 Q (xpansion character)-.15 E(.)-.55 E F2(Ev)87 388.8 Q(ent Designators)-.1 E F0 .204(An e)108 400.8 R -.15(ve)-.25 G .204(nt designator is a refer\ ence to a command line entry in the history list.).15 F .205 (Unless the reference is abso-)5.204 F(lute, e)108 412.8 Q -.15(ve)-.25 G(nts are relati).15 E .3 -.15(ve t)-.25 H 2.5(ot).15 G (he current position in the history list.)-2.5 E F2(!)108 429.6 Q F0 (Start a history substitution, e)144 429.6 Q(xcept when follo)-.15 E (wed by a)-.25 E F2(blank)2.5 E F0 2.5(,n)C -.25(ew)-2.5 G (line, = or \(.).25 E F2(!)108 441.6 Q F3(n)A F0(Refer to command line) 144 441.6 Q F3(n)2.5 E F0(.).24 E F2<21ad>108 453.6 Q F3(n)A F0 (Refer to the current command minus)144 453.6 Q F3(n)2.5 E F0(.).24 E F2 (!!)108 465.6 Q F0(Refer to the pre)144 465.6 Q(vious command.)-.25 E (This is a synon)5 E(ym for `!\2551'.)-.15 E F2(!)108 477.6 Q F3(string) A F0 .865(Refer to the most recent command preceding the current positi\ on in the history list starting with)144 477.6 R F3(string)144 489.6 Q F0(.).22 E F2(!?)108 501.6 Q F3(string)A F2([?])A F0 1.503(Refer to the\ most recent command preceding the current position in the history list\ containing)144 513.6 R F3(string)144 525.6 Q F0 5(.T).22 G(he trailing) -5 E F2(?)2.5 E F0(may be omitted if)2.5 E F3(string)2.84 E F0(is follo) 2.72 E(wed immediately by a ne)-.25 E(wline.)-.25 E/F4 12/Times-Bold@0 SF(^)108 542.6 Q F3(string1)-5 I F4(^)5 I F3(string2)-5 I F4(^)5 I F0 2.63(Quick substitution.)144 549.6 R 2.629 (Repeat the last command, replacing)7.629 F F3(string1)5.469 E F0(with) 5.129 E F3(string2)5.129 E F0 7.629(.E).02 G(qui)-7.629 E -.25(va)-.25 G 2.629(lent to).25 F -.74(``)144 561.6 S(!!:s/).74 E F3(string1)A F0(/)A F3(string2)A F0(/')A 2.5('\()-.74 G(see)-2.5 E F2(Modi\214ers)2.5 E F0 (belo)2.5 E(w\).)-.25 E F2(!#)108 573.6 Q F0 (The entire command line typed so f)144 573.6 Q(ar)-.1 E(.)-.55 E F2 -.75(Wo)87 590.4 S(rd Designators).75 E F0 -.8(Wo)108 602.4 S 1.313 (rd designators are used to select desired w).8 F 1.314(ords from the e) -.1 F -.15(ve)-.25 G 3.814(nt. A).15 F F2(:)3.814 E F0 1.314 (separates the e)3.814 F -.15(ve)-.25 G 1.314(nt speci\214cation).15 F .53(from the w)108 614.4 R .529(ord designator)-.1 F 5.529(.I)-.55 G 3.029(tm)-5.529 G .529(ay be omitted if the w)-3.029 F .529 (ord designator be)-.1 F .529(gins with a)-.15 F F2(^)3.029 E F0(,)A F2 ($)3.029 E F0(,)A F2(*)3.029 E F0(,)A F23.029 E F0 3.029(,o)C(r) -3.029 E F2(%)3.029 E F0 5.529(.W)C(ords)-6.329 E 1.3 (are numbered from the be)108 626.4 R 1.3 (ginning of the line, with the \214rst w)-.15 F 1.301 (ord being denoted by 0 \(zero\).)-.1 F -.8(Wo)6.301 G 1.301(rds are).8 F(inserted into the current line separated by single spaces.)108 638.4 Q F2 2.5(0\()108 655.2 S(zer)-2.5 E(o\))-.18 E F0(The zeroth w)144 667.2 Q 2.5(ord. F)-.1 F(or the shell, this is the command w)-.15 E(ord.)-.1 E F3(n)108.36 679.2 Q F0(The)144 679.2 Q F3(n)2.5 E F0(th w)A(ord.)-.1 E F2(^)108 691.2 Q F0(The \214rst ar)144 691.2 Q 2.5(gument. That)-.18 F (is, w)2.5 E(ord 1.)-.1 E F2($)108 703.2 Q F0 .064(The last w)144 703.2 R 2.564(ord. This)-.1 F .064(is usually the last ar)2.564 F .064 (gument, b)-.18 F .064(ut will e)-.2 F .064(xpand to the zeroth w)-.15 F .063(ord if there is only)-.1 F(one w)144 715.2 Q(ord in the line.)-.1 E (GNU History 6.3)72 768 Q(2015 May 24)138.175 E(1)202.335 E 0 Cg EP %%Page: 2 2 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(%)108 84 Q F0(The w)144 84 Q (ord matched by the most recent `?)-.1 E/F2 10/Times-Italic@0 SF(string) A F0(?' search.)A F2(x)108.77 96 Q F1A F2(y)A F0 2.5(Ar)144 96 S (ange of w)-2.5 E(ords; `\255)-.1 E F2(y)A F0 2.5('a)C(bbre)-2.5 E (viates `0\255)-.25 E F2(y)A F0('.)A F1(*)108 108 Q F0 .315 (All of the w)144 108 R .315(ords b)-.1 F .315(ut the zeroth.)-.2 F .315 (This is a synon)5.315 F .315(ym for `)-.15 F F2(1\255$)A F0 2.815 ('. It)B .315(is not an error to use)2.815 F F1(*)2.816 E F0 .316 (if there is)2.816 F(just one w)144 120 Q(ord in the e)-.1 E -.15(ve) -.25 G(nt; the empty string is returned in that case.).15 E F1(x*)108 132 Q F0(Abbre)144 132 Q(viates)-.25 E F2(x\255$)2.5 E F0(.)A F1<78ad> 108 144 Q F0(Abbre)144 144 Q(viates)-.25 E F2(x\255$)2.5 E F0(lik)2.5 E (e)-.1 E F1(x*)2.5 E F0 2.5(,b)C(ut omits the last w)-2.7 E(ord.)-.1 E (If a w)108 160.8 Q(ord designator is supplied without an e)-.1 E -.15 (ve)-.25 G(nt speci\214cation, the pre).15 E (vious command is used as the e)-.25 E -.15(ve)-.25 G(nt.).15 E F1 (Modi\214ers)87 177.6 Q F0 .184(After the optional w)108 189.6 R .184 (ord designator)-.1 F 2.684(,t)-.4 G .183 (here may appear a sequence of one or more of the follo)-2.684 F .183 (wing modi\214ers,)-.25 F(each preceded by a `:'.)108 201.6 Q F1(h)108 218.4 Q F0(Remo)144 218.4 Q .3 -.15(ve a t)-.15 H (railing \214le name component, lea).15 E(ving only the head.)-.2 E F1 (t)108 230.4 Q F0(Remo)144 230.4 Q .3 -.15(ve a)-.15 H (ll leading \214le name components, lea).15 E(ving the tail.)-.2 E F1(r) 108 242.4 Q F0(Remo)144 242.4 Q .3 -.15(ve a t)-.15 H(railing suf).15 E (\214x of the form)-.25 E F2(.xxx)2.5 E F0 2.5(,l)C(ea)-2.5 E (ving the basename.)-.2 E F1(e)108 254.4 Q F0(Remo)144 254.4 Q .3 -.15 (ve a)-.15 H(ll b).15 E(ut the trailing suf)-.2 E(\214x.)-.25 E F1(p)108 266.4 Q F0(Print the ne)144 266.4 Q 2.5(wc)-.25 G(ommand b)-2.5 E (ut do not e)-.2 E -.15(xe)-.15 G(cute it.).15 E F1(q)108 278.4 Q F0 (Quote the substituted w)144 278.4 Q (ords, escaping further substitutions.)-.1 E F1(x)108 290.4 Q F0 (Quote the substituted w)144 290.4 Q(ords as with)-.1 E F1(q)2.5 E F0 2.5(,b)C(ut break into w)-2.7 E(ords at)-.1 E F1(blanks)2.5 E F0(and ne) 2.5 E(wlines.)-.25 E F1(s/)108 302.4 Q F2(old)A F1(/)A F2(ne)A(w)-.15 E F1(/)A F0(Substitute)144 314.4 Q F2(ne)3.081 E(w)-.15 E F0 .221 (for the \214rst occurrence of)3.031 F F2(old)2.951 E F0 .221(in the e) 3.491 F -.15(ve)-.25 G .221(nt line.).15 F(An)5.221 E 2.721(yd)-.15 G .221(elimiter can be used in place)-2.721 F .617(of /.)144 326.4 R .617 (The \214nal delimiter is optional if it is the last character of the e) 5.617 F -.15(ve)-.25 G .617(nt line.).15 F .616(The delimiter may)5.616 F .666(be quoted in)144 338.4 R F2(old)3.396 E F0(and)3.936 E F2(ne) 3.526 E(w)-.15 E F0 .666(with a single backslash.)3.476 F .666 (If & appears in)5.666 F F2(ne)3.166 E(w)-.15 E F0 3.166(,i).31 G 3.166 (ti)-3.166 G 3.166(sr)-3.166 G .666(eplaced by)-3.166 F F2(old)3.166 E F0 5.666(.A).77 G .275(single backslash will quote the &.)144 350.4 R (If)5.275 E F2(old)3.004 E F0 .274(is null, it is set to the last)3.544 F F2(old)3.004 E F0 .274(substituted, or)3.544 F 2.774(,i)-.4 G 2.774 (fn)-2.774 G 2.774(op)-2.774 G(re)-2.774 E(vi-)-.25 E (ous history substitutions took place, the last)144 362.4 Q F2(string) 2.84 E F0(in a)2.72 E F1(!?)2.5 E F2(string)A F1([?])A F0(search.)5 E F1 (&)108 374.4 Q F0(Repeat the pre)144 374.4 Q(vious substitution.)-.25 E F1(g)108 386.4 Q F0 .397(Cause changes to be applied o)144 386.4 R -.15 (ve)-.15 G 2.897(rt).15 G .398(he entire e)-2.897 F -.15(ve)-.25 G .398 (nt line.).15 F .398(This is used in conjunction with `)5.398 F F1(:s)A F0 2.898('\()C(e.g.,)-2.898 E(`)144 398.4 Q F1(:gs/)A F2(old)A F1(/)A F2 (ne)A(w)-.15 E F1(/)A F0 1.219('\) or `)B F1(:&)A F0 3.719('. If)B 1.219 (used with `)3.719 F F1(:s)A F0 1.218(', an)B 3.718(yd)-.15 G 1.218 (elimiter can be used in place of /, and the \214nal)-3.718 F .089 (delimiter is optional if it is the last character of the e)144 410.4 R -.15(ve)-.25 G .09(nt line.).15 F(An)5.09 E F1(a)2.59 E F0 .09 (may be used as a synon)2.59 F .09(ym for)-.15 F F1(g)144 422.4 Q F0(.)A F1(G)108 434.4 Q F0(Apply the follo)144 434.4 Q(wing `)-.25 E F1(s)A F0 2.5('m)C(odi\214er once to each w)-2.5 E(ord in the e)-.1 E -.15(ve)-.25 G(nt line.).15 E/F3 10.95/Times-Bold@0 SF(PR)72 451.2 Q (OGRAMMING WITH HIST)-.329 E(OR)-.197 E 2.738(YF)-.383 G(UNCTIONS)-2.738 E F0(This section describes ho)108 463.2 Q 2.5(wt)-.25 G 2.5(ou)-2.5 G (se the History library in other programs.)-2.5 E F1(Intr)87 480 Q (oduction to History)-.18 E F0 .797 (The programmer using the History library has a)108 492 R -.25(va)-.2 G .796(ilable functions for remembering lines on a history list,).25 F .307(associating arbitrary data with a line, remo)108 504 R .308 (ving lines from the list, searching through the list for a line con-) -.15 F .303(taining an arbitrary te)108 516 R .303 (xt string, and referencing an)-.15 F 2.803(yl)-.15 G .303 (ine in the list directly)-2.803 F 5.303(.I)-.65 G 2.803(na)-5.303 G .303(ddition, a history)-2.803 F F2 -.2(ex)2.802 G(pansion).2 E F0 (function is a)108 528 Q -.25(va)-.2 G(ilable which pro).25 E (vides for a consistent user interf)-.15 E(ace across dif)-.1 E (ferent programs.)-.25 E .059(The user using programs written with the \ History library has the bene\214t of a consistent user interf)108 544.8 R .059(ace with a)-.1 F .918(set of well-kno)108 556.8 R .917 (wn commands for manipulating the te)-.25 F .917(xt of pre)-.15 F .917 (vious lines and using that te)-.25 F .917(xt in ne)-.15 F 3.417(wc)-.25 G(om-)-3.417 E 4.183(mands. The)108 568.8 R 1.684(basic history manipul\ ation commands are identical to the history substitution pro)4.183 F 1.684(vided by)-.15 F F1(bash)108 580.8 Q F0(.)A .904 (If the programmer desires, he can use the Readline library)108 597.6 R 3.403(,w)-.65 G .903(hich includes some history manipulation by)-3.403 F (def)108 609.6 Q(ault, and has the added adv)-.1 E (antage of command line editing.)-.25 E .39(Before declaring an)108 626.4 R 2.89(yf)-.15 G .39(unctions using an)-2.89 F 2.89(yf)-.15 G .39 (unctionality the History library pro)-2.89 F .39 (vides in other code, an appli-)-.15 F .067 (cation writer should include the \214le)108 638.4 R F2()-.55 E F0 .067(in an)4.233 F 2.566<798c>-.15 G .066(le that uses the History library')-2.566 F 2.566(sf)-.55 G (eatures.)-2.566 E .538(It supplies e)108 650.4 R .538 (xtern declarations for all of the library')-.15 F 3.038(sp)-.55 G .538 (ublic functions and v)-3.038 F .539(ariables, and declares all of the) -.25 F(public data structures.)108 662.4 Q F1(History Storage)87 691.2 Q F0(The history list is an array of history entries.)108 703.2 Q 2.5(Ah)5 G(istory entry is declared as follo)-2.5 E(ws:)-.25 E F2(typedef void *) 108 720 Q F1(histdata_t;)2.5 E F0(GNU History 6.3)72 768 Q(2015 May 24) 138.175 E(2)202.335 E 0 Cg EP %%Page: 3 3 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E (typedef struct _hist_entry {)108 84 Q(char *line;)113 96 Q (char *timestamp;)113 108 Q(histdata_t data;)113 120 Q 2.5(}H)108 132 S (IST_ENTR)-2.5 E -.92(Y;)-.65 G (The history list itself might therefore be declared as)108 148.8 Q/F1 10/Times-Italic@0 SF(HIST_ENTR)108 165.6 Q 2.5(Y*)-.18 G(*)-2.5 E/F2 10 /Times-Bold@0 SF(the_history_list;)2.5 E F0(The state of the History li\ brary is encapsulated into a single structure:)108 182.4 Q(/*)108 199.2 Q 2.5(*As)110.5 211.2 S (tructure used to pass around the current state of the history)-2.5 E(.) -.65 E(*/)110.5 223.2 Q(typedef struct _hist_state {)108 235.2 Q (HIST_ENTR)113 247.2 Q 2.5(Y*)-.65 G (*entries; /* Pointer to the entries themselv)-2.5 E(es. */)-.15 E (int of)113 259.2 Q 25(fset; /*)-.25 F (The location pointer within this array)2.5 E 2.5(.*)-.65 G(/)-2.5 E (int length;)113 271.2 Q(/* Number of elements within this array)27.5 E 2.5(.*)-.65 G(/)-2.5 E(int size;)113 283.2 Q (/* Number of slots allocated to this array)32.5 E 2.5(.*)-.65 G(/)-2.5 E(int \215ags;)113 295.2 Q 2.5(}H)108 307.2 S(IST)-2.5 E(OR)-.18 E(Y_ST) -.65 E -1.11(AT)-.93 G(E;)1.11 E(If the \215ags member includes)108 324 Q F2(HS_STIFLED)2.5 E F0 2.5(,t)C(he history has been sti\215ed.)-2.5 E /F3 10.95/Times-Bold@0 SF(History Functions)72 340.8 Q F0 (This section describes the calling sequence for the v)108 352.8 Q (arious functions e)-.25 E(xported by the GNU History library)-.15 E(.) -.65 E F2(Initializing History and State Management)87 369.6 Q F0 1.274 (This section describes functions used to initialize and manage the sta\ te of the History library when you)108 381.6 R -.1(wa)108 393.6 S (nt to use the history functions in your program.).1 E F1(void)108 417.6 Q F2(using_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Be)108 429.6 Q(gin a session in which the history functions might be used.)-.15 E(This initializes the interacti)5 E .3 -.15(ve v)-.25 H(ariables.)-.1 E F1(HIST)108 453.6 Q(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5(E*).37 G F2 (history_get_history_state)A F0(\()4.166 E F1(void)A F0(\))1.666 E (Return a structure describing the current state of the input history) 108 465.6 Q(.)-.65 E F1(void)108 489.6 Q F2(history_set_history_state) 2.5 E F0(\()4.166 E F1(HIST)A(OR)-.18 E(Y_ST)-.18 E -.37(AT)-.5 G 2.5 (E*).37 G(state)-2.5 E F0(\))1.666 E (Set the state of the history list according to)108 501.6 Q F1(state)2.5 E F0(.)A F2(History List Management)87 530.4 Q F0 (These functions manage indi)108 542.4 Q(vidual entries on the history \ list, or set parameters managing the list itself.)-.25 E F1(void)108 566.4 Q F2(add_history)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 E F0(\))1.666 E(Place)108 578.4 Q F1(string)2.5 E F0 (at the end of the history list.)2.5 E (The associated data \214eld \(if an)5 E(y\) is set to)-.15 E F2(NULL) 2.5 E F0(.)A F1(void)108 602.4 Q F2(add_history_time)2.5 E F0(\()4.166 E F1(const c)A(har *string)-.15 E F0(\))1.666 E (Change the time stamp associated with the most recent history entry to) 108 614.4 Q F1(string)2.5 E F0(.)A F1(HIST_ENTR)108 638.4 Q 2.5(Y*)-.18 G F2 -.18(re)C(mo).18 E -.1(ve)-.1 G(_history).1 E F0(\()4.166 E F1 (int whic)A(h)-.15 E F0(\))1.666 E(Remo)108 650.4 Q .352 -.15(ve h)-.15 H .052(istory entry at of).15 F(fset)-.25 E F1(whic)2.553 E(h)-.15 E F0 .053(from the history)2.553 F 5.053(.T)-.65 G .053(he remo)-5.053 F -.15 (ve)-.15 G 2.553(de).15 G .053(lement is returned so you can free the) -2.553 F(line, data, and containing structure.)108 662.4 Q F1 (histdata_t)108 686.4 Q F2(fr)2.5 E(ee_history_entry)-.18 E F0(\()4.166 E F1(HIST_ENTR)A 2.5(Y*)-.18 G(histent)-2.5 E F0(\))1.666 E .934 (Free the history entry)108 698.4 R F1(histent)3.433 E F0 .933(and an) 3.433 F 3.433(yh)-.15 G .933(istory library pri)-3.433 F -.25(va)-.25 G .933(te data associated with it.).25 F .933(Returns the applica-)5.933 F (tion-speci\214c data so the caller can dispose of it.)108 710.4 Q (GNU History 6.3)72 768 Q(2015 May 24)138.175 E(3)202.335 E 0 Cg EP %%Page: 4 4 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF(HIST_ENTR)108 84 Q 2.5(Y*)-.18 G/F2 10/Times-Bold@0 SF -.18(re)C(place_history_entry).18 E F0(\()4.166 E F1(int whic)A -.834 (h, const)-.15 F -.15(ch)2.5 G(ar *line).15 E 1.666(,h)-.1 G (istdata_t data)-1.666 E F0(\))3.332 E(Mak)108 96 Q 3.062(et)-.1 G .562 (he history entry at of)-3.062 F(fset)-.25 E F1(whic)3.062 E(h)-.15 E F0 (ha)3.062 E -.15(ve)-.2 G F1(line)3.212 E F0(and)3.062 E F1(data)3.062 E F0 5.563(.T)C .563(his returns the old entry so the caller can dis-) -5.563 F(pose of an)108 108 Q 2.5(ya)-.15 G(pplication-speci\214c data.) -2.5 E(In the case of an in)5 E -.25(va)-.4 G(lid).25 E F1(whic)2.5 E(h) -.15 E F0 2.5(,a)C F2(NULL)A F0(pointer is returned.)2.5 E F1(void)108 132 Q F2(clear_history)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E (Clear the history list by deleting all the entries.)108 144 Q F1(void) 108 168 Q F2(sti\215e_history)2.5 E F0(\()4.166 E F1(int max)A F0(\)) 1.666 E(Sti\215e the history list, remembering only the last)108 180 Q F1(max)2.5 E F0(entries.)2.5 E F1(int)108 204 Q F2(unsti\215e_history) 2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .46 (Stop sti\215ing the history)108 216 R 5.46(.T)-.65 G .46 (his returns the pre)-5.46 F .46 (viously-set maximum number of history entries \(as set by)-.25 F F2 (sti-)2.96 E(\215e_history\(\))108 228 Q F0 2.5(\). history)B -.1(wa)2.5 G 2.5(ss).1 G 2.5(ti\215ed. The)-2.5 F -.25(va)2.5 G(lue is positi).25 E .3 -.15(ve i)-.25 H 2.5(ft).15 G(he history w)-2.5 E(as sti\215ed, ne) -.1 E -.05(ga)-.15 G(ti).05 E .3 -.15(ve i)-.25 H 2.5(fi).15 G 2.5(tw) -2.5 G(asn')-2.6 E(t.)-.18 E F1(int)108 252 Q F2(history_is_sti\215ed) 2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E (Returns non-zero if the history is sti\215ed, zero if it is not.)108 264 Q F2(Inf)87 292.8 Q(ormation About the History List)-.25 E F0(These\ functions return information about the entire history list or indi)108 304.8 Q(vidual list entries.)-.25 E F1(HIST_ENTR)108 328.8 Q 2.5(Y*)-.18 G(*)-2.5 E F2(history_list)2.5 E F0(\()4.166 E F1(void)A F0(\))1.666 E .707(Return a)108 340.8 R F2(NULL)3.207 E F0 .707(terminated array of) 3.207 F F1(HIST_ENTR)3.207 E 3.208(Y*)-.18 G F0 .708 (which is the current input history)B 5.708(.E)-.65 G .708 (lement 0 of this)-5.708 F(list is the be)108 352.8 Q(ginning of time.) -.15 E(If there is no history)5 E 2.5(,r)-.65 G(eturn)-2.5 E F2(NULL)2.5 E F0(.)A F1(int)108 376.8 Q F2(wher)2.5 E(e_history)-.18 E F0(\()4.166 E F1(void)A F0(\))1.666 E(Returns the of)108 388.8 Q (fset of the current history element.)-.25 E F1(HIST_ENTR)108 412.8 Q 2.5(Y*)-.18 G F2(curr)A(ent_history)-.18 E F0(\()4.166 E F1(void)A F0 (\))1.666 E 1.373 (Return the history entry at the current position, as determined by)108 424.8 R F2(wher)3.873 E(e_history\(\))-.18 E F0 6.373(.I)C 3.873(ft) -6.373 G 1.373(here is no entry)-3.873 F(there, return a)108 436.8 Q F2 (NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(HIST_ENTR)108 460.8 Q 2.5(Y*) -.18 G F2(history_get)A F0(\()4.166 E F1(int of)A(fset)-.18 E F0(\)) 1.666 E .287(Return the history entry at position)108 472.8 R F1(of) 2.787 E(fset)-.18 E F0 2.787(,s)C .287(tarting from)-2.787 F F2 (history_base)2.787 E F0 5.287(.I)C 2.787(ft)-5.287 G .287 (here is no entry there, or if)-2.787 F F1(of)2.788 E(fset)-.18 E F0 (is greater than the history length, return a)108 484.8 Q F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1(time_t)108 508.8 Q F2(history_get_time)2.5 E F0(\()4.166 E F1(HIST_ENTR)A 2.5(Y*)-.18 G F0(\))-.834 E(Return the t\ ime stamp associated with the history entry passed as the ar)108 520.8 Q (gument.)-.18 E F1(int)108 544.8 Q F2(history_total_bytes)2.5 E F0(\() 4.166 E F1(void)A F0(\))1.666 E .392 (Return the number of bytes that the primary history entries are using.) 108 556.8 R .391(This function returns the sum of the)5.392 F (lengths of all the lines in the history)108 568.8 Q(.)-.65 E F2(Mo)87 597.6 Q(ving Ar)-.1 E(ound the History List)-.18 E F0 (These functions allo)108 609.6 Q 2.5(wt)-.25 G(he current inde)-2.5 E 2.5(xi)-.15 G(nto the history list to be set or changed.)-2.5 E F1(int) 108 633.6 Q F2(history_set_pos)2.5 E F0(\()4.166 E F1(int pos)A F0(\)) 1.666 E .79(Set the current history of)108 645.6 R .79(fset to)-.25 F F1 (pos)3.29 E F0 3.29(,a)C 3.29(na)-3.29 G .79(bsolute inde)-3.29 F 3.29 (xi)-.15 G .79(nto the list.)-3.29 F .79(Returns 1 on success, 0 if)5.79 F F1(pos)3.29 E F0 .79(is less)3.29 F (than zero or greater than the number of history entries.)108 657.6 Q F1 (HIST_ENTR)108 681.6 Q 2.5(Y*)-.18 G F2(pr)A -.15(ev)-.18 G (ious_history).15 E F0(\()4.166 E F1(void)A F0(\))1.666 E .208 (Back up the current history of)108 693.6 R .208(fset to the pre)-.25 F .208(vious history entry)-.25 F 2.707(,a)-.65 G .207 (nd return a pointer to that entry)-2.707 F 5.207(.I)-.65 G 2.707(ft) -5.207 G .207(here is)-2.707 F(no pre)108 705.6 Q(vious entry)-.25 E 2.5 (,r)-.65 G(eturn a)-2.5 E F2(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1 (HIST_ENTR)108 729.6 Q 2.5(Y*)-.18 G F2(next_history)A F0(\()4.166 E F1 (void)A F0(\))1.666 E(GNU History 6.3)72 768 Q(2015 May 24)138.175 E(4) 202.335 E 0 Cg EP %%Page: 5 5 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E .332(If the current history of)108 84 R .333(fset refers to a v)-.25 F .333(alid history entry)-.25 F 2.833(,i)-.65 G .333 (ncrement the current history of)-2.833 F 2.833(fset. If)-.25 F .333 (the possi-)2.833 F .202(bly-incremented history of)108 96 R .202 (fset refers to a v)-.25 F .202(alid history entry)-.25 F 2.702(,r)-.65 G .202(eturn a pointer to that entry; otherwise, return)-2.702 F(a)108 108 Q/F1 10/Times-Bold@0 SF(NULL)2.5 E F0(pointer)2.5 E(.)-.55 E F1 (Sear)87 136.8 Q(ching the History List)-.18 E F0 .005 (These functions allo)108 148.8 R 2.505(ws)-.25 G .006(earching of the \ history list for entries containing a speci\214c string.)-2.505 F .006 (Searching may be)5.006 F 1.452(performed both forw)108 160.8 R 1.452 (ard and backw)-.1 F 1.451(ard from the current history position.)-.1 F 1.451(The search may be)6.451 F/F2 10/Times-Italic@0 SF(anc)3.951 E(hor) -.15 E(ed)-.37 E F0(,)A(meaning that the string must match at the be)108 172.8 Q(ginning of the history entry)-.15 E(.)-.65 E F2(int)108 196.8 Q F1(history_sear)2.5 E(ch)-.18 E F0(\()4.166 E F2(const c)A(har *string) -.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\))1.666 E .155 (Search the history for)108 208.8 R F2(string)2.655 E F0 2.656(,s)C .156 (tarting at the current history of)-2.656 F 2.656(fset. If)-.25 F F2 (dir)2.656 E(ection)-.37 E F0 .156(is less than 0, then the search)2.656 F .802(is through pre)108 220.8 R .802 (vious entries, otherwise through subsequent entries.)-.25 F(If)5.801 E F2(string)3.301 E F0 .801(is found, then the current his-)3.301 F .064 (tory inde)108 232.8 R 2.564(xi)-.15 G 2.564(ss)-2.564 G .064 (et to that history entry)-2.564 F 2.564(,a)-.65 G .064(nd the v)-2.564 F .064(alue returned is the of)-.25 F .064 (fset in the line of the entry where)-.25 F F2(string)2.565 E F0 -.1(wa) 108 244.8 S 2.5(sf).1 G 2.5(ound. Otherwise,)-2.5 F (nothing is changed, and a -1 is returned.)2.5 E F2(int)108 268.8 Q F1 (history_sear)2.5 E(ch_pr)-.18 E(e\214x)-.18 E F0(\()4.166 E F2(const c) A(har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E(ection)-.37 E F0(\)) 1.666 E .684(Search the history for)108 280.8 R F2(string)3.183 E F0 3.183(,s)C .683(tarting at the current history of)-3.183 F 3.183 (fset. The)-.25 F .683(search is anchored: matching lines)3.183 F 1.063 (must be)108 292.8 R 1.063(gin with)-.15 F F2(string)3.563 E F0 6.063 (.I)C(f)-6.063 E F2(dir)3.563 E(ection)-.37 E F0 1.064 (is less than 0, then the search is through pre)3.563 F 1.064 (vious entries, otherwise)-.25 F 1.115(through subsequent entries.)108 304.8 R(If)6.115 E F2(string)3.615 E F0 1.115 (is found, then the current history inde)3.615 F 3.614(xi)-.15 G 3.614 (ss)-3.614 G 1.114(et to that entry)-3.614 F 3.614(,a)-.65 G 1.114 (nd the)-3.614 F(return v)108 316.8 Q(alue is 0.)-.25 E (Otherwise, nothing is changed, and a -1 is returned.)5 E F2(int)108 340.8 Q F1(history_sear)2.5 E(ch_pos)-.18 E F0(\()4.166 E F2(const c)A (har *string)-.15 E 1.666(,i)-.1 G(nt dir)-1.666 E -.834(ection, int) -.37 F(pos)2.5 E F0(\))3.332 E .603(Search for)108 352.8 R F2(string) 3.103 E F0 .603(in the history list, starting at)3.103 F F2(pos)3.104 E F0 3.104(,a)C 3.104(na)-3.104 G .604(bsolute inde)-3.104 F 3.104(xi)-.15 G .604(nto the list.)-3.104 F(If)5.604 E F2(dir)3.104 E(ection)-.37 E F0 .604(is ne)3.104 F -.05(ga)-.15 G(ti).05 E -.15(ve)-.25 G(,).15 E .608 (the search proceeds backw)108 364.8 R .608(ard from)-.1 F F2(pos)3.108 E F0 3.108(,o)C .608(therwise forw)-3.108 F 3.108(ard. Returns)-.1 F .608(the absolute inde)3.108 F 3.108(xo)-.15 G 3.108(ft)-3.108 G .608 (he history ele-)-3.108 F(ment where)108 376.8 Q F2(string)2.5 E F0 -.1 (wa)2.5 G 2.5(sf).1 G(ound, or -1 otherwise.)-2.5 E F1 (Managing the History File)87 405.6 Q F0 .035(The History library can r\ ead the history from and write it to a \214le.)108 417.6 R .036 (This section documents the functions for)5.035 F (managing a history \214le.)108 429.6 Q F2(int)108 453.6 Q F1 -.18(re) 2.5 G(ad_history).18 E F0(\()4.166 E F2(const c)A(har *\214lename)-.15 E F0(\))1.666 E .151(Add the contents of)108 465.6 R F2(\214lename)2.651 E F0 .151(to the history list, a line at a time.)2.651 F(If)5.15 E F2 (\214lename)2.65 E F0(is)2.65 E F1(NULL)2.65 E F0 2.65(,t)C .15 (hen read from)-2.65 F F2(~/.his-)2.65 E(tory)108 477.6 Q F0 5(.R)C (eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E F2(int)108 501.6 Q F1 -.18(re)2.5 G(ad_history_range).18 E F0(\()4.166 E F2(const c)A(har *\214lename)-.15 E 1.666(,i)-.1 G(nt fr)-1.666 E -.834 (om, int)-.45 F(to)2.5 E F0(\))3.332 E .052(Read a range of lines from) 108 513.6 R F2(\214lename)2.553 E F0 2.553(,a)C .053 (dding them to the history list.)-2.553 F .053(Start reading at line) 5.053 F F2(fr)2.553 E(om)-.45 E F0 .053(and end at)2.553 F F2(to)2.553 E F0(.)A(If)108 525.6 Q F2(fr)2.889 E(om)-.45 E F0 .389 (is zero, start at the be)2.889 F 2.889(ginning. If)-.15 F F2(to)2.889 E F0 .389(is less than)2.889 F F2(fr)2.889 E(om)-.45 E F0 2.889(,t)C .388 (hen read until the end of the \214le.)-2.889 F(If)5.388 E F2 (\214lename)2.888 E F0(is)108 537.6 Q F1(NULL)2.5 E F0 2.5(,t)C (hen read from)-2.5 E F2(~/.history)2.5 E F0 5(.R)C (eturns 0 if successful, or)-5 E F1(err)2.5 E(no)-.15 E F0(if not.)2.5 E F2(int)108 561.6 Q F1(write_history)2.5 E F0(\()4.166 E F2(const c)A (har *\214lename)-.15 E F0(\))1.666 E .961(Write the current history to) 108 573.6 R F2(\214lename)3.461 E F0 3.461(,o)C -.15(ve)-3.611 G (rwriting).15 E F2(\214lename)3.461 E F0 .961(if necessary)3.461 F 5.961 (.I)-.65 G(f)-5.961 E F2(\214lename)3.462 E F0(is)3.462 E F1(NULL)3.462 E F0 3.462(,t)C .962(hen write)-3.462 F(the history list to)108 585.6 Q F2(~/.history)2.5 E F0 5(.R)C(eturns 0 on success, or)-5 E F1(err)2.5 E (no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 621.6 Q F1(append_history)2.5 E F0(\()4.166 E F2(int nelements,)A(const c)1.666 E(har *\214lename)-.15 E F0(\))1.666 E .839(Append the last)108 633.6 R F2(nelements)3.339 E F0 .839(of the history list to)3.339 F F2 (\214lename)3.339 E F0 5.839(.I)C(f)-5.839 E F2(\214lename)3.339 E F0 (is)3.339 E F1(NULL)3.339 E F0 3.339(,t)C .838(hen append to)-3.339 F F2 (~/.history)3.338 E F0(.)A(Returns 0 on success, or)108 645.6 Q F1(err) 2.5 E(no)-.15 E F0(on a read or write error)2.5 E(.)-.55 E F2(int)108 669.6 Q F1(history_truncate_\214le)2.5 E F0(\()4.166 E F2(const c)A (har *\214lename)-.15 E 1.666(,i)-.1 G(nt nlines)-1.666 E F0(\))1.666 E -.35(Tr)108 681.6 S .38(uncate the history \214le).35 F F2(\214lename) 2.88 E F0 2.88(,l)C(ea)-2.88 E .38(ving only the last)-.2 F F2(nlines) 2.881 E F0 2.881(lines. If)2.881 F F2(\214lename)2.881 E F0(is)2.881 E F1(NULL)2.881 E F0 2.881(,t)C(hen)-2.881 E F2(~/.history)2.881 E F0(is) 2.881 E 2.5(truncated. Returns)108 693.6 R 2.5(0o)2.5 G 2.5(ns)-2.5 G (uccess, or)-2.5 E F1(err)2.5 E(no)-.15 E F0(on f)2.5 E(ailure.)-.1 E (GNU History 6.3)72 768 Q(2015 May 24)138.175 E(5)202.335 E 0 Cg EP %%Page: 6 6 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Bold@0 SF(History Expansion)87 84 Q F0 (These functions implement history e)108 96 Q(xpansion.)-.15 E/F2 10 /Times-Italic@0 SF(int)108 120 Q F1(history_expand)2.5 E F0(\()4.166 E F2 -.15(ch)C(ar *string).15 E 1.666(,c)-.1 G(har **output)-1.816 E F0 (\))1.666 E(Expand)108 132 Q F2(string)2.5 E F0 2.5(,p)C (lacing the result into)-2.5 E F2(output)2.5 E F0 2.5(,ap)C (ointer to a string.)-2.5 E(Returns:)5 E(0)144 144 Q .566(If no e)180 144 R .566(xpansions took place \(or)-.15 F 3.065(,i)-.4 G 3.065(ft) -3.065 G .565(he only change in the te)-3.065 F .565(xt w)-.15 F .565 (as the remo)-.1 F -.25(va)-.15 G 3.065(lo).25 G 3.065(fe)-3.065 G (scape)-3.065 E(characters preceding the history e)180 156 Q (xpansion character\);)-.15 E(1)144 168 Q(if e)180 168 Q (xpansions did tak)-.15 E 2.5(ep)-.1 G(lace;)-2.5 E(-1)144 180 Q (if there w)180 180 Q(as an error in e)-.1 E(xpansion;)-.15 E(2)144 192 Q(if the returned line should be displayed, b)180 192 Q(ut not e)-.2 E -.15(xe)-.15 G(cuted, as with the).15 E F1(:p)2.5 E F0(modi\214er)2.5 E (.)-.55 E(If an error ocurred in e)108 204 Q(xpansion, then)-.15 E F2 (output)2.5 E F0(contains a descripti)2.5 E .3 -.15(ve e)-.25 H (rror message.).15 E F2 -.15(ch)108 228 S(ar *).15 E F1(get_history_e) 2.5 E -.1(ve)-.15 G(nt).1 E F0(\()4.166 E F2(const c)A(har *string)-.15 E 1.666(,i)-.1 G(nt *cinde)-1.666 E -.834(x, int)-.2 F(qc)2.5 E(har)-.15 E F0(\))3.332 E .262(Returns the te)108 240 R .262(xt of the history e) -.15 F -.15(ve)-.25 G .262(nt be).15 F .263(ginning at)-.15 F F2(string) 2.763 E F0(+)2.763 E F2(*cinde)2.763 E(x)-.2 E F0(.)A F2(*cinde)5.263 E (x)-.2 E F0 .263(is modi\214ed to point to after the)2.763 F -2.15 -.25 (ev e)108 252 T .71(nt speci\214er).25 F 5.71(.A)-.55 G 3.21(tf)-5.71 G .71(unction entry)-3.21 F(,)-.65 E F2(cinde)3.21 E(x)-.2 E F0 .709 (points to the inde)3.21 F 3.209(xi)-.15 G(nto)-3.209 E F2(string)3.209 E F0 .709(where the history e)3.209 F -.15(ve)-.25 G .709 (nt speci\214ca-).15 F .527(tion be)108 264 R(gins.)-.15 E F2(qc)5.527 E (har)-.15 E F0 .527(is a character that is allo)3.027 F .527 (wed to end the e)-.25 F -.15(ve)-.25 G .528 (nt speci\214cation in addition to the `).15 F(`normal')-.74 E(')-.74 E (terminating characters.)108 276 Q F2 -.15(ch)108 300 S(ar **).15 E F1 (history_tok)2.5 E(enize)-.1 E F0(\()4.166 E F2(const c)A(har *string) -.15 E F0(\))1.666 E .239(Return an array of tok)108 312 R .239 (ens parsed out of)-.1 F F2(string)2.739 E F0 2.739(,m)C .238 (uch as the shell might.)-2.739 F .238(The tok)5.238 F .238 (ens are split on the charac-)-.1 F(ters in the)108 324 Q F1(history_w) 2.5 E(ord_delimiters)-.1 E F0 -.25(va)2.5 G (riable, and shell quoting con).25 E -.15(ve)-.4 G(ntions are obe).15 E (yed.)-.15 E F2 -.15(ch)108 348 S(ar *).15 E F1(history_ar)2.5 E (g_extract)-.1 E F0(\()4.166 E F2(int \214r)A -.834(st, int)-.1 F -.834 (last, const)2.5 F -.15(ch)2.5 G(ar *string).15 E F0(\))3.332 E .025 (Extract a string se)108 360 R .025(gment consisting of the)-.15 F F2 <8c72>2.526 E(st)-.1 E F0(through)2.526 E F2(last)2.526 E F0(ar)2.526 E .026(guments present in)-.18 F F2(string)2.526 E F0 5.026(.A)C -.18(rg) -5.026 G .026(uments are split).18 F(using)108 372 Q F1(history_tok)2.5 E(enize\(\))-.1 E F0(.)A F1(History V)87 400.8 Q(ariables)-.92 E F0 (This section describes the e)108 412.8 Q(xternally-visible v)-.15 E (ariables e)-.25 E(xported by the GNU History Library)-.15 E(.)-.65 E F2 (int)108 436.8 Q F1(history_base)2.5 E F0(The logical of)108 448.8 Q (fset of the \214rst entry in the history list.)-.25 E F2(int)108 472.8 Q F1(history_length)2.5 E F0 (The number of entries currently stored in the history list.)108 484.8 Q F2(int)108 508.8 Q F1(history_max_entries)2.5 E F0 (The maximum number of history entries.)108 520.8 Q (This must be changed using)5 E F1(sti\215e_history\(\))2.5 E F0(.)A F2 (int)108 544.8 Q F1(history_wite_timestamps)2.5 E F0 1.468 (If non-zero, timestamps are written to the history \214le, so the)108 556.8 R 3.968(yc)-.15 G 1.468(an be preserv)-3.968 F 1.468 (ed between sessions.)-.15 F(The)6.468 E(def)108 568.8 Q .438(ault v)-.1 F .439(alue is 0, meaning that timestamps are not sa)-.25 F -.15(ve)-.2 G 2.939(d. The).15 F .439(current timestamp format uses the v)2.939 F .439(alue of)-.25 F F2(history_comment_c)108 580.8 Q(har)-.15 E F0 .051 (to delimit timestamp entries in the history \214le.)2.552 F .051 (If that v)5.051 F .051(ariable does not ha)-.25 F .351 -.15(ve a v)-.2 H(alue)-.1 E(\(the def)108 592.8 Q (ault\), timestamps will not be written.)-.1 E F2 -.15(ch)108 616.8 S (ar).15 E F1(history_expansion_char)2.5 E F0 (The character that introduces a history e)108 628.8 Q -.15(ve)-.25 G 2.5(nt. The).15 F(def)2.5 E(ault is)-.1 E F1(!)2.5 E F0 5(.S)C (etting this to 0 inhibits history e)-5 E(xpansion.)-.15 E F2 -.15(ch) 108 652.8 S(ar).15 E F1(history_subst_char)2.5 E F0 (The character that in)108 664.8 Q -.2(vo)-.4 G -.1(ke).2 G 2.5(sw).1 G (ord substitution if found at the start of a line.)-2.6 E(The def)5 E (ault is)-.1 E F1(^)2.5 E F0(.)A F2 -.15(ch)108 688.8 S(ar).15 E F1 (history_comment_char)2.5 E F0 .116(During tok)108 700.8 R .117 (enization, if this character is seen as the \214rst character of a w) -.1 F .117(ord, then it and all subsequent char)-.1 F(-)-.2 E .277 (acters up to a ne)108 712.8 R .276 (wline are ignored, suppressing history e)-.25 F .276 (xpansion for the remainder of the line.)-.15 F .276(This is dis-)5.276 F(abled by def)108 724.8 Q(ault.)-.1 E(GNU History 6.3)72 768 Q (2015 May 24)138.175 E(6)202.335 E 0 Cg EP %%Page: 7 7 %%BeginPageSetup BP %%EndPageSetup /F0 10/Times-Roman@0 SF(HIST)72 48 Q(OR)-.18 E 124.845(Y\(3\) Library) -.65 F(Functions Manual)2.5 E(HIST)127.345 E(OR)-.18 E(Y\(3\))-.65 E/F1 10/Times-Italic@0 SF -.15(ch)108 84 S(ar *).15 E/F2 10/Times-Bold@0 SF (history_w)2.5 E(ord_delimiters)-.1 E F0 (The characters that separate tok)108 96 Q(ens for)-.1 E F2(history_tok) 2.5 E(enize\(\))-.1 E F0 5(.T)C(he def)-5 E(ault v)-.1 E(alue is)-.25 E F2 2.5("\\)2.5 G(t\\n\(\)<>;&|")-2.5 E F0(.)A F1 -.15(ch)108 120 S(ar *) .15 E F2(history_no_expand_chars)2.5 E F0 2.054 (The list of characters which inhibit history e)108 132 R 2.054 (xpansion if found immediately follo)-.15 F(wing)-.25 E F2 (history_expan-)4.555 E(sion_char)108 144 Q F0 5(.T)C(he def)-5 E (ault is space, tab, ne)-.1 E(wline,)-.25 E F2(\\r)2.5 E F0 2.5(,a)C(nd) -2.5 E F2(=)2.5 E F0(.)A F1 -.15(ch)108 168 S(ar *).15 E F2 (history_sear)2.5 E(ch_delimiter_chars)-.18 E F0 .401(The list of addit\ ional characters which can delimit a history search string, in addition\ to space, tab,)108 180 R F1(:)2.901 E F0(and)2.901 E F1(?)2.901 E F0 (in the case of a substring search.)108 192 Q(The def)5 E(ault is empty) -.1 E(.)-.65 E F1(int)108 216 Q F2(history_quotes_inhibit_expansion)2.5 E F0 .86(If non-zero, double-quoted w)108 228 R .861 (ords are not scanned for the history e)-.1 F .861 (xpansion character or the history com-)-.15 F(ment character)108 240 Q 5(.T)-.55 G(he def)-5 E(ault v)-.1 E(alue is 0.)-.25 E F1(rl_lineb)108 264 Q(uf_func_t *)-.2 E F2(history_inhibit_expansion_function)2.5 E F0 .348(This should be set to the address of a function that tak)108 276 R .348(es tw)-.1 F 2.848(oa)-.1 G -.18(rg)-2.848 G .347(uments: a).18 F F2 .347(char *)2.847 F F0(\()2.847 E F1(string)A F0 2.847(\)a)C .347(nd an) -2.847 F F2(int)2.847 E F0(inde)2.847 E(x)-.15 E .227 (into that string \()108 288 R F1(i)A F0 2.727(\). It)B .227 (should return a non-zero v)2.727 F .227(alue if the history e)-.25 F .227(xpansion starting at)-.15 F F1(string[i])2.728 E F0 .228 (should not)2.728 F .019(be performed; zero if the e)108 300 R .019 (xpansion should be done.)-.15 F .019 (It is intended for use by applications lik)5.019 F(e)-.1 E F2(bash) 2.519 E F0 .018(that use)2.519 F(the history e)108 312 Q (xpansion character for additional purposes.)-.15 E(By def)5 E (ault, this v)-.1 E(ariable is set to)-.25 E F2(NULL)2.5 E F0(.)A/F3 10.95/Times-Bold@0 SF(FILES)72 328.8 Q F1(~/.history)109.666 340.8 Q F0 (Def)144 352.8 Q(ault \214lename for reading and writing sa)-.1 E -.15 (ve)-.2 G 2.5(dh).15 G(istory)-2.5 E F3(SEE ALSO)72 369.6 Q F1 (The Gnu Readline Libr)108 381.6 Q(ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E (ox and Chet Rame)-.15 E(y)-.15 E F1(The Gnu History Libr)108 393.6 Q (ary)-.15 E F0 2.5(,B)C(rian F)-2.5 E(ox and Chet Rame)-.15 E(y)-.15 E F1(bash)108 405.6 Q F0(\(1\))A F1 -.37(re)108 417.6 S(adline).37 E F0 (\(3\))A F3 -.548(AU)72 434.4 S(THORS).548 E F0(Brian F)108 446.4 Q (ox, Free Softw)-.15 E(are F)-.1 E(oundation)-.15 E(bfox@gnu.or)108 458.4 Q(g)-.18 E(Chet Rame)108 475.2 Q 1.3 -.65(y, C)-.15 H(ase W).65 E (estern Reserv)-.8 E 2.5(eU)-.15 G(ni)-2.5 E -.15(ve)-.25 G(rsity).15 E (chet.rame)108 487.2 Q(y@case.edu)-.15 E F3 -.11(BU)72 504 S 2.738(GR) .11 G(EPOR)-2.738 E(TS)-.438 E F0 .16(If you \214nd a b)108 516 R .16 (ug in the)-.2 F F2(history)2.66 E F0(library)2.66 E 2.66(,y)-.65 G .16 (ou should report it.)-2.66 F .16(But \214rst, you should mak)5.16 F 2.66(es)-.1 G .16(ure that it really is)-2.66 F 2.5(ab)108 528 S (ug, and that it appears in the latest v)-2.7 E(ersion of the)-.15 E F2 (history)2.5 E F0(library that you ha)2.5 E -.15(ve)-.2 G(.).15 E .705 (Once you ha)108 544.8 R 1.005 -.15(ve d)-.2 H .705(etermined that a b) .15 F .704(ug actually e)-.2 F .704(xists, mail a b)-.15 F .704 (ug report to)-.2 F F1 -.2(bu)3.204 G(g\255r).2 E(eadline)-.37 E F0(@)A F1(gnu.or)A(g)-.37 E F0 5.704(.I)C 3.204(fy)-5.704 G(ou)-3.204 E(ha)108 556.8 Q 1.809 -.15(ve a \214)-.2 H 1.509 (x, you are welcome to mail that as well!).15 F 1.51 (Suggestions and `philosophical' b)6.51 F 1.51(ug reports may be)-.2 F (mailed to)108 568.8 Q F1 -.2(bu)2.5 G(g-r).2 E(eadline)-.37 E F0(@)A F1 (gnu.or)A(g)-.37 E F0(or posted to the Usenet ne)2.5 E(wsgroup)-.25 E F2 (gnu.bash.b)2.5 E(ug)-.2 E F0(.)A(Comments and b)108 585.6 Q (ug reports concerning this manual page should be directed to)-.2 E F1 -.15(ch)2.5 G(et.r).15 E(ame)-.15 E(y@case)-.3 E(.edu)-.15 E F0(.).25 E (GNU History 6.3)72 768 Q(2015 May 24)138.175 E(7)202.335 E 0 Cg EP %%Trailer end %%EOF readline-7.0/doc/history.pdf000664 000436 000024 00000611612 12764101660 016201 0ustar00chetstaff000000 000000 %PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 381 /Filter /FlateDecode >> stream xڍQKK0W6f2i]vAzm-f;iB23`>`N0ȝ1c߱'0)tْAjnȷ,L [ X-JϳM19jo|Euy=V`lYDѢ` (  \(޶Cw.1jzTA& ܈Jן֐"~7W++ >?LR4HP;Gyi}=V{T1eTSMj!]~޵1%CrܡKV&(m1z"<뛑5n[m |: endstream endobj 14 0 obj << /Length 753 /Filter /FlateDecode >> stream x}TKo0﯈89Rڱ'Zhi !xw-*-U<3o&"A.e\"73*vJ&p$J$N]gWi|DcYd ~ a$SFIi.W½io:5]?G3$5 <0əc;R1?Ûb"#z 7H6Qs~ `#!c °1*Hlu5 ܱ](i9Ʒv@i$z5ֿWvH3>; &d4Ƈ,.fz&UqxMJQ~S#s srbwEJD8U$wV,'$Ȑ];txUOl5 T$b4kQt1MJ(Ӊ'aj8kLY؄FM&Uל#]xЄ4f)^YTmkyO6nCP3޿DoLA#dяw‹X|=UGMpm5jQK+oEk5T-|U B#٨>! Q~FiV3)DgU \q=dukx*{AXYti)7G{(2==` x^T5::9;:P,;r9b<'VEԼm_n 9i@EZPs/?-9z6na> endstream endobj 18 0 obj << /Length 153 /Filter /FlateDecode >> stream xڍ= 1 pik**8J7qc!H7 Ƀs}EAYKo`EN,f¨9uyR۴4 j-:z[RnnTɾ-9ʡ|4%/7 endstream endobj 23 0 obj << /Length 2428 /Filter /FlateDecode >> stream xY[ۺ~ϯpЇ#kF$%J*P=m EўK\[^ %Glw3-}* 3onZ Onph-(ϯBoh돯$p7՛x#C74"a!ۏzw;0zH͕D(Gx%eHHvQ;OE#M~Z]}W|q^>KU@WdT]d`UipA 7v#2ު$xIWa4N9]iJE"=BSL_E" pi7`Pf+L' a]nvJfp'_j!clu8MkR;䠃T*`ƾ7~F7A"a?lS ձnζ+WиtŬ¨̺d\W4FGB7Z쁷.M}s YyJDxMWp)'XLFU`N_[G0+kxhTN0R?MW4\2uBzU L $~p-n pVh[ R>6 Ƴd⌙ a  % K{]M(cni;َ :Ei&;/*4CR_iqE$upUqK agl9v[@Y$K@GZs,lj'Cs`cGN/lK ꢺLvMn749Oä~EG嫈ynd_9 `i 79'I9[K?&R=o2koQC=jY0zx5تoh93WVinr, (4>K0KHB5s"v"pXx * Lc0qȑ$NA<`:!n3~i9l8]yW:ָm&>І ``/orjϋ31:MnY{Il Ͽ(vpkE3hXAƂ8 b_b0N?mq_ٮ^w%T|Vs)Gg!a` nɏ ϻ&( ήN";vu*Wo*7wm]/@Hp%Ĉ 7"i(|J.n8E9W1J xk_<)x=:J=,44:GN0%Zj UgGzTr~k6P|jThUq`&3By]WXBs=ɯ9~zrv_ɀR*aBMFFuUٗ٭i& !-6:븪YO^ VF="5eSuhً%R|Gt zhh}QΖT -7NsQWȂdSC $:Mi@D $^|X:ᕡ *C#P?`<^3GVϡQ߱RWY-8-HzaHh4mM$J3.}0.-:.eM[]iW N"eTX :Q:kM"?P*YpˀdVNZ"̊M2}ׯ߾Y{LBb`x73.{}^ew`͢z+DJ\8a߸9FP endstream endobj 35 0 obj << /Length 2003 /Filter /FlateDecode >> stream xYݏ6_)*1+~kPl?rIpipLڒ+26}H3?8Y |VijLJV|VmŦ/xƭ7Ͼ}$3".f嫺Y.w )eį }RכoȣA<<*+Oح7 %i$짛ѰD =@.dKօ4WKE.pƙ/TD慌n fIۦ{4 g,Լv(h5eck#@덮ü |F\@U-} kM#\(_ͩoSQL6_JX&2'3qWv{k:3Y`UHNjȃ`Uʡn6V)2JIl$4-QI?5m= ίWɈۺ1nvss=!:`~0,y_< fʉʾ+CO* +2|u^)cv{0(oqޚ!=2o0WGBƕ‹5 1ReㆌĨ%ز+8ddAI?ݵˍ]W¹#aݍjҖƬ3"]،w4~[ +7Hߕ xX k'wv0pE̒Xσ<%4r,lǮӕ^ЬlH*"ޭoao'w\H_ݿD(S5'Ui fw0d@?tH>!>QLHW S貫Гu8E!X?.dD'}Bee܉k2+[Kj_=niqK1+?~;`Vpb* 'r8G͹@lآ()lR*+}W@cCΒ)Tnʖ&dMߴD[_OHYXE6@O+ u讃+rŔR#|M=4aLp#]~Ϊ7B۞( ;/ 6$h dD.~-e5hZVLֆ}zY>*{&|Y°qgc_Os ՞\xVv,&9TO_WO,؁;-ί=O=k鸖;T "v#U,鴦}9 =%G)qX]j+wXzѬ: pW۽]]@|wi*c8А,JӇ+,=PdO6¯W͝vj`3&K+_RuSVK|ceX$,M|>m"mͦ%Մ:;xHUd.x >" OW֛_rX7f:$=Ioly`4kэt0 Y|])9'Zͥ.t_l=_z7GX>>gYƄG/1T~BO_eI"?Qf-CÈ cy&{㪍l aa<-uPi`u䚨'= endstream endobj 41 0 obj << /Length 954 /Filter /FlateDecode >> stream xڽVMs6WB3 f4=&)LiФJRw ЦMb?޾]@&~2)DbҔ&ۛ !2AqH,K(d?6%cynNӔ_Vk3ẃD~h{|jVʲZ%V[\ U ZJ4gm2^j>O!Bn5Ktw!W:`Ҫ4k'FTw63=krڗu? p~1q߉Q\9[,c:Bm*Z)6-Ȳu!Y _EoXF*_=Gsܚ<*&FLWDajT|ΤeW[$UqKp x."|ߔ2]*ڜj+c@ɩ.OH-̸~(l%'J1oibہTZKhS69KJL%2)1;,TTknr;Ή+,i?",0>YCß&[D.% eF-$ 5vؓ)sCۓǮّ*:yzziXԀ8!jB su  Nђy cڌXq4eMQ= J ݇@MB/hm(}SxN8Hvr&R>י9(T@*rn _SWݺܓ>t>51M\} SfO9T= P Møi-+"^Ew~66K!Qif%Fs%2p1~X 04a^x0L. `,Y. .sTUOqW@IhnlEݍ/ X7fp2llC(hn]Ož0']ǣ endstream endobj 46 0 obj << /Length 2180 /Filter /FlateDecode >> stream xڝXmo6b8:MQ-nwEM?zEؚXX "e{o8K2MQÇԈ]?;4 cM`W F \;(vw],?I]Ë͏wX/%_l&;Rn F%Y0'u^>vj/6lF?; ޙ~hOh ^e=dhI4)|wRfC}Bvsg3X&4;LI2'c? Zxaw B_Ă$n:Ydy`hfe;V4ۦ7}),72mԚC$Z"yaək'+>8GԬG?IrR{aH<5BfD)}Ai $<1g@c\H&("ל8*hd8Ե5MLx(zTWjx1 "B_ [# &$ꡂLҜ5N.zN$X3'Q󁦐SVh(^G@̐5hU݃ /Ԡ4iڣ:}MA`.ea8iǞ4['@]X陷ygZ"BQ{A< W.Ц`"B! R ́ "PT=*>=e*k?9KZޥӵn>ٽ7f LB$*@d^AEjB5@ֶ|&~x@ F'e$d@/0\v8XP,)aa(iȁ(s`P2X}d#+vɗd.5[eZ Qa:+B7:0Bߔx+ чxVP)^t{L`H[Ph B/4G ,Ne\ն)@3:-u9='ya1iNfvٕ, ̰oC ac/ӞN"e'.)Zp%>V~lq"ZwNiQ^4LMDup>7Z{y;pŞǕ7r9lI!7ԸHjqd0`;1EYzan>)n75dcԖVkeLJ~0*DI!Q0m y ,M.2V.ÍJdS_sA7-LEur8~,[Δ6AInRz)&>MT,LW#f}Uf ooi1QL%xU_-,ejmRP"<hoXFfn?2kHLq9`E,j["aGmJ ek"8x'ភDm૎Q2Z9(".;,aLq'--yWM'"MHf巛pLfSf0\jd 6&aeizj;mYH {~D?9M@dk aC1 X"y#.L̛ny|,f]" ޿]$bvˍG:6nLݏygkU.{s/.{eMdhץ)vk.h;zqN^6 ojVD|g42|:k6k5p0 QDh| !~ f.D>lar6q|Iow?r7[O2{}^Wbn>ߋxFύm3tܳmhq4u!wJw/c%kLh` V.SN羾эYyEn}S`[F8ZϳvG {[A?8e/8lO+AW3yuMP\ZEyy~*74fښƖ'i?Yf:}Sa{ endstream endobj 53 0 obj << /Length 2241 /Filter /FlateDecode >> stream xY[۶~_G;K$-Ҵu4XhejK$'翟rj/8|3g$ERDųpj;s8[eo%AgMzn.=6Z,sbZ*=b>|̛kwly^7euXDbW?\h!4μuךˀ faʩyԦ:Q/θƾ&/ ;\a2ӽ5Y oNYroYW_.^_[hE1z5CV_lt B폀kFf=p"֦۟&# YWū/3ڹG,ti] ,+;A٣a*;b[& Pz>RrdAI`ț<6NZЁ*9--BUBœ❯=_EW8ֳ,?hPla o5nU?V4yGi1W Ď7,q!E tpZ T;6y]uFaDLN| M]Z,"$}(sJ~5s  L9@_1m;Z%Ll'ѣaf4ͩ@I:e07P:ig6v\rC'D-300!,KC(Ttt\!fb9_if& 9r;m%g1楨H0Bƕ/cxϖci](g:mR'06:[k;`?:Pvԝhrl_O,uv&`P%]7a:Ke"6@؎y=#;NKK҇xe2k9T}w:KKXX9:zR{k7˷VC{K0Q\%nDr8ʾ$"Dy 5ޔ,䏗 `?JaC ƥ ,y& i)AW*8FM23Vxj h+.:T+H*mȆ%h?"^3ē"A"U74|v\Ocs> stream xڽZoo۶~OwI{ ֡60tEĴ#̖JYЭA2b= |jUwވlfeR%wfYz jij$‰iR &Ʊ|/.N_LAG _Axj[T+xl kHe-xI]R奅F ttc `]yc:V#0y:Ov25&]48񚪖]'CW.^|CgS$o03%W(֚Pbv*,b1Oju]o~y:35Q*mс @c< :41ݢvM)Y jɒi,}xP) J.ri|20$Ps}ZU5p]5L^ 1ӥz t`I֚ Gȱُ8c3=}?tq^9!|"0c*`-pI2# nD$3F%'uOj=c b5 xx\)4'? ͈Ls|&q1 #Nv*H ίtFP~f فgIJ'?6{3.,)]Uoq3H*glG&F,[Þ. 2<)\S##j`Y_FU=JcXg]0`D1#*Y* $U9΢q nU4u/BsX¢O6QՑC#EbVjRK"y,v,ޘC:k^g $̓WLh(D><=G9)(jR,Oҽ8HH@ t‡֍)B}->4SE*1T@a]uǯ"<)b4g@d)"!,'@b?^4s{;t;xe(fgv"VJ= ȹҜx R?r=9/6c0ݹwE֬7S@k9Sb@ Õpa9pBVu70b _z,v` bRP ̵δBY/)?"*x@ :yO,:7/]Sn ":F1vWE΢[ў'CsL*M^ZgJa'&6ܢG>n=ZHʇBBOgkHs;^ .6Z~F?eBaS/_A_|!ay?uUZy Jg_b ~1}cXCm)%eӺ v"m'Q22BMg#+Y /}; q$Zѡ{z 44 Oƴ4T#S9B~8%#fYUJ]EuXIAj#_Q L'%hEUz~Y=E :wN;t iu:èɽ&"3)^: ˱f}HR.E#G_=TQOpE d3[L endstream endobj 69 0 obj << /Length 2734 /Filter /FlateDecode >> stream xZݏ_qT`mdqq H'JKR>;$<$_(Aŝٙ|U^Y)YYG+jְp/)Ӝ_]⭮W$+uYfVJ'mۦ8&Z߿*lZ\o~BqY{e2ŸT//VLզ+jœߐ\qr~2o~^] +܇]8Ť1ynF4cb %EW"KroxmvCΙqMܭX6L96XG9הօ\R,JC{,>ŜҎ& c&eiaEON q:\-5]gsKi6[Uyl?q"2nK(h^oAS9,]e2Mt,FM5d>Hg ?Њܗ{NoGZLWo_^ItO,l-Y xU6e҂* ɔ`,+6Jr X`%tBYfzs-~r7^[(n `)b% =wuCC5OѢ@mJ0 }u&ZAz3c1ɡ>r_ݍkjx ]G,0_TtzjS řQD0\gKz~7R*?ǃA4fS٠EE{ԍ.<8I7MgM lǶb|.䶬F^P  ϧr[7&15xh>ݩUGn,|nё)I~lSWm@ j]HAeTz?3L*m&y=Ec^3:A'h ^*&RX^4z3[Bs4lz%r2;3)ά@~F,Tz`1¡G@Tb">M x5}YTay[My!!FFۡSƹ=T[@Iw>؋!1EEYo݇aQDn+>Q2RiXyΠ w0B k=C&`8>8]ͦeh㚱ȧK]Dps/ =F͋H`Ay5gSYeUcC_aCQݺmXF"^vfa[]s3l'lNc3f(JS،g̟͐FЌ>Y'yV6K)vv=>Zu ]! RU! G""4h' dvTKe塔r=;c&` =G~[w3L \X20 w=L=TD;4;̜6;V4"}ܥ*v҄np6x#2b9F03-م02lp6r0lY'|R㣋I$] ?naRA+NuEE18Hm)ւ2/0Ii 853qm=/2Li3+eK\pøqH4OjAmx&ChUxcȴs Ɛ3][ Bo,zjM%oUN=YD2٨aO-33j*Qy.q,0/ IGE%w><@35-׵==_ZXT;?{b,S>T3A$VW,9Ȯϛ| abرr&F;Ա@.:Lh4rR[V̭K}4㨜@,gCP/mT`Y6} :,O? Jx& C~i;D3C+۵/[ZNM|/>'FO/<3/'lYe"5ܘeqy޾9˲̂WLOg0H?7MM9 X endstream endobj 77 0 obj << /Length 2710 /Filter /FlateDecode >> stream xڽZKWr7xx('%%[J).^RmaY%P+s%m))vL? "H)x?i] n W~,g O~fqc[-WJ@X6OU>+45;8nr% ^Wם.F ƕgF0L(M|Up,MVKG p!KJMNdEy&H[lnwfȇ"V~dfR~*YN9r]uK;.tntog5b! g+E,b%<+PY1A26dw`as1'ʰ]^O'9тK{SDksl7sJb\3 } CA%?FR°[!HK!N#=8,AiAdt~ '>EcOd$nZ?X5.'QSo}\mmY:AFL.*mU9IP˫VJJ+n:!tԣS]U'AcC(ynXF#$0=HLwV^!n~gF15q `}e pfވ`g"X`\+&M8YAxvחCZcDU0 (-zu;M'`St7*[uh)Z8tiݮ>tZ:ܗРjfqoܶh)Ǫc;qž=Q{ K3\I6SC}}odP(zv 涣ql1ϤLx_B&\yhc?O܉ PLjx];28IY`tN_p`?74J4Ta@ 4ڿQku,m$`zy[};pa 34\]Pniq::gR q>: /iMzOm$a-,i* sz>ŁJOxTKnj[&w"8$ l>tO}<HcS2ةЮ`& ]/ԝ ۻ]$t-1MSAdb^LD,Ф#0h=>Ѽ(7Ef 3piRgE'1b1~`M`?U,a\O҇E$*cj+KTA>-K|WJOI2~LrC@0I!6d? D^CPP"OKKDl'0 ?_V:I|CuSժiѝ/-yVB2Rf[OI: hq߷]"s*tIyx { B g=[81wEfkw TBz@)+5nS\6vk ׃#c`zs[lxgqYX5њYWamC+^;>C endstream endobj 83 0 obj << /Length 2302 /Filter /FlateDecode >> stream xڵYsܸ b{Z퍗%)R\qMKn˩Vq3 Vę8ssY@~hX|1U/7+ 6p_^ r~*\x(Niכ8#bQJGo8m}C ?~jiDF.|5ꢥ|U0-*"_kQ2op,Y r%~3װXۚomeƲF D8WC{\,HQ'z"gC/eMSl;Db80pP7$СƓ5PZswWfp'D{5]hRA"sb0,\ffۣxm!V9^h\\l4UY٨,= ِ U'0r0~yW4@jMgڟt`66>ۛG[dž`ulS(^ obz"ITTPEB2_M/Wb㙺`)2ih(P`7a#7G>Cl=~iHpςS"|*fH|ގ皥N A*aTuUdèZxD-˅uR@DZpݩ1Ǭ "E(vڳ${\k.4>ivL8y2$f8@bF)5z/s Ke8~=;F)ܻ.ܮHBl}׶v>LvTBm$8*٦:D ,Ѵ%z8cP!g 23C[IU[~$Y3*l W,5<*k{w_-id>ɼߑY,bFLg3;0[KȇEd(KJ$7 H=X"{dPW 1"SA2׮8j7.Cubg.)Ʈ֙#xM]~@h?U횇3Sq ;xGd|;e2/uCh{#M!m}8eMU*B+RWq5N$Uwaa_Lf_|y -Y镔0I9 xpdx:[K:3l-9?Kr~9كòo}q-_\HiGoƔm}9 x9TeLcOe~z;4u3+>*WĦ޼7+hh@]G:c O| TqOsLk(﵍ XƚTg"L}ֳimEP"=clT_U&`C3Th$9 3=q,/$@B&;a:AR!c/_f^ r"`]*4K'y*&> stream xڽV]o0}ϯ֒jP|nV4MSV &X#Ӵ[gcC vҔ}{ TA0tty<nPJƀZ~6:hY  \̂\BoIq6 Pћf5K$YX]|zIrf F*٧&c!45Gnў 4uôm; SF5,PI>`cL7鳍{/^F3ԃ ]")," tuU`q4(NNbndE.xPra \")#SU g#؋c05mRC ̣g-dg9I}MaϏHOBAaU@*H",l1-^me20$ .B{ KBGnB dHǴ3j+‰Di"Uy+%,#]H)Z Vqڜ|aO--O2ckOcIoAy6d}N[ L-I _8 Geb&M$" /2aUgiʂV7ڨJj{Q'Gf p$:6?Hnb?_>tq ikI< +AMC)Y4$)p;a7"k㤯k']O>-6|alh/rJ(`B2*#o`qQqM3bwM=- endstream endobj 94 0 obj << /Length 575 /Filter /FlateDecode >> stream xڕ_o0)HHS 6VæcS[e8`)VS>A;|ˇ cCa:ծ#Rۙٱe l'(Xu]1$MtǰO&X-TH@:5.D^d$>vm]p5: 0̶֖{A.Ԅer=j|2E¾qɦsb63..yp/֥iuga!Ze-Kʸ6aI0-f|I? ֦qm>*S Oam܈zGfܨ2x$--ǵXfD/s~igٔ#U |:f,/ MCԡ_7n0s5oZmD`t+<\UW9aD ʽ&'+\z\; x=ELrûEy17NV͕W)<!:};X@m;Q ۻ;Xl͉gy 8̤)SD;K. ;'xhZ h?۽ endstream endobj 99 0 obj << /Length 2818 /Filter /FlateDecode >> stream xڍYY۸~P%TՈ&xi>jRމk$CBbTrHJFh4VU(8[WQÊ~|oݫ7d?rWR>6׮ZS_zWJn7{ەJP%1 RmWQݟM'0lGF1䌃;ku  )׉숨]쟊o8!pq7tg-+1E+U'6vVxIyvdfEbZA1Ō(Jwʀyf.m;KJa%?Y@$ϳ(PaO:ǎ#fа߯9\ԭ G9DNhdX܂S'[t+E{1ͻKwGb4Ĺ'x&7=GrY"(<8D+NrA6#? e RG#R?]K{|2;"cL2 x`P,ٖ!$8-MD= | Qf[ /Ik,C e(!HĜ,C'4|cF8вWP u끠e108/J7X f͉&OBH9w1=tIv9C]qlG8tԔ .E7c+$XǀdJgMr, bG`d)8C9Fvڅe18T0DˢЁ%^d .b4CU9ՃZ'nߐE,,QOIHV%eJR  7>A(j=`4%F^dv/ni.S'%E+ICa45R*HP tz )%l.vw޻v}?.h]S5"z2^HtF)pi4(Hۘ29d &F2dNZF,^$s]hqF %(o*`=5Qdi(.`FA+rWJ]OKHj@~2pc@x8&̑E93 $- dzT5WUI3=4cAWCj .S+x ]y-P7Pⴛ%Œr4Όqyn9K1ZphU@pO]!`xrV,6tjU3Y\j$AMw^w]l3]q& >q|^p˼4kkn]wBk~䚌o\{ GM] 7^!R,f1 /:L$P9aĕHǟDOCrb@_``LE@!l-{KPh$t/P+]¤/2k1@j`%0ȆsµPhvP[-ɞ&ˆ%s;^fnJjL@ԀTpՍüC>3SH9X[a蘡xO%Ovv-bX4?YrCW3V"k4An7`O1k` `M?IZ1\yP@̇@̝ W@']8?DJ[4l렖3K@8,־n! z6f4{Rma7}[SG#Cr0Gevr/~tXHw|$x.Wp̒J^i?@8ddX.,6 endstream endobj 104 0 obj << /Length 3156 /Filter /FlateDecode >> stream xڍks6{~_N*z?-꤭]ӻZr+mE^jr̊A_D_EaUYDas_=og/EuT9?jTZjiȂWU Zsﺇ eL{]AcT;4ERqzI7KaqQTYogZ=/Q[s;Xx PFpppbX/0 1@XӫAV mTO0h+A@ <Ϻ$: r%6x7Aމc*aO߭6Ӄq0LCsv2Ai6d+Y]vl 4QԀƸ7[ĭi6itkFҬ"(֮c앰ՂͱT{""H88ozgZ} [6/ôo8bcAhI%5|9 Ɯi%Z a=Jha"ƾz!pdߧi8ӿ` NA71/3~9(81eoa~0XjnH6&ơ|;ĀGtnj58//<-J$xc#`*CؤŻ8Nahqbӭ+WKs(eQ}JBHDb4Ra|F갆PAX-|zōar=ga{}^&aq&S=aCnǼdyX[z$̠̎/  2v X%UX~OH2 | ad\aUnŝaqJe%[EiIaj8Yp9JH]zr Fj1!L:k/̛=qQy傸*D>#S%Q3Wqb Išq8?,2c,v}b9&@vP%AVC$=-dh`N?; rH pyY[vIq Tw=Ki׮n﹖:Lr/r$/I4μx_HweXdɩX"Q`ar E)B$#!58}&-ϥ<ӑ?7.7:5/Р'vr_<ǢT~yeu;!Sئyͽ3 h'onDiɕa 8LY1\[i徲8Ȍ@DwɣcS̓76\A~ʬ-4E`&TFwkA=&vrZu* YO,J4-۞a~G2l !QJ.btˁ)e_NdW9vK)WaWz;_]XHS)ZlrQ.H~%s]W( bR]T9?$dNW:-kb5iaړ"mlp u9k: 2fVtJk8->a`ɜǺ&t`J}?uO`\#e)Df!`ӬXT7_2̗ɢAaRH0cF_\-@M.6\Ůt_fB?am~ט$3crf˃%q"Nt7upPKHoR 3Am>X`$Gt6R -^ިf(2QP2@[=ʝ;{6 &!@|BQ8 vL`T ϩ^>R&DzL2,B@2LpxH v‡!.PI[a}˾u%Kt<vKЙ^,SLԮ[8͍Ul.C2f39 u!ur΅6 #tFȭM i{!@Y.1v@#AEAy"Y)ȱͦY|hueV_Q~\Cu^T4{nEE> stream xڍYK۸W-*k—Dro7v&koq\0$$1KZ>鯻AB#:F[MHo$+<ndw/"|oۛ(+"yM꯷$IW?< zkecGNhƺkeOuiہl(^a6ϧ;onwӻ(I9n$Me~dRvgof וŽwݨd=>Kv#- e˶Fe3rVyaFArfeH$0gѴΡ+~lz]-j*! j[k~SBtd^\D$Ab SU@t"C Kȶc5~/Di{ϸ;AxT ;``=:5|z"}-|lҀ';n0]('hH?@IZvkC+5COp@ֳYv "5|N~ﮠX,|K$+FUֿ 11eiϣ֜ԇ\~-hڃd"[{=޼M+$۔;4Rw#؍V&S,NYM:=E$=04PQ](x.!$xk^[:w‚]%O|pgGQco0[lVl?!#-pE>R£O}PƝ}/nv~$GnwE{ ҘQ Dۻ]qi#3xO ¿|o_ ww'pI_2#_mjZN_.#Cux:u-bfGp9<tf$pU #\/9=S=#B㾭0ԝ,j8A09l lHxX fay"Qr~B ߮/7ah"L)&a%X*;38yt&s´*m AL6, fy ~fN'Nph=6z藚 n5\nё:H(rB4}].@\`/K_a W8KB+_[_\kdr,}3ch2 rvTf;.l#JD]@s':&#ehxsQHWV2Js%apZf2# _#>9jZ㰚H 4 T !YF.I+tNΆ5]3NwӰ`k gwc75z4>DP٨ ":(ې\bAD2$sE>M9NqCOv1~!)d:+o"9@u1t23M鹈$8}^qgQ 'L8'+ks2|(9+-X ֟k&y 6K^5T-%^٬le3UV&F%ɡnPґgoL+`f˄_éJUfʦk+tfr"J2J"/CvC>& tS43W҉<7fȨe$.nT~E=S ɗc7yb2؃mmlADS+e|aJu1;VRMg*TJeCl+WOOu+ץ:s7feaMk,L29OA4g[` ,S:d~[ J%D\[Vր x{8J2J iqo"> stream xڍYYs6~Pe9U #oN$;ZT*5XHpDUR@@7\ *CWUʧ ~*q{wF~w꛷Ir/]ꮾ{s:a_w(7B7*ŵ&d^uTTNzyORA$n>aS^y|Źga4qLrۦsըJJVܛ>Ip,~7yFWb:u);)Mzjw'Ҡ@}%)YQ=lXͬpèt_2|J8<^XAsl(1vnP$9|C|@!i Z;xvQ|Kܧ|P\-|q͵]CF#aT룙71rKzJzFeNd0V40qϧ8j%%􌅎m֟  ~p=bS(1X;<<,`&8EVF#zZQPE'4lIbpy8_O[ 7leY,jYXʬF}ٱN6$#a0z5ùo1;ʭM-^ v8@ drC1 m{8mRf <k~ pI!lu, %Z"j5AguF[4z@hDNm[{B)+0 :O`h>Z:3R]chmy}M;mJ86 4N9`%<; iyMPU0d(>b`!.LhLc 0I Z K k@]^kn ϧ;9z :5xImϜB9cQc\xkYeoCfقUPTtB6!5yM,,|* yIS,Pa)6zۺbsg+rcD(+ٹCSDA D A9O02 MG1>Y F_Pte!zy(A(\\$F?*h5*\PL}й.huuVQ!ʑ)$.0Ltidm$'&`Al~͡ĸ]cؒ-fjeQ߳ 9U&#[(q-L 9UA!5 CWD w?sc+ qc}a 4Vlulfi^.#4=Ʋ7rtOiJl4gx cZ̒ڠq63V@f6Z6S["V5'G6<6s24 pR2' d}Z`5>v5܄:o8b+CGiJ$Q06#;D8!bTl;etPHSoB8ņw a캧sH 65OYʝ켕k\,Ĕe/Nb J54tգJң p Y#?Yҍg\rp% [bT8sϔ<.Sn z}pSSK>(oyal<@ X#C|ZoPEߘɕI{9|WR(bK$=۾W 2Gi5Z7<:p6ku#_a80}ay[@+q`-@0/B t[e}˺Q/EcY-Ђ.y@z`dzaZzב;гCeP|YVE.z}קM|I#>F q`Vea" 4^(Z6]d?J` TIXzn,ʢ{\P sX/$%ֽrKύ6U[Ě!q␅$hN z` 8B3 Rrw(h5 Ф[:>Uv%wJV7O/% ~*ˁ34aȈ; \J;?i%Se}A|;ɯZ <."|z`΋#p >df2ag5kE _e`` X> stream xڍYIsϯP%T➜fLU*Ɂ! 1E*\v*?>\Dt ^?@…HE4H;a}}ɼL\ f~ܾ0\x:uSoYm?rIUy}'~eN>W vvIKhY|;U60ыMxۿZ < xQ=?㴺-T$VMPV8A\:j^Hmzʙ2U7S4j^"uGtwk/yB:zl)p]dh_W'6OFGzar$8VJ4b稺*B Cdy. 4J8b皶&2̫Q-0ڼ4quE׹[*iT?R@qG]е#y,$KUWs}x`= m}&ժ9; ui ,Y\[ʹVOܮNL!z1k![ҢX1#v&?4Lv̺X WR^Fo j)v;úyvHsΚ9;(&6μb(K'r:o]#V?QD"-(/H3B7ilBnfP^aG2e,1.F8`/rd/=|W6s_h]*nKi=`+b!WÈ7<ۥ}x$ wc ?ХXWȝ0N@=e9J{2p@C ˃ 8h4ٛ=eg6T鄪-j/s'bRt9UxCG$N=8S_lv&;)&kRZJ `f<&%ifB3'Nq2%ڨh ŋ3(yXHib/{,s;{t CnEIϰCR7 {ll4Vs,UKACg()Cg,S\ =@*9ZrF-Kd5aKy&N`|5%D +d%Xp6fy_ 6bp[L!d &v#8ShAg%`>*3zUv<0b# >p)C8EG3t_y:J±B|xsws;[P?"ɺ "IGn f>4̬V-L,bW՜v/56S4AI{%#?'ABe 84 QR/ZTxSdLJt[ ,))1€G͊~vzLxt.kV v|jLEɓD%`"Q'n hk048 ^gJv=Xm#Dqi튤T!M0x4Ȝ7UTY\&1_7"'pד5 ҟ{249jp3C͓?[AL$bÑzCbtEfp~Q;KwŶ>xI u7WsHι #P !Y@9L%zq`h^G:f B3Jit&X'40彁i&,Ѝz0ߝ !\ 5p X^N/3Z`[rMEJ +6h#6A--Ï%]+_ $]tܩz붷Rl[ӵd8v^ﱑy'bf`b( gK$'9pg`^уBlޯt->o`Ȃh%C=li2׀; ~>k%D /0Og@ L{l1waO =LղX|nz<*":B׽x4lF=HÇب;$uј7| $mq<[ډ5_nd*~'=VY/3ywu+vs[gMr=|.B->0YIQ)^!3߼[>{&GN㉻ K)/ K/Q{&zRFehsBW\tX5 5w3Sqh]}}`F 2%;d]jm\eX endstream endobj 122 0 obj << /Length 2774 /Filter /FlateDecode >> stream xڍYIsW2*K}M5<%3Jer r6"ݳ_6Xwݮ}i_Eu^f+:210~w-L7@Xݎf\8 z,1|[gy ~Cj s`aIYkPm->ўSqi%Q"uG?PWT _[ ;'s߈!5ix_v}g^ϗygNw6VdgNqzэĄi종V=6ZCpP[Q3W|ۅ1`^F»Y*HshT˴r,V1: 8OFwϲ IvTT#+ר%gwWrne^vd2Lz8LLwwUQ :"v-$U e6QH]ex\eU|Œy2؎I2c5, t)P[bt,/ahOotސL/ln? |Oͪ+MJ.v3P'Hjښ[/=-99 B3([%ڳȄ8@}aW$gHHUzk9$nY;}03pUZ 5VzNӭ)ap:@+c9*i'P׀ e)dgeAWRqmP,Sqf3{%KR[w<'ǣMK>~/ pJt ȅ\ޗh27 a:8K1&ǽ*i)(d2rIf7:@aE:`&1 weMY ym9r%8˲atFbÖah2찼I5&n}c܁;TI<ֈ>jGR"wmGINFg) Q!#8ٝ`ֲU@uƞpoTj9ÅPh 1mA]U^BXb|Q^=!T>zwfq>^"tDNtP<,)՝>GXw >I[9|}oByZ Yp^^PaH>zt#ʥ:UXpe:gS "7xe*7pzYz. n7M~2['SqEKHs!$)|/DT#0[wnf2L)X(a .-~JFm5W|4f`g|DKLPn8I6! }ќ$ o-O\䱘<@a<`>@@4>#Nɡ/А4vSybN_XQ.&Q5FHGRq*x&avh#"0[d%o6 (/NOT5)R*Rn 'G1|S˱:学H]Z+: ?2U?eG'i#F8{,<F endstream endobj 126 0 obj << /Length 2235 /Filter /FlateDecode >> stream xڍXo8"˹@Zu{]`ҹ[iq?G$^̢@-QE?~(bßX" Ueb7uAϟ>[8^Xl]Q/?p 2Oեq л >^g*E7!akMM[~Ӆ;`i$Ȯ/qū OﲊEE+FtX^&}i_ߟt?kVy.b)З(4DH[_ h5P.[3%[i{,0l*hVe)H~ӝ* Uہ-VD,Hy̺+Xx۶{ţfaYdBz6&EL8~XULe*2rXI9y ).^H Jd'cl%L N(žuw?|`>P9?iZȚ%l,NOeC?jm@QFƙxRoN$p8%U3Po,q k䐢P^B>y4L Ib$Ӣ]?@ &_x5`;;1Zủgʅu{[>>:t{Z$'{tIw'7@ך6ֽ5vtpv^Ip} *i+"r__1 &Uk/aI46t'>Q/2'uG-2tzdi3'!'aq7P5u=a-`r؋o (;-WA1'wDզ`.]0ʳ'RT=+ғV~b%v7RJ8UFa_O.p-d tW6?_ٜc@Dw9uρ4>wפ,.L\Rj6 p dDx^$Y2j,h&FJ7(ݷQ`zG*>1gYY/ȣ>T#CѤ=9QHPAK:r=Q ړNy Giě }՜Jb2r.~7C!<]KP}aeAZK&HmР3KjJf#iyu5hzɭ_B'\!3\(kwjXw0ᄻ a> stream xڍWo6ؗ@"G)MV/*sEz-Ȼ| =,x"jvmlTK+=g?Y@$DG3tTmmcCXػx5xY4\>mfA$K{\X7R I;OFY+Kr*˺8JC=QzcNYTv#^g ْ;rh*J]j-Q;]:s`oT07?]kK6pU] Q8ea$dz0f'qze E1<(L o۞e}Qg08"14y|zH%+ay1g`&oބ"a{N>gc~Mg? endstream endobj 139 0 obj << /Length 522 /Filter /FlateDecode >> stream x?0{>JF]\rIe`Q0d.>eS0Eg!d"|yc_юV,~e r&>kPeXjd?(^ߊRJɧiS/Qk<)'Q<ϾMgGgMb{҃%{ORaa,HeW P&X+w%oLډ0t2 _7j> stream xY]o7}_G}*B"(RPm6aհ6}ϝM003!C2{m{=l8C!o<'C )c1xH I)WH6D0 %\7sP&HlVLȸF0)qP%UI+R)a>%@ CC|@Uq'*@`݆1.=PYPs0Y\eP0yV ^zd+GR)(X+d؁AՊ9GxMnb2S,s p( jI"e 1 8=ʰ%y*jlB/qjn'^'gZX V'MD0$?axQ ^jK% 70qTUg~yt:Ꟗl>70گbu<;GL5/^͏/?IV8hӈ=|=S?$p|}+4_ǯfks,O^O$6J6D ;\?ĖC[a|$|xl !GhzU~j#Uկ.ޮ_拿rn,1#3YU~`[@QC+S?[^Z>|/Nr]7zy~^>Tl\-Hd%A{Gp)Q\zBb+Ȋ #-Jh9❁¸ "+oeo7s\EpUq݈DꖨoQZ *22Qjw(Ky;s,pzfg< oWyFOܩLLC ՒfKDrz8F(=b!4,at*ķ)7.L- Tפ - Mw֍xh5?z{6;oŒP["PKw&yXViӸ8O"u9,wRjxӧMAɛrFl8Dצ/`RQɝ.vVؠۈƄw HQ]B cw}Ev^,OU;$u閈ؖQFw7sHΝG짵SDjH-6AȐ6oqS4/i^Ԥ"d: ْMvxa+ m2y|u}r~bӺSJu/RwQGingp%'7r7'cU~66uzm=Z`Kn7ܾKwcqwN08y6)VB?9yyyiOM =^~|6;Ys~de9.ywi~[mĔBRHc(lZ@ڜ6ߜ6W=/ bM~^EzI _,ɂ0%91 $R[-Y"j풰-鷥FSnNç endstream endobj 159 0 obj << /Length 797 /Filter /FlateDecode >> stream xo0+8&_m:m)e"hTHT9c]}ئS1I4N$cH*V3|jmtK#\:w HcM՝{U|=KEO%cl~?,?ۮ}KV+klP-0SLS4{52Nid GeP B8N Abű:%sr{K0-} fW7$ i!Nv&S&ۮl}cڢW+G%TkNZ$??|^QDHj{/G=unxXtX^NfpBĹN[owYN".w*@, barqF[q-Yݚ`Tz H!zCձF9L ily#U,Q3wwHc3$SU6{]S홭CX8br0#-V85{2?xg@SBcr! .؂}p\+$+p;CDގ92{Gf?>x7W 1NoyPVeW4I7+0>()"-8 %Ry7-"JWJ,QusF[qWH:}{]-8("-88ҜxlݕUvYu8K.E"e/l(5(~g endstream endobj 173 0 obj << /Length1 2151 /Length2 15298 /Length3 0 /Length 16576 /Filter /FlateDecode >> stream xڍP\ր4%hh4Hpnݝe#*c1*TԙLAv.Ll̬ Eq6v++3++; ?r*-?,$@@w$P j`qYYchYrv g* {O'Ks < 509Y@ {F @?!h-\\YXݙNtwK 22@ h wkT K)\܁N djg rg*@v2V#߇`cfo{og`fi(K+0x0vmn@Kߥb{řY ~Rv ;gꓴt'˿/?dfigjW,v YۼA..VVVn>0`+o%_|fm|-@_@7O` 2C] 2߿@}}}Ll<},rjr2 nJqq{7 bo`+kgfW=^:R\Ϡra<Ho= @[K[O(ڿ5kumLN bv6=FKgiKſ_rͿblףtebp~ɿUߔRv&m;7D`}%v..7:",2qzϧ)|J% *=z8,??O/g7Cݚu&6W '_[?%?L@_d'>_ǜ/?M-M[7c jw?8QSZQ){-:@n? ͝ߟucQbansw|'d=yd&NNﯚyLMBjCݙ&fS蘼:\P`26Hފz~nMPm{y1SkCX?''byu lvtEQ|p/] [SݯG|)a֌,1Μ#qa"Ǹ@Ț|#c@=(dyY܍OG y16M-+Iwѻ\XdBp*БkYttrk(Pug:쫉6zV'FvO+Qj+Wd\SȀ˩ x_%-r/ǿ-x=O;!x.}''eh|<֘#Ye |:=4Pf- NX= !o5V!֫$XdPpQ bsQc5dɴT4f/c5*A[?SCd\<>O ϥ!hl~StB?Q?]2дJ4gZt,EʲI9[fvB^w8u3b` yp-~R $`t&];Uo;/S[JZ3JD?9QDlМ{JTK;c<=7{?; ܩlV+:-)Z IN,E55Bww!2Oxiҏp|(p S凘m#EYg6mZ熗\J@!+%:V>.ӑ Nza/[%]!ZW7>sMlpmX]귣Sl|V}W3t'@7?1ݨ!#4+=f5/,&)ż#Oj!P}3]i/ dSk|uQj!+ߒXc/P(^<mS'N&g!7-I]9$*? :6r@"?`:5g~tLW?,P+h4>G?G( u?ʼn)M\0m!N{y"H/r<˔{!UY}Sk<ݺ͊q&71U|K*S0S`8ډy@p rxЏHŒ* ˆ51pdB&>$?ڦY?Nd9$ 떝LƌnILn%W&d!mC;KGPtkʵ Y ƅIIG"ZD. Mi@' 52eنyn#Q00]bBsA A6Tq~'9# Bǚot,73Q5fXqLӑakyF>_~ފij~%#XXlAA苋+I﫚.Eĺ{J37w .R!A z'^jij/zRٜޘ}^j,ڏ(Lm@#Y[RM{sczSs+f=Iu*4;9gzLK~E%HT^]*hI 1Dk]ӯ%bk# {(;|u,lQXV.Κ=.$[cзE %a`G$9ӣqe-j"(^>&Q7C,|b&?pSFX]n߿GoNf@A Qn2cq4V _0I{n)lݢ sDU%4T?`U:RsL#[vUPn2;{1)*$+"uY\T)Iq)|,"AnO^Oe@UlO':̒aDD9XySiI3?{3%q6g ~h 7SxJ+֣}XPnt2)2|H솭qG~WϮ%B@癑:<`J;g" 6FdW^u9g7ݲ8Xdp=hE7a92 *fէK>ETEgt0K7d- WaILge&Vi^3u劤Vam#JYtio:c׳k B+M.gaW 9=~r (pHElVj%h3k39""'F6$ltխQ>2ڙse)$LD;:^d*oQ0w=SNlaU??WJ![Dg,f<)^M ~Q9lCf hcW"Әkkޡ{;2Y Dkrlʟ;eZg"ns: d?00]S}]i^=RBzIZ|eq%&=EҔ91^k Bg.?K ZOƲ8e ʭizR~0䚖 GMEk^,0&r#ӿf"f{Z\N9n1G+*XU]Z-Ȓj*q)po"Fhy`/m4jb}>@j)m{=-q55~q9Kveۭ61bWyi_y|D'joR)*Fy e0,ET ak]ǎӒRK@,Qtz~҃$R,ppN$-9۽@Yv:s0-WTLrzf:|>>v4fuP;TsX|nւ.|zW>ڌ%]$OO"+}cHf4u!ŰTXȩ mSlCwu|: T *-ՖPEAo/pr~9&}ݠtcI\܁im/%%Gjn]UA7B.>ױeK|֎qJNLXMJ#JP⼷Ly~B|q~\%9E1;noA"{,ƹ;T&ja[vdP;Wi9|XXkJFGilHgР|%C"WY֒rD~DXS\u؋ܕRSWB_{HQC=Xw^Sou{oICNyGiu{ƍT~m;ʎ5®r#G2reS3KƗ-nhi?,H{lN% mlLm6SQ"?M) ]4Ժy{$O?zKSp">KzK( LGh奐h$wkFl ((/#/@))5NBAr_hԃkvFp"wHc1D;Aq]6Kw|46Dy՟p$"QW|4x?4{EMf^7mʚTNhlu<3!]yA,5O"Lʹ]`0rCNź;;ET;z"9kK?0ۛ4*cziA[ChCER6piH9F?H|a0OTs1\7E'_` ئt݀^1ŭJ&<.s8}ZXQHu=ov5DCm1;vIisN{p!K`=3QiaF,l@[uXfhdJ;| `;ݚVA!y&,r%s խS ,wĎ=Y~Ղ0X,!ɦJR4 gIËS%r5k đųxzW;Y>[# 3"tT;vcO7ʼn~C<1BC;6W'c6aSqճQ*fzD)y-w CܧaA 9LE6M9n»%[$z8xVڕIuoNV ԛO0 AaSAXkYg=/A_H^&=Uʕuqv>>cDm$ Cv; j)/mPc45 gfWBAĂ/F5sq%_rhѫ`XY`9^թE@fܲzzd*f繸Eưaކ(_ ɾi'>VqJad"ٱ2U Zzgm6/I p( = = ?! d cRT Q9EJ+-1>C4ޝTٖ$lGu<iI&Ec~KHBc-C}\_ժyU+ƄzRwA|6ϰW[G9 ;3d2xLzGU_Wzda d'CvGU31z졠1 >F^HGkzd5O>!؆jrV'zz9F02\WP2E~|Sğ9oB[CD@ʨ5=Y-:#'EP=| jP쓸 LC)N2/:بfHTRUq x.YW‚HqE'@(mi\a/iI-!ZR fA 1~¯ޒOq>e?P`+1e;ì+f-׬ ^t}AD3`dAf!`%O-K>Dcӕ.8|.OpbH3.m=qr¼¢*Mtȉ('t@S`Kw*HtPAfs'2O} :vCQly$PhLpQ%R" 7(OU˪6]۩K)W -"Nuhq8`jq'Ǯ cʮjr8+2lɧX;2D #)̦P|d \5 zQSDL`G-l QEJgVTJ$iEڧBHuΠL>(uQ'b>Xh%Z^狈=ьg4E}NN 5y?&. c]AiPӑiXrB4+^~h2~WNp]~PBCɤ ů32cn/u=M_,w0T:\HҭxM*}>kf$VʊBME7-$:TNɧ4]UqfM^C)+}(qx`Ɏz_0݇$zO^O7!3ӥұ ot*c ɽ)ZA~u{.mIH,.5q_BɎ.jT2HLb [m/yY£xivPk}aq ZU/0 F:PD׎N;PzGG0_tϋG}RwOJV p 6ăs!\Uo/؁᮱y)hʢr1k&O;Iқ[qC"jTlQ$kê-DR|<URHUu;(1bF9n$ )62'4ZUuOPYC!)Ok'flO>sBQnCΒTtN e=Eo}TU&݉ 3M)MMT:>B RrX[⫕:`mTQDb6w:dKd혼4\-kH?PfAoEqrBHNP^ m2Tn `uY>4o4͏JWA:F}Q)|-?.ʓ5i-p:'41Qݚtm"qlf![Y;?f>Cs@zCreCΞWc߫$_$W Oᇇ˯EK#g8eӴt4dm!$ wKe>^Q78{If)7D˭N!!-Ryrkիlσ kOu6O7E?p8Cs}P~l|n2.nΕށ9cxϕcykKqwA b[tU= 7*=MGZ._UuY0dAt؞l݌P}ڌ)}NM1hژ`aWZ*s#7#$.iΏ45 K@\y6Y|̽GBr [8yuџ?֔Q|?scy-.'ؒ׬d[B NѹU;Z"QPq )N XYD7%=iu۱^<lfj(T $ ifFM+ ʺ'pe~#ȽNfw+w'tKϺW5S+om1xKJ~3EE)7q goz?WI9Vv|z w;n/b_LߙkC{lmxW~w6./x[}|wʹвdE{Ap#OO4لU7:ꕴYgUP"5BDP xQcDbXTsqx>ɬDEQr˪3gͳHV441w3zsq8l X$Tد unF')@56)觋nC(*ۚٯ-kE6 AQ\p#!j-5;NhSzKK;ۛw{-vH8T0/ 0JBTTO 6.Ĩ02a{x.+GC 'etO|I3ѿ*-2}Tw/)Ʌy{Ev\@0ͿhX!@8Hqtwk1|UpN R%4qb3 D(qY{MҁCA o%92T KNLƚUzG$@5ïFpgiStptÍQgoQ2ъ1sN"I}]:l3C/D ӍiGLw'ZOF|LݟѶ t"O.nݷhوؕcI.yHCe 4~/!)IgVwU7pM8Y'SB1V,эR9f"L恒C- 2v:[h|(WgbR-j)zy]oϒK@AE2c1R_N+6!O}VfxEj]r!h\I]J\?7Jv61Una-ӗD:Yu3x:t^w)Wf5WkTM<;|OE0@韤*q ʤdGO]ɫm`ȶ0V\>Y:($/P6 n}0VHw,5x1=UI^{ e㵩kם{n+ i : 9}zҤIu$`Tz,Иex^W +WUW4Z@NjӋS1W|A'yݹq)I2\bQhuƐ GvET||Lj c~/۟E((IΚvX7!tmlKX`yROo%\]'J^76'-(4]l'dWmYSPLyL{Θa@z(8|щFjN6qX]cȥ`3}6[Օq4FU1^.o,ٻ WՂ\JmoMr8Ks|X%2z2yh :[ĖiO=}[) >Xf>*D[Ĺ,chA:z)Z 5A,YXᓽXųDAʗH2i4Z\!ձ:|'ͰŷO}'FĖ'zג ~a]N.pjx ᨈgu'9|JEu8j`v?.Z`md 4[ڕkMC@Vd^KTkK,coPR󑄏8~L`"+C6YNF:/|~Cr8ݞXUhmٖpbHXQ$rc(ݥcyY FrL_a0 H%Qzk bȱarAO7 ͮ&0-<)3bZO3uT}KϛVIo_pwV–\Įlb*\_ȑwpv{";i/R@L1 W\O1M$0!AcrM紀qNh5e%KXࡅGGm`gqAIM2? ?1/y֢7JPz(trhGLqMܿABFDtvzO42 ެ;1#/jbu4tdL]sI 8~[r 2vF}Čvtд?e󊮄0:%0R{wi=ͧה}8}~t=|D!=RbGC ;ÄC[>⅞XC!GB:<9J6ha1XHNᴜm=d|Pd1 x@Ƹhϱ|V lMQXc*)3@(&'efkQVlz}%GiZdB&7kּ,}#^oiP=[,jz`s@7}Κcq3LJfP *?YއGx+&pߋFIYv3}D(Ͼv\~EJX $YNM}*i֤zQ;OSU?X(fvρ~ߦx&,,X *rH4{ $j&̥>i&*9;m[>}z 6BWVJKy~֋&P>ٶb~D EXЩmSeY jxRUp~c1…ĕs&2ҥ@!gՠx^m"#>$:9oFPf6ayyx@t@?;ݨϊUxT +y3O(74:iP要,kS@}[LfR||$qZ %;{ r_aHP߮ɐ˭9߮׌VWxWBmU-+a{Ӧ=wUiN'2Ta{N./~y (wOISÔ긮xbœGNOL7zsq2I7Z:*.2!nYҽ6ǧIIcx (6!>M$I͟j:lv41;xєM3fre,;494 C'8"=A|='gg1>'&WhyclWCQ@N ϐ;9#ŘE{砹^<+ACz!5mCĢyS`ZV6˨])mef#l;9t)$EULL.d5x--լ T|W~9>p&oжw >Wu q^W4{Iտq,H Y[~d9݊ V˜v`{o7ҕnrtYoXRT|ȭxP 4'G%ohS}i6}䖿3̾2| &])@B' 6\qX~/P}W^w#:zR^R @}0@0Tnu3vٮ\l@/iWw~y6 &I@ ?.d tV;Mce\ك>yHzn^~_C k(INw'skvY*Lw?>,7o<.JH/, G y2gc%q=Jդtd^b b}A@1W `|{Z5wN9M>l,^y̠'jϞ+~iMߘn"y.a+oc1Bi1B=ĕ2*Pޮ[EJjRQKsmJ}s EETSi*x0аR= wS5G>4?~iFo-:;1A 2c\̦ߘ<(CBsD=? (0P? "a i]ZN2<ߡXq/nSa %X-^}⦺?E&OՁ A~rH5fOŽXlz}:M@V^)9;7?э.gP 4}!؞bq8o>7F_ҕb,݀w"o }:yK2I\5 g\`\7I荈4Q;A16I Y$ω<qn0{+"A}rʈI8l=I ? (TsCZ*5V[Ȝ YV۫_*$=3J3^x^Yb\_(Z+:Sz .d"{ڒfĞNA"ݰ`^@?8;5a)>HQ1axBo\-c gu_q/&+O=c>]¾CkQI;cNU{pz _I y |p2g @ƮKAQn 3o%H t'`JqVx1)UΡ~&ol[뮖ipV8̕ߣU\kc/Ne`ePbэ2[Ú$27Y֔Fm'0@bܚDmFv#䧫OX|a}5+,99̜Vjɑ=lym}1o9rJy=_l.*w0%xʋ~)a|f*n"wl};!xu] `N-ϤŨlSg6CC63Y$)`INnt#%fwY:; ui*@x Û9^G! Nt ꪼ=ee,۷s]v[Ms€w%#`P4mf4q+JנmI7+q8E3a endstream endobj 175 0 obj << /Length1 1484 /Length2 7407 /Length3 0 /Length 8396 /Filter /FlateDecode >> stream xڍtT]6J -CH#RҠtJ+ tHwI7 >>k}ߚ9gs}Xupk2(h*+yXX G<#ED;&Pww E$E%||E  h0jk% sBA@@8: (lRv/ɍj+"z7+jt GnBwG(sq!jmg.;ݟѿAa l6PG@[Ya_D.Bwߵr]6r:#xܠ``pU";x/޿ m0ͯFμ0;DMOҝ ?6[ '&*' ;_[x9C~;q;lAm wx>n@$puoCA5 O;3|'W'N_Ww"a^e^9E}]9=οz+/ |ѻ߿P5 +ׯzꯚʀ!a;Nn'%;_YwwI l2 'NQЄ 쿩Ɛ?X;W  9g uSzB:Pa75oPDw7d gNnw}0n] >awwwHNwS x6G܅]~ݲ(F|^@a/?N,;?]b_]]f¿_›$CBxpo Iap?At)Yg=)QW~fߢ%r8}^P%t͠m`j)D-aJq &W/rqC)8G{S2R,jGd{D[́R&u0u4+Cю㻚XT^eAs-;,}чz؋3pngYdPQN-Uz.Sat5@h)$s^/gQ8X$HJ;}qymiij QG!wKRas` X倍J!ۚ{Ml6Bgb3;{i&~HZnӟU SQ~ 5@ irX}:!JQWDuhx&ʐ8{h>R9k4LiX']Abk33)u{e0᧰oZgd3t*m,m^{DŽ~f?C*toh?FU5iiҴxyz$ΐLd%*.RrOqZp/x^ikt=X֓P{tyFcye(/yTݸYĜl7 ?iE5_圍}H39SHXE ӤL0WPUU}F%e4flGCԀ"r{RY 5<4\re&ל; HA+0YMj+mUq^ LV!VIP2,JޚRڪO9^dC^ŋ:ZE>zoGjUQu2V %p۲i'f; vm:G]N0ko vwxpӼu> >!^k$1C *Bz0~[(9E9Wم%j`Mۚ EV9I;e*-`3^YGQ GX ,TF/,U;?l?>ya#{&'qd*[ j=#5B8$3ϟo䳽x1&JQ"l4!xPͨ6-B-2MYc̑֞|řb(qCn8I#*ߞ pId6 XM݋GOD4t$XKcjZTؒz/'e}(@Dh9cWKg@ah3{!R}u1뗢d,U9h;8`՚вEdI6^:h?JWve[68vL9fAuuKLUGwye3];&MKly++/zBPpJlʑ 1QbYNb`g}3b"w)I ;IXwa rK :V:⺯ r%)[0 )I5)+5cJCT?9G0[f*pSՒ_awyǪZ,Eėng y2y3':=<21!"l˵ȣZR۷4<-:JؖIMƃ:;s ڜ$?nm$YRXZM _kKro;t\)g %͡/)0E۷Bl{oީrdi*ጉzVТk?g)O߁5*"AW3aLn9E;z$_VۜT" l/Bêո^ LMwl &wnx ʤv:OZn3s`8A~]Cgz=&Da`s3C*uz *8~$ =[gxLAms gá?#اE{auuIPtº:ǧkJF5Y=n~~nU/fm vh%imP^Iu'<~W }>Q><,/jKA'ӯcy>f8 2p0M#˜´.xN/苠şLX{X[ˢ$O:6#: cw bc%Yd\")iN7v05+2gu5My~$(dTX=eg|Xⶮη\~er.#7r?&1+uф#TD@3gҼ ;21&՚WH^5i \a/4}ml+N:t5a&+*6=)o*v]}VE^.SI`0ݫ:ji{$sPhk˃RٝLenftjydu_d* "k%KyIFL%8--"l&PR<8Z^€GMRd~h?xYu)!Ϟm|c#IR#_r\{/%ϴJ=BBSa{Qƫ4P-嫜Җ:|?~# L t~!0l:nҨ ``j }e(aMƃ6n~:3ǥL[6+c{[CH?~{C:/K}x;nPɥL8|sVՓ`4=V ՚.oYM El]MyZ]1`^H}KC4L};,O4;s^im}CCp)Ίa@ܮSUI#1fڞ1>6;T Hj1ndǘ`$kO>羭)t9U|()y߱M̔MRtto^-xL+y}RQ>(ߒ {gS%f@aC,[CGq_UjJbY 8P+&,#2P%͙9#S+ox+e0\>9wdoMk8鴅b) (gd8dž{l*ND+"+D0KSpkۑNH/B/iNf`arc?=ud,i$>q3;v[OpE.Y<>*⤳Nu((lnN~I7)mf1R$' [څrCM8t{MgJg*r3=gՙN!R p)1n( ܎q?Gb̍'_&v1+(܃Ľy^0ٿN[ʾsԟA'pmF(_fs*>xmZv~ ؈ 7G>J!^)ʇd5R!1sA/JRڐ i'-Ճq;!]Rk/>T]^.FJK$Utҍ6U"MUI'k4daQCxOVtQ|^$&&F [ O qB';1DGcklk{i1f^(z\jMJ pC }Uă7]/UrOF=G1GV1&|( 3/l{};N. [A}RQKSoqҙaF9 ( ]OݖvhsZT\{HÑ0RhRdY)&v\6XLm*E#t!Jz%P0-vbQy$zހAWy؟>>z[PE7r7'䘓`ؤ9[DܾCů29[d?j#s9@:JQc8PJiιh5rY,+ ׭΂;!Y ,FYp|" k c oKgdB*6G}\;p)DhP_1gA]V6Я/m"h"S"t{Q(c.N1︯[ WɲކQQgoqDKcԼ" o_Eh R}r?ߙ9BFKF%}nꑝˏSΩͨ;`FV7/(!<*Җ ut6`J0eL5BGQ8 }m.d_5ncm(ny|brWutl}Oٽ!H'Ϋ#cVfnYIfSIY lOzj@)6vܔ1߲q1ZIM7?S~@_0mvd@Uu[%TQ~>ý&`g`h)GR2ŘOTn:)kDҗ,e<+ zHeֈ7OdD\|yRWdym ]} gr뼙~Wzo?Hl 0 6^DK)FafR%`ok}'!&E r}8? V endstream endobj 177 0 obj << /Length1 1390 /Length2 5891 /Length3 0 /Length 6846 /Filter /FlateDecode >> stream xڍtT. C "0twH0  13C HKJ*tt#t ){׺wZ|{gww?+g (a(^>@AKKM $P#䯛@B0P@@@(O0#@@ PB@TEP H'jkW ..w:@ A0eqœ9`(\v(?; GJs?CQv$ r``EmP q8B jgX]oBPd wr<0[ QCy@0_@# + w xH0B!FUsJ0kBO1g0;aYՙuq)`\$BP0x7t rc&r;l0C@|6E" Q+-F7揍Y>0b'C/k8?S4P3cp8WPD1/>, m\5 ]=e n?i1r3ysw⿪X )::sa/ZWFZp` }Z-5鿣j(F r0[ yP2b Ep0. qd 1!1jC^/?Pֿ'(B @$c,F(L 3 f13f7p_~"Ss @< ` 8Q}EPI;ڐ$^҉ P3"T҈r~zڌFt3my^J*O#^f [f#xcF :' L]Xw#nXvsPx߫蘊wSUnnn-KӤe7Yy5XAw/s):p5,,Q;UC$νRO_eݶu}(JG„Fs/2?mPyYܒݶ*\N8>Cnw̨$T{';[=l(@!0"QJ?`u2/X^HC բ#f".o ywU\ @4eڟvASe|[)\'F3wbqdNF}֠5,(#NUl`vk,mьH0Zݻ_0+>ʬN@Pف'ooRWHͲhE'B yߘk붲jrճ8Lo6e7:=)hrhԧ'0, 7͔aqݶQ.:2*H%A yoEVd+xEG Ive lyEis蒥ƍ8D'nLv>9QPFF}BI =`b[U|(?LJP=TtM )0y y7{KjnyzCPfEg NC )vFϕQ;݅[ =M ԛN9vy"V`̖#,Z&8E}冷QO -VE\ȮX{8ͪ7MSgtǡd (5&twmx X'+JɣC dY;ƹm@F!7 wy)Fy~ d!$gdNZXPW܏؞BLƷSy:Dvjqc/I/}D`wֱc$;=X7\]8%At| >;5m Q??-z+}R*^pzmx̳!xEVm2ӊR5hZ`]0C8BXKwSP=ͣ6BROLVYEnkD z>rLIsTKX i|OXIz&lCڷgXOʂg'[CCs& w?aIܧ  WEM:&49R#;~WI8aF J*סsncij?UKCJn;.ѭ wga˕Yw.${enj+ɣgnMȖ 76\*=*Aky_cKӟG|#p*GpiK/pIB6˾&g7q1 ̗~z\| ;$.ĵ2TXl+Tk6K ʉظI#P7m\~ycOLmAߢ=>*˝'![0@OS@yLgJ^uBt|P_=BM6ơ:FO{%sQ1݋1U3׃C]%yTR~S˩|بjEwߜxA"FNXJU,)1s9 K( cdBMo[U &6,?PqkhpnuWo62m0z0Et(8MfK75sY |{P+ڴƂNu &՗v Ui27qd{s/^W 侲O,jgaLX~)2e$`yL;oX/*ŦnZT,_"F[|8W&4DIa3Sz.4nr2cx'oٝ¿r<:q+.h$8*T7؜|+R<_ 00oĮ?*-zvSmȃ1^tStw"V?H_ϔs_ &?YSL 9ڇ;RP)39 JH&l7_y_=tK -Ȓ,u~kpShRWk5!)Fm_pʩmTHX]oQ(`ŝl?I~ H/LY 0͓OC}d D4M/jֲv씮bblsy`/hWT~W_~0o"K㳮qx3Ch5_k_+sjWЂ|~^FkdnB˝x\|m goWLHf(Q!X2rqjZAߧrM~91"XZ)"'즶(Ir.P9 .6M?%G"[!VɕҒHNow oR_@7|xj(AٔyZbE ._:tϯc/r+/m6ﬕ)[rShwXWKr*wraƛ(USYʟRg0Pe~꿀JGtb7 ˞X1y&pMO6txɄtͶ\ȥ$i48Nja7gURՇލ7qO<ˎ,f(rc`\6|i86`>r%XU0$r| ]Jeq;M6%ړe$ 5'R~%gxiT4b޴?aG\DGpVȉ@ݧxͥ^O"H$g@K3aO}DL=|OA/5*wv?JToD~2Y" N{Ps7>̹JPַ7Ӊt-B`3/NAv⁧9=?{KPe|sL3rwz(\ >'˖O+JÜ 6 .'v䰐*Ԫ͓Koݸ=revy>.$|N2r!"b~JGJtcD]0@z <7+SOX-۴өbuz[M]I&$O.NGQem㸻b>L7JV%kqT.p|׹J4tfI-i|Л J?'`U+5ܥ2(#Oqeͥ9i7ȑ&CN}Q;cj.g"Vj-eUNok@] o<țY㼏-xɾzBh0[XA7ND_Bv5> |{1H$)QKkZ2u60ҽ#?Sh-`KYTQ@݃z>/Te J6JuUR_])Үb;ùC׻[Gb܊3]nGo9 Tw4hUAF깞;džKYjYf5o"AVΟ%/FU%W$\7Fs/W{sܨ/i$p˖&N~ee/և5_(6t%Ӝ WUzMq:w4qFf_p"9ұRVh5/霃I9UMu1}JOT^#LOi KiPex Ċ'3:Ӟfj˭^L!ŏ'kwؽ6d-e&߭DjiUR$R}.C*V&#»'ϻj?NbZ2&(3炟z+G)QDf󺈓PM?=pYvGW~Dbloe(Qg"CVVɖK0]k+M|*_i)f4ljPF6Z Od9bB]b[fx23JtI3&ckIq.=ot3z\7~0-sޘiBfp.LMa+i}4> stream xڌt .h[Fcv2m 6Nmqcv:ge\7[3Ċ*B@q{;zf&23\\lio' H&jHY<̜W?.;m7!qWl-m<6- Ag`M5k\@ dgn6Z:[zM-]L,ږjhl@eb zt8V?* rRsREGE6 /f7~A |geBSPTF.[L6k#HYn/n; Qcgi% H]j\)xY0ZL_;fA&(Q`;|sCuqhb!<((BDIQzsBs“ONvK%]G1|_0w'gOsT ~ Wq# aЯ/6㍯a1{}b=?d(&K`P3`,J'CyĽ$2"/GFK+Se&fKeԌ'6 !ynk>NTo&QLWrryZL_ܼ96u{NyÙ$8 sTdVe$Fd"D%rxP} eQ`QOR$#y:zLӅ}2 ąő[`!7O6 ɠs҇>AFS߃X1tCP&ӄ{tnK<ϥBl'vדv|Sy]欢 ,D\IJU;x'~Ck=3%vk{=>L UvN cooٗn ^,F\ mġx?.– yru-KCeU)Ofjs%K?Q&RK=[?{*>3CȺb@Y6tQ <lҘ .]5&gZJy4<+HHb4ͱN(RC.D",˸WyƎV.+Tqc[=څ@Eں e'H孼hݧEkqn,/c/`6?sW#"VK.Ic%Qr#'!iƎ ¤D˚׷Vhqh8T i* 䢺p0:u<Њ%]yseTfm1sBNxC`T@_vKtx] vHzlNrż6ƅ*aqJn(Myᨍc䍣hW0ҔƠV;zV*b.G|@DR`Pݴk⪘' jQ 棌jSzBz` yUwβteqa\ܨ˃3V͘{QX1 YilnXƒ"y|\/Xr'nQrdRIBx[v6¥dNNjbG’קm>S4k-S.X (xd\v3,c}pѲ,ZYAhAPe=RVt&Ŷ[C' &ۭt-rAږ_c_=L@3XmIhۺ8 "zoӄ6ulpJ{Dx{A5\?EoV1Ĕ2?,1q6{0MiPiXF!#NvՍCq_$ îYKRϥT lZ>|6J] oalM#4bud;ͭbׯ=O+7h#J RvB!J$E CՏ>[l~#PJ!^lo{ %؟<;+k"Ogw;?5x䓋9 &7 B'X `asG-B'e8Gs_ mVGP62K#XbYT 1҃'NSjys/55(3 . S!W&*W K1Sǩ8yHT^8nQ+\wjb^F_w!IFS5V$B^ݥSJGo.}-ΑQOj%F] l&,U |Ad&|eݍ8\g z'x#Eyc2hk7<'g²C4v5wVL7%ҽ1E! ڌdާ/a/Ǡg[0іAWHx^/vXh^wF\8sE+K0{pZ*z~y6G_Rs܈"œޯmM7:v/Րg+0hmH xOVEKľg'CJ-dВ_\*/0*R ~[ EPxqEKJ2X7]1GOl1$<-_5vU'4't*9$V| kyh(bQ|ró)]k%xQ-XIbG+Ɗ#xl`*eE.2o._#ksf}7 1aq8P`7jҋYD P׏8 2Z!*<bCu9@K Vcug|]Y\7LnfsQ;U "MJy @^jR̚+`<ԮWa`)0AIT73HZ`xzm9kQg -z qTj-F3_֍ԬђTJ39)Y"M ۆf}rAbɎ(7X"(W nVIɖ`ʑV(E,3BT_NGk/*s2УgDkvkBb0imbcFPeJ)eYKW\p33;3XuF' 9MgY;+\=WɜR׮S\|M{iٻ=_r~~P|Oo#yߡڷBUeT<"WxuzG/u%KvF8鵣9*I JdS]:~5rgARp5>l"źY$ō2`Жr\eGml3 {yoG Y0 K%OH.ѳ1clj+" D}i͹-K =.OHW@AJ99 mhX~ Y>usU @'.fٔFb $<zըhb{[g6L"NJL&ٮpRB6G`p'U[2r._ ./m4x6/_y~Mg3w^5/ @~I1qX9́wƘ9dhtQZ2S#pcL,!}+Y,T_a=~sF(=pt&;m˼RFPNe( e =:ZFu?$b̿(lҮwړ,}Qk6?67ڍwϟE|\k.: H>d~&ɢV*99k*S{Qh_vz81q'@u]|.xki'ɑh2#ˋ\罒'kn)_feSo/OhK%b?"1owMHp~Z"?:ZA$^:~O[&U`íNWU  vlۏ/gY`?zűL%dh01Jm369B߾GM+DE=53+PnQߊOpW=mpT]Tz'UwꋈSր! xzab//T$L w/wIp]>Qݾ DIY7t%!c^X"k"1r+cfFl'v~vdIq^d:yRJ4˲HZyn+_D] ߸rn%g E0"!6!Krz3n>?WM#9ӠK⽈{Ϊ5p9+m1TzQ:B-VN]ua98˳ijEZRa8PlH"/!CR4_оr -쓝WA, 0+m#z7'a^ibҳt7LJ+LH>У.VSYBNU]SU8cn=t2D>C'RӟBuVԺ5y!WLho7kNVUع)%f~zԾo\ BUGCvzH.OT٫UWF+d*%g Oox;js4-ÆK3(CQ5^%T.A܇ٷmrzLeqRRTkWcN|UL.aA/sHv*% 9R>AAo0Gc"{Xnq5o;Q_돊;TJJ:_"^48L*qqdVEx]VCUh5u 'H 0I< Ɩe@ʧMct5]|'$ɪd?K7BS?2xT>*b:b|^8,[-)P 5 _Y-r/t*^ꎠUsR"F'Р[tS:7JXjЪDܐSx9mȖ4(QW>H7xv|cɧXȌ!>Ĕ ;\8s:9ڀ>>e҇ w=$u 2bfMܱ [,%ˊx-tʼn;ߢv&'Kѥ&lZҫ;7uO]?"SoױgakGsqzl<~ٞx&"ok~Wy@1jwzpZ55r yr%e!|HRDNM Xqa[窌B <^jlS⮂D(>"9j<7VtiYBP7L&rW Dx(jzvG>3cV+Q[)zkD'hr(:5a&Af Hy>I0-FlVOWK]'9BTJ Of͵d%J {z#vCɭAp|6w撍mU3H% DlIf&H<„r_hKz/$GS=1rD?t%!n_Y2 7Mqv͓.b5Zw>6 +疻7Z[ԍk{iUӐRZlCn6F(-s7pN1f/w`=KVȫw],jT30\'\i@ַq"[@ R5[j%+KݭdggVܰlT:ݞ^NtWs+y:yėבn3u|q1CC)EkB0yO)WF$g׾w"Qx{l|-β%*2ﺒ e,j>~ʆ^3U(@H,hjH: 1"au4+ګPi[|)E)#2nTN)*Tr!rV} ON+=teUuR <C1 dlW/-;]Sm=̺]C-쯳?7^uf~4ZRczUؐGlY Rk[+qjUR"vDa!]ؚ^|頳2;-Tr#>0nzxhW=boYV%5y9&EbJoi1dW1oUt8F"#H荹cmj|/HMyh닝vqx տz?YO7<]_ ,_:&* pF~V0O$>LO%fFШn{)_ƙ%d_)GL6y*Hopg }ʳfNjNVmc}EG)]#J q7S Of?c_K/ͥ0z'l1l(!XftE ̑1?M{8tTƖ6S~@(1IR4Pr,tm ƃZ ^UqlˬkSs~`q d7]~d~_ۇKubA09>!8"t3tʭNY?x[DɋuZkIyh%h[0A[^/%S1UB*<ҘλZd5 7-/0?A N$O3%@=AgHj)d{X6~)Fi7=I tG:> XmWeiF( lOuٚ:tw_v/S7jƋ)|i6Y׌ 0ՈI@8˧wg021[y0ɒ sK80)vWiJ+~w \Ak떜vc͑qoVhsnr[MƔ$S7ϋDF5}]nnD/ᅥBj :鷰r$I-Τ٠K j*Rt2,}y 8_XjT> ~P%].gRMG|tiFk~D'8EVd}%,,qB>`|ni V!R|o>b $U!-##20H`CH6]R'3w 4پhl/pMcFak|x?NE˸nh;)eDF{>J8TF!S-+jE)Z9?ٻ =X ')Zֳ.Z,|ΠPKz,ez,,Wb0LSL*M;,QO<*,^"|l]{:i&\~2:$:/Kx@@:V+ }HyCPgiG_g5.kfiXRYZL n78C > 2tP,9o5eo5ŭGܤ`bZxEQ88 Zgqg@eJLdf'O\'knd-|J#TrڙЅ3\ /\Ъ2_q;袀h/^PrQ两3]ْelEXs70֛B$-~9exc F_C &3PpQ׉d15c ož, $()hbLB$3;#y{\Dm ")}R-z KkAU#7NEJt{B`/fU}kU3GJ_}d] m;՟lD1Xs}_Kݲ;B`d]4@?2ړvD,2`&3X#;Tyxefce0]on>ݫ5 k-Kh;rdl}w l3=q""hݓ3}mz ׀4q*7v&S|IgYj$ލOu>; DkR rxirJIw=k:san)) Ch=60͇kjNu0<\CLdD窢Xk).F1mrѬm2cTyU/m͝0 z>6_(ηN HvWV{?e  YrTu-ެȹO=VTtzݷ-P``as*I}ko(яAB$O˫ȗ!dBqG؇H~g+3?tr%^C_NBe2}r4#ʰ5[9'Ή|=[MãS-R.݈/j׭ ENBܳ(l>*!fkGۈ<8X:CSXdwI}(o.:6uHr$ߺ*>.BR̗%5BxclŲuR{Q/I$^s5 Oglm'f2!m'Kg:gJI?oa{] ךkrxqotc $$o'3/G=^ɷ{MM=Te^0Đ` S-⓼=!>-m|$qbѽMApڬMd,0@A<=N_T FZDsWU;_.sPh@K~*oo#$odp'G©WWWq>'6V~\G_՚3>TZٺ|q>Q_ َLUYd6FL-QL68B)T@ͷ3S 6[hzHH=K_2Ƹݚx.~}D/fQ#MUf}*zB N'A[=jSU ئlL.swbgΗ׉CyD2aQ״&k/-D }oHp19Aְ O)9^Uzjn!d6wl cu[-2*#Q`([Kh50<ӽv9=@q-W=6hb546EX'l~"Vsc.h-9uB'[X*m~uaVlv[uGNKDP;n3s9zWPOQOaS$I*[R3 ]`EOÏt}Y`n-t SJ j6ǾzCa[nNʹƔ&n{EMkT9Kj΍0 >̔hqIi -B'rbLc΢~a~o9䴶{ha"dhtwѼʕ?2 .˽}Y;hE[P4ⓙ~ֿõP7)nas #C~c#rި}5:~KvLba_ՙ20}L@ld'PYXWī7t7fżnA8[Y'~/!ɒ`s5s3i+ $1A`M>e~Dsnk?i5'Rw8dw }/0ZjUEcүS?k.ߙ4+֏!6S[-îNRFGUn"|A&pRT!<4#T~4C}4&H:M?FYKmMk,=w\gL /.Z&ufy3\'oRc5W j+cַq4#.L2ȜNzcZ|?Oҳ;1hW 9 RWg0Xvv y?)i<]ذx .&Q"OTwTɘ.P0bSS 5EXy܇V|,J=ʐb,HJʠ5>}WWzYy$[etBXS/Jw8o'+>\0XLz12pQ|%s㉒pFfrԪ[}D0/ 7'}. ggIX;VB39o٩49Z/I8}|XrlEt#`"*^߹XΖ<_j :F|#-3F[O:{6ʊq?BYvk& =M䮦janAmY^r H/ZӷoYPz58HZja>IE/g,[6~]v@3vX6p >#N/⎘Kc=~y"r#-E8Jx+ysD:1@2@ҸƉ#HX;JLTݪ[Y/ne]I̯C bmNقQ\ U>9: 9V}ҩȠrfEr͘M9T#O1lJR+u&zb>`/LPo;pgP|]lZDN.ъQ=;i)|JEnRH(k;w<>1Gdԉ~7npN%CaGk,0eRIB^0w=,fk"DJ}BwM֧$ŰvQ3ç>0/aRôfOŤU6Bp Lu)*wņh- %;NtaFj yvAS VLs7cleN¶ȶẖ8V*hLoW`=YP%X 'jӪ`_qي2±D}8,YWHy؛3i!3r.Xq{c@XAJ;cտ+7%;u!$ w!s1aʑP!`/[F`U(3Ed Mpn:%Tߐ mȘe,WJp`E1-wߡ;h9tAC)W}vml$\mLe6 蓇H-ֹ RhFyNe5y~n^C/׏3qFHzs5ACEXQQ7!d=%+uJhb |pg9 \GplMoʛQ8C eMBrV &U=9Q6Rxd7HHeh J %FEw%c*L!qT::+0iHD*~K#ε}Pi/bg)smSCc-'R\Z>:yJf9Eث6"lc$a[jb*Ϙ&q=Z^[0~mpǍ .Ũ^EBx%{Edy8:l}R^rWhh3#p'椭v=^M,+}gϧ|,ҜozDiq-ʋ=ʣsU9 EvhF$g?Kp'p}1W.v_zCfT>]Z44AV陬6εzi4g؉ Kkd>\ _kl#[oO:t=cGBgK)~Pi}dWZث>D:<*K3*C8-yYzΰWVocO+gg`&䳖m_MsCl]mv:26&#^Bgbx4H\-BX%݁( nm n.7SЧo-5wf/F#ʒ*~%oCCƍ!HZM 6f>="]vXo c64Hr ⡠ Z|h+%mY}gϙAсv# @v]jyy*}}|"Vۗ +;!Z2q4}zmcM QY+5@!Pdv Z9t1-bnӞ=Aœ7\$uڈb}C9!,x83m~b"+ -a,@`r3lyIɺB#6],ॿ4NՌm J:Ⱥ LJtU ͨ2-{HyVPJD@y4ork#gT s*1(Xi>` z:Y[א{z1Ln퍗%D_ᰅq^,B/lymՖ%߀z!wٲ熨 EPCƬl)̄@D2ʨ(Mc -ILuBVLK5.-OH߫RmmHӎωm YC!PVK f Ȏf&ee*mX.% ^r.QVQX}dKfc>4egq^uצW` ilJA@;s031(}Tw~߄ 5mL$Rȭc=Ioג[?`5sROlfRuWqR.{^pR\=G*.s$j3{|> ZsƦFƺ8!98 ^nd6JF,glKb vXԋ9I㢋1#O_)Lksƨ>vjgoW/nj3r$Dr+5DS$^apHJÕ{KOhۤxF1&;'Onl^*cKy,O< 7Hte/ %Ekߕ.Lǽ?!]x}BG݊Ŧw p'0RٷZe6`CHx\zR|<>%EpH0JWNDždݐhުA5~??e? ~+'Pab* ğB~n{y]E] & &(S8L9J5d@)pg`*|HkëLjW[h5v3&RwvCf6¾!,9Xbpt=hUgn,|ՏH촹'5b^.ZFؘ}sBEEhv(OZ()nY\^/#w.+CA9Kn:ԠeȈo#q6*)݋>lJmume|lAI8/2'Nc- 2T=^M״=Nx>`%vkøAyChZ3SlHk/NxoۻNB%8Gb/sclS@[#o'Pl w7q|jfֺ̈́ḌC.Kx(P|b'@3p "RKbȱîylm{1 z[kr/6<֟Rԗ;i7ǓHF@5}@E/"0D><% 9SVb☚2=¤q\'qePЧ.Öc:3^.NHO)q],pFjk{&8m7nopYwy4"up',(f$TS^>v 1U&z;A7'\'q/m{Q7]V@A6cxo^xxFj&p)SBOyͱLQ!h Y_pm2HkD: NZ{jSCZhdQ ZV>+z%L \Ni 96z{ */&413E7kZ޵V8# P>}a-PT.ї iCBoƸFc]f/g 7ܚL ( Z╾Xrt6xoR@!<)H^5 \74(jW9Nغ8)71`  ZuwJO+Y!!"_ De.ĪY6H񗳝ɑ x&~D+8$ayGjxMiR@yXj2.80#K+. /숳V oIDCIHy|$k+~`v2wC²%.M K ,Y&F5Mghڹ Ѣx2Ĺhb^1kp (95)*$98u_\3; %Ȑ #*\C%w [NO3ڗq}>i0" /glP%ho"n9%d;6A cM^)\jOR>J_,zq*ܸ"P?kk.b9lwfnt9‚U<2ʜWNu~z1 P h@qd:`cBqD - c65\ܫݛq,@eW]8d }] BvW3XlUprz#SćI%YclWIsj-%- frM93DUrC3&Cؤ{wѾࣙo`X&s} LRkg{E=kM\+>gBT%,`7Nxr05J6)x6Ag}Y΅ff\}a׫HPd^de{a* i\*VsXloAodշK\E'Zr.~ Z*f[d4}UQ35Y|=|iM(NkF P8D]B_Jl]"?>{qj!u}%gI%.߸w9+x|"{bc+E^F%q2ij,yOOb .q;B]Xr 9xSC)7"!_ϙ#Dֵ qV2ѹٚGPxY΂}ȋio~RXAWx3L[m 5H"hAdJxi~Ё,PGbUyABY~ޘ5]+ɦFM*;i X2C֜d &Av~l۰cBS~KT_'uŨ(#,}j cھq2swr|'-k!S[]>cVj(ʦO܇Y}f]$m1.$lOsNVa"D m{"NI;cwRwz&gt $iicIMQ@/qZȇrگ':HCpP Qa k&ce4, ґ hjrLE JgeA]шi3JZ D\YE|iU_oEd؜iv=b9%2Glw߯u|*ȷ9,/lW9'/^KjޢC,h3dЗ 9s?.g)l=3)#\ !_~BT0WࢁIgjL13;S8o+0axB#5'H9D˹6bV 8yEQ$ ;K m[t4J)]TjѨOp;1THh7mUH̏DQ}ìN1r["У1|o\x\׃=VuI eٌYx$@ҼbW*G$iCNd\,:)X4.r3e2*^0.;zPA3wHegJO13>GS_-CLDaIcجcsqv\ԩ_&.q: = \1!9٢VF㮿irUg@jc.z}X#z7vo+qC*# s8i L4#eM'k;S=7H\Ru~w@˙8iNY+qqg25?F f!Y=޲!¸?!g?O|xzjꄋGxXIlu~q:%zQ L![4Χy#xb,()H(4o_nA VP]x3e]oFȡ~W?[|W[h〷 v$>?-EGH:&Qc)y/QΥK=VO\2SO$AJn&,34Ȼ~qA!mI+@4 A2wAAKH_.ty7`j mCگEtZw6t5(#u:ތlQéN ; j#FpiWP0j/|3;ïMSHl\BQ,.Hc89uijUZ`(9a}=#EǦ6dzRªtn_M |AcNm= D0֞۩2u^WMtN)V"W%yM|LcԆ3M[ zzr1B0RTEMn0*^%;C=ds_DK <.] Z9x.s`x0U f AZvMaQQ =zͶ+ſuƬ֛(-M'sMMX5~puФXE÷`~oJb,/+ (TQ?حIذG6S"l?%Y2ONp(8taL-/)c#Wяd$6YPzpOe}8T5=ދA3joF*ƒΆ׷HXC|[%QQݺ75 VycQfHz - 5`K~rtf/{w 4<\(JALz.GieX[˖)Za8Yrpo) y- 뵰ם4xd>8|TI(9\,rF2;;mE2nGH; AVP0cXMe'2D>_Ku JK}$?hsPY_A @#h;~;nndjnK=/ u P^!\_O20lٵD;|T|UCy] BT:G<ʱoT?ǩhDxzƍ^;Ӏ4v|GMpj./#{USBaT%c M|_pw;(&hd@$E/F]9O{Q VJ 9l =RhHCc͛26;_(>4ft0KK^>5c1)tzku}= -16 nnMȣlX&c%}J[8]&)a AH4va˒*&2f D<^%;D՟^P9 Z%|&]frjTVjX o`V!|ι̙>6^.ɉ| cqQp?UjRB'nEBɯoihAٙR2kK+dފ(gmN|cg:^ӉQyaWD0JA=Ϗ qӮyB)' l꽨wQ,7#JYnEbl}>&{m.oLy]yԽСv0V>MZsD1,9$dsfmxk=bP iWhͺx^ߠ\[ endstream endobj 181 0 obj << /Length1 1676 /Length2 10974 /Length3 0 /Length 12057 /Filter /FlateDecode >> stream xڍP.[p:{  0;=<@ hGv_^MZ>}JSM$qcbȨi 89y99tn?ht + "/ t{ݞԜ ew_K@)C'0@ W4:'go(9FK&)Gl Ԁn 猖@%_!Emܜ98<==فNPq&V' rA=@Vԁ? cGڂ]8Yy l >;C@Psn*@XOV_Wb;_޿!8--o0` v4UݼX@oCӳ?vZ<A:WK(͕Ba/Yb%' ,oݛ㏶CNNN!n\3? ܠ +qqn Og1Oy( `wM /*AB}-c;=O,π|?\wˀ/yw?-y^ݞg_y kjs]@V`w*w@ b%]^ +Mퟣ\9! M'W?筲~4\yi;vqP(ψV ?&qr{v<v7C$ 8 !7WA.oLϋ9Ϳ /_r=67}f_碜sAs7y 2xf/\ 37g*ꋥ;*7M @hK_,E:njH=v&v 1.A;a"2Ugl@RGW/%)|Zߴ%kݛ%j촣-N~*<$G%cӕ{poV{.Yw9U?X2eGk_},[^t9Hnl(̸?>_^M=Q*')5䎻YvyI҈w|Wz?MhhӢWhek*6>wV5X;_1}* ޷f|3(AuY4[-=|ZzJ.lYh 0/@\sbp:O~^Dq;%B;DJ$=d jcmV . 4VMT@ݿ+.X?U!ry #_x&maA+"[N%a8G.Hf%Y_p*ۦ12 An <C%+;iIJHA5 7o/b,Z~EwL95FDu!z8HHOJ tѾ6= rjLŊztǚ(g*\ihdRױ@aW"q|H]օ7 ꍍ襼RzTriץ1oʫJxޥT]džwjwe$^g!1EZC0O|l>P^8ŀ`=J&)6ALuy{j:WG/lf 괞hn\"!Ot/w4, Aw7 j>j똾/"kTk)?`@JވSsMqV{ ZsBdy槽fa"˼ @Kb/h%U4LOG;5b8Ml[Q{]X[&Twk +ͭۏCMa6a)ɸjS~Qfk9pvP9>j$~[}7I#K./;)Eg+%]CAɏC`K]cd(jj.D_HMsvXV,d,f˯˄%FFM9XZloIGDv,/L@/wP-^QXdLE!6%kn\ _†V!Hx8ISuJl1 `/"?2V\SUx}b+)?ySnV#lNy*ʅJC2;ClI7cUr3#kz 푰q$0CjTuF;9k[-lREqtb|AԷ= SML2ٟشM8y(jCr{~D?v y/R+Qk9~d}.p~oꝋhj D+(UӵkkPcyewoѠ B›oޕSN]q8b=JX{ۥg加Y+Bݔn.d}"Ii₶B(66HȮ k*//؍dl֤nW*(//D<(dglX)Tfx$_L?R ȝMiBrk>dgQYx-IJL@ENE s8ƹ s慺0KxCOa+d#15";.t*6h:l&?p}YSn|d]hb1+p]uhJOu1YVsU"w(ֱ˨jEa]@zƾ㌆DF~,R3!eMAhw5x+H,YEƤƹ*5{VxwyuI3lj1%DUV/4iS:jo.Ɓw *{_o6>Ԓ܂oz|! ? e؝]QhF)"} Wu*$՜l5d{ 3nijf_=VnEb Q8n_Tk]m 'Ж@<>2~!<5H _d.c;`c1~b$܋uWm%p)a&5ݑ%l1ZR%q1D&[CCA)-{ZCc`P],^QG(rjڠW6 Yn{~mΧ8B5ρVhhBȞ$|_BuZKD[)d`,)< ޤsX!P0@^mr8bĠ:_ISz`Gn҈"s!6NKmwpvo{-&EwZU}f/Us}2$P5 ÎYffSgzP eVm\t$]ڏ #G!1hZmf#l.HC!  `ȊS}`Y h3=ёYxFAhגB@q)ο_Qp~B9`Z6S" #&YBލFxn|웜~g?oE͙Dh ORt;ʛ&8YR2Lh1rˌ;4זG[_]m H)ɉ3ҕ7 tg}A>=ʁ~&A[lYkAeA\ 鸕BQ]W f"eD->:Rt<ߧ%t.TSr5fcWi} RFf%;Z4"/F`y]U^kYޏazwb5=`A`)/K:))yx7cݿ*=y@&K_-+lA#/e~O2ˉjxl;;/mDob_ťY80ɢ^ Y:`g+︟1klNW; Փ>h,]lt`3FSxhڎp nnB(rO,6tOvyr,L߬%T⍳ٺpeyKӛѻrl劾aI=L%;6c"J"|A62<HD *RLEkCUн/D+֙qܐKK'*5jMD˕Ac5':άb̙LCcrGM./`bz] FQ86`8%s!*{c"`an&^H+z\,l”3[>&O+YĞ7b|rMVLT1J<=-*Nb"B-Q;1FuQ z"(1ݘgթDWyJIRӘD澐0'׿tNHv ܿ{r{A1ΕKs:^PʪzBV٦ DᨉFGCeQ\q9x'_N RyL}{ax!!/%L-6 o6/,4 !%UЉ\lu @ljW5YDCL0'4 v;ȵ. ᜺oZӸ]aBey3.a̲I ߙaΉ(Y˜OZ%MB?ҨDS|>?mm-%COjZRgFAӍZ2 iM+"89*|T̢U:up}pbjBȍWy~IqZQGL2>eʟ3RW%%ۣ%&GCeOo6Qe8 rD( od :bNܴ!eKG%j9=NL۔ijDb6Km}5(?-]ug$2ݜí'͜l802w!µc ̬s6h 5j"=<5ܙՇn0a,r2?|Ps)9+FRxBA_DGff-G(2\O ~Zû2F"o;d0j26Lq_66!d[gZa`.PjnԜḖ/Klz8ˍc kfRW:*J&KOr+,A~ Q16wwAmj6*C2)?~ f0>bR%s3$y4 }K˜J/. ީJlDW%vf!'Q3:D^Ħ<90V[ \x$dWk6Tv]$[+8yovqj7.hk$zLJCA#_7#`|am49IH&wWjBW'ܜHE+ۓ%2Oj^SJufeR,"a6}Rt*cQza۹ø( :7c7;A.`.؞Rcq( p ewK)8V \(:fn9GQ _Ԁ2Wea|rIXִ=R0)xb)}Mhp(y5bX&i :λ' 0s];]vszz$-i\O~ +`FWE)G@D#rC5f7Q[ƥ["K Xké\/ֻnYI- S]TTNlٌt !b1Jf}aa{N~mojӤwǂ2yJl\ʤ`^YNqvVKg4h8͊y6Y,hLD]eGЕ A*_Es$lox'Ƨ{LV9%cGȔM0u6">ymqlxI]x: %q/qkolw ~5Ap4rؙjd8OjR$mԆLmLwjpb}#'6$ǃyoan#CQ vն*dGPM|a>J?։ײ}&W=ugKWSA%&2f<2KSs=eC|,m/vj 6]|pYv/jGa9!%LR_d [5Sf+h\"&O6OGn9 s "G|--ĝ"#5T~:π~02N|O!2*1FeNX[ƛ+zLcA$Hy(T`l:!=eHy.Pk#;l7=ZjrʨN?3c.B5RF&O'-eX&7[2ffمF{%sX-xM'F>4vRfל ɚz<:Wє] Hֿ)cWݓo4Fh -| ȱm* >͑;a!F0@d3_YB,ʴ!pDE96O s.xGxFt1aOvw'QjjbCTa;K8F6Q-VAK&Co~oJ-Vݐz@$+q5CU E..}uzZ%EX|QۀֻTL[[*7a^y]׊.+}ӆ DC)iIc d&۟)|]B*z$|E*ŰiJ2{+-,%T{U5̽NG޼bh/.%gKdxKyZ,|fWr5vw΍ڋEq3F >ic{R&aPj֞:*z-sˋK33~& 6 ,$bm%z3W%`g^kwMVLRv7kf2QGu&":%,ViÁa;AN!qơL 2J{^V};Zmz 99޻¬✗ B o_fOz.ipN '#wð_uiFH+gNX67yS_7s!48WU(=Ş ! irLNa"uc oqtUH<=pѷ7vy(w(Z_ea;o|`(p_"bG EI+c83 *'@*?!A}ZB""!ȿU"E8'o;XE`OФ;6X\ qI.~qylySz6%F7fuH L|Ҿg",qc<}|eyD,)^v|>N[4ۻUs|WcGtb5 A%a)V/@rV`3q;~;VM\cXSޠץ(z@2*O)IlM}̯Eq($SO"O/dvvRxhzd. J!(}{G6wT-QЧs[UJjy$Tp$)/CM z,Wö^EVX=rD]!|Fęe&h)Oa:~.ߘg,` .J}y?G5LUջJ?\-]gyj7|9랑)M5g1W1#^ŧ-XKH}вo 2,#FWRyIķQ{ 1eE iÃp'O 8Y鴧BĚOʐTkx>M Dᕬǡ1~a0~mzA07,7A#f(4(vUr V5?E ƾTcԊV7:74a7ȏ / tA.kJtwޗ6#2`bJrTEdVqs2etTʃR|IIllg_qmL@uci0Ļ219cBoYs>/w&nA jzbqAg)$#poȯ!NakRmzcUvi.qq]WzZZUc4M}iyūZy C'|bl4?]0,,i0yŝ]^ 7׺^"0}}כ3*#R NN_cliʑVq_Rz׼ZL$ iu>[oسێBj)Qg/g?m-QPI!F.f!--zVuy .uX{o:!r9PU՚ ?qOLؑ"[Up/⪳wsB_{=o90CDs eUFv5qTB}drնЇRq4A5@9xI wW8jIk?4كJԃ h@ZRRj쮲dH_]PaïΈhnUFqH;$5͚of KSru4GjfFvKN ٙ w$tAĥ(+LV ?v!A(wjFL$NJ} pLSabIN-cSɆmTzȻ7e,ey;7&u.[ >Nq@n;B+Ƥ ,s{$ivmMU}p"loEIu&!x@F1/ !KTrXB΂N4Y14|tyu}zq"Bzs;)i$n_abgĔjagU sdsOdOC>=a91/3ۙtMxr\^ endstream endobj 183 0 obj << /Length1 1979 /Length2 14474 /Length3 0 /Length 15682 /Filter /FlateDecode >> stream xڍP /Vhww+ ,[q(-}7sd&=z&!!S0Ev4 AiE)z==-==# 9  PM&gf( H؛ lFzzm8Bz C4-@l E [9ۀM@n@`` `YLo `BsYq9::Y҂my) ;h42@Fwk$%_ E &0-m\- 6Eq)/c @p{dJdi 0"RvNv=K? mozz s=7?K:?[--6faKCA@6@;}f`GK #m[)[Bۼ,l5d`BG%g+J?o=ZFomAFW[= o"!4Y"M 4 IF?>i1liGL'$*AwU~vҰ2hY L#[67^ ƒ1 Y ?O,#+oE"2Y̝xcHvZ]i!j޶A4̬A" '/%WcA@9- @@Oto;f`vؾ1Om7]cda9#b2-!O.h-vo.F`?Ε@'//bcЉt 7dAo~ f?O @_E4@f0m ̀o?ro z'33|K|+4C [oL&o iDoUY %śW˿oX a/VͿ[F3:;Gogb/Vÿ[%Ǜӿ[?+@' ؀ϴ¯Lߑf{"0î %SV@N!ck[b('|U&:á=dk.1iB$6tʾ(7i]m)Y-ȏP8vv&$HfoS-_m/GcDY6z !@VW) {xcIaHr&?or}!E/\[cb'jURԨUdږ3jmL[Qf{Ř-t(7/s]iB1#6tak(2L,ɍLH~A!2̥s?G8˿hˢD&@N̕ @Fcj&seD!O>h ujEYM7Fϯj 䄌S;n3k6U5@d-*vmUsV9{t*;ߝ,Q n^L~m|H%{[.+ `t*_?`fmɬhf^m;l#0qG!N]pFץކe|LjPMgde|AvQkB;klW6ŵ? /خDkFN= #j0vQTGs`a XZ )ɛ8Q#CO%OE_6vQ)Rzەv`|(Df)InЧ*K!P*2ZJ=O`w=,: B$@9-0bb/ܼsSfԦ"o?y߯PZs,9aP &N%D{g独m=.~m@1ZԚi1Pu @TЊ=TG얳'ew6fT״]?5*_(g&-̜'֜vlubPgU8bWHVlPj-ҸB3%۸M]G+u?q ΛLNדP#u|tv$JeT1G<+??|wQ!0)\sF|()B%mo2jMc7Vs)%ꘊwï>Cd~ʍuLBCm,Cv>VE_P VO#FǥIm֫O~5K~،Y:{*Orq q[ٻ8kr<хN!Mvy?ќ fYwY.੘uroR[ Аs,u7 {$IL$kg-{&u#Ż'^3 3c[rTaGƗß?/9٨u#e?fjlv }1cs{"9:!&Epː^ s ʭR>._bP=Z.`'=19;LFG#ݲJ#0~-0-Kxu2OL&YS]p [)$h bͦ#JSZK[%h)I~S7x`G#6(V LO )-W)4lѤO`W@/xfx})|zJHW+01jl6Kך[nnDB mED~Ԟi=NUaS|/lI=hXOF\N'}MtXA]0vs;!"&.-&}R7)(]覓|=OoXj?wJ2"ʷ7$4u4sUdD)KBzxA5v u h)~}I#A#u2K̴J8tՃWLtaCB`Cд!,<~;2$Jb)hf;`!J:(ߛc:KTWGTH*WZY= VӱXYK9|H95j [֧Ä]-R~U߳ vY{S],WBCC;*7nbO1vs@]U6DW{w7b,7[_/Iz4me}0D}s"TsJFI]QMd8tɧZ=a_aMdm,B]S_&Rt`, )~p B[{a5d_3Mʃ teU}X%FCEp 9x.6 c nϣG`< 4ƹ2a i;?b|Yp?m ?8.69K:DLd* 3 {\ńa 1Eۀ&Q -*'V#=y-tB&_H%4=#8ICM1ӒnZ Њz&&Y]Vg_nNzOF\~scgN!50-lܚ@dKvqHRUI7߁|*ɿͺn'u~׳FhjE b/b'o n"CO#pf`q{W& ;Y~2Dӵs'0ȫLR#yOFNձl6b,&]UlT 2'yGmMZc,ZHQ=R\ {4,cI<>ׄgYpe_lАj6pyI*<_Qd44 pHg~ű[XQ*#g vM+v.l'9dG󛹰7\_1RHBLV]}X86n7%eKv4#M3Q{iSvd![CDv9(oY~rZIǜ+ KLPWRoASM4OG"j?3uU8|zf&k ~)FdxcAJ"̜)(kIm@-1*m7m%CR[{s'=B@*řHvb0ަ!8ehqAg+J8Hdu}FPP-jcze[@S P}/pĻ0rc1ze1/g $h5niZu-2Qkn5D:1O4\"K-)7w˲,_Edetߎ ;D)KQ\#zWX%%ء}*W⚦0w,S}JjMpUi\dVËHSz}KQ?&53|FCfN>pu%-(d)bD `߁w1DX`4 $b7 2-=I o={( p@ToaMU̹jͱaeb+ܟAgQ*Y3' 7Kvmo5?`<#|&H e6`6n48}St↓6]p-IW4C-cA 2;5 Ցu9 JxGV49_({yhCBHn܅L^cL;`<'/8l-""@<'LoG0|R QޓuPT/ۣ_GIvgTqCVP,Oa+01%vr+i.*\>nA ~7'Ht ~əs <X*';^=O6$$=&N砉W#)߇kwd\geC]u5pdn6hx . UJ8pƪ)1qʖh9E$ wYSl5:*M_NR6>o6&,Y;]H!FWg"/%H TVZ2lncŎyezF0F}1qEE ?^P/k Q~/7E$_=QHi y&NĚ+B~6ṿ괕mV0cY%GL׵8 Pnϻ%ZX~9d]26}bVꌸNNpC^ ,ceߜmMsl5hvPc"-LBp=fZK"m7jhlv(W-h0i!*PFHㅰ%=:߈4BuBiy2gQ E,Jw1|yƉf#:Yeǥр #P8)|FH SOhgXӝ Cu *I96'bڼ?pdHu .kĩ[dR0f .sXU+QY¡;a"E΋\wTH{aM˓1' J=:)UJдdk/\ u4|Ȫkﲋ!;֣5:Q .L( c]·W`,K3?gyөҾHD \zk|#:^=:}jbRi.yd%Ȅ|v2g7|BK 40:-[F9Cs qu5 j 4V' mɄ8'Xվ~_A'RWԳT{cT%OǨlKte rp`2(I^. )ȁ0[PkC&RˍL>}}hiúKd}i߻ &E֣@(qTX hk9Fhk$En K#vq}oo%;VYBݼ8YXě # 0ux*<ʏkf&ŗ+5n'$h i˙vkcY[ESA}~D BǝZ}nu)I+N`Ъ9 *ujCC[ӶY+uj"g#jU _\y 0N%DWVq8cbCQT6Rrd/x)uĹ;-N0|!Thb7J:E`O>R\b-KL cA A,^󪑗w0 }In#vk4SďNk3P-kw ,:|,wjT=]sbe62ڦ[[<gHSoQ! cYJ .tmmn;xI![D̖ğETJ ղi86e[aqeHeXWv!3iP}x+s8u`WE]S<)4,x9͛()`Lw~:i$9PʕV.X8FvV{>,%zI(|;MЉԫJD)7,ƖϨ%6uKyXC` YTMOڅ@S \3Lb~ו_=Wn$Jka!Sk{K6Qf(Wq89u&Ro| Z(7-2JhAqU rL gKOu/^ۈ`4`t. ?nڙn/bS!&Fz@b̒=9o,9e|SQO)chx>7MPC;s|"@DSAԺ mQ$5 Z߳02t/9JBқucfOoq+.K[g|{w'ԙ9Y43߬}s8+@F> k>cyjب 3V!(E#{W>VXȵx@ вJ^0C\ԵL7Zן!13q$F1R*ƌIB1ISVP`6TvF0{X01(iV6~ҳweRU8Wu94IWq{-~ԡ8KW!ERY7F+`Z*Þ4o:X8\_QX*lL-̫FKk&'9#Nj]S;gS%{!OCL׭JsQ98I_o3s`pIjqo SDpxD@M:@*\iHgw[_RFj]gYO1P{ŒL0׻C <um}JR=*ȝ8%Y`w &M0Ae݆w D̮PPS/ňG噇i`5$ŏyQx=hѰ[aTOG30L\лn Q$϶<` <iyrPG~F}߸9+ց3=2J5 6JЦ@x𥣬wssbS` 1)vq.Ng[|ǿ} HƢ]^db9:Kpw3MARHкGA)vDu~1%}u'M jY.f$b*A@_QH<*poʵ,B%P7Tp&PN>,5|sJZa*x%]vGn+.@4;gtt7 <Ϋ*D<[Fb G16j7^9DGIav="쩏 UVLNą QSR{ʨkqZ)e.0@M "zI(v}]c3'i9vr̵u(]/ygPw9_3Bs+AUܑJ)\B3fr6wbQ+ @@9%"v|^( izI|)Sbw/*gU; eĜ#:K ?=nr)Ҟ.&͉@a\Nr3w'tSԨc\@*22O܍G"Nrmi^5=Ѩr<ƖwWeԳNvФR EJw-mhv`}lr'1+Bsa =zɼZnYٍf )(Nbn@4FjL_Ixt;F.f%b Acwѯ}餔k2%`^޻9ԈbI_Nנ4)bd^ùBeI=]]<,[+4'®lQyՂ6њoHu1&:MMd3ȿz9SXLnYD`bspyMk BI-.CuxO*pE6">`D|>\cΎ!3kT׮X٧z[W?,O<qD|.z0hlA㲥0:^gtv%#vt|Q65)l >EGtHG`  q:d'ݯwgR:Gљ 1]J!t[pvlՍ^nI1npΐjp4cl6Ssxxѧ&wBQ&~?*fLHtw8vS۴ʒ%²-׈!4GMR7jٷ0z{%C3~b[ 󥰭Ů_+t7J3}b3xpAuڂ ~5x m`(ч_+$n/90%)퍕a2{]'t"hkik C\,WT_02f Z ,N;ԔM*1aM(aUN˴}s%9emHm$!d©Pxx$uSbM]޿~U??@wM>Q,7-ՙ~W*ED|>u"WiX\% RB@E ಜ:QyL2Q6X|2 Y*W׷ Y{4×"f;te>mDr_R LJAi׆jQSr 8Q͘'J7^ Л*0W*X~Q2^gbӲ{(g/A/2LV@J.JEi4 M@x{ne×R-w endstream endobj 185 0 obj << /Length1 1676 /Length2 9268 /Length3 0 /Length 10337 /Filter /FlateDecode >> stream xڍveTk6%HP0t(Hw 34 1ttw R JJtHwHׇ~ߏoZ<׽㾯}FM] 5B`\@ap Z0;ȿt5A3{I`Te@@Pga4 P(B . RPGOgkK+c̙\BBl$! 2fhhBͭ!0 stwwٻp@-E0+~ PCieeKjs9C;ks"W0Pu8EV{{\\{@͡ OkK*@_D q= dm2{$.P{CsgkG ݯ.9yhsAU3q=99b[l#+DAo֣ _% q@<̭8%tvr2?uX<񵶀<{ +O#t..0XZ; ?`|!ϛP;SSK_OOqKJB=@;7K/@j c Ws X*GCL4|pE$jg[yy+qCT]_S [Wz Gi qevլaVeYY;@Ԡ.ֿ;?Y3}N\y*`9n>~|7q8zpr8@aK,迎VH e~U r8!@nipZ@APi/|.1/}Tp?fr>fr8aǍㄹCp?v| /|N?c!M{@?x@gԼi wg>pE_@Bb[BΛ{&VZmJQ>$\&ZVH A>쀣0Tc`Y|IjήgM>fП`{I4MugY:軪0@4&(4CaQtj[2DVÌ\D@mڪx|[A;SY%?:zguOIҲӇCUEG&YOc٠YX(g:ojJ($W>TjF7brW>X.~S?I)TRl?@KQt†QUs%0Їu)cpS?Y-CfG:lyβ ϐ1.=:* rO" ƣ3ۤyT̐vl\B띰.-#̞ yxfN_<[D+0SYŶƑg wq^ KSxNtD>G#DeX$OP <|hygѳ2_sxIM=EE뽞q3ۉRюr2:w̔fI-6wWh({PS䋹~VEQ8ۍM/݅d+|+C^R)w|o= +?. U]0O?slK T OKnuƾ4fZHG54 b4 qzą`Vx7d"R'E&oRxE5B9~V)U&鞼LIApeeJQ jS1ZۅvҽNP>/aQBc9n2`~5-D9-V/(րNC6&W=>D dF!ۺq| I~P]e)mrWy ÕSw )g+nU™&O\}Q : W2#EygBeSs[z^c^Y3$i=,CmYocNEiE*w̄fdiV;TK5_Q-$4L1и|{c\eM qݓYm+KX EȊإxU{ a{]0MfLIKyD| yHܧtSFIщt ϑ#B ;؃oُen3+a_j֞O-pšk};ƚ06pL܂ۺT\&m嗟V+ٺٻk\u514B}'ʌ$7L5ua{r!Rt2}$(174 X~2MLV~=Y h9o{ج &C}5lV3$2 HCW&FNfSe~.m )`9lhp=[:{67bj+T5z|F]\Q,ޒ[G]'! he$/.nhJL|gAK,[ZV4Wg P?x:oF̊Qe/ >h ҞDļ{/n gkUS(UFnvwW&?ޒ3S竛ɰ)`"q8fi]?D z/jSU8 MK:;M4FI=Fz`V('IP{@Z$~s:yG:/yحIzG&F`b@a@<&kt$׍=/)/l(,>``7Q0^V7}b$i=˛IKq%-O>ӛX{x kRσ__ Awj?ITk|q_Tux0JXc%Ao +.OAnԁٍ>] a!Eӱh>d1VL)vzަ^TojS-ڹDoۋɴ [)jIeiCw'gĽmy%:+U=g57KVNL" ۬m7$MXLWpょTwZpHJtNROU_4,nɢ>9-6'>k~t٩l|*Z:~3B54bʰ`i)iXiA*g)7xxb=m5~5-}tiͶӛ52 e}IwaX4n_^hݿ#*ّ  :"3L[`~[~^i-p]ӈIioV?8> |?mGv3%,#.KZAzQTRpuNS2qFOH7$.-$.VʃZOT'ެBcAyreCnѳNW\G?Ҿ X*E`.(;&Zsu)$} e-b*$NF.j#IpNxe{^ު1wMquZZ=QOn w@izT!PzH,tV8Vd,DfjkG0+%<!*T Ɉ&VTlwwsENxцly&(}Cb^~F<<6^=tg,4Ql|G3X׈Z^c'XOn ^mXQ<ƜB+V62T MpGGpMې3w~q54X}0N=Fy!f@yiVxDwҘJd.=䭹P!oAw=  \A|zהLf?~]VyKC>`}$ f*P!|쀎;LD%LkRJIN"jZPsNgHe;H"kz),m{V|y%\XοK͘d+=É-Z q RxZGqZS%F8TQ^/cn/!E_ |LXZ6*CGI؎j^2Ovm{1L >l~nJ̙xX⠮x7oh49Ā%2n^#K73[!h_ }{Üo:ǬlʍDHyI QÔ(/GtpQ@9}Ex,V?f{; J#}$JZ.yC łm5;] Iq ǁQ>fXqh,fKӁ[K%J}ȼ<n$WUֺwqfP k ǪЇ;t O$ :nqDN57XyjxH-ͪbK5$]zGu0oJ.NFU楷A} *s{ICG*[2x=G·l|o"z^!n"ǩZ`ͨzg^埌_+xL6c H ,[D֣cΔ5Eo-gv Gv~׌̌F3S%)E~KzU )\@ف.]};O'MtTh&u93rBxj֎o xr01(5. 0Įh5̺j_^ iAAqkk- X% /գ5JrĆBPCh'>O`@G͊,aDiV`qƹ$ ghv;t(n޽ľ62OɵFz"a*G7y4XA >5sIS,IgqrDSL i8-K)FZCTߔ7Rot%L޾:5SV5(wF7^ ws>vE?/H$xBwF\ xugm[+s~MEI|u([x,eQcy܇ GuN̰e:S4FO /C?f[`JŨ:0 @mbMĢy"FjD)lIO8)գX򒄶8W㭥o˳UŇ^OB_M6f$+[|`܅i˗1⍬u!c 'mdnngV+9ie ?cj΋&0d͡V:2PI{н^ls2ô#>(B]9[Bg@Ft;2'5.12F?Q7DZKBO F?`df$'r֑j8Ѫd4vIlMPܞx}4ҞBy3=?*ޝ' MiP\&~рxN94OFH 0Xyd /}6t>&_t5l߻z4|{wiBoNOe+$'×4KD8^WbUgΌ0zl8a ,Ӱ=?x-WͅJx-m @9 ; ,;ZE؂Z?hS kHUڠ}Uu g#.; { x$1,z 10X]b>2ګ?zbmJ0{N;?vhVKmbjDFuBשּׁY0h@`>-5N,>}W,lPQWbqO)_RQrUwUK; P'e#$% Ƃ7?Ջeie;{)]4\LT>l݉dͥ:QVjVSNd\ݩalG HG s31!ij;bwԕNd꯲o 8J+hRWz2K0>tտsK-7], #K FZvtTL~O^#ӫN037`k>%sO&N#I `vGt[ ctwRwuU}}Fu^ȢɊov/ztЉWd50H4Nmbzi!y%-ť^ItRą$Ql2X"_>:7; 7Id96zW迊cڵq0p f%mr19Va`e&1VW@ OeyW̽bݤˑz1 KuӰ}^  wifJ7z~7 /u:Y){Y,if/Eto;mV)Hj1DYbL /٫grRR:~NxBp2ê|op^+ۀelF6 1Vaƺ~CZ k-T}M+{Jlt=-mtd5%4bAltd{JHCӐEzKB_iX>Ery Φh6YFK=hىH trujog^ۺŵzRS \Z &Z]qw\OI4 [Lyc}'(8TU:c*UPRg%{X:[9jp~04<3<9Z#LI]ބ3J/U,aDd&$چf+3&{ 4ZHxiD8"D3'K# 4F/yoEgeRL3wu*FWX{nc/ M {g:MgЂizY%uFPv>}ࡇl̊Rvտ^A$^Vf>b\!˯܁x@QdKA<ۍ^ @l'*h9WN,Z5t5 vdW]Aۇ~H`c`S0}ZɝSIT{1BvIyXNaW,=Ĥ՚իAidB2}}S4.5VTn`M՚, R1 )ppI(wӑNfV8N׷8Yy% 6_{_+#HW/`H.ʘϔ~;Ag>nE^!%:+|&p:eP \sy.&HcEvcm(\s dX%kuL gOw[mH|ZmL%/ endstream endobj 187 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 189 0 obj << /Length1 1387 /Length2 5972 /Length3 0 /Length 6922 /Filter /FlateDecode >> stream xڍxT6"H-  3 ) 4ҭtIH{y}k֚y}_w}]{f 2@!1B@Y( b$\\p ꎆPu0Xꡐ{8@TRVTJ2Q5'C!h.U; #Pv $@qb+A b|&+"% rE ^p{B!_#A? pL&( ` 8DcC<;[` 0p" Qn P0#!! yu@CNg>4A _3Jfu$D Eb$SC}s.H ~p1Cz@`&PFRRB}zD~0qv6cgsC`1pAyBwh:"@` G;; ƞ;` Oד ao#Pgj-g9UTP?!1$ *** 3!FP-{Ke.o?J73X+JH Ap PX- jKzPV HG,De5P!v5~ GB Qh+2 AcjuՑ`$$ ww + (Vo2D( 61C:XM&P3+T{[P7L27˅9 kVfZ&\ZNꍒpq?}*~T]%2{PR?#]bF4ęjijck"ɂ~qzG}5xԢ$sXֲLlJv~ʩU9L?Guӳk;~MKέtqbnݼ(*f*\E6 a1gw^-(|^ny+ym+ŹJ7`ٞ۳ب-qʜ_]S3ύ 47lД$3;o.NoJ5cJ6\9herB3&T ࣅkjF)kVou}%Mpp?#d_ss'ްpb5|(5,Ўу<ؓq'yʵQ)v߱cI='u[!àl?GX!!^Ec]uHؽ+ܝ`7ۭzeU<2/eIN@c!bHa'XBQg`ךqS U7Món4-5,"}x!= ?|4|료icY-D0RqDUUԻKCC+U;/KQZ~$ ;8%YdVxR?&I> `(XդHVz$a{(m^+ k0E6ՑU&7&ïid9fKZ_FƊJt}sh1J]d M:$'qNyJf(Nj .3ɥYϳ~>825b;~|dC%H_kD7sIXYd7] .Wύ.po^zD(KeHS-x"2LW_f׌q؈ E (M 94󞷨%cIQǽ5׷;#~3w͌3TД -LOkS/̐:6Ew|RfIB*DlAg']ÏPfwjMȇچ9 ajQ|]507tܿYAUvqIy-M;Q3uoc+` 7{:p\#o]hI9upYgוw+;}7z;  ?}L3wכo<]f|XQu18`uK5_u(@̣b+S>)(*=3o낄ӯvkg!t7 !Q'mGc$"B'J[L W}`)0):qX^@̌2iV.z *0 yU .q0^/XCnIrs//9YL Visz'S%q<`%܍wFz_<=`gګ3W&&p7g `7vb5",ͺetrޒ6ucqK{sj{AdO28X*pIo=v)@\|Gkvūy4_ؼ"mgNۅutqᴹ[E5lUŷHS::.s¨YFF4r g,;4ƥ~L)S%u"wi,pՉ;ՙKzj z7J_ ?C k#]X#bR1WFܡQIs^Jm*{y2fb6#l 7zɻR.P1@}3>h97WLBfw J`>J24)).~-n\9UtwvjQZ< *&(p8s ō%l[T|5S߲ o鵐׆=nyYoiƩم!GHD@yۄUTFXΛzF 03g9ɼJEWOmn(kU>[buM_ik 7d$$yƩQ>MKmȜIgi3"|kHWJ$YάS#:&|A UCSz w'Rb/~+NiZi`|"h>AIՊ t'%HSw乼y`ᗭ7(8T櫬-筄pt90[Iף-i M_Do4?㝙٬U&ɏ[q$Q:&=H#_젊Ȗˬ^i-J<|6oE7w740[ =q3 < JP TP6V|}*Skɬ.\I&2͋Utw\1#졔x4ۿ:3QGͲYܧ;dUzK %ٗ䗽,^#w7 f\Ʌcǽ]=PN&8ꑖ.nt`T w (HEq#dN, Ɛ'׵56e0) &f#>rg1UWOR .\ Jq,xB_gSu5+~5 8/g)#H3n33}IXBdԥj3 ~6G9"7PB<[FZr9`P1̑PDq6Y9zɑ1Y%&'vwp?DN(ޠ4Yk' Pd+gv<;B$9_/هBrgLT_c촆gSpyjunGpZ>g KWYhvMJ/C0ESEVǻ5?G\,d`iʱqLdCϖ|粈n⺍ikI<8+jZY ҏ\DZIp+GOUhBܻ:Tk{N7K q\w2OO7r&Oc|/ZL6@bp-̫n,Zî(=6a>` LW΍C <#墉ޛR ^nˮ= q[R_R$jΕ*Wu+-QAFUuO ӽ(b hZ"&{0 gOK|x áԌR9aO!{JbHqǎ)#칃YD'IUIWj:lDo"aYJ^6".G_l)=+dyNT4]$%nڴm8Y5,_Ѥ)N|hł˔Sg{p%y è5oU>J?͖K[KvxGArHT Xkw#=cП]aA; Cws۩ʔ|SB~(K(nߊ2%>RqK\i2j)Cd95פkL=P!x3^GڨD~L<5=19b q3X{]qSރ$]$q!3W.DL[\|i!a :Ϲ KɈCKF>m~L9*\lJ^EG+|oٜx€hdN#gWw |)VܗKfgGi?JQX̨;x{#,^҈IV|LfB o2m$nP7e`ı`p̽Qӳ$EeWҵI2f9^`{B *diy[mBUsqbmyR4)~AW# 5IDcMF5Q٤|ٺdܢH%>iT`&;S-V8"AM;URJqb𸄒`~a[($t_Y\x> stream xڌP-Xpwnơqw\C`.! 33w{z^[֖9  ( rtcfgaH*ij8Y8hh4m#ѼڀteMJ G=#+`c!E9]h$AN.6Vn832wؘ:Lݬ (脬ܜXY===YL\Y@.V"LO7k:*l4$ ۘ].@8:@CNtXo&?K/"ǿMAN6VK{ @EZˍ `h7075)@Z\ ` \]l\Y\mf)G IW~m\{sv OG KG _eX;j98^c!Ylll|3en+/%/1_'\j}T7BbgXؘ̀V6Hb|.6^}6~q˷v)Xf\xUڡzp#H|YS;; YAS?B~NN FfO! Ô/ ypdGο܁]&rs܀f8\oZnpi@.p3g X+? 8&w`&%in_k 4GZ^ և}(Nɼ7!W85,xb&r(- fN/'4%M$J'J[뎐^`aqAdH7Ӊ Z9cqN%λx1,[Vr/3T⯃5Ƒ1NC:<9Q,dD@ۙ0f#尸>vdES3^Q~s<"?kNpz5m9S0L.{ϪwZYOTa5hL^(|`<W/̌-8eM9t[fmMkl͙OJC[ʎ7z2d-Cu J)P]WVGsP, ﱶڻG8N_OAA 'tM*퐚0Qrba]dcA`|-{푧$n@2Ԏ[xUn ٲe?rphUώ4Lz쑉t< EOճ`P =_x cx85(d9ڔf@ 9M9q9 :4.V LwH 3 p&/@[>_ eFv:kϝ|W$[x-ȿdvQ[XR(-ތ,FUtZyCOuh7v *~ti{q߫/U0'SUdD5Rp>^_%?sa /K3GOm D E;;&_x~K+G&H#WfДM#Zm9:1? om‰plUFʘ`<(^z/_~yR3[nyc<'gt g\Gx?TE/H|nS̴~L4@r7e^wGV0˱ZO򵢔XN}_aG&cz'zõ&} ֻEk _htR®a"Fv,2%& y5sQdN{B*5=A#W#~U®RL Ҥ$ޤ=딽JRlXΡt>r.jMj U2d vȦ37%:l><Ը-B{6ۼ<O]\u@ȏ =&MwCPڅ?iTr/l,ݵqxѡTrpAX#MmxϩrL)âY9?w$&'VWd&s~ˢ 9nsDnzLS lnas"iI d!F7_@2߿E8Q q/N3 Ehh>fⲂʥM+0k&B0*Ʊ.[E(TLC[u,)iM;,[+\d :U$,1SPi4NݕW"xD|%dmjZ›ڮ ?&kJ>M.RU q[[$"A.A–=iҷCiѰ+,\ $!}̛;2BeZsch9*,ȨC3WaISm .F'Rn ay2͋dH\Hrݭ#7^tvul|glOV(ͿIMٻ _)K_I{";(R(6,1^4]m-Sy.BV?uk&5 Y Es˺n<\^lGٽ!Ys߷ Ly*^8OJ6Vh%̚dM0fp'B$.#ߘ^8 [iȩء#"%lfT2knj0 VP[:C#7[M^I=TBR~š(Q|J*!cQ S&+mSMiFpP1J)%'g]h;Xk_rJ,t W]eo/4xπŧAV0p_4 4M'"C"&,qJ;tJR 8|7o옇.~O*QePRg@~`) v$ʳs4 gqC04FUv!92LaǶmy=hܷzqi) WS) .~.X2w4.BtUV2F} ^GpFA so_ImMl%KٖetyMͨ{u/ݕ7 HqGb` įIH?|u|W>\ϯZrX&jx&LSE ngFېT5w(e_|i,TEԡݕ?G 8'f {:'f3wY$#^B3qyD%:s*<P&sPݍd퐸|V1r2L/cJ&2ǥI3_x)$F;!GXVQ@dxMH -alzB.rARP[ ?RPt"-L FC-Ah]B2mVl"edG Q4\1G$4[b<.Mv~67'lNgHj^.{Ȇ ϡgsx1`MzhZS3\2>q<ġȎh=Iɫw5)l3.ĮY5P}3ޣ(ssFB̥S֕01ESN!#,O_eCL~h6gd,]vWTu0Sn <05R pvIBg,á7=.5}dce7b%Ň" dbjW~0}a]~U@lOPtԅgg^5L dt wj'tML%j7ɬϏP(GX.&n> 82N)UR L35)d;NkZ=H/8zcջIE1Ϫh+!5@r o W m4c7OlIjSki<ѕ"i WB \ )Bܚ3Fө* ޜ -̉Ab^K$h3I fEk!~ck8 7oXiHa}07ܛŀ*'Y>.aE%N1gS|!'zr2ZO>TT=&z[#mo 3K;WL5͟dC,~}\J 3[q0C}@&̴acGE̬>tfϴ5y # ,ߜD\vmg.YnOaPwy~/^&'6SD|zDbHe=1l#W"KR{mK䐕RID[ Ӎ3@,8ݭ9}O1a(õ}D (Mɷ_*s 4 ĎWmo ڮ+I}O?;z^8?G̲]E/0^IZ$Qm(F*C 9sDSNv{vXf`H6=n,@T㬎b?roX~9g ?3 g߳cdV,|qzSL>g5PD# x^-ݻSʝiºR1^(󊛂^Uve:x{a"\?5]>܆U`AEPf58g 3zirW|vxL򾘶Z-WwMi!I zFOYb H7|gbaՈ‘2N=ʬq.*&1JZduP<12!Ј$` \7_.g_R+{mNzD޺Tܷ.6. 7Nһ͉}&o(@2Zs4L.}pxaCzGauo֪ì=*k%~~M-DwSb.BkG=֡G-t{;1 Z@ZW͒.DWMBn뫺ҍ&La᯦ǬnjD4 &2}.NK"۲j|Zq?:T31&Ey7j*Ѝ;%CĻyhꗱyDǞ;{_W+BDZciB,(Ru?*B0UAcRl+pc,VHl>l =TtK5f|OAQƵY5Tp7l**5췧{2%Z4Y6Rl/ri463Vg dly`J{:)T\V:&O+8uڰȂzf©D*>0447iQ?M|fh魗 lڅmmE5$]f_c–7Y h޲10z*A0h]yZ3&tZU’5 +5QF`c 1H;N1ٹ\79)cOX'6]I)̂D~f<Ǭ=ENf&LHW|p3sO5Sc: 7Wv6Y\z>[)[X`& aRed4RgUX\M@H7{=,s[Dի{kN} eyֈ 𤓲c85b'hB |&ٍ}S1;~"lJXVZ=>)}GU<{dYԵif bڤI<4HOO +TЦLՕ=BuT}FTgPQ;}-%~5|$63xfh{ʽmX)68ʊ3&_F}5_'uad fϡ8`azRm~Yr*F [UcݱEm|j4qVz.;"Sh?FnjiCs XOZK[fQB?^ TVzfzӘ3q,/aH8}inSbn:, gxVV+O:v#quo- Y$Tۧtu#ﲫPLt 2!l`pg9]_76?;t>`"rTؿ/1]o̧,-E{MjiK Uq s3$:i Ő1L#e~B._km߫(Éen۾ݐ$deAQF#i4|}Cv6zhBn Q8;p\d]Л&⾎b+;u]fhp6(#;d1SXuPg,D):m-k ZBVn`8[< T ;,9;^Hr@z/SC~Ƽ5~AHْ{!O߀dőyMM]3 ϽMc]-BX^gi}=lZoz#{oG.%Vs/ +r %X|@m\@+ Bm9C0nt/E+m,%эKb8 ͆}ssCG>8'/zF(AqFn(]Tj<^낮ߜ^[@Vx(h aER?$dBe p$ MC3(f:Y@nh*{nEܛ]wLr1ʁFr>ݐGeX,O/cR^?B&2t?rijQ+Pެw{:2a9^@ 4WUoʹF~!;4S&搮ƳArY@G\?ɃO!Vb$ݢ4n`:4klƊDٖ6~n`Lh n#`j}E#)[Pm+F@ͱ~b,  fKw1bul)IיGp=%+,26"r_&j> 뚌6~bș[3pDsǟڄ>fi"w !7yn#C%c#+=]|]ԟ ^Ƅwj.T(3/J{ϔ_$>ĂNT-h;XW{#'G k&'St~!:LǾ 27J /PpJSZ78k%҃<j 2 U>MTҫgf\ADq1<~̉=kf+M͖ pstk;,6CW_t{" pmI ,լz** 6}fVmZEfeРHzSQ}E CzоEH#?5zmd5c>d::尌SRذ%lW~~OdYY{bs5z A6G!E5P(Z;ƯX4gBD3ksAف?+X ?C)Vͣ, 03!62HwC3FB@u5",1<(PA/vLNE5JἨDױ|:,֞޸jw*4]w5*ͻGG%Z{^ ^|+ݽ{Š@jL +UdK,hm,-*CM1bA1)~C;O4ڛPO|w^ן{pAd1+MZbNr>Tfze+t|prC+8+ưܼRQ7uwb6Ѡ ]ڇxFbL??ηz" ~_2OB&G(8PߜLF 6vmgFl$ϥ".Ei Zŭwc\hwF{}ʯpqmܲ%m"±;XXwܫKM$Gd 3}~-^p}2֒>pDr B2@`Z?Un_ "ѨU;{h#3}̬jzR֯ꀶuMI=2ǑNT?Bl=i&PE NbU~BCΞ])[BT"ۀQcB^Ԟ4hlTz ,̨40ڊJiMu택 C Ǭ)m)2 k+mDg"~bB.i{[0ݞ:fU,kQWYGG2$87Lh͊+p>>cӉ?gm@Cˆ-Dy!1xdNP3N]TDϣ!wsa&K DNML #\u3KE*0PC=7AEs׼]$'H?TfJ&9e/y,'v2Q5IcGh=K/NPI#~| $rI>StFn0CĬ+8\zbpt{±$:d3i?txEVⷑ5dz w< RovHxrst>H#% Sq6IoX&4&T2cجìcp{xأF$.f =e>$y]J{Ÿ-tEC3y82ڼGSU.*ބuh9w7(yѫMi|xٌOx  ϥ%#r;9dTC jvO{QR;cuJ>Vvv](gm{]$iDŽ6W&7L\` O#O>(v{OC]0Bqmg.GA{lxje ǝ 8=vB9Lu6*F(؆9 򅭰Y|F_E Arr}x }JiAN(8Yҩjț=0O8` ۯGS55Ƭp=8l`wH3[ʓ5"Lkv\,E34;UBWy lqC6̒{{ܳ*_Kl뙄eTVb)@oi\Io[a 3($P!:ۋ8΃TjxPwK_WX9F EB)1 Lvu6c`q>ceEtL\.*?|Yv~,7 q{&(J'7QQMwnCm\2Ul5-w7NdÈ^gx !%WQ馦 }.dkzEؑ#2}_5r(.onr)eWҧμ]b=HdךX:rmA t І=vO஦}h }Z"%.UeβʼnޚA(A\oXػL)T%S;H+CK 8pP7Qs0#Q/[u[^Dx|Rv-7Z'4m]= :CFP a3idhQ@ Vj][8RE?5-nNhcljR%n3D774(4YJ+{&9'cSq>1'CۭrYOisXP۴3k6 PgF=bA~ϥZ&ߏO⥇+)&17'}K(y琩țlHC|XgAEtBzw #:&k@<]~xM-B% 5 fgr]TЮ<$iPx`hN9KΖ>{r:Qy#݉|V+[tdVY*5gGn-lӴBӸ.] z)G% >rM.NZd`&]g{!8IX2fxq{`ڸ6qk7lA,ʶO_d,T4$'#TpauCbXZdeJՑ7<`紮mʩ}.0SOӐ:k` %t{~,@~|+A:BAW4܏fќ?CY_n|h H7^ \VyŚü|y=SKdKp&I:%Vk`bو\36 IM,^.5)cS)B\^79];bIZ#;beĕ|ng-J\ NύTn1V]+^W+8_(oZlڽmyYGXj$9U9Lԝ:+`)^X{ѱ{]x`^-X'*WRK-lk N_&YKmW&B| ~.NsB˥\qG`vqN==} *tyƮiil [*8&Lō:.]WI7kZl"/~8Dx}ɲxɌEiED hx7tDqRzQfhsk 5{, 4r7zpQ%LuM ѩCeiaڂaOH , $((r$EfqPYdzπQUȝu:G+;΂DG-!5%(ΊcW1?5us%]ȏ4'jR_Xh^M:q~">_a c7 6 VV t$963[2< $i:H:[TEsn~}|}SJHCTmE!Iz5)/Ϙi1sG 2v6x!TG(5y;$ Z]Aj}x Mubmȇ{ŬWHA'I0Jz=);XE5oT4ĘKfӮ6spEvU~nN*VgacRU,U(jsFiW4Y}RsGM4[;'[kycx_&Mf'OOu,oq3{jkD[~m`-ipr4ؙ\C Lcdp+kaU%NKzn1&ʙ8L@qb=n'6$(P*S։o @ =ݘ'8Y6pިZ63cbҕ$iTVARBc.,0mt.=sCf 3?1Ϡ{G8RlP=Vɣo='Wr~މ G@A֕ KRKOH,~s2i9( V A߲fǡ~;gZ/:OOJ+X`UL{Ay&VsѐǠiWo%g$j[qz* f|F}x厼 yF4ǣԵC8^bݢF[K[dGcAI&}CA-n1Eє_̈́ r*[يBC|ߥOjs2xHHV_탴-pļV`ovJ"pf4DV[K9 M/~Uri"{xe *A7FM& ulƓ4G&5'~& 穊f{x"hD"SǫGWW1K-ypƂ )Dq>U^+,6;:4xCKJ%(n5N N[3{)*}&n=FrkU^es=$ cd`Ы /P!PҘ&Kt7{uᤰCpD#1W,n, +m$s"Gr o:泗鴣b)6d~Al¹j(( L"P{ɳc$,苬uIa.kbhDK uJR9fYeؒOF0B,#1FsHIQoo| ] zEpvi-EEX3:5>.K󴉟[l􈎀WSVX9t3SS<,vƘ?^Pt~3fJ/"U[fhxU3FLjY(kѳ3$CW*&qHSl4 w(qSuG]%ʤefsp yD#\}F4vAmi1. vUb<ׯYl-ITU3THÏ W~( }##"# l@=Se9eGݱ’AV/[6H!0}Wj+PS9'ÍSeJC `I)Sk |_伦lHH|06>yQ;%G{uQ?}ボY/tdƙTXY֌.R3CWZ6R Onp MLȣZ,oduw`31Ӂ`uY )J2G_OEr7)4x;$|g$Qdc碝V >=u%͸P39(,^S>!\Trd|h`xm_ޭI ,rEOsJ*3uk$>ofOIz5C%ǃ4*@e&k*nw>3R66M!W(c54%UP-(r[d4to  .$tb^)0=viL?C#AlhdthSfiUgPFGWΘ*^&y@ لMOIxeH6S,<*z%m%V .+Hp<7 ^Qb, ML9$N\B0EԉD6b"&> stream xڌPX\ ww ָ;5hp'8wwwKp nェ{׶Ӕ*¦@ {;zf&*7RRlio/Q' H&fHY<̜ hd7 ߞRvf|n?߫Ao,y{ԿG\yt7D%$jcOoȺ_vkke倦r1?et*ZX9X1K;w t2ΠySO37cX9FNNFL1bagx1]@.Pv>3{'??D!o `b7Q`#o `@FA\(oU#PFjZ  :4M' 3h,;L#?Rf?NH;mf.-kQ{nhbo2aCbk;?wR3an؀_>z&wwL %& K_ iփj/ ߱YA\mu$fM K JylK:V{r), `<@<Uhj;yn!DA!fP)~rrZwA.ΠdgA~z],k];?8;. k@A=Az 7gPO@~5qut 4AXY7 n&p1?GC#kũ 6:3p^8ymmWN;ɋIK=lXgg_ 3? O ҫ {8zXCwIS:r(c>6P:CiCW,}Zn@^B N& 8n\=IѦ!*w*wj8'DݴVQn+{z}D x5QhH}!8b_{#M(jW=E~>N:Aq'~T`-M p(ݵY[ #a5-%U jP?uP%pV$]U1\!.Sp5N_tQ "^V˜!>r0*lYE$ѩ LhR,W^lޚ>\){QƷ2d}w ] ;37Ɔ3ܭup!H5Lg7ŗ#D9P:.7[#$׆DT򐠤IB8 #G:G p= tLb<~z*z&h#YߞNszPeVoiG8ml3Y D&Jȳ~;PxgFUEn1<~@Ʈ -[t8;T\%|!oR6I_6hiR/|ӽX#=>{~;cA=tû;iޭ1GHYAyRYV~9ۦ!Bt ,Z#_(mr /uOm%V<<];Fsb.>aljzpCg Q`麧Su?$Eo¹:e J"+ #=/RS~*_QE#-T<$P ](N 1ϓ`XX36lbj dx+QeIϓ#GVqzFKB|}_ıWڶD Xƽ{nb-1cbj>\Ys$z ]ex1G`aotB40Cp5cޗ¢M$awP*>ԸK޽TjDon ư-Mi4rpA݁pf9osIDP/<$W 12~÷CHD#Q?ccJT'r{XIw4E=_bv4Ryƌ0xb,h7,Vr-Nυ<ֽȂP)} Bb9&?/BZ7sqRlRn6l{)s˩`H;/Χ^<̵wpZ ˴W{hĹ)8JϊJ2n՛1AC.\{&-/Mne*?+arȷ c=eVX*{>}UWjR` u]Gz?@3B\:מb O."E*4jyEK1H'l5TK5R]E/1 {pBI~!  ~D`8Q*2N8oL,V_{ \~^EINXDtaI "A˗u[V 'ztL ("5cpKw:0cӮnB=sE0atLo{VWKAGB~ޥ2݊hlŒhۓYYg_f1Sױ br}1,?'J]j8(ղO9BOlO{\>"!i'AEXqE/7ņ ckɭAK'#XY W+};SX$ 0H_a=3OϨ+M: fwG,^z+m~辏l64 eivezilKV11O >f~3Y_91gFZ9Mz0bǤ;wiyeV9 7Ctu` 6`D4Jly'rXKw BR~= 7H\~Ls!Sh*%Uz(j 9KQT/c_ȶ@mmAVz}eA%/=}kq4l+kP\\5Ъ; !`8n3>Xm\3ޕV7@:hv ,3[R ]Qe11e=,H3UAeYF-N8̦+ ϩ0ُ>?Bp{Q| Q$C_V6]/+bz o]8U983G[!IHSվHRu?0h@9SL?%9oW۝urݘ~lD7F[}B32~J2 5}[%rk 4.]Fdz:flc ǥcͱݷTcʿk7ЈHVⅺ9}{.5 f/WO A?onZ:14&%{ +Uj̰~)=A&ܟPX2H9cH!RR{7_+%ݜ'[+ M#}8Gm讲pqkD"\`T aݳbu[kSuG*VOG*  J>p1[_:'ǻz k$rA#yQn ߜ='_Ym* !5z5o Wj懺Oj~H*y{ͯT7PoK {X~=ldC0A@|~_JŽ|h{b )4Y9K@ kMRI!b z$3C洪i-&EB)>o k{[B$!IUX7! "&HxBL9d^dֳ7߀yYyT&7VG՝ǵ> O6eazEP/Yk$h:\vjt#f:_}瑉 #΄٢" kZ4 8avq UnEO(L("PDZ(HzT`X"DsT 8]  Q<2Sk_[v2d"z"5{+=gNtQMK%ҬO>{[qpב}P2Zn5.?kWlҙnyںgB~G_KԐ9҂\y(oت*bMAu<'{?wjɖ@m|M@:b ^ǒX.}cX3Q[gnA/_m$ wCmg!,U~6JO;>2W[^Mh1*pib^;v[][H(N!ohxV|_B&x.@)v `ĸM{k<4 $)Ѩ!3S292 ΰשeؓN@ې8N9=e YN&c/Җ*@xoh'vQ9!3_h?*M>B 3I$iY*6bp۔<ad;pLh?}<ԽHR&>PJ8/%O5{3*`fe]LPIJft^7Sd&谤Ty1ͷuYeMJ#`_( N|uk#F0~% 7ٚ@5)A 9,.qd}$Q"&3>Mxqf,rze׬wa,ut {N. F~&ӷKTcD„K!{F@ K0AO&&hYg_hݛH&m(0-AfAڝ@|*ug$u4Ӹ&MՇe@76Ҹs;e5/h"eJ/Ԅ6# { c6ڟc-tc$uY_eF6\//&d\ݶX^"Wusb ||Ym+SƼɵI$H)".U%~ E&-t3e>0M?ףU5åqk1$4k)%qMuW7  Ɨl0s✏-fI1Џ~lufydoB4{3I4#^;g mEB럖%,%w@lg ? qPqX 'P톽 128O sġ^UN(OM_+怂U(}8K '6xKv'/ƑfS-\7٧nOY4/څ k%b_+B4t f]r/v TGtl%Չvͭ2v^;:`^?zHr{M+rԭX1[#nQ +@Z^ֹa';(`hK%s |' s҉֒Ꙃ02jfh 4+4{Ⱥ}X[~ &!hML#B27ʂRd; -pn۱~j^vĈQV.L@_%d ENNwڦ7௵uR^+xS- `l><yiR;S;3`0;}EJEqp̥#Œbo ;cCj>f,C{{2o,+-KۉM+ P‰Beb7d]vLh,eH f!Ul%Z6\Wv}Pc'$ˠTpeBHLO͊8B'%C2wRC 3~|=!vѻXc㶦#GcW.Ndc ^ТJ@ ra eG |4M'nP[xSMq/N*b\zxPr v]0( +2cݪee|M]3;TIцtb:<#V!oEH S4Q l\(*P>+8ķcfhD;'Gr eYx7窴JEk3Q+7׊G"I\ZwMO40¥x9Li?wJ+4AM@C>kh7`ð@W<ӊ k +s9ͨuËyyM ab Qps7nAl{x!}eg;#+fzJ/nw翯/$a56`UP o͇ƺO k`"h .E i~bGZEhA@ƘapEexv(+E*v_q,Gt*VH,o)p6؍b$q&C38Z7b7e7ciϠ]魒 |s mAY F+Z1-%2}3؅~":Kne"p+G`*õ q%T]"y8T_"uFѣP+ lx QUxq;x1)r^:Rْ ļ:`179&O!mdSIiCʧ?L&#TXˏW޲lke[F)h# &\wJVEȞڎ1/"sUIp4J&V=:#Y*,E;<٬Lyبd} j,{1MF,Uz.44gYYo&N4!lד ?i2PMHĘ(hApZѧ*=K}7''E:u+F^%ީ7Їjszf;B%Ġ45WnV V"ǹ#%I'1z;L{Q JIDw}|ry5 cPwdžߥ9,"xB8ZUJ_ܰBxs"ƝixW@&bqq1⒠mc9s~7)rF<p2 6{ɞ5%oJƆIKclbR9膤OQ8 [(/N<}noܝ)3up)Q9Y;Sަš) ݹDvx6g,-,cK닩NICP=Nlݢ[yiȂKZ E@ƣ+h| kt`SSs]uμZp7O"OH?f1QO 6C2KH/<Τz_ssjEcn737~rtӱGd:Y"BtJԆuvH|ٜ>kKTÍJŚi P=O>B;2'쥄W92$SS2ĥ,^@ġ[ic11Ey7j=sd ]TGҠ3g(:WyX,y<0%ymk|Ư\=Dl.!'P>\(TxûLa=0MϽ&\:dw8hůhc_"eXFb:jHx'cҊռѡ}ZYrmPV/7MyO߃wuj,T9/JuCҝ r"Ap!ٙfip2s H/QC박Xi(QR1IE{)gz=NGºevݲnRS֢*!Iop{9#lah9dMD"mɔwP]Ҵ1\Y2+ڔ]o.޷!#T-B|5 C#Kfcz$JLy46`>S%zt+h]pҦ_E-]<4}hۮO /UMf5?g2q9u7q[ó\" *A<Yc%˯y}54h}S2WyT@0PսV ?S*'MkH|xi *I&hs(NiR^{x'{R|{*du4 ApNHrрfKֈ6Y&B|دR487ԤRҠk[[w(hAh8]s!\:1QQjQ8kjGxA˘.oBmǘmo\m vUtUƉ8ͮZ!&Ai yuN_:|aa;d, .Nl3 u 3!$ƵҮyFa8rAQ E)qK=O[[o1*悺q;c`{lL=xrҡDS"'//~Zfj]Mh(Je4`@ ̮Bwm=-\")̋JsrM:Acη#ۥ`$F dka<[TڴwP#a t,b6iM0 I%茀s"U閜,)zs[Bmg ]Ga&bt㚉K$"P}"X( &&܁ELˌ M 9kk<P_BeTy2\)OIN6!/K`KneŅ=÷V|cwU{hn!`7G_K5QMf{ZUu᜺(;2'D^uxٻzG5Ql_>ga6 C>T;3lSԥ7H<D{& ]rF0*t6q8ZHd`#u,=5aD{b˜Xx22Tk,}*_v x\m?cmݷfP@;jl$w+@*<Нj=t_dG^DE@ b$kxEc>Ce($[-3Xzʓ%lx='}="7Q{!LĭPÎhңu1w!qœuDE̕CC&R׿*=%kӝn#\j&%ǨT;ɋCp wY )PkH1|)ZZ25~I'OjK9'f`WѼZOgh=ՀBZ?YTk*ah@&9$dnUH[!!1طbAWz6jVs;½)YG3eaa9|Vh:ըS! Jxg,;>GY{Mj9F0q;"#ugV}ÁI*q>QnZ>`F}ƬՌp:~bƑIy} hNTM HsDߊՃmģ8_9k9iWY`ZsNQtUG1g\-ٻy41>dz;Q%sTtP?ָؤ': ~LK=XMkIG9tJ2`463 ,kolDhF/_fe!FF풩vYk%}qnV"O+/f%m2@8OhΆ\ѭB3{fgm8 86.6ivHZ@j#9Uք}Җ)j!L7f*;|8 +s:qȃe}ǡEGd5-sNWF+xr/[pџ,K|7>:&s}Š]9pxڲĈ{?ZFsd#>InnO!rMв_7H*핷ף %LT3'$x5Iˌuhk\Tw;<LCh|]H7]¶'1^<6`G.T"#M4NUmԊP0^Mu"N% *S`c\AYwOqLy\ z+^0k JSiSvԌ6=}UhWO J>è.{(>_ h\̹ wn;8E'r/R3:D6N(:qCkUǘI^˺ka_Pr+PO.) GdH*?êcn&BۖLVB!"ZHŽޙ_%GehxSbgӄ#(Â?"Q dP[C \MzrnZ/ @k εXA:0L$q8w W95<۔MW[ꉑ@Uz?z|辉 4:pE.\3kj^|l9aPCDz ÂX.LNϛ`C$cXYJe+qH6*YrC}Ǖ ݃tƽ<תu# s~ $sJ:•ࡨk,a%;=cuqᵙb0+'>g<>8Vf5@Ġ` /G)WkEBPߘuK'ΐGd7-|{:J4x+ڒꌗ",d%=EBtAڙ`K`+, ~>!]Ξ=lݼ6g[mum 6]a.AUWIɸs< rF/I6_iY_++wBq9⴨^E۩4ukR-گak>kLja "$fշf$ݘЁ1C4]5)G>gHki'Ew\hy GkA7mFZ\T '''WNNx ӎt-Oaկ)Z3;ZK kǷߦQ"-"$-ѮD)y Ddn312W])0€M1,`dnsH9Mer Y]xgA5lq9԰6N[)ߵ^%5h(`Krwס 4[5e9MRM0aͲk1;7X}!^m5ԏm/1b rͮ@7EO^+5{J{I2vb֊}EM&&ֶbdeGu甚C]" LOCSQ1eLqxcM;[ _W w ,YcbOpV-4" w*ݒ~Z;h[^w? YOi6484EyYN>NNޏ)bU٪3m}D6|𛈣|a<_2Pއݖ ?r475)?xWd5^PMd+Z%iZ;>^A ̐s-=XBV=%Ver$p""vjk[Yz4[t[/map̭8)z&p02zӋfsd~ $ilXL^*m =@s=}u@)K.[=EQH!IԅOV,qwIbƨEq6wsԦFB38J& e1@Gf M=bD2&=pJ2؈֓ vlz<|mgHWi#8[/9kMilouèY "ڦlLasH^w(TIޚּ>R3ȰQܔwҁcM>DS_HݬLz :Rn4Gpe%Pb, :+^<qS2q+v-т-۲񚢓 enj'am=EL։}_WD ZLxVq^ xa:G^=oǕq8\"zWN-rD yd = ~/9ڡ#HۼQnZ{JߙUľ X1.+*\]hdM5ƾ|MGWip࣎h^}2S=*O /|Ъ'4n%9؜Dt^1*Fϕ8!Y\ T V pi1uqU9w fY:#w=<#^oXe,>w}KNseO%}lYUTGt{[Փ yeS2pwF *#ik&]>ïdy@ƗN2Kuf۔c*)3>]Ds ¯bGWdW/olX%v9o9U*Ʒm9q#yDmы;%N5\ N9/)ִc+پ\e\PtjָWM/; 3=,T hx"mƽ6^;{WFۛpH) Zס>"z|%`9ha'? fZlP@X.bNJ5՟+)}/ #O'k { '`9 ,[ 5Wp*Vw3p ɞM{ a^7iQy#nݑ`Ţ?no ֒LtѾimdOzz`k^DIEVR~[p4{e.6Pn?AcrEX*UiHo΢_ZY] Gᘃ @Yq _ϢH~{ei$R\HI׸GWPY^lCr.&)ܨKSDnПYST>0Jp5ICevV,1g mox%ث4-"QSq%M:XBt7GfJ ϱݗ7]OgJXk=梥ٗ66w%2dK}Jm~R"+ :> endobj 144 0 obj << /Type /ObjStm /N 68 /First 606 /Length 3282 /Filter /FlateDecode >> stream x[[O~ϯG"U[PZZ.> 4\Ϸl' -H`Ɨuֲ=.M&< WY"['*x$TTwPjQv"Ʉ N-*RIaD 5*ZCIђFIQZvjb( 6Ps𒙢.Hm$qE0q#Lr$P'ÍM2K 1@Ό!m%J4.M&lH%ŜJFbL;0ޥƕL."qʒxHhPpt&)@1%S)EMɒZ2MJ5adj2q4&`89;Pp TtD ~ )R#Rm^d.I(0Rdd+Γ'Wɓ' C(XĢhQ?:c%>M>uE|O~\/ہb4;G;쨘TqME̟Vߓ)4ߜ1c=n{4꣟ &m|-[Ʒ/ xv<;A9aOqOdX' ѧMMŒۡnYm{̏:lGꯋ\75t^'uKZcT](RAE ۥg!Rf]eKp5"*tr,E9 ֳTu3#T]BdT탊4Yb!.JԈ%J[Ԣ{G&i_QHl0 mRyews^(lŌqمy>'qW% e og0(A6K`iFe:&E>a\0.rtI;XiK_TnJ۬h.( lT7P6(b.ZR~~h e$`O ԥ14ͲOgERߋS@צ%J)Dg.KE~2fQ{z^вT94NuE `n` a0c-Q&ywh*clc#wi<':r DfgQ+[W*<+U@!y~!`@('"Ks ̑ZH./Mki?}3@O(H&_nZգ7] U6ZON"r|prAA눔 `kr U !x:2m|k(흽:%׆ an}P.Ʈ4\Qb>w֣Xu;Efu ?T֧rǸaFkݫÝgo`HU!P3Kz| yn"LQ @, 0_v d|׆bJsk~5`8߯|A>b\VϊdlxeˋѭPɫlse1Pa'p읍իMm&Jc७BUW'۱:β645WH6{pN#O7QPwP$NN2~}U'x0 HD#"uAm3xQkaNºE䧸ٕ$x2$?-󈎈*ż/\(3׹Isp?E|m@?Rd Eb1}2ڃ(G+V$Ur:gI}-Y\\XNJX{*7_k 2pK ₌ֱ#╥-7_]Z~h: M MDjN5W*;i<":0i11i'0 mjqӶۛztr Bg>.AQW NS6us%G(':}GPlkz{ mEz#<6ݬo qu1·rt,)c8lc+,tj<\}^ͼbKzCeSq8OTF8v q՟-PV5&нi _Wd6N!8?~,oq`Fb5T^;|wV~v".܁s ո^PLSd׶.$L )҅1S_$*AF`& ;CD\ndFPҿ6J;4T'ƣ^ofA9B~ {v endstream endobj 210 0 obj << /Type /XRef /Index [0 211] /Size 211 /W [1 3 1] /Root 208 0 R /Info 209 0 R /ID [ ] /Length 538 /Filter /FlateDecode >> stream x%IsLaܛhiI:-2t!BIC YBFiPVv+**{U>X 7:t32˙,yH%fY0󞡯^(>j%P%PYX2m @->Rii-,#6rXQVx` B^"ZxVRnƖC[I =P >' B蕕_Ɩ_S0 Z6 ;aH6(Vw|]Q(Ė aL6_ X8G`Bv?0 GeO*g?cwpURSpNލp>< 0p-d 55gQG^)g::sJQ¨^rd_s(j9pN:z#5Z̩7˾ů)]*DjFK қhK?FPR9R瑺L]TTrwn%_~EN|(S$e Ni| +MLik: endstream endobj startxref 200816 %%EOF readline-7.0/doc/readline.pdf000664 000436 000024 00001370725 12764101657 016301 0ustar00chetstaff000000 000000 %PDF-1.5 % 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 384 /Filter /FlateDecode >> stream xڍQK0_֘˵xCgL [٦tRDD ~&fӈ=oU r@Wϖ<Ts-;q\̴bRpUUT1Zt~utզi].'_SX-i}|ap/Z BPVq- +pYD94S(FĠ ZId`E挺 ddAz {tmĔB=^ufAy:?Gw=n|n:oA3x^ٱ$ endstream endobj 14 0 obj << /Length 752 /Filter /FlateDecode >> stream x}TKO0﯈zr$yB m/l%V r3J&"A.e\"7 !Bx B4IrqzqK,N/D3I IBQ'ݐbH־!$*YM@`z?.DCO4RC -¸ I^8^%yNC<@? o_r]S~XLQohVMB">%YU|#yՙŞwJwah ߇QL-],4SwNh=BtF %3PϢsZ4&rD5pF;ʳσqq[dQᡣyd_ws}{m #UNZO3uTG=oys\ J endstream endobj 62 0 obj << /Length 2605 /Filter /FlateDecode >> stream x]s۸+t)]%Hwv&ٶt6N;N/ms*QJN_e>Yu,#xVLR$-7o i9lNTIyvO9BŌcd;_=o9ۛwnNPpX3\!9տ aFdu8o/׷nA|ߌ/4e%RߎT02'ln5Kۙ߭}]ႄ#aILGƗr~ /N15LMR9̋$eOp瘟AdJqơ&O\0b0.bnA|o'uuܷ J|_M/D0;tSIKl4},1cz8h%G1  ЯMZH%J ݾUoY1tCG[ *(r><(r0Y\Vc3.%855#mEyz% &3u/ Pv&/%"EL| ռ`ƿ1O5i1yFR s (0Y BVҁP ?sAQ~n!qUݩ*@)/f^|Yq>`K$=,Jiyc8꤆I혼=Pzlpo$d5Dpͧ&Wn1cJvqkWW&cKo]DKURƎSuE f;-HSӳ~*ͰݏνojhzOk&Pc1A9BX cL :kaI2CawOz\E{Zr}dYCd.Gd5mvĄL,{b:k w+/TUA3P>|xWe#Vyp~!|<:\J)0f0t50YM gC]{}}9HS|8P}x|=jCOyKWͷ}N,)BY9&( 0]BVӱ@2`"n,Qo5_wM-\R:&fA7e &(F=AzTe{qHxiv - 5v!gf"d5E#( 4{OȆWM }IQQZEpБe}"iB3h@Ee7W6E\F#R+' <8N@é⨒$>vlk7;@5Ce4x3>4DkX@]m|VְhIP2T04VU&OW0VAs9I2LT66|K5%s;˾l<840] MVuc{OQCvHv\^O55Cmb{E Qj:hnvtm-h%_t"L,#$tFK>@]MHV`tu]OPu, FfF `È0T"X7!H?7:|A- ƙsf&j|r3 '<.$P.c .+tF @] XVښx@MNw6 3sj71C.SWW aAxɴh;XtV Bx+uZ~u6~VTQ|wN?#(F@]QVqT > stream xr0y /ETe+7a,&qΤRl7eM)C2]D_>ӭ$G"#< {6>OMA8(_&GgBD#5fב ixE%.tDZ'!i)LYO8"<q|2ɔ1_ McuOfqIv/HéRy[xctL#kWO;oC}$)')~x/!h\Ci>h&̷@# /GKYPf K+ҭּx=^8G4-/l+K-oGJ}|ˌv(6܇Mb[claZl;/;w' 6ܴw,V#)PPC`|}`t$a5Jx}_b0wg /0h""> :(-Hx+|u^&enb7iיqQ÷QXycv=o}@p gȷ IEIUf\w"wi=E8M^UO;>BiWg."ESxFjf=ܑς ۸2>&&}*KGhi[+>XZ/&` endstream endobj 10 0 obj << /Type /ObjStm /N 100 /First 829 /Length 1985 /Filter /FlateDecode >> stream xڵYMs9Ws ȪTc=355l[FR}lc=֩)|A\ QGEQqq10Ɗ (Hvm"a T ) |DJ.BÁ(CktMT;fL%q)$T 2A y R]P a` DTLtDrJ8P%a&Q('M )v@Tk]\fJ a ()PBB -`=0 *ևKt _ڪ5ʌfM(NXK mh a5 (n[OECE҈E&re2ASlC@NX°J6_Hk9S)hHܫ VOU,MyxP ‚0SKWN+b@&bWkS Fb0W4r4b /h4 ![z@'f  Cgf7_>-r6엛Ugly-u<_-^l?w w5ľC>{O]m#h"u5!?}=;];,?kA%)>fF4h(P$CI %J2d(P$CI""""""""rk5:W߿6/޷9â}Bf/P5KArϻ8uonkdpG zFKbHǤ Cхk,G+`t8~0]NK)`;*( F ODo=$t}D%ti":*H.b: IԊ)k1:J.𥊼|̇R)^4d|*>E:.ў/G|h%iĝe"7yTVw|1zÙ3L8s9h">Cõ qy\sh m0SN>jz7EX1Ή6SȆ.Dlޥ|2 _, ,BcUeo|$V˗QMPoedD|Mν}*$UKjY 6|L>s>._(^KZ*#4|T6Y9xr'Tp,GըM(VAh? }KZ'*`(1lP)GR) }RA`"G?4|iz4Vl޸PFi䢸ըA&rﲽGφj~#g{+q]~"{^VK[5UiY1&Tv4'W<F}+ׄn77Qgg_VJG.vilxt\>I"~TMrO'pU"婌23*0т?*.l?w&#YkINz$ߏx 7U6-:p/;yHK?Glb9_a}/J%n-OlycajY}Z/}|y  ZanAl.6 vnu6N?-V~q*7iqkλYoW$ endstream endobj 326 0 obj << /Length 3170 /Filter /FlateDecode >> stream xڭn_P 9}H (w-. Q=^khϜm"SWyte8̓j{xnwŋ{n 䛻Wyg̕<ʨ44vWx"Bi+eCLGQi*Nim{ިP\]obkUSvW Us-Y H3o8^k<ǡxcWۮ|YP PsW[\&,S IǧjzYȠ: #ж= b$[ ]5@&о/e8QI'Fmt~'Lq"ПXC>Nۡj~|U*;m]HB3Ǣ+Я}! ! /{&O6 HMAԧ%h^{o7SQ}ʮ,< eum ob24 +l]P])(ʆ5tJiġNcG*7D1H*وPY ΃P^#OU-7 إٔ%=貞 52fj$g5Χˡ`~, zlp-u[Kh!Go2&FRi_'|p.k!iD7؎=O‹j:N6&I)/ [w+ۍ1Ar f˿T[A;<s]4gNGYcx:LPQ\D!n-اբr$3Οmu)j&B[fQs<7GAhF>"7\]5@IQrR5+iy׽Qs}ތC+91Sׯ+"`qyE{Y5<4eImu|r"Mk  _s9nX"b_ر5\h;>z͞f!;~CD\qmzr3GW#;iZΙ8T-E: F^q: nJ.;J. snt$(lhy;㿢m4CJGZM]yv=5+KCaҩo0'y6m4݉%@ '4 8Ljݝy|CHW|=^aF 툗I1MuȒeT| ś;eMpB#I0r FnetP%&]PmI(EkRi4 Qaʮ1II8j{fҹanNlC^,%i (~QƼ|͝yz ̜ty1G(!ٔlZgdsg󺝤;e , .b?ct<΂Uvd|L:DgtFYr{sv]e]QDIۧhBT&%ʰJ'"{t"+rHs!%JǗxQ$>YM~v",Y|͢ n:E3k;*kbzg+goB`EqCofF_Nt2 Kx"~( Bڒfhqvzэcr}iF<GkPY`AŤPP5n~:Hv~[;F ' _Zԩ4v)_Ő&o=r|pLI"W0 z lM⋉#z#IָY2sR endstream endobj 334 0 obj << /Length 2143 /Filter /FlateDecode >> stream xڭYm۸_o+k(RoM^R-)ڢʒKw3,Yz+jD -VU)LM`ӊy9GJ~db?g=3z#">u24z]Q=7S?ͻa( og.h*_HEnnl21,i\T`h-uLwL5Fw&)e1鿮̽fuKD}Oh+i[S!e:lED'l/nK$/EuS9m_=;{zƽ3_EfKֈ?v cmXɖxЍށ-n|Q98f}W7d`%} a"uReܜ9<4S}M[kUȾMSAXPKNq?E /C Zc՚{]2f~!ht;gm?/æх^x8aaPjLK8vx%zbS?٬~`Px9Z[y]{9:؄h[ co (D~s /(K7+O}[6}Qmz-$U Kx\tXx`0ؗ14m>AСrP`o"daFcGdtYeM u2NPN"laH#E$bǽ2Laf-lҢMͬ Ӎ) .ᗼ~*ʒ<qe_A\n݂e  ] t$-^.q\o#J1޶i[k7cH):Z)2bijqط},&F˶] 'rb{l ANY7Rࡒ8t>B*$5f78_<=u|c_T-5&5Dz,0% j)SSUc(tS0X?q]' *P:& bEk<Nw?ʻxL垁3-#wJfݎ t3B c [x]_T6}4HH>-0Fu D 4=P4b[Sf&g23lgǞ1V.S"?2 ni%<JNvQb`o1 v}W\W2yխ;*U00 P4EJ=GW쎟kRA2* ^E=݋e 켈MVe4DEM6җwdb iV-Y$RyYtaFl&٣~" #gǩ1u9؀r8GQڛ妔o֎ P}@Q ֹkÈ$iQ*Ǯ[ߡ"kK endstream endobj 337 0 obj << /Length 2896 /Filter /FlateDecode >> stream xڍ]o6=b"*R˥(^ҞMDi%Cp9ڥvu3Yy۟ߤw<7Jb@̿ݿة4Z£D2.β,Ry^DٶҴGشwJE~~"_hJ>FUj+VL>VUR?shanE(;׾ST*T Ȼdߵ[]yebio^uU-x+3Nί"qRWռrp^?|G2hdg pM`; v,Eb%[,S}=6{!DE]FF0-U NEb|vg:4Ŵ:U&r'L'e c; YCVM7zB|n!]%Y9M8vX`ytqtot Fζ, s71KBiF-w{Q)Ƅ/fKu$HO/53#.Z̉#Yg{2U)-(Eў}qzؑ^_nffj)\#X1t*p's *gutJ +Aג`ɱaD=< ,Q8`C0e~F:M*Uy$&>fayzu5%nN ȲNlrRVcD'9HGp^׳Tda(œsP?ut#^8oc{$90\p?NLaȈ_&,>ug76g'$$GS%Ks0<,K]=X:2/!HZ]M24 $D3hɮ10 ̣'PI;-[|A!K> tvAt䵶DP;oUx1QⳔ~h +)ziW&*%bѩ2bEsCzTAkAej{>iϗC Ig IB c Bv[Z d-9u,I8b}NBnj Uؗ2"$X6 -eX׉Gz0T^nWfʘ,!圍R#?6T~Ny3fTF Gw\~[z!sc }Z%UW&clͯBt|F_v#%>ci= 6< qͤ>la(LS{nӘtM:[% i`?|ڄ TqV+UR//DY&JܮE0!jfIga\Sޕy.>}x*:'̼Ex 3RED)V5^TÛ8ؤtQaVqpD/NL3J"MiJ5[5l'%k#?$ _]{*wSE(|Jޔa`,m>rETDvzA3{I7^1_!c'^$b_AVnd/@X<ʂ{ѿMlu4&W7rқ_OTT8 (ܳfq66op" endstream endobj 342 0 obj << /Length 2638 /Filter /FlateDecode >> stream xڍَ_1@F4}v l`@8RK""#-RC{ =j7 қ2ɵKSlo7 |Tր`7iI捻7?Gw4~ZG16Ǫ_1a[u_Ί42_}8*|"o3&NaFǕ*^DX3WȢw-t7fNk7G@2s+DG!Z糫 G/+-p?ٱe7YN>2&Q q&J WL*G.X:`3V':v^qӱEܳ(rڀ6rD@^M%g*QD6X7n!2NXջm`Aa}E[3U38$ p6ú}P9u= )JMCZhi!oݮ:7#D)*t)q<_p0*޲!hw ׸Fw@XWRbThHBgh၁3c"8}ușG*P t§ވha>/p/gUFӲѸnւ@bM/0h6ì޺!Ut",`~dP [/h{nzoZLS r߰ Յy(Q%*,n;3vA50Q r."LvWe\>jo"5<֙zo +\eWKK(M6q@K7ͧ=P|`Hb;b\,ec͙ N [`61pNcY0~nY ޮEϽ ƊR]*g>+Ic m׻5^CDi}yB!1;xճSFMA\K_I_ Rw{7,g})m^;Z d.'[t'5pW6lj8ŪAOMu@Зv\=7B ]KraU-ጝ]z77D:z:< ^X*=1萾A6!"_7a#q:ĊY}h endstream endobj 345 0 obj << /Length 2134 /Filter /FlateDecode >> stream xڭYYF~>xH 8! 5$C!'~)rGuw_~bD h߄vtQo@/(;Qa˭W]&3}'w}]IP~K‹~~a>>|"sF%B'AS;48=6O~*YPXԛATz|–@ȑzLGsM^6Vh;{N=VvbjPe[J Sm`qtq\xf=eIWTb؟MuH QR6ؽ3(BF2qRBāӵb T1PݶauR<\QΣmq#}{>nrXF*bɪAD)V{Y\NRЫoa%Sc~n&hPmaPϧɴ'SY",No Ih o䳿%A4gݕ4=uE ʇYuFyT,5 ~q6qY)-{E*[z rrQ*.r|7U""dhH7`JSc`tZRVR]A T *5Jj6#UExʅ O3#gCK}IX+gh7_&`P?n +Lyx<͙͜>e (PE2x6( 8d--]g O:?}n38gD*eJG2WRw,8C%;E^$p+XV_A*S>ݐ{e&<2W| KnpY!kW 0j7X|G*IVc52RdK"AP,r.$h [ȃ Ү3~CI8\5Ћ0 1 zЌ搼 Cd:8ʩAJ\Ku#ki@߂guBXqNT\r&sNnNh[)D‹Y-YR^?'byWw|1řrV SVtE2Y.[6LX߼-:M=EGs]N EEkr[Yc1*btsqWɒm"Pqr*[Y6\ 7㖿s Ruf8XEƒ+Q5c=wD57P̀@}0Uv9 7kNqY#MC ɔ݂*rƵd` ][fJ{H4Cw Es^&E>ZHTԆqZQ+K4Dٱ[C| 0\;'xN.[tŜl 1u#z|-nЦKLEPUcFKKӄoضT f"l,Z,R+!+SP4 Bcg~9@>Jdt]UTUVA/8l1,yyړ'܄ cӲe)^3vZu͏*Q9KY,H2U˂?> stream xڝYݏ۸_o"U -Z(pݢZMĒ|/JW81I W=O=CuRa׾Kiu8<৿SBa*MVO5?ч=Onx֑clL}v /wG?gTT>YvHZb-2eR<I6,o'7%kG9NT[p1K?JwϪ2Lp>ɞܑiS@y-hH|9L|b]F8dDEEgYdO(kx `b':S$gr _NKnȓQљUE'|4{u!jêYuxqZŏ00؁v0B1#{ bE?9ۜ1r_鄛iV4{Yx$gl?L6aUۮe $i#Cպަ:ɔU wV6ncOG>˒,E2Ǜ 'Pki?4%b7]')7@51Xm] ; ~MjQd﹯]j(;LaYu-{os4I i'T8z6P=0 %R77GzާHpk2zK+cs4mr^Գ]Xg1i1gFaqUР1\9"]4kP1qn#|d\{uVHFB"΃,0%R@0qpa]̾S/4Uf/X6lH~=CoA:PظPƙ埥0I(({^x;; #@aшi},#y' -UFǑܸ9T`!ˀ?aa1uFƋf @9~Vڨ; Ђb@یq]9gws&8m[x j&- gQ.9w,(GVU0R2ͨ_~oVHa)G0wm) U=ǫ#%<%*~g`[%QI]gQ 䠆yz6+WK_Qj-r]?UW/n\ 0A>qŬ0B͙l5m_yJpF*%ZI&t 2GFhp>`6N/p'MY)Րt&Y 6t}ޚr7yJ~rUce;?9U? <~ C]8/B2(> stream xڭYێ6}@>f0Yl! n+dIQOwTVd:U.?+]uTPI=?)Bpw?lNQjpOp?}a}[׶9_q\poaB_}x7IJ=_抪4]V)rvG\|9CB#exήuMnbiE$tmRQj>UNJN yU%u7^dx\ a(>)ipjp I!ToL?H 3\=تr,U[?Z4@%/2RIav]=Do "R7^*p(^?WDIram4i)zRm7p CۼHpZ$qoTF&-V=.EC]~˵iA0+Lp(A5]#8f?~(:v _' ft1iA*QRfoIH%Z=.DbNmW@ƨ^w@b}zFI,P'TnU9Jb{|*-%:R}KU1-IG-YDx33qfS.pCRك1M&lቾDco)B%v׮s](ێWf=R,u"֎E`&4r ,k X:F!(7(sCg"#ՓΛNEyY kl4QYL#niAظ/÷fP'g#ۥh>"3GU=ӂFWGrd^RBkӵfA#iO9[?Wv = z 8oIVBi-` t KCI, kaQNŏI@:c%A(Aڴ[`o$:-VӁtMo+ m Gqy9ru)*ˬ6\H-m(>iPNqX+~qAݴd(f-lXkW<,UEV @k9 m'%ej),g)({ٛʹ7%5lrbXj`@gh  z[β; ,s-g ǥs:ܜzfsSgkSgfoE Xy6_1,ت׶ln_=MÀ_y@&.qB3i N|2T[>4%i5!@B@%ٚpPm K8F=v1_!3@HkфI L|A(Q=+j XpEڼ ͌/a8U5sN%q$)z[Qt6bؽ0GZܙ3Wɥx-xy|$)C~e:{q)d+, )~"H(-.HZ1L3{p=&wyDau77\ O)7(S42Eܕf/ኵ4h;\\~sʡrV#LipCΕ08kV eU{./I:wo펜\`;eyP>ˏ~!u\Bz "Ȧ;MPN)Msm^I˷6mu1j٫&dO \RfbdML$ӟEnV02' iCVp Zޝǀo[6pjҒ^ O}tS3?_,JkX[S+o}$yQR˧߃ΡUwAT<`.5#q(ZE*d|,}]1m [I5EwՍ;\7||B]^J!?ql;u#IAl_81Ijz|gQQq:!?pzZe]@Rc«)S@fRDCX*KEJVGi.)6%*Z>-KAhX13YnM[~/% d~9KV 5gguX#!yeFL&,-0%@ endstream endobj 191 0 obj << /Type /ObjStm /N 100 /First 864 /Length 1570 /Filter /FlateDecode >> stream xڭXrH}W(Y@Q8,̓D-$$u1%_px}tMB:+`&%YA_[j[A⑍9*1\Ҋq.QI5z5'a$*z@ 4qcHY&,ڢD(l 1-P܁ArT %*+!c(cQmxHN1Q*"$8/ IdI0!d-pIA|'hrv }<%G/d DrUW<]vMR&iKy߮:Ց/deyr>w 0>"Fst^g|$Z7Oj$}FdžOe葶 fu:=}qaV1~7F .a?eЖN]ۧ([;lei~6L8 yh%,yp8n6`w9m=S[XGI? &XPÁ WG`WŪL}\:w3]p QBVE@liT^0̍\0Mm &gE9e;EtEv5T&Õ4VU1ӸXH@C۷.YC4d+𺐎:g udO6]ۀϿx1 tZ,(ccImCw!9@C#)q|˻kxFڮjYn…?xuQQ~әH)ɻI9, O R&~KF)0:]m+hCQI#x{, Q8=ʾSITb@~č TO8P!}F,5fTօ}&T[pfT U]Һ?-kI8>&QQz^yQj?oCqXnZ4sEU4%0!}G]}3Mz`W9? endstream endobj 359 0 obj << /Length 2523 /Filter /FlateDecode >> stream xڝYɒWm؎!D+哭v$rX".%.3zg"S1?$Y``]Gjwɞ=BlDc̣;s#ZpluEƴΦuM^;4(v+ VzW~Olj$Yf̻bOMM<גk7WT7VP}*.yOΙT.1q~r{d’>Qpto00朋hYG '/Q6 Avlx]upfiM6p`>=*rTajhw!Y4sg<;c5eⳅףFxAiJ;Y!EF(-' M[aBaLlXQ"0Y`[Օ@a7rdr w4&3oO>xQ-Y1@֐M\һ⡬];W3F!>ԒbRc)s&ˇP뇧KeUѪϨj^4)?)/E 'Dv rWb> ۄgr˗{981oN@$ \|dϕ,_'6'=!g8V6q&ZG-\u;fa33]ia^ @) _ ^8_۠7L'Q6/d r ǑޝMcٹA9|.Sl UIp [c?5ޟc;Ϩ6kTn۫\Yc& Fqj%E_;w, vióij\Ai"*i46,Lfߎ!x&^/d`ZfN %e}":u3/J'q"t3=a_8{"2Q6e-TЧ?Q8Xf]p)y$A˛a+H5)zԡ6q\mAqOlAk<~&'=lcVVúghy'v#+!E2|^u!أm]Wp,DDߚ0\N?=Yzx;3t, mN,^:8Z/(/) _pnIf8:*IvaUfM P%`%pvo?3B6n|[rm^j[nDǟ} n*O5n S B A*OajpE`ex;[O6M6G˔qwUey,]!1pO0D&'@o'6R8I,IsvF.$4pw` 7gbޱ(sOA QLPv?b]Ե0iṳ=f'?x6ӅaL7*MXO(xфU3c_ylݺ8-*6$_/W-gx23ߓgus> nzrZ>i`_\7UjR!Kh-p?Ftk+Ly8_~Gʣtǵ#b%p$G3Ŗh@?DE'po?v.-#u\Oo"*>^INK$S|*5cTM N)LzbW%^Bŝ&B-էJo`*vIϧwUU42iiLN}B/یK-(Mt :Nd$)"lC ഉF@*ܷ dre&A+½ d^P Ȫ>G~<T~ʧZ%I\QxH‘yjo'sAE?h;-syjf'VgqmV.[}25c<.Lh/hsVL{S0 iU-kť5-3xX,"Z3kƝpwT'ضKjZi `U,P=Y W?aRvx=Txv1ur )A? bޅ`J_(PA[h"V n׎yLofmV5P#^it]pƇ~Z?Q"N.`UG$">LyO#9ukwp">|]2}^e?]! ?Aw endstream endobj 363 0 obj << /Length 2230 /Filter /FlateDecode >> stream xڭYYoF~_a Yd-Y`bl I2层bU_}U]2BC)&mc|_Eϟ>[Dq!vTʜFCT ~ڇZ'/]Әd\kYtkTi.b~a^>ĞبH\GBiki\>/`-jE"S?|~?)k:;^\]4iwىPItJiL;Bd^q@1a_8.BEyB hSy0itpvezs$`)D{̓ ]sv: N2ɖS[ ۾K$)>`0tZy '?v`ɴcsپ5-_%JL6]o8 kmWE ,)EPT:( tN`8ֶsM\ {DjkF?klx33~$p~/T,#%KgTp,[M@+A0{׎KU׻uhx򑜲PGy~/e- ,AhHōK9b4thKu"*dPÎ ԧ<`I`Vw}i3* O2~`/,0jɇ`*فb==ȱ_.x 7Q{;ʶJXn0=-iL~3lx$N@rҪ~~N=h`t%DXM'trn4!X"%=( Ȕ_K3 (հ>@,CP^l.6 %b 4Sded#+1H`oE:{r4ܝ?X!%5#(L/P*u=wL A@|0K[8oUu{uwh@FفgG07+3̲QZ:/UA,֧ƶ:ȗD:%3j <>^"u ]ҙRnAE _OD"4級-o \] wI!p0&mӕ8hx:4` t:gshL*( *'3׸j|abE!:.CP=p {l \ @YVLW 2Plz7#) "^r >5µꪎ"+|O)"ATٛo6uy$7LnD^ ÿ$f`ǫڀ}ʮ<8w3 [ 7b ܪLCXqy23K̢Y11 vp  v!.؛~]6u 8%I5rcdLdԭ"UA2R nkSnR}4)YLܝ`ZS>gs{qLǻr-A&sÒ҅sBܯz0"(ANTJKbm+9 x(8{RE#=0@ tҜ6 jCg?(CˈwUƅI&2B}nQ^#;MWn[z#1H[?"'‚#.FbXh8r,CD_Ն$ \WqoF`Oh+d>g hB\nt~a]2n -6,i)RKhe[3O!.7Rr+Ot12iuG8t,16̑KsbOTo0[A\sF&{h)Lo,S}%w9̼QuuՖ邤p̓ |%㢦> stream xYKܸW4b5`)$ سkma7@4-δ`+gɟO=H=z8shX,cQ#V!UTy'!Q0|>03Η'y%JAbڔ߼]qt8$һh)j4.j"f<_F#EsMEtfI ℕm~PD|Bͮ(&[ZYXGwZGӥYuYOL3O_f°33b_>c:tڂ`EwBJhw;_=9?k_x-Wj^Gs-ZcGb068ٷdUnT>wWG3ųW>$X`'s.äOaE^2uH+:#s݌PY@D@2؍ǽd$p=jR%/ʦN^h \5$vB2k_U]oxNoBn47dD_XeѼBWOoNhMRpR Xcn0b p kqx 2dttAPAxE=anY3Eb]ۙ.^w%H 5șmtlؚh^ y  M@#&FOͥIs{(N ݣ=Ķ9w_(600uG͗ LXA1lc&!ԇƒIa=NC,c4Ѵdņ x{>&XI-oCmvLY(vM$cq3GwU]hT'4ஞE783& *P6[d#w#lbII̸R3WN=8+\Vv1a'E~Uڞيо7` G@e>Uو4܍n{eG9n<BQr! 5:jEu(m=[@jϻM0z^= I{l|{v?ӛ^z;10].Y8l4} ^l sV c۴/]l UFR.i}I@{oe?wUAͿ>6t TQcsӹ4g j Ζ)5Ls/Xy !g޴u=J ;s:K>bџ m;vM{- ma#^LEqg+PG;xsA=5~A8r+"׶c0aoqM:\/15㵀 hz_z*/ 6o-ueDCtz4տ0 8Uv ҡW/M@'yvu^Un|*j/ҳ*^ ʂ09.?\8ňyfb^tlu޼"e @eN$eEA:5'/7NƏo[T" 0]>S${y?ç yt`JfWûG?-5lC | =f_\ endstream endobj 372 0 obj << /Length 1793 /Filter /FlateDecode >> stream xڕXKs6Wh|151ҸCҙ@"$Hb;b Gx<>> "i<E`VvA?BBwq˃/6SVwwNǯ~M˺Z(.}{/n BETS,Y$Yx()]RWCe)2O=?K:cr&Dg],Kbs]~-/,y]y$ir$2F?cLZ<8姀Jp|Qmtw(N|Ξ(fYrΐy j6_u;JipI< g_Ud6s8ITWjd4 ^Ok+=ˮHop9zDnwFl Q`dWRteQp&|v`\@'iIDz0QZZ-5[D$l-"aQg~gN4]r•{[˃* ["X+줖kF.~~Zm]~SsŽX-')7^,bX_!NdK=U=2@?߫,.;SVʥ٫>rvΦLKhB_`g-L0C0]΄O: q: >d򶲴:XGFf[6I#>SxP} #D9v~ 5- qSZȀWy}vCA@$%<. e<,JW#S(~+m=k>iR(E6oH |vՀePn?G\vHA o87+q\˺R/abJaqF|h$$ų4Lg0 )tf F`p?a,Į{$r4/۸R.^̺p vXߞvt? endstream endobj 376 0 obj << /Length 2515 /Filter /FlateDecode >> stream xڝYݏ6_8d[v}ip/[{@fL)3. Di("Xq?qG7Z0y9jC_F=lܯv|$QG=Yݖ74~WJ>c4-蝹4TVcRLB{7n)_)(|AR0I8*&a U|0LYDn܉Y+Gӛb%ҠE`c}0M`kQO0!ӵ28Qp)'[sv$2;~ fN(&WЋ+L#uwYt=٫4'@B"4eH2u@ -yXHng§,YMEa&fOաU;~$ l*TPŽ44yjpNKi-P.H~[pD&Dw⥁ #`xeiGJ#ioSNڢ?vQ: ~iF:TM&x_)kq Mth>ST5}MO`u8U= cTe=9$փ5[>;8ؘ)SoO{ptp>ЯȠhr$U4K;w>o9Ѥ?t}cK8J <#-1`0!BsY"EC71L?xZx4ϜbaIhD3EذmK~kI{ Xg+aї's4= d6jyK5ΚTM-N 3m ]ȿ%$ s^6cj7F$==x$5 HT~n}- r9RL~D [U[lD D/O~ypA,r C?#&NHO|-puH- 3#z1?h%[L}ji rݳMb=IѢ h2E= SP9nNYp?m[/G㙥-3`nlˍ H-e_TQ2 TYO4]R GY ŝ"=c3"4lknZnV&R `|R u|l;hD-:%|yDdvȜl )TT#qA_\6قI2$ؠ5 92Gzl>G\E%1U:YmOy׌VwpI H@zח4GWGtJ^psy,ӫ `[z5nL!)`p0Qk޴$.8v~rLדJy7Q0`G\Wz+u/Ipڜ5b61# 1c͈.Bh읶#3R3avu h~1dc{A>ɩ&Q-=! ! 60,px sBN k6bN^b ސl 2t1%WneC HkH u4ň]f 0440X \כp`KYiFKXI|r0NyH H(n`N8´D4IΎp`hẘ\d뉪RT:T4\Y2t+tmLehY`,)'!p@%/9waA'z֐4Zt!Oi%&OeW r,8ĔNKI" \ksqXZfi@)7=6t0DSvVuWw;F?뒐LJrlI7Zoqd8":Js/B}=k;XsÃݒT=/ ?օ+:XۮU* /YhLUI$_SH/0F~Igl=X ]P1pEb+'H2(WL\E ڵ4Zoprca[?RAHeΫL%RXC*uaHB-\n@{L~[RRq6܁˘V\w zpY, _bh`nڈm (5%sI$/ʕ X|Z4bv7_a.5\vkr,M|M|y+t`G味24`J^},9$S"Q E#Bpti;o6NtEitt~mC}Bu endstream endobj 379 0 obj << /Length 140 /Filter /FlateDecode >> stream x3T0BCKscc=K \.hQeU T)KT@P!$ ٨h Ă"M]ccc C+M]S ļOf^*嚒YkdlhaahCY- endstream endobj 383 0 obj << /Length 749 /Filter /FlateDecode >> stream xڽT]o0}WDT1I TuZ&8*Nhؤ={=B1m3e|f(xۂ.#uq́5mCch!1۶mY τbC" u@׆lCԺnPh~ަR=3zsNFt~LBcF%gs}.c}<1z!,+yQS]RA\WDf<.S mBn)Xp6(!"&s2刯k_(r7MIh0OCzX W#s+nv,ծ"ǀgԊ+A-D k y ac|zu3]U5ɢm~=ru/a`#~38YKÊ8_d Z2:hTh)[Ç=i&m3xWqw%uz^#dV> stream xڍV]o6}ϯ0R-+q1 =UE&c K,=Rx=D8VYz^<3Ͽ`t D>n~5If8 <ݥv|[JX8ZeO2({^ex߻?nv>\ &[w]n q2`_u#j&xd^ 8R^KTP87t"'s\oj8oy*^uhL5W!$ &XFwf 3O^fHs uO<.hh̀ޜ }QFY rR*챶wG>凪>Tp ʴ;@΅i4)n"qDc h XVD# }3kfL}+7/y0Aܝ\5i-&2NkcvnZrv{g6s`˼==a/c#BooI"W}Дq)X r(LkocKK`UkZ ϊ;*Ru 3^lc .&b7\/uo4î&lk6 [82AN*'D|H%ڬ^{ÿE/yB/at[k/G*'QHhR.A]^ .u\g?R ZYE k+yF9F QV @ב''G%Os7) }Av_Jc2ӭgN:/d]K8HFeU8Up{wD| HUy n@l62ԝ Pߞ0jr{ZR{Idw1B^BS'B~Ϭct#'{m_0%9ҮgD䅬"4 endstream endobj 392 0 obj << /Length 1508 /Filter /FlateDecode >> stream xڭXmo6_ad&*R[ kl-a :lLBdɓ㑲 jx{x pFQlVl/B#m3t80ÜSSz#wZs?"BuzI_Zݲe|X2aw xAC倠3hB$#aIRx) |"5 JJHє P\jI;&5b8T"NyI%Yd,f(O 4S} HTrUܔ+3< 0+VfuTyyF6{x&bw==k_0} ?l2ji 9(2,k&0&hJҬFkʤ&B 7snSzWT& UdlO^ D%yBp$ hREx/I/Vqr|CNn_ Bh%ewq.̀'82|d~gwcsVVJk \戎)Mӈ&RМtm>⊩\kc; d5ҏIfD:?#ݕ=Vx}~&}*%[ Gu>h_~B8pql^Vf=0@5( f#B_e]ꑮnvi3_Xrgs 3#+wjժn3B2L,Om-?nOf4~eY}%30J&?nڧ3lnL߯\>?34aof*X0H&Qr%KH{rZe76$uSjfBp RO$daAy?riJkLDwc6j#`B#%S4nU!Txƒ,Y\n"8v-Ini(JDXWtkG} p=j\{iqGK8(NOPQݽ=Q߻6nݹR:1['/ve_0^ endstream endobj 395 0 obj << /Length 1326 /Filter /FlateDecode >> stream xYKo6WXVQh\Z=Vi[M4 %Q64=A3}-G, p θ;W$3E.fkj]c+܏8Np(ԚTJrӺj+a$VI(j>4=4]ƁbTɿ[W5m؟?WiI3_DHu=b/;]w۝Ѻ{|F%Q^PL_n897^fAEVJA<S(2)bݴ<ﱮX޳T'BUCLث7'#:v&\x63U >6촖 WnuhI-FY;7n$F` z,mB (070{̚2\@dޝksw,>>ݒCEéTMSXQ=Zl*`\.,lBw%:;/`Ҽ 8=԰b_X-{,2et1q& ܁ Fq*@ʷ&g 38qD]GjM 4n"k=۴7t#h+f 5&]#5&Ҙ=Za׀Camh6ʫ{8,tOg%_JY<$yzHIzḋ3*n[D;[L,T‘7M,3j WDI $;s]5s06Gk ]pix /kJPi.==7R؂tkhh-|!}ᠼjNCw:  Rb1a"K(Ŵ*_[bo?fqwy}ϵXĄ bh1#QnX #c߲KĴsNOCYz#Z7y y3KtD!䕛S$).Z{B\x5I!Cn}BogӕpvI<E:`;^jF?ZUuװ?Yp=ꚮFYV(Z,Մ0 <DJSkR|V #> stream xڝYݏܸ _9U˲-oIzWР@=31cOKa$Q4EQ?~H#oɛ2J237Q|+|10 wwSDI)oKQwGOem_o,ˣ\"n-~WIv6.R66tVmL_txz e 3nn7NЇ@|j_2?˫2mtRT #g_K.YrS]"N0v3พ.ր;Y*X.2}x_ !#B˔~ڇ1S0t =:"{A'^;Rl㖜5_9ktl,t{!q7^;܅ٻ~pzŎZ9UH!Plxɦ~Q$E<@!ɝQ("%A[i)^̿R U5@]82F S.3`h-9p]Lj# w?1|48h`('v\&)gHF@BTcfYF[w"<>48(*ѝ?)-mc4bʒ$N-*L@aErijܟq{ /=X+Πfȿ!ԽݏLN/4E r{<@fF43/N3/(u2]zyX\ Ҏ(XޡQ2yc6Fe%74A91|*EJ ĥC'b*BrN߯RdyLm¡Iyn}\sTro9 j* .QBJS$ 2?qG?ݖr Pn]t4PJQzl{c|`4/ Q›A3 x3Rk\D+\=UTz_qc mոqj.OX&s @\0!x sR>iT&n#漕@I6mQö= e@Q#.n?;qd]W}G5nd0GOTvEWxY}m5mW=1xw@z9K)i.arUstoŀ\/Lw2+օ6-= _VsxtVJjwpBTED#Oc0G:f:i¿B샫 \EG?(;Yp ZAZV/AaNYD R>Ie&Q >Ag # J&Y2OѰ"nǢ:jꦹ f=%83 .w  ۙͲ02V,h9KzH"+1TmUh +HC׿2&ܫ3,Y} %#T\Kczl:+fVeP424dޡ~XM*CUaF=mu8n͓ oCk#Cwd=z`@ł\.dr v%p~?%иlFۓ _KE4bd۽elPp)r_#`B͵jᓓY&~[X^>+F~{4Bˎ[<B!͟5`{nT6wTz- (gz:!/K&l/_-%\7%qt5GEEnE*߈Za_]nķE]sL&0%*=HT?a *ɇsf'̝r C}ߺdWK}XƷm#7{x FEa&9:b)U6 /I\%yOЅ[ȭ˱HQt >ia e*"öq> stream xXK6 ϯQƮevܞm}S,n[Iqv&%Eٖ-2X`G(74$Bm]`aC?q灢h{(Oo|{8s'`'eIU9 .*Mya녂8?Gax4yυ$OFUnUӒK(x:љyQ GdF" XwĨ"βmc`Qe{wLFO]nh!Lo9nÄ&jKncc('r'2m/v]:.\Ւ^CaAQ銺"3$ auQ᲎dEkMv04jJ% GFv %f횑d@6B-UY=d&$vB9/d &Us4N\'Ϗjy'YU ue߄/ |9|/7qOIAx@McqMD 6#dgWbH2t׃ ݣΖd@T3O5M)?V7o.1s@F&bGBQdXFhZSϵv+p &P6*PBC,N(vq@8UESPJScVno)niDk`b$#$M`Zd\t,Z`"z a/-@HBBH$n@B8#nMiTz?nwՇCpr2I|MȩFaڗ#PPկ 4:H[8% L!MSDZtt*ح9bpr:5FOݺVYa,(L6JPS'=R{(w+'meOH-Mx2OT֮qA~z`͚MЕqkxs/Q<9Խ 0Q0abbd%6Uԫc6Zx<%ᐣSMgbQѦ#b٧p8I' X%9=-@cB5D:t /xцAc.uv-c9\̺dJS@ԯ"SjXipm@/sILŌN_9jk8(E{jٱV3+&O*{Uu;r|/4=̮ &`l5*ԩO{=.}EեVR?Vx1>eM~j~ܗ@(K15m W8q3M oo],D6bvu#s{qgpX+xy/?A>Q{vI&qlzu& u}([yzW\Kl6U&^^rOoS_7RψFe7n2qQ`ߒ'E'ՙڄ+TfyJh5>VKLLAڬj)xySgNѢ0a`P]e0es1=v-x';;1 W\괒mCj(uN!cTM-`_EZu"ծ0oZvI8Eo@ endstream endobj 405 0 obj << /Length 1916 /Filter /FlateDecode >> stream xڽYKo6WQ,UWo}@Q4=Z.]i!Q3RK 6"@ 'e[UHӨ>\fۮh+fB =ʷWe+GU\gu^Q:L4`_gm{8fMFZil$e% ߏ$Hy#r部?=n~R}v~, ߽ o4W9+|4bqYVzYJHy kZj"!Ma`ܱ+/N`3&WKUW̍h<9Fa gܰ*q+ wDWĝDMY ({8g1Q6Нy5Om̳{ek;Oh/;ÊN c,)fD`^=Znİh2q zpqWg/0[|cjf[ЁI(EIӸ>W,>QEKԯɪԛpQ>޼p Ao!1bv瀇 *(2F2G6I'61^ZXgF%ճY.3˴*s$!TqpNJ'7E%+f"G1[&1]ȾȆ٘EQ/}wa{})B9loMIYL*NmJX4m7+NPNĴbh{i,zv X:08ȭЊ3vY"*ʈzx,JLPKal^$¼qxfQU),.baִiㄏ<Զ)ozˈhF{ڬE/o7/] ̙tNh~VP#|~O#h%[eq(p"ho) ­rPyɳ$qK^ڎIFM38dzҴ4beܪ1{%yils9OB!!ʆ-@V-LϏRl.]8c1֊ ~Mg|ry70n)ӯ Fp@yrRtK ln&_8 ^qOww!jtx#yr$#W endstream endobj 408 0 obj << /Length 2060 /Filter /FlateDecode >> stream xڝ]6=b*P }4&m\UUM{K$;%ɦ:ic}bŸ&㠐fw|O;Oo}"I6" {M{v(O[?cO|LgX_խnGȅ?7??z~3OJF,݈8U4e bI@O{b&Τʭf Sb[^im!nD!@K%PcQ+]7OG΅~,H7>!d0iIw`E}aJuҜ7oU[ {{ZW\wc7a,: N-&r..s=[NM+q3~ ȁ ]DԾa1ՖG$5cS0H/o[<7ϫG򐴌V% В=~żLif$yyP--WujJ\{ &z,,7RQ$z5 sILP\iZ0kƣ co, }xo@]xtz<:C] 58 dfctl.y\uH FkݵGF]hEyZ~{_߮q(Gh6H0"Y8~xs>JNWJ_u+=|*6>6^ps:nhp>R PDhXFG¦vcS{Qe.Tt9^F-@V3ʚ; $Rm&yD s7 knJp"p,8),o5M\NPEPoǁN brze .X0_6.M,MPCP(J=OHߍsE h v5)Pkt| 1v,">{*yZc lLn(17 ;^#8OfAߣ=LЪ;h-t3U͸&\ p&)̵AHQHib3 P 0cbk62]pb\ b=.I73җ'}:Aqz&ֵvmyMqo,>lgk< dRЗZC9m;02NK pkDxcΒoT8Pj>Gs-GPM(5\n^ hh;{PպpUY=pe[YWaI=W8ZSLEQE {'j( ~,ЧR@i+Zg)x_RLWD vy#WDmUШHNT0LY Q-Ug.4t~pzwa~]t).d-s`-p5]6#z+'{F٣s{*X͜!L^N!q"JSP.Tg@> stream xڕYK6ϯ06PcO4fw't9 -6eɫLe{X[xSbcl$\n(87Q?M|Ō7SM \0|Nҙf+(oE+>u'lehno;[",po=Wax#P|4M6AKH,(&V$3BJwo”LݷDb-'ӃzBˌE6F4Fl's~Jމg|;sTl@T@iXzdhQ6̼OK00(N.}kXT<0~A\ [垮7*̫160V{AsާRnޕ);QʮtHTgs6_3`mfT! M77vK|C0^7 #^3@̜mo[zϥ"="޶ߡz5%c&ȭcEIqq4XymR/$L#T TbBF|2Mk}GK L{/vo~/Hz.8X(? Ӂ%[pCE2"l:A`dhntn5Ҥ&5e`j[RY[S@^WWFB@IwDRzOAJC87vK 9a"B 1,P{=aK8FC3um$34\,|0'ǏVHqgW7gmVzO?jgQL< {jںjݭɵNcXT6XjֻBuk@O" XzЈ ~ӷf9]H0nGƶ69:Ioops0~ L'|ow+*Xܤ10"AEM =CGi4uI᤯= mwH =Z-R =4/ a*8ҨwDIH'j,Aajj1I5N0ÚZIҪG-w[ endstream endobj 415 0 obj << /Length 2013 /Filter /FlateDecode >> stream xYK6ϯmd`Ĉ%J{Lcdr,EؒGwS*ᖻ;@0*WMmL\gC_ Y/pIDrsOu_nsomq Nt*ꒄjKeW6Td~; E7,ڈtfZXH;o!>Ņy|VuvftD^(c!l4Ip*zX4 $wiAqt2Bp#-t{O/ТUٶS7AA gT0p`H(@n35P/5"o/*^h-]ڣ! ms"1JS?A}TBmh4IzrsO:Դ9&^᫁;{v`)=Om/EIJlsFMzrY`KjA e.S_s]_5uG3%kH }ЂO`M#ёrU"ZVZ =&C & K#2Lb`Ig,1BM<5̢9G\J!tܮRca1g:0hǹWϪGu=Ǣ@@1>Hm]3@?ݯh bzm}+fѻ 0į9OHo8O\dGO:6+@bu@Z&YvyuCdhLZ/H7|9j%>ŵ9L4SMnY!&M:E. qpc1`J_5Rm9:S<3Ul]A\ҝQ3H-P|;1M|:&-שB36 e6_C~kAIO*RpIYӪ`-xMR o d^=VϫdD)(tCkʜQ/>nmV1XLυtyYnx*>5KY̥|ŘWDdo9m!z*T$ء9ǴwuGak-lڧo\9FPɔYʥXDc]Lz tx#}ryH 2dȽ_nY1Rk3@wE endstream endobj 418 0 obj << /Length 2418 /Filter /FlateDecode >> stream xڍYo6_62"E}5HriO!W\B ΐ֊5rÏܔ&OQb?O/$lޥFƢK=lR).jg߷|6pJ#q3l#sdL*+㶻4So۝7[Nu{%y=V?}(FEb~{-PhUEt4HPQe}_MY4-=ۭ#{0{&<kQ䖞NLQEXN&JDK)Dz_`{V.2r2Fgg CN&BPgTЍ-/r޲'N'f/xc=i5vt}sۂԃ5Gc⹁Wh%HS!Bn'$Y&dQA$`||tscǺkoi4V|]&f?.(.;>_̉RسG1w&K3b Rm[l= ajLL)Ι=%{4DF50\O6Y 8e9@k ^h`BB `+Ցl)VIABex(cřհQn8墐qkld&6NLfU2Űw8B.+ݶr90ePb';q%ysiFa<;(Dz BA&a # XfN ;guCXcHcG8n52E?I !5ֈTEJpiɍ+2dȲg=w|&B)<e{:zF^[ 概xiiCBaj e3qqepʴIrhE %U1  TL2ի0@t?޿_ELJ͢m)E8@av!aGY`v@ת N"Ҡ.tU`E)E6!hLBeF. M75cB!d)TKvZYlCu 6=vf\JSzkE xmIe*tl))uu8ﺅM܇:eHԈqK%Zh:vBr:5|Ti*XhzL4zNvh}b >J"X$\%Co4).8§Ԛ!?߽mݐ.{Z~"Ov}n WY%]'xM>&\j101^TGk+b^l> stream xڕYH_KM#e$X4'N}YVЩΑNZIaV4rbX*VOuvٯq` n&/=- W" t|:Ӭ7J)Ohzn}Eۢ;P߱+eQgd^]R>PrZh*/" I~4 CCP tŻ߼y6B_Ho2W*4 t胜k#[;sݐNx~Bٟ;-x;E|Sѷ fMODߺZ:mW7wnf{ ڬ؍Zy0&B;ey~|[&/nLwn2t&HH}G]l"Aն+Pg*H}y-U!,rYeG zRDW=y% PG=Ѷ>JbPr2KCzI'JlʎsСTݡ:yMߪqYy *Tu3ԳbIJ/~t1GYrh|,U>u[ _ }m'">YC@jcc_Ԕ7('sf;ȒOtUwZRs-*v KpnYDcx4\`р.6p 80'`3KiTV Jב7OGhб6\@GCxi .~ 6P,F1ZsK&ۢt ^C!hQt9ܲt8%FP{JfgʏhgВOTx=nBM"i6+K=%8}#.<\!R{/lӇ饩‰7/w$xҔ:(Ie<"% &g8`|C1m"ea)9#j>pPP3j*06XhsH?k4]eav(.3w5C-W&4PtGP7]>p2 cH/f{LNuq8b`72t@CꝨz#7.8mmgC#)711QNO4eV: 0(M|>t7Bkͱю2fh>VCci M'i/z#yӒAtpg(#kRb0-5fY҂}+PNYSo&䎪|={W~DbrYy/d_;e{v6.E%y=wD_n:$^ qD)J]R"||6p8~[co]iz Ɏ{52>DQ(GQo7LݺӹB .6l-)dw@-qD-qh$۶eԢڰM  }(Fel0xHJpMAkH֐ @;ۦ.5PoDi$bxW!Hp'lFsoصCu&hcaIPnf[ t5m9 Pn?1"Z={3L#ٶ`.0֩3Sm;s|w4\-b--j;819s8 /K84 (BXt*mFflleS{Bqh Y o!'.UF\WYɵԚL}{_)h>3x*7Ȧ$jvKd( NXpt#6Z8 mw./jצ!Yz?N4>(OJҒS  կ7./ AKioJx qlPY뫮$T\k3AyS J.%#h$HeNZ߲^RWR<$m0簏4 +QaO9? :C*̦SKf_42 3gQ˓W7yu_\jHh 'oJ23\ vN- ;WEih~hv,`>7ڎq'gV  ;&BV%xc6in9ќeC陉m* 3}KS`g*Dm`ZIW@χ9g"Ҁ!0cŽ g^}{<:cQ2}[gы1F妲U<`&/04gnC(T"v> stream xڭXo6_a`/r1kEYMa(6֡e:"%7;Qʼn"@Lwc'qF2IE(x:K"hL$ |@EhmY8O"x=]$a]X eUvS=+'4iaJYM ~j\m" 'y~Y"o]t4=#{:6м)[ []]t%4*Ay8OyA@[S8Np$0mt 7 H%#+[^3U^OUv w>زӴ\Gs=,^$ӘyF#osrϪiil:]HcA3dLbCػV/j^I[)VU;}Hev.4\ yQJcEh]7⇢5.+1ǀHd(9ĂC I]8-6,Ц,P YVd2LEƦ%&{PΏ,qu7*E R L1Y xB<ٺ_c 0X\SFݦdBHT_4LpP2Yyzc.l9}L8/A3WvYsYvL;#^*rgQ "}= ~zfƸZRb5H&pbe/R˂Acsa[ψ3u _?u=\^EU2oC-=Rx@Y}?Q u*I%N:܅7>;׫pihݸp򅩢U.WF iUkchqaT${2ZW-d8|t)QqO뽻 ]'eFv3PzyolR燎ν/H6! E[אޜfP*z֐AL?~!]i1|o9 Qqp)E< ؟Y O̽5-1'uӾzDPMЁ170qqZm:ڍU+ZC?Viq7<50cpdp䥇hY?w>%epBVN^\bDNT.pր07g7:~!w!h+oCmS^2JVjd6'5 4\r2igE+, *(Z1OU:Po endstream endobj 430 0 obj << /Length 2237 /Filter /FlateDecode >> stream xڵَ6}V^"ud`$ŤE046m :_U$t'GXAqOܕ]q]&y#n o>Z;eR}ɜoiFV)i=S5hͿ~Yv#"يB'2woy?|%2Yb*"LẸm:u4t_ۮgj7[ѷ--mk{SY.@0FkiatpbW;1~y`l kR@oY3@[B{n$HWEԍƏ_KX =Hj86a <9j9ѓy]\kf~E+ẐL‚s_1%/TR DŽ8woX7L MKڙv8gahibzʣx TcYc[%rZx)0Y`@,0-G8 hϵ,oq΁˦H#Jh׍ԣTo'8`}3bki7Ͼ9vD#?$wYO. sˑKv®˪=->"ƦpVFcU- VlCj*0!AgtFyNU&1fYEZf2*qSTx#T ,c!9ߟc@mz>6hpHU==ga@iVqZhw}`2cZ{\adzTN~@ iSYUhcQ2 _,Y0O<ޛ\GlMIߍc8ɇzG&6JpO 9FT06횝=l$rfB8˲; 1CB6 JFEJi Jdb âQם>k vAb$Q6얅TqY H= L(t "}>g9K``=$ŽT,孲34˲ +2;^ )MGIMaX~B—LEÙHbQLE0{_gbg^s"Rg9{oZJFuZp2#Ĵj d:@Zi\")"ZqFCxN*S@)Z(b /ݥ_f, 9ᵑh.M% .*͵,+@:VI dW%8p@!*H:r^Kv:`EbV*NnjUDo*.TJVL6fK!!m]tT_FSٕ*ט-_3=YF蚎 (*2rRÅ^%]Fh ?)c6?o9V5{ M|Ȭ]\z#sZ"qS*tߵU %t΃/O۵lϋTb;C3|%4EtG8T .sET5WH RAHP]J,{=@߿.N2Veꅸ2Yaynݸ aPB5WG96,kt$(+gq ߄Gl|sum-@-e \Bzf1Z~aMr|!9 \]oU1vgrYbf$n4pSȯWd!v ΚD岈$ӔL?i!5U{?ɹӓ~ m,}7p&㣊?tnZ"#3.0|݆>1y"]Sޭ}qGwSz<kM ʝͰ;M~qa!'Xla"^pHN0}\`> "h@zS\W;SdmuBCr4*$ǖмҠͧ gt/ g7u{ZW=wj;2yỏ-qzDoNm5xr>IC/`pyx.DNҾBQ_o8<!y <%|@0r9RM:-r"!f ~#%Al!@ \70P ke;\C=?Ayڗе5#?Ov^̎EuM *մN֦,qPoUr,YMMS}>Is%َ endstream endobj 435 0 obj << /Length 2425 /Filter /FlateDecode >> stream xڵYYsܸ~ׯ#'$O$/KE13Lx,tCS+ɻ.8@_0/?KL]uQmp;OcaBż|ܻ_SVnRFfUU+#~~, f(>O7~xy52qDΑe8u ?ks?, Tq\) iЧ-oNmSzPe" #?t>djP(OaQv'=AC.Pz }3I6- J`?a?['JpvWp^ݱׁdVtFu  Cs&>jAp1XVOF)ЍqzMMN%%8R^ jHxz;#_bS=2y yy[0R'l V87 ch9>Gl:7Lztkn7Qkf~5mUrK T`"[1ۛR25 sɬ#b%)ᴳRTh=lE:+Nxy=e_nDkp>ZY1wP96ah$3؋!en(ʲ^/'(nXbEٜas%$yrspaFK uuW: :;w1wW[Zz|wmZeͭn;Hh$FL Vf煮IŴGIE O޺ߑDNƁ5X\Qж I 0h0_FZO1'V`reer6۷UZbZ,)(ٴ窶6 2q[iwFwRհ.9A8a] (b߲9bH*wR(*j#F5 g"+ |%NFٸ(.le/W JBSd떝YzQH}ʟf<ʐ0?$_i(iu5}N&\9:cna\e YBK8f5L&E^ʒh̬tfqha5?hlgM#@bg A\&6+YQ}W+Vi4/7 Ctq ] ͪ{,nϋ ,=1n|VW/߯M0 Ayhz&W ܹbvLя_tN,?> qK=_0f2 u`íhl[yՈteHA%bqaXcoc2FG,'8֞5 E}vGhN<(# @&#dz;#_y'[nz@ 81ybE׵P¬͜\ o]} 7* EAK= .6$j%\_~r8G`*#yѸYoc0)aA;QWH|,}|J鼎L\ﳡqv?Çǫ ^m!0?X?Z"IIvof,;A݈h Eyh1ԧ铌Z?Ͳn44Y:u9@ba6Y'Z퍮ooϊu NT \/0y(;&P N5}(8Go^{aUi<GMُN/w{IT~AB.=LA> stream xڽَܸ_o )H Aeb=X-Jj'_Gs8,X$XwMԦ6Y7MDvÃ?Q 7SlTQ6Q׻M]m8﮶$ߺc]5x_uvWW͕ VI]\?^%Zr|taMPņUڽa[Q*,Dmwt=m{?7 .OVk$-yo*@:ǹ n׹lj=^ 'xP #ɛʁ+σۅ@Y^W:y&r9uhR`Xg|wp@XM;0gF̪,pf$$*/V?%< =/blڅDhdaOiG+d|hۏl7O򌌅QY?]^0)@[9JLo;7Dyl|O+L",t1O Nd屍4Y|Et˩k(SW<|KDK[D`vӹ,/m.u~f7ㅃKĴ\0 xKc#gtCq&1/ԍ&KwQJ`;[=*LG6>E01B2 $:v1tRUG'JW4{Uda}X))k_V B>/UmkxRp;z@ϥcj5:M*(v`رe4 tout=,zW+W{|jZ~D=SNt^y]GsH/3LGBgfeos+ákϷT>:H݀`gM*?2 )' `*K8 $<ϿꂢG(D <W?yb™h&te6r&h*Ihy;^i/$z~q$ t)q,lçI[8;N0O P~y$"}ɀ:55 @TW֋O5)BIC{w7w=V^T)qԓ`*}bcH:{^ܙx;3MjOW P5(0lAG,(+C"x VN-d/ϸfQQ+o\o&\me_\-!C)Aǔ}?teizܬavso>G9}' ljY6&ts;G |wԭGcG@,lK &>D%ibܜ 5JɈܕ_n4w<(gYѫ1ɂLcG%E"T jkN{Q=_C8ˆpI ! ؘSpgjPD^i_wj-M2z] Uȹ +f\-ag WEWdNF05/l Lu1KP7JPKETg*#{/WR5e7I>Ca e;Ng]YU^Urql&[@m_3 o{HKRTD/N ߇JJ`P~WdԮt.Dzc>>NOt{' a(rP#by(N 5cP9DީA`N\b鶘=au"ʱOBHc 倀5H?a7;!*k@SA4ƶ<;+Z5щ 6 U&RJmTWL}.ڲ#\N%"DTdb €lO艰1hYsR--*7B%DYxchx&9{1Ln+_u[G#M ԛ~ګjJdd$*5 04?՚(0_REa5g{7M14 kN&Wȩ% $ Ud$<ߞȟnO$aǯP~jz۹]՟j{dZ(="="Ydֳ qwF07T'& 4[|;ev[N>Ozo7n;4waTüEH1$5%܃繬 Px1nY/Ӄ?uxHMV@Ky;a%#/YHfS&wd0KM^_FG~#g}r`d endstream endobj 452 0 obj << /Length 2012 /Filter /FlateDecode >> stream xXIs6WHuB 4u3n7z4KP%bhKqvx [Q'1YnN|5Zݸx}B ހ?C})uísZm+sfVlr'v[aRdE^Ψ+gMB?p?rr: Hɑ#XS'DIp/-7 ѦJKi0JT[PsAWsc 5oD)VҢ˜@,!iDRR{ ƛZRAOBA̾%*Uy62q L5F$NADIHp Ƣ3}Ie !E\iZ6Z0y*<$|׬t+JlH 7k)iLNyأfGݯ:LZO#m*z4 PtPP 9C@0,q'C ȧ. ј{=l ;,x˵Dž.,nIJ&*p>ʿjA+?)!ԈPjaS"H{*1D7,q1^ƫ5Hť-*,o5k*K5vP\Ʊ]Edž-徾uXcg Ё:Y.UљZ3xoF5jF $0eb!p ]JnQs,m}î=<ݫmYJ b^? (s $>0f^]N``1qBݝ'/J^ N]>,>7|He<1PBmîu_M5a#7`2T$!\fF=erYtaJ}DB(ܝ2j8|RuT{UZ^)q^9ܨJ(dfeU)R̪UW4<ɣ5¢~H:;}@)5>k ~}Vfjw- 05Z[w˶etNZVm![] ƺ7Fۋӷo  xǴJ,ۧ\ J] w{,5W/g ];yZM6o0Bːl0/zIgfaB 7Zt,Bj3MվTZk0| endstream endobj 356 0 obj << /Type /ObjStm /N 100 /First 871 /Length 1589 /Filter /FlateDecode >> stream xYMo7W^(r8$ qh usPm*T&oVJ`khE)ޡvș78KrK0"1qbD{> k1Qd(donF\awB.j2OC# 2Y]r PIƧLAu`"à_/TTB#-r0b@NT`C>H@1.E 9%j%z)E0P֘*e,$;8EL`@&yV!ŢZy ꈤ(t+*8^ȓABg"(8#{UfZjuhYfuӫf:y~0Wj/\L 7:˟i :~weg.|\-6P (-(?x'U'sz]-O HHS)W#_FC'q ܧC?(r3|}Fʹ:n3Rҧ!!`R}q)=) >W ]\H>bN|@qPsKG4TG|{-}~) :\!nOVvѧξl$PQWըcuFP?c`O+aNv!8\?LՆ_s $%]Cu,t͖aȿ;O~?~zB'9.+GEN:m|>oUI}2?O/MXީX}ۂcb[3l r؝wf,k@pNpJ:mwTgT4*t=@y Sp0ɰ0]Д-h0MI_IC, -f{-_7-^=)[4D}=>9Dw+mrlw6n"Mh|ܙ7}y7||vouFDHk 0cb9vP LWv>i8,<_׫!mē/8:NF#yYonRh&ocr=flpbrxqYF.D Q?. U&͑}IHs&D%`-B~75Gj7ySwBf\>"rrpL!/tC &sdz3\4eTS(8|;HbCf* f~O&"΄6OF~j>N˂X?rIxpb?A  endstream endobj 459 0 obj << /Length 1128 /Filter /FlateDecode >> stream xڵW[o8~@DZؘkoL´IEIwG3N%2˿_cHJٶIRps1Id:6FR U`⟟!!0AeOSpgӔPH VH&O6x[:Pt]aia!.70;/Đ}$H&̡&h# Z@9| ڇHIPnzv{8{{7M[$*2[BӜ6ٶ*aWRr#dSRbeK!2A0h#y)ٻޡ5`r`^e:(74֛Aow`H.)죇lyU4⼪8nqIL{,ưT H`iMJZ"tEfV^*'% mF"عO4sS.LqHOϧԅyo,N(`MQ_8=!cQrNv}q)*v.D q`ou?&_8O0dOt;k@:k 2;#|7_Eg]tmd}6 mdAEPET'I_CH54UMng6#9d?~l7/F,Uc :vn1^kS]F8|izYbh0>9/mBl[UQ;tN ⑻@H]J X㐀.\ҽ!R jo\@T\ឩ _,qSIsj6,qS}?wx- ^]tTaBc`sq].o1?l;&{Vt>VR-j^4أ]_4f-B^t]S-1mv~eJ4)cv*)JC֞-l#T endstream endobj 463 0 obj << /Length 2563 /Filter /FlateDecode >> stream xڵYm6_o-b(Ro\.)rm68走Jr߯P%M9,ː3\'WyJVãЍ+jd5G}q\nwn{ެRAZ8m[s8=M~O_ Ff-8ݼףgCq}!H1ɘu)3L 4qǻ7On3`~8j-1/#ށqt԰M [ pp0uAqxh=^ avAG+k|_,r r %1YARc{j[<, z0U4 }*HD%۴ ȯK#8̀L0i4gsMP&lRl/'[oy$ͩrTH0-n_Md:Kf3 T [kmjuPa܁3%Ci*SJ:"TNxMӖfSwKqԥDİ/TxA[ǪܖiDӍ/: N61ԭz6{'pni?-LޟSI=y+A OmŒ{TW7 ʂ%+gS t5ڝm_65;t} $/P&OI7yr>`Ѱ`pHު Q,hF7MP~ڭ5bԻe1l@9>9~p?LXHƷGcUWb%^/8Jcc-҉ha놅^<u\` Ag' a%su1BECJ:XSwS.)(aN<@nhh-q*U Zlˌs>)RNx_ 1!Lhx޻i4B CBHsL$s":5΍6gM6z!OT:/$0K)n$U1(nlm1c԰?4؛RzՅGbKvJ&,!PCw۶<:Eg9Ikpr<畈1oAL3?h|ʀ}okl;B N^a8j_2Đ_Y&k<9{О$4bi * 5ؘٴi%D!dq2ݍ!7ݽ᭫oAg>`K\3G(ɉ[e@Eyմ.NB/Jx/,TAU:yoLu T9Cum }s ܸb- u/7WSܖ=y\M P; ߳ U~9 0 z,,'3ykZ-!<$o "dP¦3@[LQuI8S,tX5]"Cۂ{.[p`fW e***o߅&!9svq\U7~r~‘usF%H쫜˦NC%95EOOe%|1בq,ԣ{P%#=)%i86K;PDY6~*K9@*A ;~)j50 ^IH6p,B3XE7CR5ro7l{w 4LBTc $/ND8聳")#GZkIʹD[_Y"F_-gX 9{='ZXO ؁tURv SBH )b ;H:H`9bjiUAQɽ@0u J[JFZZO e9IV9Ug37N=p¯$Tc3UE٨ GeVvϋ`_PF`/ >ޱ2[n65>E%"I1ғU-xh뗞1"miHΜX[9SE͞9K_A(RG67kߍڸӞCRqiղ8 jZ[#aB .W? 3e?@VJRD>ֿv\d 9V% -8N?{ wZ͐kD˿\obi?B.?E>2BH3 Vp~?{L8u [tGaoKaW{]DN4=7,bkl8Ұ\(9և2d񅜫ZkÿU2#<V;|u·A*9t endstream endobj 470 0 obj << /Length 2600 /Filter /FlateDecode >> stream xZK6WH,O-Z6[g⸦8ge>do7|#c%{r@+*H)kVx+m`f4ǫW߽5f%8y,VWcRWՇ/ɾMF)MK]IQd}x{jcCdgZz#2PjW2R9!|(% .gYߟ@ޓq,V}I7Hz"\?9y|'-$KMD7^ɆywE\Vmcir>Bq>BqB!1 s"XLƚP-X}| fr.bA!>ECL E?\_R{sPǓ ?w/qqߩ2!يD=9= } vXd¥R+i7=ZB߃s+Uv|c8^-**@Vygz.:] I󋴫dMCʁ{CMWHt^3]?k$~OC^@}> stream xZKs6WH",ޏJRIRY4;ȴ:~1)D htu,c8i}.|b%t\z~}%:]?<>zBRJQocY݇C?Bo,/Kf幐w׿^xNHq>qsdSi+ 2LO +Cޗ[;3ƈSKa4SVSyy_V7P0}L[%kF/U4 r}Ap):1 n}Pۇ7y264jA0As~qw4f(Ͼc&MGm%sEqx$Y;GjJ= aseQflØ7w l2o;%h e`R:ނ kc~@sn:C1Inm-]ʑۀj)r>\65xSx~YzoU}P`蛧8/pHf0;6ڛb]j[-.m^(^W"<ޅU|RvHq oK6b$(phTAD-[P+=(z#~#[MY^ 9g *^%3 VV 42~, JHe,%39JFA)v&REu*6h'Q`yO ׏hYæ&QdNTDiN;o;RMHT9t TU;ֻ#mA!LK=j? c&ڏAR9ٷhOrCPJKT>Ô -|N,{ &Tc9ϙ@s +PTIfE\;HBfp,FSL !Y(J H>bȩLb8?GBHSఆjب:2OOhPM${׸*+7a_ GZOPl 3PREs=xg=m:^#j?"&KvH!k.-=aG0]9 mD:~-wZJ }dzfܼP&54A~W|`b&;id0db1@TCQrB gl/%O@G,MH¤NqZJL[4 7`ZO]|]dE|= Q<tl.GR(Lw kjyI@03 i6}ڄΞg2@m&cnWQ80Q;9lM"ة] 3t:\)(~f5 G.?z6ugs194hB|~<~Cj#_D졨܇x`GЎz5LX| |\݅3Hn/y c_WJaR36xZMlp)uM1:M sq:LJؚv-\q2pF bG`()_u3cCѥHzF endstream endobj 481 0 obj << /Length 2822 /Filter /FlateDecode >> stream xZKs8WH" wOIj=T6q[(kT\_H44ˮ9m@эF-(" #dX_Q\/\ϯ`滋W?+`d4cMz-yo9[ !*Mߗյ+k+6d׻:cIqd<?_b`HqHq ֥QЩ$LHT$jՕ591)åH}SVSI.)WWevjd\CuTQO! )H¥?i9yug$gKxoVuNx}}[&:λ 2@ zd0R[!6"1PÂ0#4~q&C-yn[`$] Lj凚)‰X+|-v Ց 3 becYH"pN]=#7We'&?)Pu$QKc9# Hl03gge) Kamnp'wۼs{*ت7iϞGJLiJL=MU3|O}W=!WYkӣ0D'׏h2To#H jAQpq$H??< M̥55,OG銐.A gɅ; qPwdŏXm;,W892TT˪|gEd[:LXu Z2Kow@VRGv`B Ӗ?纐ۼi˼Zw"'9EO9x J;2yIgڀ9gK(A o34I(g)$5ZDn Ph'fKTaOhǖ=!$Y p>kt%fxZ_?>O.|%ն C[aj|& Oׇɤ vmTu`Sl֜$U C?@c j{+d<h<)HMWf`2iSj_zU"!!NяCQ48:%| 0fb/mC*h]#k~zzWj4 Lh*y^ ~+adpHӛ/ŢJ|GK,:."qT'd1CL(0X xrMtq7uX!F e P+xBR"d%8IMgd}`uFL&'q0`D&.&f WNevܶKFyܥ&kxT٨.3a_4CBlΞIOy XmWW!"tvьy_<6gaVc/_q:B탉]וmZޭ=pN>t`$E_0 #)U Nxe(Ul̙M"eaTM0BS/ߕ6V?Wk\)/A^F?K;\x40b]KM7FI;C`f_2<_ XXy2M8/j(lQK1K&۟G,puVom۹1O/ Œ"Mz6IϏ\I O0o*Wˌ oVb0v|Ou@TD|u 웰Vݗm|uO{`帏7,΍b6> stream xڽYIsFWD zҙS.4>L9.D"&$`̙tc!ɱU){~"X`+,6gַ n}Lu+X|~Wao#uKm^/WJ)O\iz:='vǭWﱡyr)|IHOEˏ럟]{B)r\:x%J3^-u-*#R CW*)v ^Nzەxm}Q0Wh'Ba`o1[/uhSM,eRez/]~BG2W*#> &^~(-=,&ݳ_,&0`cpH˛u*ROrvDӛϛkUƗ*❋4׉^Lzu3#vԅD)W( ^c 2,!2q(op T% vsc_^Ahқfi{NT(CR&^>K 2e֙m*?QO.g$! ?^7Aeyf}./*UqeOh3 yw I^!CC|H$y}T$8ޗYzC؏vGzyUM 9dH0LiQqr4pkNة{N& w@t@ ;/;X,`*ϮɷС7-K1z-vn6'^NMuȉp{-MZF0rK2Q-?4"Ɉ 4{Mq8".`xmܠ3q,mJ+5CTNg!L֨b̨&L):g;>Rk-׏me=B#$j5J)IJ,k\}~bvšAุkC+NX+ qb o !?AJM}[ыH$Ѷk$-g= RvqoJNc )Sd~!"]3nUw&@8k@< D [88.=b>5=5V[PdgvCXqVD3R(Qf%ͦ<~{bjmo—2=_$,LNlM^bÎ-D~m]NY@D_\ZnZ?0J,DQA0|!Eyc7Us?_^r}y1yszfXI s=̵8Q; if՞(!'JTI1dA-zPt c)"-Jr`M+߇d`|U" em鵰LA.h'FJyJ)ҳ>#!=J|osBJzD}z*=! t{6b{C'Tq!cNӃOOi:+bz !$ꡌ&Lb(!ŞZdڒ\u>dȞS`δ#?1QӆhZsi8,PioW"ؖr#?q(t F64-$*(nB@Xc-5*߰˨3uG(ΐX F*IF%65hd1V$G6CȜ`T 3^e+^c?Ml|[9BϢB2>mLTDSkb[]f*#૘* f>-" \#_5:CbP"l;qOG, {vbIաye3s HM|=Y, KCO6܁Q(ȵMxe|o^W6aWz>H!SI;%G.u UQ$|&tʼvRNTvZ1Hul&޵Go[Wm*ocy*XL ef8=T@ y$z : ?M>`!T;N> stream xڽYKsϯ%5Tj`y֦*d9fEYD-I~ȴM<. 4@uCKb,^YEfܪ8Iޮwln$YXdq&W7R7է菇ܗzcmscu?p&X滺:eT7%]˻?ߌ %JPsHu1UORV] #&IUT]Ձ::_k=.ק6BƖr*|RdIÍ2oj;$jmî~4(2Ç?I8n\;,fɥsndDhIէ[pItMگ` 7]і lxR[ˤ,ťma.,G{^رOƞy)B;5L @+8d|%Ѳ*.FH; S?`ߴE^λ/!I!3DDu"IBDБQoE K7 ^ÃXvoNSyO\}'~sGD, k0 X#QXCkFJ໙L|7yBR04Kw;WM.᡹Kߏ7V`;\-Kr{n<2-oL]T*5!PQ z_A` l v  aa y"`[hYfVdJN@>~Y1FXVI W)O@qO3+-HW?Mn8ᔁp7DC 1yB~{X<ʚn-K昌s(ޤπ*!1lrs #l?>veͮ0c 2~KhRSG9ү'B̽ Wuy%j =*( /!g"2~o3B[>3P$HsTrIZRp02:{pc+klT` 6fX0V@$`˼U].:M<'* 9*̸b029=+N3oD|j|%weWc㕲 '՛;X8 9 - ʹ;=DeaNxy2ij=ys\c̬;n;H;Qg)- (eTq\3!v ֚ ጞ4N󩜡E!m +EiLE tJl;]<W)dzm])~8S<bPa*7zˮo5xie~U$oNgb!S]oީ}"ڙfSiTc0GzB{4VcGut}gsb[Y%Bgب?Y͍!clRtO^w T~ UT ,* 4t^NR{1gvH'&NJFɇUJ^>,|Tq`cs0 Aupn#bc@ _4@)# ' }ꁄm'?xs i7==Qxqa07<_rE<oR`a| uGK@K(;?OIl^YV #-$Bi}\z: FaYN/^ vXrVev]}LĄ6nDIYzniZ+g9HIKô :宂xS75 5o_VNhs)tѠ:u0 (F|c!L3c Sǝ.+8?'J K6/EPe"h5 $[ .*'L+j U~"O U ?g7[N;c'H꞉J>J&W񣌰_O1~ j"hZ~̂it:bs7(l_-1@ Dk^koM?,)ؑ3:_d1ۏqnzʶ0_87O@ endstream endobj 493 0 obj << /Length 2878 /Filter /FlateDecode >> stream xڵZs6~_2{i&7MsݾMQ'T\@Rlq~ /b,^h)YEmmqAW[Aը.R ,j3jx懾l+)e$\%޵6Gj-^ ItY/yT.WܨXD,?\Uؐ;Ǟl=ЪI mOK#w,SJ4vdLc4z ۲뛶>4/ɔT~"xD%D|p3&]$f&K W6 JJڂf劼N3;mYWݡqowyf^5U`jYk:7[[p;A ÑbwNw201{IȪBX>bj8Sl^I{ +% B#P B (BGt9]aRSI̋',βёve˹(̈́sXUpbGhs`+nkP61DTU yK:;Bġ bJ/LH{eQ{daGyaB+?}QvH?kLk$y^S2H8l+c~-io9_,Y1bjX6e&&U_*ozI`C~ZoX(U, j!#"Ωmjn3w]u-8k I\&$k[2¡@;+Jwe ^;9M7}y{Y}B)!p^0g\7,s ר;r=4XI= YcW`l$ keP RuU~buhRNj6a, GwU+`[*r4wT[ji\`!8Ap8U*:72W@#hg5SwO`q 3Cka씶r>)v߸vW]e[-=v(v+ǜ:ZON;|6?i=8B?cnIID"n"i 2_DLwywݭk׫._zYw+,d 8K̺/xԜz?eQ[ gXdkaE#ci ?|PDfSy!PfNfFd*WyRPk_X."jOz:s$8$O/nJ~S2Fn9 vﭛ~=gX$;&c *Z6dp,}8!2 i%E40 )G5_f rޑ#9R6*SXde: tB`t~`]H!1 l9BRP K;vdX|sGwZEW 3鄟{ \W}Xbվ1)8k01="3SA'3"Qr>Bh$ TYG>n*C}РY*T {'mM+r0Nx#nQ*]<./6[Q0~bh#(~7= h,ly7a/[0*PN!@~"lQRLjÛdW񕛐Qp׻h3o3\|]annLC2%L ~&V>ɚ #S{.S( %+۸=tMgd?QR??j=Y~-3$ YI0z x36ߤ;:;c^;̣d>SK+ԗLzml|xv_P>*?Qwsןʻ9tgK'[fEg6R"%] ϨdMNw endstream endobj 497 0 obj << /Length 2914 /Filter /FlateDecode >> stream xZY~N`u&}Kp yԒH-Tu50}%V*X)d9~گ7"[h_cVbuޮ>F;dUWkT$rD}Ny9P}޻l{̋+H J>]=CFWr+_`]%+h&&lb]$rWk_fՖ]51,%YС``WVȋsۼvb^㨊vmi_#6Y $ Y]mQ&pƵPLvIDajU PwaD.qxڭ|elUyv{to-fI%)U"4!`H;yрLA'OXLnx k&IeEKX k t"!uxȪl2A0# w < 'f *2eT+Ev9i9qAz6=xdp,MG Ynf[R ^cj7df%3qa뉫+jW5K:Sማ%)ZD׵< :PBM2!iwa0:E.䆩Ěa왇˄UY:)l 1gzi޶`d&Sgf*Zz_5Ѝ:`In# f@"MJsčnZSdzh%q4ç`{TD>b6qtǖΓfdtw=Bz1G偭mQ.'4]5}P]{<>t=m 1q)NZ}^kFwQqM۸K`#5? CX?3BEKq:sF4AРK2ڔSVl|I'%W,)>|{`l0"<x#0J >^:are4/~W[PxuםV):~~TNon72`$&Xl1V|wYz)fWY4cf1EnstYusߌ9MnW9gt2.|#Zƹ@+^g#@7tbAti8TII*KK_iH$/\(")W6 > {A_lQ>+ιr󲭩G.Zxvx2. q<-]eue -I00Q%-)_aEF#"iG .d[ў Kta.Y`O\Ȃ_*nTN pA$T JJ6h8D\[AjoG!gcT7J ҮLl䔯;!SCTe6edJ*@ 5ԛ0@K騌У2 ve{77WWL۱K%@<+'Loj'Vj<&[Eb ]) z~P$~ [KR$ɲcSlxd?! V|FJՄYS1L5G2F(>­dj@ 9DleC`zDbfH;-Szd hW+~ڊο'`q߲EJXv* 7cůYwVlpPNQkTȱnY O5.} Ef"p6E h]d[2Jho %^L^Q1VҳhbPEBKjqx\9\^E҅/U 7cutqte4fmi"PqS`H کξ6nR7'Dlqo,\Bl<!7ϤEclV}=3 [KH@e &\ߐ<^PXFˌa~w A0p^c1օO)+S=agcGhla8[ XTHTC u HX."u :tl=>i^ޘF~Qsfc37h,?\GSVQ'# _; uٱ_Q ʜmkjkJO_@j+C@b]? )Ip|8}Qvף<! endstream endobj 502 0 obj << /Length 3099 /Filter /FlateDecode >> stream xڭZrܸ}W[Sjظ$O=)$ʃRݔ6lۚϹւJU"sU?ʢUTt=jō?7;7ƬDfQ&VwOO/F)ȿ7ZmsCY_oeϿ}*F&֟y|\+,]'xTBi^7Tzۗ 3/+!I/nTjߌטmu]_@58*TJ /'2#ϡCi]ڮes37j@,LTlS$|vx* 0oaB4ë9M-4T[ U (0|ɷPF=F(͝e]e^ d,(rWj.]Q%׎ިbchIjVYSq"B)SudMڜRC^zKK=4̄֗w>7"R+C:a\(D,2 nZJtj}³ɧ8G3~EݱX-"3[IVLeMFqm4# Ri"|A\5zo߽${AFH_yu,6t{fL "y)EMZM}v?x$[z y[_[9v.,JN·aPDBǾ~DpYgzη~\b^kqyE*!$Tco[ŭ'BQ\ ɞ2MB;e]qG0Rbr;kB9]u~훞Yudw+Zzϭ#FB.>H\+*`F% [ql9 h A,< aGv(ܞ>$ 2^ -.#Dm`ߓ`{1@;LJ޷ড়uԏ yUYڇUX=!7w/֭x q f&Cn I+eL(2ɱ|17}(m'ǡ𺀓,Y-@ |)aF yϊEZ6^bqkf߸>i7%)qƌ۾Z<ͻ)j;_0!xa3h =Xq;gߕcR.EXxRDz]c8rDDG5Dz fAW44 ~>@BC(/D/R1B̝C@~`-6MْpG ب6K؈x`enpmzGf|D˶(ƊR(S@0Pq ڔij<@yďElر-GyaepgAgRPhV(QzS9zŴ/@>'E,b38D\c DxPB;V?^z9^R0RPQf\eog:2DpKs̓ R"bѳ5Ԫrq7n<(~N"e4 tMU0?N~S)%j%T!)ޛYw.:L ylOn \N$XS9F: F9b~ǻ1lzXҷmQw}P^ n#Ҕk9#a=ھ&`3nNP6ofjPA(t=Mh[й]qs3?3~Jyo\Lݾ9VI\(-.|enfC%S endstream endobj 507 0 obj << /Length 2247 /Filter /FlateDecode >> stream xY[o~_ᷕ#VdEg-X̤ Ud&Ɩ\IN6=nz&ٶ1M;t]l8'FUn߿A.t&՛߽rE3b2CWW6š:'T6wmW>x-@$mU&vR-3t7=Qs'yAuZZZX}8]>9 |E)1R2bʵ3w_~2nweg=)Deϙf Li5I*c2NҳEiXtqޔb Pmlk\"A'6Q60*.ZԸ*f2up NU;h}VL4 0T7oaw-L/TwUg)XWh3FU~)޶;ĒG < Ä,aL`Q&V؈`c.Q&6zG?D!Ph…CA>\ШeC"M."2i˸ֿMi[alꍯn |:ߌ"(phs)nkβkcGgck4 }-RyJ!Ɨ.?_%1mTҳ>×&c?8Y9@A~-ěW[{7x $sڹ3 M4蕂]5Tq #@cȜ%?:QnWԶ9:U!˼[.v[ZB{{싲mozyG W>N;ϷsWz8goy b9//q_P "PL(ɴXLʤr$suin )~Q| 74Fڽ|Yu oFY#[26z-!հs kR`M!6n³:=A^үE2 \omtanjS"LCzbWhq6%3-QQ"Y~ќA]#ps;t*p 3 ݶ WA[-Bb [6.[uvZI6 )֎"\ f`)ToI,o5Z8@qVʜ5-D~swaF5*A{/CP]9}Jyo Sjqn,]h c7.g* LP&8 !8yNslYj,;W!+KPNjނ%uS Y !BCl .=$T5NwGE8[g{C'm1,ׇκ4aY1_6r68as;ČN$NǾ!9bg7I)f 4kE[9Sgyޏ[ =BX/er }lC 2_^X ŚS=tzF FCxM@%ڔp=-]'̎m.+j|څfZ#[qyr!Ϊħ泳} MG6$zs+(8a7VaL y j +e +(5[{z/rWLm c7'z>X ̔u9! g!:wj #OQ8w8=,ԓ-! әx䰧)`Ȕ 3e铑K~1A+ue_&K#ADvg\MQ_>^xO'`0᫯3gBiS*(%{jJ'ģܴg ixE wBmY:|j+8j)Z6uS"X$p",xu .4RA]1LLj R<{f;Czw9Z8C1b(fN 3uǂ*m×wVp?F;3 thts(\Dz%|Vm÷_{pG޽>9}W#}W#}OS}Odˆϟṋv!^> stream xڽZ[o~طP59dI"HZGAQ$Kq)-a.%{.3CrMjs3CjWȝ3F6UgF7^|Luװzg};%E! [u|y(OS=\]ckkC?cěf:p†M^m+W*ONϾZ?r\ҭYr+L__&9wH˯HlvJ"M5n69피:Tɧ3/%X'>!˫qBE8JQ muƉV]iЭKr%lw(NJ תgF__,1 ۯ4)3 G ԁFy۴̈́?/VPekU&Lf"JftP ]=UH]4A;9 ,Ot60E~lŞKݞC1ɞ=O' 9t rMX 5PuJ<#dpe #Opף_V5He+qb|TahP"KLJYVg+=m75h-u'<s]΋ No>&C=? P'6DweEAҳy5M @1w8}ިjrx oc#Ne< {TacTH,jlؓNA?[$붞gYI4`^+d^2bXv])Njeyms;hb"XaLJ4ǘU(!Myw^&7dvkwE2PZoRu+Di.$k;5ٵ@-秡1yߗSɭAX47æAL!z3it9Gd9|]S+z(o'>' f>F5KJ~i۶a ԖyKpFK<ާ9)ضhtcSTٙ<8zÇ,"`Z +J_v |P FK҂ n* E]Z)8xsn18CZr0#cςj9`-_Z6^+B2xTć?<ޜ@!vĚgANULT p$J9,jOTeOhǞ=沋E0?A~ߖ^}cws<z +]2'"> '7Lj+4±6l6 &լk?x0CoB/^61:mEM #'`izVN+. mH&esfpR=LE {@<gW+:U 98 ^`ꄢܸYs{ h.J %3kFXtr&HSW/I \RmTtu 3I @\O8: ߔɸZou >sk ڤ(!)4#yށ-'Qtt=x=–@2ī05U̸F2o'bW0)t9L9ܟ8J]9n@a{#8F,c)Qj~z?CnBA*έ5XrsZo_J\(לX5bLdvB 2%UR |UO /)2!Z3_`eBvAV,(Okv\!)@`3[49/v-Y̫mbކ!n0}j 9ԁiVŠ+Lw58N_VWqZR$a5CEu&ߢY:x+ y957Фo1QCx\/d+5pZI4C +q`}n.o,ncnDXrP2E /B >.6@U#@)]T/j"[RwJKZ &5!c=af^9EC="1zWge"<E 9pxߒIefF0ɨGlAK{*%NɋW4<\X APENb'C.t{ <\Q Q gyL\ ] [pq.mںE H KAOϥ r=df܉,K׷zV M}F>_C:*t-<)^łQ _o f5) zDUXvO|#(#LXSR}4 o}]*0mf̗b7^~K5fI.v<΂cB:p}_&}'a?'a sȣ=F: H,2R?=/EEP.,93 _U-0EX}ѠE0_|j.ExnaD(S2M$p3(gB@K~7{`J jbl}][6ԴB? $hpQsj1t|\݋<6귍oXy6/c@Kɝ@]5}P82X9'ԁc=S邁C}yDf)Qޱ@Ol9늲,ͅG9S*ÇT2{=w{jcB޴X0i.B@vם endstream endobj 514 0 obj << /Length 1024 /Filter /FlateDecode >> stream xڕWmo6_oE`+ڮ2զmbQr`GɢD91 ",2Ȍb{Z{h<6.pmx4"hFjj7Ů*c~CrTVv+5.dA݇( y>g_{BI_\GPR2wK=9# L HeT|Q)M?[lwьa_2/_WjʺBa#A\Dn*k9_B-FƩbEm9ڍ n| /JQ4ms +9HZQM(*9Ig?sg2 4+1A)9 쫁@I-}:,=)i МvA߁hjUՌwج9 1%@qdj8'̭Q/F߁]UKF@Ԭ3j ؟uBФxIG6©}A9KQJS!)!SXl2*Ǫ.m4%w:Ys,m'*N bLab1|nx~uT0Ln:&tſj?#:5(^Tu)@|Ho~אtn3@e#^;M\u)y+ <'#N1z)Wsa|wFC#zQǃ^Q%[WE8Ky;=[uܞ?[?|Qˎ1ÏO Goi9/؊&'ŽTEYnn6etBl1ԛ.jI8)(|tժVBϛ3o5 endstream endobj 517 0 obj << /Length 1136 /Filter /FlateDecode >> stream xڥVێ6}߯PIɒIMAJE@^)^d[uQx9sf8!v|ag;hN:9f[97M:GcI 5ɜ"YH&%^od>l,5,J^ CA04z!r&s%yH}KS0pFq0 QNuF&B4sVe/7>6y-J GC\jnx54(vNhwϷvr`"M6]l7`"̦2?>7ԏE+i6ߺjچBVLHR҅i5c26-رyu3ゥ֯ P36\jk"t7S|fQ eApe5 xT`(p.,IBK2_wKQ[P7曘OZ+i7,iurHTklKUWT# -U4MP:V`Pi,' Ҫ<Fe2 nJ/Q~)F> stream xڕV[o6~ %ʖa4n=GKET4rDRKs?-Gr 0q|oŻ lyq3ztYAkwUm"MsA,J|ן~t|26Pa哴aC@_}Al>P&[NBB$R^?x] c_w.$CYV yKڎ4DSH'0OQ!;izRKwupԘE["}9Qj]p5oOScNȷ]ǞQueOxa~LHۇNw|GqTRKc_k0x? ĸLM3ٲӒi`G3v sw))z(\JV L(YBtҿ^wbѩʢ t~loE\ͤt 5A ; K`fbcp}ơT3ɉ CIzP`4 endstream endobj 525 0 obj << /Length 1655 /Filter /FlateDecode >> stream xڭX[o6~EfYn]6Cv݆@興L4+wyhIV0ÏυJ8 /̓,yͣ^> IoGG/Q`뾩e9ʷ$c/z>${7.-ו^^xg,/k.ơƓ0㿖n}wyq(ri*..JUN 8LJ|ybhN$ ~~?ci,qx6^a`j5o7hne}䊑܉be^-Mq4 Mc umY>,)Xؑ*ߑrE]J8͔`32/H VcӠ\zn4Y`wiZܞC̱Lɋ\3;l4cPiwjYwc(,8xPj}]xPLs%͒J bXhib+'}sAj >8%cv[cTsXn$uh[„MTWJo݀1-8K<0l6{%Ig4'IEqsۄ7L:}si3w>hv{Rb(EPrwЮ`Sk6-|-.İs-N$0tnfS sJ! endstream endobj 529 0 obj << /Length 3018 /Filter /FlateDecode >> stream xڭr_7C3&>4QqDnҌ&! pЊ=].(Ȓ݃~O]TEaLZbpw{nׯ7.TVY.ocTכ_oaj˕1&\YnデvwqazkK4+UL'ﯾ9_H9B>Oz^TˤOzZM.uId$cK6:l)Ӭ aoAbԇî]Sw)ɒ[9a`ۦc)T:-JƁ"."XB5awG> ʀ5)f:݈\hw;vֻ9 4/1nM ٜuߡd~^;'JB`E{ FTwWﮗTlõ#u~$"+ B05_"t.{LXCPB0K\YPCx%] Im .yH L mϴxxu^PrP-S5}|1 W'}k0WVz Eaᤫ 8LuY=Û"P M9ԖP#sD0򆏻S =]rw|Blq 9XpA & /ڪdvcDZ9`Wyb 21e6y{8l#E{ǁSYcUϧg[#݆p 9bV)oV5`,~b?q|ކq;o{9<Y?r< acFj!ĠKBf(@gQm)stAI6Tbkp\UӃ>5I(3܉*!BC!-d @Dt<[%8d_1.ZF5e}ٚq\-">Ź{\{^W`mwX {5B^s<,U?6X oI Á8*R}yLئS] i܅ Ou4JHJG;NM7IN[ c [gԺPV|tP! mͲe/B` ;67) };~0N7-9' a$&:?cķ| QO@ 796/ȟ0FQp{%ԣ[9>'x,şv>C2*1wيCE|Q$[ ΉitG]?qJz1Sq@X 3. 65MCC՞Hz:Poz2`K\//L9l͆TՅ4VgcT38Æ(\Evnĵ ~)}[_ޞuikGx$/4;x82[Ȋ`m⎣,N#&7m12|fp~8wKQ!g܊&K1)1OTzEutA9<(xt$L[MirI=oSa < vBOy^o4wm>WdB|r2` wpe>\P(";\:jjSs;qɕPg{=q5Y±fib^HPAQՃ+挮2} M:n$])h:Lό$Ş׳1#RDx!@&XpdKUWaET6Kq9T`TY3oIЖ\?>ɥ"Lohǯ 0@Q-VeQpڔ\ $W)gۚ0>Ҽ*f\}O*ia ۗK &>B-&[㏎::;x*ߏi"Xôg׳;3_DԈ SUղ endstream endobj 534 0 obj << /Length 2458 /Filter /FlateDecode >> stream xYo ߿bn\_}n/5wMڇaؚ{ {f'mC C}QIl[*".eӫoWD|y fHK2)jjVFqRzBDO더inuu8- ܷӞH裪,R +҄GXvw_8+Gy,]et_.DT鶺o?,Ver\KhEOk.t=*=i;}mUtk9XmauYTGصu5COihR]uMUy}!EG]U+oǽiiD㚙@7 pW(HM'fNqp<#ꩽ[UΣ4yvD[KX~u{$J/6`o$Ύ"MiZj~TXAwٔ3+.ܗH'!)dw%IX!"sl+=cg&#Zu }ㆥ"Q.;xMl8͒k>\7MsfypNhxӠ9-a\1CM@y18*CU8Oa3ߠp|t[SGoOJ +p{#Q$, "}yU!./9"!ΜQ)dI i ĐNÞIlY.j1-c{ B 2zTt ".̠)4Fy IG#^h;,&ccQq١J/mq^ :p)9!$N%?8@9 6F5D~'x=LaKN{ZyAd>AE4&;j^yΔIzI9S)3{ܻh)ok9Ԩ_Le"=:[٨zzmF7gOE𰄖Nʺqv8C]#:Uo |滏HbQWd)X~g߶TؕIbRy]o!q;%oSAWKR{rxTFGn5kz(;pwo6}+g@mq3l\~Z^ #e׷hgq+~7* endstream endobj 538 0 obj << /Length 2680 /Filter /FlateDecode >> stream xڽYYG~Wm[T.a`6vY CDTR`YՇMzP]ǗUrOxj-rGmWxuXZ\.SRɡ\h#zc^6uS&n@g/`D\ZFnUd>r`*/nRMWIfԆt?mF^!aR*p3eL|6QSo]6Ν޷}}E&UƼK>eE EJ1Iq6vi,m%o;FI%ܮ6R iik$hžʝ+hHwp4V /*yaЂz-rSW7^wuQՠɆEsoz큑y*-+Z!BH^%z̾Tisyd|R;YXGT5/ n[T۾*:);vחp{_W#4B)D  v\S9ƿ`'I.buC)O<[.0s5: tαhb?$$ pOO"ŋ%V=^1`_\,R2dտ%$D)z彇3HM0?'d*ˋߊ|%<$U<@Ly }wQQ `T n 5C='V<9grYwx)Ԥ ;=,Aɀ!x2W"Ko x̓}SL<^h.gMGh(at]Ԙ؉rYr0)mgi oL݁ϫDzJtoA]}FOM:73!;BfP5 m~ksP<NRM= ʶ14%bm˫ [{$30ڨ(+T޸[T* ^n'qPNn{&`wnA`ோ++q-Z!18uϛ}8yey2^R9]n+Z8 hvq{,>^ 7}pse%W: V2 Ыʫh316Purݭ십[-!N eǃEAp&.BKa*G33߃"BWTTG(J*4 '#aC,kO雝GuR( Ȍi|6%~8ŋDS3d/1U<;%׶S>ۮwĮ~+Y1;odzVf'<Έ_BȟTM(֛Q$"cMpMn?'vΙD&Lxmޏsl jO3^NYʓR#5cRE o{at˩[]E[kOHV$ I OxM lؼ*O#)&K: YW=.1d D~=gwm$ ߵ~ SR+HarOVoūLnJ b_^?ߵ)q@|t8h3$a~Qm2_6R zh?dA koqv%?UP#j^DԵ;q٠?JE)@r"; N]ůHj> stream xڽZmܶ_T]e*R Eɹ@˽+]$/ί ˞|a,9>3:O JBj{w_=q6';?~Ƭg/z7=zz}/o{^RZkmnxZ=t/Z g Ͼ2R>sօ,_N34q}eDz\/Pz6WqoN-mv{(7qKm뻎&͎~>n|۲oZ:`w7}qW)תPL  7kNPLZ4ۃo߿^@š\F ,2R <$i8w7ĬAҫ~4n- \oȳ]n.5hJL.>j 4#7)eS[asQ`Ⱥ%/8hWGR# loNG_.vߴg"9|F1ӿH_JmҮ.%pT׃.e@b LT0f­pdn˶QP~M{} I]dLXǤseFi[b76UdOf?rۮ ؟*Q?'#0'Ua.ip$H2X{~ql㴪+j[́Q'G6l}GE^\uQ:cB;7&&5l 0Wİsi\aFn-Hř:Cf_ƌFo_}͒ X}99hKs,WgV[/t 1*k{_EmB D ~t]:}G N 1[ɸS3Cs&ԇa6~bӖ~wSsS:)kXa󳨎/hKaHvDaYS{ZAU߸1>BsNǐg4sDZٗSgcn!1{p 9L #O4rEtz%Z@lKI[f`G|vkfOw Z#1&utd0Jb&3 NVf KQ}#!1wC4Ȇ0Iio[:\PjlF3YP|G gk0j<8:^!=WPNܤ"◡:@ %0a -,[1tW`^#a*bƤ宀4+D~HO/#kp$N)Dr5+ߒB0jnNc_@JwB۳7O|!ӻ=xY F"$!RDMiVMӂ+iy '+pVUtpL!fG̷=2`Itg"z2jA|s7l%̓I>o~v!!+_ėH$ŖЪT3yU +! =~Q9:̐] I;|vJ^fyW ^¸@1.&R`;XN-f(*V3{<_]D #𠾜cE&żLV@\`/s/A3{_IBBuxVLTo`Χ@$  ƻzG8uBEX3B2-?bne.AvG]`9{qFen2(..ANn!` IGlNXHh9`oyه 4dLգxw8ʔ2+p&fB g)YL sD(I^a9xfQ`h3AS  BC&Cߌ RP̎iYg@wZsi;E`p ݓ@>fΤTWqHw$i@&rs)pX"CA^D[?K)2NHץ:2=1zZދZr`vT/ BYB(kh}v48{)A2gU-(lv0?WLvd'!A*Cm$NFr΀mM wǧڸ$QIeMAXg}#, asCYV> |.MD ).9[H B旬1Q(<ޞz:\YLMOct;zZ2{Fh#ӡMFpAk*[r4|)4rcЉ_", @c6VC3VDŽ{=&FÕӡDŽ(BǤ6$O@N{L[Kr9T>pacBJ>5rI%zzKHyeQa'40kX?syVnVH$Y9}xhYTR#1D">Yjo8jS󐂟B_X<(J ^|6IY?gfB3.)BLYl`"` B pTPd8*B$Wy.P> stream xZK6We!ċ wOvjJ*:\Ñ+'avA@XO F)E.Pb}xfA߼~ o^| "-jNuYKڕ6˕2Xɏ)U7? f_K:W߽ ⑒DWޚE+ƥ"}er]uDYޣaZ p%seJTut?Tukx8-Y3d ~Mu)uJ,Et5(9A@5I'c*#G{]1(IҔ4 jz>]lwina!qO/9U)ɧ*0, '0d 0l1+ngZ[RimuCqcICݑj 5yZYl?v[-uo6 !ϓ,~pvT'ge,-/X^Q``jh3Ǫ?K_Zml5mXb`uoU. fs0<*J|*:Ax[LDS0%ɡo~ ¤,Xgx&_ḱQ+W8Q LH&yY*4g) Ε+(P֛FUXY3t-?*RYUz"_F? P2Ĵ ( UQN`cTe>.C">m1X=Q%XJ[oС ҰBζwf@kb@@S`(@/qI]#m\?g4[#ASSgA!x1VvիF1H|hXwFŖ=(նK@+FH݂UAkC_Nj]"6Zה+`2A,-T@IzhlY%'sk~8 pQzOmmHK(ˆ< mͶ\e4@4gY}f8 C{xޕ /;'zRhXa [Ygv|=XH txY581n,CHo)Rp!r*C< ɟiU6ɪ}t/ށ)t"=?KM&mH0F6So)J!JKCowhHKz$?ΑM;qǑ> ! ȋ'zy1Y3jdI}`tTp-ExĈ|ʁ[-e#ߍz{舿]?XO!ш&hݞۮcPB G3&@G2CYՎc #9vηgvgDb>V~f>.;_H65)xQFtIgLb@b*^OQ9hp }&e>=##K n*9̶4S#&[==-+ E FgQ*{s4J%8fh=QU=*=+=@,D 2:$'H ]Xv7/t]ƸUx@ W+^Hz;a`<2?é<0}|Ab` n*瘴R*4<4wf߃XܙcMx4T^7~@7%/؞w%-Bj RoybT2@E*>D'Ro9oDˆ0}R0Y50mSvG7}EA+l8ޏ.[T`&}0R Ag->C9LY0> K)=uoI ܞ-XxM#3&m**кK{q,Mw|*7}NfgWY]gCvGW< t1kII3ePGU?* 3&[gXS{Mzts c6@&>\˙kcPnħ!+Zm! _1w AmR9&GlIW !,YM"Ux'xww[cլ@FGH} 6js]uprhx!kw'uвrHnTݤ[z_ɺ.!ψVDW]F?v7ߝΡov2 @\ Xz4[mF13qaĘů.DC  '$QC\ԸI6JЎpG1Sx`H>\l`.X1V_7tOAks5:lO+1j jE| @> stream xYo7 ~_EIQ@À bؖM!X` >.}yOxǟeBRZs 4ނ4W9(DEd`Q s6p GU O(j6ɖ G5+k LWfȒ jO?JiQ![[-CEHV}JxS *I4P+ ,8f0ph <2G)8ImWHpTr P`%P1!/®&7%Ѧ$s49(bjb``>YtI2A::@\E}8Uեo LqGcY@1%̴k0^J2p2nsP3c Cb0-4 hvĆAvM9&+w]%s?mx z.8L 4p@c,3/hkUl2}.A /~wSX~5y򤣙pv3P38P obzuy؄0,L_.mGf/_;0^,77pdbqz\tMxs5z.6Ưku{\.+כǫߓb^D;KLplDATGY%6w?8W/W ~zX/)[u C-QQU L=IGGGFHu In|Kd!-m(R.u+b5uSDPX\_-?xƯ{N>BXPn9"? (~vV!+'^)~毯7DۊA\XLT0 i}aqu't>lCJ{!erTHb9=*W\/6?lslhy舴"͑Ո33EN1 w&J(Ep")Oh*epiР3aii5}阐)Nt(2~{[m08p4w/Zm44ᵭ,貔Hh*S~X-b1zۃs=>:أI?^yUݧxұ&bnmCQF؍4EBX2= 9>Gڥ)CȑH:БoHu#iGշݭ3IQ.̶JL~Isr+ݧ%DK$\GQ߯{١m`MQA<99Q8X~f!C|?FmgN};u ʽҰH4lڎN!+>TSߢr4`'?T *~4? d T\G~\ť>;J+W+gxFjE%AGSso6|@߲C7qS|`dq@߲Cå |E endstream endobj 549 0 obj << /Length 3067 /Filter /FlateDecode >> stream xڭZ[۶~%܎ŒIys3iiM_\+B+%R!7^$*kמ}ppm/^hI^D>/bȿ޾tGav;u[wZkooIlU~ǵ$r_7qnqF*HvP'G>da,OX'wu`{\e84U8msvToX: |V{WۃAWM-g[RyֱA< IMpYwU ^ĬiaCe4_KlI Q)#OgG,D)2C"-_ŁDe_@ZLt gB3~`0Yp$g/\ia7(~R`M7.GtF*4fH%0ٵf9|)`y;J "7#&:fBϠUWiB QYB3n#S+œZ, `Fm[RyEV$3 A>72!=5ćO,N-FB 1dPsHe֘ ~#,'qBB  %LY!~dJRO qCРnx> LmDS~F4Nc۴BJ%"9*SA'߱3G} c@y5[!.Ύ:6pִt7\zO y %y3&X^( 0ڰFf*b8P}詧NP pqz^$l5"EGN1=*y{PSJݵK?v~M(D "@OQp<>w} 俾$jw^_U^ 0НF =6G5 '}䁮 k%v,1@ Ѵ,;DW#t%Z#TO HjKFa wʋn66 ),$o;lGάͶ* bFfO9nO;1B(7,=9꒻9}5"id wtpHo pYmҺi]K1!B/LώwkbD.E(KɮP\Aж? '0ahx7"{bš㵕"(cTxL;+bGqmNuXwMڻG0ϥN`ݮ9e! X Q@f^XŰݯMQpPandݧy>5"p1-閖LGoX7&[#:sm/R PI;jNliK02}ƫGx3Vw]cvDR Ċ.csµ,[hPS˛7W;HS8kAgrQmhxf4n9nj:on0!iHAMMf̻@n Dugw6=yƄ*P9(j%43|~'G@H|9i[Zxa_ -f3{f_mV+P8rQ@4qWU/0wt0ح1$a$OU[d, ;)_d<`1!X+XTbt57X{&b(Zgۙk&&Žlƿ] 9vKa/9-K)NDx)qΖC$ 4#e"xU PhNNXnӤ`D}k+ ۑb/ FJO\&o$a=<@]dpMGaq2ClJ)h@_BI>o[CdqE9 @lS:ȪՖ˺]Bn.zmhH`IfZEF=6ez%F3շf/8H@nHŸq7=쟆LMr6GW4,A<'$b%ފ0" C|pjfopٺԢmkh`CͩFkL*(KOm¤g/N:{O/SDF0|:6  ܦ+nEdԒk,No[UL) }>Z) endstream endobj 553 0 obj << /Length 2988 /Filter /FlateDecode >> stream xڵZm_!EMrE E^ qՉ0E*$˵%/.wg_fvfQ*ԪVaYDnōo~d&n_<Y(,BnV7՛Cylhz$&KuX5w!zQfIt:AUھC,])ĸls^񊮾lo506KȮvhw`om w&Njt[כ8Mm6] y ǁ,o ˍrl/,/ UȒ[uP5VƷTہ K&ajSmg]Eag IpUf} xDbF*;a {"HݝpXX6,໦X&[iEydg!S/YZQ-&& *pDGAR'HZyVZֹS60aW[8Lбr'K'QuBwWt<>wn.3>Ndƶ+{Ls6l;alFRs!72da񻅋@zoځ#I4T3oE CIǕLC^_(6*LMA[\L|L>$s֓yk`~ck*-;lhԶyV#DWiZcu7/T6=a."v]7\hwꉀ/OО; PL+W{q(r AܵGna}l x_q ݖLgE_|owNee)̣ :"ZqqAV&,3ef(Ҡ ` 2y^!b`!.pf(H,1`Dž_ e`As々ƑƆ)I I\ej/[2U.|˶'9Gb'bjl"ɤUmo ^,Jc|(Ma.#4d;,/zQ lZGo\򍋜kq\AnYƸ?T[A6byjv|Z'ry"FU5Hl%T`s'BP ܨ1g%? ̭F1T2I ICR[Fs ''*E/Ѥ(מ4"HB٠bĪmȲ\,s&Kv+tX+{HaxSf0{ʔ/Z} z$cw Hu i3iƏRЙvػ"@vĆCDnrL2M8dH/xG#n]GÒOgw\ $Ɖ=i_z~s_yxZ촲Cs <}ΖԙR򮲋N!љ&t~26ԙx, m6oy0溡*kܣm'lQ:f4ȉoLVXNHqj[Nq!d n շKݶ̈́T$D_I1D?qm_/sq)fҥ2lvnPMS9r ޤM2y`P(AT\f^5q0׿K\$ĸԱw1gyt^8 ~}vb6v0ЛN%TP%؅dɀdjVTl2 s?HOu'oɊ$&~@Mt=>fYe"zR爛l.Hkj=RC]F.|$iFAh ,7 yO*ZbdlQnnE-r `>]Y59vگ:OvFpDGtTZo}ki{7HVZeU/>=/u~ckEH2+0|j wd^|-N38Q!hx@ Lܘjie?^K `V6bhye "s8\,]L7v$U_;t+ʽp?uYJʞr;̩Ir(#jBA$yxSeiϙ!l <i 3m GP1E!OMLN> HnF K<M7u>^WCg$ /0~F5t1a>*Rs*CGJtW`St"4f  CE$HIbPbv|v."AH6,x"_-f.Ft=ˀPOWtb> stream xڽYY6~_Xu֊ui`$l} -QKmIߺc"EX"[mS<ؤQ:͆|wd&f3_8ިσ\m9}y}s4v]E^vuܵ79ȭ~z bMYWVyvSY^/?\k? #%Ǚ]xdWfgE*/qXl8q.x]+-l{t?]}UqMB0NE>&OYEuQG)č6̼-M;VL)aza.,3bmzmWrUgͭm8Sc&~I7E{:!iUGJSSXMHy G#15S HinwȂdm#wHq&MLr}FN^wnEIAAZX&LCӬqiRKωJ\c8Ɖg=k*8Mf`o~TL%tt\[piU\c~D1t5-'H@Nw_V+ )BpE"wQTI-Q‚ΒJ;Mޞ:ss3g؝5~RᶑCRC"p]2`@e3J}9T|C:J t>*䞛r)h$#d$KhU'xn(jT\{'+%^dV~+1SRcR 7 9VlS<qY5ynjt1J$I3,;g3J6%6EGgƏT:KIX @ 8h`hAp" Wch!qpG7c,go/ zlcdd)sB`:;DyꙦXiV OWOrP~yKe> stream xڵYKsWfj 0WI%.Jl%9T1WV~}5ux3__)&:,LٟnnM$vp͟$H*u[m>=;uy3& w}y:O<[/lg[VMnnwQ8Hov;(<9|&K$J6inH>os}]7( $=o풠o鱱cݵwe_Q!,iq8.!#Q9QdN{iP<ēO{TPw,lSi6΃gnw,b<WS 0 o~i&MPdԦ7*4V6:3 f?Z"m 0ךz/P],7&Ϳ4VE{lnb V&:D5x7;lun ǒaGS>js[x. AIni_ |~<ow @:ecSK -fF}̞Bv?ܦiT3]lB00{; w\AQ ڮ>&dձv(V2S9cxEMthECO G=@v$ܳ䇃*lcBB"aA4 MZ@7ħ=Hs#=לDFQ$%4>7raͩ|k/;9탕PZ F4GW  1F\޵kc]%kEւ\d-e-3e-DR8 EG'@*o54$'K~hXk,:΋}d*%˺xI.c?zN4:~s)G, U4tY?=R^`Ӽi˚):KvPagP/>j1@ 'RPdfb B]\8Dre`I/*>a שW^}6Qm汜GJ~Y%+Vsq`#ML(6Ac>Q Η|I[j:~UOUSjR_,_[!!G#YIJ`DlZ!NȉE}˼HzDvZkq7fSP<&*$&| endstream endobj 566 0 obj << /Length 1563 /Filter /FlateDecode >> stream xڵXK6Q"FH=S$iz(dK,"K$wpFHp<2OEdI" &!7"`f?<eL cQą nsQU>|(IP}6}nwzo[gn72tH&VI7oyy{V(#,F ͵&ɓoG|0F(^L7vs&웻ǻ7]{csYrLHrl* m˿CSap@qWύ1-8qHñٵuЪF jO&u,oOKRCl]]nAJ 5X,vd2wnh؜z!(3}m)j* ow|r[{lX<9YjDwi>1hmZ)N:{VPu>b?hm(Qnd2"uhR VivôPY'@\>g؜Ď |\=ҔuI'%"P2PXQwu}kq̵UBy>]GV䪀'x; Lь{_kH"Oq=:8[d+۱%201?,ƒ}jMi -Wi`RpDmw4c_1Z[IZl\BuW7h b}x s 7uT ^q9%CyL<.T"@Zj:J9E{ *OQ~ U57[gcόiȷa)K7scǿ;?O1JL?ۚ endstream endobj 570 0 obj << /Length 930 /Filter /FlateDecode >> stream xڭWmo0_ėvRӸMGRk+hː*(Ps.:*{{ݓrN0D;~{A{fe9^]Loo]Q;h8zY4vD,W3tGGGB:GCE}_Ӕd!s#ϱ~H*FyBD/18+%)Nϲ fX'Du~HQU)Rf&EPJD(\Ȗ7ZAB ( #I"OS>/0DQL\[ )0yLŰ*9Ǥp[9XZ=sckdzbvbl Kʢǫ޻uilinx)| 0o>'ΖmHU 6~YSPTMp%Ļt=8b2dĔfJ`|c5ƋGLY~҂j 6 1_[TBĭunIE,A~4$;lX w]حJ@%\+'Q( x̔60_ݨ"R"3*H}1$ 3d?.YĹJ#,!hʺ$p][\ȽaųY 9XǥxP= g?(͙ *7{sTqo9'_k\a? I9\}/_F8f%,Y/Cj6k4^4raRce0EqV2 #7;5jX(׿3#G~\j)RqTۂ2ޥ5ei ˂Uw+H3tf/KύL5wV娧<*3lC=/_afROG8yu5++l endstream endobj 575 0 obj << /Length 1057 /Filter /FlateDecode >> stream xڕWMs6WTrEIYIj;\1 0 hY ~HKݷvc1qԛA|btcHaQLѬ|:9}ñ=uպjj? aLu7'J61aVJ3Qߟ V\ @hyu5=q&S?ܼ]\i88Lo~!~L0y"#{AP)=RaD€eOJ܍"dFhW&NF0J&^DimQ$ĚmMf=&xKmM[~:B)6>粲" {U| vdWjӟ(L'[dB#!oZu[j vk;"A\K,sz3,,t+֔ZBoɔ sbPʀWv#Ckp-gK{[ۿo[Jꔫ|>,:=k`Cyϝ)&<4|g ?;@CUv0i%8*(RFQ"=HlPa|F8W#l&,{ -&y"J ɜDJ_UDO0X.v0CQkϊ;ZZ ZE@`釕~D.DAiV3ڇ endstream endobj 579 0 obj << /Length 769 /Filter /FlateDecode >> stream xڭVN0ߧH4T:@h7 $ дw];$nܮcR`81N=egKfX\uY h5 0cNi5;sEkygg])ffg T&|7swkaas1}%9E}36|A첛Qѐג%=(v޳fnVY^Jp?*NnO^}SKACZIcDȱPդMyM ,cq K,vdUC2[fqZ(%ʓ0W>5= Z9keΒ,"PփO:ĥZJ1ES k r͖frU$t\S:iD. r/Q ߅xBfK-k*jp[FR&._MKur&,<5 endstream endobj 583 0 obj << /Length 1095 /Filter /FlateDecode >> stream xڵWmo6_!Cb˕WZ^-pT@[Lb4~{IIY6Kw=w~}+Mg^WXo|)0AG3=cK|+uUzAYj%>]Gs{` oϮPOD%5u$`~dM뇑 TQHf'`k)ŋ=$ûϬ.KP-gխ@ 6Q[i4QK(kyٯQ)P(ȴ!j\ Y.iwĦ}|NS߾mb$߭d2(s\bErPebբOon\F0QnM mc#Ha36.igҦ/8*e Y!8t%ljR?>1&DBHaFcNlK&Xf=046HMczZ*ꈇٗoB4aD)7tI8KG{42wpr`k?"m<#cQS!%1(娶 XWzWU]n HQ0 %Sje-[b+UUa6ޫNe{'*[;a""|s' -Eѹ!0z?u3I ACu[-O퀚 $:w !^ ._57Fjt\VAxBԑT+<7dOOP(̰gJ28+ F%2I3Kw{cU- DŽ!1-^̎}:PwGR>IJ ڨE 0&l TN&BBE;?>o??8 endstream endobj 587 0 obj << /Length 1021 /Filter /FlateDecode >> stream xڵW[s(}ϯоɩ]{;yvL:iILJfVB릝 &`8>g;a-UG~;K֎\i7c3E;8IJr|n)$YndEkVkGt#FWo raO '3ɧ*sA!pr>x,3_D#|JX6m )9ݿا ?58gmNzq8wf=\xjPamR"Fv/0G3#]Zz-ql.f \g}~^KA  B 5HͤT@P1 kN9Gݺbm~ApugƑ}=j.VR唑{'#8Γ>+N=&Z$T~G?΁;-)5~eOoCty(IEL'tG#][,~Q*g,Դ^Y)ogJ RYN*S t9F9P>Θ;in#}%Zۃced,#qʡNR_ԑoD:o-92U:ȕaTWˢ%]mjE%T+'wEl5u$u`Q AMs+ﶣcmSBh.]BoC!QKuH7NŕkMB9oe-;C{}o%]-`┚d ޚ}+?y[x> stream xڽVkO0_ZDBGIФ6(7HvA ώ6 &?rdk9,[*¸<2Gn; 6§++%H jKLl+P )P7suM |B-I~ەxm PI54yvF[H]tf $nv"uR8MFZE> stream xڽV[o0~ dqn4x6 r֭66;pt)Aѭ]%j4u׸B~U"jHR,4u[ښ/zk~&Ԯx:i"3k(>)<{5 dzru[$ }pcS~!^*ɾ9Ӎɗ/I͜BrQuYˊCb(ᇇ ŲM|crBӞ?ҌXVq?JKi??~޸RD`0]`RK$iHrv۷R[_ endstream endobj 600 0 obj << /Length 839 /Filter /FlateDecode >> stream xڵV]O0}*U| !N{Mqg;`ωo2>;^i!mjicN݉,{VE{p yo4dSkjj7Ifq>׌F_.I5_}'>~tt<0ijl}yEȳuis:9shk"UW1*{ZH('"2sw cjRTN2+V_z~rUjo?T_3 5LD$򚲯ő!a8=yg'%msmACaK[2H7ȲݻG-5Vߩ!"hҖAsN1]"=0Our/̪S*?FiTI_T%?T=~+G2v'M#UQu Z[ycmMxjQ*ME\r^V&4c|xuf)MǼ1hP]5ӭNHKHSܪeuAmϲ4BuLI>Ь?}[[eF2^Iٮ]Iȋͪ"˨76q(97/ʒ_mC#_2Kk~fDZ2Y63V@2&8Y3EH@8~B K[g˪TY_^Π_(?u.9q/1~mSƶmE.4j덪,_gU}Rz#c'56t7Em ˞ph.MԺ vcI endstream endobj 605 0 obj << /Length 2818 /Filter /FlateDecode >> stream xڍYY۸~P%TՈ&xIy'V I)R!ϿO_ )NJ kZVyʢ< V+%|`8^$+ynJv^˫q$ ygT*qO*ƾb|^o"2ߡ%zocӚ{Z/n޴ }2n\UʼnDM1HI{}WixHWxݲ#PR՞~icguWgN&j_$vS8pCli8m /p.XJ3NҷdcK1\: 8Md^~#Sm26VXP7?tW0fsK6mY~|e 3Lŭr\mL戝sX[2}\ bDvdT'!WS"&ewШ3{Fvd*N,XXSB0!7@ret#qXSQIzD<u&s8bo [ EZp0%vE#KǢ?IbrӭVt4:.ֳ瞬'we8Ln$C8ɽ\k'/Kyu;xHvY.@ALSȎ1H4YBE[sh\d[†`ȣ㴨7qR$ #k2GmΓC*X$XK*1xT䗡T s @@^A-aȮhZ@ (`56-7'֛|D> " z!İ'umY42Q3>ꂸiTLT* 1VhIF/RɌΚq)PX&r-% ZZSp#rk' 1.bph#`&EÍyYqKl;^d .b4CU9ՃZ'nߐE,,QOIHV%eJR  7>A(j=`4%F^dv/ni.S'%E+ICa45R*HP tz )%l.%O?߿}?޽{p Fs |ѓE3 LO FE:OcWW*ؚVː;jaX>x  uQ locF2}#<>HdxQ^)v?-! !mؒ{Ͷޗ+ +1a,ʁl]m!n!sУҰ)pl$¬zL1`-:W{'VqZq"g rwCf4`!)0sy]R IxDe)*5 w/؛;ɓ/nBqݼ()+qfCmtt_Z!fC 2{ ǯk0o"|e=Ff3T篬$ ΨFb~u6,ܥi.`g1qa `:y9=. 1,hE,QK JCYyf ]oJ. ^vNsk24fA2oBXb^$_ubIrÈ+gH?鉞5Ā 0B!Z<fPH!^48Wew hįǨPoH"v B-ٍC=8n${/62sSRs/g |`DnjVќBBY: C s|-yb4Mk8Ƣʽ)_$ৱ|܀Jv | ]W(hJIҢ_~#b>bT`eW==qPo gPvG`\.%|S4c-I"BQ#f|/)ǔN= X\I{@ERw@kFXw/7ro)EZוu9@bCL uImgJ@5¸<.B  fgK-lx]9YW;Xrw = |4uk[# )9.&JxbcD1Rls>->o8)  :LK[v9٧`=T[M_k"?nsȐ?eyYh](܋'_5 6fgb!ҰqV fo/Ȫ endstream endobj 608 0 obj << /Length 3156 /Filter /FlateDecode >> stream xڍks6{~_N*z?-꤭]ӻZr+mE^jr̊A_D_EaUYDas_=og/EuT9?jTZjiȂWU Zsﺇ eL{]AcT;4EREqI7KaqQTYogZ=/Q[s;Xx PFpppbX/0 1@XӫAV mTO0h+A@ <Ϻ$: r%6x7Aމc*aO߭6Ӄq0LCsv2Ai6d+Y]vl 4QԀƸ7[ĭi6itkFҬ"(֮c앰ՂͱT{""H88ozgZ} [6/ôo8bcAhI%5|9 Ɯi%Z a=Jha"ƾz!pdߧi8ӿ` NA71/3~9(81eoa~0XjnH6&ơ|;ĀGtnj58//<-J$xc#`*CؤŻ8Nahqbӭ+WKs(eQ}JBHDb4Ra|F갆PAX-|zōar=ga{}^&aq&S=aCnǼdyX[z$̠̎/  2v X%UX~OH2 | ad\aUnŝaqJe%[EiIaj8Yp9JH]zr Fj1!L:k/̛=qQy傸*D>#S%Q3Wqb Išq8?,2c,v}b9&@vP%AVC$=-dh`N?; rH pyY[vIq Tw=Ki׮n﹖:Lr/r$/I4μx_HweXdɩX"Q`ar E)B$#!58}&-ϥ<ӑ?7.7:5/Р'vr_<ǢT~yeu;!Sئyͽ3 h'onDiɕa 8LY1\[i徲8Ȍ@DwɣcS̓76\A~ʬ-4E`&TFwkA=&vrZu* YO,J4-۞a~G2l !QJ.btˁ)e_NdW9vK)WaWz;_]XHS)ZlrQ.H~%s]W( bR]T9?$dNW:-kb5iaړ"mlp u9k: 2fVtJk8->a`ɜǺ&t`J}?uO`\#e)Df!`ӬXT7_2̗ɢAaRH0cF_\-@M.6\Ůt_fB?am~ט$3crf˃%q"Nt7upPKHoR 3Am>X`$Gt6R -^ިf(2QP2@[=ʝ;{6 &!@|BQ8 vL`T ϩ^>R&DzL2,B@2LpxH v‡!.PI[a}˾u%Kt<vKЙ^,SLԮ[8͍Ul.C2f39 u!ur΅6 #tFȭM i{!@Y.1v@#AEAy"Y)ȱͦY|hueV_Q~\Cu^T4{nEE> stream xڍYK۸W-*k—Dro7v&koq\0$$1KZ>鯻AB#:F[MHo$+<ndw/"|oۛ(+"yM꯷$IW?< zkecGNhƺkeOuiہl]v|mOwEfwQs>IM4ʂɤ̴yP׏hea2}(:ˇVzk*zg*4D:k]A R2Y. IW/ AOcbҞG97֯ZbѴ]Eq{y,WH)]wi+F mMd 0K8<ݥa8-~bC@IGz[᠋}lԅG.T;k ^ H.TI΍1@8w|{fGf/߿'޾ g;49OtᨓeFiƿې ]FtZ*̎f'rx#HधJGJ%^BEs{B{NG4}[Ea;Y+qO`4sxhGo~O ȐTb4HrOOȚ۲0u04a]WD\je 8l!=, GhCx+hq'D!_ǁ]!7L^g|ؐػE,^p]_n>YQ),*39D4 ^S_Yd'LPKUXwg(qzM8XnřdrhζxcY2<\tб+,JM>0k&8qd3rbEy@`6Hh<Hg?4_Ӵ?3զV?f}Jpv@׊Gi:QlAGJ? (TL&bT&bT<#eN)dOAdItQ*3ö6:LzFHI_\n[+2'9%㊽mHXjA 2u90\^7}RqڗIo~І ڗJPV1~5~ٍ*}k5Jۍ^΂*P=4^2y>h-swiȩUgCQ)\KO3UA TRJH|=;ҶW_!<0Y?9 endstream endobj 616 0 obj << /Length 2528 /Filter /FlateDecode >> stream xڍYYs6~Pe9U #oN$;ZT*5XHpDUR@@7\ *CWUʧ ~*q{wF~w꛷Ir/]ꮾ{s:a_w(7B7*ŵ&d^uTTNzyORAn>aS^y|Źga4qLrۦsըJJVܛ>Ip,~7yFWb:u);)Mzjw'Ҡ@}%)YQ=lXͬpèt_2|J8<^XAsl(1vnP$9|C|@!i Z;xvQ|Kܧ|P\-|q͵]CF#aT룙71rKzJzFeNd0V40qϧ8j%%􌅎m֟  ~p=bS(1X;<<,`&8EVF#zZQPE'4lIbpy8_O[ 7leY,jYXʬF}ٱN6$#a0z5ùo1;ʭM-^ v8@ drC1 m{8mRf <k~ pI!lu, %Z"j5AguF[4z@hDNm[{B)+0 :O`h>Z:3R]chmy}M;mJ86 4N9`%<; iyMPU0d(>b`!.LhLc 0I Z K k@]^kn ϧ;9z :5xImϜB9cQc\xkYeoCfقUPTtB6!5yM,,|* yIS,Pa)6zۺbsg+rcD(+ٹCSDA D A9O02 MG1>Y F_Pte!zy(A(\\$F?*h5*\PL}й.huuVQ!ʑ)$.0Ltidm$'&`Al~͡ĸ]cؒ-fjeQ߳ 9U&#[(q-L 9UA!5 CWD w?sc+ qc}a 4Vlulfi^.#4=Ʋ7rtOiJl4gx cZ̒ڠq63V@f6Z6S["V5'G6<6s24 pR2' d}Z`5>v5܄:o8b+CGiJ$Q06#;D8!bTl;etPHSoB8ņw a캧sH 65OYʝ켕k\,Ĕe/Nb J54tգJң p Y#?Yҍg\rp% [bT8sϔ<.Sn z}pSSK>(oyal<@ X#C|ZoPEߘɕI{9|WR(bK$=۾W 2Gi5Z7<:p6ku#_a80}ay[@+q`-@0/B t[e}˺Q/EcY-Ђ.y@z`dzaZzב;гCeP|YVE.z}קM|I#>F q`Vea" 4^(Z6]d?J` TIXzn,ʢ{\P sX/$%ֽrKύ6U[Ě!q␅$hN z` 8B3 Rrw(h5 Ф[:>Uv%wJV7O/% ~*ˁ34aȈ; \J;?i%Se}A|;ɯZ <."|z`΋#p >df2ag5kE _e`` X> stream xڍYIsϯP%T➜fLU*Ɂ! 1E*\v*?>\Dt ^?@…HE4H;a}}ɼL\ f~ܾ0\x:uSoYm?rIUy}'~eN>W vvIKhY|;U60ыMDۿZ < xQ=?㴺-T$VMPV8A\:j^Hmzʙ2U7S4j^"uGtwk/yB:zl)p]dh_W'6OFGzar$8VJ4b稺*B Cdy. 4J8b皶&2̫Q-0ڼ4quE׹[*iT?R@qG]е#y,$KUWs}x`= m}&ժ9; ui ,Y\[ʹVOܮNL!z1k![ҢX1#v&?4Lv̺X WR^Fo j)v;úyvHsΚ9;(&6μb(K'r:o]#V?QD"-(/H3B7ilBnfP^aG2e,1.F8`/rd/=|W6s_h]*nKi=`+b!WÈ7<ۥ}x$ wc ?ХXWȝ0N@=e9J{2p@C ˃ 8h4ٛ=eg6T鄪-j/s'bRt9UxCG$N=8S_lv&;)&kRZJ `f<&%ifB3'Nq2%ڨh ŋ3(yXHib/{,s;{t CnEIϰCR7 {ll4Vs,UKACg()Cg,S\ =@*9ZrF-Kd5aKy&N`|5%D +d%Xp6fy_ 6bp[L!d &v#8ShAg%`>*3zUv<0b# >p)C8EG3t_y:J±B|xsws;[P?"ɺ "IGn f>4̬V-L,bW՜v/56S4AI{%#?'ABe 84 QR/ZTxSdLJt[ ,))1€G͊~vzLxt.kV v|jLEɓD%`"Q'n hk048 ^gJv=Xm#Dqi튤T!M0x4Ȝ7UTY\&1_7"'pד5 ҟ{249jp3C͓?[AL$bÑzCbtEfp~Q;KwŶ>xI u7WsHι #P !Y@9L%zq`h^G:f B3Jit&X'40彁i&,Ѝz0ߝ !\ 5p X^N/3Z`[rMEJ +6h#6A--Ï%]+_ $]tܩz붷Rl[ӵd8v^ﱑy'bf`b( gK$'9pg`^уBlޯt->o`Ȃh%C=li2׀; ~>k%D /0Og@ L{l1waO =LղX|nz<*":B׽x4lF=HÇب;$uј7| $mq<[ډ5_nd*~'=VY/3ywu+vs[gMr=|.B->0YIQ)^!3߼[>{&GN㉻ K)/ K/Q{&zRFehsBW\tX5 5w3Sqh]}}`F 2%;d]jm\P endstream endobj 626 0 obj << /Length 2774 /Filter /FlateDecode >> stream xڍYIsW2*K}M5<%3Jer r6"ݳ_6Xwݮ}i_Eu^f+:210~w-L7@Xݎf\8 z,1|[gy ~Cj s`aIYkPm->ўSqi%Q"uG?PWT _[ ;'s߈!5ix_v}g^ϗygNw6VdgNqzэĄi종V=6ZCpP[Q3W|ۅ1`^F»Y*HshT˴r,V1: 8OFwϲ IvTT#+ר%gwWrne^vd2Lz8LLwwUQ :"v-$U e6QH]ex\eU|Œy2؎I2c5, t)P[bt,/ahOotސL/ln? |Oͪ+MJ.v3P'Hjښ[/=-99 B3([%ڳȄ8@}aW$gHHUzk9$nY;}03pUZ 5VzNӭ)ap:@+c9*i'P׀ e)dgeAWRqmP,Sqf3{%KR[w<'ǣMK>~/ pJt ȅ\ޗh27 a:8K1&ǽ*i)(d2rIf7:@aE:`&1 weMY ym9r%8˲atFbÖah2찼I5&n}c܁;TI<ֈ>jGR"wmGINFg) Q!#8ٝ`ֲU@uƞpoTj9ÅPh 1mA]U^BXb|Q^=!T>zwfq>^"tDNtP<,)՝>GXw >I[9|}oByZ Yp^^PaH>zt#ʥ:UXpe:gS "7xe*7pzYz. n7M~2['SqEKHs!$)|/DT#0[wnf2L)X(a .-~JFm5W|4f`g|DKLPn8I6! }ќ$ o-O\䱘<@a<`>@@4>#Nɡ/А4vSybN_XQ.&Q5FHGRq*x&avh#"0[d%o6 (/NOT5)R*Rn 'G1|S˱:学H]Z+: ?2U?eG'i#F8{,<F endstream endobj 630 0 obj << /Length 2235 /Filter /FlateDecode >> stream xڍXo8"˹@Zu{]`ҹ[iq?G$^̢@-QE?~(bßX" Ueb7uAϟ>[8^Xl]Q/?p 2Oեq л >^g*E7!akMM[~Ӆ;`i$^*/qū OﲊEE+FtX^&}i_ߟt?kVy.b)З(4DH[_ h5P.[3%[i{,0l*hVe)H~ӝ* Uہ-VD,Hy̺+Xx۶{ţfaYdBz6&EL8~XULe*2rXI9y ).^H Jd'cl%L N(žuw?|`>P9?iZȚ%l,NOeC?jm@QFƙxRoN$p8%U3Po,q k䐢P^B>y4L Ib$Ӣ]?@ &_x5`;;1Zủgʅu{[>>:t{Z$'{tIw'7@ך6ֽ5vtpv^Ip} *i+"r__1 &Uk/aI46t'>Q/2'uG-2tzdi3'!'aq7P5u=a-`r؋o (;-WA1'wDզ`.]0ʳ'RT=+ғV~b%v7RJ8UFa_O.p-d tW6?_ٜc@Dw9uρ4>wפ,.L\Rj6 p dDx^$Y2j,h&FJ7(ݷQ`zG*>1gYY/ȣ>T#CѤ=9QHPAK:r=Q ړNy Giě }՜Jb2r.~7C!<]KP}aeAZK&HmР3KjJf#iyu5hzɭ_B'\!3\(kwjXw0ᄻ a> stream xڍWYo6~X%ZH;vAn,qlBl :pk8𛓳le,"d:+mfy0.&Woo,lZniR?B}>Ņ n 1 EU6$.T#Kb ta5 \rJSĖ$1 soKʐ mo?Y`зCtnc[Z9 AB{aJ¼-xcBƽWT_F35mD}4ǵu#PhkU} T@eQuןGavȿ'ʬ{L >n ![}@B.uI @5jpkSUt@gT9#j̵@tOzڒ ,hlj[.P(r0ciștIoܵ9@ɗh]?FҐtqs^倀wuUgEI &`NluۺzC}C}hڪLu?,uk}YE4񘶦KixOPtu^k̋b:F[Dpuށ[>ִDPr /!!UgoIE!ɤStqx1wU^(:['5h7PoQ6 %|[:OOb$kHZnϵ51Ϩ8y@hӦ( ju$0e3R岗9Wq ?LI՞+A+XF),)ώ` ys p/ qhK8?R8x,NJ(d֐Hcf !wj(=!<E D Րji5, fÀ::N&br=R.w7yU(? 7gOHm.2Dߵ{p[;ƽ[S@B0H .$'Tt" >v1ƈE&1!"ᬇA):Д endstream endobj 649 0 obj << /Length 912 /Filter /FlateDecode >> stream xMo@>Rxg* q@&q+~=c{8 mQw<52"1\GE~oRk!"-/S-զ^}2z]%b~zF9YUB2M2. Q.Q0.fK4L7EH#e;QSmU}mU%|ūͶ*{/׫^R`j;$vNE"H \Q@FvSKfl:[8;pN3jM^r_W+=f$Y@8H&td:u:O1MFz) 4);)Js>d .Oaƃc9` bk150E @[X1ȫW~(M%]";D~D0#o5VM~qcb.oܓY@(k)4?@>#c52gnIeUY-C[A@K> stream x]oW CTMMhMxf׻%9HQ<"x\ر~E:_HI-En~-|e*0 "xWE9.^. JE^-~߼IcHI9єJh!rq{u]_U]UӭM{U]σn%L cX}PD/SmzqH]ђpinj}k^UApI.5?_gT6?zwgQJDqYnh#͂NkIrVcmDyyAJFZ>΀L ' 9%e~'3g@b&pCDʓ (=w]0؛=9iꙅ \LV5)<*WsG,ȉP fj!"ݩ/4(04y?JDS<$OM# ˙a3eA5*UWAuɖgjbqH>([{}8L9tvg5 f]5o?BmmI*.H` pp6L)G“[RJSCoWo3ӓ躩t֟n϶}8g H[\jĘ]}[[6zmAެT9/]bc `ePszC bZ RardW^P}YN45LZ^Ӈ΄ Ha bC*=/wYQT Po}v>C3[3ʊ?z_waiǏU1qYA8X#[Z [s^nLo N,NpR##KԇDCwaHaGtFX%M7{VUi/;Sl}86fvlg5[Ճr9ը޴ۻd̩ү3~ŽьfTRiC}}{?xdV`ph.vDg5QIUrGL{mgm$_.y> k'6+|8!!8+.+"xD9'tXȀmOu9&~Pe'$B(ow$'5= ,Q# aSF.]{{`6qOX>F:<{$P[2Jj%I`Z x+i΄K*e.,NMH\tOr"H`ߌ^*@csba T2Vr9uf}a kۙ@r A#SkRUsnm9u_v۾d}lOӟ|8 *tmP8U*RL'eMwpnZ;)Kz"4.Ͷ~9OO!RC(CEB-ה8q}kk<6}|8>!K }p&}fO~Ad H9&/ȉ_p|΂Gg3N%ӭD2JX]' [e7wj[}X~j~j:ȃ|8\~IӭW Np\Mv[Mn+ ,X ]nL5`ql9+}vkϐ<_dكaȡ'!T H1 q5ed$aݢ*(8UC?RLҒٳ`K\`!pr8j G-QQ¤]ꈒ.mǷvy"U]οiv3iMEN_~R\A88vv1)N2EIJZuЮF1Kl>p8B<|` 5تXr5_;W:]ٔ`S>21ݔ#U /T.ClCgSl–K4t>]8QvBp@̈́J2W[_}[?dx;Ը,ē뉭%X>Ɗe'zE[ʹoV"9χM'BE&'.8E:j=_7 "3tl9t8jFejyJzvNFA!HU!Ppxh6{`di$ d926 YƊ3o",3_ƭkdT5H#4RII]s|ˬ.g! j Gi%o]wm5[vog٨ocgpЉ@1FqIͩ~כ5وwD&DYB0~RF;k]>֖Zjs  upUl2ySU1^й)37NHU7VLTq'MNI~#~{{[X8>:"U H1 G7l3YzG_phm`4Pw(ICv,tyjQr{hwf]0;DO. }n %v$#!,!.qZʽv'Ftwrpm1NՀӠ0Q&Aٶ9|ԧBnˇøB\8UkF2TqYIL6EEh^=C?:7-m#@Ɍ@`i%Ր(.C 9}~ewJ JD=RL.KRtwlYb侽n>v?pjܟQ/KsHmfq[vINnplԦ6iC4ܢVѢT-=01Sv" 5ϽQ"9zéccfr'FO9ه  lK>7xjFiyNʼW!kz'o1& U EMuÿ6!>~mh)^VmZd;_g endstream endobj 546 0 obj << /Type /ObjStm /N 100 /First 884 /Length 1812 /Filter /FlateDecode >> stream xYߏ7~_E(A@EyHN.zcvwvb͌HHqZBrʡrgKBPRXCMcb~Ü,5py-pYZhLA6[9 @ sR @2UC&7j5&s8_0 ,id5Us?M 7dJ,(K5@%,Wƅ`*C-PMX.L]u0c9lFЧ\t9 aցܱaȒ`)Nn>9P d1:M_$:\Ptf[mCgΘ,Йa̢Xj6*fxJ8ChW͕Ne.@Ί 3*4$ `"s.us2&<ӧt4>PFG6Ϳ].Wz=dGŒwDf׿~Xw6nur##1E.[}TKb)}0@/W~>.V__//k3dm "eJ5Z0@39-ZRJG>.2Fa'ehH )SIH=qLBCBYNTJg"1Nm&|}*DbbG]F$blDB'g"1Bb[A؉a"N8(i8;>lO/?m݇2s6ETCn^9=<10t TjwI4DO&1Yo]'ݾޔz?ncb=7թzӗwۛf=В#"p]zI/Vxm9OrY('b$lи+Ə Q̚Q}8:1H>G>!@*QT-15.S!B'kPX)[UVft"qD6nF$N1K>Hɷ"G%-{$9l_%nD探NɲD UZDN+$I̺5los+ٲ2|Hؿ7㦱I2EQbiӕ~qTCB8.x%edˎBGGy!~!XtVxoVЌs#3hz@mIe6%%d=>L-̶\{^N+R`J;UrbӢi#Vf6f{I&Bfji(kȬ g(]rʬ)P+rIUHz2qrOqߏ$!ӎia!$!ێm3j'j'ugl;VfŽ/?) endstream endobj 825 0 obj << /Length 3757 /Filter /FlateDecode >> stream xMs+|%H0Tej7&\)-Ҷj43!n+dmɵy^4 oUWrÏ}\f(w}7~?ELqoJf {EtV %OS''Uwñyx͔6WP8Q 941iYcghƹxIP pp!NS ''$dLx5a̚>! 84| vHV _V>:U}Vٚ⧜qaΔ.+KnO泽Eh7Ĝ>- zuie M,vt 7}篛/b+q|Dvu=.]g`]BJŔ_T!#p:k. ݮ|.mZY0_x`qѩ{(mH;Q>-_cw;%^_'Xǁ֝FSQyqdQ1kSھJU{i *+Dpg{p97pBuV2mpyk ih Ie{?cRumv~ [C$+dIQ8Z뇘Mr:9+iob=Z[2tܜbkp揧IˈN;| Q'(cNS''D2ϦܻKR`C8<ǝLwى#DȌ_t|ed[? qYC{vH&T1J`qB @v-Sc=v[Kd4HQ8:'8DU|N%h/e z uQǦ )Ԋ#/a~BZto^q>8@Eq@QҔG Jz@XeglUϻͳyxBOBbESp^㙚KS%`ō]a lB}؅X7CGbXr/ y) h9Qt=D 'S89#پd6ںgX#YuMUW<Ĕ - ڗso΢["shĜFO'zUٟU a9Cr'x;dNI o(5-B81#HP+rHfC׵<9W~^a_5r 8Ӿq:"\}=̹X 'ˢ 8ةӍiQÌ0#hAkץ>ˬg+\p %ҼdKϡ>FgQ8z#M < m*aZF?bc#Ʊq:ȉ" 9/.gu̚nL)7*1g0z#?k~c_循3/pΤ|gDDQ8rb[&j3UiOhƒ՞&ÒGM'ALIKDN`*rXߵxJJ7^QpxlA4UGB!Ď hBC@@7( ;>͠" 8_TDF%'@w@Gk48`r=Gxm'A'i _ X>|XQ8jaˉ"l,W%l9s7߽.b#v4U.Qٕ"r?:={Ͳ,:4RّrnXWBq9 &:"̣vlp]|i!YT8!;:8" GLWNg6,tB8.6aGSuEϫSv|v*R 8BMQKaj$#BIݺ^ǔl/T^! ȋx%09W7NA>U2. ?cYqX$I:S9lnXzglC876['刪oa mn 5?K&JQ*L龚|J8/zTPpolTDk\$|,ܳ3_q WMeqvpE%:v"̮(܃#nS>jp< b"AEqRC(Hbfj1]=vo\R$Lپb޷oz<3ȽqT!g."QOadGny<0*Kbo+59B81)dYESuɑ(!*izhZOj%"(e=1.D՞u6%#ۮZj.̠" 8_xǒ&0R0Co/_\[IOU]r$prREɱ]v3-~r{J6dc~&0Y͙betB-%qpȈ$I:lS9a *î$R ic#DHLf!gD]泛T![ !:"LWO+9U̳*mF)MՑMayŔ['v~5<=Y).({C8N9YDTD̫weDy[!6} F(߉Q*|aȈ/yȃUSمp]l$1UDfgG[UNezwy@QÌj|Ǎ]o U"l|Q2>t5ۦ_qBg*&K)TR!'oUD&Kvߵ/RSc3#„Nˋ`ZI^?]r8xx?P'0kYS̠֮" 8_xS&0R.)R^æ l6Û DUG6Qr*l* 9Z74HcTDF+VΚ Xa 8H9< endstream endobj 738 0 obj << /Type /ObjStm /N 100 /First 905 /Length 2222 /Filter /FlateDecode >> stream xڵZMϯ1pX/ 6,:"0b p}^MΌ$ﱊUEfVZ1BdhGLhgaooE &:Z) Z-Ԥ @==B<, oF+dA7z! M7Rz ơDot VyanZ+!M*}0'~kJN` ,CU9 [ cB!cq="8@Căanx""tfEToz>86 HԊ6;ADŽz(3za*ЏUdi̎CП(: c(0!aHE$<5R @`xDCЍw;ΐ4t?n3z7o`^#4&u^fˤ C.Z0 A ͘8Q{|3A i zvz(ؐCPwaPa\amt)͘/a t((ǔa4 } $ 7 /x^rp|?.ܵ}8T {m\zUoϏu77r^ap Nt9u'JJ/+ԼRҬQl.|L5R}c2>= .UcyN@Ig>f^s?sX^ v% Y 1D3zE]:0 XXj,gJ6ă!#^BPWƃW!jmq9סK5KXÈ/%$,K)U%,a,s)!K%ӖR*f a=~rX@s+JG2jvϔ<+ˊm':x-gu+SWG.o4u3 '>D!^|o| 2SwmTĜ>V߶X)NN|8~h`;39v|1"|5#A o;u=AkU49WmvmrzqgҩA "7^ 뜴͞3k -.jsm1Z[;y*ld+7625;n|{D<XZiy \c*2Nd> {;!ʉhN 37݈{i!BDܗZKlt38M}RŗZg < _$_&:L2Wa{t]k٬vMH"n/IKQ$,f[}E߼/,TPݼ/2c:ͰmtG$_d#k $.b&%ɶmYo].}9ĩ??=>~˦=^||Qܾ;i XcNέ[-[ʶgJK~/&$$$^*SQijijijijijijijijijij7o$Hx#|$Hx3fě7o&Lx3⭥l{dZއߟ5lwGyBs,7;MR1Ҋӕg=i_cA){qzT*.e(CLRАlK RaRQd\J)ve.U17N;rjW-XZl\Հ"h/!F[fac뒍f#fru,ٙ9{M/$g㹔3QdGl5'/WRdTq 9Ur[mm=" iߕAW}=rtuAs5#~M;աN ];D6R%R2-l&憳"Y}lč=D0ySuY鴰;4]G&VqgVqT:a'Nkmq{`7Wz*|nyE+͵| ]+x\du>Lj kSɲ{u痽ϡ endstream endobj 904 0 obj << /Length 3957 /Filter /FlateDecode >> stream x]sWwL?{$tڙ޴th/kRDjw݋8LӬ%O.s@ob)\JV&z._=>ޜ?:.RO2.V77v7.RV_UǦWnwb{sƋWwh*<..#rsY\9H.HY)_{ŀj3Dm8l:U$3Xk}mTT6 MJ*MPu="cq,gT[VK䒻V vۆ㸡@qӔ nGS^eʒ,Vsi[a$~;)pS+S~4m76xB[{Enq$FӔ tGم K @cZwm=tXiOWMQ|3#S#*O\e_0.<|}- qCe)܎;L }X]S1ZP ǁBk-({@UGʋ^XgPX\1>|l8:l8TǧfEüH.p2@Ggdp˥) p H(6]C2cynS h rd GOƄoW{ѵi&m8NڟE1M0w=3Ʌ}sۣAi8hhh({ẙDO: -T6 %Qu='sޫjm8?V"*܎;)JVƶRTW=eI#0yHL& ̱d *O*{ɐ,v*k4j,6z!q x@2C3l2Q2 ~[j3 ̜4jOpm8ڌÈM vk߮O[nhm8p7)܎[uC`SXݡmeQptjMq=>2glձWUAFV{Dd Y: WCn ]V+=8YhsNE [Gك3 ;uw]s_zZ +"82h^. *d,O X5vM99b  CeSDeQv2eYarnéI"PY?#*O@]eh2Ա6bC<µ8\h3^ \Gك',O9ܧ90$Ykt@G$i&e/<yiöz~m|6f 3GDeq2@_Ȍ=%8hh9ęl@;Dz ~U=2%USp4 >G'+7N$v}WS_k@m8Zp)T887^ʂSM8=#ei4=nRr>q"  DZB:IA({pUdUmq̠R8UBIS6TeP]aYJHk54"\ٌa\Wك[ĊVE+["8bh6~W&*Ď8YکȮ7ޫ]41Dmqx2&*܎;-YZdsHs WT6_h4eQ'%ĺ|b"؟ Cj2p< @S6({ dpN}uܜ'fWC$0S9ptKT6e(uoеWT6Ƿ# tGكsCuidQ_^4Yf.둉s& V_{s^Qp8a|KS6e:}s5:7A Q3dDUй{Z6%*n/)܎;OY>?:66 * p R&r]zx@R+*tC'({ӄX:mqI>eר1&RLl8l83&'Tzak{EUˋS!oÂ:| Zbk1gd #Q CvjӇ9aWzsY|i)}TR6'mgYGR4Ց&LѤm 嗂 cȆ㌠a#Q 3J 2-]F"c(f4xWT6'GTGb̘HqAem}T6DTGbHYV86.a.0`bL5ކCSGibx>xCװoºe@v׆|I/Mu( c46ԆHRQ "Nu ҏ0-/sYaHdg6Ub qQm՛f t_(g93E*:ow!:7솹1Nk蟹7gƘ U,wa,ӘF$!"$9r˅h2l!J'>}Ow¦g)Kz"oT6GQdOS/(dзNj݉yGOhvuۿ8Lf=@iqYaTGbY pr":/JƳUml>_3ƹl$ɑ\. Md,)S@m8.4ݺ:nto/n*9V{RQ )+ 憊 ';c_t 9BS6HS9:aqa]VHYS *bv# $9˅ ^,.t)ÙXw?6z1{Խ٢r@\v ~F)C)l4!` b> stream xڵ[K\2٨UU 8؋$ s CL}#w$GF瞖O*jYi ¬hGފj .\K 'w " ! B;BTB!zab;y& KΘZv{N l {Nlp0jH5 F^UOOgg/H|}@hH4E{ɷJ2Eg^TLN E;7`rLcDXѧj$,%GF-NAR,w* #dǜL{bsQ,&A4` De 6$}"E|;.p@@|.EK/*9eg|9ˮC!sQcՆ3pkQa6hCAOGTic-_ڠy}s$A|hs}fO:h*k$*LƧ€c&s}ҫ] >J: kZflSw%*wݏaפ;7^ml C*<ϡ-DO^+NShߦPim FOz߼txB~Z:';,um*k8ME XMZi u?Ȝ!Cڨw: myկ-vB`ms4OB0ڦpKY[ZU)8!K5!_gC0m*.5g|gfC0V ONBUZu'OB(q'~" MىMrӟRʭ|/oyE/܊G.|<|а@:f\/(~.o}/t>|\K|۫?>UH}_%ط~Y~kQs.YEfKlu}6[ģ'O<^2'O&L>|2dӉO'N|'^Lx1bċ7rċoL1oL1oLfmg//j;vʙ7Jlk9- _vㄳKٕ0 WNX =WN8mS*Tʩ\yMJ %2u{_)ẻ8ZL4vq!W>5 $r6DwjF_9squ,*D\9*GUYkfEk9;hqvd#6o ul׮Svz"cKэZK٢f8v$wAruLByO{A7߯5AU iʤK+',@uze_gfNnkeVܬv|-tXEP*key|*\,)b\9IK.c2f\L:ByiPHU5^B>p1*|]($jg]NC7 ?K3&r;Bۼ]($:*/UNӎSZr^ p/fdv!#\Lz(Mdd&my 12]ay!Taݬ{!k/$ 810W1]NJmcۮ}Wbժ_i'3B]%Gי+1K;寣#nw/&^ $& qk_DbscT^ @KtS%cW"kK5Bf9v<ą)/# : endstream endobj 921 0 obj << /Length1 2244 /Length2 16626 /Length3 0 /Length 17944 /Filter /FlateDecode >> stream xڌPZ4www{p = \Μə{*{} %Ua3+ #3/@T^D GAfj Bb`QgM#P f `app23Xy 3v23d.p^V}@mJ`W:@lejl7v}t45:Z]5#/ =t:Q(MfiC0Z]>R̀΀Ui9#`> #;BVJ665us4[rc{m]>ݍlM>51@BX`\L]]]lWc7uڻ53ܽ}6>AVf0ssdRrrJ;ftp033sqN%_ Լre02~q1v\݀~>t/caYLVpw2ȏ?(OIZJBYCߔq0pX9X,,l<.fQ2r<qNÇr?Bc`6YJ N$fk/??~c;+[G|(c >vj^][v5a{ 'LomWklJ.V=-f.SCr?[ۛ:ecggc/8)rp|X> /\?Rp('I/߈$qD n`/b0IA,&?$}.}t>AEݕGw?裻`R>fQ>f>f>k|9MH"UO_`2`Sc'V,?N?zv q|h.$;cT??c0aO >]>? 5cj a}ppG <@֏4c(G7nczc??__@'ne/Ժ!N߃aoR`bO3gŹ :6;xN8u;ʯq[UW&dgDiABX5}W'_ 6<'7n$I{/ cJ)M.B2Т]z"͡N$~f+d{\^Rcu%!E9L^)+ )1'4X&؅l^Oҳ_165sd$Z3oM!2rdۍU:bX}S=iL5"?ɖ(Taa2n ,US{P2In'Y7o)I{53Ai2QK\>(wAP3`2=H 9'!V 6B*t3qּ2}cdu)'_EL>WɃ;6pՖEPFXܔ+N6͔FՊ%HWLIxD#TN.XVi&F1O_0bq.ʏ6 :PV)IC!cwgY0LQ{TKXW2nА'!j=IٞrKdiR_<*.+_ t'0 h݌QX<(fnڍM  1ڴyU4Z֖|5EœF* ,J.أ_=tcئlluc?m-O !Ϡl;0a63)@/ 5㝶2\̰~}g5p-m,~ڬ|3C[7-یB'11T:(*\OGOmIރaO$A>ڠ" KT @`I2`MG@}a}L˴\Z~z3(Sy>i*n{[I0(t3YَS.`)kE=M̓WzmƱ_^N%U'N$sW Eoy^_+=&eŖu~WAq.UDzNQUhf,ELAO zp]>#)O]BiS?.H4l#rz9mWFiJ >wfr^X!TBa3_St2tpƫ[扮{w~fWFO4 zd nE.;OU| '{cApVa|҆4Y]`>LXe:d]y^H~wQV@Qu U2H~r)vN LK] Rt&g&XMʕ#=~~qJ(s7!(N@*KQx g hL]s*ݱ9\] %pܴ41"KLO UGjRsWgR=TwL0&,]b&jy4+ abfxU,ǕTuwaMQp٘{B YINDu-wp$eTT-6w < A_v\#t=Z CUoX !)9] pT('6Oߜd=$;dϯ##n1&L=RJzzF&[; w4JyEQOVj8wpDZvT<Ƥ8$;,'UN6i᧱ ϵkR5BVG-^df`.Q(\F7Qsqp{WƬEf ۑ]́jʷzt1>\lՈ6︑A}R<. ovV JO~aƍ# Wqzc+F[4z蔠קLEPN/h/۩&y,-&!f& xU6I>`22ߖMRL>a羌[ܻСMD? 6d 6`=$7v-=3Ft%bR[CY l-Wf^o{6a|(L8 Ù S[b{'%ԟIdg3>o0/5-z꧚=pM(ga֜hH llE.QLSطh.Hd+2`ȣdxU`_8u[I䊎ezT ?W[傂diEí$*>'vXX]Q0ɨשiq31⅙F`CD[r]pOz7nY9f)đ! &z^uw{UW$Lq Ϩ1(4^_qn<"gx͝I5W*tv#?Gg@EtiSrybb)j&xQoL&~%K\y]7P֥ӉI*pjkر߰7F/S$UnF]VU%_Hb[S fՒ0M/șL v(LU·;I hCv2y00) }=diA <)PI>ҽ/27ƒ&aB_VW~QU$_z :"C% dAyϸ Np=EoИ ѿ# dPVsD=; fTkx4`xn{f+rPeS Id+7vϰ߭i?~)Y 9_I+J/,,laxkk\ eP$ߘ6@ e1E)^[`#@:I RVMڷ8.a5\Ƴg c{Zi;S)d(!UⒶSWU֧]O҂iI32ו¬3hTw#{i UzZڑFh6w9v~ O;7.,:ySP nJ (&gpٳ <(aIӶ_N l#7޻<>D? uXoJXmVܕ8M)U!na*}W-'0+j) r <tƓ]LOKMpp=s<Sۅ]<ӷݼ~+bsO?nR7;8;Qx[7on][#C?oˢƙxm }YҬVHvq3>sޱH_SeLSڤZRVlkm %qR8Mz *u4^LvtCN4_u VKwM&=C_7;Y\/0Db. 8-sIT7ZKX,aС+k!"Mjܝ8n۽ۏwP:Or YnbC3nhN1\b8!@iLl2 tm1['w! jaCx<0DAS^ hUQ\׶10+ c,^$ j8ZQV5rS}r  `c9ۚTE"{!]F< SM.T:,pBq+88\+"M><\)'Q%. ͼ=K2: T"O-FvIqDPd&vc_婛!n8c.! \s'&G ƙI e᷺5@=dV;|?'`IF?B5,ovxP:SuݚI8-_3f׻dP},{R ZSfM:l1qZNQےZNxu sÊ:Ȅky<lfʤ,'/yen~”C_/ =;=^,rW~Pϐ~;!l( |i}Ѐ'\c=4{ ,Lyf%BΈf) FA#q ok]r|3,(Zn΅.5ȣ{Ei CYi36%䳅ղ,sqEilV%;Z=w}c]qϕSNԎ Ǘ=*Wg?aWٙnޠ}! IJP+&Z#TJ[HVkjqgហi))HErgi kU25F{Q!nH<96Q~˸4pbe3EQ\)DI\\U8vKCoym݉ ȶ }Vz0DP37=#_Rʎ[O!QAqLvFѮLRNZfQjR@d\S3$~ b:F d>&mwѐG@rǹu2 9’rje١0hьU]w/xOW,"(=S+ԛpΐۯ1ܼϷ4n7>ɩ sPqdaլQVkd.cM .NGt!)ďP6}Qe.g$ tDFoBGΨR 6Nv51Y'Nʮ^szM"z:6W*`6|Oߪ%jPSC0|SHXP-')хh2iNJ12K\8(iȂBL_Bmi!3+(yƅrjA5|fN5 ZVR]֎]yue)9Ly+5pS6P5)Κ!pUK߿ru0.5띭wtBțE*18p~ YiSv-9rmO | l8CT%3CXuƖm;~vIi1~x;\, $(=h~k 0$~!'Hu'x`a N6PVxr:( 0>ݹiy`IfU&k倆$.blı;^fKA˨R&V**wӿhF|cf;5XRz&w,sV7ߢ`o!|-؋r |f\os} BV!g.VKutU`9N=)"J`rp}ie {?aaHLhNta@K;I|vCp6ťΓI"T`&6x_͗xnb=&0`" C $D(YMҝ愎~ @vӞh:ɻ!3SEJ f!Y&aU<ܱM jhqWi(;4]Qo ~G0ga?;t.{˚#?^zkjJ2a2=z0LۭsSR}{AtLƐ%3 swJgpLq3g2g#EAuM%tl*Ru[LA7ٺGJ_ S"FϱUb+Q!QFUբ{2!9`~'Nҷi?8m)quоC BY cQd #W@z-GT /TYB׶=芸n7u-rZޗsB'v!\f2ЬuisВ7T~yD )+V·۽Ar+6^;`Nr;rj;vzqcg/[eBZ۞3(|>bQX~j1 _#Ό9PDOwX0qÑi64;{)u8v ႕"ޖKը}~UF5X,3Taڨg2(Bh_d2Ҩ+(h˓.2)I0k T>P\X>Vǘ<`-E d^ÃΉn<@X>eT5+oF_WQii(ˮt>IQ].!3t^QheV:-mI8`\(.4m)x̹ܶtA`;+6=o I s>V}"|#Fhuc|lAI D|*+g+l9Z>W_G_abfh6QNU6`ʎĨe#j` R(/<3b}kTTDʥREo0\}Wa2Mߙjz!zebV(Ve[ +8V<Ԛc#aCșSVER>c*I 'oܲer-Y/LY&#X%(qԅM m-{ TZqFժV7THMػt֯S 8cTIξ*Mz<٥ZM+gbr}zuK&KG?@S}[Q aa{H+>"iO|{ Cb0mڀonByk9C蓔izD1A؀sWifŒ_߽"Gū-W>51ڬ=0Nv>c9M!c,6~3-0J$Qwߔhb ~s!αeWڗcd7?jLQ\BZlç+9>-f5FcG1CO G/&(a9V26Ltl-[Ff\3Ի/ӛ]\N$E?E{*$Yۍ$9tL *ųvfL=ϰ4V\ukIxߨxMϤFs0 G3+$s@z#H-VlI1e[/?f1<&tu%u%{Pk-#oxU}UB2" ߊEcğV_!1up̯pM |"bشmlв@ŀ͓Qjwdp5۽w.DTI3F}hDej1,жh[翏9jN.-A1 v7b6HCQY5* <χzT[# 4Ԇ~X9m3>=jlSxp8 7`k?lPj;,b3*~=Z; پVKCܦ:" ᰺J*dJR%0gҸ>S/P EA(JJwFػKue%n]"^o4H`}NcZad,3m|{ WDWpfl=o~A|??V3/I]2M14Uzђ OS=U2ҵ]ad#ea`nZe=x{=q 9wtxbm`Rr]ݩ =LBKzbҍyNH <嬊ukh0~3&N'Lv>w%c|8*TȁCF '\R]ʣ9A CTYij^8=;Bц4i8iBg ڗ*͘JTSD0t5h ]IJݠl} S%5=>$ $Vv %es70xYKII0n@ˮ!@6LrA\\;OXGr6}7A)aW%~<1G{PuI)>\#/S\AnQjvɰaƜG4|2,2,*[hELv†cՇZQVIx[}[p/uk"#Ԟ"Mn-Y0_gY'ri ^ZHR2=Q/#NzO]ܪx 3 T {~VT>?jQ%gKoCB DZ;[%nEG•(M樰 \oS1/g0 >өy.MK^ɼS]xu9KfbeS?[f<5D=ƶ۠Ј&r-?n Pt^/7_V֤5L 8:}co7qF%!w@"l;49?uQɳԷS8R.v_<ᮆj ɴ(KY#PNeLm]4^s^kG".J35j*$K8^0 6D%h)-^e_`Zָsc'Y31zu855cI=&&ddŦ_]iԉ)8X 73JeljSuRvz;Ai 9'><ldEpgIu;ks\4K -&SgjS%՟blL渱%,Sۀoҷ'8$5b->9kU[WrAKf!mt7xX LJpO 9HQښR58iCsvFvlAA mgUxIDl,ȺL?+gRoai#*R,Bo17}_Vv"%!1YRB[Lv)?'&H-ˉ!/0@_;0[ taWyh[Jta~잃Lޢ*Δ̽Y@i6/fH~!BE@(YSc9+RXbѶ=#ӆWxA&.X#gȋ"&M47Go- rVUZ.LQ9tToD`8#os,9=lMs,oI9Y k"U1E& 3H5 T9HХ34EXv5-L{%5U~.C+6R_(JQohU;: -^EԺq>A/h0Pشs6c\k{^Qc0ڰWFO Cfo7t}Rnޢ,;/`}i43h x1M,w d%f㈈,qy!a է6蚽i]{ˍN:_~nER.l@ =v[ae^yۃèZKRO,VŤM[%<|VzP=yز{yiH C2d8ڱIPA^IaהwbOtCF+nZm/Yd,"Y4(:m8ω FjlU |%m {0L9 m~P)u=T6D.V?=Q> FZœ$Ɗhƨy;`j*DNQǦ-xVgvsJoi0&_H_ɜ:2"e1;q_9|Adgw[ȹ羬Be12Åho~OU&lXS(wt&*:9C['c7^`2d[B?̢t./YqIAyܷmwWho_%^w1Ѹo>К=v][͋ӟ pbvv]If&whiSZi5:tM26Z*Puo1D qƹSѣÎ|ce>~jaBaK^hNSr+{40qEtLCigӉ#fGHw=CbS17{#I٦hևvP,.Jv^\&u'5GW @rP)Hd8#Eر|ۀ+Yoq\<GI$3sET8x|2e^?*^S L;u,18ssBWvPz_֭iRT'˃=ct{<)c?ĸD,=#~k'|sַ혝dCw2MiēTiq=dK@[͇,vIC'E~jXg.:kT^ S"P}/iQ2ts4U-6djVx*B#EC9cVרLD>rY%/1qQ? uXѹ<[9yƂ4P3h1Ϋ,]Iw1ڨK9;PCzjJK1C1T쇦B\.˙\&+vjz@Ѣi-2<v~+ڸ' H0?Bj)DzuVfwZcK"⃘ëqS")'{]RO<ʀ?sz"X :{$o1o e]7vb&C0EN`xTӺ3uWon*oFƣTOs,X/9PS6R8Quh]Ev1v0 :Ƥ -ڕMrgqAgC yh w_Ȭh{V\Vne.WYP+&?/E!, hr 0/CMt֐k4+*lUHq~k%c|%ܷ,lXgx4 n,5ĈTveJVMo;QIGNx(CЅvPZ_,)i8 k^~:eD؏40{bssGF/*J\OJ4hȳ`C_I\JqJrmlhB1 `XZ6oMtkA2C%enIljNNꄁ`W(+/*J:> stream xڍT}6N7 R ҝ!K",HH*%]RO|sk73kn&:2`DCprtxy<<\<<|8LLP> ""l@S:xB¢<<>pGQ< sT0jex8W +""G8@au bp"hЁ`F D]]]N\pG+IV+a І8A] `@{߽q0tNztW#` 0gx8t$I5/? #0w( ` 4ոnM9.@G@_ :'.'&y ,N8듇:B@w~mapW? [nqEz0fAy  o75#t 8yt;,xC-!8N@ // !+( ??nW< f 20f̭N>A/0@B_*0K8w> ]_K dB, ,?B;][jAΈUP?,?X:W|X ?:)B POiovP% Òl>#Ntz8CvKP'(::qn >aK? !vpG߷," 6Dܠ !|nA~տ  %nؿC*C*XRul\| 7gn l,rG?L4zV7[<@qWM噟*9w,>L:Gf&CJ7uFzIN؆-a"zV9L(ԤVFN-<},m>*`#$4A3 +=D]4~.G"^jyRŌGi.{=-H$^~Ik§SJbZ4p )؃B2S<Qug:pMWQ%Ut@QC~9pXa2Lo7Q Hz:fe[K3{%]vr,]heVޓŖZEsrS_j f}[b=[CS@,diMRן=utCOg"XEkm }CբIΟ' @O)0{p\Lb5Yԝ=_TR)3e'\(vveUQȢ1HX/ Zwx?z0D70+cq|doT1ѣBPTq: Tex 'Si?j"++'ʉCqζf$x#pr(UR*ÉKҋS=(cRbO= LzY\=08ԲaPQ:ZrHxKNJhF ʇAdB ElV<: Wz~st\ i[_S, 2BD$-%3.,8xmr'ƶf8Cf 3 4*0]4-]AŇxOĒ[I Jg%* 6C<tLf웝^|Nha uJ[d?R~^~')MLG50Xx~e%2yu)EK-/:,>-usg^]F'ĭ$ DM'EN9#RP:?4XaD'YNt{+ +.qGY ^Ku %|V۔KNs[c>;Q(vQx>붮nr;u! ?xB=nJp .}ǫsJf5f^F=;U<u_>%RD sxğȍz{&mvrtHQwB͆>l 8b;11G.f%O *f|DsRLJ}IY>_j0p]8cyqK}#%!Go :knGӒHb,s*8q,lõOmڅܪ+! UgsRNFnO+lp'h2nRd!ߴ?(ddwlVΜ`6ȼ$4(sh_D$jh# &c)R|1*518 UuiR#6ПgO ̛r`^~! (=vgrY1;vrA0nЧ)eDdܾ)d/6Ϣ=$%ֲhqESHU!# b26B:]kGnsʯ'{,7mP̿ Q"m]|ŒnE4˖Aek!e%ʌBWq;r+ {r4s_mbz 6SӍZ%,񳲟9.s ae}VPfFbzW*eE:a6xP:jZV:+R 38#ziծDH+3j; ڝHkLjX!}^HV'*H$+"WuNI-w(o+޼ruuYDSNծ6! dNvƆwG# Kݲ؅39Lr/CݳTS>ߐ(&/SLMGnT.٦ir 0[2.^5`NhSLU;RYꉟ>^xEQMV^&b(u8_ts N$\ `ԡP;:1g6' fxցc6D~4*iP #S|G.mp u0#^zђ^`AI.X ]*{hF-Xj2ٛ>7k޺J/\:g"wֆgSb߆H<>^̀S_ Y(sOeR:V^&b<'N)ּV+3?kL"[tYmF>NY`Z)I:mAaT-w;1*Wxܙiˎ(GLxfһ.f 3g.vSӂ,҇XZ4o|c278 Tљ9饻96vGh$ UIˁ`âjo=,*θP>p=םʇ:IוJf%w5 [άcVѻY w鵎oWd MY-ȿ޽iڸel*R{✻K){-Q+[n\TArI|Y(ݵi*0 szֹGeE| N!ǫIF3ԡ*JeIbޡLXu:&ו+$Ux D-f/ix>jJFBY;͚ oXT\z.Wo pŁ#ݧQ۵9S zzVA*iAקoU.˭tF,?2 @C'c/{>:<'d׌G-:.최Vүcp3x~Ad/ۗ Zy]3Ucje쾤ͤ;ۚm[5rnqE8V\|T){g/OГ3|vbD4:5Lot?mtl ӝf\4opGRl\"1xat`~A*L\ḣ҅Zө1jW@!*JBM8&.:8vjmU] -Y_8$x!dX-:WW5+O۷hSWhzr7P%!,ŇO95"etq&7 jC/o*dju S>f_fp.H_A4&_ )qnL + Y͆-:$Y!i1!D?ޜ|yM|}4bK2XvL$+hwVipuJ&i͂tp;d/*Kc}q#bq_I`j'ʣStMS.\AN`vۡDǯS@.SOglfW3⸧B榞  Ѓ0c$L ,|MOJ\t#d~iέT-)z,˘d^.+mόʟ:{<аtսb 6;:xhd6fkfaٞՁKz|]laa&#F[QKadTGuL",E!Κף$;`xY3QN]H:7;'`"[F`ƁgESg.fZZ.=;t A~Ƥ.ۀEqN_@k]Dϟ?נ_iHlTZXu7ZuFtI#k}(}s1cN"+Mu¶$A-S3 4l\ヲgI!avbb&%FQ -r|I }QpOkqxrC4SBb>_Ώ&˰N3JLUjXkid轰IͧA7酭_y:5zZEp̓-|7%QbR02m'L%tAU o2R({{[YH^P٭|I5 k޳0T??5Gݾs[,noN} 1 +`oT/}r 0igo3>2#-Jot/6k[ʿ0of~À<1y)I Gp1;їmյ_=ꁻ H4ܯFr+[ǍfSrqr b.;ss?YO t蕝t ]g| 3(I+$C6x[qpZOɌAb+֋7y/ 1B5k vİ%P`*s䛼%,؎׋cZ6YJ_LbMrMj}Q5A?5<~r,Sq%v4Vr2YhHp&YšgvQhž.y"t{H+(MNךӟ>voݓcf86˯ |OJoyP|L>TvLYپa'9,5dA?:|9Uٰؖ:yQQLYE8맺@,d&^=FX7X6R#'\JH2"eFيIpچM,,;d ܬ)[ r~HXͧÂ= /6{s/'3"]J qj :;\RH'D}"fa2㒿^Gm 7N`MDa0uR?[jS5kMYV3NgrǛգ3<_?E4ODhѓƌFY$u zf _^2fhMIV82ݙ#0v޳u_1cILI EJ h*mZ9ٷ ?*]Bg`8,V/r> m~"v&8QW~ Y=nO!3^Q!!Ŝx; ~RؚOp"~uBW+8bIU~lx ;8XF:R1yf  w†\A$+-Fg=ܿeZ^1xj $(SUW_/:AKPvz+%}$@i CBu\Yk8}`e{"7~kO Rޖϭk::{w!u[2ye\v$Un!#>vE#/#?ntHO>Sgys\oxBPKd# ].~GwzKDFyS=!\=emSf6#RXQPK&jy$f8mA \]md}IPG:G^ N.r.N);R49zs@2͛U҄'qx|4xU67L8[?<ʾ3unф2]DCЂoAgJqJہ%Ajg[\u#z% -7gI@<9 gyȰgY߈xu:74>hc[ &oZ{)+BϏԌU 9IS>xB+7Ȼ4weosdb_w*(fKDkƷy,lx,0`6Ql&XuYl&FuJT!GM0LkM&Ͻd_cG:Mfus՛6oG 124ϳmQvpƖoDO2[&xf4q4ݵr;xXŴ-c/oQ Ď_Q O״7|svc"+CbΟ>*k8˧ԛ0%C^w׀aX=[lfaI~ˠ'yGr9 Kq$W*ZЊVIC QUQ,eS+7&3"ŊD;1`Q6XfKӗ.lѬ)ܢWGT5GoR'Kc]GHnɦ`ӓ1Jq#)J_ Z[+zU8V$\?}_+ :xa$Eѵ}5%I1:Y}koFUPч:]D(3a>75MiiCAHPyL'8d?UZv fKϼ{fݩ>EW|I-[GvPjȗa''EUQO KMbh#p^>%rpzaīZZ{7Y!LAqhXxA8]1G\x)B\d3>-2XDmSQƯpf.2 G\WBf͵/v*̧$?W@ endstream endobj 925 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 927 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڍtT. C "0twH0  13C HKJ*tt#t ){׺wZ|{gww?+g (a(^>@AKKM $P#䯛@B0P@@@(O0#@@ PB@TEP H'jkW ..w:@ A0eqœ9`(\v(?; GJs?CQv$ r``EmP q8B jgX]oBPd wr<0[ QCy@0_@# + w xH0B!FUsJ0kBO1g0;aYՙuq)`\$BP0x7t rc&r;l0C@|6E" Q+-F7揍Y>0b'C/k8?S4P3cp8WPD1/>, m\5 ]=e n?i1r3ysw⿪X )::sa/ZWFZp` }Z-5鿣j(F r0[ yP2b Ep0. qd 1!1jC^/?Pֿ'(B @$c,F(L 3 f13f7p_~"Ss @< ` 8Q}EPI;ڐ$^҉ P3"T҈r~zڌFt3my^J*O#^f [f#xcF :' L]Xw#nXvsPx߫蘊wSUnnn-KӤe7Yy5XAw/s):p5,,Q;UC$νRO_eݶu}(JG„Fs/2?mPyYܒݶ*\N8>Cnw̨$T{';[=l(@!0"QJ?`u2/X^HC բ#f".o ywU\ @4eڟvASe|[)\'F3wbqdNF}֠5,(#NUl`vk,mьH0Zݻ_0+>ʬN@Pف'ooRWHͲhE'B yߘk붲jrճ8Lo6e7:=)hrhԧ'0, 7͔aqݶQ.:2*H%A yoEVd+xEG Ive lyEis蒥ƍ8D'nLv>9QPFF}BI =`b[U|(?LJP=TtM )0y y7{KjnyzCPfEg NC )vFϕQ;݅[ =M ԛN9vy"V`̖#,Z&8E}冷QO -VE\ȮX{8ͪ7MSgtǡd (5&twmx X'+JɣC dY;ƹm@F!7 wy)Fy~ d!$gdNZXPW܏؞BLƷSy:Dvjqc/I/}D`wֱc$;=X7\]8%At| >;5m Q??-z+}R*^pzmx̳!xEVm2ӊR5hZ`]0C8BXKwSP=ͣ6BROLVYEnkD z>rLIsTKX i|OXIz&lCڷgXOʂg'[CCs& w?aIܧ  WEM:&49R#;~WI8aF J*סsncij?UKCJn;.ѭ wga˕Yw.${enj+ɣgnMȖ 76\*=*Aky_cKӟG|#p*GpiK/pIB6˾&g7q1 ̗~z\| ;$.ĵ2TXl+Tk6K ʉظI#P7m\~ycOLmAߢ=>*˝'![0@OS@yLgJ^uBt|P_=BM6ơ:FO{%sQ1݋1U3׃C]%yTR~S˩|بjEwߜxA"FNXJU,)1s9 K( cdBMo[U &6,?PqkhpnuWo62m0z0Et(8MfK75sY |{P+ڴƂNu &՗v Ui27qd{s/^W 侲O,jgaLX~)2e$`yL;oX/*ŦnZT,_"F[|8W&4DIa3Sz.4nr2cx'oٝ¿r<:q+.h$8*T7؜|+R<_ 00oĮ?*-zvSmȃ1^tStw"V?H_ϔs_ &?YSL 9ڇ;RP)39 JH&l7_y_=tK -Ȓ,u~kpShRWk5!)Fm_pʩmTHX]oQ(`ŝl?I~ H/LY 0͓OC}d D4M/jֲv씮bblsy`/hWT~W_~0o"K㳮qx3Ch5_k_+sjWЂ|~^FkdnB˝x\|m goWLHf(Q!X2rqjZAߧrM~91"XZ)"'즶(Ir.P9 .6M?%G"[!VɕҒHNow oR_@7|xj(AٔyZbE ._:tϯc/r+/m6ﬕ)[rShwXWKr*wraƛ(USYʟRg0Pe~꿀JGtb7 ˞X1y&pMO6txɄtͶ\ȥ$i48Nja7gURՇލ7qO<ˎ,f(rc`\6|i86`>r%XU0$r| ]Jeq;M6%ړe$ 5'R~%gxiT4b޴?aG\DGpVȉ@ݧxͥ^O"H$g@K3aO}DL=|OA/5*wv?JToD~2Y" N{Ps7>̹JPַ7Ӊt-B`3/NAv⁧9=?{KPe|sL3rwz(\ >'˖O+JÜ 6 .'v䰐*Ԫ͓Koݸ=revy>.$|N2r!"b~JGJtcD]0@z <7+SOX-۴өbuz[M]I&$O.NGQem㸻b>L7JV%kqT.p|׹J4tfI-i|Л J?'`U+5ܥ2(#Oqeͥ9i7ȑ&CN}Q;cj.g"Vj-eUNok@] o<țY㼏-xɾzBh0[XA7ND_Bv5> |{1H$)QKkZ2u60ҽ#?Sh-`KYTQ@݃z>/Te J6JuUR_])Үb;ùC׻[Gb܊3]nGo9 Tw4hUAF깞;džKYjYf5o"AVΟ%/FU%W$\7Fs/W{sܨ/i$p˖&N~ee/և5_(6t%Ӝ WUzMq:w4qFf_p"9ұRVh5/霃I9UMu1}JOT^#LOi KiPex Ċ'3:Ӟfj˭^L!ŏ'kwؽ6d-e&߭DjiUR$R}.C*V&#»'ϻj?NbZ2&(3炟z+G)QDf󺈓PM?=pYvGW~Dbloe(Qg"CVVɖK0]k+M|*_i)f4ljPF6Z Od9bB]b[fx23JtI3&ckIq.=ot3z\7~0-sޘiBfp.LMa+i}4> stream xڌPi-;$!0@ݝ!ȝ~_uoQ5i9~w(HDL%\Xyb ,ff6FffV uK?f MbN@cM`ouX8yYx<h 7v4(0dbN.c+ڄEW:@diblP0vڂN41ٛX]״1 @%;RM PV+H"hLcc7њA?@7`~`enlP[ ;b-<,vDl *6? 6@Pm( T;n[ (?nP1 2?3RzڛA;ڻM?co0˯X@mu P3s+mpHA?RXK ǤnGB? H=&zb:}&N+r Z=&K&|!V!_D޸3{ɩ#MufІӭǑ^m egz$>O ?p' D2 <;hZCwR8r(a޻Ky P٭C|*X9! 4~,wIG !q62}*>kFj]S_R'NG@՛A̝&,C'R%6(L6k ~ZfUeouYdmk# wa#M=ZBBoYh%,t#WWx3S\!2XhnC.D X uޞr\V6+vn΢/ظcs*J=?/`0 ͐GW l .c:߬a/$OX"/dP5ixYϑBs08,sku[^.j}`p^!:]+$Cj@vRHD\{uQ7ۦ8T-u'w2q %p%E>/8nXk;2b)2wW ;F4/^Dߨym-|&:MmSW NI$YH|1l^p_~[1;8%`c8Rea'eYmy}~$kr֫]Ǻ-'8}C*WnMz$e5|r4<+nnV:v? IY 8}(8m9*ڸ ULe6\t*͗)YjFZ1 0Y20>o.x@ͩy7IWQL( qj>կ*{F~XK}^l3G,sB6*|7J9A4ˁy2Gx%2y/ Ǚ$r3]C 2^ڥvzhτBo,@u]ݍD7N5Y]IaB6sX7^})q$ _27m9U9z\Q9o1Q"BjH9>V%*Nerr IxG!8|JV ^wci~ x^뮉i9᳜mEӯ<]%Br8&4x_'띛gTR nN_Q?rHm'1Uk(XV.b v$7VoE)zXT@9G;an(kzwV} @᳐WT\QSI\SaOλu$rIڥ;e)̗,)CtP(KiШ3r`eo}ڍHMֺN&. X}"zO:.9{9{DCT-􍗷 Ȟ; 95w.YpJ,GL$/<ҶMPtt!m+^[&%a1lI{ePqZo}4iVՆW,s׋T1pq ;$c :?3wCMxCNӌ@VɩFVW~q y@':,;[$=6'\ćDxU p97ݦ5Ʊ dc ꔳі `T) w^+Ta[mAAƨRbTڴo.' > 5&|W}SBf` yU*cHR}~0fWa2(r,l.+$:X9fءx%Vο׏E?/sB,+ vSR!|LY4Ά<\>NR_ǑxRި[X7<ʽ{ TK`ZS?)/LK\g!p{He#x2^xlV}FrdeW[d}Lgp)-8UY]C M#!)r+pޒB0X㐨_Oxmڒ"p Hɦ shەʕt{Jk~z#rs0>~6!Ca}3>^jeg°ŁF'Qvbb,.edw%`S֊Qr_sfgl%a"6T<OD{ڠm,=Y] ,&ayg1O4!Yhѿ5O^A:~̳sNe]I|촬\x<˪uY:x5RQ6V$SgYJ |H7e81[S|05 :V9j8:մc]ŒamGo{[¨Epk Ip 㫗9ThAp TMהn~Χ H5T+ƽ}Tg7Ҙ >B Q#|JGlP$lX97xkwsb$_b\ 2u&ںǞtV#Vե$mZ@ݨ͹}{ayD811(o\8F-3]f\;ʟLn'f3(0Qm0|Z2GS&'eģge~ȁUVI|MבGa΂gZjHXضJԆ7%? B7rI|׍O) ̫k!(Cs)lc\~{!h]fx}l ܩ" l*mc`b3cDeDN4|سJ\Ќ oӥFP?C)V ɠwJJˣ.XYjo{E"t(Z< /?kKһ~8A*cB@)/15,}~D5qDrѐ63 pDLr\ZHuHMjv ߮, 4LJ`$2p?Jf(M %~f. Pa]ʹ[骄[i3Ssz4((kKM@żՇ*É H\ۘ&@LD4".m䱚+<5_];iZlGRMƿOc6#a4$-c&&M ݞx t ,Vo[mʸRӳ}b+˄$:%Lfl)G_IJS+agii<>645k7 .PXHwE)I>4FN\'l6ꯒ!/PYr=|s!T>ݸ>+M$2^ ^2 lhaNjňʨJ&GS͌rwrD3 }E#%kHMHܮN)kW]|M8z?>FѠtɡٵ䕾T _2*Jjv8NVo3HF| ͐ѣ8q[#B6*I&WhSK6a-r{AZx5>l2ٺY(ٍ*`Ȗj\mWml+ 'If^rZʕP*a' S,f9&Jß₾0tfe<䄏%g FZn8a ܇ڠvdDJD6-]+zv.;ώah;,BD\БhZ FZ-&ytg]_xCJߑ︛$5*nAxDq NymB/.6i &OԘwoӎx8,dl_v7r 8&ƞ_دO4X|sʔ9<h9Rz"[DV~;A1\]Ky\ _/{#?#{i5Bæ wlGRm#Suq#Jy؁A~r8'䙜 (%tkĹLk۠Dg%BV;CIc5۽Ǎwb]%s0=z5ULA<ҶC ߾ cg/NXL7rf~8C+LL<,Jςh-"=SgbuyV~pQӚGuY~i4O:̥w)hÌIHieWԸPCY R~[ٗE+ߍjiXIQAVFlJ>}tO(l_TSJ~nB`ӀԱj"zA+DE(,hEïea!7y).;wX)rwP}Xdx S~b/t$L DzNݣl$!$"_|ϡ*@\?YuUeyg|dͱlWjceVOV(]d`Gs^O3 4{= le4|~D˝CW,´,ԫQT鑹"R=^*Se?:^>AsjfesŽ"lgqj uMIOzu8Do/qLP}`tZLf9DbWuOWɺ_ևN~\DRί-T -f b۪O}pOxLYi|fAڎR8ZZr@;L> vdtv"SeW!a%S*#@_+8WKԱL9v@95BQU"eRT8uS$XzpNwFj%G0$ӇE?lec_RnBZ|'>;?DBfhyHl4m՗SMJ@p'C:]EAPQU8NɾYKt{%0B꾈AbժX|h]Vn3f.zBZ 3_lpb7vSEOp&i6c;c(8b`>//Wzd QdU߉#Ec O3eے SJ[坟6̍Mߢ,Rj.`0QV"rnSG;PĚjpOL5}N5V;:uPSptB lӍg\}UYXk6CLΚùsQꓟR\?/cMg;2]Ow^jrw;$N~"YS~οhUERQnطĜ%3uufczlSoOSyrM\ V-f+6DԶ.O/۳=D zA߬&`GtGcݻu!4@{z&n82v>\KՊxWrDKކ  –:.!U96@f-V%3Cl V[^z9Q/`Tޘ\|t8W(r}LVsj<{"/SNϲ_# V'0z,Oo cy|bu&egz-SC")<@AAo4s9Φ P&[p3~i4IL2 ͪ.7_e:a n*CP"( U)4r27[*ip4e.i;*/vw eP`$DDWrrΠt+S%N?3w`ZzY Qb@JRO/#Ic)!y T2: Fs;._43fl1)Iֆ'>~VcFg JYV𝸿w/YpFc7`{!q9B£յւؽUׄ-⤬fCS6?ʊ21`ѧY3D }/dYUZ6MB{IR E;Jrbcmp-?BnRO?1ar%vsCSXkEW{, mFhMNGo$D`{B ?eo!ʼ Vt7(Sw0yUhX[)y{!"h#5|Jw!F}9ȗY 4 c|fB[.l%nj!^,''{OҶ_O2f1_1k{gc- ΂29Y*87:E>G#a}јfjwu.:d$IkBA~¶ɚ,2M yPı.3.[CaW47\cDpdnr\]0~ɹQ1XI bL hd I+ t -*Ö_'W՛ĘfLM޼a9Õ#%H27'd$ni`y9v Jͽ{RalTY74*gEsи /eU#QYձXB,K6C¼z.|0uOzXf rxJ4wz}U_;7YK2U/w'&A u]@׿ Cүd/ g.'0R5j{Tj. oCdzL$EsZb")BBk")v9%>XZ- /Vx%sfHoqb'j0ȿB)B]{ rI)[ ʜNSPxaIpY4jBPYyΕGi;Т"wQdAY| jsI$X?IaHiy{ՄKTHOtB}iv:ck/ _CgR?"ݯu[ dIg d3t?8pNy(>dLsMjx*yP;iK\C҄?Ns4 tȰr7˘(`U,pЌ+oZOkx~X/rDgI|f҉!6*NtX TRnG,^!"6^f1a`lv$ m|tQ t#U6h]D6/oBWR'ӑwo96NslvIyI(N(0$h _x?WtDso@80g%>2*)%z+#6{瀜j N8fM[KBdۺ`"'33^ #tc IsE!B̽+ׄT[ ssK\* 5(_ӸBamy>F t7vA5S+FyYt)/WrE7s8M5ϳ2$AtMRC7zؕ2tɎlR曅jmMܦL{Fqg/T!xD>(o]:ix\57_ yAXר@2B:uNK:ţ;J rbEKEž:Gƕwk< wͅJ%|tmorvEuƮ8k1.~RRf2!ZGqQeL:}}K2-+z=qA[l=_gS{ЯTpvwOOi`EB%( #T M>ACZ<aJr^4?CX>W"H̭n8X鑢F7AMTd6fɝGdrVo'6!N4K] A? =,M8Y' iA{U8d99FF}gJZvH8MzruUepob])iHq@2R<(A-=X8)UoFx ƛIVיBê=쫔9`u&u- zͯH³O`;4au5Uv0ӶP)GoHUd}}s#U0tnÍV):V7),5 ClH֟%b<ZtgHf77aP :Z.F2`}a1Ѝɟ4 Cy$0j 6Cbatvƪ4X<€EctJ>p.@ʷ]ABmҞOЪ-x97 7,EvlniUuk=Bn1dA(ώ&M#v=;.a0[]- "k߾|5zh?AcGPj^ők/e=SRL<"_ w&I; ^8g95Sol>| Q5L#B2M+c#W@@%RbhqB"kY /]m`ƒ8|"8(Q<0V& :-ZCes<;m2|2APfɣvW|5=53IkPfO>Y#<2qۢT-beiƫ^]Y% Y>?uLY!ŏ3]ʵxA¥ ٴN` V!bA'ޟٱ)yXCzVC*Z-H $IL!ZY-I<dG4贳cDvYa0kk߰l/󊀈NB?wlË2/Lˍ9q,G3Ry:盈sx؟N'jΡIʔ$T"(!~UaFdvxAd,TgWo4J# Gx6bW]\C's ?sXq=j*Of^k o4q$t:~қ; SM&Pe-`i)0!L & 7~By8 a< pgzm9 ICg"/~9C&)43=eXF=jƸ NɊ=+wah:MS 9 ?nWn2,8"gXNA/ 9OwQGe@0R \W{4~~%a}XxDgU7cUIŜ(=qN!ЙX%AEUNqq*pݝSJBOHm>^Wȩpblo%hiUzJPs9?HĀCܶՠU.+SM 77asZD7ftIW2u2J}S,޹kɦ5 &JΉ{0osܪpU-(C]bS$r*:w9!aUOȕSwYQ gt6\|!N7?75|wQC2U0~CvH8adAϚ> bS+g䝧*}6gvuZ|Ɉr`|f8jܹ^0M[JsdM*&>nR σ.A (&v;{rRx29 шbX|`0:"FBn͗ ~}2GAiZ^BgwH#dҋέ{`AVN:ƨכKӇƣ V!J϶FY6ԳY1 bQFaNӍ"µv?cĹ:W}t{THR6*R!f 2Gi@mv:r鏼p+y7Tg*[TQ/-Mm?[&TvÉ/抣EfrGnPѷ "A}|kV9KeN.T/ߟL V("ᖎ 巗OrbG}Prfx0 jKT>PSusQ21bt&qA˼=:iH]ґ?K c^G=J}L?1Cԛu+o`p#Ss?\-")m5p?pGJ zϮ/|kAGpnS/ek/8 76x%İRLu>{+1ČM xۗm1a.q`@jIµ{^O~z_]/DD' %H bn^m XMtxG&0O=^ݮ呧b?: |&Cjq_r_QMO:YsKS@$pWx2A]ʾD/)^pcSAZ:]#V Z9-dLR%|ѮceO/Uأ"3ZPqHص׬⹮#>#A EN?6Zț Z`&wx="풮&=YT{ .6mpgCT*g1h5VA2nvec7hS&y5܎R H ;FPaD[ÒLE;T1_#GN&$ w#n-OPD}cXvt/tz4 5Hk"d=Χ:w0gàkw5EkdGQ=^~S>9Ιz KLC`(C0 _*e3es pAc-b:K@s?GʎEk(^i9[*ٔGcR`=!ؒ#SOU,ѼV=z霱aT_:s*t3 `ٸ4 ;^$+fS>g0۾[TfэK.wxOw _f>4O>(jNJg:gp#~DPĽ~Yk=d&j5 Iԫ .:>$]/鸾Myr|0!vF}9k[bHGg ӍLcI(6nBR h{5eR+(6$ޔȤZwG!nhhuoCp]RKN,Z:n''pU] 1xzx* '37EcJ O[mg*4e2Vu5rmq mµI2YZi֭fHR:` [G{nBt4(~Iz955k YώFZb`ا^EVv_5u<oKntӑU>zxcU\}MDwp㍒`颌FQT.}%`zGi &wpV㕌f}65gl׽6Bn"Kd?TѸk.w*k'Ֆ'!FԬJ7Bi3fW8d#GwjIs '(425oJ.HLb2, OsQ9JіL(Z^aoߟa]~_+!5}lȋRfj{c|!|DY|~W,8F'"C)vXv(Q'njg7kjRL\u.c6gњ[L%9+J8J )m٬vw"]43J:dOugwŗr6fO3əz=no]c9~$$ܺy5X1c|>GR yWA;r!]^=`&xW]mx}KwmHQc&mn [`o&ʸ퀐}p3Rb&|1n?ѤH279=Q{qi/ 6gX-,-bLTGcnI7Z!DꇏpCݰ!dP*4qI`ac`?ޏh^_ .)ͺʻI~ ])'$>o9۟fB~bl<]Pʊa}Sp1<.چjAp<dɭWE?gVG2'Shbi֢AEXiYyO6B ;$Ǣ&Q+vH0^z2a.AtN10pS#pY=;GLD2z-H{'MѓX_Ѫxg_"in^ %ƀ{Gê{W5"ts ™f8NP<ͦW[X9++ßvv4H3Hx+oC_×W'+Ѷ'%,YiuLF'@}6)r?A:5FE u2^oIe-wVǽ/̥m.<XY"/%T@%vY`c绫o~zm$wD'!j(^ "v[=D̹n&Ls>&@o-GL;{/p;| 74˖KERoi4t"Pd"1dSdM”IAxM%H&%FOrn^EB#]'~-fdFc2ZYoX\5ڮθdRco%АJ#6-XAE,M'mcG r0QMbY zg9RҰ Vn8FY m~_r2HVV)=Ro 8st|W[At(n/8٭]IHc`% ?_r页IxHs* JJwTK)d9 D/H~5s&.qu$ 0C<]_؆]NUV>X2ƍXw TX eZcʉNAf%n@En 5J|B/mhW}`egYpW}f{ݜD/%{C|$E@vT@]X [gma2m->e aȅeVC(ʒBi^}㢹5D7A`w&8R&f1zo7"*~ ^)*hS`n#6?7i1T)49Ճ1'WNUJ{ٜhJY}ɆmmwfJl.E,lQAP=Q{S OWE-BX;MV!1%Z M X% j*UR^+ B' # ,_˲V16 :_di"u_шu o=ۮ#37[uTӍbQF֒Whpp UvXtΚF]0Vb zO!q%ٯE#e*`7?z#!v=~,%fFfWS&L6^Tͽ ! #?.wJ;CP^,jmWJ`Eï NŦ>VeJ =g'w9 @B;qA?d 8LO(4ʓnr1&uJ[zF|OEPϬvܑ8fk6v$O zz GO`FCZٞk)]7]DlWW0GJ$VrVbRcqlS%`+Rw99aȚb :7C^Rk t" `žoUd.Zm =o_=[Żc3FfZVț`H{.Ɲ&򹩔8 ͠v(+RQ&)kΡېd_&nt?pyKhڝ%;ZZvv{ziŷ٥wxs Y䁄@rn1y:QrWV>@:DD F?U?^8~*9샺\3f Ӷ"d$`o?PuKE Sw;?:ה:<|O|sFǙKTYpWd Nyxrp+āj]+ê:}AOD)Q;1/NBD=51R`ze=?WaӤ&hCo݁ш Ok\cݔܻ0&D@><- ,űwgPF_seq{ۚ\%H[#c٤`z,EF[>˻7 CnyIE.}Q9mahҞ+~~ ۱K:nѾ4/ J˵=bC<j.yx$g&@Hf)ҴvD] d?/U K:g1pM5@1tɝ)dWyI~[e_j -H!UKͤZ3J~\(CHuQZvFD,\ LQVPٺ ˜e9m_ }$H;%fj qH $0]CRF ?$ 0 捽圑]Tb8#w*+7gJ5B2c0Z1}M/GѴ ͪBխBˁH*qBZ'9˫4 RD2];zt^Op! rg8d[hKmFsPEv`R@g^c^5<6Hl';"9g F C FtU=}c <тA;vLԏW=Z.rυNH)eW4\Sҗ9yZxZ&"w/K;e88Iy:12/,}:>Dlo3G%&θIPܒcG]eAZ{WKukCnh [u&8"t #`Ӈ$}IDmTOv1$kG)?B.0fbuڃhmKY⭳uTPC=0-\QF<.̩"X]gt1@?z淥VszV_)Q=&[Z!sUsxLD-|C10P_|9wY&j :Xkh,#%;4ۍQr6fAatg>1FQb ˣ̨,E-ہ{)=_ޠ0t%_,w9=z]G':|_Ʒ)rgݷKq5RN_x|zEYBc<+xY t];0hr?`rQ4%`"HH>ߓvڭu?cu&vy C6~DXyorv尚nIQF0pT\0&ϢY4!M>İ9iJnδmݵV-;_1=Њ7EQEV]?؋8^Mjs0u+0#{iq6(/ʘC,c(_~b]L47̒sM3A|,Λ 0=gǙ$pɄSٲ>&}H紆Nkus}ʡA㰝w l(Ъ7MV>"#|j ΋\Ih'ޥHHl|63r=J+=FUjCe(i*p*4F+ U Bf6N,;5DāUlAyUYb}Ű;4A5X3MV| ֫#H6c[ͻ`שRIxK;56eЬW+T;/`e/L_哑n#J0=H1fFV7^?55JQkI+ hhWRMJP?":q2# mb],TޣPB U#PlLGm *.t5l9DpBwp$d; sw5 E`وvC(JԼzuߧߕ=D*|0̿WܨCA6cU_dW `}kvA,V h6{D+eqN& "(3+5XԎ934U嘮=kן+;D=]td(תxxTڱ_W޼ji/vl츚N}η饑6‹d(nm\e -K+pZtFD1Tm;)sv'iu<¦8`kFY&^MnLrotcMw Rdpa9%%ȸK(jz*B&| RN-4̏GغFp<Тhk](;veQ{kMB]E(&'%w\(5{(6[]QNN|7 r>q#*%'kؕJ[/ku/.,]vߪCbqQvބYC5м!QzIɠU>ͪSIn qҳ%h/C&2#)JNC%V`mb^jFr3MZfpynY 4ۧo[~5m'J ^w1C+g?ϴSZQã+J0S;la9z"+%̠> |}M d&藄j[.wσen8"V["c&f Y nͳ!R=6˖LT':ـ): +;s.3d2&F)Hs`đ.ֶ.3^wOO^|Ċųg~ԆhJ!AR]_#QD|q]78Gc+rh}zfֈi˷F|N UݡH P,WE}<,[t"SXtFvV hAK 5).Jr=)`ޝF+EKJܞ>Xg7s?2)952_fwAV\RsBV g9^ A[y#AÒUd7nW{mkd"gARȜYۘݝ)}IU5*IjcT1eXp0NmH?l]C W9y&ގ)pn4"wQ9fvt-2g_Cg' >WKOQƺp3TgUlB+y U'J-.[D5˥bX׾וj {$!.n`(JV@ݨ9)_L^ePI~O :ڣ{dΎAY"qNVDꦲː*EN[Pd3G֭1 K$' Z(<@1dA'rsJ5:WõH̞m{ha}m7i"5grNz=1Yuv% t,DUQ닷UJ9 Njgӏ숇ׁ3)6Zr;u9\MC^&/dIH;)I@: v~6"IƗyH`6"c7~D%폜!H#)Mf*$S_8<8dDex/۸jd}^9T! 3p'HDDڄ:]/Ց/}q{I%n 0Q "q-3?I}:EINyZ{Υlqh uRM?w条?]U To"6|oJTϹ)+ 62 g[.%I#8i$z;m@G}+!O|HP8G]5 ߹V4֋eRy }R Ԏڱ -_ns6ZUCBSeOk{EGw,ӉSQfi{ >Mjڂ_ 㷵`bŭ˓ҩiJt6B /o>V%M [x>7El5HtUšzB;7Q8,{T6`'nVM vX+E&+J{OO{Ѩ2csbZHzw7YT$ltb&nKmfN5%sxH\^rbסHbW[!V/jcL<0M;s v!bzKI+'º((2JGhGaJɎ74 Ljfm"UҖ[݆p}J>Ȕ[*F SkiVhF;jq[kwL>0a:1iSC!G\ ,e 'DTS+}M{?ǿмP?.L vK*r#6#7.\^] t: e?6baySGjM)42G"FS, W|- aƇzNbm͖'3qhjZɢZkߐc.PW-8>auAiPԜ&CH܁p2 iRTn(-g({qtFC1%->,yPלs7*Φ><ٴҨvdCȕٺ6?"9y؁-;rl =Gr" B.%.7'NdsUb$b {pWx '#E'D!>?㰞 a4,l-ֽ8H,ZSj@]n쒉 B/^Vu&Lƃ\M*Ƅ} HizkFBq)oFnS/ ^I~n$rilskt&bN?D(Зj@,vq=:G@` zl4%[(}ƹ\ֲr,4ف[w\~-y+8=E%\E< ޞ endstream endobj 933 0 obj << /Length1 1950 /Length2 14195 /Length3 0 /Length 15401 /Filter /FlateDecode >> stream xڍP۶ qwwww Nww \]Kpw޽1m֜kJRuFQsS #+ @\Q†@IrmE:9w$L\rVv++7 &n s"@@)ry_4fV^^nv@'=@ h-@ t4V..|L&vLNB w@ tr(Ƅ@ а9mVwpq7q 3{9 6@]V;Xd33;G{O%d (K)0x0L:;相lML"nU:g3'33B?e7Y\h h {s?]5A\x7!c8YXXyO}  ++d0ZnZO gyo?.6_%&fd0qXYع]E,[8x&KC?Ow-%hi,,f_K_>Ryi&v ['jWE9ze]Lg@7,\̬ndTqpP,,>Uf6{?/)io`g8&NN&G8ެchL.)wy '? `6cMAfE}×_ _N' l@ijn`c'_, ZCy:Z_\D@m k{.ߓ_w ۿp; $?>c.VN;yw%w|/_{ +G{%/KW:9$m?4CXw0 n{%tgJ623pN4ymuGVdKKjϳQn+$NDhm1<Ȟ'fN9o\yPT0{=jVFCwU*˦5>Rf0a\x`L#DzmOvO&ۈ~T`M'ꃥ9_J6I_0#T^9y}bz2r!kWeŧ|#04 XPۥ1p^9PsJrωƽ }絹zEq)FeEp&)!䫟\сfz^=dW2错R\X)lG(1Oby ˟[k ̨ԧ|=˪C!Gi* ^*_ .[%FEθ{SɎ*0zطh[oЎ>0eвo a~97_/ =8LAcO<<9[.@2m|88͎5 és NA I-Ε :Q CT٣mg0~ZŠPcņ`kA!"j$Y;ߤOzT꺙#@$"!Ku0 ^>Pɼ? A3{Y4c)ڬ.,<(U *՝*=Yzdc<?L;_*}ǧA(nd{n{.4Wp`+5g*9^[= =61Ҭ֏@3]1i-S|Y2Zw,YtΡ,XwTMsm񴑖&Gw97 5ǻ]s bnX&)fo}l+!7qSr\\<{|KmtY'ٲݏ.R#b{GN%W:5O$c>SZno(Lo ?fHᶄ2i,"awr7KM4ЊYdۆwY6 NE 8cJ~ 9ihMq^5x(dT\4m3|ϳsv`\sW=Qe 3?EVDu˿bXUiϮ~^.=7p@;wd}'+g>2eؙZ)9J> ̷_1j.(&kcu#ʢJMI..krkgi s&OlG;@ʤ'n&RN2z y#6Af܊wCgN!֬,·^.; ވP[IfƇS(CT6MBRBjʃ\$\yn"*kzȞ&>͘;Xc5E?BkV$i$XꮌxPt 4Z H6:{IHg nhNt쿀)+u%<ٍp]a" G[o#+84sgT4݈4L̸zZ>ܢSe 66<ۚ1Whw8ɔ5}jsj& NcNA}/hT3l0q(Z^!,.{p߲ Ne|bz6@%WK]2v9 7 ]S f r(>L>-2sLVY16^HkƓPxa 8[|ԛJ^?0}H?*oK?iЊ}Z+a>],Ă GM7P2<6OquaH2GV?5v0;Bs&q: dPXӨ _kG>Zue>F30N^ ѽi?*)'B۽Wl"YQ= u88OIԱCܳYp=5ƎNHA)$RoEGdܘߤ?i=EXUr-|41qmMV 76izl놱0,b+}h^1t4x,i UG rE<>~[gdQgs=54I0*Tmx, ]ȍBǵZN#olPଳ=Σ^{+n2QwiaH]jZ- ChnټWiAN<)智} IV7;NM 6k`;~+L(ռ&hp"{>`|#@32慟3AF.'~󅴢MhSLjvӸl=%8!T2aeԷc HtӡsI e!X+3SF1{:DA:0yc;1XJ(Ĝy&xJV‰HYbɏqDOB"IOv3&jB?|v֪b *DeM6 Z}@29|3l֊B6K!y&x̸Q.I*#eC3s@h)G(a^\GeB4ɟ3}'1GKky m(/v=˳Fij&D ? +67^N6o\{pm:>1tމ.?m! }EQ^58BikT;]EPL- )08)`&I>kz9ZJ$`bv90!w 2$Qp@{\ iHzlYkuJv&Y}xHsf̛\[ `&7\(,10{cPx ۉ&6 -SCVG_2+G;1'˃d(2R*ՈP-C)ErƈSr/TDU& jqH?Vs=,kdOU73}c^JdA&ddᥚ _RhƷk+n9 ۡ@uС@OO(H壕&77B0Nˡoe%$&Wta(XjX] ]NҞ>,oL'Eȋ{Ng}ia 4@-C!$-{ޛAQl9Z.jCHꓨCb֐ʀ>ssOCj9A&G>];K}w,٤ H9m1Q==*f4M&xOQVX=fA0T]8YT#:I7REC^[)hg }Z P(QD+U|jM.=0Eŕ\u#R]əYpO\qPUJ5+SwI 9~O)h1ew2ߒ!ڮ8#$FBq1: TV] 5PHn&Vmds2KY&TF}b+K/uȇZUC_Z;+V̺C̖vP} mj8b]gWxDZ;sQuAf5v,;G֍3Cn8^ϴ+H{m6a'!FA UE!Bދ$X}D^!qa D(2 S~/qYNW,co"XqV: 6UpÎN;8D]5:z#cÃ4m~^FA,yBL>,ڦ7Fm]f`c:VIF(HTJOъ(sҊ0d>Osr)zd($f8GڧTʶcj%dV]EFV?ۺ#]Օu=qD0ʚMy=W ürxɍeo{_bt -^uŖc"No@x#ל5Q0|ć41P"ܢ>ϴGAn,GWHWCilMLJǴ k`X%k@V$PMXau^ThHXZ2_V/jØ=>"^2אO"t uɚ _bE& (?sGd>Tϴaڥ" 2Y;W@?L}]Kb*b.PSh80Cړ6k(G_M'YbBPqWXE}(R1ٶm9jR!N>vT ƅt$'o!z zV9u謘I3}][rbFg˱xbF[5-E'.xs t?9-ѧ4LLwW.]xawuVT{ZgrG_XUKxʮtJ(6`fYioZ?ye?T L__]-e1PG22%SZ/t\69cIm]oAFs=w⻬&Fߝ=QE=]O!N\sQp'KGFuz.*pb oᏽ8۔ s曁K?7(/Lu u C7=Iӗ V3VaPWv\fUx1zEwՙSUΉU/etylI]TRw|38>f^tZ[N9ӴZ3( qdAݝFLSC󐅔A1 $&38d*:^qI˫ _5yJN,J&WW9Rgyp2#;&SrgO^iitG}\&=֭vw?&h(T85jro5~]4k'bUiGBfX~wAm;.{3Eƫ2HT"_J] lݎPcZ8:Kܙfz>8ZR-Js}WrpM Kjn+ *g_ﶲ7ek!'lp  C+"Y'I06~S/=bx>UYַ߄Y:̭bȸM$? w)Jz^O 쓇Vfm*'B!4sX(ϖ@qc'MKk_lc\4RhT eS6x5 03{G|DОpYc8Z'dp7Ol+A%m'@ v܃l)x^"Ŭ#7\^or8x[= ,W# N̩]kuMwdi4-hhǷDQU'LE|3 aKpd1*rwQˣ7#$\2yGYz&a#q2Jn'H+,,ftd$U%6pBV#9^+5&qJ\+#9`N6x't{C˜ZuY}¿O*vEc$b飤yU* B[Z\368}+{7#Cb[|iưXwpRa'Yƕ]WYOg~\}Y/;VeRV3So0|"TZL^c0EUepBCB!.0i8S2eŜu֚"ZcSQ޾\Xu/h^BwD |z.(IKB9E^8O퐠pX!BV,X@\NђtI{52D:- ` XGAD}9U SZ_ Sp/GnFNxq_- Eȡ?e(Od7amĜ?J03Ee>A/=Gcv^ 0^ C ڳo?xQRZ`m扢B= ا -?02JEF4T0h멣uC+Ɓ80k=&n*5$ @f;o<7Zݨ<s[]Psˮ/wwtF+$NJ>ew̱:f̚Jމ*! BhJŵ,i=,IIUWTR$8ټy{B³Z'db*y#E3 "5;;!ֿ9P [6nLw=j KjG/4=a˕m;~lwfb`96 b#P(,l;s.6'dKuԵC{QL*8m_ ~c3tT dAy`y"Gx08<;& $$k=OԜӅlDNkrqfW4yvyG8-MӅH5'DK *IG`ViP -XM ?<&]K; [h-g%jH}T5I~XLL1Sզüoǣ~_ɟ6hg:͕|I6L}%a5d-#Xo/͚jq18 / ]2=xSz3 Æئ{ZJteK\v{Y1JJ%倞IFWIt&,>Z4 _r<}YKuF0ExI}7ʡraKI@ۨ 3ٛgi[,YAJ}-/mF-.:ִY[]T\ &9v1q mh3*{Ȩw9Ɉ}X!, `ʴuZN3Гh$69 !dHr^ֆylH\`{ccfI,hqc5򽉍TޝS^ ȳ]l>4j +h cZӅhA' +?<Ƭc_WвHvM_噕 ʒЁcZۮ~9f4#) f/ հcph!}$Xvxϭ[&0M9r([HGy },@po4vhIV{kLR:d>ω_#7;7_N3 ,\4>7Lzs)Sx@vR[I(Vt]"}\mc@qvyv5ݤ2EZs ̃EԫkljMlFU$qLj )d쑑ya^tcp]l\ PAcWZaV+=V G#sVKF hŪr\W\Eyi8v>&Mu7\!s{LUC5?<ګI>Jt<]!]YbyWBNKM6y[/?y`CXJ1EFg9WoV;M?;j]zXr4Ֆ-?UYժPb~V̪v!H0ճi7W쭣|84>و!T ".=N['vҢ3r#?xz)1Ʃ·$rt/-p4t_KrY^H#V$AK'-j~1A M,h-CKXGµbcm2U\P';wKm)\SHY|#T`=|u& `U軈)IGB}\18V6gUF{~}b21\,UPﯪϹP91C5ոЙ-zkm`9 Ktb "ٜ':[P= MwI^qi&3 >g{`B:yg [uM>t:@2Nŭ쫻r=lf4Uqs.V:6Y'S8ԅ!N^-_z%j2G* sʦ}g+Ĭ%zrQr{yْܦ(_86ÿ&4>ܝiab| v 9dK~5J6$K&lz vF>4f}U۫|J%W:t8H)R@HDV 嬽X^-*pkz16u"WZ"ejzfDF37atar j@7XV)v;L Gk pPl0?&?ʳTpÿAJRMOc}f2U&";خAFEo&.i 1an{|6kT^pOH:$'k5Ј:03> xW=+ݯqk L2I; g}`f˓ww$ù7 VR?ms[]D3|VGp~wR4AvYWZw3}B(?@_`H@nLiyuڕ:fcFKB 5`$8ŭg1-MA׀yQ+g [^ֶ!8uFsS{A/<*6{~H2dėb-xo b/ܔ"L\Y W">xˎp\lgoi8R;/J(CVW[{:~C^[#!{S<16w7sћ851ou괌séC*qK_> >p0xGlߣH^&' h0=3 z*'bi'@s; *:X,DHM_ϞıXY@~cq"&EjjoѨyJ-x:5o-|M:,aߖ?7f փ0A?pE"qlf=~DWV/p>$q@ bd{?O2v2؝A;st}t3"s ˩Z#Ib O#$UnjzUnIMx24~@WʧĴuo?&A?B#Awpwn5Z&B01`NF6^7jT\$vLZҭr%nHb@j@HwYRa*}L}f(NЅY%1wxCCqnW\tN [L]m`T[$%Dp* #S0*})TEL*d0~ 唾pL/VS4-R0?auF&嫋JzZJRܝKoI+5$"e Lp+[W8X vYTepU<n J<' ĒBn=}Rk!PG'fTR췡ܬ-{xɡ-_*"sQT#Zg&(:ϯ5e?^W 9ě{K7, 5 Քtj$;m٠fMvgl<2̏0m{F?")0$J$9MLJĎEmb_$[i%{^AAx'ٕ3zȷ[ZRj+UsH/ceR_$FИRw[a㪩+2*c/.(D- 1x/#}~o=8dsmQBm޼)5VH!K\5uI:ڰMr =`fȥ.z^.5gu3V5ө byWKmA),x c uyRX!,/v5<{+^fTuʍ).+ņޛ08s L#~}>bf,ʩ &c閂ڼh:̌Xd$Axw'Ա2b),oS uō2G g6F>Ck>}5Tv a^w!J SJn(cvp ku' 6dߜۙ,&SK/4&b1 |ܔo~HV廁&{?(ؗ$0أ `^ZI0lWܬኺ5_snPOei[lkI|[~ueLB04a߶+3(*\Y t]SՈF ±S-=]cjBqǺezF᥸q([ܷ&ɍeQ:'&h!6v/VǗs[<lq8œ^IChO l۬喹2Y$Xf iA_n.5{ WD]*6W t*d{"MS܁6>7)CerAVr6ْ,H>j#Gu`$lI1Y_ΆuwU[2]LMe)YE`ZT$KLuzóՕ h>Õv&WXSxЫ̻w=Ff9ݳ{.5R1Kgmy[$?4; &c#sF_H6t&Q82ҙ1| @%:#RҚ.-rM`c+e%@O;w@ Ww\&o0۱F/C;p"Ί-Cq;jv[ rZx T&5Acer!Mƛ $7\LK*w 2LB=2jِs姺#9g+I|bJ". F3~ǚL(jE>zE>|bG,Mj@~Մ':muvx9>>i@#{ E>^|AR6P;'OI=3h;`e^!q endstream endobj 935 0 obj << /Length1 2139 /Length2 17138 /Length3 0 /Length 18411 /Filter /FlateDecode >> stream xڌPҀ Npݝapw -;wrHޚ*}{ս^XQ^(agLSef01201Z8[##W::YBh!3t0HXY<ؚ̜*R{ee@߫rdabCcc;{C[ [35 !L05cчߩ$>'cG {g'' jd6ۚmOh>\+[;7[_e3Z8m!#3:ؙ8@؜?j񲷳~0~|y9Ύ.@*&#-b-_>ڏOfbgk#fTUwUع9X,LffVǃQ4wX+ekjW]Tj\ O03a/ymz m,=mѹ.S g1 TѕX_4ۚ}t4=7ǿN@E gc5Ϳj-P @t3flq8}t*oXq[c;f`hqbJ߽ `dsX(`j׹r8"(b(_d0J!b0Jx2#'>x %x#>}DWC4Kd_bi NVL>R2C)Yd42/EZc!;G%6a[Oۏ?QǮq~$?#qG2nÏ{?'O 2vqtx}}w4[^3 jsߛ`aCq=P {a͏XۏxD=a)yodN\o45ڡB:quaٗ6`51ühVvƢsڛ8G\yl"*,C8RFxvSZh,@1u`}{pb+^6Xa/`|W9*=ȟiLE7SjwZĔ MKCۂXFܔ"I$!g{uЇ#T]ӽ~ @Dzx'|5|qL _vC{FKWE8rl~|Y*Ц 3 v?Ov =?=42+J9ݪf|_&кSFEe! 'f Jw?kO+vPлr~~{4nD<0V? vQjǫJWfjD\}$F}T,MV fݢVdnS`GB*pQxwӺʟbEE0Tv##?RQ״Sg,hSU3L擆R%2 NBK$~6faE*Io Q6uE6WBIzBsif&7Lyx46d;DS/yK˦׮pZ98f5lOЬ}:ߍ"U1"/MH$,/ Sv78۪Ҕ` Cmt_ gq䙪Cu菟 FC lqL̢W`ى}cO5Ҧb|[IWzTnWS!` BrO{8wYy S}KPU >lC!g>nG44{D+'F%VExD wGHI 3)yRU]gSsڸ6:+J @ '.G`rh 6L bwMg_K*miHסVUoi:YvԄ1:"nr'g'H1ggKϑTvP֭U:4/K'uC8n")a1\]0GChEhPs`.?LwSN&xrOY=OŲSQ=~Fh@mr)J՜B0<ōPl>;BނOZ9(yvzuAk^D(V:{>,l/2$ o@ˋc{ƣ&-si'M;-~#l)ifwqq\ڜUC/k-* ZFQn;r- -ߨIM2&GK4'-iϓ-pB_N.M@ٕ\XϯK }5W{{G RsEQBMnVn 4H WMlJtbAv) RVJ\K\"2\e !ɒF3xK4h4ڤ^v +>T kDEȨ|F1,YedJ 6.U2.'7;Pag>v'² ب5x;rov8Р(j2)$.*!Qs05o.scv#9>ѷmqdԧaqD}V8ӭ&j>F|ᅆ3'SHj1R0h< mP/ZpmJ4C9^OPRn^p+d8Zں9urAI- >\_r8SWc_?1^rw-)~FJuC>Ia94lBғgG=Q<lk#-tcNFeLrQ4)"\scKlPB|eh"(/^ߪxrwOIXpIP+}ƓD,M}ٙ)m*uT2MDEXZFtŶ({ڳdyj{1U\dJ(4od5}ݾO{m"k]M/tc9պ{{կMO#EѾ[[ORzA)%:IU+3&4ftlGщ21ui-tI u mB*YrJW.;RNԌc$D{2KA@0px8 -Xݙ^(0V빗wpc [F[8Yޮ2+PP1 J|ޢMAH$..REs'fv4g&2 >ϐ;_( S}"ݡ؜ Rz6 ne= 'z;\qvLwl6WH%-O3{s-ĺ%SSLE6*ؾD>zߛƸYx:D{T"p*XpmZ0ơG~4ZQӁ0៏RaJ&Z9DVM_\Q\N\e0nPgLiUCzRPv+iN`: , @bE+1Ǻ6%DG;[-Eyvxݿ7& qGvO{ hkH.0Zkي5+G:$|7P^:J. =AoM@4Fz@y SZex;G{=%_q򘘍;sp^G2:e-Z:dDѥ"9N/W ۉίf} ^, T"VS8ekJ1:6ϠMg3`l(F!>Cv82C+]WgBaBYuBB+B E32^n:?g"('$+Owvc=zNFџlߏk娳lY^ cՊq*Y$1M ;XOV&l&ol-Gt޵oxUIb[}m+ugV:kTĎKE X1nyjxcݥhqDdY * ."lo2 {sg[Ck%D…Yv3z__I4|7R1)%oXs2J8縯a*c:1CA7׿VtZe * ! -0p5ž0`H! "{N@-9 .B/NFǖV9OAG_]^~% хq~ .*ɿР@|uI1NaH1ufM%(giMç]\At"<ƌ[K*zL64 4 d\X&ң$ڐ ʬOx$ - [?^`?l+}%1H?zMhLypha)DFz9 2Sx$g C)CCX#[옡DGdƺ,#ѵA=4Vۧŧ` F3!Bo-o|qor !B="J1׶!~Ɋt;lh8^iYΔkv2H> U16 #q0fc\ԏ]BU2֒<f l`f[B^%SgwJ ۄXNO\xUyyo<<7|UMkBs1~A#-gƀgdSG/)nVWq18a&؋ P UԮS XqdZs]\MH);.ϑ2Ds\6-SLhW. h@ aP)$W^\wҠ 镜gƅ80 ЎOMX}kTYͰqitmTgIhy;tq}=ї xF[!)8~lRW-ӄb˵OB U)|qJx4*sʘ.=*#/h<-O HkR5A/C`qlQj"O`7L_;!7&UBNX@JF bKpaWT$ o]7Щ-3%ydထ EKV9QEg9*wbݮQD瞾?Am7Q9:L]Smrހ8qu X?:pԣ*BtTyMVPrJ.*}-bZ-䋷PL_lw.UE*gp04Za?̹dʍERm͗lޙR% >nUpJyR'@ .:_Nx&JxҵSkݍ񗽜ZJ46A E8U ei@vouZmwm;kⵕZTL߀|!Vx'ۙӅ)PJ4H Nz]sR8nm{DKLd9Jx- 8^w]\92] b4Fڷ$!W.!I65$sܪ`':g!S{Rk͡ ((4G"Y%~!sB|.Լ3y@b*z{O b'ZExȌ8EoU-U$Jy4]R6$U lզ}HxZZuILP{T{84߷6V Vcͧ=n6^Ў|$D=Q}9ħ@Z&Ϯz2hȐ9'jFo x8~"yXe(")8e"#B fEXPtyE% :x$!kJ{t_DgMX*hIjos͈`ܺYVԓ1m>(EYCΪsYۼmvG6sƜ7}Bhfa/ђEtf`4|ύh4,}y֞y?+--B]&CccyΧv+}ynD݂6!KшLi[Aus PWpg>ƅ#ۭ_1L,vŗqKPdŐˏ]~SJ<5il2}`3A9ë+Χb W}'g C$q>—oKc3Ig#s(u&,`SJ:4ٶ=$kJ̯{KW5{^1 lw<R^ّW\7h Q?KnPpyS=,HU8CDvxn\& L{߻̶a{A§(WnJG1޳)Bº阺/ hO|.+ x,CM̱8 #;[ԍrXf$D aO"Rk!vQ}Zߊ_bXϘ JuT*#%: |dVcrgFp?[Tج]8uUR:@Cxg@IG;ӷb"uPD@)dFf 4?l d@+֦ JdV:7ϼ𰼶MLjuot-—un:#&8k:Ȕonw\#~֏[JP&  0445aanyD[nXTJ<dOD$g#R}Z k(2ͻ-FwM]J"Qn.=w9]0 9 0T@0s(\- eٕ&eM.*,*iy)H4kfVd(H)ь 8"$k2kp(!& q6_d,n5W#AsP)J1)}h6ܸU$&_Th*I8 %ꒆks9ivo4hh&1>f4#S]\$E\8VO@l9]A\^f@,61ƻ5ݯaČB㗿ԡ]f4iGf-ɘ awkl=,%9b$&U.TuvLg'c(Z d\it vh %R/(34?~Ö9kË(toKO&tLs[8KYkEh[IJ4: Š-t=7sKE3'`D+m-5;ڛ!_\+p |> ` A`A)~4I`oQ|Jn\i5{4t1L)E31'@Y%H̵]xM_4o:SF-(^/9&Tĭ$fx<'O*Gp0JRN#dWɒ)—ڗ}T+Opi. ے6od].4IRBW N"jB/mT $qW~cT'2#ಜ4}ύ RDt4Ũ"#?ʀ//" _9}n&d,sT[zeX䞩A9|WIgm-a ]Ζ]Rn*i zf֓O;814_.FZ$$Z @?6ٌW:n<[]ahso#`luG"_%Ɉ*S`6m'GMnEj}4qWmkhef8o%a =MTQW )iy{ESs ke3F?U馁8#lFV?rHhRw͘TӧtnJ$\'84tAc\%0*Я?hG898!5ae܎^ JyhQkJ!kiC[+$xkOÕA~ -z:] xeׇښ )p!,1%cZdgӂ)Zؽ.D$t=3^M*x\fbQ2S$N{8BА^R e6%Fgjyd'_A]@ []2Y54W )8_p00@(.6C3w90D"9[Gy+U:92^exL` 4?ƚV_(7qi^=a)'5bxʿ\ubFKȼo\q5I,e!>7 M;֪ Xl%ב*`GMa~ nCo)hYpY3Ěr.e4\ܓ N4:&_xk [ b` = 4gN3? gk;p7ġlN|`?k-+ΰSX-FyNcf텡YR.~>z^fKJ(b #82 TyXV' ?9UM ,+>L_UܺqJbζE֎ M~g@ ?F<%7Bߥ31.7d(fk`u.E@( V{6Q!&E4Hx0Lȸ(f̟DwTyiEL'[O8Uq4 $9 K3_r-c~ ka+oFJ ~uIM7_%;)TbUOa(k4V9MJ-KiBS m343~ùFOښ)&hE1kyPΒ 86F>1^0uTV՗܍) %"3\*?2n/h wU? lQК2|GrUO$u]@q:ﻋK$oAaXj@dSMК73g `ᒋ{)wSi*t᱕fT3 }4GMd}`fDezAʌVqzU*{Jl#D J(kIKr>WB_brцP† x0 Cd6`+ c31&V -%HYf06Cso8`+ޞ ,&ppsFk87îK htq1u 7Gϣb`]}_I%(56iTE.f7!ax 1I]b:@8?)OyW,g1,w gz{u'j0#Iz̅~&$|X\q#ZeϏ"š?Nl^>4y.z~u'o_ӫB][[I woK_ks8\<# b }Dҋ)"|<2ߟ9WVn&jߓi|H129RfQ5Bq2yEs+ry4;xް]Q&%W'x=t}tR 7}f9n7Lǥ"LJw@uFd;;~yoS6O``cxYu0F@9 O)8Ԓ>v ~]j2B`wd}YP0~<e6K*uǪj}eJ%n"٦~<[T/3+S{7fz)v:Tm9ERx+XKEUZᧃe|>{+AtPoE ^'ÄXGr!NpC|LQơ, ZFeTt1u&ۉdY#f+ާ A,G$CBS58_4ON {_!lدiW ]KmYU^}BDI_y&h9j C8iP<ܷ'u({B7U8xmH:4ڿUCX+Kyy޿*)=Wxlny͟ŰN~EξY% ' ,>ޟXhf#o뽄S5$/+.fw55-H MwFzz;etCc %,v̤Y&qGlz^N˃kͷYp!BZA=aܟ=i+8xl,}NTu7_~?|J-t< a$IU}33VbƀQ c`׀#**?V̲51<L/O%XV29e$F'ё*xu 7t ]~~[ۜ܋xȫxt droTbZNf4"S_&bgD qo bXTM(Twa٤T@_OjHN&lY`lsЅH#mݜ/B*+ ٪,[WfCwfmnJ$P`q["Dx6]떘l_?SV79@kD$S=k'@H]$Ce &vĔM>O9lץ-{lӦ#/-}ӢXv'XgsWM=Hy5,$YbyM7^ 84qUhtȷANQ*WPi.P_h=͗B&jsM'R23/}ob܊ NS{&e/;&.BxNF&mtȭ' đY< "x^G~ )RRȰiS8(nuϭ/E/_Kr\~B.2l#a?6ڂy$h3QY.yƎN1IhۋNEŗDQ>Hd2 ,QұjԊiX`Sgx~o#fyUxgL%mP3Ǭ$A߯dW v$:zmlSSoO&%DM[:iAA8M2!ָd;SDky~Ӏr׉.W"/V,dgJPxj0Ax 뽱Snͥ}c7)zԞarlȮ}}EE; <~ nmQ2+] 1#ns L5} 'dF1w}&po l} [ܐWDHHBl[O~KF7Ӫ,GDa*CkXv] LNogQGӍnBo`:Aؔ%A,Uec}eNȷQ9R1 M"&7SٗdZxl*0k;S[>A1?s NM_rm(3N 56L_d+،iHa kjГ9sIg!8+#?$$?YkD#H*>y$&46^ h3Q(rQb+<~15l|YwȻpb˂̃`4+IB?1}C}Z~woWa):h0-hMv+S{<1Sקç` Z=:Iaqcˈl,x~[U3~oV򕘹y}<6ӔIQL,O`X/ljO0 U&᧬>iSU_blYf e78IU*cQHltc,'VRE?#Z~'+x ,\F{D\ U8 ./:kPMA{ N)Yj I*)}ZM:%~FvMfeh-ޤ@4rp3ѢpwzPvYqJ#'ÝGJ<~C]=EAVWrWPg ѢU + zw01uY Sce*/p`˚vBjUIFg./.+DɝscvhBίGAo+lQߺq]e_uWw[3C9kY6ȾKMf<}F?U0wr@;9R5c'TXDY}$[^8/Y=wY?:qHCp2T3V"ZrQRͿH8#R%5u^i,T?M|Mx/t>!Gc9D/V&ƃCs._d`>ek[zNB%Tvm؊^L79˜^,!+Ⱦ4$Ob'O c\!? f_"O߹: d/vmYHB3R(T5[1,%F*¬sAE*ˋtGR≺^" ;ϩaLdgy~J|13=5J屇T/dtAʸY~Fr-37:jo7Y>$=77R`h(jkqkN6MKcE3e{H FMgI3Q +;Ut7āO;RvJ!u 79nmn:3Cr!Ѳs'bSUE5Vÿr񊈄=h& WR׾@zzw 9:zJ8s1C^#Ctz/(5ULPO5A+SlzBw:lrjVf+t5އqq>m:<\d, ZEpE:*)7may(J"W!ߢdGT˓Ʒ@hcEoIBd 8Fj{ q_V@Fx4gGuc @Ro08b +pt;dG9"/)CasSޔң|&=,R\ F^Yc_e.a5 4Q>eGu>>PLfvfk}h dŗZ׍N΁kXȳMمM) 6}i>sa țG ~F/L}@R9PZggC@V?"YF{gz&-7Nx6b}yWYWN:މC e@U%- sD4Ecv}dTNxRc;qDe*V!Az?:xfF?"J~k`- ~̹81Ce=O옧Jc F_.*{@M#ʫ8mӋhJ4l*1?,SQ3@ \{t' v.o@ KAz3cg^ :>ϰ9,s)4(bB.'Jኅ+ˣN4<ϡ {zifm4ZRYq96QXfF"rBF*)U -LJSY'oj  Q"UVژ(j*c;W="AK}hv7sw?a-BnnDP RQ!S?8etɍi^I3}EAXGY+X۩q·Yk˙R2W.6*PMID>8cf1~I]uv*眭ZT_thPGv(Mcڧ o/2VU:?ENmɷGYt/\ZIyUxJb 2׺/ endstream endobj 937 0 obj << /Length1 1965 /Length2 11583 /Length3 0 /Length 12782 /Filter /FlateDecode >> stream xڍweT\-48kpw/ )!KpM%xy~xƨ:sl9EM$f2JLl̬ Eu 6V++3++; 5 {Z jr#4Cl`UwqظxYY쬬|C$Mm,y#Zbce dK9owh :@2A6@YX<<A s,-BmC;ň=&8rkxq#DaD`WIYx˛+2j-\ H,a'Ō #Et$ďvD;u() #Hk@.8z8/^YߕeU憻%Ym#2P{ZhP[Op>ta/s̅ˠ/̈u+y{ZwX]@spX:|OFȅGhۗ2I酳qrqʆN“s hȖA'ֲx*OgeigzlfLb_ʽXԎ: h;%b'͝ddL8:@ Ԑת>:2»*KΚ3/&9e=|/%aꙺCTa,dL1éE¹"t=x6-_5Nge:z^h:kQ3jPDf,Vhޚ/Y=EadLLW.cZp8azKt]*]{^8 qX× c+d%ҷycXh/c0ˍs#./A2j=S%8@h&Lȵ}/Wظ<+c0=4ֽ:u^V$iYpvn@buPMfww6'9Y(]mY8ަy''@f2@{>\ȵmP,2izz4?U %1 |g)q)LrE`.FDFȌaxۤk4vó0לNW1}qo_X;FnIEk/ ( L46inof$ (m.FRp2PGaqiN}_WFaгEcm ^B;4r&Iu;&5K=|ZHsU/RYd+UK!eØu 7Wc8׍Mq|ga*NBEH0:G)'?TC@ڂ{/ԈzٳuovT_P`<_Zȱ?Ѓ5^RS0D:0Bu/Wa*FDSK(Uo+ܕ^* QQ9!6cW"@2nӫe~BLOY垄Y0/s!Nޝ0{$\t79LxPҌd&s^)RtA[bE.Tf-/yجvz$Ɵ'4=oN;>E"g#laaQo-\4gu_k`uEީ$2K)x%ݿ7+]yVea5 IQ_? ٨5 ڬiX2X]T6kȸj&͈+Ȅm DG% ~a9T'Eyep|`Y7su^tc p gL+yv³īNKzM%G'IuZ `t/nİ$7fu5#l~x}$MMd.Ms͙IŜ*'{}#:~KWPz.Wyσ߰.>>)ID:>AA}n` :/vHixD(anlďg\*r M~$':|~@~9wn-KG(-$+Tfڦ vʑGm J~R%cR*F YSENxf%oh=8qy51vEX"(¯6={( zK W.cy+*8pbD6*M%:FXGd2~wΏ 8qCd?oܲ=Bz-"xȯukY$qvQU|UނdMЊ֗!!HztC4g&[(֒>KU}iЋSys㯅)S7d%j{4(>+W#]&u \Q~)gxdHg wjZ:j}UU8JVb>j1O$V;c֨"LR 8GhHNIx\ك0)LsM\ԷdcDՄM\x6Ef\# N#qDRF];-kq`3rG)f[`~^v b<$\5T3Zt/&H$P[YlXoiOr<|m5El H1 H84qݝ be%9ZvYس@3's}'r{f< |\45QS)[ ɲƜ]֋ģR_b i̪Kz;Soֈw'9e(З]*wU*oNr{s9 YlU_1oYT1Wf$Yphs$dZ_EY IWgsFNpX\uҖ* eP%[ ];1sːҝ=dڀfIoR/V>i9|G9#14:C"kUd]> QXAl:8iZDy^0.d80o_'b)ۥ,áHMf G`P(V2d%?U˒E0 TY6VǹʺS"+9:zp/[t\nr41 Б_ʾ`JFCSyoMU Ie9}qb)"W)E=#s_:]h?V%2%}V|gs#q&  vs8{FMÜ'/ñ>k.4 =Rϰ΅S1yOu@W z3EEӢݑEM{m~4CMM , LBUǿȂtm8 *x++QsJ=˰b~r ˛,- 抋JzvF/7bgbu/M|~l/}$#rj,Y|5JQi:).361~er)NHo c4B;OsT# U?=~IT߽5.p- +psmn{%kKD4!_%/vD"Mˋ)rւԇ̦QR\g?]A,zcXtwXe\Vium}WZSp3,}ƍ`™#oaktW\7!+r ^\Mg´ibk!1 o\kEv>umyBg{|8m㽛a].GFWaP[ZDG=k["<φ84ppkDֲ7[35JGnOTxll$5oNgm9 Y3^\)< =fkҋ}TuDtmiᖇHeTBCLvTt`3~;@fOQ]CGqz3Y*B1ۜOϼ󳤽}_Z@a/vKLJ&|Fe//Ige[KE6XTY}LZ1x`i/Jr tU-zٲ^̢Pl"a 1Aeo_9k;Zϔ: f)ګNR6g.źN%.SW]VdMtgC BG<3Hqq30yvɞmes!O\{%+TN@TLߓX. \hY>Iw#$gno.3dXtDހ1-D_m*YO-#_ nL7HP2hW [UO(WH%\\(bå_ ϯ_&G3p4&sZ5$T/\2LBFU)qW|5 "?d9x'J\t]3{P{]glN"W2Ôx7TI7k 5QNMS/Sr6&Uo>|2x7zf5TlmCE;Ŀ#mA Z3IrPЁ@N߿ش/ΫK€ ʼngk.+,WЯqSv#JE]  >-׻D҃ hhkJm_+(AB/C) r \+׽P'6 =;k̈́:J5uQbo9[P#*fi5yxtrmLImꂊwP4ᴲ&%yޓ7M]sH_3۩czy=҃u k5vRfh=c$۷NQqe~7=-nJa'1M&S]Z]<Íз f˲-ܗXitc$ sGm<_ViSq}L0]=It2_7/'߸3 \oX4dP"/pjH×2 &گ %tMo`4:oY3κ0 :q*:-cؤMe2k_%Hlk=Hn#YGiŝYofA[Gr˼Y|"S־,f4@}Izb.=V+M,b3msw@Ҳ~"AVGѨ|S~uml M[Ee4Ps.:)bƦѯCmvSPV'M8r0?aCip>Qہ$`P㨢A𔵼pV~.qһ`q!Jq?>tL ѭ%2`&9AVr=+7A`>X\YgT(U=" f7֠L tYsRޱZl"K20ywG`+@p3|"ݐ/;ږ_jOެ(f|DgJz;ʖ$ö́þ3s{>m(soڑ \3e|M+ C5tD5IOɳɻd%+ bg79na'=>+D٦яv."U0XwVu7x-\L3AGfmRix/1H͂ 6v`9&|{Dž~+覍Rz9; E@ԝ='n}TqfR?;.ICw=Ln?~FܳKDڼK}%.瘥{bH .yH&=Ba%oGȔ-Ԩ$Vi8;ŭbE%ID'!7?mG_jԾ8qZ{/)_:5b3db\LH=pOkXTryP`Vk*_']zzW|y(߿ބ M~ U7!4 $/;fA)<1[v7y+gqNZU.zMA/G7P,@s%դC62/:@xBIҹ{֧YS$6?TIHdj{ZglAҦD%*?E j v7bݝy7tVМjo^0~^N!%@/OΜb[q}>M5ud><|/H $hE]6;,R"GvCK-k`;j9c§:{fo0wY>m#{K71g=o%Ku{ E0r42޹J5RvilNP=~q}ŲL~mhCF"m\CS5XQԺVSo/+؛dx,y Ձ6[O`NcE0/pm#YL{8}Uc3QƇlyޚO.zP\iN)BbgK&?ځ;@g~QgVC݃^z 4Œ9 HX]17;Q]?he&3sej_wyO%Rpv}K޲ ``Q"^ ç 8{n9 թlj;Dob.OP3jtU1ǓoV?3S7LG!#hxj ,džnTmMJ=AW?(Z,t왎^r 8NPc4BBɋH*p>\}!g@R굤*excssᬝ8cMhGh_TPCk`0{PKC(0";xa+@%GHfW4/V6}ב`uq)YG~/'#a0R@XolhA2:kV"N~1ĐJ&̾J7oO\o'`ܚpǢ$ MN V[W#rp&򔏒MLRp+0eAъK00 ԸxGI^Zom7 3~ͬBIX&'۾+%ctd^D5e6E/&@ CHkn$+],r}iW 7O߱Ա8nc:hR̉Ry#0p4ƑO뇺.¾SIfKjv1fYF={dSy-OͻmMa-Et[%oke1Lq$Vf!˟JfX 'M`Mx)4ҫ;dv fM[j>^uqUOw},hluJZ۴)*@ Y)X}W5se:KfN-zV4>-h L/`eNxi(pSPˢ*.N?=AVNoQt& J5Q0g-/@WT6E[TXV_' 58t鉗0wi̪MMಜAQ/+0`/LV*ISX3cA4:p״昣gpfYpcgsʋ([mB뚉oSzFZ,:iGd7 EFR#tqH-#Oo9&Cyawc*A'龖P.02a?#}r2%ўbW:pq@;6icKp/M^ 1/ [6 7MlscaPz$)"wo0Mp )fA675tHϰy/gȶr`ž&%_t3ճ:DAIB^FdJHNy4tij&r&Ol^ΌI`zug*$~ Aa"WF^sY엒1r] u-x=H VT$#&K݄!M/ߊ׻xPvrNp8% gSB%N.NLUfS(:NO+:NNĔ Zq"[EQpQ/ꟽK O;uSТ1{#PgPbic=>.eb8b,oqW umDV$9p aO4,pG9#l<^aJP[+اS_njtgD%hJю)el 9p㲟/ \jOf}f* }%4t0[Q69>27? rx>R{IہժdЬ[V)tMYD>w=7U"Kaaev86it\1J{\~^SD'wՍO(-v~t3cCMo7^3yAKXM)m.<o"VWa|SY$"386`%xD}+1.dJ譄Y`ѓe~ af`s}! endstream endobj 939 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xڍwT[6R"C7 tw03 ] ҩH(%] " %!)~csZ߷fg}]{_^aa㑵@0$?/H /$¢E@B<P8L?0eS#Q@ 8 Pt~ ~Q =$T0EupD rܿYW 4HG+-ЃB!H`rD"$y^47 E: bBƋ;Bzp{7 .P[ A<Tu@OEr~?ODPد`- { RRE 0'삀^` :P ̇!~Am"N !x?Sz@lQpapo_+{(vn|0'DEeA H $@#n_Nf np75$jA#^ OǿWx @0k{@}3~7 0࿎OIDX;>??# Qaq i?mG Mu;&E\A [ԃ_!?;Rtqg `WH4()j\ *H0J 07P@촡H[|m74( G@-?_>lQE_.J=.P\Qz1 #Q!j@L@@?]_Um==PN/fZkKojn+TrV)Kͳ{~5IO0s͌rveړ%#4;gC>Y!s)ʹH4Ş%=hjDZ"k3L3$NרּUSM(:e1wb5bscE|1Xx n 90cjkX/b9YXŚFi}xp2 ZHTE-͵8o1!G0g<-Nx}:lI Ec&sXsA$qV]66Ϊ3okb.YnCZSh9iMX{#+= O"pRMG4sAIz [&^-pz^&3c\сi'%m=oD+Ek{UZ\]K-b4'0Xz#ᬉS:Qqˋ Png "eS?)<%C2M@GH-]D)מjZF!&gNHݑkN4dRyd2M扅}Yk 1tmb#Mp Gգ9L Ӹ^䉁ØifԇGz%`l恼GL{?u~dٷZ* C}Ce0#O\鶲LGnKRMz~9ei#涡hϟ|sa>9ݡզFǖִ` r6el:&cВeS @%ӱiGHC b/VD~"J]VM$Q& XsWc ?J#OYj1ۯM:'u+Ew"&LBs 0ݰ>$+jDk֡))O*ɮZb19+CoDXF̽GsV߰  }Gjd"L^WW/.Zi!M9΅Md[֮@&sb}ApP9ۊM,IΕSsKJ;w!\#-)%tipFT'݃@f & %^n›W.rv>K]7$e%: :fSnTQ}i֎L˱kz]#7{A" l81`ڗޏ >&~ʄۡei*PZqՠ*Ey F(A>+ufj\i{[ ,ьk;GS'AG)] 'ҶW2Ԫ'(l- {wf4 ǁ$1_N a*`XwMa4!d8dGZ 'mu&G% 9Np6~jR\剏˜Jh^Sp&S*>_#%ӼタJM[@(L3Mhcă;?#&$O3yj!XPoᡘC[Fi7 ~bʩ>ogNwvqi'N/45)PpeXQ~Gbwؔ1g?ZGQ'K~.YNab>#|Xͤ᲎o79WbqנGVv$uW?sqY|uRȑOq!k܈x~?gd!U#y)QzU679/^(K88-sAYav¾^5`QnW-eAh?G%.]S _⁋9sn' ?=s(o@␡GeicK48H!eg3n.is5A2{ֱ]S_6S צ\E̫Xg#|_s-21g Qf^&O>O6B2׵ȺXp<Qj$]ښY$k'?tWtymшP4==v|8Zgq1~y.5m/pUxl: YEd 䪆1kr0F mUϢJٻ>ŕ80AC͝a,*}lU0SX&\Tss#-={,^cR22y;} 7toQ%ـ]ڶ0TŜ Ux1)vCF MǘN2H'ȻdșK2NNSMI-gq "8hwTge OZ 7!yBC&̸,lǗwW"mJ7uY*_2 V#H%#- u~1_rb*s roF@cU\? *07NҶC,f[ŕ !+E]Ŧ@mXFuvOG>b۫\[-a#ݶG.gx;Ǜ7SKU)q|\K:͏/c:Q$HI{w?dzjltoc~=pt>p)UD,~Qg4&H'xPnk1~D!t:j8tśΪJ;tAcP ƴ=}<6O ܌~w%d1w{oƮMf̤FyUX+Zyn|2ηı4δA%ޑ1!Q_DH^K$]ْ]> ZWW͎ ż^ ,!c(<` 5 GnEΌ:S7CS™R%<ܵK.{˲0 zx޻ "i"h{fޣ-hT I>oȝ9jSōdcX~Uk?of-v£1~90?Y.y$Q̟Btz~1ó?Ljڬ;Yݸ2 y@6g`6Bo `geblK շjvL[̤8rܼe OV3꺣bs5Jwdvc2B7*6ψ Hj{);zByt^_^NA9H~CȳQXe.KΕ!ogaAf+^*h(>; X2 i?9RϺc;`v0A|{{P ޣב}@,T_RZ Z[frr*RG {5; &_&;?.`O^j㠻Y3|0V]Md[S>]k$iQ4/.[Ե[rkbWe=%-YfP0`?ꏚ̜ީc~YDH]5 TYȑʪ3Bo#NQyH]^i[[\dٔ>q]P>>UtD0%FM4K' a`t|I3_w^x:|,=s^޵E]ӎɵ V3'hgG6LtvbigoUn *ޤ;ȾFzG=h"Ic2QؖȜ 56N[LŎ:Go karj.t"MޜcqTZ7u|b2KЗ;mC^I|>HUxҌ}Q%󈔗Ӿʨ-zc%\+KKa52&ɷN#̟E<UB}1T*/5 >6#pvw5Lso}Pp;W5T?ox|8 _#`#,C'GlGa]%зa^ͅ:L#&fRcR[ cGL\u+'aNzoEk#z-n;X HDm@Kc3(R"ҍγqKXW$E˯ˈq̂>vqrTX5zSFZ}ՙ endstream endobj 941 0 obj << /Length1 1387 /Length2 5972 /Length3 0 /Length 6922 /Filter /FlateDecode >> stream xڍxT6"H-  3 ) 4ҭtIH{y}k֚y}_w}]{f 2@!1B@Y( b$\\p ꎆPu0Xꡐ{8@TRVTJ2Q5'C!h.U; #Pv $@qb+A b|&+"% rE ^p{B!_#A? pL&( ` 8DcC<;[` 0p" Qn P0#!! yu@CNg>4A _3Jfu$D Eb$SC}s.H ~p1Cz@`&PFRRB}zD~0qv6cgsC`1pAyBwh:"@` G;; ƞ;` Oד ao#Pgj-g9UTP?!1$ *** 3!FP-{Ke.o?J73X+JH Ap PX- jKzPV HG,De5P!v5~ GB Qh+2 AcjuՑ`$$ ww + (Vo2D( 61C:XM&P3+T{[P7L27˅9 kVfZ&\ZNꍒpq?}*~T]%2{PR?#]bF4ęjijck"ɂ~qzG}5xԢ$sXֲLlJv~ʩU9L?Guӳk;~MKέtqbnݼ(*f*\E6 a1gw^-(|^ny+ym+ŹJ7`ٞ۳ب-qʜ_]S3ύ 47lД$3;o.NoJ5cJ6\9herB3&T ࣅkjF)kVou}%Mpp?#d_ss'ްpb5|(5,Ўу<ؓq'yʵQ)v߱cI='u[!àl?GX!!^Ec]uHؽ+ܝ`7ۭzeU<2/eIN@c!bHa'XBQg`ךqS U7Món4-5,"}x!= ?|4|료icY-D0RqDUUԻKCC+U;/KQZ~$ ;8%YdVxR?&I> `(XդHVz$a{(m^+ k0E6ՑU&7&ïid9fKZ_FƊJt}sh1J]d M:$'qNyJf(Nj .3ɥYϳ~>825b;~|dC%H_kD7sIXYd7] .Wύ.po^zD(KeHS-x"2LW_f׌q؈ E (M 94󞷨%cIQǽ5׷;#~3w͌3TД -LOkS/̐:6Ew|RfIB*DlAg']ÏPfwjMȇچ9 ajQ|]507tܿYAUvqIy-M;Q3uoc+` 7{:p\#o]hI9upYgוw+;}7z;  ?}L3wכo<]f|XQu18`uK5_u(@̣b+S>)(*=3o낄ӯvkg!t7 !Q'mGc$"B'J[L W}`)0):qX^@̌2iV.z *0 yU .q0^/XCnIrs//9YL Visz'S%q<`%܍wFz_<=`gګ3W&&p7g `7vb5",ͺetrޒ6ucqK{sj{AdO28X*pIo=v)@\|Gkvūy4_ؼ"mgNۅutqᴹ[E5lUŷHS::.s¨YFF4r g,;4ƥ~L)S%u"wi,pՉ;ՙKzj z7J_ ?C k#]X#bR1WFܡQIs^Jm*{y2fb6#l 7zɻR.P1@}3>h97WLBfw J`>J24)).~-n\9UtwvjQZ< *&(p8s ō%l[T|5S߲ o鵐׆=nyYoiƩم!GHD@yۄUTFXΛzF 03g9ɼJEWOmn(kU>[buM_ik 7d$$yƩQ>MKmȜIgi3"|kHWJ$YάS#:&|A UCSz w'Rb/~+NiZi`|"h>AIՊ t'%HSw乼y`ᗭ7(8T櫬-筄pt90[Iף-i M_Do4?㝙٬U&ɏ[q$Q:&=H#_젊Ȗˬ^i-J<|6oE7w740[ =q3 < JP TP6V|}*Skɬ.\I&2͋Utw\1#졔x4ۿ:3QGͲYܧ;dUzK %ٗ䗽,^#w7 f\Ʌcǽ]=PN&8ꑖ.nt`T w (HEq#dN, Ɛ'׵56e0) &f#>rg1UWOR .\ Jq,xB_gSu5+~5 8/g)#H3n33}IXBdԥj3 ~6G9"7PB<[FZr9`P1̑PDq6Y9zɑ1Y%&'vwp?DN(ޠ4Yk' Pd+gv<;B$9_/هBrgLT_c촆gSpyjunGpZ>g KWYhvMJ/C0ESEVǻ5?G\,d`iʱqLdCϖ|粈n⺍ikI<8+jZY ҏ\DZIp+GOUhBܻ:Tk{N7K q\w2OO7r&Oc|/ZL6@bp-̫n,Zî(=6a>` LW΍C <#墉ޛR ^nˮ= q[R_R$jΕ*Wu+-QAFUuO ӽ(b hZ"&{0 gOK|x áԌR9aO!{JbHqǎ)#칃YD'IUIWj:lDo"aYJ^6".G_l)=+dyNT4]$%nڴm8Y5,_Ѥ)N|hł˔Sg{p%y è5oU>J?͖K[KvxGArHT Xkw#=cП]aA; Cws۩ʔ|SB~(K(nߊ2%>RqK\i2j)Cd95פkL=P!x3^GڨD~L<5=19b q3X{]qSރ$]$q!3W.DL[\|i!a :Ϲ KɈCKF>m~L9*\lJ^EG+|oٜx€hdN#gWw |)VܗKfgGi?JQX̨;x{#,^҈IV|LfB o2m$nP7e`ı`p̽Qӳ$EeWҵI2f9^`{B *diy[mBUsqbmyR4)~AW# 5IDcMF5Q٤|ٺdܢH%>iT`&;S-V8"AM;URJqb𸄒`~a[($t_Y\x> stream xڍT6LtH(Ctt4R 0 0CtJt4Hwwҝ{_֬}@.e 5C!pvn.7A KŠr?,dA@L4TB.n^K_Pg,l P(C!  lm#ق-,,;@ Bj@ 1  (tq@Yn` @ 9,[:icІZ݀ l]\ gcv*@Xo6?wCrZX@0`U9p6bh>]`{_Rcp;a09yf9 ð~' vY<޻?õ@ ^BV`6,]9u!`'?6"ȬAp?[pNK[؃#`lz]A O#,nn%0Y!X(Y vz7'GYB!1kĜJro4`ps>G?| VP>ӿJv, c>2`э,?t忣_ɻg:=xd q Ԡ_S}߫8V |)#ٹ8a`wna7k7{00^\\{\2 WHͿTr eX~D/ǭEf' t<:c [7pZ 8hy@~Z!1#m9!D?c&? pp>GGy=u.Ώ_8^7d5? j"Eƾ98CCuK3@ oNTԏȫU=‡:פ\v&+I"MVlcb{0U*fKk҃z>SI26e6L?9pF"џ 5K6IWHMN(Î%G~=߹J޳P̆^K}r+iCBl 0ɰ!siS[fsؐhرFub*rw"UL ws&/Ze F'y3w(cbwaʏ PV5с%M& jhxr[`F:G٤i"Gڛ.+ts:h"nRy )Hn88c9*{;-33'=] a]3X@WUZG G‚[>5I/rƄ1ɳ4p%@l8jaj0!%RSۊit+b"K|FL,؂%?'xU tHD(kVwUWh*ae'SgkH!,oc |(vE,1!tͩlBt=YfgݰX!9d_:_8u{E?7fMѪPP.\g'JIF^ljf.zL,ڥGOLHeL?3ڕ;XԞ< (EG7Zu?/Zbv^™m~?Yͳd4iUҲ%838:1cF%W/jkc[2V/-)`:0[-\e v?Zp,LUCfh{С􃖕כ#^b?lNM 0W S < e^y)=vԫ'H%']ox{_݄3AF]HW'Y(aZi'^P!"ՌkœjV^[_ˏx: ROC4{p Iv7v9M'-q0 r=޻mWi-Bq3Y} 0wVhIhWL;w ZmWk=V䣟%Ì?ghmʝjVTw! 7{(ez.VmP񦕑##9o5OSĥW[)+Df׵|EH IV=6B'7x*߬ mVY6t8A$dpb6v=^߆aRN pB#>+Ȣf`b0_- @v8 Iqd~2 R7 s/Y?ɵ8HpZf%H޴eZ"rI>9cAҙcY͋"@'>msS/v<3 Qp|VE:{s.w(&Փ̢x*~] u㟽u.-`LzӒ2.fn5DHpeҏC%;6a'@nUj!00$biLz2 N\BM((EE8*!Oi=ɟ.y_K:`@?pq}I,g#g *iA*dGqoޛ r)Y)G%bbިKvU$'a]*7$,#d>([O " ]HϦJOP-w- ֱiw`չETY!yf3\[ul60jĐ'(Jt xx'$3e6߷ih6 7rJ֋<&H]uG _|-3`+PТ3o3{ +IJ ӷ++̀ v3TZ,6*,3"-j  }x`ea^jX8&bnB<>9K5#$u:>'% !hҺ?US[c8|6U%p~qƈ:'6OWݞcQ?irz3kT:NZ܅+η_$eBMkLC"U^ӭxU7+V4+bޑEX"Gq̭o":} `mJ49V05ExY۞KsFW4.L`;hRsكxPٯ ;}4LWHwd=Į2R6=xYB{RBB]<\/}Y}8R+H 1zv01{Wo9HBޕ}Fͦ ^U⌌TJ$g_pRQz9}>8Mg gi 1+Uo/U(~dy]qΒk,JS+1K3vԍZx_ھ)".s᜙g|=՟&,V}Q4Eسi`tt4}lk!{xܸR46'xEp5J8`пqaލT~jƩr:KX3!b[52yyRIhܤR3騽*k"/i(>) l p֬m=_yE851;BUyo,=4tB )4We3HDgK"YiqFRѨ/%MD2{>ր{f*۝YkjuvⱊJiyͮ!g.!(Ux)!m Va B.2Շ oB&/O X_<\Q1iEn. D |~ң}rV.4 xe[c}ɴl6::})ix>ELB~}&eNK>w}*w@4x, p\D2ËiTy'Űς]\WϤN#=Q{ZBWQJ+ꎅp_y`M6Tr?J2)'yFw3N%ͥgZL}fHKr]{T{F-P:ͱPP'W3!)'}BLdEWOL$P ¬ŗ.=Kgꘆ] iU{f5Ԣ,;JB<:fHa"RjvU^y讱0]n̵s$n= !Dl 'Vw&p=ucQ9hYO?8hFSnϼvqfK>E$^@hqg+iUOFߊܭgAPzQ~g86 Dd{ld0՟A#Mݧ~"Aiy/8ȵK&8=KD +82mYr7)n.P9V=rEyVsԤ,rHHs{Ч:I(lך[J 7;AUr;-M昤_Ե{D|-.K,,ɿ$Xs|l%Lfm8{XH\ 1P-~|KT dd@:*==[!Bš0,,BI捥"X^4({"$; ڰYҔh\o:lNa0%syo$Zsgѧ{zoS[QWswBfV2ʲ 0|aK2~^.F$=OU@T]ou|f4B"deӏOXTd;&(Gpupbdt1XxYwuy-DB&JJneq%[29^vj-|xp]tMYvu1+~=qPL"mM;|:%յPA8F8|E+Yo3H`XzPm0rCB!)xC5ʏr ӧ23ME)6\qM[*ˌ3SZ[Q{=R%ö.jeҼ6<2I^:9'ZP8k^<^Cb ۈ#^mZd(7rVF,^f5:V$~oQуG$Uҭ/o?%<_| HFyމ'(q吳#U K|ڿGr# 4tRbwT&,oJ$kؑvS+yPv/;n~AԭAggä݅Փ_hj?'D\d=Y\IeʱP!W'k!L˞w#dsg%GEPۈrZ#4}٣O F^5؈Ay7'SȘh A/Zt*Ǵ1O`Uz+`rB1HZ6ts=pB0qGJSf[hϴ*Q 5UL?{)j6Sq)\K":jPaG <]PEP ] y T}Y:#3VOnpM7K<"c#*]j^tS%#NRcis#ֻ:xb ?X@oc2M{(x׶ȃ7z0I!k~CAT"h' 5|v!B6C%;+_> 2CabB/)9^033?It噶1*M,{ޔwP_/^+E)TCTd}Q0~CSmwi$\z4ʉ&6MܮL{pnJi9v\TS=pI7Bjn9EY7U Z (^k4bR:7U+nȫiW3kgZrbyhc\6Fo1'Z+N;.&g{ q@nCX=f޷SfϨv Ff86Ƨma'$K'w6~bz*)6UkڊQo>`ǬBNcЇ礤Xc^~Zy4[At a*Ru ' >Ђ'X^v"9.[ RO?^\$;LT$U1AvT/B)gˌׄsF[('ɑGY )%0~%:hCc;_x5]@egAhH%i<\o_#f"N'#l&%C 8O#ЧZ+CϼDMlc;~%H9gx)XaH짡48*͔4?;ᠹ_`^Hh~(!důM`[®~p-j n9VrO=؃I&J"BZ }_b:޸SLm`+cJZN;Lvͳ+- )Tm )k,_~nXEEۅtK̨>QHO&[1dIhNoTWkKwa ݸ#ΑL@亮%!*,VBi TѰbs}SE60:k:a;5R9^ zN1b}b7 dSOR6= zrd'tLXQBgc L Vp}ȰEDg&~ܑ!kd`yu[W.2ve}yjYZiڎv;ŏ(5Ģ&y5bx"B}d%{&ٞvU]S+T:Է"mJ+$t*%xE6?H1 "6BW&Ir)^< - =Ə!jڬN#Z~(y͍@z&?+wLgHt95=J{%ț̔Z/@%n9tz$!R*~ZV{Z,2ODr&c2.orPlsvC9vGÅ!o0H{>X$ n{4X:SuoƜn }Q|qqLA;odB9 dIj\²B,+oM*5ɔLaoT5A=K洀~;aDv?3aa |G^z?!"Ԃh9\,MS :B_|Z^2YɨBY9SK. fu /om晢zJ{oCVFlQF$-%U wE2{6zdFr \8?Vy=xGU,YP|Sco%tAr-zD!4#Vjt.铉j(?O)TD| #T$ xVq4sck"B9aQ?W *+v].EERس)s]I{' -^O0zPS#[[̓'4ەLG"q~!g* CAC;4l3wq3eWA `Čurn`Iω- ^e^ɉ.`dȢF8`S-*ZFُ0' )awN x!|^qiS.QR^1;}uVD[%JOS1T4 =>amI!heQF$>]O[ϥ󝗳yX=T tLS>i[xIhq` F } uDNgVb7>u}!xLO{m!J~M#gKCMF("t Ǝg|>z/“~?g%_VM Fi0F?8!׵ŏ³i[ c4|ܼet@&F}kb:E[Řh'' 1 0΁v :3^\7U4sSlKF5o.4Ne[Ny #J`H֜s-%h-(Gzh}w+d/C.NYR@ؾk׌`Yq%ُKZ%,V{R:ٽm RAq7_l*Ѩ=/AF~NKVB6eRRjT}3B9 Q=r6 9|F ߵ?Ǡi& "Szl+Kgu=vSwCD TOw)1,, œoi}`4+SnhvuƩ[Soϩ59W*Հ϶Y,>򩢥2uw~Bc3uV '"xY3<:fy>cn"Иc)xzj=487g;{,"}!brNO?Az#7..1f1|lFrj>` D۶3'F/e4_Y:;+zPhUeٽ=j PԞ 3O2$+@W٣M+UɎ.Re|9sގ~i CRZkߢH8I͐c,%U{y?55WAB:ڍ&׸lI"F՜]XY*9){UAPgYv^q^رsƎSb'<%#$aנ3kVL>q.,=_9 ʄ5,˩-s_{n`WV~\-CՁ>SuB&}\pEԂZH3leJ8>j ZK^k2#!{;O@[BD<ϐXŽP>eyKiC"`Tj@|C5٦׃~.7-GlWN_¢\a47ݟ5F#ӛMd:z륓H 7U)JJՖݵxc-H;y9lrℰvwKE;;sL *k^_A24n)lg~4SG P$ejF> JT ?Jr^c'-]O[!5Z.'ǩ3טi(%w,sqZG endstream endobj 945 0 obj << /Length1 2891 /Length2 20642 /Length3 0 /Length 22265 /Filter /FlateDecode >> stream xڌPH" ; !8A{pww'8!h~&mUU0*1P΅ `ffcdffPtGtrCB h66 '/ /33Nq#7KS#@ G!fdinj _[@h hbdP7x5/;3 =t:MR(Ifa7C l,Mv W;S*#Pr-,=XY5/Cv):yZڙ,m%IyFz/A#g{1HЍ"F řWL̀,ag*fok sqTwOkmgn?dfigj+ SWv@d@$4s t=L,~9PtdE`04y;.N@_?Ep,,SK1uh7 ??&_-fҒS'ov+ e#CSw*/`&ז=hnclyR7㿬H/>?|#[K$@s{&_Q ߋ4t\#.ؙ[HKgIK_7=*;[:Y ,Z.k ɿX@ף%c99y1&FS_C `bw@~$70F\&߈$$E\&߈$#6o.F Ȼo/yW@F *Ȼo`R@@FX4~#P,((g/b: ( #gKKK'W,0\,mLYAjl d4Lm-Tc'# 2?w_,.a@2qB4.د`])6PALmlt&2 hq :X6FT!V@fnŶw-H׽Sjh`CDf$8Au.惪GF +6';W[_n"&1L*Ay9fL: vi7;?6t0&,C/`G'<!W_俶]ƿ+&':6d^;3KGA9bE crp1I; `&N6|? (@?d5w K^@#Mb_=zMVMBB:~ֈ3O Qk0x8}q}@HSCH/*iktX[һG'viSBX5gG@kV.Y\GWn$|Rek㡋9fbGSg/B0Т]x C˙z%M=a+f_ڨPcu%!E=J^.)XL5>@3EWG^ iGjܷ)P6k_Ёi ]R*__`8 .܉T-Z`gͭ鷺)Q]X]f 0G_ (nRZ>39/HpӑQ 2(Fnkuayڍ`u{htFpW%߯1:^N{rw'hI*0Fk&2IYIĕS8R&WLXvʹJx] |B!Ǡ,̜TH4ͼvvKsA-F4v`QA^@8D$en |/P)8f:YXO#WՒB*rzsA-ݯqe:}I+z5d~is=˞uaC: s`hm |<}};fn 'crWǤ7bO~Ǎ)4zض,`hUb #2:W;y3wp g0UwZLM3,Vy9R#7ieCRc=;jcț9Vo{9avCjB[ Vh!0Ⱥ£2R$#_F|(ef'>ߺğ04o%\ˉ;>s ;ŋtEJs}ag6N_`p9Ctҗi?Cezvd4estCMzdq !y`a$9@‡@ҠRR3KOͰ \~̛ TdfqL\w7[qPZ bτ1M;_W"+yHEdj >*PU_iEcȦGWSsRwY&V(F㙇FА)͉pbo1=d؋T.SZ^,-ˀ7!ِ%(+ZQg ?VQA٦?Q!!R fIl++*yGI sl 1\,ciPKb1:ZϹz 2*+q_Qz0QlXYyS C|؝d7aù?pTm6R8hWÑDr0Ͻ= t4~ᶅ>T/ZLtkS>ꗉīػ\C{i?6T%D[HoʵXZ~G(a:SzxGaHyFB#7(vf9!Ǔ!=+4aAOt׆xxÑ>E#@){`VQN_-QPB2DM)$#7?/)h;mȣ]@ cp,ur`g)߽E |qQ|ЮJgWWYr5EI\[s RfjY_`dUG)$nJB+tx }`,bH:ir SUax@_iD[5az> 4 cK8-3dy@[m@a"{Am.%&6 'fVen譏i_:b׿a$ ', Jɾz15gISujD/+Lpl jǂsmyW;lݩPY< 6k: x;a~(YqM`Y6u` *;FMSeCT!ԭy:,a&e,!ݞPTZ ا?`Ia؈<.7&3g&}M`Tav-,E/%+iPt<\QR3/[[%ݑ^HJ>&/^"F)B񇂤_G?|?ZĎ8V+2myYDZMA~äErOdwbe{$NP$'^"(ۇkRS67I# @oU{kNBa䲐nc`mc Q}4Txe'>F,hR >)pz F Zz4 n:Q:u "ɜ@ƭ""?`HS[y;ӏ6#O4iI*5kL+sOI0Լp=˳!R) n+'Qh{z^T]üSF" e8tpE[DjWI%Z;Xv-SO ?`>*?%cz^S!Xa5tx 'n,8ne {իd(Kx5u+Yi]Q_Sɪ+ ^]oaڹTaA=5gZu6t쥖X&wY7K3)< Bð:@q$f&s9N _mb&phUM _Ꝛ @s,H;o=ޮc0]E[lO~΋Z뵍mٺfNr>*J07j.eE7B5೫bM7\ !!ڇʦjPvahhS߇LKÎMr*}> qԈ 5J­^MFDK?Eykţ(6m#baA7)<ے ES߯z8C(Ft6jD5nNJkX0fP)9Ae[Ly53޳ ]c , sՒ IXpE#fjK-O(m2<(<| 3s<}BȀ%%Fd{=ग़܄/ewcK*ć6߰ѭFJ1 ܿ C0ot @2mw5͇U|߾+4hUvN7{1WG)Omhp)Rz:YgOSڵ=oؕK&u~oC_1~<.v϶փ$ҟ-Bf\D[c_ٞv>}nr<~Hv&.B&>bOK܃QtA%Ljir!JB4}d8c 5!tM#o}Yq߉иɞ@knbZFAe:r$>$>vs~I+לW<|dB0%ՐPBym-N~+Eu\W( {T$quJ+׎< Xu[)p78U fm2Ž+O;ߓ5Mr~Ct$HRn1< D,Et+2MΨ#2j nWh+(g9alY1yZϟvv޲5x?v2M]_.9BQCpÏ)SW[Y5j2>+,=(mTk ?ΖXb\_gs[9z {V9Hu2Ez PTe.UDN=6cl +-Xrt2(!EPS9>8#Ӳק@6`bE;3.U@Q~M > b'n]j)N½.܏ ]P?{E 0M!0*=/P~RAhoD[n]CXL-Y5Ybry;[nYVm̈́鏁[hR!c}9(FbcGYkHFOWneH&KRŠJ[M GK 'Bx8 /4 SS0*;W)ͳ䉞U4j+ {3@ 8"Wďc9$!j޳5Y/kkUl0n J>)/=u~&dAc3_F^[1Er+?g0cB$Rž!JA58Ȍt0kaROG`W+9B?ou˾ɩIe۟0DQSX*0~l/Rrnۺrv@4.XZH#'c#n6Jr>܋n:P3竦*ܷ/Ex›5!2UW'ὑi0jxBq 2du6v\#%=j*ioC' xqB R oC?hS&5פ^A#nX*a`8fjyµ6G0sOԟXUz]5ʱI[?#|? ZB7:=S 7F u`,s^4Xc&Uf11u^'Oc/ g)ݾ5 lbnW{<7dr =:9&OTLmˡ0" 'OFq[@'8%Nj%2tpW,rs}Q2]hW(`HWo%L"*.׋PP8OmJ1(;<͡A(;4Ø|F8l7Bt\EŤce#̊Z\:S9)A| N5^u%TZvAhFJ >>Zl坫w?D7>c?!gBBӼ}FjN\Z'y`[$}ouQh[Z(@Zy!?qo3]h- vIm#OF8+C(F2x[fD?s] V0ǢzBȈ{Z"&(#1i@P<1?4c{J%݌I9,GmC`lzTu]Q[3)#HQR~)3[9[6JO܁s)5rLw! /G_zH(dMqM'%v1~U{G!O;CoF1ISg EG03蔚!C_F뜞ZC7)7 6 f-V-LRSw5ntw8{4/h=YL8B4uS )#KWrcNT1ru0%4n 6Aqq nFd͉ӎԉDT|NS͹aыC<ݖ <+Gy߿w݋SUQ 087okcX)µЏ~h^RPzyzDa+rDRWP+vҷ늘ɸ4}Ga1κ,9s0n/X\+jbj&Fe1ӰNAƃksu8hѨr0?OŰy%k YH}72+T*&:gH<`\b3Jʹa&#$,RG*ZWyAˈ7Vγwb۵X fח˲iX"aZܸd=FŤ5tdp4rT--oiKG+sJ2Q.McUeߝއU1:݌"nr `Hu ]~82?+ ]ԧEc6T>0HJ Zj#R/3[Ou#RB~LQdr}Mh9iՍ#سG -Ԛy1(@/kwz.I19k6^3NWOH&%=ħIȯf^CHTToa9ohg+j0dIWˬyu O#ejH^?$r'4~P( /q\% zYn-Lrb?fΙ >h5|XD}Ȩg2:yx6Zc2=$=T2]3[|[8S V͹u\H2~ vF&퍅^GŃFZ3//CVq[*oMwVC!KK;Y=ϸʋ}  E } UI]p7DfBc/Zݜmge00Ctsƍ=5H`uHe9DNSiUyw'`. }Y r Ut0jǴHG|G1=^@70߅kb!Aȴihσ@}if$jG`+:gSeyB"r?PUM97R {H;ja 5 6fJVvu!>R4}_iSWgA˅n"/>pĥ@Ζ]>GZ5Z1[/52}oiVv@G($,K!D %ϴ}(ϫhK/@ir/8؆ qXў[d/u`B~R8?(m>{[[ދZ_)SJC}e"A9;7\ "}] $ÒFFӾfN'HKyhe"ߝLSV"j+z4$jQ=y둗Kɭ;QU4[_bqijq]' 3cOBuVƕk8\R>>I(⇂z{~ zP<~ T1hDCr(~zT#dB~b9,CՐ@yq޽ml"&ZBbV1 Tsk۩f՛lݫ3׫ &ه(Girvehcת{.#iҌ衇6N Ѫ{)H5ԜBLOw>N|= 𤋮I2lvża#Dw f(rAz|qﲷ\!g=#S0^c,욕7KxH<~`"UMIyJDn-?C[=|xbHaL Ee\>y/!}4W;>[BAu*!"5é\Atm n+:Is,hVy+}J&#}t=ֵ@DRIEn/3o bk JfP7 &Rzw>O\f+ 8}s6WF)'ӓ̳ZVQ$"Xh^ qKVz7ӌsuϞk?KJI-3:`_i+[LB:ҝ 0Bd),pZt ǶuN&Iwܛ\ֳ'1(;EX=ھ-;eyZGD k9.'w1AymC;c"GD{ѣ>8Qȝhlj`"wL@Fh {JdըU]n{Ņ.&tGP0%=ԙOi^ 䅅>/9:Vi.+xGפ֞$2Fl)y1+~9/$}FP0`:Z4~ƋE4'ByBQiiI%*9w%j >†_ߘkzaÕ PKal &1cmTr;qWh EIz g7g=N>Qj94g⧒ckO?j6ȄmQ$2OyMF.T L'2BJ`9=lM-b J ^q Y[ 1 dްIxԇC̖v3,5sXjsjC9\<ȣRx2PH܌T΋mZ>`|ߧ=YrR:%TzloggVџ*2mXE>z8.wX[۲xΙvp&b22~GH@8:[AEqhn=J K\ -brKB6f#:?wͼqJ> fx0Ȧ۵5K<>!ml+e$̏N blɻ뼰[kYu6dEA n ajZwMsY2CE/GFDžTMRE _e\Ňmz} ~Bǫ22MZاƄǶk~BdH̸ ! 1 B7 HPtmrq0"|-"}P Pyh.55Log%c JwLO8v*Qڦ@n:&H܁ILC+-Ieo#͛2k`Fg/YG7UytpJ)f {fENfa#2s⨆EEcu&C).ܷK'ż9!\W#ooeQUdEXo"hOvhGS OPprx(&݀-?\ܳk@A@wk4Ո ͼTW54bxg`f7[KUGZ!3/p1\?RӐ{q4 5.V8>)dҍ^'oﭨaFRRPZeIՖdw6JhT#}/ u! weotH9gmLu4L1tn_04|;#GWek7"!Kװ|HF~,B_$&q[|iZUQ}r2utqd5!]SIŘDw&]ϫsE17 WX]Uz@wTeU}LB5dACYk=sL^:_;d[_Я)<:>)K$ع+Ayl֮ĈjJn\+ZV MοMQzF\{Ȳ6߮e=RO8Il';KB/a{`؋H Lضyq!{bQdba i˞ \\QۊƿojDY@v~_tFr^@7\?žr-u7rv4R R07@,\Ӟ@?3^ Qc|s11 ZbXFHEUP}.}(l9}&4z&WQ ~tU\}ٖy |tYuٖ|Ƌ.SE DM:9_o*RE9_侏_(J,,"R:iX/)Udtkܘ"FѩGP W}4I Yr:T/w,7ך(q"${txM&)6܀s |9;|JR^I˪vd斖*6s;`-ͱs"'5c_MGBܴy6)Hq$]7Q6eh+v8vcT;<1ݷYqY;oT_sk$w'p]ߋNYH^΍ʅsW,ŅS^4Jf%f}|z5wzRh )=5W|y=mu 3gKR!M~C6sr*>R~-P緛yȥ x17M5 ۬8p.U:MյI{[⾷ʭXfBBh΁hþeIAl,c b*B%lAV13/|m>hnDKz{b A` wvcV3U8DsTo,+dE%i>&M53 el eV{w!&o\T3k"swY~4AtS?"]j&`ʂ18Q񚼵:PgL=4=H7c(=_dHȬ[~ D%B+R+ NTٝ7;ʊVܑH-fBym{ЛHZ݂eU4yrg)O9ޮ뗧TЉ`^; $od-W)>R>{pQ7+*iG>_e82JNk5mO_b5Qtf1O ."c}Xrmii7؍d6Ds8VxNpZɄǪP.lN14t}Wnb02֓c&26мxW7%I}]LxS᠒ `gq`WW`BLUemK*nm!alb@fGe=O:Z 8x_qP1h؍QHao{z <?>yKȿv,Iо}Ey|r Uo-"pgrDsrԤ[US?Q* DϨSNJ9]x}mkapH?d& Ί|GMm!Q%{-h{i`2%;dvPo|" xW}iLpfbAJ}|,߃m4;_vp KS&ÇO9rjŻw@\+:($X&z/YyQJ&%>`xˢ}^.$q@%ܯ͆7*j(.AE~ [`#Wmw4gf&p{{aF-jm胋8!p7];z{P`%od%Y99Yɺ jvclB?"o}+9^ʃ @Ǖzkj&0mF8TH3@,eR"߷24 J] 9yXê- |MN,UfSKNo?vC|B߁v d%.e~0Axu`sfʈ5gHq~rUa.&ExڃA)4Z<_V&(xLx_Zoҋ2$W=jC.ɩJޡ_/sxmムB({q90W22 c2<㵄hD3C1ϓw>VJ4ަBSR @,d1 r+<2)^x0\p:~TbLϻC 1qn 3MEHC7P;qbsp@T۱Wa'?M># S(Dyt,-cSj&鄛Z3Cر=EU+(:$ )gg.;bK>9.#'̍˦eF *3l>A\+r4=% i073ERj\U@Xn!ךejAƶ>.љAh .,ϽvϛŦYeUYLJ?*#glU %fOj|@seYo]BkLP'lnhۏ/A'*d9#$RC`o! 3?ejr*5{`Wքf#RQ>ǨYA 6*7wUU̽#`L 9@n߄bR]]REF RM} ?K_u2Q "J'&2 '"d_ҩZ>[V4Q1%FҿQ>GUPWDUoτkoRϊLUg~=t]a4 f!iMu,Ż3CQě.vmVRtoG{T:- M Kw | F;#{_i|W]Bnp :M mCm"6Ge} >u/,CԖB^JrDN?(*]79IB~|#N!LS?Q_6B7Vʐƨ*^g#D Wri>R]X_{`0~k[U0Pk|\ :- 3 @L' Bh阠ω&o=~wu2y ]CAH?iX-o℔C&qS4Tln]lb{[wf(Dv`w\ﱉ:Օ)vJjQhN݄ШbLJJ(萟%1:jK 5I_\ 5yeaP9O7e)g8]0c|tQc}{R A&@ vNӀ4/͂;GgM%vlh#iTAۯ SVz9A6gFͮhVS98Z[a-GqRѢeFtӛTpugHPG>wy%4ml {oTpנPct4 ZzqlVqEx^ XCzXr|QF'Lj +>-dC^Ro.Qwo*rP<5o%AkuPмURntXţo~Q$dx $@^*[15Ӳ؊hV$̨AϜIROz!<\+I nJB#KRtvī==*zʮBכƳl/nr9A14Df<ˈ`g-Ӣv?B )st E'*G&p 5c/<8 ڎV"~ٗFbFf$%mX\#Ӽ@+o6"=zrCri Ċ< ae?F }?ʭ􅥫X 9D kuɧx׷?(-J7yF`_ M7Y:--յ 3.tX5yά_. J0Qф:xC#RJF۫sKH9Qp:]lIG9O_V-R(}Jټ[-:5$_sFM!Ly#v'eSGRdL)]5uWLZ].N)v-?vs l6yO 2TVOΰņw.`7n@0gI -eKHptXciv5ՙ5M˜H Y*Aiq)[ό۲Z- t]C@p^@SmˆӅ؎)K_ŸW9d2.kq,uy>L ׵=!j~jqYl2ALub[;2 bJM8؎9%?ovTpNֳN\`6[xͼlH˂$;f7[%=uUSEK} hk 7y8枵ݥGT$p;tacQY]8Eя`"g:1'SHy{cR-ES"܁ۇٻ6`C|`K ?WHIL  aOR/%PLOySl0˧W -tI[B3q1f](ГswEu,[/Ma Jv}tG'IY{A,䔡Tq'8#.0 6jWK[5~\"` ]|s y3CIcJM@B%K,<0)H ޶G}~ ׬؅Zn+hA1G7{]?y` ԫ~93 -{ʌ,FmEySL+ɸv=d}7ň/Q\JwIdq"Qra(UlFZ\<&v, -$a˓Ý{fрJo0n7;6|/ZYmp.ԿҗAv z ovB$BKO<Hp_,OI*YAyy< FbmŘ>svޠa .:2id}7?g4"'حyۇM dr {:&JjwT$"B|FNGtȪ$Й6U )z_ҊFBj_ܸ |$oH0#kBIw]zAK)ST{BAR< qkkPW%%՘ VZ>"jn7K,_~4uîl1|;dC籚;U$ @r e.M&j¢vZy$EB݋DY X'qpC 8?Q.>sM@l8hW2]N_Oy?]do_j&Q^8`Q~>>,;h}-D1cD}߫'5Td; k@ݻ&ʘTuBK=۝\s`LUDQ1F/]*Kn"}?5K4BqMBY{yPoQ(Uq7CAxA;<É֊ dE] F-NeTV|@k0 "M;hlv! >>s~3НuqK[> stream xڌTZ tK )ҝCݝtwtwtt %w<ֺw_2 (ugf`ȩpXX((T,j@G -"@C'0'j̬ffN&&  x.&94@!sw03w*cj377'_!-@hhlh P[cɎՕƑ`jdt:MΌbn7 2ur5t1lktd v@ۿeS3e/eCccPeprsښ4v ] - EnR'=Gc ;'GG _)22h+>Q 1wj0513PJ03:ؙX@{؜yw;_ =@vSp@o S   `ba0Y"cp,Lc0.xL@/2{&, rxsYXYl,n.(ZoM)[SXEx]i??A -yxf#d yR7߿$lm1_?dž6G 7*nlrۙms@p,n[} 0~b{u1u`lMcp^v&߶&C/9l:Y; <!g_ؿ~ 'psC':VF 6G;XhcAc8Cg? {d]PE Clw (vh r ֻh`n@W? c[:zcgpz῾Xn@c1oemP]+,Şz 5C= l"猀 [đ^1'ϓzxGO' Nҫ{={[j쒦ȱwBQüsp([YS!X6C_`š0TrOݮs '+{3&`ϰq!OoZۻ#')$-ҏ !0=k32m6p4ѭdVMtNU*e̲{ {F.绰VgbA|5Z/Gm˾qE;w}-fɼw>k^z'C?)o2,)c ؛.ڞzeh} ]Q32a^q7. nk~8323Gוkߑk7T2-S栻xjǍf~LYB3k%NSFE}g?vaN8*Cj%'ƾBe( ܙo]BJfZzR5d4?f3c4oKE܉E>~FCjsP2G+tU=o.FK["GΧBq6X(|vQsö[C¹ 025hȝd7=&û=))Oc Sq毃2O+>YGOͳ ="M=HȞ]ֵ7 ITF]+!BAa7.[v hS?w(&uj8'ݴ,Á ݜqn, ߬!D gDZ -oLTӼYZ8 }F 0Z>@m&'"_ݮ(vz!v1,sgTGAgYpF\MQ4ٍ!Pb]L2%Bs O)FXI Y| 8#U K'ӊWnCGʯaWN:K0=gYVMKDHmŴ]I%b)xu93mOˣ8_gNs- g"-Ttv}[t1Bhw =tI3|HGTti@I7 Z8Ò?j5b ~k%ml3n8)77٭֒ԗ\1 Uy6tuD)cȊiPK#(gn)Co:þVu8mx,pێ  whw٢ GPr(K$}0EIslOQܟv8aև@΃s yw'z ӸY3pşe! 2םu!xn5=amQ "tڑFKHCgifẄR&0faǨObĆ0?$A\̦GKya:jWlS7"w <-~ Ñe._fڭԤr)} Hʐ8 B['򓀂o\e/2˷)DE%Z#Cz! `͋g6HQs25 `nWZ1J$ѠشǦ-s?^ yS݈#7vhg |>q `a6̐:{غ&CVWP KxځNJsi7mkJ㔅 D~~c&Jo#}a'>!x})wq;|5u@"dL85N/1ehW[Jd~; h!Kѽʫ5fûlE/'{^X#t}Z0ל: sC0ͥ%!}KZwgrζ`OdLI0ÔS2t_O=y$knZq_%Z"_i-{Rqss e \nskWcNÇ]9,~Mo6E !\H^)gA|G8f2S\wNBsgہEA K9Iɫl/[S~ntAt?V%m:4DI΢C>YS"cl.t0hȩ1R}ULa\tI\8*;?@+a]3\zMZ_?S쌘>Rڐ輋h60ai弇qԲі bbU`1.+Xg//=-Y9Ej | ۸kRVīf,]!e@nd0v/`Oq\Λ,Bl)4VBeS 7]2|/oU||Kgȏ+Bm<^w嚍!#Oo3糬iߣ|QlyOJ]eO<; hsG]=+Q L3s`LLIZHՁm xd'Li9vVͥKuxW>]GS8e +#(rWZtw2%#LmGV"?ϖe$~ch1Q94pF{/ա65R.y"g'EyEL+~nkm*קJ1[ ouj=zԇ,!.{Gs1[:&ƺ!keqG>rIME1sz1i 1.8G䷚|PO] YA&ϹX:Lk=5o߿{2j0#)7?Sr:_CK\ = Nwڇb ~[L3{4R`wU+_G _(s=@G%ӍNb#L㼭~0!5܏e_ %g {Ni郍XJ8')O9s=*~gbiUDD}$B)ztN) c+C؂D谤Tyuк-5M0Jf#!H(cK ce' H\Z {K]ڴnH`ǿ=lh FwhD9!O?Fko{QOz(>0}*,T#rgO'w!,&t Saߜ>mԍHo_ ,ˆ(x&n( tp_\@O?/`ư=)e }uw#7"<ߤ%rg"ĕtTc\9(U˱ J9W|{n~EJkc3i%Fn Y=6! ,lUpFoFZuC90nu{VMoH㧅D^knch^=bd'v*ݰ8$F{!/DI1+Ǝ (MM[- U(y!߂wMv'/ʑbY>;+Ksw!ܮfƉ3In. RžVg0;.]\j(՛{6iBGt %6u5P~ꗣəv;xrݦk5=z$k<>N"]%F1O6dгBܤWWJsSu5VvPe.-c l;!`DsQLὬԌ$O$u g\[uomyЀ՟˿.ܳ@(sҟKt卢4'x%^[m9%Ng%drYo 4,쵌j) u&"/w8 MG$fb^6Y1X9% y휏FC5{F{/@,2BVfxx7XgХA#w۾;S;D);5~~+,ʛl;jSwVӇ|8tc79p?U I]{mNl)E"'.-yXT )MB씌aCp*9AU[qphFiXK)zIm-&;t\3ĐO ܱ*0f+Cܯ2XY_@AD82:X+k3)+>XઋT|K|fD]1o!6AC)03Tշ? }{%w.)FpPb zBJbFvZY\'ah3{ݓy- "rtJ)hH(нگVF}2oNvـk]-|ÀG!?6`uXNኪ4Y霻ۻօ/Ab55'z-(D8=7PSfksm7r(l/n!?kr 6U8L:_['/ 'E.lzUNf_:}|[2쐯x3tJN=y,t3ItYa*hth|vK4kP>5q C84"L1(S5МV˒)+mEϼ(V d<_+KʤQt_yra7o-!'M:#Ȥ -CBQ *Zd#YEB{5߹o ܡat_tk|!UνO?Xp* -TX# kbk u~J 7GlK2R|KB5#1Z)SEC2R$uvrZNTgA^GwiW/Epu{فSOX 6NVi3:yT̽kxk]bdȵ( O7f mv|x1}:Xm5mgsdp]$]0~f>IF #$) I$ ʞN#Eh%Ik)m4(.sΎ<r!+]0N ̢1pa$a_B"GQYd]|󗘎3د&N_QH$Z|77>")85)#KۤᷢLHCkAM!xϘo']£?TOV7L]q瓶L4zu'&o ͛y34X ʩ\ZxldJ>,(Qdgᕷ~]:eL\CTT׫OJm"xX'ZܻܵTfۇqjkk]Fr[Cb4*}<Ƴ/CI}7Z{ZDM G{OR'_f:bӡEyf (+dID:0ҽg&5kk@XҘ6%/ *&(&=49~ǰڮ-(/}zJo45ꃤhZ8Yňu%Ϫwvjbz \Ѩfb~׷8׈&O눆h&d[Dƍ[O%<q+Q5: rJRD }x6)|gr4aztGRQi-0i7\X_Gtt<1w ֵr4 +pN|i+^DBeb+.j/por-ODO W˸di]}9"V8`TZny޻P#rz^쩋Hɯ02^;ג;Lmj2a'`y!Bd dFƠ_o"v9]!iA`ʷ#LVh' /v~=D"qA.#2ݾ4 L=en jʍ?++T)׎$; 'bK┐n.L~8 u+ZjwNW #K@較CʃM(d f%$(-cXEU R@>`jTX4g.}Q}/lA=tt "P{ v²-1jՁh(eYڐeV2,Vn31K<'_]yS&wH" :,iR';lV> =Hm l󫺅x :}iUX?%&JTàHՇ-#ETZ`TLXR3*Q*?euiJ|5緈Qƫw}7 C̡؅mۅZb\dA-1|%.߽k+zţp[AoM׳7䨥Zp Itѥ”`^!ICYYv/f ;lvli kZp]=]I!зOw ѱىlR)K16#eh3=ODy>#4h^Q0Euwݢs1mvPzi¯aQq.!ilϱQ  i#[98 G<bƜ\F0"%!\쑥|rܖ:}]̐\Vm Z.^=+lG5Y?&kt ]D/ȧTk>YipX7Sm5B۔I5 Tݐưu?267߂{yob,YgR<|a=ƹ+Yʰ;?(Π/BO Fknk~1of1:v4"[nvBք> sWNh"/a3RoR/#xґ*ٓFQ -NNFH>~ γa@i$<{_o*㡦ƗΦ'+.g+8٧o5 $QBKbf@&U<4Wssh8^_m9_h;eeG@g*I_.tc2X ٲ^Kp(0y5"v@PvZ>:Az7 , E*R Qѡx0wNb_ykD_d$BP`⠅6N7@=D1m8<˫k]p "]\ݵT4&")p@Yվ"Qhk^o`)&i?4ޞT% *{( Xᳺ?l("6{b\ˮyquᆔb/٦i%N<^{X;.E=SEld6cY&-{g9].]zJR\"[=w:M筫(D-": l\ZZdCv ;? ټݖl(^<j{ YhLJIifa+W[)'cs  ɽX,]M哏J zy16;4nDSHSAҍ#ɪ/`_{ou(ٹD&o&NDxN,ެp }2o5~R:E]u?9у47u9?ݥoʲ,T8qK;rNeLmRCd"1vvK4 .[+TXo\uSZlj5X(W'oSRiɲVTaΜcwܱLΆ}-Zmp3P \Hs7A[aLj96{xa}څ&_nqJr I8ֲk*ՙC4/|~}`$fczT z3rۜ>)rh"U&{JA?uWꢊ7UP;oYX'k w0+_ Y1dMKr5DBAGa\h.R:tf#&FV֦ƯEVRz8f&|)@aAxG~tkPM!FR/I01܍˙/7wwd^_Y=zkA5o.Wzn#rlmэiOee[ؚfzZ,?w 9phs?^Ķٿ̈_%wBM,| Pܖ5T.f\ڔM UE3Hd;ΦOj4ҐfJj{I"|&ԬE;PjiBn$ |zD^ҥ Ȥ(/pL9uTaeEG/:Vde/Y8RJ.=Rji1x:,*ē%,n1 f%-Mm5$pW!2lj:!U4@_H; @?;ejQ~GhS9{c<QZ7L,_wO̓,}*2ꨗRB;h4mDbV’d0$C*4#Tl("KhZ+H譳W'n { b/Xax pߵm1ub.+= ] (} *+Gp : 7t׉o$c’WѯX6-C< ^y܉fmvV7Yy1s^ѣReBsD-ŷs_&hJo0YHUP"+I ͲA+= ȸHǢYMz8 _  >kvvyI $,Ǩ7x k+f],#Z!P׫TmOA':gУFa44>r٢x_`2CD0;I$qi#2O^@;lxZ7,JJBG|_ȱۙ8ӥfT\nKQf?k=P*gxe\hv:rgZ28 є~ 83Mk.[!צ{I%Dg9Jڌ-(1Z_|yN?1߃t8wMKpm77|{]2W.KGIQ8,iQ :)[>^$ `0κN+m_t+Q6аjs<,tI"^}\+ڭTTn'I ']$\ԲLDvdf+b4Y#qk6=` !/iֿfK8E~uRm$Dc&ՊRbߪ9&R<_bW*2^{oP{/-2'񩕠޵\uE@X׃oBx[ GVA1/r Г1z*лl 4r _KttTl(Zu+DKff-OzwEC.]-蟴jDT7*s=#@܀^YcdžK 9!/h:1+OVJ2oؽZX$H;`)t9ujlgkC@G"VyqsF\Aϼրn%CcЂ͂W\MK `w{z *$Цy-)EoP=Adm,5:9>]Ơq@  3i2q:D +(V!`K5j 6AXkwjjAΘ}o%0 'Q;2"[ .>W^Y'&ox(O.'^ YCY ?TqIJMh碑UJ" esȲj"OT:=&NhU &:.kE}YYS)5Væ6xL'/jjBD&NĖD:1+˴2҈jzk]&*|^0?<p('. p/ fKޠ|Vt…!\t͵8L[X$0ӂV<H([aGy$n5\ǶBR6^ T_ȋ_l֐hY~+3MOm.8n/,";9vѠE0cPGV@*-0@/-$yxܚFVę<ӽyX \5XADw?RHeQ%5SE }B _f`v+N2Xqx=kRUFtG]MnJ]#H~ަe$- RfgѕGO%~+觕y/˝SAE_| yH+u!K.8:͸93Gn ,pYF~qm:È(@f <6_^;Ez^LJBKf=jCq FNf_B r|I޺k)t#g_TSi:ї4GIWjȁz*^՝Ov+g5\%m֦iD\>w0&I8{5LfݱMq^ Q( .^'ZFyhH(pN fH 5g ]PSAq8- )htTSxƍ2w-ʏdK?jvwˊ( MU@K``[ yrj͎PHIɠ+tbٳD]*BjsC1\Ա AfhQAB: њ*i[Sx> \&F:hU z8´uk~TX=7DzVOb"âK +L+} hl}鴪"zMŦ/7q14{ȫLcUU3I)`Uzc> %`]Jܫ?N5ۘX_4t}+H`<,̅:Z'޲6LK7֪-K,XuHj[\%%Q(ٱz'onS7Brȓ*WBd@ :L ?}VVz|šZfdClgpڕI Qfb}4_TD]LK:?kSs |: =x;?Jï!> stream x\Ys7~㦶hԞhQ&#IT sbXLDiä,>~2D )!hz`J* !5 Q0 F0k,q$D͔ S>Ĝ;iI2bV(i iv`! (+,L'Kc@=JL0d/B89)0McI VttF922ȨKAkB^$#A]КCsTt @U |{(¤0T5PF }F̑thL"̐H%dS#;b I-Y3fiZ&!I3eHIFiԒ\ 5a-&z'z:Є6#ḭ 8 UԦ $L(#+ @[ hX~$ a7@͑E `^%^ 5L֒z!~Ǐ]ԌƳ?|?KOO=~o<9'tY*ȹl_$sVa]ό1p|,V+9VNo9l80Xf?䲯`+s6X1U 9䂮꠷gdzFTٽ.=$^b~)eEe"etGdٕ Z"/DؽCV!!I3ە>/̧-6]+7;h|63~;pMZMR`OPHAcmx*Xs%@ Y;H>e6Yi?wDOȔE!P"W>̒W+mͷ#r2 ύY2 Ǧ %Q u7n^~cg 3%wDgX'J{G{(W.?cƣYBs!:]u|ϰJ' mQOjp_g,yasyg)k&,/[ԇMJH '*[p:XFtJsF<$m͑/e!A6e\fZ5R,p ` "IqJ%Pe̹:=KT+M.!oa^Q%io/> #s"Y@T,@XL(/yJXD 8AR*OkW+/ %v8g0_,zB_5FP$BK9dFk0Z"c5XenXpAT.]aSi H][KWK[[#E?kMsP/mC $d aԺbUQLaWG:lFo ùLɳ\  !J!+osKw:S&dPLJdE]D?],e#YX`g̴cr7i9RYfK",ʕq:dkH(JtPG2ƐeRCM4e-ddS9Z岅4)X=d2avkdNCq*ǚd/Ms&OI!5q:M\ <+Kl y 'ŭT#~'?L?tmv?RT"a) \􍓉 ASܮ,sMG.9X0 .tSH;.ݰ`t$IF/H::o!SHӆm tLad4WKIq$0YBFS"XLHI/u.jT斨}%> fLQ/k(éqBdp1Oudz9zF*t wwfwU )u$+i=G<DH|4wG5=~41zMw ݛ}C~')? G{~Oy'/K_N'>|GQ|_ԓOO/O_>NKͿodSVE.VﵺU}PRl5NPuziů પRբC^5ԬeS} bPzBЯmGj. q$}#!]|WlU6=|q,Qr.r;٭$H壧LJIY hwe"@q_=9y9#xNqc+į?3z6Ibv6Eӏ ! xGo]|Dxu%ɗ4`Ǥe{n|_F툯Voa_>6WN Mh۝6ho~Ӯ\bsMx ^o9B:4%~j;kzY?kxmn{<|.}*N8GP+Dž:R]":eU"&;#xZ4'ZᤱY='uwڦ>yCQ#7F:8tfp[mY'<"vz+qa,6a#:t09֧oUVѯGwv=̮pezܹ'_,oo/>IܹM^Vjy,Fq7BOr ózYsPR/n|yt?o>L>XLz:{{10n.C 4Ez:yRE>! j+ygG:W(~vEV)ǽּlߞU9ud]V 5~:v߳tB錬h3|/?>NӇ;iLnڥH!f(Ē!ivP͏kcCzXc޾shSק޺h ;"^Yr'iٔKˋZ~Ib}Ο7s`:PR^ե7 .K/b nNc16Bܘ;}SjSҮJ|׍ .0=cc/bLUsl="+8>1TA nM~~9F4?mxCL;^?=ev1w8}t{2=OŤ;澘g7sm]w,q+p)a6%QfK9 e endstream endobj 984 0 obj << /Producer (pdfTeX-1.40.17) /Creator (TeX) /CreationDate (D:20160907171631-04'00') /ModDate (D:20160907171631-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/MacPorts 2016_1) kpathsea version 6.2.2) >> endobj 954 0 obj << /Type /ObjStm /N 77 /First 676 /Length 2454 /Filter /FlateDecode >> stream xڝYMo8W$0l6|`vVla-CNĢZ%"zEjSՕEl%xJ ]I*% RA)*m\edSU҆zq!q+ajaOԡ56 ZTB b"ȟ>$@h.Ѱ06pXNh ^7YcZ2v N*s!<8*T ÆTЖP%u.HeI4/CBk(WXC]}R#o%+P`ƚC8 [;hKym/4UO[]#Ԁ LKP X+Ui[,kY KP#'@`;ՀmP4@HG6@1C5爎^p0 KH`0⧟..?uC:..0Tqk3Xq>_ǂgg8LXH)Yc3)cnQڭn1]i$| s]s$/_B/ԏNr"$یHC, [TxjBk,wfKͰJq'L!rնn̰Jj۬TN>EڛML{[dͦf-iofS{=ޔ7Y{ioJ묽^ϴ%u^mjf*k6W3uI{WOhw*-LE+Ka,IJɜ|{YʊY5 JE΃0커ʋ_dHvr2~"]щ(|T,zzI 8 KkIti:`/f=.s"_"]OP X|KϰJqAXrbq ,.23&,%gXu KeML{re y,j[UzL>H*ztbIINKSkr=K-4w#Yxm4t)(SK9[z-9]oVӠKA4(5KC1.Ӡ-,9K*%EH[ݥ r4YI)򥔚˜.YJi|g5-UrT oճy%j's|`A9!#v?఻ X: {cׄIfhyb*xR  rPii.#ECqW"1aOVy -U3Kk_ r k ǯ@Ƴ \R)i0<4xVM#Zh4@M ] /Length 2358 /Filter /FlateDecode >> stream x%[h]Y׷9M&%izMKӤM\ܺҴMM4mKE(( 0‚NW,XJ欼@/`L`́* m-p 9_ᩎ`10& 0 ͵e<_0 ..c+WHO-(T2ΡiX:*ΡiM y4-6KW7vMQ894mhٯ)r" 4EXB& +4y*MYM+Z+lvBkCVmn4`uˇ{`  xjr~;. s dmFHH" 4r&q]!"7B#"Y΢~h y(_@#a#9]B##chxj/؁VwmGZD=nhI4GDV-uqYM"E;UtB#+԰Kb7q4-=hZg^ĝYKc4u2QQxȨ8&![h -e) eLHiT8ԃ8ANoWT0aϔBO`OF=L1U$2 X*n ){7@1up ,٦Ȟjn{zVVLQ麹w4z`y%N~GYQ-{OZǸĨԘ{6eҠJ(s_vpvyG]6lk& qqywasߜ+hYAޗvq(36MJy/%[{na#({oMOIsvh: &]ihQVQ+,TxU&MU{eڏW2`){a8O6FwZ%}kfהp%wJ0-`6Ac7JZc UfB3PKUvjzJ 09G@sՈnҢzoYV2W=P}G7%6Q/ 4wtj?kCM m~\Kr"u%Sr=ВOJ pfoΉ`^ o윍/c&Gn>u˾? `f{[ lEj@-]FPm럤mv`Yua hyGZh'a/u,=)m7h{-}Y6#m?MFZ'8X6Gi4CDz te C`͚`زUc`IJO~B(8-{ ~&#}6os%]ge/I; ΂i^6΁9p\`\X50k٣7d0v((Z=- n;.:P[KpSa0R\ࡄR> KIiW4,vL0RKCi/* 6KI$Ln_R o$t4pD%i`A oq@EҖO|1OD!D, ȉ 'Yeٲ,{Zg|"'|"'tָ @Z<D1O<D1O<D1O<:&"Pl~tӋM4̀gKQ7Jo;@ nнz^};^h<zV?8%10sOj:W~eC,K/i]? m=? 8{z[\=99xv?>O9/%ppX t9yZbOo;.k`X `X  ,@ ,@ uꤱ@AX `:<,@ ,@A7oqۭi#8"hG72`^[T7ДFCVXQja+|FǬ74:noшh4jŹ?k4f4ϾфF'Fzg43k /@=++R\IX^\ ?Wt\plVNc: 4c+:_ κ:ʂ> stream xmTM@+z&?tBL$d4*.<_fW_wիrc;`GUOV&ʮ[v6W7TvbuYt/N.5=S> stream xmTM@+z&?tBL0d4*.<̿~UfW_uvc;Z̫MfG} I]/ޭmޯo⣩0^'^x]fkn{EK{*ʇupg6;ލ$4;gZ8, M[TPRJGeWxmE7 "/7j;{Yʋ"1tm|oirI ɑc׺>[TқEnn#bBSEV嶭mzsg)gR133w xAb;aGL6K&0+}&"?(Ҧa/ c,!-f3*Ix {asIC%hS7}H=ŤIY(jŧ Z4{SO5Z ekxvKǬ@2a> stream xmSn0+$z"aKU^CvF^p=!94gB˥0pދ s#P~k@hZ+vQڦ(A,Rf5Ħq8>K_X NH3$Ǟ{<0*5c~Pʯ5W42^!0^#rqxƘE3x z)cgl1BҰ?Xq!NAWA*d1)iȧΰО 9璆NVfkVaUJ?%͚5ػbTW=ј52f&p2pjV^cHMcVYxLS7E=1j g endstream endobj 6 0 obj << /Length 401 /Filter /FlateDecode >> stream xڍQKK@W1jzn4)nl*D$̤=``N2(\iK&ᑥ8qDE?Gx2NܨfJ ]يmTiZVm~|,8*}κЄ]jRuևy]}-[;NX {6&Y]$KU@ 'DKiaeZdkݺ'U9KUQh" &o`? {ua1a3UN+*Hoϻ4$DM1C)*RsZD]iTΟvy•,f3FS82)b> stream x}TKo0@=)y&mDQU%^XW;qvIV<Eq\L W՚wDpq ogEz< ˨zxȼu}gV~ bjUGFQ?s&fj% rhHGiHR|f[xG_IUөoTfO(ћ4)0:A)e<䀋*=&8U픋9{jUZzT3UXMF5Nr)TYV6zt.{`~|QUHJ)FG`Zuj(^ I64kC$)kv`>jCrf@{}S=@j(Ag|02p:}APu,%zQFi_ohV$pC:ijN72͛N-4)#qNS<Ջa4l~iV'5bY>i ͔PwF O5{(M= 55xi"F;gПGgG2%@&ٛ%r7b:]ϡF@`GjdC{.#Ghxnz' endstream endobj 41 0 obj << /Length 1627 /Filter /FlateDecode >> stream xr6~ .PJ;ǍKE,:.9HEe/B Iq{ -_:'L2%9ƀ"YN2jw 7ޜ@Q/&0<0Y]&6j֋W^<HAyO1g HEXAdP[-8IOj9Mz6 Ӿ.{T`L%>A #hKݮl6Cu3}\ `ƙ GDdT~X>\䷯|QˑSDԃ"1YpD/G1W㤺4Xi}Oz'̈@$ Q&teiߵn,1iW?&S0 _hD X"D.cqYbeE!Ͱai>Tf!(LL˵kq+@=stmthbs!&{U%!(r0E9;pM{Uvf贈Q 2?Wf1ffHY LXS00Q]+@yZ40_tGG$3#8O cW8YBP҂˯9t `/ۭir*1[ @e|c|*>wt/ ~J K=cC8#AM@RCȩÆjl.[KL`rvCKbgrmW׺cmw ~wʜCib!kG{ ff{뭘'* 1ymhFgܹxc8Y^PҎ,(l fV:c|[=\ Ty_򈾕=%2Աȸ2c*d,1k[umSna=ΰ@ápGI}m"i 4wPYlgG&gY~d3dC"Ț%+RW4)k̊Ul'Ax"͔9=2C5cjڑGLq|f:_8Fvn܊^j:CL jZ`(S lö:{ )9GЅ "h& jZ `G_QTu}ygIzU]ݪ/D׶s"C@8]@P"H FmջIXI4" G4a}":JfBGɎTxG** \b :"7SKuIޖƴ"eG q2.D4 4֏S)iq)9t8fiwH_WmTaQ0Ͳ4^+x2~laE*ペf 3Pz<|(l^½ܧI:(,,?-< endstream endobj 153 0 obj << /Length 3170 /Filter /FlateDecode >> stream xڭn_P 9}H (w-. Q=^khϜm"SWyte8̓j{xnwŋ{n 䛻Wyg̕<ʨ44vWx"Bi+eCLGQi*Nim{ިP\]obkUSvW Us-Y H3o8^k<ǡxcWۮ|YP PsW[\&,S IǧjzYȠ: #ж= b$[ ]5@&о/e8QI'Fmt~'Lq"ПXC>Nۡj~|U*;m]HB3Ǣ+Я}! ! /{&O6 HMAԧ%h^{o7SQ}ʮ,< eum ob24 +l]P])(ʆ5tJiġNcG*7D1H*وPY ΃P^#OU-7 إٔ%=貞 52fj$g5Χˡ`~, zlp-u[Kh!Go2&FRi_'|p.k!iD7؎=O‹j:N6&I)/ [w+ۍ1Ar f˿T[A;<s]4gNGYcx:LPQ\D!n-اբr$3Οmu)j&B[fQs<7GAhF>"7\]5@IQrR5+iy׽Qs}ތC+91Sׯ+"`qyE{Y5<4eImu|r"Mk  _s9nX"b_ر5\h;>z͞f!;~CD\qmzr3GW#;iZΙ8T-E: F^q: nJ.;J. snt$(lhy;㿢m4CJGZM]yv=5+KCaҩo0'y6m4݉%@ '4 8Ljݝy|CHW|=^aF 툗I1MuȒeT| ś;eMpB#I0r FnetP%&]PmI(EkRi4 Qaʮ1II8j{fҹanNlC^,%i (~QƼ|͝yz ̜ty1G(!ٔlZgdsg󺝤;e , .b?ct<΂Uvd|L:DgtFYr{sv]e]QDIۧhBT&%ʰJ'"{t"+rHs!%JǗxQ$>YM~v",Y|͢ n:E3k;*kbzg+goB`EqCofF_Nt2 Kx"~( Bڒfhqvzэcr}iF<GkPY`AŤPP5n~:Hv~[;F ' _Zԩ4v)_Ő&o=r|pLI"W0 z lM⋉#z#IָY2sR endstream endobj 161 0 obj << /Length 2143 /Filter /FlateDecode >> stream xڭYm۸_o+k(RoM^R-)ڢʒKw3,Yz+jD -VU)LM`ӊy9GJ~db?g=3z#">u24z]Q=7S?ͻa( og.h*_HEnnl21,i\T`h-uLwL5Fw&)e1鿮̽fuKD}Oh+i[S!e:lED'l/nK$/EuS9m_=;{zƽ3_EfKֈ?v cmXɖxЍށ-n|Q98f}W7d`%} a"uReܜ9<4S}M[kUȾMSAXPKNq?E /C Zc՚{]2f~!ht;gm?/æх^x8aaPjLK8vx%zbS?٬~`Px9Z[y]{9:؄h[ co (D~s /(K7+O}[6}Qmz-$U Kx\tXx`0ؗ14m>AСrP`o"daFcGdtYeM u2NPN"laH#E$bǽ2Laf-lҢMͬ Ӎ) .ᗼ~*ʒ<qe_A\n݂e  ] t$-^.q\o#J1޶i[k7cH):Z)2bijqط},&F˶] 'rb{l ANY7Rࡒ8t>B*$5f78_<=u|c_T-5&5Dz,0% j)SSUc(tS0X?q]' *P:& bEk<Nw?ʻxL垁3-#wJfݎ t3B c [x]_T6}4HH>-0Fu D 4=P4b[Sf&g23lgǞ1V.S"?2 ni%<JNvQb`o1 v}W\W2yխ;*U00 P4EJ=GW쎟kRA2* ^E=݋e 켈MVe4DEM6җwdb iV-Y$RyYtaFl&٣~" #gǩ1u9؀r8GQڛ妔o֎ P}@Q ֹkÈ$iQ*Ǯ[ߡ"kK endstream endobj 164 0 obj << /Length 2896 /Filter /FlateDecode >> stream xڍ]o6=b"*R˥(^ҞMDi%Cp9ڥvu3Yy۟ߤw<7Jb@̿ݿة4Z£D2.β,Ry^DٶҴGشwJE~~"_hJ>FUj+VL>VUR?shanE(;׾ST*T Ȼdߵ[]yebio^uU-x+3Nί"qRWռrp^?|G2hdg pM`; v,Eb%[,S}=6{!DE]FF0-U NEb|vg:4Ŵ:U&r'L'e c; YCVM7zB|n!]%Y9M8vX`ytqtot Fζ, s71KBiF-w{Q)Ƅ/fKu$HO/53#.Z̉#Yg{2U)-(Eў}qzؑ^_nffj)\#X1t*p's *gutJ +Aג`ɱaD=< ,Q8`C0e~F:M*Uy$&>fayzu5%nN ȲNlrRVcD'9HGp^׳Tda(œsP?ut#^8oc{$90\p?NLaȈ_&,>ug76g'$$GS%Ks0<,K]=X:2/!HZ]M24 $D3hɮ10 ̣'PI;-[|A!K> tvAt䵶DP;oUx1QⳔ~h +)ziW&*%bѩ2bEsCzTAkAej{>iϗC Ig IB c Bv[Z d-9u,I8b}NBnj Uؗ2"$X6 -eX׉Gz0T^nWfʘ,!圍R#?6T~Ny3fTF Gw\~[z!sc }Z%UW&clͯBt|F_v#%>ci= 6< qͤ>la(LS{nӘtM:[% i`?|ڄ TqV+UR//DY&JܮE0!jfIga\Sޕy.>}x*:'̼Ex 3RED)V5^TÛ8ؤtQaVqpD/NL3J"MiJ5[5l'%k#?$ _]{*wSE(|Jޔa`,m>rETDvzA3{I7^1_!c'^$b_AVnd/@X<ʂ{ѿMlu4&W7rқ_OTT8 (ܳfq66op" endstream endobj 168 0 obj << /Length 2638 /Filter /FlateDecode >> stream xڍَ_1@F4}v l`@8RK""#-RC{ =j7 қ2ɵKSlo7 |Tր`7iI捻7?Gw4~ZG16Ǫ_1a[u_Ί42_}8*|"o3&NaFǕ*^DX3WȢw-t7fNk7G@2s+DG!Z糫 G/+-p?ٱe7YN>2&Q q&J WL*G.X:`3V':v^qӱEܳ(rڀ6rD@^M%g*QD6X7n!2NXջm`Aa}E[3U38$ p6ú}P9u= )JMCZhi!oݮ:7#D)*t)q<_p0*޲!hw ׸Fw@XWRbThHBgh၁3c"8}ușG*P t§ވha>/p/gUFӲѸnւ@bM/0h6ì޺!Ut",`~dP [/h{nzoZLS r߰ Յy(Q%*,n;3vA50Q r."LvWe\>jo"5<֙zo +\eWKK(M6q@K7ͧ=P|`Hb;b\,ec͙ N [`61pNcY0~nY ޮEϽ ƊR]*g>+Ic m׻5^CDi}yB!1;xճSFMA\K_I_ Rw{7,g})m^;Z d.'[t'5pW6lj8ŪAOMu@Зv\=7B ]KraU-ጝ]z77D:z:< ^X*=1萾A6!"_7a#q:ĊY}h endstream endobj 10 0 obj << /Type /ObjStm /N 100 /First 821 /Length 1789 /Filter /FlateDecode >> stream xڵYn9}Wq"e<$Y`"BlDta$eh#+ 𔸘Hhq" RAB0FhPɢ e'gGOnjguU/vY˅ MoGOV6`b#Lc\֋=}#_M=y1(#B"*λeT 5~W[kA%--{4~ͧ|L`OfҌ.kglsY4{=]sƿu:5~e< 9]O)G;+%͊61gS3AgJgKA)t>;0.-}2:P<+XP.t!Jҹѡ !-qODgV %mBCMԔSSܱ4|qnUDՑ̇ϹqJG ' kfw_ M|(œat":¹˹v|, 9 Z =:{">|RYAs^:쀘\rڅ|'; ̀&;!G&\)eАMqyJ91f^7 ѭ/ЁEw}]ӿzk)6˦7v97eӵ"[VU -tD=&?0w EyDOXMT6؀^?5$^?Wa>_݈X?.j>=@7enI/xK{XvCmz\4zȿGHyy.o7J+ٵls9z1ĶMZ]X-M;>ݍRޗŽ1Hx UכY\׻a4!GN_j- Ytqj\y3y_Iv3(wbB8_˵6}-_Yﻛm?O]5'LJӁŤͪn!x]Sp]OSbl:p6lma?u/ߡWͤn+c$޼ʼy/7I>6vά$kk~ֹ\~&Ooɒ&O|OIy2蠜Q{P)e/HB I)bT%֍F|T8H9l{2}BĄrDN# pm;fsG 7 #]H?mk;-Bڶa8Ά!o:{nfJFIcˆ G##r."ϡs endstream endobj 173 0 obj << /Length 2134 /Filter /FlateDecode >> stream xڭYYF~>xH 8! 5$C!'~)rGuw_~bD h߄vtQo@/(;Qa˭W]&3}'w}]IP~K‹~~a>>|"sF%B'AS;48=6O~*YPXԛATz|–@ȑzLGsM^6Vh;{N=VvbjPe[J Sm`qtq\xf=eIWTb؟MuH QR6ؽ3(BF2qRBāӵb T1PݶauR<\QΣmq#}{>nrXF*bɪAD)V{Y\NRЫoa%Sc~n&hPmaPϧɴ'SY",No Ih o䳿%A4gݕ4=uE ʇYuFyT,5 ~q6qY)-{E*[z rrQ*.r|7U""dhH7`JSc`tZRVR]A T *5Jj6#UExʅ O3#gCK}IX+gh7_&`P?n +Lyx<͙͜>e (PE2x6( 8d--]g O:?}n38gD*eJG2WRw,8C%;E^$p+XV_A*S>ݐ{e&<2W| KnpY!kW 0j7X|G*IVc52RdK"AP,r.$h [ȃ Ү3~CI8\5Ћ0 1 zЌ搼 Cd:8ʩAJ\Ku#ki@߂guBXqNT\r&sNnNh[)D‹Y-YR^?'byWw|1řrV SVtE2Y.[6LX߼-:M=EGs]N EEkr[Yc1*btsqWɒm"Pqr*[Y6\ 7㖿s Ruf8XEƒ+Q5c=wD57P̀@}0Uv9 7kNqY#MC ɔ݂*rƵd` ][fJ{H4Cw Es^&E>ZHTԆqZQ+K4Dٱ[C| 0\;'xN.[tŜl 1u#z|-nЦKLEPUcFKKӄoضT f"l,Z,R+!+SP4 Bcg~9@>Jdt]UTUVA/8l1,yyړ'܄ cӲe)^3vZu͏*Q9KY,H2U˂?> stream xڝYݏ۸_o"U -Z(pݢZMĒ|/JW81I W=O=CuRa׾Kiu8<৿SBa*MVO5?ч=Onx֑clL}v /wG?gTT>YvHZb-2eR<I6,o'7%kG9NT[p1K?JwϪ2Lp>ɞܑiS@y-hH|9L|b]F8dDEEgYdO(kx `b':S$gr _NKnȓQљUE'|4{u!jêYuxqZŏ00؁v0B1#{ bE?9ۜ1r_鄛iV4{Yx$gl?L6aUۮe $i#Cպަ:ɔU wV6ncOG>˒,E2Ǜ 'Pki?4%b7]')7@51Xm] ; ~MjQd﹯]j(;LaYu-{os4I i'T8z6P=0 %R77GzާHpk2zK+cs4mr^Գ]Xg1i1gFaqUР1\9"]4kP1qn#|d\{uVHFB"΃,0%R@0qpa]̾S/4Uf/X6lH~=CoA:PظPƙ埥0I(({^x;; #@aшi},#y' -UFǑܸ9T`!ˀ?aa1uFƋf @9~Vڨ; Ђb@یq]9gws&8m[x j&- gQ.9w,(GVU0R2ͨ_~oVHa)G0wm) U=ǫ#%<%*~g`[%QI]gQ 䠆yz6+WK_Qj-r]?UW/n\ 0A>qŬ0B͙l5m_yJpF*%ZI&t 2GFhp>`6N/p'MY)Րt&Y 6t}ޚr7yJ~rUce;?9U? <~ C]8/B2(> stream xڭYێ6}@>f0Yl! n+dIQOwTVd:U.?+]uTPI=?)Bpw?lNQjpOp?}a}[׶9_q\poaB_}x7IJ=_抪4]V)rvG\|9CB#exήuMnbiE$tmRQj>UNJN yU%u7^dx\ a(>)ipjp I!ToL?H 3\=تr,U[?Z4@%/2RIav]=Do "R7^*p(^?WDIram4i)zRm7p CۼHpZ$qoTF&-V=.EC]~˵iA0+Lp(A5]#8f?~(:v _' ft1iA*QRfoIH%Z=.DbNmW@ƨ^w@b}zFI,P'TnU9Jb{|*-%:R}KU1-IG-YDx33qfS.pCRك1M&lቾDco)B%v׮s](ێWf=R,u"֎E`&4r ,k X:F!(7(sCg"#ՓΛNEyY kl4QYL#niAظ/÷fP'g#ۥh>"3GU=ӂFWGrd^RBkӵfA#iO9[?Wv = z 8oIVBi-` t KCI, kaQNŏI@:c%A(Aڴ[`o$:-VӁtMo+ m Gqy9ru)*ˬ6\H-m(>iPNqX+~qAݴd(f-lXkW<,UEV @k9 m'%ej),g)({ٛʹ7%5lrbXj`@gh  z[β; ,s-g ǥs:ܜzfsSgkSgfoE Xy6_1,ت׶ln_=MÀ_y@&.qB3i N|2T[>4%i5!@B@%ٚpPm K8F=v1_!3@HkфI L|A(Q=+j XpEڼ ͌/a8U5sN%q$)z[Qt6bؽ0GZܙ3Wɥx-xy|$)C~e:{q)d+, )~"H(-.HZ1L3{p=&wyDau77\ O)7(S42Eܕf/ኵ4h;\\~sʡrV#LipCΕ08kV eU{./I:wo펜\`;eyP>ˏ~!u\Bz "Ȧ;MPN)Msm^I˷6mu1j٫&dO \RfbdML$ӟEnV02' iCVp Zޝǀo[6pjҒ^ O}tS3?_,JkX[S+o}$yQR˧߃ΡUwAT<`.5#q(ZE*d|,}]1m [I5EwՍ;\7||B]^J!?ql;u#IAl_81Ijz|gQQq:!?pzZe]@Rc«)S@fRDCX*KEJVGi.)6%*Z>-KAhX13YnM[~/% d~9KV 5gguX#!yeFL&,-0%@ endstream endobj 186 0 obj << /Length 2523 /Filter /FlateDecode >> stream xڝYɒWm؎!D+哭v$rX".%.3zg"S1?$Y``]Gjwɞ=BlDc̣;s#ZpluEƴΦuM^;4(v+ VzW~Olj$Yf̻bOMM<גk7WT7VP}*.yOΙT.1q~r{d’>Qpto00朋hYG '/Q6 Avlx]upfiM6p`>=*rTajhw!Y4sg<;c5eⳅףFxAiJ;Y!EF(-' M[aBaLlXQ"0Y`[Օ@a7rdr w4&3oO>xQ-Y1@֐M\һ⡬];W3F!>ԒbRc)s&ˇP뇧KeUѪϨj^4)?)/E 'Dv rWb> ۄgr˗{981oN@$ \|dϕ,_'6'=!g8V6q&ZG-\u;fa33]ia^ @) _ ^8_۠7L'Q6/d r ǑޝMcٹA9|.Sl UIp [c?5ޟc;Ϩ6kTn۫\Yc& Fqj%E_;w, vióij\Ai"*i46,Lfߎ!x&^/d`ZfN %e}":u3/J'q"t3=a_8{"2Q6e-TЧ?Q8Xf]p)y$A˛a+H5)zԡ6q\mAqOlAk<~&'=lcVVúghy'v#+!E2|^u!أm]Wp,DDߚ0\N?=Yzx;3t, mN,^:8Z/(/) _pnIf8:*IvaUfM P%`%pvo?3B6n|[rm^j[nDǟ} n*O5n S B A*OajpE`ex;[O6M6G˔qwUey,]!1pO0D&'@o'6R8I,IsvF.$4pw` 7gbޱ(sOA QLPv?b]Ե0iṳ=f'?x6ӅaL7*MXO(xфU3c_ylݺ8-*6$_/W-gx23ߓgus> nzrZ>i`_\7UjR!Kh-p?Ftk+Ly8_~Gʣtǵ#b%p$G3Ŗh@?DE'po?v.-#u\Oo"*>^INK$S|*5cTM N)LzbW%^Bŝ&B-էJo`*vIϧwUU42iiLN}B/یK-(Mt :Nd$)"lC ഉF@*ܷ dre&A+½ d^P Ȫ>G~<T~ʧZ%I\QxH‘yjo'sAE?h;-syjf'VgqmV.[}25c<.Lh/hsVL{S0 iU-kť5-3xX,"Z3kƝpwT'ضKjZi `U,P=Y W?aRvx=Txv1ur )A? bޅ`J_(PA[h"V n׎yLofmV5P#^it]pƇ~Z?Q"N.`UG$">LyO#9ukwp">|]2}^e?]! ?Aw endstream endobj 190 0 obj << /Length 2230 /Filter /FlateDecode >> stream xڭYYoF~_a Yd-Y`bl I2层bU_}U]2BC)&mc|_Eϟ>[Dq!vTʜFCT ~ڇZ'/]Әd\kYtkTi.b~a^>ĞبH\GBiki\>/`-jE"S?|~?)k:;^\]4iwىPItJiL;Bd^q@1a_8.BEyB hSy0itpvezs$`)D{̓ ]sv: N2ɖS[ ۾K$)>`0tZy '?v`ɴcsپ5-_%JL6]o8 kmWE ,)EPT:( tN`8ֶsM\ {DjkF?klx33~$p~/T,#%KgTp,[M@+A0{׎KU׻uhx򑜲PGy~/e- ,AhHōK9b4thKu"*dPÎ ԧ<`I`Vw}i3* O2~`/,0jɇ`*فb==ȱ_.x 7Q{;ʶJXn0=-iL~3lx$N@rҪ~~N=h`t%DXM'trn4!X"%=( Ȕ_K3 (հ>@,CP^l.6 %b 4Sded#+1H`oE:{r4ܝ?X!%5#(L/P*u=wL A@|0K[8oUu{uwh@FفgG07+3̲QZ:/UA,֧ƶ:ȗD:%3j <>^"u ]ҙRnAE _OD"4級-o \] wI!p0&mӕ8hx:4` t:gshL*( *'3׸j|abE!:.CP=p {l \ @YVLW 2Plz7#) "^r >5µꪎ"+|O)"ATٛo6uy$7LnD^ ÿ$f`ǫڀ}ʮ<8w3 [ 7b ܪLCXqy23K̢Y11 vp  v!.؛~]6u 8%I5rcdLdԭ"UA2R nkSnR}4)YLܝ`ZS>gs{qLǻr-A&sÒ҅sBܯz0"(ANTJKbm+9 x(8{RE#=0@ tҜ6 jCg?(CˈwUƅI&2B}nQ^#;MWn[z#1H[?"'‚#.FbXh8r,CD_Ն$ \WqoF`Oh+d>g hB\nt~a]2n -6,i)RKhe[3O!.7Rr+Ot12iuG8t,16̑KsbOTo0[A\sF&{h)Lo,S}%w9̼QuuՖ邤p̓ |%㢦> stream xYKܸW4b5`)$ سkma7@4-δ`+gɟO=H=z8shX,cQ#V!UTy'!Q0|>03Η'y%JAbڔ߼]qt8$һh)j4.j"f<_F#EsMEtfI ℕm~PD|Bͮ(&[ZYXGwZGӥYuYOL3O_f°33b_>c:tڂ`EwBJhw;_=9?k_x-Wj^Gs-ZcGb068ٷdUnT>wWG3ųW>$X`'s.äOaE^2uH+:#s݌PY@D@2؍ǽd$p=jR%/ʦN^h \5$vB2k_U]oxNoBn47dD_XeѼBWOoNhMRpR Xcn0b p kqx 2dttAPAxE=anY3Eb]ۙ.^w%H 5șmtlؚh^ y  M@#&FOͥIs{(N ݣ=Ķ9w_(600uG͗ LXA1lc&!ԇƒIa=NC,c4Ѵdņ x{>&XI-oCmvLY(vM$cq3GwU]hT'4ஞE783& *P6[d#w#lbII̸R3WN=8+\Vv1a'E~Uڞيо7` G@e>Uو4܍n{eG9n<BQr! 5:jEu(m=[@jϻM0z^= I{l|{v?ӛ^z;10].Y8l4} ^l sV c۴/]l UFR.i}I@{oe?wUAͿ>6t TQcsӹ4g j Ζ)5Ls/Xy !g޴u=J ;s:K>bџ m;vM{- ma#^LEqg+PG;xsA=5~A8r+"׶c0aoqM:\/15㵀 hz_z*/ 6o-ueDCtz4տ0 8Uv ҡW/M@'yvu^Un|*j/ҳ*^ ʂ09.?\8ňyfb^tlu޼"e @eN$eEA:5'/7NƏo[T" 0]>S${y?ç yt`JfWûG?-5lC | =f_\ endstream endobj 199 0 obj << /Length 1793 /Filter /FlateDecode >> stream xڕXKs6Wh|151ҸCҙ@"$Hb;b Gx<>> "i<E`VvA?BBwq˃/6SVwwNǯ~M˺Z(.}{/n BETS,Y$Yx()]RWCe)2O=?K:cr&Dg],Kbs]~-/,y]y$ir$2F?cLZ<8姀Jp|Qmtw(N|Ξ(fYrΐy j6_u;JipI< g_Ud6s8ITWjd4 ^Ok+=ˮHop9zDnwFl Q`dWRteQp&|v`\@'iIDz0QZZ-5[D$l-"aQg~gN4]r•{[˃* ["X+줖kF.~~Zm]~SsŽX-')7^,bX_!NdK=U=2@?߫,.;SVʥ٫>rvΦLKhB_`g-L0C0]΄O: q: >d򶲴:XGFf[6I#>SxP} #D9v~ 5- qSZȀWy}vCA@$%<. e<,JW#S(~+m=k>iR(E6oH |vՀePn?G\vHA o87+q\˺R/abJaqF|h$$ų4Lg0 )tf F`p?a,Į{$r4/۸R.^̺p vXߞvt? endstream endobj 203 0 obj << /Length 2515 /Filter /FlateDecode >> stream xڝYݏ6_8d[v}ip/[{@fL)3. Di("Xq?qG7Z0y9jC_F=lܯv|$QG=Yݖ74~WJ>c4-蝹4TVcRLB{7n)_)(|AR0I8*&a U|0LYDn܉Y+Gӛb%ҠE`c}0M`kQO0!ӵ28Qp)'[sv$2;~ fN(&WЋ+L#uwYt=٫4'@B"4eH2u@ -yXHng§,YMEa&fOաU;~$ l*TPŽ44yjpNKi-P.H~[pD&Dw⥁ #`xeiGJ#ioSNڢ?vQ: ~iF:TM&x_)kq Mth>ST5}MO`u8U= cTe=9$փ5[>;8ؘ)SoO{ptp>ЯȠhr$U4K;w>o9Ѥ?t}cK8J <#-1`0!BsY"EC71L?xZx4ϜbaIhD3EذmK~kI{ Xg+aї's4= d6jyK5ΚTM-N 3m ]ȿ%$ s^6cj7F$==x$5 HT~n}- r9RL~D [U[lD D/O~ypA,r C?#&NHO|-puH- 3#z1?h%[L}ji rݳMb=IѢ h2E= SP9nNYp?m[/G㙥-3`nlˍ H-e_TQ2 TYO4]R GY ŝ"=c3"4lknZnV&R `|R u|l;hD-:%|yDdvȜl )TT#qA_\6قI2$ؠ5 92Gzl>G\E%1U:YmOy׌VwpI H@zח4GWGtJ^psy,ӫ `[z5nL!)`p0Qk޴$.8v~rLדJy7Q0`G\Wz+u/Ipڜ5b61# 1c͈.Bh읶#3R3avu h~1dc{A>ɩ&Q-=! ! 60,px sBN k6bN^b ސl 2t1%WneC HkH u4ň]f 0440X \כp`KYiFKXI|r0NyH H(n`N8´D4IΎp`hẘ\d뉪RT:T4\Y2t+tmLehY`,)'!p@%/9waA'z֐4Zt!Oi%&OeW r,8ĔNKI" \ksqXZfi@)7=6t0DSvVuWw;F?뒐LJrlI7Zoqd8":Js/B}=k;XsÃݒT=/ ?օ+:XۮU* /YhLUI$_SH/0F~Igl=X ]P1pEb+'H2(WL\E ڵ4Zoprca[?RAHeΫL%RXC*uaHB-\n@{L~[RRq6܁˘V\w zpY, _bh`nڈm (5%sI$/ʕ X|Z4bv7_a.5\vkr,M|M|y+t`G味24`J^},9$S"Q E#Bpti;o6NtEitt~mC}Bu endstream endobj 206 0 obj << /Length 140 /Filter /FlateDecode >> stream x3T0BCKscc=K \.hQeU T)KT@P!$ ٨h Ă"M]ccc C+M]S ļOf^*嚒YkdlhaahCY- endstream endobj 210 0 obj << /Length 749 /Filter /FlateDecode >> stream xڽT]o0}WDT1I TuZ&8*Nhؤ={=B1m3e|f(xۂ.#uq́5mCch!1۶mY τbC" u@׆lCԺnPh~ަR=3zsNFt~LBcF%gs}.c}<1z!,+yQS]RA\WDf<.S mBn)Xp6(!"&s2刯k_(r7MIh0OCzX W#s+nv,ծ"ǀgԊ+A-D k y ac|zu3]U5ɢm~=ru/a`#~38YKÊ8_d Z2:hTh)[Ç=i&m3xWqw%uz^#dV> stream xڍV]o6}ϯ0R-+q1 =UE&c K,=Rx=D8VYz^<3Ͽ`t D>n~5If8 <ݥv|[JX8ZeO2({^ex߻?nv>\ &[w]n q2`_u#j&xd^ 8R^KTP87t"'s\oj8oy*^uhL5W!$ &XFwf 3O^fHs uO<.hh̀ޜ }QFY rR*챶wG>凪>Tp ʴ;@΅i4)n"qDc h XVD# }3kfL}+7/y0Aܝ\5i-&2NkcvnZrv{g6s`˼==a/c#BooI"W}Дq)X r(LkocKK`UkZ ϊ;*Ru 3^lc .&b7\/uo4î&lk6 [82AN*'D|H%ڬ^{ÿE/yB/at[k/G*'QHhR.A]^ .u\g?R ZYE k+yF9F QV @ב''G%Os7) }Av_Jc2ӭgN:/d]K8HFeU8Up{wD| HUy n@l62ԝ Pߞ0jr{ZR{Idw1B^BS'B~Ϭct#'{m_0%9ҮgD䅬"4 endstream endobj 218 0 obj << /Length 1508 /Filter /FlateDecode >> stream xڭXmo6_ad&*R[ kl-a :lLBdɓ㑲 jx{x pFQlVl/B#m3t80ÜSSz#wZs?"BuzI_Zݲe|X2aw xAC倠3hB$#aIRx) |"5 JJHє P\jI;&5b8T"NyI%Yd,f(O 4S} HTrUܔ+3< 0+VfuTyyF6{x&bw==k_0} ?l2ji 9(2,k&0&hJҬFkʤ&B 7snSzWT& UdlO^ D%yBp$ hREx/I/Vqr|CNn_ Bh%ewq.̀'82|d~gwcsVVJk \戎)Mӈ&RМtm>⊩\kc; d5ҏIfD:?#ݕ=Vx}~&}*%[ Gu>h_~B8pql^Vf=0@5( f#B_e]ꑮnvi3_Xrgs 3#+wjժn3B2L,Om-?nOf4~eY}%30J&?nڧ3lnL߯\>?34aof*X0H&Qr%KH{rZe76$uSjfBp RO$daAy?riJkLDwc6j#`B#%S4nU!Txƒ,Y\n"8v-Ini(JDXWtkG} p=j\{iqGK8(NOPQݽ=Q߻6nݹR:1['/ve_0^ endstream endobj 222 0 obj << /Length 1326 /Filter /FlateDecode >> stream xYKo6WXVQh\Z=Vi[M4 %Q64=A3}-G, p θ;W$3E.fkj]c+܏8Np(ԚTJrӺj+a$VI(j>4=4]ƁbTɿ[W5m؟?WiI3_DHu=b/;]w۝Ѻ{|F%Q^PL_n897^fAEVJA<S(2)bݴ<ﱮX޳T'BUCLث7'#:v&\x63U >6촖 WnuhI-FY;7n$F` z,mB (070{̚2\@dޝksw,>>ݒCEéTMSXQ=Zl*`\.,lBw%:;/`Ҽ 8=԰b_X-{,2et1q& ܁ Fq*@ʷ&g 38qD]GjM 4n"k=۴7t#h+f 5&]#5&Ҙ=Za׀Camh6ʫ{8,tOg%_JY<$yzHIzḋ3*n[D;[L,T‘7M,3j WDI $;s]5s06Gk ]pix /kJPi.==7R؂tkhh-|!}ᠼjNCw:  Rb1a"K(Ŵ*_[bo?fqwy}ϵXĄ bh1#QnX #c߲KĴsNOCYz#Z7y y3KtD!䕛S$).Z{B\x5I!Cn}BogӕpvI<E:`;^jF?ZUuװ?Yp=ꚮFYV(Z,Մ0 <DJSkR|V #> stream xڝYݏܸ _9U˲-oIzWР@=31cOKa$Q4EQ?~H#oɛ2J237Q|+|10 wwSDI)oKQwGOem_o,ˣ\"n-~WIv6.R66tVmL_txz e 3nn7NЇ@|j_2?˫2mtRT #g_K.YrS]"N0v3พ.ր;Y*X.2}x_ !#B˔~ڇ1S0t =:"{A'^;Rl㖜5_9ktl,t{!q7^;܅ٻ~pzŎZ9UH!Plxɦ~Q$E<@!ɝQ("%A[i)^̿R U5@]82F S.3`h-9p]Lj# w?1|48h`('v\&)gHF@BTcfYF[w"<>48(*ѝ?)-mc4bʒ$N-*L@aErijܟq{ /=X+Πfȿ!ԽݏLN/4E r{<@fF43/N3/(u2]zyX\ Ҏ(XޡQ2yc6Fe%74A91|*EJ ĥC'b*BrN߯RdyLm¡Iyn}\sTro9 j* .QBJS$ 2?qG?ݖr Pn]t4PJQzl{c|`4/ Q›A3 x3Rk\D+\=UTz_qc mոqj.OX&s @\0!x sR>iT&n#漕@I6mQö= e@Q#.n?;qd]W}G5nd0GOTvEWxY}m5mW=1xw@z9K)i.arUstoŀ\/Lw2+օ6-= _VsxtVJjwpBTED#Oc0G:f:i¿B샫 \EG?(;Yp ZAZV/AaNYD R>Ie&Q >Ag # J&Y2OѰ"nǢ:jꦹ f=%83 .w  ۙͲ02V,h9KzH"+1TmUh +HC׿2&ܫ3,Y} %#T\Kczl:+fVeP424dޡ~XM*CUaF=mu8n͓ oCk#Cwd=z`@ł\.dr v%p~?%иlFۓ _KE4bd۽elPp)r_#`B͵jᓓY&~[X^>+F~{4Bˎ[<B!͟5`{nT6wTz- (gz:!/K&l/_-%\7%qt5GEEnE*߈Za_]nķE]sL&0%*=HT?a *ɇsf'̝r C}ߺdWK}XƷm#7{x FEa&9:b)U6 /I\%yOЅ[ȭ˱HQt >ia e*"öq> stream xXK6 ϯQƮevܞm}S,n[Iqv&%Eٖ-2X`G(74$Bm]`aC?q灢h{(Oo|{8s'`'eIU9 .*Mya녂8?Gax4yυ$OFUnUӒK(x:љyQ GdF" XwĨ"βmc`Qe{wLFO]nh!Lo9nÄ&jKncc('r'2m/v]:.\Ւ^CaAQ銺"3$ auQ᲎dEkMv04jJ% GFv %f횑d@6B-UY=d&$vB9/d &Us4N\'Ϗjy'YU ue߄/ |9|/7qOIAx@McqMD 6#dgWbH2t׃ ݣΖd@T3O5M)?V7o.1s@F&bGBQdXFhZSϵv+p &P6*PBC,N(vq@8UESPJScVno)niDk`b$#$M`Zd\t,Z`"z a/-@HBBH$n@B8#nMiTz?nwՇCpr2I|MȩFaڗ#PPկ 4:H[8% L!MSDZtt*ح9bpr:5FOݺVYa,(L6JPS'=R{(w+'meOH-Mx2OT֮qA~z`͚MЕqkxs/Q<9Խ 0Q0abbd%6Uԫc6Zx<%ᐣSMgbQѦ#b٧p8I' X%9=-@cB5D:t /xцAc.uv-c9\̺dJS@ԯ"SjXipm@/sILŌN_9jk8(E{jٱV3+&O*{Uu;r|/4=̮ &`l5*ԩO{=.}EեVR?Vx1>eM~j~ܗ@(K15m W8q3M oo],D6bvu#s{qgpX+xy/?A>Q{vI&qlzu& u}([yzW\Kl6U&^^rOoS_7RψFe7n2qQ`ߒ'E'ՙڄ+TfyJh5>VKLLAڬj)xySgNѢ0a`P]e0es1=v-x';;1 W\괒mCj(uN!cTM-`_EZu"ծ0oZvI8Eo@ endstream endobj 232 0 obj << /Length 1916 /Filter /FlateDecode >> stream xڽYKo6WQ,UWo}@Q4=Z.]i!Q3RK 6"@ 'e[UHӨ>\fۮh+fB =ʷWe+GU\gu^Q:L4`_gm{8fMFZil$e% ߏ$Hy#r部?=n~R}v~, ߽ o4W9+|4bqYVzYJHy kZj"!Ma`ܱ+/N`3&WKUW̍h<9Fa gܰ*q+ wDWĝDMY ({8g1Q6Нy5Om̳{ek;Oh/;ÊN c,)fD`^=Znİh2q zpqWg/0[|cjf[ЁI(EIӸ>W,>QEKԯɪԛpQ>޼p Ao!1bv瀇 *(2F2G6I'61^ZXgF%ճY.3˴*s$!TqpNJ'7E%+f"G1[&1]ȾȆ٘EQ/}wa{})B9loMIYL*NmJX4m7+NPNĴbh{i,zv X:08ȭЊ3vY"*ʈzx,JLPKal^$¼qxfQU),.baִiㄏ<Զ)ozˈhF{ڬE/o7/] ̙tNh~VP#|~O#h%[eq(p"ho) ­rPyɳ$qK^ڎIFM38dzҴ4beܪ1{%yils9OB!!ʆ-@V-LϏRl.]8c1֊ ~Mg|ry70n)ӯ Fp@yrRtK ln&_8 ^qOww!jtx#yr$#W endstream endobj 235 0 obj << /Length 2060 /Filter /FlateDecode >> stream xڝ]6=b*P }4&m\UUM{K$;%ɦ:ic}bŸ&㠐fw|O;Oo}"I6" {M{v(O[?cO|LgX_խnGȅ?7??z~3OJF,݈8U4e bI@O{b&Τʭf Sb[^im!nD!@K%PcQ+]7OG΅~,H7>!d0iIw`E}aJuҜ7oU[ {{ZW\wc7a,: N-&r..s=[NM+q3~ ȁ ]DԾa1ՖG$5cS0H/o[<7ϫG򐴌V% В=~żLif$yyP--WujJ\{ &z,,7RQ$z5 sILP\iZ0kƣ co, }xo@]xtz<:C] 58 dfctl.y\uH FkݵGF]hEyZ~{_߮q(Gh6H0"Y8~xs>JNWJ_u+=|*6>6^ps:nhp>R PDhXFG¦vcS{Qe.Tt9^F-@V3ʚ; $Rm&yD s7 knJp"p,8),o5M\NPEPoǁN brze .X0_6.M,MPCP(J=OHߍsE h v5)Pkt| 1v,">{*yZc lLn(17 ;^#8OfAߣ=LЪ;h-t3U͸&\ p&)̵AHQHib3 P 0cbk62]pb\ b=.I73җ'}:Aqz&ֵvmyMqo,>lgk< dRЗZC9m;02NK pkDxcΒoT8Pj>Gs-GPM(5\n^ hh;{PպpUY=pe[YWaI=W8ZSLEQE {'j( ~,ЧR@i+Zg)x_RLWD vy#WDmUШHNT0LY Q-Ug.4t~pzwa~]t).d-s`-p5]6#z+'{F٣s{*X͜!L^N!q"JSP.Tg@> stream xڕYK6ϯ06PcO4fw't9 -6eɫLe{X[xSbcl$\n(87Q?M|Ō7SM \0|Nҙf+(oE+>u'lehno;[",po=Wax#P|4M6AKH,(&V$3BJwo”LݷDb-'ӃzBˌE6F4Fl's~Jމg|;sTl@T@iXzdhQ6̼OK00(N.}kXT<0~A\ [垮7*̫160V{AsާRnޕ);QʮtHTgs6_3`mfT! M77vK|C0^7 #^3@̜mo[zϥ"="޶ߡz5%c&ȭcEIqq4XymR/$L#T TbBF|2Mk}GK L{/vo~/Hz.8X(? Ӂ%[pCE2"l:A`dhntn5Ҥ&5e`j[RY[S@^WWFB@IwDRzOAJC87vK 9a"B 1,P{=aK8FC3um$34\,|0'ǏVHqgW7gmVzO?jgQL< {jںjݭɵNcXT6XjֻBuk@O" XzЈ ~ӷf9]H0nGƶ69:Ioops0~ L'|ow+*Xܤ10"AEM =CGi4uI᤯= mwH =Z-R =4/ a*8ҨwDIH'j,Aajj1I5N0ÚZIҪG-w[ endstream endobj 242 0 obj << /Length 2013 /Filter /FlateDecode >> stream xYK6ϯmd`Ĉ%J{Lcdr,EؒGwS*ᖻ;@0*WMmL\gC_ Y/pIDrsOu_nsomq Nt*ꒄjKeW6Td~; E7,ڈtfZXH;o!>Ņy|VuvftD^(c!l4Ip*zX4 $wiAqt2Bp#-t{O/ТUٶS7AA gT0p`H(@n35P/5"o/*^h-]ڣ! ms"1JS?A}TBmh4IzrsO:Դ9&^᫁;{v`)=Om/EIJlsFMzrY`KjA e.S_s]_5uG3%kH }ЂO`M#ёrU"ZVZ =&C & K#2Lb`Ig,1BM<5̢9G\J!tܮRca1g:0hǹWϪGu=Ǣ@@1>Hm]3@?ݯh bzm}+fѻ 0į9OHo8O\dGO:6+@bu@Z&YvyuCdhLZ/H7|9j%>ŵ9L4SMnY!&M:E. qpc1`J_5Rm9:S<3Ul]A\ҝQ3H-P|;1M|:&-שB36 e6_C~kAIO*RpIYӪ`-xMR o d^=VϫdD)(tCkʜQ/>nmV1XLυtyYnx*>5KY̥|ŘWDdo9m!z*T$ء9ǴwuGak-lڧo\9FPɔYʥXDc]Lz tx#}ryH 2dȽ_nY1Rk3@wE endstream endobj 246 0 obj << /Length 2819 /Filter /FlateDecode >> stream xڍYY۸~P%TՈ&xi>jRމk$CBbTrHJFh4VU(8[WQÊ~|oݫ7d?rWR>6׮Z vy~79oL+Jbf?כHywhw$7Xiͽw-I7khEoچ>R7VϪ&"OwG[~b];>7+ 7[m!,?tpFOIi (sy7;cdd~'p|}A܍ҩ;>4Éħ̩z_}?Oij"M_ۋRQ'y,y73f /cӛ7{Z04B8[119DM{OۈeXNuŴoƑz/+;4ߑIwO8hK"_%"L-,@tK9f]"X4xVE]g'C?q 'l8a;2y gdyX+cݵVx8HlHqNdGDbT|#qSAN[{vhTMdd;^c?4%}Q VXSxFύ*S~2{+T4A _tB Sq\9W˂skKoVR ntLjc8Ӟj VԤ|4j(CLsm:Y 磩53:V0ATPp3 Пtl;XO\RҸ [,$@="yG@:x9v7-~nk8z%vE#KǢ?zH[-˭iu];E!=Y]O4 1<Aq8ܰI00'Zq{ N({5_>Fw\:܃䓙>ch7$иdɶ &GiQ=n ʥH;Fɥ2*'hUxIZcTb/C @'d:0{5"ǁZÐ]-yPjHm 6[nN7|2D̹Ca+N˱`; id|qa-Ҿ84X%:tH%3V:k:ǥ@ci8ʽ$h#kM:q֯ 4.(!Lwg Z 7&g-$y\tqN<̩21R)F`{HhM)dsL%(?zço<LJ_K05cWs,Q`g $'xM4/6xuL2n Y!ӭ)%׀\%AF66ʛ xmMaY,c 7C}:AƊG啒iW0ҠB9І-4 \Xh~-^~+K}02A$=eE&a&;yPS]یpq ą? 0kǠ+8>\Fz%q=\G2/-( )t[Wr݄6w&3,HQSW&WYL‹䫎3S,6#Tbq,<=bF#Pq=6[,*:݋0 36xW<0鋦L{:Z6MOgPLH$?tP XSLpؾ@ASO{ W1'!s2+{Cz{. 8;Rr)ᣜ-=hthOB1?Ȱ._6{A&ȣS; <0$. cJNs%!9Ha#^ܜʽ{}k]W֝\/a A06.6%g0ַ))׌ @ 'w.]. vQsvA4{hֶ)GSr\L^\br>->o8)  :LK[v9٧`=T[M_k"?nsȐ?eyYh](܋'_5 6fgb!ҰqV fo/6 endstream endobj 249 0 obj << /Length 3157 /Filter /FlateDecode >> stream xڍks6{~_N*z?-꤭]ӻZr+mE^jr̊A_D_EaUYDas_=og/EuT9?jTZjiȂWU Zsﺇ eL{]AcT;4ERI~I7KaqQTYogZ=/Q[s;Xx[m"(WSYÞdQVƠo#4<;QsL%FwzP;iB{NNf<֖60?5l%@=wⳫ2-A=jfr5&–n]Udu̞~Z9j϶YDIM,P٠Atev͠3(@tѵ^s޴텣D9L,$aM*Y:Tz,-`^ތZ9AhI~0褐i)XV]uGHGQ粴ewbMǘwyP+&/ GX{:Jh\{d c5Z:x^k:ƶ76j: ӄD@u~ Td[8*9+Ti\HGnU $(^9p;+Lǫ pl;;4n{$Iħ Gl,"^;ɲd/И= dšY=XC1G 9LӜX/P݀ 78T4 gw^!i &e/syz9L7?+R^ Ƥ8t w5ME`"EiQ]ol1pĠ|Cqtx 4M"N]a5]{ju)|VQŸa.0kk.>ag8ڵm=RIE.75qc5`ޙ7= I2 ,9\B< ~0YS(%@26!):k< VWH.yrtyc``>&+W5F$J1hn-dNN뱷]E\ ϒd= VLTJUJb1GҔ S'EsMB&-U{B Nձ9gT<X4>TFLҊ9NI| 'ő> ̔:XژLi씋bs!,l FK2Yt<(>XT\ fkrˑ8iBe&ؕ,[(g]5OTb7|pL.ly9N$T<֩=<WNJ:@c -Z ys^0 ' dX5<E& J&^(`tٻGsRbo¦92/U:Nu l9GʄZIe WVF tN0ĥ{>av+,owμw'Cn :K_sj`ڵp1>pރeU |#'7XĻ.=DNU@nչ9fw`5qz=? >w/2˥w TN}h;((q #OR$6+94u6M0 +ӏkKfo1|ЍP𸨈mvKqķj) ۳Gg, >۱'.m[,~o5 {.Ky4Lִ`_ɛA2܅HJ"*Xz7I Z@::z5ie3\舓@;ܾA?,=a$gnbĸrkFo9bnUpK&5S ?ZW3:2޴d\&[|I٘I,h7 J<,PKԫ?׿>` endstream endobj 253 0 obj << /Length 2915 /Filter /FlateDecode >> stream xڍYK۸W-*k—Dro7v&koq\0$$1KZ>鯻AB#:F[MHo$+<ndw/"|oۛ(+"yM꯷$IW?< zkecGNhƺkeOuiہlxw|mOwEfwQs>IM4ʂɤ̴yP׏hea2}(:ˇVzk*zg*4D:k]A R2Y. IW/ AOcbҞG97֯ZbѴ]Eq{y,WH)]wi+F mMd 0K8<ݥa8-~bC@IGz[᠋}lԅG.T;k ^ H.TI΍1@8w|{fGf/߿'޾ g;49OtᨓeFiƿې ]FtZ*̎f'rx#HधJGJ%^BEs{B{NG4}[Ea;Y+qO`4sxhGo~O ȐTb4HrOOȚ۲0u04a]WD\je 8l!=, GhCx+hq'D!_ǁ]!7L^g|ؐػE,^p]_n>YQ),*39D4 ^S_Yd'LPKUXwg(qzM8XnřdrhζxcY2<\tб+,JM>0k&8qd3rbEy@`6Hh<Hg?4_Ӵ?3զV?f}Jpv@׊Gi:QlAGJ? (TL&bT&bT<#eN)dOAdItQ*3ö6:LzFHI_\n[+2'9%㊽mHXjA 2u90\^7}RqڗIo~І ڗJPV1~5~ٍ*}k5Jۍ^΂*P=4^2y>h-swiȩUgCQ)\KO3UA TRJH|=;ҶW_!<0Y?p^4 endstream endobj 257 0 obj << /Length 2528 /Filter /FlateDecode >> stream xڍYYs6~Pe9U #oN$;ZT*5XHpDUR@@7\ *CWUʧ ~*q{wF~w꛷Ir/]ꮾ{s:a_w(7B7*ŵ&d^uTTNzyORAfn>aS^y|Źga4qLrۦsըJJVܛ>Ip,~7yFWb:u);)Mzjw'Ҡ@}%)YQ=lXͬpèt_2|J8<^XAsl(1vnP$9|C|@!i Z;xvQ|Kܧ|P\-|q͵]CF#aT룙71rKzJzFeNd0V40qϧ8j%%􌅎m֟  ~p=bS(1X;<<,`&8EVF#zZQPE'4lIbpy8_O[ 7leY,jYXʬF}ٱN6$#a0z5ùo1;ʭM-^ v8@ drC1 m{8mRf <k~ pI!lu, %Z"j5AguF[4z@hDNm[{B)+0 :O`h>Z:3R]chmy}M;mJ86 4N9`%<; iyMPU0d(>b`!.LhLc 0I Z K k@]^kn ϧ;9z :5xImϜB9cQc\xkYeoCfقUPTtB6!5yM,,|* yIS,Pa)6zۺbsg+rcD(+ٹCSDA D A9O02 MG1>Y F_Pte!zy(A(\\$F?*h5*\PL}й.huuVQ!ʑ)$.0Ltidm$'&`Al~͡ĸ]cؒ-fjeQ߳ 9U&#[(q-L 9UA!5 CWD w?sc+ qc}a 4Vlulfi^.#4=Ʋ7rtOiJl4gx cZ̒ڠq63V@f6Z6S["V5'G6<6s24 pR2' d}Z`5>v5܄:o8b+CGiJ$Q06#;D8!bTl;etPHSoB8ņw a캧sH 65OYʝ켕k\,Ĕe/Nb J54tգJң p Y#?Yҍg\rp% [bT8sϔ<.Sn z}pSSK>(oyal<@ X#C|ZoPEߘɕI{9|WR(bK$=۾W 2Gi5Z7<:p6ku#_a80}ay[@+q`-@0/B t[e}˺Q/EcY-Ђ.y@z`dzaZzב;гCeP|YVE.z}קM|I#>F q`Vea" 4^(Z6]d?J` TIXzn,ʢ{\P sX/$%ֽrKύ6U[Ě!q␅$hN z` 8B3 Rrw(h5 Ф[:>Uv%wJV7O/% ~*ˁ34aȈ; \J;?i%Se}A|;ɯZ <."|z`΋#p >df2ag5kE _e`` X> stream xڍYIsϯP%T➜fLU*Ɂ! 1E*\v*?>\Dt ^?@…HE4H;a}}ɼL\ f~ܾ0\x:uSoYm?rIUy}'~eN>W vvIKhY|;U60ыMl?}wy;gu;퐚5 svPLm۝y>QOuFs P>)0fE[4P^%"yCf4nل|1ۡLdrX c\pp>^4^z 0m,а)XTUm{-V& ? C/oxK;c?HK Ñ;Y]gazr ,d~9灆2Aphqu7{l U5d[*_NŤr<<:!Izp cMvRL-DY5$*C?5 :xM KVgO4D=$6e<2CKRQ-gP!1'O9f^X\ẉ.@Qp a.9nhV"ۉ5Y"FI Qt=)FI7Rc- Xb{Trꍐ #['fk–LJj8JH VJl6ldl/źŷ9BLT7*>jGpЧтJC|U0Lg9d SxLyaF|6\Sqfl98ucㅘ#t+|wZ9P-cg'i4E$u@X3En@|ziY 1ZΙҕYĮ-q9^jDs!m֧iBK*~G 2N.pizA^P(3rRPYRcScP078.\%!.\׬|*+(P'JDNb^)`hp o)Δ*{6F(N;3+啉*I})mC`%+h9oLbnvEOV'kL+"?!JeUirg'1I8"ņ#DV͌)v;m}@ n Б"sGB衐;<rC =r0Jf1м32t@7gC!$ M$ }=#N@i`{LX(Gea6;A"C dk=t+T ΁_f J+R1#sW/mbFl[U;ZKW/IV@fܐ{8rp3[Ia Aq 0՟ w?VT4BBflӫAB{~GP Ư(-W  qO.ʡдSka댼鱐1i l S&c;۷Oۛqx8}CW]U&_6L}>%1ټ_[2}K4md{{e3w <}JfY^&aͽ24&(wbl,4ž@zexTDFu{0?iٌ{ÑԱQwI1-o4HHPmy÷ jUNzS$uE'._6fd' g7W {(\,'[|d9ca ZS@ CrgLy})'ދMp? ;wR^&(^hM!d&jF]+l kgt$ 9*GC>dJ> stream xڍYIsW2*K}M5<%3Jer r6"ݳ_6Xwݮ}i_Eu^f+:210~w-L7@Xݎf\8 z,1|[gy ~Cj s`aIYkPm->ўSqi%Q"uG?PWT _[ ;'s߈!5ix_v}g^ϗygNw6VdgNqzэĄi종V=6ZCpP[Q3W|ۅ1`^F»Y*HshT˴r,V1: 8OFwϲ IvTT#+ר%gwWrne^vd2Lz8LLwwUQ :"v-$U e6QH]ex\eU|Œy2؎I2c5, t)P[bt,/ahOotސL/ln? |Oͪ+MJ.v3P'Hjښ[/=-99 B3([%ڳȄ8@}aW$gHHUzk9$nY;}03pUZ 5VzNӭ)ap:@+c9*i'P׀ e)dgeAWRqmP,Sqf3{%KR[w<'ǣMK>~/ pJt ȅ\ޗh27 a:8K1&ǽ*i)(d2rIf7:@aE:`&1 weMY ym9r%8˲atFbÖah2찼I5&n}c܁;TI<ֈ>jGR"wmGINFg) Q!#8ٝ`ֲU@uƞpoTj9ÅPh 1mA]U^BXb|Q^=!T>zwfq>^"tDNtP<,)՝>GXw >I[9|}oByZ Yp^^PaH>zt#ʥ:UXpe:gS "7xe*7pzYz. n7M~2['SqEKHs!$)|/DT#0[wnf2L)X(a .-~JFm5W|4f`g|DKLPn8I6! }ќ$ o-O\䱘<@a<`>@@4>#Nɡ/А4vSybN_XQ.&Q5FHGRq*x&avh#"0[d%o6 (/NOT5)R*Rn 'G1|S˱:学H]Z+: ?2U?eG'i#F8{,<F endstream endobj 271 0 obj << /Length 2236 /Filter /FlateDecode >> stream xڍXo8"˹@Zu{]`ҹ[iq?G$^̢@-QE?~(bßX" Ueb7uAϟ>[8^Xl]Q/?p 2Oեq л >^g*E7!akMM[~Ӆ;`i$^_^F WAΟe%$V":zLÿ׏?$?׬]b%R$ 4'/;Q'h ũ^k0l]fK YiaTJ70R;U 16[Z:A'z"\X]uW6+&wm'rGDFyhH9"B;וliE"A?Q7 |gZE!q33H큩'I0qJfXQAZl== V!Ez}F)4i<2H~E9C?9M%jvvb<1(4ZYd=mV(q/b |?Ei~({FbFZB MN$1㚮ijthB lě _1`l =@_OwOL^ 4a~C$,NomF)8/M9+ZL endstream endobj 275 0 obj << /Length 1335 /Filter /FlateDecode >> stream xڍWo6ؗ@"G)MV/*sEz-Ȼ> stream xYMo71prHFA-)u'h $oNi%ъCZc83q8$wq'2yb%1 }) >^\fb|v&&gO`A@2-T$O6 Eahj *a@,Q`\8EdW 6ڙE&N-xtx$C>āTb!#ZφxT" HТ:Pq&A*@/#)0CѰram`9(1H#z3S2,ct =D C9i ĀiU1&8PtE RaȂ` HDxU`A<b%xY9ծ Z@P B<-Zd pgrcEIguB#  :4FiBaLY5 %,Jd#NҠa"C+I0B" 'G CutEmB(JXu GGt1_#3>s+Ŕ"*Й> Typ].ΏgKsbgOҜR#/>b6?lEÇjq}y>62{9qFA1%bU>bN4_T~o? !O##dmdjd|՗ \o ۝&pbxV@Q،?.^, X|p<;<f~񝒰n/H7RzC'ۀP\ !wC(Kh OM<[VJ .uˇ[@JdՇTv+2 дMKqX/YϿ o3R޵~n=dR\7e> |i nCF\8l g B{-îGjczKd}oDm~Ѝ'n P-v=|o&*-99_P95!!~; ܋]8pl)n /C⭾NzRw\CY}/HwvS;v-wﲛ›~;[%v}w|oُ*aΖ_<'*2Mɢ߿I>Z6)51䗸7:R]g$~wpV?% s;T!Ԓ"beXIT[m1ꊤ'*z7ѫ4ZirVhBeүrgQ#ZUn(B6|Qf4⦕V:rtYIOr T76N endstream endobj 290 0 obj << /Length1 2154 /Length2 15603 /Length3 0 /Length 16892 /Filter /FlateDecode >> stream xڌP[ Cܝ0 ][p!Wr-`VjY{w?@A bfosf`ad)jY)(6)4AN`{;0A@78`ouX8yYx #;D`@;l(I3:;vf6No@W hFu @RD|So}N`g'F'_Jvvfb ;g';L݃ߗkmgfd33K HFߜ7}M-*MMlzt]@>^t/gaM& of;zo`翟 &+fRVQ:EE^ lV y'Vv?-{ 4ͥh6 Ag`6}y7eۑ~@[ǿo o`Z8vAv̔Φ5Z4H ף|oejpzɿ]ߒvfm+'g~%V:b[M0e0A\&?$$L Ib0IAl&?譺V]zUW/~˩TL[?-A翈AoL"7ەO_wdv&?ޔk$!I2#/?(o-X|S`&dyku?R߸oo:s~S?gyk鏰 '-矓z{09[:q6o:#M?Z7n [?Ϟ8:m~-߯6d cޔ/ت6Fa{R;ŶV* d$_7"I#+^-a*mOF3mK؃S"uDԅw?ykXC@vR|rFVøsr(9S)T6P`Q—oAHOLZ)ACx%ܐA(%yv?;a$L\Et/|J3W =A!zial:imva)PS6,Pxܘr[xtXǂ_Ar@ ̠b/څ_h+Ӕ1a`@<2>iLnlQB=-K#6b-Y==*ns8V^n ?WvN/*(Y 11T>,(^IHjL݆cOl'Ӏ=dzFC2,EC_yσ,̀iL75zg޹bpTzt5 [~2&43 iCf WI/J垧URHz#.T.xnjc?oM $ Q[,FMLygҜv.&nk6s: #\7ICK_|l+"X &x$C+>ѹ*tgw~#'B|qbr_ %RFa1_Sr6 H֋U%[sK >dWfi'} lC)=MRź#''ʤu-h$ӐhkX2joT ǘ BwKtAY^d){ZlKAYHXV]Dx{َ/C&DafgaqǥykNPEY-R? -/G_}?)X;ӷ$&{ÈY !QDu,9ݼDPL֪\}2Q! Fx;, ]UTF' lEц}m`N3G?9=h!}nRn&H䶵*̊oH~r+O M<~x 8/FPGt*?q7NVX/$*vb+tC uqWjLQ<-Nyfއv=_mzS_8Nw^uFqoGAO hj48KrJ(UjŹzjzk_vԅ jyG `+zw5@/4].]0mͮ=KMeax+\'Bv"h[j'sLB_Q'Ǎ$9+Hמ8k_T J!2%OAT1~!c#(T PSXhe+lR>xT˹vdÆbgsr2Hu)(U;ɦ?y~x P_lbċRt5xI!lup`N\2tT5JuRDcJuiPE)j[F9HI zx6O֑oZk trM-C+Ll|7\yL\=c ;vɄv;"ݘ<5 ^qygBxǮ,o_c^waK($h.vm 2V]?97mdCD匭 4V^ 9{!7->oM@tnf=P^XF S|=E̟\JM Y@(k^t.RC$<~j"z;W9'A+2B&03H҈K!NI^3S/2~yGN 8"[ { Q ԃ\U92B )& &%;NaŧT$У(.K{htuiU$UUx6;Alw4io>>u2<@hce+$g{S*{+p-`MÀp{GTfyە,Z{Ja $qI ɵ!6G7o{FkS Ƀ5z֏->2k8bSBJF#)OIL$vs4 Yg5MH%LGxkR ^}+pi /k ٦%1Ӏy!oO#Nty~F N_jq%`o3/-lxOمky >K?Kٲŭ-]݂[D:O±%fL3"\iXӓ~%l#qx=nT5K^ki!tۜSCYϡXq!a&$Zۈ՞zPLS5jKf*1A`*yT`^~8.]&egк <&\!!u35! l4C/+=&W]X@_Z/(j רks11⇘aGiLkuʭ>u@swsՋuU `BEۦm[ј|_s6GyhYbPʌ0عOh7Ҧc>I5{sLu[r}ӱw:C*TN#Z^K##L3Vuj>/Dza3N[p>zf{}чP$TT_ 2e(2n#ͬﴜ.փ23tl 2//e_kφ+)\t'MG6.%l Pu"zceUhן+@&A*oCGvAK4sN9ץnlBާfxv$emJT5W Ws)fɡF ( bER-0Xw{+m3mRk'yOy˃Abu҈HLyB *P4,v{]`.m EE3Q=,pV"X|#>8$A# qgƄ@|FH Z#f E<jP3a0Cm3ܓӚ+? ɋU ͻLNv6>V6톦c͙ń eAT2ms ljդ7'+p&TWT?kv 'cG [5fSMLI &S9$n#Y1CÁdY0CF~}JH vT@ssQ,[34ZSUA&xl#TutKz-cdcP ~$\c)YsB̉}W:Tu,0oyeSZCpX3s\TQHq9gq1Mi93nIsa}Nk2]$T3;YaaJC_SjyP4ӰI\uLķ㐐z^J)3 ؾ$8 A.m.IeuC{Mmw5(+R27ZOpN(ZIƻ0 >w~9\l^=mh |g{Qk{l P״&)y9|IxKN?I#%8;\Of%gޯ0A&Lisq[2Le}tqR^ D/7Լ,y}?^"j$$gHɣԵ,)Q IOҦ{:&]ޛx{*I5H(&eK5Xɝeזt|p$w9i=3 tU_Piwp??|'P䩓NvsCۨ_ỠF:Y6O muR 򯌹nxULqɓ{+[_B5zvU:^axWWƐ) Z2h8㯟6 zg=Z 9Ij)>ʭ9ӧo9`v5Ӓ⬪`5)DŽf*%?egpFEg'CIN2V\nrl>Ph/;)W6wk EbS -Raΐvi@'I̺zsNG %l\5c&U|9¯mz+me6آOeS"bE( N[90| wBJH}B#ob`g?|O ôSvfT4KNŀmpԠ@1ds1IV>p80K*K,!L*ҏ`3JUodR(bO"ųxXqW?^u5DkP$+D3&T֩`ZF%)`i[TfDT=Iutߎ{'؋/աv*|C;G1!ïcaգAzKͪޞP%$7x!OF#bd ,.ئC4,3TpK6G=RK\E`uj:腝R(xqk>L<(< -A)hzb&ʥgĞOSk?+t7%tp\-0aD`֝S w TgʋW2u&!ܡ2PhΞ,ȝ-6zv(# tz|޷:I B)kҨ~ZfflIe6y5<Jwjd@v.$ Z}'ieg9;~s&pVrYqI\J-,)E%wrZsDM~6-X 7mIj37Rjr]+,gF*?&[dmQ I-9)ja?>]M˽2jŹ0TMs6g&=5;+tAٓRK{7jyy|BSiq@$ |LL=vsVZ/)o*bI!!9r7ћx=]?e$ qӰq3rwʏZFAiduAi73%C#XwsΣC4wX{P'EvZrkpp|2JA/^ c[ #?ٺܠeӁPTӱ[l/.`#kf-d0~q)+=͗H#(RCGUeH?5^qK*n\Ӛ\ʇ=A6Rݦ9H ;=΅EOؙ|D+N@TT>=Q' +~ڔ;nYDRKy<ۭ8h.]gl'Yn06IepVڧK f#9X3cv; h *IY|̀N\azG̴̣ /bnX ]5jvHՅ>iP|wdM*3^gjk$} ϕ}B_He(ڒl£(b/lV0-JpDTvWL|5mNլֈbswhiE)}Œ]]X)= :nNMηTy4K9 ({4\A'ڝ1_I W]L-YCS=OV m#eUHk`O[Ղ6P{8TN{WB-\A>ˈc ř(_bXݶx[ɍt6 k]pf S2~hD/ |t$gD;<[Qى8Pi)) S%`vble8bJ),6!q6󒋻RD1⥜fxliWeBE^8STJ*Qg:(D88*_!V=0?av1_^JcqF+bWVx5ɸpؿ/0rwau'j*חrWϵ,FϜ͘ N& %X~ vTc3'xyx2 k͘ܒ-򉇯M%j8گz#ttG/ܘx%"C䰷VH fƈyD;WŘ6.hD5Q$8&AMYEzdt CUR/:m6m*Y 0M.#W2kF3p(!GD$נT6^Z2i1vRp(-%UhAۆQ`'^s5PVaOūBm`RwBl|ܚ}cDJB.ؘv5Tc3/7[vv`ћ`Z_.%:?5sq?oQ᮵`Ԣqkk m,/OR4( Q` gT`qzf,/U`.?`"$6= ;yDD1+KNЉVC F5ĉ *kG]+Wl>rIRM9`hizq(~˟++%B>y M+.pt/v7~M%ZY uաBgdjU!R-mqvtu~"O5+) ҹJ}qc\z_etÁ\r3 MaB".$yRl`1mow}!ZJu A|cu"3V$Jo άj㌶W:# T]ŸZyOw|m%şɟLB5`X|Y8ٷ_-+=0KQlar&aEO/6ChDΟ8 r!FH\z;!пKmv%MtCQ:OlޕuRY_ gӚva;`5z-O؃@rW^ `ѩP2ՇK;H@voeË^,u;8S6fnŲ :KgGNV!_w<s6'6~Pm~J!U ~)Nxv~94/1uKu,u0r@U{9aSସ&`))_p [ϣ;tKǹ"i6!(`Cj*ʵ-ҡ&4XjEPO#õҬ4U8?D9Η]9 5aG]-,K.y P ,⒎јBE<#(>μ%J6$Tlm`ڳ|Wr~Is N;=tp8Fuj25:P鿤۞m D|-Я9q6\7 L]!k&` y ,cS }ʭNNϻ9p6k8?ss|TN#MN'Pc U82V\]әV䗗2#pO|Ņ}&L>&(0(dv;aLFub^)_H5wգyZ%~I{M$o8 W` e':1'4na^g,#b|]_ !)~z蚕Gp؍.xHy[EG<=aJqY?~q/[|?  Ȱ mntNОt}gMJ r]˔d^U} l_ րJZZrG!-p!asxS]kwAy0f\ؚ~AɆbRD@&Εj#: (m̫$/zg>/p_kTu;89}:1'\ɦ˔]ƕ/[ "`/5Am3tqQt6뮆7Ds BIPgſV9w0S@f!;ʧ0 RbgnR|d[o% Ȫ e-/_q_%sXj*TjU9\>T}zwE#=XAC7ϼMhÖV'l4}峝jSr(#wA_ER)2qs]l3tHBWI%Jqn(iBhƿN2 TXl*O.N?H*X@$D/WI?'L-rL1͸LܦFH4Գ;N8JR ]߃ӨX@"NQn;gv㕻RȺj mHDdۡLgDmD%+~QKj8)LL]3]wlH Xs4']}g.1Nx=@4 P)bU|0AtAU{mk>7(biH8j,ϩCXSZ,Qq dnjOG!Wuet"^EϳFM:Z"ng\K?1Sqp^FvE8vF9pZy a~\{I~݀8/L|mmvC\:{,cyAzXy "3'qI'x6͉TE,YͶhBUx=T }{]vIAG!yńvaDܼZ^SYGX.]\`C"Nl4مyx^Zq&L1(<ᎏWo拉ro^Y2ToW(%v4o_OvHGF,+0s zuJ'=^HN mXvC3TG?@mfepM#^HaxRv٧ßԛ|Q!Y|ޝ/?; herȄL_-NJ&6uCuG7 %dk1qNht@,wW በ^ riʙC͡l%WWg+guE,嘢{ - |lgX(~8䘝96ky[|r![[ݥ^9=4UKkHnRށYt&adlCm>q y#),`uqU)'u7RmP;^$^[d8}μB$1㺸U5.#}uS\>5Ⱦ[2GDBT ːr#]R{qXpo6y w\oېG()'?"" [V{zMd$vA7-t\,MVg%Uf; ~ O :.㲄PĻR>\e$vhm'C(E)!'}OR ^ %V{*(RɋHbã(0xM2fzqLuWfr]~&%qס. Ǯ06 (9jS^ ޯԦHx[߬)(9DR',dpMhN>UX&[CbR6f0e $/d1P_=ž[%jZaW*z!l VU[G'mc{,і V3:e'f*dk NE9fƻL?61؇QLU?Zc2p[w7չKRWoG-IbGCf4ӧ# b kbhX ΝG&|BIkĭzAjɀMߚ%:Q[h j"ٴnu R1% : Z>LKD'OG ",n?~(E4ᣮaFͪ(/@}@J !4*ėb0dF%[{'7Cul}i 9>p{/:r@ڗbHr[rjƍ{0t%?-sz ATIanXk, SrbCJNZ(Yv>`gbF7bbV=ypi_twsr Րܰ]VtTVJE 2"l|ؑ§ȯ`Plm7 }EHaД AҽbqlMMά{"*C^)XwW&ǩ؃sTXt܇T?0+hx9G3kiJeàp˂88dW_v8|xos2xaΩ^0KH *v?8 evҶD}7dc͓ȡ\/o/&oyZlnC-kT.*ajΰkulv=0'~E]QmM8ᾤk|AZ;\¹gB@h@DH>1CMAYA"eL6/ J)%ߵ㊻ ]:FcoWiܭbݽj.Y85cٗ|STjBK}4X$xt-W6=17kx( (T@XhsX KfzK ߉ՄzuBnHu}ܞNb|.9.G^E@&\ޠs2cDPXw`m|xfNG'yHXAj B{m O7enKׄŌg^sU—ʑ҇XcGvTl4 495!{?'aU=8e'ח:k]NaMdkG+{] 4N6pP![E^q-U7"M Y V^egbň$i\n ;9S kս. P"$ ~NV*6ŵilB1j})pؘ42..y*M~P&ȣ6]",>Ҙh Ӎ>u.a} =ZyHvKř# \?)p \t CFZ笎u;`9#18P#ʽ+Q|$dPLVM/ٗ c߂&$p 6% XDع4)@LI6'1?!H#RRz%R^YG {r~ mtvUڐbУj$^\ %n+Z8 6q+R_5\cZӨ䣽 X[+m[xq*:?.*͈0@ r endstream endobj 292 0 obj << /Length1 1559 /Length2 8326 /Length3 0 /Length 9349 /Filter /FlateDecode >> stream xڍT}6N7 R ҝ!K",HH*%]RO|sk73kn&:2`DCprtxy<<\<<|8LLP> ""l@S:xB¢<<>pGQ< sT0jex8W +""G8@au bp"hЁ`F D]]]N\pG+IV+a І8A] `@{߽q0tNztW#` 0gx8t$I5/? #0w( ` 4ոnM9.@G@_ :'.'&y ,N8듇:B@w~mapW? [nqEz0fAy  o75#t 8yt;,xC-!8N@ // !+( ??nW< f 20f̭N>A/0@B_*0K8w> ]_K dB, ,?B;][jAΈUP?,?X:W|X ?:)B POiovP% Òl>#Ntz8CvKP'(::qn >aK? !vpG߷," 6Dܠ !|nA~տ  %nؿC*C*XRul\| 7gn l,rG?L4zV7[<@qWM噟*9w,>L:Gf&CJ7uFzIN؆-a"zV9L(ԤVFN-<},m>*`#$4A3 +=D]4~.G"^jyRŌGi.{=-H$^~Ik§SJbZ4p )؃B2S<Qug:pMWQ%Ut@QC~9pXa2Lo7Q Hz:fe[K3{%]vr,]heVޓŖZEsrS_j f}[b=[CS@,diMRן=utCOg"XEkm }CբIΟ' @O)0{p\Lb5Yԝ=_TR)3e'\(vveUQȢ1HX/ Zwx?z0D70+cq|doT1ѣBPTq: Tex 'Si?j"++'ʉCqζf$x#pr(UR*ÉKҋS=(cRbO= LzY\=08ԲaPQ:ZrHxKNJhF ʇAdB ElV<: Wz~st\ i[_S, 2BD$-%3.,8xmr'ƶf8Cf 3 4*0]4-]AŇxOĒ[I Jg%* 6C<tLf웝^|Nha uJ[d?R~^~')MLG50Xx~e%2yu)EK-/:,>-usg^]F'ĭ$ DM'EN9#RP:?4XaD'YNt{+ +.qGY ^Ku %|V۔KNs[c>;Q(vQx>붮nr;u! ?xB=nJp .}ǫsJf5f^F=;U<u_>%RD sxğȍz{&mvrtHQwB͆>l 8b;11G.f%O *f|DsRLJ}IY>_j0p]8cyqK}#%!Go :knGӒHb,s*8q,lõOmڅܪ+! UgsRNFnO+lp'h2nRd!ߴ?(ddwlVΜ`6ȼ$4(sh_D$jh# &c)R|1*518 UuiR#6ПgO ̛r`^~! (=vgrY1;vrA0nЧ)eDdܾ)d/6Ϣ=$%ֲhqESHU!# b26B:]kGnsʯ'{,7mP̿ Q"m]|ŒnE4˖Aek!e%ʌBWq;r+ {r4s_mbz 6SӍZ%,񳲟9.s ae}VPfFbzW*eE:a6xP:jZV:+R 38#ziծDH+3j; ڝHkLjX!}^HV'*H$+"WuNI-w(o+޼ruuYDSNծ6! dNvƆwG# Kݲ؅39Lr/CݳTS>ߐ(&/SLMGnT.٦ir 0[2.^5`NhSLU;RYꉟ>^xEQMV^&b(u8_ts N$\ `ԡP;:1g6' fxցc6D~4*iP #S|G.mp u0#^zђ^`AI.X ]*{hF-Xj2ٛ>7k޺J/\:g"wֆgSb߆H<>^̀S_ Y(sOeR:V^&b<'N)ּV+3?kL"[tYmF>NY`Z)I:mAaT-w;1*Wxܙiˎ(GLxfһ.f 3g.vSӂ,҇XZ4o|c278 Tљ9饻96vGh$ UIˁ`âjo=,*θP>p=םʇ:IוJf%w5 [άcVѻY w鵎oWd MY-ȿ޽iڸel*R{✻K){-Q+[n\TArI|Y(ݵi*0 szֹGeE| N!ǫIF3ԡ*JeIbޡLXu:&ו+$Ux D-f/ix>jJFBY;͚ oXT\z.Wo pŁ#ݧQ۵9S zzVA*iAקoU.˭tF,?2 @C'c/{>:<'d׌G-:.최Vүcp3x~Ad/ۗ Zy]3Ucje쾤ͤ;ۚm[5rnqE8V\|T){g/OГ3|vbD4:5Lot?mtl ӝf\4opGRl\"1xat`~A*L\ḣ҅Zө1jW@!*JBM8&.:8vjmU] -Y_8$x!dX-:WW5+O۷hSWhzr7P%!,ŇO95"etq&7 jC/o*dju S>f_fp.H_A4&_ )qnL + Y͆-:$Y!i1!D?ޜ|yM|}4bK2XvL$+hwVipuJ&i͂tp;d/*Kc}q#bq_I`j'ʣStMS.\AN`vۡDǯS@.SOglfW3⸧B榞  Ѓ0c$L ,|MOJ\t#d~iέT-)z,˘d^.+mόʟ:{<аtսb 6;:xhd6fkfaٞՁKz|]laa&#F[QKadTGuL",E!Κף$;`xY3QN]H:7;'`"[F`ƁgESg.fZZ.=;t A~Ƥ.ۀEqN_@k]Dϟ?נ_iHlTZXu7ZuFtI#k}(}s1cN"+Mu¶$A-S3 4l\ヲgI!avbb&%FQ -r|I }QpOkqxrC4SBb>_Ώ&˰N3JLUjXkid轰IͧA7酭_y:5zZEp̓-|7%QbR02m'L%tAU o2R({{[YH^P٭|I5 k޳0T??5Gݾs[,noN} 1 +`oT/}r 0igo3>2#-Jot/6k[ʿ0of~À<1y)I Gp1;їmյ_=ꁻ H4ܯFr+[ǍfSrqr b.;ss?YO t蕝t ]g| 3(I+$C6x[qpZOɌAb+֋7y/ 1B5k vİ%P`*s䛼%,؎׋cZ6YJ_LbMrMj}Q5A?5<~r,Sq%v4Vr2YhHp&YšgvQhž.y"t{H+(MNךӟ>voݓcf86˯ |OJoyP|L>TvLYپa'9,5dA?:|9Uٰؖ:yQQLYE8맺@,d&^=FX7X6R#'\JH2"eFيIpچM,,;d ܬ)[ r~HXͧÂ= /6{s/'3"]J qj :;\RH'D}"fa2㒿^Gm 7N`MDa0uR?[jS5kMYV3NgrǛգ3<_?E4ODhѓƌFY$u zf _^2fhMIV82ݙ#0v޳u_1cILI EJ h*mZ9ٷ ?*]Bg`8,V/r> m~"v&8QW~ Y=nO!3^Q!!Ŝx; ~RؚOp"~uBW+8bIU~lx ;8XF:R1yf  w†\A$+-Fg=ܿeZ^1xj $(SUW_/:AKPvz+%}$@i CBu\Yk8}`e{"7~kO Rޖϭk::{w!u[2ye\v$Un!#>vE#/#?ntHO>Sgys\oxBPKd# ].~GwzKDFyS=!\=emSf6#RXQPK&jy$f8mA \]md}IPG:G^ N.r.N);R49zs@2͛U҄'qx|4xU67L8[?<ʾ3unф2]DCЂoAgJqJہ%Ajg[\u#z% -7gI@<9 gyȰgY߈xu:74>hc[ &oZ{)+BϏԌU 9IS>xB+7Ȼ4weosdb_w*(fKDkƷy,lx,0`6Ql&XuYl&FuJT!GM0LkM&Ͻd_cG:Mfus՛6oG 124ϳmQvpƖoDO2[&xf4q4ݵr;xXŴ-c/oQ Ď_Q O״7|svc"+CbΟ>*k8˧ԛ0%C^w׀aX=[lfaI~ˠ'yGr9 Kq$W*ZЊVIC QUQ,eS+7&3"ŊD;1`Q6XfKӗ.lѬ)ܢWGT5GoR'Kc]GHnɦ`ӓ1Jq#)J_ Z[+zU8V$\?}_+ :xa$Eѵ}5%I1:Y}koFUPч:]D(3a>75MiiCAHPyL'8d?UZv fKϼ{fݩ>EW|I-[GvPjȗa''EUQO KMbh#p^>%rpzaīZZ{7Y!LAqhXxA8]1G\x)B\d3>-2XDmSQƯpf.2 G\WBf͵/v*̧$?W@ endstream endobj 294 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍwT6 RDJD`Ih"^U@IP )7*(U@t"EEEus]Y+yg3}DH 8!0HA 1aHm, tB]`1 XR|K@0@Ujp,[ q<P> [܁Jp  A 8G+!#4AAp?B:phiOOOa+Vqz"p@c8À-!? o    Gb .H$dh poo } BQht#\@u]aNA΁, \ v!@u%# P  c.=!\ru#qXy} Jwo?uF<>K$ ;Z pskT8Hꖘ{AEzῌs5?4 'C ?,a~>i0; G'e1/%@?0tɚ0 oik i_FeeGHL($*AR[?B_-= x^E]>?ԅyt+JG(+"uw_v߀qExA# ZpwoBX%B`qao= 8o֛/  7Da_6–A ,M,apy. K:ԐP|D%$  I}5~("D.@B~@{p>h )0\Gl;CH˿C(LSupA,fQ.axIg`Nmnٳ}j8j8W8b.&q4=HV.]"2dmT9tpU1DvH~k{eI.#m/qMv;L|r}mΩ#z띦dp;W(NMMU|:Ϝbtz;+s|[K[7xo9&G ʩHTvIC|>ּ# zvXhOw-wzrK__x؇7UL&ɷg52j!j)b*_4};9"H»{>xӼVeI(d }4~f7&XM-4*Z麰[`*+÷J|@(% ~$Y6{8FTh'm7H Q}? NеxgWė${򺨈'~7h*NǛz}Zo- ܗ%.(8 ]}D7h-qtNSNHK-%r·~s`eΔajqfw]ͼ`a?y'Wf5=uA_pb&Lt3ZEوwI[V9\&k۵6ej?ڶ:={y7hjrJ^}J#ICH?z} x"7_^EoϷ+jqI|z2CMa=~+x?.>;B"nL~~{)04I7rE]hzcgrŞ,2 v@ߝۋ}EGL.՚~E}3LY]π7mD(#W^11zm[y+` 8k1WH`8"p!gPdaO|Ln-&텇T}W:UV;Fx^c~VxZe$2Z_,SQ? 7JS"Œ-gSowe?iލA_Wg :NSAcg3Ւ>xa\pѳjJޢ2Ff*hշ2*Dk<ꖼQ!E L1ȯ-6;!tKrJA3q1"< ֍} ӽk~;ٖ 'FyQwuc[ęTe,\L5zçpә1A_k`u +)pF'%Qc X*,rXgH;u|"WQkGb^nހjO"5GSvI ?Vy;Kʯ6yJb]LJМmP!G/3$$ג?=`Z@^ҞYXQlrgmVBnD3_hab؍$2J8aڗ338(3&t<3F]Ck*+&z{c1It×/-tӢ#Ku]j5kkw+Fz\@d)ڤn(Y[9n/G&FWc+ږL$K|f>Rxf"H~DA=45pQB;܋\MXo_V)ۙ*3ǚ2܎Rk".0pLMS^a $Ia/8yM+2Z@*a+s^mF mwܹ=zj7g([f Z˻L1dUOǛ,HСdyAJzKh(ic $U̼{-ǶSr/Ȍ:}: w6D?~ر ynK69i@CqgUjP0|9mR֢(+Ei1 /Wf2BjC,! vf$*~MlEMp ,c-pP܊ZbEsyLMt/|)|up`fTbcχ'~kB?X[_lvIQ&"BLcy˷YG+ [ {R \[ĮT׎n.nr>?hju:#QH9WbiX.JZhVpi2/܀SO >Ɇ&%L8,̑ %2s?~MPJ.=fAH5$`UƳfPRIŐK#7d.=xU{ȞsRA{^\m5Kg5TEx NAu?&u2U:[C393֌ |(%hqX+ƧfOJ݂Hms1JTe fR=]X~4!Zឋs"H`{@8.!.1xU:A7K,Dg'դ[=ՠT 9rZk=$3ڜ_%t,IѬɼ3%jb.ڸX(v[gT]FY[(G옊`N8*6:[zk\J];t?sU֊$39;>|g;VY=Te7 2N %_ivM}ݫRtSU-(t)Fq=vʆ9r,ݤĤq8+R}ydvI9M9Le3.jL=xeAVsE8.U\+JNp{cWz%nP(/zu9˴I8d|9.ҨIE6+]rg ')CXQ-xߧ~܌'aNʓR ! UI_űY>VMh#w(o9KӲ)@@ nK!a,S4X"ϊ˯F'DXwooj90a{` L/L9I`5U-зݼe{/xQez_n7<4mtonzC A9*6's&lxE+T եSkz.޿8U%ha誹ȶuF ~@[ϥLnsIz-qeqCѫ\<^3e~F9_\4 t8Driج}5o$*'?x"T1UsH-~^+%U{p#Ywq&aP⤉%ŲvTh4avgja`6]\+3ݏGwsKt4ljnvEA=d-[StjZ~^fZP3#mq7%-N&FCAx,6fD_ZI>_׊(fF'Q ԋ=|O{xJ_uN+3s0j?oՠjO޳* 2]Z d+_?xD9\WT"ܱeuWKXaC>OSzx'H0%/ ~Ƞ7W gUxkWB=p:6hn?9G$9%jJ tn[(k:b\a1=RZ߭մ)y xe+,t;c"[d4im35DcF5AH%DQtD!|  =Nݔ#0z#qЦ-//hrC~6~;G5ֺFMzIBg#WOU˙i.&?pg6сJV-Lt8<\]p_Ĭos&,yxVF Gͼ/ 9Xh%k?R+3y5;)y0\A=)d-*D/RdL}T16SI"wV$Av3/QQ | 嚟\8ҊA+}hPnչ[|2}u^c(h>H\I-uff[`9£xUCαw6z5tz0#Kiֲx̯0H38MxmL}Gv endstream endobj 296 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xڍuT6("LABa0$[mlAD@;%$DAB:D3~{}?};NV=C~E(FAB a0mp>aH4J!c``ަ hPĥABB@a!!h4P삄h ༏vt ߏ@.7$%%+ !`PC!`{!K9J h \!0,  ;&!C-{$CQP4T:PZ|? ODHԯ`0vpܑ(8ij p|@0 Ǣ`0lj TU qX,猂?YvppXvEy}E?ǀ:; N0u? ń$%D$Ł0' Y ivǀy#ma'00o Hh#Q0g1H7~ , QXPMOQȔq*)݀" $$,?x;bQh|~w.HG!'A rt !1! _!7dwloH{?x," -*;j\?3Hs4~egZk4v/DiўvI f&YwT<kGjDY icx G_ + Ʀm1gj 0DxQt_Tո8(/AZ(iF5,]= 'u%/ &5 d Uy6FOl2:T -_ܛ 7"BPpgt<xGBeRIGЕnlx%l_lq Շ_Yoz.Z\f@n"1b+;4Ij!#] .te& <2?ċB\ITj#$>嗚 7 4U[\ݦROi͌%ZzZT9u+^Br4)O=_?LfԢ]c#UF f}d?f|/s/sU{@Rcs+aU:h;\,iX RRl%ux1d"%qMꒆ|KYff$e7Qk.a+;z TL;߮QVz<D,2N|Ns=:l4`Pxo-Wb.;hi+> ?ɅŶSp.wnCe`aPJ^!M$S|{1K gwY2\ =̀|0Be= ~BFǤY 0GFBџŖLUT}N^4\aAT|~40l3ЗNe n]/a& ,^/+z`[,;_`Dy鲅]sp'JUfԂ)Ʊ'oP^&!`#qNOMUyI+PNqahN23Agc߭]'>)ҧ:Msͣc`D%Lu%K:Z$nD N=^$cUE ^q6Ǝ]9k-! >iV@ے U9](WR(o|@"Δ9K̼k7׾L8>׏ayi0Bڍ OEgKׁTS$< .~us%Ucݝ1Uѵ_t J,j ]⃒p7j]@bpTEFN_t$` gaI 7r׍0oܸeaA5YyPA})~iw6s|_+3<||/Z. !3td#d=?pKTXX-G5L7vp*rP٩NY ┪ůjvONF)_p!*&|Ua\[QV oτE\xAGrUvB=t+bŭHvDfhc_,!B=e>dj?nWɻ\ZKk"g%w f[0^ň|Su_? (51zkEWa|f m-8R JڴR3áDb[.ʖE?hkoAXc\fV^,Ztm^qMY{籨|# $ *߭SR3a20Oh{n7}ѨD$q$)Ԃ;G/9 Rڻ^ *}<9[fsL^`-iwmf,'<@{ +VvF,(*Cdg),VcW 8>S) Gp`VO*>&%Omot g_ra:#2"Ɨ 97cKTܣqa^={rÛ iPJ6F[Zիb&WU=B}k--_= .HF,`ZzWMWK'bV[IK_ica9 ,Jh~$3^Õh֧}RY(3q]Laբ0:wR]@g Dŭ37AZhx*l?T "Q\]|!hΖkAҍM$C$Q>A%~bvs#>bR_7T̿xEǾ6 tk@Ԉ1:cm$i9MU}-@3?nx{W8M H4, CY<V('^u}gw2MlT>8=z]0lFڒZR)-gB(V6ne-1NL{c#lc^ ogeծ~Й;d<ܩfp/#°y=܇Krɝe#cMZ_)GbNrZxYr@zNM_L*o\/iPa T+L,iNUuz6~ ,כX_*YU-\&,X9u{ՋYta)L|@!v3~4Y];-=TLڿ ȭ~)&{%m}܄4dTs*˶A[B=ǯ$ AONwew\rm_v?=yyU?3o$jHI6#d4d]+$?R}Oе`; ԓNp)},츅UG߃NiN3TW$]5Yjcij|ahZ蟅9 lH&n&H } MxHzRk^i>p?qu y*~=/Uѻ2_R˘aG쬶MF6/OnK?}" Q|NeiG4OپASUxtI^¶5fh"s7*=|fJ AȸJ(/BOrgh 55ɌjބI>e,<60)_aU.K/v=PX1,42z3>o$@*~K7}2SxP8ý5ɝmh1>mǫܖ_gy$Y_o(hJ/ȼ=ʢ S ^Y(N6oY~qZZ+"׊ ;"]Pn)lP֒I6djgǼ`̜Yߒ9e!17 xA?PU+ٍDv/G?߰?_j_율u++<3 ϕ-'2ᡟE/ʌTD3mc* &|T-Hyt(u1 6~LnY!O$q׹Z}ngydjDLK~dK$ߘݙP +sXIL|9*_ttV5> stream xڌP]-qwwwww6`Cp'.A{}z5ikAA bh ttpc`ad)0Y)(ԭ)4.֎0sd&n ;G `efCG^9@ tstvrG ?{@ hhfbPs4y+5/'+ = tx (ne\ ̀ ws &#Pr:e,=XYo߁lbfhdm` $ݼ& M\A&&v& 07HL@]+~uY\ vo&k7v0];PFo`ffa@/3+սQ*urtX[[A}]M<7w?F,,sk37)Oth =>$/"$NWՉ:z|ؙ KzweiW[P @qK@%g`6b^m(%߄$6nPp6u @skwq3h*i4Wv3k[k2;k 4- ZwJ 3G' 0qq1 8,[4zgLn < rrD~B&? $q 3Ib0IA&? $d ?EqQ@\ "n?EqQ@\ ?Eq@\ ?E翈EA ?? YW%WJd_ fhڢI{A)"J+ +(2K  k[i' o'/oosGwDXH ? 0@lAu:'2tЃjuC/5?jP0'_fg[X;^V9YPpgwG7ݿ"Q[o{6faX@mu +Kipd CW ՟O  ꛛ?@1A#1AAMCWf]@#rχo 4_^p4 "ɰ?!0KN.6+dV$eumWFx]d{JǓ߳Q~dщH !ߋf-dWYWBޠOSb/ -y"ѧ12fZ:y/w¨0[*avbձ -D;o5{-lVxfsH:V'AOcC wi-cZBB,Vz1kin!z2QW13rCs_tؽ5hnʩf5׊M8+:?S7:#J4ZtU(^M,ñs]Ff4F?恧\Z#Pd4QShhϭme!汣egmunՠW )X~8S3uQx-u=%Ϟ2T r~K_oZX뻔P?RdBuh|WS/ _Kmz׮Z}iHIzS:."uCSq.sny:2%Jĩ4*kCBr͎O#q|@~JpMq(pSϜ)3^R*Õcpk)>,N˳a|F[HCgkv ?O~>>*2D>Io,J-#@[e/LggSwA_G1=7Y +75F/B2VP܏E%ayXaRaG9BzV6Hea8jW '_js|x~P%Qt<[)>6.)Y =1Jz(GHNhGTUۯR0/C>>y7dqӟmE,K)B&*t_u΁Q!#RymW}IA&6,,Wu1 w@zHT5PQca6M m {O32ΰ-VX$)L'f6o"]3)Aݗu=Hv8@8tJ>Y Ԓh(&MԚȪ5.}EF*:V+VqWaȊ.lƣ.y {# m(4_*yHo7y1$P@dw aqtvxw@#a lN6 xs|p >]V Tz(w*Hq[R&,Yo;qzGK*5](/R("31cW@ytH<2JS,xd g<g'=<#"]<xն"^]$2ɨ^j V^tñ"_G$ ! ثr/Eّ7\琨vNk֖*t}yDM$hׂ1}bxNwLx-wI38MQ9œ0"5y>w |O}Ӵ6Mj@VqՋMq4X"MЪ#V-8Va.LvW 6e9+ :U0g&EB_9ɦKCLӍ>Xg&EmQ;kɿX1\E]S ]_9nBftߍ\:f7M^@%#6e m> :`v@2u tUN7'gֿˤw ފb}8:Lg11]JmT/S3Ucubd6I! 7|=|j$2;x{}I8ao5v Upĩ$G-1B7%6MB,؃0~zn["ZxA&c~[ZtR%u"̌CIKCɕ <ْW =^d)`^bUrQ54M16}Ze&v_Ouy9Jk6W_ļQ҄XdS5OaDR hboAEFzeM.pdqYfK*ѯS>Xn]7Ehy$4!h ,CUIM9XC|LɉFn\r{׈k[?}UqJ,h~h*bN Ѱw JF{ʆP jf1vUgßlթ.sPr܃Xgb|Xz Yj*eSVR6GU9^1~4K&1ҩ[m4*y&rd\vNgl6WȬX)S@ty\?H @v=ێf<!oUðmPP֑*#@`U>.9M(2*.mYⵖ '2P[?iVb7GZK0bzO'ӸeE`W LXM2 3 ƍ-BYW6xmR-Bݹs}I%tjB6?fjɷ]RTC* wsZ/ϷM-:M )lHw_*I~HlwY?q#ꑏ\lFOeJJ(#?L 煰ۗޟ8pMgD9j7*P_ø/N9ڬAxSnՑ7>*~*Mp292D^:Q4n9uDv^#wJ]Nq7s yY7~Ŀ9E֠vˣ9敾V X1*Jjv:O` Vm 0HFm ϔէ8X#B5&"HQ}MFdKl=,[ZBdm*I͋Uа=#:w>e;gbdDA&Z)w#wM,%O(nLqs[w.أX`,*,y  / gڤn8*aױ)c豂gN Ӕ#OrƂ2>ԂB: i0^TƶM-V;7rI>,juL_[n1Q2o:C{j ⑶b]Hՠ/LūφS@tĻ⤤).S ij.c_U~&V_%AO<2ڿ, ˳!w&_0K%NKSQGlLʮq!A_ج"R,"UD}mE_AIU'WSA&[ũO{c(=?=6ה_;rŬz-2dj-wnDzx% /wFd=RXײ2S|[,} nikOČ`!X@&}R烎!픻%HTkA{?{3K$ăDˀ Av|S|JVa1"kHvM6[acvJ&Ip,_@/<Ŀp@~Q #7Ȣb޾O"~R u@7qAe)Y6K t'[ Pȡk fMt+G8UcdFBB|sJXF6/Tʪ-VܙbǚO}ho#=CrAXUzZr@'L fL\n{E~bJl4>s1|c`x87+,9vF䒣dWi; 82&=?X8L2k^9Ffh%7N5ke3&u@J^i̝cыgv50bڑ!^ B͚X Bx]V/^+F>vBZt8@AcHbڌd'fϯ=sA%opi6}=qd+=,1J$\0\kqfh4;C,YM6QmNł,َ`#8ri[ٕ~TX]a"c;8en0"q-M\\`8{_&دI7Scwވ̻1yG߫$&Dƥ{Ƣ&Xu*ż#9sP}[lsި0 /ղH[6:x5qG޵G!fȭ߄_ ` KS=pߺŹwOm C8 PH$֗io9ʈ?PSŶ\Җa[mc3iтPO%tckR۝od̎9-d<"IqѶ"G-XcΔ#̴ ԛC`%p=(\M  p:rL'̊r1c/量Lg o+y1O*T3义k>=`QzQ'1&9в_ Xs`;tlO ɝ -BT("Z{]ҍME)䆍݊RQkq,.@.C@|!ri(nMqe9Į#.HR3 |0hh~bfw|LbH( X_ʏ|;7qPJw)v=˩1Lּ`O \Y$=5^~T E>N)ύMKqJˠ{W%45 ];dFMm[^ ʭ7:.( Y^G䣩9)3O=vb7wb6_}g}}$l&DucfO:`^>ga߱Y$C8:FGu6"c68ڐ-:Є[Vg-gt@NI9^n8-.>Z tTl6v36RS6]:~KLnTM ~Fڕ9CO0#&T>"=6|$^m\Gєh$Oy)y ,$6i9i6Kn*~tQgEmwrCaIF54:5XRV"ߢ%i7f ̈́ WJ4rFy,s&ӮS@2|βeIuCC)[aOwa! w_* #F]&$v,aʷY&'vHqbE7;lB8p&r8QcEj6L)h̲B [..0S<4o4DGl0IUB_d0˻>Q,8]Nx? LH{k5$}S_ïb<1=&uDgru" 97MY Qz% xIS}ҫ_wPx3u3"Jf)76DsfΊX 5|0ZELJ4-N qMUə O6+%IExy%\Yc@gV~d=|$yױVM_+möm[^唧N"}-o37Ll X6jCi?~˛!#}YiYkTF ~3;ݥA|xG UwJdUb6a%U|NEUW-dE69RIs{9N \, 0[%8>Ɲ)v>B8mq*@1XaPdt9<.׫m2=6lDX,T/_S>G{/*"J]P؋7+9B7N5,\p{[2T^r#(xW=/3"k˺4% dmZR{r2gHQ;@mC{iS)\B^>Lc J0&N%64/_{9$"/D67S2 ҽ2dZ^) DUˡEtwqgA#!<ɗ&o ,#T tҬMg٣ UMp/EEvGG n0ĭ_ËT\gu oʆkO-60F(m| K'ko?< <NJl3#Rhl\C{  NS{r?QycN2s oz32x}ha5T~"~ɂ4o7$qς>xVC;t*ŎH \k=ģƗo见_Iϯ^%c#ϰCfCpfGr"#&%pg݌Y?Gw a΄=ݿ&˻k涂 ؽE#D66n/i(Ik&Y~yUqQ/ҨgJ+q M22s{B-_5L-Uc 6K%ځ~TY& 4ut]P(P{=a Wz<hPޒZ+^]z7wJݪR{IP붱rEyk:pGq,kI@NoZL;mJ#י|Nc<'lV``׈ |'$fWєl|]北V'mO"M EIK-zaT-F2\{,yytMEip7rk#fTIq#=wz [w?Uy%cC)ŲMл x6,zkm؛,߆) M\6ĵ 䬁̂,Iϻg7NBMΧzk.|cxeRd oV2 %׋Hkhh]-Ak_/G~=ok5[nhaڢw~?EȎ+FP]uU}M{%݌$syF)nm7)ʮ˿U{m1vz}N}qzm3>Z-mNWĶv~.k;'!Vvb h|MwmE?:򩰳Zx)Չ|Ilڔ3/<{cX9|p9 >mON'AcZ5HJhIm 4|aai~elƛ *&ip偳wyn鈋vm9isM૪9 iWsyX*,0 &hxPSh;=ƶ3 C+W׮5iPTi6*8Q%֊-N)xP:0~sIepg2eF{$ujBb’-'w3 $)=2aIjǼr8mjkG;HL>$c3%.Mrr yEBv㿵ޟLe] 7PYOBCژVot ;.0]rJЮFf}t[#PN(V]򾝴nPNR@S1}{kK%I*W4|Vik} KI`.-Oj7#73[F[0a#8l.~մ`Ԟ{cfPKnMk4ycn{9\\==^[m.p:́)]4¶"]ؒxdUǫj#=`R a*ɱK쩀rU7`{ 1.OøƪI37uO%_FK/4;HkfJIv9 ˯:sˏL`eLՍU!v-1ϓ9H$qq%ZJK f,6Jgd@Ho'/Cc5vbɃlgF@ḁ_}y!6+u⽦f'dND5Blv8J?<i7j뚰o7^CF[iZV MnhAF*~}-Ihqt1d14sTgK;2q5fAg= uBˑLeөE:fvP\ I? ?hK&}pwgV禁b2xf.3c/=.Idն%5> hgP0k=):8\||Hq2Ll Gx>@[lf7+# 7v ZLh@8s|9xݕ]v Wý.-}zDդ}w!Jx08{sl|BG]Lv``v[SoGXi`` )uQX@!GMzr\ >P԰="H'W*.h=])ω7;-9߹v+#@ c^sM YyTךѹ8T0r }P\+4H=wT,2kp-{d"EkM"|`QdU.9!W姯-ha+Wxvp9k/PŗWЁQWUӪ={xۉ!'kU_E*\MIS$_>!6_$ʤoI˅\m(FmSP>,tsyX\GK莭C*b3Le~cN}y,]om9&Gw꾦M>Dqzb;i}R:l[b~ŴrdrN\ؐzhTLYrN+NJ↢N9.Xec;8jDBk) _7XЂ oj.~R\}e%Hb)آ-;6I@ FA ^}b{Lp̔ǚSx ˭8l酏{AԟX—%RbܯH8 =IrݕVoŊ Ψ.H0u]@:ERl#!B$-@Dl9- $ph KPcϮk-IMk_c29pԵùN ۇ 0nw %pC[h#+>nnlJKʼnIg 0Q ʨhIMo,1i^^-ON,=Ŏg)~ q>RKfkȜ.?V)eO5 [UqNJqJlAHȼ$c4D47T{mV1ҡ ݥyHBZL$^%)];bPږK>|uYw&"˽_Ȋ{ݮ=y>HLV\L-g\xӗmYOH 艨,6η`ZxB|`θ ٕ%DF[' ٙ*SclgR.U|˾fBx[uA3tG;yrOÊKs _.UUu:O50%eg _ښ6aB}3= O|o=\*@s_0q'ȕ:爼=atx@+>lVeRTݩhav}Ü2#1pe9t iͳ3caqzؼ_DTX}UPגƺo^=e`io!]MŨ]Hq:^oKDH|Andie9^ϻ;oMK'As*؜"Q5@D42l +JTE6;J,5w9ZQg NeJ[BHO{D)pDK\K},Q2G8kParC7[hxL=VvX=Ud1%ݺjɕ.)Oqi=([Y@$;&psh5i)c_,NhCIxF=vc@ 0L[ZhEhlWYJT>wo6I0Qڢg=0D߶oz')+zW?crAcBC#6 zu4PMj ^eXL'*|ͷRZM/a€HRdv'0}$a^aNi*QeVؚ=xd-B.dJT"B>4 WʤȟGTd'As%KMrd=v r4\or0ʸɜuc,IP!N_!ݑv'L-U}ՆoL/#nC԰ҫHx?VQRTO6#Q|]ЯLlyBӈ5-JʄC4.a)kCq'ҫXqM[[ZR#%u669nsSKm6r{kI |`W ҕ_:ɋ!cY_`QLIMǻ]̆i۷R){Z=F1vm]4?u+-)wK{sNpR8ˀdHs|6p.{6/0l(!5iGx8]% 8u i6)MR}Vc^f}gϭId3ް]sMr R#͊B xإ_,RIKڂ|Rj*!!uTT&äVG:>*&DSեEVo.Vce 1ͰlX},H*Wnx_2U<7vQ3kbP/Dٽ;Kv=57\>}vY;Su`H9A/R]3cV%" ё5SUP!v8BsT=|V#- *>+LUC/jLM+lxm4KFH`ޏ|M.%]WC5d3MG_L@Ѹp>~LX_@?vuzL֒ j@ ujc[e_Q 5t향2 )YbP; FD{HAFAG(:.ԵI4KVyL"}v+32P); z%/'ac4ؼAKȲaOUŜ;"8jgiBxWwLY3.I\j9~/~fI:}U)e pR>#HMwj.:yu`qdɞ>#`V\.!&q4mGr?Eh`<pd]{5r˵PJ5414LwĆ[ e!:x*ڂ@įy KBG=Q0H!AW i3t0Xk|x--;&*5*#lV;'.8Q;ȎU'c.ϔiEe R@%!ԕʂ&xjid(~+3ZELP2/>%EԌ֊C?\e 45VFV|wLu3eO4V _rzQ5uΕ85!m[GY)p`S4#ȡI@D o)VT$?9EmlC$fH (Uup@X/9xv52? - @` Sy\aڳ n0Ujo<1$\8 hqg5}ʤɽ Tlޭ.E캖v;{HyѭV-#G(r唞p:n(l#"I)XK8NE=j% U_v|i} C`b۶ $`cRS|.hDUrE|d3wW 7 : )6S214Z:]Ɇx3#n::S\Fw3 D|9و`_:޵--1E̼p%e16eoxl/ps`1*޾鲴8_4~Yea fs,niw=O*=k ]?ShMg =^06u@OPK3R㟸 Oߘ8act\q6Bg#Od㟠% 1KSAXb˳ J!%stS0sZJMTE2['J:xI,EL[I1+,o3}4ʺ`֎};y/VYt> !}UaC~V?>"sQ4rf\GKV:O=~h^5sRpZ.Ⱦh=P<8HLOtt+vΗ$Fͩ:]/=:UR ^8w7+ߎ+3<'ߞL$meV7*:9c1p |=-W@ޜNtqꠟ'D "^+ԭ:F5CŤ,2hx3q"X8#&/mGpF8nܣ,ުV{nPZ 6d3 !bKrF(A }jq+92cynr dl 05 ybO⓼ {0ThФrOuf" k:ĨphUQʜ #o뫜AVQKE&>] o[! LSoNٮC,\AWfp{7rh.sto#=AUybQZ[;a5,$Ae! sh,2Pwmז.2s9'ȡj \"WvjwY ?z+G M.lϔ 繠vZ_@M౳+7f/'to$]ysWC0۫S,[o)f>-PϢ}|\سŦ~Iq͉ ±NZ![u#쑖Uz*LWѓ dDvKY$=bOnlWqdU&hӭ?jΉ @iI2ksDmr$q]M/d5bȵ7Dr!l^OI^ ͋8AI䭖 0=O`ōǬZ<%ƻDVoOoAi5S_jϓNnsHaP!HT߲o GR j-#`}A]VG93yv,C&o"2/ÒͳQƦ[ְh|G{ %6: k/*mxIɨNl}e IIt(47~,xsq N ] fW5 7:TaMJ@2FrQ vŸP09 Hw?I?yvi}0^QCh "4VܳOR4Nր|$"fr5bZ)Nnʜ KRշ> |ROsF~AΉ,q߸Gz2NʊFb Qh>WAr`@z tV=nH܋&Y)H)TWzl[{!3jTn~KaZxI&ڬm*?4oVps"4jG}(./ʙ;Mrg)X|3y*qOH$㽖HÞk X'kIBP0FtGl lwӁ.)sÂ^r3ta Y]bmXr60ź Xɀ ' Eq7>׋5#ޥm čjXTȱӥAN!lSx#ƚO4]AyYQ\0`~yXUXoXJJ gN37 b uĥf.{ |l`ߣtP5d@/U j/#6ZQi*康d]ra7ºoUB ͸r _ue2+b-űP<ի=moZۙsYt|߳+L-IW fVWq2i3ϰu'fqag4 {029osRz ,fPd^oi}M‘.!|q^QV!vןg+aP*Kkv۬fY5&aWԙǦ0LevO]N_+S3 ->v ˒ERWq% s*>F9S8FNQNkϝ[~ D;eX2=4`|nL^wPLS;ޛC>bНY" WO]Mi?~|#Ls9.q>gMhr׮i]ZmOEM9%.6j)<yVCd|x Nu2_Q&fö}ҹ2ǩ툏6M'L?wJVNǪ3py@f4 g";< Q%k:*;+&OgdA|q39BTLyahzLX^h(_]#枰ڨunEp!A@Ȱ2uŸx6-7%󊀏&. biM_WȬΜ(Wiy:җVyn! E!# }rT,}uL;Wqq #nuTh塚\M3R|ܚFz2ec>-w[_A6Yzkj}8BWk t>hE" JwC )Iבˤd%җH~qG8<%N;iK=ԦgOJEPh)`_k'AʪN,k{ЪDf.^!DVE$.W0ʭCSiC Yr7," :GJF:F$ rar\VZ ~0uyhг'ld4de^mNf2$_re ek ]5gV!ـ=yja+]fS}~/t;<Ǹ:m:i kz;K0Ei?u0R>ۘ0 .K=Iķ*:hKѡyM$ 3_p0Tzn.rP4!GHuv) AlݶVz-'HR'B6l AOlm"+nX=!EMhy.*GpQ$@'bm48׃7ℓ<*eUȡq7@2xk1h>a s8vɫ{p`3ab~?l%DǪVacJ𣤶 BЕRNGOy@RJЭ&~ؽ "F,UZGlfœw= OVxǯtx:@]l~p\0qO0;,a-DcɉvhV4:>hPxWՍ.-(cQ/9-k试/|ҘU_ݙLnOCdq#O[[i8}kCBSw_ղb%o7Xq4LDѴ1\@"r%v\wWaQmìN%; tc7;~Z$|m68KIP gQOI\,T G\vUzuSp4 ΁:!is(30vwVy'&j=U_OæfB~ mnޥs3HPVA0 QorߨBdzIӷmpʎOO?C0~eOcYi\"?mx9WC0juةOiκ endstream endobj 300 0 obj << /Length1 1974 /Length2 15182 /Length3 0 /Length 16385 /Filter /FlateDecode >> stream xڍP[ӆ ww [p08 ;w$~%Ꜣ 껟սf 'QP2A6tLYe&F## =##3<9?vxr59Ȇ"@w{, `bffd032r'd 5p67l" [7{sS3\K2lTm휀Ry7l\jdW7[N5xy؂l&eM= G{'?KLLcs#G!fɿ]_ۏ t;dc'#fPWD<ؙtl&&f``oX+ecpK{d {Ɂ;ڌlF￘?Ku_6U$de_?~ks+GwȂg5@cs'r4x!geAh`hd]q2*`tL>cF{g15kl{{7~'6P]e } D/ seg0eAqDA`C?`C{>?Ag/qgPC{? `PCT{E%w2C {v2ML l?6?> Naߕߕߕe8O.2pppoV1@F<B.t{̬HW7bx",KBs['oM،iP&?i=OdYlM/]ngph.3$x?7WU]P4#ODErr vetT uJ}r8K(~60̶3RJ fFp|d+}q̟zˎ/?%}i4t,@Ɠ);u%yuQ6 CPEkЦ!/Ͳ+;'kqq5$b? +)mqz2p/PD8Z013!$[QlΰTĴ[1R}b3ut|QO[U<y#HiErIHh,"oL$HzUt6MQ%ФHmzM N ;+A~ZVU ^⟃@umzM'[<&Sh5cjsg@\ތ\NNoJ ~V,'e>3Hl~~ܬʖV 3Y^>ܼ/B3TR$c1߾mCn4eu<}013RͿWwHs:?x9ݣ`ZcYыqGx䳶@zo`޲u6øu^*tٔ%9eaybKdHiȡ~_0erv}43ԯ`ubJJs9XxQ+vt/~Y{Jo޸. CoVKG m1?vhf}W eQŽQ(wS/K8 @p]‰Ӊq{thb*9[`S!bjRW9i"ZX K9 "} KCk^J7IW\2OJߦw 7W_6c `>^tHb~EsW[jGk8nfibxxE!p$? أBoI^=A3{A͂LSz4qR2DMބRex6IX>&c~lƥQ%Fs9 =_)C|iLǂwnG|yUN}{,zBuP\-^h.uq)OxOpOd%"\)A0V*u JjKo ]6[H //_!5ر{mf&:_(}jܹ,Y=Mk?Mh杕!L!}SG~qt8ㅻmRǶ>j Bl]hZ_i;ie9첒N?cn]LQw 6xYAHDA_K9>`+ yܰ!qE5V-/b Pۖ0 Qa̿&_D":^BX`;2w3Ф7QA#xGI"適tj{s90o ?#Y51= k SO"fTcc:$L a-\i-DaVvS0 x[m'cU濅,z8rXz]MOfe2D,kݛ81 ZMb}Wdl0Ut*fXQ'g/ z%x&=2Z:[G3Czv9svQ|3Õ` aT+$ꎤB.ڄ큫ՎCggI9᳈GeID}:( f\ y : ?VD+|$65K^ ձX?[7=40QM J!#($&(cj8X-$h| t=H۔s6tO,\~3jjUl4Ne.=R zr%Ooowit q,`VᵴiSnLv5|BZ6o!o!$s>;:dh]"Y-}I& RP($\ޞuVܽkxsB j(ZF8 +s.oc1HN6_YjR/1;Ū{.DU ]ovFρxEk8]nzAju >߷8[ |.Gec")h!,NlWp4!zE%'ei@o"KlM/NҘvnN0f2C,MLj3?>1ēD]^qrHY-Ci ǻFD.h|Y} &C_5v(4O30n& ޸S69??UXm тAf̵[=X6b19W` @:L^Sn{B6e7tu&81QO3ӕe+ $RJS\_.7il7 {lO4(Ʊ$P"m.TE&ɼDqq.{,l7"Y̚ǿYv`D5ACXjf҉qNC1WB`YTO_waiQe&n ԥal(UynjkIjqnHm/*$5$nC b9` -;?fSL\Ísj8)؏YH4%XȫQbT'\6)ҊBZSnuӥ|,9ݗ89Js0C$Kfc.Q aPkỹ$=Q$fԣ" s%f#ܫL<h C N!PuNDF,,KuUCtfK驉s/+Hȑ$)9]eN` v'xۧ2 n9IF G nesǛn5VPd`3\A*ʜL!J{s~Dp+7Frj[ѝZ(GYҠEc^};I=,(kKɵ ?؂d}}X_|8S[k[?1^JRvwD|嫃?&Y,̧ IwJ b)8?mCr+c c, k-?0,·86>!ƇK9љ [|`R"9io 4̔9xԹZ̗yv&Es7swU l>z4V҂Y)/r{?YdM-btkٞLɴ2GH5͓UjEJ~KIdؗa[nUvlZt89֗qcÆ) R튩T%B5coFmJj=jICjF@H]ШßMdnRɜ-ERL;H>Q3GA¼tg2twY/vgǍ$ː[ !홇kaO99%%5 THgW `5$x2zo?.hVj w3z[8c"u*D&qVq }@ +!sb! =ې}J׿5x/<¯J(}Dl@ʼӳvX3xTXdpfp\OPyPڵB9:s5N~ UfDƱc`o4(=DQm{|Ww0`U6!;7e,.ƤKrX6)iE1ٞ|tK"I%-кt*7¯WF@u՚LJo8/ 5v h_p|y+SZp<{Zys ƛV,j8&<\x:e-1~pVȖxL6Q_msԵ~KT-֘f4J^cv`ONfMx&Ujidt=՚%554_i]*ךMstwmX8[bHM?~ȂBwŧG)zĎ8 @%ҿV&2vvt XQđ@=& IkBV2#[p 8ȅc3Y9sP6BSdJh >E}iO%q獗 njS.)~Ǭ=L> rǬ&$A m*L6gYzcwJ>: xV; %~vs1Y}~sc[&ƴ`Z >FCK)M8;CF+m}ڳt@]H]gMS>z%vi-(D!yV!1}u஽Rmi9ƄJ n7C`BD%y駺neIA3ٱIn ] Gbt Ĥ6踪 ]9R̊@2DU|N'vcY6Fzd?]jItXB]mr;g8χpm`F0y@.B{B2P̭IAv) X.Enx½`]dBEYlqH͓2x=ݏUT%9L9$ka>d R4_dD -^yz8gb}Q\mlڍ-W-" 3pfWSX )l<65-C-9wXS$4y,Xހ)oDy ՝S 3J{Dûxv~\۩O*I_}UcXNi-IgG2s !?su`ӣAAS䁚.N8%-(~,<.7svXsαfP18:c^9YVw&?AO6yf (9}Js`aoSppP  $E"LN%>{wg@o<~;-Mӥ믦NG:A"J ΂%:J Εo ODI+3јIKkz"n> foO~5}5{o( zBR mA2%KOn~68uEpk By!Y`} 6ǀ:F\ Mh:{v9otuԍ)f6֠lct.5 o/2VRtN<Da4|z˶)og 4x5 aSts$+d }ViΆ O4?0= s?B+lūTC'zf_Vh!*$D%-m1(ijU;h!NL_Nu cyI-!; 3h4 )mu~_ڕ=D01 Tù(yLv]6%n귣, mBˣy1b휦^3mjbxW( HC WI>GfM .0_2Nr?B 3~J> Fs?5~59@}u؂U]g3T7\mc V]Drn f6AӮƭE4g:BIZKW% csGk!;^R&@Utu]ߠi@ `5$@W`|?_}/ʜZ' %rI.~Y)s? JDZ,v灛2HXD" (AQlmNd} FNuDvyҌDSfvyBBkݞECUmOXm2TVjB{3}3>#r.|I㳪? t.N|N#}!/ɍOS4׹1T9eV`4)ht/~|)7~/s~hXAh9z0+~JO*x@e๦5@[4ޔ:e'cK훟7o,y wT#M[e":ij$ɐ S6 i 5hKq\, 4D:"PVa}D扩+*Bl&e84Co0VP 3HěZwEoa|"I4sTBܚEj#Å?m0"琍X;ZaX*v.DkׂqI$%Pd:Dႄ-|^u*LOj]&ۣ謁%2RRECd@G鼍"}8V )Qdw\F@7;WX=p3߅mALc+O~SoqrcFtdW 1)oKA?.̬UzQ墣?SuT?e^'.xZJ8yiVUh*9|-.2GKgо^ɇ=H%m_C?#Aoc6}SWw ML-}dr4rg>YZc!AE7s,&{gFzf-.A@R?eB;HZCC+@%Calŧv{.a*J@FKb5."z)QZZy#]^8nLŠ9V5uq]f@ăk}B.6ǯesEV\9kIb;3)kh=xKk%mW<^ݡ!%F4cl*Idb(^wrbL,PB,*a@%׸J[-êȋRV_C !?p-:+/\B%مN09⽲cbBMO0듋Jzy|'0VFeOxr @vkIwGE;BχUkҲ-[D*/^M? MQ7J"E7HJB'5 @<TGjҔCWR0xaFz9v$?vK#%Ae]6l{̵y Tp7s~ڭi̿P`a/2 Tɷh7L~,p6$. O5 9>;OL?̩+M6[|5KƯ?u-ċa@M ,0ěScxp" 2jRD;[dUjk(?b[a󙴍1og]+Oh\jD,6˷'dď0\:3fѸ0s>۳v,x<>} Z1h#I%\=W:}ior =? %igq뜸y[D jMu 6s>pOx 4dgOsÞzyh UD4[ɋ,7GAe%D(~_ic}T UT,Ťb!1kQͯP7 KV^FQzv5+buT.:x2p<eE@鉶ݕ8,責pa+~Q5 CKLP}mY, Y*đd"d|7|oaJQcV(V?-&EPt~$HnV޿~_JIim]gxBYEbYI!˜L7Bj}m7qjԍ㗯ܧ JGoP "I̵8s%LV,1UQN\|B~djnѬʷY+[@7<llJ/1ǐvSs_a:;^*HEbtraZ3SD=<K.Tibc+@hj2Ī/0?AHy~ZU. >"Ě'[(FB%/;(Nr^-և][̙#2t6?85A]b]jT*`<<%$fAAzDq+ ;'yIQ I2,m]d \#fȀ ,d87h” !u&ͅd+w2qg9@Ν7u`joN1z4V}"_ k^p$9 ,e !S*2rpR&dRBz6>S)V'T]@FGg?< *ZAВ.kID|rVO"a Um{'(;Rת{#uq1 z>,wȅA=xբ5Í.U 1jRmnG"ӟ( 2 Dm^^9u<ϧ7ō'،g1㈿4*ӗ"sZL_RW'?{3-KQQ/2\ϬUe'g3Al"SNv@,QstS-;ϗWE4GOD*XXo4;_Qh8H6$#_)}wlɪ%hZEo™0H#}P1ww{$T`=Ps4Z L^`˶xff |J>Z|" ϲ rཨImoYPP:-ZkUn;.R >MqsUw f:2?C<՗)Ib"74gלzqۗ;<1m"#mǭؑ-g`j_ò-T5gVT"4D'wQ'U&V!/).f!x]}"\t''<סH\!I% b|6§=@9S'XV"J> ,Ľ3k7 9,QΚsD,%u,,~f뉢|T DG+kZuDWO.3Tx9f僷-d02H4?&z6v:v DA܍Dmgo&>*B!΍:+OGϪ}HPJ"1A\A| N6f_@G2if3N}1~f|9krx&OoqNd/PY}tա|d?994J B/;;.2sZ^{ |bC[R,Csx07YpT/&b)H؅lf8("yvcc˚)b>zF712 nk ڻrљN=:/iN9rFwḡEiw!ˈTfpraA_9xpLܦoP_!vn+U]bPu^Ib^$_/֔;߫Jf_zp7s2[#G߬\오A5:9`CγPxE]RW @ 3KUe( . = j5Z<oxA.Ql- KelD6PyM8QVե" +b0Oi~5hx/ZiL/X܇oᵱ6u0?$@UWAR(@7P"Vɟ! 13$\~9:b*܅"Bvx"(FRϬDρ-tc&ϨD Ogg]b?*T,L}s#ͬ!BXY3<7;hZPǬJ9 1x]W q<ACF Q8l]xO' ~-i7j^i !߽#i=m8q`?3ZEk{.b!j&bNTRdvZACZzJTjp'}:tDZ,7O4BYt(Z 7TYߝ)CKhL;Sc"!&m^i]D7li{^s$I틝0JT (ZK^y7~p}7RuQJ8QF؋^;BMm-⦪/Y) ci%FLU:&?!3("?fYipx wnXʏ?5QfƄ3~*Mg|]U^p :#/ \ҒЭHs ^^\{LRb[V M(ܙ/l,ʰ1x?E!+i |h[6i>1sbҫ٣3!$onGDOZ߯;uM 2π |t"yiL,t1eH(Q86O;P`h^T\iDb#}[q wic)ʪЊqePe@̆;zqW 'xqRM>,cMg*\H~myq],^1Ҝ h+lÉ"(Mzkwgd!:Ď"gz}s׏FxQGpqiʓ"DX[]_ >Rq54TDYQ;@,0Aw] JC ݉FBvTb+680g#=?3סj?q*8)Lވ +[PM mVJefl(rhMLUC3wz.:<0h5h ΞL㛳RRrQ'ǴRMB կNi "Vݗ2:mY^o:|w3"]Kʰ{y:b.H>9S\3_a,0ldQ@c%< /]M|x';֗F McuT"Mkʺ ک>:m"q9ƣr+~*u!rhPS<&6),rUy\W)YDN${$_Lö>KxVvu jMe0Y 4ZeOKQo<-;Ey{╂sWv{&ĵg 5?˞6vj32sc aĿ^CHOw1*l뭣̆nL#|CaA2`.O]r$"< 3`_+ԑ@hSc ro gIHz9Y,tB\㠘իʺUzpnȞW t nTCX(G&:[{JDzzJ _' s1g"KXؘ";i[H;bAZ.sTlH  LM9X40cu?!7 ` Ym7+G,aKgթ]i%JC&H-ф5(aIZѢ4$VC~H|&=xniyMgCY0]u*YO(t>Й7A}GB݈6t'WzFuߢ֢RCd hzs1:ͪ> stream xڍvuXk.--t 1t7Hww 0  ҠHtwwԙm}s8\3Zw %$qtc $455vvNVvvTM=F 8 tAmRfnP nr<@^vv;;!.)3%@ qHB]6nJ@o2w-Jfn6 hE 3{ rB6nnNllfkf'rx, P6s;+* @Kbi@ ` +4h)T@!0s< +t+`3 7`TdYݼܘf]!x339wfq5tLjvrseu5%_i-h) qp9՟d=yo#7;ZZ5#$'Ԅf rpA,ao'/3t_' : l~yn. ?P@% `;5PP}eՙ%7ͦ!%$ ^_v '' w"U3#T _AO߹!PnnV!/C'w{Cf`{pvwg@`ws35T,\<2`/*ock U+dg_>YAW:vU- 7**nn/ `cuAC VԿ-/M/?&ؤE6߈ &#hN?F 4Ϳֿ΁ ? 'mw*.n(v^jPm=old8wm(7S!'oQfApBuB qB_? CB+{P?S,]\ߗTA / BmĞ,#]>:@ZFӀb~n>Z{Hb;nTiȔXs4^c(X+p.TٯIyPe&.x/aKxx|3) ߢ \&޻A "Itnrb!c>nH*(.q4ulڼ!+]"lL5i(^2f+⋝W~+ S{BX )H#귱:11TPƺ#=HC1<_]IKzYLIz':rjn.LJxGn EVqkj_CԾTż3:hr@r޵Oc{{:&)/YCϢ05Wܧ\DNIZI.]׵oS} P`|קf$ā㋔ZM(sBd,NDƠĊitYg겶^=?3q(9ipB2+.3~rڻk""HSpݺ:Q N`İVmTlq{rq{1֞&j-Fhi"ڜVmi}T2ūfrԢZ/;.c[Q\Q"Rѷ;],?֯TYVEI͒ŀ<4ws#H4.mB9 ݽ;UmQV2Mo;ekry %62\G臩j?%2fɞ}o$qDֆ|$Sי 莫\GawE~gNDЙC iVmn) Y 0hٸ1Cc^8l"Rs I!3ݻߤz#ݠ;T`9m ul5o mle0X1Vqd|X˳kM5qռip%o}Q||Y|pz\\ygQ I?I=#*qY_'(S~S+$`I(a\8G cZ ݮWWU :\+Od2#wpY|`*/"CP;yNI瞂%#' &~|Oa:-wH4{@PcѐESeRd]_,SGQK ?fx7G _dDJwоq6sSEYqV'|_eNw|PǼC;b= c!&S py|_-񐗴s3yyAGJeℭQlo(0\JUK9~ fw6g1pgFM/`loU_2oSӵPrCḰM&ELn=[|q{i9),mR&~r'HBgaRil4 T#έ,+z< Z,7cl)Mʌ*G~ #~{zaDd1d~]F]b” P'spDo$#dm΀ӰZ6>v'I7 }r"H#1Җ+a0$nՠ S,UOI}-% O>$~a`[I%"S.'wż e+g EXkK*<ku;`egm8aOEr5A0-+.t*'OxjmfOʣ{k_?` W3fCG` sdլV74uL<3ﻬEE;@&Cc1H,{ ̌1o`8h4tB/>Onn&i^mrh4/C<x[ݷjDCrh6Vs|h&-Pddܸc#\ 2/`I-p#O63xl|}əMА[#CPSqEͭnba~qBƏms/hXh?9 u;"iRe+0b4;uߊ暒@Y֫mk`EK lFϙ^ <!F[K]@ICzlȜO=e{P^y)Gvۚ\[mҵbQ,#`9ql7Sl d9A2sV3U)lXok֙;88%8{%{|ĝ'^zӸ8$|u9^lOm|u/U7Xm+;iN v'tq,7Q9ӳa*g1\?(䞸@hnȋ5}Yk%>{Y {%8ɒǪshzC}/bA11(?Uo4"Y'@Q9t p](Kj9=P8Ci{ة&"Bmè UG-L幮.yZeW:ћGk{H$~G6y25B쭃襸{ZjR9YMC3Z;L>`K8[amb%E.NY5)"aj䢯幚dz6#ʛiZTs#8uB]bnQMz1;O)wy0MmǡlQu8[nƺT\(H,h4ׄFZ}6L)Z^gx ^8e @CFDm'i~f818Λ ur,E;+hnICIgV> >;s>l0Ws7+#LQ4&9~8ޞݯo;$Iş7$,&!/!W˚](M[s쫇pʄ=f]>t|&T\/cH! iL6+:WZMޔ385 C@JE:VB7A= >3`읭}e+%%1ouo'oyZ\L͈1h++=|Tpʧ.Cx^wSkqW>FlT*Wَwb-*NȐ$h-=[%$goA:Zz+?ʹ6+7K15eNr(g/E+Fk :i$pνdL9}n2^y%hUaiv^k &k{U#Qpv&wF~Y ճK 6 P4u },Q"Fhyx vk$'EjCТ, V4sgg7&Lqe/. ^ss ~Cyx)2qʗ wY5Lhm^ _1s,;KTbb ^nQjGLFfDy}ư֯S֘C cq[!ڑv ` { ϑwc:rja' 2ZwʯO!r=& ̙ӆ*Qld0132ȟAb,#^H.9-H hL-==su;|:1$LWw%•+'+Q 4Pe1kux5;,Ň\z[}&ْ;}"s4ҁc@<eqg1.Wv s5!vءYҗƀϵ^_U;slۋ%𛜽kp$X]7okHwG`mR~0Bl-4~քs/^v8$*&zTٛ oߴ>j9E']øeZ{`L3/hΪWxq"IfA}>n`eMup d}F:2M\3K߽Jn]]|~ճLfqYĈ!f_mO$l=i"~ȒgxXh#u3fY![J1g)CkpH'@ޠNZ@1 a.Ssv$=#sLS’e~~tH5vjW X#J}5q%!q=Uy?@K^,ZVk9 Qr/MtNZM$)Rc=?|oZ~i(I7djc֭ His.dwnJFqho6d^'yL_Z^aKL= pXTNΕHw}qg>SJXBbahW~^/rJNWr 76s#( ƛA%LYslyNϞͷ=۾钧:6`R'ꔟƂ(,|8!<&ym۵ǽCpOCGCcdHM5 uqPPN? [ :.4sG?:@5$kHWJ;B-&D^flLU&?qݦ:4M5rcc|XT"aZg>td,LrxNGlB/|7SVo .c)jտ{q "̦6KDՃ+X, p$*v-y!\38~6їcZNNކ_ߺkFw`Y56㵁>iz+Gp+j3gc&XInʟP`T$z[J6PAR=+ʉt4X~wPJn6Fvb TΩ*z'KV!GuAŌ[b8?VFLEo5D-IO^6\S\6۷`#hɤ_ʼn2QEko׉|]N;\=Wn:5% 'z@"G%^9͌xC0p{r6ЫŽs WSu`Q`q٪;I׏WsV\I+7LJQˊkG[~e ܉WWynZ qu@ ǁ`8mb&^6Mk%=;GmT3B0_ GViocݙK 2J}n&ф<<;wR[ntŴ趾"+AGrIQ^&{3 'Y&#ޓ %2Zf˴vq_{6 pK]-3^7~7)OB1T 嬸+ćCOSpX6ڱΌt4i_n^8? Ra@xic/ rL^;zW(<W*hTڀ[ gG:J-|,5XoDAh-* ~tm[|`ǔDWZ0eǪY38q KeiN.bLW'g8km/mz`5LvՆN`bâWeiW!n^2ɾB쫱x~zoZ껒!&^36Ugfy=@SGqk]gdq2L!Ad\BTdNG;ݽ|qOWqEƪV `jNZY-geG=9yO2s0F j2Uy_4%"?ATfSl5FLASlY}u^Q|EqQ2ԣ~NuhYuzJ L3]OY^Us^rg7nxH5M/"~2U>/b 6$!EJJY{FZJ#ʴLG]E/Hz{[$I[6 f>F=I t+ ې'~|;_Z/\׉EIدKcvf͏Gn}HWORob6ge`6V*8ǷSeǨjY8!:'R4ud/JU< ~e =䚇Ir&ևVQxllȌZ/Պ,VBשwN1 dפ-er35&vCz?(&&6۬?x[c#t励v r;O%m2}[QsjپY+t|פ5fRXv̋C·ׄ4S84  4TUy4:& DCSs&E[h R5W#{G0W,;~0j;mi2$l8'mȢ挩LJ3 'ɺvMijnMXz{"ʓ$^߆K((c,{TGg}͉.IRsP:Цg~sMhmp'ē@ŷ_@m/=۶gzxAK*Ubo7`G9F3|W\μobU$&"GuppZU r2lfJχty}+r+|鏦23ψ˫XXy\(W D,!ܓ{zF9Tcyy>2:sdhi1x 4L(La5;iL0z@gm6ҠKJ1xrڳn58IVk0:W̘"|6Kֵfv$UxGI$#`r˰@#bb(Uּ$4>X$HX I!MAv{~{H䵭)xv۩Dd> stream xڍxT6"H-  3 ) 4ҭtIH{y}k֚y}_w}]{f 2@!1B@Y( b$\\p ꎆPu0Xꡐ{8@TRVTJ2Q5'C!h.U; #Pv $@qb+A b|&+"% rE ^p{B!_#A? pL&( ` 8DcC<;[` 0p" Qn P0#!! yu@CNg>4A _3Jfu$D Eb$SC}s.H ~p1Cz@`&PFRRB}zD~0qv6cgsC`1pAyBwh:"@` G;; ƞ;` Oד ao#Pgj-g9UTP?!1$ *** 3!FP-{Ke.o?J73X+JH Ap PX- jKzPV HG,De5P!v5~ GB Qh+2 AcjuՑ`$$ ww + (Vo2D( 61C:XM&P3+T{[P7L27˅9 kVfZ&\ZNꍒpq?}*~T]%2{PR?#]bF4ęjijck"ɂ~qzG}5xԢ$sXֲLlJv~ʩU9L?Guӳk;~MKέtqbnݼ(*f*\E6 a1gw^-(|^ny+ym+ŹJ7`ٞ۳ب-qʜ_]S3ύ 47lД$3;o.NoJ5cJ6\9herB3&T ࣅkjF)kVou}%Mpp?#d_ss'ްpb5|(5,Ўу<ؓq'yʵQ)v߱cI='u[!àl?GX!!^Ec]uHؽ+ܝ`7ۭzeU<2/eIN@c!bHa'XBQg`ךqS U7Món4-5,"}x!= ?|4|료icY-D0RqDUUԻKCC+U;/KQZ~$ ;8%YdVxR?&I> `(XդHVz$a{(m^+ k0E6ՑU&7&ïid9fKZ_FƊJt}sh1J]d M:$'qNyJf(Nj .3ɥYϳ~>825b;~|dC%H_kD7sIXYd7] .Wύ.po^zD(KeHS-x"2LW_f׌q؈ E (M 94󞷨%cIQǽ5׷;#~3w͌3TД -LOkS/̐:6Ew|RfIB*DlAg']ÏPfwjMȇچ9 ajQ|]507tܿYAUvqIy-M;Q3uoc+` 7{:p\#o]hI9upYgוw+;}7z;  ?}L3wכo<]f|XQu18`uK5_u(@̣b+S>)(*=3o낄ӯvkg!t7 !Q'mGc$"B'J[L W}`)0):qX^@̌2iV.z *0 yU .q0^/XCnIrs//9YL Visz'S%q<`%܍wFz_<=`gګ3W&&p7g `7vb5",ͺetrޒ6ucqK{sj{AdO28X*pIo=v)@\|Gkvūy4_ؼ"mgNۅutqᴹ[E5lUŷHS::.s¨YFF4r g,;4ƥ~L)S%u"wi,pՉ;ՙKzj z7J_ ?C k#]X#bR1WFܡQIs^Jm*{y2fb6#l 7zɻR.P1@}3>h97WLBfw J`>J24)).~-n\9UtwvjQZ< *&(p8s ō%l[T|5S߲ o鵐׆=nyYoiƩم!GHD@yۄUTFXΛzF 03g9ɼJEWOmn(kU>[buM_ik 7d$$yƩQ>MKmȜIgi3"|kHWJ$YάS#:&|A UCSz w'Rb/~+NiZi`|"h>AIՊ t'%HSw乼y`ᗭ7(8T櫬-筄pt90[Iף-i M_Do4?㝙٬U&ɏ[q$Q:&=H#_젊Ȗˬ^i-J<|6oE7w740[ =q3 < JP TP6V|}*Skɬ.\I&2͋Utw\1#졔x4ۿ:3QGͲYܧ;dUzK %ٗ䗽,^#w7 f\Ʌcǽ]=PN&8ꑖ.nt`T w (HEq#dN, Ɛ'׵56e0) &f#>rg1UWOR .\ Jq,xB_gSu5+~5 8/g)#H3n33}IXBdԥj3 ~6G9"7PB<[FZr9`P1̑PDq6Y9zɑ1Y%&'vwp?DN(ޠ4Yk' Pd+gv<;B$9_/هBrgLT_c촆gSpyjunGpZ>g KWYhvMJ/C0ESEVǻ5?G\,d`iʱqLdCϖ|粈n⺍ikI<8+jZY ҏ\DZIp+GOUhBܻ:Tk{N7K q\w2OO7r&Oc|/ZL6@bp-̫n,Zî(=6a>` LW΍C <#墉ޛR ^nˮ= q[R_R$jΕ*Wu+-QAFUuO ӽ(b hZ"&{0 gOK|x áԌR9aO!{JbHqǎ)#칃YD'IUIWj:lDo"aYJ^6".G_l)=+dyNT4]$%nڴm8Y5,_Ѥ)N|hł˔Sg{p%y è5oU>J?͖K[KvxGArHT Xkw#=cП]aA; Cws۩ʔ|SB~(K(nߊ2%>RqK\i2j)Cd95פkL=P!x3^GڨD~L<5=19b q3X{]qSރ$]$q!3W.DL[\|i!a :Ϲ KɈCKF>m~L9*\lJ^EG+|oٜx€hdN#gWw |)VܗKfgGi?JQX̨;x{#,^҈IV|LfB o2m$nP7e`ı`p̽Qӳ$EeWҵI2f9^`{B *diy[mBUsqbmyR4)~AW# 5IDcMF5Q٤|ٺdܢH%>iT`&;S-V8"AM;URJqb𸄒`~a[($t_Y\x> stream xڍtT].) H ]J 0303tJHH -)) %7~u~sgs0j=[A0>^Q /D¢E9ABH(&F;Pus @"Q<ja$ Gn# A@0eqЃ[C!(`G\D@3x@Q]p~ ;CoEЃۢ<w)n0p;@OE V p|<|[߅?pg0 B -Eu'|;:(M|HkAB~]`6rpgg $ݟ<;w/_{|l0cظ `PW7_;|v@W$  {@vwލB|`wp3o`F vP߹!wzя+;aN^q@C#cYFߠ,_$  ~ ?rU`pȟޝ-w-Ms!ݔWM?Ro,]IH8#v:ycN;-jSGUP;5OWO?hCQOo9Aam8؝Ȭ^5A4}`pb >]Y;U@< 3Rw3lm}?LA;za0@?;0S;Aqx+ O5$Z,ġ*BǓAqAъN!NL{[:Gc*^GߔhQFl[en{[Hu7Og0;O_<8]W'6Y?~eC1K#,O$T&[)36ެŒ<Nxq=S̍]JyIv)v)0`e]5{Qc v+dct僕]O=]ɘre{Z0l/5/V^RD!O98+=zeH>21},%/V[߈5~_t0"-p9@7-#ᛓ| T4j \zߧC;J",K`#˽xZmOE&|ﰻӨ/B)s=2LԻHzRX@mV:hXeM,6;NT!F@mǮnC1"h*AoSoCTE eƘ[sJ&DT=m]Rk*v?f~S}fbޯzIN:i[.zaߠ߽*7F>,$vT>А(ĵ屺w0d.XQVѯYLj 9\/NURL59t2g91u* ݿGypc؝%2fKfVoo|c Ff2H^S&l_"Mkv/M/q@ں-Y'˄MQ,3Vc]wg`Dbq㏙ihшG_QeKcf( 0,E'_2e!6d|_MjuM ~QE#, ypauQmHqD?P븨#: Ec S2i\@2ӈNXC!{e3?HBaˡ?K{͟=ag~{"Eh?CMzVsOqcڽ^^YB-\2/:2G|h&dw9hO J!CcͶSU\ؚl10#2 \Y=8g\{xHR/0|u6UOg^+.1|;nnd(L8w{aāy,u b$˻̀<9|W|Tq- )B*x$HFv6~j]`n{Ol ۍG 0F?hCK'Wex( 1IR ^Ռ֐SBP8yÃwVx6>KyxEa`@4YPcvx Ʌ@(w@ӝHZ(7ޭ6m͓l e{sU?)}喾BX9W7  4exCԴ"ȞRcb@ran^h]\z,a&L]^wVHfȾmjLRe*{z/Bϴ22~VCPQMG\0qI-:H4\M`KkB#Ӥ@V SSR7ƵKJȳŭHHl8GO{gi ^Eߣ%"=cH¡j^xڡ(3)n<.eGW>'r $[>ISR^H2n4hDT & 'l۹nd0(ύhYUwU]e (9FN,Hs+  @J1(|.{Cq" }Zk#ko]1Jv,PQ3]fd/6 Xu>oN0˰0)Ui(Zsf y"{kV}8`>u,~(8,򇒛r1O,$ql9.é!*n RSڐ"qjHLA̓Y?WZ7 '؋n9<ɯZӇ ;8m:UKމ`cgNrWS9K/|!B)'!}o CU3$ygق0E$_q2qЯ\j@C-^1Uw#^f<|xhllkkh4P^ص.tw+r9m"ORUqGb3dbOmuɎ bk;wGBVnZn"Wnqg1p~vO6۶! Asw*߽ΩGAj*WlϗkTh-lE)P%VW(P qiEŔXra stoԷJu=MbvE݌ C|{*q,4&u0>Qωe`%̚\bۈK[P/#X2 >(荺pMiR6Uiun[P+:YרtWV,@[WZ\ns)(F&X#b ]B|%0 ^ XI+-Ut8qevl# ǔ_AA53 UcOk82mX3+ܰ9Y۴žk+?(:TƄ >[a}JƎ(!}[mP1CrLJ*J4^+TN臖jiIZ "y|L3R4Gc H*F?kB'd _r#ZVa[ k^ظg%ɴ'Sm{rxZȣ}zmJ7jA@s\P4I@Ν64{2Gs!+GWiv@& RUӕJ1zK&\[4(#|]sxNCDL1 s2.V~:GbuOܜ ;@rpSa@OGQvM؇hz_}Zg`pubr Zd)dE ?q =*n@7e {6^ӛl;ek<(9BC ]:=A48J*p2e븫!U"%_mH]p.8.ovGߟPI7id}W: 5{Z%ݜ# xp!ޡ@#|b{"B+w3xo]1 rۡX殜r mG~ $C>3/hGV2%I6;g4)Ob@6 #{!4UC <}F홆$gS%̓L @k acUrPrfdm3Mjm+3I_+w5ZtLFqWDGt./O~|t$:!*xg.5֥эB&U-I)eG}[JNXC`Y]B͛hY9ֳ=Y 4 X=4()t9O׹-c eTUWi_ɴ_@Orc-iΛ6ј47iQɢZ1Pm!`EVp*ڼG0;Ŗ-D@<75jhFa{Wt)zX**$I/"I#42쬚3{*jܔ刄}~%(Bp-D$PLYH] ?;y>AUH{'\*r+bS=?B0Nt&{ (gti u$f^ {z咂1O/:0c#4, b1$J7'5y^(M!v*RJܧ4J0?9P=k6euD7 %}A贊Vؿ D Z+!vl No6'wMLv")41~tQlѤIoa*U+c2ipZv6nOgu5<U^J _"t=܍Sz}vq/ !~$q&;υ E[[qD-C/?I$K Vk'ZKC&u"j82oTû#,CCADd)L O2|+ ށ$dټsnrx3{ ;`9*#SBd7;6fi˜D!;\9W6Vw?))Ɠd0u~\fHlJ#Qٞ9\] կUWj!~lf}5{cklT 552B ŇzU[Hq'"2+g$~J~f\J yu`򗇶pEwR˜zfY4Ls&2u=+SW]C/C8 0Rv`56?"S"֐ZxN=s: -bsrnbK'\7 D /U?f^ &1>AL+J^h{!Ec4%n0xYFZe<}KVmӠ q 4dL$IO[O9eZ#e7(ݒ>! xpe>V" i>>~Jv 7rk~V˙։,7pes .T$X_큥Q&9۷K=ݴ\qqrnhZ%Z0F,L_.Y]fe)Na~ ԰^YX0dY޻vQcTQ<{Ǧ݈|<_KToF|Wփ/qMCctMyUc6nY@m/"IkKqw2;W)4>Qh)`լd8f;e|mC R^9$8f Z\zaeoV;~<\(|bfQ?fEZ [ \8*X&=L^0yuQp:@#ze=١ $'JlĒasYϾb|*,P$l*'tzmKMHg}w*ͳ)q;5URcYΑAҗJ??ϔ"ޫw'7$m-nZ/ElcTh}㜽Mhv> stream xڌP-@pw-Xpww܃{p-YI酌l b6֎ L<Yf&+ 9%?r8@{3k?,D }G5@ `aab01qƞA :غٛ:+ʐI;@ hofo w4Z2[m ̀nіŅAʁބbh P:흁F_%GP15s[lcof@kP6ۀOs W 3뿜 ml̬Mf@ #@藡 _YRdu}"@T?9ڛ::08YWPEDl֎p}0ZX۸X{Y*ɖQ (`gbbbe@WCS_ Tl)A5xyAěp@O#8ff#hbf ;:H 4?fӯi&_GASIIZU ۸<,vVN7뿣(OIkcdA]a&w,9T;!yr_QcĜ,-Sm[Yc['Gڀ6MՀ/,]6fbf@#3GCӿfo=4*8YLL-p_* hw;ѯ%ca1& F#_C `dq@ym~);Qo`8"h~#n迈 (1#o `@٥#Pv]7e@E\ (oʮ+FlFE7eqY@D @fiWK 3ߍ%w To07pw0#>!hKo@fW? E F6_+?*M&ѿT [EF%smQ@@ioGPCGY9Ѓ$&cM~=oK6PLlMXdf@W? -}5@/TLNV.L?69BP=t٘ٲ @M]/t(/#G)A4TB@?j 835"V`hcg@'ucY@A]vAvh7^ A-v {z]p s65mwUB.;cwԒ=9= |L_2؍%Ju-Hq\4 c+ 1FDH њWgzebi_;}ej#,V z*Ud.23vu'15s'Mqbjp(qkD]UJXA !/Q^@!!(3 y1uTiQ16})<;ei죗m> y?9ȏ_6Pq'CU&BT'ocEWr's}q{ֈ( $g|ɸ. I'ya6qcac,jb,T龤~8Lp@a=/\_e=T罵y;Y9Cfȧ}V_,I.mD㹜"ccۜG>sby"*Jٚa$]e`%ׇIZ]/[r_"ȖtYG _bʃ=&Œ?o =ލ󲯤)X fr_fEǪ GWUuX}V"/SJdVwCB*5]:>\z/XfPȁtE{(>ciN z:zD`uT_ʧ)R)7)PExd=”YY9>e П`GR._a1ؙ&Ϻx/)rYP-+/L宆Ő22p!LBisRJ+ i?ȣfGc֟W Aӭnݍ-Yj-hݐm4"'[mfn/f~@YDdDTysjdY8r=c@*>cQiW>ztMѧ6W]vН셖^BMKvJa;D||>Wf;Qs W]&3F 06'46Zڑ:wp?kl}O=&d^(hh`hE:STYO?cH>B]X?H96#Zp .v WoAUFlJȓt|*@U(Q6ip0mE9o;.O>MŨў*|  5$]K( dOߖjJ@9練}Ƚ ZgLͶ?^p}QK& -cD#~%s>Q\՝1}_],Xٱ<ȼ~M(|k2=6-YSTlD5_qMb< v Sh#J,__8:7522FG?55fMNgvj xU]-`Xfy,GIqߦgahpՖ(C|Ge*5#Vx!IQV_mloXJ/_HB%elg q}A3kWhSgY{k`9)×lr7I*wi`ԀxŲ©K/aJ5>qw2w=Ca@@'K3(QB"8mo66lβV gbyˮQ)=Oy\N04W}Vazb%|#ӮɶOsNO/J6/ ;k͜i1:PnF89F8&;o3(=p - zcʩ+uߒ.' DT h W*!'/:f;MM$ z~̖c.}ݬ DCoC[6J661û}oOuWdB08Ik0~5+1G/\QzMfTT]ְu?qٔH j&6mԺ(:0=4'$d`wC8{ک^V.cg8`8ѐ@%osI~zi:L)>~[`Dޚ siOt&% >C{#(.'3UL$UOp3OÌ5Ug奼.xSS`7Nuz. BэӁ'օ5J,U! 2u(<:q/˿4`̈́1ŵ5JnZED'_);[8/ Ii-P[S%b 3[5#P18TˑOL*D‹;r5olq_O^dW?$Aٷ $u%9WcB1{?+6W0xu(]R"|I M]-9N,Wﮪi(<&+٫lG.CO ]*s a݇~vuP1AI^RQO *0L1*hy9S/ХuL`aCX+;2 ʎ--rWQ.NRW1!޳;mn>RIi 5_ê=$Uf.9$Tn yy 5PQt mfCI b 9+7=5hdh>e8T]Ǘ||ܴ5>w? v80u{zޏ4߱!e(`d.1@[-{njd&Bp\ `Z|桲/S~4v\g r`5ؗ[z/ogh$E*=’4ja*pcY'qlcErm~x!&tFDߡC1'r\&;f`֜wO@A7,S2&otҋI_TG!zm y8){ߝ_ Jv?5]'i\pd1E>;i fϝXyu4Q&f|FIfOIHfE.68%O]^kr<;@j EM{لC–$6dzJKD(!,`mvӲ.9:fE'še'K'I֣[4cbkrExˑoQQ,kW7߮iXk]_(4pA~ncvsQǶ*y%!/4 ctRŭhOr2r4Z~TRp]$ I9Ԅ :CGoSo+!컹L&yT&*?JIa+I`_}3?,+*Sef u*%Ő0+iR69Pz7t|;scz\IҖYxQGɁlsV2szf U]N9'׏|^I(ߦ 2ޡu3D|GAq.sѝAs%MT:؄9`4i {PZя#"l1ohwzt}ئ4 n̪I6ٚ(!KK;#v:Q??@W3B}d JBbΌ*@%RtbB޻Q˃ΠsڃJv^YEU0kՉ*!v/(Ođđ8_Xk\Fo'1)g,]xl#u%x$.Jэa}2S^xW!J`7^&sR olHVBL&~*jei\+"l8Ø-͝=i`*˵RR쵶Ӄhv8PG*+>+qnzHS*gEr{HVpJ%R+3EUDN\jf,G&{zz mKOx1HsȮ#Hڟ}{)IUCj F<ܭ;z(1hfl5fi9YBDY/#;NH]t Mb>'gJ!R!#rxn6wB+DƭeF6]4JR5m IQx_RRZ8nM4AK΋qsqX֎|6y;c~^l}ZxrBxaCT2aD,aH!z[̤ˀxnj񜣟!RZ=@gEQ-"LQW7 뚖E%O8^R/5%,>iV;0D >Tޗ8 dshzWYKTen ќwkZe `Љo`r_/}OoS4T<}nL.~ɩf \Uolk5pJOQOo O( p-'9U=} |]61TeN%l5LP?䪥1(VjCaRi/w.;rw}?z}DaѢ-#*H Ã1rHdX.=rP6[AK ~%ފ'X A^o}a7UmEب/.*3VEkZk y3vzc4LarB#$MշJ%;}(UH15Xhj|U3&'keo)Vz3s>gsrIN5t{rn_;_3JC-jNT?g(|n њnYu]39͝jV3KsG6d}|=Ɏb ]A) %[oۯllxy$Ft4(pG>G\:БD[0ݔr<\%GG=U 4=j4.ufo{8ü)7e>T_0ߋ[ !⺂Mʹ{Ⱥ\b]z-_0-"tv.įexQu7{T3+("w#\ qfY9 EǝsDGo\ptΕ~ |+rnG/K/%(AD.%sݞ,c_5(g(lb^Es-d$% D`Vɟ⡊m+eh[⨊s6+p4Q){uZl:IlasܒS$\m3}p.tb#8g|1G,Ո[IDay^ ąiDR8c[ĸWF M̮z/3ҀT UMk?r[M]u>i;zYxߞݐ'y3 3j#FխkWiU{BY-0J"l9x$v`}ƴ\?M̕91osGX5iKPj*mFv9{N_xE`{no%[-_DUz \K yu3Ъ Ò[Y~.զ7'yU ='*/M > zkeRjO>"? k^5o)\d#pFBG?(,L5qHPN,2Cy4R&kz2\Uw2^ᶢ|EgdQx9H \#Dq ȏef?j{ CuP#<1,! ?~>νMDm2e{f*oi vN)~sby&O]홞cabAv,y#V\oboϥ!S#ui/R|2-O]tb(e6OQuY2}ڜUS kBؗG]~^l=4rA7{<$(b"JK}XKfY|R?GE)"GY9A07֜=%*ٖ<$mlBWdҨt.{hw7L+E$<$abZӣW OTiu"p餹%3c!4$.}>OBIG&v}5O8nyڸ1~m)hel%5ɓYrR^ɈG3ޓoBs--:MWs.UhxJr!~/l*u!ߢR:/o*X>-h^2Z@h8\'Љh |K 4VF#{0|- k|㪟Iʶ/37N,$Y{*&ؠתP#$a%Hw_Ahq‡gݽMuQ!I*a1=mM;ސk/+B%uÅT8S͊1syvu?ux}Gvz%!FjI׽|-Q>j5tGؗFG_ _OUѾ%'>]Rp%`g3iIVrƹ:Ҫ;wqo &Ί{ gb 5Ų'KQJ&5:?`Xޱ[s~܇i#ʨcK1ƥ㌱_EM9Dt /, EE'6-\݀{+w |J Qo^1:Myq̚$ tjʍ |I+0y2dZӼl;)h %/` #?t' XW$I,$l&Fte.-gQb%b PVȑof= ޅKȼ{M_oǟ^<ƀxyʀ}g3j7gRm1Qk8r}JDFd `&侕fʲ{W;w#oHw !ehp!P*HoEqe\4Ѿ83^aArĵ#m:}Đ?\gmSF駕>iC<֬%ȀPN~dN.4!ڭ18%2+MExEL <: TW`,t{X_vE.!FݸZoùX/ZJ~$5W[/}q͔Z&sZ;9헤]42~85W^6CxC" ćPq$ݥJ'y"Lzj Iq'F ?^?F#ԌLhk}GYd} gBٖ8Vq_Ec50F$7EZxy~vA}n_8?iKзї&.*Z=Ǎ{ǻlZ:;t'yL2GjhNPL-+eo9跜o 6 M[UʫKe Wl3WaVu'x0ǻ]uHd<yGP IŻAT+T֕tG \䅣92lj*RoB .dԫK`v`E2XWӗO0⺐*ͮa>ꯄbrf肛4oW&xDN dM:*6JmE[L'7&]< ϊZ0MhlR76#Ӷܵ=*))^eA .bl雕z|?DªVoߜd˼vE\"/fs,f3/l.IKyk~$XǕ nˍ2PBWmGyn O/*8jY.Ihr#1Ng:E%|lj7 YM f{wZLOB3 EYYm쐐RPAqm#5.ݑ(=9SSLT}™>[Gaŧd#!&-jr>NQfQk$g(?ح1 >TbdK$b*ezu>*(5q7"C9wApC1ǂI5 o@a؃{Sj.tØ]H*#q6 J}ejA?GE4)  z* Rdnצ7:eO.gFW=L\nŮɈ,u zAF؝no RǫŐ;2Q%j۽3UNpG`Z_ه?4G2S5?vt n4ڰhG#u d?OK9. &x2cÌHxu ٭`bSL)k}M2$P3(^"|OA7 &HsgSM4nŖpf_=n<.WPUѧ+T~Ol 1_./E[G.)}H>)R9SL=Z3lIGhhdTz'{q#Uޥ('gNh&&>ψ`U,縆}>:):Zψ@88KŮZ P83kJHfA~QX^e-Ehr\܀46wJobqn' f5tdNWoS1 U$*7:0zv%D XJ%SJ]K}ӆQugF!qKWSKsA Lrtޭf^zyD 3?%zc S4M"<;Bc2'd=n]US89Y|9YJ܏y[I3xş&y zF4ᴨ>k v嶞aSZٲH_MqIMw7iuC75/5B1bb>G~7몿I ZgҡH6DQAvI4Вj=`{q u \[At `I+.-5"P|}>K ΎJ Ո"thw: :`6-  G]@2Hb쎗DxؘA^=}eeAFKr|ڤA0Ro v d;x÷B݅g+:=O}ۋCEhMo>~f,ӷ۰0f36}ngZIfNfMS`ݱ5^8LEKbԎJȊGAS}2$6G/E+h.T$eEԢlOMNo)98z$cm d,{س6.:G JʊTrt;hJꒆdU ʰn^TRL;-o|} 8imaaB |%ƸÒ%? }]w]/ qFXSBɸ'-|#1m2B4JJ n`R;hEp#P>ᄼ*uJ|j:]ΆKIwśfɺ )C'k͍a-&7 #rͪx6c̑w&='"c+ܥ4j1yMOeFm >WRI}aD]Ip LMZқ# ˄"1Zo,E =͈xyp9C9 5cv,^)DgMD!U$ zC nnh<pm9iתPV1[BTV,t\pxfo|;y Ky&ݛJL\5)w`ߖ[q1t$~9Jӷ@ΒF9>IV,*\;]kc)TPI\ ^$P3w& [ՇIJű4fa=Ӱ#:7 4th,./XP>SaL:~Z; N"~5u%:J:t^Ypn+Ps?!dv"?Ux;{#GD=s4aJnN/:!2M47' ۶CC0S;GhC[*If⢄̳RSH_waPeΏ5(ŕ@QSDTEtD&٥O^Xr7䴲C̺*1;3DΦF2Vi %r~x 3hP_b-髐{$tV_ݙv" QK'IѦ\C=t}ǡVG??L]͢}굄a"GKKaE cUH^O|]*.A & 1x}B;9D8>\&qfHvRpx)YI?#0͆L;.RG&?0]oOlT0VUӸ^k(9v+$͉Lrmce-J%~#hz/OTwL8N`?`, qD-ZMm>"xDlnT\ԟG|V)r);Wg |uk <5ϔO ՛77u02Q&f9Q6βRi?vVzvz1({d8l?8X}q~Nl›mCP2ҵ"J:G7DM%'Xgj_@V1"WbkU\*W/4 )<#~nKkiE9V\ Xƪ8Fh@g0DM0LST~/pH?n}Q֮n"~0A2yd5p7`B#.\_ W?smcNCG~o|{YN67%Kޖ g*y48#>ĽEV'! Gox\xV--y۞@xL+,4,8زIJ'3ܱzw)h> -´!Ie9|,ЖaJe)ĺ zNh2\-al*%_PljfW"(4 OggĨr&l7ah\2 }&@`OaJiͭ4}1haM#6%a)oGX.9DKܿ+ .u,\08B,B[gNta#Ɣ.CŻ4<>/Xcuc#%E]JuYZI3xpZ̢*qjMÉհ髼B>cZ,lo6Nw; vh8!"w/o[LӠ?H9IB)1NN,ꎼvE4K?.06sYl0P4&[o $XFn<.B@٧<%tSԶ֩vIau~I(omG %$.49ke2C7~#0sZSKsS@ӋܠS.L&^ݚ缢ieVf?a{?aPI(w1{t2UJU .Xk "+Ϗ |ӮB@K:MZ;  O]F4O-=z6],p8v~q-~YØP tX"L.B!u2w^31 b4Vsuj߯z% ri,U(Hj>ȥmP ]4> 逳GKY:3Z6fƄ mҭq.HO JԒ<k]mxᲄ낅`&oK$mVA-\JΛ?7pUuv*Uʠ \ Y>Oa"- YJHeOAéAVWEBVvS0$+sU1 Nz0F'* Ĵy1ZwO90@z'ɽ9sD\OReUv9n2w4m;A=яtL%HI}:5T $A'ňE?m$pԷF ,|OEscϸ8E;`kb̢jH wᾌXٱ}tĭSSl'QVCiHKةhqOʘ{~e<3pp2?;UXP}8B"?͎O|I,0Y P3ȼ>0pۉ[^,']E$ ƮEjωןׯ>]q7wKfԗWp0XJ͘7a`~"P|hE C2)+N[/lO;=;vOGr0qq  C|S4 4l.gG8eUMk4 K!YP3 GhfB87ǗΔV#bZҘk>Rȁc.@gxu'ݽoe+Usq4NfbPE\+8b Y[7r&}q?{ȧe_RzHzHw~ f 8N⯬A‰ȹ5dBPqbFe. !,DGh|.QzDB?YI님A\q [4!ұ÷\_7e( )h1ONhcn(~ңl''.mxynQ>vi. :&y> "x~ |}dI>'O B^Ays*icHLT{>] nܢ!f1_ɷ[Myg/1:h}!l-JMeB5~v6Le5ywD'Uk J_I\C16GQ';%2(ek =` IL k!t̤4 X`sUdtrW6eEb\VvC»ߟt]<(?%&4kPv4HSAw)jÕ;N| }>() N29QrSc搻MC%Tֳ7l\,m=֮t|$ܵ1#1{O)$"JNKQ }-5j>;-uDׇƺiE7sZ 1PRm;oN*/g : 309 OТLKKG8og_8:!OqNL'|MYw8 Bd˧&g``wRx nQ-;&Nā!j 8~,}C-WWDcJN?gcl[ iY!-Nҩ5;YJ?}6hɡ5y~ ŒcIMFo4쥤C+֗=ݨ3e1n۞邤a"8GIrڟ<ú2b&{\}&\=iu #|7 @@!5[/ބt^?JQ  TdץZ')[K9i`+$&3C㚎YI l}#1 x,f[|Km`Rm0*oJrX{WYluX:~M<Ӻi|EѲp}~ ]A_\y8ٯ=/wn,ia`w*f͚xYw)n7jbT^PYw$7'N UIo(ϣŲϻ4rJj7{۳hwP4"-xgF{؈Yb@qyIi@/|%!Ni AYz;0˂ZXhXɩd H" FӴkF0>ZS\ "_YL~fA[3boRk^Ao@xg!pt1҈ endstream endobj 310 0 obj << /Length1 2104 /Length2 12531 /Length3 0 /Length 13797 /Filter /FlateDecode >> stream xڍT.wkRݝKŊoqw(PZ(Ž7[>׺we$;3_BG&fhvtqs $45<윜htt`o16 / I!P;%GZO)CGA$lPb;:\$\V1 `4gp ́% d=hp4 ^E(l 8 rpxxx]]0<k:0@h+3v4:5/%@v`s+АS82Vˀwm\\Og `ہ*ҊO+`!tfP?#@hjvHh,$AW?̡efm=` ?psr;$6~ˬ@+NNN~.4^ O14_o'G'%4 /@v7и`s dv@,w{ 87#h{Y8:y6~95Y'5Z$@Apst+Hg{4ͥYwr4q?7.7 i7;?Ռ?j=oh˺A55J j @9XSF4d [1;HNqqr:Wн ?U R Fܯ^h / } !/BC7pH8ҿC7pFPNʢ⇲FP?߈A hzo$0B9+5fpX B#Y&hd ]-2 4RAhvXC.hd ߇AmO:VC}[d -[L#V : 99B@#up&|urك _n3B7>n B y k|\ߠ ,: 4t։{M1ytc!'3fm\%H1^]zބA$A}fmyT7! lo}}ma{T o=e<*k_+?V̲׊1 ,7^ AQ0yb_]NO`A[;nݗ*Mn^RZR} +zoy%ﲒMN&ve3q kbjn6%F-]+UW:WgHˣ vB0Չ*Ǒf!⠃D(D^Qyϊ 3.ҽ(.ח']_n>_]'4LEĦg P4ի6i0#(NzZ1wS tfY :5T0=X}osYaS3ڦ-m7Epx|hoڊҖ?øP?h>*'= BoxLx"V_s4QPc39))ij}YS@E~z\86 bڋ;coL'Ս罨$xQ:#b70Z>{ŝYIM5h++E xyyuF!: Xպ6f](D6ckZx0nG! we3iv#GvNM{dq}zg6uն Dz/JtPX6WȘ.9%˧P/n]04ZR#շOl/`v#ZVK1xOjʯB]נo,6Q^l6?VIȬ"cq"y1B?K%EDaԷ-yKC_w>7V.lDdyn[BaݫuS989k9:e#Z_N_I)>:G\7?Aξq|#V20y[ܓ-EL].4NfۮA69!km8&؏ܿ gg\MkckIDYk~BK~TT?ux̯~CͳaθжF^]quFq`eHMNO'oxA_޹+Ďz_m"8BBW6Uӝ/dU[(N^UG$x*3]h> hyg5̞>ѱ+MLQUPT$@HtэKExnhܞؚˤħ"}࢘jIrn@"y|Es[-١F8L(xz|X|ǴOy>/྄8Y`v|Bl#h8b 7-ðdy?jT߯En(q*_-[c7`~_0BYɇjy9'_PWe+9@߽et:A2_+W|Ùh_+B{ ܯAkcCh˪֐`ONt*$4ZȸCgk[RYȋD8Q` FrG|@?Gݴ<_'!UY>4dt\anݮYZbї/ֵ:Ы\u$NU@` B$i7{[O>(9bplVQ_wtg6?70Ճc)qDԳ|N>ɘ=3NB+&P8>O4 !QLogۅKE˯Jp \!7kD'ҲRݔ4wsXFyOvx[Kzo|ʹH4GVE~—~GƐϴ `@+9ó _BrOTHޱ?`GO&||S۔2Dp_{8AtC|jLpriO qe6f} ȝQyL3i(*FA@5/_U) ҫ`I8oͼ ɀE6L-` ^e}#~mD9f)lϗOڟٿC{do/悂؀T^R%?lUF|ū;7X]0mvدkj:~3Tݙ8! {42 6>ťRg8d_qGU L`!w~k9UYmcU.i v_Ѵ IA"%nWۍve,F8x JQrŸPPquJq"?[t3EYwݺƸLVyLEwY\I~Ӹ)DC HjюuP~ѸYQǖ{'&Pj0HeuA_,嚼ψ_7m#v)B_3$5]'{4SFUp"g0ڕ|äڟ TY2cN91bOyQ*I$<_#%ؖi$_ӯH%>\ЋuէptqkD:JdTmY҄1jY\~}ɔo{>.خeMG^-pϦ`Se^77"՞M!2zŃlfO~xϡ˅,lMvQ s]v"f23xկ84'C/ya~)wzy z3d|e[\LjIU/7$xlAZ,EHaMhqT `;vt;d>"$ Yj*vVV9Q&^<Ƹ>D@1V7{"am!.ķ޸RUcؘ}RXDMY5)F"8 r  A{1Qr4jpuWܕ@YBQgkz#My!C?OnR9=R~(8in߭Oǫ0z#6EEY1ӓU: 9S7d`K;rF9g𴃘yL 8wӨGwәp{l<붲7.D= r.Ke[˷tWT%JHQS*_A"ɷ5&ą`y{fa&~|5^a9b_8aCO:-ȴ:U6z7c " +SCis36 ~շMV /2{L#*nc2QRl^ɖ_bUe 7qK"Z s"(8{)v*KJ4c;/$c-9G]D)s2L2dMwBŖpg3:H׫?ƜX:k- Hd !10kK/hUMVB,ۮKi5sa$ =>eX%\>|xtsZ- uX~},쾙b*Q#uח΄Ҝ>N7=g*U:\QQ3Uy2ZzWlE=!cHM;~tA(jyBUuE*zH2.82p?"UXR #:=ȏ~DĂMAoj˄@}/gO|GEnӬI5ZC 0L!%4̤Dj Hnv>8.RҺVV7GeM*K?QT'[Oފo5[ 㖡:HSAg_N8RD^ܿR0ЩmoaaSbT$fGK r2ч1g-)"eTSE"&EDq3~,fz7=*`Aڼ۝9;q IlIf^.*B#EWD/-t`R؇CI޾ 7Gjcw;?*Т+zg2 |_A3%lsNjRIks~l8Q a6[ǂ&@쾕}HWsT26z,H0].bQ~-E踶}mk5ln*i\ iB'1{d=9';';O3xTBjKRsTo_1R`H}h©iCIﲊoпtOhQIUK0 Oj U+̌}6 {iƗ|\fDZzp\0.sm!@9JPSǧnxQe -eDŽŸd!^s!cҊ.Q߶Bi5Q5{ψ bRSVNIMULS0,:F@V){ݡ"9xIey*,:JV97?no!eWM3u~ 9DwխFu - _|D?F*v>'A,}QwpYDz$V6q45Ż5!h{`I;I]gl 2rw͌^ N6~ [І~MC6 v# M_$OvN6u8#-īTzЃ:>fwWaٙcp]eaZrZwKLKVf}1;f2MsӣStOqqZ7**)c`k>9i)H#"IPy„I3!׃bz 9Ved~fE%ߒxEEjIF.x҇N)eOx>iO(5gg+\g[VR"_i޽,[DA%YTғ |s!R|K?%M4))c X# aQVOz3 .+a^O#&7$yx.Y22J {_FnܰN(/ 7bGG'0D#t_dqdSi7) *[b#-SKA"j 7-䜝+"UHgz% 筺\0 d& ,X9-sxRF{bm'9̍ຽ#wc)M|~ؖQ0i,5&iBEoL.)Ҡ14'W]̌56P5=~ &uޠUҋ967#N# ܼ@GB@WUo/?Xt^24XGyLqwQ4L;_Lx4a?׿@m گh%C@NRq_%4*oCKSIPP[Tr 4r!z@:y n_O Yhql4k2H{Mo;|ԡStn'! VXTte1 cC!"w"Έ?ǔY gL4czZ94[2/mS.[tJ@Y-UY[}*Ա!w>Y誈 5{K-p>mG*BD?vJTr_z$qT. ߰C}Lz#C 6':]H zthRJ/ Lu^ͧZ^gnɝދ ^4#lq&SH劼 `4b )6=ldcN%K'SH{~WLO$ƏQYZ!E潧rRcC&oAP7__"{1"4ċܿ R| "Y1AOavO.Ib6ؤ/by"4D38x^^8=g#c[!\wnje|fpAgfmLG Oy׹v6qc5Y9Jt`Fx=" q{/u{']rӑl5HɤYCe&0: ]n$4Xg<>wڮ~xxb*^1Ş%N5.n9{DJR/²u>#)|c 0 kV+zOWKX{ǧ}ӧaٝsW+ ˞ ?vGOox`Co[8]nVb U" ̗یϡE}$2عcTC3Lx 9?X&_N"z/;'<^iMcknm#}$ߠ|5CP_}a/_XG&f dmfߘ$JGmsx,D=paUWo<`X w^hBKɾC(e__Lrͳ*aIcN&E0*(pWzWf {C eO'6ΐvO' *WV{uLq Vo;S4j04\RKyDos$IP/= jp}9G nK){LJ#sH3P 'm9Yf!R|.E7y.) b01KsLմV-ȊtHpBܫcһu|l6[1~~uGJB@dO zJ2z,L:6n1VIӲL%Kϯ<'لUW|^(1C}%)pg͸yYJpX:2BhA(?~<ѽHi*~jõ+YgaÖ..``7Ad]vYp8p!W( 268$/ ֭7)v4 pG2CѭduD/Τ~|Z~RfǷ%/xOd6T!:3 q* .^ϓ# mpѠLEѭНBX9~%=MNPl( kW}ү#( ^R^7;*'ݕk 7~? CŌ>|x^3HM>`#la/$6%$_gJ( ELWo~~vG1a@nP"Mʎ2IQ D*h½&unZdhL 3@-xIeT,*'4Dr?S66 ,F :3dxG&@ނj_s3B݄[I!d'/bRb/Ŭ=No,|t4rwŌv$/o~4mhhjX0*zvcӮZd,.%\i &XU͛1^4=;&) 𕑶i1L{*Ҹua3B8kWt[YN|MsG}!\d )-a{Z D95-GTe^\qȈuO^q=Z[t{9zw-vc/ A&[noGcGU[EF5']OXf\ڞt (M|,WQ6?/\Lo?Oi CQlElE.{UٸOҭR8(%k^Qm Уy_B$<ێ 8g\_2z EZfa2zw& /Y}AuTm_49avex?oN.+sdQ_!6L;owxPW~Ŷ z0Ǯ͑ rZ!ҏ SC !OFša5nZyNrxp ^bNjCv\*0#0Q +e$.dIԤi袗j!}6& o&}-.>+GEk պ Jq=!f8h~y[*#i@ Ȋxp.a`AqZ&QiTau#wc䫌Cvj9RIWerp@M:\i Hp)i̯ǘӧX8)H_Ïtrp?c/~Q%*-ң;3Ɵ;3˕πo>ȿweC29K`"I:NmV!94]9zě+'[ibv? UΗcIz[@"dvzlPKuumq*ti- y-A cŭ#K^K&bX4!F: *E5gq-jrY&Iy2Hi*$e߆ I8i$DJؼ 7B_r6+7^y3`؂x7ZkQ@8FVEu.od 0BJO t aԇRQǫZ.X!;?UW-ݹ)?iCXbz^(?d@5]c]D K9"E(5|Nkrt/jH\!}zOI2eӍ@EQK7+89hg9IUPMrυ#x7 {:ʥcQ" LOZ6-]&\qSkse 2اMEK"S#qxj39AZn,x&OrXgih;sf3OU#qM%`.yBx$2ϪFRÚ`M|^􇱅x=*(8n ?čGOS/;]p7oU`ԐzC|N.#zX0s6c7T&y gG?RQ~Huy;`;,^,"#7܅tggF4J}i`إftO0g-QG63s{-KEY/SvOi3@ޓOS2º)FD(1 Pk]Ra6p\|eA*̧6J*QB*g :!cVOJ:pRۑ~T~:3;j,vz )!?xUwө<*G;ǫ1x9Zpίn|NUYA endstream endobj 329 0 obj << /Producer (pdfTeX-1.40.17) /Creator (TeX) /CreationDate (D:20160907171633-04'00') /ModDate (D:20160907171633-04'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.17 (TeX Live 2016/MacPorts 2016_1) kpathsea version 6.2.2) >> endobj 281 0 obj << /Type /ObjStm /N 77 /First 682 /Length 3360 /Filter /FlateDecode >> stream xZIsWQW`JJ%G$χ19&H;} `VȢwA tCi&ŠDsV&.hu,::<1pMxf:K*$bT"9șDJAH%e"Sd)dT&XOU̢c G(gyUF0)$Z:D+!n5tW*l8ZhB'& !DAG)lÌDQGĦHlwR3hB$B jV8I+/3.+4\X#@39#@l N ARb&MRˠq9 #c Dji+&DΒ8&($'"/’kA͔@(RBC 5RpM$yFq,!¸g$h9vP9,Ӵj(kpd%Gr~GVTtF +!& h-HPˠ0u{&K큋(8547l}6M1&*LX⼐ FҬ! Z乆Qp&x(Jih%pmҶ)̐ϼQĻk9-\ {\l骼,W?>ͯr rdh)cPTRp=-@y<)+ 0Ckny9=\\΋$MqD&nBU:/6;dG=d?G1{žg=g쌝 fcS6]Η |s6c {XdWd9f dEnM*3bk.> .? \m^[>J/&?x/`]<~`Ϗy:,^ ,J.6AՈA߲O].CXqxE2w>aEOeXś`AHdV;Ywɯ\u4(ubPڍ}/>pU>̋|׳|}ŊopЅys-\}/ٟ(q=ԗD*^>.7T@G| wuTnn{?b%^> p~2:\o iW@u7w{erRs}Bs"Nmd-}~䵇b $ADғ([q5FB18&'8t4@̇0mg/}tt*Eގ;El`T85]Y: ۴\MtyyڵSxOG®}$`GeײΞ="F< Q7EL@^妜 t)|9:Awޘ-|դ%/!|͋:$w8e)XoJ(R|D!|n:y4q 7%bdd^&bdP\-}hP. K7v+]_8+t\/ _ :F=buZkҍH~BBVrGѻK+}[J!H%>!vק_dي_AC1;SPE~Y͖'(glCMqۯϵ "9mxKupE^8[7dkկy %ؚغ ] /Length 799 /Filter /FlateDecode >> stream x%;pOQw? B"xEBD""$A`GE Ðf ch4ƨ^i{9{53f<"wAv١T`[[- sAHA!(Š2P*@% "P he ǭv_^>S8E0K4` v> u):0"Z A@u5M50F38`hhsDdӸ `#7xKp#n7U @G[]88SÓL[mMUrFC @WDNz蔠?ֈ