netcdf-1.0.20/0000755000000000000000000000000015205072111007755 5ustar00netcdf-1.0.20/.travis.yml0000644000000000000000000000041115205072111012062 0ustar00language: cpp sudo: required dist: trusty before_install: - sudo apt-get -qq update - sudo apt-get install -y octave liboctave-dev libnetcdf-dev netcdf-bin script: cd ..; mv octave-netcdf netcdf; octave --eval 'pkg install netcdf; pkg load netcdf; test_netcdf' netcdf-1.0.20/COPYING0000644000000000000000000010451315205072111011014 0ustar00 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 . netcdf-1.0.20/DESCRIPTION0000644000000000000000000000076115205072111011467 0ustar00Name: netcdf Version: 1.0.20 Date: 2026-05-25 Author: Alexander Barth Maintainer: John Donoghue Title: netcdf Description: A NetCDF interface for Octave Depends: octave (>= 4.0.0) BuildRequires: netcdf-devel [Fedora] libnetcdf-dev [Debian], netcdf-bin [Debian] License: GPLv3+ Url: https://gnu-octave.github.io/octave-netcdf/ Repository: https://github.com/gnu-octave/octave-netcdf/ Tracker: https://github.com/gnu-octave/octave-netcdf/issues netcdf-1.0.20/INDEX0000644000000000000000000000246015205072111010551 0ustar00netcdf >> NetCDF interface High-level functions nccreate ncdisp ncinfo ncreadatt ncread ncwriteatt ncwrite ncwriteschema Low-level functions #! Library Functions netcdf.setDefaultFormat netcdf.inqLibVers netcdf.setChunkCache netcdf.getChunkCache #! File Operations netcdf.create netcdf.open netcdf.abort netcdf.sync netcdf.endDef netcdf.inq netcdf.inqFormat netcdf.inqUnlimDims netcdf.inqGrps netcdf.reDef netcdf.setFill netcdf.close #! Dimensions netcdf.defDim netcdf.renameDim netcdf.inqDim netcdf.inqDimID #! Groups netcdf.defGrp netcdf.inqGrpName netcdf.inqGrpNameFull netcdf.inqGrpParent netcdf.inqGrpFullNcid netcdf.inqNcid netcdf.inqVarIDs netcdf.inqDimIDs #! Variables netcdf.defVar netcdf.renameVar netcdf.defVarFill netcdf.inqVarFill netcdf.defVarDeflate netcdf.inqVarDeflate netcdf.defVarChunking netcdf.inqVarChunking netcdf.defVarFletcher32 netcdf.inqVarFletcher32 netcdf.putVar netcdf.getVar netcdf.inqVarID netcdf.inqVar #! Attributes netcdf.inqAttName netcdf.inqAttID netcdf.inqAtt netcdf.getAtt netcdf.putAtt netcdf.copyAtt netcdf.renameAtt netcdf.delAtt #! User-Defined Types netcdf.defVlen netcdf.inqUserType netcdf.inqVlen #! Utilities netcdf.getConstant netcdf.getConstantNames Test function test_netcdf netcdf-1.0.20/Makefile0000644000000000000000000002761015205072111011423 0ustar00## Copyright 2015-2016 Carnë Draug ## Copyright 2015-2016 Oliver Heimlich ## Copyright 2017 Julien Bect ## Copyright 2017 Olaf Till ## Copyright 2018-2023 John Donoghue ## ## Copying and distribution of this file, with or without modification, ## are permitted in any medium without royalty provided the copyright ## notice and this notice are preserved. This file is offered as-is, ## without any warranty. TOPDIR := $(shell pwd) ## Some basic tools (can be overriden using environment variables) SED ?= sed TAR ?= tar GREP ?= grep CUT ?= cut TR ?= tr TEXI2PDF ?= texi2pdf -q MAKEINFO ?= makeinfo MAKEINFO_HTML_OPTIONS := --no-headers --set-customization-variable 'COPIABLE_LINKS 0' --set-customization-variable 'COPIABLE_ANCHORS 0' --no-split # work out a possible help generator ifeq ($(strip $(QHELPGENERATOR)),) ifneq ($(shell qhelpgenerator-qt5 -v 2>/dev/null),) QHELPGENERATOR = qhelpgenerator-qt5 else ifneq ($(shell /usr/lib64/qt6/libexec/qhelpgenerator -v 2>/dev/null),) QHELPGENERATOR = /usr/lib64/qt6/libexec/qhelpgenerator else ifneq ($(shell qcollectiongenerator-qt5 -v 2>/dev/null),) QHELPGENERATOR = qcollectiongenerator-qt5 else ifneq ($(shell qcollectiongenerator -qt5 -v 2>/dev/null),) QHELPGENERATOR = qcollectiongenerator -qt5 #else ifneq ($(shell qhelpgenerator -qt5 -v 2>/dev/null),) # # qt4 version wont error on-qt5 but also wont work # QHELPGENERATOR = qhelpgenerator -qt5 else QHELPGENERATOR = true endif endif ## Note the use of ':=' (immediate set) and not just '=' (lazy set). ## http://stackoverflow.com/a/448939/1609556 package := $(shell $(GREP) "^Name: " DESCRIPTION | $(CUT) -f2 -d" " | \ $(TR) '[:upper:]' '[:lower:]') version := $(shell $(GREP) "^Version: " DESCRIPTION | $(CUT) -f2 -d" ") pkg_date := $(shell $(GREP) "^Date: " DESCRIPTION | $(CUT) -f2 -d" ") pkg_year := $(shell $(GREP) "^Date: " DESCRIPTION | $(CUT) -f2 -d" " | $(CUT) -f1 -d"-") ## These are the paths that will be created for the releases. target_dir := target release_dir := $(target_dir)/$(package)-$(version) release_tarball := $(target_dir)/$(package)-$(version).tar.gz html_dir := $(target_dir)/$(package)-html html_tarball := $(target_dir)/$(package)-html.tar.gz ## Using $(realpath ...) avoids problems with symlinks due to bug ## #50994 in Octaves scripts/pkg/private/install.m. But at least the ## release directory above is needed in the relative form, for 'git ## archive --format=tar --prefix=$(release_dir). real_target_dir := $(realpath .)/$(target_dir) installation_dir := $(real_target_dir)/.installation package_list := $(installation_dir)/.octave_packages install_stamp := $(installation_dir)/.install_stamp ## These can be set by environment variables which allow to easily ## test with different Octave versions. ifndef OCTAVE OCTAVE := octave endif OCTAVE := $(OCTAVE) --no-gui --silent --norc MKOCTFILE ?= mkoctfile ## Command used to set permissions before creating tarballs FIX_PERMISSIONS ?= chmod -R a+rX,u+w,go-w,ug-s GIT := git GIT_TIMESTAMP := $(firstword $(shell $(GIT) log -n1 --date=unix --format="%ad")) ## Detect which VCS is used vcs := $(if $(wildcard .hg),hg,$(if $(wildcard .git),git,unknown)) ifeq ($(vcs),hg) release_dir_dep := .hg/dirstate endif ifeq ($(vcs),git) release_dir_dep := .git/index endif TAR_REPRODUCIBLE_OPTIONS := --sort=name --mtime="@$(GIT_TIMESTAMP)" --owner=0 --group=0 --numeric-owner TAR_OPTIONS := --format=ustar $(TAR_REPRODUCIBLE_OPTIONS) ## .PHONY indicates targets that are not filenames ## (https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html) .PHONY: help ## make will display the command before runnning them. Use @command ## to not display it (makes specially sense for echo). help: @echo "Targets:" @echo " dist - Create $(release_tarball) for release." @echo " html - Create $(html_tarball) for release." @echo " release - Create both of the above and show md5sums." @echo " install - Install the package in $(installation_dir), where it is not visible in a normal Octave session." @echo " check - Execute package tests." @echo " doctest - Test the help texts with the doctest package." @echo " run - Run Octave with the package installed in $(installation_dir) in the path." @echo " clean - Remove everything made with this Makefile." ## ## Recipes for release tarballs (package + html) ## .PHONY: release dist html clean-tarballs clean-unpacked-release ## To make a release, build the distribution and html tarballs. release: dist html md5sum $(release_tarball) $(html_tarball) @echo "Upload @ https://sourceforge.net/p/octave/package-releases/new/" @echo " and note the changeset the release corresponds to" ## dist and html targets are only PHONY/alias targets to the release ## and html tarballs. dist: $(release_tarball) html: $(html_tarball) ## An implicit rule with a recipe to build the tarballs correctly. %.tar.gz: % $(TAR) -cf - $(TAR_OPTIONS) -C "$(target_dir)/" "$(notdir $<)" | gzip -9n > "$@" clean-tarballs: @echo "## Cleaning release tarballs (package + html)..." -$(RM) $(release_tarball) $(html_tarball) @echo ## Create the unpacked package. ## ## Notes: ## * having ".hg/dirstate" (or ".git/index") as a prerequesite means it is ## only rebuilt if we are at a different commit. ## * the variable RM usually defaults to "rm -f" ## * having this recipe separate from the one that makes the tarball ## makes it easy to have packages in alternative formats (such as zip) ## * note that if a commands needs to be run in a specific directory, ## the command to "cd" needs to be on the same line. Each line restores ## the original working directory. $(release_dir): $(release_dir_dep) -$(RM) -r "$@" ifeq (${vcs},hg) hg archive --exclude ".hg*" --type files "$@" endif ifeq (${vcs},git) git archive --format=tar --prefix="$@/" HEAD | $(TAR) -x $(RM) "$@/.gitignore" endif ## Don't fall back to run the supposed necessary contents of ## 'bootstrap' here. Users are better off if they provide ## 'bootstrap'. Administrators, checking build reproducibility, can ## put in the missing 'bootstrap' file if they feel they know its ## necessary contents. ifneq (,$(wildcard src/autogen.sh)) cd "$@/src" && ./autogen.sh && $(RM) -r "autom4te.cache" endif ifneq (,$(wildcard doc)) $(MAKE) -C "$@" docs #cd "$@" && $(RM) -f doc/mkfuncdocs.py doc/mkqhcp.py endif cd "$@" && $(RM) -rf devel ## Uncomment this if your src/Makefile.in has these targets for ## pre-building something for the release (e.g. documentation). # cd "$@/src" && ./configure && $(MAKE) prebuild && \ # $(MAKE) distclean && $(RM) Makefile ## ${FIX_PERMISSIONS} "$@" run_in_place = $(OCTAVE) --eval ' pkg ("local_list", "$(package_list)"); ' \ --eval ' pkg ("load", "$(package)"); ' # html_options = --eval 'options = get_html_options ("octave-forge");' ## Uncomment this for package documentation. html_options = --eval 'options = get_html_options ("octave-forge");' #html_options = --eval 'options = get_html_options ("octave-forge");' \ # --eval 'options.package_doc = "$(package).texi";' ifneq (,$(wildcard doc)) html_options += \ --eval 'options.package_doc = "octave-$(package).texi";' \ --eval 'options.package_doc_options = [options.package_doc_options " --css-include=octave-$(package).css"];' endif $(html_dir): $(install_stamp) $(RM) -r "$@"; $(run_in_place) \ --eval ' pkg load generate_html; ' \ $(html_options) \ --eval ' generate_package_html ("$(package)", "$@", options); '; $(FIX_PERMISSIONS) "$@"; clean-unpacked-release: @echo "## Cleaning unpacked release tarballs (package + html)..." -$(RM) -r $(release_dir) $(html_dir) @echo ## ## Recipes for installing the package. ## .PHONY: install clean-install octave_install_commands = \ ' llist_path = pkg ("local_list"); \ mkdir ("$(installation_dir)"); \ load (llist_path); \ local_packages(cellfun (@ (x) strcmp ("$(package)", x.name), local_packages)) = []; \ save ("$(package_list)", "local_packages"); \ pkg ("local_list", "$(package_list)"); \ pkg ("prefix", "$(installation_dir)", "$(installation_dir)"); \ pkg ("install", "-local", "-verbose", "$(release_tarball)"); ' ## Install unconditionally. Maybe useful for testing installation with ## different versions of Octave. install: $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) ## Install only if installation (under target/...) is not current. $(install_stamp): $(release_tarball) @echo "Installing package under $(installation_dir) ..." $(OCTAVE) --eval $(octave_install_commands) touch $(install_stamp) clean-install: @echo "## Cleaning installation under $(installation_dir) ..." -$(RM) -r $(installation_dir) @echo ## ## Recipes for testing purposes ## .PHONY: run doctest check ## Start an Octave session with the package directories on the path for ## interactice test of development sources. run: $(install_stamp) $(run_in_place) --persist ## Test example blocks in the documentation. Needs doctest package ## https://octave.sourceforge.io/doctest/index.html doctest: $(install_stamp) $(run_in_place) --eval 'pkg load doctest;' \ --eval "targets = '$(shell (cd inst && ls *.m) | $(CUT) -f2 -d@ | $(CUT) -f1 -d.)';" \ --eval "targets = strsplit (targets, ' '); doctest (targets);" ## Test package. octave_test_commands = \ ' pkgs = pkg("list", "$(package)"); \ dirs = {pkgs{1}.dir}; \ __run_test_suite__ (dirs, {}); ' ## the following works, too, but provides no overall summary output as ## __run_test_suite__ does: ## ## else cellfun (@runtests, horzcat (cellfun (@ (dir) ostrsplit (([~, dirs] = system (sprintf ("find %s -type d", dir))), "\n\r", true), dirs, "UniformOutput", false){:})); endif ' check: $(install_stamp) $(run_in_place) --eval $(octave_test_commands) ## ## Docs ## .PHONY: docs docs: doc/octave-$(package).pdf doc/octave-$(package).html doc/octave-$(package).qhc clean-docs: $(RM) -f doc/octave-$(package).info $(RM) -f doc/octave-$(package).pdf $(RM) -f doc/octave-$(package).html $(RM) -f doc/functions.texi $(RM) -f doc/version.texi $(RM) -f doc/octave-$(package).qhc doc/octave-$(package).qch doc/version.texi: $(release_dir_dep) @echo Generating $@ @echo "@c autogenerated from Makefile" > $@ @echo "@set VERSION $(version)" >> $@ @echo "@set PACKAGE $(package)" >> $@ @echo "@set DATE $(pkg_date)" >> $@ @echo "@set YEAR $(pkg_year)" >> $@ doc/octave-$(package).pdf: doc/octave-$(package).texi doc/functions.texi doc/version.texi cd doc && SOURCE_DATE_EPOCH=$(GIT_TIMESTAMP) $(TEXI2PDF) octave-$(package).texi # remove temp files cd doc && $(RM) -f octave-$(package).aux octave-$(package).cp octave-$(package).cps octave-$(package).fn octave-$(package).fns octave-$(package).log octave-$(package).toc doc/octave-$(package).html: doc/octave-$(package).texi doc/functions.texi doc/version.texi cd doc && SOURCE_DATE_EPOCH=$(GIT_TIMESTAMP) $(MAKEINFO) --html --css-ref=octave-$(package).css $(MAKEINFO_HTML_OPTIONS) --output=octave-${package}.html octave-$(package).texi doc/functions.texi: $(release_dir_dep) cd doc && ./mkfuncdocs.py --src-dir=../inst/ --src-dir=../src/ --allowscan ../INDEX | $(SED) 's/@seealso/@xseealso/g' > functions.texi doc/octave-$(package).qhc: doc/octave-$(package).html ifeq ($(QHELPGENERATOR),true) $(warning No QHELPGENERATOR ... skipping QT doc build) else cd doc && ./mkqhcp.py octave-$(package) && $(QHELPGENERATOR) octave-$(package).qhcp -o octave-$(package).qhc cd doc && $(RM) octave-$(package).qhcp octave-$(package).qhp endif ## ## CLEAN ## .PHONY: clean clean: clean-tarballs clean-unpacked-release clean-install clean-docs @echo "## Removing target directory (if empty)..." -test -e $(target_dir) && rmdir $(target_dir) @echo @echo "## Cleaning done" @echo netcdf-1.0.20/NEWS0000644000000000000000000001020515205072111010452 0ustar00Summary of important user-visible changes for netcdf 1.0.20: ------------------------------------------------------------------- ** Minor doc updates ** Octave 12+ compatibility updates Summary of important user-visible changes for netcdf 1.0.19: ------------------------------------------------------------------- ** Minor doc updates Summary of important user-visible changes for netcdf 1.0.18: ------------------------------------------------------------------- ** Minor bug fixes ** Minor doc updates Summary of important user-visible changes for netcdf 1.0.17: ------------------------------------------------------------------- ** Fix compiling Octave 9+ ** Add +netcdf package functions ** minor doc updates Summary of important user-visible changes for netcdf 1.0.16: ------------------------------------------------------------------- ** Fix compiling Octave 8+ ** minor doc updates Summary of important user-visible changes for netcdf 1.0.15: ------------------------------------------------------------------- ** Update license to use GPLv3+ ** Add NC_VLEN processing as a user type ** Add user manual ** add warning in getVar if try to read negative ** minor doc updates ** Update requirement of octave version to 4.0+ Summary of important user-visible changes for netcdf 1.0.14: ------------------------------------------------------------------- ** Add NC_STRING type as an octave type ** Minor bugfixes Summary of important user-visible changes for netcdf 1.0.13: ------------------------------------------------------------------- ** Update to depend on Octave 3.8+ ** Update for Octave 5 and newer Summary of important user-visible changes for netcdf 1.0.12: ------------------------------------------------------------------- ** Fix bug #51443: configure in dev octave 4.3.0+ Summary of important user-visible changes for netcdf 1.0.11: ------------------------------------------------------------------- ** Fix cleaning of files (thanks to Rafael Laboissiere) Summary of important user-visible changes for netcdf 1.0.10: ------------------------------------------------------------------- ** Fix bug #46060: building with the --enable-64 option Summary of important user-visible changes for netcdf 1.0.9: ------------------------------------------------------------------- ** Fix bug #47014: writing NaNs Summary of important user-visible changes for netcdf 1.0.8: ------------------------------------------------------------------- ** Fix bug #45190, #46747: netcdf(nccreate) to enable DeflateLevel in nccreate ** Fix bug #46798: using the right delete operator Summary of important user-visible changes for netcdf 1.0.7: ------------------------------------------------------------------- ** Apply patch from John Donoghue to allow cross-compilation (bug #44837) Summary of important user-visible changes for netcdf 1.0.6: ------------------------------------------------------------------- ** ncread: do not replace _FillValue by NaNs for characters ** ncdisp: fix for attributes value with %-sign Summary of important user-visible changes for netcdf 1.0.5: ------------------------------------------------------------------- ** Implement DeflateLevel in nccreate Summary of important user-visible changes for netcdf 1.0.4: ------------------------------------------------------------------- ** Work-around for problem in netcdf 4.1.3 for reading a unlimited variable of current size 0 Summary of important user-visible changes for netcdf 1.0.3: ------------------------------------------------------------------- ** remove NC_INDEPENDENT and NC_COLLECTIVE which are no longer defined in netcdf 4.3.1 Summary of important user-visible changes for netcdf 1.0.2: ------------------------------------------------------------------- ** Avoid obsolete isequalwithequalnans functions Summary of important user-visible changes for netcdf 1.0.1: ------------------------------------------------------------------- ** Fix bug preventing compilation on 32-bit platforms. Summary of important user-visible changes for netcdf 1.0.0: ------------------------------------------------------------------- ** Initial release netcdf-1.0.20/PKG_ADD0000644000000000000000000001231215205072111010770 0ustar00% File automatically generated by PKG_ADD.sh autoload ("netcdf_getConstant", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getConstantNames", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqLibVers", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setDefaultFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_create", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_open", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_abort", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_sync", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_setFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inq", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqUnlimDims", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_endDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_reDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_putVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_close", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAttName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAttID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_getAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_putAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_copyAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_renameAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_delAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVarIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDimID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqDimIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defGrp", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrps", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpNameFull", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpParent", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqGrpFullNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_defVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); autoload ("netcdf_inqUserType", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct")); netcdf-1.0.20/PKG_DEL0000644000000000000000000001327115205072111011011 0ustar00% File automatically generated by PKG_ADD.sh autoload ("netcdf_getConstant", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getConstantNames", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqLibVers", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setDefaultFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getChunkCache", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_create", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_open", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_abort", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_sync", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_setFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inq", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqUnlimDims", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqFormat", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarFill", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarDeflate", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarChunking", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarFletcher32", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_endDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_reDef", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_putVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_close", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAttName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAttID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_getAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_putAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_copyAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_renameAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_delAtt", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVarIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVar", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDim", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDimID", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqDimIDs", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defGrp", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrps", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpName", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpNameFull", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpParent", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqGrpFullNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqNcid", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_defVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqVlen", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); autoload ("netcdf_inqUserType", fullfile (fileparts (mfilename ("fullpath")), "__netcdf__.oct"),"remove"); netcdf-1.0.20/README.md0000644000000000000000000000236615205072111011243 0ustar00# Octave NetCDF A NetCDF interface for Octave ## Introduction The Octave NetCDF toolkit implements the MATLAB NetCDF interface for GNU Octave. ## Requirements * Octave 4.0+ * [Netcdf 4.1+](https://www.unidata.ucar.edu/software/netcdf) Your NetCDF library install needs to include nc-config and development headers ## Installing To install, run the octave package manager: 1. If running Windows, the package may already be installed: type pkg list, to view the installed packages. 2. To install from source forge/package index: `pkg install -forge netcdf` 3. To install from a local tarball. `pkg install netcdf-XXXXXXX.tar.gz` Where XXXXXXX is the version of the the downloaded tarball. ## Usage 1. Load the package. `pkg load netcdf` (Required each time Octave is started) 2. Use the high level function calls (nccreate, ncinfo etc) or use the low level functions in the netcdf namespace ## Documentation See the function list and documentation [online](https://gnu-octave.github.io/octave-netcdf/index) Documentation is also available using octave help. For example: `help nccreate` `help netcdf.open` ## Bugs and Issues Please report issues on the [tracker](https://github.com/gnu-octave/octave-netcdf/issues) netcdf-1.0.20/doc/0000755000000000000000000000000015205072111010522 5ustar00netcdf-1.0.20/doc/functions.texi0000644000000000000000000010767715205072111013447 0ustar00@c --------------------------------------------------- @node High-level functions @section High-level functions @cindex High-level functions @c High-level functions nccreate @c ----------------------------------------- @subsection nccreate @cindex nccreate @deftypefn {} {} nccreate(@var{filename},@var{varname}) @deftypefnx {} {} nccreate(@var{filename},@var{varname},"property",@var{value},...) Create the variable @var{varname} in the file @var{filename}. @subsubheading Properties The following properties can be used: @itemize @item "Dimensions": a cell array with the dimension names followed by their length or Inf if the dimension is unlimited. If the property is omitted, a scalar variable is created. @item "Datatype": a string with the Octave data type name (see @code{ncinfo} for the correspondence between Octave and NetCDF data types). The default data type is a "double". @item "Format": This can be "netcdf4_classic" (default), "classic", "64bit" or "netcdf4". @item "FillValue": the value used for undefined elements of the NetCDF variable. @item "ChunkSize": the size of the data chunks. If omitted, the variable is not chunked. @item "DeflateLevel": The deflate level for compression. It can be the string "disable" (default) for no compression or an integer between 0 (no compression) and 9 (maximum compression). @item "Shuffle": true for enabling the shuffle filter or false (default) for disabling it. @end itemize @subsubheading Example @example nccreate("test.nc","temp","Dimensions",@{"lon",10,"lat",20@},"Format","classic"); ncdisp("test.nc"); @end example @xseealso{ncwrite} @end deftypefn @c High-level functions ncdisp @c ----------------------------------------- @subsection ncdisp @cindex ncdisp @deftypefn {} {} ncdisp (@var{filename}) Display meta-data of the NetCDF file @var{filename} @subsubheading Example @example ncdisp("test.nc"); @end example @xseealso{ncinfo} @end deftypefn @c High-level functions ncinfo @c ----------------------------------------- @subsection ncinfo @cindex ncinfo @deftypefn {} {@var{info} =} ncinfo (@var{filename}) @deftypefnx {} {@var{info} =} ncinfo (@var{filename}, @var{varname}) @deftypefnx {} {@var{info} =} ncinfo (@var{filename}, @var{groupname}) Return information about an entire NetCDF file @var{filename} (i.e. the root group "/"), about the variable called @var{varname} or the group called @var{groupname}. The structure @var{info} has always the following fields: @itemize @item @var{Filename}: the name of the NetCDF file @item @var{Format}: one of the strings "CLASSIC", "64BIT", "NETCDF4" or "NETCDF4_CLASSIC" @end itemize The structure @var{info} has additional fields depending on whether a group of variable is queried. @subsubheading Groups Groups are returned as an array structure with the following fields: @itemize @item @var{Name}: the group name. The root group is named "/". @item @var{Dimensions}: a array structure with the dimensions. @item @var{Variables}: a array structure with the variables. @item @var{Attributes}: a array structure with global attributes. @item @var{Groups}: a array structure (one for each group) with the same fields as this structure. @end itemize @subsubheading Dimensions Dimensions are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the dimension @item @var{Length}: the length of the dimension @item @var{Unlimited}: true of the dimension has no fixed limited, false @end itemize @subsubheading Variables Variables are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the dimension @item @var{Dimensions}: array structure of all dimensions of this variable with the same structure as above. @item @var{Size}: array with the size of the variable @item @var{Datatype}: string with the corresponding octave data-type (see below) @item @var{Attributes}: a array structure of attributes @item @var{FillValue}: the NetCDF fill value of the variable. If the fill value is not defined, then this attribute is an empty array ([]). @item @var{DeflateLevel}: the NetCDF deflate level between 0 (no compression) and 9 (maximum compression). @item @var{Shuffle}: is true if the shuffle filter is activated to improve compression, otherwise false. @item @var{CheckSum}: is set to "fletcher32", if check-sums are used, otherwise this field is not defined. @end itemize @subsubheading Attributes Attributes are returned as an array structure with the following fields: @itemize @item @var{Name}: the name of the attribute @item @var{Value}: the value of the attribute (with the corresponding type) @item @var{Unlimited}: true of the dimension has no fixed limited, false @end itemize @subsubheading Data-types The following the the correspondence between the Octave and NetCDF data-types: @multitable @columnfractions .5 .5 @headitem Octave type @tab NetCDF type @item @code{int8} @tab @code{NC_BYTE} @item @code{uint8} @tab @code{NC_UBYTE} @item @code{int16} @tab @code{NC_SHORT} @item @code{uint16} @tab @code{NC_USHORT} @item @code{int32} @tab @code{NC_INT} @item @code{uint32} @tab @code{NC_UINT} @item @code{int64} @tab @code{NC_INT64} @item @code{uint64} @tab @code{NC_UINT64} @item @code{single} @tab @code{NC_FLOAT} @item @code{double} @tab @code{NC_DOUBLE} @item @code{char} @tab @code{NC_CHAR} @end multitable The output of @code{ncinfo} can be used to create a NetCDF file with the same meta-data using @code{ncwriteschema}. Note: If there are no attributes (or variable or groups), the corresponding field is an empty matrix and not an empty struct array for compatibility with matlab. @xseealso{ncread,nccreate,ncwriteschema,ncdisp} @end deftypefn @c High-level functions ncread @c ----------------------------------------- @subsection ncread @cindex ncread @deftypefn {} {@var{x} =} ncread (@var{filename}, @var{varname}) @deftypefnx {} {@var{x} =} ncread (@var{filename}, @var{varname},@var{start},@var{count},@var{stride}) Read the variable @var{varname} from the NetCDF file @var{filename}. If @var{start},@var{count} and @var{stride} are present, a subset of the variable is loaded. The parameter @var{start} contains the starting indices (1-based), @var{count} is the number of elements and @var{stride} the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. Elements of @var{count} might be Inf which means that as many values as possible are loaded. If the variable has the _FillValue attribute, then the corresponding values are replaced by NaN (except for characters). NetCDF attributes scale_factor (default 1) and add_offset (default 0) are use the transform the variable during the loading: x = scale_factor * x_in_file + add_offset The output data type matches the NetCDF datatype, except when the attributes _FillValue, add_offset or scale_factor are defined in which case the output is a array in double precision. Note that values equal to the attribute missing_value are not replaced by NaN (for compatibility). @subsubheading Example Read the data from variable 'mydata' in the file test.nc. @example data = ncread('test.nc','mydata'); @end example @xseealso{ncwrite,ncinfo,ncdisp} @end deftypefn @c High-level functions ncreadatt @c ----------------------------------------- @subsection ncreadatt @cindex ncreadatt @deftypefn {} {@var{val} =} ncreadatt(@var{filename},@var{varname},@var{attname}) Return the attribute @var{attname} of the variable @var{varname} in the file @var{filename}. Global attributes can be accessed by using "/" or the group name as @var{varname}. The type of attribute is mapped to the Octave data types. (see @code{ncinfo}). @subsubheading Example Read global attribute 'creation_date' @example d = ncreadatt('test.nc','/','creation_date') @end example Read atribute 'myattr' assigned to variable mydata. @example d = ncreadattr('test.nc', 'mydata', 'myattr'); @end example @xseealso{ncinfo,ncwriteatt} @end deftypefn @c High-level functions ncwrite @c ----------------------------------------- @subsection ncwrite @cindex ncwrite @deftypefn {} {} ncwrite (@var{filename}, @var{varname}, @var{x}) @deftypefnx {} {} ncwrite (@var{filename}, @var{varname}, @var{x}, @var{start}, @var{stride}) Write array @var{x} to the the variable @var{varname} in the NetCDF file @var{filename}. The variable with the name @var{varname} and the appropriate dimension must already exist in the NetCDF file. If @var{start} and @var{stride} are present, a subset of the variable is written. The parameter @var{start} contains the starting indices (1-based) and @var{stride} the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. If the variable has the _FillValue attribute, then the values equal to NaN are replaced by corresponding fill value NetCDF attributes scale_factor (default 1) and add_oddset (default 0) are use the transform the variable during writing: x_in_file = (x - add_offset)/scale_factor @subsubheading Example Create a netcdf file with a variable of 'mydata' and then write data to that variable. @example nccreate('myfile.nc','mydata'); ncwrite('myfile.nc','mydata', 101); @end example @xseealso{ncread,nccreate} @end deftypefn @c High-level functions ncwriteatt @c ----------------------------------------- @subsection ncwriteatt @cindex ncwriteatt @deftypefn {} {} ncwriteatt(@var{filename},@var{varname},@var{attname},@var{val}) Defines the attribute @var{attname} of the variable @var{varname} in the file @var{filename} with the value @var{val}. Global attributes can be defined by using "/" or the group name as @var{varname}. The type of value is mapped to the NetCDF data types. (see @code{ncinfo}). @subsubheading Example Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it. @example nccreate("myfile.nc", "mydata", "Format", "netcdf4"); ncwriteatt("myfile.nc", "mydata", "Units", "K"); @end example @xseealso{ncinfo} @end deftypefn @c High-level functions ncwriteschema @c ----------------------------------------- @subsection ncwriteschema @cindex ncwriteschema @deftypefn {} {} ncwriteschema (@var{filename}, @var{schema}) Create a NetCDF called @var{filename} with the dimensions, attributes, variables and groups given by the structure @var{schema}. The variable @var{schema} has the same structure as the results of @code{ncinfo}. @code{ncinfo} and @code{ncwriteschema} can be used together to create a NetCDF using another file as a template: @subsubheading Example @example schema = ncinfo("template.nc"); # the new file should be named "new_file.nc" ncwriteschema("new_file.nc",schema); @end example Unused field in @var{schema} such as @var{ChunkSize}, @var{Shuffle}, @var{DeflateLevel}, @var{FillValue}, @var{Checksum} can be left-out if the corresponding feature is not used. Dimensions are considered as limited if the field @var{Unlimited} is missing, unless the dimension length is Inf. @xseealso{ncinfo} @end deftypefn @c --------------------------------------------------- @node Low-level functions @section Low-level functions @cindex Low-level functions @c --------------------------------------------------- @node Low-level functions - Library Functions @subsection Library Functions @cindex Low-level functions - Library Functions @c Low-level functionsLibrary Functions netcdf.getChunkCache @c ----------------------------------------- @subsubsection netcdf.getChunkCache @cindex getChunkCache @deftypefn {} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf.getChunkCache() Gets the default chunk cache settings in the HDF5 library. @end deftypefn @c Low-level functionsLibrary Functions netcdf.inqLibVers @c ----------------------------------------- @subsubsection netcdf.inqLibVers @cindex inqLibVers @deftypefn {} {@var{vers} =} netcdf.inqLibVers() Returns the version of the NetCDF library as a string. @end deftypefn @c Low-level functionsLibrary Functions netcdf.setChunkCache @c ----------------------------------------- @subsubsection netcdf.setChunkCache @cindex setChunkCache @deftypefn {} {} netcdf.setChunkCache(@var{size}, @var{nelems}, @var{preemption}) Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created. @end deftypefn @c Low-level functionsLibrary Functions netcdf.setDefaultFormat @c ----------------------------------------- @subsubsection netcdf.setDefaultFormat @cindex setDefaultFormat @deftypefn {} {@var{old_format} =} netcdf.setDefaultFormat(@var{format}) Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). @var{format} can be "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic". @end deftypefn @c --------------------------------------------------- @node Low-level functions - File Operations @subsection File Operations @cindex Low-level functions - File Operations @c Low-level functionsFile Operations netcdf.abort @c ----------------------------------------- @subsubsection netcdf.abort @cindex abort @deftypefn {} {} netcdf.abort(@var{ncid}) Aborts all changes since the last time the dataset entered in define mode. @end deftypefn @c Low-level functionsFile Operations netcdf.close @c ----------------------------------------- @subsubsection netcdf.close @cindex close @deftypefn {} {} netcdf.close(@var{ncid}) Close the NetCDF file with the id @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.create @c ----------------------------------------- @subsubsection netcdf.create @cindex create @deftypefn {} {@var{ncid} =} netcdf.create(@var{filename},@var{mode}) Creates the file named @var{filename} in the mode @var{mode}. @var{mode} can have the following values: @table @asis @item "clobber" (overwrite existing files), @item "noclobber" (prevent to overwrite existing files) @item "64bit_offset" (use the 64bit-offset format), @item "netcdf4" (use the NetCDF4, i.e. HDF5 format) or @item "share" (concurrent reading of the dataset). @end table @var{mode} can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or. @end deftypefn @subsubheading Example @example mode = bitor(netcdf.getConstant("classic_model"), ... netcdf.getConstant("netcdf4")); ncid = netcdf.create("test.nc",mode); @end example @xseealso {netcdf.open, netcdf.close} @c Low-level functionsFile Operations netcdf.endDef @c ----------------------------------------- @subsubsection netcdf.endDef @cindex endDef @deftypefn {} {} netcdf.endDef (@var{ncid}) Leaves define-mode of NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.inq @c ----------------------------------------- @subsubsection netcdf.inq @cindex inq @deftypefn {} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf.inq(@var{ncid}) Return informat about a netcdf file. Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use the function netcdf.inqUnlimDims as multiple unlimited dimension exists. @end deftypefn @c Low-level functionsFile Operations netcdf.inqFormat @c ----------------------------------------- @subsubsection netcdf.inqFormat @cindex inqFormat @deftypefn {} {@var{format} =} netcdf.inqFormat(@var{ncid}) Return the NetCDF format of the dataset @var{ncid}. Format might be one of the following "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC" @end deftypefn @c Low-level functionsFile Operations netcdf.inqGrps @c ----------------------------------------- @subsubsection netcdf.inqGrps @cindex inqGrps @deftypefn {} {@var{ncids} =} netcdf.inqGrps(@var{ncid}) Return all groups ids in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsFile Operations netcdf.inqUnlimDims @c ----------------------------------------- @subsubsection netcdf.inqUnlimDims @cindex inqUnlimDims @deftypefn {} {@var{unlimdimids} =} netcdf.inqUnlimDims(@var{ncid}) Return the id of all unlimited dimensions of the NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.open @c ----------------------------------------- @subsubsection netcdf.open @cindex open @deftypefn {} {@var{ncid} =} netcdf.open(@var{filename},@var{mode}) Opens the file named @var{filename} in the mode @var{mode}. @xseealso{netcdf.create, netcdf.close} @end deftypefn @c Low-level functionsFile Operations netcdf.reDef @c ----------------------------------------- @subsubsection netcdf.reDef @cindex reDef @deftypefn {} {} netcdf.reDef (@var{ncid}) Enter define-mode of NetCDF file @var{ncid}. @end deftypefn @c Low-level functionsFile Operations netcdf.setFill @c ----------------------------------------- @subsubsection netcdf.setFill @cindex setFill @deftypefn {} {@var{old_mode} =} netcdf.setFill(@var{ncid},@var{fillmode}) Change the fill mode (@var{fillmode}) of the data set @var{ncid}. @var{fillmode} can be either "fill" or "nofill". The previous value of the fill mode is returned. @end deftypefn @c Low-level functionsFile Operations netcdf.sync @c ----------------------------------------- @subsubsection netcdf.sync @cindex sync @deftypefn {} {} netcdf.sync(@var{ncid}) Writes all changes to the disk and leaves the file open. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Dimensions @subsection Dimensions @cindex Low-level functions - Dimensions @c Low-level functionsDimensions netcdf.defDim @c ----------------------------------------- @subsubsection netcdf.defDim @cindex defDim @deftypefn {} {@var{dimid} =} netcdf.defDim(@var{ncid},@var{name},@var{len}) Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. The id of the dimension is returned. @end deftypefn @c Low-level functionsDimensions netcdf.inqDim @c ----------------------------------------- @subsubsection netcdf.inqDim @cindex inqDim @deftypefn {} {[@var{name},@var{length}] =} netcdf.inqDim(@var{ncid},@var{dimid}) Returns the name and length of a NetCDF dimension. @xseealso{netcdf.inqDimID} @end deftypefn @c Low-level functionsDimensions netcdf.inqDimID @c ----------------------------------------- @subsubsection netcdf.inqDimID @cindex inqDimID @deftypefn {} {@var{dimid} =} netcdf.inqDimID(@var{ncid},@var{dimname}) Return the id of a NetCDF dimension. @xseealso{netcdf.inqDim} @end deftypefn @c Low-level functionsDimensions netcdf.renameDim @c ----------------------------------------- @subsubsection netcdf.renameDim @cindex renameDim @deftypefn {} {} netcdf.renameDim(@var{ncid},@var{dimid},@var{name}) Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Groups @subsection Groups @cindex Low-level functions - Groups @c Low-level functionsGroups netcdf.defGrp @c ----------------------------------------- @subsubsection netcdf.defGrp @cindex defGrp @deftypefn {} {@var{new_ncid} =} netcdf.defGrp(@var{ncid},@var{name}) Define a group in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsGroups netcdf.inqDimIDs @c ----------------------------------------- @subsubsection netcdf.inqDimIDs @cindex inqDimIDs @deftypefn {} {@var{dimids} =} netcdf.inqDimID(@var{ncid}) @deftypefnx {} {@var{dimids} =} netcdf.inqDimID(@var{ncid},@var{include_parents}) Return the dimension ids defined in a NetCDF file. If @var{include_parents} is 1, the dimension ids of the parent group are also returned. Per default this is not the case (@var{include_parents} is 0). @xseealso{netcdf.inqDim} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpFullNcid @c ----------------------------------------- @subsubsection netcdf.inqGrpFullNcid @cindex inqGrpFullNcid @deftypefn {} {@var{grp_ncid} =} netcdf.inqGrpFullNcid(@var{ncid},@var{name}) Return the group id based on the full group name. @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpName @c ----------------------------------------- @subsubsection netcdf.inqGrpName @cindex inqGrpName @deftypefn {} {@var{name} =} netcdf.inqGrpName(@var{ncid}) Return group name in a NetCDF file. @xseealso{netcdf.inqGrps} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpNameFull @c ----------------------------------------- @subsubsection netcdf.inqGrpNameFull @cindex inqGrpNameFull @deftypefn {} {@var{name} =} netcdf.inqGrpNameFull(@var{ncid}) Return full name of group in NetCDF file. @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqGrpParent @c ----------------------------------------- @subsubsection netcdf.inqGrpParent @cindex inqGrpParent @deftypefn {} {@var{parent_ncid} =} netcdf.inqGrpParent(@var{ncid}) Return id of the parent group @xseealso{netcdf.inqGrpName} @end deftypefn @c Low-level functionsGroups netcdf.inqNcid @c ----------------------------------------- @subsubsection netcdf.inqNcid @cindex inqNcid @deftypefn {} {@var{grp_ncid} =} netcdf.inqNcid(@var{ncid},@var{name}) Return group id based on its name @xseealso{netcdf.inqGrpFullNcid} @end deftypefn @c Low-level functionsGroups netcdf.inqVarIDs @c ----------------------------------------- @subsubsection netcdf.inqVarIDs @cindex inqVarIDs @deftypefn {} {@var{varids} = } netcdf.inqVarID (@var{ncid}) Return all variable ids. This functions returns all variable ids in a NetCDF file or NetCDF group. @xseealso{netcdf.inqVarID} @end deftypefn @c --------------------------------------------------- @node Low-level functions - Variables @subsection Variables @cindex Low-level functions - Variables @c Low-level functionsVariables netcdf.defVar @c ----------------------------------------- @subsubsection netcdf.defVar @cindex defVar @deftypefn {} {@var{varid} = } netcdf.defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) Defines a variable with the name @var{name} in the dataset @var{ncid}. @var{xtype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned. @end deftypefn @c Low-level functionsVariables netcdf.defVarChunking @c ----------------------------------------- @subsubsection netcdf.defVarChunking @cindex defVarChunking @deftypefn {} {} netcdf.defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) Define the chunking settings of NetCDF variable @var{varid}. If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}.@* If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. @end deftypefn @c Low-level functionsVariables netcdf.defVarDeflate @c ----------------------------------------- @subsubsection netcdf.defVarDeflate @cindex defVarDeflate @deftypefn {} {} netcdf.defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) Define the compression settings NetCDF variable @var{varid}. If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). @end deftypefn @c Low-level functionsVariables netcdf.defVarFill @c ----------------------------------------- @subsubsection netcdf.defVarFill @cindex defVarFill @deftypefn {} {} netcdf.defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) Define the fill-value settings of the NetCDF variable @var{varid}. If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. @end deftypefn @c Low-level functionsVariables netcdf.defVarFletcher32 @c ----------------------------------------- @subsubsection netcdf.defVarFletcher32 @cindex defVarFletcher32 @deftypefn {} {} netcdf.defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If @var{checksum} is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable. If @var{checksum} is "NOCHECKSUM", then checksums will be disabled. @end deftypefn @c Low-level functionsVariables netcdf.getVar @c ----------------------------------------- @subsubsection netcdf.getVar @cindex getVar @deftypefn {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count}) @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) Get the data from a NetCDF variable. # The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), @var{count} is the number of elements of to be written along each dimension (default all elements) @var{stride} is the sampling interval. @end deftypefn @c Low-level functionsVariables netcdf.inqVar @c ----------------------------------------- @subsubsection netcdf.inqVar @cindex inqVar @deftypefn {} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf.inqVar (@var{ncid},@var{varid}) Inquires information about a NetCDF variable. This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. @var{nctype} in an integer corresponding NetCDF constants. @xseealso{netcdf.inqVarID,netcdf.getConstant} @end deftypefn @c Low-level functionsVariables netcdf.inqVarChunking @c ----------------------------------------- @subsubsection netcdf.inqVarChunking @cindex inqVarChunking @deftypefn {} {[@var{storage},@var{chunkSizes}] = } netcdf.inqVarChunking (@var{ncid},@var{varid}) Determines the chunking settings of NetCDF variable @var{varid}. If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}.@* If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. @end deftypefn @c Low-level functionsVariables netcdf.inqVarDeflate @c ----------------------------------------- @subsubsection netcdf.inqVarDeflate @cindex inqVarDeflate @deftypefn {} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf.inqVarDeflate (@var{ncid},@var{varid}) Determines the compression settings NetCDF variable @var{varid}. If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). @end deftypefn @c Low-level functionsVariables netcdf.inqVarFill @c ----------------------------------------- @subsubsection netcdf.inqVarFill @cindex inqVarFill @deftypefn {} {[@var{no_fill},@var{fillvalue}] = } netcdf.inqVarFill(@var{ncid},@var{varid}) Determines the fill-value settings of the NetCDF variable @var{varid}. If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true. @end deftypefn @c Low-level functionsVariables netcdf.inqVarFletcher32 @c ----------------------------------------- @subsubsection netcdf.inqVarFletcher32 @cindex inqVarFletcher32 @deftypefn {} {@var{checksum} =} netcdf.inqVarFletcher32(@var{ncid},@var{varid}) Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string "FLETCHER32". Otherwise it is the string "NOCHECKSUM". @end deftypefn @c Low-level functionsVariables netcdf.inqVarID @c ----------------------------------------- @subsubsection netcdf.inqVarID @cindex inqVarID @deftypefn {} {@var{varid} = } netcdf.inqVarID (@var{ncid},@var{name}) Return the id of a variable based on its name. @xseealso{netcdf.defVar, netcdf.inqVarIDs} @end deftypefn @c Low-level functionsVariables netcdf.putVar @c ----------------------------------------- @subsubsection netcdf.putVar @cindex putVar @deftypefn {} {} netcdf.putVar (@var{ncid},@var{varid},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) Put data in a NetCDF variable. The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), @var{count} is the number of elements of to be written along each dimension (default all elements) @var{stride} is the sampling interval. @end deftypefn @c Low-level functionsVariables netcdf.renameVar @c ----------------------------------------- @subsubsection netcdf.renameVar @cindex renameVar @deftypefn {} {} netcdf.renameVar(@var{ncid},@var{varid},@var{name}) Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Attributes @subsection Attributes @cindex Low-level functions - Attributes @c Low-level functionsAttributes netcdf.copyAtt @c ----------------------------------------- @subsubsection netcdf.copyAtt @cindex copyAtt @deftypefn {} {} netcdf.copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} to the variable @var{varid_out} in the data set @var{ncid_out}. To copy a global attribute use netcdf.getConstant("global") for @var{varid} or @var{varid_out}. @xseealso{netcdf.getAtt,netcdf.getConstant} @end deftypefn @c Low-level functionsAttributes netcdf.delAtt @c ----------------------------------------- @subsubsection netcdf.delAtt @cindex delAtt @deftypefn {} {} netcdf.delAtt(@var{ncid},@var{varid},@var{name}) Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. To delete a global attribute use netcdf.getConstant("global") for @var{varid}. @xseealso{netcdf.defAtt,netcdf.getConstant} @end deftypefn @c Low-level functionsAttributes netcdf.getAtt @c ----------------------------------------- @subsubsection netcdf.getAtt @cindex getAtt @deftypefn {} {@var{data} =} netcdf.getAtt (@var{ncid},@var{varid},@var{name}) Get the value of a NetCDF attribute. This function returns the value of the attribute called @var{name} of the variable @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.putAtt} @end deftypefn @c Low-level functionsAttributes netcdf.inqAtt @c ----------------------------------------- @subsubsection netcdf.inqAtt @cindex inqAtt @deftypefn {} {[@var{xtype},@var{len}] = } netcdf.inqAtt(@var{ncid},@var{varid},@var{name}) Get attribute type and length. @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.inqAttID @c ----------------------------------------- @subsubsection netcdf.inqAttID @cindex inqAttID @deftypefn {} {@var{attnum} =} netcdf.inqAttID(@var{ncid},@var{varid},@var{attname}) Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.inqAttName @c ----------------------------------------- @subsubsection netcdf.inqAttName @cindex inqAttName @deftypefn {} {@var{name} =} netcdf.inqAttName (@var{ncid},@var{varid},@var{attnum}) Get the name of a NetCDF attribute. This function returns the name of the attribute with the id @var{attnum} of the variable @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.inqAttName} @end deftypefn @c Low-level functionsAttributes netcdf.putAtt @c ----------------------------------------- @subsubsection netcdf.putAtt @cindex putAtt @deftypefn {} {} netcdf.putAtt (@var{ncid},@var{varid},@var{name},@var{data}) Defines a NetCDF attribute. This function defines the attribute called @var{name} of the variable @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. For global attributes @var{varid} can be netcdf.getConstant("global"). @xseealso{netcdf.getAtt} @end deftypefn @c Low-level functionsAttributes netcdf.renameAtt @c ----------------------------------------- @subsubsection netcdf.renameAtt @cindex renameAtt @deftypefn {} {} netcdf.renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. @var{new_name} is the new name of the attribute. To rename a global attribute use netcdf.getConstant("global") for @var{varid}. @xseealso{netcdf.copyAtt,netcdf.getConstant} @end deftypefn @c --------------------------------------------------- @node Low-level functions - User-Defined Types @subsection User-Defined Types @cindex Low-level functions - User-Defined Types @c Low-level functionsUser-Defined Types netcdf.defVlen @c ----------------------------------------- @subsubsection netcdf.defVlen @cindex defVlen @deftypefn {} {@var{varid} = } netcdf.defVlen(@var{ncid},@var{typename},@var{basetype}) Defines a NC_VLEN variable length array type with the type name @var{typename} and a base datatype of @var{basetype} in the dataset @var{ncid}. @var{basetype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. The new data type id is returned. @end deftypefn @c Low-level functionsUser-Defined Types netcdf.inqUserType @c ----------------------------------------- @subsubsection netcdf.inqUserType @cindex inqUserType @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf.inqUserType(@var{ncid},@var{typeid}) Provide information on a user defined type @var{typeid} in the dataset @var{ncid}. The function returns the typename, bytesize, base type id, number of fields and class identifier of the type. @end deftypefn @c Low-level functionsUser-Defined Types netcdf.inqVlen @c ----------------------------------------- @subsubsection netcdf.inqVlen @cindex inqVlen @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf.inqVlen(@var{ncid},@var{typeid}) Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}. The function returns the typename, bytesize, and base type id. @end deftypefn @c --------------------------------------------------- @node Low-level functions - Utilities @subsection Utilities @cindex Low-level functions - Utilities @c Low-level functionsUtilities netcdf.getConstant @c ----------------------------------------- @subsubsection netcdf.getConstant @cindex getConstant @deftypefn {} {@var{value} =} netcdf.getConstant(@var{name}) Returns the value of a NetCDF constant called @var{name}. @xseealso{netcdf.getConstantNames} @end deftypefn @c Low-level functionsUtilities netcdf.getConstantNames @c ----------------------------------------- @subsubsection netcdf.getConstantNames @cindex getConstantNames @deftypefn {} {@var{value} =} netcdf.getConstantNames() Returns a list of all constant names. @end deftypefn @c --------------------------------------------------- @node Test function @section Test function @cindex Test function @c Test function test_netcdf @c ----------------------------------------- @subsection test_netcdf @cindex test_netcdf @deftypefn {} {} test_netcdf Function to do a basic test of the netcdf interface @end deftypefn netcdf-1.0.20/doc/gpl.texi0000644000000000000000000010433015205072111012200 0ustar00@node Copying @appendix GNU General Public License @cindex warranty @cindex copyright @center Version 3, 29 June 2007 @display Copyright @copyright{} 2007 Free Software Foundation, Inc. @url{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @heading 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. @heading TERMS AND CONDITIONS @enumerate 0 @item 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. @item 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. @item 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. @item 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. @item 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. @item 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: @enumerate a @item The work must carry prominent notices stating that you modified it, and giving a relevant date. @item 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''. @item 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. @item 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. @end enumerate 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. @item 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: @enumerate a @item 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. @item 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. @item 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. @item 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. @item 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. @end enumerate 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. @item 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: @enumerate a @item Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or @item 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 @item 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 @item Limiting the use for publicity purposes of names of licensors or authors of the material; or @item Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or @item 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. @end enumerate 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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. @item 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 enumerate @heading END OF TERMS AND CONDITIONS @heading 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. @smallexample @var{one line to give the program's name and a brief idea of what it does.} Copyright (C) @var{year} @var{name of author} This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 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 @url{http://www.gnu.org/licenses/}. @end smallexample 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: @smallexample @var{program} Copyright (C) @var{year} @var{name of author} This program comes with ABSOLUTELY NO WARRANTY; for details type @samp{show w}. This is free software, and you are welcome to redistribute it under certain conditions; type @samp{show c} for details. @end smallexample The hypothetical commands @samp{show w} and @samp{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 @url{http://www.gnu.org/licenses/}. 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 @url{http://www.gnu.org/philosophy/why-not-lgpl.html}. netcdf-1.0.20/doc/macros.texi0000644000000000000000000000624115205072111012704 0ustar00@c Copyright (C) 2012-2019 John W. Eaton @c @c This file is part of Octave. @c @c Octave is free software: you can redistribute it and/or modify it @c under the terms of the GNU General Public License as published by @c the Free Software Foundation, either version 3 of the License, or @c (at your option) any later version. @c @c Octave is distributed in the hope that it will be useful, but @c WITHOUT ANY WARRANTY; without even the implied warranty of @c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the @c GNU General Public License for more details. @c @c You should have received a copy of the GNU General Public License @c along with Octave; see the file COPYING. If not, see @c . @c The following macro marks words that aspell should ignore during @c spellchecking. Within Texinfo it has no effect as it merely replaces @c the macro call with the argument itself. @macro nospell {arg} \arg\ @end macro @c The following macro works around the Info/plain text expansion of @code{XXX} @c which is `XXX'. This looks particularly bad when the macro body is @c single or double-quoted text, such as a property value `"position"' @ifinfo @macro qcode{arg} \arg\ @end macro @end ifinfo @ifnotinfo @macro qcode{arg} @code{\arg\} @end macro @end ifnotinfo @c The following macro is used for the on-line help system, but we don't @c want lots of `See also: foo, bar, and baz' strings cluttering the @c printed manual (that information should be in the supporting text for @c each group of functions and variables). @c @c Implementation Note: @c For TeX, @vskip produces a nice separation. @c For Texinfo, '@sp 1' should work, but in practice produces ugly results @c for HTML. We use a simple blank line to produce the correct @c behavior. @c @c We use @xseealso now because Texinfo introduced its own @seealso @c command. But instead of modifying all source files, we'll have the @c munge-texi script convert @seealso to @xseealso. @macro xseealso {args} @iftex @vskip 2pt @end iftex @ifnottex @end ifnottex @ifnotinfo @noindent @strong{See also:} \args\. @end ifnotinfo @ifinfo @noindent See also: \args\. @end ifinfo @end macro @c The following macro works around a situation where the Info/plain text @c expansion of the @code{XXX} macro is `XXX'. The use of the apostrophe @c can be confusing if the code segment itself ends with a transpose operator. @ifinfo @macro tcode{arg} \arg\ @end macro @end ifinfo @ifnotinfo @macro tcode{arg} @code{\arg\} @end macro @end ifnotinfo @c FIXME: someday, when Texinfo 5.X is standard, we might replace this with @c @backslashchar, which is a new addition to Texinfo. @macro xbackslashchar \\ @end macro @c These may be useful for all, not just for octave.texi. @tex \ifx\rgbDarkRed\thisisundefined \def\rgbDarkRed{0.50 0.09 0.12} \fi \ifx\linkcolor\thisisundefined \relax \else \global\def\linkcolor{\rgbDarkRed} \fi \ifx\urlcolor\thisisundefined \relax \else \global\def\urlcolor{\rgbDarkRed} \fi \ifx\urefurlonlylinktrue\thisisundefined \relax \else \global\urefurlonlylinktrue \fi @end tex @c Make the apostrophe in code examples cut-and-paste friendly. @codequoteundirected on netcdf-1.0.20/doc/mkfuncdocs.py0000755000000000000000000003304215205072111013235 0ustar00#!/usr/bin/env python3 ## Copyright 2018-2025 John Donoghue ## ## 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 ## . ## mkfuncdocs v1.0.9 ## mkfuncdocs.py will attempt to extract the help texts from functions in src ## dirs, extracting only those that are in the specifed INDEX file and output them ## to stdout in texi format ## ## It will extract from both .m and the help text for DEFUN_DLD help in .cc/.cpp ## files. ## ## It attempts to find the help text for each function in a file within the src search ## folders that match in order: [ functionname.m functionname.cc functionname.cpp ## functionname_withoutprefix.cc functionname_withoutprefix.cpp ] ## ## The INDEX file can contain additional subgroups in the form of: ## #! Subgroup Name ## ## Usage: ## mkfundocs.py options INDEXfile ## Options can be 0 or more of: ## --verbose : Turn on verbose mode ## --src-dir=xxxxx : Add dir xxxxx to the dirs searched for the function file. ## If no directories are provided, it will default to looking in the ## 'inst' directory. ## --ignore=xxxxx : dont attempt to generate help for function xxxxx. ## --funcprefix=xxxxx : remove xxxxx from the function name when searching for matching ## source file. ## --allowscan : if can not find function, attemp to scan .cc,cpp,cxx files for match ## ## --standalone : generate a texinfo file expected to be used with being included in ## another document file. import sys import os import re import tempfile import shutil import fnmatch import subprocess import glob import calendar; import time; class SubGroup: name = "" functions = [] def __init__ (self, name): if name: self.name = name self.functions = [] class Group: name = "Functions" functions = [] subgroups = [] def __init__ (self, name=""): if name: self.name = name self.functions = [] self.subgroups = [] def add_function(self, f): if len(self.subgroups) == 0: self.functions.append(f); else: functions = self.subgroups[-1].functions functions.append(f) self.subgroups[-1].functions = functions def add_subgroup(self, f): self.subgroups.append(SubGroup(f)) def isempty(self): if len(self.functions): return False for sg in self.subgroups: if len(sg.functions): return False return True def dump(self): print(f"Group {self.name}") for f in self.functions: print(f" {f}") for sg in self.subgroups: print(f" *{sg.name}") for f in sg.functions: print(f" {f}") class Index: name = "" groups = [] def texify_line(line): # convert any special chars in a line to texinfo format # currently just used for group formatting ? line = line.replace("@", "@@") line = line.replace("{", "@{") line = line.replace("}", "@}") line = line.replace(",", "@comma{}") return line def find_defun_line_in_file(filename, fnname): linecnt = 0 defun_line=re.compile(r"^DEFUN_DLD\s*\(\s*{}".format(fnname)) with open(filename, 'rt') as f: for line in f: if re.match(defun_line, line): return linecnt linecnt = linecnt + 1 return -1 def find_function_line_in_file(filename, fnname): linecnt = 0 func = False defun_line=re.compile(r"^\s*function \s*") with open(filename, 'rt') as f: for line in f: if func == True: x = line.strip() if x.startswith("## -*- texinfo -*-"): return linecnt else: func = False if re.match(defun_line, line): if line.find("=") != -1: x = line.split("=") x = x[-1] else: x = line.replace("function ", "") x = x.split("(") x = x[0].strip() if x == fnname: func = True linecnt = linecnt + 1 return -1 def read_m_file(filename, skip=0): help = [] inhelp = False havehelp = False; with open(filename, 'rt') as f: for line in f: line = line.lstrip() if skip > 0: skip = skip - 1 elif not havehelp: if havehelp == False and inhelp == False and line.startswith('##'): if "texinfo" in line: inhelp = True elif inhelp == True: if not line.startswith('##'): inhelp = False havehelp = True else: if line.startswith("## @"): line = line[3:] else: line = line[2:] help.append (line.rstrip()); return help def read_cc_file(filename, skip=0): help = [] inhelp = False havehelp = False; with open(filename, 'rt') as f: for line in f: line = line.lstrip() if skip > 0: skip = skip - 1 elif not havehelp: if havehelp == False and inhelp == False: if "texinfo" in line: inhelp = True elif inhelp == True: line = line.rstrip() if len(line) > 0 and line[-1] == '\\': line = line[:-1] line = line.rstrip() line = line.replace("\\n", "\n") line = line.replace("\\\"", "\"") if len(line) > 0 and line[-1] == '\n': line = line[:-1] # endif a texinfo line elif line.endswith('")'): line = line[:-2] if line.startswith('{'): inhelp = False havehelp = True else: help.append (line); return help def read_help (filename, skip=0): help = [] if filename[-2:] == ".m": help = read_m_file(filename, skip) else: help = read_cc_file(filename, skip) return help def read_index (filename, ignore): index = Index () with open(filename, 'rt') as f: lines = f.read().splitlines() #print ("read", lines) first = True category = Group() for l in lines: if l.startswith("#!"): l = l[2:].strip() category.add_subgroup(l) elif l.startswith("#"): pass elif first: index.name = l; first = False elif l.startswith(" "): l = l.strip() # may be multiple functions here funcs = l.split() for f in funcs: if f not in ignore: category.add_function(l) else: # new category name if not category.isempty(): index.groups.append(category) category = Group(l.strip()) # left over category ? if not category.isempty(): index.groups.append(category) return index; def find_class_file(fname, paths): for f in paths: # class constructor ? name = f + "/@" + fname + "/" + fname + ".m" if os.path.isfile(name): return name, 0 # perhaps classname.func format ? x = fname.split(".") if len(x) > 0: zname = x.pop() cname = ".".join(x) name = f + "/" + cname + ".m" if os.path.isfile(name): idx = find_function_line_in_file(name, zname) if idx >= 0: return name, idx name = f + "/@" + cname + "/" + zname + ".m" if os.path.isfile(name): return name, 0 return None, -1 def find_func_file(fname, paths, prefix, scanfiles=False): for f in paths: name = f + "/" + fname + ".m" if os.path.isfile(name): return name, 0 # class constructor ? name = f + "/@" + fname + "/" + fname + ".m" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cc" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cpp" if os.path.isfile(name): return name, 0 # if have a prefix, remove and try if prefix and fname.startswith(prefix): fname = fname[len(prefix):] name = f + "/" + fname + ".cc" if os.path.isfile(name): return name, 0 name = f + "/" + fname + ".cpp" if os.path.isfile(name): return name, 0 # if here, we still dont have a file match # if allowed to scan files, do that if scanfiles: #sys.stderr.write("Warning: Scaning for {}\n".format(fname)) for f in paths: files = list(f + "/" + a for a in os.listdir(f)) cc_files = fnmatch.filter(files, "*.cc") cpp_files = fnmatch.filter(files, "*.cpp") cxx_files = fnmatch.filter(files, "*.cxx") for fn in cc_files + cpp_files + cxx_files: line = find_defun_line_in_file(fn, fname) if line >= 0: #sys.stderr.write("Warning: Found function for {} in {} at {}\n".format(fname, fn, line)) return fn, line return None, -1 def display_standalone_header(): # make a file that doesnt need to be included in a texinfo file to # be valid print("@c mkfuncdocs output for a standalone function list") print("@include macros.texi") print("@ifnottex") print("@node Top") print("@top Function Documentation") print("Function documentation extracted from texinfo source in octave source files.") print("@contents") print("@end ifnottex") print("@node Function Reference") print("@chapter Function Reference") print("@cindex Function Reference") def display_standalone_footer(): print("@bye") def display_func(name, ref, help, is_subgroup): print ("@c -----------------------------------------") if is_subgroup: print ("@subsubsection {}".format(name)) else: print ("@subsection {}".format(name)) print ("@cindex {}".format(ref)) for l in help: print ("{}".format(l)) def process_function_help(g_name, f, options, is_subgroup=False): if True: print ("@c {} {}".format(g_name, f)) h = "" filename = "" path = "" if "@" in f: #print ("class func") path = f name = "@" + f ref = f.split("/")[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) elif "." in f: path = f ref = f.split(".")[-1] name = f.split(".")[-1] filename, lineno = find_class_file(path, options["srcdir"]) if not filename: parts = f.split('.') cnt = 0 path = "" for p in parts: if cnt < len(parts)-1: path = path + "/+" else: path = path + "/" path = path + p cnt = cnt + 1 name = f; ref = parts[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) elif "/" in f: path = f name = f ref = f.split("/")[-1] filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"]) else: path = f name = f ref = f filename, lineno = find_func_file(path, options["srcdir"], options["funcprefix"], options['allowscan']) if not filename: sys.stderr.write("Warning: Cant find source file for {}\n".format(f)) else: h = read_help (filename, lineno) if h: display_func (name, ref, h, is_subgroup) def process (args): options = { "verbose": False, "srcdir": [], "funcprefix": "", "ignore": [], "standalone": False, "allowscan": False } indexfile = "" for a in args: #print ("{}".format(a)) c=a.split("=") key=c[0] if len(c) > 1: val=c[1] else: val="" if key == "--verbose": options["verbose"] = True; if key == "--standalone": options["standalone"] = True; elif key == "--allowscan": options["allowscan"] = True; elif key == "--src-dir": if val: options["srcdir"].append(val); elif key == "--ignore": if val: options["ignore"].append(val); elif key == "--func-prefix": if val: options["funcprefix"] = val; elif val == "": if indexfile == "": indexfile = key if indexfile == "": raise Exception("No index filename") if len(options["srcdir"]) == 0: options["srcdir"].append("inst") #print "options=", options if options['standalone']: display_standalone_header() idx = read_index(indexfile, options["ignore"]) for g in idx.groups: #print ("************ {}".format(g.name)) g_name = texify_line(g.name) print ("@c ---------------------------------------------------") print ("@node {}".format(g_name)) print ("@section {}".format(g_name)) print ("@cindex {}".format(g_name)) for f in sorted(g.functions): process_function_help(g_name, f, options) for sg in g.subgroups: sg_name = texify_line(sg.name) print ("@c ---------------------------------------------------") print ("@node {}".format(g_name + " - " + sg_name)) print ("@subsection {}".format(sg_name)) print ("@cindex {}".format(g_name + " - " + sg_name)) for f in sorted(sg.functions): process_function_help(g_name + sg_name, f, options, True) if options['standalone']: display_standalone_footer() def show_usage(): print (sys.argv[0], "[options] indexfile") if __name__ == "__main__": if len(sys.argv) > 1: status = process(sys.argv[1:]) sys.exit(status) else: show_usage() netcdf-1.0.20/doc/mkqhcp.py0000755000000000000000000001521715205072111012370 0ustar00#!/usr/bin/env python3 ## mkqhcp.py ## Version 1.0.6 ## Copyright 2022-2025 John Donoghue ## ## 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 ## . import sys import os import re def process(name): with open(name + ".qhcp", 'wt') as f: f.write ('\n') f.write ('\n') f.write (' \n') f.write (' \n') f.write (' \n') f.write (' {0}.qhp\n'.format(name)) f.write (' {0}.qch\n'.format(name)) f.write (' \n') f.write (' \n') f.write (' \n') f.write (' {0}.qch\n'.format(name)) f.write (' \n') f.write (' \n') f.write ('\n') title = name pat_match = re.compile(r".*(?P<title>[^<]+).*") with open(name + ".html", 'rt') as fin: # find html for line in fin: line = line.strip() e = pat_match.match(line) if e: title = e.group("title") break # section h2_match = re.compile(r'.*

]*>(?P[^<]+)</h2>.*') # appendix h2a_match = re.compile(r'.*<h2 class="appendix"[^>]*>(?P<title>[^<]+)</h2>.*') # index h2i_match = re.compile(r'.*<h2 class="unnumbered"[^>]*>(?P<title>[^<]+)</h2>.*') h3_match = re.compile(r'.*<h3 class="section"[^>]*>(?P<title>[^<]+)</h3>.*') h4_match = re.compile(r'.*<h4 class="subsection"[^>]*>(?P<title>[^<]+)</h4>.*') h5_match = re.compile(r'.*<h4 class="subsubsection"[^>]*>(?P<title>[^<]+)</h4>.*') tag_match1 = re.compile(r'.*<span id="(?P<tag>[^"]+)"[^>]*></span>.*') #tag_match2 = re.compile(r'.*<div class="[sub]*section" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match2 = re.compile(r'.*<div class="[sub]*section[^"]*" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match3 = re.compile(r'.*<div class="chapter-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match4 = re.compile(r'.*<div class="appendix-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') tag_match5 = re.compile(r'.*<div class="unnumbered-level-extent" id="(?P<tag>[^"]+)"[^>]*>.*') index_match = re.compile(r'.*<h4 class="[sub]+section"[^>]*>[\d\.\s]*(?P<name>[^<]+)</h4>.*') index_match2 = re.compile(r'.*<h4 class="[sub]+section"[^>]*><span>[\d\.\s]*(?P<name>[^<]+)<.*') tag = "top" has_h2 = False has_h3 = False has_h4 = False #pat_match = re.compile(r'.*<span id="(?P<tag>[^"])"></span>(?P<title>[.]+)$') with open(name + ".html", 'rt') as fin: with open(name + ".qhp", 'wt') as f: f.write('<?xml version="1.0" encoding="UTF-8"?>\n') f.write('<QtHelpProject version="1.0">\n') f.write(' <namespace>octave.community.{}</namespace>\n'.format(name)) f.write(' <virtualFolder>doc</virtualFolder>\n') f.write(' <filterSection>\n') f.write(' <toc>\n') f.write(' <section title="{} Manual" ref="{}.html">\n'.format(title, name)) # chapters here for line in fin: line = line.strip() e = tag_match1.match(line) if not e: e = tag_match2.match(line) if not e: e = tag_match3.match(line) if not e: e = tag_match4.match(line) if not e: e = tag_match5.match(line) if e: tag = e.group("tag") e = h2_match.match(line) if not e: e = h2a_match.match(line) if not e: e = h2i_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = False if has_h3: f.write(' </section>\n') has_h3 = False if has_h2: f.write(' </section>\n') has_h2 = True f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h3_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = False if has_h3: f.write(' </section>\n') has_h3 = True f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h4_match.match(line) if e: if has_h4: f.write(' </section>\n') has_h4 = True #f.write(' <section title="{}" ref="{}.html#{}"></section>\n'.format(e.group("title"), name, tag)) f.write(' <section title="{}" ref="{}.html#{}">\n'.format(e.group("title"), name, tag)) e = h5_match.match(line) if e: f.write(' <section title="{}" ref="{}.html#{}"></section>\n'.format(e.group("title"), name, tag)) if has_h4: f.write(' </section>\n') if has_h3: f.write(' </section>\n') if has_h2: f.write(' </section>\n') f.write(' </section>\n') f.write(' </toc>\n') f.write(' <keywords>\n') fin.seek(0) for line in fin: line = line.strip() e = tag_match1.match(line) if not e: e = tag_match2.match(line) if e: tag = e.group("tag") e = index_match.match(line) if not e: e = index_match2.match(line) if e: f.write(' <keyword name="{}" ref="{}.html#{}"></keyword>\n'.format(e.group("name"), name, tag)) f.write(' </keywords>\n') f.write(' <files>\n') f.write(' <file>{}.html</file>\n'.format(name)) f.write(' <file>{}.css</file>\n'.format(name)) f.write(' </files>\n') f.write(' </filterSection>\n') f.write('</QtHelpProject>\n') def show_usage(): print (sys.argv[0], "projname") if __name__ == "__main__": if len(sys.argv) > 1: status = process(sys.argv[1]) sys.exit(status) else: show_usage() ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������netcdf-1.0.20/doc/octave-netcdf.css�����������������������������������������������������������������0000644�0000000�0000000�00000001337�15205072111�013762� 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������pre.example, .header, .float-caption, hr { /* base00 ~ body text in light solarized theme */ color: #657b83; border-color: #657b83; } pre.example { /* base3 ~ background color in light solarized theme */ background-color: #fdf6e3; padding: 0.5em; } table.cartouche { border: 1px solid #948473; background-color: #FFE3C6; width: 100%; } table.cartouche td, table.cartouche th { border: 1px solid #948473; padding: 4px 4px; } /* newer texinfo generation styles */ div.example { /* base00 ~ body text in light solarized theme */ color: #657b83; border-color: #657b83; } pre.example-preformatted { /* base3 ~ background color in light solarized theme */ background-color: #fdf6e3; padding: 0.5em; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������netcdf-1.0.20/doc/octave-netcdf.html����������������������������������������������������������������0000644�0000000�0000000�00000433576�15205072111�014154� 0����������������������������������������������������������������������������������������������������ustar�00�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html> <html> <!-- Created by GNU Texinfo 7.2, https://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Octave NetCDF - A NetCDF interface for Octave

Introduction

The Octave NetCDF toolkit is a set of NetCDF routines for GNU Octave

Table of Contents


1 Installing and loading

The toolkit must be installed and then loaded to be used.

It can be installed in GNU Octave directly from the website, or can be installed in an off-line mode via a downloaded tarball.

The toolkit has a dependency on the netcdf library (https://www.unidata.ucar.edu/software/netcdf/), so it must be installed in order to successfully install the toolkit.

The toolkit must be then be loaded once per each GNU Octave session in order to use its functionality.

1.1 Online Direct install

With an internet connection available, the package can be installed from octave-forge using the following command within GNU Octave:

pkg install -forge netcdf

The latest released version of the toolkit will be downloaded and installed.

1.2 Off-line install

With the toolkit package already downloaded, and in the current directory when running GNU Octave, the package can be installed using the following command within GNU Octave:

pkg install netcdf-1.0.20.tar.gz

1.3 Loading

Regardless of the method of installing the toolkit, in order to use its functions, the toolkit must be loaded using the pkg load command:

pkg load netcdf

The toolkit must be loaded on each GNU Octave session.


2 Basic Usage Overview

The toolkit provides high and level functionality for reading and writing NetCDF format files.

2.1 High level functionality

The toolkit provides the following high level functions:

  • nccreate
  • ncdisp
  • ncinfo
  • ncreadatt
  • ncread
  • ncwriteatt
  • ncwrite
  • ncwriteschema

2.2 Low level functionality

The package aims to implement the netcdf interface of MATLAB in GNU Octave, however GNU Octave does not support the import function but the functions are available as netcdf.functionname


3 Function Reference

The functions currently available in the toolkit are described below;


3.1 High-level functions

3.1.1 nccreate

: nccreate(filename,varname)
: nccreate(filename,varname,"property",value,...)

Create the variable varname in the file filename.

Properties

The following properties can be used:

  • "Dimensions": a cell array with the dimension names followed by their length or Inf if the dimension is unlimited. If the property is omitted, a scalar variable is created.
  • "Datatype": a string with the Octave data type name (see ncinfo for the correspondence between Octave and NetCDF data types). The default data type is a "double".
  • "Format": This can be "netcdf4_classic" (default), "classic", "64bit" or "netcdf4".
  • "FillValue": the value used for undefined elements of the NetCDF variable.
  • "ChunkSize": the size of the data chunks. If omitted, the variable is not chunked.
  • "DeflateLevel": The deflate level for compression. It can be the string "disable" (default) for no compression or an integer between 0 (no compression) and 9 (maximum compression).
  • "Shuffle": true for enabling the shuffle filter or false (default) for disabling it.

Example

 nccreate("test.nc","temp","Dimensions",{"lon",10,"lat",20},"Format","classic");
 ncdisp("test.nc");

See also: ncwrite.

3.1.2 ncdisp

: ncdisp (filename)

Display meta-data of the NetCDF file filename

Example

 ncdisp("test.nc");

See also: ncinfo.

3.1.3 ncinfo

: info = ncinfo (filename)
: info = ncinfo (filename, varname)
: info = ncinfo (filename, groupname)

Return information about an entire NetCDF file filename (i.e. the root group "/"), about the variable called varname or the group called groupname.

The structure info has always the following fields:

  • Filename: the name of the NetCDF file
  • Format: one of the strings "CLASSIC", "64BIT", "NETCDF4" or "NETCDF4_CLASSIC"

The structure info has additional fields depending on whether a group of variable is queried.

Groups

Groups are returned as an array structure with the following fields:

  • Name: the group name. The root group is named "/".
  • Dimensions: a array structure with the dimensions.
  • Variables: a array structure with the variables.
  • Attributes: a array structure with global attributes.
  • Groups: a array structure (one for each group) with the same fields as this structure.

Dimensions

Dimensions are returned as an array structure with the following fields:

  • Name: the name of the dimension
  • Length: the length of the dimension
  • Unlimited: true of the dimension has no fixed limited, false

Variables

Variables are returned as an array structure with the following fields:

  • Name: the name of the dimension
  • Dimensions: array structure of all dimensions of this variable with the same structure as above.
  • Size: array with the size of the variable
  • Datatype: string with the corresponding octave data-type (see below)
  • Attributes: a array structure of attributes
  • FillValue: the NetCDF fill value of the variable. If the fill value is not defined, then this attribute is an empty array ([]).
  • DeflateLevel: the NetCDF deflate level between 0 (no compression) and 9 (maximum compression).
  • Shuffle: is true if the shuffle filter is activated to improve compression, otherwise false.
  • CheckSum: is set to "fletcher32", if check-sums are used, otherwise this field is not defined.

Attributes

Attributes are returned as an array structure with the following fields:

  • Name: the name of the attribute
  • Value: the value of the attribute (with the corresponding type)
  • Unlimited: true of the dimension has no fixed limited, false

Data-types

The following the the correspondence between the Octave and NetCDF data-types:

Octave typeNetCDF type
int8NC_BYTE
uint8NC_UBYTE
int16NC_SHORT
uint16NC_USHORT
int32NC_INT
uint32NC_UINT
int64NC_INT64
uint64NC_UINT64
singleNC_FLOAT
doubleNC_DOUBLE
charNC_CHAR

The output of ncinfo can be used to create a NetCDF file with the same meta-data using ncwriteschema.

Note: If there are no attributes (or variable or groups), the corresponding field is an empty matrix and not an empty struct array for compatibility with matlab.

See also: ncread,nccreate,ncwriteschema,ncdisp.

3.1.4 ncread

: x = ncread (filename, varname)
: x = ncread (filename, varname,start,count,stride)

Read the variable varname from the NetCDF file filename.

If start,count and stride are present, a subset of the variable is loaded. The parameter start contains the starting indices (1-based), count is the number of elements and stride the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable. Elements of count might be Inf which means that as many values as possible are loaded.

If the variable has the _FillValue attribute, then the corresponding values are replaced by NaN (except for characters). NetCDF attributes scale_factor (default 1) and add_offset (default 0) are use the transform the variable during the loading:

x = scale_factor * x_in_file + add_offset

The output data type matches the NetCDF datatype, except when the attributes _FillValue, add_offset or scale_factor are defined in which case the output is a array in double precision.

Note that values equal to the attribute missing_value are not replaced by NaN (for compatibility).

Example

Read the data from variable ’mydata’ in the file test.nc.

 data  = ncread('test.nc','mydata');

See also: ncwrite,ncinfo,ncdisp.

3.1.5 ncreadatt

: val = ncreadatt(filename,varname,attname)

Return the attribute attname of the variable varname in the file filename.

Global attributes can be accessed by using "/" or the group name as varname. The type of attribute is mapped to the Octave data types. (see ncinfo).

Example

Read global attribute ’creation_date’

 d = ncreadatt('test.nc','/','creation_date')

Read atribute ’myattr’ assigned to variable mydata.

 d = ncreadattr('test.nc', 'mydata', 'myattr');

See also: ncinfo,ncwriteatt.

3.1.6 ncwrite

: ncwrite (filename, varname, x)
: ncwrite (filename, varname, x, start, stride)

Write array x to the the variable varname in the NetCDF file filename.

The variable with the name varname and the appropriate dimension must already exist in the NetCDF file.

If start and stride are present, a subset of the variable is written. The parameter start contains the starting indices (1-based) and stride the increment between two successive elements. These parameters are vectors whose length is equal to the number of dimension of the variable.

If the variable has the _FillValue attribute, then the values equal to NaN are replaced by corresponding fill value NetCDF attributes scale_factor (default 1) and add_oddset (default 0) are use the transform the variable during writing:

x_in_file = (x - add_offset)/scale_factor

Example

Create a netcdf file with a variable of ’mydata’ and then write data to that variable.

 nccreate('myfile.nc','mydata');
 ncwrite('myfile.nc','mydata', 101);

See also: ncread,nccreate.

3.1.7 ncwriteatt

: ncwriteatt(filename,varname,attname,val)

Defines the attribute attname of the variable varname in the file filename with the value val.

Global attributes can be defined by using "/" or the group name as varname. The type of value is mapped to the NetCDF data types. (see ncinfo).

Example

Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it.

 nccreate("myfile.nc", "mydata", "Format", "netcdf4");
 ncwriteatt("myfile.nc", "mydata", "Units", "K");

See also: ncinfo.

3.1.8 ncwriteschema

: ncwriteschema (filename, schema)

Create a NetCDF called filename with the dimensions, attributes, variables and groups given by the structure schema.

The variable schema has the same structure as the results of ncinfo. ncinfo and ncwriteschema can be used together to create a NetCDF using another file as a template:

Example

 schema = ncinfo("template.nc");
 # the new file should be named "new_file.nc"
 ncwriteschema("new_file.nc",schema);

Unused field in schema such as ChunkSize, Shuffle, DeflateLevel, FillValue, Checksum can be left-out if the corresponding feature is not used.

Dimensions are considered as limited if the field Unlimited is missing, unless the dimension length is Inf.

See also: ncinfo.


3.2 Low-level functions


3.2.1 Library Functions

3.2.1.1 netcdf.getChunkCache

: [size, nelems, preemption] = netcdf.getChunkCache()

Gets the default chunk cache settings in the HDF5 library.

3.2.1.2 netcdf.inqLibVers

: vers = netcdf.inqLibVers()

Returns the version of the NetCDF library as a string.

3.2.1.3 netcdf.setChunkCache

: netcdf.setChunkCache(size, nelems, preemption)

Sets the default chunk cache settings in the HDF5 library.

The settings applies to all files which are subsequently opened or created.

3.2.1.4 netcdf.setDefaultFormat

: old_format = netcdf.setDefaultFormat(format)

Sets the default format of the NetCDF library and returns the previous default format (as a numeric value).

format can be "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic".


3.2.2 File Operations

3.2.2.1 netcdf.abort

: netcdf.abort(ncid)

Aborts all changes since the last time the dataset entered in define mode.

3.2.2.2 netcdf.close

: netcdf.close(ncid)

Close the NetCDF file with the id ncid.

3.2.2.3 netcdf.create

: ncid = netcdf.create(filename,mode)

Creates the file named filename in the mode mode.

mode can have the following values:

"clobber" (overwrite existing files),
"noclobber" (prevent to overwrite existing files)
"64bit_offset" (use the 64bit-offset format),
"netcdf4" (use the NetCDF4, i.e. HDF5 format) or
"share" (concurrent reading of the dataset).

mode can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or.

Example

 mode = bitor(netcdf.getConstant("classic_model"), ...
 netcdf.getConstant("netcdf4"));
 ncid = netcdf.create("test.nc",mode);

See also: netcdf.open, netcdf.close.

3.2.2.4 netcdf.endDef

: netcdf.endDef (ncid)

Leaves define-mode of NetCDF file ncid.

3.2.2.5 netcdf.inq

: [ndims,nvars,ngatts,unlimdimid] = netcdf.inq(ncid)

Return informat about a netcdf file.

Return the number of dimension (ndims), the number of variables (nvars), the number of global attributes (ngatts) and the id of the unlimited dimension (unlimdimid).

If no unlimited dimension is declared -1 is returned.

For NetCDF4 files, one should use the function netcdf.inqUnlimDims as multiple unlimited dimension exists.

3.2.2.6 netcdf.inqFormat

: format = netcdf.inqFormat(ncid)

Return the NetCDF format of the dataset ncid.

Format might be one of the following "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC"

3.2.2.7 netcdf.inqGrps

: ncids = netcdf.inqGrps(ncid)

Return all groups ids in a NetCDF file.

See also: netcdf.inqGrps.

3.2.2.8 netcdf.inqUnlimDims

: unlimdimids = netcdf.inqUnlimDims(ncid)

Return the id of all unlimited dimensions of the NetCDF file ncid.

3.2.2.9 netcdf.open

: ncid = netcdf.open(filename,mode)

Opens the file named filename in the mode mode.

See also: netcdf.create, netcdf.close.

3.2.2.10 netcdf.reDef

: netcdf.reDef (ncid)

Enter define-mode of NetCDF file ncid.

3.2.2.11 netcdf.setFill

: old_mode = netcdf.setFill(ncid,fillmode)

Change the fill mode (fillmode) of the data set ncid.

fillmode can be either "fill" or "nofill".

The previous value of the fill mode is returned.

3.2.2.12 netcdf.sync

: netcdf.sync(ncid)

Writes all changes to the disk and leaves the file open.


3.2.3 Dimensions

3.2.3.1 netcdf.defDim

: dimid = netcdf.defDim(ncid,name,len)

Define the dimension with the name name and the length len in the dataset ncid.

The id of the dimension is returned.

3.2.3.2 netcdf.inqDim

: [name,length] = netcdf.inqDim(ncid,dimid)

Returns the name and length of a NetCDF dimension.

See also: netcdf.inqDimID.

3.2.3.3 netcdf.inqDimID

: dimid = netcdf.inqDimID(ncid,dimname)

Return the id of a NetCDF dimension.

See also: netcdf.inqDim.

3.2.3.4 netcdf.renameDim

: netcdf.renameDim(ncid,dimid,name)

Renames the dimension with the id dimid in the data set ncid. name is the new name of the dimension.


3.2.4 Groups

3.2.4.1 netcdf.defGrp

: new_ncid = netcdf.defGrp(ncid,name)

Define a group in a NetCDF file.

See also: netcdf.inqGrps.

3.2.4.2 netcdf.inqDimIDs

: dimids = netcdf.inqDimID(ncid)
: dimids = netcdf.inqDimID(ncid,include_parents)

Return the dimension ids defined in a NetCDF file. If include_parents is 1, the dimension ids of the parent group are also returned. Per default this is not the case (include_parents is 0).

See also: netcdf.inqDim.

3.2.4.3 netcdf.inqGrpFullNcid

: grp_ncid = netcdf.inqGrpFullNcid(ncid,name)

Return the group id based on the full group name.

See also: netcdf.inqGrpName.

3.2.4.4 netcdf.inqGrpName

: name = netcdf.inqGrpName(ncid)

Return group name in a NetCDF file.

See also: netcdf.inqGrps.

3.2.4.5 netcdf.inqGrpNameFull

: name = netcdf.inqGrpNameFull(ncid)

Return full name of group in NetCDF file.

See also: netcdf.inqGrpName.

3.2.4.6 netcdf.inqGrpParent

: parent_ncid = netcdf.inqGrpParent(ncid)

Return id of the parent group

See also: netcdf.inqGrpName.

3.2.4.7 netcdf.inqNcid

: grp_ncid = netcdf.inqNcid(ncid,name)

Return group id based on its name

See also: netcdf.inqGrpFullNcid.

3.2.4.8 netcdf.inqVarIDs

: varids = netcdf.inqVarID (ncid)

Return all variable ids.

This functions returns all variable ids in a NetCDF file or NetCDF group.

See also: netcdf.inqVarID.


3.2.5 Variables

3.2.5.1 netcdf.defVar

: varid = netcdf.defVar(ncid,name,xtype,dimids)

Defines a variable with the name name in the dataset ncid.

xtype can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant.

The parameter dimids define the ids of the dimension. For scalar this parameter is the empty array ([]).

The variable id is returned.

3.2.5.2 netcdf.defVarChunking

: netcdf.defVarChunking (ncid,varid,storage,chunkSizes)

Define the chunking settings of NetCDF variable varid.

If storage is the string "chunked", the variable is stored by chunk of the size chunkSizes.
If storage is the string "contiguous", the variable is stored in a contiguous way.

3.2.5.3 netcdf.defVarDeflate

: netcdf.defVarDeflate (ncid,varid,shuffle,deflate,deflate_level)

Define the compression settings NetCDF variable varid.

If deflate is true, then the variable is compressed.

The compression level deflate_level is an integer between 0 (no compression) and 9 (maximum compression).

3.2.5.4 netcdf.defVarFill

: netcdf.defVarFill(ncid,varid,no_fill,fillvalue)

Define the fill-value settings of the NetCDF variable varid.

If no_fill is false, then the values between no-contiguous writes are filled with the value fill_value.

This is disabled by setting no_fill to true.

3.2.5.5 netcdf.defVarFletcher32

: netcdf.defVarFletcher32(ncid,varid,checksum)

Defines the checksum settings of the variable with the id varid in the data set ncid.

If checksum is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable.

If checksum is "NOCHECKSUM", then checksums will be disabled.

3.2.5.6 netcdf.getVar

: data = netcdf.getVar (ncid,varid)
: data = netcdf.getVar (ncid,varid,start)
: data = netcdf.getVar (ncid,varid,start,count)
: data = netcdf.getVar (ncid,varid,start,count,stride)

Get the data from a NetCDF variable. # The data data is loaded from the variable varid of the NetCDF file ncid.

start is the start index of each dimension (0-based and defaults to a vector of zeros),

count is the number of elements of to be written along each dimension (default all elements)

stride is the sampling interval.

3.2.5.7 netcdf.inqVar

: [name,nctype,dimids,nattr] = netcdf.inqVar (ncid,varid)

Inquires information about a NetCDF variable.

This functions returns the name, the NetCDF type nctype, an array of dimension ids

dimids and the number of attributes nattr of the NetCDF variable.

nctype in an integer corresponding NetCDF constants.

See also: netcdf.inqVarID,netcdf.getConstant.

3.2.5.8 netcdf.inqVarChunking

: [storage,chunkSizes] = netcdf.inqVarChunking (ncid,varid)

Determines the chunking settings of NetCDF variable varid.

If storage is the string "chunked", the variable is stored by chunk of the size chunkSizes.
If storage is the string "contiguous", the variable is stored in a contiguous way.

3.2.5.9 netcdf.inqVarDeflate

: [shuffle,deflate,deflate_level] = netcdf.inqVarDeflate (ncid,varid)

Determines the compression settings NetCDF variable varid.

If deflate is true, then the variable is compressed.

The compression level deflate_level is an integer between 0 (no compression) and 9 (maximum compression).

3.2.5.10 netcdf.inqVarFill

: [no_fill,fillvalue] = netcdf.inqVarFill(ncid,varid)

Determines the fill-value settings of the NetCDF variable varid.

If no_fill is false, then the values between no-contiguous writes are filled with the value fill_value.

This is disabled by setting no_fill to true.

3.2.5.11 netcdf.inqVarFletcher32

: checksum = netcdf.inqVarFletcher32(ncid,varid)

Determines the checksum settings of the variable with the id varid in the data set ncid.

If fletcher32 checksums is turned on for this variable, then checksum is the string "FLETCHER32". Otherwise it is the string "NOCHECKSUM".

3.2.5.12 netcdf.inqVarID

: varid = netcdf.inqVarID (ncid,name)

Return the id of a variable based on its name.

See also: netcdf.defVar, netcdf.inqVarIDs.

3.2.5.13 netcdf.putVar

: netcdf.putVar (ncid,varid,data)
: netcdf.putVar (ncid,varid,start,data)
: netcdf.putVar (ncid,varid,start,count,data)
: netcdf.putVar (ncid,varid,start,count,stride,data)

Put data in a NetCDF variable.

The data data is stored in the variable varid of the NetCDF file ncid.

start is the start index of each dimension (0-based and defaults to a vector of zeros),

count is the number of elements of to be written along each dimension (default all elements)

stride is the sampling interval.

3.2.5.14 netcdf.renameVar

: netcdf.renameVar(ncid,varid,name)

Renames the variable with the id varid in the data set ncid. name is the new name of the variable.


3.2.6 Attributes

3.2.6.1 netcdf.copyAtt

: netcdf.copyAtt (ncid,varid,name,ncid_out,varid_out)

Copies the attribute named old_name of the variable varid in the data set ncid to the variable varid_out in the data set ncid_out.

To copy a global attribute use netcdf.getConstant("global") for varid or varid_out.

See also: netcdf.getAtt,netcdf.getConstant.

3.2.6.2 netcdf.delAtt

: netcdf.delAtt(ncid,varid,name)

Deletes the attribute named name of the variable varid in the data set ncid.

To delete a global attribute use netcdf.getConstant("global") for varid.

See also: netcdf.defAtt,netcdf.getConstant.

3.2.6.3 netcdf.getAtt

: data = netcdf.getAtt (ncid,varid,name)

Get the value of a NetCDF attribute.

This function returns the value of the attribute called name of the variable varid in the NetCDF file ncid.

For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.putAtt.

3.2.6.4 netcdf.inqAtt

: [xtype,len] = netcdf.inqAtt(ncid,varid,name)

Get attribute type and length.

See also: netcdf.inqAttName.

3.2.6.5 netcdf.inqAttID

: attnum = netcdf.inqAttID(ncid,varid,attname)

Return the attribute id attnum of the attribute named attname of the variable varid in the dataset ncid.

For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.inqAttName.

3.2.6.6 netcdf.inqAttName

: name = netcdf.inqAttName (ncid,varid,attnum)

Get the name of a NetCDF attribute.

This function returns the name of the attribute with the id attnum of the variable varid in the NetCDF file ncid.

For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.inqAttName.

3.2.6.7 netcdf.putAtt

: netcdf.putAtt (ncid,varid,name,data)

Defines a NetCDF attribute.

This function defines the attribute called name of the variable varid in the NetCDF file ncid. The value of the attribute will be data.

For global attributes varid can be netcdf.getConstant("global").

See also: netcdf.getAtt.

3.2.6.8 netcdf.renameAtt

: netcdf.renameAtt(ncid,varid,old_name,new_name)

Renames the attribute named old_name of the variable varid in the data set ncid.

new_name is the new name of the attribute.

To rename a global attribute use netcdf.getConstant("global") for varid.

See also: netcdf.copyAtt,netcdf.getConstant.


3.2.7 User-Defined Types

3.2.7.1 netcdf.defVlen

: varid = netcdf.defVlen(ncid,typename,basetype)

Defines a NC_VLEN variable length array type with the type name typename and a base datatype of basetype in the dataset ncid.

basetype can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", "float", "double", "char" or the corresponding number as returned by netcdf.getConstant.

The new data type id is returned.

3.2.7.2 netcdf.inqUserType

: [typename, bytesize, basetypeid, numfields, classid] = netcdf.inqUserType(ncid,typeid)

Provide information on a user defined type typeid in the dataset ncid.

The function returns the typename, bytesize, base type id, number of fields and class identifier of the type.

3.2.7.3 netcdf.inqVlen

: [typename, bytesize, basetypeid] = netcdf.inqVlen(ncid,typeid)

Provide information on a NC_VLEN variable length array type typeid in the dataset ncid.

The function returns the typename, bytesize, and base type id.


3.2.8 Utilities

3.2.8.1 netcdf.getConstant

: value = netcdf.getConstant(name)

Returns the value of a NetCDF constant called name.

See also: netcdf.getConstantNames.

3.2.8.2 netcdf.getConstantNames

: value = netcdf.getConstantNames()

Returns a list of all constant names.


3.3 Test function

3.3.1 test_netcdf

: test_netcdf

Function to do a basic test of the netcdf interface


Appendix A GNU General Public License

Version 3, 29 June 2007
Copyright © 2007 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.

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

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

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

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

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

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

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

    1. The work must carry prominent notices stating that you modified it, and giving a relevant date.
    2. 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”.
    3. 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.
    4. 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.

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

    1. 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.
    2. 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.
    3. 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.
    4. 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.
    5. 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.

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

    1. Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or
    2. 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
    3. 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
    4. Limiting the use for publicity purposes of names of licensors or authors of the material; or
    5. Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or
    6. 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.

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

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

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

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

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

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

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

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

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

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

one line to give the program's name and a brief idea of what it does.  
Copyright (C) year name of author

This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 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 http://www.gnu.org/licenses/.

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:

program Copyright (C) year name of author 
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 http://www.gnu.org/licenses/.

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 http://www.gnu.org/philosophy/why-not-lgpl.html.


Index

Jump to:   A   B   C   D   E   F   G   H   I   L   N   O   P   R   S   T   W  
Index EntrySection

A
abortLow-level functions - File Operations

B
Basic Usage OverviewBasic Usage Overview

C
closeLow-level functions - File Operations
copyAttLow-level functions - Attributes
copyrightCopying
createLow-level functions - File Operations

D
defDimLow-level functions - Dimensions
defGrpLow-level functions - Groups
defVarLow-level functions - Variables
defVarChunkingLow-level functions - Variables
defVarDeflateLow-level functions - Variables
defVarFillLow-level functions - Variables
defVarFletcher32Low-level functions - Variables
defVlenLow-level functions - User-Defined Types
delAttLow-level functions - Attributes

E
endDefLow-level functions - File Operations

F
Function ReferenceFunction Reference

G
getAttLow-level functions - Attributes
getChunkCacheLow-level functions - Library Functions
getConstantLow-level functions - Utilities
getConstantNamesLow-level functions - Utilities
getVarLow-level functions - Variables

H
High level functionalityBasic Usage Overview
High-level functionsHigh-level functions

I
inqLow-level functions - File Operations
inqAttLow-level functions - Attributes
inqAttIDLow-level functions - Attributes
inqAttNameLow-level functions - Attributes
inqDimLow-level functions - Dimensions
inqDimIDLow-level functions - Dimensions
inqDimIDsLow-level functions - Groups
inqFormatLow-level functions - File Operations
inqGrpFullNcidLow-level functions - Groups
inqGrpNameLow-level functions - Groups
inqGrpNameFullLow-level functions - Groups
inqGrpParentLow-level functions - Groups
inqGrpsLow-level functions - File Operations
inqLibVersLow-level functions - Library Functions
inqNcidLow-level functions - Groups
inqUnlimDimsLow-level functions - File Operations
inqUserTypeLow-level functions - User-Defined Types
inqVarLow-level functions - Variables
inqVarChunkingLow-level functions - Variables
inqVarDeflateLow-level functions - Variables
inqVarFillLow-level functions - Variables
inqVarFletcher32Low-level functions - Variables
inqVarIDLow-level functions - Variables
inqVarIDsLow-level functions - Groups
inqVlenLow-level functions - User-Defined Types
Installing and loadingInstalling and loading

L
LoadingInstalling and loading
Low level functionalityBasic Usage Overview
Low-level functionsLow-level functions
Low-level functions - AttributesLow-level functions - Attributes
Low-level functions - DimensionsLow-level functions - Dimensions
Low-level functions - File OperationsLow-level functions - File Operations
Low-level functions - GroupsLow-level functions - Groups
Low-level functions - Library FunctionsLow-level functions - Library Functions
Low-level functions - User-Defined TypesLow-level functions - User-Defined Types
Low-level functions - UtilitiesLow-level functions - Utilities
Low-level functions - VariablesLow-level functions - Variables

N
nccreateHigh-level functions
ncdispHigh-level functions
ncinfoHigh-level functions
ncreadHigh-level functions
ncreadattHigh-level functions
ncwriteHigh-level functions
ncwriteattHigh-level functions
ncwriteschemaHigh-level functions

O
Off-line installInstalling and loading
Online installInstalling and loading
openLow-level functions - File Operations

P
putAttLow-level functions - Attributes
putVarLow-level functions - Variables

R
reDefLow-level functions - File Operations
renameAttLow-level functions - Attributes
renameDimLow-level functions - Dimensions
renameVarLow-level functions - Variables

S
setChunkCacheLow-level functions - Library Functions
setDefaultFormatLow-level functions - Library Functions
setFillLow-level functions - File Operations
syncLow-level functions - File Operations

T
Test functionTest function
test_netcdfTest function

W
warrantyCopying

netcdf-1.0.20/doc/octave-netcdf.pdf0000644000000000000000000075531315205072111013755 0ustar00%PDF-1.7 %ĐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ăd4›½*´.‰<øï·_•è̀f’W¯_wƠ«îrđăc;̣ê`GæUOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ăd4›½*´.‰<̀¿ß~U¢Îf’W¯_u½ªîvđăc;ZäƠÁ̀«Ÿ¶­®MfGñÏ}í I•]/¶́̃­Ím̃¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ƠÿEK{*ʇuÄpg6;µ̃$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­÷E™7·¢â ̉"/²îÑ7»¸¦‘¼ưj;{Y—ÇÊ‹"1₫t‹m×|‘£o¼irÛåI É‘c¶×º>[T̉›ÏEnn#×Ûû₫bÅø¹‘û̉î«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gÏR©đ133wÄ xAÄbêí;¬̉aGL6K& 0+‡}&ö"?‘á°(̉¦̉a/ ¡ć,•!£½¥‰î-fö3¤Ù*IĂx {aªùđ”sIC%̉đhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Ơ^C<ĐHàDN8đ÷ờV{Hôüæç=üúØS`¾Jñ m}u%Œ̉ßE Y]^/`»w¦¶oâĂƠå:1L·ÙÖVƯ‹omy¾èUÿ­àTÙ ÖĂ₫v¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”X[“ÖôÚă{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîF^‚ñÎp•=‰!9̣̀₫Ú4gÀêBË¥0pôù̃̃‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—X NˆHæĐÔ3$¤Ç˜{<Ư0*¢5cƠ~ÿP÷ơʯÂùƯ5WÂ42^!0^#rq‰xƘœE„3xÎü ñ ªz“)c̉gl1B̀î̉°ơ•?ŸXqû!̣NA‡¨W»A*dư1ùÔ)iȧΰÅç“Đó â9ç’†NVf¤¡–kô¯VäaUJü†ố?%Í5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›₫1âj· ¾gÈÈ endstream endobj 6 0 obj << /Length 303 /Filter /FlateDecode >> stream xÚ…‘1OĂ0…÷ü ÎàĂçó9ö ¥•:ÂT1 ´ˆ’̣û±cR!„@–¬³ưôî»g:.••'đT‰æµĐÓíq'rq·*đKg™€-ÅúO™u ‚ưÇTÅîªr|HÂ˺¸Xz#ŒÇEƯ%t£{C endstream endobj 13 0 obj << /Length 618 /Filter /FlateDecode >> stream xÚSMo£0½çWp©PlCB®ûÑ•zZ­rëîÁ¬ dµÿ~ÇqBÚªª*Ïóxf̃›åđÇ¢v•È*±‹êa“{Ô¶~ưØ0Ê+J‘•…€ó‡iiÉKŸ—®ª~9lîÊ2by¶Ï÷,:][Vn3±Mô5§„Wñ?«ÛÎæäÏá1*‹Œï e&8åƠ¿ØëZ©Èr­Wy¿sVbêmÛ§Tóœó₫m‹øÑtcâ/¾™Ñà‹̣¤%ËxÁ£”m3†ưé”ô4iă^æ"Ö“ụ̂¸µrLø.UƒÀl0a/₫¢rlnô4[ư¼̀tqv•}–³©ÍI« ³Í‘vz eG?®́1>%,¶Æ9ëæ2C§đ¶&™SO.Z"c%CZWí½£™u­P!@j,\£ô• ¯ßXE™VMÊ=ûïB¾́{< É́2ÖGj9ª _T»"µđjĂ7ÅLJĂEmPI!4O¤Ñ`™"”Áa­kH¼̣®Azß(ñ26Ê:6{̉Û16ú]±g* ‹:‹êvÏ·`÷”ÅDEíC+Ô8$,ع­“3¾ÀÖÎC(Œ¶Ă–~†"¬úº₫ºÀØŒ4ÍF‚\Ë2‘è{œ:Úø ëhÓGÚô']œhđZ’7üNáêê=3ªÏYÂÀäj§iĐÍ`̉Ê.€¢]¼)V?N—5¦^^vW!=¿MÈ-œ’Ø•IàÚ)Úw/Çv‘­º{Ò‹Dеˆ'9¨đ{c…9œ¼$7z €·¶pmk/àæûaóP˜ endstream endobj 19 0 obj << /Length 1015 /Filter /FlateDecode >> stream xÚ•VKoă6¾çWèV¨d‰ÔƒÚÛv· ZÛ¢pOÁ‰¶ˆÚ’!QIóï;Ă¡Y¶, ˜Ă™á¼ø GIĂ/ RDRAu¸‹·ßDüưp—x½4Q–  ßU 39½pfơ—ÍƯú^̣ I#‘æ<Øl[Gq–›:xd_Í`{ó4ZÓµ«ï›ß×÷Y$qTÆe‚úq&e”pIê›FŸ´Ê῭yJ!OSöđíŸk@Èû³²jÅ ö¼â’é•ă}ÓöË×{¢ªBÉ¿«,cjç̀à –—·½Ö7Ü%º­E{/èSơ:Z…i\°û• :K¥“S·*ZÊZƯƯmiµ×Ư?!º€êî€1¹ª‰(ɪíV¡ÈSÖíÏ@œUƯ¾®dÊ<«nB{Æ`ÇúÎ`¬j±:"‡2µ5™5‡cß¡p*.J]Œ(e)})2!á&1QT8hƠÓ!e‰©ÉVÿa4’É.ƯÉ)CJĐ]F˜–¹KW¨ Æ̉ªĐFMô¥z¯ß̉??¾ƯZé̃*ă6”¯­ Bv€lJÁoâ:â6.Ñ,á̉•®`̃µÇå•‹¼@©ˆ¹ŒˆÖvo*.YÓ >ƠÑI$Ăđ ƯÇñio*¢=!BU¤́7;·î#Ùkov V×$  M(p£{oXMD¯±°•«q:„±Ăµ$ëÙ“€a‹„Á‰ØÇ œ…U‘CƠz0»Ö…‡':âêvI#`Ü ö̃À‹Ùï‰Û¨34‡r#zPO}Ôr¢ "AeâjÈY¾MÈ›BÄn7̉¦™)âEe¹ƒ“{]™ÉƯBư^µD<Ákq̣²íÆ),ÓN¯#Yñ-$Ÿ÷âƒnu¯ ’ºơ¯ GĂí¦‚{Đ´¡94{Ơô@̀cb̃ „—ñ;O=˜˜µ=ơÀ;=ơ`ø̣©¦»ó¨Ô~舧Gªê¯"Ö¸Ñu÷ëæ4e¼r˜|²HÜèŒ2Eq  w3ôœ3¦₫x8;ïféyº '.”ÏS¨pưÿá ö™–Ç/¾ƒM»ûîú Ká&ù2.²(g)Ü₫^ùƒ€&]À‘+h˜äÂḤ(¥ö8|°doÿ¥Ư:…˜•9H\¦§‰v8$ñÄ-ü¤ü'^´£<=ÉN¾À–²,Ùq¯•k>Đx6ŒE=SH >}‚¬”Q!øcb:Î PóyK7®’µÇáÓz½kǰƒôµ/»HS2:‡ózp|L·&Ư°Ơ¶ª·ë „ÄeŸ‡A&áÓO~¯ÎÔ¯adaô $èúKH«F endstream endobj 86 0 obj << /Length 2727 /Filter /FlateDecode >> stream xÚíMsÛ8†ïù:Jaâƒä'Yggkj§jʳ—Ù=(2¨V–³’’T₫ư‚"@4Hw ÆæĂQ©eê~%>/@Ï óϪrVƠ‚Ơ¢­ï^§g÷ogưƒß_¿à¶Ử4\‚–?_¿øéJ©/XS4|v};SeÉC¼ë›ÙŸóÍâß×ñ×ë!*SRDfu­'©ërÆ+Vr%»ÔƯ»(5+ºßº¬×‹FÎWo¶íb)*5¿¿í¾¼ß-ŸÛ₫Ça¬Í„ѵd/O²˜2O³¢1ÿ™g:}á3ă¼vĐ(™º´]ƒ“F¾X6…ÿ²;WÛíf÷¶×¸ÚƯô¶÷«›îÙ‘ÆRj&¥ „⟟k=ÑÆ‹+UÁ¤̉¡Â¿,–\Wưüö>ùEƒ}Gc´ym>¼&™!÷ú3 ÓX&>3~¨›HN\ëIêĐâµfMÇ®˜ª„Í̀ ɺ(æ¿í Åă„˜¿Ú́Ûơ±{,ç›Ư‚Ïæ3›w w:º̉†ưsYâ[ṇ̃dèy*¾@° {EÏåäÑF°¯_‚v8à}ÅDt8tjg%™,#”Öÿ*¸Xz3lúSvµP»ÿ¸i?Mk†‰f²‘¥Æ©ñDÛ¤̉à¬)›Pa®4+ pd̉* ¤qKViDaâ+Qê;ƠHVI;—PºJăo›·ïú¡Ơ¶ư¸(ëyÛUÛ₫©Û»ơqs¿[m7ÇîoŸ‘>F©|½¹È©ß¡‘|êˆSH vê‡b"NtjÇ~Í™j´c¿t§êO}iíđú\«<ˆ¹$sa°€¤;À pˆ:ˆùºƒeFÊüü¸'Á¢ü\u3ÂÖưÀç÷S§qÛîÛƯºŒ|J3˜á3ùô'ÂÆ#Q9ÖP]ø|ÁÑ[/cV± ¥[Å ¬yU¨U€˜«©«èn¢ÊO0­²:‘‘XQgŸƒÿ1cXl̉áPÆ€tâÆbbŒA¦Œ¡43Ÿ„7†vÆø´ß …»ĐżÅÑkJ7‰@™’ªQ“11&!S&‘Ầ“TIđîC‹Œá³„&Ư>e È%n &ÆdêÁfå¯ÖÊ[¢,qXwË*ïÚ»â ̃d€.₫¬€ÑoÙH§ß è‡âô1ÔjdmÖđMjnXVZ¹ë–²[~×̣\Og[9·ºµÍ_7oö«ưç̃¡W‹Zà;N[ä 䣶ØÖy#—v{2T¨.SA0?H̉üHR=NsÆQÄú¡#m(v-Ê™h̀·\C ÛÚăúæ–½m/ßu}à‡Ư^®́Ḥáq¤(ÊLÓw"sG3™W€à5€å‰à•N=đZ™Ëíu y-^7»ÿÎàŸ ³ÙîÚë’Ñ|Û(döH§³́P,C p–˜–ÉÔËZ2ΖEẠ̀!₫ÜË…ÈÜ=…zÛÔtl} [È-ƒ-™zÀÖܤ£Ñb+ÇØ¾joW¶ÇÓHü~o6̣̃uôêˆÁË3}_9†«=˜é¸ú®W &¶âäé%§«ù™Ó6`·£«ÍÖ̃Vá·÷‹e7E´_!;ƠÍ]9ó¹Èê§¶caă!sGSlBayø̣£MÛ^̉lI±=JrÆ”1äú.„ô”ëAJiÜSuE'ç¾ Y½9™ê~ÄJÍ"“yr1¾-é€ûá4q &†q2ơ9‡×g /CÈ×ÛûCûƯoD•3|Å }A:æ<¼Á²†cÎc®ô˜“©æeS3¡jˆ¹aN\uÄ+ù—¼ßÈ₫dÀAđ€2p(&p:ơx­Xé/Xí—!àíîÆÔ»àE>]^dé{:Ù>E6Ä«FÉbbÈ&SdWæºh­B²Íd:6c£̣™ór}‡!oHG̃ ‡ÜáÈ11È“©äUmÓy=A₫ª[<ºßߡӕ®ø̀,? ËöH§³́P,C p–˜–ÉÔËR±J)Èr5aùơ₫ư»øLd₫.kmÉñt¦}iÎ4Ă4™z`ÚÜœHÓơ„é?̀¾ï^mî°›:³ûöƯ»c™N«@Ñ ‘Áibbh%S´̣ÆÜJKBZ›Ö{»8´Ăṽ×¹ƒ×|Ë/Ç !u€Ḅ†£ÄÄ N¦P/4…–l`Ơߢ“ µÊ'ÊKê90Ê-é”ûåµ¥ˆ‰¡œLí(çM·¥ ¤œ÷¶˜¥äKx©3x—¼ÖÿdÂA‚đ3”p(&‚p:ơ@xm$e@x¸öđy·FF+M“©ûö–8̉)÷(Ê!j8å@̀7Øóe>V«s›¾\«Á%v_®):ÛƯáÁ‹ÿ̀Œ»0ßÓâSÿÙÖ9¡åx]±¦R¡œ́–R.æUÀSWIàÇiÎx5 nß#Ñ^s=’¹wU@¯®@ºioï—,³.ỹưt¾}oÎ7Ă7™zà[·¡ ̃“ –p¼¹̀d]ôé»?øét¯§à„ál{%1hSy²ËÊ|ƠRÑ ưË«3·É'Ø'!´;Ôé ûÉ(e &†e2ơ³ùóƯaf9ßÜ­îZôTƯ4¼§¾YÑăt}bˆN1ó- _ó hÎƯÓµ\`=đzÿáư´èƠæ­T3ªyûÆ!£’W›=™•…ä!z^h³Ö¨¥9˜´Á8ÍGqïû!Ú¶ê¦|$Ø“)§Ơ°ÙÓƒ¨dæú’;({đ“éö¯'à†„¡l%h“yÙ•ù²Á& »|°ZÀnÚÁu†ôéf£Í ²́Á}üwơ/_ú×?Dn˜¤ÿúăCH‰@—ĹĐƠæV̀RCt'…®9)Ÿö Ønÿ±̃Ü`—­ÊŒÖ·₫V¾{“ơ¯'…œà€)@ÿơ3í endstream endobj 153 0 obj << /Length 2358 /Filter /FlateDecode >> stream xÚíƯOsÛ6đ»?̉A(ñ÷Öm7™v:™në́%Ûƒc)©fŵåiûí÷Q"€ÊxB1ơVZc:S;2„÷dü@€ Hó¦…ÿxcDc¬dVæöÓU»ơ₫csøæ‡×W|,·€‚ Ṭï×W_¼̉ºá-ëÛ7×Í{¦¬ôơ]/›w³ơz₫Óơ·Wÿ¸ö5i¡™V23¬+}"6çü>‹èX«Ơ!¶d‚)¦æ‹®mgÛƠîvù­·¿¼¾¿{sói5äơÅ«Nâj̃-„°³¿Í¼ë_Lô%ăÅ̉÷=eçaª„+ÖIåtPÂ4üŒµ=ü‹=—ø•ÈÍø₫ªàI³q˜½̃&Í¢lr̀’±½Y.à5‰Íê„ÙWs«f›M®¹L6‘nÊçØxå>C”Ol„đ‰²ÉñIÆv>»¾gFG>»'|~?‡CçÍưj;|Ư%„v¼ô₫§•%غ6-f‹* ØFt̉lq6l騭íX× ̀ÖLÙ¾¹]/R¥¨ /kªà¼Üt¨€2]¦Q69¦ÉØ̃´‘LiMÛ©é s„›ûo¾~xZ6ײ =›)ËcC—[P–±'Â2Ê&mY É:ˆ³à’qư‡Sç-gÖZH½k™lS©»b®”ï ăœøK࿾y¿Y=L?70·¶ºA!ˆäJew)n S¢3ªăĂK«²^K̉Ÿ†9Ơk³‡ˆîvnRfèÜ¡×1¿F åêĂ8%&Vª«½âL#¤XÚ¼\µ?…Á"L‡TrHS½h)Yß÷˜´H‘₫êç¹0³ÇíÖÛ9Ÿ}LL°¤®§µÏ!EtlÄr£¡ )¶ÂyR)Ê&‡)Û;-³*r*SN¿^ư»åúf—Zä₫ÿ=8·zÊëØ˜å^C”Wl†đ²ÉñJÆö^[Ăº̃b¯*åơƠ:µ¦Í»¾rüëÓM1Û¸œq¨€bŒ)ŒQ69ŒÉرîá$P̀X'oà•a†đóê^hËë¸₫§W–đ靨'ª€đIûÄÙdø¤c{Ÿ–3ÙG>»ØçÇƠn\I-uóz2t¦R®ÇF/w* \c[„k”Mk2¶wƯYkص‰]‡µî„kn«º3•¤\^î:T@¹Æ¶¸HºFÙä¸&c{×ZĂGˆVĐlÊuXn€Ơ†mj¹¡­̃-Ư”Ó±ˆ (§Ø áe“ă”Œí*Îz9íSNO-7]Qư¥—]c–{ P^±Â+Ê&Ç+Û{–™^EW&Úĵqb¹AñÊñl¯¯¹6.g* cJc”Mc2¶g̀áüMɈ1O1ÎYnpK½u\ÿ#¤|Wî3T@ùÄFŸ(›Ÿdlï³…MG}́S$· ¥f¬m=ÖÙưUOíKe3}° €›?xœMƠ₫r×Q±®¢K럆9t\ê¸yÖư`t¢çƒ‘0–ơí̃´“ÓØ”đƠçíĂî†zÎ8wϯTÏi2å·Üo¨€̣‹ ~Q69~ÉØ̃oÏ©°˜¯ ø—²R륺:}~’‡ö*éßOD(!b$-Óđ¬ÀÂy–n ´:̃˜Æ/¡³Á†f¡ï2|¿Vơî§¶Y¿…_Jœ·g.áilü£ôÏô4ŔUư₫Áñư'Úræ@°;&ÜÍö™Í¡´Ú—†iƒ6."ÈánË–›4AW`Ÿñ7Ûåê·£‰‡Ft ª¥"O q˜Œ¶²‹ă_đ±ôÅ&˜èpXKQ‡£åNẮùˆd‡#í₫—Ee endstream endobj 9 0 obj << /Type /ObjStm /N 100 /First 837 /Length 2471 /Filter /FlateDecode >> stream xÚÍ[Ûn9}×WđqöÁ‹—"¹HÆđ́Ý —Å̀fư ÛDX¯Hrf̣÷sªI©;‰¼›ØÍ‰Á}#Ï©&‹du:(£¼ÊQ‘UĤˆ”e£()gƒ¢ |À3V!²²NEç•5*%ÜŒ*Û0K(eÈ)‹;ÁXe»¬lF‰DÊ Xfål€îP„,®QE˜Đƒ²Ầ‡QÉE@†¬\dö Îà¾Ç#⨼@%\[@eØéA¸FQ¶b7 ¼™yP¥€ëˆˆç 0ÚgT¥¬n¹àU T‘k«<'\;Tɸö(J¸(jó, -$h–à .0ÊáP¯ơĐ–!¡[ŸeƒêxѾô÷ß÷gU©ù¬ˆ̣§đÊÔŸ¢ĐüçÍụ́y·S¯`Ç陿è~ß©ó}ư£¢!?±=8‰»ægpx̣÷²1fc¼ƒóÇ«Ơp¯dVs¨ï™Ơäđ‰ }áÙüùÍÅ®¿~º\ưg6²̃\u›BgÎŤK¼J̣CĂÚj™¬ nÎÖiJ=îÛä¹ÿ¸~±VóSơƯëw–«7‘&9F{œÇƒSNfí0ƒ :x™WúëóÒUñËg?•?ß½Ưí̃mÿ:Ÿ¿YƯœ¬/w‹÷~³Ü½½¹ĐËơ¼Ü8Yu»Ë«×ó¯´sQHNËÜdMÖhÈưuKĂNƠ+ªö˯ÿêgGÎè~µº¹¾>ÿ²±ƒS¬W´?Çdïă¯é³QŸü½üƠ‹m±ÖöĂAÖƠ₫P̀vÅbW|Ù•ñ査âç® ¸‚â /(¾ ø‚â /(¾ ø‚â /(¾ „‚ J((¡ „‚ J((¡ „‚ .(\P¸ pAá‚Â… .(± Ä‚ J,(± Ä‚ J,(± Ä‚’̀}'…(K9i _²µ—¥Ă!GtFøiµƯ-®¯1)üÛx³X]Éáz½¸ú_ÓÄ(iƒ9toM°¬ È7²ÆÂÎQtËa‹“g>j MD¼övDɤsnKé2&@(}̉ɧ”âo&i …àˆDh̉ădOÛå¥têË-&/9ùÇûnó~Ùư6‘³USÎö-l©€đ[ËÁ°\Zí¬=j‹ˆ2bŒeHđƒØ„R–Ư@: ·ưgƒ_ûHGÉÎnV—»åz%­ü¬{ƯaÁ¹́¦ẹ́½û.ÿ“ÍH¬³|–9‹#Úl°Î÷|Ô¿-ß¼=¹î̃w×bÇëjÓv"¨†\à›‚¡—í`‡M:‡£f¸‰b¢¶:ß”̉#”bQÙ7¥LV#Qp ô÷ưñp?LDÉ2¾‡¸ßGFàØ–2°&„[Jvˆ́Od<¥Çw(ƒÁ× 5¥ÄÄ™x˜®½‹ØPÖiªÿ”“ŒH–a×öx(̣tư[³¹aoÆáÅÿ\3̉)IBK…—Ä e'­ƒhÁ}rq"./6‹Í9=›¸­ª‘‡¶zˆF"“ˆŒDÊSçtÜÈ8e¹1.rˆ‰Ä¦”́µd”‘4§Ø”³PæÑ[†¤ƒkB¹È‹â­$”A> Ym´K|;[^—¸ú]·YLémƠÂC£<@1£q™ˆ° º¦®Bû@¸RRÆư¦”6ăs+ ÁˆƒËdç›R&d¯FIH̀::¦ăÁHˆñOvCd`ñ•Å®-%⟘†ÈZ€Fä×”ñ»aM¶Áiç¨)¥3x«¥7RSFZ$¤£ø\kÊØ'ÉGŒätÇWÆ< %ơéï¥1Èß§¦”1bí–)J’fkB¹_¦đy “w˜2z=úN‹Àẹ́¿Ưj;Ưä¿7íĐÈ4ŒêhF¦![1 ©o¸„üç°.!§¡_6¥´"q ëÄSäœCSJÂ'̀(ï%W'ë[,¾9Ê. 0ọ̈¸·|"ÿ'ûq³¾y7‘ƒU£Íđ0¬Â‘́°‚#m¬kâpYE#²n£D,’6î–<,™iCÆ;²ÍYT—/`„’™ÂW(™#ùr$jÊæŒt̃ñÂù^̉{ø|@ {‰™©s©s©s²·¤S=³©Tï÷•”£­ÇZ¯î, ½¤_5}¢Wµa¢g+^U{©*½T7È’r¬x¶âU –ªKU„¥ªÂR•a©ê°T…XªJ,U)–ªKUŒ¥ªÆR•c©ê±TYª,UI–ª&KU”¥ªÊR•e©ê²T…Y ÷Ö1‡¹p±E'ajÓ‘ ñR>ó#&KÈ6'#aÂnÄi¨ÚƜȘøQĐÆé[‚¶É8‘2ơ¦ˆĂÆÆ&”ûe’¹OäöQXÀT'pwÆ₫¹Ø,×Ưv¢Æ¨– Êđƒ±̀G|B †ÙjÄm=Ă¡»F1cF·ÄlDqbd§QĐÆVBUß–#›óè=IV°¶œ#;øø‘M·@“q"Kb?̉¢%2´m9ñáE£ ₫ƒ¸ïN;g°²Ÿeàd ư¨-'öw¤Ñ–’à%økK yGg‚C^#¶¥Dª$ر„́4¶ï¶åD®iư‘ˆŒNM9=’%Ö̉H̉…XG9¡ábÿñÀ‰-”‘oéO7‘Ü×xÉØˆd  Äó;­vw»Ị́âf7Ơr··lP¸iX‰#ç‘, ˜¹IG81¶£qzä¯(´åD¾Äóh“Âbß–Sv‹76ô[ÚrbwÚÇ; dËÛ>h¦âDúÁŒÂ9— ̣û-ë…Ÿˆ“ÓG{\D"ˆ©-'ÆFr#NdÆ —7á<¨¥Ø_X”„Èø&‡pÀ̃iæx¹í6'§Ưëåªë÷½M‡I䨗#L endstream endobj 162 0 obj << /Type /ObjStm /N 100 /First 890 /Length 1313 /Filter /FlateDecode >> stream xÚÍVMoÛF½ëẂ1=xµ»³Ÿ€ ± 4€‰S´Ms ¥•CD&UNâß7¢¥8mÚ]Äáî›y3o†\j̣B MAhïpÂDk”°f•ppƠÂ{¾7"́[ ÚZ¡•30à¬Ci‹UR+8ö-ni›@âáíp‚åe¡c‚»Ăj"üÄ(ƒ}Ÿ`àO% 8F:QÁpl81^£à¿1H«¸Â@5ÆDŒp'Í„'áN9GR‚{„»e÷RË‚`ƠØd9;aäѸ1Îó H]De«•@ê5'woâ¥À@¹F¼RÏI)¸{æX&h¶3ÛB^ ¬.NĂ=$=BƯÜ)V‚[f¸\Ä,d"'…JLb!9hJ¼å)IcĐiʼn‘‚2‚4ÄdùH³+9œT£M A)– †&„ +U"³Ad€ÁlQŒsa$°0¤!Úèw«7Ă ̃‚»bĂà)@ËÉÆÄb r,’‡»c=HëŒTÈ…ê0¸Wî5ö ơĸ{ËB‚”ǪĂà¹ÀPRàÎ 9 F : ¨O!Á ĂD±“D2¤ÑñÜc`ùAyd0Z˜¬MC`0-§ä̀èđp4>¹\e1~VUu;¿½8m7÷Çeơi4~^7ó܈÷ ϧú0¿É³V¼wÚJO,‘Å:ă¤³\´‘ÆöLñ[1~QŸÔb<Oë/Ëü9/ÿRV-.ªY[ÖƠoøïƯ:7“¼(«<ç{Îiư‹xút„ßO&IZ:\wIR’Z¥̃,µ} Ní%Ă×ä™S‘ÔḥSU|N<™2̣{*©0—ÚGø JIz₫Ơ´å²lˇêú6³­ÿ£̀‚—ñ[›đ”J§úÓî(=I~ïï8Ir₫Q8QN²|:PóÁ)¿•Ä¡ÓKx’×íuá¨äWñŸ^36\ÓÜ©œ{Íù¨Q^zô8&¤ă³U'´Øö̉Ơ«Ë²:ûÉ:UB£ÓØ.=>1ŧ–T8üđº“Ñl>¢dêÓ½¬æùëĂTºeƯVzÖ ̃™x”x#Æ¿ÿñ§@Á'‰(ƠÅrùa ›ÖU» 6ÅA;øc \gă®LωØaà=~ƯÔ³·éñëÉTŒỌ×V\₫1¹u[,—hO}QmÜe]̀·­y¢yåVØ^PƯy¾ªà9)¨ÇVÙºÙg±8Øz aoâ^¬ËY÷%QœmB½úœ›Ïe₫̉9^º´Đt~¿–g7…ÿx>8.otĂ‘r¯éƠ6CßäEnr5Ë]$âµ₫ư½0œlÏIö­’¾Í½(Ôá«Ù¬ÉE›òËơê–í²ZÔûÛn»èóí¢m÷~‹ø̉”}é}¿‡ëÙÇ|^́£ú¿ v ¾“˜ßÇåiS4—×{¼%èÛÙ ® Éíl¾g¹=úxQ}:*PѸ¬₫Ço¹ »¾OX€ñ_\,ÛiƯœí½%™–ËîÑ\妸&HÏú@*ÅiƯ´C Ù²^uÓ“¿Cåj̉‡PĐư›ÄÛ¾hVë;À̃áÅ|>)ϱơ*Wû˜ô¦É½u¦-[Â.«Ù½g…äjưm6®ƯĐÍóà!»3êådX®ª8Ͻê|ÑÔ«®ÆăVßI endstream endobj 426 0 obj << /Length 1218 /Filter /FlateDecode >> stream xÚ¥WMÛ6½ï¯ĐQV´HúÈ1H¤(Z pÑæ®DÛÂỂ‚’cl}‡R_ko²($æh8œ¾÷†¡A h± Ë9Éy”§»ØZơ!À_?ßQçc4óü¸»Û₫*D@cRÄ vû@°˜Äy1ÆÛUÁCH7ÿ́~»ûe7L‘đŸ<Ơ{¿::gÍ£"1G›*XJb³ÂS#‘̣đˆ†m?Ȧ©ÛĂ&â™e[ᦓ•±BzëBâ b9‰ lwT°…ópè6đ!́§z@ËiĂ²đÜ»Ơ£ứœkĂÅ:?öơ îÁRˆ°Ó‹\±Ấv®6²÷í¾Å”Gpyj́'TPlĂ ¯£r ÿ^K×j́^Ơ™d.í¢ÍR?Ây‹¦̣bvÍIR¬®ÙX²Çÿ©Ô3v¼­T[¾ ±kƯö# Î„qت¡¬öhoj°?j©ÿ·XÄkrp.HÓ Œn¹A|0Â_”Y’,-s¶øíÑ´yÎïwuˆ-₫8 Ïư‡íör¹s[Wrä\JMTũÚnE,å|~}·.R«-Vº]DÍ&.‚”„gÅØî½£™û¡Yµ™@;é=̃rß!f,Í=K“Ë’¥µ£f§+¥_áÖ\¼₫\–ªï÷çÆR`"ùäytqçB´EÅÚ^c.§èŸ˜Ë”´YI[g+!IOÄ7ftó¡kKg}ÆWJ–&îñª&–̃Ö³5!5ÁØzèHƯ¹|ê®Æd*3&3ç3ôר¼?·åd€đ/‚¹±OOR6És^0§ơĪ=(Ö&¹·j Ÿ„Ÿ¬Z¡Úû‹º®ö´&åîïqæTˆYP@>ƒ̉€qüRvm«l¶èá"̉PÖ|l¬ø1át6<›¶gá“u9(Ü…’Èæ̣ ‹9"Áɉ,|@D-n ÚwÚG;÷8ăÀÓ{­Ă]Ó &¢'à·4Ák Ư€º@n 7†Ä[„†œóB̀ơ-‰đüÁ°Ÿe¾>óÛIé•££)Üzb7rP÷Z5Jö阡FèÏỮˆÛÓ₫R{ª/4äÚ qă~6á̃„2ơPf3(OĂÏC.é}(景'UO†῭ *…C%e£•¬^pϲ´{4ºÚr§–ăYX´Ï¥Ö PĐ!w¾:ư‚Ë‹qsS‹F}nÛù{l‰»›•Æ—¼Ÿ\xW ö4\¿½VƒÁ³kǧlɧÓxơÿŸH₫ơơ%oqyQxŸĂˆ₫½EÇ¢%9ÂñwsO4qûÉláçèüU¤® Đ8GrÅ)`8©áˆ#¯ZzÔó÷:ØƯl_s¯”!₫̀^7­—1Ùică .?_z·yLeÅ Ø3̃¹ˆba‹'₫œđ#@æp{:LøÍäûZ¯‹wÿÇe^•Ç7Ÿ ï™ ™?Å=ˆ0₫©¸°Ú endstream endobj 430 0 obj << /Length 641 /Filter /FlateDecode >> stream xÚ­UÉnÛ0½û+t¤€å"jé-i›ErJ{`$Ê¢Åùûr4´³¹EĐ¾o†õ3̀Xë̉“ 5¦ư8 3I‹“SÜ»Ô9~~yƒÀUi5œÆ!„¦?„Q"r²'zA_s#’rű?²ă¾çœæ‰HĐ¥̉™₫àå(–¿) X…O <°íè—edzX¯ñ±-†Đr́®Ăw¯́ŸÄơèk{1pM«ïÚ<j}§;®^wf÷÷øgxẠendstream endobj 434 0 obj << /Length 1819 /Filter /FlateDecode >> stream xÚÍYIsÛ6¾ûWpt‚f$„àÎdzi\·étºÄ^œ(²1¡H•¤â¸₫÷¾‡…›IW²“´ăƒHxxË÷V3ˆ?f…F.ÜĐJwg¶üZƯXêáí÷gLï[ĂÆuoç·Wg/.|ßb6í˜YW[ËwljGqKï*³®‰»|ơăÙwW-!ßñ©ï¹G̃jv?¸:r,R‡ù^R8µñMƯºö—\,c´e±\»¡Ọ̃-¯x‘rdk,€m­ˆ†¶fưê–Ă!×%[M¢ÆW¤‡ H,ˆ4ù½Ú‘àÛÇ¥ï“DäÉ&×E¡~EÉ#M¹\;!)ó¢Q_’JïÍxVbëá™ú¦ß̣Éß½R<£äu½À1<ǔőœ2Ư!?,׌ˆ›ÛuÎ?.]ˆ(t²´Ä\jƒ ±€FqÜ3ä4­x̉µc4öư–0óƠ)³ơíÛj{ö·_“­Èy‘́&‰]“Ơô¡I5îb¸‚¼€<̀gÿ/«Å¾*÷¼jî³ÇóĂÜaJ©f O°: Ư¡€¯•U†( ,!¨Å}B×r»‚k_´)"øÍ¼Ç¨ªơY¢„Îá„cÚ{ưÁmŒ€¯g\Ü?p½±«–9zKHî€sFnÓ{I¾rô $]åÍI1p6ơr¨yöR[Ïë_ÑØóạ́_J9Ú¹‘&GáW:àª-uäIµ́{‚èné^Bº, ç< I“(1´P§BÂ#”ËñlR7•(ökàW©8|ø%mt®RXÇo\¯· ˜Ÿ¤'Ë'Œ¡5ŸæMmME±-§c ®o(7À`¶)Ñ+D!#ÊKË"3)zˆô´§6X¹ĐX<™›‹L-₫̀›×çxRfÙ0ZÜëđPć• ó»˜’ñmrÈ›áAo¬¬>₫’i%á©#fåajÈgÔËæÎLö d^,#ôïÀóDH¢Û^Ư…HCíŒÜ9ªỏl뙂̣¶Jt‡Æ.³¼Đ£^́`xữ¶2X„€z¡u'wî,—:Am+·.Ï~›ªa  1äk$åøºLó¤®Ez t®„ªƒü ´V'ă w“Ơɪ ¼hN”O₫SÅéÙđhqf02yñg¿"ÏG ˲ăq̃¦%•HJ[D˜²¤RAă¡ K¤Â¬đœït3¡sN¹”\n/n K»I½ØŸÁë_ß"?‡âĂ¥øó ñ;Ök$ °2Ná]N1›+ëAÊÇT. ‡g«ÑéA‰;¨²™ «JG5ö¬ Fơ¡Tø‰«Ô“Ÿ\ƠA±-3gû$3äđ5 yKT¾J0á¶´Üí!qbưZ F̃4zc-îƯ˜²_C_ “RâÆ¹$%ê^Kq\œÀë0f|=W ¶Ñ˜c¡E`Iơ¡'¦ú`6$ú](ÿá7\/lºbT$àv[mB®&®0ŒDªpÀƠXưà]̣ h ~€À¾›j9G¤¾péx©gŸæ©ƠBD¤Œ,kÈAăW÷oêZ½†ëÈfo“¼n7 Ư{æ„B…¦ö"ÑL¶†kƯpơûĂï>%»ư4]úN8lûC€EĂë†ébO»=ütØbơ×"/‹ÅÙ«E4‹•cÿ½Z\ÈúvêT¼@Y^MO@¦ưàv/0 ĐrQ× KnjÖ¼._Î8X­Hï*h¦fÆ}á$Ç1“ḍ±9NĐ—FĂ×2áÛª8f¦2:Ko(Î<é5xªm’u—=&̉¥ôû¶Ô?ub1=đŸ½¯†́½N„kGe#6eÍ(z̃pr…“ẒÍR₫ôÁ/ƒœ<öƯđ«̣xÜÄP^9˜*Ûÿ[´›ª<́Ÿẹ́Úzoys¨°SŒ")._5 ‚‰êËC£ßơw]A 9L‡w,™̉ç¥1 @qơhˆ¢\Ê¢5'(ÇbËuÄ£U©¸̉LIètF°<“_œ”¾U3 Ơ•Ó×ÉDNơ&ư!LÀrhC7 6i¿­”ôG]0BÍdß§Ës₫4œôB {H*³‘Ư#óă(º½ÛÄLḳ;¬èT©GâàTt‰±QÍ”oºœÂó¬~ˆ8~XÛ]ˆÇ€NÛV'/5—vVƯjÔƠ§&ÿƒëg endstream endobj 293 0 obj << /Type /ObjStm /N 100 /First 840 /Length 1205 /Filter /FlateDecode >> stream xÚµWÙnÛV}çẀ£ó`̣îKH,È0à†—¢­k´tmQ(•¢jçï{†JÇ¢"F_tÙÎJ# RÑPħ#-±x2K$/H A!bQ$¥ÂªIjà„%iù̃‘ô1Ó"ü~û#ƒç°Q^b5]-m÷LKOZó9¶´d€ÑJ’Q.ÓJ“a{eÈ8ØÀ§ À*O–óP‘¬Æ½d-îµ"àWkr‚WK¶¹:+2­98:’ăzŒ$Ï~Œ"¯`o y ;cÉ{ø>̣} €œ´ Àh`‚3çj°`N¯u™ë)ZÆEÏ ñÜ?!p Ppæ¨JÈP(%rtÍàˆ "j0'%§í™~ÎÛ’G’Rqæˆ"§îa®M„9‘èL¦w ½Ơæ\ƒÊÎ4º#¨áRp|jhY U -ב»nù̀­CßÁtÀ70w07`_:PaX2Ị̂ ‚z4×°hƠĂü@ØOhèƒo§¡½…†^èÏhP½ÊÚ \¬¶đ¥€AöxSz‘;”ú¾m›êzƠ~“ê“ó® “ùâ à;qÓ4ƒ4†À@ƯpX/æ¸å;É> stream xÚƠYmo›H₫_î– eayë·4mz­ªVW»•N¹èD̀&FÅNÚ₫ú›Ù¼µMäTêɼ^fgggyf˃±bß“ÀM‚ØZ®O<>ÛÜXbđéÍ ‘r:äËÅÉóó0´ˆç¦^J¬Åµ®j‘[öÙ*»íX3s‚ °ƒ3‡̉Đ>Ÿ%ỖTË®¨+|BíÓ5¬Z²™ăÇa”Útv¹xẉzÑïú¡̉`¢¡JúµƠ­MC—Œ\/¤Ââ<ăæp²T—½p¢ÈCÓ»nÖY'e¡ŒOl8¤¾]WpâDZ]_ËA·S‰ƯvMQ͈}ÓJ=ÑPúø‡}ö₫t>{f\¸kͳÛ„$ص$¢/ß.~ơ&^/Î^ÓÇl#}Ú˜Öß@Ü! »€̃qö­‰"7ÈĨ$H:—•ĂĂw–ç̉غç’k+pư8€QiÍO₫2e‰=7Œ)¨̣a.)ñèđ9 u©°&)àUhY ”#’6ËnÓ03hQ¤¨®k³+ƒ(¶WY+4ey^`Jf%₫0(+sù4g·́ÄfU^T7b§/|߯@»Ë21wÓÔ›[)v-¾ïf!¥ øSyÀ2Æ­,ÚQ˜ŒèHÑiqJŒ¨Q~$=>‹¿7V½÷y=̉í́süètyϪpƒ‘÷db÷p(…¬f’†•I&M±èsUë¢ëY}ܤ½£ ;h Ÿ_)`TµJB¿+ÔÈíIdeË‚XäË,¥{ Rá¸—× U‡r0€2Ay:Cơ.8Êä·ẶÓÙ¦g&áÀ™I$,„é¬,Å ×ÙGô#¨a¡Ö(ÂŒŒH¢|Ë$›6Cw€>üW¢Bkï»™±Ø8½©Î?Fïawiª¨Èœ…ƒöùè*ëà‹A“mư~ë©,Œx™ÆniY7 k…ÊZƯđ0|fÙe[ÏK¸‚ÎĐ™\¡×2yrŒ¬À„˯±G‚û´5*^ÙHíA:/ÊRp\¹Ù €Èx‰ưup³cä(w^"³ªÄ~WJr“á»_ª'^‚È~«d`™3i•x ĂwÅ/̃Qºp¨Tj×¢}˜±2a•‡×Eßl}ÛiˆLŸVˆ‹K„É„́–-xˆ0ëØ{v‡û²rd<Ή©Œ…ó«hà8®'¸[ˆ\ĐI¡’‰œ(ñgd –büˆ÷üú ŸxBOˆÅÇËz} 9‡„*ºOœ̀ª\,H· ÖÙ÷b*7ë]néz*÷ÍW|[:È’ª̃¶#Ÿĵºº¾–̣U#íµdđ’Q ´SưIWKµpÔzLGdSă›û¢U}ö3GßPÎVl‰[‹X›ExÅÏAá%M `àƒ®6ßÎi´ó}!‚u|?8Jà?̣z„Ç·—Zø½ç«ÓnÖ̉>̃vá`Ọ́LÇ5ç¸å+q˜D5NbZ cWùî9Ä|̣‰ oC§3$Ä}ô>ºêÁ̃0Ư‹¡ËQcN% ~³k̉–”-lÓ¾ÖèËŒn›ªJˆaÍ@Ê34XÛ%Ö:Ô¤ơ OÑbüŸ.^¯DI󃿳µ']¿#(ÇeüSc„›Qwˆèîư/₫ôѼëáE–U#w|́_Ú©>²ïyÁC™¾û16—*¡Âxv?.ÇúGđÂ4ô{™éh¼‰ÆiEƠ% '%hóÙ¿/ÿ^¼æüç ̣F%‘—¢Øçr[u$̉ç~ü´Pnü¼®₫† endstream endobj 445 0 obj << /Length 2417 /Filter /FlateDecode >> stream xÚÍYƯoă6Ï_aÜKä»X+~éc}h·›vE—Mû’…,Ѷ[r%9Iÿû›áP²$Ó»Ù&bÎ ‡Ăß|˜Íøc³ˆÏ¢Xø±ˆfÙî"0³ơzFƒÛ.˜¥[áb@ùƯƯÅ›k¥f,đ“ a³»ƠƠ]>»÷̃m̉}«ëùBቷó…”Ê»Ç̉;”Y[T%®HïV¯t­ËLÏa’·é̉·ö¦÷Ư­Ÿ´¶²¶MơÖí~ˆc%úU~Ufä_Wư=£|¼k˜É‹foeÆ|–€²X0iÀgÁ¹‡öÆÁP>+7C%£‹™đºrî2ƒ¯Û½ œTûŒÄă5l@ ÷½D.+¦0pz½€ñ²Áp ˜iˆ¤æ³…´­Œƒ èă*B5~n«4×¹?_Ä1£Èld¦5ØÓ5‡₫“Äâ¬å  “êiQbp¼»pN;)À·¢̀‹L[|®l±L!~S<:ă üK×€*SÁfĂa‡ÿmºPÓ?ơVï¬É›>1/?¯ÆçnSı‘íLô·:Q`ú€4”+RưqSdÈgăÈ·w:-›á̉– .mº¤ä4ô8·ƯùZCó{c«Ê<ó¦ tMtÙ º§ë†º6ƒă"ÎlPLGcK¬?úº‰%¯âh&á«ÀTM÷¿³A˜/£Ù£¡ÜÍ„Ï!r³í́ÓÅ]… K¤riXq¨ ‚×ÅvûË<æÜ¤GŸ´Êq“}̉Í3p¡áa¢i:j äxH2¤áXÛ³Öz¿M3¬pzI)©ߤ7Æ~ Ä>\üè…ôS¦÷x}P Q† Jëà-e­ueFhŒ`©’đ΀~”ĂwÈ  đÄö‚ƒÍ%Ÿ ¸Aÿ¶<̣U”VŒ[Û¯R|ç¤ 1׫ô°µgd&E ­MRƒ×°….˜g[¶ơ‰m·¾’¦ç4sij¬?‘ø’frJû+r×Më—™ïBoˆrGcg!%jÜBÓ_eùáđ ÿíŒ&8BưÛƠÿ[ôr₫RĐtư ×‡ÍjỌ́ëĂ= ¾®ù§†Í?pëgôÿàY<¯Qü^·#ö—ºa Åù=ÏjU±ÎAÛC]N\” ́hp¦p—*ê ü=]°ăk @ă×m}Y‡úa[- fÊÉRÚŸN`áøÓ R™Ö‚A(³d¡Ægë¸7Ëÿp«ơÆ¹ă µÑË`Ÿ́ óû Kú!F’Úm*Ù'ôŸ³t»”ưA E Ó ¢>´á1 3ˆj¶bߥ{›‡ÙŸ3L|Ö³Ö„É®eƒsG,¥rؾATÁ‡ÚèϤ´7î~1ÄÏr ÖSM›™¹4?…`?ç4§•Pç±€CÍư¢ôª{`VœË>.èK—½ N©xü8̣ùY€tE‘7ư¨;áï(° +..FÑ+28“́‚&₫C«^vM¡¦X—S¿:-Y÷ùaÔ}₫Úe¢ÓÑ$mDX¼úÿ́F Ÿ endstream endobj 448 0 obj << /Length 2161 /Filter /FlateDecode >> stream xÚƠÛnä¶ơƯ_1p¢]ư}®ăLº´ H)V¾Yÿ³}œ·AV$hRª́¡m4ÄôL àUs9ÑC!’¶Â[3=J‚ư´ä*‹TéC':¥¯‡¾¦€ÍxèrM¼!)+ˆèƒ¹˜ücÀS6]ƒ°9}ö’ĐgŸ°`z Q¥¦­:‰ó3{ÆZÑÖú¸́WqQoËjOư₫Qư„£´­ (qç‘>1Ă忟‹¯çS#EÂơA!%(&"ß mÿ—ØnyèÍM\¹ƒ×p'‰ :·-}¤êë›1‚2͘Y·5öZ3Éä̃_Ï úncÚˆh¢ »dXƯ¦ư=Ê'f‘KˆQVdM}™*kÖ¼\BƠi ½îkßµ­t×TûúÏÆvư§µëơim+//“ÿ µî¿₫zưߪ²èŒ—×pR\ëd ĂóNïă×ר:àÿG¯¼gX^T»ˆ¡é E¨úä€[Đ-çzéé+”/WÉlđ!ez’´₫ɢưHƠmŒKimÅĂˆD2&ÛÍGû~S̀åǾ^`ü¬ñVi /Lm̉´Ơ™çVpÀ¹Ák*Éà¾Ç¦ée–B½ÀĂÀ˜‡¿{Î1X¦è˜U¯†ù<„‡ ˜‰kú(·ó¹ ÏÎ¥pw{:‡g$ùüă¤~Ú¤=ú4z¶W€Û{ Ơđ}‘{Ô z5.yàÀÇ_°· u6¿—‰q‰ë ‰FCÁºï/¬mó){Tà¬LˆK?dd“d;¶˜fg?ñƒ¯Ÿh¹†Vơ®ló”Ö¸UÚç₫§uéǜXEÂÉÆ7ư~ŸàƠ|‚…ÎOư@›Œñun>Bû1—‚ƒÈÀ´ ¶6;"½Ô«áÙíΈQüú)û÷B·v³€Î'ÂÙƒK‘}TÜîß4=ç“?”^.ÀíN[₫ZĂkó‚-C C4U×²ÏøG®·Í¦lm#–mÓfßL±{ƒPm+ DÍ,ôw·Ëfv·{¼ù̃} endstream endobj 451 0 obj << /Length 1357 /Filter /FlateDecode >> stream xÚÅX[oëD~ﯰxZKͲW_*ñ-9€@´—œ 9öº±ṕÔvZÁ¯gÖ»NÇi“¶€ª¶wv®ß̀~êø¡Ï?à8ྯ.Hû¶zp̀Ăí§ jå& 8éI~7»øz*¥C IHYÚW5Kœ9º^FëFUî„sø•;B¢©´)â&+ ½"Đ­JU¥X¹æK/D¾{?ûéâûÙÖ¶dKÁOt´“~ÅÛÀĂỒĂD ăñM¶RE ƠàôPT)óĂ«,7»`̣l•5ƯË,5ÿ›¥Ươ…P¡̣D‡ÖĂ¾ơy+đ[Ñ)0"r J”YK«¬®³âá>y ˜«º˜K:ïµ6ÈÅ„rL%5¡åªxh–¦­NÈüE­e¿o¶2 ̀Ö;¥̀¾(¯Ë«qWui‹8+̉̉j ˜CæÂcZ`Ï:Û Kî½3w"!Ïî„¢̉å =OrơärT&}‰R •z§•cv;?=nµaÚÓ—-ªÈ¥¨úË(º!G}eín‰½ư†BiMœ¤øA5×KíÛ¦øó:µsp“Ï¡‡R²7>±Y›ÏïË̀Qư=º{.G7h8ƒ;¹ZƠgo[WJ­ÖEÄáÖ{·ûƵFvñX—ê ‘~éXÑ»’öQöI5µÁA%€,Qi´Éó6vY€–úX0ëqd^ZŒƠªiç¡Y±§£n¦̉,åP`¨o8ÂcøØ¢ù˜¿_gvPç¬xüœ-~wCTU%uPà§­Ø ¯#IµÊaÇÉ5FnU³©aNŸtÆ@™¡•é@âg¨âÍÔ¼Ô™Ú>Đ=l3Ùt7dûǗñƒ́Ơó›ŸzºjcñƒÇ#{Ówÿe[@S˜zwmÑ!fƯÜ+Öëİ€"́¾¥iÆß×ÊÍ)³»—tüpåÊÜ~Yë ¤+:¼AÈ̃¾‘D3 øPY5§¢hâǸj%ï8T,d¾5Ă,Ơ{§}KH|´Œ‡îć»g¬j`ùK7Ï!¿‰IóÖ{î˜Di^QØÍ«²ơ'Qç16Âæă¼¬ÏàŸ­ø¿–nûuHë̉qn–%XYc¹Ơ–âeǾG€µ'₫x&™½!i'Ш£I!PFé ´ ú®ˆVg‘}€O¢̃ß×­kCº̃/v́…bÑ÷ßêC¿…₫1½Âˆø;‘ñJ¿È£†V†¡aRÚÜR_®ơ0—ÍA>̉2ÏK½đ ³¶euơUwü·J M endstream endobj 454 0 obj << /Length 1730 /Filter /FlateDecode >> stream xÚÅXYoÛF~÷¯ üD&Ëå.¯}H́8uµƠ'7(hre H•¤âôßwfgyˆ&ÉvR¶VäÎ́7÷̀2Ă3×Bn‡<0’ơ‘£V·-.ß1½Ï‚Ö`ç›åÑ/çg0ÇœˆËƠƠ25®ÍÓ»xÓÈjaqÎM₫ja á™ç‹P˜Û"i²²À7¼”+YÉ"‘ Ë Æ“Çb]›I^̃ܺĐih‡¿»cP ₫—ă9åh¿â?’™Ơ‚™÷í"k$éA~Ëê&+nŒ‰\Ö@ÍN¦Ît ‹q›ýQäE©`·íùSB°y)„’bSI’¡Àÿ ¡nJÂ;±º¯¾/Ôc2=*’/n²¦ơ:³3æĂ¦Àđ£ÈÂ~ưÅ1Rxù̃pl÷jçÚà¶ vwŒÜ¸:úcÊ™ kp dxœĐ”€×²y’ư·µVGs'IJ «cª^®ÀÊjXÏÚ̃â‚ư@6Iº/„ú“lNÏÎÅ ưÊliSPÿ~vîѳ7ÊÀäƠÓ·¾‹+ù$äIY$ÛªBG ÈQ¹YÉ8í±\Ñ·–L˜iÜÄ`nk̃ѱE€×V©œ†!3“Ó[è™q^cˆ„¾ÙE ₫ “á½ ¦íZVYB¾.<¤Úê÷•l¶•æuƒ{ÿ%xˆf40¬í[úËS\”¸¡Vb X0–ï8æ…fÖ!ÈcÈ̉V×ZÖĐsägBR`R®‘÷MVÈ”4yŸ5wô.¦/ WØrŸƠ  UVZĂ¡k_ô¦œ •-—Û^ä̉Yo¿ÅëM>é‹AØ>­]À$X̀ßè Î.+ôĐQsZ5hMí'y\×Ỵ7æÇpжíÙ‰ÿ dÿ~R[‘dé6Í,Çl¤âÓȺ±‹äøátŒ@đ`ư$9¤'ß'îWRƯíƠœ[v‡–̣ÅℌÖbÉËZNZÇÙµ äPøÄw¸uC[é™\ơæbväynÏÀÄ&‡û}g®¾jÑoƒ!7­Î):sP]vÓºö¯=?Èx·2פDÔ>…´ú@ßI”º2bM›Ê”z ăü¶Gđ¡º½êÎÓµ¦¾Ñ`­ë)̣kód†âk\Hq7Ía$Û"ÏÖ­ÓÚˆ́ËT"öq•1¯½\EÇïe›‡±̣TçtÈQF,·ºë¼GІOŸRúR̉²̀¥Œ,kkV/]4*ÚˆßiÉ]u ²¨U'd½ F¸cëqVh KpÖBp{¡Ùµ¾L—©*‹o £ûîù( PøfïAÏÇ1‘eo¡Ósm—¦©²›m#ëE×ĂÎÁcæĐSÇĐ\³ïhâ"ơY:ÙTpreh…ue´Öj•i8B`ÜæDfרŒÜéBc(J:Xጡ\}¦QÉCʺ́—à&$„Lƒ·Øp“P£ %¢-¬*(ÿSp`ÚS= Å!qéît£ÖŸÀ¡fẺ›ú®Üæ)‘P ê·:…¶:ưøèóAøƠv†®hă6(ßÙæM†qí́2áA#¥¨¦̃¿c¡TíO¥êóE$LÊyjT Wƒ£´5ÿÎÛÎûÇdÁ‡I°óÿ¾¶ưÿ0p|ĐÆíû́'—Ëο؃љ¡c®³Û»v: Ù W ÑÉ$=UÀàÎó’T˜¦&µfN9Çäöụ̀#Hùá,N§n„g¸péUù³)ç°?ô'?̉V9ưđúêêâôQÉ<™3r„¼ü8'&t˜6gá È)Dds¸–Ù‘Óo.–?EÊKK9曯 c`VzÆ\Û«Íw—̀ơ'Oès?½]ªôyè@<=‚ӵμBôè×xY7!©+ŸĂ^@R×slwts’ÂÈ3âÎåN`»l÷Ø}ÂhT\î!›‰ LU€wƠ¦̃#÷c¬HưÈö'&₫8Ï)™ßV%ÿMƯöAuÛ.vëĂ ϵ壀?i¢%5´W‡ÖëpÊZ}?ñ}“ơ-Û!†ëNø?Êö¸mƠfo[ë™»³‡öưÓpôÀdx©Áq"z̀^|p³§¡Ê,æ ´ÊrYÄkyĐ«.ª=’~̃P{ÓZ¦<´èj°¥ó¡­Æ$Œt<îÇ÷Ÿ|¿"5@ ‹´“áđ=¸ĐÂḄđ› endstream endobj 458 0 obj << /Length 1025 /Filter /FlateDecode >> stream xÚ½XQo›0~ï¯@{2̉`6†„TÚ˦êöĐEÚCZU,8)1!öïwÆ6b2hÓªªêÁƯùü}wŸ ñÆ5©̉±µÜ\ạ̀i¾¶äâîæ‚(; å—ùŧYX» ë—táüa‡åIÁṿĐ‘ciƒ₫A»̀¬Ë(ƒ"k·Ab—/ ú¥BđX.R …}‘tü&đZ^·¥Ú2>H©„wlßÁ¹Óev>j†î±‚Æl§ÔS'›œ ̉)£Q9y´aƒRÆ__Su1­–Ïÿ€¸´,jé”đđÖ `ªlj½ gYĂñg5ˆQÂ[Ñ„\¿F¨;'‰›CÂaÇ:^¾̉úB=ߣ"NøïªˆO Êâ|Ơu`¤ạ̊`BfxƆènÇA~Wr°3•o[ĂÊ7ÚĂ ´†˜Æ6%3\Ë¡ T—ü¸uÉ{JIMhß™̃6Ưe—æ_ Po§ĂÔRëåQưÜN{ ‘ƒdPÇ=/ïƯƠ:`‚”Ä·xOâæˆW\"UMüU?¿§C%Á7|‚ ˜ú©Bơ¦\̃§MßtĂúZÄ}CÅ/,êB ÿTWƯ¢J¶}/Hï‹Á¡₫X^4Ưäw¬º¯x9đ»ª…N]¡#uĂÔSá́ZHeƒUYăÊFßj‡öh—xÏJTux“gûmçæ›Ç°›|Ûc ƒ“> stream xÚÍXMÚ<¾ó+|t¤âÚ±J½t·Tíí»E{¡U•³ MB?₫ư;í@`a·¬*1±=™çñ3v¢đc(ôQqñÍ–Z¿-î‘iÜ~0;n‡­‘ï&ƒ×#)£$¦1C“yÛÔ$ES|ơ¬+UxCÎ9æo¼¡¼HàM>«²U®{¾UsU¨|¦¼¡̉ ÆŒz_'Ÿï'Íẩ—D ~¢§nô»‘'üuîú¡Rw9ñ‰ ¾7”sđ†áj–ÎI–ÿ¸Î–¯KíƠëQ"ÆH,¥¯P4ôa4[f©(ƒöÀ©v ¿ơêG®:–¿PIûŒOq>Ë̉^kæ°AŒL²—vèUÿ„,Ÿ-6©ú¶Năª|,˜.£˜ ,äƯˆnUµ)€:~̀qơ I ¦ÊËRú½Ù¼W_(¹Jí{ÛŸ˜̃±ª®®Gæ•·PHÊ₫8·̃Ämo¦ơ$£è†w< Ièû(% E¤Y7ưJQ Ÿ%"D¿ê‘KLƒ¨(Z Ïƒÿ́Nê¬Ä#FBx¥MIÆMàu=?ÂMe×;Î%ÎJ{›‹ú.C¼/C`ØĂQ`slVZÍa2°¢̀}ÑZÚtÜ«ÍÚ4“ÂcXÙö¢\™VQƒ¤ROÁđ[+ô¥jl•[¦k§ơ÷̀W•Y×: ñ,)mkKÍp#dDâP  đ‰ŒĂç#ĐÆjS<8˜ hb£ëÄ Ûă†< @®"€""a`é₫Y)# :¹oúík]í́`k¿«wC·›@°$,Ó=̃'zơÈÂo‹q³ëªß}±₫vP úåF/bø‹¢“'Kơ÷”Fgß0ª•£>×{È<¿9mÓƠ4;œă9gZ­‰Ú½^ P‹ưS¡‡lÂv'K£:q›â ÆM6¢0é‘׆ŸWûÎqUf;ó›è!Wº¡Ëƒ~íÊĂÅ@+ơjçî[y1·w 'œ̃¶/ ̃v'm±« UØ̀î@WÛ_¼3v\¿à~7÷q]U¸æâ£ĂƠ´÷¦x1÷Q4¹E®ÊΣÑÙN#Ă>Ä.Wÿùº¸WÅ~9„®ª4}-.*Ü-¹;®œ lỐÖФ8íî÷3)»j1€²åơ6m-Ónx’R| đ;óŒcbÄUàŸ ä,ù¾PײNf R Ùëưä¡>ÓÖ̉lîóäúđp¸ÿ‰n°­/ ô9óÂÜƠ¶Êm qŸ€[Nûư5 /¢ïwús…†é<>Ù üá.™¥Ë!|T¶Æ¶Ç=¸#YîJ¼“y§M'Å‹ˆÊ ¿«?ëófùqă¯íç€²Ă´}ÊÿÊà^Ú=È·¢Œw¯ỮƯ»_Lf7Æ̉¤‘¬Ùmºö̀Qßoÿníó endstream endobj 464 0 obj << /Length 1916 /Filter /FlateDecode >> stream xÚíYKoÜ6¾ûWíE DªHzè¥Nœ>S4Ùæâ³âz…h%W̉Úi~}gHê¹̉f×v‡À€¥%5Ă™á̀73$±<ø#VH­0bnÄBkµ=óÔhyeé—çOψùÎ̃—?/Ï~¸àÜ"{1±–ë>«eb]Úçq]Ërá0ÆlöăÂñ}n_,"ß̃å«:-rœñíçr-K™¯ä¡¡Ä6!‹×ËßÎ,ÛÅ9å.÷Ù‘’6_ï‹÷Å—„À“®Ç}-̣ûzA#û¿k%²%1Ṿ̉ñ©o¯ „öÛÁ—ÁđKDöw“L€ש§ çˆÍ,†s»Á¥Â‡[*˜£¨6EYâ5v¸È¬Í̉÷æ“«̣y–ÁUB»üϤÎ'_è•Gx!ÀlåæNtäÏ&Åîmö0¡ 8C±BÓmDyÊ2 : ®ơFê—UQ–²̉đUäI_éqå[|AĐ ´b¢̉ÏRÖ»2—‰₫¥‘Ăpơ*Y»W²>/̣ªz»]”M™2tciS.7 ÊCûZ”b+1h â¡4Œ́$Ư¦I5£!y îça¤ơDÎH£Fµhg€¡̀+H..ä`¾aÊN8Y­D&ʆ"5<:15ïj´˜Ü^ë´Đ*ÛóQ–BO*3½̣¸wù₫“yÓàw7 Î6è]j$5FO+›­pµq"jÁ²Xă_%/R<oæR—»táđ€Ú¹Ú]µe‰\¿\Ä>¬v¾Y0É÷úEëkÄăÔ„đó ?³ăH¤}²Àî÷<¥¹™ ûLÑ t›X® •1Á æ4ª.Jq%O¢Y¡J/̉²T "SÙ˜¾ï[7í…£oÿë©éJÖ5ü0ûŒŒ£Ï ²_LxÇd́˜¯»gªª 0Ö‚₫ºç74â8cϸfnªº¸̉Ÿâ1 >dr"Â*îơÍXº±EO~+,jƠ4©£½ÑÓz+ü~àóöZ!<6z4¿è1_Ó>ÅÓ«]±«Nß‚xÖØ_ 0ѧ¹Üd&qéBň¢ÆnQ8®â'!;„*\¹¨å!$0øX®³–́ëCÁÍn½ÎNCÁ¤¯Ñi4o2y#³{€çá,¶×PËT¦OÂ&Â¥ÚWđªs|é!gđ1äô9“‘?Ùr'»àÉG€3c9LA0]sA ̀†°I b³™" LØD-àƯ(‚ø¿m[M©ïrX~¹>¥ØT_¾ö¬&A×­[ơåÖ‚øƒ-ö¬̀zqö÷TçMiạ̈€)V$2ŒåÙÆ\Wfˆ3F5ÓsÈ+UºÁ€éÆUµ¦ĐCJó©§y±g)å­†u¢_â`+̃§ªñm•és¨Ëâa0âv"XùÀê"Ͳ«5$ù¢H”oÖ3bÏ̉ ÁÈv3Xôåf™£ƒ :Pµ!ÙƠe₫Qè̉å£Đ%:Œ.>@8́^4°n,÷̣î„p—€ƒ²ºa`äѦENc~ŵÈ*Ä3Óx†+ăá‹6˜º̉¿§T+éŒk¾-Óº!¥áª…Ă¢N}’B!Ø_–ØƯO$pc =¦Ówhç8†ĂÁÈbÎöm3-,7!ÊY×±̣ôl|ö¬đâ'Ëó_<ï»́‘ư›’“3Uêa(0&U2rßb.WoíÑ¡R§9+„wU¥sj¯‹r꘬náªß)” »–û£&רxj;ǘ/0́ùï/`₫ùón̉xegǰµ#kíÈX{o¤ÛƒÜ'ÁºÁé¬A·)¸Œ*^¦`ïḮŸêÑú¾ly~¶®w¾§ÜÓ«ïj_¿bGjæ²ë›)Dÿ̃ï˜̀X̣́;ï›í:Û½H%ï₫R7ÜûÄ&­Ă‹Iëđ¶.‹­~3mgïư’o~|Ï₫^Ï,œ¦3Ëp–ïϪäϬ‰Êx(ä‰V¤Ṽ#î{âÎ8\ƯlMæÑ‰¶TƠĐ̣Î5Ϙh”û₫³''Fûæ{sÈ›È÷Ă³u)̀Á»É|æ¶®Q¢Åy+ª¦‹QÇ1ú„m-vYƯ¬UèïESR`.]Ơú:´ëá?Ȳ¨ĐưR3npvƒù½¢ñ‚°Ù́ĐVP…À“ĐK=¡$€§̀$(¨ØVĂ¥éƯÅấvkUCÀ‘êÆÙtF#áÀhđf̀Ófû«÷¢đú¼g‚(n›ÍîêAl¯³öj«9‘ÓWˤéÿƯ¦¯ü‹Ùÿ endstream endobj 467 0 obj << /Length 1753 /Filter /FlateDecode >> stream xÚíY[oÛ6~ϯö$µ&’¢.ö²¤Ù²uí–x{I‹B±èX¨,¥’œ¬ûơ;‡¤dQ–œ¨i»eÄ2Eëw>̉ÄráXµ‚9! ¬åæÈ•£åµ¥Î8"z̃&Î;3¿_}{ʹE\'r#b-V]Q‹Äº´×ñM-ÊÙœ1f³ç³¹çqûtzö6_Öi‘ăÏ>+Q|)fs¸~d:{»øéèÅ¢UÎ)w¸Çhi3{ÏÜZ„9.ØÛ˜K}Çå2—9ÔáN0›sŸÚ9XĆz™¬œ4ÿđÇ,̣́¸D³Àiß"ĉ8§(ŵæ”9¡JÈ¥ăƯ9—voÄĐêKûÙÈ‚eưñfÚ’$Ư¤I5MK\×åđ·3Œ£ư„Áå.Ä£Eßí&ÿrÎ]×~sÇJ“I¶ƯÆe³¢§ µ-Ë ñ@̃!É„•³üĂ6-E¥P˜æ«¢ÜÄ ø˜_êB»ØÖú»Âä+QŸœª¡Ûçü¦;“¸pP;¦~4|ëT+YixWJV)êm™ĂZư½^7ỳâÚP¸éô3½€=+ë¸ññFzsH₫&jb`V71*ËXJWĂÅJ ̃D^µ‘ÜaÏP«ƒÄ"%¤¼g_ÀQ'±“] ”Ѩ}»Áÿ*]Tv¦ ŒÓ«m-ªC‘Ưa½§Øsy+ª .@ÀWÈ„sÀK ä½lô½ #€£éTzZ‹ë†5—E)±Kl•°"ỎüZ½ÛèÁ¼¼ªcµºj, ú†¦L¼:¶qVÏGÂtƯ©{$î¸<;y¦Ç®AG­Öjŕ¼)IàÈ€.цˆöx=cv‰÷è́'“nUe|=D—kĐz‘₫%ªé´x¼îZü4èñDÀ½Ió† [ø/1©kYxÊ)ùºu _*³ü†Ù2;@CzÔzëvƒ†(öl5.ÑLv¿Ö"×NMqEiÀË”èÙß f?D2(cl}Ăăkp^ǺK/j¤1½‰z¾êp°i„|­’ÑaÍ P<¯%n„.àGó€¨ù7å¡P¼“^o‹m5= ̀*"nâ/É©(U®ôÎÄ4oën)S‚Ö9v‡Æém3döTvŒ°ă‰xă×âÔ¸̃®VÙÄ₫R¬²¥÷­y—‰[‘MgÔ“®Ê§N¨Åæọ̈]ĂdréX»1Vi;ÖøLôPu¨tË­ØƠP̃ăq6kB ’áO€P‰F¤pĐ#‰6¶‚¾¤©PtµxˆüĐ )ơN}Ëóˆ,à\xùÖµx Æ8^`ƯÉ™ ëZ™uqô›>ëZ) î3)Sû¾½̉ˆËP K±vÍèøp@7¸²”"„ꪄ|^́EJbT‹NÔC´[°‰ÿL7ÈQĐEcäy¨=¹Ư´©”EÜœufÙ#ÏÅ»Ơˆ€ÑzÆ·q¶Óiư2̀̉_ñY˜ ïeÙ\Ơ:¼Ûº$Å@9ô;¶¶X‘vpâ L:èFîëàÄ>ÍáoŒ~<à€ô^½ˆ• ×4ŒS‡Fô1ơJ4’¢\®/¨Tà†‹•ÓH«{‡$$<S„‡Ë⃠¾R߇KX99ï÷ 8|W¦u³8.µTe6rJ cW-±wù*XàD̀7´ó׌sALB‹±È!yT˜]¤ ¢@½ë+µ}C¡‚@‰(¹RI5~“´BXîuĸ›JÖ©SrÛḾC8£4p‚Đ·Pqʈ‚ŒR'ôưûqƨÆb·¯°.¤Ø!Ú%‡h7^Ă³ôZ”ŒÑS€—k±|_©]b®ÆÄ“0QTñ„hS¡„ü.ËÑnWÆöo…úÍ Ó•it@­Ù“yà@ÛÓE«4‰ë¸í@ ¿D¤̣mJW8÷#*['„‹ ÂEaBñ[¿©ÔÛTâ'–%>cÛ†ŸpƠª_®Ơ4bœ´€Pƒ(BôÉÔØ\̣ư™ 5?W§Ù‘CâéË‹ă_œ7eóÀ³¥ƒ?sxök0£¼K«¦®Íse›ÚÇ_6¦åƠk0íøç‹ß™hÜÄ–à–³“C|¢ïÇ‹x¼ưjÙßîªư“Î{Ê¿su¹o&5MLöˆÇ®®âJèËîö½ÖAó¾ÀM.œÈơM®¾ˆÊ›“¾†g}×Ëd†«Éˆa{ˆ¹ÙÖÿưL[‰k¾₫ïL½Ô@:¾8}'»[̉SpîơËú+…å¿•e±ÍëÿáơO÷ÖD|₫ØßÛr₫ÚüÜ4n^ÿÆx́§9œü 1>Xª endstream endobj 470 0 obj << /Length 1520 /Filter /FlateDecode >> stream xÚíXYoÛF~÷¯ úD»'}pă:HÔú¢M­,©P«8î¯ḯAiI“2e»Mƒ,’»śß̀öüa/&^œĐ0¡±—¯Ï₫ZßyæáúƯ¶û&°qấüyzöăçFaŔM.«éÜ›ùo—ÙF:˜PJ}ú&˜0Æư« a₫®̀åª*Ơ ó¯ÅBÔ¢̀E0!1RÓàfúëÙ/Ó½pNxÈ©i³û u“(Ä1đ$Qˆ83*O—¨;Ïd¦´¢Ô%i•Ũ]¥₫jkxleU‹¹9äª4ßd#àKÀ¹ŸƠ«́¶C‚ô®HíH‹©_-Zœ™ÿAÈ·—Wæă'„Ù1₫e>ÀÚûˆ7ÁQÈPj¬µ•Y-4ƒÓ5vØkfö•sñƠ<0_dy@i°Z‹r»’Oˆ#4¹Í¶Æ ÔÏJû0‹lWÈFVeög•£ÈÁæsc¬?E]m'>q̀¼Ú•ÏĐQijc{TxĐ»µú q JÔfAk¿¢p@ÍvÛ^ÑG€_Eû̀Ë}½’R”æ%+ª̣β9 ̃\£Á«25OCX<–®̀pÄ ¸ñ5D¡°@b-̃ø6[o•ÖSû[ ƒ5́×¶á_Ø(Kˆ‡iˆReñˆe:3'~#†$ä!fÁ„GÄ/5™Ï! G¶¿)ø¼¶êEÆaÊ9±Ç ‰=G)\²¬V62dQ́’ÍÜ܈Ú+çư_œDG¡tè'pœ̉2vc0æöH×ú,Ê₫1·ö£=th€ÑK÷+¹́lÚëÛÅØôö0̀ ªøqŒóVÈaÖ'ÂÎlÂcä«« Å&₫@î^•RÜÛE§Ÿt†Ù=ÀHG¸cG×b'fd¢̣"=$äÉíN‚;¬(F 1gsˆq^mJüËáX“VáĂEC¡Ṇ̃ÿ¥á}>¬ÓƠN®×ªc…q™d–j³RyD"̉$Ti ¦¿¶a~Œ«ª'é; 9<÷fs?°& ¦ôE₫ÀF)ôU”FFô!‚ûº¢²ÓỲT%s3V­Z$ cJ^ă(„­tÜQ P+DŒÀôQ»a ´uæL Ú ̣?´Ú²»¢ºÍ ÛẸ̀K½î¶Ö,áî ›­JèMqÀ3…®B?ôëiEB¢C+³¨ê£½9?Ú›˜œ‹OÆS¨9̀cpEáäENe¤ƠœHñ)|[ÙĐ6'àb[> 믬ØVoÊ2ă/´ÿäy¿_O«·!yTB碸P5ô”ê©h¤ü;@sœKhç¥è̃¶:‰u¤p5Ëœ¢î%ó¯¯/…Ă!djß^\DkkÙè52ÿxÔŸÜÈf5~VVĂỰÅYƯ´¦̉Z‡“ÖíüéÜ휱L;™ÔHÈÿ)Đ?"}ó³ºYkwBvrËäc±íÉ‹Í7wp´Ï‚V6í üR]·¸j±å©·ZÈ]]Ú%-ê+U}WR[ë &M̉©/9 *†ÀJ‘ƒÇIWVv×1°‚¶HƒUĂ¹ç9~̣ÆÆâWcñ+ `ơ‘öiû¢N%W—Y,¶+[7¾)îE­çơ"›]Ó‹œØt<>­ÊÏ#³₫\ÿ*6§Ư’ ˜Üơî¿  Ăàæ¼JÉï»ËéâY«DĂEQ_06nĐî§Ă`«;¹ü¢H»^GÑ8܉‘ÄD̉ûË•,PÂtyd­3đ₫̣›Æ€Rù•ƪȀ¯X3xdQPG¤ư28Ú2¥‹Đ÷#"ĐëâxÁ[QDZ"öŸ3<´D¸+#1qw áyb§ –sO¥R̉k´×ÿ—§XÔtà/QZ`¯ endstream endobj 473 0 obj << /Length 1720 /Filter /FlateDecode >> stream xÚíZƯoÛ6Ï_!́IbV¤D}ØĂÖ6†¡ØZ¯/Y1È ¥T’tưîHÊú°èY‰Û ĂKä‘w<̃ưø;*ÔráZ!³ÂÈ#‘ZëƯ•+[«;K=¼ûéj¹.z’?.¯^ÜpnQ—ÄnL­å¦?Ơ2µníWÛ侕³đ<Ïö^: ßçöùö¾X7YY`o¿Q‰b-œ Ư ¶©ï|\₫|ơfyPÎ'Ü÷δ´•>27bơˆ ö¶æ²€¸ÜWæz„‘€΂̀.Àj7ëtC²âÓḈ¦y›́öâ&-JÌ9Ă™\kÁ˜Øí{F¸®ư‡ËƯ)µ i¥“́ë韓j戤iưn̉84ŒêÉ@}BCđ?8›r哟D£â Ù µí̉K²©Ü¨ßDu¼Í«×7º©iªlµoA=èh?̉¶Üf5È®½é"* v%}Uè.¥´Bè— ».Ú©QíY³I¼÷…ĐE‹́ÖMCgÜN«ǘđÀ†ƯHV¹0O RÜîíÙxæ8¶³âàt7U®Ñnöz̃ôa¿¨oÔ²½p*²'Ư© ›§óû./WI>ÚµÚ¬ëŸV2{)˜jΠCdëEé乃µ•EƯ$̉ưM—'Û}ó¿›^•¶yÎ y¢»Â~ú&ß(×¼Ú̉$¯Ë—ÓKD4́¡€\‚D=ÿ­mR1Ÿ0ö!+<‚¬û}£!k*×Çp%cZù !Ơ4 Mä  ¥³èµÀ”)Dư$€bqĐ(|K»yñU&+‹y‡°}ä¹0ö÷¼2NÎ$äôf΀-%Ó¡¶)7½QGOrz₫Ö/ø| j¤ég@Mo#–-œ)ẹ̈ưèè8œ*}$‡ö‡,χøa¤.b₫¿G‚_? ư`%ưÎ@¾¨|Ṇ̃‘„¤˜ ~zXÓ<+Ê•yúçl¤+ÄÉAsĐîtB}:£P$5G6,¡%œù! £Ạ̀½0/@>~ûѵR脼‚¸±¤ä΂m«\+·̃_ư¦kŒ1&§r]zD¸Ç™Å#üA½@¼•2æ¨'A°ç+!rt-Gó¬ñ ÀN?́û±§©ËIȸå3—„0â ¦nL€ʩxKăO{Z²ñ¾§ÑÆCÔ¨¾b ˜Â®¦•9"‘×đrZj±Ư6!i<¤²TJ¹v(¡éS¥ôË‹[DËà•o’™âƒ M% [§Î›LÊVƒ«SµÆ£̉IsÑÅ›B—®8ûoÊ!½Ơ¢^è3'̣TÙ7;‘§*BŸÂå'vØsÊR2.Œ"+„­Ă~9Ø¿åPå ¶´å ´¯+Bơy ÑĦ¥X e|¸È `3ø‡‰/HÇ×eSÓ1ÄHO-;Iê©ÄnIiwúo˜L_Ÿ endstream endobj 477 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚ¥TËnÛ0¼û+x$bøÔ#@/Më=h¢Ô Pe* K­E§¿ß%)"´ D/—³Ă™]rÄàÇQ&P–KË 5ÇóÑÓ3 ‹‡O;>ç%˜D™ïËƯÍ^kÄ-XÁQÙÆPåUøî¥₫i͉$RJ,oI¢”Æ{’+|ÛƒÛQøÁ´æd†ÆDd,-0×ä©ü¼ûX^k¡©ṾJ¦Köº¹@\R|º"¥L«@WRAs’èT௶ë;Û™ÉĐÓQå!sÖÛæĐ̉gcïÆa²5áx ¢îôÍ>Íç´ĐZ¸ªL̉”óöZ÷g̣tçUîøñŸÁ¬+ öÓl ¾ÂC}ÜÄp†Ï;+߸¢<¹@®g^ÆOĂ¼³/&XơJt=cÛ®Ăß{ ÷aÖMàID2„HƯ÷æ0×/âú•ßx¯ØU˜Îá,ƒ\"đ}43§ºŸÆÛMß~o”$"ÇöjOs™u“$‹8`ZÁăW4€Çư[ˆÿëïZá*k7œ­ƒ}7ÙØR'c¶H&r1*KQ©R±+§y!µdPª$…ÄÆÊ4n—7`Ct§N Åa7ëƠÈ<\îøu|.Mµ{- ªs鯾zbè›0Äè·O="EÏaƠ£ÇƯ—­Ç+F’X.äßr)I¡×smá¢ßW'₫9rđ2Êøe„¹Ă÷0®ÜúQO]3g=!¸7Ϫ\èúuќں1‹p‰gzQ endstream endobj 481 0 obj << /Length 3146 /Filter /FlateDecode >> stream xÚ]Û¸ñ=¿Âo§Ö¨o_Ÿrí%è!hƒË^Å]´m±%—”v³@|ç‹”́UÚC€Ơ’ĂùqÔ&jS¥›ªÎâ:«6íùMB³ö°aàço”àmq»ÀüááÍÛ÷E±QI¼Kvjó°ß*Ë,ç=t›ß"Ũưëá§7?>„“´ˆ‹<ûƒ×źWw×éFUqªïÆg¤eœà¯}w¹Üm3é¾3_ªèƯƯ¶(³èĂß~áñƯkÛœxđiz<™–á¦Ơ½ÓH÷íU¹‹wu¾ÙU@]ơ»:‹´ufèa–EÙ=Ó~óè§©×2“$»Ùª\Å Reœ%)Ÿôçár—ÖÑ‹5‡##áyœÂó’8KwŒ×2ie¾$m›Å °iö{¢µGü6ÓBô½¿«óÈjÍ£ÏĂ~ÄËŸñOc…̣÷øÈaê»f„wÊÿÚ·ñ­t³<«d·)ë(IIºqk1L&±JÌ×3KyûưÛŬkạ̊ ·×Đƒăxù₫íÛ½Ûǃ=¼½%-Oë¸TƠißV<ưkH’¸̃”E{)₫ø„œÓö?C/l5yjI«g3ºă¹qào‹̣¯¢5½,wÆÖy jÚé¬{R¸{̃ wÉÁ8{lúƒé™#R1\=Cñ;ScÁÅ#’]Ä,À‘g èƠđơ¯NDU²¤ÆWWáƠ¸p:ñ‚6FÇKd̀ 2†;ls₫?ưäDwM₫*2RøZ}nLïÖ³g‡_ä+:…³¤|0u˜Ñ109 S$Uô+Æ4¥¬Ø‰(œ£E¸àóê¯# œ09Y G±TR…JơNE¦]Q¸ å¼Løy©Ä†p yJßI–nđ'xZ¯¹\Nä]iprï™éÅ(èL6@\÷*̀ VŸtăPĂhï‰w Ä&pq 2}EzÍ4BçÑ?™•â²›=4̉ư²tÚs ™m—Bk•»Ÿ‘ôUWơë"ØxͰèVáHE ¾X•̀fU‰¢Ö ŸÑ€³úê ̉Ümơ^[KQç‰Ù*¸ÚYq́Áé‹™£«ØÑßI¬pDPÄ7°ÂʳÏ-RqŒ,#Œˆ'đ%ƒ£‡âˆ ÖÍÈøI¬Õ—ë5.o±<~éq́ă:ÂJd£\kW¯má÷¤HÄï”̃ÛZö;¥˜8@¹­*2{ ¯ÀÁ³qG8H¡~(%o¬*`YƯjóÜQ äM¶¸eêdè/f]à G!@^'„Ê>XĐ(cQ"€éÎûÁOñu,=pí½M½ê ë‚É­sñN€TZÊ·&]³» oÏ›zừâiqÛÂĐv•º¾‘ÍWä~é%¡¢óü̉Ê#Åä9ŸăÜOû̉À₫p“vȶr€~Hu‹T€ZÄ5t]¾!ºËÙ`µGFfOÁ°ÉÅÀ¬æˆ$æ=¤cœ½¥p ³â@Na`e3<đ/º¢‡—¡³q_̀í̃fµBăµôI¶©Wµ8C\½Ắ ¼Ñ@₫*Ûe ­́k ǃZmdž•9à8ᇈnÍÉŒœ§Ăix.E®®S}‡Ä¾&°öœ£U·ZzW*ÄÉ) æë`̣,fiö!P|!¥đ„W·„£rI oc½É²™–9ÊÄ@’üjTá\)­ ”₫Úœ/'¢¿º«lAwuSU‹ú§’ú¾nbÇ£†?bröóQs¼Æ%˜?Cæö í`ÊAÛå„+ªÎ8˜Ü¸â‡/£ä ¤ˆQpú^ïÿià}Píy”µ9 °6 ç(ÔB+ |1bÛ̉Ü9G€ơ3.!¥< A®â,rq8Ññ‚‰̃ư· ¹€A9M¯ă@äÄLü’—B€œ}ü<œñ¡‚Đ|¨Àx^TÑ;ô’¸xƒÀk:Ƚ§Ä5gQ"ˆwyÑYä_^ wƯÎŒ˜̉̉C¬(ó_4¿₫4øZßỰS̉Ü…ô%ÍàÓG–Ắ‘ç¬Âª,= ŒŸÍx”óB.êåF}qhÓàL0PÈy T\Ăí«Î“WÖ•‚Kđ|-Ÿ›«QXÇûR¾‡ô£2®‘Âĵ*úˆ % “  Ó<‘_µí¤\÷ç‹®ă>;đ×?-à^Ễe¢(@ó[ĐÓ¹¯¸ÈÿăÂTÍù½f¸“ Èê@ơƯw¼ÂñÎæeZ/EQªDI`…u€ KÉ= ô×ˉª<U^Ɉme#ù5øöEb¾å¦ÓkIKï# Ê|öYfKéS̃~ˆ¥f¢ß÷ȵ‡T8~ǰhI¶x<*­ÈIt-ă§#`ơ¿'cµó„Q̃].BhY®åléÄqA½"\¦̣ ̀í-ßM™ æx~N;J€vä9²p;âxïPRˆyéŸÈÙœåŒgCU4@Ü/ ¼‘»›QÔ±ă1Ô>Đ9&GB.¥rCDæO®gH» l ÍÂZPå@£ƒVUùóp¦ÎOũi>q±vI¤Üw8s#IL¾>¯ăÉŸw5-$Đn‰\@ǽFê6à$÷¾ ™0%døµŒñJÆ„F•R%Y=NüB î6XäiBñƒYMM`÷>Ñ/0pnèYÓzl%º̀`Zä8făhJémƠÊ™.ñWQB-3ó Ÿÿ"};œ/’`_”fÈË+̀$À†ẪNJïÔKûË—Ư*\ạ̀:¹êÇѼ?ú–ƒ›ĂÀÁ"^ ĐœÚVn…Ö¶ç‘Cư)6¥Ơ†Æ#ÇDŒÜ“n'Vó‚+ª̉Wi%é^ĂK”́•TY±jL-—¾ÅÛ1±~2ƯƯcs"D›®ÀBF¨£ăüÁ–9ÍfX`Æh…ª÷đxÁ¤ÓkÅzTơËØ€ÑEV꺠€\;ÔS9w ª¹È—±'Ị̂+߯KÄ‹Üç¹øLø \:B2?̃à]Đ34dƯ @¹v¿Á(.ïêkăÓđ¡=¯ÍÉ·`ÂëÑ⨱†@x“ç dX÷_ßÎTcr,)ä7¹jäP ¨E'GOÙapÄÎîúK8*’™Pg„—bôåç"(đÀ̃~9]øÚe¢ø™7#@"÷ 5‚̉ƒ’l—Ιßrïü 9ơF»¯³¤=»–£˜˜̀yP=N~« ­|y„ƒ’}T‚1ø \¤æ%ơrú ´“l -Kêû\'<{Á#B]]‚Á|aÊÉđ²§Ïâ®Lο(­E¹ù<̀’<÷°çM‘m´!d¼ĐÍy¹w·¼ÀyXHZ®¤í&·O‘¤HOà{àăö2Y)—` ÷†xnIeS÷'F^3²›µkU7}ZÓ ” •³ÊS6á$£â7f¯1˜§BêªtĂÙ2¸ôđö6ƒºâ(JïnySÆ? ¥‹<0è N·,FJÈæßJê@¿ÖXM( :Ù”œ94tơØXRUjr«¹[E"ËĐYJ¹ f—b40÷ápư#ĂPïL¤ŒÜȶE¢:•“4€ç$-¥`ÑÉn¡CHÿ«-؃­~ÀX´E¥\˜ó·ä(IïESùzơó0ØcgFñ:™|₫çd0Kˆÿ÷7¿$‡ÿ« §ä!·B«Áôªm<è-1üÜÿ_©£  endstream endobj 485 0 obj << /Length 3227 /Filter /FlateDecode >> stream xÚË’Û¸ñK8U#…o¹9¶×qjmo­'§8ˆ„$́đ><|}úÔĐ®-4€F£Ño*¸ñáÜdáMvˆö‡(»)êW>Aûó w~ÿ*u;X¸[¬üûĂ«¿₫’$7¿Ïư<¸y8-Q=”7ÿö^wƯƯ.ÓĐ^!L÷~ó̃ư₫ñ ”%̃ëOo¹óæó§·>|₫ôIºfB²Ïƒäfäû <0·KSß{«¿úAܘѴͰÇÍ7A²O¸<Ưg–m_ƒ(~¸˜aŇ[fW¯Oº—™±åöÛ]˜y¬ ˆ¸iO¼g¼èÓ£%Ócfú]à<”ó˜<_(;̀”½i»;xÓç̃œ/ز8 =U -÷j­»€3đ®7́*óˆÍk*…ƒ'Ù1^Ô(»®z `ná*=wMSʼ'¶Oˆ§í‡{Bo˜ „\Ưàníá…èBƒ®MÑ6åTŒmϼ©Ơđ8¬o¿zäez¿ơí¹Wơ-ܳ? ÀTC׿AqÍu¬“%›G³¿äÑÔ”xá,p¾̣µG°µ‹£̀{§́…˜ôêÚ_Å —*Ë^|¼½0̃ô™ÈnwœHDC·²»)çơ½¦Ç6Petƒ29Ú…µ²¬€C ̉™§y¯h¾™öL @ ³/ÑögƠ˜ÿ©…º\½ÈĂƯ–áûæDCƯî̉œoª¸yBrˆÇqrEJ•đçGABÏ”yÏ<:ơmͽ¶çªTƯ(˜«j9—{êe2gÅ“ăöøî¼¢í¤† ªîÆ3ơú¿“éMsF3¼"‹‘ík3  éóÀê .jlOs§V-’‹­]¤¿«b\Ÿxwˆ=à̓E‚3U£Ăâîøq+€iNÖfÑ¡g;À³¡yÔ¥³j±jbûØE³=Óª¯ é̀.ÔˆdGDtkÏ<*'ơrÀ6âÈÉΦ¾1-.²í-́Ár1t†áZƒ¾;y[có'®æ®ë+ó/X~ªI(9x™®o;uV#ú0ñ0œC Ü'Æ–A¥àăF‹äfà¾-Eñäq JëÖ0́‘?r85¨đØ "cHƒ]Đ—°A4™I\đÓ¶\P₫‰[f*.Z÷BVÙj”¢2̀Æ':µk†ª©¹5W¢h^´‹Ưđ¥Ö#qÈWµ6ßë' Ăœ2r>gk¦̉d/@ˆ[ÇÈ„aº“pJ/O>̀ƠñÍØÚ•Å?´ëđ%ZGh¶ª/zA—KÓgÿ4JBwă£ù˜jüƯ ‚·ÁªtÉ¥ ˜ă@“Êư6s¨âñ²îŸJá=[_ u,5O¸OY©­÷g¶ªŸ²Ăk‘«¤wkDœl´¯aë¥w¦/q#û(„H¦ª¤äÉ+² W‡æR¦Ï’¤ °b“ÏÑ«ơ[³™eQ  ŸÍÀb~Cªø6W¤Ú˜K<§ç­ 2g erl0đÓX|&?, •è0ÁÀå­Đ.²Ä±o+™¼´ƒ` oX¢nÿ£uu-uw{ÜÈ[J¦YËIä±ă >Boèµåă_Đ¥‘÷ÅêyÍÁ eÁk$Àù5«]7ơ"¨äƯRyÄW ¶«ä!Óh«®‰àS¯¥'q¤`™MÉ–Ư¥Â[XÅĂ^ọ́S €©¶Í]kíP84 ûØ]?aLv–î×ÙĂ¹@†˜)æÀ̃Đja°ÈWÈEưBµ̉~»†¡ĐŸ"Û¡D=›„ƒ3 !d 6÷ ÓlY«¢ÑÊ#¨\|”çí8®́5 ̀²‹I%%KUû^Ê ‘o3m]¬ ́—ÔÅ‚9Ñ[{s:lĂEɇ&RwI:„ås£à7‹/lly—ăD4©x(²µ©Ú”döƠ²ƠwkS`í••sa¢ä²0ÊÚ™ó¼Œ?́ă$è$+Ÿç÷8G;¬u9aæJ0¦¦ΖjT<‡eª„4†3óŸy5cÀ`×Ê"€đÄ…øMod‹̀†hW8aÅ Ú̀qÖMÊÅíÇñŧÔáÎX%íø?—ÿ*…z endstream endobj 489 0 obj << /Length 3156 /Filter /FlateDecode >> stream xÚÙ’ă¶ñ}¿b*/Ë©ÚQx“²Ÿ́M¼•ÔÆÙrÆv¥â<`(HB-…‡gçïÓJÜIJ@ƯèJîbø%wUzWƠٮΪ»¦{t<Ưqă§o™÷‚™ß?¾ùăEq—Ä»}¼Oî!ªÇĂƯ¿¢ï.—û‡´t0_î²,‹¾û†¿~üyôA÷zT-C?-O­i¸ưÑ4ºŸ4 HöU%ơư¿ÿúæÏî@EŹ<û?OogÿöÙ®:Ê]\äLÄăÎUô~G=!EU4Eư‰áÿ–±¡9eÔk}`h?̀Ü0ư}MIÔ.Đ:6Ơßg^æ³Ă3ŸỜX–I˜G°QŸ4"AlÔa65 Û2Í2 ~H²]R$LA£Úö…™z‡ù>̀g=2đ¢ÆyâæpäQDMtCÛÓ]3Ư0vâ!&}ç6-veR†l”7ËO wl<ÇA¢øóŒ¼ÆÏƯƯ?”e}¯&+Ÿîá̃ơØ™i2C?ñâƠZ+ơ-JsG£9q+dnºßG§/.eK ;€¹ 2ËÉ=‚Ơ( ^[óZËp₫|–)3At‹i† ™;ƒ‡̃î©y₫§qüƯ»-áQ=n˜§rh¸Ï߉…tzjeä‚—0 ‰¿›ƒ–uóYÄÚÓ¬f oPfdå₫NÏÀưt₫‘˜‚0Ïèè/°f&¡Æ•¿ÅI9vÓêø|ú:ç¬ÊA0–¾5¡`WŒ“½RÎÇÅKyVÀj±„¯¢ƒ}s‹Lx'¯̣¥ÁĂ2_–™Û¬|‚¼'EÀÚÔÙONlfm·jÛ%i !y’‘Äă7\5̉ÉøD2Àm3Dà8à¡oe‚9̣0SCDÀ;bÎÉf,[j¢á"+L9Îs0ä#§+{„D9¹x̀1;ï.1EQÛ0/q5K¥wx¬.“E$Ç{VíñC8úºĐ¡,¤̀¨›™}5tÉÊaƒø \£ø£EJÓÈβ‹PA»æÉ̀2‘ †ÄṢ̀•·³”¶¼=q›4¾î°›ưỆ3ëóP2r·“9hwgä 0bĐ-©÷}ÂÁ,üÂc¬›7̣÷r]g.…&G§/Üq$ÆŒÍ̉ÁÖ7́_9àÀ¯¡f&¨ÎÈ̀µ/7ØYëløá| 7x&r̉âÁN@ÎA9"è­ˆ¶÷Y½0‹he Y¿Ă·"¨Vt°“Ä–ûlR…‡ £ØIàỢè•L!“Lâ¿7°úö3æpoÛG}²÷ûSÀĐˆ̃%eß±Y0ï‰å₫¾Χ„a¼°•ƒüˆQlUp̃y±†ăGèMg2oØc§„ôJwvf‰ eGU ¼ĐWƒ÷ÉÈöư¿;ê¦Å$bÈĐ'Ó¨–QtZMË(ÓDHnÚÖÀ© ưœk¤`æ%dâÎqiѶ-±!ĂS‹r²>a²6ÓXTI"kü弿₫åÓß±•²öV«¸f¬ B{.œƯ±ưÙé4Æ)‰₫̣E, ǃPæØïKç*2ă8s‚œ¥U2.dO<„& í“ Ăv dÜóh?Đ\ —œPÑÚ£́·PX}f¨ÜÔ´iS~=s*PÁtV.wza¸ÂOù¡„që…(¨×8iLI@#èœ=†NË:†M)Ñà̀ç{á-Â)µƒ/x·'#[6_W4₫J¡™C+¡N«¸G»U6“ª }û2K₫À}â3 Ø[¤Z°PÚ†HH׈ƒœÇ̀%xæÆzl̀$Ác¦>„X¨]Z¾đV'â[́8`ådÉ`—jnÜ„ .5ƯÛ̀¤}hƒ™V™{îb±c¤fJk°9eôöb°®I SÖüºÈÙ‡Í2áÈ_ &“0ͰªVn Y¯†À5ô'mSL¿ ?™yµ ÷œy+H( åTŸ|ü»×"êaèbƃ¯æAḍ–{­u=ù: ÆèbpÁ©Îi^ó;AyđV(@\Ù‡-Ç”‹»ÜFñ/èơøw̉Ùê#ÆY®¼Jó,¡ÔU!»Mí¶.¨È6P|°™N‹<Ç ă¼.P2×zŸ©6¦%"‰ơGësä­æ¨ơ+éQñº½ÿÛu)Ư¿*1ö_|Ȥ^rñơ½$öüÈ’úLP<<2đIM´"ï#‰Ø¸÷è̀µ$öĂ7o®GX…¶›4kD^’p¾ ƒ̣.'X¿*Çï$ûÆÚĐ2«èN:n‘öÀ{+«Öoe•ÏÉCÖ‚9 aº sÙùÊUî‘ æøZtT u¡Mw¦}’./‘GWí˜l8z.•‚oW±Û'Ẉ¥D¾øÁ¥̀Ăˆ­¤’UÅ%+́5 ă/< éL/æˆG­©¤qïJÊÜêi8Y¯ÂH ÆËL|û̃*+Lƒ(˜2yëq"0 <_l@E6đ V»ÊÄÏkêŸBêÑ/2 ½ `‡œ5ܺü5ä€Ç€¬N\”‘²ÀÖ©€:¶h@]¹'µæ¦XóM”["n^ÓÀ̀bgU%B¯s Çó÷́F0ÑË)À«Ụ̈`ŸoàÀS Ÿnevd&+€Ă%xb́¤½è£|Wÿ–dùgúÈKgÙÚK‡* œÿƒ7¤qµ__u#WíM¸ƒ †"IsKM X¡§Ö´S² ƯÊÄ3ÏPÀ“!ÇçÜ^(´>®öd±DPôʯ&n°>w‡8̣Ö EÖàüÜ–‡ị̉2‹@²9ÿGß §DT£ƒ„7soÆYøfŒÄëœ̀̀¨Á`ÊÇ\°)ÎK/N¼ƒyæĂC»B*Q̣”ÿ6/b€ endstream endobj 493 0 obj << /Length 3197 /Filter /FlateDecode >> stream xÚƯZKä¶¾ï¯ø50Ưѳ%9'Lj ÆÂ°×‡ Î#±{èí–:¤äƯù÷®)ªG»Ùs° 4Y$‹¬ªUÅ̉d)üËêü¡nCSÔƯơMJT{~àÆÏß¿Éd̃&÷æ¯ßUƠC–Ú´Í̃bVïú‡'ßÜn»}̃$zèÍÇƯ¾(䛯ù÷û·¿b£L¾×ƒ¶êÂÔŸæ§‹é¸ư£éôà40ÈÚ:M²v÷Ÿwÿ|ówá@U^ª²øÂÓûÙÿC„,« E~<¤UÉR8ƯMfP’<©ùGơ½A"́*¿ ›†¸₫Ÿ̀X‘¢°E¾¶|ô—[αAë4Ú+·ÿ\”=“º¡}c€#₫rMDetV IÂñ2_µ ŸVĂn-¸đ5 ød 8Gă™]uoæ°£cb±†P‚́† §û[V”ê|Æ 3é¯8>™û@¶%F0ÊB³ÚÍ—É g¿âF°æüLwWB«|Q¡¬—ƯF¦\̀ƠÈ`8€ê:r+3Ô†e.́¯ p˜a_Ç}ÂVéă4b‘²ä/2 Ư©4Ÿ8PpH •x Đă¬Á 2˜~Fo$›‡«ƒƯ8BHØ—u›ü0t—™ÂφtÔ#]øâؾ¾đ8æwàGY¼ ̣ëíÉâ€yläB@£S³“)“¤Mœ4êÛDƯnè©ñ?øœFỲÆF ¯¼üb8 ‘ƠáØTëy”ùí8, x!€!‹·ă°ÿür'±ù» n¤c–+rŒÑ”™}U!#A§ê÷¨ư©¿ÙR»JrơH>~$X»)°@ư÷¢0öØÁåÚ;uR²)ü’£:̃»ô¶(T[ ÿCç6=ÇT>Ë6„4¹Ơ­´R.`‹q+8ϽƠªWOùv´p÷ăpOØƯÛ"(C kôSø'´&ÁÖ‚ÉÇçÑï8"x9ât°…Ư×´Iuh³;<¨M„ƒ¶{´bÔ*ù]“5Û–­Y³5¡k8V™•ä˜qæ(Ăú`Ă E[™¬xñí™h:r0íFkf̃¯I~K«Ô ¿`Ơœ ĐÜxơ ô‘6×q¢Lk‰À6ĂĂäœw„Vpˆj0¼=OöaÛ¤ll™é̃äØ₫-ÍÊZ¸ø­ÿô³%üláv­°.—ÍÚẠ:^•5>íæèÓN»ŒMm7¦r"P”KÉHVĂYoeè§ÿ;pÄIû&8̣:[ƒ#‡WD^gy@ÎVLú`Í©ÓF°|Á™?,Ï1yâôEwø½hE «5SÉCieL_÷:ªD¬‹²`ÖØPvóä2’J%~̃Á°œ“GÜaMb-ÄÆ†Ø+Dé<Me-—@Ầ ±qiJÎ>k—iwZ¥!̉8Nvüû:f1ë`×I˜\µ‘!êÅ@gC`Qî™%+t €}¨,ˆ<Ø ÏđU¦ËlZ—P ÓØ/trT»e²O”a|eû-oï -7‡¬ë%Á–0Ñ?q ¾Ä ̃U₫mô4 ¶A n¿Ä>˜æ/µ‡è-·„S<?5Zʶ8¼vQn~ Åḿñé ê‘÷ÙNY‹»Ç†ßÔA­Œ2ËÇæÔú₫&c›/Qù§×ΜÁê”.B*wđD‡…”ÉÈZtÄC̉=æ̣‰¢är7%¡© )]”m”`Gÿw6’PèA Hç–Ú?ư’BÚl;† n8Y]¦¢á¢µyâÔU†¢·Êvmßó«ñÁåE%˱%ÊÂQ®†rùû§ÙJˆ±£‚43[Ă´„J™¹/e"É¢N¬°”››Ơ80É6̃Uùb+sC”M¯œE^½”¤mè‚ëú”·+—Û„BÁ÷Ǹ2¬ơHÙđ€_À{K*°U\–­ê(v`^ÆÏĂKøÀ„¸öïßjû…+@°œŸÎUT§ÀÔ¤˜¥́Ë zĂxđ]oÏ}¼N;2—¤øÎ1ëW\å xú–«T&©ld{nbÚL,8zó(¦Ç)³c̉Ö…ĂEdH8X@€’¿¹À÷8₫¦Ñ¦÷¥:̣ÇÈøª$‰Âß­Œ–'=ÀÛ—V°?@E[\‹ô÷­)×¾ ‘Ç®c3Iư° ÷N¯yዘ˦ßM=BA–¶äø9úLXÂ÷ Œä%|ùà%RbăăÈ3äw2™ƯPQoÆg¤ûưÉ…á»ô˜/jFV“¢i2(˶gñàøqfÜ@$Ú\û/|5*₫¬gœOÆÂW<¨ÏrrZø7V!9X'~"¢ ¾v¡{ÿṇŸ]0‚œ^–:‘¸f₫tG~îêÛV'aR&++©W—Ơ}¨¬Ö¡ºPü%MW₫ §µƯOă>t„ŸUƒ»:­ăJ5Ú~«K€|ë@Ç \e¤³„Ï­«LM2~Cz<¦·Ø”g^º q ƒÎ€2¥&Ưöï@₫½Iå¸gqº¼üîâê‰ÖºÿäË9.0Ÿă?<¸ExàQ‡ª|•ÁKMIª²˜üßçPưg¾̃••ÿÊF Å®¨ÂJñ­â.₫ R{¤Dù!YºÅ·¾“¹Î×תU‰]ÊàWÄbc¢ñ™Ö²Ÿ$ä›Iđ½áÀƠ₫‚ZÛA—.Z›r‰ F_ÜDß7¡ư£y²Êúü¹LKÿqÆH×·CĂW®ü4ÊmÛtóƯØzÀ´é}Ñ-ư|œöđZ|hô.û_}û•>¤cï'+w* _1‰_ QÅE“ß póƠÏ»Y†Ô,¾zägIü¹f]µd“åo% 3A À°¬ ÿđ¶₫8e»́ïCûäó†£ÿ6Jo ́RîrÄ7¬½̣C ©̣%î(¾IíG L ñøu ₫ $đä † ö¬đG1½°˜­/Rq¯aEôÚÇ®I’đï₫€^Ă8 endstream endobj 497 0 obj << /Length 3307 /Filter /FlateDecode >> stream xÚZYoäÆ~ß_!ø‰V oÎ8Oë$6ØĂ–qZdSÓY9á±ÚͯOU}Ơ¬0¿yzó‡o³́. á1º{ª×[=Uwÿ ̃].÷ñ!°må>Ư?$I¼û¿ß½ÿ•?̉à;ÛÚ̃4€₫4=7®Ä÷®´í`iƒèX„Ãÿëé¯o₫̣4_(‹³Ç,M~çí=öÿ!á˜<æDG₫f)ˆ΅à^Z[Ñ­8èz₫‚¡kR®-» .ËŒ®k=üx0vüT¯ ´MăÚ—Çû‡,;ß+~eGÛŸ]K3¼́x²z°®¿ô°¶ÊnđŸˆæ‡(yŒ²D”];LgÙă¸]üö₫! ó ê¦ç± ”f°>‡“iÏ&à½%|"*@\‹ßÚ0T¦:=°«ußn"¡¿X¢<ĂàÛûC2ăv1ưèÊ©1ư†³¥>>é:¥uóụ̀ƒÏø6øYí)ăi°=ÑŸư¿EIÚvư™ˆư³èV:Yï g<¦" ƒ²1Ă€OfYœFJjáeg|ÓWƯ¢†´Åa4ă´?n™@cf‚¢öÛ£ç%¢«Æó“,jÆx=‘µø´œ±CßúÄ$ÉôD₫2dëtÎtOz-ŒO’œ§‡·ǿÏ~RGR ~F´0Q0†å=+L‹ƠáHƯRˆbĐZ‡HÓ, ̃ƯÎlO1;º¸2­0YÖIXNÀµÀx,æ@¿‹a‡±^l½Å¼₫dà Ó3É–üIŒN˜V6Û—Î4¢ÎGP5 cO€=0ó̉( Ú®}X®Ïå}Ê,kqa“³GÂWo/ä,@Bt- 4̉€ư§û-Œ̉R¯đYÉôøơ¼û0ˆ̉}ÅÚˆĐ#dÅólÔ߷ı¦ñ₫8‹ÉÏÖlè ø!‰ºđ ¾‡~~…‚̉̀O+ëälM;(¶Póƒ3‰Ro#Ú›óơJ[M½ơP3bï₫kv}\3Γàƒ8³Ï¼,. gN®Ăn!€̃₫gr½p &À Äa ¶0ºº"$d:¶œØjxà…"̣²ºÅG¦“< 4è-jƯ?¿N«v{E<øàơ¿p}Ixđ<'ØOWú ê¾;ËpsKêñỜ§A€?u=É®¤£œD,Á!ftS_r )͈~4_”đƒ~»ơ3́sµ›4*6¾ê-Ù´°Ô+W|âyuTåÔ˜ø»¥ÖƯ±'?h”j¸+V9Áêä<èƯËiö₫ùu*¤¦9P€Q3Î3‘ä¹r$ÇUxúŸ{&0èÊyĐœˆˆ‘ù¤œĐN»\ïB9¤»¸9Éb½ƒJ«×ßqbÏ0z÷Ÿk>B X|ûÂ’,“dư ₫ª`[9{pns¥‘~)¨Đ)¯hpÅ}•´)Xoz³dlE{G¬{Q¼¬̃÷ƒyđ‹8Á/Ôkóa[”4;̣æC5b¨z=Züc¬…DX LIÙËÅ´Îïø¬lÅ–µ ă€̀ÑOÜv|3é₫r‘[íBx´çEÂdfŒFʶÀIÍ/˜d¸ Ö:M×̉bí]hÆ­i5Kf(]£¯3Zfz;×̃‹X=̣Ù5nVªT54ÍçĐ½„®=Jø‹C“ôÀrILÙ"é`±ÜÔ›h:ûúÚCXGÅ7ñÀ~2çKĂ)uZdËúÅQ̣Hœ7Ÿså¼Ó…"a2³Ú~æí₫ö#kđ®£—0·‚e ä=ôËY«®«ûJ•²N¤PzV Rđ•øÍä÷1¿ăp²›‡Mœƒ<̉÷‘ó%ùŸo‹”_›(]?*Äö©7¢™>j³¾7z¼(•Ó:Ưiu1a“ÊŒVk‰ÚO-FV Z<'f±/>æ¸m[Àwr0ír%í¸ˆ–ʼđ5&}lœ/ç¼ä1ơ~j|¬°¡©üµƠT†HqZl‹Së´Đƒk@-ư6ó-¢ÀÔl²XÂ!w$È&JExífY¹Öb́ûR³EnätÇÇ^÷Ô„¾nBœ0'¢i!Q÷€¨›æ+Eă)©lđi0»ëg(Gt†\¤3+=AƠ?–ÓyU đG $´·e°Ñ£G ¿æVz>W’Lƒ˜qyn$;+4];øt­Đ+ˆ<­ :c‚̣mOSLŸO†Âg•ÅI¼H½9¦Z=rIÖ¥áÂgSŸîơ^:½º Àƒ/Û÷dSûZij/F\ÓR°·ĐÎ̃U·$™‹ª’́=…4‰yGVÖüm•¶à6jNí«ªr̀SßMâ8@I怵{K¹C²YF^×›úÙI>|°®Đç­ƒ~"JR SÍ:µ:ø̣t»Bœ†̀9…̀}₫äÍ¡'Άٳ£ öSi/#Üù®Ù4¥CÀ»GÎús×{H­rqo(ÙÄe#iÁç[²Ö_±P¥›ñ~kÎɱ²î5uXb_iÄi ©”û½Â(½ôæ Lßu³U| ¤‘Ô¥7ÍH`–m»éå¤'©n úªƯŒ4s©üÈc;ƯC¥ÀÊ«­a·=ź§qÉv Ÿ,àËj`Ö0ˆ,™RÛÆUúz_*.$¸™ojÄø_9¡§ă¹’Ä•Xxï[±`;ÉØ%l·ø̉î¿—p~«Jˆa¾4BĂ¥ ½:•4ÁQK£õY²Íđ‹Àƒ%|T£ÍAß3ÈẠ̈n`Đe×ÔèÙÏÓèW(¢]4fG(‹₫$Ü Ả§&Âôµè ÎlCỤ́rơçM3'ó‚'‰|xä°O^¨₫!/~ƒY₫Üáì~ëc£ÚñnL ¨(IÍ™·8̉„Ăç†Kh#¬…€³ÅËn.j\x5Ă9iƠm‘IÄRă…%#Ÿ€¹ÚkÂÆÑ ´̉hSơÅá`ŒÈ£öƯ…Èí6A/>I×ÊÄ2Đ®̃µù÷’p̣,ü’…”'ÎÖÊLÿÈ‘­Êw4e¶Æ¯ö›ÈWÎ^K²çØ¿Ê3’F3wäȪ̉:àçÆ‘0p‘À­ ,<§7ÂE«tM¤}ćúđœ/ ±¼Jæûæ.`SÉ´¼Ö~‘ư™ Λ|l}ˆÏÇ’ü‹/̉_Œêøy‡¯eiöxŒ®²J£ éŸƯ@/ÚÖç$×Í ™B§ACØăŒß8ß›ÙÇ:©RYÚóc6”xK»èƒÑ:ạ̊4Çú|ÂIj¥Q¦YU[mÓåEÎQ®éy ~ܰésúd=¤vä–7ÏÊ›ŸÅ]Î xyGíQơ,=uôÜ  …-b‹ ” ä—$yb́†"tƒ)êXÑ´—ßéP»ø#½Súµ/dû;ßüƒ3G|®(›}ơ•~Î*½àƯÆĐ̀¸!Ͻ÷7dxå†K£văÿ£$^YH<ûó*CÿZfüÿɺ™ÿø·ư_¡ÿp¾ï! endstream endobj 502 0 obj << /Length 2975 /Filter /FlateDecode >> stream xÚÙăÆñ}¿b' X)l̃Ê>M®uÇ0ŒÉCÍCƠÚi˜"å&5ăưûÔƠ%Nb,0́ª®¾ê®̉ª‡ ₫©‡&hÚbßÍCw₫Ö}}àÁOŸ?(¡Ûá.¡üăÓ‡ßÿµªT¶?dơđtJ·z:>ü{óx¹lwy»1ĂÑ₫ºƯE±yü?ÿđO”›Ïf0N÷ŒưñúÜÛÇßÛÎ “ Ô¡É6¹Ú₫çéï₫̣.TåƠ¾*‹ßx{Oư ²l¯räJ½Ïª’ßÑí·»ºÎ6?ºñÅ>ÛÙ_á™Úœíä̀Å™É [xç¬g;<5ø;¿A8ûỠMêYv̉³qV÷l€˜ÑÎürµ.œ—ĐÄÙ£ư’©̉‘7ªÚgÍáa§½ª_ưïeÜ÷`eSñÙM¹™®ν0ÖŸÏsÏ,6ÎÚư¼Í› œB0=¾Îèiôsox‹7ÜNăŸor”˜’nY'\âÉ“Ï<Í,«9»UàÜ”É[ị̂‰u¸„d;UïsßN5û¶l™ú(2û̃E`y[đQ8¸N28!«qp!Ư³3=À£+đ8™‰QÈ=üú|‹êIaGçѲ¯¾Î/I´y¼°@m<ïƠæ ̉¿'>><ƠË8yª‘§₫Ùt½ø­U¶™QE*à§Óïˆ5|!pbø:cÊÙé£!qÓLOÂ|c€ùDW¸æ„·6¼é ₫Ùë.@  ẵ^F^ÖĂùàßr«êdFE#öƒÄHú’U3¬‰î^!đ¯d¸Áü‹Íf́ ëß́üÂ#¸é†ÓƯ|ơéiº/³ß£ {ôV?Û̃›Lj±â}H™¨ûưYg/VüêÅá T]Ľ–ó~“́xwcÚ)½1"Nûo¼ÆÑ¬4kFÀk·!ԻĶQ%I5/ª±g­̀Ơ¾†¿9‰=yTP\¸²ăá‚—¸è €L–¥Í“úx´xo-ë@àçI¦œĐÀ“' F˹Ø|QEyººx¤ÙÙ̃ÿ;F¡ˆÙq³¼w¯g£Åw´ñS-b‡6!f•Û]Yd›¿ …x²Gđ4gôÄ_Öư+“:2´ÎȃL‚*˪ĐÏ<$ÀE»™7à[ÁOï…¯í j¦ÆízE¨i§­×¨¢•˜c'†¿¸±„œ8 ³̃¸‘ø916d*ˆÖưèw³‚‘–% ̀»ƒ§„Ülc«R9~\{Käî¡ç¬§†•çäŒóæSÑ=HŒ9‹&5útÙ‘Jw=‡À47L÷‹«xw¾A¸;#1pÈQư! ­<̀¾ ªÎ90ÀWÎÿ¦%†áPÄ# fT?^áTà`r²t„?+Q#4oèFŒ¼OpȉÎ́VŒËëḈÙÙ\I~¦|€ÁQ wBÁ÷)°ǧƒc8̃n‰ÚÀBBÉÖF.6´j@WˆÍÁe‹D²(nDÇ!›ÈîD·»c—’ơ±,«(.HBeYz6!…Esü¹")#%a!„îVtƯè<™(mMzƒ8đylq»œåâ"g®Ó̀Đ¥×!²VJS̉e`!…ÜxUÓhXÖL‰ Yæz-¥vâwâ¬,.–ÄzÖÓơßÂÙÈ·W8B|&7H*‰ï+¢”°ܨÊvó8H‚ZÔÀGñ™2¾-IÇ·x?ؤvB8Í‚u+Ñ®Mø XÙ›Cœđ`´Gq¤¥5&ô”wâ•®óQ ̀­_×̀YDI¹¥̣îÎ1”ÖEƒqÀj0Ôn%ị$ j•&vèúë‘ BJ‡ÀEÏI/@y‹˜â‚¼$'¸Q*z'wY91´BØà"áˆK•̉;uF*…µÏ̉ăHùƯÈ5/»嵌‚,x¼·g¾Qpe€Tz!ÔçcßóøƠ}è µ̉öi}£$GQdƯB™ˆ ˜€6Á­<Œ?˜"ÛîÚkYĐâöZ*dja{́EåE­*LÔ!µóî¨âJSK¹Ó!Ơ˜È5÷ä9đ u ¢‚@"Û°:Â3?–¨íyGöc•Üê•­á‹5‹‹éRof]…éœ2/9ÚĐ…¬¢jO<-Rs E/\–ߣ¢·>ó[‘*=ˆÆ†çâ2T:JlÇù £í߃»´í'Y9¾fÉè‹$¡hqº ©è.1¢PG†£‚æ̃Ú¯¼%•|“˜³>q́.7uÆđ1öô0”œf;Â:y n‚ø?FgRư‘«ĐDÅë4Ç%’Ö`]q*^-ơ».×XŒdAe`̀.²\ê2nµ&P^qâï¤p«bU‰X3’u_&†cî˜sÏ‘œ¸Á ‘‚^rHË’ClÚdE˜DFÊçK¤·ÓÍ̃x 7­æï³¥>]›¥Åy¶AÖ¥dlñôeµQ›LR@¹"_¼%oÍ7̀Ó§ÑƤïv}°d–(Έ˜àị̂P6ăè^÷EóQ&Ÿ†Fß{ «ÏNµbŦȘ25Œ"F™ª60‘²‚$Ûá„z5ƯdZi₫œr‡i¬FX‚&EQª$ "Ô{²heÈ xÄ@¿ ™§™VD@ƯÎ:l/:mGÜ Lt« ṼÅRpTđp“,®á ·xˆÂ!ôe`3µZ5TY&ëü₫˜ÂHÜ‘ew–€H©̀đ?s(‰—øŸè6ïy˜‰₫‰"hêîaE´ØèèqrdÀ(:ú=+…ܼñ ¸UÊ;s’ú]¯Sôq̉çĐwƯæ"p˜ºó] 8Ø|·f8HÍđØa:®_9₫@ÏƠÜ«÷eÏÉ[ÚẁL—}qù'RßPmä¾US¯uæ !D}i¤ë¸LÈéW(ÉfHÜUAE ~¡k@Ư­dÏyª¿˜F&®²HóÇû«ôGÿs ¤yº_ÍăĐA:¯ =«B­ Y¥4Œ²sÁ¤̉øê(K;!HI—ßtàüüO‹P¿½é媘2¾5ü&`Ÿañ%'^¡Ëƒ?Ø1$:nÜnwk ’íB?QaÎ (q°đu¾pJƠZ/ñy‰Po&’7; Ù¢%:°Øöt›Öù]ƒrRO´5p0ÍÿÉ _c÷Núûe†¤?"¿  ú„èđƒœLÆ4!+—mÑo4Êd¬qá('.êDD„˜@7FgÆ­1@z…XƠ¸'₫y¥PĐ íüï> ›\'T™Z†`ÎÛ‘èÄßèÇ ?_‘E,Çâ±Ux́~^zÂ~ø#ÜÓ<}̣­@Ộ·Ä`/¾!©}?̣¶‹PD¶|\I½¡Ư…jÓñ/¶¬K÷Ñ^/\]°Ûéæ?6P 9Åqô9û̃ÿ?‡ÿsưM endstream endobj 506 0 obj << /Length 3370 /Filter /FlateDecode >> stream xÚÛrë¶ñư|…Ç/¥g,—AQêÛi›d̉f2™Ô}è4}€%HB/ HÆÇùúî ¨C7ϘÀb±{‡»₫»ZƯƠ»̣iWÖw‡öCNP¾ăÆß|(oˆ›óÏÏ₫øuUƯùÓ>ßwϧ”ÔóñîßÙÇëơa£v™íîóæ,Ë́ăŸøûÍ÷ÿĆξ±ơ¦aèÓKăÜ₫Îl7X ṔëNcßq¹A×ù ư‰ÁíàȯƯ0zkZûÑÜƠÙGÆá Or§§Bßmú)ßoy¥¯̀1.0i·ÍF×Zn½!´Ÿ¸sè‰̀/øÏ¾1̀„¡yÄÛ#_i²ÿôƯư>/BÔ§{2ဦiˆr…X€_dî¡@Âuf‡dÉ*kÂ-!́äû–Î–Ă¹Ê§¢âcÑ’j_Â.ÜÙuxÙj¯djïÜY^dcÏX~ểö$>Gwză)¦;2ÎƠ÷Ws6£/fdŒWÜ£œ( ÓËæª²ÿÚĂ(¨}˜â"‚—¬Ë"û×Ă®D^§Ç(øÆ[¾â®ù^½PÂaE„—Æ2ôÔ{Ƴ4"!%\O{mœé‚÷‚¬ă1Ø?rójüèˆÍ€óêÆKÄñ÷˜ˆĐÇ¡wÙOE©ånƯ(ëh ×ïMW9àĂèźƯó̉ǹ†?ˆ:Î 8YïéDY}ß0•€HÈ”̃ŸMç~5H®D×x9<W³Yặ0Ù7K¡.@ Uf†Ái-üvIƒ‚i€Đ­“àüâ¼Y$̉ ₫Í’‰­ơ爟âÎnjØô·§ùÂHŒ*Uɦ¾¨#J‘ZÖ µ„± –ÜA<vH˜€¼½I„%׃®ª̀ÎæC±¥è½|IU˜\=ĐX½…xï[°e—{2Ï1đáC 2¶!Ø©!ñ¬ứyø–́VƠ†1ØefºBV`đÊ™"G₫€Œ.r¸8{„µ‡6 èxÀ1¿á¶†‘!sdBÀ¡Ÿ[FîMƯÑ ÛZ€ÁB¿¸~ ËoÎ̃\/xo…ήM1Œf̣ÂfyŘâ=ÂÙ³ö ĂÀ‚|!Á |AÀ_zŸØ(Ö„ÿ£Ÿ<™!¹.„p-a^"Đ;¡¤L†[¥÷đ&™ƒ$̣—8ˆƒ8›Ăˆ'àNk÷Ă”Ñ.îTñbÄô¹‘¿aà@€³SŒÔp‚úΈyeú)/Ễ?|c@ƒưߨj—µFÄZU{¶úum`¾e,A;Mp\gñÜG̣Ôi`t¼-ü²_ûÙ‚›Ôđ>*Ă»Yd₫m8\舶„fxÙœlë[¯p7Êe\ ´RßWg_ÓÙÉ~6à®,Éh‚ÀPd vØBcÁ₫̀!tN6Pô=¦ñ¨=™lÿà{¸é6T&gDSĂ"ëÅy—eŒăƯÈöa³¨…¤?ø¿ÙÄejÊb̀ä^ Üö÷<Â"GWŸàPgO@àK߈˜Ö́•iÊ4^ ²₫Ơ ‰‰…¿F™–—æl£h×IvÖ’Z,4ß¾Ô³^”İ$Ï~‚´­ăïëÅ…H‘„l9_v‚’½˜ÁÑÁ„gÆT‰?gHm‚6ÑÖK2˜³X\đ†×à÷WÄtåRXØ«{t¯÷ëÁ6úºjeSÎ̃ÑÆˆ–‡…P³†{́l%Í(E½ï£3¶d›VÂûá*̀›0öäÚï„H7GA˧!…¼Xñg“6àPhđÄÔ‡Ÿ'G1-özA\kN#Ϙ‘ˆZ’5`é¡8 »´[¦1[+ í¡o×\@k:(%…PÛë[7’GØl¢ ,‹ÄÈ#kÁöê,ÀÙX)±"E0ZÜq£#₫ƠÄ?P½ J*ÿƒë´_»ƒ#e¨•8“=X9r–¡áî±̉̃%'÷UÂI>sÆú®yă#dŒP†Å₫°_[9±²#4óß* $ÜCP6Ï‘ _'#‹A3m'#†uƯ.³x_,»oîQ¸IeŒ|̃\bi‰p¿"a1j‰:©eúU¯$M!̉±2Üe µ¨ Ëùi®/,†Î?£¸€µÔëB,“:¬ ̉úÿæ“¢Ô4Ê+_ă1îÇØOqN‹°®ï6ö3pr̀”[ĂƯ_Ư1ÀV"½ÍÉ[Ë”Ră†ư.âj!,SêwZ,2¾9g’·†À K ™kÅœ’"çơ"Ë/ài-ÔyÉÙ$Já ¢@#„(…£a?̣…Ø öCÔ•ăHñ ¥%-~qÜ Dsñ‹e£ÁDÖŒ¸QH‘Ï2Đ0,=ö1ঠx„8đ¥¶t4H(Usp^’ÛËzk5 •ƒ˜z#ƠÑT¥öâ—á›Ö‡;“bD_Ê£Ă$$9±Ú/­öƒ[ ¬ÄäBj¨Ïd½y>^u4(÷B/Óä̉»0Đ0~²÷•ă6iØ:ö̼K ^m­é†%bPlîÍBD:ù.å‰Âc‚r”§vf-À$ăÛÅ5¢8$Ñü;g’JÛÙ¸no ÿ|ȉW ù·´'ÙhưÅăî,¦2RK’’ˆùq@íë́SÇ÷Ú½m̃(ÎAR}·v®È¨&É—ë/'iÅ\Ú…jÔʇڔÚç‚äá !Oƒ=[ üø¢₫Ñ+ˆ¢]Ă%‘À ëWÛÁ¢Đ„*K}>×1A~éXû²7{Iê¼&?JäÑYÍû-05o‡8ím„,Ú§q¨ÂÀÆ÷Óùª#ƒ€S|A/3ä£V|T8!¸`¤³£˜³:T˜Á5YÏR!é`©¸n„B‘Ea-Ö]\â€E8yØ€>©Ôă;¥; ]'ÁtZÎÛFîŇ$‰&„†±à²vÉ5™)Ô‡-C™™º^­f"àXŒ^«m½ÿ®`Áx»ŒÄG©đ¥ó¿ɶIxRq’ÁØN ß¹ƒ¹A đ [~ DûV>.©–Áx5?L®WĐQ57µó7µàÎrraïB Ă–ôY,ă=Ï î³ @çbf³+ö‚¤|D)ç§Đ"Ú]h£°xsf2=z̉̀³—ơ¬QbĐ*<:ÜT räy\d¨ØxqâÊ( ÷˜o8‡²Ü”̣®¤̀ujnrÍ“Wü¢QÍ•Jl+.¶¼ÜÄâ8¯¨¨ơN©sÑ-l|ñÀäư)W´5ü0#ÙƠŸu±—ÓPB­á9;<…ü5<Û̃ ÄÅ’›d¨ắˆÎ,¥ƒà#ẰZ|îOb#osQÀKA›>dR̃œ©.̉8›bÆ—m¶;¾r<̣V!#¦9–đ¿t¥;yÚÑ qgå-±ÜíCËa ~°´B₫ewóâœR3•Fí¹J±K³ư° !ÛÎj́<çQ:)A†ˆQ‡I ÑZ­(e´üœ¯Ñ„£Xk~öƠjEKt±ø}‚9V‹̉‚VÄB…uê C,×á)µ}_?”äˆZUó  FæÉ%CÁƠẨ[}R©ªc/ÔŸùáœk…TÏß)5åœid½ôÉ®fµ¦ 7Ñ­æâÔ$ªÓAE)ÎÏ̉Ø£øMëNT_Ú¤€AñVÅ×̉̉d¶^&YĐŸS]¥QNï»´j}ók›•Ëc?gK æª0©wê«̉ZĐ¢&p+„åâ·s]AG°Đ¢Â¼ÔºÅ›₫ ëçA endstream endobj 510 0 obj << /Length 3232 /Filter /FlateDecode >> stream xÚZKsÛF¾ûW¨r T%)ÄÜ›’(¶dY%1ë¤6{APD…¸hIûë÷ëÇ $»\%N÷4zfº{ú5öÏføçŸ¥ÁY…WY˜»w3ƶÏg2x|ÿÎWºK^:”?.̃ưđKŸù³«ùlîŸ-Ö.«Åếß̃ơ~~d^Y¯ª×óË0 ½ëÈïûûßhyï˺ló­`ËmUÈø®*ʺ+ÁÀŸ§3/Ïÿ³øç»›…ƯPÄWq~ăî ơW0¯œ#¹Å‘Û‰|oŸ÷e}Ăôϼ­ÙMVü₫é‡Ñªê¶ÚUũ7í¹ï½}§4kưU«Fd£ŸÖ mz%©‹ía¥¼_ª~sN8û⻢!é¦Âáâ^™ íøó9QµùsyA2„<.ưđÊ}9à¾m6Ơ²’of¯Vʸ|-Û¢êjÖºT+ˆJ?)(˜–­º\)qmØÑ×áÜ«›ụ́˜Ÿ!UĂw×´. fôÔ3¯­7¬…nt9I¿ÉI‚~́å̀ÀO¼N-°¨₫œùQ‘o·oBñÜæ¢Nú̃J‡zU¶2́7|:°PC¼:¿ŒẦûă< ½æ S»œX(ÇƠ,Ä¡bÇÂo‚Ë…†’êL[êª/„kÚ¿b;ÁoD„…&4Ƨ‹đQN? l³íu#„íAă€BƠâ¬ÏåÎÚ/!Ù¬„L¿ÚTíj‹•F¤äN‡µ™,å£å¡«ê²ÓiRaqú¶Zúª~:J׬y©úƒsÁÂ"?°˜'̃Ë7±0°ËÿbQ”bÛ¼éáœDBÂàßRé9 眓Àẽ•:ĂÖë~U¾ö#¶l˜ĂvÚ k̀‹¾ú\YAfbÍô;6’ £E”°0`FL¶S¯¯R‰̉¹+í§F‹ºZh ¾S¶l&˜ôщᔯÏ]V`D[^æ{mYĐ*«ÏF9 If₫İø Z·ÍNˆßøj`väzæß#PŒœ́›àFđà¡ü9‹g9₫øS§bß… —º,È‹œè‘™½[M›fåD<9h“̃¯Bl†ĂÉ"cr6¡Ri—tà7¦€ưăÑnvùJư5_˦+'ŒR>%A@“™øÜ8b₫Kƒ{H7o+ö–×B‹-†e†ß‘̀«̀@ÚixR×+HÆ® ̀f·¯¶9±êĂgB_*Â>çM„‘ 2ÑHb\@:׉ÀC½e7EăAÄÔz†+A4f.HM\‡ Q_–ÏáĐEc‹l,râHâÿtWClZ)o¨C؇v;A&đ‡¼-ˆx#`0›¥Wv…ä 1KV¸oàÈƠĐu`Áe¾‰rÀܹ·¥Û PÊpis <ÜùÁÜÚ\¿-_)_QæđÜU½]̉º^·ßV¥ú  ]„Z¢‹X³đ™ÁN–³*×´g 9d-`«zƯVăxÇ&ˆ‚6ß1˜Û §$Dµ”lAærqT1<0́r¹UYDZB×LWd³á(́ó%FÛ©›xb ä_D}È{¯üHu8—oüYH‚[{߈¶Ÿm[j¬I—Bï#ªû^€_(ciËrỚ„³ËXă–ܾŸJ&§7`É4üŒƆĐpˆ$ ]x"Äà‹—zÙ”ª" –&¶à‹q²tÓbÏ’QåÏØœ£,Ö5ŒvÄ1ÑÔ×|B›¯ªl‚¹æÊ4pE0É)˜’ëVz.âˆú&Äœ¨ă—ó;"„¹:ålOO€¸ßoXY/̃Ä1œdÓX-A8«(̣Ú Úx’r¶DdG:uä 9D#‚ºF~é*Ó—½Âüp·~S ÚÑG‡mŸ×esè¶o£mµ5lêƠ³zđS‹·Ùờf×¾ăwü™F`g¬̃xj6$¤.蛥]øÂäïe­L;ưṚaåe]è¢&Ç`ÀÉèEă_6µ!¿GÆU] cî†ÿ„cdR|ưØ%bº|ÍáùJNff’ê§™³ƒT¯ƒ0aWŸrHÚu’à¤YI‡@–jIJh¶Û²0;\ÛÈ)Ül5?œ8#ü`ykÜY?‰+Ó¨ƯgvȯMJY¢NÚcY¥ƒåkưöR¨apG’ÅĂLSo•X"¦ºrâ8fOΗGd¥§¦hÍ;LSuú ç-©IÆ‚OƠ4 '¦ Ô`ºi6Ê-ÏR9ªÛrƯJΤÚoƠ–œd¥FŒ47!gYz2wxhYTaC½;ˆ%lüÆ»ELĐ,mHlG-¤k¡Md›okÓœF–¹M;¸¾Ă‚܇d AWˆú(Íf´ƠƠÛ—ĂƠ~±“ö”Ëûç­8¢Y Æ´0¨´ S±Æ–Éqâ¹²kË¡EËàØJ6›!/ ™^Fâô‡0ɬT2j I.ëÛAxĐy¾ø¥¼íÍE͆¢•kiáÆ…·¤Û™v₫2\̃+úÈ©@æ!Z%ưÑWC› º:µ¶ Â$I\úis̀7Í1 Ä€ql€ĐÖ0eï.Æw'‰7múëlE*?dlHâ+ʶw„‰ÊÔK¹POª¤mÏZäâJjS¹́—XW Ê÷ …„‘=áà­ØS2Á\wJ ṭÛDEă#ơˆ%Ô{¡÷/ ƠrÙ”“$ÔÆó|‹¿cs ¢TÓnsVF&̃·»RÛ¸Ñ¸ơzÂÙD„€=)­ÛĐ-CÜ´Øca¢._dà8N0́A#íÖÑ€M…ă˜+ÖT7M³mê!U;ű†è—JŸY;¦OÛ¿Ă¼I"o’¦Tù~ê}¢üjàèÉ}Ưª­´ßj—̃hÓw¢µùÄerÖ%®-ÆÊ^Ur‘l;@°%:Ûq5Î]˜Uk rL®Ü‘¨•;E›"^¯R7®ÔƠ„nrăa"<|Œ"@”̀ÙåĐijö× –®¸¡˜‹xTLY€HüŸ8qͨÉÛÆ¡‚‰i(‚T“ Á»é\x'&'%â|ªă„l“í̉‰…Ù’15Úd -Ö`ns¿Dmv>Ø,”䉡8< ÷Id'߀6“ä´±y¡u¿ đådyÆñl†̀½¿8®~ƯäC #Í^®6×̣»FzΙËhÊ¥7Án¦E FÅ9`v,¸¾·ÑtmÄ^Ơ2›}AêÇgö¥'°KCÚ@…HĂ“ƠcÉk?´5Ư,Ó˜èéè%À¡±®‘ç•Ê­áSÛœ$¹¨Ă|SEạ̈ăX…µÜôH†B)f35®•ƒ™¦Ö™̉xÈ^ĂY4®[·ÏE ¹9ÖU©UÁWƠGMŨ+rtpiS8:¡ö̉ êi£ôª ¬f&Z·ë£WëL{êLäy&×'–\_u¤xƠG"¯¿Â‡üFzúF´>ô‡V§EvîÓ Ư„¢°Ë)¹jö”ECHÄØI2cƯV9…´‰¸ƒ;œ+‹†}ß)Â2EƯăR9/X™¦úøÍ‹¢Ü£„*tI‹—WùS/7j´»ÜtN¶ạ̈*̃¶ú_yÚmâ%âmLđ¸#~bykÛ®6–5ªR åN=Í;¯6±ï¾©0kNSĂ8p¢4¨‡‡¦ØéÈ„evR©K‹}Û5VycÂJ å"Y 9(đׯ&næZ‘jăDîÍz´`5iEf½º ư*Bø b0n´FªUy§“f¬4%hGÿ!€¤bßÈezÓlW¥’r›/á^Ryé–Ö‚sz‰ä‚q‡ HÖxFîBr"A›0!fb.ăß4¹cÍÍÆ#ß6G†Ù“ñO”.󌜒¥Ô»Û‹_ooäÑóö‰~cï₫£ÀŸÎ}4ú®¯ïêâúñQ|*<<2úưăơ}?]|‘$̃Íï‹›û…’ß<~¸]LÚÁâægĐD‘÷#-¡bx¸»ưéúÇ»Áß]ó¦>]ÉôÍï´̣O7 ™₫ôëͽ̀|¤ƒ íí“~ü´ ×|ṂĐ…bïö^¿|Ô-Ñ£ù?“BƒŒ endstream endobj 515 0 obj << /Length 2811 /Filter /FlateDecode >> stream xÚµY[sê8~?¿"5O¦*qđ…Û™'N⌠ɦföÁ\klÊ6áäßoßd ñÙ­­­TE­V«ƠƯj}j ëª ÖUϾêơ³ïô®V»omâæïWLß,‘»Á›äƯâÛí}§seµÍA{`]-6uU‹ơƠÆp¿oƯØ}C¥ëøGëÆqcøÛ‡é ×xP©Ê£„¹óĂ[¯˜Ä+• Xƒ^Û°ƯÖ?ûæ-*ƒ:vḈ¸Î_´^KÿÙ?ºf»ă²₫ô j÷ŒÅ£ÇÄh6 ü‡Çwg“±×²Œ ä₫p:¾LÏ`’óVß5†A«ï ßÙyĐ‚ø̀đß³?ö.’Ñô¼¸±ÓêXlÖC0|©¾müi9îơf?ü…™/₫âq¶\0÷¥eY6¬ §‹WfÍîYn8Æo₫t|Í<Ï«‘₫û<đÂĐsüªÛ"zO|fwz¯Ñd9†¨Iÿ¬b:bâ?ù ̉ÅLäØkTÀ긃¦[b:G­ÓEă"̣äQ¸F Q̃ùưµ»mÜ&îưÅ’Å7l¬ó}-'C/ƒù,ôLHx`Wà5Ùøáo­· –„Ü.f̉¶n,`ç÷åÍ$I4‰¹ˆqOĂéHDqÓh>Ïuu‚p.àˆ/+áö7́Ôël)ö‡“ñ…/¨®§Ơi†NO‘{÷̃há?{×Ü•¾0\>yg-8*á‚YÍ{6œLø´O½́ ‡ư•Y!́'n₫³?’lfàÍioư€ûtĐFF³ @»fS“ÖÔ0-ë¶8dë¦ ¦Lâ]\Feœ¥¬#Û°I½Åp“¸Ä8|b"°¶¯Êü)ºÛ‡¤Æ¶gxÏ̀ZN'”`ȼߗc¹{eîp>̃M<æO†äè ¢KÈbØOÏ^ÈR°tC$_APeÓéǸÚ}‹Ï7²j …]­à;3D/&+yA.$ë'BF_g¬ÿi6n„'ÿOë`pÂĂÎÙôÙ{•>ñÀ=Ë;d EN@c²ïf(øŒh{Íw·ŸÂù5å1jvÇ•<í8µ3Ü1v†Oj/¼fna<ƒcüoêÉH…s0Ăù¦† øLxî`Jt !db :í/–0s"÷k0œ#qÏ­Ü®± …àk``Jà‡0C€/Ø£e,Zh8º€¸^Úv- (CcéÈ© ưs¶1™…a¸lq’‰‚Ä\Jx:çvóÎc#Ü>­)d0­ =đ˜À´ XƒÇ|̉ -Ú‚QE:\†¼€?ƠÓédBKYRŸ·xôƒqSÀ†ÔĂ“Û¶Ä‹Ăë…./² <¸ç ·unK‚x ¹̣̉iˆ̣‘´Ñm2î¤5„ư³è°XRLù˜B¸–£Gæ0 0ͧµ]U/ë̀ƯW™Á§Ô‚Maµ`٘Χâ 7́¥®#7bîś¹Ă\•ûp]Å@‡²£W; 0/Î[=Áy?EÙRåû\5á}¨VÈ,˜ku¸̉5ă}ñđv¯c”[,O{]c«$w*çlĂü#åyÄ–à¿O¡UP4©]Fơ© ^F „F_F4ºÏ3Ṭ¯ƠZ½akd(ôc%WQf%˰ˆØú³˜¬—dT¢¯ ÿº]‰zÇ̉ÜîÁ́?Û–ă^´Zeù:Nß¹[‚™[çBª|WĐÓ7rơ«c5a•̣²`ºØFI"Î́÷É'skvq?B«z‘H\Ûãd…ôVIV(ĐĐp$@5ÇîG¼‹J…k÷ÁTÚ·"K¥bcyÛ$N9KĐ¾ $Ù Ä*₫ˆ…佫ư±(^eiÊiÆưc\n™âäbgïy´Ă@ ºÆ!MTQ4z€âîÏr F²œÛ¨(»½^ÓÓƯ¯fº´»}”ÆW/²ÊöuŤÀÑ&»ÚdîIJ ²C.ô¦²…gn”¢Ăt{ß·¯,×tÜ®Ÿ[x~»đ`Ú¶|oyX;™Đ. ™ê1¸@Ç>V{¡”c™ƒDê1k9æ –™̀åÜ"[…–D¶®yz.ülÈQîM•è¿ våüËwk`Zvÿ„ˆ"ŸḈÀµúÀsª/1"nRZˆ}• Ó9AÑ™NÙ}’‹K!ë¡}ă¯nîh´£ÍCâ=Wxdîá£(â·D§S髦îéûüº);IƵzqÔ]¶V ¨Ûh…#ÛXiÔ¢Ám ;á:mƒÚø.úgM.í›\)–/²MÉAÇCäÛ˜—a!Y+çx¦"´B@"Wäe¿‘°_a‘UFé»X ø·F¤hqF@³̉Đ5®®·đ>ÅđZ±¦Öpß-0¿,#m6püAr“%I&87¬€"€ơđ^Rˆ|v1ỎÊÄ(@­Ṭp,âE´átI=µÁ„]]¹£•Ăô2ÊE#äZCj¨“&½<ä+ Ü)®Î:l»¬tÖWN,‡æSÀu©.SưX%‡BnøSÎ7aå¯ṛôÙ"ëzÚººEÅ6;$"µ…XGơ;–t”Mî&*bœ“}øF£15ß·dÎ/,”Ä©:³ÉaXp ~=Ëb]LjR Ôq«ru¶$È!IR(!˜K‰³ÉéZp¸Û»ê›ƒn×ɲûfŸœèöÄ :đf&Ö!…ëb „æl…ü‚àu æ¤ÑNÆÈ)"¸yËcµaªafÂ9̉ÅNc̉®3UˆÉU3ƒ̃6Ư®|Pe{«LÂo–¾ ¾₫AŸ*Ê/-ƠFD‡r ÷Wă6¾mË&°ªù/– “± )Ħ#`̉wî~"’#AÀƒÄ9đÔƯ‡èƯfbé.[ă‘ßœê €l˜;¬̣‹í)ù‚«ûXÑC,ú!;ú!éê!–́Ñ£@±U´·pă4ÚT-r_…"”P’ßkf((´ù*çç'æ‹q2#å̉₫×ç)O>éN'Q*(G$ĐŸ’đQyaAàÿÅæŸöS²?N/,ßfûê]&ư1Nd#̃Dîd8ÛâæÛ̉ lxớ‹bôˆÄ‹<ư₫ªµC~d)ơ¡.-‹wû$Öv >ËÏ*₫_ƒ ¯ôèZ=¸¶¢szo¥~Y’i’fĂ zc¥~ơÆjÁÂjÈÖ·ÿZînNI'à> ă¤hÜáW}Lơ=@»iđËƠJƒ`üçÿ|Đ¾F8J2¼èơæiÍ¨ĂæË̉pHÂJ]₫zb÷€ö½+ ªñåĐ¯'fÆ̀ö₫Y6ưŒrΩÿ¢çßÔĐï)gˆy¹ y³-Ëư÷ÛÛăñh¾§3Ëßov½¸½4Óµ,Óí[gf₫üG-ưïºÔIF™M5=ÜQX«Ư†I‘É=½–̣ N7ø œïªg(Bä¹a«+¶S•ăàw!]êÑJJ…O,.¸Äw †æ/¤–zø@Ī̀3¬6ùW²Zɰä·6©vו'}˜¸’˜đvÂ/ä®3)ßy o8¥Ÿç\Â0.D¢•`¶ăÖ+s’)y&̀₫P2/âÎQ.£Uuâb…qß•¬F>Ô7)óbÑC•fă·qœêǽ5KO%„…ư[Ă]üWÊ ›¯µ—ÿ§ºOÀ¿ki5 endstream endobj 522 0 obj << /Length 1290 /Filter /FlateDecode >> stream xÚ•ÙnÛ8đ=_aô%2É¢nµO Đ]Mu°’ªÈ´MT†ê¿ï ‡²åc·»0`ÎÍ™áb~l’“4 ½,L'e}åªZOxº¿bVÎAw$y·¸}‰ă ó½ÜÏÙd±›Z,'¯ÎmÛNƯ sx³?§n†ÎíG:ï¿=#9÷¼áª¨ˆú¸}¯DIđ\”¼é8`yê;A<ư{ñÇƠçÅ̃¡8ˆ½8 ÿ£÷ƒôY!›d^$FÀ|ßË Äóăˆ‚XlD7Eu§Ur­RÖÜ̉{¡7Ữưù0^|¿₫íοnŸn¿-^>º’€%×…¨¬½k9Aß»)s6²·æ¯= Âp!×QÂNưΕâÖ@'Wº/¿!´h–́äÖR”•́y…‘X$/E§•xßjËúẸ̀`Û,¹ ¤ä "i†ÔÀ{k!›îÓydû°ÊëËÉ0ÁVT¼‹ËíŸLFQäl¦Pa;,´Ô‘zõ(±œ‘Ơ{‡Xè|·†“±áW‡<ÂŔ/Ưüê\“ºI"ZưĐ)ÿƠÈm+k `ô¾'LSHpU ¥Ö*QhKh ¥;’+"¡đđ$¡Çb[ûv £PF¶£µåMƯ”eÎ 0I[Ơa¥DäƯ±lÁ_w¤?J'0k±†Ô§&ô:¥xóYÈoH‚9P QÊè±Q¢ ă~ê2çùëQ$ØÓ\­½Ă²̃Q–{B0•ˆnqT PÑá…QA^É­&EQóç‡CWªêe…tC˜—×Í €U' ZsMÀ!]ˆñº­ŒíFÍ •9o~́‹Ơ‘˜óĂ^ĐÙ“›ư+0Áˆ&íU]‰– zL<¾Ÿ8Ă5EC^@,–£­çX7Ă%ç9Ç”•²5ÊÊêUÀö»mØY#÷,˜½°Œ XÏ{Ä*Ârc(å¯Xßi>¶ØÁzæ›ơŒÄ‚nû®` ‰†»ïÊôE„Íă0%€]ÔËF6k'̀̉5†5Qk‰Û!‚«mE\ú2JĐ…¶¨DóƒrçG¡6 ́S³̀’øöcyÔ, Evhî8°‰1RÂj(ư¦Đ™9iE2ÆI“K“‚‰8K‰‰I;ă‘c®Ö̉… æ0kL–âlTeñ¨Ê€±ÿÀDJÀÎ7M#âY’\‘ˆ$NG‹4†Ezg¶ açEªÓÆYX/Èz T`́´)ĂÜKÂx'‘—Äùÿƒ¾;2paxœ^sixئMR28ªv+íFT²“íf7ë7;:Ï­Ömåmt]MÄ8ö‚¾Ícç¿™4ƒ´;¿0iN& ^ư ̃=n endstream endobj 609 0 obj << /Length 3505 /Filter /FlateDecode >> stream xÚíÏwÔ8Çïü}Líµ$[¶÷ÆÀÀ̀>́›ö2»‡&q ßv:l'Ạ̀ßoÉVYån•PÔ°Ózs2vU¥¾Ÿ–J?[,JøO,¹hZU´ªY\̃<*‡Ÿî̃.Æ¿üöü‘°Ï-áÁ%ỵ§‹GyV× Q]Ù‰ÅÅơ¢U¡U5Ù»¸Zü~&ơù¿.₫öèç‹ÉR-뢮T¤[|úÀw+¢)¤¨+ăÛüR¥ù—qûëöªÿ¯ñ<>Xª̉̉<¸,‹Jƒ]ƠJÏ>Ÿ“‹¶è´̀Ù‡ø.»ñ©Ơ›ó¥́Înw÷Ö,yü÷¥PÍÙ_Ï—¢³?dôOư…=Hd[MU/t£ ÑÖ$ z”…-óŸPlđư%10`CŨw2è܆̉ªV³Px^ñéÇs QÔª[h¥NÊÑóOA…}hu·¾<_ªJ½¾[½íÍ_åÙ«ç²=ëw×ư'Rë? J'¢-*` g€çÄ>36l,'$”Nö{9©›¦ĐÚ6©Ob8¹ÜÜ̃ơ^:™Û¦o@`­e!ê&@b€%Ÿ ·T4”C¡_­k ™¥₫̣öư9ô‚Ÿ›öæ̃ÛJQfP¾ôÂrÀ7˜ë‡C4¾¿$<Í ‚ ÅRDb‰¡(àÙPT•…,ơœ¢Ưúí»¤˜’*7?ÁzÉjkÓœ3ÀDµˆÄPÀ³Hv…T–Ÿ]¿º÷÷n¨Ă3W1ƯÚ˜öô^mzŸïÔˆ²|ŸæâˆaiîƠ[SUđp‡5ƠӘ꪿~º¾ñ¶UM•yû*¼UMUTÇ”QÄK>3¨ÚqÈÑP"˜ 9†ö«̉ª¨°×’ï̃{°ªÍ|<́$›đt’œ$ª*O %†¤€cCR-!z=‘ôóVŸ­v>TÙeb"_`**̀vrEE °ƠLRQ²‘Xb8 x6U¦#ÜÇèÉP‘Ø₫{½}ëíêºêä‡i6séHLïóDq„`pÄđÀ»58(çÏOû–¢fÊí¶Éăx/ 6—é„8<"T°#$–H %¢+ê¦Ư§äÙz³ñÇÊÜ»Äcc“›3ÀcC `Cb‰Á&àÙ`S¶….å6›₫₫̉ô7ïú’₫zXîlf-g€çJàÄĂCÀ3đ :XФ†Ưô[ÿjE+×ÄÊsœL1À̉3RT=4–zB =­.tđl›Édÿb„UçÈ•x+ô˜ót˜¦÷y–ˆ¬üº $†¤¹[ïL ª`3Hk{ÄŸcfûíƠÓ₫Ú_đdø3£”(Ú¤bÈÎß́ü >3¨Ú²È‘Pb˜Ûś…Öá -,íÏ¢¶ =3EÓ‡íåưúv;nù­¿îwưö’Y Ñ'ˆ„­"i¾ÆbC °Øà3ƒ,lKEC‰Àfß±ظÖVvbàyL[ơ¶¿tÎÍƠ‘Ü—”²PêˆI!b€í!ñ™/t‘4–đ¡Ú’BÀsÍD“™!́̀ á“•»y+/œzÎK[ØhØ<¦·LÎß2Q±ØƠTJ Dz„úÉ57On·w÷«íĐèø§UntBM‰ÍgzSâ đM MÔ,)$–RÏUØoî‘̣ruÓßùçÊÓh&Fa0GÉê¬ú3!xơi,ê‡<ơØêª&ñë–²ËĂö#›́t¦÷yˆˆüÄ! $¡¹[o ¾ ûơ‰©1 ‡Ó¦?gănùÍø“ëaD?½Ư®6ë{ó¿>{™ 4?̣I@ư'#Yla‚Ï„7ÏÓPbh 86 Ô-¢ëËMÿÑt6sí¡̣ä Ÿ1eé,8< TvCC‰aaÏñ¼éPeS4p8£…e‰‰ù›0ïᩜơö?₫Vç^è›íáª%+„óyöÔ©æá `ø₫’8 q߉ ̉P"+†+Xpø ¶yáÔ#P˜¤Q"¯¢'VƠµĐđYn1Ùɾ¾tïr4wÁ̀ÍL¹@b0âƯ"Eµ9gǾcôëSo«Ơv™™ØUøIW›átvœ*c€K >ÏÈO›±Gtü˜Ñ¸— ZeXB°Øt¦Ăâ đ°PÍƯ'XH,1°<#,Jeé*#î8D¥sẶu ›đôÈà ªjÇ̉DB‰¡)ài’¦‹:J“¿Û’u0¯xPU›Ưttœ*! %€cDîi…£ăŸ=®ËÜÉ/×Ç6¡éư–3À÷[TµĂc.$–\X–̉9ĂNÛƯÍÊ¿>Uç*9¾đÁ–À¦8½¹qøæ†êÈƠI(1ü[~j˜d̉JLüÀá½q3Îfọ́r}å…H¨S_À=f/¹m!ضe&ß¶ĐX"ØyF6®(UKÙàORË\«x ±9L'Äà ¡B!±ÄđŒ„hXÓªê}B°ñÏøÉÓCc¾̉ipx¨(H,14<# 5́àĂ£}# 7s.+ØÈÉ^†";×·çØ4¦Câ đP­Xb xFH`KºÔ”ÿà¦ÊÇc<±¤´™N.[ƯûlƠJÅd‹VG B¼W$Hiwe ôbưfØpÓï˜MVù¦€øi9Ln:5Î U°a¹!¡Ä€pŒä˜‹TW®p#©›ÜÎ<đ4ƠԱا÷^Îß{Q!½‰%† €g$¶^M·¢A¯·›ơ LÑƯùg[̣%₫FÆf1½‘qøF†JÅwN$”D‘²*ÚÖÍư¿¾ëwĂ¥€ï‡{–ưăç¦ÉEŒ·9±ÙLoNœ¾9¡’ñ«4–V-+UW²s¥Lhăp[~ÿX£òv2KÄË̉LR!9–h,,…<#Kp|SVû,}ñÖ#­O¾‘ÁÔ¥ƒá đ`P}`XbÀxF0̀}íB́ƒ¼₫H~Ç÷ư1¹˜ÅtFœ*U€K #ÏÈÜ”]‹vŸọ̈£RæR<:6¹éè8<:TÁ:$–t¸»#3zñ ‰êt×…0kéL8<T$–&‘ ¸o:Íí˜`¶îÖ]nE:Í‚NçÇàù¡2ø!±ÄđđŒüÀU}Muˆ¥­sgßđŒ©MçfzŸÇ†¨ÇOΑ@b áƯ"30ï#*RÂp¯éü…VÉ#h›ătzœ*$?Cc‰(à *á¦ÇºÆïYƒóû›5*á,¿8»²GmoWWÜpºlNb s•<…K °S¸3A  %„=Ç̃Ó”ªÑ°mgq^Äœ¦|Á31Ưœ–{¦ÔµleÆ!ê܈7|&Œ %·cÛî(SPWGf­àé÷êOów₫ÓüB4î} ˜®tœª [ù̉PbX8FLq\ÏPöăµ2|´_Êö›‡1kéDLïó@aØ- $x¯Hƒ©z§nèK8 mÄrüĂvÜ­ß|¸÷_>$üßf÷= nñ×N.3‰¶̀œå–?—Jc‰Ñ4àE5•¨®D…½)Cï¸O¿ú»Ó??ö·NÿŒ:ü‡”¦–=´EC‰‘4à%55e#$…vü¦[»=`·bwQÊ?ä$f×₫–é:¼„4•|CKB‰‘0àØJ(;øQÓ%Hø|wû>”₫}¬BƠ?â™'̀F²ÔÄ+ơ,ǻ§•†!uÈ1J WåÀíÙ RĂVSPz·Ú}¶Ÿ^ro1sFS₫Ÿ6nâ/•®˜3À+F3Ç~8i(1£bppÓ©Å`÷•Ql9¬vWÛ̃Îà̀6dù•Û›U>N$[sàï‘\Øla3K?Fc‰Q)àỦ°u»)* ×ÔÁ¨vÍÔª­ú1În` ̉vxi¯¸œ&±ÄđŒװźl¶+8ëƠ› £°j¿wií/Ÿ.­3ÀKK3̀¯ĐXb¤Ưọ́́”đtƒ{ª_§<-zÛK₫ëE›¿+ưÈ“¹›ºª1|nŸñ_X8ñFB‰á-à›8̃ê ¤«ơƯ{ÿ̃€2£̣5×m0ïéP9H`ưÚá­Ă endstream endobj 438 0 obj << /Type /ObjStm /N 100 /First 882 /Length 1822 /Filter /FlateDecode >> stream xÚ½ZÛn7}×Wđ1}ÅÛ̀E i¢@ I ´5̣&JÔµ ÛA’¿ï™ƠØ^y-XÚ•ü`‘Ëå™3^]rrÁ•\̀ er©DWPOUÛ‹Ë-»Æ®4Âcv” Jq̀Ñ5qẤjH³BÁµÔ\ @ ï+JA#ÚbÔÆˆ )®¶4T(Cp¼J.–H+TQA+UÊE®Ú§¸(‰Q!TJj@…̃2:â!…Œ÷D¨”%p‰¨”]ÄW)—<+ º¹&¼BKË¡‰ wa|ÎYPÁçÂEuMXû ¥A…ÂhiI.üD¨6eaœ"l#Z!­°Ë6ÀÊ¥jḉ2%èY™điTÖ+è—Eu–êrÍ ˆrc%4.°U€JÅ_„KE·¤î©—?D²’PS«S ̀X´´¤Æ‡«[g£áABíF¡v¨IV¾Wêôx‰à Đ -Ör£6‹+<Á]”῭(àƒ¬Í} •‚p$E¥˜qÂçb„ µĂÀë 5)VÇL p¬ÁJđ%+JÁ1!"£QUp’U"Gƒ’(wJ\´¥9DÔtR¥Îôµ´¦-ÉƠ¨Ê´¦”º ¨p%*äj!…ƒ*!Đ ªT†¯+r•æj‹Jy`ç'OfóËÓK÷䉛¿@”V$à+Táa±ªh²:Ă₫d/4–¯^ &ËU»vâ«pv^A=}:›¿<_¾½¸tGn₫̣ù 7³øvé̃ÎđJUyóưlï>-fóŸ¡Öâộ!̉ ™Í_-.–_Îß/.º!¡kú}ñáó»gËoî( y¤́}mo!íƯ9 Đ}…`R»#c:ư₫üëo‡0nøÂ~99¹VæN»¬ñ́ñï©o»SŒfOöù&²/ăØ÷Y®y¹Gy-Dz̃ïÛk´-êĐ<Ơ2̉ø¯¥KŸ₫†Ük fE™tVÜÑ…|Àlqo¿Â>b:¸¯_ªƠSÉÛø ŸÛøcClöAø€̉N> ø ï!7{v¹{4Ú›£m1̀Mâ©¶íâq½¦xŸÀÿ¾~Xzy’mâlBzïeàa®S›h[̃.×ou‹9ø†uÛN6[7͆8Ư÷ª‡¹ÉSs“Çææư+…}§#Ë>M¥Ïăèï8ï=}$ mQ§Ú¢m—>ëƯ¨e M²cÈ́n¿=Ø,l&q'›I¹m3I[Ù́V·,Åë^n?CÎAăl˜sBSmÆÛÙlT7̀~>bßyĐÑ|¬5ëp̉“6ÆóŸNO—@<êN0T¥[’»÷³ù³åù‡Åù 3¼UÁï¡q.É ¸*:h¥ê±ßwܺgô{ưåŸËç·Ï§ÿ­3̃k7ÿăƠ¯«ŸGÇ——g?Îç/>úåù§ùj“WêvSq “‡ßµíëµëF{h¸5­yb¼×2‘äh2mHF¦’©cÈŒeІCv›:d·ô  †hÛmmmÀ€!o3ĐCÉI ôḌ!đA™Ê€’A Cu*ƒö  «@`p3ơé™ö®S_’æ‹“×#ú½ÎÊ1E ]f¾¯_¿úO§_ºÙïäóûÅéÅââö4H±LŸßúk=T“&JĂtNaª#Vzë½AW¦²»cJĂIZ̉{ßƯ‰àÄWS÷¼WÏl¡ă=Ắ¸3ñIËDƯI÷’ĂÆn"#{Ö«ø+‘©xê&ġȴ‘:´vÿ`" >w£×XLï̉ ˜%ב$>‡»YƼ'™¹úî!®dâʨät·L̃“i® ̣Ȍ۬P?Øgù̉s&vö78³íI$G/=gâ`§ơ0"W¾ÄU˜×ƯĵHªPaƒ/Ădb%"µ'³ˆâ»eÆ}É ^ç‡k™™¡C<¬̀ˆŸô܉W tX™_á&7K,Xl¶ƒỀM<§?Cö•̣Ư2ËdVŒî7óInÉW‘ {«́̀ ­;ñ=>npg½ù?ơ‚> endstream endobj 620 0 obj << /Length 932 /Filter /FlateDecode >> stream xÚí™ËRÛ0†÷y -“……î—îZh:eƠB¦]dXdS˜&¦ ÎP̃¾²-;²#áa‡‡tÎAÿǯ#d¾0HE¡¢¬wT>ƯÿƠ‹«/lÇ%f`âŒü´˜œÍ9A4‹[7Ôb–Ó¯Ù&ư7»Y\Æ”™@åDO'ŸMtN8äŒF–R>©G€¤L² 9Ơ¦,gUêoEæ³9 j!X1 A&LP¬ f¢ơçœ=Íój¸r†/BơôĂ,Á·~è‡ïhBGg¢ÄF0‰¤ÁF•:CñƒH›o˜”‚·Ÿ¸Ê×ó'@©¼+h7I))f§µhH9mƠf®Ư›ÙümhS¸áèÇL‰éjïåé‘•È êỜ‘ ÈQKRLB¹µDpÔÍ́ơ.A%d̉º̉U¿wY×Ư§é­7̀؈ԛ2È dl%zƒƠüÄ àa°¤”XtJ‰A°'qaeÆé8¢5VÙj—öíá—Ë.êpÇ:;–«\xçsk‰Á¥'³Á…kEíU.÷;¯Q4zO´¿Ôë:Ø_œAi‰ô·”`úÀƯ;wyék–}åe{±k:Ø]óƒæâʆi•c!1¤´Ó¶{!j|G̉ö9îÚß ™VˆBÍmui~~ẂX‡́÷ùj=#jz—z I°÷ ×ÉAÜœç©0ư'1 ¼¾©©ç'N€’ºIJ±ÂwN)1w=‰)2²¹@ r„Ä4̀«Ă6Ÿîó°ß­r?#ôƯºK#˜]¸áT„©pƠ Sá”CEObK…Đb*æ÷Û­ÅÇóĐ[ jÁë…L• HUK]¢Ê-%‚ª¾Ä5Uf×l«ÇçlíoˆÅÈ̉ÛwĐöVƒá€„s…æ”X'±·1¼h}́ioÓ-.}̀g etz{ÈÖùưCæ%Sª±Ñn ‰…¹3QæfNp^ƒ]ÏOœ§Lu’T½6BåÔUOæÚµ^›Ú^;/H±©ÿ6ñ(¡>Y%¤ü fyƒÀƼyi₫lªx*‡îRpój ®'ß=9‰,¯/[I³4_o¼÷˜„̃××Á×́ØƠè1@PW²@Zbídöº×*d ígŒë=GÁƠ~¿Ê“`^üö́ÿ|OŒ{lôkIxñĐĐÖsñĐIQ±&B¬ơ]<üt),f endstream endobj 635 0 obj << /Length1 1597 /Length2 8627 /Length3 0 /Length 9672 /Filter /FlateDecode >> stream xÚ¶T\Ù.‚;‡wwwînM 7 ÜƯ%8„@ Á%h°à\‚»»…GfæÎ̀½ÿ¿Ö{«×:}¾ª¯jïªưƠ^‡–RM“UẨÑ,ëècå`cH)Kr°ØÙ¹ØØÙ9Ñhiµ 0(ø/3­ØÅâè ø/‚” Øöd“6‡=ñ”nP€ƒWƒOÀÉÎ.đ¢£‹ @ÚÜb Pf(::€]Ñh¥¼\ Ö6°§e₫ó `18øX₫H؃] s€²9̀lÿ´"È ĐtAÀ0¯ÿJÁ lƒ9 læö®l.Ö¢Œ,̀ v»¸ƒ-¿ ¨˜Ûƒÿ¬Œ  eqưÓ®éhó0w Ṕàúáæ` v<-ĐTP¨:₫$+ưI`üƠÇßé₫₫âđG°9ähïdîàq°XA `€ª¬̀Æ0w°üM4‡º:>Å›»›C æO„?vn•P˜?øWy® ˆ̀•Íư]"đw§.Ë8XJ9ÚÛƒ`®h¿÷' qƒÚîüódí=|₫VK«ßEXº9µ În`é¿(O&´lÖ`€‡—v€=A6Àßéµ¼œÀ8ÿ0?Uàçăäè°z*́±?ư¡ù¸»ƒ07°ŸÏ¿ÿĐ88– `¶†8 ư“ưÉ ¶ú?¾ Ä`È₫¤=ûïßßoÆỌ²tt€zưCÿă|r* ềVü·OR̉ÑàĂÊË `åäap°?-Ï÷ôâ÷ßiỒ!mă_± V?wûÔ¦ÿ́Øư/0ü5Œ€ÿÎ¥âø¤Z0€á‘±ó°ƒÿÏRÿ#äÿOῳüßD₫¿’uƒBÿp3üáÿÿ¸Íí!P¯¿O¢uƒ= €²ăÓ8ü/UüçĐJ:B-ÿ×§3 kèßM„¸ÊB<Á–jÈæO­üi×₫=cPˆXÍṆ̃ûR°r°³ÿïi°@vO‡ë“ ÿpŸææ¿—”q9Z₫0N^€¹‹‹¹ÚÓ?!€ÇÓ$Z‚=ÿ0Èæà{ <ç°rtAû}¼| ÔoÓŸˆ”₫ñ±€²ÿ 'ŸÊ?HTưñs€#§œæÿ '&èoÄó”ä}*÷?–'9€àÁ'ôø¤U ă¿ 'èô/Ⱥ₫ ̣€°Á§Tîÿ@ΧT^Àÿj!ÈÍÅåéùCâOưư₫ăƒ=Á ´Ù)GPíç –ë* 2Öa‘ Ú Ư4FVŸY—V·[,ädÆOYË.—Éư8 k2 âs>{5È¡M‰êÍw¾÷¦ñcÍh3£„=#…{_¾‘£¾dƠßô}pöƠ °ƒo„kS¤}ḯÆ¥–wíÑ-çùåÛ‡ùÁ© ơÍO¼¯Ñï?Œ³FkG”L̉æYdÿ ¦B‚±’£0½8öļ¸œx‘;̣H¡ÏŒæ·ÍUäcđ“3ææ‡÷âG-N×vbrø‹ƒct>’Û)DÓ>¥ÅQË"Ó9|á±}sAƯ ?^ëP½Q#v *cÉôWjĂ£iÏơeº@u@#*:z/(>Á´¥rV‰•Ôư¥¦Ù/!oo¨É5ôà,™[;^µïj·1±od%F5Ï0êèp’' ´ü;¤‹„sr¬nIïøfáè…Æ`‚¹xª̉¶f=ơœ(?˪Í<‹'¯é«ïße)¹îá|äô ÉÂ07…Û‚6YJ6rÑ“#lÀ¯›uF.½:1~Ă'<=æ̉€+p³hR¦Óp˜ÂÁ«UY ,‚¾¸7Xµ×î =øÚàNüë2Rn×H0à©©!†ºœ‰ăÂʉq¥:_<ö&zƯM×Ñ}ñ |‹Ù̀ŸV°`xÍ65¹f¯Ujd2}î›eFGöNºpYv +A\%y¯̀è†+²î§°Bj•] Ûơ³[2–đƯœ¡Ÿ–Óú~”T+KåÎØôăà°2₫ç¹Gn^=èà&w/91ï|Oµ±í<¿5ơhG‡OéZÛ·YІ 3&d-¹.7¤kÊ;ÊÙ‰é ÄyD̉V—$M¬Xôöú”ÙºÔF¿jSw²JA>(W‚óMøúĦ9?¢ƒ{iK)úW*Ń# MÚª)Iîµ¼›¬>ÜHè"ƒºmwoÀˆ1+ôHz¶C$4{7ñí‰'ï‡1‹N¾äLU¹‡ï-³Û!ߨ„=7₫H’çf™bÙœ[ywß¼Ÿ­½¦©¸ œhÀPuxºâcœ̀9°6×mtªÎ.5´mâ®ôLÑè3RNSlz~+Yê;cØ1-<0µpêZúeuÔZe§j>÷¯"®ôî,7~l×ÔͲ·;¸́Ͻ³z7ú«Dwxá{aa₫Mv‡2­…½.fFW3*cî®Ûr{?D £Ó£&h¬ḍ6Nß²^%ûi 4Dt$ṛ́Â%Œ8*¡8R_ßN»S#ä…M¼ºT#²"œP$`ïf¦Í Ø” 7đ?³gY³1Íô½<£¡Ăz}NÑ!F®kơEw¡rœ̃-<6¾@Ơ*̉²htƒ8’3ßkÉ—ëfă|‡¥Q5Èë+d¬¶m­/—zm:x¹îb–¶Dd]̀ч̉a§.Ư•¶ Í¿rȶGḌ"täÀkH‘ûU(6'í n½ĐĂ#¹ûæ÷=Ç­×å(æTV<-yY7âØÎmƠGN ¡>a”1!œDr1M´S–Ă÷3 f½I{w¸“)½4̣е ³Ö0?PÇqÀ¬}w݃Réc-ă;FŸ#‡ÇưÎÂç6xæ¸Ù8&rüï¶P=++uquHoæT—-æ8Ä•0Ô3’Npx¥}JPe×·«ªûWhoœç@'VÖà†ˆb¤‘ŸƠ8Ï'à‘…×jóÁó¶ÓÔ}ó4;±M5¼:µ½?áKĆ´̣á0O¡=Ù4ÿé«­Ụ̀ë1œ÷ :—éq’ÍF w á–|êd¼ÆV‘{°úKû̉Êzºaá Ÿ́ï₫ÄLGVŸÁ ­Ơ~¯Ë\=áRÇY§çë í¯R>Öäm¹Đ¯.Äï%¨]×0CSĺv®¸Íbx^#nơS}×Ív©YœĐÔfJ„¿°ód$ö䓼Œº‚>6puk4oÜä²v¼đÚÛ.i—l~Ç‚3ÚêG’”:O a[¤6Æ7ĐåCóssÖNŒ²èV¿k[=¢œ™0ÉŸ©Ôø)UË+Êr¾‚Åäâ˳Ăw[½bCgÊ-•¯I¶ y´#û́Sjê1‰‚3ÉăîÉÉ{¾eMo1÷¶3$­;Në’rHa!¹Ư[RIw8ûyØ(€É:jÔ{Xy4S?—/üBLG~vx]̀m$^ûxv‘9q|ø®© #¤;M?tê­j{ÿà¡£… ¡+§d—d½} ̃[A!ƒôw wq„ CöơŸ¤‡ư$yktÇæÉÀ™g6Ö[—ú+®åÙ‹¢’ •ĐÛk€>ˆâƯé·øư]÷F̉[i;ở’]Đ•l´§;ăÙÄêG”©UM®lă›a.Êê½Y$3Ă@_æÛÀ7̉/µ´[ŒĂ/ṭ®R¬!̉¢?‘¨§ Óˆ—>ºæ¤e°>øÍ†}UOC²Á4Z턾yV ẽ¡iÑH¬œª̀ñ·#© Å[}³̃?7ơ©pưU`FÑû« 'nñ\埨ù[M;O¶¾WYJä„ÙtUMvÏ·«˜áYcị́đ»0úŒMиt ¡;­)+Ê@fỜ 2Qu>ô”O^Ư¦º±A8"ÏOo›S bçסÔơjŸª(*©eM¼×“æĐ!E Œ~/U °~í½êà -ÔC´àố² y®µ¯‚“¬¿8,ùî÷×Üưèô,¡éB¯É«}D¹Ø<±wí—+ ø™ăĂŒzÆq*[ï]÷«$vC¹䕬̣G,Ỷ˜vJæ€-Q.Â$ª÷¨ÚJ®+[ục¡ 9³qÓP…¶x¹œù›*j[úâBmµ.‚«^O“+)6ê+^m§½]3™—¦^_ơơ‘ +ÛÊ’nŒ¢~/Àû—\88·IbúÜB\l”€ˆ9iKX„ÿ”Ï?÷a¾ßvÆhë8¶o1Siÿ́˜R®œđcoQÁXÔ#50“tN.Ás¼@9¾¨Æ“xÁ”wHú=„Ăaä¨i]́F¸¥ày]ÏUß*u:Wô×GÁ2¹B‚ư”Îàv…Gâ;̉ƯPÊ©đS9!¦WîÍvâd L˜•Û=¨£¢zü½M%yäXà@ç.D”*VÑ¿˜¥x“›P@Wˆ!øh”åË{¾‘¨˜2;ÉÅ~1(³ÑđdzdøN±̉ô{r0±ơ¬¯öc¹h? æP£ àBK4>X’ÖGÓæ2xóKMo'CLègrí>—>ͯÂ6 …v(F…˜Ưe mgx@ôÆ̉Ơîlơm‹Ü>Jáûgz"„pæEơ³âרèïXđ~~+çb-5>]*¦s´¼‡₫4«2³Ê‘+˜pbÂ(D,}!O£#"Vh† ccf\i “–”¼uÎPĂynîß\ëúÚ¼đ[âÑͧØơo=|^í<¸Q Bªq ̣¸ /ë‘´â;áoI6´xJmáq̉±ÙQa aÏnñN39ăT^íóøÆˆZÏz$™)\%k9ic¯œÍYBéw9àŒ5"Ë'ƯÎ÷×Ñ%öE“‘Lñ\Îx—]Sƒ‹„ú x|]µ—¾#ÛÏW7ôæ€\¤ó)Ú¦8dP¿3́}¾]‡7Í(¼àŸ“8"G¥£n›ª§="%¿¹ï»•î+O2g̣HĐ.{H Ö3Ä$}ÛP¿B£S÷yĐÉĐ@>¼LYiØ”Óú´Œaö.ôƯf«Â¤Ó¢¦evƠ£OTô±Ê‰ÀË8T† »¯$Px‡fg«â¤ß)¸x˜æPj+%îĐXÔù")¡¬Lö́Ùâ»›»Â†¡-áß@Hñ躧óÏbd’+Yå¨Ư·cØi¬$áÉ98oœÇ\HÎëz®]áË7VjFH7ÆÖkÛŒBV9k¨‚Đ2¿¨¸6¥ÛÂƠ³¦ơ8‰1¿O”:«j;£4 0RCüº~µđé1¿ơ.’è,'nhÔ÷¨°_× _Ͳ.@|  ›Œ̉† ¾ÂL¼éĂC‚¿¢ø®²\“•@ƒ½¯¬_Ó.» œÂü%ÎøŒâJ9Œ|¬!èP¶EĂ>‰œê7A=LÅ*£Â:÷¶m–ôƠÊ•¡&´è²¼ 9z£ÄøÎ["d7Qاm7ëäê’óâ¼đ»×€¦'RvD4k«øịƯ$Ç¡ơ[mûʇ†kuôƠT\iŒgú¢³@ÉGzÊ 8®ÅôÙù–› /üBËfµ=f¢y~? F›‹z^‘zđm\9ç°|̉?lpIlîeA߸(ó=&!̣áÛî¤ÖÊM°³MÍ owÜûB(}ÎØƠƠq©=]B†¼˜nKr³ç/­ö'CnQ´̣E ¼×đ‡«-iđ@KÆøÿ%d‚·c`eà×áà‡—‰æ–Ú·̃ 9Zđ-ß¼¯o £w¾?èÔpû§́J̉ÅÖ"G‘Û0î§)KáṃºÙ 5́ƠÉÔ0¹ei‚rŒ¦ùeîßGRù cN.˜ëGuIÛnÆ₫o¼XKª+r8™n;º¦­_èSdÎÄ=²¸d=/£©YµÊ>‘éÙF“ffäŒ₫HmK“4'—߯¹â;沉SÇ «¸' ƒ×—̃1lĐ_p'siÜÉĐÔSn”YjH₫  ̀êD ç†{âK9…é)ê…)^ÜMl…*Ĩ¼‰a=¤d/¿ÄœB ¢R¼¸lA:Ỷ“ê‡s@i,º×á/ºVè{M%4njFe3±yqñđŒđë§Ơ82],7Yƒ<~GÏÆ"Ê0=•LjăÉåZ†|,(ÏßĂÈ®ÛØ÷Á)§„JF™™Ơ?ñúoX±èJûX¶6«BÑ?fñ2u1†!Àcp¤©âVMîDD&/ÜØú´ûR\©c×£æß^¾º2tîXw̃?Ă%ÈJÍ̃U?́«éU"¸G¡fùvÜR@ÄÂT4؈²r@ÑN̉$»’D¥3[èvb¡RXê/ÅZ÷IP¿kijƯ‹ZÙ`Ë©¹3wf-­Oh¯ÎAbå”ơLÄm†ÑË:5Ă·¥ÂC¿„Ë£ù~Éj5#Ï`̉?äO*Ñ%¦Ë¦7œsóx±%»µ›£}OOF<Ï&+˰fq˜O¥¡V‘¦7ÂpÚ! ̀1FC„O~_èü5€2ôYT,¢2\ÂŒ¿m%:f»̃́“,së-Zˆ·)e‚₫Ñ”đ XƠ ÛPH"¬iØ=Qr¥VÜ@$´`{‚o»§Ö~W‰(t×g-+8 #Œîô‹ëK”©¦Ó븙÷ù¯†~aøcŒ¬Æ…|$}Íäë¡Ó!Æ–2/dÚĶ$zĐ¿¬=¿ÄbÊ“dVÔ(Đâ₫¡+ÎÍđÜ₫#·át -tgªó¼V/³wï7h4ísXœÍ’’ö>¿Yl!¿‹¿ẓA®Êq=‚̀Rä{å¯-X ÈÑñ¡̃'ú^ç΢A¬ûq=‹I6/g[¬Lâä*C€_9 rVÎFU-y;{¹ï¨œ»Ä»Âø§tƠ€JJÉa²­¿Bsâ-NMäº Â—ehßÑ“Ë˰f£v~A¸KØƠñû2cUYPW d6¶QÖ!gRP-ŸE`ÑD¦r¤sâÀYw±üyƒuX±WơzÖ*²E¾‡…«%a¿‰¿¨7‚¯Í7åê“yO‚ŸUzº9pKp¹‚©#3ÏvägáS;₫,«íf|‘ ÷ƈϬ–è(42:Î…ÇO.Ôê[ƯóqG5»ó́¶¾¸ăưË]ÎSDg»wƒ#ă1c̃"‘¼§Qaơ„|3ó†âäá•W¿„ ~ /–3“§MÊ-g¤́²Æœ–¨Ü K‰9“]^{NNY^Í'{΅IÇî+Î ̉Û".˘; DÀSRE:¢Ñb1h“Ñ€³tỢ^Ç1ă=©?ồ×ç̃ơ˜ ¾1/¡(ºÈï¶©‰FùJâ†đ ưd˜7îb :«QfĐŨÄÑFô¸;Y2/ôÄKvºeuĂwÛTÉÛcº¥ŸÊYxáKrb|v`—hÄC‚{)zSoÛVk¥ơñ«ÿ³øç³´&H×o*w*¥¬ư„ {Û%·©ÇÏê5¦ƯNÔ6uỊ̂Ăçư™0R!"nÈ!¯oÇưPáù`!´…+d}>ÖˆC"ö̃óN(úBt{ïùFjµĐ£Ô‘‘HÑ,£Đ!<Ưî|¯>ˆ9Vo¨^ƒr "#2¦[m±¯l-XÈ*̉^½kƸ$'ß̃jʉ“.ÙC,- ỡ¸,²æd«3Fö "!~=óŸNÚ’R£FR ÅFÏ ₫´aslˆú&—P°ÏûN}ˆŸñ8F¯̣ Ơ t“B%Δ¢Y¯•á­¤L±{mµz*¾n[úøŒƠđ¾ëñ>F.wQ]ŒW± G.±ßW̉ Ơï³ó•yàSFñ•ƒ§oüêkX—¥ew¿~6bÎó@ÉEį¡§í'Dµ“C‹ Äu ƒç?kl^"rEêÏ¿f³$Ö HûUĐĐ5 ƒ%%ÙK˜0¶UƯ/pó‡đΠ̃₫ÓV1ß $9̃Ou:Ç•”Of¨O²®#7Âö0WøÖtü¸qnøtÓï›ø?7ó’—êfë,ú­ÎóGÚ¿à(†0 ¹¥̉®ó¶„ư=#Ü÷¾Í.đbçi“đk'È#-¯Rœ·b@nL è­ u»¥Ư`"«—€­R)N±ó £ˆzgSÊLù™‰·umæEVÁẉ’:ó7ô ÔƠÈ­OÜE¹­ó9¯ĐpRÂû›l²$ÙÀev V T/ÆkEh'‰ÔÈ8Å<`Å¨Đ…?ˈ² Y!·`œ >ÀƯÈv‚—/¢²Ø r›eă[ư¶{»«PtiT@뛼đ,C£H˜"~¡g¹H/â3nÏ·ơàÚeër’q̃²Bsz¶!n)¼ç<¶_{dôRu~øÄ¸I7e_¶ÇK‰ª|+0à;~n0ÓØ5=¸ªœ̃Ÿÿ£Qª9ÿe³đuITÑx$WϪ“àW¹‰ÔŒ±\iñÉYÙũ«Ê/ô :=!C± ¬­$'~ø RY–F°r‹º Fu¨ÍƠ¬~¾&ˆ;…@Bfµó.e®‡>ÎḶ;×5Đì½ơă-”R₫sÛêÊ­p>–Ûl¢?PËV~ö-> r0ë¤_Ok†sO:h´˜Ä̉‡¯ƠÛ¼µ¬ƒ±×äæi6QëÉzQ¢†prM܆‹µÎ]J´e­tĐäöT·Ÿ§r-˜̉y«GØb¡”‰ €¯Á·a§Ơ?Û†•ˆ̀FMÓI7bT©°çưØë2÷5-uçXûĤèưœñ`˜á,Ç·ơîsÆtÊNÏGïc–`»8WíŒÑ_!µƠ"loW¹¥U„qa˜äxâu”?óXF1ḿă¼’ñó́ơb!zđEPĐrâ4 ÊAnơơ ôî,«Ø‰†©\NœÁ̃@röwÇûu ̀|ü¥Í°I´U9Ÿ5®í8¦4Î6&•µ(ͲyŸ²o»ö$Ơ¯™ËûûWѺD<ÎK©ó¬Ó˜T¥Ññ ¤PZ|̣püŸuækQ|k¦9®Ú¾ ‘6‰¾êMfîU\„¯©rKvbăˆTøÅ$)f퉿iûèÏ׬·|₫ưĂĂ/¡îë ´†®"³~mÿÍœP«ÅĂbQÎđ®n¯ë8)‚“RßPàZ‘ÿæDƠKUNô•3A²d·*K:dïx¡A¦ Ç iwàö4NǪŒ*6V7±tăëø}à ̣í+ÿ4(hŸC—yxÙ5ۘ ½¬F•Ÿ´Ÿæ+w¯»0£̉Qª’æ§âØEª I†oÔ(ßûơÊP¯¹&s9Y`£­m32‡wlǻÈ₫fÔQ5›-2ỷƒPDÀ°P± § st]­¼Cvˆ„2‘„/<̣Yû/V)́ÄÊoÈ̃6|fö„om—&x‹æL«8đzÇ›Of÷R{TFÅ%äq¥ǽÚßëï¼²|ˆÛeư)¨©Ù›9P̣ÇÜO³"Í©ùüÁCGD'3÷) ’ø‚ùœÄZDT±iCjL ÇE#Øư“ä1¦—¬Hr‘søáà́ "ow|‹-.₫,û\ä‡iz/EY©Ó¶»zä»Û B»©)d)S€̀Äñ‰·F÷?ÔpÆÛ^ÿœêÁ÷·blôöäPÿJ̀Vb¨m!ß}Ù#Ç»‚µĐy¸ÿ)n¼à'µêø·ÈA†‰=£âز¦†ĂB>TU•GĂjëD~}Üch7‰¢±ưM?aè’ByæÉ¹̃ ĐÎ¥Ó *†âU¥€)b0Û}¹c÷’ÊÈ4ô{é]½ö½»C¼è‹µQ|Q~ăߢ̃ÀvX p› T¾œḥ`ÓOQ`£6aC" ơÆ9Âl[oºu‡o}µ„:ø‘>¯d¶VˆḶ­;—«e¡ [/íP¹ONĂDä«|½&Ö}5M7Om"p™ÙúZ]Ëx‚́‹#öQÎ ô“­…XÂ’/‡ß4…ëºIŸ̀V̀ÏÙñËân +ǹ´‘Œ×JÆ¢ƒ¢bĂóñ&<ƒbˬ7M–M‡?ÇC©ĐÛ́"ûêÛÅ 8+ûy¹ñƯưóƠ®XÚç¡j₫́¨ºÖ#ïÜ<§G· E˜”¯¡” ¬ùYŒùȯ%ễăñ3ÔY]lQ »£p t½âV1ÆÏ}˜‘vŸ5¸y2¢%+ơTcc3đª‰+Æ(®èDÜ|ÎåŸHyñé™yÜÉƠe®ö€K%,ç̣ṕ˜XV罄\°}0ÂW\>¹„'чÆD–gơ^BÑJkÔ2˜ç˜< Å 6í|$·J¥Èlù«Û!»°%8Ư‹‡fơ®`ƪú+ˆuYæ}X€‚êTHj†ŒÊ÷ÜÍG@î̃áœÜ7æËX‘Q. ¨Á®A‚…ă% Ï×4öe¦ëf¯É́·mÉ‚"W 5ßÏÇçD0R»Á<Ü4w3ë|„oö“Ⱥîk¨üuS,8pI—ƱÆRv’óÚ£œWDm5®mà¹*íXqºkVÔ%¦IJ²¾—‹%'ế‹ù‚[o ưç<ߢèÚx¢ >WWÇVE\Wilj ơ¼\nÆ̉œH:{&¿*íU-BcÏpíe•GÛ ^h A÷È$“1Œe#k¯eܤKỐ”Ï“¨¿ß¢) E{đå1ß‹0P[ûú”›¼Ÿ‰=éxCMëÓ*wkbú¾¹Ñ‘Ô|̀<¶çh¨oz©ÛifÛ0ëñi–Áå/Êäl^åö‡₫3. •gRÅ)‘é›lñ•1ëbÑÈÓăjƯÉELu5QG©Xd½æù°ăWxùdứü _˜zÜúªb0Ú…(ăvåâḮe³‡¼‘f§Đù²Ü 2.«>3ÎÔÔªư)«9ÍEÆÀ‰“Ä¥Ë;æ…vÄƯ²³€t¯ô­ÙTàs…©₫¡m–‚œQ’ư×ohÇîè6c— OèăơK¤8«WÚvUÊK„b9¤5û¾Ơ7ïïXqW&\ ~̣ÂÎø¯êùYù>"̉£ïÊt»e5¼À¡’(GÆhú~x÷ïÔh¦¶Đ2RÆíU=Å.Ị̂JÅ:ñÂÚ÷Ç¥À¤7ă]á8ÿ%Ôƒ endstream endobj 637 0 obj << /Length1 2273 /Length2 17065 /Length3 0 /Length 18398 /Filter /FlateDecode >> stream xÚŒúPêÖ ޏÜ nÅƯƯƯàîÅƯƯ)î.Å‹»++Źܹ}¤û|ÿ?sïd†äY₫¬w­7BA¢¨Â djol&nra`fdâˆÈ k2³˜˜X™˜Xà)(T­\lÍ₫#‡§P7sr¶²ñüĂBÄÉ̀Èå]&jạ̈n(gH»Ú˜Ỳ<̀œJ,́́oæ÷u45óø{@F½Ë» àœ/ÀÜ̃ ₫¯å`…₫ư q€Â'(̣q€¢7(ö_ÄÉÿÀ ÄÄJ₫A¬ ÔÄJÿAïÙeÿ ÷́rĐ{vù?è=»Â×{vÅ?è=Ỵ̈ôOåzϧú½sWûƒ̃³«ÿAïÙ5₫ ÷|ZÿEÜï:£?è½2ă?èỬä¿è¯₫¾wǼ¿đưÀ€ÿ¦?ïÅ›ÿïææÿ€)­₫¸³₫Ư₫Äc₫K`ûGÿ—¹½«Ó?¢¿Xü¾wẶ¿í½––ï7₫‹w™Ơ?à;q›Àwæ¶ÿ€ïÔí₫Qû;ơ?¡Øß]Aïưư;9û?ÙßíÿGư^½Ăơ{«̃o û4ó/ºÿ€ïl₫Á•ù½tç?éÿBfnÿàÆ₫nîü~Ç₫qxOñç$̃o* ‹¥“Ù?Në‹»ư?̃)¹₫¾wĂíđû?îƯûÉX̃Ă{₫a÷îêeæô¯Øÿ³̃&®NNïor_Àï»ÿü÷;ª™™‡™ ü꒽ɧ놮û:!|w†½)¾y=tïU§n×Gd˜Ú́ -§[¡”±¯¨ë»bÔ7‚kÄ/̃ÇíM0áIJO>Ï ʳ{đ+3XĂÓÅÇBC„p ª‚û>/>ê6ÚÁ{¥)̣]¹ ÑïƯ%<‡*¿O„-í)í×rÈ ,zmT©²8÷á’ăjă~¸A›˜¥ô>L•Æ^ö./“‹*5'Ô_jåïF1rd«'é]å­Ÿ₫1sd(R‰²;g¢´C!ï₫ƒ "Äö²£êkÈi¥Ùll¦5t?r\æé3‹JaṆñP°1ÀD•x}Hgm¹‘Qqjd!^[¸ÅuÙ"!ÏTÓlÅ\‘i­°i¢Ï¬Tå̀Y¨¤¾{„JÍ—i32QÑsæœ/¬IE}‘Œ3W½̉ŒXË5 „¼éª¸rc'¤Íü!N8Ô¸ỤA#˜¹©ˆ;ÁdYü­ÚÖư·–…cÍtéj¯îµo¿w៛Èằ́è₫Đg)¡VŸÓ=—ßß'Èï₫ÚÆújAHà̉ÖƠ¹¿B.L±ơ®¡'ÖÓ\ųüÇR¯ñöÇÉCnWB‡Øá[ÅÑø:yW§%Y>WËØÅ ¹QÑ©Ơ‚~Å…(ư2_œÖ6b¨¾¾øŸ åS^j´“߉X«ünw%Kܱƒ½ö”x Ç`:‰‘—~L2&ÏbxtTb¹á¤UâQg¡ñjó~æXÉd—ù¾Ù>OçơüQ¢»€ œ¦ÏßI«*é3Ïr-ƘI!8–0RE§”úbà Ổ^¾Æ[{–²Rs6÷ ”¶v¡ ¶}Hx}|àX”®]˜.“.,b–äÊdJW Âà›́ÚÆäilVu ø‡Oà!ÔߨÖö‰ÓúÍ냑%&iÁ¢é#/¸å\àÁß•‡©uQÊC:¦Đ !Wçz3ŸÉ.Đ“HfH ׯ¸£•|œÚ—¾ÙëñztÇ^f¡8ê0:ßàđ ízh·vû¶ÙJ1ÈW“ƠEµjSûk24ÖdRkÏ ÛZ üT]ïJ.–™1ªH üŒ²(9Ùƒ ¢Öçz‡`èù:èÆ+ƠűMöY‡XëÆqG¸l†,O  N¡m;1„@°ñ[F™{ÍA­·̣}#H ½<e:ä“y¦<3V&˜KÖ/"Or,? 'Øjdă®xp~6>nW÷Lúm¿ä£-Ë•oG¢“˜sđ+₫ªơ…/®¸­æ‡ZÙOGOiI‡ÙƒeKê"ạ̈2ƒPƒ¥“Æ9…zÀµùˆ‹ÈËO/éW£ÿe\¿Öï#Ú¦ $7vªD†AƯôB8tË}W¼]¦Ơ₫ĂT3˜S}JÅÉơ¿ö—³‰MéØI®Emp»Ăxh2;3QÅëỤ̀̀ü„äîR7>K±>MêaÏø0ùûtjn¼²lSö%̃ÂMM¶J¨Nvt’¸ DM‘,è:1"éÛØ/=­¨º+ z8©DM5YÏ«¶´m øcÿI¿³gƒ i¸‘ )^öß%Pªˆ^ÎeM§¾®²†©r+•=¤œ¹2=óÎî:/†mpy*¢¼//ă‹}̣Ư iˆ¾2†°¬î§È§àbÂetèYư2Sç6œrD±;·ç•ß"“J¾ª"µL˜ÔĂ|a9I¦|öƠ•kú¨Â-¹r¡Óµ˜ăd~-Q¦ÿ¬ËÎB¶»ê†©ª5ƯDƒy€%óS¥DŸ ÉÔQ-‡§ùDÏEYÄi„4lJ₫¶‘‚ ïÔ@ \ñœîơïÄ)ƒ½ªbkS’ñ¦Yå› Ơí2åï´Ç3ûµ¦å°‚gÂ`†"¨˜(ûfçSuKæEÊÑ+ƒ,K¬¨9¾åeŒ\§f2wçûxJC-»"c®À‚²Q¸³  –_hR‹¯eh2{ëṿÏ‹¾tET₫̉î­jc‹ÅßAµƯ y:¸É=ÄLóĐûäZßçJ‡aÛdzó“­ù¨Í«ÂDÖ9< ë^UZ‡ªÊm ï9t?Z@#R₫>J“¶©NÊêüLÖüÊ\|X&€P6‘l:5a`4I’¿´#üËEïÆ+H·; ªj3Y˜áÄV||xŒ%÷Xµ–µ,îî?znÆN«wéߤƯ§8Iä0 »¼ÜRêT+0ªo2†2%›DÅđ~ÚóceÔú«„o‰*8îUæZA¨lTŸ"n.‰*Ÿ!« 2`3`]ü¾Ç]NA5¾VÔY:}\ ¿£é±?Øî)°[u³§ơ¥F7¡F̃yk.öéÅ¿‡B8xÍ2ụ́;9Á2ư+₫¼ưp¼+û#™´5RÉœéZä”|@Û–)aÔrµIN*ézê–óN‘¬ÙËjfE©øwŒ¶ùJ àÖcâÖyåMđ̀g^Æ,c5ơ›rtv2­!íĂ#æô¤ë@V¿¢ÁÚOO·©œ…@Î₫j¾q{†e€ÏûÛ TiáAĐ>ø‡ÓÑWË> eqîº<Ơ%DïxêBÊô ̣­ĐxñkË^¼»·›8¹7뾘̣<Äüxqlơ·µ‰Q·Ö hCíci3åቖ1”{ÿî¬/`Ñùă¼Zw: Ñ´–êë‘MˆØcXŒùíKÁ\¿È{ÉHÍ`gøĐm›o‡¤ÆEç#Ô U5!*ºă‹5s—ƯL“Ëw†¬ñ¾”¿EZkBuj:x‘sÂ[ù%VÛt’³(ûLzHrBkC—E®&™0ư ‘^€­o׃3ơ7~ï›ÉƠg¾ˆ]²Qô§„±”1×́(ăÂ6`̉–Doă:@RñN·B×ĐøÇî"ù­_ͤ@<°ï;–7Ë]X ơ×ñ*g c>{Å.pË®² £±„ÛˆG}—’Đă#³Å~Ùq•cºM _jØI4@›¹+,¦¶kCRç¼&ó§¸Ñ‡7Á¹"«£÷ƒ9O²Ó̀7ˆ¯ăça¨Îß¶ü²t?˜=D̃ÏëQǯÁó́]±t ̀¢¯¯{‡æïíJä-å 6đ ØV=9ís®öHt̀©6ï¼–₫ØU°̃s\2!ÎkØ~Ë pv£÷‰áê ZÂW…œÈÈñî‡=âr‹+Ơ¹{êKmg ˜ø¯ôM‡&"Œö¤A_)ÚÍ&la‘i~OLƒ1p¨.¶4´g”zc±ƒ|u½æ–9ơ‹cú`̉p{q&Săx#¼Ü·‰¼Ms6 ư‰*›DjïƒIuxØŒæ×M=3éÖc¼”q“ÀÈú¼ç ˱;g:´©BÿÏĂÍÎY¹Ă* Ø9‡„ôF.åVàơ¿g'œ^Û).ÅYqŸ-PḲJ6£( å|W¾—²æ‰ÚŒZÆèæ9¹̣oư₫tgƠ.„oĐs‰ o/n0›abs#ŸµuO 2,|t[Æ\¤aÉLù‘ø“œ́‰ăaÖûơöùËÁNM‹®¸ÛÚ‰!Bo€í<…”EÓêi¨5‡_ Âæ:ib¢¾­HĂ¹'JÇ:Á+1Í ¨EcQ<[†!‡áYí?†±pàw¥íØ}Z±Fl%UH^'2®Eë\9¤÷TyJsMl•ª¶ g·¨>–°¦đ”PsÓEcfơÚIÁ!­6œ¯c^§ªÉ¹dÄ 5 Ç „UƒŒ ¿³ä<ç’+d›₫EçuÈͳ;ÑøĂúƠÎÉí&Kñ:– ‰?1Ö8Àă²s×ளt\v m0ÁóKXeRpƯơ4;ʬ² ĐÛüXIä·ïÓo}°£Ë·~+»NG$µØ:_̣făo:£Í‹́[Ozåæéô©èÓ‘Ï8 €ß5¼-W&ÇÎÇ€‘³™¿&¬U|ç^O¥Ă½fĂ>/¶üüücÉ®|³ÑÏ+KÖÛQHLyÎ’œ&ÇK^EZvĂ“ÀZ?w0y$‘°<~˜€ˆfNuÆoFFûƒæ£"T\´´"–5¿÷å@ɦ[ÿ₫)l0TMw¸&û>Ÿåù¹ #yÔ•† f¨%7hæu 7ƒ6FÎ@ÉÛ¬c’׫fùë—~ëÂ6ẬnŒƠă·½âöp—ñKÏËưƽ›ß”ç̃WîJ:tÚŸ¥ ÛàéÚ"œïÚè·¬å@bæRˆvåÊ„µjƠMZȵ\_3ïåC±Ë‹̃rdP?óàë  “TaË Hc~>? Zb¼µéóæUư&°G4.Ü¥0Qn ûê"¤ ̃½̀,àÆÀàúL¼.âj ó+“¹‘˜̣ŒʬX^Ÿ²̀UÊçæ!„îm‰©¢™<̃[æ¢úËW5÷R±å'™‹Ëc>ñ¸̃aâ|”ỶP& °»/7Ú̃̃A1כČ!8ˆ§\ă#T-ÚpMư“F¦H~₫ñÆ»‡2 _Ợ½Â.Áo £¾Éç„̃̉Kf̀άà lù[ª˜́…ơAÑm…ógư0>x…̃1́ç#ôÈCek`¢k˜t:ÅÍ …FbG øU§7 ×%ÿTZåB ªÜG!ÇƠ/zâß6#›ç¬å)ÚDƆp,êmT¡kư©•T‚jú-jrRF 1•Ê!iÑhèvƯ@ä#68ó’)2̣ó·g#11äu6̉̃R^_cU¾Pœœ+6@©›Hªê2÷ƼÂ)h·>#Ÿ´vjzmûĽW*é1o³÷K¸áÑ©èùƒm ´ë ±"q0D¢êÎè‘9p×|.ƠptXF*¼ïÛ&öö½¯  >¿·mN—NơMúºXƠnh|6e“ #“ËMUI<ªùÅÍâÂg t¬í,(SÎ}O“7Ág ©÷¾ íbÓ‡…¬óÏøLÇfÁ2›äC]É‚Óo?©0±Ø»ë…ß™nƠ‘µÆô_u2=*ƒŒ¢j… ¶¦o;Èb·öQ=³ó–qÄùỉ́§÷(“IüRtÑû,ºiÔÓD·Ä°CèºơƯëÚø'v]Pz₫ñ'­ÙÓ̉ùÏuy-W³¸°`—£xj”–“ñ+ =WÛ S,ơúk8÷ñàÈ^µ§Ï+ùü¹©///æƯ*o¤«üOŒ†·xÂđ/£ÇÂ)DÏ£¦gñÍ7±íb¾`ơÙ§¡¡ûfh‡y¶¶Jè/ĐVöå!‰â¼ñx¬ ÏÚ^7vä)°6• ơƯ§p6‚£¼³(Ū£y mø(‘Gø¿3 „Ëë[¥|JRàóüײjÍe*¬l̉n¤œL#‚P«6Ïû‡=ưH ö¾5âJ›säĐE$ë§!JçăüÍTC‚£¦Á“Æø Œ&”ŒDIÙàḉë"ƒ*j)iJ(Uúj :å1æ'F?đ8Q™Eđñuû í̉™OEîÆW]ÇXÁ$Ï!_5€v)_¿ơ㧉mw1»œcaˆ`»éÁ³FÉ-^ĐésÜ­LßYæơ4©øKm˪¶•b=²x1X¢ĂT.Ô26BFè׸9}ê₫Áy]¿Óáßq¤đ3»¹Ưµkæ˜5Ï‘N¡ü::$cùæ8Kă)̉)5=…FÖØ60SN_dz-`21tÀè'V$1tÑ /pÿ»&6̀˜ûƒí.T8²Æ :¹EÅÍe?årH_]È®̣Đh¢æ\¯¶AO>tcé¼%IƒÛÁb@ÏN6Ỵ̈¥ªé¬d6à—a‘~§UH¤C¸D ßƯƒ¥?+ó¯ñó”Ê>Ȥ>ơ¿íû̀ÿ.s%tÄÑ®&’,›óÂuÅŒ?¦¸^}ÓV‡Đ[* * &×̀§H•‹2Ófâ$VÓ6*Çú‡¸wbIáX~öÑ:=óUÍ%)fn¡‘YVdDă—ð;Mẉ€́Âù½S÷ĐâMqqâj€†êа©Cˆ ßÜ…É^ägÈz̀̀ï°ujt\mưdj¯:5̣+ƒrEo»VZgôµnCç0@p¤—’LœËjNŸ;«…7)<Ä}ÆŒ®€¡̀¶µ[¸À4;Ë ưœÿ§pL<‹Ă"Rl¬+ëe£áÚô†µi3g›àW6&hôj ”ëjĂåeûÜ"´ÙYưE³ÈŒa Á3«Fµ#̉»0JWRÎ:¶×7RAÄ^ÏÓ›ƒ«U ÚX»̣bZØ®ĐBÏĐÑÛ.iz‹H„Z<@6÷´«W9¨°tÈƯ;Ú<Otnù̀pˆ^ñ,röéEFv ĐÆSF÷Íư[ÿ…ƠÎZ‘dûrÏŸDÙχ› ͨ‹Ô£A!··ÑÙ"Æ,›Í¦fR˜“ëÖ¢₫MêúÔp`|-Ùó́Án,^Ô<8†“¨₫z”V³ăÔ•ÔÄƧÚÀ7É^ ¥Î>-pÔ₫»A¢¢ï‘vŒ{ÀJǹh»ô*ưvăn±ĐP™fS®bÊé ç·¶Mñë¥/Hz ̀-x¯!p½V¶2Aư+£<æ|êG,›™Ÿ„R%ózÄÂâ )bw÷Eá­‰q¡ÿN"KT°gYiF̃²ó€Ÿ°¶ô £È»¶¥uDx³Cˆ®˜_eƸ¼ÜÓƯÿ,¼’çdöä̉[8©eúXáuô«b‰=†ÜFîÄVv˜¬è-3=ÚÀªđK•#ª4<UNôn DIÄPévQg»>K2¡›Pدëå$Ëá®¶.¢ÄV ­@«=Ü•K)đa5*Ù ÔZåNÇ{¡•6`¨E=¿ûyb†É8O¦_²Ẻ|Luw-&))áƒà½ø6•qñœ~À°Ù'ÙÄï72¯—Oè ·¬1HËó\èkN¢.ÀSú|“Úà́4Àê3¾sŸ¹!lr3¸ËB€_(ñ–\ÊY¡¡¾·Óȱ^R"~û‰8`ׯ‡æjV¦3á¯<ÚÛ6Æ@×µ­(°x9.)n9(Àßïw*ÔƠÏ0ÛØơÈa8c+Ktï̃x?OœT–‚ú̉û6öCâÎe¸wV“ß²›i!X‹.ñבäM*̀Ẩº\èA%d´ÉIiÖ×Dfa£“ÜÛŸ-M÷ùE%»Ă*Uë± ô>àË|,Wµk^vöÚ°%NÛ¡È]q‹ ^<>ÄS„Œmµt8Ŕ·p¸ôâ§C^çºS••†18Ú‘Å¿£‘ÑîR(´)¿˜‚>2ƯTÛu₫"­:íÆL³l6UÖßàß́í^ÓHgsäNk̀G‡—QMÀ-R̀^á'ÄCåâ[\G g¬÷6FdTx@µ&­½ă ¥V´ÆO®4:ƠăùI­P‹µ…¸YoV¯c`̉Cñ,jŸI÷³₫ ß¹5 ê'£˜—™¾.K*í‘¥> ‰h;¹¢4%B3Ê\éˆCæ!Så|[éỐ ¯ªmलúƶ¹|E(W̉Q‡ÖS}‡¯œ°*ørăü3fÅR»dF™À₫2|&P/±Umèq*™§H̉2Üú¾©¯s0›;ö âñ!ºGvŒˆ^Gs[Â{Ä´˜ñ>{á^†dû2{ø̃¿ Ñ&u₫×3¸Đ­‹CƠM2lN©m¼B‹ê‡€´ßY‡––©QRÙß.yÚ•»½ kÖ` äŸÂeçĂrEû ³Tah‘8×vNá½c&ùJé1 RƯËÈŒ4$X„́— OÛn45-½iÁ¯Êi×Ï»‹‡L{ûª§ÆªñÑ‚¸¥µ0¥HdTÖÓ øÆÀ Lä±zÖ‰­ ++uKê ¼vAáá;• ¯Đ =`N>ÏǶ¸ó°à1 u¿¦Óµ©`ƒ ½ê84;ÉÙC`Ư‡kè#™µăï˱‘;N¨+ºÀ~·)K(²|k‰?̣²₫Ávܨ>ÁÅʤ 7Iç >‹l9¾âbmy,uúá8×?Ô,wrȬ€,$¸ôĂYµ™"½đ•€Æ̀SŒØd3ü—¹]ÅÅTzÊÛoH́] <¦këçÔÇbœIĐX= ¸ëàSÁ‰RvD~T2_rơƒÁ®£›é9 å‡îoÓ 4¥¼é,Ï|%!)’ă&¡¤76 ăˆ‰Rß×€x †£ë•ç'g ÛqoâÔ×ơñÄÉÜ%jªˆÏœáîÇ×N¸W@TƯƯ=ûö-ü0ÉXÑJ+!mkøÁèë¸éÛo„™ÈĂׯmK€uz₫»ÍÙư¯-VYH«èWÚíí·I«ĂkÖ¿CXÉ£G?&bkÏ;Í{L[HÙơSMÛàb ÀŒû´ ;„&pIg‡åNØ84I0]7q¢²ƯưÚ[‹çvÎÓ¾\ ̀ôU¹ˆéDz528 åƒ^å•ö‡]¶&J¸É̉hƒ,î`ú\¶8 ́؇=À[ÅFPĐÚlƯƠ›6bR·‘Njn™¾y'GÇYMµ^ÛÓúU˜«3ñăÓâY-‡÷·̀̀²¦In³Ơt¹̣°W¿+@%BÇ›ø/±ówrPàc̣Kz½¶ª¡ QC|:GƯ}OÜ÷sB’<°¯TÆ0óïáö…Ñ×Öû†‰z(à¢áH^1r©ăjˆ­WÎ6ºeh §u|.tưA¥Áw±ßÖ̃¤?súÓ±aƠi[D¤:[V³]eƒư®ÉSZ·><;‹–NÏvxÿ8";0å8²fŒ$Ûz+D½̉ Ú¬a£A×r| ¢ço™°¬â¥@<䜘BMƠ²Üà‰}`M©.ưɆ¿~2-‰mz₫”]à™?eăă® ¼yú:₫v,Æ4₫$=Êd…­»CøÑu¥ƒË9î«Ü+i²#IY¢»œ#‹ÆĂxlºÊ›%QdÑÆă5[¶êغE´.̃QZ%Ö€é Œ’Đ¯j©†vOµQÏ‚F§}öRº́pw€ËŸ=Niü@¯ßÔLKyƒ½î~ëäÏoß_¾g*Üvp_…›+L“+ ù!rÂ-éל̣xÊ zgÅÚe;­E3E×¢I¦•3”vtÄz¶WvĂmá̃•˳‡†‡<6°yŸ¢”>b’Ë̀£{6.côyoµX²7Yâ×#v´;‡[#̣±o6(%Œñ—{·5#‚¸‚„§Ø¯˜m'Mÿ°N¶—O„ l,› î–ư‘:»ǹá¼}Ưäeœprß!ƯMZ~ß#yâ§pù~Œ¨æ¼4µ«6¹…2´éJ¹₫c9ÖÛ¹£U[4™₫öéÀ–døôñÍ,…ñHÈc­°æn¾˜àפǜ|h‡ äØI„2öĐ· ưnkÆ7B;ĂGG—Ư₫²d8­z?²†—Vê1!†f úd"đ!.$qĐA„ΆÜă×K³:½ÆŒ¯_Đ·˜ùp.¢ÁơqOƠCàlKƠÎy•PơÄF/H}®̀₫₫G•W»Ra†Xæ&«[YASsl•˜ơ¤ùü…Ù3A×tñ8Á̀øi Áë·fÈ.dñØÚ‡n"‘HED¼ ›EÅ|ađ·ưÓñuô]Zê6ó’3‰KZWqqnMùó•”̃ôíÉ̉%V25Ø;HA –/Ă«…"!'ÈưQXtM¿@|D\‹$ñxÆ»“KMx×qfEßæÊ§Ó †¶9 K¶c:¢ÜnÅƠg.!Ç‘8ÜÓ tưÜ®h"ÖƠ÷â„y:Ùg/m!Â(̣@ơítŒB{Üß[O÷“xC‹“ü{DGÖôwÖ`VVL1¨¯e¨úÜÔâÍØ\äfnă qÖ ‚Å?a£mÆŸE§ÍØl̃|‘ÁkØØÏI«H€øÙ́̀Ø¿\?ËéÁ[¾ÔSóF¨aw̉½ĐH¸JØyzö©|ó Ô´•¼HX®Ö@ˆ™qEÖ×M¬;¯Ùx:~OÉ…kÀW ›ÁBû(X…Zưd1Ḿ䬹ẴW…̣ û¥ü7 O1̃m6d.ŒÖĐåfèë˘h°d¬q§­1ñ‚XEè'u°™a8Íf2™`1|½£:kH¶‹8˜D5+ºtOßíRÊOË{UÔ¡R-Bz»¬C̉ÉĂüî0¨)¥ÑđCHăt'ùÏëßçÆÑÓ@¿±Ơ}Đă  Go}­1eHѹÈCîÎ̃r\?¸VäL ~Ø¢~[Tå߀÷¤Lư¶ô{ƒr¥ Vƒ¥®À,ơîU™·ßˆ#8³̣ÛpmŰĐÙÖS̀}Á̉F RT©5èäλ©:ÏGñèM”ºW0£0Åê2*UOøíè`©ç{̣₫í´ávhđufa¦Æ~ ±¾ƒz¼Î®• Ơ–»oE(©3ˆô‘v†h4„"_t ¢Ă”ú¦Q$ổ\|% ́JyÖgÆ~ÆpWç^xŹWƒ·s,¿³i+oO¶æQ °¦×4ÅbÍ|²#Ñåo·»Tnré”&hÉsÀ¢5¯Àl”‡(ïˆVS˜ÏîÂ)˜pđ‚ûĐhơÛ&QÀê%K–s¼Ä9=Áµd¨ú§ –ª\M‹°æ/ñïiF5͉=!ỴƒlIºhk+'A`ù¯}ø ¹kŪ7ßTʽs_)ù.â`YNiê8bæ¿>«ÌÉù=Ô Æ¾DªQeº(ѱøóŸi¸ë1W™‚‹_Z¦v²ÁƒĐO÷Đ¯_?¼TÏÜḲ7i’20Øø¶0ĂÑ^ôôDréh_r.Ï7Ơ ‰‡Â”9»<¾¶Đ5¼¹-w:­ỵrX@đäW¥ƒ£Ø,P®tmJă¿áKÏS₫ơ{Ï›¥˜5ñZ‚Û{Ùæ¯É……‚äVE×¢º¤Æ!h*³“ȈŒºÉ/V¤Ú”H,Ë3pù»Éeó |Έ D`+âYa!Ơè8èçÊu·‰?>®d)ÍÄÉ@ª^ôÜ»Rƒg¯Í‚ƯcvÚÚ‚5»%®I‘Ÿ&³çIÊ\]ø‘º.¨#8¼Ú8C}ü^ dÅyK—¸iÈŸv‹| Z6Ààן¡î9†ëM…æYÉ4!BvÀ\P¢6—·<JEâiJ¥½¼ahZï{ÆXĂj3}ëäÔàư¥¥Öl£0‡Öoúú„R¸"âơü}Q.²R½ï¨5mg­##=œH >ÓÑ·¿¨—ïơæ8uשQdƯùnơñàiG¼ TŸk±`x*–¡»Vbæ¨Ï¶¨¬4“`b X” à́lFƠ#RC>Tx?œüđ±xôƯïÚ’>mº%ɤRȹŒŒ§+)l“…ͺNư.¨]ƠËƯ5)ë9„W0>}l!¤{½nßÀ ¬–î$ăd́œfׯ½¦˜÷¸¢´Êe¾ù¨ï¡jH  §µÆ¼Â>n¸“Óœ·V²ÊüµsEl3j’GTp‰ùâÔG×'´‰i´IbB ¹L̃â ê–Â!ˆ…ÓƯ‰fYV‘{}¨O PÍĐ³ÊÙ£â¬ĐQy¤\7c”]̃X]è»ôߣԡœCü‘óí)L'¸«¢gѦÑÇó÷ós–̣P Ù¸ô û*WÀ•˜±t–øá7X Oß§¦Í9ñr£‚º¬ên$±(ŒÙLbŒƠ¾,ÿxWVˆÎĂÖª±q±`»ÇNçÇ'ÈNcൺPwhíÑ £x₫C„£„ ùÏÀP~Ük\U₫ ,÷½„6¹Jl_E TƯªç_—%y5¢“ÎW¨2Ŕ¦Á̃”ª¿$û-ÀÎ,O¬S8i uÓa¨È#€xj̀uJŒÔăX́Ÿöü¿#ñXÑŒ:,odI1ûQåf?ëElụ́Ă¡¾ƠœSæíX5ØM-/¼&¦ñIuBjSDt­’x¢Yà’‡»™=”º5KYa)|.k ‘E3‚Á–MÚƒÓËéƠE.ùæüF1SƠü|¾/z13á‘öy—Ù\¾\7 ¤ÍN„Âïº₫íî1‹‹’/jÛ¶è"yx̀&‹̃¯Od¼w¥—SYÅÅz>^lƒ‚Ê´ØÂÍ€D: SÙ÷̀!m0ăù8´ÆÆV0Ê_Œ÷y†‹ThÖ+Ù¤ï;–U‘Ômuu˜â´>₫Èϋȩx 5ØIú[ —›Cɇq™£̉/}WØAruM?ù®É‹`é ¶¥tđÅe Ó¶ÂNÀ ”.#óæQØâHƒåº—rx—v´Ü°ÀơŸ*¥ƯvÎÚ±.§Y]…ß21iCVë,£"¸‡̉›î%ø©÷Èq2ÀÏî˜ơ?4<ưDºñ4ơ÷ Ó&¥Q¥¸²wÆ;đ4fË=ä¯w«`¶‚±EÜNè*„(z‘ÈûK‡¤aZƒAÈ#!Sn êxÚø:4ñØÛs,dn¹Œ<ûơ3ĐíK¯¶>4\!}L¡3>7+2ª*’É6zfCíÏͶ.Â0z4eróđ;êx®4Ḯ±c\ñđ®ÅsGËlxHùeϱumÚ1ÎTHçÍ1ÉE,‡ia¬%̀£VèüH²¸-ú½ÈV&Úư¸¨Ẹ́7iûÍ7²X/ïLv₫U®đEÖWm2±XÚ¸åZ7»‚\"‚L¦4ÊeÆ=́_=2 'XÊt®§§[ & …’AÙÇ3&äS4“ uWƠ®”üŃT=ÖÆÇ¡Ç/ÈŒÀ˜vó²ˆ9¸E\Â[éu¯ê†XôÊNhLÖđÏ.åS! äđ§¨È&û!ÓÔj3¹&íMù*pđº̉+ñ˳<æ8£"­€‡¦INßÎÖçójZr₫pWƯ½Œy‡äZáû±„EÇI„ḶbZº™FW ×{Đ—äñ“/ß6?đJƯ)€”È{¯̃æáBp?µZ俤_£a€‘́*dêí\w.‡ ‚µ¤ Œ£(/ü¢LÁéà®C½owLÖž——°Ó§ăáØÆ—0‡W pÚ¾´ °æ̣ˆhúÅ‹"LÛƒ²=ÚaƒQÿ+?«Fa¸Cec²[UvXd¦è€kµ\đQ‘ȃüº‡Të9Ê‘Ÿh×ùq $9=“Ëc -ü'yÓ:¡ Ơˆ08©ªÑÇ-sºÓüµ©D¸o)ậfË=¦óÎO=§GàBdmáW6û¡YÄ û„€H¼‰^åG<§LU3ö…ªVDJö[埋O<åÓ-¤@m…“Èu~¼äü3D²»:¿¤7‘ơa Å®ü&Só™'ë_Ë¿‡ùƠû/<éæv«sÏƯ¯ú±ˆy‡̀gÄ?a ï¿̃2‘•×OÁç̀)€ù%T]I‰©̃á?:ŬȥBzV#ôÀ•éÀiU"±¨g†‘²µmê>ˆU­æÂóFiÈÙ̃²½ ™"iëđüC2øX(4Ẹ̀I(¸ \!Wê¬DnÓXú%´;C;Ÿú-—i„Œ‘-Î6L¡Œ“s uµ.–;ù"‘˜ô'ˆŒa:–›Ø9̣Y«[Ëà~@$&đ(ö7Ỏwư⢳‚\o³ª'ơX*~Ö`²ÄƯSkUGADfÎ\u\jé¨/*a$}) 6Ưq̃)e.ưÉWŸÎaĂu5Ô2hỳ$Ü¢̀H,öéZk |fÖº4*ƒŒgX÷åX/LÇǹđîz`QḤC>·}‹©óHçH¹ƯÏdáh(ч]ÊàLºóÓ …̀Lí¨@ IRm¤RÙ/¾iÖ©ăÔ->'vÊwˆù¬>ṣS~_%ÉH,‰êgôÅ’¼ïÊ o%ƒ¶ § ¦'E–í¹ØêÀ8)O¼GvdžÖÎà̃ŬŒÛµ[VP®Oëh)Y ²HwK˜Sú<¿Ê“8 ˆ̣ª[%6]̃Á#S/Ÿ§øºÜB)Ÿcw‰ÎoẠ̀̃ßpđ-ưû×$á©^Ëæeƒ¥Ê₫Úxg”ị́sö¯\Ú4Ôjz‡Qpr#ûE‹!Ưa˜¨¸¥?(KÍâBÀeŸ?·$Píáè:̉©Q¬æægŨ(½±e©ŸQ¨?ÖZY[¦ˆÈÓº92U¡8”¼†MƯ¯wF̉2¬'’í ó¥i3ă~ ¾)jÁ€ºéö `Ûèăcˆa?÷Ôibcy¤ÖPˆ¢8?–1e§Øeô¢…¿”dë’ˆ̣/sWvƒY¯K$d ½¥î$tă¸÷ư¶̣™ÁÍ¥@È'’C8¤a?́.í$¦₫WƯúK“-s@ŒÂHÅñ½nù„ü!Ѷ$R†3ÖfÁœç3/? =Ç#›̃ đÅW”ÄVư>_Ööæç7‡²Ÿ¯_œ̉Nœi ơDsf ,(Ÿ"×i—Đ›Q#èÛo™Ô›đØídj¹cêy}BÛ#fi·ºz„Ó˜{¾Ø\uE·̉m>zÁ[lỌÜ|¦Ơø0ÆZv'¼kb’Zœ̃µ₫¥`Ø¢¨E$xÛb„Ư2j¨Å‡?5§Ÿ]|a«\ yÁ•ê¸<®iscë8´ä^ûæˆyă×oÔÀ·F«[Ÿ̃Ä¥àSN3Y—¶₫~F¦:3É»Øz‡LâÑâ-vº=†–\7₫2•×ùlâŸD2¶Êă¥uÎÎ_Đ.Q‰)l“qËî%) ~¨d$…®ÛÆ'·æMÖV|xÓ°Jx¤œLGŸ•¦ơíç^F÷ ½²=r1|ÿ°*(®cßp55ÀJúlïZO_q-%₫Â4­{ ŸÓ.Ể‰Đ•\*è9k°Q¾óĂ—Ñ)ûTÙƒ•çÈV«Àùï”ü¾1­%¤ÁGÁ fÚEƒ^xa*VÛj±Oyˆ…ºX¬•n9bpµ&Mÿ¸3«[R“·:°êYÑFOᄂfj₫eSWØ/ Y}Åwg,~54^D;µY¢ỷ1æËâMôyŸˆn¶¸6éUfăHY>¨ÿÉ{­Ëk2H/½cÚY`Đ`\æX­7¤Ăpr߬2Ó•¯CÅ”,ïïƠĐÙ½d₫ DËê$£èYVƠ»¡₫}éÈ{ü›VR æ¸n_P^TLj́î l+p‚Àü–ôÊ¢—xvÆ2ùÀ m—´zA†}MÖ¦ñg_´Ë°J/¿ÊLµºÉ̃gf„¶̣ú®#P)ƠáÜĐ³;І:›¤ơô­Å ™m™Đ«¶m̉AƠECdƠÈRÙ¤SØÆ9®µ¯ùœ³áWz™¡„ơôGÇØÏ”™p×ÙÍe³®³+ÉÂÖÜacß°|“ï4e5f¸Ú˜>ªåëxÑ øéΫ*ú^r¼°W¢öX½¾o¾©J§¸Đ9̀ưG`¹₫ô4Â4Ù₫o`|—’rS+o44ä~6‚\L¶̣ZùĐ G ƠekÚ!?ơ¤½1jCÄ©í”gÏ‘¾íq­Å oçM…ï˽¿¿ôÍ‚ íÇF̣(C ßVÆ̣!8MOôtpú‰‚›ˆø Ø ë1Esª((–!CJ‹é²Ä”|…r´DHZ:™4ÖÎ á_CF'îăo^¶mëPdñ¡1Tâ¥us~÷°½tÈ–¬ÇŸö7’~^ˆ&PùâdX¿†Xdz¾r7I×EöÅM̃¼;å â w„C6ô–“ñ¥¸Y߿פơ˜Đô͢הą.ä§`09Ad₫û~é%¡¡Â×c‹BñWNJ@t6…ä†X†“è*2ơ}.Y¬s¡ÂŒ6ÚÅ èG̣–ưóŒ üÔ-u!¢Üµ— ¶Ï! Đ'ßyßËÙßeY)̣ƒ ,2ƈ²B.G%”y³WŸÛ̀‰ë¬;ªÄ ‰!s6ṃ;fíàŒ̣PơééÈ”skp{ÄâFèư<ª| ŒQè×t¯¾Kˆ0@çL₫rX> ¡˜¿ízƠånßq/û©áè2âM/'ó­¶Ăú⣰hmu ₫¯́<¦µ ¸Ízdă[·o1¾ÖDø»oĽ@eâ¢J’Ñ&ÀÔ®†ˆ©ăó/KAh$̀‘æb›¼zC²ơ5%KÎqKˆñ_—á~¶0DP5å₫ùä7eëÓIx—)Ăn’%TƠûí7óñ–†Tü5×µ}údÔM^P2ƒ{ôÎ}´iñg""¤$[rơ± ßçz[ÀÍit6 ù­íÜ3{7/³Î¥đªq³? ’ZÍ́0} sai­ ÿ;Äù₫¡•#ͼñü5é¼¾”?… Ù*đf¿}¸¬mßư4Û>ˤàH~t7~u²ă‚ÔƯºfç̀ ÷HkuSQïOOly<ÇÜ₫Ô¹Ÿî-Ûøl½ ₫w̃›KÈho+™T`­Ÿ·&ñ̃P±₫<))ˆå]˜{Êr/2ÓªRö̉))ª,‚­Œj+S ju[zR‚0_§QvÏ>ĂÇ÷‘ˆ±q~/ƒc÷Èơë?XhÎ ªyƯ‡~‰çqlI Y8Ñ­`(ù4䬜3l"$ÀU=Û§P(/!†æÈ¯æˆÜ½ß†_«Ág̀ÿFFÆÛ`¡åêN“·ó›I¼~0Ïhºf¯‘ ?¬aiN•Ö§[ßBèƯ¼ƒ¶)̃—ävUHj6²–Rçc0vµ¿Ö])ŒsXÁ,®ËxÈ|~"É€o)h÷3—,KgaOº¬uÿ˜HöT\(ùØ)¯¥×i•+ZÏt–û»¼UO _¶®<¿t*M”_„à{´E¯ºÇÔÿ5ơAœûU}G©tÄÆ₫̉Fûy¶ó°ÊÈ$µOÆü}¥j¬F‚Q< ¥ü ú%¹¼ô¹̃7Pmv%—Ö\–eO¸Kb…5q>&m(Äh¸Æ EŒ^:ÙÎ ¨„7£÷ư_“ä¥Ï_̀„{SäÎĂMX1iÄ9­|Ï Ưs³Ê0̀ÄvÁo@QÂ0=æ¥Ư˜Ê—,T²̣ ¸‹ºÜ]èbm>±K£W¬QØëÛ£ÿI:Ø$y Q è[Ẽvª#|\5T»ÖŒ5¯è\ß1tIL³ŸyW½ jÎä?Î5ïÇïÛOVxGT“óhX CµôVd–’…—aøĂê£ k¶*Cñ—’ 2WL’Úg9×!ú ăxaäfïx«&«ÄR4³¾ÆQOÎ<ƒE«“úă|³Đ5LJ̣R‰ÁX,º÷{î–€e¶»ÈíỴƒî¯sX4$ư´9̉D!đ¶¦~W<“M?¯ˆBU6£ÿ–ó‚`z'½•{Û«ƒơˆŒ½é "Mº÷¤ƒQß`ø›×j/Áđ™^”<_=lÉô2đqÍÙÂÁtµqE©]ÅàCÚ¿‚Ȉ28›qlêÀøûJvøèD~æ7úûƒ!¸[ư’ä²³2-VƠkû¥Îp©çèà«QçƒtèVTCØ+=C>‘âp›Đ½6Œo•¦R-¸̣5(â¡o$ »)qaLç'Ÿnú8êˆ{WóöCÉá&ßÛ뿾0+Gu¦́™ûÙ§JV¬à¦9övàê'©ä‰$9ºd6ʆRÆ­º°Jñń(F¨ ;‘6¬¨èE“vĐ¨Æœ÷1DŒ¢E+Qm ;¶/í{QÚ̉øê=&p6µ´^³ñ'ë$?đÖb₫¬ƒWƯPâ–éW6̀¢Í ª͉ ƒ±°1ĂS¹¦]—%T(-&.À5.̣Åÿï±É̃?Ȇ¢¡î ꢣ§Ü~‚Gĉï¤Íˆ+Nüñz¬°°¨Î'åBd‰©ÆVŒ7ôv7́ä̀¸zo¯÷’̉F¿$­a+gS§­‡ÿ¬¹¥ÀwĐ@SWö!§P¯9óí§S?C•H¤„¤e„ Qè¢ü¶ÓéK¸ .™X¸ûÆg¿_Ï î ©¼+·x>‡óôß@« ưÆë{O4™vÅ₫839Ê>ru1™€&éx}©¢oøÁF[ΫlàÚ‚Hº±WƠBur»ßnShI·…6ñ¾j´`§SYT§q AĂ(ÅΔi.”á₫”“A5vđKÿ öP'Nè==Ù̉ˆ$™Yv3VÚR²®O>"ë¹ rR+af¬4¦#đ8ÄwÙ³fôKÛaxM»º Đzư Ă›üñ–0"À-âÄ×d Í¿Ânûv·ú™ é§¹6Ióx0üÏæ£„,>[Í÷½ËØx!Ⱥµ‚Á©}/éYp…’í§`§·k?6.•0‚ÍÀƯy¡q§ÚS´0âYHàÙ!x‘]؇XIR<ÿÉ ö&W{̀iEẹ́Úp’lÙ̃ endstream endobj 639 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚwT“ë²6‚´ RD¤JD`ÓIh"½÷^U@I€P’„ ½)½7é*½ƒ(U@”ªt"EEéEàuŸsöùÿµî]Y+ygæ™öÎ3ßúÂ}ĂĐDH †²ƒ«£8!°0H¨¢§§A 1aHÀÍmÀ¹ÀÿÖ¸Íá,…”₫„ Átª¨‡BµƯ]€`1 XR|K‚@·ÿ¢0̉@UˆÔj£p,€[…öÆ q„<¼P> øöí[‚¿ÜJ®p  Aơ 8G¸+!#â4AApœ÷?BđÊ:âphiOOOaˆ+V…qçz"p@c8ñ€Ă€ç-ơ!®đ?­ ¸¦́oƒ Êç ÁÀ…  Gb .îH$dhé Đpäo°îo€ đÏåÁÂà…ûă}üå BQ®h̉tÚ#\à@u]aœNAÂÎ,àñ€ \ vÀ¯̉!@u%# „ĐáŸ₫°P Ă c.ç=œ‡!\³¦‚ru…#qXÀy}ª J¸wo‘?ĂuF¢<‘>Kö$̀₫¼ ˜;ZÄ ‰ps‡k©₫ÁT€ëà8 Hê–˜”î„{AEΘz£á¿Œàs5¡?4 ´'´÷CØĂ ?,ÄÄaÜá~>ÿiø§ƒ0´ƒ; €G'¨áö¿eÂü1/ %ˆ@?0t₫ù×ÉÀ0 éâưoø¯‹¨˜ikê« üiù_Fee”ĐGHL($*‚AâRÀ[„ƒß?ăBêø_-¤= x́¼^ÂEư]³Çđ₫Ù>à?ƒé£Ô…yÿÍt+JøÿŸù₫ËåÿGóó(ÿ+Óÿ»"uw—_ṽ߀ÿÇqE¸xÿA¨ë#¬° Èÿ†ZÀﮆpwưo«BX%¤̉B`qaøo=«đ‚Ă 8¨ăoÚüÖ›/œ  7Daç‚ô_6–A ,›¿M,aåp¿y.Ă KơÏ:ÔṔ|ûD%$ â Ÿ I}À„5…Á½~±("ŒDá.@BÏ~@{p>h ) 0́\øGl¨;CH₫‹„ÄË¿Ö÷‚Că(¨L°SupËA¥«§Đ̣ ,éfêÁQ¡Á‚û¸.µa›…x“¬̀Igê`ơûNmúÊnÙ³¶}–j8j½Å÷„8ÔW8́bÇÏö.Œ&ǿ³qÓ4=±HV¾.]Œé"2d¢m§T€9t™pÓø₫UƯñ1Á“‡¡Dư–vH‹~k{eI¦.#Ûmó/ŸŒqMv½¦Ë;Lå|r}´m‘¢ŸÎ©#Ûzˆ÷¬ ïéë¦ëd¨íñpù;W(NM¦—MUœ¼Â|:ị̈Ïœbtz;+°®çs|ÉƠú[K[Ö7xÛo9Ú&ÚGƒ¿àÙéĐÓ Ê©˜Üü•HØTvIC|Â>Ö¼# ¡ùz¶́»³vXˆ÷ähÇĐüOw-ËwƯÁ¼‚zñr§¥K_üê¸_Æx؇7ÿU™L·¤&À˜É·îg”×Íå’5½Ç2j!j)•êØb*_4};¸9à˜µ"µǗ²HƯç̣»{>xñÓ¼íÖVeI·(d }4~¾fÚ7½àÉÑ&XäM-4­*Zï麰ç[áµ`­Ûă*ô+Ă·¸J|ÿ@÷(% äÈ~º̃Ă$ÜÁY6µØ¾{½”8FT¢Ÿûüh'ñm7ª…H àQ}´?Ù Nêеx̉g†Wè‡Û${̣º¨ˆå'Ï~È7§h‹»*NŒÅêÇ›øz}Ẓ›—èoÓ-„ Ü—ßé%.(̉8ú ]™â}DưÁ¨7h-₫qt‹̉üNSNßHëè×K-%r·Ÿ~ÎÜØs`eÙΔ»̀aÙjĂqfw†²¹ú]™Í¼`î¨ûa?yư–'ÇWfâ¥ú¬Œ×ó­5Ô=u¬A_pb÷&Lt«É3ZÿEÙˆ¦ü®ªßîw©¬¸®»I—[¾ÖVî•9”\&kÛµ6ej?ƒøÚ¶:ÆÛ=à{åy7hjÉrJü^}‡è–÷àJª#³ICHé?zô©Đđºưø} äxÜĐÅê"7_Û^EoÏ·±ÛÄÀ+jø‰ñ¾ÉqIá†Û|z̉2”CMÍaÅ̃=~́œ+x?Ú.>ư;¾¿‰BƠ"n£L¶¸~…”~ú¸{đ¼)04I7ræ‹E]µh•©zœù<‚¤ƠK¾Ï₫ƒfÍ‘%‡µ©Ú̃+§tẵHcª¥%Æu`z*팋Ô₫Ît<ºz''#Kó†ù₫t ¬₫F}€ Lécgúr Å,ôÓ×Ü2ŸƯá đöv@߬ۋ}EóGûßêæä¯L.Ơæ~́E}3öLY„]Ï€7mD¶(#WÙÙ^11zm¼́œ†[™¼“Ồy+`Ë 8ƒk1W’ḤÚ`ô8"p!°€€ ™gú¡¢ÖPdaO|ûLn“ư-&í…‡÷T…ă}₫W:U¾V;ïFx^©cÑÛÈä¯ëŒôđ~Vx»èZe§$¤¥–î2üîZº_,‰äSQ? Đ7óJÆÁÑäS"Å’í₫ư -gåøđîS—ọñ³wÖe?ĩ©́¾èåAỵ̈_À’ºWg†Ă ̃:¼³ª‘±N¦¦ç̣SAcg–3Ơ’>óxÙ™øaÚÎ\Íô™“†­Ăp˜Ñ³ªjJ̃¢Ï2ư•FÔfÁ*h»Ơ·2*D·ák<ê–¼Q€¼Ÿ!‡±‡E ƒL1¢È¯©-Í6;å!ätĂö³ï‰KrJÜA3ûq1Î"ñå<»—̃ —Ö}¤ ¬Ó½k~ï™Ưñ;Ù– ÷'FyµQçê€êwºÚuc[ëôÄ™¥Tîe,ơÂ\L5Ùz‘ç̃p³îØ¥‹Ó™‘¨1A_k`…uÚ̉ +¾)pF¿œ'‰%Qc̀ ¬X*,r›X¦gHëÂú;u|"WQk€ÙGb—ö’^nó¹́”̃€jO¿ª‡"5üÜGSvIÎ ?ïVy£¼̃×;•Kñʯ6y™Jbå]LJ¼¦Đœm¾úP»ùú!™G/«3$$×’?=`ŸZ@Ỵ̈Á^‹Æ̉YXQl„»åÇÓrÚ·gåơ¼¤mVB÷nD3_Ï̃Đîḥ±aŒöbëØ$ọ̈˜2Ùéú‰ÈJ8ÓaÚ—3̣̀38½Å(ñ3ü&«t̉Á<3F]C…¸º¾kú*å+&z{cˆÍ1êIù¤ËtƯïöĂ—/-ÿăÿàtÓ¢#Ku]j5kkÄw+ûFƒzä\ß@dă)ËÚ¤n‚ŒÍ̀(Y[‹«¾9¹ăn/ïG&FWc·Ơ+ûùÚ–Lñ₫öă´$·“ŸKÖ|ºf>Êñ÷R½ØxÊf"Hª~¬DAµ=®4Ú5çíÂûpQ÷BÓ;Ü‹\’M³Xúo_V)Û™Ÿ»*ó3Ç2ÜRk".´0pLMS©¹†^aº Ñ$»ÎIa…/8yM+2Z¹@Á¨*•a+s^©­‡ÙmF ª”»mwđ„ܹ²¡•ŸÑ=zó̉jª₫ơĂ7gŸá([ø…f ́ZáË»Ṇ̃Lû1•Á«dUOÇ›,H÷Đ¡£ÛÎdyAƒ½J¹´¼ÖzK̀èh(iö¦cï– $U¹̀¼{ï-ǶSr/¡ÈŒç:}Øư: êw6‰D?~©ôرƒ¥ ynKªư6áÔ9ª¥i@CÍq”gUájP0ÿÊ|9«mRÖ¢âí¨©(+EƯˆiµ1ê ¾­â/₫Wûf2¡BjC,Ë! ¨¦vŸfÚ$–*Ú~¾Ml•₫EÇËM¬£p₫ ®˜½,c-ö½ïÅîpP₫€ÜZœbEs¢đ¦èưyLM¡t/»¦|)|ủp`¦fT¦bÿcχ'Á~®™kB?êô”ñX[¬_lvôÄI¶Q‘Á&Û"Bœ’½¨̃Lc¯öúyË·¨YG+ [» {ëRé \¼³[½÷ÍÄ®T¸¥×în.n«r>?óh‹jÜu:¥#QHÍ9îWbiX‘.ÁJ·Z÷°Êh–‡¼¬Vpi«­†2Đ/îïÜ€SäO­ áÀ>°ˆôÄÙɆ&%LŸ8‹,û̀‘­ %¢2s¯?~ÛM²ø¥PJƒ›.=Ø̣f£»Aï‡ôḤ̉ä5Ô$`ƒUâÆ³ǿfPRä§IÅÉơ₫Kª”#7¥d.=x²U{¶½Ès½RÎAå{^\màŒÂáêÆ<¹LŒuB ÆŸđO3¡"B÷“ªc{URåé- ‡GM©‡oX¥i•ånsí’ÿèÙ`âÊàoŒÛ=êuÄĐ́̃¢ä€—ʬö_¶è.ùïkœ‚ÔR)‰ fÁKơ…1^ˆÊHógn—â+'–Ñ£?;è_đô¶·ÊœÆº¹~;UÈ₫X¨S´'ă³»kÚ$₫6´=çơăbư¼ÍQÚy²VçùNؼ×+-G5¹ âđBëxk Đ4¾Ưºù›ÖĂă¯¢3̀å7© Ă.¦®wYRV¦Æâ¡î'̃MfÆÎó$±„7’º¾ÖçoÛBƒ}[îæ¿́â]ĂÏ­»úx¼|Ô¡ăÏø‘¥%RM«`‰§²‘Á9Î ed­‹³sדª—n¦1_:˜ùZÍrDÉ ‡·<ûƾ›wú=¨:¥É)ÊC*„¤̉Ùô¯Œ°[Ü»!ç®¶m´–˜BÁ»¡*+SăTÙÙ×p47¡µ|(e`Ï«Ÿ;VªuƠHx«ỏ íưÙüC/:³xkLåÑ}åÜ…¨ƠJ¹ĹṃC¦‹[¯¨ơL[>œ5Kg5TĂ₫E¡x ÑÿAu?&uë2ĂU:[C“39™3µĂÖŒ íˆ|Œ—(%—å‡h¯q´X+ÑÆ§»fOJƯ‚Hëø‰ms1À§ûJTe fRƯ=]¨X~4öÛ!µZá‹s±"̉H`{@Æ8.™!êư.´‚1x¢̃ïú‹Uµ:æ¦A7ŸK±,Dg'¡Ơ¤[=û²²‡Ơ ôT 9¥rZ»kÅÚ=¶ßß$̃á3öÚœ_‹%éô¢”t,¹IѬªÉ¼3ê%†Öù¿jbÔ.¼´Ú¸X(ív‘±»×Ñ[g¦öT]FöîYÎûŸ₫¾[Ïæ(Gé®́˜`ÚN8*6•:íÖ[ẓk—\J¹]đ; tˆ?ös‚ª¡¾¸UừÖ‚ÚÍÆÈáư$Îơç›39;ñ&¹G¾ÚT|g;VYÉü‡=̀Teùú“7­ 2N ¾%½ø_úivMă}Ư«R¢†tS®U-½½ï(¢t)Fq=vßʆ¶›9r¶’,Ư¤Ä¤q8ê+ƒRÎ}×y«d²v‡I™9M‹9Lá×eä¨3.jL=x€—¢½e‚Aó„VsE8ï.½U\¤¨+J‚è„¿N¾Æp³¯î{œºcWñézƠ%œn˜ÔP(¥/Ü÷ƯÈz«Áu¾9·÷Ë´êI8Êdƒâ|9¯êÂæ.̉¨IêE6+]rg ´')Ă·—C•ü˜XQ-xß§”ó²‰~ơÜŒôÅăö¹'’aNÊ“‹R ! ÁŸ—UI_ÄűY>ÚñVMœh#wµ(²¹o9Köơä£Ó²§)ë@@ ¾ńK!aí,S4§X¯’"Ï·â˯ŒŸF‘…·'£Döă†X¨¼¨’¶wùoƠoj¾³90’Ưa{` ‚L/ÔL9I¤Àî`’5UÁœ-Đ·–Ư¼‡e{®/xQÉíez„_ü©ñÁ¯̣nÓ7<4mt§â‚ø‡«ùøo©nẓ¢…CÔÓ §˜A9‘*6°º©Ÿơ±'sÅ&ÜlxE•ê+T Ơ¥½¼Skz‘.ç̃¿—8óŒU÷ˆ%ôÖha™†À½ö₫å誹ȶu¹F ~@Ó[Ï¥ü„Å̃LïnsIz-Åqµ£ºëe££öqCÑ«\¶<^§˜3»e~F9_\4« t8Dßriج¬}‹•5oö$*í'î?áàçx¬Î´•"T̉1UsH÷’ê-œ~^+%¡U{pÜÇÓÁđđ#YwqÁÁƯ&aPíŒĐØâ¤‰­Ê%¢‡·Üà¦éŒÅ²v…Th4®ºav¸gja`Ê6ü]\ØÀ‹Ë+̃ë3ƯGw™sKû¤t4l¾jn£vđEAßú̉=d-[StjZÚ~›^ôüüëfZÚêøP3¹¾¥›À#mq7²³%-¸èđ¬ N&F¬CA­x,6fơÍD_ZêI>ă_׿(̀fù–Fí¸‡'QÑ ©«̣‘’Ô‹=₫|©”ñ€çO{îxJ¼á́_đuN+á…3s‰0Íj?oƠ jœO¸̃³û*› ¤·‹ºéˆ2]ăîÜZ¾ dœË+_È?xD9\̣¥WT"ܱeu³ÙWKXÂư•­‘a₫₫øC>ÛOSŒŒzê×x’ï‹'H0%ƠÜ/ ~È 7W g§Đà·Uxk¬®WB=ßp:6à°øhƯn?9GŒ$9%j•èÓÀJ â¾êtnĐ[ê¼Ư(k•Ûë¹:ÿbï“\»a±1Œ=R»Zß­Ơ´)y x¬eú+,ætĐ;c"́[ÂÍd4¢iå̀ê˜mÍäÂ35÷D½cFºé5­AÁ×Í̃Hª̉%DQtD!Ü|Ää ¦Å =¯„“̃NƯ”#¶×0z₫#é°qЦ¨ơ-/̃/ÍâhªrC©~6á‹́ÙØ~;ÙƯG5ÖºF¡ M₫ƒz¯IåáÂB“¨g#WOU˜Ë™i.&?épé£Ứ²̣g6¸ÊåÑJV-L›t£8ơ<\Ï]…p„_ú¬ªÄ¬̣ó•ăsË‚&,yºxÂÚÏVFº —Gơ°·Í¼/ »Ö9X¸Ñă’hî%¶kớ̉·®…̀Î?R+‹’3y‰ô¾†đô5Ö;ºªÂ)Ëày‹¨û0\æA®ïă³Á=)d½˜-”*ÓD/ŒRd›L×}T1è¯Î6‚₫ăSÊĨ"w¯¯ËÉV$Aí²–v–¬3ô/äQQ‹…§¼‹âº |æ½ • §åŸ\£û8̉¢AöÁ+}÷h³¤Å®ôPnƠ¹ç[²|2}u^c(hÅà>¡Hư\ÄI-u¯fïf[`¸9–Ç£x«úăUCαwÅ6z5tz0#K̃ÅiÖ²¹–Ñ÷x̀¯ơ0¸×H’“ä3·ú…æÑ8M¤xmL}³ù±Gv endstream endobj 641 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚuTÓưû6("LAB¥a”̉0º¤$¤[’±ml£AºD@º;%¤„$DAB:Dº‘₫3ßó~ï{Îû³}?÷}Ươ¹¯ë;NV=C~E(Ú¦FáøAB̉ÀûÚÚê a ˆ€0€“Ó‰³‡ưmp>„a°H4Jú!îc``̃¦ ÆáÚhPĂÙ‚Ä¥ẢBB@a!!©¿hŒ4Ṕ‚„µ€h à¼vtÇ á¾Îß@.7$%%Á÷+¨èĂ !`PŒCÀđ!`{ !‚„áÜÿ•‚KĂ9J ººº €°h \›èÄ!€0, ăƒ Ô;À₫Œ&à!ØßC´-ÎŒñ{$†ÂâCœQPˆ¯4T×ê:ÂP¿ÁZ¿|À?— €₫“îOôÏDHÔ¯`0‚vp£Ü‘(8Điêªj àÜp|@0 ú¶Ç¢ññ`0̉lƒüj TUÔ‚ñ₫™ Á qX,̉₫猂?Óà¯Y½vp€¡pXÀÏ₫”‘ïî‚–û…vEy₫}²E¢ ¶?Ç€:; £NÎ0uå?¼ đ ĂÅ„$%D$Å0' ̀ ‚üYÀÈƯöË úiÆÏàíéˆvÚâÇ€y#maø€'́â0Î0oÏÿíø÷ ¡Hhƒ#Q€²ăÍ0Ûßgü₫1H7 ¹~  ĐÏÏ,ñ ƒ¢QöîÿÀ­XPMOQÇÈ”÷ÏÈÿq*)¡Ư€ü" ¿°˜$$,”À?xÿ;ù§¡bƠQ¶h|Äï~ñơwÏ.HÀơG!ÜÀ'ÓAă© rưĂt !1!₫ ôÿÍ÷_!ÿ7ỵ̈̀ÿdúw¤êloÿËÏơđøÁH{÷?í›x,"Ö ™˜ù™-₫̀*;­jàÛ\?̉3Hs4~e¶gÁ₫Zkÿ®4v/DiÑÏÓ†ávI¯ fü&Y°ếwT<®¡kGơj DY·Œ¼½¤æ icäàx¬ Gë_í + €Æ¦êmư1đ–Çg‹êjà 0•ư“®DÜxQÁé™t_‰Ä¬TÜƠ¸ø8¹­(/A«ZùØ(iFÚ5’,]è÷¥µ= 'Åu%÷å/ Ë&5 ƒưd¶³ ·®UyôăŸ6÷·÷F¯O–l 2:T µ-_̣£®ÏÈë¤ë¡ÍÜ›Ô 7¿Ç"ªBªƠPpgít<¼xGBüÖ¹½óe®RïI¦GĐ•n¾l“³x%lÎ_ḷ¨q© Ơ‡_ëYoơ›Öz.±ZÁ½Ê\f@₫n"1”åïb+;²4I—jæ!#Ó] .¥te& Ú<°°…€Ù2?Ä‹B¬\éI¤Tj°À#•Æëư$ă>å— 7 4U[¿Ü\Ư¦RO”iƒÍŒ%ÈæZz‰¿ZT9uçª+è^®Br«4)O†=•_ôñ?Ÿ¤•LfÔ¢æ›]ôªc¿#U˜F ˜ƯÙfˆ™è}‹d€ó?ắ÷–ôñfµ|ª/s/s¬ƠU{@RØcsË+aÆU:¹•hû;®’¼®‰\•,iX ŒĐŔR’l%ªux1dûä"í%q‘Mê’†ư|á“KYfØfÊ$£eí“7ºQÉk.a+;zËÊ ñêTLù‰ư;„ÆÓă’ß®Q±đV·z<à́Dô,2¶NÙ|¸ÉNóƠès=¼:l4ö`Pxo-W™©übÂ.—;œhøæi÷+»>ú ?ɅŶƠÎSp.—‚wn•C̉e`aßP³èÀJÉ^!M$´S£Í|{º¿Ø1‡§K‘ ‡‘ügă ƯÇwY2³\ Đ=ù¦ï̀€|…Ç0³Be›¬éư˜µ©€= £~BFǤY œ0GF·¤¾B̀ÑŸÇ̃ÖÅ–LUTÁ}N^4\aAT|ƠÈ́å~̀üÊ“4¥0í¨l©3ôĐ—ñN©é‘ Íníï¦]/a& ,Åå^/+“z`[,ï;©®ˆ–̃_`Dyé²…]søôp¥'µJùú„⻌“Uf²ƯÜĂÔ‚)©Æ±¿‰ü'»oíP•ñ^&!®–Ă`#̃qÙNOMUyI‘+PNqÅÉúÇa­hNî23µAÔÙg÷cß­Û]ë£'ơ>)Á̉§:¬MúñsÍ£c`ØD%³LuŒˆ%KàÚ:ƒZ$n₫‰₫Dđ ‰N³Ø=ó¡^Ç$céUßEƒ× ^q›ºí6Æ]Ÿ̃÷½æ¥üï9k-ï!ú ›>i²V´@‹ÂÛ’ ¿˜ôUŸ9](Wơ‰„ÄRÓ(o’|@"Δ¿‘ïèùí9KË̀¼kî7×¾́LƒË8Ơ>×đa<“Pb9^{̃ÔT³s®çé^Å  VWs[í1ÍM£‹MöƯÜØ½|‡¨:́Çä`Î @n]êz”(¤Î8¯"u¡ƯɃî:˜L7HkÛĐ1WÎ^V¡¥÷™aó’X ¼BÖ¼eÙØ3ňè¿Đ’Sº(âT:U‡§O™>y“²Èçi0Bê†Ú OEg½K×ÉTÍSÑ$ù<î« .á~‘ºuséè©%UcíñƒœÀƯ…1UѵÎú½âï_ˆ® tâ J,j‹ Û]Íđä⃒µ·ópÿ»ƒ7–j]¨@ªöb©pTÖEÍFN_çtà$ß`Đ ø̃gëa‚•ưI¹´̣Ö ÷ă7r×0—oˆÜ¸eÁaÑA›5̉ÓYyP£±Aä}) ~ĂiîªÂĂw6ésÏÔÑÜ|_+Ôç3„<’||/Zư.Ïô ‰!3ÆÉÁºt‡d#̀d=Î?ÜpKTXXă-¿¶́G5ªLº7vÊp©*rPéÙ©™˜èN«¶Yñ² ┪ůªjvONF)÷̉_çpù!*&|UÓûÍïa\à¢[QV oÏ„âEú\ñØÁxAœ‘ÎGrUvƒöúB=t+bÅ­ƒ…·ÁHÜv¢ÄDưfưhc_,!B©ï¢«ÍÿƠíß=»eê>Đd«j?ó…ñ¹nW˜É»\¢–ZéưñKk¨’"ˆ¬°gÊ%±w ơf[0Ûơ^ň®|µSu_? (Â51ÿzkEƒÏôW×÷ùêa|f ´m-‹8Rè JÚ´¥„ÍÆR3Ă¡üĂà́DØö€̣Éøb¥[.êÓØÊ–£E?h‹koA€Xc\²̣fVẠ̊¢Ë^đ,ÆæîZtm^q¥MY´‘{¬ç±¨|#—̣Ü̃ $ëÇø ƒâ*ˆœß­½SR3èa¹Ư20OûÆh£ă{n7°}ØñéѨç†ÙD$Áq$‹ŸôƯ)âÔ‚£²ñ;G/̣ï9 ŒǼRÚ»^Êóè́ ½ÿ*öá„}<¿9̃ë[f¿sL«Â^`-iw§mf—Ù,'<@̃àÑ{Ô ñô+́‘»ßVùvạ̊ÔFÉ,(Å*Cd¬gƯ),¨¥V¤cWÛö¶ 8>ọ̈Sö) ïGÆp`V¶O*ç>&%Oímotí g_ra:#¶2µÏ"Æ—̣ê 9æß7ø̣c¼¸K‚µT¿“Ü£Á»qaé÷ ^à<­kè%ˆu“mߤ5ĂzëŒCvè ƠMNŸ êa€úèá¿À ny@‘çÂêØ ±í>—=³{¸đ†râĂ›Á ¡­ i¸P·½èJ«6F[ëüÂZöºƠ«b&ÛWU=ÑÔ“§BÍ}k--_»=ä .úHÖF´ÉüŒ,`ZzWM<€Y¿wöܵuØDxè†Ù=@5̀3’6S”Sèqvd S“K…°¾éOèÅ3#|íè’VH^ñ–«.­kk]PêwG“Á̀@ëjêàˆ@I Ùï«Öü:Åörg½áù /®,ßOx˜ˆÖÊ×éÓM«́øx™ó1A@Đ»ó8Ơœ§3GvcÑ‹V;:4{‹ÀfÛ×yÄHœpúQ=ÈVÅ©ºÛ\ñmÄY„ peMÑĐ2Ø48#̣¸¢d6­°c-6R̀ơ˜*₫¾Çû‘RŸ%i§sƠ‰G«<,ÏLÁ/́jƒ̣Qê ñ–&Ơ°.ẰB?vFÖ5‰¼l± ¾ö>‰WKÁä'ÛbV[¬ù„Ó÷ëIK_ic‹aĂ9 ºÚ,Jh¥~±û$Æă×ëÚ3^Ă•ë¡ÈÜßhÖ§’}ĐáÖ¦¿»À¬¼·R§Y(ª÷3qüâ]LaƠ¢Ø0:äw²“‘R]@g —Dº‰Å­37AZ‡hx*ëlƯ?¿TÊÏ ́"Q\]”|!¢hΖ·‹kAø̉ĂßM$æÍ÷ºå€C$Qä>”ùÓAâ%ö~¯bv®sñ#¿>¦„bR_ººçùÅ7T̀¿xùEǾ§6 tk@Ôˆ½1:cèm$i¤9M”ưªU}íÖ-„ëù@Ù3·§̣?ØôÔnꦨx¹{¼Đ́WÊ8M ̉ßäHŒ4›ơ,ØØë ¾CY<V('®^—uÄ}±ªgw2™±¾Ml¦TÏí¯Ä>Æ8Ñÿ–=zÏêǦô]0ˆlûFÚ’ZR)…₫Ư-̣ég”ÈB(V½6‰nó₫e›-ă1¥ÜN₫›¸LØ{c#‚°lc₫ñ^®Ëö ŸoÓg„e¼Ơ®~ÄĐ™;Ødº<Ü©₫fép/#°œy=Î܇Kr₫ɤe¾#âc¤MZ€_̉)Gb‰NrZâxÅỶr@zNMÆ_“„LØơ€̉*»o\¾/i‘Pa T+L,¯ióªN—Uuz6‘~ ‚́,×›X_·*ÛYU÷-\&,ÚøX9u{Ơ‹ä˜Œ½YtÍađ)¶­L|“‰@!ÚÖv3Ă~¿4¦Y];Ó-²=×TLÖÚ¿ È­~)×&{%Äm}Ü„4d³¢Tsµ Œ®¼„´đ*̣®Ë¶‘A·’§ç[‚B=ǯ$£Ú AOÚÉNŒ›wew\r¾m_v?ÙÂ=̀ØđyyUà?3ỏ$çÏjâHî¬ÍIö 6°#Úd°4d–]+Ö$˜„Ù?R}O°¼óе`;åÍë  ñÔ“NïĐp)},ƒ́¸…ÊÁóÓUăG—ö߃N£i£¤ßN3ơêT–—­WŒ$è]5˜Yjçc¥¶ĂiójØ|ahZ—蟅«Â9 l핯ô¿̃H&n&Hó }ó âMx“ÀơHzỵ̈Rk•Ú^i>çp?³Œ¨₫qÿu ̉Æy*~=‹£ó/íưUØåÑ»ĂÊ2_‡öRÁ•ÎÅ˘a‚üǴ́¬¶MûijßF‹6/OnK̀?}" Q ô·§|NÇeiG4í”OÙ¾ẠS¡UxtI^¶5fhÙ"ªs7’à‚“—*=«|öfJ AȸJ(́/BOrg h ³©5ñàÊ5ÉŒ®j̃„áá‰ÙÂÚîµI>Óí…ëeơÍ,¾ôå̃<¼60å)_¡¯aÚ›.ŸK/èÅv=ßPÉŒ›Xơ1,4§Â¸2zß3>o«…¥©$@‡*~°ÖKù7}2¡SxœPé8êĂ½‘´Ä5÷”Émh1Œ>mÇ«ÛÜ–›_̀g̣ºyÁ$îYÄ_ªóo(öhJ/ÂÚöȼÀ=«Ê¢€đ S ^¥»Y(×N6oY~ßqZ¤ßZñâ+"·à× ;"]PnÅ)µÜÖlÈÆP“÷Ö’I‹6ÿd‹Æjg¹¥âǼ`×̀œYß’Ä9ÈeÊñ³!¥å­1‘˜«‹¥7  ªÙ “xóơA?öPÅüU¥+øÙ‰§ùD˜v́/Gù¬¼ˆ?ß°?ƒ_¤jƒ_́œ¨µ×u++<§3¹ Ï•-'æ›2ᡟE/µÊŒªTDơ‰‘3mc* Ÿ&|T²-Hyt(uư³1½‘ ”6ö×븽Ñ~L©nY!Oí$ÁqÄ×¹ÁZñÉöû}năôgyá˜dùƠôjÓÍDLK~â«dâKô$ߘ¬œƯƯ™P×̀ +˜sX¾̀IÓ·LÉæ®|₫Øöó9¯û*Óëº_øµ‘¡t’¸tV5æ<êIç™l vÚ­‹ç „^3Ç}<5ï˲ïÂ¦Ï  m! +*Ú|i#y4̀´Ü~›RP×y'щË$đ́Ù1 ƒ€”-O÷À„‹·Ô.:5ßÛº%lMá’'Ä¥Ç9E' —ÏúBJW%ej¾ä;™Í C/‚(__‚‘xỚîŸÈtEĐo­¦«i´ơm’j¿z(‰ÊR·½°r‰}2×̣“éêùÀ&md›‚Eè/½dĂÿĂQ <ÖĂª/=ä&|ˆÂ¾kï xpímTëưX²ORcṆ̃Ơ"Ô|°è$“øÜ§kåÚë{‹´/¹:âÍuÖÖ›»n]^{¦›Â ¥=ĂTd~@Ư $1Ë™jRÅ)\u›.·8¶Qëk —kÉóÆÎÜË'¥*ESÛƯ#È\®W› Á”Ï{îôb™ê¸ ‡‡.4+ &±›ï6wójóë> stream xÚtT”ïö.‚€ C "0”„twHˆ„0  13C HKJ*¢€t§t#©tç )¥̉ñăœóÿ{׺wÍZß|{ïgïwïw?ÏÇÁ¢«Ï+g ·‚(Ăa(^> @AKKM ñ‚$P”#䯛„Ă‚@Bá0‰ÿP@@@(ŒO„Âà´à0€º«#@@ đPB@TâÿÂEÔ ÅP‡Ă H¸³'jk‡Âó¯W˜ ..úàw:@Î ‚€‚A0€eqœ9ôá`(åù\’v(”³?¿»»;È ÉGØJs?¸CQv€Ç$á±ü  r‚ü™Œ„``E₫ñëĂmPî €q8BÁ“á ³† ˜ĂújǵXóààïƯø₫]îoö¯BPØïd wrÁ<¡0[€ ÔĐQÖäCy @0ë_@#ɹ  + àwç €²œ„đïxH0êŒḄ!¡¿FäÿUsËJ0k¸“†B’üêO€€1×îÉÿg³0¸;̀ë¯a…YÛüÂÚƠ™ßuq…¨)₫…`\$ÿñÙBP ˜¨˜0â€x€íø•7đt†ü ürc&đñr†;l0C@| 6̀‰ä ®¯ÿø§E" °†‚Q+ˆ-F̣Ÿê7ÄæY>ê0b¸'₫úưûÍC/k8̀Ñó?đßûå×ƠSÓ4Påù3ñ¿c̣̣p€¯ 8€WPD1/>ÿ,£ ‚₫møŸ\5˜ “ñ§]̀=ư«e·¿ àú«nÀ?‹iĂ1´…¸₫Ăr3 ŒyüsưwÊÿ⿪ü¿X₫ß )»::₫sưÿaÔÑó/ĂZWFZpŒ`ÿ }ù£Z-ˆ5ÔƠé¿£j(F r0[ ›y„ù€ÂüP¤2Ôb­ Eí₫pæßđ—Ö¡0ˆ. ươqÁdÿĂ ́€ù€ 1Äü!1jCư^ă/‚ÑÓ?ûP‚áÖ¿„'(̣B @$˜Ơc,€—F¡ÖßÔđóÁà(L 3³À ùµf1¿3f7pë_~’Ô»"˜ĂSsđ¿́ß ‡@< `’é 8øQ}EPăI™ƒ;ïÚ$₫^̉‰± ïPö3"T—̉ˆÅrœ~zÚŒF̣t§€̣3ûmy—“Œ…Éï^èJæ*Oá#^få [f«˜‰ë#́±x¯cFÖ :¬¬' ̣L]Xºw#n¶ËXÛvésPxß«è˜wç¤ÎSUnÔnn-ËKÓ¤e7ÚYyŒª·ê5XùAw/sÅ):p5̉,,Q;…UC²ù”$νôæRO_ïeçƯ¶u·€µ}ö—(J¥G½ŒÂ„¥FsïÈ/2?¸m§PyY©Ü’Ư¶î*\äN8©Đ>´Cn›³Üwé̀¨¥ë$ÚÉÑT‰{‘’Ơ';[ö=Öl¢(¶@í!0Ô"ăåçQJ?`uú2§/X^HC  ƯƠ¢…#fư"½ú¿.o₫ ÆywU\ •–Ô@¼¼4äeÚŸvAµSe|µ[)\ç°ư™„ÛÀäÈÊ'F3wbqd¤N¨F}ơÖ ‰5,đ‹(É#¥N­Ul¤û`vk,mÂÑŒúH¶0Z¼€Ư»_0+>«Ê¬üN÷Ñù–@P¯ÖÙ'ooü­RWH̉Ͳh˜EÈ'B³ yߘĐkÈÈ’œë¶²jçéưºr±©’§¯Đñ‘ÆƠ³ù¡¥8Láo–ä6e7:ö¨=)îÖh“ÉÈrh™Ô§'§Ó0, ˜ó7’Í”øaơqúªƯ¶Q.å:¦›2*ÎíH°—º®%³Aï yÚoïE₫Vd+xÜÇEåG ¨¸ØI£vẽ ̣„lyEªØiû±s蒥Ƴ¹8D'änLv>ø9¨»«QPFF}îåB×̣ÚIĐ =­ó°®`‡̃bÑ[‚ÇÏ×UÔ|“ˆÔ(?LJ”²P=T¾êÆÜtM À)ơÓ0£y ‘y7{­°Küjéën¶¾¢ÀyzC•‰På™ĂfEÓg NC ·)úøÖvFÏ•‡Q‹Í¾Ư…ï±[¥¹å è¨=M°—¦Ưë Ô›N­ưè9ÚvyÖ®"̃V´Î`̀–ư#Ä,Z&¹§¤8E‹±èà…á}Ó冷QO› -çóV¢E\Ûǯê½È®X÷’{®•¾8ͪû7›̃Mƒ©¥S·gíơtÍÇ¡d ›ä(å±5†Ôđûë&twmáxÍ ²°ÎXß'+đJÉ£C ëdîÔßÜYç;±Æ¹m@F̣¸Í!7 w÷ÊyơÄ)Fy~£‰‚½ ïd!ø½$gdÜ–NZäÁXPéWÜØB•ªºLÆ·œSăy»:¹Dvjøü‚ûq†Ơcœ/I/}”D›÷`wÖ±c±ç’™$ôà;=¬X7ăŒâ·Ï\]›8“È%A±t|ă á—>;Ñ5m Qûçéă??-z’̉ă+}äRê*¼^pzmxÖ̀³œÓ̉Æ!ấxEÄVƯmÊ2ÓR§̉Ö5hỤ̈ăZªØÏ`Éæ—]Óêï0×îæåC8àBïXK“¿œw§­„äSP=ÑÍ£’6ÊBÍR–çOƒLV’Y°EnkD ê¨ØëízÀù>ºă¹rLIsđT–KXêë±ù i|O¾XI•z€&lC¸̣Ú·¡gêX́œOÊ‚́̀gÆ'[CíêC¦s& w›?a¯µI“ܧ üÖï WßEMå:û§₫&‹›đ4½‘ª9R#;Æ~ĂWºI8aFéæï öüJ×*Öíסsån§–cijË?UKûC¾Jn®ë¸;Ç.§½âÊÑ­û ×̃ñwă‰ga·Ë•Yº„w.¬$¨†{enj‰û+„–É£gnMÈ– ·7Æ6\*=*¸A˜Íkç•yâ_×cƒKÓŸG|öÂú#pú*GpiKÚ/pûIB6˾&ơ‡±…­gÆ7q1Ÿœ ¾•‘̀—Ç~¸z\Á”| ;âœ$.™Äµ2TÄÓX›¶él¦+Tkû6K ʉËÀظI…#üP7m\âÛô<«x.|~I "yèù` Ûϼ8…ă éè¶+G9̃,KN)ç1’‚…&DŒf }₫Â~p1†ưî.Ń缒1ˆöñÅBíÎ =e¾lÛ÷lm±»–oÏ®^N¼xnơƯ <:.‘àëˆz”/¡– ô§Ụ̂V R±âµôö)îŒY0•çüøåÓưº„Z‘*•»Ë¯”íªy%ừˆ»ëÀÂïMüư3ƒ§lW+*)F ̃ë…c=†V™f=¨[0ö¨µuo)c|qe,X5.¸ÏÏL+ÏKAú˜WÏ–öxw¶Ăm—8 Ä5ôÁ₫ s7.Ñq,àZûƠ¸È 4¬@OUl»úă„!c²©ô'aIđ±́ÇÛ‚â8POe’D*3%­A;Á¶Öù·g¾œiM̃ºGI5''x̉Œxô#Ïư£àÄÈ}Ç-ó^ç?dQ#ëâ%x,x:îÄdJ,{¡4¤ ®ÆV#Jˆû9-uÍg$h7·ËĂ›,l°Y«÷—±ˆ’<Ún$gñ@óøWd|¢æå–ùW-\³P–:; b:8Wú­~ñœycOßL̃m›‘­Aúƒ™Éߢ­=>*“Ë'![0@OSº@yê¢ñêŒL¿g“J^u˜B¿tç|P_=BơM6Æ¡è:FO{%sưQ†…1Ôäưé±Ư‹1ÙU‰3׃¯ÔC]†¢%øñyTăR~SàµË©‹|¸Ø¨j̉ÓEwßœxĐAú"©™ƯFå¡ÁN˜ÖXÜJUÂÈ,)1•s¦9 ÷ñâö¬K( c™dBí‘ʺMo[»U÷ &6,?ÛPqákhpÙnăuÆWo¦6ø®’ï2¯m0‹z°‹¸0ˆE’t—(8ÚM‰fîĂK7́¦5ós­ˆY㨠|{Ăᵑ¬„P+®ĂÚÚ´ưĂÆ‚N¥uø &Ơ—·vÑ U²¶ííi–2ăÓÇ7¯×ßqd{sˆ/¤^å”W—ă ä¾²OÜ,jgaLX~)œ2e$`yĹ‹;oÅX/*ŦnZñT,°̣ö£¡_˜"F[íª|8W&4D¤ỊƠaê3€SÚz¯±¡.4Ínr2Çc‚x'̣̀oÙ¿Ür<ô:qµÉë+ă.h$»à8*†ÄT7©Øœ|+ÑR<_ ²00¸o±Ä®Ï?*-ÎzÄvSm̉½Èƒ¥1^àtS²tw"ßV?ôHíơÎÍ_Ï”à˜s _ &?£Yđ̉S¨µL¯ô Öë9Ú‡Í;µR™P)39Ÿ JH&¥íƠùăÄl7_y_Ó=tµÈK -R̀‘,•u~k¼́p‹S×ó¡hÿêƒRWk5ĂáÉÜçê!)÷F»¬ÂḿĐç_p—Ê©ä†m’‰TưµHăX]˜—¼o¢Q(`áÅíl?éèÍ~“ H/°ÇL©Y°Ôñ— á0ö¼Í“ÒöC«<ĂƠv•ªĐëx”R©ïđä"AF´RSÉé#€Zậ`íªưœ8ÔH”¹HíŸíÀ=~¡tQûƠï§băë!9““üÜBëå]­ç₫âÖäí ï È5É'm`ơêd|Ă[&Gè”×﬽̣ôn4lăÅÊ|¤̃ ¸ ¡DG̉•ï ”æS}¥å}öÎ kI¢Æ­W ß­ê¦́~$È"!ơđ̣NWÆ…1ë[5½¯Ûă Q^Sj¥›_kdóŸÑX̣¯Ê¡5ÔƠ²_ôÊÀ}à¸dÉ Dư4ÚÉM/jÖ²v́”®”b̃́bl¿đÇsy`/ËÁ©hWTüóà~W_~°0o"Ëè¥Kèă³®qxÀ‰́3©C—h5¯_k_ƠđÓëü+¡îÉæÁèÅsjöWĐ‚×È|~^FkdÓnBËÜx\Û|mö çä½gßoåWíLH®f(Qáô!XÛ̃ƯÍ2ørÖqjZØùAß§réŸMƠß~91"XZ)"»³'́¦¶’(Ir.̣¡P9 ̣î „’©†.‰6M?%•àG"[!ÏVÉ•¡²̉’“HNæow oR_@‘7|xÅj(AÙ”yZbEă ùÏ._:tϯc/œöëñr+/ªm÷̣œä»í6’ﬕ)Ä[rS₫hwXWKôÙré˜Ù*’¡wÍrµa˜̉Æ›ư(ÏÑ©„U‘S£YÊŸ‰Rág0«ƒÆPÁƒ¯e~ê¿€J¾GŸtb×7²êªóÄ ËXÅ1áäy÷ô¦æ&pMOÔŒµ6¨txăÉ„×tô·Í¶\ư¯È¥ư$’ÂóÚi48”N‰ ój»a7gUR‹§Ơ‡̃˜¢7ûqÇÕ̃ïƒ<Ëü×Ú,ÓíÄf̃Â(̃÷’rôc¸`ï”\£¡₫›6|iÂ8­6`Û>Ơr%XœU0$r|ù º]JƠe¡Íq–;̣MÉú6%ïëåÚ“ ¯äÊe¯´$ 5ïø'à“R~%ägùxiÇØÅTæ¨4đbñ̃´?ÏaGùƒÓ\á‰Dâ€GÊpV’¸È‰@Đ÷đƯ§—Ö̃x°ÂÚÍ¥ç´ï^O"¨øH$—ég@©K3²aO}DùăØLÆÄëï=„»|OÀÇû/5ÑĂ*wv×?JT…o›Dç~2Y"¥–̣Ơ N{Ps7˜́>̀¹ÚÓñJPÖ·7Ó‰t-BĂ`3‡/NA­¥Èưvâ§9Ơ=Œ?{₫ùÀKPºe|sL…À¼3ÙÄrwz(”ú\ ïÀ>¿'äË–ïƒá®ü’O+JĂœ ̉6 ÷„.û¥'vä°*ëԪ͓KoƯ¸=¢éürevy—ÛỞßđÉ>.$|N2ˆËr!"¾b×~J¶²ªG‚Ÿ̀ñJútÈcD]0È@³z₫°´ <7¹+†SŸÿ¾OúXă¼-³Û´Ó©ùëĂbuzåé¡[ªŸM•å]ÆIá&$O.NÑGQem㸻b>ÍLé7JV¯%ḳ¯‹qƠÚËTÑ.¨p|óÈ×¹J4¹ótfIÖ́ư-‰i|®ùúĐ›ô…̀ úJØ?Ó'ƒ€’`Uœ́˜+5¸Ü¥2(ö¡ï#O’±q»e—Í¥¼9iê7ÑÈ‘äøœ…®&C̃NÓÀĂ}ŸQÈ;c•j.g"¶V»£Îjöô¼-eÿUN¹µoùk@ê] o<È›‘ÁæÀ¹Yă¼́-x’ɾ‘zBh0[¤»¤XA€Ö7®ND_§½©£üBv5> ư|¹“‚{1ËH÷Ö$Ư)¦³”·Q₫øKœ– ßÍkơZ2Øâuơơëí6ƒ0Ü̉½§¨#Â?S̀Æh-ëÎÂ`±KŸY¼‚öÂÖÑTQ̣æ@…Ưƒ–z₫Œ>/·ÁTÉe¬´ù J6JùÇæu¹U¥êëR_̉])̉®b;Ă¹C×»µ[ÜGb†²Ëă…ܔӫ3ư]nGo9 T<«xrzç.Ø=o0º?ŒëÖ‹ -q¦nߦ€.>Ÿ¤w4hÊUñ¢ÇAÅF¬ê¹;¹Ç†Âậá KŸY§j̣Yóf5o¯±®"öAÈ÷ú¹™VΟ²%°–öÀ/FU%W$\7F¾s/W{œƯsܨ˜¿/ưi<¡BFk›øƯëú†ùÉÚ)q»bà£H¼øæº,Ÿt)ûGFƠc…P¢ûRˆË¨lN6J&ĐÓ¤;4@Ă¡ë\ÈJ́sŸ;V¢(û&jµkIz“YÙÑ©*<\Qsx §ë«œ+¬₫$FăV~ ™²feDÜ=́¸a½„ î§Œ<ú̉9ÍÅĐëÆÙDæÆÆV¶{«?îœѧ29đuæñ÷¤ñµ€j©j½'̓]¹QuûéäjLơ(:=|îÍ(rjE£ øEéT){Qrøè~QTøCƯ·Vá Ư?î Ï91˜&Èîè¬ß9wŸ£v/Yliz¿WÄØ‡&‰«ªn½µÂCxå†î€º‰‰ˆz¥si5H´¸Â.ïè-|è£üü.&Z|À̀̀Ⱥ?ơ<µàêVơp>¯$î°p›̀Ë–çÑ&N~ßøĐee«âđ/»­Ö‡­5_Ϙ›(®Ñß6t¼%Óœ₫ôµï »WUzûÛM¿qê:w¬¥4q¾¯̣FơfƯ_p"9—ƒ̉±ïRV‡h¿5–/霃–´I¹‰9UMu1ë°}̀êËJOTó^ˆ“#LO¹i KiPÓĐÜeÄÖxëñá‘ äÄ'ùÂ3:Ó§føơØj¡Ë­›^L!Å'÷×kwˆØ½‚6Ûßd̃-‘óe&ß­DjÛÁ´iäU¯³¨Rù¼­đ$R}.®CÙÏâ¦*V™±&Î#»¾à´'á²Ï»<¹zÄÀđé4—-`­Q¯5™OÊ‘ú$ªm};“YíV„côöíCö©–*+rd]F%©5).Ü€jwØ{¡Ê3̉Ñ+ß´§ï°úṔ®Më̉ùḍÖÿ¬́́í4Ôq)xyóâÓ~o ïlÇûÏ}»{í‹)Ó”Û‘?-¦ñ>jîê?Nbû”ơZ2 &(3Œ¬ç‚Ÿđz€+G²)Q•²Df󺈓Ù§PM?û=âépYñ£vËGW~ăỊ̂DblñoÉe«(QâgĐÁ"CVVÉ– ́K0]¤¬k+¶íṂ”|*_i)Úf4₫l¹á¢jP³F6ä–Zñ² Od9«bB]ŸÈb[ơfx§ü23JëtI3&c†ükIq.‹é=Úo·ôÇĂ“ÈÁ‘t3z\–7«~0ø‡-£¶s¬ü§̃˜iBí†üơƯfêñp.»¿ÉLM½À·Äaß+i}4<ô½HY¿u/LaŒùud`3U×%ùpÿư!*Ÿ‚̀­g5_ù[Œf»9äx„+rßÊ™®îp+èɦ*êN:Ư2…î÷OƯ¿014ÿ¹:Á endstream endobj 645 0 obj << /Length1 2719 /Length2 24061 /Length3 0 /Length 25588 /Filter /FlateDecode >> stream xÚŒ»P\i¸- „Áwwwww§ ÆƯ!¸%¸»»—à<¸»; r;3s&™ó^Ơ½EU³×§ë“ï.è&'VR¥6³5JØÚ8Ñ330ñDåU˜™LL¬ LL,đääj–N à?bxr  ƒ£¥­ Ï¢@c'°L̀Ø l'okq˜Ỳ<̀œAü÷®̀4âºáËK«k¼ŸO_²8_Í\«8đƒ­¯¯®NÂ1¼âL<ÂD0É~­›Đ~Åå¦ÄÇÆË©‚B°dëÓxïŸ6oÔ\¿Æí¶‘e›)è‰6¥å-*̃̀ h²¸ísÙË™}¯Ü³=̣ÙfÖ`ŒáªùñpB̀Û¥cëqOvr?q;àG̃[Ñ19„ằºÁ¢o[Ú³¨4|”¶Fṽϱ>•xƒÅSÏüv>Ñ ¶dĐăöcçâ*€@©8[Ά]ở•¢„₫hªº*S̉ă®˜û›2v›jä©MúÑBá¡nÖs[đ6™ù•œ‹éŒ5ÆkËúÂNAùăCë^¡FÍ™à ́ü ëer¦…ä×4F©G0½9qkqŒæ×= ¯äJâ,9<„ÂÔª"rŒ»|¥˜§́h¥¢™Âyk· ̃JÏáN*̉–y­×6obI`# ’!¹Êà€¸ o`u'$MÙ2E–—Ÿ›́ÓyZÑ}e]₫̉â1)áûTz_F̉-#P „×ù¬)‚ï½§A ½¬:¸d‰C—sæ¿Zt¦‚Ù„YđµU"jàUéW¥ †ư¯rĐ“~nwĐ…Ø†ºcZ¡(XW?”³«Ô”^®]²ïáßèbíq|-ââœ1/¢#hA¸°·@åÛÙhC!s,V\©5%c—IơQ Ăê¬Qô~2fB̉í(ÔªỊ̈´&v~Á¼+¥#p₫ʬ˜û¼ó9m£¡So‘P+3×-éÚ¸¸Êf {‚ƒ̃gñëñ¯ ‘H¬?ÈJÜ©å˜üLi×đÿ¢½¯́ÊX4ù^µBÜ´_:“83¬·ñtò¦̀ŒU=â(ẵ´×(h*)Ä:|8Éu4û”fóÖ#¦ ¦"o/Ÿg_.ÓGÿÊy©BxAni€‹‚X{„¼$'7™´œå3Eœđü{¼ ‡;dˆ Üg ÅúK>Y¸#¥Ñ|ÅOÂÂØß\‚ă|W¿ƒr)öêï´wæê(Æ 4'v(:s™üeÏ8©Œ–p– ßáL2q»Eá¹z=„¥ f²X!áƯ.u³Ư7Wœ˜…+J3í„ÇtỤ̀TçYL\ăiMN%ù§ @\l |±‘/+}$)Ä„>Ûe¼´œvzù®n8¨Ú›’đ+́â•£Ëûq¨øY†Ë͉’ơ·ç~T„ˆ F´ÉSf£e.g†+gÚÓ­’‡+̃s:_¡ºIrxÛÖªµl·WƒLÉQfqP5™%ÜÆO§÷“Öc¢êƯ4ܯëQ&3HôI=|°“́\.»2‚cRnæûD¸ĂÈ0l´E+D™zJÍ„Ho‹¹ &>(„LGÈVCfOñæuNÇü%¨̃ ̀G*\…Ḅ®o˜=—wÿ<Œ­x÷¸FÓÎ×_˜“°Ơ‡ˆVúʱ³›¯^̣3’¨¸QÆA®Åúס^r å¸1‰[¥¯½›“(¾d¥Ñ_I&YYÛn•¸ç¸u¢¹C )¶*‘5ïyâ §®â‰„̃˜ ¦h®Q°°¹¢–€<vɦY4ÏĐ¾¸®ơ+r›¼äí(f¡}Ớ¡‘@Ơ_a,4r/T® ×SNèÆ“ )]¶TĂ¼ˆÚ7PܘæÉä«’«Ơ*´Èr~®‚¥UI™=Öu(H{Ô¾îC;Ѷz·Ờă#DÜÎk‡(=ü€“€TÏ=¾z<Ÿ’ èœA–¤üR/©£,4†,½°îD·ư’˜̃©[LÍÙKÑ₫˜m1f“Xƒs M9½dÜƯ ÖsA©åà;½–Âhch“đJF.–*Q₫Ë^öđD*|E½§¬DưÚ̉¹Á‡4“Ơn›C̀#¹ª<}Ø%ă|ơÈæ>ÏÇPT—Í3¹µå–Ư\¶¸̀Éd¾hÖÂ/§ èƯưW—6:k¯hRZùKn¿9^ŸÛ¦¡›yƸÏ"À‹Exb™Â2húê4Ÿî2aÙ ¬›Ø½wTJ6#£ŸÔ»©›N£ă³ë€FmB¡!z5û¤Ơqí?0 ơ&6Đ x¸»m~ñ¨ü’üƒEĐeº ö ÔáUÛơ\H¤q1ÎL¾5|âRö{×bxØ;Î 8m!wU}Ÿ‹ ,¨”{­È́AyQb† 1Óư~c¸DüGÄ•µ‡Óñ5cƯĐæwJnl~RAÙ^‡0u¼K’„³èï´ÑHXE~°/\=î̃mHé‘L•é¾¹cNK91eW¸ă.µ`á”iyºªwd|ũđêG‰†2Ư['ƯÊM®Ñ8IǾ&"2n}tĐk÷JjËzœp—¡«îÍâ¹^cPÇ‘[­aöœvÏvù¢*èµƯÓ%ô³p´O­Èơx¾Å?­̣ƒÖûrˆ½WâOÄ(4ñưK·g•µÉ̃H­í!8IçW´ÁùÎ0,hă_ÍÛ`”9$¾3üql³́ß ‹Ô®ø¸å$¬đ^É&1"Iđµá*¦aĐ̉{ôØzŸL̀₫ϼQF„Ơ'Ų"!«çÀ̃†®e¢ª˜&xø}P‡²]L0nY®ïugpCÆ}}Á%c/Œ*%¢Aó5϶´L•Đ!º[Ym€8“ä7̃±Œ%e{¨O%ñÔ(›Ï3ßñf̣EÛăÙ̀o;û;äD™ă´ź£¸Iđö1s½öß ü·#&<˜EUi;ñó”˜{|CPª,£¬e2‰̣‹ß@TSơd°„-À!åFk;vYNHÍ'`¸uÏ̉üªq¸TbźNóT›s”ºwG_ï^Ïâ7èê€IâáDí„ăCˆ{âiHiØiíâ©,Ỵ}Óñª¦cŸiü" #̉úx~ªo˜o¤WS-(oGt•ƒå,Jµéw>ú¨:<»³ä•´%Kf&x ¹¡£đơ¡K&±´!0#‚„ØưbWÖ&©páï̉c2z‡Ä¤¬Brßm9b8`|t[N„ßeèXœ˜­ªÊÿT¹êå¥H¬"åÛ[L­¾FS›OnKx¤54 ænI›B©JQ$̣½¼n‹=…ºØ@p¡ùgH|Ä×Û̉¨)eí»2®&vwoÛ⹘¢EÏ4%Îs;øÑd\₫y6lƒÑÜ›u-1íh¸p`‹D²$¥b̉\̃qfHKSưÉûñ¦¾±I»·>ÊÁozÜjt€Xªư,BQêvhô‘á}Cï~È—±KߘM™&—œ·_üơ—IáÉ`J‘—(E-ưÙSøU±ŸZO†«».„â*°3àRËëüèÑS„}MĂƒ@¶ụT—Ÿß8@4‘.ÍMØh{Z-±z \*Z(¥AÙO¾ë5Ä;u9×SJƯß=ăs߈W%ŸñÙï øÏ[)~xe”Ñx¶ew÷€XÁǻ¾Læp™¸r•à oîmjßCË̃åîCü´¢?“ñ€w×yüV®²Ư)›z×’Gê2»]1¨w‰ª̉¨è@ ¡Ñ₫l?ñS Üy½—^’'tă¢×# 3(MJGü³ú‰Ë|'!̉„Ç–öú°H”;¹Ÿ‚ÚfS+?v¥ÖѺ`›5ºĹ&ưkà-åÖœ”Đr´¿ùxÀÓ‡&†£´ë'J¿kTÊQƠ­n±Ö‘û#6gf.¢öơ¬hmEŸơA½AC•¤3»¡d̀]ưsáOd'ÆÈi„çơ¨‘Ísøu¶°æ ›PĂŸb̃vohwÍKßs[<÷Aê ÉßÍ|o–”½áe/{“ï:pÔ ½-í`&\̀j.üqMÅ̉¹Ü¯{e»ç̣ëäÙñwTm‡wb×7<Ÿ£ÍaT ^­â„PèK£éĐ©7[ŒKó‡Z,6ǹu§‹œ_`U÷°¹ecqQzƠdKŒµÈ¶]ßÅ5(ènB¹EàÙä¹CKS%¾´Y½c—+*•î4­÷ö² ́$‹ñÛDSïvmƠ¢ưúT®Ă3v¶×;ß—ÎÜqỴ]vâ @9ß AázA—à.‡î×¥ö,rà2fºO₫42>ÏA-D ×­ gô½}D<3¯Û·ëơ±1!bǮ奜q ª·Ơ·ê½!¡Ÿyá;̃}¾nÈ»g ¯aRvlB?%3ÙĐ¼ơ|[Ô)ñ¸Hø†!Đ´ÇuBdG/7I1˜÷óƠ™¬‘À¨®˜¼Û(1÷t¥cȱT°Åe¸µß@ï1Œ&cöIùÛF±‚‰yíR[ûj`¦- \ÔB‘:\›ÇäƠûĂ÷£ÆÛŸ¢ë$²'SøzĐ´ÜWJË' hÚ ßß¼° j±èwG³K¥æ¦Í]¦tMØËm¿¤'«Ÿ\ù ̃ÄÆNp S÷ç_¥HÙDgBµWs’x«đ1²8=É÷ ü¸wÜ)ôûù[ZëG¬y^Iúä«Í—ñ§Ÿ´h …ZâÇE‰ï7ˆ;'zHhd–T9ßv.jVÁâï¿>³ZB" ø¾ ¼/ƒH[¶ÚÑÜ ‹ºˆÊ¨³CÆạ́EWM%Œt »R.é…m¬ètO0 bœ̣æø¶ç̃WËLCRn–vÓ£\̣9Ư€±©Ä¾®zè̉"²¹ü₫^‡°Ü#P¬ÄI‘ơˆ–µ/?/$`Eͧia´-ß*đ2—;ôâ³\?Ñ“™ñJjiÑBö,uÄêWÜG0Ç~‚J΋Ẉæ}N2Ơ&{3E:£–ƯøVâöAo÷éÖ`:îî+̃¸N¯C€˜^ïG$)çiå¾§‰dÊ eÖA^7̉¦OD¬WDª#<¥V&('KäMN210Œßr_NÓ 4Vư»qÜô«›ß´ PoeuƠëû2î_±Û¶¿ÓƯË™à}G§@QL‰fY®W£ Ü%})5=úc‚¨SPçDh^â kOáFU«k…©†¯œºƠb]söÿW6óf ±F‹ÏK óµjPÔª¯'é ƒl\½ŸèBuÄ1&D!TƯ"h#D©¼Ö{tOßœ³¶}׃o˜w:y~Ö̃`7úŒ%ác˜æÖđJ=Ó+‚R+¶~ $PRY}ö‡4‚QJạ̀̃À#φáO¨!™Bni&ò©z=Ïy Ø3VơE₫‹!çm‰tóW# ùA×JkÅߨţC¹?>ª¤?¸RW¿G ưŸæY7³"-h®ZƵ€±@(Hos´E¢o…—}%Éùy‹¤ÂKy"j·ôa séáèôÑ;¯Wn¦N-¼€Çϼtƺ­¨[˜ớó́¹*K/?Ǹ¬n­Yă|Ü£Lº̃r-&a₫%¦éñ"¶ßă=²×›a§v+æÉ₫4á=‡çpŒÊÎÉÊgœ—n:Y"/H¸Ëº ñƠèètøäÇ4åÀ:ƯåU>ơ.-|è‹K‚¦´7äë5p' ­Ë"ª́ÜÁw]µQ¥™$=³½éµï÷ƠÚV¶ LJ4û`ß,Q}¡!Dº¾)¿Û§ÆŒÛ 2@W v¨èÑö(à+¦ÀrHâ6“Å3b ơ÷†§·@rxè ƒ.‘GÂÓeÙpiFưeéqæV4 Tw”"F+…K%)z1{—°j'¾ˆŸ±̀OH)qvaUhokÑ‘B—™ÓO Û̀"C…Đ¿`!çSñƯôÙ}ea°A¸u0r\í›7@º8àiVhç:Haù`yHd Ëí7ªîiă1́Í¡ªůd¸u‚éV¯hSV³S.PPÑ- ¿U´Í̉Tä(e0ëߨÀ"̃›KÚ6À­ÄÚ“E¨\mä%wZ™ je|½«JÛ¤Ù…¤Û„–@:Bü0&%Bj2ÅOä#y Îû©”p0Z!é»DFçm3Û»{‹>±ywHÑF)Ve›Íø¿mº‘·º˜¢Hp }Y–Y^ÏÏWÀƒ:§µ€0R6ú̉ÊĐ ÂªĐÍ̉Y‘(ĂÓt™Ö8Ñ}‚ÄH2|)«³ÜóÓú™‘Éä©Å7‰xj[BVMùôF åH%.Í‚7Â.‘ÉP:µ4#_¿Ö²$UŸ¢Uöï‰j¹¡'ñ2tZŸ-hÖS¸¢P}lôŒi[‚x+Óxí̃.$›kĂNב‘M±́1 iÉBº½¹*Ư^±;wŒ8j6à&E CJPO…’zî„iÙjY›}Ç^1`Z¿"äùb₫ïÎƯk}¥1ä<€sµ̣p°³ ´†ºöÅ&́ü”Äáˆd“·ơ|º\AnèÛ´ñpO&Ȫe·íIƒƒÉ̃˜.®£.đđî{ñ5¼…(ư1„êØ@Ç ·¯v{ü•ÔÑ\«¾±èĐ6Ïñ»Z2¬Ú´Ô€ău}öûwE:¸íh~ m·ÑQÆËNdÙR÷åÑ'&rÓ;G@F×Ïî"˜Ê>9•Pơ.) Ó₫âPˆṆ̃±R4¶,{ÑA" îd5DtaIO(F¤n‹M_W|‡0₫₫.¼ >Û¬Ó«¹qṆ<…\È©!×)4ơ<&“̀;|ÑÅX^ơ:Èï¥ô²Ơ»9U,çühTƠ&g»ô:üǯ&¯ó¡ ’¶ F{Ơ„ññ·9ØÜ k ƒ9»HTÎ)ŒX-Tvï;ù=“4ø-?kßÛ °¥”Ă?  ¡j́Ô™e¾₫tÜ:>E`‹æRjEƯÛ¸h•G±âÚ&kÓ<.“‚Ö0½»xG̉ñ1Nv˜÷Ẽó¼µ5§X°‰”\£G'âỖ$P1âÛ—Ûev”ÊÖ¸sÚ®- £ô.¦ ₫j¾h¢Ëù0¥_-c¡=é1ơ$ºüLIå;d5L»µêËQ*Œ₫|´©q“ɑ۾@ä~Ơ@ÑQë˜ÈÈ÷,ˆ«´› à²3¿ƠÉwc¤†ƠFÄf.¯ª0Q¯7s¸I¬ Qê¥q<óŒØ”œ"›'f×Ä0 ó¸ E·óëe4ŸÙj> ¡°.Ă8R~Ê\ÿbjh5ŽÆơ©¡KÂé«{L̉ yâÇ¢hk₫¶Ê Lô¶PƠĐ́W‹‰¥Eåq¦M#OËăP«»W|ˆ_dÊĐIÔºtëÁöÜf̉eÇö¥C¹WfơûÊ.©﬌BS|½l+},8—8Cè¢zÊèQ…%2‹÷“̉”+ÅÜ]̣Lu¹æ"¯³¸Çe>B7q½*å‘­¿ƒ5üÀ3g–"èöè[tk[×!ÁCûáÖØ]Ü …c_–=æ…4Ë₫ôÆñûÅgU½‹Oúfé@çÔü·úU?¯' øg0…µ²ÂÈ¥\Óvç7‹kB¿™úíÅWR§|ïj¦È£ö¢Ă ˜HydUDѹVhisXÓ“¥P·ÈÑÇ\æ~T„) &lH«i™¸Æ^₫)Bœ¹6Ú ¥¦¢â•§ hç§rz4Vµ´¾çO₫0.bR(L̃U0¯M[|uüªÍ.O‚;́D5ºì̀Z”ê«ăÏt¡¯ƒ-«nˆ B}juª#|ƒW3Åg¬«ÉŸ§́‚̣D3nh#;AùPOa1!²;:éåcù=ö=Ñ.`/{ñ¤®ƠÏE­Ë|ˆxiÑ±Ä n’sF/Vđzª̣¼GHđ÷!Đï` ¸Å7‰êÜ¥•$íá½Å™p ¢­E>9±=ôÂxa¯†ö­¼£¢uö3á Ëămé³k‰X©Ô³1ccX¦Pd˜Đ^)¨öʱÁc]×܇.ăc‚2^aRULŒ£.¶°(#MS_7­I@Ûº2À#”©ª”̃uËØBï¼ù褄˫Đ^Ăç>zËÊ«½6ăÇ/%́+#O¬v¿+Q8ÈF&ưÊk¢v[Ná̃±Æ¡–lB×Î`E‘/ I1Jé×z'ṣ–¹HXts¨æÓfÉå›j‰¦ô53™ă*ÎPçơS“Ô±—Vd›,w/̉®ußa[Âñ½́rN„ˬ-¶¶îË!Qq8‰ˆøm !‹`¥Mi÷†̣î;â³g ăA+P×̉{b¬3uÊîUÂw4åßMoí,¥2è đñ’i•ÇÇ)3—ÖCÖ›¯œc Æ»ÅâŒøëÆK”)9éËC87©…MBî}Iµ¢‹wÉß=̀Œ0éÀrôu®ÛñÜw ,:%')ÛG¢øPÏNN"×4öƠz‘ tI(̣{2™ÑÛ´ülu˜e»wJzÈ&7’H‚6¥rQ2;9Qq>ûO{q-G¼|üëJå.™Â)ỹïó∨’‰¤yà @æk̃„å+0íl iѤƠ‘^ûs†™‘¡“˜§¶ŒIpØHzº¦[+…cQĐÉHI¢ÛèÂ~ÓªNô¶\T[c„W…Ú¢¬µ³eOLC{ub~KºJË©œmíùÏb@½&>ó´­J¡ÀPÅÄO‘Àµ½°¦i₫›+ÉxIÑá1ÜÙxưWßP/ÎR6D{`?†¶¥4Øđ{Đ94ˆÅ}x ÅÚ€B¹=Ó•QoôƯ/ë£T{z ¦[ư2J6á/U6¹kwđÊ•;ơÀd°C<.^¿[#K¾đ¬ï5ëv°Ë©.æghmv[È<ëâV½-¼̉Ë©EÔÅ 6íc)­Œ{₫éc’}¡r§2C­ DŸx Ñk%^“¼ï*h(IU´¹È¿3Î9({ị̈´£´~ỹd™Æ!KÅ|—mªI¡̉s‘¶€µđ«lÇ7J©µh<æCLür‘@̀\!ñ8eƠªÖÊUF ±UúƠJàDÈ~Muª)´~ p +”¿Ê2‹JèsïŒ{Íd/A¸àV!—‰{|ÇH)i)ŸÈkÄÄ~ªçºÚ™Í¶JăkgSè²UKF{Ư\i1B¡ûU±ÇÏ;N¿>’øµ¥eêdœ Ô[çû₫{±*f€+ëç"[ÆfƯ‰¤îåa1²zzCÉB¿\";ÎÀc…9çˆÂ2Viçâk¸2꟭́àœ¹¿Ơ@Ö‹5%f·Lç®óèшª¤†IAî›ïXè̀ƠÛÊè#̃½½—,_̉ƒ6v¹C.&c÷?¶d<«́ Ñ¥R¸Đú1¿ËăKĂFë%cz€‚́RÜyÓº—́n† âiíPù•ḱ}³]ÊN7̣±f<ŒOÑ>æA<ĂƠHçIÔ™Ơ­́ƠÑ2Læ/”,"àăoÆXq¾œ²Ú%Kơ•đøÊŒn'đ^~BÅ#;äBtôbç¢PÉÀ€v́ÿ6)B¼kªO  $âSºÀˆH*&à‡¯mj[¬̀Rj±[ÜPmrØŸ?d̉³WE^Àú6w}­/3ƯD"Éo€̣¦\ơäíür£fz}ÿZÄ—%–bd–cï`µ­l¬«¨åC€t2Ë7‘T”̉Ú˜O–5.{Oîäé®ÛIÜ—?StúÅøjjs™7n"ÄäŸ\]!8ö/\ù’“½Đd,§lÏZßóM"~»µÍùé<Ư,‡˜jY®RZ8ỡ tœÈrÄóĂ0A€û!ë§poÈ(đ‡=+>ÄXM‚Ô4J’½ßØÅàÔ¼\ŕöo#] ×Ç/O˜ Đ1 HsTµúÁé·áSªéIJ}ç_§GæC™Ï‘µƒă¡̉jÄ¡æºióÆtD‹±)æ›̉ÇÑL5©)ûđO…q'ÙwpÙh½âô˜ÈO÷Nü{ VË/{4͇^½"‚PÍüCHH1È¿'ÛY“ŸÊ}Xđ,?đ̉h •ºïˆxçK²XlY|Œ}¦€ânœº¦çJr$[Éso±£ÜÜiK¯ÿDYÙS6PăábTÊÁsàóà¦6=Ï#`ÀËuùăù¾ªùiç;Îfó7»O/_BöÔ¤¡©êóưühu¡AăgO§ŸÄJ°滄‰:4É¿¬ñ¥ ¹K‹²åÔ¼b„$*t‚Öµ66•ɯ‰̀B凯ïY~7¯M®F+¢QÇЉ—;÷¡́LäÁ´JŸ=3ơD’ z«ü5¡¹Ú¦äϘÅ̀zÚ!h”¯¯ú§“ذÂÊyŒíĐˆª/i‚¿ưôØ‚æ˜uVÑ<ç¿u:ú1Ñk›N?ÂT oîÎsQv¤¦ j‡ï†că_—€~,–uÖŸh; §~Jû=ÙÖnóMC;×ăÍ›¬f3Ü—çGq—"ÓÀh œÁwß×&‘ËèP°“¥[c«p›)ËĂ<â;iákÔ†Î1DX)*x¹ri âa†U9 ¡Ü‰0ñó;m(B–íœÉ„æñQoÎ ̉½e™üR|'ë“Ǭ©>1å%©nÓUƒÿµ+ƒÁªTù„ˆª¡‚|­¿Àû³ÜµKêƒÛ·Ú9d†³äI¨²ºÏ:ØN,„”G:hq’Đ{L6U]P Ö%ú'́¤÷zĆ&·Ó=9̃lÙàĐÔ§I턦Ê#ªS§WBE×̀;ÆÁÊO¢(œgJÏ]{…1é“ 3f_àE—MưTÜmỉŸ ”t¿µäôlÙ;¹ÊĂ}đwœºJÑÊ% OwŸ?'ưlÉÛ’Ơ2ôFÔ5³¹4 ’6¦³̣i;eW "å@P6TYyŸ— Ñđ¦HÆÉ[ưă'×ïT’Ïz©Ö¡‰¤g.M6b6úQ/^Ïè·´ßE ¼®æ¹Sd¹¹$́£z,:/̣–U¤4́•z¿Öd£)I†Í¦6\sk g zA¹›‡r›Æ6ªZK &iôŸí£0S>Úî}ó•¯ÑØŸ0`!Xqâ·–Q@hwaÓÚapßµQ·­Ú¡ Ù!ø}Ó̉€ICeú₫Ăk¦Ú ‘MỨ)ïŒwû‚€3µjc?¾?#Lü «Ù-L/ dR’åÆOf 䙺%ư†ÿ2B"L éˆßđÀå>ѱ/Ơ…ûUK?'kgƒ«ăèc•sß³® i)¨WƠË‘×bÍ·w·P^•p!ˆô1Ö!K5qÏmS¢¶‘́Üw­ùSàic+́r£©‹Øœ„«`ôÇƯr-‰ÉA¹’o1¬Ư‘˜ á̉^a äë;‰ËÑ¢36ÿ†’wD‘îÏ貕ºăØ™çèÙ>ß2=Ÿ—¨èæ))«lgÚV%µ £~¶q£×€°9Ш|o7º§ƯÇ „le|ÔåíàŒlGôƒ́öƒ›´ä₫pîS™'¯/(̣́₫»]Ơøa?38Inæá`”•ăûp)_½Åö@êU¨/-Jü"6»’œ..ÂUƒ¾Æ¸ưzØíĐ2ÂÖ½w/₫³] ä~ùø„ M AT^z —Ÿ)®\Q*Û­&zøöÄr“ ¦Ø±F@„`«i3È"\´‹,†áU\(PÇç«C½Ÿ$î¹Çÿ˜‰̀¤ï·ƒ̉ܪ“cM¡ÔÉ„xû1·ú§E‹@ÇXư‰fvµĐ¬ÿÚij% ơM z´#d}JG†@Y´×ßJO%¾ !œp¸xÁRXØ-§đ·½&Z•x^đ¬°M±ßù2̉Éÿfuä’²îô6Ë>¥Ǵsù†HøÊïèƠc§ËøAï#Œ\·i2’аåÇ̣…uơó ÀxKÏÍÀ>9´ĂœÄ-cxb}“Ưäy°<^sÈMŒÇ.5W¯&oàs-‰kÛ]^ˆTNoîj̀%F;₫Wµ«˜@̃½vÏG¿S©ØXt_Ưû$9 êfG ̃›Ûºîw}&ÈT́SÖ;HaÜr ƒ}óX•²ñ$‡ƠUN~¼ß7å…8ßf^—^xú§v1|n‰ßTqá·>=LpÙœcƯ†Oë*,à± ©º¥ƯSG|Í(t©ejµøïy( ´u«N‡h8'£´OA,å»j™3Zú3ha±oPÊɯF6Đ*4§90TR9ü Ư©îñ”½ƒ,²à¨{%c¯§tÄß~%BxæhñÚÎx½Đ=é©4v¥ªïgüúö“cë́JdĐâˆ/?đY|w£"Ûr [y1¹ ¦ó ƯŒŸ]¾ánÚ¸÷ôW¤(X” â¯Ù{VÂdeñ7Œ c _NKöØñƒ>PÓÍ́ww›~¥ ñ66ê—s" ¦Q^<̃º±Ă¦ŸØqäçH2́Œ!ŵÙöb@ÆkÁd'AƽeÚØ—ïOàÑă•½œ•Q*Ów5:öeZíRƒÿ¤XJSÆ­à×ÏI[c|œEÓŒqf–8 MưI^£C ÁO»¬̉:àLÖºÁgLmäØuqĐvÀ‹ÂIM“#µØZ¿Uåmœ¯ËUKAâ®éÿJ%ựnGf̀¹'е̣ÉPZŸ1ç3U¡Nv6 BMĂ:z´ÿi‡§ơ®đG÷AOzA†.µµ»PÏo G†…›iÆ,-±¦£Ë“ îオȷRm±)÷ê@¤®DlÉ¢¦ Q³đYèfƒœǴªƯư†ù…_–j¾Có(sÑwÄ爻¨×m–tƒzàW÷ LS¼6¹´Æ­¨>¯ èüŒq¿•móM@¶ª•€¾ÿ1ɱ£×T;EcËRfL©}ªU¤Eyñ>$ˆx˜8Wû'68¶RÂ_<¥KÖSvù8§/·Ká‡'ñøT댉o2U/ÎÏæµ¥Î™₫ÖSüÚdÁÿ๫˜Ñ˜†Ăˆè[NK)ÅÛÙvcK´Ÿ₫îä_¨€Htˆ̣Ø}în4©#(_=½ïÊL%÷H›c,}8ƒV>Ø ©N ]„JH/±jM_° ÉE]xzê=•m|㙑ï÷0„_{ØŒ§µ<¼ ˜¬€̉©-„Æ‚j½tÎqú¬5‡̣_ œ ̀×u™f©–>ÈÏCÙÍîZ%~TØ G1ŸÊѵñUÇŒ':ÓXÑn1Ÿ}¥Ï>\-Úơö‹iUÇ#&v%F†³Ó×m4BĐéÂÖ—>÷ư>”.NlÎz̉16Æ ĐÑGơˆÁÜJñK-¡*%…j–Ư67Âér¨H€Í‘ú¢˜rê‘ơoz/¢ô ¹=Û½Â8½Z m*$4iÁĂ$­ÉjÆ™3kcÀ¼wW"u0±Í°jb¥:v;¥ñ5¯†Çóï°$®_ç¤`Ăó©J]—!ˆµBÎhoƠ8X3¢~@ämA† ”­H˜*IMÍM.è… ç­°̉SqC ®_EdËƠŒƠ"‘tz[äï­ï%Ă}b½âƒü₫Ç­Ä':÷V/¤xv¯rïPȳ₫ÛÚ®®T–'iÙ6™]Úgc̀5)XŸÆCŸ°›`“̣Ú&BÄÈ7Œú‚tJñ́P…̃„+üGRí<´£ Ôœü³œzX|u™×h=†¶]N›"´=¶­₫là?x-UÙ®3Ï£ù|¢löl÷̃±¤€«W ̉öï ’»$‹̀±>_q̃RíË3JMƠḾéLH3`÷F íºƯ@7XĐ©:˜‡,OÁß• à 6đå6¾xg˜G)@JtÍHÇêqÀ)±ÎĂ"µ•?KºS¢`'ç¯Û€ç؉´9êæê…cÓ³!ïç1å@®û²s™‡ø<óy;„Kög‚©®y³ w7¾»ÉƠa÷À‚#¨.föÆ5jó†Z £a;́Çø ̣ú̀̃²ăîJƱÎ÷ÊI¾¾®$¤È}§6‹Î[¿Gi­WÜ{+^˸dĐbB}`¢VتªÅ"EˆÅÑ‹Y±4₫²ÿÚ+t¦Iw[¯ëh˼̣ÓG%úi‡oáPl¯ïz“èG¶úÑÀóZ»×rÎsü÷dIW- ê,ñ¬úŘxØB¡]4æï¶…3fø’[Í èÂc©/^¶?j-6³¯ŸjĐh(0µú_“hXנ› ¸<´%>M¥)Œ”¦ăK̀Y;‰›ˆGmß0y¯AF=Ï «cĐÓ*¡Yưµ´–ª 'Q Ă>E#—ƒŒ_ûQØ)wÏå·¥®âöơÂL…y;¼ơ“ïÉÙX@_ÊQr k«xe%oÔÉ\„¤Ø̃[I%ëÔ©Ơ äÓNÏë? CxäqT¥Ögô•TŸR”Q˜]˜›Áă‰,çwÍÿUGƆ´øK{\­‡Ö•\Åç{úŸ—†»rs±m|äRm=<*ß#•ÎÇ»ˆzÖî!¯Ử+‰\ø̃¤Æ¯Ôé…ăMpY<é­FF~ s5’B/ Ÿ1*XO&Öô»{hîPZ¹7¢öæ¶T¬6̃}å8 d̀úÆ–ÊÅÆÉî÷BÿqF«¢Ysç!êƒû9xxkº¡ ¦¸q$”·Ár­A¾₫d'W*¤'eX9_|Ö[l®^ aØĐ¿ øäî$´ă¬¿»?@sNïsW£}-Ü7ç¤n÷-–Y˜“óÂOÆB«|1‘ĐÙ™é5™̃Ø?ă'µR‡éeëÓ›íªû1*Ö˜̣4}Fµđ–  ơZÍ_»á Ï5 ü'×eå4H¿đ+¬'›¥oÚ‡ö;ù+} ¡T̀À…fJăp\óô½‹±èí5é°¡÷ÁÛä©È§êăÇÂ6¿GÚYæ‚ïÖë7Ex>äƯ凡"E9«â‹â/% –ĂQ¯;́ ŒƒfÖ…úe&·o„¢ht‡‘y!(a…Ó1“;oï÷U(fLeTŒhd„@:Ƨ-¬0p÷»&UäÇ_‹Qă°û= ‹~B‘ÑÖ_L2®°¤ m/º[ ’Áß°$/%ƒÀo°ÄGOĐ$p±q«º5Â-£|œXăâ£_Ùʺb]oÔÏT/êŒ>¸Á ´ö±•¬ˆèszeêc™]‡‰¤ÏäJÙátêEøơ¡̀°4ƒ̉VjcdÏO>íÇö¡Ñ&uuÓ•đa†T8˜¼/r„QA1)…œGÎs9¾3Íydê[jZSD#âömËÀåL÷·ŸÈƯ¬Ç—o2îd&]Pïc‡å¾_cBv¼ª/©rZ÷¡‡&Ă½Ïʼ¥dKa¤vç#Ï0óƒä^zé«›1k¸“Œsœ1˜ª%¨ă ™©§¡Ô¼£z5­ ºĂ¾yg8%É zj¼ÄXÓ¤<à¤đ"R>kxk r.ƠS‘ª\6đ¾}}Z%ß«²*4Ö‰Åç·z2 xÚW¦fEƠyT+wI˜ùªŸ…¢ªe¡ós₫F9ük±;BKªo=R¨är[¾í÷iñ\4¼¯’³Êû† ñ4§|Z‚‡~äÀ/k¢ÀEx¥ư1ă˜lÿ*ă¢¦]NÍúÓÛ]¹£₫cÈûzüWë*})‡¯â5:7 ’(.)‘HÎr™ºÍÆo%;2™ÅÛH¾ÛÙz»ưĂL\a,êñgZJ.;™Kwđܧp—¶­‘Ȧc‹LF{"øZ̀º~z>ø°tѳ¢Œå¦aÆØ‘øYƠª‘)Å®8Z°‹Ijê+6Ф#9˜_&‘ üH̃ÁVäëƠ»@½:ÂËîcë®a¯ÆṕàÄ $†Ô%ŸƯ]‹~*ƒb•–®æ_ ¤#%ÆcN:´-|'¸Z‚Ë ' vú:èë`SÚï„@å61 ©‰‹‰™¸¤Q,Œoü.|™Oỵ̈ê…üå:X̣ơÔEqR•Ă{=[¨îKj̀”ŒñëÉ‚8¢¦á- Aâ=ưOzq²(CeÀçeâ/±§‡éñ!XX8ºù9ư¤fú 1nÚÍüZ±»œï®:g;`¯@|‹x}Ăaơ’X60ÈË@~ؘÇÛÙùJ}½ñÓNK“/~‚ùrƯ©°uƠưiRoF]6z‚ªŸG|Gƒ²rB+ĂÓ­Ơ`ù…^p ¦ÿ …:y©̀ùâ³UƠV“ÔYë9zî̀eGOK?uùÅü’˜\[<%SÚWY’2!jŸrgÈ€júc€•] É‹ªú(j¿Bă’(öZ2Bôœ×ê₫̣ççjïêy“W‘âNK‘€wû9ă¨`²Âj~¨$Ă&sŸß s,EĂé:ûºFÿK·×̣_ÙöÊV¹s8Ÿ² Å¡«3KAÄuƠè¨ü¦̃¿lº>×¼Gaz~B̉eÀœV :¾?pÅ-½ÂUüäÇhH”hûº%/ê@Đ—ƒe§2&l„Œ©¶=¿¾8ÂPd₫“1Cè9*0-KEÙƒ¢$®SFa´fG¶s „Ơ!ôÆÙ;ª‰ÙËbe\ë@D]XE$z©Ơ¿Äï…Œï;Ÿ3Z½C2»9L )ç(Qb >öàƒhÓbRùáHUac̣n¼a9Z2™YÇ­~[ydg–yh» nƠS¢Å›¹*e÷ 9öÔµë+3)œ©…́[=ÖùØ• TZˆ>ïÈ'R©x¶$MÓ*÷ăN!v˜Á„Œ6]AJÖUơ,ñŸs¹‹æKIµ>< Öz™"éö";³̣́ïI€‡n,‰,¼E´ư›‡b‰±3¤ë )4Û'éY5èÆ7e”_ T+(OQ¹Ï¾b¨ºư:¤_½TR¥³.̃̀(Eâ© Ú’âä›#©BĂû°B*Ø¢9GOx‡mCwÅGƠ>›Đ' ²v]‘½#Œ²– Í́Àq™Ơ½9ÉÀøQj¦‘ßç½øơJχÏ%YÚ́D‹´Gn…äµ\–ÖQ'"ÜîB^.|óù{™YôpÊ4ơ“íüae&-wÜâÍo¹̣퉠_lP€§§£5Ÿ±Û!å¼w¬ÉH:e°`E2ơo1;“V̉̉9÷Ú̀²øµ¨Ç̣Qʈ̉"îÂeù^ëA’Gn:Ô¬;Â)imw~ÚÄS°̃À£Ù¨èOÍ©ÍÇ×=?C̃ÚXĐƯ7’(&j.† NÔỊ²ˆÆ!p±¡TœC¡Ơzaê\ïT IEË>oq¡ẁ«´Á¯Ç&JÊÍ0]…Xb(8Ø›oµ>]—… ©LH*IDÏçŒN<5£ Ư¥Xñˆ­Â@óä7_oˆÊ»×9ÛæƠk•>BªÚ7Á·çäQmă˜{|±d|¨+n%9äÑÆ72©ÈÓWâ°»(đ̉ÚƯ¦N¤˜p‰î¡¾€|Ô°ñé̃Œc~ÆÖƠŸŸ~°Î¢8 9fƯ]Ă… éü›:Ñ…X ảœzà•5©ô‡øY0û™̣ø'…Ô¥“¼=ătÖS ‹yAˆD{×J_Á́ă@j<:´%Ê;;ºh“oeß̀™å$O‡³^Ă >½ÁªY‡`‰’Đ^M[eœß}Ʊ̉g>üls 4k¶éüáû˜!Ÿ•DùEúù×Pé$ ‚RV“t@£óh¨Êù«ö`ư¢¨… ë•âgœ,xµp}êØ̃˜ÚI›©J€¯‹æ¦(é(0ŸÆ{.Ï™»æ-¿¾ ¾á‰8Ÿ z=N¤ ï‘Ñ}^̃•'ˆ¨Sé\w^9ÔÊDßÖíĂ×H˜ÁX¡½ă! u¾Ÿ¥¥çËW­óuĂd|Ó¾ÂñB+ÔÂ>¬Ăw$#ã}CÄ̃2Í ª¹́h‘wØF´Ơ^kv úlÉ~ŸÖçx. Ó¦•B „ªVÙÈ}-G‹z¸Y-„O(₫±₫­?Âsg˜Ô«ËïK‰tÍ#_xŸp̉ÇSĐ"ùÇ_j×ü¦+³Wđu¡3 ?7wu¤ßƯß:ç&äå1j®!ûáBÔ™ˆmÚƠµ¾,ñºOÂEÓ¸÷¤#ºZÅÊ?KS?óƠ™såtœûé Aqµ¯•¶””L:"á<ˆUP™Đv Ó«ÚG<‡§\ơ:©Î€©k³dmh,5º¼_µ¤ÿ âÿ "óƯ‰&·R7v̓‰dH•Ëüuê¥nô¥o=ö¸ A·́ứÂxµâʨbơÜ‘zƯ®›Äˆ+~œCqÛôm££{œå£Ó’ôŸ—ßĐÁæ ÚYË9ñm…U´sT  ô/©vhJ́mµç£Ñ§÷ÑÛ¥/óI÷…#‚ç|åËƯH‰~/ü©ŒŒ# µ#øóñµ1¶F-Ø`ʹFƯÁ{´~»ßq…Yxâ:µ— |ƒ­ºJ¤çê­È!I¢$‚bÛ̃tÍ7,°&6Ob‚JqNKW^¾ ~¢ṿ[Đ£¤£–?”ê¾¼#Ô¹h }ËH¦ÿ¿€GcƠ¢̃OB8² \ <ÔÁ'“ÅÚÉË9¡ñưñ̀rû9ÈÍzcŸY2™­Ư<£’ ·¹ï·É킱—x[­#lÙá_VÏ#ѵ y×÷Ç]Ồî¶G P¿`<Û"ëƯRçÍ»;YeS`m ¼«„yŒ$tB$í䢹]¢vÿñ~êÍùµo¾̀üa–ỲªO¿­éĐ¾êăÖ£ZÇÑ”lu%S¯5V¥CÆ.Ô&n¦^›%́rˆ•nö#ÈđhĂÄ>dÏ×áoù?:ÜxÏœ™^a€Ù“³¬~hA€àI-úú°¶yZÄØ \˃h̀ÿù¯1E·zK¢§0ákÍự̣LäÔuµKÙ•ÂÔ4®&>ɨæE¼Á ơ¯ é@­À-¤ œhöFÚĐyluƠº¤ Ë2´aoÏÄ ŒwNG:cRhÜm₫Iú0ç w4 ̉·,q®dóÏ`èd¶™EF ·kmÉU±¾ˆ»j~Ă58~§ßơÂƯƠÆß ơú·lt ‰+'üÇé娅(yŒ*¨ö Ë­\Q•1 z"¤h•ÑR´†đ”#êxPÙưă­™Ö5ỵ̈”µ0ÿ̃Œk9Ăº\́"ÛẮ¨ ±cøîD9¨Ts–W̉O6Ñ3`JS«t²¹á/èăih÷Ä+Ơøß…/º,$÷R4Fû g;2eÖùUïIÛ@̃ˆ2_Á€mf8¨¡‹I g-̣Py®aºUÚơ"úkơÖẈjĂlÑ›Öở«Ạ6’öe°­8Ă%û›ä›¼G¢)dg>*Ü€e«O j¼XÀ²—\̉ت wo%†T :«¾Ú¼|GS+KHw…(/f {c†m8Ø'gÜañ›0v™êØú~…"…^dÆÄ#̃MKºă¥00̃(B¿WP…¥¶/ˆ³YFIt_=K  1Wœ̃…`‡sj„1bɨlË4±â7̀´™Ă ¬…”äp °ăE¬¤¯Ö œÿULÁéø˜­`Æqª¥XaÁ81“²I¨2cêĂ Ç&[ơñ>ƒ{¬`ÎO đ{²”7Oï "¿ëvW0lhƠ ̃΂âùÓÓq—`ɲÊ×́?c¹[¡·uR&•Z5· êƠ¶‰Ôđo—œcåz« ô êÀ‡âhÓ†aIơ§r’ymû†Ùe:F%@₫‡^9ÿÔ½ađ]&l Ú4kGº¡9<€Ûê%¥çêHPUé₫{ú̃ X%à|yæúd´º§e=)ŒYÂ'øư»VBÙ(UWŸƠH ¢Â}›‚qw=fK¹ ßFE©z¹u³&Cx!Z ]•AĦ° ₫¹îƯSJD+–¢ÇÂs Ñx†xÔFU3•º“Ѫ˜S”¨vpn„mơ£Ñk×35Z­ưG{Ù2Z„̃Ëvû‡¥Ûûú·º8d3«wÅBÎÁ¼v¨l¤%É£¤IÜG ÉÂk2¼VÊ5+@¢Úk-cG²veớd̀ûiçhQNÛ ª*ØDV¹¼/T¸…«zßbƯÈ'̀̉(ÂZ‰ĐW`₫&ü€¢hÍæTáĐ“.¢çà UinIÈ_ùÆ%¶´tµßÉ áë@4ú9'M._”†Ç‘9ßéđ¯Ô¨ôNöR¦dÎ|×”tœ¦8̃½w¸wJƒú¦i9Íü᜙«k•JH1á8 vƠ¨Üh:_Ö…H7̉ÔvỊ́Nä¯àD»¯p°Ç`¯ª˜öÈ çüœ³˜<¶Q¿ód$Zº¹Ă58ïW{ˆ́î±zîµY­víqÜ êc ÛÏÜvѱù㦔Ơ¶îÅ–û3G9Ëóq™P2đw£†ú0çÀs» ‚ @%Ö÷>‘~¸Ư¿9è!i©<<«–®,mÍ"sM¬i]ư$́Z‘®¾‡']Äa](³̣­ơ:¼¶©Uäå"ôqƯˆ%0ne…¹~s…m:V¦X|Đ}¬„†€øëåA°x8I1'ƠÅlT¬zPô¡³jƯ>ókj¬`ÓåXpPîÈe´ÚVa«ÆC½úUù]Œ§®9˜0aÍ9°&ÿÂ=)@'̃^·Gvo)®IëQÈk ¨A÷…̉'d7£z²ªÖ̀]\ˆ_ -AQ¦˜È™|u‡fh\¨Ø’wñä j}ÓÔêˆ"4ÙRŸ3̃€̃àÀ›ÅvGÙ-« îí»MÉÂ)Ïc̣éô“3›éÖ‘€píG¸Ûû=…«Ôưs0»è÷ ù"Ê{cU×¥ü)ù½À̉$I|yұt}àÇFǬS:́#˜lBR7Ö÷5z=<€—ÊØ°/[}\¦̃ßâľ²Cs”iÅ9¤tîi®G0¦ëÇ!³0ñ¦Lé̃b"a•$qÅ&ÄÄ"e)N 4•Ÿ́Ct–Oë„q¼ÿ')‘£Ï·q, Œ¯5îøBÉó£́vœ@@Ê"&jVüÛËOŸz$Ë̉×ĐR #»N­.óxn•-‘O-ÈBñ™„ª„]ü{Çz{ZÓm¾‹*p/6¼₫·¯̣ư;^Leñftƒ$«D7¶'ĐÏÔÀèaá|^̣¢9“®w¸æ’̉ÊJ&kçpâ“L¸]p¤w±3Á íI|ï}̃,̣-¬â2ºj7_½zs̉÷8XÉ>éQđ¯~W ë™—ºˆµJÀWâˆÔTú#VơfR†̀å·X,J`ô¥`ă¡IƯ£7!ÔMP7Œ~Ư©êûûq•-ám^p…aß”¡Ä±~«;K•‡C-¥‘UŒBgo ‡H²ÖI75+ë>ÎB́(£7¶×{ Ị„é¿5©Ơªí¬nUKäb$pưÏjÊwú¢z3EcỤ́̃+„bOÙă°d¥CóÎ₫*Ä:Âî;ǻG x1MÍz c¡âẸ́mu0rt…ט踔Q̣¶:ytyơXÛ lfB?¿Ûi,°#÷µvàÊ¥%m±ÄTüaû] A-Öt:đ§*ësCüpÈÅj¢§5½H+éÓĐʺ3Qư² ÜöË.ˆú³ñ,BxæË ÎGœ(SË”ÍÿŒ€@×i~8@§>ƯIo | ˆ!”ß9¾̣½Ç̉!sda×.1taỄ“ NpSTÔÊŸ -2ûlđzßó9[Yæ»dñ§ÎîyjËdd4ËfÈ!ÀѰÜơ´0IåĐV)%äÆâïˆ{éë°BùrWcqA¢ Ă“—€ø#ßk‘µ´'•¸¶§o'+È(/僘«Q«ñ+ơX\ßdt’’Æ¥î£øđ"Æâ0 [r¹'ÛŒef̣4^2‘[ÚYÜôiâ‰.¯*˜S¨Àûmåd‚å`R‰mö€đ %÷1 |(€½Ø´<~¸Ïx“" ƒ‰ÅO¦îA£“ÊBXlw¸•ĐàáN¼ˆ·vl4³A*œøbR¦zDiGؼ’8à{X'Ơ“d̀j1wQÙµkô¿ÿ°¹úbSåA¶}é’±aÙ;øc¦G á̃œªÓŒ½`ÇClZÆ;haé < ƯüD!:Ù`',y›(S=B[đ£ßu‚@îqÊ1\.!…–›µ¸]uj̉ø†Ú˜3*`{/Ó)פí₫»¹`Ê}2ár²L­Y`j̣²îñꂬ½@]É9bĶơ–¶2Kê*©”UË© ¼ó¾Â½åÊ„Œ́W÷/YüG2ùư/«ë@Ä{₫l: dq(¡É@£₫åjNúÑ¿'ƒlnɳưĐçd¯”ƒÀ«4‚_YåDËƯ¾¨ø Ññg® ¨yw«Z5ûc¸ÑGÔ"*é̉Î7âö=4û²%Z/8²ô÷O)„;5ÅdáB±Lö¸ª́}ï­WL lç†+>›ÔpT–—!A\Y#'—p[xsZwM9:4œ7®+BWV˜î —m¢Ë#˜1 ù©3±K7émŸpkü‹4«‚÷;¼€Dư¿hD†J熸̣û7¦5b@RfHÆjȺ0ßw1¶E'2÷ÍáJuă¬ȵ5ơIú7|a¸o£̃wÈ6 h¨£×K2âg÷XÛXƯ~5·Ú-ÅGŒ%pN ơ­Hđư›k£wlùzO2ͺnSKvF₫3úç3„,OVüQ¡HïÔâ„…æ]v-ơ 9?̀Ê•ˆÇû̉7óRe7ñsqiÈü0‘ø®ÿ‹;ƠúR®½Hđ¦'³²_mWü_,=$W¨¥&Z±³*†ƒˆä\~C~VL‰ÿHl@„ ½?í©#0 Ë34ƒ„`ÍcûîPË´Ø i±>™*Ơ¯{eƒ¾öÈZNÊ–Çú“ËçáXƯëH–è3̃J¶CÓ}ƠAÊMæú.ê;§đÀQ©`9D†Ú}ÿÿ¹¬u°RGDP¡tQe ÆE†TOƸcÂäy¦%e9>œO*?Z"0´g6’£ – i?—¶ö9µF¹àåŒ5ĂX4Ơü™YÚW–Ȧ°k†ü@àå""^;‹ëm wTÁầG|FB1z°§©ÑRä<{² vjZ“8î§ñ2úö^ÙĂ>è ËA/Gü1đ@í®M^¸‘dwf@ù/Æ)ˆù!—à®úx®¹Æk¾?Ö@B +G@‘9ăáÖßLZèÔ£ç­P¤V€‘u&>ùï8nëB [ºa¶.uȃ¶‡Ê6f±7oz[鯼èV®=j œỊ̂ a(nˑΥ«ûFévU™Üü¿Èyô¹¨#>SZn >Wè`ºR2j/Ă6–W°ëö‹2ˆè*³¹D—û|‰6yU`S7&R ÿ;ÖÇM¦åN³Ü!‹í±üÈ¢ûöDp¥ḥÂ@ííĐ¡R½¯¾À g µ¶(‚!`;ó†®ïI0¤ƯĐÇh^t₫ZàS©+•´€đû&̣éĂăơmr~~û—€+¤\₫;å2eÄEåÿL·íI÷E\₫I†ó½=æ„/ß-M̉åÉus|¸†Đ̃ è2x²(ă•K¶Ăå/4­̀9h@•l$º>….Lê—‚*ŲÖë̃/™̃êï©Ï₫£$­’m F„‡0ˆBçªcæÑœư·½.ëÛœf<k£&êy#@/„I±O5›jTWq®Sû¥Èr6ñåPq6@́—lQÅ¿ ¤̉ÈŒ5 -]`6]Ÿ0+‹u}E¸qCÖŸ384ª·/è•æ)̀åÈRư•*׳­ʆ9%ɽéçâ`bơ± Gü°€å̃¤Nÿ;²2Vđb;₫‰E‹„E¬̣đ)“d῭Ëhæ”´ ÄËkRTµ½óë:Ơ¡₫Ezª ÷Sè¼/ kƒS ’D+ƠÙ‘Ôè_ÿëf‰Ư=ñÿeôÎV{-¶ÎͤëĂ^æB‰™K¯G£ÀÈ TqÖ’2̣̣¥^§öS¶˜̣asf.¯eˆăy*9ZÉc̀#“K…XĐl’H§9¦´Á! – ß<¥låŧàĐe§LÛ(#¹1îJë¤ K=ˆ½íÉ̉Iđµ´,Ë:‰>SfÆ|¤h‰°̉ÚÇÎ́xÉsSªßđhØơSæ ;ÁOï«64CÙÛʤĐo<˜ÂĂ2ƒq:³éîq(—FCÓ”CĐEmp̀éÊŒ̀ă7±£LV…©›¿Ú~V‡6À?$|w‰(l4cn„mjÁñ1Ø9Ö3),–qĂ˜qírOỄu]^ƒ÷Ï- øJ2ñÍd•áaje¬ùu…\(¸§_q3:4´(µ §4 w₫Ë{ÇzÆḤ.†_p¤Ÿ…WŒ́PË·d ¦áÿÁ]́*ꌃIy“EŒÁ]©̃Ÿh¼±|́óơư4́Îí\Y¸ôv/P^ ö!9å(ÆM v) x2œ=»™>ª‡ ÿd[ä«e¥™ḯK;$É„Œ-Úz‘¹…ljo•FѼ†'à$°ÜP¤×Ë=¢–̣O‘=m Ô¾_üơ{—°Ñî̀iÛçz{ˆEÀ‘¤§¦¾d’è)¬æT%J¥ EX3¹PâÿÚụ̀†6}³6—y!Ñ4"́ªăû’3Î/Ê‚ ₫"T‰#'Ià6’zä‡éZL O†‚}dơQ̀Å-Ư,¼“Ø‘wà@ê%ä÷ƯÊ5ă‚6úù0U¬°đ³É¯Q9¤½(0 »/?Ơ¥Ó¥^°zI±Å‹Pt!8¸¾”Ụ̀×c]„ciXRÔaê»ÎràÄƯâ1zjØÊ.dÚnaêç£y<3çMĂLQân‘ø¢ÙÖ}8Ư+›¸ø·oƒ¿k y¶¾UäÏ"m° !ôp¦Ă×Nn¦ ̀ÛĐ”æg%4 †9«ƯÊY“Îû0¼g,»Ñ½A¸aa¡¥÷•‹˜:ÆäÎư´0ù$ÁP–…]¹ ±‡Â¬ GÏôÖ=¥đàåJ92Â\B< +w)I b5đĐoK`-Ư4à×g-óy”ê²j]‡Ö xJ“¢1ÉJ˜†Vư½¬«Đ³dªvƠ¹û/‹,È¡Qo؆Z̉øđ Ç‹æđÖæ¦IFt+©ƒÇC[ûd̉6öÇ'1ưÀL°_Ă ­£̉GHÈ`³–LèÛé/ûµ £³' ‰øŒ—Ü©ßûPΑ骓]:Vr¢QXhqYô™ùï×”¼Ÿœ¢ ÉtÉV“aĂ»Ư22O$VÅ *ªeËcF́&sîÖ,(¶(†¢\ôc†Ö—÷ËD₫$|ÔLFiĐZ⯠ư^ ©¨£§.)E:@*m|öµyEVioƠnª™GëŸ/¢—UäŸ%° ÑÚdsû·ÊÜy×åíºDŒ̃&¨æäU3ô¯gÜ«̉ê˜đ„ŽpdđĂ៮Í)YÙ¡›e6₫¾Y1ÿ89ν¦} endstream endobj 647 0 obj << /Length1 2141 /Length2 16992 /Length3 0 /Length 18279 /Filter /FlateDecode >> stream xÚŒûPœÛ¶ ăîî4ÜƯƯƯà»»»; Á‚Cpww×àÁƯ‚=ö̃ḉ{ÿ¿ê½¢ ¾1}̀5çêêÈI”Té…Míöv.ồ L<Qyn+ 9¹¥‹ đ)¹ĐÉÙ̉̃ç_zQ' ‘ˇL̀ÈåĂL̃̃ ăj`f0sđ0ṣ01X˜˜¸ÿÇĐ̃‰ fäfi gÈØÛáÈEí<,Í-\>²üÏ#€Ê„À̀ÍÍI÷·;@Øèdibd7r±Ú~d41²¨Ú›X]<ÿW*> FFwww#[g{'sj:€»¥‹@è tr₫¢ P0²₫MŒ faéüXỠ̀ÅƯÈ øØXíœ?\íLN€ÜUi9€¢Đîc¹ èÿi €™ù¿á₫ăưW K»¿LĹmŒ́<-í̀f–6@€¢„ƒ‹‡ ÀÈÎô/C#gû#7#K#ăƒ¿ 7H+Œ>øư‡³‰“¥ƒ‹3ƒ³¥Í_ ÿ óÑdq;SQ{[[ ‹3Ü_ơ‰Y:M>ºîÉø÷±ZÛÙ»ÛyÿólfigjöSWFu;KGW ´Ø,>Dpdæ@;'7 èz˜X0₫\ÍÓø·’ù/ñGư¾̃ö³ @_K3àÇ8og#7 ÀÅÉèëưoÅÿFp̀̀SK€1ĐÜ̉îOô1Đ́üq̣N–]¦Ác0ươơߧϳejogăùÇüïĂe“S’Ó¢ư›đU""öozVn= ;€™‰•Àùñàû¿£(Y₫§ ¦?¾̉vföîưè̉ÿ́öŸÓ§úÏbP₫w,û‰¨₫ ¸;“ÉÇ7æÿÏc₫·Ëÿ¿é₫+ÊÿË€ÿßz$\ml₫ÖRư¥₫ÿÑÙZÚx₫Gÿ1¯®.³/oÿ±vÿ×TøÏºÊM-]mÿ¯VÚÅèc„í̀m₫ÛDKg K ©’¥‹‰Å?£̣\ư¯³±´*Ù;[₫u¡è™™˜₫îc«L¬?. çyü[üXÿRÜÎÄ̃ô¯íbaç99yÂ}ñbx3¬¡)Đăï 02ØÙ»|¸>èù̀́à₫:Ov£đ_¢€Qäâ0₫A\ăơ_ÄÉ`”øƒ˜Œ’ €Qêb0JÿAä₫ ˜ 7€Qñ¿ˆë#ƒ̉ôSåb0ªưAÔÿ  ÿEÜŒ₫ |ÆĐG>“ÿ¢¿ºÏhú/øÁ ø_øÑ\Æ₫ÁGIfà‡¹Ù¿à_JË?î¬A·?ñ˜ÿØüÑÿenïêô¯èæÿ‚Œ-₫ Ù>[x:X|ÜÊ,>d–ÿ‚Ä­ÿ?˜Ûü ~P·ưWíÔÿ„bÿpµû˜¾é?ÈÙÿÉ₫álÿ¿ÔƠ;ü ~”îø/øQú¿ˆ1Ôéü'×_èö/"́æÎ߇ÖÿiûÇÂèbáü×Ñ|ïânÿ/‡ú]ÿ?¨»ư ~Tï₫¯súˆçù‡Ú‡­ĐéŸ`ÿkÑL\œ>^f₫¾?¶đđ߯i@ ĐneÑ̃„7Ī.¤ư±Fß~’|_ó 5½÷S‡ëo$èTêề -§{áÔ‘^”ơ]qª;¡UâWï“–èđÖdå¶gŸƒD•™ư6¸åi¬Á©ÂáúBXz5¡ŸWG@kđĐ.̣\GW.$¥|ôG÷~Iụ́µñ°Å}åƒjYø—̣YúXơ½À’ỵ<ă¬R(zB´Käù»û9´œ©wb™DZ8ßÓXÖ"oŸ,qO ^j,ÎƯ¸ŸpupÁïĐÆg(¼E~¥É`/y—­.{´đç ̉¥¯Ó£0übùVm©m×ÔWë6¾̉ɼ—› ¡ÄDßK®-kÂ0p"UĬn3ˆFw©eµ₫ê4Ùh¿×è1³J'Xå­,p’$×"fGºOlhñt#°æåʸ_L%~‘–ŲÚ~6ĂƠ|Á~•Æ;e°v×4Ø`¯-1_ÓÔ¹K×¼W|ñ[ÿL"Kê1Ü7´9ăäz*3_#(1±Êq̣$“…í "^x%¢_0c†DÉÇ̉™hœ¸—D Z å…•!ÀØb½u`Ô±3̉©TIjuƠ˜´ặÓWm• 3]×á qßÙú́*]èHúlăd¤åÙyu’ØƠo} ‚1‚KH,ÊBë¸èƒü‰¦áÔ§èy=̀:«©F́÷éĐ«èlTJ”zZ:”˜ûØÓåQ2cB_êLTRE'¸k*Ëû­[ÛÆdà)‚_ħËư˜¬)é辉NÖT¨ ĂqăĐPÑùøí|‘W›©Û̀Ü1quƯ‰ º2Cå[OjĂÍ́ơGsS ®„tz‘“:ư Œß;~´Çù[˜¬Öy%b¼wÏEưCrF*bÈçѧ·†ư«/ḄÏå‚z߯ ¨đå0"!vÊâ2`¼Ès đdd^’ û¿Îú.jr4ç÷çâĂÄ*á£p(Å|#â4lk_Ov]P€+P=׺¦±œë§{ó^ˤQd$Më†o‚saæưd4<₫N8ˆË[|v Ë¡Í÷]Z h{~Ĥ¬­+VQƠÏ-ÂSûñƠ(\âÓ/«§á‰ ©¥»,$d£b­+¤|Y„jF€Z¨5ç`wbØ7’~û ÷¾§0ȧf[Gˆ HÊQßâ¹t+}½ă÷₫V]ç×C`Ú°ùÀ¶$ Ưú Æ×Ë&zPîFWߤ"`âiOÈ)‡¹FçO„q¦‡„ĂK ÊŒÓsÜ|9H³†=ˆ†!_myWÙ\ŒLp <œ*Iº6`äDD»Û\I‘ÂQqdÅă”ṔÓfÚM¼ø¬Ơlºbq3·?“64ƠÔíđlNl'å¥;ü_¡=Ă`B­61ƠzÍú₫MỪ@öV¶ñ́|ù5N†Ô&6Ö÷¼×“tƠ¶ª›Ä€lµÄĂxöÁ]A÷FÅÓ9=åÓ 1ăY½@û«đ΅oto³̉•-¿/œUsİO0Û™Ô=eTË ă8ʰ‘Ưú„-’"SÔ¢8f™ƒ6‘ƯæÍüÓG 1¯ơư₫E­pCdè⹡'q­ñiöä––o©j\0½ntä̃ˤ̉¤J®ê6³Åvß|/²rv†vË ¡—\a~YAæ­{f#KéëeK å®í ‹éÜ”}C³0h¨Ñœ_w<˜è]§̉,;¶̀mÆcËt7Ǿ̀úNZÁx…XÁï¬ `cóÆ=R•´`t H'¡̀>h½Q¡ÎuµAkL j#›CÛœ–˜J·×ñiÖ‡No™–cßæ̉ß°—xÁ¿¯ê£MX›̃Yw#̉Ó+zÆè³fâæ(éÛ‹7ơ ?—)£è¯zp̃±u~f nÿÆmQÆqE{F ÿi£FüóFq•­ûl‰d0f–v&‘·ydt¾ÀÓ ó¸%шfuzŸ´à`zÈ@ưp1 ~Xoê¥6¯ç\¹=ÖÓJIkís˜U$†åaóç¢JÍgåª^Oƒ.\Ù\æA!L)oCÀC”x›8ó:s½é&—ÈsâoµqÑ́¶ưä9@‚¦³nFV5K/÷Sˆà½3HGßÑ´"…»ƒ§’·Ÿơo Ù̉Â@ÉD~Ê8-Q0ȤI®̉˜û˜Ï‚ /₫å1À}÷ô¯T¶4ºư’Ü¿jÎ{LŒ9Å!WBÁ|+;+1T¯©Ä &dü¦Åü‘TŒC=` íüĐ\FÔ¤ÖĂ6I¢¦Û‹P×å`D qb’$©ÏO¾mÚ#Bs?UE–XxJÄZs‹ ÂÉ1W=œTzÚS)ăH&~búºTó™µ’́ŒNQ¦˜ËÇoûœ4æbê¼ea¨O±Î̃œª¿Íă×è–ùYJ›¯™Ẫ¦‡)iô²±‰Ü_[à÷¤F›‚ưiàĐrtÈ­ÍàŒU6?¯ÇÈ[åí·Ñ^Vä}j¨É—º¶e3™Ï¸¡T0w£,̃ëÔ–Ǹ±\Œi¦™ÚĂÚ̀Âæ|êOK)ăGêo¾·»NÍàúộÖ´Q“ Æ»ơ~6k‰î́ H]µÜF(j0ñB‹Ô…ßûˆĐrI:Q L)¹aê8qŒơü9ßÉøyÄ#/¸ÂI*k߆[¤‚]«–ü)Yy{‡Î“ƲU\΅àIË‘Fáđ‘ß[ фӣíQ=ŒG.Äog3¾)RÉÄm4ßÖ¹Œ@K¦† Y™Ó[̃œ€º7¨rO5~Π$kꀡ±O~²€â]$¶ P÷(£öù:°¯Ŕ`K£-1–*…̃팄G GLtØ9ÀO—̣‰ ̉ëdÉ:ÄØú’ÀM0BFMÜ‹iKËÀ\•tSm£K¼s>yÂlƒè¥á‹v:<*Ö¹!w&Júj}¡3t4¢Ăû£ ßÀhé² ØLàüíçê§ûŒ}Øư.¬Œw‘!IA¬:.̉RÿR—YnñGUêa´Ù‘={£íăP³_0ƠÑbéø|oTˆœwïß̉ä([Éç ˜Ÿ»ÔÀ·«8¸Á=$¢¯û~¢\êmQz€ûÉ)´QÏ\h@Æo¦ÜƠ_)2m>×äeÜFÎá ôRÊ.‘ư‡ûƯ3̃&<ï¼HY“ƒóh´/¤IIau#ËÔ;ƯÙ${—ÂÓ¨&··³ë—«qîØÀLù4; ,ô!ĂØ_€ÏHØô-îăƠëF·—·PN«aïèå«¥ÄFß®i"0T0hMuÓ¹§æíh”Øæ6ÄûµßϼÍSŸ=úHïyfù7eà aĂå'¼ “Çf0ÙYaÂùâXÅđ?#—#áGóÊ^ΗëøR‹Xî“y>˜@ÈPœXo».;û¿™/kBnà‰ë«b»ƒ£ñÎSbÿV“Đ̃ œ îar¥ƒÇ–‹€VKß‹;{ ́#±ápŸ¢zLP‘¡`‹œ-ÙŸ ÷£zàj̃%¥7+̉ ÎZ¨Œ¥¸Ï ѤA&ocYGäă³I#d°đ·êÑÚ-Çă{å–<¸O˜©à­B¼=ô•„`î–.ægµ6̀UiΤ´̉Œ{Qe¨E7:¥û…ÊdÙÇ2¼ư¸å# ¬(˲ZÊfe£ă°/c̣(¥|µ¿¿¼!+5›N÷[ È„tÅ,÷‘±e†W…´íeđĂKá¸û+P93f}«ÁÂS®–dS7G\ïlƠbÆÚ₫€'ǿ ˆĐ2ÅË#D]éÅÆ@²‹Ùènj6£´eZ È́»^QÅ«¬—₫œNï“>Ïä V—¨™>ÛúQ¶ÜÆaẩOuÓ=FÔ]¥l{äKmkÛ†̃p„̃ÚaÙÈ́ôsÔ. Œ˜:S9ûÂ?u¹¡«»~²óÄ1Åû¸í¦0ñåg-f„4+ï[œùö­3]íôÁ~$NVÏ×µ3Seg„ƒvëÂÓPUÚ`ÏhФâĐ+ïeüKb±" YVđz/tJÑĐ„³ºDc‚2$)3m9á¿WÇàĂEl¦³5³Œ8»;{ºè*ó öj§²°æ{Ÿ£Ûj&öMè±ưY{™[‡~©˜+ц&{Woø3B´Â7%f_¬EXK 5Dë|’Kk`ûø¨eÓSÀ W¨‘­£?̉²MF I42Ëφ˷D‚íohèAmÎĐ¾é5â±XrbƠ’Sª4ÔB \‘́Ô¢ƒktßpÜï̀f°ñẁsÊ{¹Äe^–¡₫,—œ åäC#m—V#ª¨L"ƯV‚¥¬‘”Ysù5j?F§îÍ$eu!A%¬pwF$&½ IÂøJb¡:5‘ëÖÂN+çGº4a„°@?æ.‘¦7è[ˆ=ĂQ̃oƠóí{¼ưˆxmi×SO-çJAtx¢qælÂî®›éxBIÈ*ÓêCGĐ̉[…O2æå¿íäœ÷¼EµG?[á¦₫0{ÓYu:‰‹: ¹»¶́Ä»a¯sPú̃#Z_—ëÈÎÍưñ!Ôg•9o/ÑZđđVAOÅVƠE†ÚŸjd†/24 A4¥UNK<đ̀ôuí’F(¤ZÆíĐ,_%hù»„JñCjÔÚ TFAï²pD Eµm:I3yă±ÏB“à“ÉrFgÍÿ₫5¬b•˜iÍ"üM`Ÿ‚ X¿nă®× ¿jäQơ£¹•đF2¥G¸±ˆ’)_ơn‘₫lƯ r_Û¾í2¼ Ib- _U-£jØp/¿ü8·¯¡î ëöoaZ…`Ó̉7 Xñ»$Ư ä¼É9… 1|ÂỮCb ̀˜b´KÙCöÙhv*Ùíߘs´ĐaÁ´lm B¥˜›YqÓ" çºÚÄÍí)w°„ô†/¨1©‘)‰W‰$E%ô>ew*̣N°¦ŸP­b¾»WñrZ+cϨÈ î¯]º“á q®†ư#²Ư7ÄÛ1ï[í¼fÖ€*Y?È́l÷06kÀ̃VÂpÜ{Ư]i†‘¬ALàỘ9¶ữ₫o±@A½~tG6ƠvÅ đ<¸ÅàJUĐŒ=âùU ±¶aSa¤ÖÀqg(èVÖ#m¯‡`‡&†y…¹ú'ƒ™ß'6L‹/̉Ë#̣ªY)ÜU=çRÖë†Á̀({“@© ¡¨³’6í¿} @Ă8É7‰®Í·“£~ZÑđjÇU®»{k`N‘Q?‘¬Ëăóív”; ø"£Ö’¦TÙ6ÿ³̀vÑ:!. T¤ÜæØV*¤Y÷ơ±ø°v¿Ôơ ©t‰6u¬ºÏGé¬ÂÙÓ©ÓÅ/¯ÎmÖ_©2ÇÏA׸¶/‰ơ…ȿϪÍ6ù>µ*fªÅY€êS‚»̀‘ªL]̃:Ï̃e‹ ̀ÙÔø‘~ôư×ȉj[Íh’́sGÿäF“̣7_¿ÏßucH56¸åBGä j̣˜dK‘)ëC@¾¶ØywÀ)>úØàæ41‡M1¹ƒ¢ç$av}5m;ơƠ³ ɺ !—æ¾³B jô´PßA=pÅ}i†§öâ¯YµƯÎ#…)¯I†³ÁäÔ¹«®!çN·FÚỳ‰9=ÆKÀ²ÿơM#,ÈY¶/‘Aù(‡¢NŸèh·ÿæÀßéë́7-|ư¾ªh̀!EyVnœÜoüÛE¦ÄÄ£_ÅÏ´Íp¦V~1ñđÇפœÆ‹Ëẫ´¬‚Ư …xü’g7S¡Bd¥Rp=²ÊœL¾Íˆ`•U²s=cĐ׃Lh‘Uééè¼ïï*Xw!Ù¯p2R•¿Êü±Qb Ê7Û £C»”É;Tˆ=˜Œô¼×„0¸̉–¦Ô^~P PÂM¼¨Hµ4$øâÂQ˜T­–`¨Mz–ûĂÔÅJé_cá½(j~wø¿5g+8xÛ­à ¥̀wx4kMÎ-ư–€:&hJÖV³Ïµjq­́ ¡Ñonàă ,×ía±ƒ€ÑçßB¢œĂ,• '\à%@®?A2½Ăǽ…öβœ252v-ØPú¶&¦p Ç«C̀Ư…ëúÅ­·X(fSá͉Mú:Ê[^̀p UåÛ-Ḳ4—’Á5UĐê„A,\ÿâ>kL» ÙQPđ~i$5^₫)fỨ³¥¬3[MEÍútc‘•“Ï–8OˆAå@…!DĂƠ•lª‹úsâÚ~@ơª<éÄ%]2Î)¯ĐNˆ˜Ï‚Äûc`E¯NZô ߣg÷¥YÛ"‹cµ=f/¢©÷¹2öÂj;ë²l§¸bâ–5{“o ”éÇÀÂÙṂFø@ÅqB¥X¦6 >wơmÑ]Ö¨é' VÍ Ơœáá– ÀËDí=k¤ÁfWưN wüdçê|?ƒßN°—X5+ÄdH„™ ̉Ê»2ăà8̣€ö/ê·³­¬/J¾'ˆÈuưb X3¢3` eŸpG!9€FsVn¦µ@¢72‰‘ưÂäbF ’a<:¥ÿ¡dÜ[:+Î,Y(WtÜ´₫EO£"éʶÖT%«†áV₫owGÔs̀ïçjWáú¼çB-|̀Ñ́₫ú£Y©Ŕ©¤Â]n]².æö™0gÆ÷Ñè‚dx. *£YÙ¦Çùk³Œ{fhçDZ0`‡ˆ…‡zS|SApC̀pé 1„%Àí\Üé'Ê ö»§Vb'T$¢³’ƒ±ºSKZ•Çí"tƯ¥H£fh+[ ¤̣{f”Ť'±ă›̣)8ùÏq‰»jU+9}[âMá₫Æiâ0"NUĐb<Ó{T¡¾¾ă¦í©߼ d_n¯ Xµ¸9å„ú@{A©e9ª™Mε`¿ Ô®n sTaQYâI*‡µx‰kÚ†ôËßE×^³đ6¯ăøá4>¼.6sá¸z­»'av4HjNŒ%X/ö‡¢8ûbåîæŒ‰™ĐĂZíØézq¬oBX >đ~Ñ|êƒÛ.·Æ”T îi¤S—[s¯¹̉O@ƯÛF&ÙG1½}¶åù>6xÖ“»eƒư)<úƯË!¤&4g¡{ú·(y¨Ú5tæG¨¾ XóÂ.~̣M4c%äÁm–XJSàÊYßÁ BÇo™ïh’øự̀9vŸ¶?#od²N[ûÅuF I< "­q®Nœ"ühGq™…ó´˱wñEç¬z‘ ¯åBÆËŸù¼NU,íøå#)»'Hô²Ù0̃„îÈ0/KÛE¨f¼•ăpKKầĂÊ\íW¦l Ù2!ö-²ªÑ·8U°kÚ2răArJ‡oü±i|°pqÉ¿”­ZôI=¿\¦{m˜))_hĐƒTx¼¸!:„.u ö€": ” í”̀÷Ë>I臱¶‹âŒƒ¨đ‹\/pƯR$¹–6TM—b¦x›mŒÖđÁ˜îG­¶ UÎàI Å´*‡¥ï‹Ö#§"ƒ̉X̃G«ßĂ `!§R¤̉É÷u¢»ˆߺǧ!£¸ iÑ·HÔ²:'C>Gá̉>́sgcE¥.."æ|ăˆ"ä„ä¹) 7„a~Øk…ÍáÓa¯ă߇¦œsóDEûÁ0z̃äe}zƠ>­r^ ₫µÇóö&̉̀{÷YQóơ;Z úÖmsñª]V‹>‰ùA,6é·9ưT?wipáđ(éÜ×î„€Á™yơ;R_h²1Mâ/ă¡ă0M*TÍéáS¹|ÁôßnM®Np₫…8:úú̉_RÙ­å7o{»ó`v"ûeq/Døœ5¾#áiç¨Î·1iR*l"‹Ü´¥íA ư*Û‘¨EÊ^÷DŒ`_¡UMvR3Enü4ăø&&†jv.Îæ³u7%ÅLă%ñ:1µÎ3ö%úæ˜1^ÓtC}Û… 0wwHf₫è 7 êRơJg×2a —ö@#Ù™Ơe7Ơn·f‰—œ³¡ê ̀×Ä7Æûä>Æ„@¿¤m«5₫©©«Uº­(;1n|ơ¼{r·Q€»f$xÊDH!ưWötH´ñW›óu¸¬̃ËX`j÷»äçü{uÖä3Đùưk˜ù¯UAÛua‹‡ÆĐR­·c1ºĂ:£¸]J·œHж ¶Ùpßxzñªª‡»¦́µ ́’2äX¾™Đ\¯—€¶…̉Œ€Tê$*k-°}º} “—A"ƠV«üư`é^ @́ªÅcZlfÁ¯éP}ë îa£Lú}Ü̃¿©ï® nÑq CƯ2ÎÇÇ\ ÷úG½íaÉ«>)Ö4¬}₫ÇUØc¢¼9=“4üL‘SütëjÊLAiåÑ12̃mŒ%.³·ŒÀpÆâe5¿³¬ƒÇ-±S2âoméÓ\m×½ºVªt æ“]|pŒ­¶ä€Ÿ»~è%É6Ù¹6ư3ÈWQØw¯ºĐôª˜ÜådèU¬à"5 ^J­èKÉDo®&¬¸™½åØPëZ;£ë  åŒ o`Ç1H¶`„£-) `¾ïqêx,Sq “\˜Ëʲˆ}IÙ¯¶.g‹8æ4Ú Óñ]˜?ƯºTT}¯¬°§¼£Vy×´$²S,=¤dêm¬g­›àøhÎ}(ç\Ùd§Kờæ$7ø̣̉n_¤J9|‚hG‘q îÍTôÆØ^ äyc\±¥XÜ/Œ»ê; ̉î÷Öạ̀ĂÚ»=ĐÉ$SŒ÷µQˆ! ÷Vu ³/̃ék˜VÇzpỂ nøZ`Z¨Í]ëe‚(0¼T­ñ[fĂƯÏ:6fǰV=Ơsw>| Îsùu—q@¼÷"ªJOAdŸOn”j•‰]ØÓঌ¹Ă¥q| ;ï•Ó 0/%ʺ£$È4ÇÀ ëæóñáR+Áù’•øST¶go¯Ù]L˜ƒÉe1¡ÓáM×Ü%qB¦ÄE¼ùä—ÖÍ@Á¡Œéù́!9*0…z¥Áv¼âa°{¨8IÆÆ5êCÔ °ósĂ#Deįñ"Ú¹Gàê6µÔa2â3ÊŸ¿å®bËOD†W`ù®¥; ;^IpöÛî;†NgW‘ÖgTkë,À€­$1Ø÷¦äËúU$¬±zªƠí̉é¡•p„û\f@̣ó„Ç-̀Ïî\ƒ́ùŸK ·xBÜ6 oƒÚçƯñ̀åßrµ°ơÍÔ¨ˆú…$盦j–«*qH2t²%"<’ ưûgđMmy^‰×ôŸ¼`kËfăɆ¹¶~Đ1Ù©Nđ6ßl‹Ôß·Zɣω# %AÀù`Ư5lÊëđ0øe’zïÈ_på®–É»©l;¡5A'tbûmW{Đèÿ`Ö(r ÑƯÈQŒ”‡;i *̃¡ë|¦ÉÚ“€Ç‘-…q·só Ônâ{̉X4¥V–êW»•sñ3ÿ”3v²Fî'câ1}mS‰²vb0ÏÑåG¾F ó°…È!6 ç©° 7\ưî²"¢Xj#=)Vv)t[7xü4kJ>¶d£ÀîMŸ;¨«̃’§3–Ïmùóă} cDRûkBØiÓƯ°Æ$ç¹Óا ÚNÀÊÉÆŸ± vÔ¶…"«/,~﫹3<Ư*_R¸È A‰j¤ª îG]´ß@Ç?mÑ*ø1Ù…¬Mïúv¦½₫¦ª³­Ư@3-£$1/núJ_EîaÇ„ÿ¦Ư»Ø:eͲ Ø%1XhôñÇ,Yk(^¯˜}¿„̃|u9~Œm,دŇ'Đ3đèÎlƠođÓ–+Í•̀€?k9ƒ+›Sxm5₫V‘#Y‡ F^ ]Dé₫º¥ơ\EKè2éx«×ŒÍ̃ó9ôr Ú^kYÔE1ÚÈæ'í'FWÓ<æç—*'Âr:bxmØÎí«̉€Ç+ ¶" Ô0#,ßÊKVŸ bW˜½9œ¯äî¹Íï](D‚Ç]đ€ø´A¼¥ñÉwîÊ9hX“n˘8²ô2ư=Ú¸ÛÁ“º {§ňĂy–Ø[yµ$½÷#eŸ²°h08\Y·wÆg.`Ă2&rJ1 v®ûT´½Ë“JĐ—'Tư¢V ?!ç¥kưs;¥ §¡†ă…´R#uăœœƯS> p²½ï“—Ÿ„¨CÊ„³È¾÷̀È-®,,ƠGöÁ]o¨đD‡«`+1́–{sđÍyñø„º!ñ°óñ³sÜÛ›n‡Í2cïËÉ?h̀V¯;ÔrjÔ€’̀&°E•bêl,Ç"­©ĐơBËñ¬¾Î˜K\?ó<¿¼‹Æ.Vñ¤8Bkqơ¡¦ö‹ÄOßNÆ ×àè)"*æ}ưƠœjâÁŸ•Û©’ø6?ÜB=äi²Ơü¥‹++}Ê÷8Ăjz%§”Ó˜½" ƒ¯H*ó8‰ÖÓíèƒi­SGwÙ¾Ö.–°#JæŸMo,&i‘’ư”ûƠBî(ÑŒ€W¾‚ÙVu‡¢ kÁp‘¨¹_k:Z¨bÔG¼ơ•]Û ‡ƠÑưAt¥g‹ô[ú #) ­ê}@•j‚å'fäF̉'Ȥ›iX(n^﬑7Ú¬¬3¾AC Đ¯Ÿx₫TÔÉë£Æ_âU¿noh#âś`7́©¾4sùF̀ĸ)ÜØ k„|ÿ ¥aº¶Œ t×|Ü_3E¹­ÇGëñŒ´XưCsQÉ[½jO‹¢F±Äu3âåKo0Ùú{Çø“'$l眶¤èeúÛ8ô¤mÎêJH©ó%fxà¢ñĐp₫ ´vT́ˤø‰½®Ú¬-îH«»ŸF@ISvơ:!ÎܵA~HÊn…²>+PA¬@R₫˜+~‘bp6wñ W~ ¤›êº¬§{Ê–Tăêà»áÎc²­^‚bX5™,4E!eû;̀¡± s¸ÿ`ØEg†É¤‘ÅïB¢C1˜‚MÙà̉Đ)c„‹1iâÉạ́Ï|9Cœ0=ă+¸í\xê×~M¦U¤AÚ}˰uŒ2ZĐB9¿¤{đ¹œ1S|w%yăăS 's3c< ŸÉö§(›\É´ô‹ ç¾* =´:˜M\É^j¼Ă@lNVlXư È)ÿ"zÔ1ÂFàY}¼sSÏÈƯñđí||ẃÂçhCñ²°›?¹¼35˜äÜRß I‚翈w5œ°µøê„/eø™@³¡¬“Yk×Xæ1UùÇy€m…₫ê€xeăœL­ƠÈP„†û 5>¢́f̀…=”Ñá ĐÅYđ|â’FBGƒ GÏ“Vc€ Á\ûa'uf{•â”âđmI{’8¾¼OE¾¯tQ¹ñ>¢ü~2ÏÔ+[·2ÔƯ%ª̃XCAU¹¨­4•C×°₫'¨Sª§í\¦µ=uï•3eùËÀë{×cù¾T!½<Í M\)ó6\£ö(&½÷ư§¦Q@«SwC€Uƒ‰é´Úơ’µLăhÑ×Ñgíô…’UÜíÚºª[OfUZ½~J¨lB;˜ PKåKˆ’€Xf̀zÖ 4´‘˜™ö‘A™ä’µÙñơPï nN÷O° =T=Äú 3É`KGçåjß…o«G2Çà î.®¥Ù·=}äWIÑơđRµ0ơ4H29ë¦GăëË.ä9zfZcđŒ$êà•‚bàç·‹½dJÓă>.†¤cNÅËTEÜ S¯°̣R1~®“n}£;,nÙÑ¥ÀçXQ÷[<̣›#Û9l¦R'b{Ưø×ßB Qµ Ă¹¢MCCiP‡3¥Í5e“q̃ûaB³†¥›(Çnl,3åë*D$™¨UL™̣ú£O'-äÀŸ±¿Î›‚î<ẉa#́«×~ăª³ˆ"™2DT́àGhÎ₫–Uk[Ëæ/³Zâ)e‰kưX.óâ¥$Q­Ë«¤0‚•ï¯@ª5ăÄÙbeFVWw7Üv˪ôi#-Ÿ‘0¼'jj3)A‘°gÄrè¾6ÇÄ,ăJr{¥;3N_£O‡ÄMaبs5(0…ÏQ¢r’p.-Á-o1Mÿ·q¹ÛL]3Ü/₫¹^Ÿ¤Ï_…à(¶ï⯴’è Ấ8ä$]re¢Wôº.‡,Å6›eKÊB›8á{ä/TN"gŸtđŒ¡À ‘;áoZû„<6îSÏ«D!Ñy Bû"â M ‘gO’´Te;Vºº̃ơx×ƠѾFæ]#V ­râÊ‚¾z„íjJ]·;8°úĐwªÓj0·ờ÷•+êæµúY«6²ÇÎÜ1µ;ÀÅcvc~̀Œ„|o¦Wu&k¬¨;‹ˆÅ% ±ÛËỤߘ¬Uư|…HƯ£zûd]*Ă Æ›œFwcY•´NglcæÑ¯_Ɇä]EW|ùâP^5z¹ơ­ÛëZ1_äA]  í(BHêDẤpPăQ0mÄלá×üdËƯ±Hª÷́¹¦Ñ_VÂƠ­¶Îîï¨hDÁ´g9œ/3û­¥l|—. ³‰ëçå­%å”S…̣8>c!u ~§ÎKWÅû¾(EƯÈư{5̉d;åœB2FÊ¥.ö&³˜iánpwt?/Áo7“áÁZœQRS=ÊVÈŸƒ:PT¦n6ñQÛNŒ-É’ŒONlüKνg¯₫bªl1î>œV7ñ¨­zP^̃±tR÷#’”ÚƯîk~«oBí&¤äæq0)•~» <ñtùq,“₫”zï èÛ_í¨7¢ÓÈ?!—“vh¿Ë¼ÔºÊË™FǾFÙy½JƯ¾>V ï#¬¾VJƠ Üćă₫Løåt ư‰đ"ÛHÔ% ^ÉT)¢Kñ—êƯ¥ÜeÛÄ"Âf¢ïü°cÇ·sî€]©àæ:[x¨ê2x‚aˆ!Î=íđ€ “:@Qc‹˜ØX- ×ac‚f9ï<¥r÷2^¤÷»íô^+Ơ…ÆÛB¡"_ó’qà. :,£«Å_‚|̀­×WơK¨R)C®LØBà•+ÈiƠÓ`Úoæm¦÷¡Œ|oꃄ™ûđƒ²—ÛNn›Æå¢;ËgÔŸWfi|₫ º&âu ltÏ F©+:}ˆ¿°~61T̉^ÙơĐ«Á­S̀œpđ;úư§TQax#‡bÀ…ÀuăƯaÖ1×§ơ 2¤¾r&iÂ=døíçi‹9pcg*X6¦Ä§*ëç^2­¥MG̃`₫đÛV¸ º̀ØG@oÑ.³5¥‘×Ä0h0¡€¿đ±]ỵ̃!‘›9¦“ ah @÷i^«ø5M:đ#́çÙ(FûdöĐƒ\ú78¹}‰¤LÀ 9.©PWï¬\.Jg?Âc’üƠĐ6˜{ä[ÏC»i…¦OªZÈ `ÁH Î1ơª°ê¥Éíäj«G3ë˜N‰üw¶ÚÄ 1 kXRÍ#’•wª·¤keeFîƒ!ʰ1A9Ô@zjêÏôĐ`Öo:Çzóú!vä߂ȿaC`Eè߯œüÆ'9„k¡n˜ !Ú¥Ä&`vÔ–úø°-ìáD5ËV5€ëx@û éâ-̃6rüœḶ.u¼: ª<ß±‡²fĂBk*uö³Ẵ ¨†5ÚÛØD4FĐ6.¾Ç:¶&á[%U¤;EZÚ\Îr4́²Ḷ„*Q  ÙÔà½C­&ÜÚ"tiËà"3dG̣»ÇÎÈ$„|7¿¬Nîh¹"°» ä):êÄ1 Ñ:Û ́ TQ"]Œ3̣ Ù̀‹ôùÆSp·̣ó“WSƯÖȽ/ Đ̀ P²Æ5¬À…ˆ…ĐdS½Íöô!³Ó}–1…ü±E€{EĂhE¹û[© /åĂĐdÑØ;]DuÅûĐi04 ß}p•̉œ°ù çt‰íÅJÅCA¾ŒUđM~=È_Q‡RªđÄ3´4$x̃×… ½kÆ/ĐôS₫4âѨó`đ1lU­Ó}\¦}z=}C/,dPBÚ ùw¬1†K̀óö¦O$‰¸^¼H®é‰mîVvWôÑ¥4yº{hŸ^Gf÷‡~›S[#Ă5?S­^’f£E?,¹ÄUk7=tèȽ²ç¬9xy_"8Ÿ÷Rußa\(>Y¢ «€x){t©ßÙ­̣¢T¿ÖY*謅XÍ醛±V¨GjÅo ¯iD/rƯkr¦úhN̉4G¡˜̃Xơ&-0oαÅѰüÊú`bé û#Ƀîïàt„¯(öÚ+ß™åíơ„đs?Ç₫0 ­-¶¥~/.§™dçáÎÎăư¾FÏr:Ø'åÅÊ“₫NïPŸÿN2ѧÂå(h*¬Ft!©ẓ–çâRA$†áƯ´9¥l­Ù•ÈüTÙ‡æ.”Ä₫́ ¼.~«¤ +=84üä~SÏ߸{KXkö´[Ylxß ûáQRº]́đ¢fAµ́Ø–J6Ư{¢Éÿ*“/R§,÷É:^&>’ĐĂËY»M§fk*ú·bZĨœjăÔ©Œ&p2æv{¼:bF{̉„Åe+ë–)dĂ`¯±ê¬Äv,±B₫×Ü–Öz$R/Ëúo= ™‘–VÔzO¼ZQÚ¸}¸6¨N…́Ưß=µ§Ê©’&+ñÖÁÇ ûzvơ@8;—dˆ7Íi€‡̃Ÿ´d¨ ̉~2&œïV&¾ßc̀o/)‡ư4̣êæŸ‡ÖˆP|°–茩‘'ÛM' 2 #÷y¨—ÅÏY–¹·Œ«¹̣† ú®ÙV8ŒF©v1À6́Ö‹ø%q¨j{­ów¶đذ¹;4”ÙüÉç;̃®ÛèS‘_ÁƒÄ1"*Râx—HÔû7Ó&ë+Ñ—7 ?=|–[S1j´M›ĐëæÁWpu…ä¬YÂG@¨ç¨¶ûưÓæ¢î|±́`8ö ¯¯aQÇq · jå7kq‡‹ V·ư2¶ø…gŒƯêè îôFºJúR´¦́èúû§̃!*ÅáơöºïäB¯³H=‰̃ưÔär«”ƒ£WĆ,±Çô¹yÓóđس` 2Â¥Í9Nç›vM‹º—u?ë•PDVẸ̀vh²Aë}̣̣ƒîZ>ă«Đ̃ Ô™(ÿr"I_y?¿èbëó̉øÜ¾̃iÎ#́Ơ~ßÓw´Ñ¬Rf}'sƠi„qH$¾I ¢=L=¸'qàNc˜µ² „£âزeúZ89+%º¶ÀˆñăZ–æŒ_¦˜ôù[æç̉$)â-ÍtS@y»ˆk¾kI´™›ÊíÆéưë“83Àlwo­\áñ ‘±•¿ Lj¶I),iGÄ7ÑbK$0îû+ôîª̃ÎhÈ£§È§B̀ó[“Xeùw…ͯ׼ƒC>ƠQ­6G˜ë¦’¦.ÜÊäŒ̣‹Đ(IRÑŸÄó>3;C¥&Ù̉+wq.ùBè<â)ëÓ¥PwœÙR¶S°]O&Ÿó$³´ Ơ`l)/¨¶X¤é}#rUĂGú‚3ê}OŒ½Y‹zăÿνÜÖñ½Ÿ–aô ù†rö1è`QAqˆđv́×ßnäå•JZÓ NÁz‚¼Ú‘°)d5R~Ïü=ؘöfyĐÍ®®¯^ŸøơŒGyb“Íl̃`i‚Ï9ßQm& Å^…†¾Qé±+½<̉a*AZJ¹©†_aăryÅS@‡èhÖ5=Ư­/}ÂhM'-ŒJ©băªçqY9\?€mưÈR¡ï°Î׿Ư†Ư.1e'̃D,F¡ĂđçáĐKY…’í‹’K†=ơ'ø/³eĂ Ôú>2»¢øêØ‹ ÂOơ)­ZDNĐg»{öö{H"̉$•2¼SÍñ"sÊôL1D}¢à’•hăä[Á÷ß̣‡ĐëîZ#py…éÈúœÎB´èiÚLa.ṿZS®Cª–±®1^-¹ö¡èFơ_Ú.ñ¼SÉ‹3’Ôh@LL{亮@ƠÛ½’„€ç¶ ´—ÓÚ'é ¤ØICù¾&̀îz)¯½đmhhbápW‡¨ïL•·ăñCÅr•wi™çrô—ËC nlÓzl̀u¢ŸÔ¶àBăKÊ?)2ÏÜ´‚ç̃Èưúy’̀I )_ÙgÑÎ">s~v§µNoIØí̃رxnŸ2èö^św̃vöǪ™BG…ÑxXNmø{«âüÈơ|'b®tœ– (o½Ç z½Oûë°«8mfzˀ雲ng+Á« ‰„Tœj¿f!ÎĂyGonsÙ=ÎËƠ‡Í’¾–6ÿ3Y4ư×1¶Ai?̃¬̣·–æ,MœÙÖ½LeÆĐb*BÛ9|m)¢"†J§¶‹náÄuÆZƠ“U3´j›ü—ƒ¶ô A¡:z9Eîû÷•µ£TŒŒ!‰eö‘%ógéëuFÜL`×.)±Ûe-„T̃ö…+.‡d Ơn®MêíĐ`L‹a"yW¬™7êh¤e.ë²~KB´©gm‹>๳ñOá­6Ư¬Å%µ̉̃ÊÜ6YÀ){ĐC̀Ä 1§üĂÛk>µ}̉NbˆrÆÈ%ÚøÛÆ‰8JRÎ&Éq1)Îq±vđ%^7Ư)öÍ‘dê³Àư%&K9Ơimۦы́9Œ >çJEH!(×@UGó*_%‚¾TA¦#¹ư²UHÓL\q³.'a:³7¯Ç_²5TÜ„`uë‚ÙTóCzån‚S¯‰¯cdË­©Í‚ƠC̉Â.eU+ ,tzƯµ2ûÖÙa^îÏ¿îx́wK˜ÜV,iä€p ÊÅđĂR¡I›´d₫F®$¡Ñ|̀%>Ù™^ñVÔvUư~*wĂºAlI~±å —7Ê“µóùµÑCôB}Œg×¥ªÅo–eäMơKONQ̀¯ư•‘¢ơ¼ĐRÈø‘zrÈÆ…j‘ú×Á*[ú7éë%¦u à_%;>&7[‹9Äc©ñë€ j̃±‚[năuÓ}ßËíÁ‚©«|+¢w9÷S®2³è®»đ¯1‡Reqô+]MK~/ûæIæF#\Ó®5=ιÁ²×>©”‰²˜ó.xnLj̣Yµ3Ùc>ä\¹­¹®5ü_]¾“Œ°Á{ Ë$uⲡS#ÙM%Ø Ø¾`ẁLôÀ…"(ÙôuÚ„Â2å½Z÷/¨Ä3œ¾BS¹R?™çDÜưYnY_×÷èk‚Rjú³ ²MÇ/'´Ó’[IÙÓK–¾Êœ0Ov÷ƠK. ÄâN°Fưmv¶ư®c₫Z z¯‘¼%¾Ë²±`[¤Îư©”Wõ¶rđñíñFÎÁËơÖáí#¨jÆÆăTµ‡âM ›ˆ“í|*´°Œe¦N^t/ÜR5 3ÇBú9´×6É`Óă"%ë1ÄÄ@zé]GúĂỲ5î¾Ă–nQ̉¨ÑSơ0Oë̃<§U¹’«½¤„.»+‘““ä”+xœsØ]H¢‡<30(ơ¤ăZëăW]<jpœ ₫‘fơ ©§D̀«oPÂN¤Íˆ~ø½SơLHBNs`ùƠ11Ñä \ĂyÛpk%Å>d¢Ú‘úÀØĐÆ‚“ăÑ. ÛC· ̉ÿ¬?êÊAÙ ü37;h0­mD˜lIßêBóèá ©eK5`ˆÿq!k«DơxÂ1Æ<à*S¹l»₫+đ~ăæn&¶l·’÷©j…I›áü âèËû~–ƒ±Ás¿¼·c Ơ"Z¹hjI¶y|¡ÆB¿û<è ¶“ ôÍ›ơ.Ṃˆ÷97ÿ€í¦v·ß·6ƯÚ‡A–~zÀ̃Ø*¾‹W²×dÜTLµâ›äC‚äËá¾ÆƯu¿&y@d‚b÷á˜‘å·øÈdBătßb·:́Ohx\Âä0 Ÿ ,A1q.ûA¶BÄ|¼—z2R€#äÙ\XºVÏ®×ư»­Ùök‚i³ªY₫À¶îø‚S¦·Ùñœ\ƒư‰e ‘OĐl“ˆyPôØ”"/n¨§œ¯:ï¦$eXóù“Fú°AÑXŸ(BULkằ&V’§PRf äƒ\ª¹²Vôs}~I*­` é +•Â0Åç̣ÀéK“KgœA¼×nátCó¢sr"…—$Wâ×6p'ñü·gB«É J­œ˜#©4K³ÄG©üm endstream endobj 649 0 obj << /Length1 1904 /Length2 14217 /Length3 0 /Length 15384 /Filter /FlateDecode >> stream xÚúeP\ÛÖ€ \ƒ{ „àîîw'8 4.kp‚wwwîîîîÁ —-ḉ}̃﫺·º^Ï>çóÇ¢ÉI”鄌m â6Ö`:&zFn€ˆ¬² #€‘‘…‘‘‘œ\¶₫g‘\ hï²±æ₫—†ˆ=Đü¶&j~S”µ±H9Z˜XĹÜLÜŒŒfFF®ÿ(ÚØsD œ@ÆYz€”5Đ‘\ÄÆÖƠdj~‹óŸG¥€‰‹‹ƒöOs€Đdd` 5›­̃"X”mŒ@@°ëÿ¸ ä5ƒm¹œé ¬èḿMù©hÎ °@ è´w₫( g`ü»4zDr€Èá/² ØÙÀx[°­̃L­ö€·èeI€¼-Đú/e™¿ho€‰é¿î₫¶₫ĂÈúOc##+[kWµ)Àd È‹ËĐƒ]À´kă? ,l̃́ œ @–†o ¦nR¼Uøw}Fö [°½Ẹ̀₫pó¶ÍbÖÆ"6VV@k°âù‰‚́FoûîÊđ÷áZXÛ8[»ÿ‡L@ÖÆ&”áhË j ²sJ₫­ó¶„øÏ) `cddäàâí@#3†?¨¸Úÿ2ư±üVƒ§»­-Àä­  'Èøö…èî`à€íîÿü/!21ŒAF`€!Đdø÷·e É_üv₫ö €6ă[û1ÿøü÷Iç­ĂŒm¬-]ÿQÿóˆTeEäƠh₫.ù¿Baa€;;3€™ÀÄÄ̀àx{đü_?  ¿óø—­¤µ‰ €ë¯tßöé?);ưƯ”à}ÉÙ¼u.@ùO£edc4zûĂôÿ¹Ưÿ4ùÿ×åxùmôÿ›‘¸£¥åŸrÊ¿₫äV K׿5̃:×ü6²6o³`ưUƠ®,Đähơ¥’`ƒ·i²6}ëh:.zVö¿–Aâ  ±ldöWÓüµ®úǸY‚¬ 6 ?.#ăÿ‘½Í˜‘ÅÛ%âđÖ™€o#ô¿aŬlŒÿ˜5f6v€½½+âÛQ¿Àém(.ö2€̃Úüfx+Ñ`bcøÇ¹²³„₫Xú‹8 "ÿ'€Aô¿ÄÁ`ÿ‡˜ _₫!vƒ̀?ôf'÷_âd0(ÿCoñTÿ¡7;µÿ×[tƒèÍ‹á?Ä`0ú/ư±S Æÿ·l€ÿBfƒÉ?ø̉ÄẠ̈₫C úß̣û·”ñMÿ…¬³ᛳÙ2¾¥lñ/|Ëùß®̃’¶úßf“Áú_ø–´Í¿đ--Ûá[\ûá[\‡áÛÆÿ…oi8₫ ß̉pú¾¥áü¯̣ß̉pù¾¥áú/|KĂíOüŸ>3r´·»sÿ¼̃đ?üçºçlŒxüÍ«ư[î+…évǘYQú®¾ßÀ«ïˆá;í+úđ>\³ä„.ù́…>l`3¾6Xhà0Zè®{$…ră,Ö¶À˜nÓzL`đ=;È82ïI··ké³X›âœ7* 8ßNSá̉Ú]îΦ~áưÜX~WfvGQB 9 ‡ÇÉÉ‚ éß*”ÚZ.\%4=Ó&ùÉáJṕ4†Hüđ!©w˜™m«o©˜öh3‰đèÅVú&ơˆ?ñ ‹@Z0M¾Ó%†÷Ié{Óâÿ̉ĐaDY€Œ'MrgâJâê,M£íụGĐƒ -R-…®ơÜO yi¬–Ù̃(Y‹Đó;́~ Ö&+%ưYhxù[UÍæ0ÁUnóĂàk°N”Ë ̉ys®–ª_…ºoưÔr©ÂØÔ˜lY!(á;ĂJ@ÓBª&oÙ`Ñ×ă&ë~›Ẹ̀[W@kƠ'Î "=¢×NËytxoP=A.JR\}\ : ä'£0ñ¾*‰’Îa{mà́|¿k}N;2Ưz†)p̣kQm31,i° FOŸ×O_½†Iû¹XG;K†>¡Pµaeó»́es¥×.Ô£Âí> :ÍWîZgMG¯®[|¥S—Çû³ªá‚íákµÓS P–É®ªpWj–ü]q§́¾ Ç÷d%¼oÍ–,Ç¡%†̃¬‚SͶ(lß8lóŒ¿q³*[XÖ9L¥{zsó¾Ø MPI’ ßÿ(†,³¨NNFóĆÏ̃„^ $iHo}æ‡\ùEûøÅ8 ×^̀ä‹§Ê/₫Ư¸–àÙ¡•å5ä}©+&°S{Ù~/5ܵQ8÷´ÛêiÙëÇă÷ ×^œiñ°ç¯ö)©¿€~z‹.×Q¨›¼£ZØÚ«T]´ä)?R¦"^”̀öÛäZ”!†.g±ÎaA‘g'•"†úƯEï,ấ#lÖF0Ă\¼®̣7¯r=ư(t¦¤É)†‚#E-¡_[0`¥Úv¾¥ï*½Zy᥹‰c9# Öơ¿ê.&ëÅ-íµI„Éá Ñm†đ1?³êâµjº²¦ËIơ "ª벿(grf~ Çù¡Z2Àï`† ^Ls<Éyî‡vî€óưv^ 7¬GL燳܋yŸCƒ¶Hốk̉âNu”ˆq´‹IMù ´‰h~~<å´ ùĐĂùPp gHzÀÀªV̉4"ˆ&É~V%mÁx6®?I<íL*÷8¸P|ù̀º>OG4z&¼Ó@Qâ°ekyí7¥éQpqWCûöL˜_1kpÉ??Hs‘̀¦S2è,$y/ )3§̣c»<ë¾@̉ơÔ|÷ø± =·ú†¯tJÛĂïa£¤ó"¤âÉƠKü¦vư­™©-ơ«E¿“{LËZOÔÖ­WĂ0 9Í;l p̉sĂễ)ósÛ9?„‹ü ń͵9>Ù–¤|ÿ»Ÿg÷P;¥E–´ëbÚsƯ)yÓ5rŒ•AˆßtPéơÚ‡q‘‚́r­º5ăñM#âæâ¶V~#°‘xG¨'O@vlÅxaç¯].¥(¾¬¿ÏưnSû£”ß@ ‚ôœæ`æĐ!³-ïËè'æßHßÜÔZĐÏÚ¤›…Yà:°^)~#Q\Ưưø´®|ÁdơËñ8˜ĆT¡7 ûˆQ”Ñ !Ć3ˆÍ ₫ÓœLÜ·4*øú쉫5¨ơ¸h‰ –¼µ"SjÆîhú6Næè‹‰}@ëMÔ1QÎÏÓ5˜—Få˜Ï¥?Jv?_¥àBMâ³hfŸ– ‘L HAñ©¿;́Û Øăw][¦lÑ%}0Ă忨û|¥uº*4©¯4Å·{Æê¼˜jvYN§Ÿ:O7yæ¦~ªW®­ƒ¥`1<ñ±a…÷Ê« ²$œØ J$Ö|,/üÛwçRRÁf:›s¦÷K¥†UFw±ógÎ".‘·´Ó—½î¼°óÅ“S&@QâÛ©íÈ Ă¾¥49JEè%ÇrP±üPÔÑ̃P…Bû›a¡¿2Ÿßé‚„¨g…ƽp~奂 Å[[7÷äéVH÷M¥ĂÑZKù„yøáÉÊ%Ö¨ñíx€¹röxKοư1iƯé"¶?b7¢ èP°›PÍ…µđ¤µ´¤ë~YÚ}†L|‡E¸ÀÛ,_k;©2›b¸]đpè0Oơ{9% ÇQ̣ÂR¥Ÿ₫½h¤UW ÂѨ{¯h ₫Wđ`;ÅÔܾ‹°KøŸ»T‰dX!mĐ]Œ.ÇÄ #H6«åÔ£M딽ø@Œ°jé ™jÎTééùÆ´]êêF…®ÜÅÙüM'¼]†+$ÁŸ‚*Â] Ñ¶$¾mÍÅÛî Yßî»(,\́8„H;×½”c>‹¸7[”a‡6̃ûQưª b…Éus‘'àÓ ®^ â>o„V=^éÆçàÔ<ØÇ©çZ… Ôl,Frtơë}¹ÊÙ5àê‘ûê¯ma…€/! ·j0+yhÔ…c¢è5•|¤¤{”s¨£Œ¬ß¯âLγ́ÿ™ QóQ$ÜĐu'-ư©q¥œ‘¹¼Ô16w™lÔP̃¥X¿Ó ‹e œHD›oRK9|à¥löôàÍ™\O &_C´ï@Jj´Éâ}µîç2Ă*ßÅojAĐ́¡Ö?YooLøt?0Á…\±h6=ÛD̃ồ©ª£Oçôä6ưD̃ŸÆ¼¥zd^´hè%~ô₫̉«ZhróC„fŸ÷®ŒBÀr$ŸøsUKKú•ZaÇÊÅÀt2s톇B·ơu |¯?V{%ơ;³í) +sÖoÛcÖ€1 HÍV÷&Ö·c]³Ä¸.cNve·,¨Ä‡+a€í2îó˜®IÁ¼wÅÔiEÀar‡Ưºáѳ?~}Á?.3aN»k±̃a`€Ús¢÷Óuî†'~ ~;g·°+bCÏùú0ºdØå»bË~ ¸P$Ưe'ˆÅ1ºx}Ÿíª†5H¯à6ơä̉ ˆø¸­$‰WèeXÜ»ˆ; ư¾z‰£é!åˆ,…lçºăè̃¢ wb¸‚¨w—é'¸ ²0u0=¬BLC9%'2}b₫}œM~y-ÆEËA+#A³k©)·øá 6[kW8Ú%4l^çk̃v朽ïƯí3€€LïGf>i¬1tbÎ%¿=¢]}pWǪB£ñD1£aÇ5Ö”_kw*mV†ÅÎgA™u¿‹¡jN.yG—¼œ@sú}Ïërw‹¥ôÍë§₫K§N48^ü¤kß2ÜÈ—”¡TpmóÁT¾Oå¼muÎØh̃Äí•„ÛíÎ:&‰æ5y‹¶ƒü¢/Y$ܧ1 7Jîm —”·÷ ¸ÅÛ^u ÈÖ̀“Á™Ưêå?̣˜VÛ[OB˜0;Ï#6ëưŸ#ư³‘£¿¿\øÇâóđyëLv¯X Jj>¦2)ezt¦“×A6 ùû§Éœ½Đ¥>ê\ÍAçÈP×FnŸJ’áẬMƯ„­đ]…W,J>+ iÁĂÉS‹,YçGWpsÍ_¹u#¼ÚÏ3M %°z8`_FƠIÂm'¤Y‚a¼‡‰h´&y²a-éBlö<ă­^nbY|mªr¼á́K°Ù-Ö\ü_+–[7\Ư e/æ]±·‘LJ»So¬Ù̃§Iê¾ ~AóWK(ÄqÁúW!´D5emFmJ»lƠ1d‹Eœ†½¥CẳùIû@Kº›W¯ĂŸñѪÅ.¨œ9 ÙK’¤|‘Ρ« c¬j/¹k¤e?fV:Â#O‡IZ¶ÓÀŒ:—fÚ“Ưư¼„"8gôûÖä\¡ÿëÔĂqtùµ°‡ .cîŒ̉I{ÔVÁÁ« DL°“Ơ•¬XÇ!"—ÈÔ<$ßnYÓ~ª[r ¨ñ§dƠYôÜMqêµä6qn”̉ÿmTôƠ’×I*Ç]ÆMîÜB9»ÛQËå¡ÀH )âö#~çÊÁÅæQÿNCivº.ăl±=˜®g£ï^($4̉i”ÁÍ™_•Æ­^ú4à#°%íNÏ.\Ó:Ÿ ":ÿé˜?_`pjpTjCc5í®̣ ¾c‰zxT+Î2 ‡Wó`ĈÀµc`¯7•÷̉p/>@"¬4ü5:Å«CâÓç7uoz÷[6&³Ö+Æ'û‘ûe,ê‡I»Hù€l\_ëÓ’c΢=ùІÊåËïăÔBV &Ñ8­éKD[ UñD•Où…„†üÂE«‹u½́‘¿úê»Å媦!¥W\qØ—¹Ø¯*ñ; R‡ôU)ÜÉïî²à„&¼t‡‰(I₫®¾†¤f^pṼhCMÉ2W¶yu¬$Çø= ú®û‚3O›¬æÈk÷.mù–lIûĐĐ’ÉÆiùƠK—₫&G^doM‹*QÏkâE J¥X}’m‡+̣k2Ó„>+9{•Ù‚¿: ‰mï‘wúVZUôhôù!–Ô2µ₫Ú$îR<†üä®jƠ‚ÛnKÔüµUR™>–Û5w;ʵfàw"ÓLƯk%Áæ₫£»®$èèÑÙó&–×₫Dùé0hö²”¨¥Om8?Æ8Î6¶ü'9B5Đ>ê_+àî7vø vá æXRÄưrv¢'L¬Ó™é—‘JFÇ“ô½CÉl—lqr̀¬–âàÖ< ZŒÍđ˜Ù'MgÈúÏ1{,~m÷WoUê%ja%¨éqT|t½|j¿`WmF©‰D§0炇dBh‚€1ß*wŒ?‡"Uù¾ç$Ï»œ¸íÆÓí†O7±¡{„‹y‚Ÿû1½U¤sWK5”“ྔœ̃€"ˆo4imÑÔRŒ= « 74â{¿|:̣µ̃‚̣`–‚ñĂÙ0%Ω¤X đJfXù̀$ÉÅiçå狱K̃Ô &Œ ^üÏƯúµéè!đ™3ƯNº•k£0nŸ¸ƒ_>ïS²´wÓ)`"jL,á4Ûạ/đĂ®µĐà"œ‘높(NÛĐçD:ƠÿŒÄœố‹:])"À¬”~r} ›̃»F2åúxă7ÊkåPó 3Ü]€öZÈøº[Đ2éQÜ«.¤.î=ou͈®ö)çưj³ơf¤iÁ7[¬!¨ọ̈ô´×!1}¥Uà½äËJ₫:m'Æ.¬ăàIƒ#9ưÚ˜Yÿ ÇR^B2÷X U>yy¬‰Ú¬»ôSMR̃uÛ¢„^àùăé‘IÙ^† ]‹5+1*†¹ rÜĐOب2]9Éb´²-”µ¼A·LߨÉ_£XU‚·w|6<‘k ŸO£³Ya§\£ân{Óv—Êcâe3¦ŸZ¿^*»¢îơ"¬¨l#H¿ë¨₫Ô”/ËsîGNYăü„ÖÊf~ÄçÛ|@·Å¶:‘̀GZ蜓…°ÓăÉ;¼ HhÖ’æiµîr{O„*¹ XSƒdïâ66µ× tJ°Ï†Àëp­a…ăê0ë¾»‰r‡íÊŸ‡©ơ€=`@ס$=Y~¥“Ô-€ÍjĂuáS@q¶¼][ó@x-ÍÖÁ;ÇÈ<!‹²Øö àÄă!‘؃âRy=ÜTT¿¯J\s¢›h«_đm;ʃ¦păt ÓaŒ÷¸Zjåf̣óŒ(Á…KO~gL,¼/Ëíô;u-̣¾–œŸ{‚;pä*E$¿~Âi¬gûŒ8)<£Ụ̀ M÷ăùD­Ư7®Íİ'È|hX•8 7)ÿ\6Ü)#»]:¢c}¦6שzäáAV‰̉Ä£jYªtky÷—<¤Ù₫¹F[…Jªø¥̀Ưâ=Øîîw9&m~Åtơ«€Ü÷uB'üKc·Vă×>V£„r ›œ¡D–ܶۖu÷JQñi<#­öÎÏüHæÀ¢©æ+O₫uˆ)lY ÁG~ ÿo¯³baDkóĐ&%Lî,¯fU=Ợä§U,±x'~qÚgÆbH7AÍéJC¼ø*R‰ăôP&9fh€|\74—£'0”–åWB{s“g©[·•FnƠ|ó"C¸‚¶©{’·D ø…?=``"¥’[ÂFR½P¸dGnèuêÜοc‹ËlåST®¶ÎŒ¼ư[À]7iVœăI¸B/™ŒC@µÙƠ™ér¡“,„e•üƠhØz¹›¾T /PÅ9YÑ ¯C›²Ë”¯%èH"¸P±Å”ûz°ÎΗܙ‡Ǿ“ư₫&Y·˜µ³v¨¾=DÓ⨠KM ¾‡—aJœ7Ư‚i¿LçÀÏS3,À\ ï N]O¯Ơàɵ“¨†pÓèk¦Ñ́—Ñ]E™üĐzw+”wÔbEÆÔ¿ÁBs„½ưóô‹¬Ø(â •-÷»®ăºÏǧŸ°åê_Œ¼$>»,ØÖï—:ØPÊ­Yø« È`Gâ’‰Îî×’55;%gWÙé1ucZ²oÂÊàH¯¾v£œvi‡‘Zä½Ê‰S>³Ú|¸ÁÅ,%åÚ \ỏÛºạ̈OT6QđĐ\¿­ë°+̉Û KzWr9ט¦¬‡ ÛŸÊ2 wØ{h,t å ~?|LϤŸ6Ü$“å(“ÓèÇ×mꔢÖZ”ÙH8AË0l3ÈË­ Ó°TªlÉ[›+5±b¦û6ó™³Âz‘ÑŒpÓ[Â]xQá1‘c’ieĐiâ#‰i>nâï½̉ெ7%u¡p^Ÿ7Ä̉âhJÑæî~ˆîQîL´`ôøB¢Q¾ádV,RYºrđ́®ƯdµóÀf²•̀ơ.u ¨ÎœÀÜQ'CåÅ3ª?¦e;H‚úlêĂá¶M* ÓˆÚ0)]ß.û•›§u”É4Sđ…íLåoå”,½×צt­öæ»ÁÍËúˆÓöm>5•g\hø†ÖƯḳẴÂfñ–§Dó8ÄÚƒÎ/đ5̀*¯ÿo™°~íCø“Ø.“‚'Ê&²»ƒŒơñcÁw”¼ŒÓæj6@ƒ ÑqÉe¡5°]Ü¡‹f† ¡ô{JÀ]>§(éôgÁ́§3í¯d͸UjƒÊ¬Ư‚z„`®Â—ö¿ÂP’'̃}=sÊâ~æo÷W¾–Ă2mđ¨"ó/Đƒ»Ôư%ë1̀ávÚ°ØmrÖ̉Œ+u sa0|¬+˜‘Î.rO’¢T8bmi$ ¨Áê°¿úßÊ#×ư£Rm0úÛG¡~‹lSúªonÏ̀µl¡1%r$,Wh±xJC¦¨Å²-{’J•.oµøûđNĂ; Xm°™©+u#̀¿RwWSúưe˜•d…Bléô!K¶aˆç÷Œ§YÿÂ5ÁºÇ!دaå Ö÷Î qX/–á‘ Ùéü‚”¯©4ÿéyN ’́ªYïù·C}3q1#ªpà"&suüZ ·Óä„âE¾Ø`k¡¥À\́©½NTÅú™„åïŒ|¨Ä]Ç `ñ9¿ˆ6O®dS¾ û×…!êe‡&ƒC“ÇÉB©t*‡úyrơ K™¦ÖyÅ₫©ÎYcm÷LêÇŒ6á|Ír¢¸éŒ̉ùqÊB-WÏr09X³}À‹J*uÍ“’sáL]ËŨ€Ö .ªUŒ#{®Ÿ·8k‹‰Đyđ”dÓ|w´rO»½)ÑÂK@|Ơp™ Ơ3E)»°zuµP–"‰º3"}Óå$pFx[Ÿó^'·û}jY&pơù¶mÜz9‰rKº¼EÔÅœ  »h˜̉™JµU³Ö= ü)7€kÆ ¥Œ°·PµÁïy=וˆ÷y‡¼`ĐÅL¼­ƒà”S¦U°¢ ʶ.â¬ÛI ïq|ñ"”ÙÜ i^²B>”ö΅#/ƒĐÍe™Û¥à́À²ú¯ªư½{˜ñ¼²ÓиÈócø"£kæ*ƒeW3¢«\¹¿*ĂxC¯=Àt­(û¼Ô÷÷ù f]1³ø¡ ZV¼ª8Ÿ­0%ˆe¶ư8̉_b‰ºü5îüª„4û~½IÛ}FcÔÀg^.å2 …G¿ó$Ơ£Xcyé¤dcTkGä!…IT;|OѵüsctbéÑl埥8¸&î×Z‰­ûµôíV˜#ÄŸ́&HKáOÓN»@ư{Äá6j~Á±n™ ûf9Üc“½)B×Å(¡‹ÛÁ3äÔ2Ăß÷Ó±7U|“B˜ÿ¦&7Ñ–ự~¦á AKŸG¤®^Ỵ̈ùS_êăÙ¦ÛƒÎâúfW#³°ôK\”A¤ô€Í̀q">Ö×k¡ä¦”̀ dO'qAùz£ëÂpóÓ2RºoÜüÍ-ưDE¨ÏöZU2ĺh“%'' :j¥\\mÔW®á]ÈĂbÆ—wÔ;:¼¢°q¾¢×Ôê¹NrȱƯ©_ă„ă{4gBÁ"á=º9ÔJ9*Zjó;pylÏcÆ®?Î̃¯Fù*FEƯlƯóÓƯÀ‡[oX—¿GXEĐÀ¹÷S̀|Ư†XHŸ® ªwFXä'¹–d³NkY‘aÚÍ›R{VWèđÓM'a ˆ|Ñ Ad,;wÏIåzY±ªf¾ÚNA\æaGßWÇkŸ•ˆºê “₫´¹â.{ç1¦EÁjĐ›¥ûvVÿĐ ä¹q¡̀O¸ Yk♿å¬}}nÈ5¢íJj1äMHU £è¾!ùÈv&T>ÜPÿ]ßÍ\ØœsđT°ûË0ºÂí¥ÈŒ9"6Fœ› \fj;“C°ËưiaO1ÍÁ8²6±HË£sÎ1“¤~íÜj•èȽ¥å=q«Ïçûéƒ^(@J„©ơÙªéH&Ú_ï Ȫ́D—gzö½k1«Ưæ;²Œf,LŸRÊÑ£ưwÂEØT~ü§ ư.•cê¼ôͰäl„-Üb®äÖ́L₫I°₫îX\cÈú«táÎâq£Z†H0±WrÜ D%Bx|×ç̣å „‚KZ¾6 ¢D_‰pJÀÙ+"÷ơY4/rC’0è9|í¨qñ,OÓiO@è}¬÷Vß(Óë7l‰3:oc¤:t9$ÍE]#–W¾‡?+æ̃*À¡Ư•—·ổÀ·JFÓ%e·7·đÚ|W%%x²Á̀Ä5ĂI»ÉƠ/1¼%ÏṿüT ÿ‚Iü[́lĂ!ßa¢é¾i›Ăᵉ߷Ưf=² s›iÑEówºD•r£Zr0÷—ÀÖ®́™³>é”6ßC CàWùí¨tæ'oïM`>@‡ö UFỊ̈pÂÛ6¥}OiGæ•"ıCĂÖ+{z6Å­ !è5=¸ÇSôQ0H̃û™Nj ROg„ÓÑj¿!¨üqEʉæ¶KlèHœéajïk |€èÖüQùˆ€¦t¦mÖUÓ‹¿¨†)•J9`́}h™ ·4ÁÎ +®qéÓäÔoS×´uÏ*ùjWÂeÇ¢́…‰›a“º@V‡u ø²Û=øÛ(nR„F ¥ë·4龌qăæÀ׬R¨à&N¯.amnAû#Õ+ø+;Ûi®–åÁa®TßB«Öî5NÓ ̣E2ÓơG n5dqäqú6ïËơ¯i)»Ös‚ê›̃{³ÛDè±N-?1~DYÈåu  üœÿ*Đ䱦ôW„ăáO«W¿́Ë6¿ÿ°qi.¶:µ·€üÙçw#Á÷×ñ‹ÙH¤x;”„~Ặo>èGú£Td°ø+ú°/zF)Qj|X ^3).¤Q †ûŸÔ’u'3^K˜Ơư¬qŸ‘G&́lzƯ(ŒÏêrMùFËiloöß8|19€Ú†Ê*µqΉOÜ6—ćwùhUD‘Aä^öÑ‘–C0c¸2wwäGgôï"D,¿́Yt¶Ê&„ŒÍ¥ÑoÔñRߺ»Ph—w"ÀA}É&#¿ =ă¦\̉9.ÜX?· ›))Ó±]£&Û‚À$ú¶vé«êx,¨vƒ^¼ŸoÜEE»*5~Ư>CÂuÊ™êwp¾́d”MäÅ₫e_¿ÑlÔƒ.™ưN.pæûṼ²X"ÙEÛ`CÔÈ¤Ö [HCÜpơ ù 1ä %*YKÖ]È í#µ,¥PV~µ£˜µ0I½́‡êK˜nÄ̃4'₫à‘XÈ׬Rèƒwmyù=Ï2¹CYĂháÍÚÓtă‚I™r5d£qúeîA²‹“bKP~‰]È­í¾pÇ>'R F¸ÉyËjÏ‘?́*WSK±¬믵qđt)¨5‹ BíkéÅ‘ÓKÁÑ ïß~ñ(ó‘nú·~¬ßÆ€ èkåALècwiC•.3O9¸‚`7Ù¡ØFßúW’sØ{ßïb§̉)ưÂïù­ ñu"Í`é̃Ù”ñ>œúätAu«̉(H³ÇˆKÇj¬Í¹ K. j‹vÄLÊnGŒGrn¶ö,Θ¢vW Â]ûïô ~;TæŸ"Ÿ4ÎÔ‹“́ ^̀Ơƒ(yŸÎQ:gç¢Af«àÔ¶[qÁ2ø,7˜LBp{øx¶´÷eP ŒÀ4E/ ®Êï>½̉)<²êè^›ÙëjÇmJ†«Î˜HßCåq¯|7ûªÅçÑ›]Ïú|fLÑë _Üù\v“Áœ+—øeƠé/OV:³£ô¦ôËÎÛùl ¤¦µa›ú¾́¯„S9ö$R{¯–p1´…¯}?øf²P¤°¡kÜ}x 9‹Ầ!)Z:¾¥ßc,‰/ùÁÛ“÷Pe7B =ëÂnKܬ íà\™ÙÆdæ`ze.Ûˆ*í“65™ÔtñzY¦!QU!MLjÎñŸ;vđ!áWB)ñÿ2LëißÑ·üʈª¾ §ªRNé*ê©MD‡âË\ïÑûóö æ̃Å({×é6Kb¼RĂ6ŸKvE¡Ào¾`€˜¬-”ŒÊé&ü¥÷@p(ăkä9ôëBy7¿ ¥Ă¬f#°!ˉH98éUœÇ¼1³(‹K ${³{hR¡T眃Ġh±ư¦°7¶ù¶÷sP}›ĐI¨NÙ} øÅ¼zqÄ}&ơK`ƠưĂ¡‰€·h¬Ó´u|†'à#ˆMgÓ3’ợóWV”S™œb´â1’œƯ₫¨hôü]ñßd9_¦>² Ôă^5¹e³¬‡19Woô”¬EC§‚‰ (9͵=Ö~ô­8­¢Ê-æ-€v.1¢(–D1Ơ‘ó­"‰ï„ĐŒ¯^ß™LË2ä…|¸Ơ#¼i?a“¢øÈ:ºÑ(_éơÎ4+ûHº2K®Sô}Ÿ3·̃>¹ªomMàÜOWÑÂÀùN¥áöuëíOˉÜ8nfˆ̉kö˜7 –‡Ü}vTÑíV2[Đw‡«œª0—y!V§ ùj!%µ( cU””¶v]wǺờ± `<;bưayD¨ÓØ₫¡b.ïâœ̉U[3ÔK;逽3¿DkLĐn·ó{ö‘P«í­ ô†-‘¼4‚ŸËÚTrơ˜³G„¬m¡|Đ…l.Y/¦†åKà8øJ¬öaÜ-æËÛ`q¡½e¨é©m·f¢n Đ̃´{Ă€{‹FŸYº!'Ø8 KÖŒYœ/cl×Ûs‹w,]Fơñ–‰h±é\˯‘BB̉ñ69‰đÄ, êü¸iBPgÚ—©Q!>¼®Tû¡Â¯bXtßpxaÎP'àF+R<4Ó‰ˆW &qOÖ._­›²>8äIÈѤtײr×,í÷j±¯-ĂĂöqÉyL!x \ïb_ºù66ö«ǺûÈa0>}S°TöFú¤Ï´Ùœ«¡Ë7(N4¶{¨6¹Û-DyY®–p1́—ñ£ƒ»|{ÑŒ”Nê%om<Ëü̃ư”íîÛÆ†ŸAíL¸M=¤ûH1.t₫…H1̣8X¯“ờtr@¥U“y¦¯0>v°µñ/ûغUƯ₫!F4Ÿ)é^:B…ăơr›u×EIÛ d³̀yŒ±±Fuî`k† ‹†¿‚#{öÚ¿‘ä:ăÊSfß"s´ÔlA8Ơ3kU:/*F#Kï£ ZÖÅGoY½`K Új`Zq¢´¡&çëLœdT“PUY.¯xĂèÀ>˜mëœY¤Ơ5}¾åáá`á€4êÇ¡¾gƠ{ͺÎ[¾ ÓôR¾q‰É?ÿ`\êdmƯ5e_1ù©”đÂk·¼“˜$bX̣.8­ùël‹= ñÄVë‰À¥É}W˜\ƯHK4çi£Ïí+’•5£+SJVÆiØé”!a ,IaK_̃èƒf îÔ5ܪ‹ăïϳƯw°|¿ƒÿqo¬{ê¥Àj"Ø|å‘’rƒ&81đÓ= B“Od€U–I6ơçeúÆgÈŒRaàyyé!q*–^̃É0 ¿AÎH9—|üœuäêØ¼Ó¨ÊÙBíVzƯ+Öhf¶ªAE.ø[f6§ÓÉ• #^Q(2ë¤:cnæÈ•²p¡ơ¦(åÀ;U¢üë¯oS€ä­Éu †̣̃F–mΓ/"ÚY™îµ2Ççʱ‰úN9¦FjOá˜y”tVY±ø½¥Åi=ùRÓOáW{ÂÁ[̃\ :O¬¤t)?œ¿ªPG—à ØÑÆ+j!è]œÔzDÊ·»dÅ­{Ä>潄T]èæP-bz¸.̀ÏÎtU¦…“ା —xEÓƒ æK¤Ố[Í:í~à£:HûáAĂÿđ‰8¦ûy$q‚•wpC!PêÜ oó^Vu‰îû]A=*Ê ª4ára[6́åHĐ·‰QÇ3¢̉èn0¿êDzÛçô.äûÓZŒ0ĂäAá7|5ÿPñÖ»ÄN¾|Ơ”î ¤sÄ+Ñvñ`)>*8«z7ƒ²Áí¸ŒDQgƒå(à¡°|4k›å!ÏƠMÁ¤+óéX&vtÄÏY Ûuáʈ<£@±é…gỊ̂5/D„́jŒg±@·¯Â@ưƠœ8+Vé78̉^˜đ6ª?@đÔĐrØà)i£¿ Ø‘?Ù䢪q;ׯß\eøJÓ^ấƠOlºƠ•Ÿƒ²–H<‹Öz½ÓÁI¤8BcâÖÁjÙ¢Ö!n/Ị́C„®™£ª.8U‹¸æ3Ư}]@ç>¾9ÿ‘K4™bĂ#²¿₫ïµ¾H€j©ç¯\)´ ª;p¨«´ÄkmăÔf”64ú¦TßÁfÑ‚»ó®u]bHµ7ÁJ €7§f)ûP­Y½đ6RïR<»%…À–K EoÂ₫……zE—Ê „÷®Onâ‹/é|'2wS°]Úù~!’aö“!Í’àD:Ç™­àøVṬ¢)ÊCçĂ:°n¼¤™9̃à1Zÿó}gíðq"Ç®’Êa©”qƯ›“_±̀¯G‹ü̉¨Ÿ" 3¿½çö‚«Ỡ•é†äsßHƒwhg(G æjSÔ²u¶>3Óhth‰V¡hærA*¸;ë–×ôjhá±kn7„R8Ø¢_a–@ו±*đs`~«Ö^Àà«eA-aư6ç!Ez@Ăf:Á™OfQó̃“Ïg^j›‰c:›ˆ-r-.•°8À²Ñ̀ú°-Îå3zÄwn;Ö%wJ¨—ï©₫øàº±_ÎC!1•Ă>Óiø\Ơ³3ÊBBóUÜ]øăB‹t×qgQ‹r₫B–øY†Ư¶îØCö BS¼‰½Ó–æ¦Â³É( ¿$>©ägfä̀먱÷pQíº÷e&e5b+©Ñ¦í¾ÓÈkÈÚ©$Œe×ö̉%(Ö̃É`¤ŒxP#ưÙ ¼D˲ù†¦\x¢v1=J°Éè¥="œ¿¼zđ.O”AwïHÏ"¨₫"i˜¿’œÆª«êưÔn’§<­ăa’E=Ñ1"~ n Wơ¯ÇÓƯ³eÏX·®hiG?‹9!Rê}q{Ân&gû†‰F½†́óƒí]«o9!ơÈ“b‰Á¦â>Tă5Ú3Û<§_ªÙóÓ{3̣ă´–;¾0égZ,~ÍnăSWt¯0ø4˜«_b¤?ä%·˜‘̣æƯ[»yă³ºíơáX¿Ñ*×¥]0~Ɖwm†̣(U_mî ¿ù^έpdñÔX²Û#2‹£"X ¤Íao [!!ê %`Fpû́c1-úưđ©úª@ºLÀc¼¿@0¨œR€ăDß¼\Àbe­ưËWØK!¬áØvWÊcÉn/PĐöØƯ•|m) ¼‘‰5 /C;¥Ưz{Ư}w¤Q`%Q Ÿ¸U¶yởb|®„Ÿ%Yí̉|`¨NeOú*Ù3éz³7£ÁKCÁÉÓ¼©¡äím*8Î FNói’WđŸ$}g_ÿm'¹N;·Ú#B¤i­Éó„¸Lgg1ê nx)× ó€ËM¯9Î’›Iû³¢¿Å/¾à#¤\ZEåŸ÷ư^«¿Tœ\i‡Ë…Î̉cEqÙêpµ̉t.^W9Ôzz¶ưMº^GrƯ£i—åapqè;ÖûlSè³ù;h`Îđ9B…ÂlHŒsÜÿú(­)ăó⬽Z^4äùúz¨µQneêø»£*fg«Øƒ#ËugănJđ×…"ÉCÈĐ}M¶×9g…¾gÓ‹‡Jl\h㙇džđf¿ˆóƒÊƯƯŒ˜NFçÔĐf/uvϾ̉MY,ŒTôÎö̉ñĂ—4Cá€|!x1£,ÜÑÍ]‹í†ÍPOÔ m}…¼£/|^QüÍÇáº×°èÖ–,Pí9möTûV.j^¹gg«ƒAÎNP̃OzWH§ô Ơ9Ÿëa« ±Ñ$! ûÑ÷s«¶ơX„»²§À¶[x¸e$g£ —-{tç₫½WÉ@|ÖMßçªt¸wr[y™8}ºơr™ ÿ6Ñ;›0ŸpIÙO6Q ©w–aBø\™À̀Üׇ…ù>»ƠU胟…/8S̉Ă•tp0ÉTî₫@Me"å#· ¦µ:QиXX“ă³É׳{Ù$™Ÿº–…y²½yé…]11Ë® v$U“OjZ¯póŸÍo8Ḥw1Dzéq¬…¦= 9n¸öôv1«Zơ% øirSd7óɖʯ÷iS:̣öe'•–[ÊF­ Đ;^¦Èàÿ:;{lF†nzåÆ ß®,̃vƠ.RkÔÆ›Q¸EÇuGÛëî±MRB̉₫=Ơ‰îAj_qüë ޹¥wPÀ£Í£€€>ÖúN1ÿ]Zñ‡ị̈đ·-> [˜’KFmơÄæ´¡GÜOó¯pq{øª£̀¨¿“»û¼T¢} y!nÜ‹èP̃«q““R³÷̀×@>ù|‚â==k­ƯIw§«QÉ0Qˆ[»́P.³Ë°­²œ4ö%8*~»º„›3ß¼u6ÄÂ#è Ñ€ ÷E_¥éHzÆÁIXŒ́{̉yÔ˜Çûë~–U¨¸́‚đÿî¡$ endstream endobj 651 0 obj << /Length1 1812 /Length2 10289 /Length3 0 /Length 11420 /Filter /FlateDecode >> stream xÚweTœK-îîNÁƯƯƯƯ!h¤‘ÆƯ-¸»»K ‚»»»HGî™›™÷~¼ƠkuûXíSµO­¯i©4´Y%­Á–@9°„•“C ­ª­¢£ĂÉàààfăààB¡¥ƠA€ÿxPhơ€®n °“Đ1̉®@ È‹MÆ̣ª v(¹;8¹œ|BœüB.Á‚]…2 k€*@ ́tC¡•;{»‚lí /+ưûÀ`Åàägù+ étYY8T- v@Ç—­,Ú`+âư_%D́ g!vvOOO6 G76°«­# À±hƯ€®@kÀï¶jÀÿ4džB б¹ưí̉Û@<-\€ƒÈ èäö’äîd t¼¬ĐVT¨;₫Vù;€đ¯íp²q₫§Ü¿²9ư•laevt¶p̣9Ùl@@€ºœ Ä Â°p²₫háà~É·đ°9XX¾üẼ '© °xéñ_ºY¹‚œ!nln ‡ß]²ÿ.ó²Ñ²NÖ̉`GG Ä å7?+Đêeç½ÙÿsÄöN`O'ß° ÈÉÚæw+ÖîÎ́ºN w ¢̀¿¢^L(ÿØl/‡ÀËÁ]@/+;öß‹èx;ÿrr₫6¿ôáïë vؼ´ôÙ_~P|Ư,<€ˆ«;Đß÷OÇ#NN€5È °Ú‚œP₫©₫bÚü_Tà ̣s¼ˆÀñûóŸ'ÓYƒ¼ÿ ÿë ÙƠ”µÔÔ ˜ÿÓôÜRR`/€/+€•‹›ÀÇÉàäøÿw! Đ¿ˆü‘ªèd₫Í÷e£₫ÍÙă_B`ø×œ0₫»–øEÀ@Ă?z7áàå°zùâüÿVư_)ÿ/±ÿ®̣ÿ¡÷ÿå$çîàđWĂ¿C₫¯ Gƒ÷¿b^$́yUđËP8ưo¨>đï)VZƒÜÿ׫±x I'Ûi³ ²ñđưm¹É¼€Ö ˆ•Ư_2ùÛ¬û{́@N@ °è÷U`åäàøßˬYÙ¿\'n/êüË|¥ÿ^UÖÉ lư{æ¸xù®®̃(/¢ââåør¾ §5Đë/=ØÙœÀ—ÀK‡₫°+Êï£à°kÿ6ư…ù́ÿ »å?HÀnơô›+»ơÀürØm₫€/«Ø₫ýv@^;èøBÂ₫øÂÂáøBĂñø¢xv§?à đđ…†óàˉ°;¿hüïb.î`Đ ô×¹ư“ùBÑơøBÑíøR ̣|á₫ÏF½Ä₫u©ºY]ÿ,ù̉ˆÇđ¥ÏàËœ²{ư_ñ₫¾4âóü¯Ó·rwu}¹ÿÔiüÿuư^@+”…Y°•p؛氮»FIROÖQîÏ|º?Ư)yPâ ·Ø`>©ÙW‘̣Ư¤åÉh Û‰ƠĂªÂBG$’ÊÆñ{Ú Ju³!âà†ăÀ(D“³µˆ¨ ¡#1Œ_p|&IzK”Qp í=¨pFUóĂVLzG;ŒH~g´·ï¢@JQSR‡¬¾?Ë(Hđ3äT]Á!@Saúk Ç›È T¥̃¶‰{z%#Ô¶ă[ܺnó™Ù~)t̃ÀéyHó¹%©a¿PÏH/×O»ne‰è,e1…ô{W,e_oT`“h^‰º̣k|ˆ¸J-—‘›=áz£§nế)66Í&4‹–ùÙÆ3ø῭Ná4̃'Ÿ¿êèkß”ĂYÎd/ḥ»9Í\Z¬AD‘â«Héyư˜1Û…pÉÎöcâÏI;r|I¯ÍZ‰‘ fR¿@Ö1P†‚t”ôjö°O€,¨đ®°ê2}SæÊÆ%d'~̀ă ÙĂûʳx²r:Æ]œ^©[ô %3BVư“¦Fç}µ»ỡ-cªœ̀IU>Ç­cܦ!’uÄO^‰&cIÏCïOSü¼˜RbÖơRa`áƒö£̃m~Öá<:9C˜R€öï4êƒz®–üÎàƯ'Vj•Q‹Â,¾{? g½DOg5oŒgBb½̣}€e!`>:Æa@ZµÈ1ƒư#.kÁÓe툆À>éd ºL®ö¬hŒ  ă<âî$.º÷¡Uc­—IÆ`+ew(+SƠ;z²¥(¿Ö,A¬> Œ¯B($ăưÑ#„á·|x¸×RJ̉ä(ĂVú“Ở̃INă³Ä–âêdA¼k: 8g[»EÍ‹SR₫‚±&ßP6‡cđÔ[¾´÷,Ăë]çj`Ü×+‚EÓ°¬>ễ°›NM±Ói³YO;¸}Qy•Ùӓ̓ÁñtÆOEQ3̀uSÁ³³îc‹ëÎÍ{ÖEmËCâ,œ¬›Lêú9ÈêGóUàNF=B…/,/r}ûñ»ü@‘½ÎOMSiU.ŒB_„ÜŒ28ơœ\~gPQbµÛ0Ă{ ûI FU6 Ó»¾-Ă×StoÖ¼êqnMÓM«Ißâ{lu}–4–r«è™ûÜÀ̃zíœT¼̣̀ŒÉÀÏÔ9 Jăûx¤íMđù°I†Î$)TZ7AÇEëu{4“G¥Í­Ôz5?JÊrZAwûJ₫5ŸYÄ̀ÁOrÖư'¸> @Î¥rxi©°¨É·-_zRÙ@ ¨YÚÁg»moN*ª¯Ôº;»ÈrÅÛªûx‘Ê£̃ºÑdº²A›Øt;~·‹Åp5™²^™szÀü…{ƠÜ̉ªĂ&ÈÂtNIª¤aá|$±XŒDăFkÀ‚`stôC3́rât9 ¸=¤—íbÏ~C‹$Ñ'¡+ë3àDjÄđz»9¦UM3• »ö!₫jßZ‘3~ÿ­­§¬Ù‚†¤f§)ªd–˜·M÷AVƯ—;9₫¸5 ÅWâº̉̃¢‘˜}mp—F©‚Ṿ*œú×Ô¯‹+ˆp̉`c¾R0ô8¯ö_.  >­Ư ¶ndª/Ȫđ"ÎÊ}ÅZ²ÈĂˆ4ØiƯ2OĂVoä(™Ø‡›ï—³äŒCèM‚÷]^·%2pâĐZ–?˜É¤7JS{HhâÜd{™•ÿXΤÿ¦HÅ6ÚE¼ {‡¨…­é-]«°ă™¶FÍNXT­c|`Ơ…e¤cơÖ&$>(’¢À‡­&¿XQBîơDsÙ‡JÈ;&ùn.7Ê®‡ÍP•'ìZÁ”Ă#¶“ºÓ}«RɾW‚ZI1I+²Ư}ÖHC8Á¡]%í]vS|"äß,69\F̃˜…¿»€đ#p–ä¡%1qỂŒ£ßÓçIäư aEOt U@ñ“$W%zdÿ€m©!ÀWªnÁ°â2`(œ¥÷b©Ÿ”?äËYÈ+̣ù§àú‡5éh†)Ç̉©ûïPPŸ²›8|.ƒÏJ'Óc&úŒ¥@M(:¥lÍ„đÍÊÄ÷ăÙhú-₫î;Lê(ƠrCVF±ÿ´Â™5 ‘)G$±xi[,a•₫/́kË>اqn ÔÈ*hÎE Ά¼¡V ¾«L»Ö]üëÜ-̀ÈtdưgỊ̂OXÛ2‘Đ4^{x%apă!–•HC+²Y·.@?È]œ$ñ@øÄeJqjïº#Â7ÚéO PÍ«®ôê§O”ƯäOjc¹¿ö}×§zß?f"N2’á”hZʲ(¢Á±Epû9ç²đl‰ëÔ₫Œh₫ÊsôLúơí<¬ï.ùM½«̣'€î]QZ€×cÊÈ ö™X1Ɖ·2|ª#ºVVpnÎ8­7QHˆg<ÿ;XœÎ,̉lb•÷>“­hßĐ„ IK³¬>¯nÅÔT”¡ ̣ $Tm«PÏ,8₫.÷í¦CñoáÁ…t[ËÛk…¾Ç´S̀KVç(y°ÉOrr̃¸è¤Ç¯n01¨àÜ"x)ĐH5§/ƒÜ·Ê₫;ÎM^b…”a!çè‡æ Ø„›̉³[Âá¡wBÇ&À̉ù§¾×½—)*vwíđù>¾ßÛ¿J*ê´ár¾œ¼Ơ³}¾C~߀n'j4Ø…ê…zĂ=T©Ÿ¯;sltóË Açˆ&_-€ Û߸œ¬ăÂyu¼ÿN̉Đ8ßR̀WIØû¹QÿêM´˜aGöƯØ3"(ô¯̉g{xñ˜@¾–Åùű¹₫½•`í¯¯¦̉¨iw)Ó5.RkI3G.¡Cç%|J0¬{:m†‹3.ª¸†ôº×ưOƠ½çă´…]w¬ªÖ+įđ"Yq§áH£â¡¹á½Ùʰx„3|“t²SR 2§(Ôs–›·™­OgƲ üÖ´Ạ́£Ï6‚‹[:˜{PzàcQ&₫¬?¥̃’ÂLcømÛÊ6 êˆ$„üÁơgd媽$ù®ü₫δ8¶ßĐÇϳÖ]3ĂcxÚ½“̀Í $ƒïï ¨I&[·3.ÁG₫̀Å·̉±:ª2{chuÿ–íº†Ơ„Ëzăbj³Â3s‘Á=i1”ơØXË́©ßk6ÿªyÏø}̉Ơ¯üM ç̣̀́W"Å@/á)Öä5µx6ư#³ ’®óT`á«ă§¨1+t* Éo":O…„Ó­O£̉Uû̉á9˜z4uĂ''Åzưe¢ó Ü+-ZúæNú;Ä‹î˜̉1î7PÔG[”‹ (" ëƠ²•6hsk vki†Àƒ²ø¯îë;ZñéĐÇ'`₫9Ç«®%˜¸Y70!C̣Z/lđ2OÉ)Ô.ÖV¡¯ “Á… ËU¤ó¾ç!‹ä¹Iî¼÷¾cĂ3Ó,µiÑQŸ»<3đ½)¯…“²L‹À+1$b~<¨Vb×ç––"—ơ=|ÙDxo>u<·äăơ…o¾&.çӣɮ̉¬FMùû)̀¤ª?`<”ăîů$ܳª×’k(̃Źº0¨jö@ ¶Eó…à6!“sÈ‘L¬ñj†•(ÉYöpµAæp;4+f—_>w>70‘Í̀…f²ỀO¬M©ËÍ̉¥›…‹:Á±́hIùl.1ÚÈGiï5|{@ܼûÄŸ~_ 5”ÓÎƯ}>ÁN)“ ×Bˆ£±Ư ÿ á́Æ›?NE₫bE{ÿ-làVESxLñÂñ­_£Iz‹÷l…GưÊ#¢Nä>hñˆÆ—å.R®—Jpa ¡6ï@̀ÓW¿}ø,¾rßÄeÄÚư÷4ˆ·¬d1­¶]e¦%’ë”I}C¿‹é¾9¾…Đàåä$›ª¥û­&₫8Äù­Ë$ùYé•ZEP÷5ªß#ÉÖ²óÜb+‚EuËŒă ?‰15 ÊfY—…´¬²c¶|vt\¿`Ä+âaج‡À‘p“—=V–oÜẠºƯ8cSé{)ÖFKa¦jb£Ọ̈=¾öܱØQTe¶ÊMÇ€'̀™)̣¾₫Ò«JíïÀ‘ËáBϦyö ¬Öj¬Ư£¾v’¢ ĂŪ ç´Æ‚¬bJäS ï ËÄ%ר‰¡vá4¾èÏs úå[à<¶5bp¹ẲÇ\´— æ%éG,jZ«‰ñöqf¯ >[F£.¼A‚¤’‡sϮƸ•Đ=;r?l²Ôwöđ¶¨u)ÁMÎSuT¥¬’85NLËî̀̃Aă4Kv‘ÊÑe.:̉SV—Ư’‘–‘,º/Ơ §Â6€a_ZÁÜErá(ù”WÏM¤7îcÂuϤ¿x¨•ƒÖk`k³k?,îûDI·́¡\¨!ăyN¾âóU ÄÊĐhíIPßfYbFÀppâ(”™Ô¬²)̀o¤¨đV—øH>x0Z ̉Óđ̣aDZPˆwR›ƠS{â¯K²Àv›7(6]/êm“qPØOÀ’#ÊÙfÜɇkªJ¡‚{mvÄéËÓîîå„ULåë85L)^Î~GăH{iÜH¦_`±¶P!ĂkÀ&SM=đ¿P×$Ëü¡µ{}¦"Ê {€‡¾h@ËÇE›n@hôa„›7{)>e"3̣ºÇ»ÑØY ²¯̃ï¶¿ÆÁ«j¿Ơ³7ë% ̃Ư}3û4Bä0£UëJ₫llÅqR天ô8?dDo2ă=B‹´±ÉđVt̉ÖO³Y°ûĂsY€Óă·Dl.8À—¾|­çz‚#₫¨º̉X—RÑĐQö°¾#Øü »7ßå'×cdH|¢z¤ø{( Ñä$ëê‡Ư¯an˨v…<× 8W<ÓäT`X­5p±ä%Lo[sÙËHÀU;́ï ê$_‡åé“¶e¼Æö±Yö{|HÙ|úÉJ`CïÆ º»|¨hø†íؤ]»Oüí̃Ed¶“èN×—)†ceÁä¤#à’V,gcî–o£ ”i—b^kÊưÇƯ ¡Wü̃D6™â/¯¹)ˆß7û:sîf.€ÎW¦™È½X9|ođÇ£¾l °̉“bPNĂ ¬Jv»£¯+kAu½vG¢„¬]9H¿ê«Û#A$rt?¿ËÜ—¢ N¢hñ‹ªè—oE´kđdß¼Eáö­V¸»ăOœ›<›6¢'ä%¿(¸‰’)L ñç‚çËßÏul]!*꺈5ö8n_A¢$o`çú`’ö@|4ä'<YđPƒGcx–VTç-¼ÈN;ktˆ§gp«Fïoă®EĐ¹iîW‰?àMƬ#]Ơ[º’úĂR<lt˜<\>¥«©·uo—äỘ{—+—Öl!ôu¿ EƒM$Ë‘Ç4lrĂUÄƠº¦:vét Û?+™¢ÿ´HlÜ“ ©̉7t:rëëvËø¦±aé̀ÀHwÏF\Vr›º®1/úÅ$0×*a—$ÔÀ›tó“ya•‰)rÁu¶èAØo¥{ơLÿ^_ƒá³á|ÿ¥¡ô—5̉–Ă~a©®O=ŸÆÅ–U@j}k‹÷ÏËä!ÜS‚~Æ`:Ù7+¼kw† Ÿ§¹ Îl.›¦ÇsŸïơ£é’ø^Ûma₫ÄÈB<2·ĂĂ2̉»—¾ÏE‹ —:PÔ<€>[ŸE}ëEy¨8Só]^÷m²©Å¯uñ¦̀ZÊ¢ ¨7¶ß%oŸ-#<¹ÉÅ2  ×¸6ÜÛk(…æ–Î÷å 4©\lZ%ÙkÖZ|ÿñ¶ii,± [“©“8¼B÷4ăve7øJç¯ê»wô+‹¦rü@)Ê_ÿ`(ßyÜ:”³6B̃ïÏR2·Åo–x‚hÄB_[!äÏ×6s+Ï®Á`̣C©–o1ËX¥›Ñ•2<ÖÛ hÁhƠä°oµW‹Ç~ /‹ ÍÜG̣”SV₫VØÙU& ª# ’d`LƯé">Ôbă?=æ₫X́Ëï $J|Ox/v¹ú…Dó"VWÁæûœỵtóÙ₫ÛÛ†®%ÑtŒc¿ÅqѪí)ûn¬]Ưxơ¸Đi+ñ6ÇùO2W.5k>7ØøˆGÊĐ_@JJ-ëƒËơÊp6»"«ư*¦xbfFiŘVÚ8ú{ÄO—bæ>Ù@{³lƯâ@¯$±ƯÚ*c;h’‡oáw¨”~BĐ÷o%áÑ'}nb–Ó»ùVTçÉ£+âÙu]YK´ú,^ÊË Ù¨’÷j«¾á§^®5zÇ(.¯k+tAûéNöîgq…cåă*Œ ÁLÄéî‘ˬ“•œcă8a}…@zœK+t º4́“£9Íj“ÛØM†{R“ÍϯÄ–›Ø‰ö©g¦+”Æ&ª"oáæ+冇‡‘!ùhj7í,r}Â.n]·Ä“^~tbV9{̀H»ü‘o+FîË‹È&ö"}ùï¤7Äæ­4`ih_i ä¦W±9\Cö!T²̃Ư}X”•Xè \®Œ˜~˜]_Bê¨÷¼æĐĂñD0Đ@Ñwøl¯đoư ©Û!ç4Ç`º’^Â?Ợ2ĂĐâ!7bpÖ¼Ëeû&¥X̀ä]ñ¢Ó_ΔÚ8ƠFƒ¿üˆ¡‘ĂOÛ¦¡á¤²EĐ]»Ñ–óy ¹ Ư„Åäú>4úuî¼ù¶óDD\Mqmï6ùi‚\ÛȤè¹å8pươẠ̀²n–L\³Ô…*ÍcÄÀ©̀₫›£Äù4{°+$e^*÷ªđµ’Ñ*åơÚƠ×ÑS7Ä›÷Đ=J„â¬ñơªË7-¾h‹®Ó̀ZÍ¿f»ú3#¯tyƯĐZ Ú™D‡Á~hcÍØ˜ú©•¹„»¡“D`é’7¿–Ó·\6P*%żb; 5ưïMă^kªñƯ$®Ø-¼[à)^ÀÈp«5“¯2+\‹Ó1– /RDfưe‹Z2èöä"®ÔsUZg¾x{5ÓŒUG4ÇM‡qsă ÂÔU4ơædZª+ç+üNµ–Đíœ\>ëpeỷ]µ́Ă¼«æ¹₫¥OB"´w¸ºCºM që'㸄ư<{j4œRÓ̃yøÈåưaÍE¦]Wc9˜ sÁèi§¾íà*lzØ`Æư¯%üđ92)ƒæª´ê°·å×Eúö÷7ÛEZ̀4÷œ¯…QÔÙ0·̀¸F zOuïTñ¶öÈÄûQ°“²¯>¡¸tv˜6.R_WƠ{}Ö̀C×ó]³¤l(̀,$ª>ŸÜfÄÎßH9ÆÅ¶–@°B®4¼i¦XM´8}9uh‰¥MW½(gጹº»øFª!vÍ×;ƒÜ‹hjbæ¶á ŸG}(O%«›På±Xöœf]y¢ØS»œ2ï̃!Ô…‹ÓöUÓÁ) a~ôÈ|UÓ*8Ÿ’»©äÖF¾ÔaóĂi7 Âˆ9&8·ú Î|Ï$Y”(́ë(ºÜ {rèÎlé°ưĂ;EC°†úa~₫¹® d´xèœv­ Ö7n₫¹ôwÚ—•=z8$pT̃¯k“«¾!AG4VQT 1ë\à9(´JŒ´Y7‡Ïçn–ßhQ»@ ®¶lă>‡`·đ~!Vûl›+̃q…¶üËL¶ö㨠̀₫w³¢àÇ1ÅKÂ~¡®?$Íj|²Ă‹)ï@‘³@çùL){¯ÀE~&Å4ÛÀ±̀©At—wˆD«Ù”°XB‘\Nxw¶#N:wQWi{«©':Ø_„¾”%¶®üE_ơè¢|Sü}¶)¼æä=r•*³P@¤¸_Râ`²b—~ÓU³GéÖYÎ]÷9Úüê¦À±üé·8–}G‹Aê²üVÙ±>Üøƒ₫ù~éÔt?ØÜCÄ›±‘h¾ŒÉƒ w˜rࢨîæ.•˜ŸH‡Ăs›Ï+ÆE‡MØ!±#:€ÎâGxö÷̃̉…̃)<%"ê…\V>¦(IbúĐ#«XA>O·`¸6~óBw¦œ¯ă÷7C=ßÛ´7Æÿ «%ÜÇIf §Ă)B&*GïË׫cá› ‘­^ƒ/ú·4Äl’çÓÄ©LQñm€RNñ‰½é©‡ ̃" ÷¸Ne`đÓV®…"ú[³‚®Çt'>Úyµ±†±é˜6°*I×F§®t-L̉ñAÚÚî¡v6©1ùüÎ0OBˆ+3 Ơ·0/‚_S;Á·Ùª³…ÏN7Foréœú¬˜ă“ÿüg;ñƠƒ ¬1g!a_“(ÂuRkTĂ³Aqf¶˜-ßf—­V6Çd ÔPŸZlăñÛ'¶uÂDó h³î·üŒ%a,ªG₫´{Ójµ“P˜µÇå­×CU‘ Đ÷DÊÓÂö"(T`”‹ŒD„—vQæœ"¥§PFx¶çºÁ’uöÇäóÆ;xÂ&ªa£ª¹mºeáLîi%”€ÆúHÑR\Óă©…öÁ'Suw<«On­÷F£©‰Œ*÷ñŒ+T¦ßCBÏ’ÜZ›‡ –ÈƠyP΢o¬#sЉû ^±@©¨ªX›O5VË]¶tóªàf—LÖ€oY—•$wơN„uàIÆäY›x¼5zi DHÆ3fG̀nƯº|áYŒ}ú+}&>zµØ 2’ëË\W’~ƈ¨´ư™‹‘´ơo•äH®ÜîçÎÂ?tµ·ú6ÛÈ-Ǜ-6̃âl4¥È4¦ ê}ÂU¶$¤ ẹ̈uæªH´⓺Ä̉†s®i3Œ%U¯7($yEƒùöh_‰ÿî,©ă!¶´Îû¼¿!‘Ø€ £ặ¦i×MƠœ‘—œ/ôµ={¸ú®á 5û ÜÄ&ùÍ/¾WöØNÍö&®M%í±B?¦$óÚ½8{çú₫„p*´D¤/ưÉäéœ2:ØíøÎ—"ûuÛAÖ‘ødiÁæ:&¬½#êvuÎMôôâ#ïY ̃Í"|‡Ö<Ë U£ÀÀ]WÊwîOÁ?¶áUê÷̀=ªVå—Ăé¢í‹¶æèÂnqû~‚?N’¹2âDSTMô vbO røe>Z =»&áùÖ¾¯3rÙÚ¦̃¢‹”&²™TU_¢₫@o÷)‡ Œg?O8á¬̣‚¡×ცơÿèG6  endstream endobj 653 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xÚwT”[Û6R"ÀC7 ‚¤tw0À3À ]̉ ¡̉©H(%]̉ " %!̉Ư)~cœs̃ó₫ÿZß·f­g}ß×]{_×^ëaaĐÖ㑵ƒÛ@”à0$?/H×ĐÓă /$€Ç¢Eº@₫²ă±B<P8Lâ?̣0eS#Q@ 8 Pơtø~ ~Q ÄÿÂ=$°ÔĐàTá0EîæëupD¢êüơ °Ûrüââ¢Ü¿ÂYWˆÔ 4ÀHGˆ+ª¢-ØĐƒÛB!Hߥ`—rD"Ư$øø¼½½yÁ®^¸‡ƒ47à E:ºÄĂ büĐ»B₫ŒÆ‹Çè;B¿zp{¤7Ø  .P[ ñ„ÙA<Tu@OEĐrƒÀ~ƒƠ¸?›đọ́ÿîOôÏDPد`°­-ÜƠ ó…Â{¨ ĐRRçEú ¹0̀î'́‚€£âÁ^`¨ ØøƠ:P’ƠÀ¨ ÿ̀‡°ơ€º!¼¨ËÏù~¦Am³"̀Nîê !x?ûS€z@lQûîË÷çpapo˜ÿ_+{(̀Î₫çvn|0¨»'DEáeÂûÇæA H $@܈­#ßÏú¾n_N₫ŸfÔ ₫np7À5$jAưáù#À^éá ôÿOÇ¿Wxüü€Ô Ø@ 0¼²£̀ûßkÔù{@}3~üèçïï7 Ắà0ß࿘OIÉDÍXëÏÈ;åäà>€??À# ÄÅÅQaq đßi´ÁĐ?müG¨ ̀ˆÿîµMúơ‡́ôÁü;—&E\À₫ÏÍA [Ôƒÿÿ̀ö_!ÿ?’ỵ̈̀¿̣ü¿;Ṛtqùågÿ øü`W¨‹ï¸H”4à()À₫jù­\ ˆÔÓơ¿½*H0J ²0—¿7P‚ú@́´¡H[Çß|ùm7ø©4( ¢ G@̃-?ô_>”¼lQ÷EÊ_.J=ÿ.©³…Ûư”™€°öđûâP\üùQz´ƒøü¢1ÀÇ ƒ#Q!j¼@Àî÷óL…@Ÿê€¹@́‘?]¿­ü¬¿Ïï§ù_Um==PNä/f ZúkưKéˆÄojn+îT̃rV)Kăͳü{~±5æ‰IO´0’ơs¿£úÍŒ£îrÖve”©Ú“%‘#4œ;gC>æY!s)ʹH4Å%¹=ü₫óĂœÚá£hj̀̉íƯDZ"k3L3¶$£‰«ÑNÁỢ•‚ï­ˆUSñMÀ(:e1wˆbå¾5bsc¶E·|–1Xx n î9½0cäjkçX/®¬b9YX£ÅïàFÍi±}xñªˆp2ú ZíHTE-Ç͵8ó×̀où1ơ!Ï G¹0g¯§ûº¶<-NxåÏç}:„lIÖ EcºíÈ&s°Xs…ôA$ù½‰ŒqV]6í“ß6ÛΪ3ô‹«okb.„YÑăØnCZƯS÷hÍåƠßơ9iMưèæXùàè{Ó#”+»Å=ÿ O£"”p¥RªñMêÀú„ÓG¥Ù4®s·AĂIÎƯêë·z̉ ¶[&ä›^Đ-ñpµz^ó¬&ë±3c\ÑíŸ'%m=ño‘D+¬Ek{Uí¤Z\³æ¼ưó¥]ˆ„³K-b4'0X·°ư—zÿ#”ÆëưŒëºá¬‰­S:Q¯Ÿ·̀qË‹ Pàngđ́ ’"eS?)<ä%C2ƠM@GÖH-Ü]ôD„´Æ)×jZF!ë&g¥ˆßăNHƯ‘kÆN¸4dRydÚ2Mº“Êæ‰…}YçíkËâ ¢1tÖmbé#M½p ôGƠ£æ9L Ó¸^ä‰Ă˜iº€fñÔ‡G¾¿đÇÈz%æ`læ¼G³L{?Ñïu·ÊŒ~ëdúÙ·–Ü›Z*£ C½ù}¯C˜åe0±#¡Áü–Ò\é¶²–LGùnKRÛMáz~9ei#åæ¶¡hÏŸ|sa£ë>Æ9Ư¡ƒưƠ¦°ºFÇ–«Ö´ûêËơ` ×r6el:&có³Đ’ùeÇS …Ơ×öóˆù‡@Ù%µư…†Ó±ÉĐiGÉæH­C b̉Àø†Ø/×V½¹ÇD»~"‘ÆJ]“ƒVMªÁ¡ë¥$Q& ¤Xs»Wc ?J#íO¹ơYj1Û¯ÅûÁM©:¾¨éƠ'½Œ©u+¼EÆw"&¦¥ơLB¦°–sÓÜ 0Ư°>$–Ï+jÀôDkÖ¡·)Ù)O*É®đ©øZ¯‡b19Èä+C‘ôôº¬¢îƠëoDXïÜîF̀½GsVíß°¥  Ú}¦G¶ôüùĐù«jÙd«"̉L^÷äWÎÚW¸í/.ZiØđ¬!M£9̃ÛÎ…îŸäMd[Ö®@©»Ë&sb}AäpP9ÛßM,IῈSs§KJ;wØù!\#-Óư)%tiépüFTÀ'Ưƒ@f & %̀^¿nơ×›Wµ.ï›rŸ̉Îv>K]7µ›$e%: :”…fàÓSnÚô“̀T§¥¿¬ƒQ}´˜i—Ö L˱k«¥z]#7 êœñ™û{AÓ"º¬ éÙlû‚ố8û1`î÷Ú—Ûä†̃Ó >&đØ~ôæÊ„Û¡ÔÛei*Pƒ’ƒZ̀qƠ *E€y” úF(ÖÖÔA>ï+¡„ufÈjƯ\µôi¡{[—¼ï ,—ÑŒk¿œêÍ;GS'»AGçÁ‘)] ¾ê'̉¶W2Ôª́'(lºă- {w“f4Ë Ç$1_N ÷aèŒå*å®`ÂÆßXwíMaÔ4!†d8d“GZỊ̂ 'Åmu&ÈâG‘% 9N‹pµ6~jơR§Ñ•\Îå‰Â˜J›h^å£S›ˆpäÓ̃é&Sˆ•*ă>_#ñ¼̉%Ó¼ă‚¿¼ĐJM¼­é[ñ₫@(“̉ÈL¤3îÎMhæÖ̃ÆcăÓ;?’#&¾$óèO3üyäjí!ựXŒÆPođᡘ¿èƯ×C†[<ƒy¸–§g^!ùiŸlå3‹%́Pù>Fèiß7Ǘ ~®bæÊ©»³°–>ogNwăëv§Œq<Öîj|ô©‚É+‚O²•ë̀=Uï v&c'ÚçêÅ€{œ]Kg<‘¯9’¬4×̃ơ-h±9)>i³'̉̀ÚÀN/4₫5)Pp°üeßXQ—~Gb¹wØ”µỨ1•g•?Z©G…Qê'K~.YNöab>#|XñˆÍ¤ºôá²o7ñ9W……ª©bq× ØGĂV¸Év$uW?¶s‡qY₫ö›|uR™È‘ŸOơqø!‰›ïˆ̉»kÑ܈x‡~Ç?<ÖÙO+ê¯^„3íß¾́¾ÁÉ-¢FÜăæđDæ“æ DB6I}±dNé«ỏ‰§ñáfm[62Êơ—D°˜¡¹fÿ2K—T‡zBLe/<Ɔc{̣å Ù)!EaèÖaÿ:ƠÛ7Í[xVÏaXƒ{™ Ơ[U,¯'Đ ư"´Ÿ’M̉*¼hI^v7e2uPgÛd!́¾Uî•#«y×)ó¼ƒQz¹U6Ú7÷¤’â9¥‹/ñ¼^̃Ç(K88ưÔç-¨sûƠAÉYav‚¾̃^5ơ`QnW†ƒ-eA·Úh»?ñG%.È]¡—SÈƠ _â‹À9s½nß' À?=s(˜o¼@Ó⡲ôG¯e›¬iˆcK4“ª8H«!eg3‰ Æ»n.‹¨¾ÄÓiês»°ñÉ5Á2¹¸×{Ö±ơó¾]æ­Á—µS_•6«³ûSờâƠ¹ צ—\ÊøEùÏåÍ̀«X„g#|_s¬-ïÜ2¥1g Qºf^äë&O•¡»—>Oí¬6ÍBß2ß×µüîê÷úȺ̀í¢¦ŸXpÖÆ<Æ»Q»jØ$]’ÚøY$k'?âßÉtWtymшÀPî4=±=v|8́Zgq1~¿Îy¢.5ñËƯm/ p´”îUơÛxl³á: Y•¸E²êè»d ›´äª†¶1ă÷ÉΑkr0Føđ ÀmưUÏ¢J̃đÙ»ä>Å•8œ0AC¨Ía,ˆ*›à}lÿU0ư¾€SX&\•”ĂTss#œ̣-=µ{ûª,^cR2̉ËÁ‚â©àÇè2í…yø;} 7t¿¬o¤Q¥„%æÙ€]Ú¶0†TÅœ‹ U†™­ûx1)êvCF ÆMǘNñ2H'È»d«¥È™·K2‹N™NºS‚ŒªóM¥ÊI-gˆqˆ ®·óù"8hwàÁTgeù ¥”äO–¯Zí 7 ̉!•ªy¨·ÑB¨C´&‡¬æ™̀¸,l°Ç—†¥ÛwW"ă•mJ7éáuY*_„2 ×V#ïḤ›%–#Ô- ’®¿µu~¥Ù1Ó_érb*s roûFæ@cËU\Ê?‘ ÷„§*ÇËÅ0<¥N#à­»#¾zŸ+úË„ƒ&Å1ê‚?PI‰ñó‰×̀”Do³;ïMƒ7z°ña₫OƯ(Ă= Ÿ¼×iërwÙ°Ÿ²wz ̉À1Ax÷‹Ï·øÛ ÷̃¾˜Q™äN½¼=h{ÆkSx‘ă·ííFÚŒ̃¸ÜÀŸC;ßơØ“J±H_¹µ§¸†§µ“‡a 4 äôŒå&ï»qºöÄùđ*̃éÊ;µĐº̀öÖ‘åü†£j³Ơt“#ùcέĐYYsg©Íâ£2I/¨ˆZưeDñY„ˆ3/—̃¼¼­¿QôíAók‰§d4ØäuK’|{•údp¤:4­º&–ç¸h.[²§”×áM̃²@FâîQ´4Ùø=®3PK¿–ß0z/̉$‡ús’̣8&¯E 5ưbAC—J³gZÈÉ9Óáœt«h³Á¤~‹ó³Ïµ¡¡…¤G¦.V₫́”F•ûaĐ|£Á[2‹ wMM–Óú¥åÆ-dú7Å3CæÔªS­Hî,ºD²÷‹QÆoKÓǪçÇ»Ế˜Ji¯u®¾K÷'Ff…nỉ̃Sđï‚ƠJÊß1%OI×<‘-/âkzbåk{ư¾û®2œë g›ï=¬«·ÅéPLAÊ–ÁNA ¢ÀÑc!ß7Üà;Hsê3t^9-'!±ªÀë Ø9)¨èX÷:³;×;,ƯúI}\̣Ơ¦ù¤ÓÔ¶Et‰öáÔiß v*µÍ•ô>7¦N̉¶C,fß[Å•„Ç ½!Ü+E]”Ä׿èŦ³@mX¡Fu¤­±vOG˜>ć§bÄÛ«á\æ[Ä-aê#ÉƯ¶G.¹g̀æx;Ç›¥7SK³²U¸ŸÅ)Ơóq†|†\ÓK:™¢Í/Ëcñ‘:Q‘˜$ơºÆÑHI®Ú{œËîwêÙ?„d«zjµÚl™toîc~=pt>p)UDç,ç~óăÅQg4&H'÷xPnkù1ï~₫ơƒäµDÂ!t:j8ç²tśΪ¹‰J;Ăt徯Aœ¦cP Æ´=}<‡6ÏO ³¿ßÜŒ~wÊÇÍ%Ëd1¦wª{„òÆ®ÿÆM÷f̀¤´¥F¸îyÊÄ̉ûUXÈ+ƒZyánüÜ|³È2ù¨Î·Ä±̃4ç<«¹V9"®ĂV^ÙéYÏ Ơ^©ë½­'‰räz>©ÔδÔö¢Aº%¬–̃‘óÓ1óÓÍ‚!Q_ÊDH½^äKë$]—ÀÙ’œ]̃÷> ZWöÀWÍ Å¼è^ Óú,!°”c–å(<ê₫`‰¼÷“ 5 ©¼“¦¢ûÀGñnEÎŒ:×ö˜S7CíS™éR%<¥äܵÓü«••ÉK.{˲0÷ z¾Í̀x̃» "ià"h{˜ë¾ưf̃£-h©TŒ Áí£ ¥I>–o²ƒÈ̃9jͤ€úÓSÇŧ—dcX~­Uk²?of¬-½Ávˆ»Â£Ă1~9³0?YÂ.yÖ$­àQ̀Ÿ¸B⪥ÁtˆzÇ~1¢ĐĂ³Æ?Lj£ÛÚ¬Ö;Y¿ụ̀Ư¸2›ºª¤ y†@6ăg‘Ûă`»¡6¹BóoĂß `geØbÓl¾ÊơÑơ₫K Ơ·jvL [̀¤8Årܼ˜eáÙ œO V¥‰3‘꺣‹˜bóÁs5Jwú²ñdóùvc2B7*đ6ψ HjÍ{ă—Ă€)¬ÜÆÜ;zÈƯByt…̃^_ôƒ^N°A9H¤ˆ~ÙơøCỵ̄QXe.¡øKΕº!÷¾oÓñgíaAf+¬ï^œû²³‡»¯*hÑ(>Ñ;í º˜ú›XÊ2 i?»ă9ÂRϺc;`¬v™0Aç¹|{§{¨PŒà ±̣Ỡ£×‘‰–}ß@,Té_‡Œ« R¥ơZÅ ÍZ•±[ó—fŒrr®*RG {¦˜‹5ª; ”‚&_Đô&È;Û?.`³âÆà‚OĐ^„jêă »Yàâ3|0ÂVø‚]Md[¥SŒ>‘]ÛƯk$ÖàiíQ4/.́[Ôµ[Ÿrkù¢¶bßW¾¢eÔ=©·¨¶%̉Ùî-‘YƠf×PŒ…0ơ”Ôó`?ê¼ÇÚỀœ̃©c—å~YƠÊDH]5™·ó ̃TYœÈ‘¤Êª3ÉB©o#ô¡ŸN—QyÂä–ÙH]ô„^‰È÷iËøçûỌ̈[[\ñdÙ”>q…]̣PÈ>¤¼ûăÍ÷>U—tDñ‹0%₫FM™4€¢KÍ' Ça幃̃`ø¡t«´û|ÁóưIÍ3_wåó^ăx:|»,°=¨s°ô²Çêîæ^³̃µE…è]ӱɵ ËVÂ3¢Ù'âơhgç¡ĂG‹̀6LtÈvbơigo¢Uăn¤ œ*ỗ¤;†ĂȾF¯zâGùç=h­"I×c2±©’…QØ–ÍÂôÈœÇ ŒÙđ÷úă5îÇàÍçă6£NÛ[L–Å—:‰—̃ÛÇGoö çkarj.Ÿt"·Ô´M̃œc·qéTZ7†u»|ç³bï2KëêĐ—;mËC^’ñúI|Ç>HăU•xÆ̉Œ}ĂQÏ%̣󈔗ӾÇʨ-zc%•ß₫æËÛ\+”KÍÛKa5í†Å2ư&É·¸Nå#̀Ÿ­E<U®B}·­1T÷*/û©—5 >6#†pv›wªĂ5ĂLŸËsúo˜}‹PŸ˜Æêp¶±;Wà5T?ox|ÿưÇâ8…‡» _ºâ#`£³#‡ăï§,ơŒÄÂC¶'«GlGüa®Ô]%ô£Đ·²aûñä^ƯøÍ…̣ä—:Là#& f₫é—ûúRcR[– c¾ƯƯÜGLÏ\üu+¬'êÅaø§¦₫N„z¦oEk#̀øz-ên„Ö;ØX ¢€H‰¸µDmú@¾ƒKºÍ¿cŒđÙó3‘¹ú‰(‘Rưç˜"̉γqööÅKéƠXW$E˯öˈqœ̀‚¡>vÉqr¿ŸöçTX5zṢ†FZ}²®ưÚƠ™ø endstream endobj 655 0 obj << /Length1 1406 /Length2 6162 /Length3 0 /Length 7128 /Filter /FlateDecode >> stream xÚx4\íÚ¶è½F¢×Aôè½÷AÆ c3:ÑkDÑ{DoQDI$z'B|“ä}Ï9ïùÿµ¾oÍZ{ösß×Ưçºö̀Ú́,úFü v[ˆ*âJ”tŒ,„€ PD&`g7†¢`¿í́¦w$—ú„’;„BÛ”A(4PhzÀB"!1)!q)  J₫ D¸K”AP;€@‡ Ø•®>îPGºÎß·.07@HRRœïw8@ÁâƒàÊâ‚®ÁF0‚̣ùG ®(”«”  ———È)€pwåæxAQCâî ±ü  rü5;ÀØüă0BØ£¼@îÚƒ‚!p$:Änq «Œ4´z®ø°öà¯Í ư+Ư_Ñ¿AῃA`0ÂÅ÷ÂöP §ª-€̣Fñ@p»_@ ‰@ǃ$ØêB ¡°_3 ₫Jƒ̃f¸ÂÅG! ~ơ§ u‡€Ñûî#ø×á:Ă^p¿¿WöP¸ư¯1́<\MàP7ˆ†̣_´‰àß6 ”@Üo°£à¯Æ>®ßÎßfô ~®W€=z HÔ‚₫"đC‚₫#VnH₫i½O·́ù¸₫7àŸ¹thæB\ÿ&ú# (Œ¾ưŸé₫;äÿÇ̣_Y₫W¢ÿwGª0Øo?×Àÿă¹@a>!Đ̀ơ@¡U ƒ@k₫ßP3Èéê@́ .ÿíƠ@ĐjP€; Í/t_xÿT…zĆô¡(°ăÖü±›ü̉ ‡è#Đ_Otø_>´ÈÀÎè§MÍß.ZCÿ¬«#́~‰MXT rwù Ï½ø ¡Uiñ₫Mf€ B‡Đ3́î¿VH h‹̃#4ÁÑö?&€ ê†AÀ¿ñăEÁîîh₫fº£¿×¿åxCÀ ³°t˜Óë°ö‹z/₫Ï£¸+«Ñ }Q¢(¹~ÚxYjSníªî§ëÏ—ELÎúÓó́]Œy?êÎ ^NSÏCa¨ô­+đç~?îv€0Ù!èÆÅÓ£×Éö I[b[r&›Í^…‹÷ˆl¾úRxƯ‰Ü|(¹ pŸ‘²¤Ñ£)ävnc>µ`a[E Y<"#w·̀đ0Ö0¿Æ| ;Wl¥ưî³n—9´´ô.§¿/]ä¨@«·Z¬*‚‚–̉W“%w8i€–*1G³ ‰Á¡(z¦T–ÀJ[äÁ±ŒơX|ùÇtA[ Gƒƒ®Rđ½'#uÑY™Üå#›lăï‚Dw›“¢ùj̉ÙÙ«í0Ά2ö«E`y½ØÔLܺÎ7:Óˆ’̉s m̀ÅÆX¼'¡"Ö_&î^<~–•($l•*“øôRQLÆä:lo¶xơ @AÇN¡¯¥Ëâ´ê1|Oàôe´Âœ9~̣µù]ûPOä‚m‘j*8Á¼#kûíVb“†èÙ{2S1T­Ö¢Ë†;>7~:Đ0/[¿­SMú¡¼äük¼©I¾1Ùœ±ö&F†îm ©p… iRb ç½2ÆW‹•b#/dBeR%‚€O>LÜR6؉'­]¿cĐóÇ:ÁÖư@PßZ+¯ó¡ăă]NMÔưhăvÂƠWE‹©àñÙå<ÅŸ&6¥OåÙ?ûwºỷ°Ÿg®Pở5¸nór„±ăaCÆ›‰̃ÎÔMoơ†Ë3́ Û!5©Ö°"XEc¼h«̉R?U´‰e?H»ư¤ß½gľñä;¡å¹ôư`Wë¯ ºû®?ÊƯ•ä$œóá’"ëU:A’~Ø„Q¦ÊD§äD ‰†áY¸†£}#ÁLNk‘º`Û’íis YƯ¥ëÁY/ĂEk-ƒ æ€/ø«(DU⇧¾ÈÇO‚æzbï|]µ{O¶7­̀Üè•CtZp£,G4“XÄÏŒ˜ë«h_ ¯Û·Ü©j)C¨§úÑxOÑRnqvµ{Đú·!ˆ.Î.Ít™ ³TRw3[â§1O~p¤¬gÀ˜Uo¨j“a: ½bR͵=,®à„)]X‹>ôpá‡1xÚÏ ByíÇïæèlï2לĂäÀ<ËQ¬{UÖ†•_¬Ê]"6HßCK´Êơ§âX4îľ~ưcóî©!ÙOÔ´™tf×ÈaÆ€‡<×½rÏH Åô“9~₫ë§§ ‘Ϫ¥0¬ÔÎc óJz¼Â)T’º™BiOƠtË¢ẹ́ÄO"¥Ö!ÊPSD]úÏÖÜ$¹ºf锜Z™á²|aưë%X+¾7¦fÑLîâx*¥Îaç(;ĐOËÛđåPçt8“S?³µ‡m*h\è[c–×ez-dQÛi ªû:sÏEB½$0Å ï ™èkÔÙûi•"é ÷F-ªÛóww<»ăÇ-ó[~̀35k³ëåËogª‡F$“?XÖçŒÓ|9ü!Đ3q†¯Ÿ­ƠѤDGî¤n[n5Ù•g6LÜ“xF惾2`]$Y¾P7IÔú@$5Úøs„}k€ÎÇ 82´E;¬¨(>ưe8üv˜aáe’¡ïKăcûo~‘ÖdÊOløef®)¦oÍ\¾é_ÈE Ûs*û,¯ƠØ ¼~%of’H®…Ó‰»q†̉~¹¥uußYO†f÷g…ü¬ ©ô#ŒoI¡̣t™æ‹3æûLbq|7,ËEÜó˦±ù¯Óm!ÖslM±Ÿ¬È$`©ñMȰ°nÁ„µ5kî,ăÏoƒ@Dǘ«•{ u«ÔÁF¬ù̉ñ_S¯<¬1Œ¢ D2ÅeÈ>xÂ?d¯ăWeÆ×·³†O—QX ậøEMöÊçM§ñ>eÈ‚ߺ.ƒÆ\áƒÖë§?Íø•é–…`́;²#¿—;È`´̀­êR‡l|®4]Üí•eY|•›á#ÄÜ=²EåĂ’3IÅoô¢<{lJp ¿ÔI&¬±ôwY \Ïow'ĐŸ·¸‹·wKƠ=LûÚƠ¿á9Ï$éLèCGƯ äă*M§<8·Hv¢ƯÊ™:0 ³ª\ʶơUS’ceñ‡,y±|­M{6\d¨ÿ•íKS‹ÔMÇ{îÁ8•{ó_‹́8+{?wÑó·4¾Æ¤ï°ÆD.tÑÇΤ!t¯~xE÷¶@›XbüÍÉÂ3đđqĂ8‚r³2&[[½è}«ÖÇ“ăÆ\îŒS<·\̃¹` ŸÔ¾Ñ¶¢¼́[6:#±×ùåëđ€ä¦¸×ôœ'9ăµge(£̉ÁB;¹¥Zs*l ®P‹Đđ·çκf ovUç|U ¨Kûæ\÷¡oÅp—kqfÜZxˆ©pu½ăÖ†;F̣ æï˜~·SvŸÖàs+UUX¾Ïs ÿäøEOf̣}̃' …yLoSTÀqï_/`%éôoÏ V1Ro£æĂ±®Ô!Y úJơßG)- ¾E=iḾˈÀ)A0̣́¦KÆö»Ïh<ÍG8U›́jQx;å· ÜæĂ½àµª™}}HØ«‘ SÖ̃7xˆ%|̃¨ÏGœ´up>˜°èXÁ…đï ^Çæ‰Ç̣¨ˆ̃K·‹<,DÄ¥ùY)•˲ưÄR½íëÀ2ÅóÑ1ăó_÷GđîhÑhâH"¾OËËÀaé™k5qˆÀlLÔó±íZBmÓè''ïn®.\ˆ(a 1"+vÊÖâÇ me6¯   t®oÎú☆đđI˜¢>æ¡ñX S£¯¸¿0çïbŸÙ iå8WTŒÄ8-VàÓĂ¾4åj¯W™Ư¢›â·Aefߨ}æïj¾n™7/¤+èAiøßv¾À¾Ưg™|¯1TùÊû$W×jỦÓÚå Ï}w½i»1¸8üN!Ù–½d(O5ư¹Ôiç¦́@{–Ïè²6£=æè3ª^É$P’“4/£U0̣6÷Ä¢B’CoÏV°¹VæÓFNß…‡Ç# Œ‹Ü·á{găwêfŒÛSÈz3>h­knï}³V†–^[H!<ÿØ,ÜĂrH¹ly韑v÷»¨iضư¤Ì–›~pÀùƠ”¿̀MlúÿL¨¿~/îWd–äa S\ÀÆçdF^W… ¾¾n§ aQ2¥Áñ́Ó¤ư´ê†ôỷ@o‚ª¥ôôƒ-ĂÀ‚4”aÎjk ¦+ƒ„Đ‘¶‹X?èdcÖÅơhO3Q/_S»–|cs°¥0(R²f@ơ­K‘Éôä Û¤JA+u‚“ ÁS+9@Å×ç~^8Ơ6$¢"çEª{Ó]u÷Ÿ+f~ƯÈ̃Q(­ _íp{=~0L¼̣fỵ~^ SdaÂÄĐ+}û»ïoWóÍơ剬·ă0¼p/,±L\êö|ü‰°½¡öÇ3“®@ïs5¶›<ú°¢­q€ü–±;#)M¥4Ç;UG3SÀ5µY‰!2w«ºíYhn1ó w” à nzá¾6”hå’_XxåKnîïƠåĐpIÏ]z)kỊ̂Î%r8$?£&6»a2URÿzñ\â½3ÍL"Ο‹]"P ̃VQiGŸ@qÿ>&J·¾èmLø5i³³‚†U$7ÎI`£QÁ—‹´x]È3\ǛøRë8ÆDÎ+°<ÉÚƯ+¦Aÿ+c}…éçL“t»5ä7[ å¼)`⪠ÆùO|8]v2M¾Kº²Øtb–´/npëf«Ơï¯âdÈcö•¾q²ª'‡‹˜ËjæûÊ-(ïÉè^„ßê°…1>ós£±µà’e]àùú´spÔ¹ÔGä±sñt­¾̃C¯́µÖraUDØAŸ@µm÷ÂO%‰j¨¨÷©Wđíj&™•éê¦#*ç̀×™ÍÙ™Íê₫v5öؾ9ÿ²´M Û,M₫høø‡Èó³tWf˜Aơ‹dƒ/™Ñض«¥T‚®Ç·_0'»uªNJ`ÛüœQ Kê‚oS¼Ç»)pÑóăđ•~0Ó•‹́r´n §®ßÎyyÈÉC}ífd| ~„z@?ë|$ˆ/W&́BË;‹èb4j?DÖyë{ø%R#Û[Çk.ôsỴ̣̈?¯*Ë7y^«zjr¡ÏÚ¦5Á[Ñ>eÑ §Vp¥áCíè鳴륜ñ$»É¹,4øba_îI?¡Úü¢0¯.UÿêŪ…:£­PrĂZ›ú€_³W耡µÅd-1Á 6Ở÷iêÊ G¦tr®Gx>“é-”úË́ª2m!=ư‘¸g gùjZóúuOtë-›±5†l¶¢‚”đŒ©}—§́oõ~0–{|ëñ}ô¯²Đ¬&gûơêÛăĂÛ¸$!x‹JƒÈÖt…í @ÇMq‘ç¤[ơG«[]'Z̀ürt¦—EäæâŸ•éY}—2£•¦$ódN'ÍÀ1_“Æ SdNº]bN/ ¿ª!-—Çb\¸Ó„¤̃Á:3±Úx$3ióóÎu’hư›˜ ÷ ”¬LuÏz°­Vçk¢T½‚{m>Œ³ñ¢¯8ơêøÖ£“óù¼Aí`̀íĐ|ưdqó̀CÍWZËá₫âñä3&é&nÖoủ—RÓz<;†®N•ÔÉui†¶ &©²™Ôe7q1Ox?jL‡iY‡¦+&e¶ƒ‘ß–wC½V«så,#^WbzKOsƒPÛĂ¢d¦kĂeu¼•dEM•Uo®ÅcêL!Y¯fËú}6?½MÆ3΋U½RswX3Á}K*:™Ëá_ßĐƒÿ$uI­|c^"7}‹(¿WÇóó — ª$t}@t8^?ÜͶ³ê3À1»®7ŸHåB,û2®êà¶¡e'ÍDB÷Ó½/ø?9C6ß¶ UQ̀¿‘`&9¤ø<Ë%5‰¯•; X§x˜yŸI+Ê!»¬ïkaOÙ& …|lqe `†tÆỄ¯åÿØ@+àSÁ»ơ#刜ähâ€c ë·’׳%m›¶t`̃@•.^9ÂAÑâ(˜ä‰y‹¾́Üá䶆ꦔ\*e>×ÈDo ÜÓ$¬äbYô©BO\6ØÙ́̉¹¨ ¬sؼ3ôơc1u UÏ“’×sº$´vNsÄ"¤‘²„™÷èéÓ&Qœæ©vT’¼*⵺¸ø™v±~}VG±.-Ï#iïô’æ¶ÍÅQÙÑỷ>µÀŒÀµH;ûÉ́…p¥8ù–É’©̣Vÿ¹¸ªâîø['}ɵ£*Ö́n‡dŘç±c} ú{q'̉ÖñzeÉ"ß»xïˆÔ…zÀÛ°ØV4ú‰·ṇlôp!?¿'`Î`{³̣8$€_’Ê@đmÑg:HP®Ü|÷ÀàÖTMĂ-&̉Ç ,«˜bÛƒ®Û×ßÚ¶*l¶„L^Œ¦ơób“î zÊk,Çsj£h5ó–éɲë$j„,#B7̀{â†F̀<¢k´]Ÿ́=̉1U¥̃Œñ:k|6“”µO (kN\¼m<AE6VÜ´æ;•G÷ú³–Ô9ÙK˜%È´¤Öq̀ĂŒ³ §ªăGˆ;S­üL¾Çˆ§ôƒ¯̉{̀ÿYỗ-RÏ} ªE¶¾93ºëXr§å¡ØÄƯp ¾åIG#~³‡äñÄXcw9›j·dJ7>zé~~^‚•KE³]艮èo„yơÚLD«cX´–E¢'†Y­?O~wpû) ¬µWéç’ve•ù9dÈvVCîÎ( o¯ÇÜÖû~¸ư˜|¿Ä5)Ă¯y¥TCŒF)MëZ KĐ«æ¹ %^ÅÇ!£÷l¯ ~0M*iŸ'6S{gxƯ₫ÔỲ®Ú¼œĂAô„5lC%Yv4¿Qú16I¡çö æÅjcË]đ,®Ơ~3†U-Ư„ÎéÙJn˜ÒÊÓ{FÊĂÎ ‘Úă¡ åkc;Öạ̈—¶¼›ƯzVó°jïOœb^Gëb毕H»”µ˜ôđh»#í³¹佬́‹M3‡{,·ŸlÇ ©~ÿÆdM¢ âYy{`M/Ûsª¡Qø–'!ïågăæåËaàÂ¥í½³́[–Ù¾>ăI3lØ¡ÊÎ3¢év† ;¹úÂåưdp|̀d»¢6d/«7}ä¿ôƯ´˜¬^âÿ~¥Đ«.=öK;xà£h+^cáđo=À‘/‹|¿ŸÏo—ư¡ĂccëFÏ(æÖŒÀsN½!*Ù"?€ơÏhzÛ_ZϼJ¹Ë=“ÉïפßR£7{)LjXÚSOâưîë6>s”A₫‰—¢ĂDâZûµÑu[n6ë\9,Ûöà̀Wº¥6CĂgæ‘ÊN÷đV´«{©³a“<®|„ăÍ ‘Ô XïP4ÊèüË[vÆà]®†Ë oÊYï 7xd¨@’D/xß.Ô Kq̉áSÖ¶”œf|Ú´2xMwrPc#Ïsê;$Đ̉ùâỷb.­=a Đ̣}¤K™¶yµ~N­²…Ç·1"“Ñ¡APpṢk‚L?JMÑ™,O6Ë EͽKf%é20k}ªw}:™xŸGÏ÷G«¸ùØ œRaÁqµ̣q~~œ"~gKf[œ<ÅânfưÙÅ»ƒ->QøÆjLª`ÜƠHLæ*‘)P¯+xC–“ê/>ŸÓ½¬tØö_WƠ—`J[P{b Äo¿Íq똱³ƯË =Ị̂NΤËaÍ4ö÷/ed=ɼ†ˆÅFéKæ{yל¾sÔ*ûă~́÷£ñîØ¨]åÈ"?~y₫PÛS¶'ßCüîô›×ÓO‰±´ˆ_‚æI{i©0b}ÈC°;D«IÇá 7nAk^nmï4x)Å{ĂVùóă3ÖÍ„á/¢9r—ENÖä(ñÁ3«Ú’E?|³™s‡…Acg3¾₫ơ+U­ÓˆGKB!MS´`™9~_¯@‘‰gKKVXƒƠ$đD‡®Ư8ÓXÑ0ûHîG1%R¦¯G ̀ º)Yç€û3̀/)ÈbL#ºmÅ(¿ÇÇ]Kl±tïVå‡áx†WŸ»Ó‡‰…„J†ï9fZ¬"/!8 —äk¼™DöK₫ẻC×.UñÖ ừ…i‹év˜ q†ÎĐ‹æm ‡Â”Ùï¯æ̉¦c\½¼¤^éYˆ¸í+4ĤÆéỴ̈Ö>ÔtRYx9i" '6‰ơ)K¹üvø¢³Ík3»­gVÓ¥&+ơiI®Fi+^˜¥¥Ă›ởe‘…È'Óz[ Ù€¹W7Ô't(ÍÎmHXX₫óØ‘Á¢Ï?£´âJ‹^4Un8j:̉/Ư¥UçJóç)Îû±L˜%g7ȧƒỵŸH¿b8œ»ơÎØØ$Ü:J“)Èr¬̣ÊéûÏÚO=g. ?ÆyîƠ ̉gfæÄJ‹ÆÄ-ÿhùÓ̀ endstream endobj 657 0 obj << /Length1 2490 /Length2 17175 /Length3 0 /Length 18622 /Filter /FlateDecode >> stream xÚŒûPZ× ăîî»»»{Ñâww÷ânÅkqwww(EZ¤ÅíæÈ{zÎ÷ÿ3÷Nf’<˵Ö^{ï̀$¡$SQg5s0J9Ø»2²2±đÄ54XY,,́L,,l””V®¶ÀÿÉ(5Î.Vö|ÿ²w»‚dÆ® CE{€œ›-€•ÀÊÅÇÊÍÇÂ`caáưŸ¡ƒ3@ÂØƯÊ  Ès°º P;8z9[YXº‚x₫÷@cJ `åååføÓ jt¶25¶(»Zí@Œ¦Æ¶uS+ «×BĐXºº:̣13{xx0Û¹098[Ñ2<¬\-j@ ³;Đ đGÉ%c;àߥ1!P4,­\₫R¨;˜»z; ­•)Đ̃äâfot€Øê² eG ư_Æ 0₫n€•‰ơŸp{ÿÈÊ₫OgcSS;Gc{/+{ €¹•- ,¥ÀäêéÊ0¶7ûĂĐØÖÅäónlekl2ø3uc€”¨*ÀTáßơ¹˜:[9ºº0¹XÙ₫Q#óa@m–´7w°³Ú»º ü‘Ÿ„•3ĐÔw/æ¿ׯ̃ÁẴçÈÜỄ̀ü2̀Ü™ßÛ[9¹e%₫¶‰~Ë,€®Nv6Đ ô4µd₫ƒ@ĂËø§’ơ1¨?GG€9¨  Ÿ•9ô‚àăb́¸:»ư|₫­ø/B`e˜Y™ºL€Vö¿£ƒÄ@ó¿0hư­<z, ñc°üñøç>hẦ́m½~›ÿ¹Ä̀r̉ZR*ïéÿ.ù¥˜˜ƒ'À‡‘ÀÈÆÎàdçpñrü₫EÅØêï,₫å)koîàư+YP—₫—°ûß@ó÷ö ü7–’hnßc₫…“ÅôÄúÿyØÿtùÿ7ăDùóÿ›‘”›­íŸz¿ ₫ôÆvV¶^[€æÖÍ´@;Á₫ÿjÿÚ¸@3+7»ÿ«•u5íQ{ Ûiå"eå 4S±r5µüs6₫¿ÿcŸÙZÙU\¬₫8YŒ¬,,ÿGÚ\¦6 ÓĂ4’ª€ ½ó_FI{S³?6'ÀØÙÙØ 4IlœœVĐn4z₫9Äf&{W TÀÜÁá%åâ0‹₫!ú q˜Å~#n³øoÄ`–øx̀’ÿ n³ÔoÄ `–₫Ø̀2¿;€Yö7±ËÿF v…ßħôø”ÿA< >•ßÄ öÔ#³Æoâ{ÿø4#ƒÎ?ˆT»ñoÊÅäÄÊ¢0q66ÚÍ]ÿ%æü[ü×Đÿằú—Øèú{^öäÿÇ”‰é?ˆÄmê` ÿI88₫ØÙưÎïÉa6ûQGƠ ü×z'7Đvûíj¢ùo—?ƒ›ó¿ô l-₫A9X₫ÎT¹¥—£%Đ₫_ ™Ơ¿ ¨¡6ÿ‚ ª₫Í*Ùî7_̀¿C±ƒ"Ù»Ù™üq́Xü‹t2;üÎtÓ₫K ªÁñ·̉tÙÙÿg 8Xÿ–₫w8@s-£Ăïr€êw´usùW|Äéw’ †8¹9¸ÍL₫UûßB«?„ß¾ ë5—TáïÈœ J\€vVÿ]uN‹ èNø'!PC]l],ÿ”öï"@§-³«¥3đ_ƒê«‡Ă¿@1Ü~Ï(‹?¯Sç' Z+÷APzÿz׿ ¨ë̃¿“¹zÿ¢üÏÁeêæ j»ëŸw èTû₫ó£è 4EX[v0åµ®í¼ÿ"JèÁx8-¸@y¨•AËè³æÜåöˆ›J[›¼í|+:Ö¶¹/Is#²NúâsÖÖѬÚñäûl˜¨6wذ:‹3æCPé"eɧ%e%1Û‚+¹,´L`Û“C¤¾=dßùôd1pYl×x¥')ü:˜ƒ´àsƠéêÏPVđèÍ=<¤¤ •[K F#àï"éÍƯăa•¼|v× ntÎnäϾ×Ïèyë™ïÁ#́ao¶ˆmI¼D8ùa)Âư:âéơ-²Î.§¨ó°9w\đ<̣Tï®”üᆂ[”‰†Y”ỜM9–xS‡Éñ¾–·Ă ₫C­̃₫ºÔû &§«£W<̣ÕDM^¶)3%²œ&-¤Ö¦‰ßu±« P2£’¹ó–Ç*äëøî߉Èm˜Ơˆ̀uHƒO)FßơV<™¡¿³ ¯<lù&t µ¨û)Â8 µ%]‹(Zé+Z†S‡y}_@·~¸è[QAÄP28¡äT±̃Ä4U~¬,b?Ç·¥»[䘘4TñëŸ2×v[úÎ̀2Ư—ª‰B}û"¿i—c{k°I¥µˆûqk㤥đ̣ÅNj`뢒øSczáúRæ{‚”¼¿,Nx1··è¦â“² J4ÜVBŒ̀8½U¸v].¿_}̉}.Ö‘ơöä[%içgΑÇ1ÙÎ’Ư‚huÎsy>·£jW,‹)¸LæâÇ¥›̃9²‡N×@ZVîá'¶N=×Ùù±ñ´ơÏ19–¿2£[Mrv_éÖˆ!(̀†‹¢)*aHaÙQ|AhäÁùWå´qå¾ïç.†ËÏb̀qa*1%\ïÑÍ̉ûKó«²s8§~vĐ6ư°æî£<³yKÇÙĂE§ÅŸ‹œĐ`›u$x¿9+uRw—ĐÆâ*9<ß²U(‚W~„Ö@ 4¢:'̣ ¥Á“âc?·’ç-́ñ”bÄtß“|^äđ4ä$‰<ŒÏ_kÎdø•[j¶gËIm2a²åÄ&sËPN₫̣gh^IÉ₫NwPúÖÉm¤e¤nY1¢ûWŸÅÓÉ¢3$¬ĂwºÁ®4ŒƯönÔñ –ăưDëz?Ô@y°s´ Q‚YÅ}b#a:RnÓ„>/ÆuF™Áüz)ÍÓ:k{"¸öóª¨u™&ÔÏNÁÓaªl‚s+’5Ÿá¾¸exŸÂƯÅk?ª½÷¥ ê¾ÆI…́ÉÁ*“ơV¾zŒ |–d¢åù,ăjDŸ>ípºvWSâetDæûPmLW3evü1 ––ÉU–È̉)qå5’„2ßéG`{]`­Đq¨öÈ{ø!öảÑønÔÁ@^e×f=vߨKNgÈŸmĂ«¯O«<°Û©ZDN C]q>›ßê±’GÍùü57Zo”“Ú)¡7P«|¸&c¼ûRfYbÓ$Ërj4à\zŒtß9Èrbç¼tÀŒ¨›^h «áj¿+bVªˆ¾6O Ô 7'!‡̃¥¿j—R%©uJœ!ê—±)†‚qA!] [̣̉PMb3‹£™‡Ü¦%“á¶³D6]º¢µ( }„Ôf÷îbƯ¦à¢Ànñ{ ̉Øfµ>´Úăæ:~¡è樂il—+2¸Oh¸©~shăÛº¼̣#n’lœ(£ÙWŸ˜baJî©cưJ‹hö„ó1äƯÏqY˜)₫@}\Œ®±¦«65đ×Ôço©í² )ä£ÂÙŸ’ƒn÷MẠ̈f¦GŸWx|77¤gr¿n]|ào—AB°̃…1e‹Ü®ơ$Ơ†ÁÊg%æÛÁ̃EoK;DĂq}G2°ƒ#LÙ6w—j­̃ÔóÎÊN…ùÆ·-iÓ%Α ­ĂàBÏ•C¹Üo¼ƯDLBà?Á[y6o9o`P9÷!£ÈŸÂ`Äăǯ· ¡Ă!³ªŸª›AÿĂ;Ô¡øfD[Ô_}37ˆ·Âó£']ñ^ CVJ¶FĂÆó2ÛÚÂ$W&Ù ‰†¡oï¢2‡ˆ)f"²ÈÑ©§â—N@•Á‰·'ĂºẢ”©¾sö—CMKxSÛMÁè×*W™dMñ—™@ª2ÿ¬Ó^>Ï–Wk‹X¤ƒ‚3r  yos5@ê~Èî&„̣î# ÆcÅ£«™K!N¶8¸’·isGVéS0§´ÿTÀjk.pÊö‘xѬ’e¾̃kÿ8i£I´åvdq̣Rđqù5‡mêlÊ¡ÈCm¡²́v7~ö ³O‚”·£™ó'²9aA×$é#·ÜöỤ̈Ơ}èÊBï]£ú§̣}ê<Boü¶3“¦âS8ÿá °U–‚º₫û’)oÂ}Ù…j²PdÖj Å$Áeç̀ùßÄÀÎ÷‚¨$3`xú2Gá=̃ßåœs¤¯®2ä́X•Dèm·ÑWơuèc~)&ѵ|̣o'́ỡløêô₫H|V$<]çs8a„~ûĶۧđi®'?å|I& “&]ô¥6ÿ,tCöhÍÂÆøù0„j'äñÄ8Eơ³M§—»((ÈåáréqZ}T=Øm¾Zº4¡§³2 đc"GÓÜfÊŸÆC´>†'^ă×nVăæ̣¹àRº“Đ‘+ LÂdx¬́Yó*É~€Î挵\ÚBeüưp @b²ˆƯÇPk¡lO̓=ö°h N‘P­æ+å#Ơ C³¤¤;â¿}U¸lLÑn¬C^ÿú ‘b¬s(d„áÜɱ’¼$‚ÿ`Ö]‘̃—ŕ^ˉƠqÚĂ Ä”0W£o1T±‚xs©ÜĐNä!~ÍZœµ³û˜µÁ/Y]«p:¨Ÿ#ă[­Üÿ¥.¢đîf´¶§ộ~‚¸±ôđøKoÇ0j…í1ÊM=áCæ>`ô®́:T ç!úèXô£¯‡Œ<NLGĂ- f¦ÎG£@Ă8c:282¯rÂ;{Ñ"¯¤cñơR»Ä̃5…µ€VtÅg»́₫bß4dåK~be™· êDyºúÚ¡é±­̉wÜƠxL뱈r,.7Ă¡RH<"–m<öbĂ»AHæoÛªW¿Ǜí"\QËÂ+Av́ a:YW\ẻ"ŒÇe-ÔÓç6ˆbŒ̀Ï:îu”sQÉ̀¦ˆó.Û9Cûp;×cü”~ ä‹¸–s~møJSi!mĐ?ØØà_ë©rc(¿÷u·oGçQ'Lb"™ü¾5…Kؼ…›$}=kÛ½-I{âÀá[ä1ûsơ½FĐ—ûÆ?ÏóWª;if<å†0y‘‘bµg †À«äOœÆÜáfezä2u è`ªëÛ܇M!>ª7Gb½¼ Aœ'¿{ªßéæ'`÷Mô–ÚƠá¸Ơ‚]U'’ÏÛ-Í=¡ơĂ¢̀)5ÑëAW¸âÇÎSóˆØn‘¬æü,L«uèÈ¿T#Ëơ#"E‚úƒYô7ù‡_.~l1ø>ª¢´r§®°Ú;qØV́n1j́ÙNœ‰&¾$₫gI'lO½Üø&¢~aAy™Å Ú‹Ê\ÇÒhÔF|¤3‹W]=‰e$íàØW<1²à7̉ ©o“F^~̉§%9¸ă´¦I›Đ_¦e½qïÊ#’ñˆwÅÙ‚1m"A8Ǜà4-¹Eº#È·„ª O±è Tw^+ä:HB́._¤ hGå‘ üGvZéáÉPºẃ¤ÛÜc½,Xx…JÉIXOJ¾¨NWÉ6#©» ‰Éj´Ä,-º_c¬¿5«uظÛRøV[Ư³89^v!¨z‚Í9;́Ë<ªF6dº{_g…\#×®8âÊF&å&wí•ԵƗØ$Hưt»S8đ#à₫ÅÅFƠ¤Ü°̀“;gºdO«‹×AöÏ{#=é->-1–°R|áTHùªˆ.Ë(ô³”"ûŒ5Ấ]†ïªLÙxȰwu€™!‹¸ífSº1tpú²j́M)-{³pE¿5·LÈ–àj÷¬cSaC EN]‡A‡-¬¢²¼†yóüpHÜíï̉ưB‹Ï«MgS‘ yhùUû6cú’<˜-Ây«FÆ‘J̀F0¥¨ÇÓ{'llVe®đ4̀zƒ"û¾üâ%Û`úÆÎ\ûKÚ7È¡Z­ â£ÁÀ”qn£TÏ£tŒÊä ÅjwH,K®N0yÈøÇ˜®gF{è{ïªF.³MzRJåñÓ}Lä³éç̃‡:´z,Y_³'ơ-Åú&ªu; £_VR?–£«?.;È.k~„ƯĐ·ZÖ°ư«g¸­ÛdxnNTóù5…³¨¶ŒZ‰ÇU1’–^’Ï=!zœ<²u¡â¢<`7ٸćF)ΨÁé®nz{}qQNnâ²cå$Ä0H k?N*NtD7ßRù)Ù»}* À+æØÈÓԛܡg*4 39-£p½­L`=ejö[Yè3{®ơ9¨Èv?¿ÛlƯÆ™ô^₫!đˆ8v•6:ûy Œw̉æ+^SyI°ksæx…×ÉlÅræ9@_+ ¯y~QèóÖ> d.úM©J‘XR‹±®øØpv´rî©zP üKĂIà’q)Vg|!¯Ơ>ç¶ ºÄ‹̉]=) µ‡B?22ø!F½5yê ˜–{ƒ—â´‰¹{v[ÑĂR¸ lMxÚ\s§´^°yØ÷Alªär•^ÏÖF*Y ¼¬̀·³¢x+AÔ‰ôüõ|Áz~€,ÓG¡e¨9ưÆ‚cY[÷/•_kÏf1 z$Á®èí̃süs–`¦Å¼iµ'ÚHê<ç>ŸQ–>éTÉqØ`»´]RS8Óg»f½DqÓ†̉nÛQ}TĐT]D̃WàN¦­n°¸ l _ù™8•ØLÎÙÛùfˆD“̀~¡ÛC@ư‚«8~̀ÇMT{cM`—‰TAÖD]ƠƒÅ̃æ‰5H( ç øqP ơ#*ÿ̀>aË Ó¥}Œ/Ï ]Ñg€W2y¨kb’gnKlßU`]ëƯYƒ–Ë<{’_?ZĐ‘¿₫Œ’èËœ'Y ̉wó”KÊ×ù̀Á‘û/ưkDÈç‘g «=ªËû1ZU+À'̣ *%°HjPp ]cQØ. &ă-1 ¨„̉1<ϵ8±x)-ʘlåÙe`œ1 ă«û3…1 ÚưŸƒtkZ€{ ç&/ë̉á7Í¥´—8‹^™:ïON–0FGĂ} ;åQLqü«X.ÄdˆÊ¥¢·«j4ü“¬aM ?µ~NfúÎÑX·‰ÂP 0Ç·ÉwF*_oô Ẁ;‘ª|p±w†>.oàx̉xø‰ô+]ßAà¯ü¥S-»±“Êè×óK Ơ¡:>ÉbtÉ%ÊđÀ³»ƒêQGË}’Âw‰v‹™Ly‡œ̣1S¸6ªÊ¡Ä›“[¨oùξ·–Ûå-˜] ¦ˆ´ª{ü³ÛPé´gÍzo,Ÿç;ƯµJ¾«`î¢ƠÈGå"ϳà‚tÖß@vAâËæ]¤+UÁ½w)=ËTj̀S˜3P­Ư£äÈ^K>l é‡F¬”TAθI‚#|v’n”˹Á‚·ÜƯ+7n—¸₫Rǘ;>¦ŸÜåÍ€äN_$™=6ăC_jƠÙ±ët£Ö Ma®D‰Lûzûb}Á¶†˜N&à’O«J§l®™ª† „Kk÷hhS‚°À²8§Á*5ûNÚÀ€i+¿uƯGä[Gø •ơ+ă@ỵâFĐ̀9û–ï₫œnÄ\ —oMÁ$íÄ‘2ŒËÓÔÍÇjü±™̣%9(G&¹m)á@èCNûRÊ-ÀVd¡À¡ô…ËăÂéÓj°‹—áư¹ïØ0ï¢ëv́œéçqbk¤ÔƯ…:0Ë“·ag”'2ȾÇLjqư¹¸4cóaûÈg»º°Í€ÑwÎ͹˜đûM÷¿î—/P40Ö Ï‚ Öb²ñd–ùíë?Ù ©‡hơÉñ:—  äÜU›ë¡A$’̉×;Ú ̀₫L÷Ä´+yôñQîv÷º[Fh̃'~[h N¹náÉR̉F:øµè[7"oQ̃#\gU½…ƒÚZ.̉œ•,­̃_©F[ <;ÿ‹?¢gzŸ7{€ÄAñÆ‘ƒMvé5ÎKy2OM1U¼©$ë-TÔµh·Í3æˆñŸBOט½9¿qªƒëƯơSX₫E=¬ú3 µéơ…p1$‹ —#oaˆƠu5Â8²f··­C₫èÖfúº7ÉVψø[zócÀØéq{{u+M6×[lm|=§3d+ºR{ï—kÓªSÙj„¬ïi-™I´ê©¯ă3ÛÇUWØüQp¸¥{Êg‹%O=ábRR³ Ñ „Qi„o+ÄQyb³68Ù­Z™âѲ‘F2ô&¶&¡¹Ă‚i­yÛi¥Ñ_äß¡5Û˜etª…`Ñ“.긻ùHĐª>”ÓCß?5Åä| ¨ñd¶&(́Y D·̀ë’&êÅ-Ƀ8nÎ)CÆIÓDĐĐơ)r$¨™,WˉäĐ£Ôº^:QΈ?D„V¼‰‚C­ă ¾ÀăÓdôI?!H)QÑ1Å’X Ó6T›ïLÊ,¾ă$ơ¹Ç&ÀR‰úV&»˜=#’nLŒu ÁM7Ip'²nø#Û~4ZD.º̃ÉîÚØÏ‡zT–ÑÇ Wxc'7¯5üq₫¦ÆÄæ©t]p.VÆÏéAŦ„ÔQ¡B@n= C²ûØGdÚÜ¥ºT:w"ƯH"V´0»3¶|ÁñÁơØ‘ĂƒØfáØ0Ͷ‚—ë(nq¶jî^‹•„ÛZ¥+—5Û Ø*±Î_Íîª Ú÷Ö÷ë&¨VXÛ¨Iä  ëB©ísp[ 4>E¨₫€"Ÿ&¾ư[èư xSb‡†ÉƯ×säÛ‚¢?öa1 •³ç’§ 4bazˆ…>ỶDG³É1æc7•zÈt•T jŸ· Ă}Kúäˆl3ØÄr‰¥Áøëó‡Ÿ₫Fü’J÷aº]drôºç²0vh¹\ïƯLˆ€½Åăxb—hm¸ƠŤSû8/€…³ùâH”I9’¬!̀g*x!²¥Èg™@¡ñò̉”,çr™’‘ >a‡ 'Ζo&ñ—]ئ'EünéÛ¤Í,+ƯÖ‹Ưđ¯₫¦SèYL¡eLQÂx¶EûPzYÅ9e_tc»́Û›÷«®w?6ä}—ơ3¹8ªJ“ẵ'r¥­]ÇAïè¼oó§Æ>´ Û4ă,1Ăq²#éĐcGâS/ºv†—„ƒ£­ÉÈ>.æ̀+Oåt,B£ơ¯^¸B¥ê+§¦^—Úă)^üÅwƒ.ÓNTx%CÖư‚ö—¼¶· .îo¾¦`—WJ;̣£́ß…$e¶-ƠÚ|%åçç·Ê‰Ü+³6Ù&ëơ{¢Ù®œKYK͇ºèHĂ´²»©ĐS,‘yZN Ó¦ÚÏ‘×>£¶åB½©¦€rÿ'o'~`.8‘7xn¼êABItHùc«—9Œùäí%ƯǸR!$,V́Tåö¥‹PSŒöÈ&¥ÊµÈ‘¦åöF́_²–̣Úư Ơ;W¡X%Ö‚ª°È,n\íê¸Oü“Ób>r Ơµ¹•G’̃Zp̉DÙ‹öl>EÏ£ơ‡ _(®:ŸLf”»œÖ=}vx‹kQÅ^µo¸¥3ßăẮ}³ÑƠyBH2-j^{É„';á(8 =¥‰¯ÂÄ¥¨À!1¡?Çvœ~¶E­ÑÙÉCS°¼ûZr0FÿZ0‹U;*éöú́oXÂEG~Đn†MŸiÈ;dv:ˆ‚¡(Ju§<¯ŒR r"¥¼ËöµU ŸóE†8× +k¨xûÀîĐÓ”̣¡áàơăW¥́®è›/«VÛº_I„°®0zc÷ưRñùªÁÓŸ¦y²½ªX0µW _æÍJ:¼Fek)$Ú™ôƧ½Á ¹ \Q°°_]£‘¾ O@ëÀ[̃ú¢]²„tDưDÿÉW.Đđ­2vÏɑ߯₫d–XĐ=Ûđë=vWHnJÈ,fH2aü“Ébˆs¾ÈÑ3ƒâKÑW%VÛl˜”Ÿ̉ö]Ç+GḮ6ñ¸{²‚đ¹ÑădùùĂ:T<̣SâÊÔŸI€î5#ùç 8Cï7®Œ'Ơ‰ŸiÉ́w>¼ÓĐÔˆTÚ./Ơ‡Âe¯Æ/®>êê„ÆW'ç~_ä?°qPD¾ÄëâøïÆÜDËÿ ẹ̀Âu„w†‘îo¤¬3v>-’d„VJzy‰µ¡"qk ²‹™Æ8!8€Î>â•§‰£¸®3¹¡Ñ̀élFµÑu; /̉+Æ Kü¶ˆ!æñ¼×zQ<:×¾Êb[…nßTưŒ₫®èĂƠ{°Î¯Ïâ”Å@g¿§ ¦húï;ܾû®†'Ê=êM¿Ÿ6Ñôn¿Ó1÷_7ˆüL¡w&‘;¨.J{'7_ß7uøñGwظó}%’‘ xnèQâS%×FŸy'l£ ¥ÙóÓ›Ó au£́Ơ.“d•¹9!i»1zƠF ‚â”ñyO3ǵ>T·ès™‹?Œ:¼OăÇÚ´B©/{±à(àH‡­´²Ư8Œ?#sBVWơÚÜhÉÈά™P[£b@ê^º̉nÚØ|xkW„4~*¨_ }­đÎd+¨â{ç+¦RÙQÿRHÁ̀'ëB¾û¥K(ºcÆâw÷ơ,—ñ^Đ:¡|«‚ŸÅ·¥Ø*QƯó̀HƠSĐ’ù7„TCü‚Ɔ• uœ-́QL5™7f1 /3cåCßÏ/1æ­¦fª”87äÛ™Ÿ“ËhV\8Aiằ‹Đ³Ñ4ûÜ‹2*ÚåÑm®Å;ßUË9ª'~êtâ|Ê‹MDí$ölA¶¼ ù{è‹éÓH: ´—¬®”6\M¤óä[Á7RPõuµÇèû«\ÿ1R‡ª˜ ưÑ2Ø‘ÉN²ư*Áa·ỘD½S› p…ÿ8öw(w;Ô9˜î,\¼9—úûñx”¾±ÛIC­…9ä–#́`¯KÇtđ˜ŒùàÓôMÙ ÄMdUx‘=7f4 ₫¢aŸ};»ß{aÂN%…¶oqvç×|Ư ¯ëÙ<`ŒéûÆBüH- 5Z¢«å z¤“ÍûZ‹yB ßë¸æŒ [`[Dd,Ö́@£îm4I}‚X[¡P¡ ¸aç~묄öX²EÅwî”ÊÏm¿Bơs!;CÉÂÈ­§S¾´_¿«¦÷̃ÈôÓU”áAÆÑ$ÛÎ~«̣El¾‡ó±€ÙQăFñA~ñßkü9]!‡vƯÛpV óĐÂĐ*Ơ¡ƒ™Ëˆ«ù¨C2«ñxæ+Æ$CèY@§R­vœÊlx¿lÈØ¯Æk ơ1€å3j­ ”8^ôׂ£Ö‘/ ÈËW— ¸¬ù;8´çªHß́0zp̀»̃À*Z¶J¹±ƠüJ -i“xqP´¿¾ùC ºÖÜúÀ©¨t9«H¢úÔơxæ “3ªtm4ûO.Ô~™~v¨^Ç/zöTe>z ´¼„X–WIJyÊåwÄßÚßûd‹ _…íjŸ̃L=¼z´«k]Ë-…Q̀(N<ñ:ü¢K±ÚWĺ’çä¸ƠÇÎt&ït–ê brĂx÷“¡÷F)QƠ&‚}“k™ÊbWơÓOà*±KËQ†b1ÚĐªàí+ï¼đ"ÜiÎw4TcúûO)å,Akß}¤³̉’TJBÂ^_µuy qçÙÇ\¼´9g’L Źªo(P‡!ơË(wt"5Öoä€?uR˜ƒo0ă÷p~. R•`gÑ~´P¤iJ˜†æ†§™,÷í¶iă‹ Ÿ üU)ª¸¨:íz™º:X;”‡̉ÿ¾÷& )ĐưŒµ1Ï,À;Ó°×n¤=xa“· y1ÿ¤ùư‹}fSoä5#r"́;¾% ßLä5èx¿o«XƯCÁÖ]‘ OS“ïŒÙpDñ1C杻û—H.•O%Ñàq%!Çù¦¹Ư—Aipf>¤ư|kÊ/‡S.ß\I­~¨$ïĂ"׆ªĐ°E/e"1rZ­₫HŸKK¦¤Áñx4f®^bS¿ÛYm²ÁI¢€B`,+¯ù%áßhŸ•ö$~¨*bÈme$ ±ÇÀ̃Ù_ư„ÎÏưy•|µxoà0R¶&'lt“áV₫ă·¸oºPxưUḛà ¸BO|n!Î’‘,X„̣ƯBL+¾¢u’8/N0Ẹ́hĐL·e.¹Â˜cÍ–hXËMï`ר·Ưc÷ª‹éạ́µVN{ÂÜ.J¹ŒglrƠ]¼`\ä²ü3 ĐÉ]c©@¿y¶Q́×Znüi¬,Úes—G6;ôËñÑ+’}êÎÏÛg›'î̉))Í«.mc«H´reö»„^Naç­¡/áú[|I8¢–øÎ”vOë_ZœĂ«p^¢)Yfyo¾¯üvk!)™B<ăcŒ¾ËE-Z C»m¬¥ PƯ)i ¶F̀“¢†û¡_,¹)±í9C©ß Î…½¥nA« [2À¦%2ejåëѹ–4ÿ—båÍ ÈÜÎIù¹Æ̉"A\>UÖwĂ%u¡BJ´́Êí‰î‚lêèÂcÈŸ=½©å:Sđ´ÏÅKÓ<©^DR?/ƠAü ßD]gK@t4ø¦—×ÜîëĂ«¨:ôăD WÓ’YhWÆ–;ë’÷›í3XBă@¥¢‘ïzWÊ€† qœ;ÍQ~ŸoD¡ßÑĂ>„Lÿr)±È´éị̂O¹¢₫:Ï4i¯̃ÅJâJÙŸơ«ôVú¿ÂÏôÅ‹½%uÅÊü’]wrênó(ÙÑ.̃"÷W²0ĐÉĂb>Ơ€¤DB*ÎP¸µÆs¨ơ(ôa[̀f=Øny°s?,‡¢N~La3~j2¦ëÈr1ÊW}‰uíÔ oy¹ùL|ÉNăQ Ë/üƃ?­l~0Rz“⡤:RÇRâ/™æ$e"<–ơ‹½V?âĂsy”/såj„ ’k«©ÀSèÆ-?€₫nZLŒ¬Ø- ¸2é_B~{ºH÷NSx«µ?ˆ/Ơ’tỀÇÄúS•Ö÷XûL²c%(Ï/æ1÷n´Á]Ä%ë)³¼ª20?K;"Ô:µb73<§Ñ©È‹YB6Ư"+Å»¢Í²Đ=ô°nŒÔư 5pdßüp¶áu3ÿđ>@á[́E"Yd5nµÀ@6¼åÂy×xoºwj V́;)˜Ơä¸TGÏSl n»Çßưyj}¾‡)°Ú×±ÁP†î ¹O³Wü43üu,öăêĂüüJ'¹`=bBÙC…ÊÙÜ"̉|»í8®¸>ƨø±Z̃z ‰WP!*Xû­S.|«ŒÇ“œ̃'̉Åui]ˆ0ÍÏm)t]›6®xȨ…ƆưÖ«8äåRRùq#́Ü·<í̃đ¬ˆưH`<äÖ|É÷üHĐà¢ư+úû‰_Å>Åñ¿®Ÿ¨2׺é‰H`™PÔ_/.LVñ… k…N“qeÁ·îq ăÛv‡"ñ|&à⇻ßƠú̉Ù. ÂJŒt¸«F¡.£}¶4Jc¿°s?₫Æ|ÓEoĐ/Á»C‘¦Ÿ%™VH &C¤˜ÿXcyŒ‚A_œ\uOÇ]¥Ä©,UzQ©%̣×ióX_-@äz7%t‡)¼Û†ÂÅé8h! cäÖ6›Q ̃ö:–K.¡7ÑtN'^̣æĐg£`VW@);IsÈăf¹H]£æ¼́EæơCXè±Ô¨L1gçÚˆư5âÜ">XPèˆbJû\Ăé3ñ9ùŒÏ¦µEc™ä~êTá‘ÆäĂë™î»+z`¿^œGc’+™œ₫̀8hỐ{Ă{«29¾ âÄ8 Á}wă9öơôƠHÚW6z×*û`º!J{ëgyKÔÏË=9á0%VRgĂDt´µ¸R]ê°º ‘ Ë!`¯k̀.ê ’̃÷ߨÙêÓßâ·'Íă·¦ºjÎ1ƯËù™SnÚ7YoZÛSábxÂÏßÔ:j˜¤‘³¶b¼ ‚»wŸ¢”Đ×Üx®•‚äYµy„±!µ§†”#W›@R‰€Å r”—”ÙeW”·ÍA›r̀“7ÖÇ}(:_â¯Â‘â´jiÁG¶](F?`Ëó£O¿ ¾ó¶ÛÍơ)p4öZ‘YuG€Ö„^‰Í¬;÷V÷Ñä@Ç\z}ô#₫¹³m•ȉùüùyĐø O•$7ó«ĂBQœ;V†Ù;öM·jsBY\ÛbsƠ4…Æ ­³§ Û©dñÆV²à©dró>Gy¹Q!óÈWĸ5Đ7‡‚- Î=¶ê?̀©IFÊcP½< ‹}î“€3¿%€Ù7`é€bZUÉw•µ ơc:Oyú^«oëú.áX‰™h¸h55¾$ẫ3w¬4KNI?tíVí°Ù¦kH x%{äהơºùVGwª{Ñư‰>Ú“²7ơ—²Û‡!ŃkÊóIH%ߣƒÑ×đ¤–ɨ®2ưWçÛF0q¶ó„¨÷4 á›Äû <(/öËÔ£+óƠuAÍçay8£‰fĐŸ8<"”Hï¾|ûÚÿNÉoÊÎ_#0]păxÊÇf­‘üÆŸ¾.DœXVÊB )œ8H”˜áyŸÆ±êÔ¾ Ö¿ÓOÀ³]dº–~8‚¼f9…WI¢~6đP¤oúY‹‡ÉŸF̃¨›¹±Fđu–#î²L\̣.©û퇅…9¥­!KÖ“!/NVơ{v FÅÙ V€Ói  mËÈïÉ‹Ô1Ôjµuäîܥȣj±˜Ÿ:+¥àhpâơ"ơPÉÉvâb›GÖ]Å{Á̃m­0'p5‚V·§Ă)Ơû>•ª$¼>øƠVµó9}%X́ûypX1WÈ{°q¸̃¢ˆ0›Èư¸Ÿ÷¹i3#4aù£~p™ZÍKå`¹Úä7 Ùé%́×ujW¿ ) ”̉ẫđá ÷ÛJÙ'3ZÊÂIG‘A˜Iúúô ’J0÷´µ®ÓIÛÁ‘cö}¡Ë›ÙU]6Ó5»#‰[RÏÅ¢ÿ2¸ăñ Sơ‹Á¿•íÊØ¹†C"‘‘ă0A+ÿ(Lă™føalÚ°0ÔƒS^7â@¸̣€éôP’ŒÚ™ˆb¯OÔẸĂ«i?«ø•…ûæu]käàÔar&̣ÏTeƯØÄ–Ơ K¤ÿîƠ.çíÎ$ÿ÷¥ÍB"G2jß¹­ƒÛ/ߟ¬q%U¦pœ$¤̣浆ñ&•q39¿ Çx_°’¦¦Ä%¨’D´­´“ ëø†£óT́¿3̀£½Ö³Geɦ{ô*¾Ê!È‚ï_o0JÏƯ™ó+#3Ô=˜ x-(ưựûçIêçHơIb‡¿ø1©Đú„u÷i_éX_"¡~đ3­è̃YüyṼỴδq©[ÚŬ¬[¹ Ô\I×8Ís ¬/mÉ¿%dLû#̣Aä#5¿̉Li2ÉTj·1¬&µ†g²G“BuùPKF€!e£®¢óц̀}T^‰Áf>;ÛL?´?giôôƒ¢bÊXŸd?@á>dª»1w Ôă‘zKˆoëåó'fŒbË‚.n|ñđ’é»X…®*‡•ë­µÖt̃caÊØ„D夯µkp–ù–,xX°_#N¸l§BÍp÷h‚1‘s7?®·²:5KjĐ{Úkơ™§ ̀q]~˜—7x'ëe넇Aâ—Äú¬ä‚o$¥Êôш`Ê0[†÷‘đÁh# %É’ƒU/NG±ñR×CUMp[Ĩ‹̉Ëtyp^Pal/N Úxc¨Ü%JP&ƒë5™«éỔ®¨œ¾rGuƒå†"&œuÈ^ÅlV}èưdغ‰fVd]4Td„ºéNz˜Ú±WVQ£æeúZ^,Ëdt[[Îû«†» ¾)ëH<¾KóŸí`ƒÓ̀¥ưÜ?n1LNÀuTë'±. ”L¶éh» …êbºưP謟ÖÛêLô$VeZXÙKöªVÊ:lá`)a¾cf,¶÷åo]¨)K‚÷3sÈC ¾“óûi¾׌| aơ¨5[¸É¹êè æî+Đa²¬=v›²k„ư <ăŒđËjh\Q{»ơIä×uw$*ÆÎÉ9urQ=aª₫éêIWÊ 8Ù¯ºêêÎÜNƠ'øt?ºCmœCưô~N½‘ØÄ)ø=wỠ `Ö8̀›ˆ|&êx~rxI@"HĂö›>÷e†‹?#Oﬧœâ$ó§¡=ßÉ©̣ đùª^Hkt½¦ f=ivlèBê˜MBPÜc_P̣˜ÿº&Œm™j†̀ç‰aO”­Sơá½ÎËà^"‡̃ÊèCÎơ­9N©ñöDÇMß‹eîJ+)“Vqí#6¿–̃üÀ{ù̉rơ"z¥«Ẹ̀ûơ${^-b¨r9ó &§~iR@ïÍn³¦8w6ƒŸî}¤ËÙđÚëé“”‡ï»G}mSפ8m›‰§Â¦¹² ̉K¡±é&< ¦v¾xm kWÚ C1ÊÛ "µiyc₫|̣æ̉ơᤀÚ÷!Diöϲè[ê£Ă3”5Y‡Ó²ÂÆÙ`¤0³AÁ´öáụ̀̀™ñ)bŸ YQ #o?ÙV÷AØ/¼¾›[™ß—ÏwÊz KŒíÖ"@bj’Ô ̀Vđ HÅDăæî¯K¤_*ñÜå‚j¿ö7^Îÿ|L':ñ±ï´›ƒ©pb:*¦¥́ö˜7›ƒt…S V¶4̣ư₫jß™á̉?l/&F„5Z!¤¾¥Ñùë̃¼-¼‰3mrÍ ni~>«,è¸@T3­¶ûxXŒ!0‚úÅ$#mÚ0– Ñ­ƒ"Í\0vö1‚7îI]đu—Œ9›4N³vŸß Y¸º°Æp°§lÜ¡D 8©ú‹«ôº„±)[Tÿ.đÇN!åûǂ%S±Q¬G₫å*B\ÊtƯ®Ù±HÇëc¬¹uÛsV6‰qM¬ŸÙ_ÊDĐ Û„¸êt³ '8/BFó tôÉ"\O¤ưÚGH\ú¹xƒ$ø"†“oầó̃¼Ođ¶¤wüHƯ1Ü³Đ¤êØ]¥đä3»+Gض|4ưq»ç·`ƒ÷á-ܸÔó˜hro6}9ôÉ)Ø*¢RåFÀXÇ~s̉Pß Ơ6qÜ‘a cET¨=¨)z4îơµ\=%×¶ «_p‰HêAɼ°Ùw¾ÀøæÄî‘]˜_ 蜾Ó™yv” v¤-[‹£(›!« (û’‹oDÖÔđ6œË'%ºaÆxñàf*Y¯Ô­lɶėG[.³nT n$ơ₫÷S`Z¬ñC…bÎB»$äâ‘/8Ó”O(]&>ư–/ô#ûxï c‰ù<0uŸæƒÓ/r”Ăhè …cÑÁI:̀†¢E›G¤dÂó¬Ër,¯Ø<û=C‚JÓU•N²£Çl?G°3 .ë2“ÆØ»(Ưl ª ¾ăÖß·vJư ªWwKÙ8^×hơ˜dÀƠèÄÑ‹e¨Ftvز0?Ñÿ°CH#½̉΢¯ÀeƯfsÙlF€ö‹\³œå]ÚåuzR׈„Zba¨>@;_C¼Z§r ù+:à§ÀGÆ’îÈƠ IȤ$hÆÊK ưnIØJr´vĂkM¦2£º¯ho1 L눹`:ƯhéyEëSH/gÙÈj?(¶dä÷íEúYÿÔYÁ¨„Ûÿ?ñù ‘Y±”ÂdÓ„¢xF”/·€;Q^r¸Ièëîj-è.GX†£J›¸ØˆÂmƠÇi˜”l/[Eÿ$-¤““cËÛWÛq'-ñHŸÁ"M¨j—iT–40¡G’Q\{ºÚRó ³×ÇI-U(̣u¤>ûñµp¢N9½Y’ï~ŸM—d-¥ÁăuDvŒV5lá°¤AëzYÉrÈ$²Æä'IÂëĂF'¢Y ¦Đíf´ö!'–Ü»,»G~—¥ñW8 Ê>@ÿ"ä•ϸΔƒÁmÉˆæ’ ]½3âCB2QÛ«Ä!Â~å:oUg/ze#́}¥É»—§)cj‹‰n5 ‘î7Âçz­¢6ˆFá}ÅT#9.gÄ%ßÁ“Đ[^Z\Đ–×Í:v’h¸TU;g¹ơßËƠ*x©ÀklS˜/‚)Íó’ÑĂêă„Vé²ù†áNǤ>¢]2œ¨ƯÓO­o£7Ç•’'{<§©°^æ2Ă;¹Ñ .z ƒí© `Ⱥ| ợ•B¬ñưvöL- àz¥ïÆñÈIÚ/\ߺèk–|`eMí¤ˆ7̉ª€+d_µL±]Y™ĂĂĐT#ÖĐï=ôCßæPœøçs¾”̣¹‰¨Ïá½–²ÁuG8b Z¸ Ôfv[ÖHËV÷K1xú!¸OöU=₫Ç×8l$à$Oàp.1’¦· Ènæ éøÂ Ç E+Ç›¼,äŸeaéx*U*9Ne<ÑÚl_:ƒÀ.wGƠ ÔŸ À‡Z¯añÔóz;&9ÆÿøË~V ñ|ˆGö–̃};̉v؃ ån·<§€³’`D-BB¬” :ZêS ̉[˵/±xÈ'ƯĂUƒ=gw#k'µÖF¬#:5®êÔ}üL•ź¢eúÉ’HÎ̀ç× =º#\ó>=ơrêE₫¹§q(æåQÍ|µÓxÍ5̀Kà%°A(©M¨²`Söc÷I ü> ™-øuBCm̉¸S›lr½1!I%ÿH+Vß§œœiJ.¿R®·.ÚÂŒ„ç» ’¡ÛiøÀ°zùd­aôn­†vMÔ ôßôFFôU%äia|K3¤§v1 »Xđ:Wàt3QÏ}Á ȯw«rÏÖUđ<á¾̓-yuÅ’₫`‚^$ ˜D+U„ôïÿđgnZ/ûOz–H &Å@v–›±ḷ‚₫„È ‘›̀“²x"C¸1­H) ââL‡‹¾ªÑ»Đe”»œ8{é"—¸Öư½Dó Ơ´½*ÿđù¼¨M5Bsu˜Íb̉q rF6ˆ“í-§ñCJóñSù̃N,ưĐKYȲ†EcDúN˜„0©–ÚÍuÇ–UXO4? hRg÷u·z’d;t+™'*ILJæ×AëïnI0©™SÖ·ßôÍÀܽK{¹S×i"2廬ä£(÷‹©̀Đ0‘;ø¾ă·©"ĐG¹@UÁ“̃P$Í~x T$ÚDRcH$Ÿ*ƒu` Í‚*Ov燛$\öçƒơß¶o-ˆRưøÁĐ ûo‘åû°uÀT­\ôPÙ¾¼ƒ?h•ÅÚ9átwäxŒỘŒƒñ-|x¿±7ôâIƯnK³§¡¯ÊÇƠ q7 =cïw9ë—o‚u.²₫‡b4‘ú\Ø”̃º°2E±å€–1]xÓçIȇF̉I>FÛ%©¶7F´œæÑº'¢×m/ƒRë¶C¬VªV̀°ÀÔç¤`ûÉï;¿,<£Ä‚¨y¹Ü‘è°ëBÛÄ‹×Ké$₫©Ùd#|f„O¬"Wf₫(Çu'Đ”@p¤¿è\·†•_Ê üí±:ë|‡yf)‡“%̉M²}¦Çß\Đç@Mö#׆æơy0M ÀZg‘"ŨpTy9"–Œ»Œ³€Ñơ'«?%,t¥‚(ß‘₫d›I)Mw¶™£l»uÔ‚¬…ÇÂNp¬¸™»¦ÿƒ9üÁ÷Ƴ å¼>vKÊy‰œ"îÉ6nổNăºirôÔêQ$–áIzV,$½Å&À±öb‚>̉¦¶Đˆ‡ÙZ}‘eỠÎäGSÆjeä‘=çÖ˜̃xư UÀ„ÀÆÔ•‹̉ÂkÑå% ve™% ̀ẸÑ»Z‚“_öBç&䂇y*r„#²Üˆ‹e¥Úmó½:O Ö@9ÄÄÍq=—"XTgk0“ĐúÅ,¦Ï÷¦Tûz\Á´£×%Ëúlir6) ÏÊ‚L% yn endstream endobj 614 0 obj << /Type /ObjStm /N 100 /First 908 /Length 3460 /Filter /FlateDecode >> stream xÚí[ms9₫î_¡»uÅèư­Ú*H.ÀBH–⃠øṕ¬í́Âưú{Z7Ov½ñÔƠ]Qek4u«ƠƯji¬‘L0k“̉⪙RWĂ4₫ÖXf=ẁzüg.*\ ÂăYT¸·‚I¡ưÈZI i” EåĐn¤hÛ&­@cÖ2éÍ:&½–Èx&ƒ¡’ÀdtT™@W2ê‘E©̉" D1e :k5•¦·Î2å Ô9¦:Ï´hЦ¥ x¬•FŸ½`Z›0²^‚X´a½bÚz4è5Ó.R ø$ú́-ÓQÙÄ# •xf¤¥’ÀL¢ÔGf¥A0JG6H°( ¯ñVĐ̀$Jƒa&‚JK/O%蜌èjÙZà.*I|DID¤Yªç•(ª‡âĈvĐo'©Ï¸qF':æ´ÆJÁØI¼é pÑY…;™s̉ e”âO kTF«̀ đÇađ¼• ơp„b̃*Ñ̀[E%†y§©Ä2ï-•8惋#b„z瘾Hς‘AÔI–Æ€ ă |B;é`0Œ­G2–E£©Ä!n8åY *Đ&$ÄA‘Ă;-Rxá4 N“¼'@­)Gr­!Ÿ>*ƒ\*⾃tI”9 ¹Ô’h¦¹¢!ÄJäÀ4ä 9ºêˆ»…`+̃0êÑ\0‰̣4QC²i ’yÈ Ư¿?âg_¯JÆ̀fóƠˆŸ^¿[¥ûĂÉ́óˆ?œ/̃— öF`Æ·#~R^¬ØLá ¾/¤ ¹…ƤSA ơ°û÷?eüÑülÎø>ûAÿÈ~úi„ßß……Ä(% ¨5¢ …qå+"E,ˆá ¤ô¦̉FL¿"e ÉA)\aEØL¦Ưfđ…#=WaÊh «ơ°˜̃.´̣…\@1oÆ”»N 2ºC'IØ,³jG c;dB‚ ¾‡˜&ÔEèçUAúÈ*Œ",¬ǵßLe¸#¤t…†„đ‚ F éb…dn6˜V†œ†Ó‚Ẳ ‹iDàs4˜&^É͘fGĂ©EëĐbêPH7bÆAJ¨=87 ¤‚ÚÓnȳ˜'°•-$Êau7sV́†L¸…é0V[9ä<¯Ụ·*HøL'? •5& µí`Â,¤³Ăb:Wx8k ¦7…ëQA;Ă´I«öà¯1 +@P²3œ>PđƒHP ©MU«ơà°!â‘4ŒU]«ô¬V…rXÎJ]xƯÎM«$*:7….¤im˜•²̉ £Û+LUA+ÖSÀAQ=6Lí3È"¶d8&QËa!½,´kGÓx˜j†Åt¢đ¾U{ÆrȆŴđmC«öŒ…©¶jXLiQÔ@ß»(Ú"¼æ[­‡ågܰF̀ḤÔ[µ>­Ôñ2ÆZvFSÚ‡ÑÜ ¤&¡-¤&¡uĂB’̀ÆV€4ɬ‹C¬‰HuĐÎLDC —†4a>´·­Èjˆl ­j*q•®YM"å~»&‰U­Ơ$±=>ß ¤đ.»ƒ)lÅTª€Èi&"ƒ̉è!åá¼B´D̉â¾'l°+ÏA;đ±uº”×đ ü !™´­ø °Ymuô¼,cÛYB65L±†„¶+dÇkGà¿! ‰5|ÇBÜ·@8~PHøXη~IJ/ö­Ư$¢>"´Sz‹…BÖÊ´Æ ú+ú͈nGˆ°V¡ăư`÷‰î…Ô|lƠ₫ÇÈ!!±.‘- â$Úû!½¬Il'Æ…0‰ï3Ï; qÅB©V½B¿ûhÓỤ́rŸ½! )Ø ăç¯Ŷ^6»NßnYí`>[%¼ĺUƠ°~đU–6¨d]Œ¼Jy¼̀ó‹Óô0~¼ÀøYùeÅ̃®³åxü±ñ=`”³ƠA<âÄ 1b9¿^\”Ë´ư••ï'ă‡ó/™[•¢ ¬?-M¦ăñM ºÎƠĂ—§Ư;êm̃åkLWÚºËWY]UuƠƠƠTW[]]¾Êê^Ö÷¹ư·wßoÀ–brÇê@¼—°á}ÆÍ́fû™´Îm1…‚QfƯ[o8ṔV«v—̀‘„ÛA²†LPDOZHoœˆ³™JQ²n ¤€¨ =$•ØKG¬¶A´7ñ~Đ%„—ØVé¬Íă%Ỵ̈9¿âK¾â¿ó¯?æ₫LĐªÓ)ø¾ê'÷ƠéăO‰Üs©6Ó‹0)è¥O´đ…Înè½ô>àÍÿƠøc₫„ÿ̀ù³Äc~.œñ—üÿ…¿?̃#ïÁÔÿÀ?à7Áï÷’˜̣Ø áù'₫éëƠ§rÆ'ü3øvÉg|6™•`àé¿*“ù{₫_€ŸẸ̈wÔ\N¾€³«O‹²ä«?æü\₫ƒá_ù¿ËÅ|Ư~vï½üùñÑ>ØứIŸxéF¼LøvëÛØ}ßeU ÷ªĂo-»üÎįS·¡èÑñƒ£³óLQáÔiE‘r;¢ÈÙm(JŸ+₫e_<9<{œ(› ÂÆLE´̣†ÈlẼ† óÓ½ĂçAĐIŸ̀á;µ ïBP3Å]́%gÓ Ú™ă/Öfùyçăå LX~Æ„·_|.WỌ́ĂªÎ/̉́¯uăÅụ̈rÜÑ ååûṇ̃/»O+A:‚ôĂmªâ_ëÊbv}ù®\,'g­̃ ưÔԔ˽h”Éo×óUù₫Ư4U¨ort×–ç¬|.'™ˆV -§ÔûetS™­´ÿ₫“ưăC¼'=’®I×n'‚q‹œ×‚Q‹Åa£ô³0́HƯÿ¹ß åÍVZ₫å³ưăç¯ÀÖÓĂ?u"¤̉wR!±á́mS®æ+ñôôn~h&Ă4±¯å¹‹ädtdn/[Ù£§'GÏÏ_ÎÎú8£HiN ¸è:Œ‘r1tÛ0Ÿ,÷1æ]tºÆ†›Ä׳™¦érBí6ü¸aûly1_”=¬±[ƒƒ×OÏÉ18=í™ÊŒFú´ÚÆ~‰¡Û¿2û½ÎMªm¸­ Đƒg{/‰¸×½£EÍIËaÛR‡Éñ÷Lª½ă₫[‘%LÆdq1-/æW_ß·•ưùÑ/ÇD^¿P›,ÓVßI¦ÿy}ÚѤµaÍÎ3Ùϲ±¤•!Ú̃ÀÖ–µ_ÿng<¯¦×˽1ư:f²Ç@~397ZJÛ¨ôÿ4â û endstream endobj 659 0 obj << /Length1 2127 /Length2 13081 /Length3 0 /Length 14352 /Filter /FlateDecode >> stream xÚ»TÚ¨»»”´¸»»»»Ü»ww·¢Å—;Å)N±ẫ—#÷ôÜûÿk½·X ̣́Ù3{f'@C¡¦É,nåd”q»3³³° $•µ´øllœ,ll(44Z wàßb «È ,đ/IW ¹;D&eî±Sv<́œvv^66ÿ \Ræ +€2 @Á tC¡‘tröqÙØºCÂüç!€Î’ÀÎÏÏËô§;@Üè ²4”ÍƯmˆ–æM'KĐƯç¿– ²uww`eợ̣b1wtcqrµ¡gxÜm@7 «'Đ đGÂsGà_™± Đ´lAnÉ5¬Ư½̀]ˆÀd »A<<ÀV@W$8@S^  ê ÿe¬ô—àïÚØYØÿYîoï?ÿt6·´trt6û€À6k *£ÄâîíÎ0[ưahîàæñ7÷49˜[@ ₫ܹ9@F\`IđïôÜ,]AÎîn,n ‡?RdưcH•¥ÁV’N@°»Êû“¹-!e÷aưëdíÁN^`ß¿Á¶²₫# +gVm0ÈÅ(/ơ· D„̣[ftp³±±ñq²€. ·¥-ëËkù8ÿT₫)†dàïë́ä °†$ôY!?P|Ừ=wW ¿ï¿ÿM(́́+¥;Àh£ü^"ZÿÅĂwy Ù ½Ç`ûăëŸGÆö²r;øü6ÿó|Y¥Ơe$euÿÊø„„“7À—™À̀ÁÉ àæâđđóüÿ{5sĐß›`ûí)¶vđÿµWH‘₫³_Ï¿ŸîïÑ ü÷Z*Nè~·¸7›%äûÿs£ÿẹ́ÿ×̣߬kñÿƯŒ‡ƒĂŸjº?ơÿµ¹#ÈÁçoHËz¸CÚ_Ù 2àÿ5Ơ₫5²Ê@+‡ăÿjåƯÍ!c ¶qø§Œ 77ĐJ äniûgcü%Ö₫cÄ@` “è;À̀ÎÆö?:È\YÚCî 7H?₫©BÆæ¿#Jƒ-¬₫˜/n€¹««¹ ¤8¸¹¾́A´zÿÙÁV°“;ÄÉÎ`íạ̈Ç̣pXÅÿưE<V‰ßÄ `•üMüöú‡xÙ¬2¿‰À*û›8¬r¿‰À*ÿ› ”~$‚̣oâ°ªü&H<ƠˆOí7A"hü&HÍßÄ`ƠúMü´$îo‚DĐÿ‡ø!:óßÙ‹Åo‚XZ₫CÜ¥“äÈ₫#áâúCâèøÛÿ³dµúB*üB°₫B2°ùB–³ưBrư !á₫…½9₫FvH\đ¿×é_‰ëü{Û[gÈƯvZ»ÿ–²ÿ-ưkrÿCNÎ2¯N¿³â‡ˆ\<œÜÿåÏÉÿ·ô¿ưÙÙ!Y¹₫ !Y¹ư®)ÄÉ èúŸºBÎÄÍÁÜí_Å`‡Äü½(ä>au·u₫«´́!¤ZÿBH¯ßÈñ÷ùÿkª,=\!ù»ÿyíAFî?üçSè ´Dù¶àd)f×öñ®AœÔ‹ywBx–fW7“Ù÷›k·ÇbưûÜ ×ñ´‘¬Ơmiºk±ẹgß-ˆ‘)ê]~O¦IÓ»](KSŸ'Kˆ7‘!¿bÖÛó{vñÓ ¶‡í€îU )tñàĂP+ƽóú$ëƯbjb"2Økœ±iZ_‰ƒtÂEßỆØ áÅ|6z¨%pñ¹„•É k³́"cÀE¹Å4o3@åÖ!ôÅ Ê æ:s‹Æ‰»íœS¥ưq| N­Ñ’ÿT›)UÿGc>¼RSïÍ~ăWFUñ~+¡µ<—“£ Q¾í†w© ăS«^íj} SSÊc]¹üO3è²rñ3–QÜ₫p'Ó!ÀLHU^–ñ·ă*1· XgÁ•Å Á̃û^ƧÍS€e¥rN ½6€Á±,¿&©˜‹‘؉º†\»%TÚ2U¡îÉV%éÿ+¢Km—vÉ,ÿäƯÍrU¦ñz†¦?«yFEW)AÍ!åđ ù Ÿ´ºH–`.ɇYÄüƠƯ›nC₫Q̉2ÊR{Ów³ÔPÓ³„ó™Ó6C—Hh#ñ̃•³:ʶÇsJÔœj0™+'x3ß|º0¸skñ˜z(§xßDíw2 œH—† Á5@ÿ=¬°́úY=nÁçJm&Ó·ƒ´^ÁÚ˜÷àzsụ1|ínÀ8(E@âúvW̃ˆ: Cx.©¸å(h2*´­8>“àÛ(̃Ưpîp/ÅÎQzS£z_‹&œ©̉„Ï̃W†n * A+<Ÿ~tO–NïZƯƠ ÂÉưËhEĂ™Ăº»«:”ĐƠŸèMZ¹̀¶ví™sp}ÉH MGc–C³Å̃¤÷S6¯í‰àسMJ ̉'*[hc99mbrîy9rÜÂơÅ;KÄæÊÁcD $¸ÔÊ`l†D{­™AËK O2L+L±ÔxÈXÂqc/đ‘ë7.°°cÙ)»Å v”ê¿5›Đ0™ó!—TçḄé_ÆØEûđ…Ö—Ø#á\ƯFe¸̀Ó¡I­è¬½ª¡x¬¿å+pÿ“°¬ƒ·±gi'v B íC/¶¿uÛ2Hư£sËÀĐú´¢£úœ+‰À.qTvÅh¼OGÊ£YÀípŸ,².+́‹ïbÄ yovµº£»Â§`¦|-ƒ]sYÏ-c̃Z{Œù\·¯F$b6U|¶]ȸÜ$•Ô¶ÏÖ‰˜Óe¼MKgư–‚ê¹<ÜsÍÀăă”Á¥Î ¶ôHÁƒWƯƯ3óô+(±®@„mÀ! Á‡o ÀΣ¹ÆS»hàâWĂÖ>̃Ÿ„7̀&vÉĐÅß Ïđ–‰QHl¢ăøßaEsÖ¡- †&”ªê'I¾F¶¤Akl_ÊZñy¯ )\ơ₫(ơ„{ÆĐà™••úµJ$Dgoˆ³̉1ëW=?aÈy°®syă¶ĂBB?x1’œÓ¦°’÷³ÀWơ`¢~±Vµ€æc±ÙF©3#R7ͪdÁoA”P…úÚIôú7Î Đ(>¢c/ &’#×8÷̣è¨ådơ ƯgÍHĐĂ0V•ríh­ks'`½¿k"ä .Ǻ¯­öTâ±½ ç;6́ *OË‹8$[)Q?¯7't]U˧™|ÅWơëơ`1ù>­‚½ïqI’ëeav<ÍßÉ-̉Tz·d¥ ÖđéœíäêR/±ü|„̀ù¦ÎpÂưrm÷5üˆÇ¹ ÍRù…Ù›k6­À"48y_ḍp;á"â˜1¯˜%ä‘î²̃åh¤®Ñ!̃â»á̀ç„É•cÜ¡ûe߇r¼*̀ë‚ÎHQ¹–Yôû| ªơÖ¥Åz`¦˜æ×™£èjÙ0Ư ĐË̉ˆ±-Fډģ·/I&7Ù—ZëW̉=Qëơ=R¤î›ûoøÁ£>Eᯇ>r¶Ư‘w¸b£à^¾âc2:/R‹yÓ>û½>ûTÉ%À…s«À[)²™-Tœ35Pƒ'Ù8¢¶7Üïïñö`À/ïÖfÚ•™ [€¤đÀcú²ˆøjÓpPêÀH ¤w½jæE2Ë–đ:zD̃Öx¦AÅØg›àDZ²ƠöôË‹–H‚ ¥Ç™20¦l•j^VẠ́ Y&ïæµ~¾Sœ?R¯xfùîắVâ(ư„géá;K « ¨ÎưËû&S¬œ'?\ĂÚïx7sệ̀–øÔnïÓ7á4Îâ«°RFÇY=\t åeßÈOjVaê0g2KÆØj}ñ–Á@I{åNư#¤´ẉà4OăT9Ÿd‘ƒs/'xƯ!®Á¤Ä¾^éA ¦U‰œnyRipí×ëá˜Û|MW»G¬´Ÿ¨Ï¾°¿|  ¿m:©éoÙåb†D@ øø&ÜvAUµS]ÉYTϲ­jmk+¡&\†ÊéF'íÁØĐ×uQIû>—8–’,®¿ưƯ•¼CU¹‘{ËơW E¤lÍøÖT7“Óí ÁIq¶ŒXºûu[¶̃k)ÊûY ăÂpègjZtœÍEÏn}ÿ`œÂF íGy"M߬̃e៰U3Ljh29öaëoPÊ÷ƒ‘°,”Ÿ†¯vÜ NT‰̃2sjßQc<₫#Tc»&Ïû]ízưγª7u•÷¦ÅÎ4pˆg OÆ&ö€!"‹^xΙ&O£—Đ„„ {́ˆú}p̃Ă5ÇØ»P1ơà$(B\Ïiÿ9î·œ›KÙ¬Ÿ¯+ß7×·˜bF_ôNÉZŸCÊW'¥p¥†0•Ơ½;.ç~¼£)Zî0̃‘Γ‹±¬y¿û¬ñªåâ¡@‰•üM€‰%·mû'₫v²»",ñ}d$©ùŒ¬ÿn8ÑÁ¦kSJÀ-=Z±uüù{ÖRR¡gO¡‹E5\¿bñá'Yû̉1TD5ưºÏÓ³¯U+»º%4r_Ñ×U9Ơê5 k¾́ } É4RÍëñ–-Jñ ™Æˆ'4ØF0É·̃óÚ¾fˆôtj'`)œ&Øđ–ăw₫~æî„ƯÈOqB°ßÙ=“ÅÖ}±¥gjk†G1ÑѲñûY³¥yE1HÍZçy´Èæà3G¢X‹ J8’‹e€»±1ṃ9—ÜôơØzßÈ=UbZ€¡¹)áĂÈ3ơ½>ÑŸLٸܟ†~̃Î9d°y¥ÿBáTtAÑú~¿:‡S76hT =ûñíY|²Ă«êHc‹28çg›¼Ur^Y$Rún÷ï †›:ÑÓ*E=K/_TMÊ#3÷cçĐÉ`<Íbj<ͦ#1Q†¢ô mÛ+Ÿ3D\ {Bù¤́W*’ǛԖ{Kw4hјcx×ÔäåLZEÊ1“’ªkO:EÀá´»/0¼[%Ái¦ a¾̃¹èiËÔÇT ö¯‘Ơ¹¨>èƒLüÔó‹”&£,{i‰§äÀÉô«HÈ“•_ï‡ưlDƒDkè}₫?1räï:•'¯¿¤éΟ3`22Ô₫Ø`²Z¯ö±.ªtôœË1vG~„##5[ÆvjY"6NÑ•«Åi8ÙÔ‡]ó'|£¦bÖ©é!aM@Í”w6Ÿ6«t3·sÙ&üà…éØ̀æHªƒ„5·‹œîœ…¥¥ v'.áYT¦Ô Ư~ụ́qW*̃í«£¿(Ù§ülÓ́„=G°œÙ¶x¸ø"¶ăLv'1ÊÂj]ỵYq:ÔÁ©5xL{i%+vP2?§Ă¼Ä½5vuÿÓ^7Ô…çÊêâÆ²Ë+ij5Óoá!V÷í7”˜ZP’†€—^¿ÊnŒr¯™`v?^œ« Ù_¬CÈKuëâ(­ú¶xÔåÍ»og̣"0†¤Y¶„z4ó@¹÷ư¸óYô¸óŒ­ù¨c4SCpúf‚È 1ơÜ‘NJ]*ó¯“olƠlw¤Î—?h$e1÷„Ơwh^î½ ÛïE¾(ß/Ơä{„#¡¨Î`ú:I€Vă9©BøªÉö#Àl„RÑ|/y€{|€*ØÊ«ñP—Fß!º'€€P€µ%D¤̃ R8'Óï«BUè;sâÿU”×çÎ7Ó–X³-¼mÓ̀Ư œ˜à@]’VÑ ÁĂáëœB[¶Ï" hÚ5JzAFÏÆf¢gƒÖóë°œ©|M9}ó—5% ¢-†øF̉6xơ›½÷PÙ:LSÉ”Ơ4¦‰Ud‰Ja¥”\«eߪ<ƒ» ¾\SÀ£́Î>nè‹Ư)ÅDăùynt&1#¾›PaĐ'Hetß!²(Ño¿i‰!K&uôÙ`'¾ŒT́Ăk×Y¸]€£!ñŒ´«Ưlûex˜¹̃@nö ¼Ck 0ænö9Èës7Á4¬¨A½cˆ¤v`DËĂúS̉BB CPŸ%œ ‰pEơíGV¨¯̉ÁT?6Ă]¨5çI‘IµúÏ h¬,.ẩă¨¯÷x̉0Ö• «KOVO‘½Y—óÀ!ªV>ËÎlSo!I'_‘ªwíó¹ ©HñdÚ¼WI«ôOàKïöHñ/1GBÚÑo×ûaùBQ”F~áÎß‹½́ÑMC©6Øéå Ï'±C¤Đ€«}¿[ă˜]Ê™{ϧ=dr̉[â\50.—„¬ŒNÎ|äÚØ\Nç´ÖÜi{Öè.ZíFĐyÛ5à-×ȯă;¥ñ?rZ i…Ă6ĂœÅÄu“`vT ƠzêMí•·^‰̃`¥Ï̉¿æÍ™²s‡¢¾ç4?S₫x̀ĂƯ_ü¡¿¨u¢*¢¤+¬£™›î+™Ï¢ëuđy»H,±æÊÜw*ƠU< ñŒÄiH ç§®ùyP¶đÀ¥¥É|À|&WØûJ0–Ö–V¦©bb™àÖ¼¥/øyHnO{Ë̀¿5Ûœc€Å¼[‰à¥&¨XSÚ]ư0-?•¦{Åüâ¾­̃ŸgîƒÙÈjAb‘Úhđ9 ]PĐ” –©?ö½Q×Y¥Ư`Ú++m¤ù耦®ÂJw»“ÙJˆ„B¬́Xj×"*#ĐA¿o‡¦}b¹ca…Ów¤·0ä×O”‘‘+)/9ÂöÄU-ÜÍ,y$­ÚjxĐ4w˜?²ÉÁËâæoywYxGøß_éw ´ósÖk¡̀Y³†éÊ}ùiz4zç4Lư1¯Q4̉”Ëû:—ç$;³&ˆĐC_Œ®æ¬R¾Ư¤duøƯimI*uưAÖœ6đ×eƒø¥t÷Mo Û;O ¦¤J 5Ỵ̈L®ºNå«yåưÂÉæ³Î1Z”ă¼iA4€½÷BÇô^xP ưèv"ƯkQd̃øiÖŒc(9̉¸•_xĐE4´OlẮˆaâe{߸/ÍŒq²[…f VJx̃¿[âi”WZ—Á›Ã_DÈÚÄÖ‹r%~Ư@`åjûœÙ® @ơÁé‡Ù{c›ïœ‚Đ`„Æ \•ǴÆ*¥R¦ÂơÚ rUƯ­¯&áj†Ëtđú©å Ï”5Mp´ÈƯ«ĂëWE’ˆï|ÉƯzk9f(#_ª|̃dj̃¾y8ă&ÈÜñøv?â~90'rÜeơ0TOwºVåR¸ü³!Óf„‹¿Ơú–%'>g’‡̀böɶ»ô¬ÂÙëè™!N¤çiçÊøÉn~̣¸Êƒàû0^¶>¼k…óC± ̀g:»×ë£2Óº̃ê½§ÏöaŸËÜ=^7S*–Ç ¿ï©D®†5l̀˜³Í¦ä3ö,é^',.EÑôiE½Ñ„Ÿ¿‘:(+b¾3ˆ=KIÛ}4ÁÎe¹7\¶øñæ*™™]ĐÈ́ăÁ¨Ù]‚o†zjƒ‘æÑ¹¡ëȲjê5°ÙÚf½Â ¹Ü§ôV¹âEåX„BY¬ÜlUd4fú¨Ḯ{̣,pe­‡qRïRùf̉´JA!Çh‘ÎFÄt£ĂáỔÎtLçƠ™]Îv3îèÈpŸ¢ÀX$…;Ù (,(TÖÄ0²§2²‡-v{¶-½RèÊVŒ!»ÛréÅÀî–ö¢ 5»öôsro­VˆF‹ÈHœ7‘Ưïew‘Ư¬™ˆ4I©g”GOç&éV-Zܨˆ®̣ßbÜ‹ăVǦÿœUäs®»Œq†*8đûéÚ„*^wŸ)«ô‰¸̀÷…Ưáë¾æs<ù!c™Î_) T¸Ù| ̃h-æùñ f́z&&F?Ü·Ơ_ÖßP~ø)[ñ&'´2’ª/Ä?‹,ɤÂ+£tZ—…¬ù˜S`mASĐÑp̀7u¢Ë¼kÿØOS¸(Úc-₫IF@öÊ0‰(ñîRÖKVß₫úIöE~J„AEuÀM¨¥(» —ê]TÉ™«³L›é>F¢jávÈ̃°'Øà‡€¢Í‚¦_i;Ø€ûÛ§uUØK%:ZĨ)gÂ:ÁôÍ¡â½x¨̣;´Û [^eºŸ5)7ErWÙï¬~|à¿ê àÁ[¥¢(„35ÚaX>¦]´áñḷ5zEÓ‡(n ˜Dコă{¹½ˆBËߺRk̃྽ß|L»=¿{Ø.é]’›ńN|nƯIKï°‘ØqiÊ’wܲ(7̃-1Uoj/¨/ÏFrV*nȺÔ4á¥é®l²'á<§›đ|›oŸœ’¦èù\—¿­\>„ê5H¿ÖÎ₫nÏè§/ÆvĂYZèám÷­‰ằPêđlÓÀ¬ÑNsÔ2×ä(áÜWS̉Á×—E¼“S9˜…ŸÖ×9B­†U°«Ñ³àhEîÛ^s·ZOÚ>U¶&¯‡¶Xđ¤̀ &¡åöY¬Ëçß/ú*ö3‹bɬ”D¥öu’¦öEé.Qá0`ÏdÅà)sa_Ê¡(/̀ÀĂ–bœXïx<Ø4¯ưt»Á[Ç,hCưp8:å¾…øÆnăzœé!Ôú{ÛO¤cE¾—5øâÖ 8• 賸Ơ¹Ë°_Îây ï6J0¯ çiäƒ+ÓØ î£y½‘*·µÆùLĐ+s‘½lŸ̀·Đ 1lWŸé¹"Mi1ó˜)9C¤HÓQQÀVNC]76œoÆ‹7 ¾V]ñÉ5ÿÈLîø&ó¶+,R¢—„Ÿ₫¼@c“¬qå"AiGk¶̣9À°ÑÅ:,̉…?¨°vç&ྭ‘Œ6‰ø§÷X(°‰SÔöt8’̣dnÑEŒ¿ó₫y.æ̉¼#Ưº—~'•̀V! Çá1®„ưíËñ›DëĐÏ»ßYvơÄƠûÜÅ;‚EDNk“^9’b$S`E©›Ü*Ôén¶,ƯR˜LRÖÊ·Ö/åÉÚ™äƠÈ78Œ¸fœaơR›)ăèmÁºå”(œMà¤Jt}çÛø çà$Y†ơkăng†̣’[ÁṛÜK`)ú棗’Ôñ1Kxæ4¯ *#§/y ­c̉Tdˤ̣Ú’±™̃$s®óÆëYÚJD/èÇA+aiPŒ ̣ …훸¼ØÑ¤́³Äu‡¼#‡ă“WÛ!M=í´8›|I,Å…ëö7L ŒƯŸ”u2ư¹ºÎ6YÖṛÍtÀÄ’₫f]®ª ́ÜƠî|y}¶́W(kqtEñà•3̃?aEóª,çÅøơléÅÊ››WÉ:¶œ¦ùô_pXå†:g3v“:¯ÏµQ^®&¦4>qP "`X¼ÂlÖ¯¼S_@Ñ„AWü9ˆ¦Û#T¿Aö¨—˜Hë÷~yóù/¡ă´±ÀQ†öùñ@–§ă'Tfˆnq¯Ơó¬}úÔy2üÜë9ToJ×ÜẲµü½­ ïzúŒ+q`₫=B½₫¾]köÈ́̃ƒá g¶ ̉t™J¶PăÁ6¡«;-ư ‹NNLí·l~iA÷oúî‰æ\>^~PƯƯœdÖmWRÔ’“°’ ‘ƠxE`pøǽ2+Yúù9c,¬Û3lÆBơĂ;e˜Wö₫.„àP®xÆNÄA94ô(Q5µở,!zßtwÆ·½̃íVÑüB±{OJy%(ä?Tº%€’¥ˆ2æ×` ¿êx„°P“lx\ˈ>ñ°b(b74Ă0}ֱ׳6vw <àXúÛP¥FÏêm™Øøoí®Í°ÎxÑ«ö‘D iêƯư…îf¢œ—qµ}Fȵ±hÊôu;#á{8Ú%)ä—¾ÁµøKK_Kj̀â ^¥é')Éboˆ&MD(ø§–n>'„Ä–û̉èâ{Ơ»˜­}½ñL¦1Ǥ¾K±çµè-¥–œ₫R ûÈ₫>̀ˆñ(ç×»)³ @"ƒF;â\ß. ªƯ£}¤_́—o½ûăF¡§ö-‚wƱâCOl¬>JL+}ÆT“DƠ?W a»+&üDy´•,÷dHe¼5N2§éSCñx¥„Dz‚ £¬ă»öw™t©ƠŸµ—ơ”NsƯưƯE4ß$½”íĐg}´ÖUWÄsº‹qK`|•;Kˆ£r“:£/ê‘Yè¸/¦A±ƒ₫8„®ß!èÈy’ÄÜa;º°!Ü·ặ3”ªd›đ-A’¼‰b‰$àäṬʉG>ø ³xuûŸ â«“û&c(X4“k‚pƠꔯ J‰¬”IQ8²ÈĂ˜ ˆîÅœí-AÛ³¡ào®ÓÅñ~Q‹Ó"40¡k̀'+đC#]7ñÙJ¨8AY9Fqk%·ï'j6~ ô´ï¬‹§6¢MFiç5>‚Ë›ÙǪ†êΧT¾nyŸ¶6|ÖïLCíd |Ο̣m¯é÷*•Æk6»¤=<²Œ<–/*jGŸ¬Ñ8ôÆÇ^9ü>)V¤nZz“¶…<:¢^!VêyäÇ;½E¡™ñơj;‡2Êl¶¶wW%äg´üĐ ¹s[>L®n²“5³à#Ù€»„B/`ëÔ ;^ÀS=ñ&+'ËC̣Á—ñe=ˆ öC‰÷À¯™ËÍN̉~‡"aÈF’½‚sx{i­œ×.·W<™cº`„×PS¦û7̉{‚WóXŸöÛ^îVK&f}¥Ï|î:ô4— £!S92R¯Ö8e:ÂnĐPÁ+áª{¤ÙŒçˆl4½‡–ë]yßLA2@üĐDëŸ)ä_ye‡qöÆă[Ųù§ơ©W÷®ÂƒÂ¢»h³0ü®€U¹.ñ Ë47]sÛ€QwüüRø!#¯br²A=晦øỢÎy l­=-±-ÅAÆ̉jZtJÆÈ1É{‚N¡fDx’÷QøåSßW6ư»á¨¦¾µÚ•©‹²o™­¹"Ï-¶ –4<ø̀hD²l8UYÁWt§uGsM±}ÙƯ¹Ë’±øqq‚l±ªÓxQ…ûÈ´g!®R_$ÄW%QƯwøƯ÷×E½Û×),1V"æ{¦ï ̣FøØhÖ S>´·ƯđƯVó£Llïon…æ’öp4ß&ù:3»H"¾‰v– ¦&̀̃a¼́hâlÁĂ›¯ùº+}5̣¡ ÑÁà#P$÷Éâ-é~óhu瘘Ơ[¨̣ß§Cæ·¹{v¡QiŸ́puÜÖBQ™Ùouq‡J>¸¼BÿAl²…LDôÑDA¬c ưÎ`ir•o= á4."Ug+R̀Ô₫ơµ8/̣ÏŸ#³ïzX+Jèë´œ9̀c ïbÎGƤÙømÛ5vÙˆ’s ïƒn¾1mñ0øˆ:¦àâ–$wäPªà!¨Êvrx‚˜Ơí—êđK™đ'ªúRTưŒ4:‚åWEáÂ…od (æ¦hz¥´Ä)vÑPøn%÷̉Ít»ø›k£OÿTÁÅ–À—̃{5uŒäøæI¡Ư· Ăơ´d©ñˆr‰¹£ÂA5¯f#ÑăÊe‰r¾8\>r9¢7JăµQăưƒ{ Áñ£ ;î^Ÿ[JÎ`aåR¬ÙOƯ.{¨{E?dÔH¹m›ê"’¥Đ¸:̃†Åñ­zåăS=S)ÅÔăèàÓ{¢}‰đB ‚5̉Å#f~û‘́.~Oæ¡j k”«K8»d8ØĐA{ëÅÎÄo?đÆ›aÙâC¥Cđé„l\ö„NBÿZE‹9t /Bä"±ạîfŒ EïÑÏí"ÏđÆ\… âCmù™©Qtm‚üm‹ăÑm;ëè˜(Eù`>ëI"]¤ˆ.hôKÚ¥’ü/Øđ—w[ˆ/»¹˜·U´ÀL5ƒÖ™lË»–́ Ûuq¥W7¯zUÆƯĂ–é.pŸ.²‰w 4dñCÜOWp¦AùUôæmø‚z)ĨF̀pj¡₫„́³NH§cƯ|Nă@ÓäP¢¥%û·5Z(Ơ.–v JO|ÁÀâÔ‰Îđư;]ƠË "VFZ‹¶AEú¸§¸Øåxé§*ô öáää.o¬ œùu ,6_i{‘;Táñ<µC™Çª;ç&3[H€’;—z|ø"́ùqÄ•TÛœÑñç&fï^— MÎÊ¿̉u À́M-„ESP=>p=¹•¸ e†±âëŸ4jÔÆ—×a(,ÄCnÇ̉~7m²‰UhAØ>úØÔkă\—ñtƠ$Ôơʇƒ8FWëîÙ,¸Ơºét£HƠj ¸èĐFÜÀ6ÈØ3a>vÄcfË€‚'>$>¶©n+”«Å^&ë.äơ B³Ë#ỒÎè{6-WÂÅ̉ê "X碆9°-k £Í¹Ư^\kX®_!b\Ÿ…2àï7tÂo¯4̣±·0Îv_Ù³æô¹‡ëGơœß±• G‹¶%åáó™NG©u¹í"²ïi¶•) M¶ưZåÿœ¼·‹mj¯wà/zª¥;ûAk(,?†Ưs„™/OG̀”fÄÏ{ơÉè-Ê´MAÔ.ËA÷­Û¨_ÀÎDÑ©ª6/̣áD€ÎY.]’mZh«];ëîe©ØÍá‘«smĂîY¬3¯'óưĂÀ£ÄHdÀmǪlOª&½ŸP&éô†Û€[79ñ¢‹àQ³ÿĂêÀ"«ÿË|Î:ơ9ÁÑ´½2¸Á}e·̀p036l¼u˜ÙeçHomhƯ¥7(¼uÈ Söḿ¸bÛ7h€P2Úöb₫ÚÄ¢êÓn²¯Sƒ)ä)Î÷ä•鬲vKÉe'na]Ơ¬"1ư.œéî–Èơ$‡¤Aó¥Ü¢Ơ9óĂ!Û°YX¦AÔ‘‰Ø ¦Q”]±4Ñ ¥,ªÓo|Œ»̉[³V¯³SE³³Skp̣¹ –ܽÓF åÓ ™?(}Ô)êéú Jj2H Ư'«`Æ7áDi™$ß¹¦ÓúQ„m‹*@ÇđZ‡Gw[ùåËêyÇ ]Â>ÿYB÷©¿d)A4S,·9~ aê©đ/c…î·œÔ(Ưéö„€4Œoí́€GW6S=ÿ–n¡%Rœ‘í6́Ù«dÖ#ôc»7EDÏTÔL®è“Ù½}|xF¸:W7Ùg0:{ưs3¿D0p×Dy¿ \1ÜrËZÍßN/ºˆùH\9~̃a÷̀üÀgM*iѽrƒ‰x`/Eذ²7â'µç×TZ|ˆæ\ ]}cđ÷Ÿ½¯*јÍưNú¨‹æ}ª̀q)EæhfA`˜¿ÙùÅ[‹â1˜·v§To)öDpÚÖsú‡>M5â€ẹ̈MJ”‡u2ùĐÁ V{­¦CÊ׳Y„á֘ȭ+kØo6Y•m×+@‡EÑgù×½Ï+´ƠÀÑm tn•Í‘É ăø‰ÓÉƠ|w_Æ&F¹Uߣ̣á~ÊÍđ.ùµ ¿Ö÷ä/¢$̀åKLÎFmÁC¬b‚ Ó–e£ë1n§ÅWD7ƒ ØÁ ë›üáûw0FÅWïŒøU¥¨)±X" ữHXxJ@Ê£y3&í.S©xK€X×̣ÔKÓ†mßK'é‡^ƒÆ×´`R76/ÿÉ…]Å4ï7 C̉¯ƒ¨\¹˺c^¹BMXÉ2éû` :µ†£&-µ°fb}’O₫1Â9˜á²R“Ûß(omÔb-ưNØơUW`öp‘2mE¾1£ø­̃«¥7ôºk₫Ú³cæÆEDRµ{,(̀=ĐrËf»VKVLLÙ8[YĂn ’]ë¾ü‡¬±{,+ ÊÙª4¼SàǬ́Zf–ƯdîR5O8+ßđœ’É’~9“bI¾œM~ŒíF*œk̉'˜Â§wåk±˜!óßÅ`Nhî¬ÊợĂ,†1°=Ǿ´ ÜL©¨à»Öz(ÏR+¾ ’øƯG•é‰ z‘Ư‚~.Ôuà¬%ª0¦³àtêxn*¬/Ûéñg·àÁ÷±DŒ.5Ådz‚¶á+†Æ"º£Rä6±Mûd,?>Ü^̣å@K¬ÇUV­ó½†zªjŒ÷aRñ|xÎwüjâ˯b{ˆcXä„U>Đi˜‡\¢5Ôeü °C Ư¿êĆŒG–ÅĂ;ùÈ­B‚>®ÔF%dT‘‡ét©JèdíM¸¤r¸KY·´Û=khRư­?ẈŒdº¼ÛpäMËi 7$Jh§ă¤ÂǴNáụ̈ <¤c0e¨?KÁô^́ïµ~'‘«b†ÀÁ₫&)M©s„×Iƒh¥Æ$ứűµRƒùX[Xư$…T_†±&Hđm¹đó#‰Zzú懯Ễơ¹#,ù;] }{ºá*ȶ½¬V+l@} _( ÑĐjëcüG̉£º/FôẺ: ÎΤbÔâ~E¯ í a×Êî\_µlĂïm/¦ĐúçkToj¢ñ%¦jÜ5Ô8.·}¯Z̀N¹M4'00ÈÁTR3g»hê·Î«•đ“Cöc´¾ ưĐæÀDFܦÏzRư)ÚÚxwJÀ_U^Ztâ%ag£Ç»nû&¿ĂjqÉÑk†ưíÛz5÷²ün›gƠÛ*/ÅnU‡&Œ3̉²$É)p×JÉÜơ;Fåå Ôͨ™fơ5#]Åê–g¦ëµ«ŒDđ`ođ®×g¹AA›&O‚€´)´(;Oa0Q;uKY%œ{½đçÛ³fïª̃BƠÁ¼»r+NS ‰fÇUGT%3hơYdKúŸ[x|óJTë· ¿ŒøÓh<.|}†Yå^*e.M!b“É4¨â$µN8øPƒÚ؆1T³µœđø}÷¤`4ÚlŸ/%^hø”#Szt¥´ƯîáÙ‡́ÜVùÂSHl“‰cïµü4Ë=dº>đ÷Å÷ ¶Q9} ¸~̉Đ8„g˧*Á!tåKZ¢Sñk˜ïĐV̉ Cv±I¨Îë¾èˆ}}gíA7;÷Œ̃Öù¿—ºå*½f₫Û£qƪk÷6¥o²̀׿+nD̀ E,æ¿§Đ¶î)%Rí°d gÏî5× cÇẒúĂb¶ÍÄyØ7Ù•‚Jy¨æ[ºÀw÷ó¯[ .µNߦC_× +·/»½Ăö́ÇIü,?®mû-¢Z»Î€5oj„ïuUƒ…‚Ví’ø,ÙcÜÛ2½»ºÆ.KŒơª½É•̣æ}ë˨M»¬azÑÓ«›[jùmËĉ‹\îÉWŒzS¸¬¡•©‘°óÎVÜ8³+6ï ơ¶ï |N->NµŒ®IÀTÁÅ£Á/!á|zî¡”0rô?¢ ¥×øzœ;øNÀ7®ùgÈ›q¾’81ßpƠĐOüƠ]å³ĐÛr~I «àÿ¹¾~ endstream endobj 661 0 obj << /Type /ObjStm /N 100 /First 882 /Length 2360 /Filter /FlateDecode >> stream xÚ­XÛră6|×Wàq·RSîU©Tù_2_åORyPlÅV•o+ÉÙäï·AR„Ăœ±×3"->Æi²)kL+Ë”•̀1#4óYí™÷̀9ͬ$„`IA§’Ii=#|*k “Úè‘VI‹+¥f̉iň˜ô60##!Pe,J$¾4’ic©x€F¤ăAŒ ,®'käÈZbä$8YüÅ Å4Z“Ç™– @JKĂ”(Y%t`Z¦¤=¥₫¬Q©}4(*å̀HÇTd­‚f`ïƒÄ¯lÀ…'ÎƠ7ÿđgä™”rđ¸ÆÀº”C?©h¤¬K1Đđ種nÀŒgZk4ÅÚµ!4º6X·¼ḿ®¡‘ƒ`Ç´§HÈA¨ˆă RP› 1Áƒœ!‹¡ˆ!—K̀(•À.DÙ”´̀˜¸d¬Ö4M±)ÆF5Pi¦X›iBPƒ¦Đȱ) @lJ!îPÜWeIa‹°6K’ ”J‹s¤íˆ ”5Pƒ ¶€øÚZT„²Ú„²Ä'6Ä͇P6øf˜C('5.†P¤„rp1„rØ0æ´cå˜3XA(×4…F®iJq²m3ƒ̀5M!”óqô ”BŒBy‰±"Pñ̉áåÉ ^.^ÁÆÇáÆ‡! ”7>€P˜PŒ| àLb%̃;úñÇÿó8e|çá~¹=]\Îgˇù¨9?œÜᛟOv¶v?ÿ°ơi<øûíäzÁt{ÁææĂß́·–} ÀcS£H¿øÆârz¿Œ›2â[“ǽé́ú¦;=âw°̀ß_Nng—÷×·S&Fül9½û ÉFü¢«;q3™ŸM—́_|ƒọ-₫3ßá»|ïó₫‰̣#~̀Oùós₫…å₫¿ä—·÷øÿîn¯ø”ÿɯù Ÿñ[~Çïùä“ùô₫vúç²=Çüq:Ÿ=\ñÿ<=,§ÍwÍQûƯœ/øbz7k¡·“Å _̣åÍ|:åOü/₫_₫Ï¿[evfX‘Å´ v:úé§Bh¬ôéesÿˆ%nNÓø ă¿îîŸ@îM)FŶ`–mƒÈwfóÅ2êwŒøÁ¤;‘¬/³«åÍè®?œßƒ̣Ơ”É×Óù|¶w²ó1̉¹TáăK>q“ë|0ûÿ?Ÿ­ó_ö·ÁçÓ~M-ơ‰'½<₫ơƯw7Çm÷0ÀwwĂhŸ́Œ÷î¡̉\sz}ó‹³­ƒ£M4?­ên¿1zmÔ;̀Áö₫öñA܉Ó¯˜Jz6矶â=̣́ ¦y6•qzÖøĐ:̣ø~<=<ºhøŒÇUFÏ&Uª—áé[0R¯g´³óơăEôíÙY•ϳáƠb^ß0ómœŒw¶Î#¯U:vX³¶_ođ̉/»_vÏ›Gjµ»ÿÆæ¬·ï°9Å#¾ cŸM¯ /ºIăÉơtÇúĂS #œÏ›¸`»¡ü8»Z°ßmzûÑH‚<Óµă‹4Ûœÿ₫xỮ‘0TûÙ>:bî>]ûÙ÷m=L‡m:,Ûơ°Ưß­í>ĂÛ{¸N ×aù®‡ïÖá[ét ·÷-¶²û4Ưg«¡‘m/C̣[=è¥V´<­ü¦x©éd·Öö¦Ù¼ÂµZtk¡ĂT̀£§åí́>Â6“Íâ‹dC(vóbלµ=M_;["ÚéîÊ7â»U{د«{¢ϧ5¯…ëh«Û56Ở TÇ ̃œNÿN” ,›°t†¥%Ơ®Wéz™]ßwkzÓd«N|­]SguÖªóA–MDßDøœ”Èä¶BQ¸TmêƠ­ "Ôªuª¦¬º_RÓ;¾`¯/°£̉-°ƒ^-Ê&rƠD…5éa»&î9E¼©§j;X­³å–IXªƠT¿À„RµËæLÔºt=ÍN:‘I§–¾~åóáï›´-Û»}YmSµ¬¦ơÅ{_ĂR Ka¹aUyơ¯œIJVŢʹ„e±ÖƯ°bY`é„EƒX"Ă²5¬4ô6 aY—a© –M°¶ƠU׆̃¦¡·jhle¶s¹ă{ÍØ®Fd5¶¾l™œbs§¨¼¥©ICoÜ`µY'le +YÀèA¬̀u^ÉFaéLHS³€IĐ~+³€©Y@' h3ˆ•Y@×, “4 beĐ5 èd†°Tf]³€JPv+3„®B%C(5ˆ•=Tí™ ̉¤«ÁIï~BYaé ¥¹§Á¹§lîUmî)Í= Î=esOµ¹§4÷ôÂÜwƠµI§4é̉Ü~([Ư~V4ÛÛ•y¢̉EO™!sGPdmÖḍ€¤Áề²æ™< –Ȯ endstream endobj 678 0 obj << /Producer (pdfTeX-1.40.29) /Creator (TeX) /CreationDate (D:20260525160945Z) /ModDate (D:20260525160945Z) /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.141592653-2.6-1.40.29 (TeX Live 2026) kpathsea version 6.4.2) >> endobj 664 0 obj << /Type /ObjStm /N 20 /First 165 /Length 840 /Filter /FlateDecode >> stream xÚ¥VKSÛ0¾ó+t$‡Lô°${&“J†¶Ó ½´"RÍ8vÆvüûîJr^6ÚK´+é{́J±ÍbE(a± Ă!Óp‘ÀAŒŒ˜c*&̀+%‰Œ(Œ(‰£&Z‰ë1`”JH‚”ø˜‰¥Q…c §"† "œ!™–„óQ Ô©†mđød8<ÜÚ:3€Ơ`÷ædp¡ôáuZ¼væ}^µ«³ÑhmѼ}i1S]h¶Aëd­”ØƠ†6́r…½¶¬ê±Á$­¶Bƒób<}~ ©ă­¤Ú7܈xIuÖr‹o¢Ù®a­»¸ø–‹vst—•lĐJw·.4‹î5«1曌5ÍÈeº0ùuÚg=â/9íóa2̣ ̀',„æ© ĂMMâ~vaë†×îƠ˜ÀưqG(‰I£­z$̣· I#C’ĐCAäŵ¶`‚û-˜MD)Î#́JÚ¬pLBG8đJÆZrÀk-9á₫à•CI’7´P’b¡X%)º <̀:ø¡’ÂRK è“ äI°¬ñ¬_Œqhc‚q0ó)­́ĂoÑ»* ®Ö¦\[ó<-}Đy Ṇ̃u^,_l>‡²Bß/VùCm‹a7æÑÀ%~0 –¿ØùŸ~fÖ&Ă as¤ßđ5Ÿ™g¼ªÉ«:Í2Đ@@ÏpÈtæT“Pü¤xêf Ü~ Ó*±{&}ü9«ë̉NWµ©đº'oùÙ`ÆvạÊ[d4: sa3KS¦uƒeGa?—ÅjéöË£öÓ´LË'»Ó̀㻫LÙ›G›wX·/K×Ơúk} ³ÿ&úѳ¼«mfkëí£ªư™–6f₫ôCwoMUïîF6ùÁâw¬´ù6u}³3àRƯ}oøQ‡1£?9¥içÓû½BPñ/÷̣ùn1₫Ú>|º̀¾ĂJ従v_°pÈà<…‡H1Ç·ê.‚Rám}µªáÑâf׬»)jû517ß‹PÀ kv»ÙI:5YE†C2¸\-Àuñ58́÷ÈàŒÉh$pâb"C‚ äĐå_P²• endstream endobj 679 0 obj << /Type /XRef /Index [0 680] /Size 680 /W [1 3 1] /Root 677 0 R /Info 678 0 R /ID [<779FF4A7EFDBCD30F942367C57D123B1> <779FF4A7EFDBCD30F942367C57D123B1>] /Length 1565 /Filter /FlateDecode >> stream xÚ%–ËoUU‡÷º·ïRZ(…>¡”¾€ú ”(¯R^-¥@)m)-ÉvfL0ÓÄGL”\s³1:pÇÄÇLă5Fÿ&:1щ# ̃ïçäËúísïýưíuN¡å©…P,ä̃-¡|.äB¨6P•ï•b®ºßQÜÊÑ<ÈY¨îÓX-±T€jPf¡ö±ÎWÅO„-ÄÊ\°4Bh}ZBxʘN £u@ר `ØÁĐv‚] ´€VĐÚAØ ö€N°t} d ô‚>ĐÀ~pƒ`‡Á0£` ăà(˜ÇÀ$˜ÇÁ pLƒ³à˜§A…†~Mç)f² ”VÁ²p¬ƒ;`ÜcËAØê@-Ø ¶  ́Äó`\Á%p\s`\ àX×Á p,[`Ü+`¬;`Ü`”#8Oîˆé9€^°Î±Î+AÀ?¯xåxåxåxåRꌅ¶N´‡n ́Ư ôYüv"Ư,VYä{2¢O¬´¯¸Đ¹âV@Ó €~·ZUÜèRq' AÅf@o­€¶Û)î4£Ø èC± Đ‚b7 ûÄ@ă‰}€í&úp4™xĐ_â0 µÄQ@W‰G %NºEdá#"NzD< hñ, 3DÚMZ4«ûNsz”UƠ;@ï…FË¿đ«̀GœÁ¤Ù¾U¥DŒˆ—}#ÎZF¼ èñ QÄë€o‚%³̃ê–Ù•WU-›₫PuÛ́£6U+fßÏ©Z5ûưeUk–»ô·ª;–{ø³ªuËư¤†ïZîÉ}U–oùÿ¿›–{SƠ=Ë?øV;4X₫ËEU,|¡Ẹ́?²MsEf£ˆHED*"R‘ˆTD¤""©ˆHE}ë!R±4₫-ù—ÂÑ ½+ endstream endobj startxref 250798 %%EOF netcdf-1.0.20/doc/octave-netcdf.qch0000644000000000000000000027000015205072111013740 0ustar00SQLite format 3@ .ú  o–«A $ § › 3 ½ ? É oX''qtableMetaDataTableMetaDataTableCREATE TABLE MetaDataTable(Name Text, Value BLOB )t ##/tableFolderTableFolderTableCREATE TABLE FolderTable(Id INTEGER PRIMARY KEY, Name Text, NamespaceID INTEGER )| ''7tableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER, Title TEXT )t ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER )f '' tableFileDataTableFileDataTable CREATE TABLE FileDataTable (Id INTEGER PRIMARY KEY, Data BLOB ) 77#tableFileAttributeSetTableFileAttributeSetTable CREATE TABLE FileAttributeSetTable (Id INTEGER, FilterAttributeId INTEGER )33/tableContentsFilterTableContentsFilterTable CREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER ){''5tableContentsTableContentsTableCREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB )x--#tableIndexFilterTableIndexFilterTableCREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER ) !!‚ tableIndexTableIndexTableCREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT )h##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )h)) tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY,Name TEXT ) ƯƯ!Ioctave.community.octave-netcdf    H.æĐº¤ˆpR.ä®~H Æ   z R *  Ú ° | X 2  ä ¨ € X , ₫ Ê ¢ t < Ô   v H æ®xH 伄Nâ¶`$ú̉ª‚V&₫Đ€V$úÀR."H# +test_netcdftest_005fnetcdf:G; Cnetcdf.getConstantNamesnetcdf_002egetConstantNames0F1 9netcdf.getConstantnetcdf_002egetConstant8E [UtilitiesLow_002dlevel-functions-_002d-Utilities(D) 1netcdf.inqVlennetcdf_002einqVlen0C1 9netcdf.inqUserTypenetcdf_002einqUserType(B) 1netcdf.defVlennetcdf_002edefVlenNA1 uUser-Defined TypesLow_002dlevel-functions-_002d-User_002dDefined-Types,@- 5netcdf.renameAttnetcdf_002erenameAtt&?' /netcdf.putAttnetcdf_002eputAtt.>/ 7netcdf.inqAttNamenetcdf_002einqAttName*=+ 3netcdf.inqAttIDnetcdf_002einqAttID&<' /netcdf.inqAttnetcdf_002einqAtt&;' /netcdf.getAttnetcdf_002egetAtt&:' /netcdf.delAttnetcdf_002edelAtt(9) 1netcdf.copyAttnetcdf_002ecopyAtt:8! ]AttributesLow_002dlevel-functions-_002d-Attributes,7- 5netcdf.renameVarnetcdf_002erenameVar&6' /netcdf.putVarnetcdf_002eputVar*5+ 3netcdf.inqVarIDnetcdf_002einqVarID:4; Cnetcdf.inqVarFletcher32netcdf_002einqVarFletcher32.3/ 7netcdf.inqVarFillnetcdf_002einqVarFill425 =netcdf.inqVarDeflatenetcdf_002einqVarDeflate617 ?netcdf.inqVarChunkingnetcdf_002einqVarChunking&0' /netcdf.inqVarnetcdf_002einqVar&/' /netcdf.getVarnetcdf_002egetVar:.; Cnetcdf.defVarFletcher32netcdf_002edefVarFletcher32.-/ 7netcdf.defVarFillnetcdf_002edefVarFill4,5 =netcdf.defVarDeflatenetcdf_002edefVarDeflate6+7 ?netcdf.defVarChunkingnetcdf_002edefVarChunking&*' /netcdf.defVarnetcdf_002edefVar8) [VariablesLow_002dlevel-functions-_002d-Variables,(- 5netcdf.inqVarIDsnetcdf_002einqVarIDs(') 1netcdf.inqNcidnetcdf_002einqNcid2&3 ;netcdf.inqGrpParentnetcdf_002einqGrpParent6%7 ?netcdf.inqGrpNameFullnetcdf_002einqGrpNameFull.$/ 7netcdf.inqGrpNamenetcdf_002einqGrpName6#7 ?netcdf.inqGrpFullNcidnetcdf_002einqGrpFullNcid,"- 5netcdf.inqDimIDsnetcdf_002einqDimIDs&!' /netcdf.defGrpnetcdf_002edefGrp2  UGroupsLow_002dlevel-functions-_002d-Groups,- 5netcdf.renameDimnetcdf_002erenameDim*+ 3netcdf.inqDimIDnetcdf_002einqDimID&' /netcdf.inqDimnetcdf_002einqDim&' /netcdf.defDimnetcdf_002edefDim:! ]DimensionsLow_002dlevel-functions-_002d-Dimensions"# +netcdf.syncnetcdf_002esync() 1netcdf.setFillnetcdf_002esetFill$% -netcdf.reDefnetcdf_002ereDef"# +netcdf.opennetcdf_002eopen23 ;netcdf.inqUnlimDimsnetcdf_002einqUnlimDims() 1netcdf.inqGrpsnetcdf_002einqGrps,- 5netcdf.inqFormatnetcdf_002einqFormat ! )netcdf.inqnetcdf_002einq&' /netcdf.endDefnetcdf_002eendDef&' /netcdf.createnetcdf_002ecreate$% -netcdf.closenetcdf_002eclose$% -netcdf.abortnetcdf_002eabortD+ gFile OperationsLow_002dlevel-functions-_002d-File-Operations: ; Cnetcdf.setDefaultFormatnetcdf_002esetDefaultFormat4 5 =netcdf.setChunkCachenetcdf_002esetChunkCache. / 7netcdf.inqLibVersnetcdf_002einqLibVers4 5 =netcdf.getChunkCachenetcdf_002egetChunkCacheH / kLibrary FunctionsLow_002dlevel-functions-_002d-Library-Functions"' 'ncwriteschemancwriteschema! !ncwriteattncwriteatt ncwritencwrite ncreadattncreadatt ncreadncread ncinfoncinfo ncdispncdisp nccreatenccreate  mmÛ ¶$octave-netcdf.htmlhOctave NetCDF - A NetCDF interface for Octave ManualRoctave-netcdf.html#Installing-and-loading01 Installing and loadingPoctave-netcdf.html#Online-Direct-install21.1 Online Direct installNoctave-netcdf.html#Off_002dline-install(1.2 Off-line install4octave-netcdf.html#Loading1.3 LoadingNoctave-netcdf.html#Basic-Usage-Overview,2 Basic Usage OverviewVoctave-netcdf.html#High-level-functionality82.1 High level functionalityToctave-netcdf.html#Low-level-functionality62.2 Low level functionalityJoctave-netcdf.html#Function-Reference(3 Function ReferenceVoctave-netcdf.html#High_002dlevel-functions03.1 High-level functions6octave-netcdf.html#nccreate3.1.1 nccreate2octave-netcdf.html#ncdisp3.1.2 ncdisp2octave-netcdf.html#ncinfo3.1.3 ncinfo2octave-netcdf.html#ncread3.1.4 ncread8octave-netcdf.html#ncreadatt3.1.5 ncreadatt4octave-netcdf.html#ncwrite3.1.6 ncwrite:octave-netcdf.html#ncwriteatt 3.1.7 ncwriteatt@octave-netcdf.html#ncwriteschema&3.1.8 ncwriteschemaToctave-netcdf.html#Low_002dlevel-functions.3.2 Low-level functions„octave-netcdf.html#Low_002dlevel-functions-_002d-Library-Functions.3.2.1 Library FunctionsVoctave-netcdf.html#netcdf_002egetChunkCache83.2.1.1 netcdf.getChunkCachePoctave-netcdf.html#netcdf_002einqLibVers23.2.1.2 netcdf.inqLibVersVoctave-netcdf.html#netcdf_002esetChunkCache83.2.1.3 netcdf.setChunkCache\octave-netcdf.html#netcdf_002esetDefaultFormat>3.2.1.4 netcdf.setDefaultFormat€octave-netcdf.html#Low_002dlevel-functions-_002d-File-Operations*3.2.2 File OperationsFoctave-netcdf.html#netcdf_002eabort(3.2.2.1 netcdf.abortFoctave-netcdf.html#netcdf_002eclose(3.2.2    .û V .‚%„Nßxœ½‘MnÂ0…÷>Å“P7($Aü6,«r'ÄVÛrL ­à,=KOV™HP•J́X̀ffô¾7󜧔z̃:M RI\OÖỤ́0©¸ Ểă“Ù%ï(ÏqBiÅúe U#:«¹W$$µ„qÆ€Êjë Œ–‹U¹mPZ/ÈO₫ pd̀]ÍüæÍpú₫*yơÖx»3b¼ƒ½®_@µ¨—tvà¸Ê4̣tAíx©)­¸vWÉ?-0u}„(Ñó|=_ WܶÛ×ÙË2÷JY`çOv¼"ÁMÕg^|Ï]+j³l C{̣1 ej‹† yƒCºø¡̃ÿ{í#¢œ8Oµơ-ăsư'́;Ƀ’ 7~xœí½kSÉ’0ü½E-ï9æ}%đenÇĂ(‚ló¼€=;±±á(ºK¨·º4ƠƯ`ûßßÈ̀ºöEH 1ö̀‡1ê®®¬KfṼkïßÏ.{Ä&Ơ4%{æŸÙ¼»³·§Ø¥ø"‹±bßï¼°IUÍÊ×»»···;×E½£ôơn©ÆƠ-×b·¢–»l8„ÏFÉ̃TT?ßkyóÓÖ**QTĂËùLl±”~ư´U‰/Ơ.ŒâG–N¸.EơS]‡?l’½JV¹¥¿́TT‡oØíÛ?eQ =æ©`c¥5ÛÛ¥3‚‚OÅO[™(S-g•TEz¥·FQŸÅüVé¬\SwZ”ªÖ©Vñêd*­§¢¨Í3YVZ^Ơ ]çêç¶oE!4¯”Nùg[Öhz#ÅíLé*hy+³j̣S&nd*†øc YIË”çâ§[°Ö¹,>³‰ăŸ¶₫ưRͶ˜ùO[eÅ¡3Ü‘Ÿ¶àù(nz\dâ‹i,éoÓ˜̃4_|2hT¯R÷ÓBáW¹`j̀\Ằ²ây.‹ë!/²a®x&‹kÓ]!¾TÁlKÆ‹ŒÙ–£d¯¬æ¹`°WÓáüÛp˜đ²N¹sQUBgZÎư3‘*Íaï^³Bâ’L̃́¤ĐÄ4á¹¼.^Ó#zÉr–ó9ûç”ëkY s1®^³W;/Å”ˆ/|:ËEwƒ™¶‡áL‹±̉S^±ÿs¬j8æS™Ï_3YL„–Ơÿ$e¥Uq½“‰ñP£Ñlª UÎx*~døüVÈëIơ]©<3Jùñå\_ĂªlǯÂ₫/JÏÙ?o„®dÊs3eV©YwûR¤°d_üÈf<ƒÍ1³~s®&;Cr<©k'¨ø›Ë´ï„Xç;S®?¯ê<ûg.Ëjˆ¸‚tưe²L±Y¥̉aQO¯„Ù¾ [¬@vº‹,²ç¢œ¨ă Ar…Ƴ˜/^°n>´·ËÈ]£hă¬Èe!†‡R‹´JêÜ £ûíèÅÎ F¯½bæ co7—Ư ÆăOÏŸ¿̀°Ë¤®—£;/ÙÙx`ÑĂ!‡”ƠE× Ñ»ïưèÑơZ‘ûD^iß,;Œ!>́ø†·ó‚™!øá-9Àö ¸`ŵ¨&uñù€§“oúĐ€BIẫ61a\Yü~"¯> ]v ̃ˆ/-Dÿjpå]Ó,»¦ùÊ-ï;ÍRT‡b̀ë¼zƒHè¸₫M=jĐ¢¸˜8ÚG̀Åđl&H[›_á¨^2x̀üăuâ"¿B•¼½Bô‚àqŸ®²i®ÊÎͧ¦‡iøt¥₫‡ZëàĐªû[BÙ¡w0o ‡;ôxEẾ!IÛù·-®Øs?ø—Êw”n¼¿Ö[=ëc.øÊÀù>€ÏW„̣¡ÈåôPNû@ù÷̃<÷r j&.`øÜù›Wé\‹ü¢–ŸÛ₫ñññ ”£WÈ‹€‹•À̀‹´<·©ĂÓU¹ê¡œ¢\¡à^1ÿdl4ăC9í¼yCĐ=#¥Ç+â}óÆ€Oí{8>́r|hÁ¼Á®†ñ`øë™i@}ăß¼YõjUÏ–ÅÓĂè×qå­ơà ¼!È®¼Ơ-­j™́cæ¥ô²¹•«̣ă·zö¦ÎóÓTfừßµ0P_Åg€}½:èS>í‚·ä71Hxu?p0ØÅ ±…ûm,¼^ô{®ÑJÚؼ7`¿‹Á̉Ë.Ø̉p/Ăóü›ø‘ë~\5/ ¤đ$§7«̣‚\K0Æ.Ë|{·̀=X3SøÈuS€7«ûvǼ1`¾hzÅ¥#Ú́â_@?Ä$Ưë.’₫P ´z(Ʋ³-K̃=ăà¾gđvh̃0|³nÙ5ï¶ÙW4XzÍW³’é®"üºÍ~öµöƯªGTϼ́+)Ôe»æuçÖW2—•\~·]{À̀=X·ŸJAD·Î¾¦aÄ>*ónEk?†Đ©¶ÚØ/;`cƒ;6c±›óR”•[~7œøé¬ađÈy3ä̀¬DY}z₫üÛ1ÍÇm>°;/>¦G ü·‹Â$̃~R g>|__媩(ÇÍÍQ̉̃ŸÍD‘É/l¦̀gŒ>cæ³(>£§„˜½!#|ä;Àq'{»™¼ñÿLô(œđC¶cÉúâ¢`-úzÑĂ‹B¥ kÛî‚Ä!O WzÖ7ļfĂƠ¦uY±+¥$2„YMD€EÆ*ïëRd;±¶7W,åEü,Ø¿º̉v€<Ơª˜O·FoO?́훑 ™Ë0ú*Ÿ³±VSÆnÅU)+1H”î́™LÙ€ª©Ê»‘œq–©Û“ë+ç~Œá,'¢̣2H%tÎT` ŸYnÜđÏụ̈ÖÚ©HaÜx]ÈŒW|§N¹̃YíÈ©«Ư­ÑJÍaO¶I©Xç^È‚) ›PÖi*Êr\çùÜ6ÁI˜IvÏÜö‰;z%́¦ª"l&4<,½o¥(Á¥ «.“UGNÙ±ÄcâR;ˆ§'Z/Ù›¼j|¼0„ọj9̣0à$‹½ÙèWYMÏ0̉½Ä&^—ßp™ƒ1n€+>ăégˆ”ka*àsbWÇJ_ƯĂGc•çê~¥j:*»•ƠdyªyƯ^S. k5Ó¢ñ4‘̃Í>_;¬1c#„nµ¦gñ, e,SđRd́FhÜz5qƯÊ<‡%fæVÄ"‚á¨ËáCgLe:tZ. €"|çjwç±5æ<0“Ææi­Án˜œ̉sv ´§ë¢Åu²änßh_%Z> _́<ßyù|§âzçúḾZN‚c´kïƒĐØe·ü$: ÷f£sqÍu–‹²´¨=ƠDeđKúƒ8ÀƒÁBöW’ªƒưÚđÛëí®­a°»E4Ư3(UÜë°¤RR,8-%3u‡"÷JL]ÍA^ê‹]^VZêF§¬4ÓêFf¢dˆPFÙ¬4ŒA₫âñ¡Mđ·I Mcc™‹r¥c²?hº“<GR/K/ư@¯P̀™&íq”„đâ"+1•ÿ,È>¡´§‘ F-&AC°QöÂụ̈́×~lâl»w´¶1°]{ZSt«yŒ Ūü®'F½gƒ®/Ï{@FÛëN>9-éIà@̉ Ñ>CPÙ/û—'û?§ôù.6Q·âFèe9M’)Q²BU¬¬gÓ‡àäÿ´ăeW5=w˜Å¸^bc¼´»m†³2¯®¸₫^ÖƠn Œ«; `Y¶Ơ5€hÏür$Ÿ‹bdK·°b”_zɳ"W·?†+´4ƒê2&uăïÂOp}zÓVa^Ư¢Ó?œU}Ơ?1ŸẤM¾ỉNm˜|³Ü}ÏfD¥.!Ër Éqă‚AăU®R0ḉe•m7A¶«{X„àÄ̀‡é ×öï¿möÊ/ệJ\+=à[£×lõö(2ŒY•[;?Û»á¨oÀ e!îí̃p=´̃›AĐëmÈ µTƯ“ü‚³L§Ùp óNá/gZÍ„®æøĂ4Ékß@ÄÿûJkđ—ßkUưhO¿º¾ÉkûÅÎÎN{‰3”)i :a‹á[₫ƒn7§âäĈrê+›³ˆûöf‚¦fÿ·!$ĂĐœ81s ¬bÖ© Z/¢I¿_3ÎR‘çŒkÍç¨Fá$3Û3̀K3*2PM„Ô ËEq]M˜̉́¸39n|'KVC8°¬D¶ĂéµƯÁs+L‚VMgÚhz̀Û{qXˆd‰ƯEYr·~°“B…ưÀRÛµĐ³g…J†ۈTcϦü‹œÖÓè]kN“z<ÎưÂéTˆ‚_9彤FÀ± B̉l̀óRÄăMM>"ƒj É/ä_GVW7ÎuOm̃IÏhR`Û),ÛgÓYô ÉÎÿ¤sU˜/›¦¹%¬ÁËçÿ3hÓÛ ƒv¶LL̃e× ¶l›‡ ưÚ]0¡•êµ;lv {»Yÿ˻͆‹5Ê]$¦ù́Ñå…4êuC"ṭîå “]ш·£Đ¤21äú+±”[£»msxIao6:4ơ; ÜÊRÄ̃––‘ Áª¬‹6…¸p^®om!›~¼ơ9ËËă-ơº!¼…ΗÆÛ&:b‰ Q Uh‚(a₫d¥8OÍ7†óQ@pu^>¥ƠÜ¡¬}ơ^=ñƠ»†”Ÿ;8j "q3ôE^©º9J•Ô+ñ^öLîˆäØZ©*a8#Çí†80"¹2%·ÓZ¡Ñ¨Wú$¹kÚ±Ûº¬tVµî˜J°èÎÏoù¼ihK‘g«˜–[P̃D Fb8VjŸt^m÷b’Z©U¸ÏIt.Í’œ́_\4•“Ÿ/ăG§G—‡o¾ii,æù§¨ŸXj]yY³L’Ø,¦‰€ƠU¸2«‰Đ §̉.«q¤©₫^ -½Ûwá)O)op„Øä78Ù`Èô­’ ÜÊ%à<©æ~:NÑíÆä~HpÚ@* iµ@<æ¡,ñyÑÎÜ3C ³!”‹º R…î́ÑîÖÂĂ˜í…=Rµ>Æ]ûE½Úmîëñ jnàÄơƯvOX dh’åË̉¼²æw/Ü‹€₫Ùp=82!‡ Æßơ­÷ Z¥ÂN¬j¥n>XÓ•ë 4́fÈ= ÅÆ̣‹È˜ùb@Zö {ăP¶&Àk»3îÑŸyc:X@cäj̀ ¢Â“?A¥£ßÄÏ Ă kq¥nÄÎâA€±)ï; ́ÑÂK¤í°i‡ô&D9=øôóo—GÑW0‚dIơư`~xPYT/¾[èÅ»³óËÍô>P?< ¬,*ÈŸ]êñéĂfz˜TƠwßÜkÏVé} ~xXˆ)…“yU°oNÎöï¿Âä¼]êáÙ‡ŸOîO¬P_u ïöÏ;@î?„?€ơzn¯êjVc ç;äAˆ"&R‘Gf¹HRO÷ Åwˆêe"(o);U•xmdPøµ€“Đ˼́™ ”&]ºÜ´äÄK>N2̣JË/x|4ä“tbDë#敼‚¤À¹QH¦¼ÊùƠ-n½7b1Öù9ˆa@>ŸPpg •q]älñå]—w¶P¯r¶@çëv¶|YÁN‹ñ§ô%à̉­Ùó/]; o°è{™ªºè} Z|Öë ô ­8æ2₫Vp[y‡ăvÛe§‡ülá‘‘‚v*jÁTÀ*£y$‘›R'È<ăO轋ƆבpY”ÆÀ5fÈ"“)X)½^A¦ƠvLJ³Ô¥øÂØ\¨ÑƯóĂiH@I ̃v*Ë­Ë.”7Âuˆ³+ƒù‘âzƒYM%»¨R¸Đ7Y2ñ{Ís8ăñy­eE9̣QRm?Q8é)ÜÍÇ,„×ƯNd:aSÁq-yô”sREÑ6‘aƒd«*Üâ„ö¸%m/åơ²±-/›±-3Å%FNépô/ºü½V?NçđÎüˆ¢pMT‹‰E¹o  Bf?ñçÙ_M¯ü• ÿµ/s¯H¯ÉĐk–é°†ư"±.ª¶¿d‡}oP¸ăUµ8ZWƠªûK 37<_QœáUơĐöÖk3¿¾d+n`8DL°‹»j:+D¶·Ï¤>¹ämÓ jƠB§* ¤́E~â8bͱ¼lƒFHB2àĐÑ|pÊg3RC»b¿Ë%¿Wcd¯zYÓ5lY*wRŸ2^ ó́LË1,@̀€gí₫uđ×Ü_·cîeÇÊcœÎaØ–ÍB́uA ëĐˆøáCÙm8r Y~‹ÁË6ç½G¤âÀç5®!hÑ\@²ˆă“,ÏoM¿â¶ØûnÍ´O±k¿ÿ²~m™VgYuùϰ:oB•q±ÊÔ­ơ₫IÀ$söÚ ¾ÇÙŘ-{]†pœÁ”; ‚?ŒÏ %IK°_z¥ $®æ…ø"˪cœK«èkƠÂÉ*QlD ÿó©ÓƠo›jÑ)?m«·±„HÜKµÍ²¨¶¦°B Ö:ö'ö́ ºåön4Ä›oÚâ͵ñ›̀woăçƠ}Ü­³¹̣ZÈ!#)«™†{ùđô¡¿NçH ÎÊḯÅóVó"K₫:<KÙ"y#¾½lE‘c“:°´’yÈëÉ8¶ 7«²uf/Öæ¨Rhùµ¨saŒ,p´₫ -¡øY»Ơ¦ô>së|n“:ß·w2ÅoÂB7-æH¬†ÎT®0Êk¸Hu!+“ˈAdƠº¸"ơéX_ko¸uô,ẾÊx*ÚÊ>ø©ÚGïÉOûƒÔ¢;qàÖ]+2a c“|˜`¬K´Ư¤®caôë$Àƒ¾Œ>çC;x›LIÀ®å Ô“œÛ¤–¾́’pÜ=ºÊÂoœ́ÚqÆ,&QÖ¹ñƯÁàvîå@‰¹XŒFØÇ5eÅTÆ̃Øâ₫¼ÀxSâ†XŒ̣·!n÷ơ*|÷»u%Ä̉dĐú+à2ciLav,ûwSäé–_NTC (亮Ÿ"n—ÄlàYO³½î²m}(¨®…§wàIY§XبaSX¡—¶¢ĐæAûnÇ_wt̉$ïháË¥ _¶”‹q5„t;iôÛ†‚%8â» L«đ6²TRU”2ƒºÏ°&"ÖFhÓ2̃k‹ù¿ Ô,ºˆqØ­WP‹ñ=Ă|ü™é‹‹q-¬›¶bƯ©¾²ç/ܼBIµEE§Zơ´»+_+Üs2Sg+ÜB¼́¡½̣;+o-=â’́ÁE¾m"‹®2^vr x›‘Hz¦‡zâĂ}ÿƠæ‹Xaƪ²÷ơL ˆÄÊóĐä¿—ñvlÁ³.´)Qvc BXƆ¥đ äzT˜;kTºw‡o¾µ•»—p—D´đê;±¬óúêeQ,„´iụ̈°Ö„\m}羬+¹¹j}XAN_BŒFj#cÙúí(XQêÙ1¢\‘ơô]/¾,^”ËzÊë6f¨‡êHËĐÖ¦´‚ơPöƠYqáâa<ÈeÜÛ–|6Ë¡R]¥0£ë₫P&Úu~¯©>'Üè ™uXñm½Xܸ₫ND^pSư ¸Ü€úèA$£«ûsÍ\OåÙ§qPđaỹ×g‡a è·‡=¶Ö̃zXd‘™ÔẲT!7RƠeóëgÈK‹z*´LÉÚ¸í1|á8ă:}fÙ±q³Ÿy”ăk¼‰Œl¾îEü6î»M2w¨÷—¿¡VÈđl&4_Bún5Æ‹Ê œl²wưôi-ºà¼÷đ´Ÿ`Rz”&OÑ$¦Zß}—ăU#[eT]] mëǪ¡é’Œ52Q&¢Ü¸đ6óa¡Ÿ‚,ƒ—(ÖÛK³”=LˆíÇÆŸà»¡IN ™£c‘ˆâ¾% ÿfÀ°âê ¦¦t³rµ+ ›ªÂ^!d¯ JC,ËùØÀƯ»öW[»7’èŒ$~œö¥†;́¸0'Ü€ỷƠNƠô ÜÆµ{%+(¦1TºC[Ƶñưº\ˆƠ?Á€”~ÖÖ³¨¶í'h»Êw;;;IÇR<ëØêṃùJ áȼ«f/€y`/Áq»n½pˆ.t]â4pê }±üi`!lú4ppÖpÎÛ9>À±ÉmcÉà7¢4¢Ü1W§FnL"ÅïK @xyóJfÎG±õKÚ[Ör^d̉—Ú/o¸îyÍ«ª÷-^ É©Ư×¬ê²øưrh£¨¨­(†3ú£?H¹é Bíï—ÉđßùX‚ïü Fß%đa«Î`WÁ*o»¨f™ÙăÓ]Á°pøÍƯØâj ƠÙNsªÙđü´åü×o”¶RÉ", jüéVnp×wJÀC¸z ]¡PĐ,ï Ê:åúùÂ’Ö—Ñmë« 8À)ĂàzøÅb“Ø*Ưg \–®C32Z#ÂgAWøÔe^Elo¯€xsv₫Ë₫å§Îr¶æ]GU[ó&*nëm|ñÛV‰Ûơ"ø[=»ÛƠ7Üû]‚OVBn‚ñ¨ €6‰ØĐí}Ü|0®ûc5XÉLđ™̀ĐĂ»PV©ÍĐÖÏ6ă^µ~èbø+áWí̀AÛ$¦ù³ø>øæ†ø0VJ _Ǒ۸àç±evĐ—@®¿…ÚặHE½o™ÊWm½ƒnÀvw6Å#XîV冦öV·‰a=X«ÅrƆÏí(đ‹åר4æZ0k05˜ nÎ̉p£¯ĂĐP ¢e—A€Aô|³RĐy„Xƒ)äEnˆƒA´A`ß]%ÖÆ¹qÚL̀Îc±}—®61§N†öƯk·´VrG¯Ö:-$FÛ›h™çMí¢P₫i¸ă"¢ÂÆ~b-Ư~}t1/̉eˆÂ¹]áƒ(»ß89̀‹t>Wè÷rfêÇ.v“)—Ẹ́³¹Ăm°î †ă₫ƒH|ÿâø‘°Ư+ôË6/®xxÔHă!#™Êé¸üÊGŒĐËÏĂBØ4:œ˜¹;5'ÁuÍ >°=.ÏƯiœ«1÷Ẻk.…tE©»Ô;ªNt”œ0É$ưà­À»’éê22ûFVÚ ±nYü¾‡Áâ+!¼…đª} á#7âQYŒị̂Ơ<"+Bhí¿;²µñà°—é8K”õ‡™£åôøp#(z|¸’¾jeU4(ƒ¨Ç‡-TƯP•¼{±e;È•ñqq)¼NƠúqpíj?̀j9>ù×üÍG«hÿÎæ-TĂLWEÆ;Í̃½Ü"1 Ơè̃ûĂ¾+l1$–à¿SÏ[(4ØÊÇâ¶ûέGÚé&»Å»mó ĂfÂ+.¨Û¾(¤¿Ơ—e7hñ›HH«W¸8ÛBx!ư­u éë¶‹ÛO÷±!Óï+Ÿ/¹½̣OàĂÓđnØ7MAùøp5g˜…ó‡H!›<îă»SôhăƠJG̃%É"Ík4‰~;qˆo-ÿT‹Ơ&P;#3›eåµ@!Íĺ_ÖA½¬«”b'L8_ ::7G$56l²1"ØëẤ=ù0 ¯Ă3ơ&°́=₫¶¦w Ï·¿6Á“¸Ù›:ÏOSÙqóK‹ù¼ù ưrƠpñq¢>,¼G9 ¯ớ^'a<Ô5Ÿˆ•™31cXÎđ:FB×9?ôˆ¤áơm₫Ó}iS0ZKT\ÓQs]|™%ñèZY2èÀ\„% ½A­Ç+“ßÙ»̉£nÈSE%¯kU—wŒ ¥2ßỰu—’%¼3%Ä— ÖW1±W¥UïqHƠƒ[¥º‰ÿ!„U„o*vl _Ê}Áø;IYMáÆ3ôÛ9j^)GFÑu|ó—§ ;”°tÁecˆT}™‰ăí̀Pj¢×B»+̉³g… »¤z cϦü‹œÖÓèƯFHr©¤o½ƒÅµ*1>N’‡ ÿˆ$¤(ô½MLRÂ$—5¨ùQ¬‘ —Fä}¯Ư<–X‡†”̃Aïh.4Á˜çeÇu{–$ 5 "“·¢i´¶Î–¹±óv*Ü×`6 (Q"K˜Éfâw’et½n»¬Á’\ÀưñúƠË%èđÛºoW¦Æê#ѤƒØG™©¹dư„è@¯‘Óè"“;ThT郵µµë®`̉Ф°J0éḄŒ'Ñ)E¾99º¼d\׋3Ä,€#x: k>§«ÆQơ5Ñ·tOˆ¹¾ù‡ĐªÜôƒ öÀeȸz‹öîqœ%Ö6W¦3Æ5Gdc€Á}i¿Ư^4åà6té.jœåt¥z%ô Ï7âT_B ù>ö®êN,_ú#¦Ôé²~±.w[Uéûdă₫A²r˜ăâ÷ZjQºR§€ä¶Úi‹ƠÜá̉ä^´Ü!Á[¯?̃xŒ¤¨ª̀Ê~z‹¼Y6‡̃S{PuÑ₫ơØ:°¶pàh3÷½Øgï5nºr Q ƒ>ïß9Ê µF¬Îêµ&ÄÇá4+:Ô–¾Pp5¯ÖÊÜă1}v=vúJèi`Íø—Ûí«w»ê,ïvû[L̉+»Ưđ‡ Ws»-MÏëv~­Lñèû[àÿåœ{<çaÀ’Î9_ ̉¶*Í>wÎĂêñ¬½´ÎJ>³•IôA¾^—ADvj/Ưp̉™^ÅIçëu6?^™*ÑKׄ¸ ½Ëá³*ư=ܱ·~¾»N‡œ“ư¾6CÀëđúí$́ ‰ÂíVpÿU×7M'Ư†̣H–¡À—Mưyơ4’ÇË"Y·é^ÁçkN#¹#¿©7Å$¬äåh«•éôƒ E ZyFkFÖY½¤Ăø… u¤O–GT bÓhêà¬!ĂÎñđáx7ÉFe4µ¥iù+^¨…ήÇYÅe=¾ÖU\è2|œ%^Ö£û$—8tÙ­²xT½¯+ßÂlÆ.Êr[o ü—»ö©ºk©bå’A£êçJBAèqª~¶̉,ƒHëMTư\9CrqLơ*U?7«ëƯ§èg̀t%çyßyW'=‡í^áˆ₫ɺ̉CÉ{NƠl¾_Ư]‰å;Ÿøl>Yáx căÁ;@k 97Í?âx_Ä!³Oªî=à‰ ¹çøICÚ.f ï*¸o& Ç¦ơg]\ ±÷rÜѳŸÙr½ûö|̃Ù §6®•ÅkXÛæJojm®ÿF£ÓbQ¥ï}טVVç¯Eµ_U›ÈD¾‡̉Œó•„…°ùl €óHg6{̀ûPä¢Z–ª¢#zËpp¦¸‡Ç…ˆj— ¦W1¯”Nñ(ÔäàüñÁÑ_Á9½0ÀÙƯ$ætf‡₫=Q‡QĐat™'œ”£Çq̉N–!í•5k(Ѿ}!(SÑd9²UÏjÀơ{c–#á°6ëJ$l!<‚fⲑ ‹ó¸‹ŸV‹Hxä£Û"ûú óº_U›)„¸_UKx¿‹ª½â7«âí#9Rị̂ªÚPeDèù^N{ï‘ÔLñs-ztí2ƯD³j4=2d4‚{‹‘KK‘÷>g’Í4&Ü¥UË5_­J¼V ÜĂúăË1»µú#dÈôJ‘Öüy?!24zÊ^hÏíb ÿkEÉQ8ɨKP÷÷±T»R¸Ä£ˆ“Îzœ«_V·²ƒÔ\–F³ NÆW£Û±Ë~µÓÖ›X°43› qw.GĐ?Ä̃Εh:€ó8̃Î"x °”+3 —¤…Öê]¯ª{7:xÜ÷¶«ôkñ§,ÊæŒæÔçaíâ\pg]ûµÚqÛn)CîÆ<ÅJ¡Ùđr>»ËkÜ÷ °ï¼7 ߬˓Ü÷¡Ơ´sQÜÉ¿Ëi£íg•b^ă1jx™‹̃=óƒO»ƒ¨ [Xûk©¦‹b5.igÔ÷̃Ṇ”>}<9:ơ|Í\–Mïh1sº₫ê.« lƒ¢d‚ø¥êHë‰G»’Ü>ÿU•ûªÜp àI…»´Ñ’زøøØ%ÑL'L‘°Ÿ­d'ñ°ÁPbµĐfŒ ƒ¶æ•€ḍ₫†P³é ¸z:–"wåF:2uàoÛĂjλb«3À;R£̃ku#3U‚" ûhw‘gwí°û{ñ£K¼½°Ă²c7lÀ́Î EZº¦´èÈG“™(*9–ôÚvg¡®3i9 ¼ys5ÀÁxŒä¥NàÏB+&û̃K”¸/%-!7üÁ¤´’W­lN±¨d.+y§.á›UưÀ܃µi ÂC…@v¸“7üà•…à³•âb<¬G±ÀˆOlÆ$’¯0ă´óû„…w¦đfá§% ˜³ÜÙ€A~ƯŒÍî—@Í—}C»~¨ˆ¤1ơ+ÄRܳ;đ‘³\–"c{<,ºñ£ƒCw L/²\²r<ÑăUă£v ùj烇î¸ÙÛ¼Z?0;Ùnï€+QVd’ÅƠí=>`€;/6§¦Ë#p ÆFđ·åÁY§ÑT»́ *Å2Eæ™âY‘™>§ ª1OEƯ’%Ïf¢Èä— |__å2ÈT¥Øí›–lŸ½=ưÀL3F͘i¶·;y¹ÜVß‚8VTs»ÇKfhy=±‡o4ñTÀ̉m> ‰m¯́åߨÿ© Á^>₫}×Ze²œå| 2Ó¢ñt8Ó‚ËJd[î@°Ù_`?b§́‚]¨qu ơ[̃¨ºÈP°ă"Ưa~RµÎ·ØD‹ñO[“ª½̃Ư—ă¥¯w·F4µ£¡çªÀM3(¦Ăü¡¬H”¥µ›ß}Å+ E•0)qJ–IN›Â2•¢sÀ®ê¥^\cºV¢(&ÿ©[cRÑ脵 ỷDp°ăĐv¼×‚O¯r±5²²‚p?~`¹(6ÖB p&¹Ẁs¬tRÚÅ„)*(Á>Ë‚nZ»Uús‹ÜæÓưSUV¬£ƒ™æi%SSXk'¥¼.D–@Êÿ,¿ås6WµÆÑePÿW±rb{ÂE£«?hŒư<Çús—Ơ ©îœ6v‘Ñ&^×_ˆb̉o%œ.INiu­ùô/ÓŒ—“+Ŧ0₫²ÖX[D‹)—E™@Ÿ~1`y '¨–ÿ¯T⤉đÇÜ11·îj̀`*âLV ŸÍrÀGÁ0˵˜›-5dZä³a±î ¬ÿƠGÈëj¢pŒ¿©:+)ôï \2³å€UJyœøJ¶Ü VÎDz…Ñ2 àLR‹±ĐX|¥Rvơ@ ÉLËT́0vVë)ÇøĂ¢ơ¯&¼‚ñ%~cî‰ñȬ§Óx›™××D ƠDL™C—́V–“íÁ´H…¼kB—^ «u-*$nü0¹!FVÁ§Đ&@h^itÁͤHitĐIVXB'¿èT8Öt÷¹P·®ß S°q ÔOäù›iU‰´¢DnZâ–‚r¦Å Ü8RRîLpjáL¨cúËËÏæk­5P™Ÿ©Ơƒ8ääbàw&ºâu0P—̣ʨ¢v­;· .Îñ˜¤´mgâË,ÇÀît̀3+rùZW÷Ùaxy镪&tFH(ùgáAkajd#Hœœ™?¶®›rưê” 1l@ûLC”ÈĐ¯ra/£¡ä* ȘĐZBƠe>g•²ă‚®!¡”…çơBMqEeÚÁ¶³ĐDOSQ"µJPụ́X×Ẻ‹-…ky¦,J°BÏ«‰ª¯é’­)/ê1O«Z mYc©#Q™¾1œ´ —ñ·JḅJ†Ị —S#mxqoMp¼t0tâ~I9/+̉”Í@œƠ…ç#W@:*Mk]Z»'ׂ˜YV([%²Èä̀jă2ƠPàđv"Ó ¨ÀNJ‘Ïi[â Å‚º€µU”hđâ[ÁûÁâkFz7« È…ç‚È+‰¨’iN,V¥p#ƯaPu'æĐ‰k(ºú)(ó̉,uBbH¦PXÂÑÀûŒiÁ3@0†“Ơ LÍ–¦db¾„5×°Å- yû₫d₫N8ǗñF\ fa7N<æ,`&@°|Bl´à•€Å²Æ‰e&‡Œ3x Œ̣¢â%WNTg^Ä· ̀¹Ti™V–ă""¯AŒ{I\/'pVë,8`j] ]’Fˆ£Js$d ×ähù’TeÎAÉs–¢jjlD¢bFµPBa#Iq x́ȉñèàm¦ƠLKQq=L÷̣lăN /á¸*cx)/ ©KÈvÍ U a,«¢ ÛV(±“›*ưR¦¤hŒï (2ĂNRrVŒl‰í»GƠº<:ÿåb¸z8<8;=<¾<>;½ØáS¶zÈüS«‚)g,E=ª;SYŸ¶ƒ®›ËĂ( ̣ªmÉ3`(—ÁáöHXF”±ÔùÊáx¯bà—̀ốhÛ-*SÁ‹̉Ÿ¿Ă\~,ç·f·H́¯T¨ &VV²RL%́A%t¦¼ ƠD73Á̃Í©51PLÜ ¨J ((F»̀XmPC–‰cGPIÇ4!Å6˨°2ŒÉ€«Ú€Ûaö™éB”n),1ï¼`f_NA/‚sÆ3`¨¤¯y!ÿÁ«øÀ»T‰Mˆ–ÛZP¾Y1ă3*¤4ÜWîŒRđM‚uƼœg Nz8†¼̀äEÙ§jÂé(™rĐƠ8áH·)ÉZt.ªs<ÓppP›L₫LȈGnNȬDă1° #£â¶€@i$̉åvû…%°[r²ăÜ)$©&EIîN[0Ă`@¢¯4/ʱ¹¹Åhd̉Kh²¸Đ¼đÀnEœ8ƒ33vOǹögt¾Â6 nsª@îrŒ©RD„hb¦%@{Ù^¼áF̉Ê3­ &0 - NAÆÁXđÊé’ ‘¹QÑÇÀ#d£pYR‰<'-'t—ÖcXû3ƒ̉{ÂI˜¤QfgYÛ‹åø%rfZf́ûơ'…= i¤¨é*v#Å­Ù)k¥e₫D9&¶æ÷*ä“xä\S8ÉTM§­¢©₫4äÉTơ€l´âLV`H"®„=M…@Ư˜.T ×R. !—#”.Hu?ƠƯw zj½Eˆ±gƒ†‘´¶6¸TMéix² 2ä9éa•?/Ï®₫¯À“Ăƒ̣ä2 HzØûˆø\ǵØ®p³¿`퉦‰íÓ%j<– À&¥íÇÆk]A! -Ru]ȈŒÙ%»RÙŒE»ú)'ñÚ*I.Æó„VYGZçÜ™9§°F9/®k~ ¶§‚†—€ÙTf £˧àỴ̈\*̀gp×t ´vuPMd'̣Js`₫°exzï÷²‘¡swH™³?qg?¶td·Eå´Æù6ĂñkW¸±OKnQ$™ñô3¿¦£ä₫•fj:S…óa8Ơ„x/²đ'AsäWÛ¬ú¸sA%qk£́øÅ›WI .°Å$XèHWbm|¤Áñ"qmÍÉW¶-FÇX̃ ëÆ2+6ÆbvÆà̃éQTâK5°x̀¦ø£¨ó₟&Ï> ]ˆÎ"S·ŒŒ´L¥bpS‡5qZ¦ p‰ă±O“gPb¾ 2M–‚Ct \ 1ÀË\h«l%¤±{ µ+˜̣¤N¤8ÓPK̃+iuYÍô=ˆâ‰uup&AŒ3«–çIĂ`(ï¤W`œ%‘Á¬1 ÜOÏm)ôC«¹²Ö??w¢\àTËêç ú–Tn4k/º́0öNƯ‚q`çm¦Q%HÛ­1•I“®q­›}¥)æE>ptàÄÿ-zk£:â°,@€%E×Jcà@¸‰ÿ8¦\³1A:;x×&NÂd§Îbb"ˆw¥JAp0×iØ_ÏY|{^ƒ₫È—±Ü.9]矂+1Ÿ'¹„+´À´ä–Æ N¡±4„ ÉtØS\_E%§ ́`È;œñuahV „ƒ!Ç^&BÖ¨p ߓ몌–7¢›®Å%WLˆNN ±†vÆ“D K`œVh^ÄY’VÙ@¸%“n“I’YŒWäÁç脘Ÿ1Öâ½S–ŒÁc?Ï­gà}±Y‡́†ˆj_[ù́>pHµ¼ï­K-ö €j-niTVŒ´U‚+‘%ƯOEe­Ă>óe*Adæă±ƒú4ê"—S }ÄËuÚ:ªÑ¹U]Íê6I×Eglê½tGư¾Çˇ§¤ư¤́Z̃¼\9”h”&êrṽœOÁË“‹́ZĐ̀ëƯ³1—ä!ñ hæ†çt¬—~I¯æ±ÂêÑ ƯV|*ØWÇh"¤|Gc _™B á~XU4دR1,§̀͆Øåîù0x´+Äu;£34`+çö4xV*@ĂŸỜ岸&Ÿ0ª”±Đ,¾¤y]’eº˜«9½Y%ăC®&ɘ§Ö=9&7GáÙµ±¬Øj}Æj ¶8ç˜ ëgC‡É:Å-JÀÏ´$ÑΜ~Ưçvñƒ,Éué̀Gá ›{̀Ü9ÑĂ­„*h®Ä„çă¡q|DFk5C 1ăÜÈ^¸¦D6ÖA6Că•EÜuÓ™Ÿ¸ª+ë!O¦Èi¿&rF‹9WµÇ×·xÆ$ă"&R©Óz ¨ QT ¨Ö~̣â4́J€©™± 7¡ö7hQđÏ̀Dđ±ÏA-(`*  {“³¾÷N©¡S¬çDÈo`Éö‹Jp`  '@¦0åSí(œ»T ²Ÿ­ŒB–5₫³J¤“Båêd*8z¤ư¦¬œß²qĂ]WˆLW¹¼6$cÚƒ¶•‹äÅ {Tưzü₫,à(¸]æŒgjVÑU*/Ÿ³C‘ L‰yñ·¿}„–”r*AgCóµÅ‹¿ÆÙ‚–ÓhŒ'ÎΡlIJé!¿ˆ9)ùöo9¬̀ظŸƠ­@5e¬ô•̀’¬há˜jµcÁÅŸỂ¬>±[ñEèT"†Ưqx"·qáªE¼tP@‡4W'̀¥l¸$s‰Ñ@Hœ(¡î†Ê&Ẹ́P̣BRÔLù5pâ*iÆ$Î ˆO\¡úKØL kf¹̣ʶˆÆSøGµG¥”‰gDgd_àÈ0óÅ":‘\4₫àuËs6™¬§Ừ½(g2­É½₫~o{O°r¨÷˜ Ä…º“ÏB̀`7Á́ÏÉ©xàIN¢ŒÅ-œyF+ØÜ8O[f .Ä-ÀÀ_¬Œhdí.€¢CGKâ5"KÓŒçô|iDÎè#cû±vÁ‰ưYæä »Óßt!°q& ăÆ›€"¾6«Đé…XñŸ¶¸s“¾°n̉KËZPºH¹&‡¼1ªvⳋC…¸¢3aBCo /ăÚTƯ®Ü…YØ(ʤK}!z W¢"jëˆÇˆå‰ÑJѼe&Qx1ÿÔ0»@oÆ₫̉ ¶¤ˆ¼Ñ\]0™•ñ́)*©RØ ;æ@†GßNđY²(6Seiî°u.‘¦ÎFIe#Qˆo B"n‹ÉhyN,ivƒ# Ï"£ˆ[ÔƒL‹k®³"@œ§è¶yB`đÄH»h¬À…Đ‹«yáºƠ8 ‚kùÜÄeDæ¡K@; ă;4ц“”bÆ51}ư‡·`÷ƒ#wÂË>¥r@,dṣ́$½~¥aIŒ]+:æPBÛ¹‰8Á)¬‚9éÑ­í ¨J¡tOñYf¦»*§€ö}c½ṭF,‡ÊĐÂÛÅ3NÈL@Æ]V¿P¹   _QQ$,!#‰{HƠô ưÖAlI$¦LÁmGó# À›ê4øôoT^Ûr€æbvxyc­Èøæ k”æ××€Ñ̃…-í¨ưráBTeàê÷b‚™Ebm»(êÑÁLáxJÇ—jơ rÉ•˜+\$c…ó1FY$ Û3uÆ̉º»(^£UÙÇVBS̀fÄ]ÿ°©r{QX‚̣å€áyArdÅ@ƨ0Q°¹à́̀A“2´‡%FDÑÙ¦)\Ÿ$]É̉EV>Èàw đùàŒ7»G•1.Z çäó¾}3‰0^ö‡£ áªLz¬ ƒ¥·$Iß¶¬»åÿüB aLVZđR¡—2IM†…*Yèh! a&N”FŒàu⧉ûê³Æ“ˆÎm˜ yLq÷ e”—.T ¸l¬¥†»d"[‚ư‰ÑÍÄÇ̃KY··ÀG<‡f‡,c¿"ă´JS^¢ˆF,Ä€'̀V‹₫cÇå¬{Èt¢̀ĐDSûti¯ÉwWËñ•Ñ̃@é”3‹NÎ!4ÖÍrH}ÖLè Ø63ÀEóñ „½÷ ƒ«³­l„‘{ˆ€i¿“q­ÉîHûN Nh2ú@”GⱫ|CM–…â¶‘q¦«¤ÅËvú±™'"V ë…¶-BêgdR"ê†3—Ø€æÛƯD¬ªL‚¥6k̀̉ƒC•”tĐƒÀ9̃Đ\&…øâLaá̀J=RøxOó́»̀Í3PH À£AéĐHŒtps„6i|8œÖX̉MI@‘[>đ´yå\äÝi1¸î()°åƒêg¡íËøœơ¡’%Hoöèt)¤§¸(­¤‚”c\¡KT AEº‡¡<dc™élăA2æS™c ›¨º•gÖ7VúsÎúª§̃<3¯©̉3¥m*¦d Q’ ° ‚M¦²0´HA£N.¢HS0(‡WëC»Jï¿Đ¢Tù m˜ßàå®$Sđk›lƠ öB8îDB©,hZÎÀª_Ñru„´ƒ4r‰¢xAUø`'n*%`¬•Gl°nêÚưj „)Wïë–ÏAḳ¡@ͦeÇJÛ%¾€WO7Äûº›ZˆcmknA<̣Än\(̉!Èb^$€3=«A>Æ¥BÓ³@Ă­ ́Ex´0™DR L¾¡é³¨ ËC˜PM·vf.ͬ„c%"”<ö•¬âÀ¥"ƒĐÇ©¨&*+°…©ÈÀƯ00™‚&3€}sZoâ›a­,Ă®‘‘Û¬7àÉ$:̉øÚ¶WĹ@Óụ̈‰Ë~ÉN$áđ(A´†KÑ< È PT²¨S˜ê&ÓÀÛ¡₫cé’™…`\!âdP¢yÓÊxT¯©ü‘Ç Pé Bo¦< XÇ‘¯®hqÚĐi£ƠLr!†áBc“Mª^ˆ>h)ú)‡—‰s˜̉qÊ-¨€>MØÊ8´—úÔ/á"œƒ(jœ•Nø3_3QƠ²;‰5!%ăeu?ă–xĐ̣çÿ0×=²$Í;Ù±‹˜s%Bư6!Uơ‘Ts¨/*4u;Óy9f…9a¯ EÎæ@j„̉oơA₫%çAZỉ‰˜Æ™­8ƺ8¸Đ̃ ̣™ét9?ûe;¥ 'hV}óoG̣¤Ñ…¥·°;«Çƒ́‰1ùÖ…È\Ï2LB "¸z=¹ÅĐÁ|ŒƠÅ!×ÀâSkJËîN×)œ!N?̣*„I­ÊÚ@n'¢hy±Y•"»p£Ụ ¸ °,<Èđ$đnjWƠMJ³©rnïÖÔun Ác§Rˆ½›sÚÇüñT«?HLGa Èª ₫Đ»ÙV®Fkp¨Îv’åáÇÖ2b¤ă|ØÊ2"£ÚÆÂ‘ÏưaÏI3¢Ïè·Ưj™…r¹£PÇà¬4n(ØƠ¸OĐÓ¯)w’ù,̀–Ơuß;q.…³µÚ¤ÿ̉;H|al ¿‰oYAm  ³ ¢ŒÊÅÉBP8ƒölô~º¤{(&/̉ø­Œ‡ÊFoÍzMPM®ůPV¢OOŸ³[Ê> ñC#Wâ ̀6ÙưZYcz‡ª<ï{B¦rÿ:Ÿ°ỈƠ•%NT¼WÊy91ïÛ÷M¯U°ax× ·P®F̉Rà>: ́´»g°88‡L[]a:0nÊQP¾N¢ÅT™ĐnXÖaÎ+“ØlE+ˆ µKĐ™ñ¬Ù ;[ulüNêÖ ƒç¨(¢(¤ÆÜÚ 6¢Ơw¶M1>7†ªá 1Ls`¼ÎÆÔ‚<8ömÅÑXÀ–Á8ŒÎ8ÍïË©ª`C1ÇFéÙ*P6‰¿å¨À"F6^Œ <Ë:Fé¶óŒœíN¬`` ‚?ÊêZ¶ïí…,#ÂHzu?oÉ¡‰¦B-Ö††€3 l˜I$­hấb6pÛ*ñ!%{ñ-2åß5Ç ỠCSϹËF I߸ăĐ'9y»¶qï¹°mV5±u?¸U2|D¥¶¦̀^Oob|Á´;äü †“n/«æÀßñzSY: /:Ε–ײ`ÍmEiÇgF÷A±%7Ü4|U tèåÓËÀfév†À]E°æ,Ń›tH²¢àY »m &0ºnFM,ÖRÑaYr̉X›pEÓJ‚«¬¨y&`r}itLL½Mpß”ôT#JâÊ”ưØÎơi…úysZ{́? î]F“eÏ\acÿdµMú!Ơ}C£¤ÔSs®ă0±?̉’Œ¿§€̀ׯ«¥`}}º\n9¥Hp›ôÑ9ávøÄC!lƠ5ƒYđ`ˇ̀å‰ÈøÁÈC°†Á*aO.ŒØÛơíi'b€3Z”$%Å sè|J‚½7“öiåVÎ:¦ăùº9“iS¦à0ĂuƯø×! :DQ„B 0<Ë\SOàʬĐu₫xg0́0A9¨ú{ü1æ®cÔ BÔT÷ºÁÊrÀ®úÆß²|à˜I8n|AUÙ¨Fˆ.,Đ…Ê…¹[ŒUá¡ÆTÑÂä¸vÉæsÔE Nă2E´JÚ—P¼&5ÁÊ›Q`, *Ơ¤³ĂL$>Í.±A¸+î<sI%Á€¨ÆÆ—j.¤sË5ª¦"ưÈŒ=ÓÓª“ï³ åqe¶³NªH¸ÿEi¡p飜«¥V2 V2˜Xß¼h:’ÖÆ2»'4 m7÷áaµjVÉ©đ–îè3LHûÑÆf“»í5¤9\ŸJ‘ÖÆ'ê{µ‹̀^…‹œ˜ “TÈ™/Cƒ l‰_Ø,§„K&Î艖ÍÑœMY¾PÍsëacGœ-L©MÜt0‡£Á¾Đè`g&₫£ ÷;@ƒA˜ê÷{ÍsTs•+Ó—OEơ…mœDââ8ŒúÅ󶱉ßA–Á©ªŒk¼›ï0Ÿ¯•ưaƒ;ÿ £z­T;¥3œ JoBƠÂ8ÎÆ'€î©̀sN‘å®xM;} (gG·n7ñ{mS&îpß'Á°̀x ¸r‡'ÖÁƯ2Ùí ‹ 77**G 'Ă£» ƒod¢ “ Nj&D X-ĂªP,êØ„¸¼,˜ú\ $ʼ¤EnåØêùĂœd~ Zl€ÊA•ª^öh4M~¨n‹¬~Svîtðh™ăH=™e±s':-ÿ*±¸­:Ơd`’’N(²ÄoƠÛA˜eMØ¢‰ÂØÍQ„̣I^”Ÿ*qù®B— 2't¶ªÓíVÑ»!hd̃#?ľ4ç #À”ĂYDIX—ä·¨̣$:YËRPx°*„mƒ!t$«´û˜ }M8}CØGȉ©° a×6Ƭ`í9}r^UT‘5 ç Œ:Øó(€#i vØ5€P$ ^Ïóm†¹(4`îâ¶gZd˜_J6ôĂ­‘¶QçY‚&À:¨Îhê½:QmÀfy £3ùÍ<^7bTÈbqϘ@Jï13¡jÔƯFt $1CY;! n¤Ơ{êPÊJë4 —Î=Û(]bÖèĂ£²FÍLBø¡n´Vs“Ïæ»ªäáXăè+5g •:€ú!vP7[F·×B 0h£7 2lk0Æ€sïÚ’@̀7=Wϼ#f@G×€•ú3đ!™xÏMyï)ÆokZXêàøĐ._Æ[mÖFuÁ‚̀JG¬¥%{Í9û2&7tX Ç{Pƒ0ªÊó̃×ÅÔ=jaè±.}‘KŸăaă+Ü` µ¶çÑ(̀F“-èÀ×% ·+r³£Œ^‚·*+º:(yhyw >n+§Z¾<5r”̉ œƠ¤aا{AưDôvø‚"₫”Ø.ß>iǃ›¨…–LJ87~½æ °éÓzƯÍTû†„3n£ĐỲr®ÔèØÄ’ĐŒ̣etÑ^«Üá«­½ă£H¬81ÛUÚ˜“‡µ¨`É´Xb/0v§ëŒ>¢´X?@đăhnq ¦Î3(æ˜ØÊEúpœtái‚‚4“P)ŒRƒ-6܃’;ußđux¨ÈˆÆ`Ö _{›M›…¸wbOX/Ù†h$³eF£Y‡\§˜[N¯µ05 AÙ M>H(£S H¿SF̣¨w£‡ø™«?XØ[b¹©Üm¿!x7¢à”â1ŵñZP‹°Lé6Uy6SC$°3²—"Ä› SB¢««jî/ ¨₫™·æh±Çđ‚LoüWC¢†*7²¸Æ¬Êœôƒ¢5^Jñëú …[º#ÑF¿FâîÀ2Új́óγ»s¶\ƠÑÄÆx@‰!N6À¨ h‰16̉[C’Êy‘ÁÀ„Û\º¹V M¦*qÀ}/84¯I)Pg–ô'Œ̉1Kt% 1–Î>ÜÀ wûA`0r5è½r!ûJ–`_í WD̃–fỌP¥sZO£đU/ÿ̃D™¸V¥3(—‘«£dªĂéb 4#}3 OZæzS<—D@k*¢A†Y—]©ªIü=dN½Ă^́ƠÁ-oJ³ob:điÆ^r5!H.Åđ)!1ÀÙYÖœ‚×H’O³ íÂaÇQˆà¥ư'auzÔ2!î¶¶Jà˜å}Đ̉ö±ºI»xaµ(ƯỤÈI†æåÔƯÇàÆfOÄ9l`®¶œc¨Âµô₫¢a°¾ _– s¦Æ×k9Ñ(_ ¥c¯°Ă)æñƠy=ƒTëü4 r"ª Ăơ‰¡hë³—̃Đ}<™3>·± X—#€Ơ15„¬µØÔDŒ‹Y'óƾIÖ¸ëĂb2M‰ø‹µ5¶ÈÅ‘˜"Q“'cmÚ6›ˆ“£¾]̣Ơ‰äÅJ,9Ë]™·éç–&I”nŒi‚v4ëîb!9Åæ¿—6>Œ̉͌ܥ.ÀØđ~Dt@3‹øœKÅ×ä–;å~à /`¿pNđÄ(øjâÊ öK—ƒ…uíü™Fåb“P‰‡èQ‰µ7¦kLŒU)*`ob<扗¸!< ;u„еkÙ¯ètøSÅ.Übj̀ΰ:Ÿ­ ơ†îo! ÿx̀¥ɪ’™̣ś™UJ±RaU{Èk ~́Û~[5Ïdê2,ˆ.÷âÜƠ_R8˜®³iơë\)öJÂé¤Á|JeêJØœ¿RNë¼âöJ& mlÖV‹=²¶Íáă NƯfΠ–;osGYAH%Ïó¦uËXíqi±@‹ °)6 13Ô«±º"£K}µ́* è¸R`™†Â~#€Ơd™û$ Ó.̃®ezr÷ÇÄÑVïGÊXaSLk>§Ä}rS?”₫)¼¨eôTƠ{_˽£'$Ú¬QS|6́ ”´0ö¨nZ1á½Í,¿Íç#‰.ñ•Q|ߨÄE|÷ˆ)ÚÁAaúCTñĂ–\cK¦JlX² `oë K̀n8ă+ŒJ…¦@Æạ̀a„ƠÓ(|"­Y”O)m-Ä97x×ÇèB«Đ0c³Lún¥à`S3N›î̀ƠwàUµ1uÉ×₫*˜œ ,b™NđRJ›‡…Ñ”`„U3©¥Ëµ¶ùzÖø†êœd d¹“ă₫̉=>8Tw‰̉°îeĂ2e‘U–¦.Ê€[µ,ñ<´-*F¶¢âlÚ—-gÄ](6}çĐu/˜ĂV#.35¤œ4´̀^Ë×,xú5),Æv˜„ö¥Ë®Œ>oÏÚ£Ơ‰©­Ă¢†7àö!’¿ñ¨OkBr¼ºK”4ˆÉ&éDYß‹íí]ăKºÆÂa¶vt¦Ơ—9Ư(RÈ"–Ѹ;n ‚€.LZ„Í–€®½GĐ! ’‹]Ë~ÅÂ8˜Àß@‡cbVaØ/¬E¡Uăđ7Ø l0a•¯‰&Œ8Å:S&¼9 ,‚âö…¾d‹†„!µ4|›÷yS0xø½ÓJpnö₫_DtÆ“I[lÑFƠưjâê 3|wt~Ä/Øéûuÿü|ÿộ7öǽœ]¾;bïÏÏ̃ïÿ2`—gøûè?/N/Ùû£ó_//ÙÏ¿%ûïߟ́ÿ|rÄNö…ËÅ₫óàèư%ûơƯÑ);ƒî=¾8b—ûđÁñ)ûơüø̣øô-vxpö₫·óă·ï.“wg'‡Gçx3ÜîÙ9}È̃ïŸ_]À8>…crwư\°ă Ë~=¾|wöá2q9{ĂöOc?>=°£ćôè?ߟ]\²³svüËû“ă£Ă;>=8ùpx|úvÀ~₫pÉNÏ.““ă_à—g„lÚÚe‚½a¿¼Û?½Üÿùøäø̣7¼ÚîÍñåéÑŬc²O³8øp²Î̃8vq‡6,çéåñù;?¾ø;Û¿°‹üömGÉû£ó7gç¿́Ÿ¬p₫Ç8]öÛÙ8X̃}89ŒÀ¢%‡Go.?  %Û¿¸øđË‘Yû‹K\ “vztptq±₫»8:ÿx|€ëp~ô~ÿøœ'gççĐËÙi ·0nßymNlx¸Ñ.N­>̉|8=%9?úÇçˆ:,FØư·çG¸â¢$¿Ÿœà6:la„-üäô·[~c¿¾;c¿œ¿ư!lJÎN?ưv-Ï₫E€Çû?ŸÁ ư|ÄNq<—g¸\@‡û¿́¿=º$EæÛ£Ó£óư“»xtp Ÿ^îŸÀ¸ÎN/₫ắñ₫‰í$Ù??¾€Î>\Ú ưpq„˜xj1ẹ̀ Ÿ…ƒ}æaÿüá29=»d;ÙÉÙ¢âá₫å>Ă_ ơùÑéáÑ9̃₫ÁÁ‡óưK–ÀǴâĂÅå₫ñ)í̀é₫øüĐQ,0{³|̣ἉÉå;{„]"&;A-.¶¸ù́ø »øpđÎl³ôĐ½Û¿`?²ưĂÇH—ÎÙÅűY“3ÓƒYÇÛW*^´2€œÆ Ç@ñD—k-ó¥}ƃ6áË₫N’r%+(/ˆ N›Èqì)sÍTßÑRÜ’ưµ†"cdh ‰×ôÄomB”UÍ%íB̃Đ¼l£„« ùU©r(z€ơ´é:5úå̀ƒ±w‡@¨vºŸ Dz®|.G¼>=”ƯVÀĂ Ê«Z÷ó59=7‡Ï̃ »/=:%YphO·ïÔ-ÄûíĂ1‚nˆi´đđ7Uë᩸”[, Û†ÍMÀƯ¥M€ǽTÜÚ —´ó¦™«¬P¥¹ơWÛˆs³½ñ™Ơ»ÆlײJ HÚ;¢¼ăñ•ƠÁ‚Ë ú\ô®²7Î&ÑÙFlĂ«yÁü ̉˜ñßö&fçk³7›G— b@ßBă¹±zzÛ&Ä9åÅp£!·äc˜ Û}=µ1Öăº‚Ü ºy¨Œ®Đ%1јmƒ˜q)ĺ »0÷ £¶`‹¢x¼æ¤ùĂ•3…Ê*Plá¦qíÊrăØ YÛeÊäËz$Û+¡âùÙ3-M†3ŒÆœBÊA¶5Ú»hpjqĂơÖ6 ej † ü׳ầx¯´cđPqWc˸vövo¸1–¸KmÙ³ƒmÖ…MÛÖ;„¤l)µJ’KsƯ´ Ù‰ïµ5ÓÅ('«øZùDVƯ~̃…z/#µ'Y¤– ¬æ×²ÓøÍñ* 2·ÛàN{Â~^în¸ 8pl̃—ƠôëRŒëơøÄ¬xtZ¡ơG—× e^°kUö̀yœ4åN¥C±“ơˆBØåLú́Ö1DfOH@.̣=ª́ߣ$ª ç× …ª "E°=n­Öù›h1₫ikRU³×»»···;×E½£ôơ®̉ÙƯ-z»·ËGH’ZŒöv3ycó KÔÏ¢BP‡>º$ṚÛÂ}`fƠª€’jPơ‚Ï Z‰Ë¼¥AÏBEßẠ̈ç¡kàî7wqXU]™‚ăeN˃)́P¹Â ¤T×7¬V …^o’ۘɰfnÁbâ¡*èˆû?_œ|¸<:ù-TH©”ÁG̀gÉÑj°Ẉé̀ƒ¿·F%́ăí̃.üăÂl²%ă)̣TMơ:âRƶëÊ 8;̉K &N¦=Á<9™ÏÀx®jeêjsƹ­82Cäđ.1©„.K=* ƯcǵlŒ­Ơ°wï9#›̀Ñ jØXk­ööñ/Än.‹AOD/{bó+à‘WêK+‚3`Wă ÁÍÈÎÅt–«9ÄñO‹¿|Å^W*ô6†@‚™%$t]$úp¡NZX?ĐR„×$ẨgC@¿NpÑCó üèÊ]̉0ñ =ɾ?A†™laºjL ]gϤđR),®£Í7 &‰Ê$ñ ØdC')‡HL­À·)X¦JäÜ×ÇDoฌt b˜ü7TÈÁALŒç´2Fwă\2[»6±ˆ[µskbp2…Q“‰]₫²Ôư<ëđV₫\W &ÖAÔ?¦^BøÙ̉§̃l"sUªÙd¾{;™ U óëY¾3©¦yç¾.ú Üꉽ Px˜Ô…5‹sĐf†AÊÔq‘‰/p´L^¶ÛM†/¶FøÇ̃îäå(a„™†‹#á-KgCÿ ú¥ëXMĂt6̀EU ]A¥:j¼WéÑ^5ưŸz:c•zÍ₫R\•³Ù̃n5íUÙȯpYO§\ÏMoa/fƯÿû)}2Mö·F{W£ư½Ư«¬Yb;ỎéÏØéÏëíô;=Xo§‡Øéáz;=ÂNÖÛé́ôÍz;}‹¾]o§ï°Ówëíô;=^o§'ØéÉz;=ÅNO×Ûévz¶̃Nßc§ï×Ûé9vz¾̃N/°Ó‹ơvz‰^®·Ó_±Ó_;:ƯN½ ¼|™Ç! ¹@”Í£B—Ç ́Íœ¢Æ'A®9$ÜW¶rT×gƦLŸÀH-lÇ)g¼øiëƠÖÎS?ÓdâÄøpÙo÷fg’µÏÉ!ư¦6ß‚sͬ2=æWJW[#ü÷Î~̀dĂNÔí§çÏ_ftäÛ µåßÈ\ Ïl±Èrkt¢nI:pÅlK6dĐŒùf~,ëX´Ÿ·àä\Û¢á-ËĂ%¿Ă³(â$n·Ft÷2>eöé}—ô>Ö±P[ ¬m¡Đ±5¾~́ºÿ4Ơl¾_U[#óÇf¦ºoêĉ̃Yú˜ ª®4Eüó¾“< R¥[#óǺ‡‘­ưûơ#Ư})ơp D́µQj&Ƈrº5¢7³l‡rjî|ë[1ßbÍX‘‰ñ[=Ăé½Ơ³ÍLï­Vơ¬wjôvưÓúSúw3ÓúÈ5¦,ơÎ̀5ØÈä&5f́$íï'9ÙC1Α{E?ŸäTßÈ<·ó„¿Ÿæ$sQ¥¡_½tSuOà„sQĐh]ISlîÜ}§w_(ëÀ‰ă-đ²­ 'dñûÖH¿ư"ÔC¦ˆg:ưûäÎtÖñ¡àñá"œ^v’đ÷Sœ&ÚMéß'g7¥iDÅ¿́K?Ç É[€X¿¿Á€Aœưù´·zö¦ÎóÓTf8çà÷SÚƠ·zæx«ùû Nv.œ"ü~bÓ|Ï!ÙN’~=±)–vvâ«_ ë9‘WPFgk₫~âYüîíSă°\Nå”öÓưzÚ( p”ĐœÍÿ®Yü6)ú÷ë´I=pr̃•ÿ~’“u®ôè瓜*¹̉ưßOs’+½ùäINØ(Ưø×`égø¤Tn „0ü¯8=ÁY…W@ y‘ sEE4F₫9ƠI¡ç÷]’ûBY‡ ÿd ’ZÖfĂ?±c?ùă—䓸íöM¨Û'áê¡ÁN2[3ßc“Ó{Uư‰Øơ7a®~"óÍj²ON«^§€̣'6oƠz’V¶Ç’Ÿ°|º₫@¨'ˆµ~ưđk̉Oï+êŸnAªùÚDư"µ9iö¯?2†éÓÈd9ƒIÀ¿̉)@ư˜üû'€)À¿â)pïr₫I'r«%Ñ5₫ñg„Ùû÷Ÿy*e:SîfC?ÿŒa£g[PdmçĐÙxL3‘…J²mÎÆă!Ö5O₫”†¨³¢1©âO?%52üÿë×ï‹àï· RÎÚ|VS"ưûäLR³²&èß§%rŸoAy£µa‚˜iˆÿ|ưäó€iB©TÄy÷ç“C{Y»?ŸœM•f†äí₫|Z~±µÆÖFáeœY₫/Ê,Eu(ƼÎ+ÚƯ|̣ô€B^̀O˜Ă—ó"ƯÁÿ¿₫Ĩ—3\nAÁÀµq†KQVn[#øéærßE\®Ïµ nóøôüù·ăBTi6̃áúñxĂ¿ï^₫ºu×¶—öö‚­‘ưë¾K°\Ơ±…Óî-1ië •ª₫Ug¸«ÓƠ₫WáƠ₫Wá'Tg˜ß3WßÜÆ‘${»W*›Ă(?J₫œWAQ.2 netcdf.closeHoctave-netcdf.html#netcdf_002ecreate*3.2.2.3 netcdf.createHoctave-netcdf.html#netcdf_002eendDef*3.2.2.4 netcdf.endDefBoctave-netcdf.html#netcdf_002einq$3.2.2.5 netcdf.inqNoctave-netcdf.html#netcdf_002einqFormat03.2.2.6 netcdf.inqFormatJoctave-netcdf.html#netcdf_002einqGrps,3.2.2.7 netcdf.inqGrpsToctave-netcdf.html#netcdf_002einqUnlimDims63.2.2.8 netcdf.inqUnlimDimsDoctave-netcdf.html#netcdf_002eopen&3.2.2.9 netcdf.openFoctave-netcdf.html#netcdf_002ereDef*3.2.2.10 netcdf.reDefJoctave-netcdf.html#netcdf_002esetFill.3.2.2.11 netcdf.setFillDoctave-netcdf.html#netcdf_002esync(3.2.2.12 netcdf.syncvoctave-netcdf.html#Low_002dlevel-functions-_002d-Dimensions 3.2.3 DimensionsHoctave-netcdf.html#netcdf_002edefDim*3.2.3.1 netcdf.defDimHoctave-netcdf.html#netcdf_002einqDim*3.2.3.2 netcdf.inqDimLoctave-netcdf.html#netcdf_002einqDimID.3.2.3.3 netcdf.inqDimIDNoctave-netcdf.html#netcdf_002erenameDim03.2.3.4 netcdf.renameDimnoctave-netcdf.html#Low_002dlevel-functions-_002d-Groups3.2.4 GroupsHoctave-netcdf.html#netcdf_002edefGrp*3.2.4.1 netcdf.defGrpNoctave-netcdf.html#netcdf_002einqDimIDs03.2.4.2 netcdf.inqDimIDsXoctave-netcdf.html#netcdf_002einqGrpFullNcid:3.2.4.3 netcdf.inqGrpFullNcidPoctave-netcdf.html#netcdf_002einqGrpName23.2.4.4 netcdf.inqGrpNameXoctave-netcdf.html#netcdf_002einqGrpNameFull:3.2.4.5 netcdf.inqGrpNameFullToctave-netcdf.html#netcdf_002einqGrpParent63.2.4.6 netcdf.inqGrpParentJoctave-netcdf.html#netcdf_002einqNcid,3.2.4.7 netcdf.inqNcidNoctave-netcdf.html#netcdf_002einqVarIDs03.2.4.8 netcdf.inqVarIDstoctave-netcdf.html#Low_002dlevel-functions-_002d-Variables3.2.5 VariablesHoctave-netcdf.html#netcdf_002edefVar*3.2.5.1 netcdf.defVarXoctave-netcdf.html#netcdf_002edefVarChunking:3.2.5.2 netcdf.defVarChunkingVoctave-netcdf.html#netcdf_002edefVarDeflate83.2.5.3 netcdf.defVarDeflatePoctave-netcdf.html#netcdf_002edefVarFill23.2.5.4 netcdf.defVarFill\octave-netcdf.html#netcdf_002edefVarFletcher32>3.2.5.5 netcdf.defVarFletcher32Hoctave-netcdf.html#netcdf_002egetVar*3.2.5.6 netcdf.getVarHoctave-netcdf.html#netcdf_002einqVar*3.2.5.7 netcdf.inqVarXoctave-netcdf.html#netcdf_002einqVarChunking:3.2.5.8 netcdf.inqVarChunkingVoctave-netcdf.html#netcdf_002einqVarDeflate83.2.5.9 netcdf.inqVarDeflatePoctave-netcdf.html#netcdf_002einqVarFill43.2.5.10 netcdf.inqVarFill\octave-netcdf.html#netcdf_002einqVarFletcher32@3.2.5.11 netcdf.inqVarFletcher32Loctave-netcdf.html#netcdf_002einqVarID03.2.5.12 netcdf.inqVarIDHoctave-netcdf.html#netcdf_002eputVar,3.2.5.13 netcdf.putVarNoctave-netcdf.html#netcdf_002erenameVar23.2.5.14 netcdf.renameVarvoctave-netcdf.html#Low_002dlevel-functions-_002d-Attributes 3.2.6 AttributesJoctave-netcdf.html#netcdf_002ecopyAtt,3.2.6.1 netcdf.copyAttHoctave-netcdf.html#netcdf_002edelAtt*3.2.6.2 netcdf.delAttHoctave-netcdf.html#netcdf_002egetAtt*3.2.6.3 netcdf.getAttHoctave-netcdf.html#netcdf_002einqAtt*3.2.6.4 netcdf.inqAttLoctave-netcdf.html#netcdf_002einqAttID.3.2.6.5 netcdf.inqAttIDPoctave-netcdf.html#netcdf_002einqAttName23.2.6.6 netcdf.inqAttNameHoctave-netcdf.html#netcdf_002eputAtt*3.2.6.7 netcdf.putAttNoctave-netcdf.html#netcdf_002erenameAtt03.2.6.8 netcdf.renameAttoctave-netcdf.html#Low_002dlevel-functions-_002d-User_002dDefined-Types03.2.7 User-Defined TypesJoctave-netcdf.html#netcdf_002edefVlen,3.2.7.1 netcdf.defVlenRoctave-netcdf.html#netcdf_002einqUserType43.2.7.2 netcdf.inqUserTypeJoctave-netcdf.html#netcdf_002einqVlen,3.2.7.3 netcdf.inqVlentoctave-netcdf.html#Low_002dlevel-functions-_002d-Utilities3.2.8 UtilitiesRoctave-netcdf.html#netcdf_002egetConstant43.2.8.1 netcdf.getConstant\octave-netcdf.html#netcdf_002egetConstantNames>3.2.8.2 netcdf.getConstantNames@octave-netcdf.html#Test-function"3.3 Test functionDoctave-netcdf.html#test_005fnetcdf"3.3.1 test_netcdf4octave-netcdf.html#CopyingJAppendix A GNU General Public License0octave-netcdf.html#Index Indexnetcdf-1.0.20/doc/octave-netcdf.qhc0000644000000000000000000031000015205072111013733 0ustar00SQLite format 3@ ##.ú ²¨†’$ º  w † ä h ó z ó H¾"¾fó| ¨b''tableVersionFilterVersionFilterCREATE TABLE VersionFilter (Version TEXT, FilterId INTEGER)n++tableComponentFilterComponentFilterCREATE TABLE ComponentFilter (ComponentName TEXT, FilterId INTEGER)u--tableComponentMappingComponentMappingCREATE TABLE ComponentMapping (ComponentId INTEGER, NamespaceId INTEGER)q))tableComponentTableComponentTableCREATE TABLE ComponentTable (ComponentId INTEGER PRIMARY KEY, Name TEXT)VtableFilterFilterCREATE TABLE Filter (FilterId INTEGER PRIMARY KEY, Name TEXT)b%%tableVersionTableVersionTableCREATE TABLE VersionTable (NamespaceId INTEGER, Version TEXT)))mtableTimeStampTableTimeStampTableCREATE TABLE TimeStampTable (NamespaceId INTEGER, FolderId INTEGER, FilePath TEXT, Size INTEGER, TimeStamp TEXT)551tableOptimizedFilterTableOptimizedFilterTableCREATE TABLE OptimizedFilterTable (NamespaceId INTEGER, FilterAttributeId INTEGER)(77otableFileAttributeSetTableFileAttributeSetTableCREATE TABLE FileAttributeSetTable (NamespaceId INTEGER, FilterAttributeSetId INTEGER, FilterAttributeId INTEGER) 33/tableContentsFilterTableContentsFilterTableCREATE TABLE ContentsFilterTable (FilterAttributeId INTEGER, ContentsId INTEGER )w --!tableIndexFilterTableIndexFilterTable CREATE TABLE IndexFilterTable (FilterAttributeId INTEGER, IndexId INTEGER)s ++tableFileFilterTableFileFilterTable CREATE TABLE FileFilterTable (FilterAttributeId INTEGER, FileId INTEGER)z ''3tableContentsTableContentsTable CREATE TABLE ContentsTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Data BLOB) !!‚ tableIndexTableIndexTable CREATE TABLE IndexTable (Id INTEGER PRIMARY KEY, Name TEXT, Identifier TEXT, NamespaceId INTEGER, FileId INTEGER, Anchor TEXT)''MtableFileNameTableFileNameTable CREATE TABLE FileNameTable (FolderId INTEGER, Name TEXT, FileId INTEGER PRIMARY KEY, Title TEXT)e'' tableSettingsTableSettingsTableCREATE TABLE SettingsTable (Key TEXT PRIMARY KEY, Value BLOB )9M'indexsqlite_autoindex_SettingsTable_1SettingsTableh##tableFilterTableFilterTableCREATE TABLE FilterTable (NameId INTEGER, FilterAttributeId INTEGER )l++tableFilterNameTableFilterNameTableCREATE TABLE FilterNameTable (Id INTEGER PRIMARY KEY, Name TEXT ){55tableFilterAttributeTableFilterAttributeTableCREATE TABLE FilterAttributeTable (Id INTEGER PRIMARY KEY, Name TEXT )u##1tableFolderTableFolderTableCREATE TABLE FolderTable (Id INTEGER PRIMARY KEY, NamespaceId INTEGER, Name TEXT )x))+tableNamespaceTableNamespaceTableCREATE TABLE NamespaceTable (Id INTEGER PRIMARY KEY, Name TEXT, FilePath TEXT ) ËË3I/octave.community.octave-netcdfoctave-netcdf.qch ÷÷ doc    #Ô¶{fS>#9FullTextSearchFallback%CreationTimeju) HideAddressBar- EnableAddressBarA EnableDocumentationManager; HideFilterFunctionality? EnableFilterFunctionality*-;LastRegisterTime2026-05-25T12:12:54.328 ?Z~“Î?k²́9FullTextSearchFallback%CreationTime)HideAddressBar-EnableAddressBarAEnableDocumentationManager;HideFilterFunctionality?EnableFilterFunctionality- LastRegisterTime ‘º‘' //octave-netcdf.cssoctave-netcdf.cssD 1goctave-netcdf.htmlOctave NetCDF - A NetCDF interface for Octave Hvç̉½¨vY6í¸‰T Ô ¯ c <  î Å ’ o J ! ₫ Ă œ u J  ê Ă – _ 0 ù Æ p 7 Ù¤u:́µ€QëÄ—\3 従d=Á˜g>Ô™v!H# +test_netcdftest_005fnetcdf9G; Cnetcdf.getConstantNamesnetcdf_002egetConstantNames/F1 9netcdf.getConstantnetcdf_002egetConstant7E [UtilitiesLow_002dlevel-functions-_002d-Utilities'D) 1netcdf.inqVlennetcdf_002einqVlen/C1 9netcdf.inqUserTypenetcdf_002einqUserType'B) 1netcdf.defVlennetcdf_002edefVlenMA1 uUser-Defined TypesLow_002dlevel-functions-_002d-User_002dDefined-Types+@- 5netcdf.renameAttnetcdf_002erenameAtt%?' /netcdf.putAttnetcdf_002eputAtt->/ 7netcdf.inqAttNamenetcdf_002einqAttName)=+ 3netcdf.inqAttIDnetcdf_002einqAttID%<' /netcdf.inqAttnetcdf_002einqAtt%;' /netcdf.getAttnetcdf_002egetAtt%:' /netcdf.delAttnetcdf_002edelAtt'9) 1netcdf.copyAttnetcdf_002ecopyAtt98! ]AttributesLow_002dlevel-functions-_002d-Attributes+7- 5netcdf.renameVarnetcdf_002erenameVar%6' /netcdf.putVarnetcdf_002eputVar)5+ 3netcdf.inqVarIDnetcdf_002einqVarID94; Cnetcdf.inqVarFletcher32netcdf_002einqVarFletcher32-3/ 7netcdf.inqVarFillnetcdf_002einqVarFill325 =netcdf.inqVarDeflatenetcdf_002einqVarDeflate517 ?netcdf.inqVarChunkingnetcdf_002einqVarChunking%0' /netcdf.inqVarnetcdf_002einqVar%/' /netcdf.getVarnetcdf_002egetVar9.; Cnetcdf.defVarFletcher32netcdf_002edefVarFletcher32--/ 7netcdf.defVarFillnetcdf_002edefVarFill3,5 =netcdf.defVarDeflatenetcdf_002edefVarDeflate5+7 ?netcdf.defVarChunkingnetcdf_002edefVarChunking%*' /netcdf.defVarnetcdf_002edefVar7) [VariablesLow_002dlevel-functions-_002d-Variables+(- 5netcdf.inqVarIDsnetcdf_002einqVarIDs'') 1netcdf.inqNcidnetcdf_002einqNcid1&3 ;netcdf.inqGrpParentnetcdf_002einqGrpParent5%7 ?netcdf.inqGrpNameFullnetcdf_002einqGrpNameFull-$/ 7netcdf.inqGrpNamenetcdf_002einqGrpName5#7 ?netcdf.inqGrpFullNcidnetcdf_002einqGrpFullNcid+"- 5netcdf.inqDimIDsnetcdf_002einqDimIDs%!' /netcdf.defGrpnetcdf_002edefGrp1  UGroupsLow_002dlevel-functions-_002d-Groups+- 5netcdf.renameDimnetcdf_002erenameDim)+ 3netcdf.inqDimIDnetcdf_002einqDimID%' /netcdf.inqDimnetcdf_002einqDim%' /netcdf.defDimnetcdf_002edefDim9! ]DimensionsLow_002dlevel-functions-_002d-Dimensions!# +netcdf.syncnetcdf_002esync') 1netcdf.setFillnetcdf_002esetFill#% -netcdf.reDefnetcdf_002ereDef!# +netcdf.opennetcdf_002eopen13 ;netcdf.inqUnlimDimsnetcdf_002einqUnlimDims') 1netcdf.inqGrpsnetcdf_002einqGrps+- 5netcdf.inqFormatnetcdf_002einqFormat! )netcdf.inqnetcdf_002einq%' /netcdf.endDefnetcdf_002eendDef%' /netcdf.createnetcdf_002ecreate#% -netcdf.closenetcdf_002eclose#% -netcdf.abortnetcdf_002eabortC+ gFile OperationsLow_002dlevel-functions-_002d-File-Operations9 ; Cnetcdf.setDefaultFormatnetcdf_002esetDefaultFormat3 5 =netcdf.setChunkCachenetcdf_002esetChunkCache- / 7netcdf.inqLibVersnetcdf_002einqLibVers3 5 =netcdf.getChunkCachenetcdf_002egetChunkCacheG / kLibrary FunctionsLow_002dlevel-functions-_002d-Library-Functions!' 'ncwriteschemancwriteschema! !ncwriteattncwriteatt ncwritencwrite ncreadattncreadatt ncreadncread ncinfoncinfo ncdispncdisp nccreatenccreate mmÛ ¶$octave-netcdf.htmlhOctave NetCDF - A NetCDF interface for Octave ManualRoctave-netcdf.html#Installing-and-loading01 Installing and loadingPoctave-netcdf.html#Online-Direct-install21.1 Online Direct installNoctave-netcdf.html#Off_002dline-install(1.2 Off-line install4octave-netcdf.html#Loading1.3 LoadingNoctave-netcdf.html#Basic-Usage-Overview,2 Basic Usage OverviewVoctave-netcdf.html#High-level-functionality82.1 High level functionalityToctave-netcdf.html#Low-level-functionality62.2 Low level functionalityJoctave-netcdf.html#Function-Reference(3 Function ReferenceVoctave-netcdf.html#High_002dlevel-functions03.1 High-level functions6octave-netcdf.html#nccreate3.1.1 nccreate2octave-netcdf.html#ncdisp3.1.2 ncdisp2octave-netcdf.html#ncinfo3.1.3 ncinfo2octave-netcdf.html#ncread3.1.4 ncread8octave-netcdf.html#ncreadatt3.1.5 ncreadatt4octave-netcdf.html#ncwrite3.1.6 ncwrite:octave-netcdf.html#ncwriteatt 3.1.7 ncwriteatt@octave-netcdf.html#ncwriteschema&3.1.8 ncwriteschemaToctave-netcdf.html#Low_002dlevel-functions.3.2 Low-level functions„octave-netcdf.html#Low_002dlevel-functions-_002d-Library-Functions.3.2.1 Library FunctionsVoctave-netcdf.html#netcdf_002egetChunkCache83.2.1.1 netcdf.getChunkCachePoctave-netcdf.html#netcdf_002einqLibVers23.2.1.2 netcdf.inqLibVersVoctave-netcdf.html#netcdf_002esetChunkCache83.2.1.3 netcdf.setChunkCache\octave-netcdf.html#netcdf_002esetDefaultFormat>3.2.1.4 netcdf.setDefaultFormat€octave-netcdf.html#Low_002dlevel-functions-_002d-File-Operations*3.2.2 File OperationsFoctave-netcdf.html#netcdf_002eabort(3.2.2.1 netcdf.abortFoctave-netcdf.html#netcdf_002eclose(3.2.2      ̀̀2 /=octave-netcdf.qchp2026-05-25T16:12:54.321Z ûû  øødoc ûû  .2 netcdf.closeHoctave-netcdf.html#netcdf_002ecreate*3.2.2.3 netcdf.createHoctave-netcdf.html#netcdf_002eendDef*3.2.2.4 netcdf.endDefBoctave-netcdf.html#netcdf_002einq$3.2.2.5 netcdf.inqNoctave-netcdf.html#netcdf_002einqFormat03.2.2.6 netcdf.inqFormatJoctave-netcdf.html#netcdf_002einqGrps,3.2.2.7 netcdf.inqGrpsToctave-netcdf.html#netcdf_002einqUnlimDims63.2.2.8 netcdf.inqUnlimDimsDoctave-netcdf.html#netcdf_002eopen&3.2.2.9 netcdf.openFoctave-netcdf.html#netcdf_002ereDef*3.2.2.10 netcdf.reDefJoctave-netcdf.html#netcdf_002esetFill.3.2.2.11 netcdf.setFillDoctave-netcdf.html#netcdf_002esync(3.2.2.12 netcdf.syncvoctave-netcdf.html#Low_002dlevel-functions-_002d-Dimensions 3.2.3 DimensionsHoctave-netcdf.html#netcdf_002edefDim*3.2.3.1 netcdf.defDimHoctave-netcdf.html#netcdf_002einqDim*3.2.3.2 netcdf.inqDimLoctave-netcdf.html#netcdf_002einqDimID.3.2.3.3 netcdf.inqDimIDNoctave-netcdf.html#netcdf_002erenameDim03.2.3.4 netcdf.renameDimnoctave-netcdf.html#Low_002dlevel-functions-_002d-Groups3.2.4 GroupsHoctave-netcdf.html#netcdf_002edefGrp*3.2.4.1 netcdf.defGrpNoctave-netcdf.html#netcdf_002einqDimIDs03.2.4.2 netcdf.inqDimIDsXoctave-netcdf.html#netcdf_002einqGrpFullNcid:3.2.4.3 netcdf.inqGrpFullNcidPoctave-netcdf.html#netcdf_002einqGrpName23.2.4.4 netcdf.inqGrpNameXoctave-netcdf.html#netcdf_002einqGrpNameFull:3.2.4.5 netcdf.inqGrpNameFullToctave-netcdf.html#netcdf_002einqGrpParent63.2.4.6 netcdf.inqGrpParentJoctave-netcdf.html#netcdf_002einqNcid,3.2.4.7 netcdf.inqNcidNoctave-netcdf.html#netcdf_002einqVarIDs03.2.4.8 netcdf.inqVarIDstoctave-netcdf.html#Low_002dlevel-functions-_002d-Variables3.2.5 VariablesHoctave-netcdf.html#netcdf_002edefVar*3.2.5.1 netcdf.defVarXoctave-netcdf.html#netcdf_002edefVarChunking:3.2.5.2 netcdf.defVarChunkingVoctave-netcdf.html#netcdf_002edefVarDeflate83.2.5.3 netcdf.defVarDeflatePoctave-netcdf.html#netcdf_002edefVarFill23.2.5.4 netcdf.defVarFill\octave-netcdf.html#netcdf_002edefVarFletcher32>3.2.5.5 netcdf.defVarFletcher32Hoctave-netcdf.html#netcdf_002egetVar*3.2.5.6 netcdf.getVarHoctave-netcdf.html#netcdf_002einqVar*3.2.5.7 netcdf.inqVarXoctave-netcdf.html#netcdf_002einqVarChunking:3.2.5.8 netcdf.inqVarChunkingVoctave-netcdf.html#netcdf_002einqVarDeflate83.2.5.9 netcdf.inqVarDeflatePoctave-netcdf.html#netcdf_002einqVarFill43.2.5.10 netcdf.inqVarFill\octave-netcdf.html#netcdf_002einqVarFletcher32@3.2.5.11 netcdf.inqVarFletcher32Loctave-netcdf.html#netcdf_002einqVarID03.2.5.12 netcdf.inqVarIDHoctave-netcdf.html#netcdf_002eputVar,3.2.5.13 netcdf.putVarNoctave-netcdf.html#netcdf_002erenameVar23.2.5.14 netcdf.renameVarvoctave-netcdf.html#Low_002dlevel-functions-_002d-Attributes 3.2.6 AttributesJoctave-netcdf.html#netcdf_002ecopyAtt,3.2.6.1 netcdf.copyAttHoctave-netcdf.html#netcdf_002edelAtt*3.2.6.2 netcdf.delAttHoctave-netcdf.html#netcdf_002egetAtt*3.2.6.3 netcdf.getAttHoctave-netcdf.html#netcdf_002einqAtt*3.2.6.4 netcdf.inqAttLoctave-netcdf.html#netcdf_002einqAttID.3.2.6.5 netcdf.inqAttIDPoctave-netcdf.html#netcdf_002einqAttName23.2.6.6 netcdf.inqAttNameHoctave-netcdf.html#netcdf_002eputAtt*3.2.6.7 netcdf.putAttNoctave-netcdf.html#netcdf_002erenameAtt03.2.6.8 netcdf.renameAttoctave-netcdf.html#Low_002dlevel-functions-_002d-User_002dDefined-Types03.2.7 User-Defined TypesJoctave-netcdf.html#netcdf_002edefVlen,3.2.7.1 netcdf.defVlenRoctave-netcdf.html#netcdf_002einqUserType43.2.7.2 netcdf.inqUserTypeJoctave-netcdf.html#netcdf_002einqVlen,3.2.7.3 netcdf.inqVlentoctave-netcdf.html#Low_002dlevel-functions-_002d-Utilities3.2.8 UtilitiesRoctave-netcdf.html#netcdf_002egetConstant43.2.8.1 netcdf.getConstant\octave-netcdf.html#netcdf_002egetConstantNames>3.2.8.2 netcdf.getConstantNames@octave-netcdf.html#Test-function"3.3 Test functionDoctave-netcdf.html#test_005fnetcdf"3.3.1 test_netcdf4octave-netcdf.html#CopyingJAppendix A GNU General Public License0octave-netcdf.html#Index Indexnetcdf-1.0.20/doc/octave-netcdf.texi0000644000000000000000000001316115205072111014141 0ustar00\input texinfo @c -*-texinfo-*- @c Copyright (c) 2022-2025, John Donoghue @c Octave NetCDF - A NetCDF interface for Octave @c For manually generating the documentation use @c LANGUAGE=en makeinfo --html --no-split octave-netcdf.texi @c %*** Start of HEADER @setfilename octave-netcdf.info @settitle Octave NetCDF - A NetCDF interface for Octave @afourpaper @paragraphindent 0 @finalout @set COPYRIGHT_DATE 2022-@value{YEAR} @c @afourwide @c %*** End of the HEADER @include version.texi @include macros.texi @c %*** Start of TITLEPAGE @titlepage @c @center @image{octave-netcdf-logo} @vskip 0pt plus 1filll @title Octave NetCDF Toolkit @value{VERSION} @subtitle NetCDF functions for @acronym{GNU} Octave. @author John Donoghue @page @vskip 0pt plus 1filll Copyright @copyright{} @value{COPYRIGHT_DATE} John Donoghue 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 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 same conditions as for modified versions. @page @heading Distribution The @acronym{GNU} Octave NetCDF package is @dfn{free} software. Free software is a matter of the users' freedom to run, copy, distribute, study, change and improve the software. This means that everyone is free to use it and free to redistribute it on certain conditions. The @acronym{GNU} Octave NetCDF package is not, however, in the public domain. It is copyrighted and there are restrictions on its distribution, but the restrictions are designed to ensure that others will have the same freedom to use and redistribute Octave that you have. The precise conditions can be found in the @acronym{GNU} General Public License that comes with the @acronym{GNU} Octave NetCDF package and that also appears in @ref{Copying}. To download a copy of the @acronym{GNU} Octave NetCDF package, please visit @url{https://gnu-octave.github.io/octave-netcdf/}. @end titlepage @c %*** End of TITLEPAGE @dircategory Math @direntry * NetCDF for Octave: (netcdf). NetCDF Toolbox for Octave @end direntry @c %*** Start of BODY @contents @ifnottex @node Top @top Introduction The Octave NetCDF toolkit is a set of NetCDF routines for GNU Octave @end ifnottex @menu * Installing and loading:: Installing and loading the toolkit * Basic Usage Overview:: Basic Usage Overview * Function Reference:: Toolkit functions * Copying:: Copying * Index:: Index @end menu @c ------------------------------------------------------------------------- @node Installing and loading @chapter Installing and loading @cindex Installing and loading The toolkit must be installed and then loaded to be used. It can be installed in @acronym{GNU} Octave directly from the website, or can be installed in an off-line mode via a downloaded tarball. The toolkit has a dependency on the netcdf library (@url{https://www.unidata.ucar.edu/software/netcdf/}), so it must be installed in order to successfully install the toolkit. The toolkit must be then be loaded once per each @acronym{GNU} Octave session in order to use its functionality. @section Online Direct install @cindex Online install With an internet connection available, the package can be installed from octave-forge using the following command within @acronym{GNU} Octave: @example pkg install -forge netcdf @end example The latest released version of the toolkit will be downloaded and installed. @section Off-line install @cindex Off-line install With the toolkit package already downloaded, and in the current directory when running @acronym{GNU} Octave, the package can be installed using the following command within @acronym{GNU} Octave: @example pkg install netcdf-@value{VERSION}.tar.gz @end example @section Loading @cindex Loading Regardless of the method of installing the toolkit, in order to use its functions, the toolkit must be loaded using the pkg load command: @example pkg load netcdf @end example The toolkit must be loaded on each @acronym{GNU} Octave session. @c ------------------------------------------------------------------------- @node Basic Usage Overview @chapter Basic Usage Overview @cindex Basic Usage Overview The toolkit provides high and level functionality for reading and writing NetCDF format files. @section High level functionality @cindex High level functionality The toolkit provides the following high level functions: @itemize @bullet @item nccreate @item ncdisp @item ncinfo @item ncreadatt @item ncread @item ncwriteatt @item ncwrite @item ncwriteschema @end itemize @section Low level functionality @cindex Low level functionality The package aims to implement the netcdf interface of MATLAB in GNU Octave, however @acronym{GNU} Octave does not support the import function but the functions are available as netcdf.functionname @c ------------------------------------------------------------------------- @node Function Reference @chapter Function Reference @cindex Function Reference The functions currently available in the toolkit are described below; @include functions.texi @c ------------------------------------------------------------------------- @include gpl.texi @c ------------------------------------------------------------------------- @node Index @unnumbered Index @printindex cp @bye netcdf-1.0.20/doc/version.texi0000644000000000000000000000015315205072111013101 0ustar00@c autogenerated from Makefile @set VERSION 1.0.20 @set PACKAGE netcdf @set DATE 2026-05-25 @set YEAR 2026 netcdf-1.0.20/inst/0000755000000000000000000000000015205072111010732 5ustar00netcdf-1.0.20/inst/+netcdf/0000755000000000000000000000000015205072111012250 5ustar00netcdf-1.0.20/inst/+netcdf/abort.m0000644000000000000000000000177215205072111013544 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.abort(@var{ncid}) ## Aborts all changes since the last time the dataset entered in define mode. ## @end deftypefn function varargout = abort(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_abort (varargin{:}); else netcdf_abort (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/close.m0000644000000000000000000000173515205072111013541 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.close(@var{ncid}) ## Close the NetCDF file with the id @var{ncid}. ## @end deftypefn function varargout = close(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_close (varargin{:}); else netcdf_close (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/copyAtt.m0000644000000000000000000000244715205072111014060 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) ## Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} ## to the variable @var{varid_out} in the data set @var{ncid_out}. ## ## To copy a global attribute use netcdf.getConstant("global") for @var{varid} or @var{varid_out}. ## @seealso{netcdf.getAtt,netcdf.getConstant} ## @end deftypefn function varargout = copyAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_copyAtt (varargin{:}); else netcdf_copyAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/create.m0000644000000000000000000000333315205072111013673 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{ncid} =} netcdf.create(@var{filename},@var{mode}) ## Creates the file named @var{filename} in the mode @var{mode}. ## ## @var{mode} can have the following values: ## @table @asis ## @item "clobber" (overwrite existing files), ## @item "noclobber" (prevent to overwrite existing files) ## @item "64bit_offset" (use the 64bit-offset format), ## @item "netcdf4" (use the NetCDF4, i.e. HDF5 format) or ## @item "share" (concurrent reading of the dataset). ## @end table ## @var{mode} can also be the numeric value return by netcdf.getConstant. In the later-case it can be combined with a bitwise-or. ## @end deftypefn ## @subsubheading Example ## @example ## mode = bitor(netcdf.getConstant("classic_model"), ... ## netcdf.getConstant("netcdf4")); ## ncid = netcdf.create("test.nc",mode); ## @end example ## @seealso {netcdf.open, netcdf.close} function varargout = create(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_create (varargin{:}); else netcdf_create (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defDim.m0000644000000000000000000000214215205072111013615 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{dimid} =} netcdf.defDim(@var{ncid},@var{name},@var{len}) ## Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. ## ## The id of the dimension is returned. ## @end deftypefn function varargout = defDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defDim (varargin{:}); else netcdf_defDim (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defGrp.m0000644000000000000000000000201215205072111013630 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{new_ncid} =} netcdf.defGrp(@var{ncid},@var{name}) ## Define a group in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = defGrp(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defGrp (varargin{:}); else netcdf_defGrp (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVar.m0000644000000000000000000000260015205072111013633 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) ## Defines a variable with the name @var{name} in the dataset @var{ncid}. ## ## @var{xtype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", ## "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. ## ## The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). ## ## The variable id is returned. ## @end deftypefn function varargout = defVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVar (varargin{:}); else netcdf_defVar (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVarChunking.m0000644000000000000000000000241015205072111015321 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) ## Define the chunking settings of NetCDF variable @var{varid}. ## ## If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}.@* ## If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. ## @end deftypefn function varargout = defVarChunking(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarChunking (varargin{:}); else netcdf_defVarChunking (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVarDeflate.m0000644000000000000000000000240015205072111015116 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) ## Define the compression settings NetCDF variable @var{varid}. ## ## If @var{deflate} is true, then the variable is compressed. ## ## The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). ## @end deftypefn function varargout = defVarDeflate(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarDeflate (varargin{:}); else netcdf_defVarDeflate (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVarFill.m0000644000000000000000000000234615205072111014451 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) ## Define the fill-value settings of the NetCDF variable @var{varid}. ## ## If @var{no_fill} is false, then the values between no-contiguous writes are filled with the ## value @var{fill_value}. ## ## This is disabled by setting @var{no_fill} to true. ## @end deftypefn function varargout = defVarFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarFill (varargin{:}); else netcdf_defVarFill (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVarFletcher32.m0000644000000000000000000000242615205072111015463 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) ## Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. ## ## If @var{checksum} is the string "FLETCHER32", then fletcher32 checksums will be turned on for this variable. ## ## If @var{checksum} is "NOCHECKSUM", then checksums will be disabled. ## @end deftypefn function varargout = defVarFletcher32(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVarFletcher32 (varargin{:}); else netcdf_defVarFletcher32 (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/defVlen.m0000644000000000000000000000253515205072111014016 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.defVlen(@var{ncid},@var{typename},@var{basetype}) ## Defines a NC_VLEN variable length array type with the type name @var{typename} and a base ## datatype of @var{basetype} in the dataset @var{ncid}. ## ## @var{basetype} can be "byte", "ubyte", "short", "ushort", "int", "uint", "int64", "uint64", ## "float", "double", "char" or the corresponding number as returned by netcdf.getConstant. ## ## The new data type id is returned. ## @end deftypefn function varargout = defVlen(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_defVlen (varargin{:}); else netcdf_defVlen (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/delAtt.m0000644000000000000000000000225415205072111013646 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.delAtt(@var{ncid},@var{varid},@var{name}) ## Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. ## ## To delete a global attribute use netcdf.getConstant("global") for @var{varid}. ## @seealso{netcdf.defAtt,netcdf.getConstant} ## @end deftypefn function varargout = delAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_delAtt (varargin{:}); else netcdf_delAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/endDef.m0000644000000000000000000000174215205072111013617 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.endDef (@var{ncid}) ## Leaves define-mode of NetCDF file @var{ncid}. ## @end deftypefn function varargout = endDef(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_endDef (varargin{:}); else netcdf_endDef (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/getAtt.m0000644000000000000000000000235315205072111013661 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{data} =} netcdf.getAtt (@var{ncid},@var{varid},@var{name}) ## Get the value of a NetCDF attribute. ## ## This function returns the value of the attribute called @var{name} of the variable ## @var{varid} in the NetCDF file @var{ncid}. ## ## For global attributes @var{varid} can be netcdf.getConstant("global"). ## @seealso{netcdf.putAtt} ## @end deftypefn function varargout = getAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getAtt (varargin{:}); else netcdf_getAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/getChunkCache.m0000644000000000000000000000205715205072111015126 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf.getChunkCache() ## Gets the default chunk cache settings in the HDF5 library. ## @end deftypefn function varargout = getChunkCache(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getChunkCache (varargin{:}); else netcdf_getChunkCache (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/getConstant.m0000644000000000000000000000206215205072111014717 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{value} =} netcdf.getConstant(@var{name}) ## Returns the value of a NetCDF constant called @var{name}. ## @seealso{netcdf.getConstantNames} ## @end deftypefn function varargout = getConstant(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getConstant (varargin{:}); else netcdf_getConstant (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/getConstantNames.m0000644000000000000000000000200415205072111015677 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{value} =} netcdf.getConstantNames() ## Returns a list of all constant names. ## @end deftypefn function varargout = getConstantNames(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getConstantNames (varargin{:}); else netcdf_getConstantNames (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/getVar.m0000644000000000000000000000316315205072111013661 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count}) ## @deftypefnx {} {@var{data} =} netcdf.getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) ## Get the data from a NetCDF variable. ### ## The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. ## ## @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), ## ## @var{count} is the number of elements of to be written along each dimension (default all elements) ## ## @var{stride} is the sampling interval. ## @end deftypefn function varargout = getVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_getVar (varargin{:}); else netcdf_getVar (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inq.m0000644000000000000000000000257315205072111013224 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf.inq(@var{ncid}) ## Return informat about a netcdf file. ## ## Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number ## of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). ## ## If no unlimited dimension is declared -1 is returned. ## ## For NetCDF4 files, one should use the function netcdf.inqUnlimDims as multiple unlimited dimension exists. ## @end deftypefn function varargout = inq(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inq (varargin{:}); else netcdf_inq (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqAtt.m0000644000000000000000000000204115205072111013663 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{xtype},@var{len}] = } netcdf.inqAtt(@var{ncid},@var{varid},@var{name}) ## Get attribute type and length. ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAtt (varargin{:}); else netcdf_inqAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqAttID.m0000644000000000000000000000232415205072111014104 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{attnum} =} netcdf.inqAttID(@var{ncid},@var{varid},@var{attname}) ## Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. ## ## For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAttID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAttID (varargin{:}); else netcdf_inqAttID (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqAttName.m0000644000000000000000000000240615205072111014471 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqAttName (@var{ncid},@var{varid},@var{attnum}) ## Get the name of a NetCDF attribute. ## ## This function returns the name of the attribute with the id @var{attnum} of the variable ## @var{varid} in the NetCDF file @var{ncid}. ## ## For global attributes @var{varid} can be netcdf.getConstant("global"). ## @seealso{netcdf.inqAttName} ## @end deftypefn function varargout = inqAttName(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqAttName (varargin{:}); else netcdf_inqAttName (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqDim.m0000644000000000000000000000205115205072111013645 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{name},@var{length}] =} netcdf.inqDim(@var{ncid},@var{dimid}) ## Returns the name and length of a NetCDF dimension. ## @seealso{netcdf.inqDimID} ## @end deftypefn function varargout = inqDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDim (varargin{:}); else netcdf_inqDim (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqDimID.m0000644000000000000000000000202515205072111014063 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{dimid} =} netcdf.inqDimID(@var{ncid},@var{dimname}) ## Return the id of a NetCDF dimension. ## @seealso{netcdf.inqDim} ## @end deftypefn function varargout = inqDimID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDimID (varargin{:}); else netcdf_inqDimID (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqDimIDs.m0000644000000000000000000000241415205072111014250 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{dimids} =} netcdf.inqDimID(@var{ncid}) ## @deftypefnx {} {@var{dimids} =} netcdf.inqDimID(@var{ncid},@var{include_parents}) ## Return the dimension ids defined in a NetCDF file. ## If @var{include_parents} is 1, the dimension ids of the parent group are also returned. ## Per default this is not the case (@var{include_parents} is 0). ## @seealso{netcdf.inqDim} ## @end deftypefn function varargout = inqDimIDs(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqDimIDs (varargin{:}); else netcdf_inqDimIDs (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqFormat.m0000644000000000000000000000220015205072111014360 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{format} =} netcdf.inqFormat(@var{ncid}) ## Return the NetCDF format of the dataset @var{ncid}. ## ## Format might be one of the following ## "FORMAT_CLASSIC", "FORMAT_64BIT", "FORMAT_NETCDF4" or "FORMAT_NETCDF4_CLASSIC" ## @end deftypefn function varargout = inqFormat(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqFormat (varargin{:}); else netcdf_inqFormat (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqGrpFullNcid.m0000644000000000000000000000207615205072111015314 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{grp_ncid} =} netcdf.inqGrpFullNcid(@var{ncid},@var{name}) ## Return the group id based on the full group name. ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpFullNcid(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpFullNcid (varargin{:}); else netcdf_inqGrpFullNcid (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqGrpName.m0000644000000000000000000000201615205072111014466 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqGrpName(@var{ncid}) ## Return group name in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = inqGrpName(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpName (varargin{:}); else netcdf_inqGrpName (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqGrpNameFull.m0000644000000000000000000000204715205072111015315 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{name} =} netcdf.inqGrpNameFull(@var{ncid}) ## Return full name of group in NetCDF file. ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpNameFull(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpNameFull (varargin{:}); else netcdf_inqGrpNameFull (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqGrpParent.m0000644000000000000000000000203215205072111015035 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{parent_ncid} =} netcdf.inqGrpParent(@var{ncid}) ## Return id of the parent group ## @seealso{netcdf.inqGrpName} ## @end deftypefn function varargout = inqGrpParent(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrpParent (varargin{:}); else netcdf_inqGrpParent (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqGrps.m0000644000000000000000000000200715205072111014050 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{ncids} =} netcdf.inqGrps(@var{ncid}) ## Return all groups ids in a NetCDF file. ## @seealso{netcdf.inqGrps} ## @end deftypefn function varargout = inqGrps(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqGrps (varargin{:}); else netcdf_inqGrps (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqLibVers.m0000644000000000000000000000177415205072111014515 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{vers} =} netcdf.inqLibVers() ## Returns the version of the NetCDF library as a string. ## @end deftypefn function varargout = inqLibVers(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqLibVers (varargin{:}); else netcdf_inqLibVers (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqNcid.m0000644000000000000000000000202615205072111014013 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{grp_ncid} =} netcdf.inqNcid(@var{ncid},@var{name}) ## Return group id based on its name ## @seealso{netcdf.inqGrpFullNcid} ## @end deftypefn function varargout = inqNcid(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqNcid (varargin{:}); else netcdf_inqNcid (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqUnlimDims.m0000644000000000000000000000204715205072111015042 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{unlimdimids} =} netcdf.inqUnlimDims(@var{ncid}) ## Return the id of all unlimited dimensions of the NetCDF file @var{ncid}. ## @end deftypefn function varargout = inqUnlimDims(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqUnlimDims (varargin{:}); else netcdf_inqUnlimDims (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqUserType.m0000644000000000000000000000236515205072111014724 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf.inqUserType(@var{ncid},@var{typeid}) ## Provide information on a user defined type @var{typeid} in the dataset @var{ncid}. ## ## The function returns the typename, bytesize, base type id, number of fields and class identifier of the type. ## ## @end deftypefn function varargout = inqUserType(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqUserType (varargin{:}); else netcdf_inqUserType (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVar.m0000644000000000000000000000251515205072111013671 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf.inqVar (@var{ncid},@var{varid}) ## Inquires information about a NetCDF variable. ## ## This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids ## ## @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. ## ## @var{nctype} in an integer corresponding NetCDF constants. ## @seealso{netcdf.inqVarID,netcdf.getConstant} ## @end deftypefn function varargout = inqVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVar (varargin{:}); else netcdf_inqVar (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarChunking.m0000644000000000000000000000242015205072111015353 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{storage},@var{chunkSizes}] = } netcdf.inqVarChunking (@var{ncid},@var{varid}) ## Determines the chunking settings of NetCDF variable @var{varid}. ## ## If @var{storage} is the string "chunked", the variable is stored by chunk of the size @var{chunkSizes}.@* ## If @var{storage} is the string "contiguous", the variable is stored in a contiguous way. ## @end deftypefn function varargout = inqVarChunking(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarChunking (varargin{:}); else netcdf_inqVarChunking (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarDeflate.m0000644000000000000000000000241015205072111015150 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf.inqVarDeflate (@var{ncid},@var{varid}) ## Determines the compression settings NetCDF variable @var{varid}. ## ## If @var{deflate} is true, then the variable is compressed. ## ## The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression). ## @end deftypefn function varargout = inqVarDeflate(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarDeflate (varargin{:}); else netcdf_inqVarDeflate (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarFill.m0000644000000000000000000000235315205072111014500 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{no_fill},@var{fillvalue}] = } netcdf.inqVarFill(@var{ncid},@var{varid}) ## Determines the fill-value settings of the NetCDF variable @var{varid}. ## ## If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. ## ## This is disabled by setting @var{no_fill} to true. ## @end deftypefn function varargout = inqVarFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarFill (varargin{:}); else netcdf_inqVarFill (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarFletcher32.m0000644000000000000000000000236715205072111015520 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{checksum} =} netcdf.inqVarFletcher32(@var{ncid},@var{varid}) ## Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. ## ## If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string "FLETCHER32". ## Otherwise it is the string "NOCHECKSUM". ## @end deftypefn function varargout = inqVarFletcher32(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarFletcher32 (varargin{:}); else netcdf_inqVarFletcher32 (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarID.m0000644000000000000000000000206015205072111014101 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{varid} = } netcdf.inqVarID (@var{ncid},@var{name}) ## Return the id of a variable based on its name. ## @seealso{netcdf.defVar, netcdf.inqVarIDs} ## @end deftypefn function varargout = inqVarID(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarID (varargin{:}); else netcdf_inqVarID (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVarIDs.m0000644000000000000000000000212315205072111014264 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{varids} = } netcdf.inqVarID (@var{ncid}) ## Return all variable ids. ## ## This functions returns all variable ids in a NetCDF file or NetCDF group. ## @seealso{netcdf.inqVarID} ## @end deftypefn function varargout = inqVarIDs(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVarIDs (varargin{:}); else netcdf_inqVarIDs (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/inqVlen.m0000644000000000000000000000224715205072111014047 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf.inqVlen(@var{ncid},@var{typeid}) ## Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}. ## ## The function returns the typename, bytesize, and base type id. ## ## @end deftypefn function varargout = inqVlen(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_inqVlen (varargin{:}); else netcdf_inqVlen (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/open.m0000644000000000000000000000205315205072111013367 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{ncid} =} netcdf.open(@var{filename},@var{mode}) ## Opens the file named @var{filename} in the mode @var{mode}. ## @seealso{netcdf.create, netcdf.close} ## @end deftypefn function varargout = open(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_open (varargin{:}); else netcdf_open (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/putAtt.m0000644000000000000000000000241015205072111013704 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.putAtt (@var{ncid},@var{varid},@var{name},@var{data}) ## Defines a NetCDF attribute. ## ## This function defines the attribute called @var{name} of the variable ## @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. ## ## For global attributes @var{varid} can be ## netcdf.getConstant("global"). ## @seealso{netcdf.getAtt} ## @end deftypefn function varargout = putAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_putAtt (varargin{:}); else netcdf_putAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/putVar.m0000644000000000000000000000314615205072111013713 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.putVar (@var{ncid},@var{varid},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) ## @deftypefnx {} {} netcdf.putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) ## Put data in a NetCDF variable. ## ## The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. ## ## @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), ## ## @var{count} is the number of elements of to be written along each dimension (default all elements) ## ## @var{stride} is the sampling interval. ## @end deftypefn function varargout = putVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_putVar (varargin{:}); else netcdf_putVar (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/reDef.m0000644000000000000000000000173515205072111013461 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.reDef (@var{ncid}) ## Enter define-mode of NetCDF file @var{ncid}. ## @end deftypefn function varargout = reDef(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_reDef (varargin{:}); else netcdf_reDef (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/renameAtt.m0000644000000000000000000000240615205072111014350 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) ## Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. ## ## @var{new_name} is the new name of the attribute. ## ## To rename a global attribute use netcdf.getConstant("global") for @var{varid}. ## @seealso{netcdf.copyAtt,netcdf.getConstant} ## @end deftypefn function varargout = renameAtt(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameAtt (varargin{:}); else netcdf_renameAtt (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/renameDim.m0000644000000000000000000000211515205072111014326 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameDim(@var{ncid},@var{dimid},@var{name}) ## Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension. ## @end deftypefn function varargout = renameDim(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameDim (varargin{:}); else netcdf_renameDim (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/renameVar.m0000644000000000000000000000211315205072111014343 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.renameVar(@var{ncid},@var{varid},@var{name}) ## Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable. ## @end deftypefn function varargout = renameVar(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_renameVar (varargin{:}); else netcdf_renameVar (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/setChunkCache.m0000644000000000000000000000217415205072111015142 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.setChunkCache(@var{size}, @var{nelems}, @var{preemption}) ## Sets the default chunk cache settings in the HDF5 library. ## ## The settings applies to all files which are subsequently opened or created. ## @end deftypefn function varargout = setChunkCache(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setChunkCache (varargin{:}); else netcdf_setChunkCache (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/setDefaultFormat.m0000644000000000000000000000230515205072111015677 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{old_format} =} netcdf.setDefaultFormat(@var{format}) ## Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). ## ## @var{format} can be "format_classic", "format_64bit", "format_netcdf4" or "format_netcdf4_classic". ## @end deftypefn function varargout = setDefaultFormat(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setDefaultFormat (varargin{:}); else netcdf_setDefaultFormat (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/setFill.m0000644000000000000000000000220615205072111014030 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{old_mode} =} netcdf.setFill(@var{ncid},@var{fillmode}) ## Change the fill mode (@var{fillmode}) of the data set @var{ncid}. ## ## @var{fillmode} can be either "fill" or "nofill". ## ## The previous value of the fill mode is returned. ## @end deftypefn function varargout = setFill(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_setFill (varargin{:}); else netcdf_setFill (varargin{:}); endif endfunction netcdf-1.0.20/inst/+netcdf/sync.m0000644000000000000000000000174415205072111013410 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} netcdf.sync(@var{ncid}) ## Writes all changes to the disk and leaves the file open. ## @end deftypefn function varargout = sync(varargin) if nargout > 0 [varargout{1:nargout}] = netcdf_sync (varargin{:}); else netcdf_sync (varargin{:}); endif endfunction netcdf-1.0.20/inst/PKG_ADD0000644000000000000000000000071615205072111011752 0ustar00# on package load, attempt to load docs try pkg_dir = fileparts (fullfile (mfilename ("fullpath"))); doc_file = fullfile (pkg_dir, "doc", "octave-netcdf.qch"); if exist(doc_file, "file") if exist("__event_manager_register_documentation__") __event_manager_register_documentation__ (doc_file); elseif exist("__event_manager_register_doc__") __event_manager_register_doc__ (doc_file); endif endif catch # do nothing end_try_catch netcdf-1.0.20/inst/PKG_DEL0000644000000000000000000000073215205072111011764 0ustar00# on package unload, attempt to unload docs try pkg_dir = fileparts (fullfile (mfilename ("fullpath"))); doc_file = fullfile (pkg_dir, "doc", "octave-netcdf.qch"); if exist(doc_file, "file") if exist("__event_manager_unregister_documentation__") __event_manager_unregister_documentation__ (doc_file); elseif exist("__event_manager_unregister_doc__") __event_manager_unregister_doc__ (doc_file); endif endif catch # do nothing end_try_catch netcdf-1.0.20/inst/import_netcdf.m0000644000000000000000000000173615205072111013754 0ustar00## Copyright (C) 2023 John Donoghue ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} import_fits ## Dummy function provided to provide compatibility with older versions of GNU Octave netcdf ## ## Function is deprecated. ## @end deftypefn function import_netcdf # doesnt do anything anymore as package files are provided in inst/+netcdf endfunction netcdf-1.0.20/inst/nccreate.m0000644000000000000000000001025515205072111012677 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} nccreate(@var{filename},@var{varname}) ## @deftypefnx {} {} nccreate(@var{filename},@var{varname},"property",@var{value},...) ## ## Create the variable @var{varname} in the file @var{filename}. ## ## @subsubheading Properties ## The following properties can be used: ## @itemize ## @item "Dimensions": a cell array with the dimension names followed by their ## length or Inf if the dimension is unlimited. If the property is omitted, a ## scalar variable is created. ## @item "Datatype": a string with the Octave data type name ## (see @code{ncinfo} for the correspondence between Octave and NetCDF data ## types). The default data type is a "double". ## @item "Format": This can be "netcdf4_classic" (default), "classic", "64bit" ## or "netcdf4". ## @item "FillValue": the value used for undefined elements of the NetCDF ## variable. ## @item "ChunkSize": the size of the data chunks. If omitted, the variable is ## not chunked. ## @item "DeflateLevel": The deflate level for compression. It can be the string ## "disable" (default) for no compression or an integer between 0 (no ## compression) and 9 (maximum compression). ## @item "Shuffle": true for enabling the shuffle filter or false (default) for ## disabling it. ## @end itemize ## ## @subsubheading Example ## @example ## nccreate("test.nc","temp","Dimensions",@{"lon",10,"lat",20@},"Format","classic"); ## ncdisp("test.nc"); ## @end example ## @seealso{ncwrite} ## @end deftypefn function nccreate (filename, varname, varargin) dimensions = {}; datatype = 'double'; ncformat = 'netcdf4_classic'; FillValue = []; ChunkSize = []; DeflateLevel = 'disable'; Shuffle = false; for i = 1:2:length(varargin) if strcmp(varargin{i},'Dimensions') dimensions = varargin{i+1}; elseif strcmp(varargin{i},'Datatype') datatype = varargin{i+1}; elseif strcmp(varargin{i},'Format') ncformat = varargin{i+1}; elseif strcmp(varargin{i},'FillValue') FillValue = varargin{i+1}; elseif strcmp(varargin{i},'ChunkSize') ChunkSize = varargin{i+1}; elseif strcmp(varargin{i},'DeflateLevel') DeflateLevel = varargin{i+1}; elseif strcmp(varargin{i},'Shuffle') Shuffle = varargin{i+1}; else error(['unknown keyword ' varargin{i} '.']); endif endfor if ~isempty(stat(filename)) ncid = netcdf_open(filename,'NC_WRITE'); netcdf_reDef(ncid); else mode = format2mode(ncformat); ncid = netcdf_create(filename,mode); endif % create dimensions dimids = []; i = 1; while i <= length(dimensions) if i == length(dimensions) dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); i = i+1; elseif ischar(dimensions{i+1}) dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); i = i+1; else try if isinf(dimensions{i+1}) dimensions{i+1} = netcdf_getConstant('NC_UNLIMITED'); endif dimids(end+1) = netcdf_defDim(ncid,dimensions{i},dimensions{i+1}); catch dimids(end+1) = netcdf_inqDimID(ncid,dimensions{i}); end_try_catch i = i+2; endif endwhile varid = netcdf_defVar(ncid,varname,oct2nctype(datatype),dimids); if ~isempty(ChunkSize) netcdf_defVarChunking(ncid,varid,'chunked',ChunkSize); endif if ~isempty(FillValue) % value of nofill? netcdf_defVarFill(ncid,varid,false,FillValue); endif if isnumeric(DeflateLevel) netcdf_defVarDeflate(ncid,varid,Shuffle,true,DeflateLevel); endif netcdf_close(ncid); endfunction netcdf-1.0.20/inst/ncdisp.m0000644000000000000000000001057215205072111012375 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} ncdisp (@var{filename}) ## Display meta-data of the NetCDF file @var{filename} ## ## @subsubheading Example ## @example ## ncdisp("test.nc"); ## @end example ## @seealso{ncinfo} ## @end deftypefn function ncdisp (filename) info = ncinfo(filename); fprintf("Source:\n"); indent = repmat(" ",[1 11]); fprintf("%s%s\n",indent,fullfile(filename)); fprintf("Format:\n"); fprintf("%s%s\n",indent,info.Format); colors.var = "red"; colors.att = "cyan"; colors.dim = "blue"; group_color = "green"; printgroup("",info,colors); endfunction function s = fmtattr(val) if ischar(val) s = sprintf("""%s""",val); else s = num2str(val); endif endfunction function s = fmtsize(sz) s = sprintf("%gx",sz); s = s(1:end-1); endfunction function printgroup(indent1,info,colors) indent2 = [indent1 repmat(" ",[1 11])]; indent3 = [indent2 repmat(" ",[1 11])]; % attributes if ~isempty(info.Attributes) fprintf("%sGlobal Attributes:\n",indent1); printattr(indent2,info.Attributes,colors); endif % dimensions if ~isempty(info.Dimensions) % length of the longest attribute name dim = info.Dimensions; maxlen = max(cellfun(@length,{dim.Name})); fprintf("%sDimensions:\n",indent1); for i = 1:length(dim) space = repmat(" ",[maxlen-length(dim(i).Name) 1]); fprintf("%s",indent2); colormsg(sprintf("%s %s= %d",dim(i).Name,space,dim(i).Length),colors.dim); fprintf("\n"); endfor endif % variables if isfield(info,"Variables") if ~isempty(info.Variables) % length of the longest attribute name vars = info.Variables; fprintf("%sVariables:\n",indent1); for i = 1:length(vars) %fprintf("%s%s\n",indent2(1:end-7),vars(i).Name); colormsg(sprintf("%s%s\n",indent2(1:end-7),vars(i).Name),colors.var); if ~isempty(vars(i).Size) sz = fmtsize(vars(i).Size); dimname = sprintf("%s,",vars(i).Dimensions.Name); dimname = dimname(1:end-1); else sz = "1x1"; dimname = ""; endif fprintf("%sSize: %s\n",indent2,sz); fprintf("%sDimensions: %s\n",indent2,dimname); fprintf("%sDatatype: %s\n",indent2,vars(i).Datatype); if ~isempty(vars(i).Attributes); fprintf("%sAttributes:\n",indent2); printattr(indent3,vars(i).Attributes,colors); endif endfor endif endif % groups if ~isempty(info.Groups) % length of the longest attribute name grps = info.Groups; fprintf("%sGroups:\n",indent1); for i = 1:length(grps) fprintf("%s%s\n",indent2(1:end-7),grps(i).Name); printgroup(indent2,grps(i),colors); endfor endif endfunction function printattr(indent,attr,colors) % length of the longest attribute name maxlen = max(cellfun(@length,{attr.Name})); for i = 1:length(attr) space = repmat(" ",[maxlen-length(attr(i).Name) 1]); %fprintf("%s%s %s= %s\n",indent,attr(i).Name,space,fmtattr(attr(i).Value)); fprintf("%s",indent); colormsg(sprintf("%s %s= %s\n",attr(i).Name,space,fmtattr(attr(i).Value)),colors.att); endfor endfunction function colormsg (msg,color) if strcmp(getenv("TERM"),"xterm") esc = char(27); % ANSI escape codes colors.black = [esc, "[30m"]; colors.red = [esc, "[31m"]; colors.green = [esc, "[32m"]; colors.yellow = [esc, "[33m"]; colors.blue = [esc, "[34m"]; colors.magenta = [esc, "[35m"]; colors.cyan = [esc, "[36m"]; colors.white = [esc, "[37m"]; reset = [esc, "[0m"]; c = getfield(colors,color); fprintf('%s',[c, msg, reset]); else fprintf('%s',msg); endif endfunction netcdf-1.0.20/inst/ncinfo.m0000644000000000000000000002002215205072111012360 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{info} =} ncinfo (@var{filename}) ## @deftypefnx {} {@var{info} =} ncinfo (@var{filename}, @var{varname}) ## @deftypefnx {} {@var{info} =} ncinfo (@var{filename}, @var{groupname}) ## Return information about an entire NetCDF file @var{filename} (i.e. the root ## group "/"), about the variable called @var{varname} or the group called ## @var{groupname}. ## ## The structure @var{info} has always the following fields: ## @itemize ## @item @var{Filename}: the name of the NetCDF file ## @item @var{Format}: one of the strings "CLASSIC", "64BIT", "NETCDF4" ## or "NETCDF4_CLASSIC" ## @end itemize ## ## The structure @var{info} has additional fields depending on whether a ## group of variable is queried. ## ## @subsubheading Groups ## ## Groups are returned as an array structure with the following fields: ## ## @itemize ## @item @var{Name}: the group name. The root group is named "/". ## @item @var{Dimensions}: a array structure with the dimensions. ## @item @var{Variables}: a array structure with the variables. ## @item @var{Attributes}: a array structure with global attributes. ## @item @var{Groups}: a array structure (one for each group) with the ## same fields as this structure. ## @end itemize ## ## @subsubheading Dimensions ## ## Dimensions are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the dimension ## @item @var{Length}: the length of the dimension ## @item @var{Unlimited}: true of the dimension has no fixed limited, false ## @end itemize ## ## @subsubheading Variables ## ## Variables are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the dimension ## @item @var{Dimensions}: array structure of all dimensions of this variable ## with the same structure as above. ## @item @var{Size}: array with the size of the variable ## @item @var{Datatype}: string with the corresponding octave data-type ## (see below) ## @item @var{Attributes}: a array structure of attributes ## @item @var{FillValue}: the NetCDF fill value of the variable. If the fill ## value is not defined, then this attribute is an empty array ([]). ## @item @var{DeflateLevel}: the NetCDF deflate level between 0 (no ## compression) and 9 (maximum compression). ## @item @var{Shuffle}: is true if the shuffle filter is activated to improve ## compression, otherwise false. ## @item @var{CheckSum}: is set to "fletcher32", if check-sums are used, ## otherwise this field is not defined. ## @end itemize ## ## @subsubheading Attributes ## ## Attributes are returned as an array structure with the following fields: ## @itemize ## @item @var{Name}: the name of the attribute ## @item @var{Value}: the value of the attribute (with the corresponding type) ## @item @var{Unlimited}: true of the dimension has no fixed limited, false ## @end itemize ## ## @subsubheading Data-types ## ## The following the the correspondence between the Octave and NetCDF ## data-types: ## ## @multitable @columnfractions .5 .5 ## @headitem Octave type @tab NetCDF type ## @item @code{int8} @tab @code{NC_BYTE} ## @item @code{uint8} @tab @code{NC_UBYTE} ## @item @code{int16} @tab @code{NC_SHORT} ## @item @code{uint16} @tab @code{NC_USHORT} ## @item @code{int32} @tab @code{NC_INT} ## @item @code{uint32} @tab @code{NC_UINT} ## @item @code{int64} @tab @code{NC_INT64} ## @item @code{uint64} @tab @code{NC_UINT64} ## @item @code{single} @tab @code{NC_FLOAT} ## @item @code{double} @tab @code{NC_DOUBLE} ## @item @code{char} @tab @code{NC_CHAR} ## @end multitable ## ## The output of @code{ncinfo} can be used to create a NetCDF file with the same ## meta-data using @code{ncwriteschema}. ## ## Note: If there are no attributes (or variable or groups), the corresponding ## field is an empty matrix and not an empty struct array for compatibility ## with matlab. ## ## @seealso{ncread,nccreate,ncwriteschema,ncdisp} ## ## @end deftypefn function info = ncinfo (filename, name) ncid = netcdf_open(filename,"NC_NOWRITE"); info.Filename = filename; if nargin == 1 name = "/"; endif [gid,varid] = ncloc(ncid,name); if isempty(varid) info = ncinfo_group(info,gid); else unlimdimIDs = netcdf_inqUnlimDims(gid); info = ncinfo_var(info,gid,varid,unlimdimIDs); endif # NetCDF format ncformat = netcdf_inqFormat(ncid); info.Format = lower(strrep(ncformat,'FORMAT_','')); netcdf_close(ncid); endfunction function dims = ncinfo_dim(ncid,dimids,unlimdimIDs) dims = []; for i=1:length(dimids) tmp = struct(); [tmp.Name, tmp.Length] = netcdf_inqDim(ncid,dimids(i)); tmp.Unlimited = any(unlimdimIDs == dimids(i)); if isempty(dims) dims = [tmp]; else dims(i) = tmp; endif endfor endfunction function vinfo = ncinfo_var(vinfo,ncid,varid,unlimdimIDs) [vinfo.Name,xtype,dimids,natts] = netcdf_inqVar(ncid,varid); % Information about dimension vinfo.Dimensions = ncinfo_dim(ncid,dimids,unlimdimIDs); if isempty(vinfo.Dimensions) vinfo.Size = []; else vinfo.Size = cat(2,vinfo.Dimensions.Length); endif % Data type if xtype >= netcdf_getConstant("NC_FIRSTUSERTYPEID") [utype_name, utype_bsize, utype_typeid, utype_nfields, utype_classid] = netcdf_inqUserType(ncid, xtype); vinfo.Datatype = nc2octtype(utype_typeid); if utype_classid == netcdf_getConstant("NC_VLEN") vinfo.Datatype = [vinfo.Datatype '*']; endif else vinfo.Datatype = nc2octtype(xtype); endif % Attributes vinfo.Attributes = []; for i = 0:natts-1 tmp = struct(); tmp.Name = netcdf_inqAttName(ncid,varid,i); tmp.Value = netcdf_getAtt(ncid,varid,tmp.Name); if isempty(vinfo.Attributes) vinfo.Attributes = [tmp]; else vinfo.Attributes(i+1) = tmp; endif endfor % chunking, fillvalue, compression [storage,vinfo.ChunkSize] = netcdf_inqVarChunking(ncid,varid); [nofill,vinfo.FillValue] = netcdf_inqVarFill(ncid,varid); if nofill vinfo.FillValue = []; endif [shuffle,deflate,vinfo.DeflateLevel] = ... netcdf_inqVarDeflate(ncid,varid); if ~deflate vinfo.DeflateLevel = []; endif vinfo.Shuffle = shuffle; # add checksum information if defined (unlike matlab) checksum = netcdf_inqVarFletcher32(ncid,varid); if ~strcmp(checksum,'nochecksum'); vinfo.Checksum = checksum; endif endfunction function info = ncinfo_group (info, ncid) info.Name = netcdf_inqGrpName(ncid); unlimdimIDs = netcdf_inqUnlimDims(ncid); [ndims,nvars,ngatts] = netcdf_inq(ncid); % dimensions dimids = netcdf_inqDimIDs(ncid); info.Dimensions = ncinfo_dim(ncid,dimids,unlimdimIDs); % variables for i=1:nvars info.Variables(i) = ncinfo_var(struct(),ncid,i-1,unlimdimIDs); endfor % global attributes info.Attributes = []; gid = netcdf_getConstant('NC_GLOBAL'); for i = 0:ngatts-1 tmp = struct(); tmp.Name = netcdf_inqAttName(ncid,gid,i); tmp.Value = netcdf_getAtt(ncid,gid,tmp.Name); if isempty(info.Attributes) info.Attributes = [tmp]; else info.Attributes(i+1) = tmp; endif endfor info.Groups = []; gids = netcdf_inqGrps(ncid); for i = 1:length(gids) tmp = ncinfo_group(struct(),gids(i)); if isempty(info.Groups) info.Groups = [tmp]; else info.Groups(i) = tmp; endif endfor endfunction netcdf-1.0.20/inst/ncread.m0000644000000000000000000001041615205072111012346 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{x} =} ncread (@var{filename}, @var{varname}) ## @deftypefnx {} {@var{x} =} ncread (@var{filename}, @var{varname},@var{start},@var{count},@var{stride}) ## ## Read the variable @var{varname} from the NetCDF file @var{filename}. ## ## If @var{start},@var{count} and @var{stride} are present, a subset of the ## variable is loaded. The parameter @var{start} contains the starting indices ## (1-based), @var{count} is the number of elements and @var{stride} the ## increment between two successive elements. These parameters are vectors whose ## length is equal to the number of dimension of the variable. Elements of ## @var{count} might be Inf which means that as many values as possible are ## loaded. ## ## If the variable has the _FillValue attribute, then the corresponding values ## are replaced by NaN (except for characters). NetCDF attributes scale_factor ## (default 1) and add_offset (default 0) are use the transform the variable ## during the loading: ## ## x = scale_factor * x_in_file + add_offset ## ## The output data type matches the NetCDF datatype, except when the attributes ## _FillValue, add_offset or scale_factor are defined in which case the output ## is a array in double precision. ## ## Note that values equal to the attribute missing_value are not replaced by ## NaN (for compatibility). ## ## @subsubheading Example ## Read the data from variable 'mydata' in the file test.nc. ## @example ## data = ncread('test.nc','mydata'); ## @end example ## ## @seealso{ncwrite,ncinfo,ncdisp} ## ## @end deftypefn function x = ncread (filename, varname, start, count, stride) ncid = netcdf_open(filename,'NC_NOWRITE'); [gid,varid] = ncvarid(ncid,varname); [varname_,xtype,dimids,natts] = netcdf_inqVar(gid,varid); % number of dimenions nd = length(dimids); sz = zeros(1,nd); for i=1:length(dimids) [dimname, sz(i)] = netcdf_inqDim(gid,dimids(i)); endfor if nargin < 3 start = ones(1,nd); endif if nargin < 4 count = inf*ones(1,nd); endif if nargin < 5 stride = ones(1,nd); endif % replace inf in count i = count == inf; count(i) = (sz(i)-start(i))./stride(i) + 1; x = netcdf_getVar(gid,varid,start-1,count,stride); % apply attributes factor = []; offset = []; fv = []; for i = 0:natts-1 attname = netcdf_inqAttName(gid,varid,i); if strcmp(attname,'scale_factor') factor = netcdf_getAtt(gid,varid,'scale_factor'); elseif strcmp(attname,'add_offset') offset = netcdf_getAtt(gid,varid,'add_offset'); elseif strcmp(attname,'_FillValue') fv = netcdf_getAtt(gid,varid,'_FillValue'); endif endfor netcdf_close(ncid); # the scaling does not make sense of characters if xtype == netcdf_getConstant('char') || ... xtype == netcdf_getConstant('string') return; endif # special handling for vlen if iscell(x) if !isempty(fv) || !isempty(factor) || !isempty(offset) for k=1:length(x) v = x{k}; if !isa(x{k}, 'double') v = double(v); endif if !isempty(fv) v(v == fv) = NaN; endif if !isempty(factor) v = v * factor; endif if !isempty(offset) v = v + offset; endif x{k} = v; endfor endif else if !isempty(fv) || !isempty(factor) || !isempty(offset) if !isa(x, 'double') x = double(x); endif if !isempty(fv) x(x == fv) = NaN; endif if !isempty(factor) x = x * factor; endif if !isempty(offset) x = x + offset; endif endif endif endfunction netcdf-1.0.20/inst/ncreadatt.m0000644000000000000000000000323315205072111013056 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {@var{val} =} ncreadatt(@var{filename},@var{varname},@var{attname}) ## ## Return the attribute @var{attname} of the variable @var{varname} in the file ## @var{filename}. ## ## Global attributes can be accessed by using "/" or the group name as ## @var{varname}. The type of attribute is mapped to the Octave data types. ## (see @code{ncinfo}). ## ## @subsubheading Example ## Read global attribute 'creation_date' ## @example ## d = ncreadatt('test.nc','/','creation_date') ## @end example ## Read atribute 'myattr' assigned to variable mydata. ## @example ## d = ncreadattr('test.nc', 'mydata', 'myattr'); ## @end example ## @seealso{ncinfo,ncwriteatt} ## @end deftypefn function val = ncreadatt(filename,varname,attname) ncid = netcdf_open(filename,'NC_NOWRITE'); [gid,varid] = ncloc(ncid,varname); if isempty(varid) varid = netcdf_getConstant('NC_GLOBAL'); endif val = netcdf_getAtt(gid,varid,attname); netcdf_close(ncid); endfunction netcdf-1.0.20/inst/ncwrite.m0000644000000000000000000000616015205072111012566 0ustar00## Copyright (C) 2013-2023 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} ncwrite (@var{filename}, @var{varname}, @var{x}) ## @deftypefnx {} {} ncwrite (@var{filename}, @var{varname}, @var{x}, @var{start}, @var{stride}) ## ## Write array @var{x} to the the variable @var{varname} in the NetCDF file ## @var{filename}. ## ## The variable with the name @var{varname} and the appropriate dimension must ## already exist in the NetCDF file. ## ## If @var{start} and @var{stride} are present, a subset of the ## variable is written. The parameter @var{start} contains the starting indices ## (1-based) and @var{stride} the ## increment between two successive elements. These parameters are vectors whose ## length is equal to the number of dimension of the variable. ## ## If the variable has the _FillValue attribute, then the values equal to NaN ## are replaced by corresponding fill value NetCDF attributes scale_factor ## (default 1) and add_oddset (default 0) are use the transform the variable ## during writing: ## ## x_in_file = (x - add_offset)/scale_factor ## ## @subsubheading Example ## Create a netcdf file with a variable of 'mydata' and then write ## data to that variable. ## @example ## nccreate('myfile.nc','mydata'); ## ncwrite('myfile.nc','mydata', 101); ## @end example ## ## @seealso{ncread,nccreate} ## ## @end deftypefn function ncwrite (filename, varname, x, start, stride) ncid = netcdf_open(filename,'NC_WRITE'); [gid,varid] = ncvarid(ncid,varname); [varname_,xtype,dimids,natts] = netcdf_inqVar(gid,varid); % number of dimenions nd = length(dimids); sz = zeros(1,nd); count = zeros(1,nd); for i=1:length(dimids) [dimname, sz(i)] = netcdf_inqDim(gid,dimids(i)); count(i) = size(x,i); endfor if nargin < 4 start = ones(1,nd); endif if nargin < 5 stride = ones(1,nd); endif % apply attributes factor = []; offset = []; fv = []; for i = 0:natts-1 attname = netcdf_inqAttName(gid,varid,i); if strcmp(attname,'scale_factor') factor = netcdf_getAtt(gid,varid,'scale_factor'); elseif strcmp(attname,'add_offset') offset = netcdf_getAtt(gid,varid,'add_offset'); elseif strcmp(attname,'_FillValue') fv = netcdf_getAtt(gid,varid,'_FillValue'); endif endfor if ~isempty(offset) x = x - offset; endif if ~isempty(factor) x = x / factor; endif if ~isempty(fv) x(isnan(x)) = fv; endif netcdf_putVar(gid,varid,start-1,count,stride,x); netcdf_close(ncid); endfunction netcdf-1.0.20/inst/ncwriteatt.m0000644000000000000000000000325315205072111013277 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} ncwriteatt(@var{filename},@var{varname},@var{attname},@var{val}) ## ## Defines the attribute @var{attname} of the variable @var{varname} in the file ## @var{filename} with the value @var{val}. ## ## Global attributes can be defined by using "/" or the group name as ## @var{varname}. The type of value is mapped to the NetCDF data types. ## (see @code{ncinfo}). ## ## @subsubheading Example ## Create a netcdf4 format file with a variable mydata and assign an attribute "units" to it. ## @example ## nccreate("myfile.nc", "mydata", "Format", "netcdf4"); ## ncwriteatt("myfile.nc", "mydata", "Units", "K"); ## @end example ## ## @seealso{ncinfo} ## @end deftypefn function ncwriteatt (filename, varname, attname, val) ncid = netcdf_open(filename,'NC_WRITE'); netcdf_reDef(ncid); [gid,varid] = ncloc(ncid,varname); if isempty(varid) varid = netcdf_getConstant('NC_GLOBAL'); endif netcdf_putAtt(ncid,varid,attname,val); netcdf_close(ncid); endfunction netcdf-1.0.20/inst/ncwriteschema.m0000644000000000000000000001077015205072111013751 0ustar00## Copyright (C) 2013-2022 Alexander Barth ## ## 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 . ## -*- texinfo -*- ## @deftypefn {} {} ncwriteschema (@var{filename}, @var{schema}) ## ## Create a NetCDF called @var{filename} with the dimensions, attributes, ## variables and groups given by the structure @var{schema}. ## ## The variable @var{schema} has the same structure as the results of ## @code{ncinfo}. @code{ncinfo} and @code{ncwriteschema} can be used together to ## create a NetCDF using another file as a template: ## ## @subsubheading Example ## @example ## schema = ncinfo("template.nc"); ## # the new file should be named "new_file.nc" ## ncwriteschema("new_file.nc",schema); ## @end example ## ## Unused field in @var{schema} such as @var{ChunkSize}, @var{Shuffle}, ## @var{DeflateLevel}, @var{FillValue}, @var{Checksum} can be left-out if the ## corresponding feature is not used. ## ## Dimensions are considered as limited if the field @var{Unlimited} is missing, ## unless the dimension length is Inf. ## ## @seealso{ncinfo} ## ## @end deftypefn function ncwriteschema (filename, s) mode = format2mode(s.Format); ncid = netcdf_create(filename,mode); write_group(ncid,s) netcdf_close(ncid); endfunction function write_group(ncid,s) % normalize schema if ~isfield(s,'Dimensions') s.Dimensions = []; endif if isempty(s.Dimensions) s.Dimensions = struct('Name',{},'Length',{},'Unlimited',{}); endif if ~isfield(s,'Attributes') s.Attributes = struct('Name',{},'Value',{}); endif if ~isfield(s,'Variables') s.Variables = struct('Name',{},'Dimensions',{},'Datatype',{});; endif % dimension for i = 1:length(s.Dimensions) dim = s.Dimensions(i); if ~isfield(dim,'Unlimited') dim.Unlimited = false; endif len = dim.Length; if dim.Unlimited || isinf(len) len = netcdf_getConstant('NC_UNLIMITED'); endif s.Dimensions(i).id = netcdf_defDim(ncid,dim.Name,len); endfor % global attributes gid = netcdf_getConstant('NC_GLOBAL'); for j = 1:length(s.Attributes) netcdf_putAtt(ncid,gid,s.Attributes(j).Name,s.Attributes(j).Value); endfor % variables for i = 1:length(s.Variables) v = s.Variables(i); %v.Name % get dimension id dimids = zeros(length(v.Dimensions),1); for j = 1:length(v.Dimensions) dimids(j) = netcdf_inqDimID(ncid,v.Dimensions(j).Name); endfor % define variable dtype = oct2nctype(v.Datatype); varid = netcdf_defVar(ncid,v.Name,dtype,dimids); % define attributes for j = 1:length(v.Attributes) netcdf_putAtt(ncid,varid,v.Attributes(j).Name,v.Attributes(j).Value); endfor % define chunk size if isfield(v,'ChunkSize') if ~isempty(v.ChunkSize) netcdf_defVarChunking(ncid,varid,'chunked',v.ChunkSize); endif endif % define compression shuffle = false; deflatelevel = 0; if isfield(v,'Shuffle') if ~isempty(v.Shuffle) shuffle = v.Shuffle; endif endif if isfield(v,'DeflateLevel') if ~isempty(v.DeflateLevel) deflatelevel = v.DeflateLevel; endif endif if shuffle && defaltelevel != 0 deflate = defaltelevel != 0; netcdf_defVarDeflate(ncid,varid,shuffle,deflate,deflatelevel); endif % define fill value if isfield(v,'FillValue') if ~isempty(v.FillValue) % leave nofill setting unchanged [nofill,fillval] = netcdf_inqVarFill(ncid,varid); netcdf_defVarFill(ncid,varid,nofill,v.FillValue); endif endif % define checksum if isfield(v,'Checksum') if ~isempty(v.Checksum) netcdf_defVarFletcher32(ncid,varid,v.Checksum); endif endif endfor % groups if isfield(s,'Groups') if ~isempty(s.Groups) for i=1:length(s.Groups) g = s.Groups(i); gid = netcdf_defGrp(ncid,g.Name); write_group(gid,g); endfor endif endif endfunction netcdf-1.0.20/inst/private/0000755000000000000000000000000015205072111012404 5ustar00netcdf-1.0.20/inst/private/bug_47014.m0000644000000000000000000000054215205072111014077 0ustar00% test case for bug 47014 % https://savannah.gnu.org/bugs/?func=detailitem&item_id=47014 fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'var','Dimensions',{'x',10},... 'FillValue',-32767,'Datatype','int16') var = ones(10,1); var(1) = NaN; ncwrite(fname,'var',var); var2 = ncread(fname,'var'); assert(isequaln(var,var2)) delete(fname) netcdf-1.0.20/inst/private/format2mode.m0000644000000000000000000000236115205072111015003 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function mode = format2mode(format) mode = netcdf_getConstant("NC_NOCLOBBER"); switch lower(format) case "classic" % do nothing case "64bit" mode = bitor(mode,netcdf_getConstant("NC_64BIT_OFFSET")); case "netcdf4_classic" mode = bitor(bitor(mode,netcdf_getConstant("NC_NETCDF4")),... netcdf_getConstant("NC_CLASSIC_MODEL")); case "netcdf4" mode = bitor(mode,netcdf_getConstant("NC_NETCDF4")); otherwise error("netcdf:unknownFormat","unknown format %s",format); endswitch endfunction netcdf-1.0.20/inst/private/nc2octtype.m0000644000000000000000000000333215205072111014655 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function otype = nc2octtype(nctype) if nctype == netcdf_getConstant("NC_CHAR") otype = "char"; elseif nctype == netcdf_getConstant("NC_FLOAT") otype = "single"; elseif nctype == netcdf_getConstant("NC_DOUBLE") otype = "double"; elseif nctype == netcdf_getConstant("NC_BYTE") otype = "int8"; elseif nctype == netcdf_getConstant("NC_SHORT") otype = "int16"; elseif nctype == netcdf_getConstant("NC_INT") otype = "int32"; elseif nctype == netcdf_getConstant("NC_INT64") otype = "int64"; elseif nctype == netcdf_getConstant("NC_UBYTE") otype = "uint8"; elseif nctype == netcdf_getConstant("NC_USHORT") otype = "uint16"; elseif nctype == netcdf_getConstant("NC_UINT") otype = "uint32"; elseif nctype == netcdf_getConstant("NC_UINT64") otype = "uint64"; elseif nctype == netcdf_getConstant("NC_STRING") otype = "string"; elseif nctype >= netcdf_getConstant("NC_FIRSTUSERTYPEID") otype = "user"; else error("netcdf:unknownDataType","unknown data type %d",nctype) endif endfunction netcdf-1.0.20/inst/private/ncloc.m0000644000000000000000000000173715205072111013670 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . % resolves a location (variable or group) by name function [gid,varid] = ncloc(ncid,name) try # try if name is a group gid = netcdf_inqGrpFullNcid(ncid,name); varid = []; catch # assume that name is a variable [gid,varid] = ncvarid(ncid,name); end_try_catch endfunction netcdf-1.0.20/inst/private/ncvarid.m0000644000000000000000000000175615205072111014221 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function [gid,varid] = ncvarid(ncid,varname) if strcmp(varname(1), '/') i = find(varname == '/',1,'last'); groupname = varname(1:i-1); varname = varname(i+1:end); gid = netcdf_inqGrpFullNcid(ncid,groupname); else gid = ncid; endif varid = netcdf_inqVarID(gid, varname); endfunction netcdf-1.0.20/inst/private/oct2nctype.m0000644000000000000000000000317415205072111014661 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function nctype = oct2nctype(otype) typemap.int8 = 'byte'; typemap.uint8 = 'ubyte'; typemap.int16 = 'short'; typemap.uint16 = 'ushort'; typemap.int32 = 'int'; typemap.uint32 = 'uint'; typemap.int64 = 'int64'; typemap.uint64 = 'uint64'; typemap.single = 'float'; typemap.double = 'double'; typemap.char = 'char'; typemap.string = 'string'; if ischar(otype) otype = lower(otype); if isfield(typemap,otype) nctype = typemap.(otype); else error('netcdf:unkownType','unknown type %s',otype); endif else nctype = otype; endif %typemap.byte = 'int8'; %typemap.ubyte = 'uint8'; %typemap.short = 'int16'; %typemap.ushort = 'uint16'; %typemap.int = 'int32'; %typemap.uint = 'uint32'; %typemap.int64 = 'int64'; %typemap.uint64 = 'uint64'; %typemap.float = 'single'; %typemap.double = 'double'; %typemap.char = 'char'; %typemap.string = 'string'; endfunction netcdf-1.0.20/inst/private/test_netcdf_attributes.m0000644000000000000000000002335215205072111017337 0ustar00%% Copyright (C) 2013-2025 Alexander Barth %% %% 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 . function test_netcdf_attributes() % rename attributes fname = [tempname '-octave-netcdf-rename-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); name = netcdf.inqAttName(ncid,gid,0); assert(strcmp(name,'toto')); netcdf.renameAtt(ncid,gid,'toto','lala'); name = netcdf.inqAttName(ncid,gid,0); assert(strcmp(name,'lala')); netcdf.close(ncid); delete(fname) % delete attributes fname = [tempname '-octave-netcdf-delete-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); varid = netcdf.defVar(ncid,'double_var','double',[]); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 1); netcdf.delAtt(ncid,gid,'toto'); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 0); netcdf.close(ncid); delete(fname) % copy attributes fname = [tempname '-octave-netcdf-copy-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); varid = netcdf.defVar(ncid,'double_var','double',[]); netcdf.copyAtt(ncid,gid,'toto',ncid,varid); [ndims,nvars,natts] = netcdf.inq(ncid); assert(natts == 1); [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varid); val = netcdf.getAtt(ncid,varid,'toto'); assert(isequal(val,123)); netcdf.close(ncid); delete(fname) % attributes id fname = [tempname '-octave-netcdf-delete-attrib.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); gid = netcdf.getConstant('global'); netcdf.putAtt(ncid,gid,'toto',int8(123)); attnum = netcdf.inqAttID(ncid,gid,'toto'); name = netcdf.inqAttName(ncid,gid,attnum); assert(strcmp(name,'toto')) netcdf.close(ncid); delete(fname) % test one unlimited dimensions fname = [tempname '-octave-netcdf-unlimdim.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(dimID == unlimdimIDs); netcdf.close(ncid); delete(fname) % test netcdf_classic format fname = [tempname '-octave-netcdf-classic-model.nc']; mode = bitor(netcdf.getConstant('classic_model'),netcdf.getConstant('netcdf4')); ncid = netcdf.create(fname,mode); netcdf.close(ncid); info = ncinfo(fname); assert(strcmp(info.Format,'netcdf4_classic')); delete(fname); % test two unlimited dimensions fname = [tempname '-octave-netcdf-2unlimdim.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); dimID = netcdf.defDim(ncid,'time',netcdf.getConstant('NC_UNLIMITED')); dimID2 = netcdf.defDim(ncid,'time2',netcdf.getConstant('NC_UNLIMITED')); unlimdimIDs = netcdf.inqUnlimDims(ncid); assert(isequal(sort([dimID,dimID2]),sort(unlimdimIDs))); netcdf.close(ncid); delete(fname); % test fill mode fname = [tempname '-octave-netcdf-fill-mode.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); old_mode = netcdf.setFill(ncid,'nofill'); old_mode = netcdf.setFill(ncid,'nofill'); assert(old_mode == netcdf.getConstant('nofill')) netcdf.close(ncid); delete(fname); % deflate for 64bit_offset files fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'64BIT_OFFSET'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle == 0) assert(deflate == 0) assert(deflateLevel == 0) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % deflate fname = [tempname '-octave-netcdf-deflate.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarDeflate(ncid,varid,true,true,9); [shuffle,deflate,deflateLevel] = netcdf.inqVarDeflate(ncid,varid); assert(shuffle) assert(deflate) assert(deflateLevel == 9) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - contiguous storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'contiguous'); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'contiguous')) assert(isempty(chunksize)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % chunking - chunked storage fname = [tempname '-octave-netcdf-chunking.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarChunking(ncid,varid,'chunked',[3 4]); [storage,chunksize] = netcdf.inqVarChunking(ncid,varid); assert(strcmp(storage,'chunked')) assert(isequal(chunksize,[3 4])) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % checksum fname = [tempname '-octave-netcdf-checksum.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); checksum = netcdf.inqVarFletcher32(ncid,varid); assert(strcmp(checksum,'NOCHECKSUM')) netcdf.defVarFletcher32(ncid,varid,'fletcher32'); checksum = netcdf.inqVarFletcher32(ncid,varid); assert(strcmp(checksum,'FLETCHER32')) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); netcdf.defVarFill(ncid,varid,false,-99999.); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill single fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'single_var','float',dimids); netcdf.defVarFill(ncid,varid,false,single(-99999.)); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) assert(fillval == -99999.) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % variable fill char fname = [tempname '-octave-netcdf-fill-char.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','char',dimids); netcdf.defVarFill(ncid,varid,false,'X'); [fill,fillval] = netcdf.inqVarFill(ncid,varid); assert(~fill) assert(fillval == 'X') netcdf.close(ncid); delete(fname); % check default state of fill fname = [tempname '-octave-netcdf-fill.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','double',dimids); [nofill,fillval] = netcdf.inqVarFill(ncid,varid); assert(isequal(nofill,false)) netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % create groups fname = [tempname '-octave-netcdf-groups.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); id1 = netcdf.defGrp(ncid,'group1'); id2 = netcdf.defGrp(ncid,'group2'); id3 = netcdf.defGrp(id1,'subgroup'); ids = netcdf.inqGrps(ncid); assert(isequal(sort([id1,id2]),sort(ids))); id4 = netcdf.inqNcid(ncid,'group1'); assert(id1 == id4) name = netcdf.inqGrpName(id3); assert(strcmp(name,'subgroup')) name = netcdf.inqGrpNameFull(id3); assert(strcmp(name,'/group1/subgroup')) parentid = netcdf.inqGrpParent(id3); assert(id1 == parentid); if 0 id3bis = netcdf.inqGrpFullNcid(ncid,'/group1/subgroup'); assert(id3 == id3bis); endif netcdf.close(ncid); %system(['ncdump -h ' fname]) delete(fname); % check rename dimension fname = [tempname '-octave-rename-dim.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimid = netcdf.defDim(ncid,'x',123); [name,len] = netcdf.inqDim(ncid,dimid); assert(strcmp(name,'x')); netcdf.renameDim(ncid,dimid,'y'); [name,len] = netcdf.inqDim(ncid,dimid); assert(strcmp(name,'y')); netcdf.close(ncid); delete(fname); % rename variable fname = [tempname '-octave-netcdf-rename-var.nc']; ncid = netcdf.create(fname,'NC_NETCDF4'); dimids = [netcdf.defDim(ncid,'x',123) netcdf.defDim(ncid,'y',12)]; varid = netcdf.defVar(ncid,'double_var','char',dimids); [varname] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'double_var')); netcdf.renameVar(ncid,varid,'doublev'); [varname] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'doublev')); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.20/inst/private/test_netcdf_constant.m0000644000000000000000000000270515205072111017001 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . % test netcdf constants function test_netcdf_constant() names = netcdf.getConstantNames(); assert(any(strcmp(names,'NC_WRITE'))); assert(netcdf.getConstant('NC_NOWRITE') == 0) assert(netcdf.getConstant('NC_WRITE') == 1) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64BIT_OFFSET')) assert(netcdf.getConstant('NC_64BIT_OFFSET') == ... netcdf.getConstant('64bit_offset')) assert(isa(netcdf.getConstant('fill_byte'),'int8')) assert(isa(netcdf.getConstant('fill_ubyte'),'uint8')) assert(isa(netcdf.getConstant('fill_float'),'single')) failed = 0; try % should trow exception netcdf.getConstant('not_found') % should never be reached failed = 1; catch end_try_catch assert(~failed); endfunction netcdf-1.0.20/inst/private/test_netcdf_create.m0000644000000000000000000000162615205072111016414 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_netcdf_create fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.20/inst/private/test_netcdf_datatypes.m0000644000000000000000000000217415205072111017146 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_netcdf_datatypes() test_netcdf_type('byte','int8'); test_netcdf_type('ubyte','uint8'); test_netcdf_type('short','int16'); test_netcdf_type('ushort','uint16'); test_netcdf_type('int','int32'); test_netcdf_type('uint','uint32'); test_netcdf_type('int64','int64'); test_netcdf_type('uint64','uint64'); test_netcdf_type('double','double'); test_netcdf_type('float','single'); test_netcdf_type('char','char'); endfunction netcdf-1.0.20/inst/private/test_netcdf_high_level_interface.m0000644000000000000000000000714715205072111021303 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20}); nccreate(fname,'salt','Dimensions',{'lon',10,'lat',20}); nccreate(fname,'u','Dimensions',{'lon','lat'}); u = randn(10,20); ncwrite(fname,'u',u); % for octave prior to 3.8.0 if isempty(which('isequaln')) isequaln = @(x,y) isequalwithequalnans(x,y); endif u2 = ncread(fname,'u'); assert(isequaln(u,u2)); u2 = ncread(fname,'u',[10 5],[inf inf],[1 1]); assert(isequaln(u(10:end,5:end),u2)); ncwriteatt(fname,'temp','units','degree Celsius'); assert(strcmp(ncreadatt(fname,'temp','units'),'degree Celsius')); ncwriteatt(fname,'temp','range',[0 10]); assert(isequal(ncreadatt(fname,'temp','range'),[0 10])); ncwriteatt(fname,'temp','float_range',single([0 10])); assert(isequal(ncreadatt(fname,'temp','float_range'),[0 10])); ncwriteatt(fname,'temp','int_range',int32([0 10])); assert(isequal(ncreadatt(fname,'temp','int_range'),[0 10])); info = ncinfo(fname); assert(length(info.Variables) == 3) assert(strcmp(info.Variables(1).Name,'temp')); assert(isequal(info.Variables(1).Size,[10 20])); delete(fname); nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','64bit'); delete(fname); nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','classic'); info = ncinfo(fname); assert(strcmp(info.Format,'classic')); delete(fname); % netcdf4 nccreate(fname,'temp','Dimensions',{'lon',10,'lat',20},'Format','netcdf4'); ncwriteatt(fname,'temp','uint_range',uint32([0 10])); assert(isequal(ncreadatt(fname,'temp','uint_range'),[0 10])); info = ncinfo(fname); assert(strcmp(info.Format,'netcdf4')); delete(fname) % scalar variable nccreate(fname,'temp','Format','netcdf4','Datatype','double'); ncwrite(fname,'temp',123); assert(ncread(fname,'temp') == 123) delete(fname) % test unlimited dimension with nccreate fname = [tempname '-octave-netcdf.nc']; nccreate(fname,'temp','Dimensions',{'lon',10,'lat',inf}); %system(['ncdump -h ' fname]) info = ncinfo(fname); assert(~info.Dimensions(1).Unlimited) assert(info.Dimensions(2).Unlimited) delete(fname) % test double with _FillValue fname = [tempname '-octave-netcdf.nc']; fv = 99999.; nccreate(fname,'flag','Dimensions',{'lon',10,'lat',10},'Datatype','double',... 'FillValue',fv); %system(['ncdump -h ' fname]) data = zeros(10,10); data(1,2) = fv; ncid = netcdf.open(fname,'NC_WRITE'); varid = netcdf.inqVarID(ncid, 'flag'); netcdf.putVar(ncid,varid,data); netcdf.close(ncid) data2 = ncread(fname,'flag'); data(data == fv) = NaN; assert(isequaln(data,data2)) delete(fname) % test char with _FillValue fname = [tempname '-octave-netcdf.nc']; fv = '*'; nccreate(fname,'flag','Dimensions',{'lon',10,'lat',10},'Datatype','char',... 'FillValue',fv); data = repmat('.',[10 10]); data(1,2) = fv; ncid = netcdf.open(fname,'NC_WRITE'); varid = netcdf.inqVarID(ncid, 'flag'); netcdf.putVar(ncid,varid,data); netcdf.close(ncid) data2 = ncread(fname,'flag'); assert(isequal(data,data2)) delete(fname) netcdf-1.0.20/inst/private/test_netcdf_low_level_interface.m0000644000000000000000000001243215205072111021156 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_netcdf_low_level_interface % 2 dimensions fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); assert(strcmp(netcdf.inqFormat(ncid),'FORMAT_CLASSIC')); n = 10; m = 5; dimid_lon = netcdf.defDim(ncid,'lon',m); dimid = netcdf.defDim(ncid,'time',n); varidd = netcdf.defVar(ncid,'double_var','double',[dimid_lon,dimid]); varid = netcdf.defVar(ncid,'byte_var','byte',[dimid]); varidf = netcdf.defVar(ncid,'float_var','float',[dimid]); varidi = netcdf.defVar(ncid,'int_var','int',[dimid]); varids = netcdf.defVar(ncid,'short_var','short',[dimid]); assert(varidd == netcdf.inqVarID(ncid,'double_var')) [numdims, numvars, numglobalatts, unlimdimID] = netcdf.inq(ncid); assert(numvars == 5) [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varidd); assert(strcmp(varname,'double_var')); [dimname,len] = netcdf.inqDim(ncid,dimid); assert(len == n); assert(strcmp(dimname,'time')); types = {'double','float','byte','short','int'}; for i=1:length(types) vid{i} = netcdf.defVar(ncid,[types{i} '_variable'],types{i},[dimid_lon,dimid]); end netcdf.endDef(ncid) z = randn(m,n); netcdf.putVar(ncid,varidd,z); varf = randn(n,1); netcdf.putVar(ncid,varidf,varf); vari = floor(randn(n,1)); netcdf.putVar(ncid,varidi,vari); netcdf.putVar(ncid,varids,[1:n]) z2 = netcdf.getVar(ncid,varidd); assert(all(all(abs(z2 - z) < 1e-5))) z2 = netcdf.getVar(ncid,varidd,[0 0]); assert(z2 == z(1,1)) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 5]); assert(isequal(z2,z(3:5,3:7))) z2 = netcdf.getVar(ncid,varidd,[2 2],[3 4],[1 2]); assert(isequal(z2,z(3:5,3:2:9))) netcdf.putVar(ncid,varidd,[0 0],123.); z(1,1) = 123; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[2 2],[3 3],ones(3,3)); z(3:5,3:5) = 1; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) netcdf.putVar(ncid,varidd,[0 0],[3 5],[2 2],zeros(3,5)); z(1:2:5,1:2:9) = 0; z2 = netcdf.getVar(ncid,varidd); assert(isequal(z,z2)) z2 = netcdf.getVar(ncid,varidf); assert(all(z2 - varf < 1e-5)) vari2 = netcdf.getVar(ncid,varidi); assert(all(vari2 == vari)) netcdf.close(ncid); delete(fname); % test with different dimensions for i = 1:5 nc_test_ndims(i); endfor endfunction function nc_test_ndims(ndims) fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); sz = ones(1,ndims); dimids = ones(1,ndims); for i = 1:ndims sz(i) = 10+i; dimids(i) = netcdf.defDim(ncid,sprintf('dim%g',i),sz(i)); endfor varid = netcdf.defVar(ncid,'double_var','double',dimids); [varname,xtype,dimids,natts] = netcdf.inqVar(ncid,varid); assert(strcmp(varname,'double_var')); for i = 1:ndims [dimname,len] = netcdf.inqDim(ncid,dimids(i)); assert(len == sz(i)); assert(strcmp(dimname,sprintf('dim%g',i))); endfor netcdf.endDef(ncid) if ndims == 1 z = randn(sz,1); else z = randn(sz); endif netcdf.putVar(ncid,varid,z); z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) z2 = netcdf.getVar(ncid,varid,zeros(ndims,1)); assert(z2 == z(1)) start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count); idx = scs(start,count); assert(isequal(z2,z(idx{:}))) start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); stride = 2 * ones(1,ndims); z2 = netcdf.getVar(ncid,varid,start,count,stride); idx = scs(start,count,stride); assert(isequal(z2,z(idx{:}))) % put with start start = zeros(1,ndims); netcdf.putVar(ncid,varid,start,123.); z(1) = 123; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) % put with start and count start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); if ndims == 1 data = ones(count,1); else data = ones(count); endif netcdf.putVar(ncid,varid,start,count,data); idx = scs(start,count); z(idx{:}) = 1; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) % put with start, count and stride start = 2 * ones(1,ndims); count = 5 * ones(1,ndims); stride = 2 * ones(1,ndims); if ndims == 1 data = zeros(count,1); else data = zeros(count); endif netcdf.putVar(ncid,varid,start,count,stride,data); idx = scs(start,count,stride); z (idx{:}) = 0; z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) netcdf.close(ncid); delete(fname); endfunction function idx = scs(start,count,stride) idx = cell(length(start),1); if nargin == 2 stride = ones(length(start),1); endif for i = 1:length(start) idx{i} = start(i) + 1 + stride(i) * [0:count(i)-1]; endfor endfunction netcdf-1.0.20/inst/private/test_netcdf_ncwriteschema.m0000644000000000000000000000255515205072111020007 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . fname = [tempname '-octave-netcdf-scheme-unlim.nc']; clear s s.Name = '/'; s.Format = 'classic'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) delete(fname); netcdf-1.0.20/inst/private/test_netcdf_ncwriteschema_chunking.m0000644000000000000000000000272615205072111021675 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . fname = [tempname '-octave-netcdf-scheme-chunk.nc']; clear s s.Name = '/'; s.Format = 'netcdf4'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; s.Variables(1).ChunkSize = [2 3]; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(isequal(info.Variables(1).ChunkSize,s.Variables(1).ChunkSize)); delete(fname); netcdf-1.0.20/inst/private/test_netcdf_ncwriteschema_group.m0000644000000000000000000000444415205072111021222 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . fname = [tempname '-octave-netcdf-scheme-group.nc']; clear s s.Name = '/'; s.Format = 'netcdf4'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp_diff'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; s.Groups(1).Name = 'forecast'; s.Groups(1).Variables(1).Name = 'temp'; s.Groups(1).Variables(1).Dimensions = s.Dimensions; s.Groups(1).Variables(1).Datatype = 'double'; s.Groups(1).Variables(1).Attributes(1).Name = 'long_name'; s.Groups(1).Variables(1).Attributes(1).Value = 'temperature'; s.Groups(1).Attributes(1).Name = 'institution'; s.Groups(1).Attributes(1).Value = 'ULg'; s.Groups(2) = s.Groups(1); s.Groups(2).Name = 'analysis'; ncwriteschema(fname,s); %system(['ncdump -h ' fname]) info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(strcmp(s.Groups(1).Name,info.Groups(1).Name)) z = randn(20,10); ncwrite(fname,'/forecast/temp',z); z2 = ncread(fname,'/forecast/temp'); assert(isequal(z,z2)) ginfo = ncinfo(fname,'forecast'); assert(strcmp(ginfo.Name,'forecast')); % read global attribute of root group val = ncreadatt(fname,'/','institution'); assert(strcmp(val,'GHER, ULg')); % read global attribute of group forecast val = ncreadatt(fname,'/forecast','institution'); assert(strcmp(val,'ULg')); delete(fname); netcdf-1.0.20/inst/private/test_netcdf_ncwriteschema_unlim.m0000644000000000000000000000276515205072111021216 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . fname = [tempname '-octave-netcdf-scheme-unlim.nc']; clear s s.Name = '/'; s.Format = 'classic'; s.Dimensions(1).Name = 'lon'; s.Dimensions(1).Length = 20; s.Dimensions(2).Name = 'lat'; s.Dimensions(2).Length = 10; s.Dimensions(3).Name = 'time'; s.Dimensions(3).Length = Inf; %s.Dimensions(3).Unlimited = true; s.Attributes(1).Name = 'institution'; s.Attributes(1).Value = 'GHER, ULg'; s.Variables(1).Name = 'temp'; s.Variables(1).Dimensions = s.Dimensions; s.Variables(1).Datatype = 'double'; s.Variables(1).Attributes(1).Name = 'long_name'; s.Variables(1).Attributes(1).Value = 'temperature'; ncwriteschema(fname,s); info = ncinfo(fname); assert(strcmp(info.Attributes(1).Name,s.Attributes(1).Name)) assert(strcmp(info.Attributes(1).Value,s.Attributes(1).Value)) assert(info.Dimensions(3).Unlimited); delete(fname); netcdf-1.0.20/inst/private/test_netcdf_scalar_variable.m0000644000000000000000000000164715205072111020266 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_netcdf_scalar_variable() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); varidd_scalar = netcdf.defVar(ncid,'double_scalar','double',[]); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.20/inst/private/test_netcdf_type.m0000644000000000000000000000431215205072111016125 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_netcdf_type(nctype,octtype) m = 5; n = 10; fname = [tempname '-octave-netcdf- ' nctype '.nc']; mode = bitor(netcdf.getConstant('NC_CLOBBER'),... netcdf.getConstant('NC_NETCDF4')); ncid = netcdf.create(fname,mode); dimids = [netcdf.defDim(ncid,'lon',m) ... netcdf.defDim(ncid,'time',n)]; varid = netcdf.defVar(ncid,'variable',nctype,dimids); netcdf.endDef(ncid) if strcmp(octtype,'char') z = char(floor(26*rand(m,n)) + 65); testvals = 'a'; testvalv = 'this is a name'; else z = zeros(m,n,octtype); z(:) = randn(m,n); testvals = zeros(1,1,octtype); testvals(:) = rand(1,1); testvalv = zeros(1,5,octtype); testvalv(:) = rand(size(testvalv)); endif netcdf.putVar(ncid,varid,z); z2 = netcdf.getVar(ncid,varid); assert(isequal(z,z2)) netcdf.putAtt(ncid,varid,'scalar_attribute',testvals); val = netcdf.getAtt(ncid,varid,'scalar_attribute'); assert(isequal(val,testvals)); assert(strcmp(class(val),octtype)) [xtype,len] = netcdf.inqAtt(ncid,varid,'scalar_attribute'); assert(xtype == netcdf.getConstant(nctype)) assert(len == numel(testvals)); netcdf.putAtt(ncid,varid,'vector_attribute',testvalv); val = netcdf.getAtt(ncid,varid,'vector_attribute'); assert(isequal(val,testvalv)); assert(strcmp(class(val),octtype)) [xtype,len] = netcdf.inqAtt(ncid,varid,'vector_attribute'); assert(xtype == netcdf.getConstant(nctype)) assert(len == numel(testvalv)); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.20/inst/private/test_netcdf_unlim.m0000644000000000000000000000201215205072111016263 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . % 2 dimensions fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); dimid = netcdf.defDim(ncid,'time',0); varidd = netcdf.defVar(ncid,'time','double',[dimid]); netcdf.close(ncid) ncid = netcdf.open(fname,'NC_NOWRITE'); varid = netcdf.inqVarID(ncid, 'time'); x = netcdf.getVar(ncid,varid); netcdf.close(ncid) netcdf-1.0.20/inst/private/test_netcdf_user_types.m0000644000000000000000000000527715205072111017361 0ustar00%% Copyright (C) 2022 John Donoghue %% %% 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 . function test_netcdf_user_types() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,netcdf.getConstant('NETCDF4')); my_dtype_id = netcdf.defVlen(ncid,"mytype_dtype", 'double'); [dtype_name, dtype_bsize, dtype_typeid] = netcdf.inqVlen(ncid, my_dtype_id); assert(dtype_name, 'mytype_dtype'); #assert(dtype_bsize, 16); assert(dtype_typeid, netcdf.getConstant("NC_DOUBLE")); [dtype_name, dtype_bsize, dtype_typeid, dtype_nfields, dtype_classid] = netcdf.inqUserType(ncid, my_dtype_id); assert(dtype_name, 'mytype_dtype'); #assert(dtype_bsize, 16); assert(dtype_typeid, netcdf.getConstant("NC_DOUBLE")); assert(dtype_nfields, 0); assert(dtype_classid, netcdf.getConstant("NC_VLEN")); my_stype_id = netcdf.defVlen(ncid,"mytype_stype", netcdf.getConstant("NC_USHORT")); [stype_name, stype_bsize, stype_typeid] = netcdf.inqVlen(ncid, my_stype_id); assert(stype_name, 'mytype_stype'); #assert(stype_bsize, 2); assert(stype_typeid, netcdf.getConstant("NC_USHORT")); # create a variable dimid = netcdf.defDim(ncid,'m',5); varid = netcdf.defVar(ncid,'myarray', my_dtype_id, dimid); netcdf.defVarFill(ncid, varid, false, -999); netcdf.putAtt(ncid, varid, "myattr", 1) netcdf.endDef(ncid); # get var info [varname vartype vardimid varattr] = netcdf.inqVar(ncid,varid); assert(varname, "myarray"); assert(vardimid, dimid); assert(vartype, my_dtype_id); netcdf.putVar(ncid, varid, {0, [0.1,0.2],[3,0,4.0,5.0,6.0]}); data = netcdf.getVar(ncid,varid); assert(iscell(data)); assert(length(data), 5); assert(data{1}, [0]); assert(data{2}, [0.1,0.2]); assert(data{3}, [3,0,4.0,5.0,6.0]); assert(data{4}, -999); netcdf.close(ncid); # ncinfo doesnt error a = ncinfo(fname); assert(a.Variables(1).Name, "myarray"); assert(a.Variables(1).Size, 5); assert(a.Variables(1).FillValue, -999); # attr 1 is the fill value, 2nd is my added one assert(a.Variables(1).Attributes(2).Name, "myattr"); assert(a.Variables(1).Attributes(2).Value, 1); delete(fname); endfunction netcdf-1.0.20/inst/private/test_scalar_variable.m0000644000000000000000000000164015205072111016734 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . function test_scalar_variable() fname = [tempname '-octave-netcdf.nc']; ncid = netcdf.create(fname,'NC_CLOBBER'); varidd_scalar = netcdf.defVar(ncid,'double_scalar','double',[]); netcdf.close(ncid); delete(fname); endfunction netcdf-1.0.20/inst/test_netcdf.m0000644000000000000000000000355415205072111013421 0ustar00%% Copyright (C) 2013-2022 Alexander Barth %% %% 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 . ## -*- texinfo -*- ## @deftypefn {} {} test_netcdf ## Function to do a basic test of the netcdf interface ## @end deftypefn function test_netcdf() import_netcdf tests = {'test_netcdf_constant',... 'test_netcdf_create'... 'test_netcdf_low_level_interface'... 'test_netcdf_unlim',... 'test_netcdf_datatypes',... 'test_netcdf_scalar_variable',... 'test_netcdf_attributes',... 'test_netcdf_high_level_interface',... 'test_netcdf_ncwriteschema',... 'test_netcdf_ncwriteschema_unlim',... 'test_netcdf_ncwriteschema_chunking',... 'test_netcdf_ncwriteschema_group',... 'test_netcdf_user_types',... 'bug_47014'... }; maxlen = max(cellfun(@(s) length(s),tests)); libver = netcdf.inqLibVers(); fprintf('Using NetCDF library version "%s"\n',libver) for iindex=1:length(tests); dots = repmat('.',1,maxlen - length(tests{iindex})); fprintf('run %s%s ',tests{iindex},dots); try eval(tests{iindex}); disp(' OK '); catch disp(' FAIL '); disp(lasterr) end_try_catch endfor endfunction %!test %! fprintf ("\n"); %! test_netcdf (); netcdf-1.0.20/octave-netcdf.metainfo.xml0000644000000000000000000000202215205072111015016 0ustar00 octave-netcdf www.octave.org-octave.desktop NetCDF Toolkit Octave NetCDF toolkit

Toolkit for Network Common Form (NetCDF) File I/O.

NetCDF scientific https://gnu-octave.github.io/octave-netcdf/ https://github.com/gnu-octave/octave-netcdf/issues GPL-3.0+ Octave-Forge Community octave-maintainers@gnu.org FSFAP
netcdf-1.0.20/src/0000755000000000000000000000000015205072111010544 5ustar00netcdf-1.0.20/src/Makefile.in0000644000000000000000000000175215205072111012616 0ustar00 SHELL = @SHELL@ AWK = @AWK@ AWK ?= awk MKOCTFILE = @MKOCTFILE@ -v NC_CONFIG = @NC_CONFIG@ %.oct: %.cc ; $(MKOCTFILE) $< NCHEADER=$(shell $(NC_CONFIG) --includedir)/netcdf.h NETCDF_CPPFLAGS=@NETCDF_CPPFLAGS@ NETCDF_LIBS=@NETCDF_LIBS@ SRC = __netcdf__.cc all: __netcdf__.oct ../PKG_ADD netcdf_constants.h: $(info generating netcdf_constants.h) @if [ -f $(NCHEADER) ]; then \ $(AWK) -f netcdf_constants.awk $(NCHEADER) > netcdf_constants.h; \ elif [ -f /usr/include/netcdf.h ]; then \ $(AWK) -f netcdf_constants.awk /usr/include/netcdf.h > netcdf_constants.h; \ else \ echo >&2 "Couldnt find netcdf.h"; \ false; \ fi; clean: rm -f __netcdf__.o __netcdf__.oct netcdf_constants.h distclean: clean -rm -f oct-alt-includes.h -rm -f config.status config.log config.h -rm -f Makefile realclean: distclean rm -f ../PKG_ADD ../PKG_DEL __netcdf__.oct: $(SRC) netcdf_constants.h $(MKOCTFILE) $(NETCDF_CPPFLAGS) $(SRC) $(NETCDF_LIBS) ../PKG_ADD: $(SRC) $(shell sh ./PKG_ADD.sh) netcdf-1.0.20/src/PKG_ADD.sh0000644000000000000000000000254515205072111012177 0ustar00#!/bin/sh # Copyright (C) 2013-2022 Alexander Barth # # 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 . if [ "x$AWK" = "x" ]; then AWK=awk fi netcdf_functions=$($AWK -F'[(,]' '/DEFUN_DLD/ { print $2 } ' __netcdf__.cc) outfile_add=../PKG_ADD outfile_del=../PKG_DEL rm -f $outfile_add $outfile_del echo '% File automatically generated by PKG_ADD.sh' > $outfile_add for i in $netcdf_functions; do #echo ${i#netcdf_} cat >> $outfile_add < $outfile_del for i in $netcdf_functions; do #echo ${i#netcdf_} cat >> $outfile_del < // // 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 . #include #include #include #include #include #include #include #include #include #include "config.h" // Octave constructor to hold an array of ints #define NETCDF_INT_ARRAY int32NDArray static std::map netcdf_constants; void init() { #include "netcdf_constants.h" } int check_err(int status) { if (status != NC_NOERR) error("%s", nc_strerror(status)); return status; } // convert name to upper-case and add "NC_" prefix if it is missing std::string normalize_ncname(std::string name) { std::string prefix = "NC_"; std::string ncname = name; // to upper case std::transform(ncname.begin(), ncname.end(),ncname.begin(), ::toupper); // add prefix if it is missing if (ncname.substr(0, prefix.size()) != prefix) { ncname = prefix + ncname; } return ncname; } octave_value netcdf_get_constant(octave_value ov) { if (netcdf_constants.empty()) { init(); } if (ov.is_scalar_type()) { return ov.scalar_value(); } std::string name = ov.string_value(); name = normalize_ncname(name); std::map::const_iterator cst = netcdf_constants.find(name); if (cst != netcdf_constants.end ()) { return cst->second; } else { error("unknown netcdf constant: %s",name.c_str()); return octave_value(); } } size_t to_size_t(octave_value ov) { size_t sz; sz = static_cast(ov.uint64_scalar_value()); return sz; } void to_size_t_vector(octave_value ov, int len, size_t *vec) { uint64NDArray tmp = ov.uint64_array_value(); for (int i=0; i(tmp(len-i-1)); } } void to_ptrdiff_t_vector(octave_value ov, int len, ptrdiff_t *vec) { int64NDArray tmp = ov.int64_array_value(); for (int i=0; i(tmp(len-i-1)); } } void start_count_stride(int ncid, int varid, octave_value_list args,int len, int ndims, size_t* start,size_t* count,ptrdiff_t* stride) { OCTAVE_LOCAL_BUFFER (int, dimids, ndims); check_err(nc_inq_vardimid (ncid, varid, dimids)); // default values for start, count and stride // i.e. all variable is loaded for (int i=0; i 2) { if (args(2).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "start"); } to_size_t_vector(args(2),ndims,start); // if start is specified, the default for count is 1 (how odd!) for (int i=0; i 3) { if (args(3).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "count"); } to_size_t_vector(args(3),ndims,count); } // stride argument if (len > 4) { if (args(4).numel() != ndims) { error("number of elements of argument %s should match the number " "of dimension of the netCDF variable", "stride"); } to_ptrdiff_t_vector(args(4),ndims,stride); } } DEFUN_DLD(netcdf_getConstant, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{value} =} netcdf_getConstant(@var{name}) \n\ Returns the value of a NetCDF constant called @var{name}.\n\ @seealso{netcdf_getConstantNames}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } return netcdf_get_constant(args(0)); } DEFUN_DLD(netcdf_getConstantNames, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{value} =} netcdf_getConstantNames() \n\ Returns a list of all constant names.\n\ @end deftypefn\n\ @seealso{netcdf_getConstant}\n") { if (args.length() != 0) { print_usage (); return octave_value(); } if (netcdf_constants.empty()) { init(); } Cell c = Cell (dim_vector(1,netcdf_constants.size())); int i = 0; for (std::map::const_iterator p = netcdf_constants.begin (); p != netcdf_constants.end (); p++) { c(i++) = octave_value(p->first); } return octave_value(c); } DEFUN_DLD(netcdf_inqLibVers, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{vers} =} netcdf_inqLibVers() \n\ Returns the version of the NetCDF library.\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 0) { print_usage (); return octave_value (); } return octave_value(std::string(nc_inq_libvers())); } DEFUN_DLD(netcdf_setDefaultFormat, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{old_format} =} netcdf_setDefaultFormat(@var{format}) \n\ Sets the default format of the NetCDF library and returns the previous default format (as a numeric value). @var{format} can be \n\ \"format_classic\", \"format_64bit\", \"format_netcdf4\" or \"format_netcdf4_classic\". \n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 1) { print_usage (); return octave_value (); } int format = netcdf_get_constant(args(0)).int_value(); int old_format; check_err(nc_set_default_format(format, &old_format)); return octave_value(old_format); } // int nc_set_chunk_cache(size_t size, size_t nelems, float preemption); DEFUN_DLD(netcdf_setChunkCache, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_setChunkCache(@var{size}, @var{nelems}, @var{preemption}) \n\ Sets the default chunk cache settings in the HDF5 library. The settings applies to all files which are subsequently opened or created.\n\ @end deftypefn\n\ @seealso{netcdf_getChunkCache}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } size_t size = to_size_t(args(0)); size_t nelems = to_size_t(args(1)); float preemption = args(2).scalar_value(); check_err(nc_set_chunk_cache(size, nelems, preemption)); return octave_value(); } // int nc_get_chunk_cache(size_t *sizep, size_t *nelemsp, float *preemptionp); DEFUN_DLD(netcdf_getChunkCache, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{size}, @var{nelems}, @var{preemption}] =} netcdf_getChunkCache() \n\ Gets the default chunk cache settings in the HDF5 library. \n\ @end deftypefn\n\ @seealso{netcdf_setChunkCache}\n") { if (args.length() != 0) { print_usage (); return octave_value (); } size_t size; size_t nelems; float preemption; check_err(nc_get_chunk_cache(&size, &nelems, &preemption)); octave_value_list retval; retval(0) = octave_value(size); retval(1) = octave_value(nelems); retval(2) = octave_value(preemption); return retval; } DEFUN_DLD(netcdf_create, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{ncid} =} netcdf_create(@var{filename},@var{mode}) \n\ Creates the file named @var{filename} in the mode @var{mode} which can have the \n\ following values: \n\ \"clobber\" (overwrite existing files), \n\ \"noclobber\" (prevent to overwrite existing files) \n\ \"64bit_offset\" (use the 64bit-offset format), \n\ \"netcdf4\" (use the NetCDF4, i.e. HDF5 format) or \n\ \"share\" (concurrent reading of the dataset). \n\ @var{mode} can also be the numeric value return by netcdf_getConstant. In the later-case it can be combined with a bitwise-or. \n\ @end deftypefn\n\ @subsubheading Example\n\ @example \n\ mode = bitor(netcdf.getConstant(\"classic_model\"), ...\n\ netcdf.getConstant(\"netcdf4\")); \n\ ncid = netcdf.create(\"test.nc\",mode); \n\ @end example \n\ @seealso{netcdf_close}\n") { if (args.length() != 2) { print_usage (); return octave_value (); } std::string filename = args(0).string_value(); int mode = netcdf_get_constant(args(1)).int_value(); int ncid; check_err(nc_create(filename.c_str(), mode, &ncid)); return octave_value(ncid); } DEFUN_DLD(netcdf_open, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{ncid} =} netcdf_open(@var{filename},@var{mode}) \n\ Opens the file named @var{filename} in the mode @var{mode}.\n\ @end deftypefn\n\ @seealso{netcdf_close}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } std::string filename = args(0).string_value(); int mode = netcdf_get_constant(args(1)).int_value(); int ncid; check_err(nc_open(filename.c_str(), mode, &ncid)); return octave_value(ncid); } DEFUN_DLD(netcdf_abort, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_abort(@var{ncid}) \n\ Aborts all changes since the last time the dataset entered in define mode.\n\ @end deftypefn\n\ @seealso{netcdf_reDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_abort(ncid)); return octave_value(); } DEFUN_DLD(netcdf_sync, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_sync(@var{ncid}) \n\ Writes all changes to the disk and leaves the file open.\n\ @end deftypefn\n\ @seealso{netcdf_close}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_sync(ncid)); return octave_value(); } DEFUN_DLD(netcdf_setFill, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{old_mode} =} netcdf_setFill(@var{ncid},@var{fillmode}) \n\ Change the fill mode (@var{fillmode}) of the data set @var{ncid}. The previous value of the fill mode is returned. @var{fillmode} can be either \"fill\" or \"nofill\".\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int fillmode = netcdf_get_constant(args(1)).int_value(); int old_mode; check_err (nc_set_fill (ncid, fillmode, &old_mode)); return octave_value(old_mode); } //int nc_inq (int ncid, int *ndimsp, int *nvarsp, int *ngattsp, // int *unlimdimidp); DEFUN_DLD(netcdf_inq, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{ndims},@var{nvars},@var{ngatts},@var{unlimdimid}] =} netcdf_inq(@var{ncid}) \n\ Return the number of dimension (@var{ndims}), the number of variables (@var{nvars}), the number of global attributes (@var{ngatts}) and the id of the unlimited dimension (@var{unlimdimid}). \n\ If no unlimited dimension is declared -1 is returned. For NetCDF4 files, one should use \n\ the function netcdf_inqUnlimDims as multiple unlimite dimension exists. \n\ @end deftypefn\n\ @seealso{netcdf_inqUnlimDims}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int ndims, nvars, ngatts, unlimdimid; octave_value_list retval; check_err(nc_inq(ncid,&ndims,&nvars,&ngatts,&unlimdimid)); retval(0) = octave_value(ndims); retval(1) = octave_value(nvars); retval(2) = octave_value(ngatts); retval(3) = octave_value(unlimdimid); return retval; } // int nc_inq_unlimdims(int ncid, int *nunlimdimsp, int *unlimdimidsp); DEFUN_DLD(netcdf_inqUnlimDims, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{unlimdimids} =} netcdf_inqUnlimDims(@var{ncid}) \n\ Return the id of all unlimited dimensions of the NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_inq}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int nunlimdims; check_err(nc_inq_unlimdims(ncid, &nunlimdims, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,nunlimdims); NETCDF_INT_ARRAY unlimdimids = NETCDF_INT_ARRAY(dim_vector(1,nunlimdims)); check_err(nc_inq_unlimdims(ncid, &nunlimdims, tmp)); for (int i=0; i < nunlimdims; i++) { unlimdimids(i) = tmp[i]; } return octave_value(unlimdimids); } // int nc_inq_format (int ncid, int *formatp); DEFUN_DLD(netcdf_inqFormat, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{format} =} netcdf_inqFormat(@var{ncid}) \n\ Return the NetCDF format of the dataset @var{ncid}.\n\ Format might be one of the following \n\ \"FORMAT_CLASSIC\", \"FORMAT_64BIT\", \"FORMAT_NETCDF4\" or \"FORMAT_NETCDF4_CLASSIC\" \n\ @end deftypefn\n\ @seealso{netcdf_inq}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int format; check_err(nc_inq_format(ncid, &format)); if (format == NC_FORMAT_CLASSIC) { return octave_value("FORMAT_CLASSIC"); } if (format == NC_FORMAT_64BIT) { return octave_value("FORMAT_64BIT"); } if (format == NC_FORMAT_NETCDF4) { return octave_value("FORMAT_NETCDF4"); } return octave_value("FORMAT_NETCDF4_CLASSIC"); } // int nc_def_dim (int ncid, const char *name, size_t len, int *dimidp); DEFUN_DLD(netcdf_defDim, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{dimid} =} netcdf_defDim(@var{ncid},@var{name},@var{len}) \n\ Define the dimension with the name @var{name} and the length @var{len} in the dataset @var{ncid}. The id of the dimension is returned.\n\ @end deftypefn\n\ @seealso{netcdf_defVar}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); size_t len = to_size_t(args(2)); int dimid; check_err(nc_def_dim (ncid, name.c_str(), len, &dimid)); return octave_value(dimid); } // int nc_rename_dim(int ncid, int dimid, const char* name); DEFUN_DLD(netcdf_renameDim, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_renameDim(@var{ncid},@var{dimid},@var{name}) \n\ Renames the dimension with the id @var{dimid} in the data set @var{ncid}. @var{name} is the new name of the dimension.\n\ @end deftypefn\n\ @seealso{netcdf_defDim}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int dimid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_rename_dim (ncid, dimid, name.c_str())); return octave_value(); } // int nc_def_var (int ncid, const char *name, nc_type xtype, // int ndims, const int dimids[], int *varidp); DEFUN_DLD(netcdf_defVar, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{varid} = } netcdf_defVar(@var{ncid},@var{name},@var{xtype},@var{dimids}) \n\ Defines a variable with the name @var{name} in the dataset @var{ncid}. @var{xtype} can be \"byte\", \"ubyte\", \"short\", \"ushort\", \"int\", \"uint\", \"int64\", \"uint64\", \"float\", \"double\", \"char\" or the corresponding number as returned by netcdf_getConstant. The parameter @var{dimids} define the ids of the dimension. For scalar this parameter is the empty array ([]). The variable id is returned. \n\ @end deftypefn\n\ @seealso{netcdf_open,netcdf_defDim}\n") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value (); int xtype = netcdf_get_constant(args(2)).int_value();; Array tmp; if (!args(3).OV_ISEMPTY()) { tmp = args(3).vector_value (); } OCTAVE_LOCAL_BUFFER (int, dimids, tmp.numel()); for (int i = 0; i < tmp.numel(); i++) { dimids[i] = tmp(tmp.numel()-i-1); } int varid; check_err(nc_def_var (ncid, name.c_str(), xtype, tmp.numel(), dimids, &varid)); return octave_value(varid); } // int nc_rename_var(int ncid, int varid, const char* name); DEFUN_DLD(netcdf_renameVar, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_renameVar(@var{ncid},@var{varid},@var{name}) \n\ Renames the variable with the id @var{varid} in the data set @var{ncid}. @var{name} is the new name of the variable.\n\ @end deftypefn\n\ @seealso{netcdf_defVar}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_rename_var (ncid, varid, name.c_str())); return octave_value(); } // int nc_def_var_fill(int ncid, int varid, int no_fill, void *fill_value); DEFUN_DLD(netcdf_defVarFill, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_defVarFill(@var{ncid},@var{varid},@var{no_fill},@var{fillvalue}) \n\ Define the fill-value settings of the NetCDF variable @var{varid}.\n\ If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true.\n\ @end deftypefn\n\ @seealso{netcdf_inqVarFill}\n") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int no_fill = args(2).scalar_value(); // boolean octave_value fill_value = args(3); nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_DEF_VARV_FILL(netcdf_type,c_type,method) \ case netcdf_type: \ { \ c_type val; \ memcpy(&val, fill_value.method().fortran_vec(), sizeof(val)); \ nc_vlen_t vlendata = {1,(void*)&val}; \ check_err(nc_def_var_fill(ncid, varid, no_fill, &vlendata)); \ break; \ } OV_NETCDF_DEF_VARV_FILL(NC_BYTE, signed char, int8_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_DEF_VARV_FILL(NC_SHORT, short, int16_array_value) OV_NETCDF_DEF_VARV_FILL(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_DEF_VARV_FILL(NC_INT, int, int32_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_DEF_VARV_FILL(NC_INT64, long long, int64_array_value) OV_NETCDF_DEF_VARV_FILL(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_DEF_VARV_FILL(NC_FLOAT, float, float_array_value) OV_NETCDF_DEF_VARV_FILL(NC_DOUBLE,double,array_value) OV_NETCDF_DEF_VARV_FILL(NC_CHAR, char, char_array_value) } } else { switch (xtype) { #define OV_NETCDF_DEF_VAR_FILL(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_def_var_fill(ncid, varid, no_fill, fill_value.method().fortran_vec())); \ break; \ } OV_NETCDF_DEF_VAR_FILL(NC_BYTE, signed char, int8_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_DEF_VAR_FILL(NC_SHORT, short, int16_array_value) OV_NETCDF_DEF_VAR_FILL(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_DEF_VAR_FILL(NC_INT, int, int32_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_DEF_VAR_FILL(NC_INT64, long long, int64_array_value) OV_NETCDF_DEF_VAR_FILL(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_DEF_VAR_FILL(NC_FLOAT, float, float_array_value) OV_NETCDF_DEF_VAR_FILL(NC_DOUBLE,double,array_value) OV_NETCDF_DEF_VAR_FILL(NC_CHAR, char, char_array_value) } } return octave_value(); } // int nc_def_var_fill(int ncid, int varid, int no_fill, void *fill_value); DEFUN_DLD(netcdf_inqVarFill, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{no_fill},@var{fillvalue}] = } netcdf_inqVarFill(@var{ncid},@var{varid}) \n\ Determines the fill-value settings of the NetCDF variable @var{varid}.\n\ If @var{no_fill} is false, then the values between no-contiguous writes are filled with the value @var{fill_value}. This is disabled by setting @var{no_fill} to true.\n\ @end deftypefn\n\ @seealso{netcdf_defVarFill}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int no_fill; nc_type xtype, basetype; octave_value_list retval; octave_value data; check_err(nc_inq_vartype (ncid, varid, &xtype)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_INQ_VARV_FILL(netcdf_type,c_type) \ case netcdf_type: \ { \ c_type val = 0; \ nc_vlen_t vlendata = {1,(void*)&val}; \ check_err(nc_inq_var_fill(ncid, varid, &no_fill,&vlendata)); \ Array< c_type > fill_value = Array< c_type >(dim_vector(1,1)); \ memcpy(fill_value.fortran_vec(), vlendata.p, sizeof(c_type)); \ data = octave_value(fill_value); \ break; \ } OV_NETCDF_INQ_VARV_FILL(NC_BYTE,octave_int8) OV_NETCDF_INQ_VARV_FILL(NC_UBYTE,octave_uint8) OV_NETCDF_INQ_VARV_FILL(NC_SHORT,octave_int16) OV_NETCDF_INQ_VARV_FILL(NC_USHORT,octave_uint16) OV_NETCDF_INQ_VARV_FILL(NC_INT,octave_int32) OV_NETCDF_INQ_VARV_FILL(NC_UINT,octave_uint32) OV_NETCDF_INQ_VARV_FILL(NC_INT64,octave_int64) OV_NETCDF_INQ_VARV_FILL(NC_UINT64,octave_uint64) OV_NETCDF_INQ_VARV_FILL(NC_FLOAT,float) OV_NETCDF_INQ_VARV_FILL(NC_DOUBLE,double) OV_NETCDF_INQ_VARV_FILL(NC_CHAR,char) } } else { switch (xtype) { #define OV_NETCDF_INQ_VAR_FILL(netcdf_type,c_type) \ case netcdf_type: \ { \ Array< c_type > fill_value = Array< c_type >(dim_vector(1,1)); \ check_err(nc_inq_var_fill(ncid, varid, &no_fill, \ fill_value.fortran_vec())); \ data = octave_value(fill_value); \ break; \ } OV_NETCDF_INQ_VAR_FILL(NC_BYTE,octave_int8) OV_NETCDF_INQ_VAR_FILL(NC_UBYTE,octave_uint8) OV_NETCDF_INQ_VAR_FILL(NC_SHORT,octave_int16) OV_NETCDF_INQ_VAR_FILL(NC_USHORT,octave_uint16) OV_NETCDF_INQ_VAR_FILL(NC_INT,octave_int32) OV_NETCDF_INQ_VAR_FILL(NC_UINT,octave_uint32) OV_NETCDF_INQ_VAR_FILL(NC_INT64,octave_int64) OV_NETCDF_INQ_VAR_FILL(NC_UINT64,octave_uint64) OV_NETCDF_INQ_VAR_FILL(NC_FLOAT,float) OV_NETCDF_INQ_VAR_FILL(NC_DOUBLE,double) OV_NETCDF_INQ_VAR_FILL(NC_CHAR,char) } } //cout << "xtype3 " << xtype << " " << NC_DOUBLE << std::endl; retval(0) = octave_value(no_fill); retval(1) = data; return retval; } //nc_def_var_deflate(int ncid, int varid, int shuffle, int deflate, // int deflate_level); DEFUN_DLD(netcdf_defVarDeflate, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_defVarDeflate (@var{ncid},@var{varid},@var{shuffle},@var{deflate},@var{deflate_level}) \n\ Define the compression settings NetCDF variable @var{varid}.\n\ If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression).\n\ @end deftypefn\n\ @seealso{netcdf_inqVarDeflate}\n") { if (args.length() != 5) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int shuffle = args(2).scalar_value(); // boolean int deflate = args(3).scalar_value(); // boolean int deflate_level = args(4).scalar_value(); check_err(nc_def_var_deflate (ncid, varid, shuffle, deflate, deflate_level)); return octave_value(); } //nc_inq_var_deflate(int ncid, int varid, int *shufflep, // int *deflatep, int *deflate_levelp); DEFUN_DLD(netcdf_inqVarDeflate, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{shuffle},@var{deflate},@var{deflate_level}] = } netcdf_inqVarDeflate (@var{ncid},@var{varid}) \n\ Determines the compression settings NetCDF variable @var{varid}.\n\ If @var{deflate} is true, then the variable is compressed. The compression level @var{deflate_level} is an integer between 0 (no compression) and 9 (maximum compression).\n\ @end deftypefn\n\ @seealso{netcdf_defVarDeflate}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int shuffle, deflate, deflate_level; octave_value_list retval; int format; check_err(nc_inq_format(ncid, &format)); // nc_inq_var_deflate returns garbage for classic or 64bit files if (format == NC_FORMAT_CLASSIC || format == NC_FORMAT_64BIT) { shuffle = 0; deflate = 0; deflate_level = 0; } else { check_err(nc_inq_var_deflate(ncid, varid, &shuffle,&deflate,&deflate_level)); } retval(0) = octave_value(shuffle); retval(1) = octave_value(deflate); retval(2) = octave_value(deflate_level); return retval; } //int nc_def_var_chunking(int ncid, int varid, int storage, size_t *chunksizesp); //chunksizes can be ommited if storage is \"CONTIGUOUS\" DEFUN_DLD(netcdf_defVarChunking, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_defVarChunking (@var{ncid},@var{varid},@var{storage},@var{chunkSizes}) \n\ Define the chunking settings of NetCDF variable @var{varid}.\n\ If @var{storage} is the string \"chunked\", the variable is stored by chunk of the size @var{chunkSizes}.\n\ If @var{storage} is the string \"contiguous\", the variable is stored in a contiguous way.\n\ @end deftypefn\n\ @seealso{netcdf_inqVarChunking}\n") { if (args.length() != 3 && args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string storagestr = args(2).string_value(); int storage; std::transform(storagestr.begin(), storagestr.end(),storagestr.begin(), ::toupper); if (storagestr == "CHUNKED") { storage = NC_CHUNKED; } else if (storagestr == "CONTIGUOUS") { storage = NC_CONTIGUOUS; } else { error("unknown storage %s",storagestr.c_str()); return octave_value(); } if (args.length() == 4) { OCTAVE_LOCAL_BUFFER (size_t, chunksizes, args(3).numel()); to_size_t_vector(args(3), args(3).numel(),chunksizes); check_err(nc_def_var_chunking(ncid, varid, storage, chunksizes)); } else { check_err(nc_def_var_chunking(ncid, varid, storage, NULL)); } return octave_value(); } //int nc_inq_var_chunking(int ncid, int varid, int *storagep, size_t *chunksizesp); DEFUN_DLD(netcdf_inqVarChunking, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{storage},@var{chunkSizes}] = } netcdf_inqVarChunking (@var{ncid},@var{varid}) \n\ Determines the chunking settings of NetCDF variable @var{varid}.\n\ If @var{storage} is the string \"chunked\", the variable is stored by chunk of the size @var{chunkSizes}.\n\ If @var{storage} is the string \"contiguous\", the variable is stored in a contiguous way.\n\ @end deftypefn\n\ @seealso{netcdf_defVarChunking}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int storage; int ndims; octave_value_list retval; check_err(nc_inq_varndims (ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (size_t, chunksizes, ndims); check_err(nc_inq_var_chunking(ncid, varid, &storage, chunksizes)); if (storage == NC_CHUNKED) { retval(0) = octave_value("chunked"); // should use uint32NDArray on 32-bit? uint64NDArray chunkSizes = uint64NDArray(dim_vector(1,ndims)); for (int i = 0; i < ndims; i++) { chunkSizes(ndims-i-1) = chunksizes[i]; } retval(1) = octave_value(chunkSizes); } else { retval(0) = octave_value("contiguous"); retval(1) = octave_value(Array()); } return retval; } // nc_def_var_fletcher32(int ncid, int varid, int checksum); DEFUN_DLD(netcdf_defVarFletcher32, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_defVarFletcher32(@var{ncid},@var{varid},@var{checksum}) \n\ Defines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If @var{checksum} is the string \"FLETCHER32\", then fletcher32 checksums will be turned on for this variable. If @var{checksum} is \"NOCHECKSUM\", then checksums will be disabled. \n\ @end deftypefn\n\ @seealso{netcdf_defVar,netcdf_inqVarFletcher32}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int checksum = netcdf_get_constant(args(2)).int_value(); check_err(nc_def_var_fletcher32(ncid, varid, checksum)); return octave_value(); } DEFUN_DLD(netcdf_inqVarFletcher32, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{checksum} =} netcdf_inqVarFletcher32(@var{ncid},@var{varid}) \n\ Determines the checksum settings of the variable with the id @var{varid} in the data set @var{ncid}. If fletcher32 checksums is turned on for this variable, then @var{checksum} is the string \"FLETCHER32\". Otherwise it is the string \"NOCHECKSUM\". \n\ @end deftypefn\n\ @seealso{netcdf_defVar,netcdf_inqVarFletcher32}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int checksum; check_err(nc_inq_var_fletcher32(ncid, varid, &checksum)); if (checksum == NC_FLETCHER32) { return octave_value("FLETCHER32"); } else { return octave_value("NOCHECKSUM"); } } DEFUN_DLD(netcdf_endDef, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_endDef (@var{ncid}) \n\ Leaves define-mode of NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_reDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_enddef (ncid)); return octave_value(); } DEFUN_DLD(netcdf_reDef, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_reDef (@var{ncid}) \n\ Enter define-mode of NetCDF file @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_endDef}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_redef (ncid)); return octave_value(); } // http://www.unidata.ucar.edu/software/netcdf/docs/netcdf-c/nc_005fput_005fvar_005f-type.html#nc_005fput_005fvar_005f-type DEFUN_DLD(netcdf_putVar, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_putVar (@var{ncid},@var{varid},@var{data}) \n\ @deftypefnx {} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{data}) \n\ @deftypefnx {} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{data}) \n\ @deftypefnx {} {} netcdf_putVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride},@var{data}) \n\ Put data in a NetCDF variable.\n\ The data @var{data} is stored in the variable @var{varid} of the NetCDF file @var{ncid}. \n\ @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), \n\ @var{count} is the number of elements of to be written along each dimension (default all elements)\n\ and @var{stride} is the sampling interval.\n\ @end deftypefn\n\ @seealso{netcdf_endDef}\n") { if (args.length() < 3 || args.length() > 6) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value (); octave_value data = args(args.length()-1); int ndims; check_err(nc_inq_varndims (ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (size_t, start, ndims); OCTAVE_LOCAL_BUFFER (size_t, count, ndims); OCTAVE_LOCAL_BUFFER (ptrdiff_t, stride, ndims); nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); //int sliced_numel = tmp.numel(); if (xtype >= NC_FIRSTUSERTYPEID) { size_t datasz=0; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant write it", classid); return octave_value(); } if (!data.OV_ISCELL()) { error ("Expected data to be cell array"); return octave_value(); } } else { basetype = xtype; } start_count_stride(ncid, varid, args, args.length()-1, ndims, start, count, stride); // check if count matched size(data) if (xtype >= NC_FIRSTUSERTYPEID) { Cell ar = data.cell_value(); switch (basetype) { #define OV_NETCDF_PUT_VARA(netcdf_type,c_type,method) \ case netcdf_type: \ { \ for(octave_idx_type i=0;i v = ar(i).method(); \ nc_vlen_t ncl; \ ncl.len = v.numel(); \ ncl.p = (c_type*)v.fortran_vec(); \ count[0] = 1; \ check_err(nc_put_vars (ncid, varid, start, count, stride, &ncl)); \ start[0] = start[0]+1; \ } \ break; \ } OV_NETCDF_PUT_VARA(NC_BYTE, octave_int8, int8_array_value) OV_NETCDF_PUT_VARA(NC_UBYTE, octave_uint8, uint8_array_value) OV_NETCDF_PUT_VARA(NC_SHORT, octave_int16, int16_array_value) OV_NETCDF_PUT_VARA(NC_USHORT, octave_uint16, uint16_array_value) OV_NETCDF_PUT_VARA(NC_INT, octave_int32, int32_array_value) OV_NETCDF_PUT_VARA(NC_UINT, octave_uint32, uint32_array_value) OV_NETCDF_PUT_VARA(NC_INT64, octave_int64, int64_array_value) OV_NETCDF_PUT_VARA(NC_UINT64, octave_uint64, uint64_array_value) OV_NETCDF_PUT_VARA(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_VARA(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_VARA(NC_CHAR, char, char_array_value) default: { error("unknown type %d" ,basetype); } } } else { switch (xtype) { #define OV_NETCDF_PUT_VAR(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_put_vars (ncid, varid, start, count, stride, (c_type*)data.method().fortran_vec())); \ break; \ } OV_NETCDF_PUT_VAR(NC_BYTE, signed char, int8_array_value) OV_NETCDF_PUT_VAR(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_PUT_VAR(NC_SHORT, short, int16_array_value) OV_NETCDF_PUT_VAR(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_PUT_VAR(NC_INT, int, int32_array_value) OV_NETCDF_PUT_VAR(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_PUT_VAR(NC_INT64, long long, int64_array_value) OV_NETCDF_PUT_VAR(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_PUT_VAR(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_VAR(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_VAR(NC_CHAR, char, char_array_value) default: { error("unknown type %d" ,xtype); } } } return octave_value(); } DEFUN_DLD(netcdf_getVar, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid}) \n\ @deftypefnx {} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start}) \n\ @deftypefnx {} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start},@var{count}) \n\ @deftypefnx {} {@var{data} =} netcdf_getVar (@var{ncid},@var{varid},@var{start},@var{count},@var{stride}) \n\ Get the data from a NetCDF variable.\n\ The data @var{data} is loaded from the variable @var{varid} of the NetCDF file @var{ncid}. \n\ @var{start} is the start index of each dimension (0-based and defaults to a vector of zeros), \n\ @var{count} is the number of elements of to be written along each dimension (default all elements)\n\ and @var{stride} is the sampling interval.\n\ @end deftypefn\n\ @seealso{netcdf_putVar}\n") { if (args.length() < 2 || args.length() > 5) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value (); int ndims; octave_value data; nc_type xtype, basetype; check_err(nc_inq_vartype (ncid, varid, &xtype)); check_err(nc_inq_varndims (ncid, varid, &ndims)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); return octave_value(); } } //std::cout << "ndims " << ndims << std::endl; OCTAVE_LOCAL_BUFFER (size_t, start, ndims); OCTAVE_LOCAL_BUFFER (size_t, count, ndims); OCTAVE_LOCAL_BUFFER (ptrdiff_t, stride, ndims); size_t sz = 1; dim_vector sliced_dim_vector; if (ndims < 2) { sliced_dim_vector.resize(2); sliced_dim_vector(0) = 1; sliced_dim_vector(1) = 1; } else { sliced_dim_vector.resize(ndims); } start_count_stride(ncid, varid, args, args.length(), ndims, start, count, stride); // std::cout << "count " << count[0] << std::endl; // std::cout << "start " << start[0] << std::endl; // std::cout << "stide " << stride[0] << std::endl; // total size sz for (int i=0; i arr = Array < float >(sliced_dim_vector); // float* time; // time = (float*)malloc(10 * sizeof(float)); // check_err(nc_get_vars(ncid, varid, start, count, stride, time)); // data = octave_value(arr); // return data; // user type if (xtype >= NC_FIRSTUSERTYPEID) { switch (basetype) { #define OV_NETCDF_GET_VARA_CASE(netcdf_type,c_type) \ case netcdf_type: \ { \ Cell arr = Cell(sliced_dim_vector); \ /* necessary for netcdf 4.1.3 */ \ if (sz > 0) { \ OCTAVE_LOCAL_BUFFER (nc_vlen_t, vlendata, sz); \ check_err(nc_get_vars(ncid, varid, start, count, stride, vlendata)); \ dim_vector dv; \ dv.resize(2); \ for (size_t vi=0; vi a = Array < c_type >(dv); \ memcpy(a.fortran_vec(), vlendata[vi].p, vlendata[vi].len*sizeof(c_type)); \ arr(vi) = a; \ } \ nc_free_vlens(sz, vlendata); \ } else { \ warning_with_id("netcdf:variable-size-zero", "variable size 0 or currently too large to process"); \ } \ data = octave_value(arr); \ break; \ } OV_NETCDF_GET_VARA_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_VARA_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_VARA_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_VARA_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_VARA_CASE(NC_INT,octave_int32) OV_NETCDF_GET_VARA_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_VARA_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_VARA_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_VARA_CASE(NC_FLOAT,float) OV_NETCDF_GET_VARA_CASE(NC_DOUBLE,double) OV_NETCDF_GET_VARA_CASE(NC_CHAR, char) default: { error("unknown type %d" ,xtype); } } } else { switch (xtype) { #define OV_NETCDF_GET_VAR_CASE(netcdf_type,c_type) \ case netcdf_type: \ { \ Array < c_type > arr = Array < c_type >(sliced_dim_vector); \ /* necessary for netcdf 4.1.3 */ \ if (sz > 0) { \ check_err(nc_get_vars(ncid, varid, start, count, stride, arr.fortran_vec())); \ } else { \ warning_with_id("netcdf:variable-size-zero", "variable size 0 or currently too large to process"); \ } \ data = octave_value(arr); \ break; \ } OV_NETCDF_GET_VAR_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_VAR_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_VAR_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_VAR_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_VAR_CASE(NC_INT,octave_int32) OV_NETCDF_GET_VAR_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_VAR_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_VAR_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_VAR_CASE(NC_FLOAT,float) OV_NETCDF_GET_VAR_CASE(NC_DOUBLE,double) OV_NETCDF_GET_VAR_CASE(NC_CHAR, char) default: { error("unknown type %d" ,xtype); } } } return data; } DEFUN_DLD(netcdf_close, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_close(@var{ncid}) \n\ Close the NetCDF file with the id @var{ncid}.\n\ @end deftypefn\n\ @seealso{netcdf_open}\n") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); check_err(nc_close(ncid)); return octave_value (); } // int nc_inq_attname(int ncid, int varid, int attnum, char *name); DEFUN_DLD(netcdf_inqAttName, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{name} =} netcdf_inqAttName (@var{ncid},@var{varid},@var{attnum}) \n\ Get the name of a NetCDF attribute.\n\ This function returns the name of the attribute with the id @var{attnum} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); int attnum = args(2).scalar_value(); char name[NC_MAX_NAME+1]; check_err(nc_inq_attname(ncid, varid, attnum, name)); return octave_value(std::string(name)); } DEFUN_DLD(netcdf_inqAttID, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{attnum} =} netcdf_inqAttID(@var{ncid},@var{varid},@var{attname}) \n\ Return the attribute id @var{attnum} of the attribute named @var{attname} of the variable @var{varid} in the dataset @var{ncid}. \n\ For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); int attnum; check_err (nc_inq_attid (ncid, varid, attname.c_str(), &attnum)); return octave_value(attnum); } //int nc_inq_att (int ncid, int varid, const char *name, // nc_type *xtypep, size_t *lenp); DEFUN_DLD(netcdf_inqAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{xtype},@var{len}] = } netcdf_inqAtt(@var{ncid},@var{varid},@var{name}) \n\ Get attribute type and length.\n\ @seealso{netcdf_inqAttName}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); int xtype; size_t len; octave_value_list retval; check_err(nc_inq_att(ncid, varid, name.c_str(), &xtype, &len)); retval(0) = octave_value(xtype); retval(1) = octave_value(len); return retval; } DEFUN_DLD(netcdf_getAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{data} =} netcdf_getAtt (@var{ncid},@var{varid},@var{name}) \n\ Get the value of a NetCDF attribute.\n\ This function returns the value of the attribute called @var{name} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_putAtt}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); nc_type xtype, basetype; size_t len; octave_value data; check_err(nc_inq_att(ncid, varid, attname.c_str(), &xtype, &len)); if (xtype < NC_FIRSTUSERTYPEID) basetype = xtype; else { size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, xtype, NULL, &datasz, &basetype, &nfields, &classid)); if (classid != NC_VLEN) { warning ("Non vlen class user variable '%d' - cant read it", classid); } } #define OV_NETCDF_GET_ATT_CASE(netcdf_type,c_type) \ if (basetype == netcdf_type) \ { \ Array< c_type > arr = Array< c_type >(dim_vector(1,len)); \ check_err(nc_get_att(ncid, varid, attname.c_str(), arr.fortran_vec())); \ data = octave_value(arr); \ } #define OV_NETCDF_GETVLEN_ATT_CASE(netcdf_type,c_type) \ if(basetype == netcdf_type) \ { \ OCTAVE_LOCAL_BUFFER (nc_vlen_t, vlendata, len); \ Array< c_type > arr = Array< c_type >(dim_vector(1,len)); \ check_err(nc_get_att(ncid, varid, attname.c_str(), vlendata)); \ for (size_t vi=0; vi= NC_FIRSTUSERTYPEID) { OV_NETCDF_GETVLEN_ATT_CASE(NC_BYTE,octave_int8) OV_NETCDF_GETVLEN_ATT_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GETVLEN_ATT_CASE(NC_SHORT,octave_int16) OV_NETCDF_GETVLEN_ATT_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GETVLEN_ATT_CASE(NC_INT,octave_int32) OV_NETCDF_GETVLEN_ATT_CASE(NC_UINT,octave_uint32) OV_NETCDF_GETVLEN_ATT_CASE(NC_INT64,octave_int64) OV_NETCDF_GETVLEN_ATT_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GETVLEN_ATT_CASE(NC_FLOAT,float) OV_NETCDF_GETVLEN_ATT_CASE(NC_DOUBLE,double) OV_NETCDF_GETVLEN_ATT_CASE(NC_CHAR, char) } else { OV_NETCDF_GET_ATT_CASE(NC_BYTE,octave_int8) OV_NETCDF_GET_ATT_CASE(NC_UBYTE,octave_uint8) OV_NETCDF_GET_ATT_CASE(NC_SHORT,octave_int16) OV_NETCDF_GET_ATT_CASE(NC_USHORT,octave_uint16) OV_NETCDF_GET_ATT_CASE(NC_INT,octave_int32) OV_NETCDF_GET_ATT_CASE(NC_UINT,octave_uint32) OV_NETCDF_GET_ATT_CASE(NC_INT64,octave_int64) OV_NETCDF_GET_ATT_CASE(NC_UINT64,octave_uint64) OV_NETCDF_GET_ATT_CASE(NC_FLOAT,float) OV_NETCDF_GET_ATT_CASE(NC_DOUBLE,double) OV_NETCDF_GET_ATT_CASE(NC_CHAR, char) } return data; } DEFUN_DLD(netcdf_putAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_putAtt (@var{ncid},@var{varid},@var{name},@var{data}) \n\ Defines a NetCDF attribute.\n\ This function defines the attribute called @var{name} of the variable \n\ @var{varid} in the NetCDF file @var{ncid}. The value of the attribute will be @var{data}. \n\ For global attributes @var{varid} can be \n\ netcdf_getConstant(\"global\").\n\ @seealso{netcdf_getAtt}\n\ @end deftypefn") { if (args.length() != 4) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string attname = args(2).string_value(); octave_value data = args(3); nc_type xtype; // get matching netcdf type if (data.is_string()) xtype = NC_CHAR; else if (data.is_int8_type()) xtype = NC_BYTE; else if (data.is_uint8_type()) xtype = NC_UBYTE; else if (data.is_int16_type()) xtype = NC_SHORT; else if (data.is_uint16_type()) xtype = NC_USHORT; else if (data.is_int32_type()) xtype = NC_INT; else if (data.is_uint32_type()) xtype = NC_UINT; else if (data.is_int64_type()) xtype = NC_INT64; else if (data.is_uint64_type()) xtype = NC_UINT64; else if (data.is_single_type()) xtype = NC_FLOAT; else xtype = NC_DOUBLE; //cout << "xtype " << xtype << endl; size_t len = data.numel(); switch (xtype) { #define OV_NETCDF_PUT_ATT(netcdf_type,c_type,method) \ case netcdf_type: \ { \ check_err(nc_put_att (ncid, varid, attname.c_str(), xtype, len, data.method().fortran_vec())); \ break; \ } OV_NETCDF_PUT_ATT(NC_BYTE, signed char, int8_array_value) OV_NETCDF_PUT_ATT(NC_UBYTE, unsigned char, uint8_array_value) OV_NETCDF_PUT_ATT(NC_SHORT, short, int16_array_value) OV_NETCDF_PUT_ATT(NC_USHORT, unsigned short, uint16_array_value) OV_NETCDF_PUT_ATT(NC_INT, int, int32_array_value) OV_NETCDF_PUT_ATT(NC_UINT, unsigned int, uint32_array_value) OV_NETCDF_PUT_ATT(NC_INT64, long long, int64_array_value) OV_NETCDF_PUT_ATT(NC_UINT64, unsigned long long, uint64_array_value) OV_NETCDF_PUT_ATT(NC_FLOAT, float, float_array_value) OV_NETCDF_PUT_ATT(NC_DOUBLE,double,array_value) OV_NETCDF_PUT_ATT(NC_CHAR, char, char_array_value) } /* check_err(nc_put_att (int ncid, int varid, const char *name, nc_type xtype, size_t len, const void *op));*/ return octave_value(); } DEFUN_DLD(netcdf_copyAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_copyAtt (@var{ncid},@var{varid},@var{name},@var{ncid_out},@var{varid_out}) \n\ Copies the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid} \n\ to the variable @var{varid_out} in the data set @var{ncid_out}. \n\ To copy a global attribute use netcdf_getConstant(\"global\") for @var{varid} or @var{varid_out}.\n\ @seealso{netcdf_getAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 5) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); int ncid_out = args(3).scalar_value(); int varid_out = args(4).scalar_value(); check_err (nc_copy_att (ncid, varid, name.c_str(), ncid_out, varid_out)); return octave_value (); } DEFUN_DLD(netcdf_renameAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_renameAtt(@var{ncid},@var{varid},@var{old_name},@var{new_name}) \n\ Renames the attribute named @var{old_name} of the variable @var{varid} in the data set @var{ncid}. @var{new_name} is the new name of the attribute.\n\ To rename a global attribute use netcdf_getConstant(\"global\") for @var{varid}.\n\ @seealso{netcdf_copyAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 4) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string old_name = args(2).string_value(); std::string new_name = args(3).string_value(); check_err(nc_rename_att (ncid, varid, old_name.c_str(), new_name.c_str())); return octave_value (); } DEFUN_DLD(netcdf_delAtt, args,, "-*- texinfo -*-\n\ @deftypefn {} {} netcdf_delAtt(@var{ncid},@var{varid},@var{name}) \n\ Deletes the attribute named @var{name} of the variable @var{varid} in the data set @var{ncid}. \n\ To delete a global attribute use netcdf_getConstant(\"global\") for @var{varid}.\n\ @seealso{netcdf_defAtt,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 3) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); std::string name = args(2).string_value(); check_err(nc_del_att (ncid, varid, name.c_str())); return octave_value (); } DEFUN_DLD(netcdf_inqVarID, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{varid} = } netcdf_inqVarID (@var{ncid},@var{name}) \n\ Return the id of a variable based on its name.\n\ @seealso{netcdf_defVar,netcdf_inqVarIDs}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string varname = args(1).string_value(); int varid; check_err(nc_inq_varid(ncid,varname.c_str(), &varid)); return octave_value(varid); } DEFUN_DLD(netcdf_inqVarIDs, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{varids} = } netcdf_inqVarID (@var{ncid}) \n\ Return all variable ids.\n\ This functions returns all variable ids in a NetCDF file or NetCDF group.\n\ @seealso{netcdf_inqVarID}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value (); } int ncid = args(0).scalar_value(); int nvars; check_err(nc_inq_varids(ncid, &nvars, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,nvars); NETCDF_INT_ARRAY varids = NETCDF_INT_ARRAY(dim_vector(1,nvars)); check_err(nc_inq_varids(ncid, &nvars, tmp)); for (int i=0; i < nvars; i++) { varids(i) = tmp[i]; } return octave_value(varids); } DEFUN_DLD(netcdf_inqVar, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{name},@var{nctype},@var{dimids},@var{nattr}] = } netcdf_inqVar (@var{ncid},@var{varid}) \n\ Inquires information about a NetCDF variable.\n\ This functions returns the @var{name}, the NetCDF type @var{nctype}, an array of dimension ids \n\ @var{dimids} and the number of attributes @var{nattr} of the NetCDF variable. @var{nctype} in an \n\ integer corresponding NetCDF constants.\n\ @seealso{netcdf_inqVarID,netcdf_getConstant}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int varid = args(1).scalar_value(); char name[NC_MAX_NAME+1]; int ndims, natts; nc_type xtype; octave_value_list retval; check_err(nc_inq_varndims(ncid, varid, &ndims)); OCTAVE_LOCAL_BUFFER (int, dimids, ndims); check_err(nc_inq_var(ncid, varid, name, &xtype, &ndims, dimids, &natts)); retval(0) = octave_value(std::string(name)); retval(1) = octave_value(xtype); // copy output arguments Array dimids_ = Array(dim_vector(1,ndims)); for (int i = 0; i < ndims; i++) { dimids_(i) = dimids[ndims-i-1]; } retval(2) = octave_value(dimids_); retval(3) = octave_value(natts); return retval; } DEFUN_DLD(netcdf_inqDim, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{name},@var{length}] =} netcdf_inqDim(@var{ncid},@var{dimid}) \n\ Returns the name and length of a NetCDF dimension.\n\ @seealso{netcdf_inqDimID}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int dimid = args(1).scalar_value(); octave_value_list retval; char name[NC_MAX_NAME+1]; size_t length; check_err(nc_inq_dim(ncid, dimid, name, &length)); retval(0) = octave_value(std::string(name)); retval(1) = octave_value(length); return retval; } DEFUN_DLD(netcdf_inqDimID, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{dimid} =} netcdf_inqDimID(@var{ncid},@var{dimname}) \n\ Return the id of a NetCDF dimension.\n\ @seealso{netcdf_inqDim}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string dimname = args(1).string_value(); int id; octave_value_list retval; check_err(nc_inq_dimid(ncid, dimname.c_str(), &id)); retval(0) = octave_value(id); return retval; } // int nc_inq_dimids(int ncid, int *ndims, int *dimids, int include_parents); DEFUN_DLD(netcdf_inqDimIDs, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{dimids} =} netcdf_inqDimID(@var{ncid}) \n\ @deftypefnx {} {@var{dimids} =} netcdf_inqDimID(@var{ncid},@var{include_parents}) \n\ Return the dimension ids defined in a NetCDF file.\n\ If @var{include_parents} is 1, the dimension ids of the parent group are also returned.\n\ Per default this is not the case (@var{include_parents} is 0).\n\ @seealso{netcdf_inqDim}\n\ @end deftypefn") { if (args.length() != 1 && args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int include_parents = 0; if (args.length() == 2) { include_parents = args(0).scalar_value(); } int ndims; check_err(nc_inq_ndims(ncid, &ndims)); OCTAVE_LOCAL_BUFFER(int,tmp,ndims); NETCDF_INT_ARRAY dimids = NETCDF_INT_ARRAY(dim_vector(1,ndims)); check_err(nc_inq_dimids(ncid, &ndims, tmp, include_parents)); for (int i=0; i < ndims; i++) { dimids(i) = tmp[i]; } return octave_value(dimids); } // groups //int nc_def_grp(int parent_ncid, const char *name, int *new_ncid); DEFUN_DLD(netcdf_defGrp, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{new_ncid} =} netcdf_defGrp(@var{ncid},@var{name}) \n\ Define a group in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int parent_ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int new_ncid; check_err(nc_def_grp(parent_ncid, name.c_str(), &new_ncid)); return octave_value(new_ncid); } // int nc_inq_grps(int ncid, int *numgrps, int *ncids); DEFUN_DLD(netcdf_inqGrps, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{ncids} =} netcdf_inqGrps(@var{ncid}) \n\ Return all groups ids in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int numgrps; check_err(nc_inq_grps(ncid, &numgrps, NULL)); OCTAVE_LOCAL_BUFFER(int,tmp,numgrps); NETCDF_INT_ARRAY ncids = NETCDF_INT_ARRAY(dim_vector(1,numgrps)); check_err(nc_inq_grps(ncid, NULL, tmp)); for (int i=0; i < numgrps; i++) { ncids(i) = tmp[i]; } return octave_value(ncids); } //int nc_inq_grpname(int ncid, char *name); DEFUN_DLD(netcdf_inqGrpName, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{name} =} netcdf_inqGrpName(@var{ncid}) \n\ Return group name in a NetCDF file.\n\ @seealso{netcdf_inqGrps}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); char name[NC_MAX_NAME+1]; check_err(nc_inq_grpname(ncid, name)); return octave_value(std::string(name)); } //int nc_inq_grpname_full(int ncid, size_t *lenp, char *full_name); DEFUN_DLD(netcdf_inqGrpNameFull, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{name} =} netcdf_inqGrpNameFull(@var{ncid}) \n\ Return full name of group in NetCDF file.\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); size_t len; check_err(nc_inq_grpname_len(ncid,&len)); OCTAVE_LOCAL_BUFFER(char, name, len+1); if (name == 0) { error ("netcdf: error allocating buffer for name\n"); return octave_value (); } octave_value retval; check_err(nc_inq_grpname_full(ncid, &len, name)); retval = octave_value(std::string(name)); return retval; } // int nc_inq_grp_parent(int ncid, int *parent_ncid); DEFUN_DLD(netcdf_inqGrpParent, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{parent_ncid} =} netcdf_inqGrpParent(@var{ncid}) \n\ Return id of the parent group\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 1) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); int parent_ncid; check_err(nc_inq_grp_parent(ncid, &parent_ncid)); return octave_value(parent_ncid); } // int nc_inq_grp_full_ncid(int ncid, char *full_name, int *grp_ncid); DEFUN_DLD(netcdf_inqGrpFullNcid, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{grp_ncid} =} netcdf_inqGrpFullNcid(@var{ncid},@var{name}) \n\ Return the group id based on the full group name.\n\ @seealso{netcdf_inqGrpName}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int grp_ncid; int format; check_err(nc_inq_format(ncid, &format)); if (format == NC_FORMAT_CLASSIC || format == NC_FORMAT_64BIT) { if (name == "/") { return octave_value(ncid); } else { error("groups are not supported in this format"); return octave_value(); } } // nc_inq_grp_full_ncid makes a segmentation fault if // file is in non-HDF5 format check_err(nc_inq_grp_full_ncid(ncid, name.c_str(),&grp_ncid)); return octave_value(grp_ncid); } // int nc_inq_ncid(int ncid, const char *name, int *grp_ncid); DEFUN_DLD(netcdf_inqNcid, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{grp_ncid} =} netcdf_inqNcid(@var{ncid},@var{name}) \n\ Return group id based on its name\n\ @seealso{netcdf_inqGrpFullNcid}\n\ @end deftypefn") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value(); int grp_ncid; check_err(nc_inq_ncid(ncid, name.c_str(), &grp_ncid)); return octave_value(grp_ncid); } // int nc_def_vlen(int ncid, const char *name, nc_type base_typeid, nc_type *xtypep); DEFUN_DLD(netcdf_defVlen, args,, "-*- texinfo -*-\n\ @deftypefn {} {@var{varid} = } netcdf_defVlen(@var{ncid},@var{typename},@var{basetype}) \n\ Defines a NC_VLEN variable length array type with the type name @var{typename} and a base datatype of @var{basetype} in the dataset @var{ncid}. @var{basetype} can be \"byte\", \"ubyte\", \"short\", \"ushort\", \"int\", \"uint\", \"int64\", \"uint64\", \"float\", \"double\", \"char\" or the corresponding number as returned by netcdf_getConstant. The new data type id is returned. \n\ @end deftypefn\n\ @seealso{netcdf_open,netcdf_defVar, netcdf_inqVlen}\n") { if (args.length() != 3) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); std::string name = args(1).string_value (); nc_type basetype = 0; if (args(2).is_string()) basetype = netcdf_get_constant(args(2)).int_value(); else basetype = args(2).int_value(); nc_type varid; check_err(nc_def_vlen (ncid, name.c_str(), basetype, &varid)); return octave_value(varid); } // int nc_inq_vlen(int ncid, nc_type xtype, char *name, size_t datasz, nc_type *basetypeid); DEFUN_DLD(netcdf_inqVlen, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}] = } netcdf_inqVlen(@var{ncid},@var{typeid}) \n\ Provide information on a NC_VLEN variable length array type @var{typeid} in the dataset @var{ncid}.\n\ \n \ The function returns the typename, bytesize, and base type id.\n \ \n \ @end deftypefn\n\ @seealso{netcdf_open, netcdf_defVlen}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); nc_type nctypeid = netcdf_get_constant(args(1)).int_value();; nc_type basetypeid; char name[NC_MAX_NAME+1]; size_t datasz; check_err(nc_inq_vlen (ncid, nctypeid, name, &datasz, &basetypeid)); octave_value_list retval; retval(0) = octave_value(name); retval(1) = octave_value(datasz); retval(2) = octave_value(basetypeid); return retval; } // int nc_inq_user_type(int ncid, nc_type xtype, char *name, size_t datasz, nc_type *basetypeid, size_t nfields, int *classp); DEFUN_DLD(netcdf_inqUserType, args,, "-*- texinfo -*-\n\ @deftypefn {} {[@var{typename}, @var{bytesize}, @var{basetypeid}, @var{numfields}, @var{classid}] = } netcdf_inqUserType(@var{ncid},@var{typeid}) \n\ Provide information on a user defined type @var{typeid} in the dataset @var{ncid}.\n\ \n \ The function returns the typename, bytesize, base type id, number of fields and class identifier of the type.\n \ \n \ @end deftypefn\n\ @seealso{netcdf_open, netcdf_defVlen, netcdf_inqVlen}\n") { if (args.length() != 2) { print_usage (); return octave_value(); } int ncid = args(0).scalar_value(); nc_type nctypeid = netcdf_get_constant(args(1)).int_value();; nc_type basetypeid; char name[NC_MAX_NAME+1]; size_t datasz; int classid; size_t nfields; check_err(nc_inq_user_type (ncid, nctypeid, name, &datasz, &basetypeid, &nfields, &classid)); octave_value_list retval; retval(0) = octave_value(name); retval(1) = octave_value(datasz); retval(2) = octave_value(basetypeid); retval(3) = octave_value(nfields); retval(4) = octave_value(classid); return retval; } netcdf-1.0.20/src/aclocal.m40000644000000000000000000000127315205072111012407 0ustar00# generated automatically by aclocal 1.18.1 -*- Autoconf -*- # Copyright (C) 1996-2025 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_include([m4/octave-forge.m4]) netcdf-1.0.20/src/autogen.sh0000755000000000000000000000123415205072111012545 0ustar00#! /bin/sh ## Octave netcdf package bootstrap script ## Run this to generate the configure script set -e # halt if unhandled error force="" if [ "x$1" == "x--force" ]; then force="--force"; rm -f config.guess config.sub; fi # install these if we need to ? if ! [ -f config.guess ]; then wget -O config.guess https://git.savannah.gnu.org/cgit/config.git/plain/config.guess; chmod a+rx config.guess; fi if ! [ -f config.sub ]; then wget -O config.sub https://git.savannah.gnu.org/cgit/config.git/plain/config.sub; chmod a+rx config.sub; fi aclocal $force autoconf $force # generate configure script autoheader -f #rm -f configure.ac rm -rf autom4te.cache netcdf-1.0.20/src/config.guess0000755000000000000000000014324215205072111013072 0ustar00#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2025-07-10' # 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; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system '$me' is run on. Options: -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-2025 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 # Just in case it came from the environment. GUESS= # 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. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { 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" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c17 c99 c89 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; 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/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #if defined(__ANDROID__) LIBC=android #else #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #elif defined(__LLVM_LIBC__) LIBC=llvm #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; 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". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-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) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) 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 # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; 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/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 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. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) 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 test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; 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. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; 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'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; 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) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # 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:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) 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; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int 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 GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *: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 test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 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 test -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 test "$HP_ARCH" = ""; then 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 test "$HP_ARCH" = hppa2.0w then 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 GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) 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; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; 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*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; 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:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; 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/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 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/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; x86_64:[Mm]anagarm:*:*|i?86:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-pc-managarm-mlibc" ;; *:[Mm]anagarm:*:*) GUESS="$UNAME_MACHINE-unknown-managarm-mlibc" ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __ARM_EABI__ #ifdef __ARM_PCS_VFP ABI=eabihf #else ABI=eabi #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; esac fi GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` 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 GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; kvx:cos:*:*) GUESS=$UNAME_MACHINE-unknown-cos ;; kvx:mbr:*:*) GUESS=$UNAME_MACHINE-unknown-mbr ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build CPU=$UNAME_MACHINE LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then ABI=64 sed 's/^ //' << EOF > "$dummy.c" #ifdef __i386__ ABI=x86 #else #ifdef __ILP32__ ABI=x32 #endif #endif EOF cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` eval "$cc_set_abi" case $ABI in x86) CPU=i686 ;; x32) LIBCABI=${LIBC}x32 ;; esac fi GUESS=$CPU-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; 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. GUESS=i386-sequent-sysv4 ;; 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. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; 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 GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; 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 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; 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 configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; 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*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; ppc:Haiku:*:*) # Haiku running on Apple PowerPC GUESS=powerpc-apple-haiku ;; *:Haiku:*:*) # Haiku modern gcc (not bound by BeOS compat) GUESS=$UNAME_MACHINE-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$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 # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *: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 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; x86_64:[Ii]ronclad:*:*|i?86:[Ii]ronclad:*:*) GUESS=$UNAME_MACHINE-pc-ironclad-mlibc ;; *:[Ii]ronclad:*:*) GUESS=$UNAME_MACHINE-unknown-ironclad-mlibc ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif int 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 (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 #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #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; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&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 fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" # time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-1.0.20/src/config.h.in0000644000000000000000000000132315205072111012566 0ustar00/* config.h.in. Generated from configure.ac by autoheader. */ #include "undef-ah-octave.h" /* macro for alternative Octave symbols */ #undef OV_ISCELL /* macro for alternative Octave symbols */ #undef OV_ISEMPTY /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION #include "oct-alt-includes.h" netcdf-1.0.20/src/config.sub0000755000000000000000000011600715205072111012534 0ustar00#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2025 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268,SC2162 # see below for rationale timestamp='2025-07-10' # 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"). # Please send patches to . # # 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: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # 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. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -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-2025 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 ;; *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 # Split fields of configuration type saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in cloudabi*-eabi* \ | kfreebsd*-gnu* \ | knetbsd*-gnu* \ | kopensolaris*-gnu* \ | ironclad-* \ | linux-* \ | managarm-* \ | netbsd*-eabi* \ | netbsd*-gnu* \ | nto-qnx* \ | os2-emx* \ | rtmk-nova* \ | storm-chaos* \ | uclinux-gnu* \ | uclinux-uclibc* \ | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) case $field1-$field2 in # Shorthands that happen to contain a single dash convex-c[12] | convex-c3[248]) basic_machine=$field2-convex basic_os= ;; decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Do not treat sunos as a manufacturer sun*os*) basic_machine=$field1 basic_os=$field2 ;; # Manufacturers 3100* \ | 32* \ | 3300* \ | 3600* \ | 7300* \ | acorn \ | altos* \ | apollo \ | apple \ | atari \ | att* \ | axis \ | be \ | bull \ | cbm \ | ccur \ | cisco \ | commodore \ | convergent* \ | convex* \ | cray \ | crds \ | dec* \ | delta* \ | dg \ | digital \ | dolphin \ | encore* \ | gould \ | harris \ | highlevel \ | hitachi* \ | hp \ | ibm* \ | intergraph \ | isi* \ | knuth \ | masscomp \ | microblaze* \ | mips* \ | motorola* \ | ncr* \ | news \ | next \ | ns \ | oki \ | omron* \ | pc533* \ | rebel \ | rom68k \ | rombug \ | semi \ | sequent* \ | sgi* \ | siemens \ | sim \ | sni \ | sony* \ | stratus \ | sun \ | sun[234]* \ | tektronix \ | tti* \ | ultra \ | unicom* \ | wec \ | winbond \ | wrs) basic_machine=$field1-$field2 basic_os= ;; tock* | zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # 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) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | delta-motorola | 3300-motorola | motorola-delta | motorola-3300) cpu=m68k vendor=motorola ;; # This used to be dpx2*, but that gets the RS6000-based # DPX/20 and the x86-based DPX/2-100 wrong. See # https://oldskool.silicium.org/stations/bull_dpx20.htm # https://www.feb-patrimoine.com/english/bull_dpx2.htm # https://www.feb-patrimoine.com/english/unix_and_bull.htm dpx2 | dpx2[23]00 | dpx2[23]xx) cpu=m68k vendor=bull ;; dpx2100 | dpx21xx) cpu=i386 vendor=bull ;; dpx20) cpu=rs6000 vendor=bull ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. obj= case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) saved_IFS=$IFS IFS="-" read kernel os <&2 fi ;; *) echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 exit 1 ;; esac case $obj in aout* | coff* | elf* | pe*) ;; '') # empty is fine ;; *) echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 exit 1 ;; esac # Here we handle the constraint that a (synthetic) cpu and os are # valid only in combination with each other and nowhere else. case $cpu-$os in # The "javascript-unknown-ghcjs" triple is used by GHC; we # accept it here in order to tolerate that, but reject any # variations. javascript-ghcjs) ;; javascript-* | *-ghcjs) echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os-$obj in linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ | linux-mlibc*- | linux-musl*- | linux-newlib*- \ | linux-relibc*- | linux-uclibc*- | linux-ohos*- ) ;; uclinux-uclibc*- | uclinux-gnu*- ) ;; ironclad-mlibc*-) ;; managarm-mlibc*- | managarm-kernel*- ) ;; windows*-msvc*-) ;; -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; -kernel*- ) echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; *-kernel*- ) echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; *-msvc*- ) echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 exit 1 ;; kfreebsd*-gnu*- | knetbsd*-gnu*- | netbsd*-gnu*- | kopensolaris*-gnu*-) ;; vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; nto-qnx*-) ;; os2-emx-) ;; rtmk-nova-) ;; *-eabi*- | *-gnueabi*-) ;; ios*-simulator- | tvos*-simulator- | watchos*-simulator- ) ;; none--*) # None (no kernel, i.e. freestanding / bare metal), # can be paired with an machine code file format ;; -*-) # Blank kernel with real OS is always fine. ;; --*) # Blank kernel and OS with real machine code file format is always fine. ;; *-*-*) echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos* | *-solaris*) 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 ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) 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 ;; esac echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp nil t) # time-stamp-start: "timestamp='" # time-stamp-format: "%Y-%02m-%02d" # time-stamp-end: "'" # End: netcdf-1.0.20/src/configure0000755000000000000000000037712115205072111012466 0ustar00#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.72 for octave netcdf package 1.0.20. # # # Copyright (C) 1992-1996, 1998-2017, 2020-2023 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 ${ZSH_VERSION+y} && (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 e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 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 \${ZSH_VERSION+y} && (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 e in #( e) case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; 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 case e in #( e) exitcode=1; echo positional parameters were not saved. ;; esac fi test x\$exitcode = x0 || exit 1 blah=\$(echo \$(echo blah)) test x\"\$blah\" = xblah || 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 case e in #( e) as_have_required=no ;; esac fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null then : else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$as_shell as_have_required=yes if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null then : break 2 fi fi done;; esac as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) if { test -f "$SHELL" || test -f "$SHELL.exe"; } && as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null then : CONFIG_SHELL=$SHELL as_have_required=yes fi ;; esac fi 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'. printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno then : printf "%s\n" "$0: This script requires a shell more modern than all" printf "%s\n" "$0: the shells that I found on your system." if test ${ZSH_VERSION+y} ; then printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else printf "%s\n" "$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 ;; esac 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=`printf "%s\n" "$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 || printf "%s\n" 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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 || printf "%s\n" 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 ' t clear :clear 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" || { printf "%s\n" "$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 } # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated 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='octave netcdf package' PACKAGE_TARNAME='octave-netcdf-package' PACKAGE_VERSION='1.0.20' PACKAGE_STRING='octave netcdf package 1.0.20' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_subst_vars='LTLIBOBJS LIBOBJS NETCDF_CPPFLAGS NETCDF_LIBS NC_CONFIG OBJEXT EXEEXT ac_ct_CXX CPPFLAGS LDFLAGS CXXFLAGS CXX MKOCTFILE SED AWK target_os target_vendor target_cpu target 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 runstatedir 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 ' ac_precious_vars='build_alias host_alias target_alias CXX CXXFLAGS LDFLAGS LIBS CPPFLAGS CCC' # 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' runstatedir='${localstatedir}/run' 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 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=`printf "%s\n" "$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=`printf "%s\n" "$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 ;; -runstatedir | --runstatedir | --runstatedi | --runstated \ | --runstate | --runstat | --runsta | --runst | --runs \ | --run | --ru | --r) ac_prev=runstatedir ;; -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ | --run=* | --ru=* | --r=*) runstatedir=$ac_optarg ;; -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=`printf "%s\n" "$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=`printf "%s\n" "$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. printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && printf "%s\n" "$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" ;; *) printf "%s\n" "$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 runstatedir 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 || printf "%s\n" 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 octave netcdf package 1.0.20 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] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --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/octave-netcdf-package] --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] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of octave netcdf package 1.0.20:";; esac cat <<\_ACEOF Some influential environment variables: CXX C++ compiler command CXXFLAGS 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 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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 configure.gnu first; this name is used for a wrapper for # Metaconfig's "Configure" on case-insensitive file systems. 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 printf "%s\n" "$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 octave netcdf package configure 1.0.20 generated by GNU Autoconf 2.72 Copyright (C) 2023 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_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest.beam 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\"" printf "%s\n" "$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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext then : ac_retval=0 else case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 ;; esac fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile ac_configure_args_raw= for ac_arg do case $ac_arg in *\'*) ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append ac_configure_args_raw " '$ac_arg'" done case $ac_configure_args_raw in *$as_nl*) ac_safe_unquote= ;; *) ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. ac_unsafe_a="$ac_unsafe_z#~" ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; esac 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 octave netcdf package $as_me 1.0.20, which was generated by GNU Autoconf 2.72. Invocation command line was $ $0$ac_configure_args_raw _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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac printf "%s\n" "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=`printf "%s\n" "$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=$? # Sanitize IFS. IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo printf "%s\n" "## ---------------- ## ## 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_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 printf "%s\n" "$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 printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && printf "%s\n" "$as_me: caught signal $ac_signal" printf "%s\n" "$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 printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. if test -n "$CONFIG_SITE"; then ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi for ac_site_file in $ac_site_files do case $ac_site_file in #( */*) : ;; #( *) : ac_site_file=./$ac_site_file ;; esac if test -f "$ac_site_file" && test -r "$ac_site_file"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Test code for whether the C++ compiler supports C++98 (global declarations) ac_cxx_conftest_cxx98_globals=' // Does the compiler advertise C++98 conformance? #if !defined __cplusplus || __cplusplus < 199711L # error "Compiler does not advertise C++98 conformance" #endif // These inclusions are to reject old compilers that // lack the unsuffixed header files. #include #include // and are *not* freestanding headers in C++98. extern void assert (int); namespace std { extern int strcmp (const char *, const char *); } // Namespaces, exceptions, and templates were all added after "C++ 2.0". using std::exception; using std::strcmp; namespace { void test_exception_syntax() { try { throw "test"; } catch (const char *s) { // Extra parentheses suppress a warning when building autoconf itself, // due to lint rules shared with more typical C programs. assert (!(strcmp) (s, "test")); } } template struct test_template { T const val; explicit test_template(T t) : val(t) {} template T add(U u) { return static_cast(u) + val; } }; } // anonymous namespace ' # Test code for whether the C++ compiler supports C++98 (body of main) ac_cxx_conftest_cxx98_main=' assert (argc); assert (! argv[0]); { test_exception_syntax (); test_template tt (2.0); assert (tt.add (4) == 6.0); assert (true && !false); } ' # Test code for whether the C++ compiler supports C++11 (global declarations) ac_cxx_conftest_cxx11_globals=' // Does the compiler advertise C++ 2011 conformance? #if !defined __cplusplus || __cplusplus < 201103L # error "Compiler does not advertise C++11 conformance" #endif namespace cxx11test { constexpr int get_val() { return 20; } struct testinit { int i; double d; }; class delegate { public: delegate(int n) : n(n) {} delegate(): delegate(2354) {} virtual int getval() { return this->n; }; protected: int n; }; class overridden : public delegate { public: overridden(int n): delegate(n) {} virtual int getval() override final { return this->n * 2; } }; class nocopy { public: nocopy(int i): i(i) {} nocopy() = default; nocopy(const nocopy&) = delete; nocopy & operator=(const nocopy&) = delete; private: int i; }; // for testing lambda expressions template Ret eval(Fn f, Ret v) { return f(v); } // for testing variadic templates and trailing return types template auto sum(V first) -> V { return first; } template auto sum(V first, Args... rest) -> V { return first + sum(rest...); } } ' # Test code for whether the C++ compiler supports C++11 (body of main) ac_cxx_conftest_cxx11_main=' { // Test auto and decltype auto a1 = 6538; auto a2 = 48573953.4; auto a3 = "String literal"; int total = 0; for (auto i = a3; *i; ++i) { total += *i; } decltype(a2) a4 = 34895.034; } { // Test constexpr short sa[cxx11test::get_val()] = { 0 }; } { // Test initializer lists cxx11test::testinit il = { 4323, 435234.23544 }; } { // Test range-based for int array[] = {9, 7, 13, 15, 4, 18, 12, 10, 5, 3, 14, 19, 17, 8, 6, 20, 16, 2, 11, 1}; for (auto &x : array) { x += 23; } } { // Test lambda expressions using cxx11test::eval; assert (eval ([](int x) { return x*2; }, 21) == 42); double d = 2.0; assert (eval ([&](double x) { return d += x; }, 3.0) == 5.0); assert (d == 5.0); assert (eval ([=](double x) mutable { return d += x; }, 4.0) == 9.0); assert (d == 5.0); } { // Test use of variadic templates using cxx11test::sum; auto a = sum(1); auto b = sum(1, 2); auto c = sum(1.0, 2.0, 3.0); } { // Test constructor delegation cxx11test::delegate d1; cxx11test::delegate d2(); cxx11test::delegate d3(45); } { // Test override and final cxx11test::overridden o1(55464); } { // Test nullptr char *c = nullptr; } { // Test template brackets test_template<::test_template> v(test_template(12)); } { // Unicode literals auto const *utf8 = u8"UTF-8 string \u2500"; char16_t const *utf16 = u"UTF-16 string \u2500"; char32_t const *utf32 = U"UTF-32 string \u2500"; } ' # Test code for whether the C compiler supports C++11 (complete). ac_cxx_conftest_cxx11_program="${ac_cxx_conftest_cxx98_globals} ${ac_cxx_conftest_cxx11_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} ${ac_cxx_conftest_cxx11_main} return ok; } " # Test code for whether the C compiler supports C++98 (complete). ac_cxx_conftest_cxx98_program="${ac_cxx_conftest_cxx98_globals} int main (int argc, char **argv) { int ok = 0; ${ac_cxx_conftest_cxx98_main} return ok; } " # Auxiliary files required by this configure script. ac_aux_files="config.guess config.sub" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else case e in #( e) as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 ;; esac 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. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" 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,) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&5 printf "%s\n" "$as_me: error: '$ac_var' was set to '$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' was not set in the previous run" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: '$ac_var' has changed since the previous run:" >&5 printf "%s\n" "$as_me: error: '$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&5 printf "%s\n" "$as_me: warning: ignoring whitespace changes in '$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: '$ac_old_val'" >&5 printf "%s\n" "$as_me: former value: '$ac_old_val'" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: '$ac_new_val'" >&5 printf "%s\n" "$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=`printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run '${MAKE-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" # Avoid warnings for redefining AH-generated preprocessor symbols of # Octave. # 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 printf %s "checking target system type... " >&6; } if test ${ac_cv_target+y} then : printf %s "(cached) " >&6 else case e in #( e) if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "${ac_aux_dir}config.sub" $target_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $target_alias failed" "$LINENO" 5 fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 printf "%s\n" "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_AWK+y} then : printf %s "(cached) " >&6 else case e in #( e) 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_AWK="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in #( *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; #( *) ac_count=0 printf %s 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" printf "%s\n" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed # Extract the first word of "mkoctfile", so it can be a program name with args. set dummy mkoctfile; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_MKOCTFILE+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$MKOCTFILE"; then ac_cv_prog_MKOCTFILE="$MKOCTFILE" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_MKOCTFILE="mkoctfile" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi MKOCTFILE=$ac_cv_prog_MKOCTFILE if test -n "$MKOCTFILE"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKOCTFILE" >&5 printf "%s\n" "$MKOCTFILE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$MKOCTFILE" && { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: no mkoctfile found on path" >&5 printf "%s\n" "$as_me: WARNING: no mkoctfile found on path" >&2;} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then case $host_os in mingw*) # try demangle spaces in escaped input strings MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"` ;; *) ;; esac fi # The same value of CXX as Octave was compiled with is supposed to be used. CXX=`${MKOCTFILE} -p CXX` # The check for flags to enable C++11 is broken with a C++20 compiler (because # the type of u8"" literals changed) in autoconf before version 2.73. # Octave requires C++11 since version 4.2, so it is enabled by the CXX as # returned by mkoctfile. Skip broken check which would demote to C++11. ac_cv_prog_cxx_cxx11="" ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_CXX="$ac_tool_prefix$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 printf "%s\n" "$CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC clang++ do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_CXX+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_CXX="$ac_prog" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 printf "%s\n" "$ac_ct_CXX" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. printf "%s\n" "$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\"" printf "%s\n" "$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 printf "%s\n" "$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 (void) { ; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C++ compiler works" >&5 printf %s "checking whether the C++ compiler works... " >&6; } ac_link_default=`printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? printf "%s\n" "$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+y} && 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 case e in #( e) ac_file='' ;; esac fi if test -z "$ac_file" then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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 case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C++ compiler default output file name" >&5 printf %s "checking for C++ compiler default output file name... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 printf "%s\n" "$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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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 case e in #( e) { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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; } ;; esac fi rm -f conftest conftest$ac_cv_exeext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 printf "%s\n" "$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 (void) { FILE *f = fopen ("conftest.out", "w"); if (!f) return 1; 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. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 printf %s "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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? printf "%s\n" "$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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? printf "%s\n" "$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 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$as_me: error: in '$ac_pwd':" >&2;} as_fn_error 77 "cannot run C++ compiled programs. If you meant to cross compile, use '--host'. See 'config.log' for more details" "$LINENO" 5; } fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext \ conftest.o conftest.obj conftest.out ac_clean_files=$ac_clean_files_save { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 printf %s "checking for suffix of object files... " >&6; } if test ${ac_cv_objext+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; 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\"" printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? printf "%s\n" "$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 case e in #( e) printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in '$ac_pwd':" >&5 printf "%s\n" "$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; } ;; esac fi rm -f conftest.$ac_cv_objext conftest.$ac_ext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C++" >&5 printf %s "checking whether the compiler supports GNU C++... " >&6; } if test ${ac_cv_cxx_compiler_gnu+y} then : printf %s "(cached) " >&6 else case e in #( e) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_compiler_gnu=yes else case e in #( e) ac_compiler_gnu=no ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 printf "%s\n" "$ac_cv_cxx_compiler_gnu" >&6; } ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+y} ac_save_CXXFLAGS=$CXXFLAGS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 printf %s "checking whether $CXX accepts -g... " >&6; } if test ${ac_cv_prog_cxx_g+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes else case e in #( e) CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : else case e in #( e) ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 printf "%s\n" "$ac_cv_prog_cxx_g" >&6; } if test $ac_test_CXXFLAGS; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_prog_cxx_stdcxx=no if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5 printf %s "checking for $CXX option to enable C++11 features... " >&6; } if test ${ac_cv_prog_cxx_cxx11+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx11=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx11_program _ACEOF for ac_arg in '' -std=gnu++11 -std=gnu++0x -std=c++11 -std=c++0x -qlanglvl=extended0x -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx11=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx11" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx11" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx11" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx11" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx11" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx11" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx11 ac_prog_cxx_stdcxx=cxx11 ;; esac fi fi if test x$ac_prog_cxx_stdcxx = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5 printf %s "checking for $CXX option to enable C++98 features... " >&6; } if test ${ac_cv_prog_cxx_cxx98+y} then : printf %s "(cached) " >&6 else case e in #( e) ac_cv_prog_cxx_cxx98=no ac_save_CXX=$CXX cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_cxx_conftest_cxx98_program _ACEOF for ac_arg in '' -std=gnu++98 -std=c++98 -qlanglvl=extended -AA do CXX="$ac_save_CXX $ac_arg" if ac_fn_cxx_try_compile "$LINENO" then : ac_cv_prog_cxx_cxx98=$ac_arg fi rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cxx_cxx98" != "xno" && break done rm -f conftest.$ac_ext CXX=$ac_save_CXX ;; esac fi if test "x$ac_cv_prog_cxx_cxx98" = xno then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 printf "%s\n" "unsupported" >&6; } else case e in #( e) if test "x$ac_cv_prog_cxx_cxx98" = x then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 printf "%s\n" "none needed" >&6; } else case e in #( e) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_cxx98" >&5 printf "%s\n" "$ac_cv_prog_cxx_cxx98" >&6; } CXX="$CXX $ac_cv_prog_cxx_cxx98" ;; esac fi ac_cv_prog_cxx_stdcxx=$ac_cv_prog_cxx_cxx98 ac_prog_cxx_stdcxx=cxx98 ;; esac fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nc-config", so it can be a program name with args. set dummy ${ac_tool_prefix}nc-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_NC_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$NC_CONFIG"; then ac_cv_prog_NC_CONFIG="$NC_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_NC_CONFIG="${ac_tool_prefix}nc-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi NC_CONFIG=$ac_cv_prog_NC_CONFIG if test -n "$NC_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NC_CONFIG" >&5 printf "%s\n" "$NC_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi fi if test -z "$ac_cv_prog_NC_CONFIG"; then ac_ct_NC_CONFIG=$NC_CONFIG # Extract the first word of "nc-config", so it can be a program name with args. set dummy nc-config; ac_word=$2 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 printf %s "checking for $ac_word... " >&6; } if test ${ac_cv_prog_ac_ct_NC_CONFIG+y} then : printf %s "(cached) " >&6 else case e in #( e) if test -n "$ac_ct_NC_CONFIG"; then ac_cv_prog_ac_ct_NC_CONFIG="$ac_ct_NC_CONFIG" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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_NC_CONFIG="nc-config" printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi ;; esac fi ac_ct_NC_CONFIG=$ac_cv_prog_ac_ct_NC_CONFIG if test -n "$ac_ct_NC_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NC_CONFIG" >&5 printf "%s\n" "$ac_ct_NC_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NC_CONFIG" = x; then NC_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac NC_CONFIG=$ac_ct_NC_CONFIG fi else NC_CONFIG="$ac_cv_prog_NC_CONFIG" fi if test -z "$NC_CONFIG"; then as_fn_error 1 "nc-config not found" "$LINENO" 5; fi NETCDF_LIBS=`$NC_CONFIG --libs` NETCDF_CPPFLAGS=`$NC_CONFIG --cflags` { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for netcdf4 support" >&5 printf %s "checking for netcdf4 support... " >&6; } NETCDF_V4=`$NC_CONFIG --has-nc4` if test x$NETCDF_V4 == xyes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "netcdf4 support missing. Did you disable netcdf4 features?" "$LINENO" 5 fi # Checks for octave depreciated symbols # Simple symbol alternatives of different Octave versions. save_altsyms_CXX="$CXX" save_altsyms_CXXFLAGS="$CXXFLAGS" save_altsyms_LDFLAGS="$LDFLAGS" save_altsyms_LIBS="$LIBS" OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.." OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then MSYSTEM="${MSYSTEM}" else MSYSTEM="none" fi case X$MSYSTEM in XMINGW64*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` ;; XMINGW32*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'` ;; *) ;; esac CXX=`${MKOCTFILE} -p CXX` CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS" LDFLAGS="-L$OCTLIBDIR $LDFLAGS" LIBS="-loctinterp $LIBS" echo '/* generated by configure */' > oct-alt-includes.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking is_cell or iscell" >&5 printf %s "checking is_cell or iscell... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { octave_value ().iscell (); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define OV_ISCELL iscell" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: iscell" >&5 printf "%s\n" "iscell" >&6; } echo ' ' >> oct-alt-includes.h else case e in #( e) printf "%s\n" "#define OV_ISCELL is_cell" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: is_cell" >&5 printf "%s\n" " is_cell" >&6; } echo '' >> oct-alt-includes.h ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking is_empty or isempty" >&5 printf %s "checking is_empty or isempty... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main (void) { octave_value ().isempty (); ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO" then : printf "%s\n" "#define OV_ISEMPTY isempty" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: isempty" >&5 printf "%s\n" "isempty" >&6; } echo ' ' >> oct-alt-includes.h else case e in #( e) printf "%s\n" "#define OV_ISEMPTY is_empty" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: is_empty" >&5 printf "%s\n" " is_empty" >&6; } echo '' >> oct-alt-includes.h ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CXX=$save_altsyms_CXX CXXFLAGS=$save_altsyms_CXXFLAGS LDFLAGS=$save_altsyms_LDFLAGS LIBS=$save_altsyms_LIBS ac_config_files="$ac_config_files Makefile" 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=`printf "%s\n" "$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" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 printf "%s\n" "$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 ${ZSH_VERSION+y} && (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 e in #( e) case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac ;; esac fi # Reset variables that may have inherited troublesome values from # the environment. # IFS needs to be set, to space, tab, and newline, in precisely that order. # (If _AS_PATH_WALK were called with IFS unset, it would have the # side effect of setting IFS to empty, thus disabling word splitting.) # Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl IFS=" "" $as_nl" PS1='$ ' PS2='> ' PS4='+ ' # Ensure predictable behavior from utilities with locale-dependent output. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # We cannot yet rely on "unset" to work, but we need these variables # to be unset--not just set to an empty or harmless value--now, to # avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct # also avoids known problems related to "unset" and subshell syntax # in other old shells (e.g. bash 2.01 and pdksh 5.2.14). for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH do eval test \${$as_var+y} \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done # Ensure that fds 0, 1, and 2 are open. if (exec 3>&0) 2>/dev/null; then :; else exec 0&1) 2>/dev/null; then :; else exec 1>/dev/null; fi if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. if ${PATH_SEPARATOR+false} :; 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 # 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 case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac 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 printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # 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 printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi printf "%s\n" "$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 case e in #( e) as_fn_append () { eval $1=\$$1\$2 } ;; esac 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 case e in #( e) as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } ;; esac 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 || printf "%s\n" 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 # Determine whether it's possible to make 'echo' print without a newline. # These variables are no longer used directly by Autoconf, but are AC_SUBSTed # for compatibility with existing Makefiles. 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 # For backward compatibility with old third-party macros, we provide # the shell variables $as_echo and $as_echo_n. New code should use # AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. as_echo='printf %s\n' as_echo_n='printf %s' 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=`printf "%s\n" "$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 || printf "%s\n" 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_sed_cpp="y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" as_tr_cpp="eval sed '$as_sed_cpp'" # deprecated # Sed expression to map a string onto a valid variable name. as_sed_sh="y%*+%pp%;s%[^_$as_cr_alnum]%_%g" as_tr_sh="eval sed '$as_sed_sh'" # deprecated 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 octave netcdf package $as_me 1.0.20, which was generated by GNU Autoconf 2.72. 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 ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ octave netcdf package config.status 1.0.20 configured by $0, generated by GNU Autoconf 2.72, with options \\"\$ac_cs_config\\" Copyright (C) 2023 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 ) printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$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=`printf "%s\n" "$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 ) printf "%s\n" "$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 \printf "%s\n" "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 printf "%s\n" "$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+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || 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=`printf "%s\n" "$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 '` printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`printf "%s\n" "$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 || printf "%s\n" 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=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`printf "%s\n" "$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@*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 printf "%s\n" "$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"; } && { printf "%s\n" "$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 printf "%s\n" "$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 { printf "%s\n" "/* $configure_input */" >&1 \ && 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$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 printf "%s\n" "/* $configure_input */" >&1 \ && 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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS " >&5 printf "%s\n" " octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS " >&6; } netcdf-1.0.20/src/configure.ac0000644000000000000000000001156215205072111013037 0ustar00dnl The configure script is generated by autogen.sh from configure.base dnl and the various configure.add files in the source tree. Edit dnl configure.base and reprocess rather than modifying ./configure. ### Copyright (C) 2018-2025 John Donoghue ### ### 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 ### . dnl autoconf 2.13 certainly doesn't work! What is the minimum requirement? AC_PREREQ(2.2) AC_INIT([octave netcdf package],[1.0.20]) AC_CONFIG_HEADERS([config.h]) # Avoid warnings for redefining AH-generated preprocessor symbols of # Octave. AH_TOP([#include "undef-ah-octave.h"]) AC_CONFIG_MACRO_DIRS([m4]) AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl Kill caching --- this ought to be the default define([AC_CACHE_LOAD], )dnl define([AC_CACHE_SAVE], )dnl dnl uncomment to put support files in another directory dnl AC_CONFIG_AUX_DIR(admin) dnl if tools we need AC_PROG_AWK AC_PROG_SED dnl Check for mkoctfile and octave AC_CHECK_PROG([MKOCTFILE],mkoctfile,mkoctfile) test -z "$MKOCTFILE" && AC_MSG_WARN([no mkoctfile found on path]) if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then case $host_os in mingw*) # try demangle spaces in escaped input strings MKOCTFILE=`echo $MKOCTFILE | $SED "s,\\\\\ ,?,g"` ;; *) ;; esac fi # The same value of CXX as Octave was compiled with is supposed to be used. CXX=`${MKOCTFILE} -p CXX` # The check for flags to enable C++11 is broken with a C++20 compiler (because # the type of u8"" literals changed) in autoconf before version 2.73. # Octave requires C++11 since version 4.2, so it is enabled by the CXX as # returned by mkoctfile. Skip broken check which would demote to C++11. ac_cv_prog_cxx_cxx11="" AC_PROG_CXX AC_LANG(C++) dnl ********************************************************** dnl checking for nc-config dnl AC_CHECK_PROG(NC_CONFIG, nc-config, nc-config) AC_CHECK_TOOL(NC_CONFIG, nc-config, []) if test -z "$NC_CONFIG"; then AC_MSG_ERROR([nc-config not found], 1); fi NETCDF_LIBS=`$NC_CONFIG --libs` NETCDF_CPPFLAGS=`$NC_CONFIG --cflags` AC_SUBST(NETCDF_LIBS) AC_SUBST(NETCDF_CPPFLAGS) dnl The following will be either "yes" or "no" AC_MSG_CHECKING(for netcdf4 support) NETCDF_V4=`$NC_CONFIG --has-nc4` if test x$NETCDF_V4 == xyes; then AC_MSG_RESULT(yes) else AC_MSG_RESULT(no) AC_MSG_ERROR(netcdf4 support missing. Did you disable netcdf4 features?) fi dnl ********************************************************** # Checks for octave depreciated symbols # Simple symbol alternatives of different Octave versions. save_altsyms_CXX="$CXX" save_altsyms_CXXFLAGS="$CXXFLAGS" save_altsyms_LDFLAGS="$LDFLAGS" save_altsyms_LIBS="$LIBS" OCTINCLUDEDIR="${OCTINCLUDEDIR:-`$MKOCTFILE -p OCTINCLUDEDIR`}/.." OCTLIBDIR=${OCTLIBDIR:-`$MKOCTFILE -p OCTLIBDIR`} if test "X${IGNORE_MINGW_PATH_MODIFICATION}" == "X"; then MSYSTEM="${MSYSTEM}" else MSYSTEM="none" fi case X$MSYSTEM in XMINGW64*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw64,g"` ;; XMINGW32*) OCTAVE_HOME=`${MKOCTFILE} -p OCTAVE_HOME | $SED 's,\\\\,/,g'` # change \ to / and replace octave home part with mingw part OCTINCLUDEDIR=`echo $OCTINCLUDEDIR | $SED -e 's,\\\\,/,g' -e "s,${OCTAVE_HOME},/mingw32,g"` OCTLIBDIR=`echo $OCTLIBDIR | $SED -e 's,\\\\,/,g -e "s,${OCTAVE_HOME},/mingw32,g"'` ;; *) ;; esac CXX=`${MKOCTFILE} -p CXX` CXXFLAGS="-I$OCTINCLUDEDIR $CXXFLAGS" LDFLAGS="-L$OCTLIBDIR $LDFLAGS" LIBS="-loctinterp $LIBS" OF_OCTAVE_LIST_ALT_SYMS([ [dnl [is_cell], [iscell], [[octave_value ().iscell ();]], [OV_ISCELL], [], [] ], [dnl [is_empty], [isempty], [[octave_value ().isempty ();]], [OV_ISEMPTY], [], [] ] ],[oct-alt-includes.h]) CXX=$save_altsyms_CXX CXXFLAGS=$save_altsyms_CXXFLAGS LDFLAGS=$save_altsyms_LDFLAGS LIBS=$save_altsyms_LIBS dnl ********************************************************** AC_CONFIG_FILES([Makefile]) AC_OUTPUT AC_MSG_RESULT([ octave-forge is configured with mkoctfile: $MKOCTFILE nc-config: $NC_CONFIG netCDF compiler flags: $NETCDF_CPPFLAGS netCDF libraries: $NETCDF_LIBS ]) netcdf-1.0.20/src/m4/0000755000000000000000000000000015205072111011064 5ustar00netcdf-1.0.20/src/m4/octave-forge.m40000644000000000000000000000576015205072111013717 0ustar00# Copyright (C) 2017-2018 Olaf Till # Modifications to print what is searching for by JohnD # # 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 . # arguments of OF_OCTAVE_ALT_SYMS (see also description of # OF_OCTAVE_LIST_ALT_SYMS below): # # $1: symbol version 1 # $2: symbol version 2 # $3: test for symbol version 2 # $4: macro name to access alternative symbols # $5: include directives for symbol version 1 # $6: include directives for symbol version 2 # (a list of lists of args 1--6 is $1 of OF_OCTAVE_LIST_ALT_SYMS) # $7: name of generated include file with alternatives of Octave headers # (arg7 is $2 of OF_OCTAVE_LIST_ALT_SYMS) AC_DEFUN([OF_OCTAVE_ALT_SYMS], [ AC_MSG_CHECKING([$1 or $2]) AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include ] $6], [$3])], [AC_DEFINE($4, [[$2]], [macro for alternative Octave symbols]) AC_MSG_RESULT([$2]) echo '$6' >> $7], [AC_DEFINE($4, [[$1]], [macro for alternative Octave symbols]) AC_MSG_RESULT([$1]) echo '$5' >> $7] ) ]) # OF_OCTAVE_LIST_ALT_SYMS is called in the following way: # # OF_OCTAVE_LIST_ALT_SYMS([ # [dnl # [old_octave_symbol], # [new_octave_symbol], # [[compilation test] # [for new_octave_symbol]], # [NAME_OF_GENERATED_MACRO____WILL_EXPAND_TO_OLD_OR_NEW_SYMBOL], # [[include directives] # [except #include ] # [necessary to compile with old_octave_symbol]], # [[include directives] # [except #include ] # [nessary to compile with new_octave_symbol] # [and to compile the test]] # ], # # ... further such lists as the above # # ], # # [name-of-header-file-for-alternative-octave-iclude-directives.h]) # # # This file should be put into src/m4/, and the line # # AC_CONFIG_MACRO_DIRS([m4]) # # should be put into src/configure.ac. The package should use # autoheader to generate config.h.in (src/bootstrap should contain the # lines 'aclocal', 'autoconf', and 'autoheader -f'). Package code # should include config.h and use the generated macros to access the # alternative symbols of Octave. An example of a call to # OF_OCTAVE_LIST_ALT_SYMS in src/configure.ac is available together # with this file. AC_DEFUN([OF_OCTAVE_LIST_ALT_SYMS], [ echo '/* generated by configure */' > $2 m4_foreach([it], [$1], [m4_apply([OF_OCTAVE_ALT_SYMS], [it, $2])]) AH_BOTTOM([#include "$2"]) ]) netcdf-1.0.20/src/netcdf_constants.awk0000644000000000000000000000436015205072111014612 0ustar00# Copyright (C) 2013-2022 Alexander Barth # # 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 . # Generate the list of NetCDF constants based on the header file netcdf.h BEGIN { print "// generated by netcdf_constants.awk"; } /#define[ \t]+NC_[0-9a-zA-Z_]*[ \t]+/ { constant=$2; ov = constant; # NC_INDEPENDENT and NC_COLLECTIVE are no longer defined # in netcdf 4.3.1 if ($0 ~ /.*internally.*/ || \ constant == "NC_TURN_OFF_LOGGING" || \ constant == "NC_INDEPENDENT" || \ constant == "NC_COLLECTIVE" \ ) { next; } if (constant ~ /NC_.*_BYTE/) { ov = "octave_int8(" constant ")"; } else if (constant ~ /NC_.*_UBYTE/) { ov = "octave_uint8(" constant ")"; } else if (constant ~ /NC_.*_SHORT/) { ov = "octave_int16(" constant ")"; } else if (constant ~ /NC_.*_USHORT/) { ov = "octave_uint16(" constant ")"; } else if (constant ~ /NC_.*_INT/) { ov = "octave_int32(" constant ")"; } else if (constant ~ /NC_.*_UINT/) { ov = "octave_uint32(" constant ")"; } else if (constant ~ /NC_.*_INT64/) { ov = "octave_int64(" constant ")"; } else if (constant ~ /NC_.*_UINT64/) { ov = "octave_uint64(" constant ")"; } else if (constant ~ /NC_.*_CHAR/) { ov = "(char)" constant; } else if (constant ~ /NC_.*_STRING/) { ov = "std::string(" constant ")"; } else if (constant ~ /NC_.*_FLOAT/) { ov = "(float)" constant; } else if (constant ~ /NC_.*_STRING/) { ov = "(double)" constant; } printf " netcdf_constants[\"%s\"] = octave_value(%s);\n",constant,ov; } netcdf-1.0.20/src/undef-ah-octave.h0000644000000000000000000000070615205072111013666 0ustar00/* To be included at the top of config.h (by autoheader). Avoid warnings for redefining AH-generated preprocessor symbols of Octave. */ #ifdef PACKAGE_BUGREPORT #undef PACKAGE_BUGREPORT #endif #ifdef PACKAGE_NAME #undef PACKAGE_NAME #endif #ifdef PACKAGE_STRING #undef PACKAGE_STRING #endif #ifdef PACKAGE_TARNAME #undef PACKAGE_TARNAME #endif #ifdef PACKAGE_URL #undef PACKAGE_URL #endif #ifdef PACKAGE_VERSION #undef PACKAGE_VERSION #endif