pax_global_header00006660000000000000000000000064122126102630014505gustar00rootroot0000000000000052 comment=88d14255beba474e552e7379ea9057e3e211e0c5 pyepr-0.8.1/000077500000000000000000000000001221261026300126525ustar00rootroot00000000000000pyepr-0.8.1/.gitattributes000066400000000000000000000000631221261026300155440ustar00rootroot00000000000000*.py ident *.pyx ident *.px[di] ident *.txt ident pyepr-0.8.1/.gitignore000066400000000000000000000000321221261026300146350ustar00rootroot00000000000000SciTEDirectory.properties pyepr-0.8.1/.travis.yml000066400000000000000000000004721221261026300147660ustar00rootroot00000000000000language: python virtualenv: system_site_packages: true python: - "2.6" - "2.7" - "3.2" - "3.3" before_install: - sudo apt-get update -qq - sudo apt-get install -qq libepr-api2-dev - pip install -r requirements.txt --use-mirrors install: python setup.py build_ext --inplace script: make check pyepr-0.8.1/LICENSE.txt000066400000000000000000001045131221261026300145010ustar00rootroot00000000000000 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 . pyepr-0.8.1/MANIFEST.in000066400000000000000000000005321221261026300144100ustar00rootroot00000000000000include MANIFEST.in include LICENSE.txt include requirements.txt include src/*.c recursive-include LICENSES *.txt recursive-include epr-api-src *.c *.h recursive-include doc *.txt *.py Makefile make.bat *.png recursive-include doc/_templates *.html recursive-include doc/pydoctheme * recursive-include doc/html * recursive-exclude doc/_build * pyepr-0.8.1/Makefile000066400000000000000000000042731221261026300143200ustar00rootroot00000000000000#!/usr/bin/make -f # -*- coding: utf-8 -*- # Copyright (C) 2011-2013, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . PYTHON = python CYTHON = cython TEST_DATSET_URL = "http://earth.esa.int/services/sample_products/meris/LRC/L2/MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1.gz" TEST_DATSET = test/MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1 EPRAPIROOT = ../epr-api .PHONY: default ext cythonize sdist eprsrc fullsdist doc clean distclean \ check debug data upload default: ext ext: src/epr.pyx $(PYTHON) setup.py build_ext --inplace cythonize: src/epr.c src/epr.c: src/epr.pyx $(CYTHON) src/epr.pyx sdist: doc cythonize $(PYTHON) setup.py sdist epr-api-src: mkdir -p epr-api-src cp $(EPRAPIROOT)/src/*.[ch] epr-api-src LICENSES/epr-api.txt: mkdir LICENSES cp $(EPRAPIROOT)/LICENSE.txt LICENSES/epr-api.txt eprsrc: epr-api-src LICENSES/epr-api.txt fullsdist: doc cythonize eprsrc $(PYTHON) setup.py sdist upload: doc cythonize eprsrc $(PYTHON) setup.py sdist upload -s -i 24B76CFE doc: $(MAKE) -C doc html clean: $(PYTHON) setup.py clean --all $(RM) -r build dist pyepr.egg-info $(RM) MANIFEST src/*.c src/*.o *.so $(RM) tests/*.py[co] doc/sphinxext/*.py[co] README.html $(MAKE) -C doc clean find . -name '*~' -delete distclean: clean $(RM) $(TEST_DATSET) $(RM) -r doc/html $(RM) -r LICENSES epr-api-src check: ext $(TEST_DATSET) $(PYTHON) test/test_all.py --verbose debug: $(PYTHON) setup.py build_ext --inplace --debug data: $(TEST_DATSET) $(TEST_DATSET): wget -P test $(TEST_DATSET_URL) gunzip $@ pyepr-0.8.1/README.txt000066400000000000000000000063311221261026300143530ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= :HomePage: http://avalentino.github.com/pyepr :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2013, Antonio Valentino :Version: 0.8.1 Introduction ============ PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int Requirements ============ In order to use PyEPR it is needed that the following software are correctly installed and configured: * Python2_ >= 2.6 or Python3_ >= 3.1 * numpy_ >= 1.3.0 * `EPR API`_ >= 2.2 (optional, since PyEPR 0.7 the source tar-ball comes with a copy of the PER C API sources) * a reasonably updated C compiler (build only) * Cython_ >= 0.13 (build only) .. _Python2: Python_ .. _Python3: Python_ .. _numpy: http://www.numpy.org .. _gcc: http://gcc.gnu.org .. _Cython: http://cython.org Download ======== Official source tarballs can be downloaded form PyPi_: http://pypi.python.org/pypi/pyepr The source code of the development versions is available on the GitHub_ project page https://github.com/avalentino/pyepr To clone the git_ repository the following command can be used:: $ git clone https://github.com/avalentino/pyepr.git .. _PyPi: http://pypi.python.org .. _GitHub: https://github.com .. _git: http://git-scm.com Installation ============ The easier way to install PyEPR_ is using tools like pip_ or easy_install_:: $ pip install pyepr or:: $ pip install -U --prefix= PyEPR_ can be installed from the source tar.ball using the following command:: $ python setup.py install To install PyEPR_ in a non-standard path:: $ python setup.py install --prefix= .. _pip: http://pypi.python.org/pypi/pip .. _easy_install: http://pypi.python.org/pypi/setuptools#using-setuptools-and-easyinstall License ======= Copyright (C) 2011-2013 Antonio Valentino PyEPR 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. PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . .. _`GNU General Public License`: http://www.gnu.org/licenses/gpl-3.0.html pyepr-0.8.1/doc/000077500000000000000000000000001221261026300134175ustar00rootroot00000000000000pyepr-0.8.1/doc/Makefile000066400000000000000000000126401221261026300150620ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) html @echo @echo "Build finished. The HTML pages are in html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyEPR.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyEPR.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/PyEPR" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyEPR" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." pyepr-0.8.1/doc/NEWS.txt000066400000000000000000000145601221261026300147420ustar00rootroot00000000000000Change history ============== PyEPR 0.8.1 (07/09/2013) ------------------------ * fixed an important bug in the error checking code introduced in previous release (closes :issue:`8`) * fixed the NDVI example * no more display link URL in footnotes of the PDF User Manual PyEPR 0.8 (07/09/2013) ---------------------- * now the :class:`epr.Product` objects have a :meth:`epr.Product.close` method that can be used to explicitly close products without relying on the garbage collector behaviour (closes :issue:`7`) * new :attr:`epr.Product.closed` (read-only) attribute that can be used to check if a :class:`epr.Product` has been closed * the :class:`Product` class now supports context management so they can be used in ``with`` statements * added entries for :data:`epr.__version__` and :data:`epr.__revision__` in the reference manual * the :data:`epr.__revision__` module attribute is now deprecated * some *cythonization* warnings have been fixed * several small improvements to the documentation PyEPR 0.7.1 (19/08/2013) ------------------------ * fixed potential issues with conversion from python strings to ``char*`` * new snapshot of the EPR C API sources (2.3dev): - the size of the record tables has been fixed - the EPR_NUM_PRODUCT_TABLES has been fixed - fixed a missing prototype - several GCC warnings has been silenced - additional checks on return codes - now and error is raised when an invalid flag name is used * better factorization of Python 3 specific code * use the *CLOUD* flag instead of *BRIGHT* in unit tests * added function/method signature to all doc-strings for better interactive help * several improvements to the documentation: - updated the :file:`README.txt` file to mention EPR C API sourced inclusion in the PyEPR 0.7 (and lates) source tar-ball - small fix in the installation instructions: the pip tool does not have a "--prefix" parameter - always use the python3 syntax for the *print* function in all examples in the documentation - links to older (and dev) versions of the documentation have been added in the man page of the HTML doc - removed *date* form the doc meta-data. The documentation build date is reported in the front page of the LaTeX (PDF) doc and, starting from this release, in the footer of the HTML doc. - the Ohloh_ widget has been added in the sidebar of the HTML doc - improved the regexp for detecting the SW version in the :file`setup.py` script - formatting .. _Ohloh: http://www.ohloh.net PyEPR 0.7 (04/08/2013) ---------------------- * more detailed error messages in case of open failures * new sphinx theme for the HTML documentation * `Travis-CI`_ has been set-up for the project * now the source tar-ball also includes a copy of the EPR C API sources so that no external C library is required to build PyEPR. This features also makes it easier to install PyEPR using pip. The user can still guild PyEPR against a system version of the ERP-API library simply using the :option:`--epr-api-src` option of the :file:`setup.py` script with "None"" as value. The ERP C API included in the source tar-ball is version *2.3dev-pyepr062*, a development and patched version that allows the following enhancements. - support for ERS products in ENVISAT format - support for ASAR products generated with the new ASAR SW version 6.02 (ref. doc. PO-RS-MDA-GS-2009_4/C - fix incorrect reading of "incident_angle" bands (closes :issue:`6`). The issue is in the EPR C API. .. _`Travis-CI`: https://travis-ci.org/avalentino/pyepr PyEPR 0.6.1 (26/04/2012) ------------------------ * fix compatibility with cython_ 0.16 * added a new option to the setup script (:option:`--epr-api-src`) to build PyEPR using the EPR-API C sources PyEPR 0.6 (12/08/2011) ---------------------- * full support for `Python 3`_ * improved code highligh in the documentation * depend from cython >= 0.13 instead of cython >= 0.14.1. Cythonizing :file:`epr.pyx` with `Python 3`_ requires cython >= 0.15 PyEPR 0.5 (25/04/2011) ---------------------- * stop using :c:func:`PyFile_AsFile` that is no more available in `Python 3`_ * now documentation uses intersphinx_ capabilities * code examples added to documentation * tutorials added to documentation * the LICENSE.txt file is now included in the source distribution * the cython_ construct ``with nogil`` is now used instead of calling :c:func:`Py_BEGIN_ALLOW_THREADS` and :c:func:`Py_END_ALLOW_THREADS` directly * dropped old versions of cython_; now cython_ 0.14.1 or newer is required * suppressed several constness related warnings .. _`Python 3`: http://docs.python.org/py3k .. _intersphinx: http://sphinx.pocoo.org/latest/ext/intersphinx.html .. _cython: http://www.cython.org PyEPR 0.4 (10/04/2011) ---------------------- * fixed a bug in the :meth:`epr.Product.__str__`, :meth:`Dataset.__str__` and :meth:`erp.Band.__repr__` methods (bad formatting) * fixed :meth:`epr.Field.get_elems` method for char and uchar data types * implemented :meth:`epr.Product.read_bitmask_raster`, now the :class:`epr.Product` API is complete * fixed segfault in :meth:`epr.Field.get_unit` method when the field has no unit * a smaller dataset is now used for unit tests * a new tutorial section has been added to the user documentation PyEPR 0.3 (01/04/2011) ---------------------- * version string of the EPR C API is now exposed as module attribute :data:`epr.EPR_C_API_VERSION` * implemented ``__repr__``, ``__str__``, ``__eq__``, ``__ne__`` and ``__iter__`` special methods * added utility methods (not included in the C API) like: - :meth:`epr.Record.get_field_names` - :meth:`epr.Record.fields` - :meth:`epr.Dataset.records` - :meth:`epr.Product.get_dataset_names` - :meth:`epr.Product.get_band_names` - :meth:`epr.Product.datasets` - :meth:`epr.Product.bands` * fixed a logic error that caused empty messages in custom EPR exceptions PyEPR 0.2 (20/03/2011) ---------------------- * sphinx_ documentation added * added docstrings to all method and classes * renamed some method and parameter in order to avoid redundancies and have a more *pythonic* API * in case of null pointers a :exc:`epr.EPRValueError` is raised * improved C library shutdown management * introduced some utility methods to :class:`epr.Product` and :class:`epr.Record` classes .. _sphinx: http://sphinx.pocoo.org PyEPR 0.1 (09/03/2011) ---------------------- Initial release pyepr-0.8.1/doc/_static/000077500000000000000000000000001221261026300150455ustar00rootroot00000000000000pyepr-0.8.1/doc/_static/empty.txt000066400000000000000000000000001221261026300167320ustar00rootroot00000000000000pyepr-0.8.1/doc/_templates/000077500000000000000000000000001221261026300155545ustar00rootroot00000000000000pyepr-0.8.1/doc/_templates/ohloh.html000066400000000000000000000001701221261026300175510ustar00rootroot00000000000000
pyepr-0.8.1/doc/_templates/travis-ci.html000066400000000000000000000002261221261026300203430ustar00rootroot00000000000000
travis-ci status page
pyepr-0.8.1/doc/bands_example.txt000066400000000000000000000114171221261026300167660ustar00rootroot00000000000000Exporting band data ------------------- This tutorial shows how to convert ENVISAT_ raster information from dataset and generate flat binary rasters using PyEPR_. The program generates as many raster as the dataset specified in input. The example code (:download:`examples/write_bands.py`) is a direct translation of the C sample program `write_bands.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_bands.py \ \ [ ... ] .. _ENVISAT: http://envisat.esa.int .. _PyEPR: https://github.com/avalentino/pyepr .. _`write_bands.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_bands.c Import section ~~~~~~~~~~~~~~ To use the Python_ EPR API one have to import :mod:`epr` module. At first import time the underlaying C library is opportunely initialized. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 1-15 The main program ~~~~~~~~~~~~~~~~ The main program in quite simple (this is just an example). .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 55- It performs some basic command line arguments handling and then open the input product. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 97-99 Finally the core function (:func:`write_raw_image`) is called on each band specified on the command: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 100-101 The :func:`write_raw_image` core function ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The core function is :func:`write_raw_image`. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :pyobject: write_raw_image It generates a flat binary file with data of a single band whose name is specified as input parameter. First the output file name is computed using the :mod:`os` module. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 23-25 Then the desired band is retrieved using the :meth:`epr.Product.get_band` method and some of its parameters are loaded in to local variables: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 26-27 Band data are accessed by means of a :class:`epr.Raster` object. .. seealso:: :func:`epr.Band.read_as_array` The :meth:`epr.Band.create_compatible_raster` is a facility method that allows to instantiate a :class:`epr.Raster` object with a data type compatible with the band data: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 32-34 Then data are read using the :meth:`epr.Band.read_raster` method: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 36-37 Then the output file object is created (in binary mode of course) .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 39 and data are copied to the output file one line at time .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bands.py :language: python :lines: 41-42 Please note that it has been used :data:`epr.Raster.data` attribute of the :class:`epr.Raster` objects that exposes :class:`epr.Raster` data with the powerful :class:`numpy.ndarray` interface. .. note:: copying one line at time is not the best way to perform the task in Python_. It has been done just to mimic the original C code: .. code-block:: c out_stream = fopen(image_file_path, "wb"); if (out_stream == NULL) { printf("Error: can't open '%s'\n", image_file_path); return 3; } for (y = 0; y < (uint)raster->raster_height; ++y) { numwritten = fwrite(epr_get_raster_line_addr(raster, y), raster->elem_size, raster->raster_width, out_stream); if (numwritten != raster->raster_width) { printf("Error: can't write to %s\n", image_file_path); return 4; } } fclose(out_stream); A by far more pythonic_ solution would be:: raster.data.tofile(out_stream) .. _Python: http://www.python.org .. _pythonic: http://www.cafepy.com/article/be_pythonic pyepr-0.8.1/doc/bitmask_example.txt000066400000000000000000000065061221261026300173340ustar00rootroot00000000000000Exporting bitmasks ------------------- This tutorial shows how to generate bit masks from ENVISAT_ flags information as "raw" image using PyEPR_. The example code (:download:`examples/write_bitmask.py`) is a direct translation of the C sample program `write_bitmask.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_bitmask.py \ .. _ENVISAT: http://envisat.esa.int .. _PyEPR: https://github.com/avalentino/pyepr .. _`write_bitmask.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_bitmask.c The :download:`examples/write_bitmask.py` code consists in a single function that also includes command line arguments handling: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :linenos: In order to use the Python_ EPR API the :mod:`epr` module is imported: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :lines: 27 As usual the ENVISAT_ product is opened using the :func:`epr.open` function that returns an :class:`epr.Product` instance. In this case the :func:`epr.open` is used together with a ``with`` statement so that the :class:`epr.Product` instance is closed automatically when the program exits the ``with`` block. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 51-52 Scene size parameters are retrieved form the :class:`epr.Product` object using the :meth:`epr.Product.get_scene_width` and :meth:`epr.Product.get_scene_height` methods: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 55-56 The EPR API allows to manage data by means of :class:`epr.Raster` objects, so the function :func:`epr.create_bitmask_raster`, specific for bitmasks, is used to create a :class:`epr.Raster` instance. .. seealso:: :func:`epr.create_raster` Data are actually read using the :meth:`epr.Product.read_bitmask_raster` method of the :class:`epr.Product` class: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 63 The :meth:`epr.Product.read_bitmask_raster` method receives in input the *bm_expr* parameter that is set via command line: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 48 *bm_expr* is a string that define the logical expression for the definition of the bit-mask. In a bit-mask expression, any number of the flag-names (found in the DDDB) can be composed with “(â€, â€)â€, “NOTâ€, “ANDâ€, “ORâ€. Valid bit-mask expression are for example:: flags.LAND OR flags.CLOUD or:: NOT flags.WATER AND flags.TURBID_S Finally data are written to disk as a flat binary file using the :meth:`numpy.ndarray.tofile` method of the :data:`epr.Raster.data` attribute of the :class:`epr.Raster` objects that exposes data via the :class:`numpy.ndarray` interface: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_bitmask.py :language: python :lines: 65-66 .. _Python: http://www.python.org .. _ENVISAT: http://envisat.esa.int pyepr-0.8.1/doc/conf.py000066400000000000000000000242631221261026300147250ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # PyEPR documentation build configuration file, created by # sphinx-quickstart on Thu Apr 26 19:30:10 2012. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. sys.path.insert(0, os.path.abspath('sphinxext')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ #'sphinx.ext.autodoc', #'sphinx.ext.autosummary', #'sphinx.ext.doctest', 'sphinx.ext.intersphinx', 'sphinx.ext.todo', #'sphinx.ext.coverage', 'sphinx.ext.pngmath', #'sphinx.ext.jsmath', #'sphinx.ext.graphviz', #'sphinx.ext.inheritance_diagram', #'sphinx.ext.refcounting', 'sphinx.ext.ifconfig', 'sphinx.ext.viewcode', 'sphinx.ext.extlinks', 'ipython_console_highlighting', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.txt' # The encoding of source files. #source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'PyEPR' copyright = u'2011-2013, Antonio Valentino' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '0.8.1' # The full version, including alpha/beta/rc tags. release = version # + 'dev' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = ['_build', 'sphinxext', '**/empty.txt'] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. #pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Extensions configuration -------------------------------------------------- # Autodoc configuration #autoclass_content = 'both' #autodoc_default_flags = ['members', 'undoc-members', 'show-inheritance'] # #,'inherited-members'] # Auto summary generation #autosummary_generate = ['reference'] # Enable todo list reporting todo_include_todos = True # External links configuration extlinks = { 'issue': ('https://github.com/avalentino/pyepr/issues/%s', 'gh-'), } # Intersphinx intersphinx_mapping = { 'python': ('http://docs.python.org', None), 'numpy': ('http://docs.scipy.org/doc/numpy', None), } # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'pydoctheme' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. html_theme_options = { 'collapsiblesidebar': True, } # Add any paths that contain custom themes here, relative to this directory. html_theme_path = ['.'] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. #html_logo = None # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. html_sidebars = { 'index': ['globaltoc.html', 'relations.html', 'sourcelink.html', 'searchbox.html', 'ohloh.html', 'travis-ci.html'], } # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. html_domain_indices = False # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'PyEPRdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). 'papersize': 'a4paper', # The font size ('10pt', '11pt' or '12pt'). 'pointsize': '12pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'pyepr.tex', u'PyEPR Documentation', u'Antonio Valentino', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = 'footnote' # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. latex_domain_indices = False # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'pyepr', u'PyEPR Documentation', [u'Antonio Valentino'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'PyEPR', u'PyEPR Documentation', u'Antonio Valentino', 'PyEPR', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # -- Options for Epub output --------------------------------------------------- # Bibliographic Dublin Core info. epub_title = u'PyEPR' epub_author = u'Antonio Valentino' epub_publisher = u'Antonio Valentino' epub_copyright = u'2011-2013, Antonio Valentino' # The language of the text. It defaults to the language option # or en if the language is not set. #epub_language = '' # The scheme of the identifier. Typical schemes are ISBN or URL. #epub_scheme = '' # The unique identifier of the text. This can be a ISBN number # or the project homepage. #epub_identifier = '' # A unique identification for the text. #epub_uid = '' # A tuple containing the cover image and cover page html template filenames. #epub_cover = () # HTML files that should be inserted before the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_pre_files = [] # HTML files shat should be inserted after the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_post_files = [] # A list of files that should not be packed into the epub file. #epub_exclude_files = [] # The depth of the table of contents in toc.ncx. #epub_tocdepth = 3 # Allow duplicate toc entries. #epub_tocdup = True # Example configuration for intersphinx: refer to the Python standard library. #intersphinx_mapping = {'http://docs.python.org/': None} pyepr-0.8.1/doc/examples/000077500000000000000000000000001221261026300152355ustar00rootroot00000000000000pyepr-0.8.1/doc/examples/write_bands.py000077500000000000000000000061371221261026300201220ustar00rootroot00000000000000#!/usr/bin/env python # This program is a direct translation of the sample program # "write_bands.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_bands.c from __future__ import print_function import os import sys import epr def write_raw_image(output_dir, product, band_name): '''Generate the ENVI binary pattern image file for an actual DS. The first parameter is the output directory path. ''' # Build ENVI file path, DS name specifically image_file_path = os.path.join(output_dir, band_name + '.raw') band = product.get_band(band_name) source_w = product.get_scene_width() source_h = product.get_scene_height() source_step_x = 1 source_step_y = 1 raster = band.create_compatible_raster(source_w, source_h, source_step_x, source_step_y) print('Reading band "%s"...' % band_name) raster = band.read_raster(0, 0, raster) out_stream = open(image_file_path, 'wb') for line in raster.data: out_stream.write(line.tostring()) # or better: raster.data.tofile(out_stream) out_stream.close() print('Raw image data successfully written to "%s".' % image_file_path) print('C data type is "%s", element size %u byte(s), ' 'raster size is %u x %u pixels.' % ( epr.data_type_id_to_str(raster.data_type), raster.get_elem_size(), raster.get_width(), raster.get_height())) def main(*argv): '''A program for converting producing ENVI raster information from dataset. It generates as many raster as there are dataset entrance parameters. Call:: $ write_bands.py [ ... ] Example:: $ write_bands.py \ MER_RR__1PNPDK20020415_103725_000002702005_00094_00649_1059.N1 \ . latitude ''' if not argv: argv = sys.argv if len(argv) <= 3: print('Usage: write_bands.py ' '') print(' [ ... ]') print(' where envisat-product is the input filename') print(' and output-dir is the output directory') print(' and dataset-name-1 is the name of the first band to be ' 'extracted (mandatory)') print(' and dataset-name-2 ... dataset-name-N are the names of ' 'further bands to be extracted (optional)') print('Example:') print(' write_bands MER_RR__2P_TEST.N1 . latitude') print() sys.exit(1) product_file_path = argv[1] output_dir_path = argv[2] # Open the product; an argument is a path to product data file with epr.open(product_file_path) as product: for band_name in argv[3:]: write_raw_image(output_dir_path, product, band_name) if __name__ == '__main__': main() pyepr-0.8.1/doc/examples/write_bitmask.py000077500000000000000000000043021221261026300204550ustar00rootroot00000000000000#!/usr/bin/env python # This program is a direct translation of the sample program # "write_bitmask.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_bitmask.c '''Generates bit mask from ENVISAT flags information as "raw" image for (e.g.) Photoshop Call:: $ python write_bitmask.py Example to call the main function:: $ python write_bitmask.py MER_RR__2P_TEST.N1 \ 'l2_flags.LAND and !l2_flags.BRIGHT' my_flags.raw ''' from __future__ import print_function import sys import epr def main(*argv): if not argv: argv = sys.argv if len(argv) != 4: print('Usage: write_bitmask ' '') print(' where envisat-product is the input filename') print(' and bitmask-expression is a string containing the bitmask ' 'logic') print(' and output-file is the output filename.') print('Example:') print(" MER_RR__2P_TEST.N1 'l2_flags.LAND and not l2_flags.BRIGHT' " "my_flags.raw") print sys.exit(1) product_file_path = argv[1] bm_expr = argv[2] image_file_path = argv[3] # Open the product; an argument is a path to product data file with epr.open(product_file_path) as product: offset_x = 0 offset_y = 0 source_width = product.get_scene_width() source_height = product.get_scene_height() source_step_x = 1 source_step_y = 1 bm_raster = epr.create_bitmask_raster(source_width, source_height, source_step_x, source_step_y) product.read_bitmask_raster(bm_expr, offset_x, offset_y, bm_raster) with open(image_file_path, 'wb') as out_stream: bm_raster.data.tofile(out_stream) print('Raw image data successfully written to "%s".' % image_file_path) print('Data type is "byte", size is %d x %d pixels.' % (source_width, source_height)) if __name__ == '__main__': main() pyepr-0.8.1/doc/examples/write_ndvi.py000077500000000000000000000054241221261026300177710ustar00rootroot00000000000000#!/usr/bin/env python # This program is a direct translation of the sample program # "write_ndvi.c" bundled with the EPR-API distribution. # # Source code of the C program is available at: # https://github.com/bcdev/epr-api/blob/master/src/examples/write_ndvi.c '''Example for using the epr-api Demonstrates how to open a MERIS L1b product and calculate the NDVI. This example does not demonstrate how to write good and safe code. It is reduced to the essentials for working with the epr-api. Calling sequence:: $ python write_ndvi.py for example:: $ python write_ndvi.py MER_RR__1P_test.N1 my_ndvi.raw ''' from __future__ import pront_function import sys import struct import logging import epr def main(*argv): if not argv: argv = sys.argv if len(argv) != 3: print('Usage: write_ndvi ') print(' where envisat-product is the input filename') print(' and output-file is the output filename.') print('Example: MER_RR__1P_TEST.N1 my_ndvi.raw') print sys.exit(1) # Open the product product = epr.open(argv[1]) # The NDVI shall be calculated using bands 6 and 8. band1_name = 'radiance_6' band2_name = 'radiance_10' band1 = product.get_band(band1_name) band2 = product.get_band(band2_name) # Allocate memory for the rasters width = product.get_scene_width() height = product.get_scene_height() subsampling_x = 1 subsampling_y = 1 raster1 = band1.create_compatible_raster(width, height, subsampling_x, subsampling_y) raster2 = band2.create_compatible_raster(width, height, subsampling_x, subsampling_y) # Read the radiance into the raster. offset_x = 0 offset_y = 0 logging.info('read "%s" data' % band1_name) band1.read_raster(offset_x, offset_y, raster1) logging.info('read "%s" data' % band2_name) band2.read_raster(offset_x, offset_y, raster2) # Open the output file logging.info('write ndvi to "%s"' % argv[2]) out_stream = open(argv[2], 'wb') # Loop over all pixel and calculate the NDVI. # # @NOTE: looping over data matrices is not the best soluton. # It is done here just for demostrative purposes for j in range(height): for i in range(width): rad1 = raster1.get_pixel(i, j) rad2 = raster2.get_pixel(i, j) if (rad1 + rad2) != 0.0: ndvi = (rad2 - rad1) / (rad2 + rad1) else: ndvi = -1.0 out_stream.write(struct.pack('f', ndvi)) logging.info('ndvi was written success') out_stream.close() product.close() if __name__ == '__main__': main() pyepr-0.8.1/doc/images/000077500000000000000000000000001221261026300146645ustar00rootroot00000000000000pyepr-0.8.1/doc/images/ASA_IMP_crop.png000066400000000000000000010574361221261026300175460ustar00rootroot00000000000000‰PNG  IHDR L1ÂýsBIT|dˆ pHYsaa¨?§i IDATxœì½y˜dU}ÿÿ¾ÕÕÕUÕݳ130¬Ã"3ȲEÑ "†EŸ€‰;Šá«€[0 ·DM4‚úÄ$bDŒˆ&  TDŒDP”° "³ötwuwuUÝßó{~ßÓ5lÎÂ0çý<ýtwÕ½çžó9ŸsÎû³œs³<Ïs%$$$$$$$$$$$l”¶t¶$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„„„„„„„„͆d€$$$$$$$$$$$l6$$!!!!!!!!!!a³! › ÉIHHHHHHHHHHØlHHBBBBBBBBBBÂfC2@6’’°Ù „„„„ÿ .Ôî»ï¾¥«ñŒÀ²eËT*=ý%"É2!!!!aCHHBÂf@©TúƒÈܳ]tQËßøÆ ^÷µ¯}-\·téÒM^¯,Ë6YÙÞf~êõº/^¬³Ï>[¿ûÝï6Ù³Ÿ*²,ûƒdñ‡Þ¿)°páB•J%=ôÐC[º* Û4Ê[º Û žid왂r¹¬¯}íkúä'?©þþþißîsŸS¹\V«ÕzÖÈpÙ²eZ¶l™$ixxXßùÎwt饗êk_ûšn½õV-\¸p‹ÖO’þùŸÿYcccOûþn¸a#ÖfãáÙ¢C [3’K6!!a‹â¸ãŽÓÈȈ¾úÕ¯NûîÁÔ 7Ü ã?~ ÔlÓaÙ²eºð uá…ê£ý¨~þóŸë¸ãŽÓŠ+ô|`KWO’´Ë.»hï½÷~Ú÷ï¾ûî)+!!!!¡+’’°…ðàƒªT*iùòåºçž{tòÉ'k»í¶S­VÓ²eËtÛm·I’~÷»ßé oxƒæÎ«jµªC=TÿùŸÿ9­¼GyD矾^ð‚hÖ¬YªT*Úi§ôêW¿Z¿üå/»Ö!Ïs}ò“ŸÔsŸû\Õj5í¼óÎzë[ߪիW?nÿ¿þë¿êÈ#Ô¬Y³T«ÕôÜç>WüàÕl6Ÿ²Ž;î8í¸ãŽú¾0í»/|á ÊóüqS´ÆÇÇõáXûí·Ÿúûû5sæL~øáºâŠ+6xÏ%—\¢}÷Ý·ÐæU«V=n=7f›c”J%qÆ’¤Ÿþô§…Ï<òH=ôÐC:õÔSµ`Á•ËeýÓ?ýS¸æÖ[oÕÉ'Ÿ¬vØA}}}Úu×]õñLçZ½zµÞûÞ÷jÉ’%êïïW­VÓ’%KtÎ9ç¨Ñh„ë6´ä’K.Ñ!‡¢þþ~õööjþüù:üðÃõ•¯|¥p݆ôç©ô—‘|Pþ箹sçªV«éCÑ·¿ýí'ì“r~ä‘G´|ùò ËC=TßûÞ÷$ICCCúÿïÿiÁ‚êëëÓ¾ûýëÓÊZ·n>ðèˆ#ŽÐvÛmdô§ú§ºå–[6X‡Ë/¿\têõº¶ß~{½îu¯ÓC=ô¸{q¾ûÝïê¸ãŽ sÃ^{í¥w½ë]Ú(rIHHHØTH)X [÷ÝwŸ^ô¢éCÑ[Þò=øàƒºâŠ+tÔQGé†nЉ'ž¨ èŒ3ÎЪU«ôå/YÇ{¬n¿ýv-^¼8”óƒü@ŸùÌg´lÙ2qÄêëëÓ¯ýk}ó›ßÔ·¾õ-Ý|óÍ:à€ Ï~ë[ߪÏ~ö³Úi§ôæ7¿Y½½½úÖ·¾¥Ÿüä'šœœT__ß´úžvÚiºì²Ë´×^{é oxƒuË-·è‚ .Ð÷¿ÿ}]wÝu*—ŸüÔÒÓÓ£SO=UúЇôË_þRÏ}îs%Iív[_úÒ—ô‚¼@K–,ézo³ÙÔK_úRýèG?Ò¾ûÎ:K£££ºòÊ+õªW½J·ß~»>ò‘îyÛÛÞ¦O}êSÚqÇõæ7¿YårYW_}µ~üão¶6wCžç…ß`åÊ•zÑ‹^¤í·ß^oxÃÔl6µ`ÁIÒ¿øEqÆš9s¦N8áí¸ãŽºï¾ûtÙe—éÛßþ¶~ò“Ÿh—]v e=ðÀÁ 9äCtæ™gªR©è®»îÒç?ÿysÎ9Úu×]ÃõqºÒ»ßýn}ô£ÕÞ{ï­7½éMš9s¦V¬X¡[o½UW_}µ^ýêW®ï:ý%I¿ýíoõüç?_Ï}îsõæ7¿Y+W®ÔW¾òp ºþúëõâ¿øiH¼ˆÕ«WëÿøµÃ;è´ÓNÓÊ•+uùå—ëøã×7Þ¨³Ï>[ÍfS¯{Ýë4>>®¯|å+:å”StÝu×é¨£Ž åüò—¿Ô‡?üaqÄZ¾|¹êõºzè!}ó›ßÔ5×\£o}ë[:öØc ÏþÛ¿ý[½ç=ïÑœ9stê©§jæÌ™ºîºë´téRÍš5«kÚØÅ_¬‹/¾X;^ùÊWj»í¶ÓwÞ©¿û»¿Ó5×\£ÿøÇš1cÆ,—„„„„M‚{àò,Ëò,ËòO}êS…ï>ö±åY–僃ƒùyçWøîª«®Ê³,ËÏ<óÌÂç+V¬È'&&¦=ûî»ïÎócŽ9¦ðù~ðƒ<˲|É’%ùÐÐPø¼Ùlæ/~ñ‹ó,ËòÝwß½pÏ—¾ô¥<˲ü oxCÞjµºÖùŸøÄHc=Þ÷¾÷åY–å_øÂòûï¿?/•Jù¹çž¾ÿö·¿¾GVK—.-”ñÁ~0ϲ,?ñÄóv»>ÿýïŸï¾ûîy–eù~ô£ðùÍ7ßœgY–/^¼8_³fMø|||<_ºtéfkóÅ_\ø¼Õjå/{ÙËò,ËòÓO?=|Ž~üÅ_üÅ´²~ýë_ç½½½ù¯\¹²ðÝü㼯¯/?á„ ŸvØay–eùÇ>ö±iå åãããáÿ#Ž8bšÎΞ=;_¸paÞl6§ÝïòÌó<ßm·Ý¦Éò©ö—‘¿ÿû¿/”õÃþ0ϲ,?öØc§ÕeCØm·ÝòR©”ÿö·¿-|Î3â±öõ¯=ŒÃSN9%ït:á»Ûn»-ϲ,?î¸ã ÷¬[·.žöìGy$ßyçóÅ‹>¿ï¾ûòr¹œ/X° ÿßÿýßÂw¯}ík»Î7ÜpCžeY~ôÑGçF£ðÝ•W^™gY–¿ýíoi$$$$l9$$!a3àñ E‹M»þw¿û]žeY>sæÌ)Ìó{ãߘgY–_qÅÓ®ÿéOºÙÚ¼lÙ²ü}ï{_þ¾÷½/?ï¼óò%K–äY–åóçÏÏxàp}–ey­VË×­[7­¬·¿ýíy–eù 7ÜÐõY§œrJÞÓÓÈðÏ~ö³<˲üE/zÑ“ªk7¤¿¿?ßc=ºº1º Oµ¿è÷½÷Þ»ë3öÚk¯|Þ¼yO¦9¡N2@64ÖjµZ^*•òGydZy‹-zJÏ?ï¼óò,Ëò‡~8|ö×ý×y–eùÇ?þñi×?öØcyOOÏ´~8á„òR©”ßÿý]Ÿóüç??Ÿ?þ“®WBBBÂæFJÁJHØÂ8øàƒ§}6þ|IÒ¾ûî;-%¨T*iîܹZ³fÍ´ûþã?þCŸýìgõ³ŸýL«V­R«Õ ßeY¦•+Wjûí·—$Ý~ûíʲ¬ëѶÏ{Þó¦HÕh4ôóŸÿ\;ì°ƒ>úÑvmK©TÒ=÷Üó-îŽ7¾ñzõ«_­o~ó›zÑ‹^¤ÿøÿ),Ý0<<¬ûï¿_‹-ÒN;í4íû—¼ä%’Ö·ÜvÛmʲLGqÄ´ë9äiÏÚTm¾é¦›tÓM7I’*•ŠvÝuW½å-oÑùçŸ?­-ûì³§•Á~‚믿>”åxä‘GÔéttï½÷êÀÔO~òIë÷Ü<]¼æ5¯Ñç>÷9í¿ÿþ:å”StØa‡é°ÃÓÌ™3ŸðÞ§Ó_àCéZæ‚ ôàƒ>µFl7ÖÚívH{sl¿ýöºï¾û¦}~óÍ7듟ü¤n¹å­X±bÚ>¡ÿû¿ÿÓÎ;ï,iª½ÝÆá¼yó´hÑ¢iúuË-·¨¯¯OÿüÏÿ<-eOZ¯·+V¬Ðš5k4{öì'hyBBBÂæG2@¶0ºí9`Ói·ï¤õÆD»Ý.|öÉO~RçœsŽæÌ™££>Z»îº«êõº²,ÓUW]¥Ÿÿü皘˜׳QuÖ¬Y]ËI%Ï£>ª÷¿ÿýlÏÓ=æôÄOÔœ9sôùÏ^÷Þ{¯Úíöãn>§þsæÌéú=Ÿû†ÜÇ»'˲i²ØTm¾è¢‹tá…>©k7DîÙ4ßmÏ„×kddD’´víZIÒܹsŸJU ¸ôÒKµ×^{éK_ú’þú¯ÿZÒúc”?þx}üã×{ì±Á{ŸN ƒR©¤N§ó”Ú°!<Þ36´¿'˲iϿꪫtòÉ'«^¯ëè£Öž{î©þþ~•J%Ýxãºé¦›žô8”ÔÕ€Xµj•Úí¶.¾øâ ¶‡¾OHBBÂ3ÉIHx Õj颋.Ò.»ì¢;î¸cé¸ãŽ;ôóŸÿ¼ðT×®]«yóæ¾Ëó\CCC…Ï!Ât~ö³Ÿmô6ôõõé5¯y.½ôRýâ¿Ð’%KôGôG¼žú¬^½ºë÷|îÞï!ò<×ÚµkCôɯßTmþC0sæLeY¦¡¡! <áõÜ•+W>íg–Ëe½óïÔ;ßùN­\¹R?üáõÕ¯~UW^y¥n»í6ýæ7¿Ù ‘:ýµ5â‚ .P¿î¼óÎiïsY»ví´h•Ãnèö92úCú2!!!aK"Ûð,Àc=¦¡¡!-]ºtšñÑl6uóÍ7OóÒtÐAÊó\?øÁ¦•wûí·ktt´ðÙÀÀ€öÝw_Ýu×]]Ó¿6ÞøÆ7ªÓéèÑGÕé§Ÿþ¸×j=öн÷Þ«ÿû¿ÿ›ö=/Â;è ƒÂg|°ò<ïzŒñý׎¡•6O›Ÿ.;ì° ö߆®—¤k¯½v£<îܹ:ñÄuÅWèÈ#ÔÃ?¬;î¸cƒ×?þÚñ›ßüFûï¿×—IÞxãÓ>£½Ýúñ±ÇëšÞwØa‡iõêÕ<^;!!!ᙎd€$$< 0gÎU*Ýzë­…·Wçy®sÏ=W+V¬˜vÏë_ÿzIÒûÞ÷>­[·.|Þl6õŽw¼£ësÎ=÷\5›M~úé]ß’Ýh4tçw>ívì·ß~ºæšktÕUWé´ÓN{ÂëO?ýtu:½ímo+¤Â¬\¹R\p²,+”sê©§JZßf7(ÆÇÇuÞyçu}ƦnóÓÅYg¥ÞÞ^sÎ9zøá‡§}ßéttë­·†ÿ:è ½ð…/ÔÍ7߬O|âÓ®*¤ÅÀíöœ‘‘‘®i{1žjmX°`î¾ûîicŽNÆŽ€W¿úÕ*—ËúøÇ?®ÿýßÿ Ÿçy®óÎ;¯kŠÙ9çœ#IzÓ›ÞÔ5¢499ùŒ‹Ø%$$$8R VB³ÕjUgœq†.¹ä=ïyÏÓË_þreY¦ï~÷»zôÑGuøá‡Oó°~øá:ãŒ3ôÿøÚwß}õŠW¼B½½½úö·¿­ÁÁA-X°`Ú Ð–/_®ÿþïÿÖ§?ýií±Ç:þøãµ`ÁŽŽêW¿ú•~øÃêõ¯½>ýéO?í¶sÌ1OúÚw¼ãºöÚkõo|Cp€Ž=öX5 ]yå•Z¹r¥Þõ®wé…/|a¸þ…/|¡Î>ûl}êSŸÒ’%KtÒI'©··WW_}µ¶Ûn;-X°`Ú¦ÞÍÑæ§ƒE‹é‹_ü¢N;í4-^¼XǼöÚk/µÛm=ðÀúÁ~ 9sæ¼ä_þò—µlÙ2{î¹úÊW¾¢Ã?\½½½úõ¯­ë¯¿^wß}wá= .‹F£¡¥K—j¯½öÒÿñkÇwÔØØ˜®¿þzÝu×]zùË_^x/M7<Õþz2è¶ {c^ÿTË{ÛÛÞ¦w¼ã:ðÀuÒI'©V«é‡?ü¡î¸ã{ì±Ó"P{챇Þÿþ÷ëüóÏ× SN9E3fÌÐõ×_¯•+Wj¿ýöÓÝwß]¸çÅ/~±>ò‘è/ÿò/µçž{êe/{™vÛm7MLLèÞ{ïÕM7ݤÃ;L×\sÍFmkBBBÂFÃ9{+!aÃãû|ùò Þsä‘GvýnáÂ…ÓŽ8mµZùÅ_œ/\¸0ïííÍ,X¿þõ¯Ïï¿ÿþüÔSOízüh§ÓÉÿþïÿ>_¼xqÞ××—ï´ÓNù[ßúÖ|õêÕù¼yóòƒ:¨ëóÿýßÿ=ÙË^–ÏŸ??/—ËùÌ™3óƒ>8Ç;Þ‘ÿêW¿zR2¹è¢‹òR©Žá}ûìÚ|ÖYgåCCC]åº)Ú¿dCx<¿øÅ/òSO=5ßm·ÝòJ¥’×jµ|ñâÅùòåËó믿~Úõ«V­Êßýîwç‹-ÊûúúòZ­–ï¿ÿþù;ßùÎÂ;%–-[VÐÙÉÉÉüÃþpþÒ—¾4ßa‡òr¹œ ä‡rHþñ<Ÿ 6$˧Ò_O4Fâ:>.\¸ÁcxŸÊX{¢ç_rÉ%ùâÅ‹óJ¥’Ï›7/Å+^‘ß~ûí¡ÿoºé¦i÷üË¿üK~àæÕj5Ÿ?~þº×½.øá‡óC=4Ÿ3gN×çÿèG?Ê_ùÊWæ;î¸cÞÛÛ›æûí·_~æ™gæ·Þzë‰#!!!a‹!ËóìJHHØêñÐCiáÂ…zÕ«^¥Ë/¿|KW'!a›D£ÑÐüùóuÀtMKHHHØZ‘ö€$$lÃè¶7drrRçž{®$餓NÚÜUJHØæ°zõêiÇjçy®óÏ?_F#Ä„„gR$!aÆ{ÞóýÛ¿ý›^üâkþüùZ½zµ®½öZ=øàƒzùË_®«¯¾zKW1!áYÏ~ö³úÀ> £>Z;í´“FFFôýï_wß}·>ø`Ý|óͪT*[ºš  izBÂ6Œ—¼ä%ºýöÛuõÕWkÕªUªV«Z´h‘Î:ë,½ímoÛÒÕKHØ&ðüç?_|°¾÷½ïé÷¿ÿ½z{{µûî»ë‚ .лßýîd|$$$<ë" › iHBBBBBBBBÂSÂÈȈÞõ®wé¥/}©æÍ›§R©¤‹/¾¸ëµ·Ýv›^ò’—hppP³gÏÖI'¤x ëµŸúÔ§´xñbU«ÕpLu«ÕšvÝc=¦SO=UóæÍS¿^øÂ†š&<ó‘ ­###zûÛß®vÚIµZMx ®¸âŠ-]­„„„„„„„g1V®\©Ï}îsšœœÔ‰'ž(IÓ^´)I÷Üs–-[¦V«¥+¯¼R_üâõ›ßüFK—.ÕÊ•+ ×~ðƒÔÛßþv|òɺîºëtæ™gêCúÞúÖ·®›˜˜ÐQG¥o¼Qÿðÿ o}ë[Ú~ûíuÌ1ÇL{çUÂ3)k+ÇK_úRýìg?ÓßüÍßhï½÷Öå—_®ÏþóºüòËõªW½jKW/!!!!!!áYŽU«ViÞ¼yºè¢‹tá…¾{å+_©›nºI÷ÝwŸ$­?êý9ÏyŽÎ9ç}ä# eì¼óÎ:õÔSõ™Ï|&ÜÿáXõW¥»îºKûì³$éÓŸþ´Î:ë,ÝrË-zþóŸ/Ij·Û:à€400 Ÿüä'›£Ù Rd+Æ5×\£ï}ï{úÌg>£7½éM:âˆ#ôÿø:úè£õÎw¾SNgKW1!!!!!!áYŽ ù²[­–þýßÿ]'tR0>$i×]wÕ‘G©«®º*|öï|GZ¾|y¡ŒåË—+Ïs}ó›ß Ÿ]uÕUZ¼xq0>$©§§G¯}íkõÓŸþT¿ûÝï6VÓ6’²㪫®Òàà þìÏþ¬ðùòåËõÈ#èÖ[oÝB5KHHHHHHØÖqß}÷i||\ûï¿ÿ´ïöÛo?ýÏÿüšÍ¦$é®»î Ÿ;vØaÍ;Wwß}wøì®»îÚ`™’ ×&<3‘ŽáÝŠA8²T*Ú‘>;ì°Âw+W®Ôw¿û]-\¸PµZm³Õ5!!!!!áÙŠ±±1=øàƒú“?ùÍ;w³?ÿÞ{ïÕððð&+ppPÏyÎsžò}«V­’$Í™3gÚwsæÌQžçZ³f¶ß~{­ZµJ}}}]¹ÉìÙ³CYÒú—wn¨LnÂ3ÉÙŠ±jÕ*íµ×^Ó>¼øÝï~W¯}ík7yݶ5|ùË_Ök^óšÍúÌ{ï½W{ï½÷&Îo~ó›§e„$$tC2@¶1ì¾ûî’¤jµöˆäy®<ÏU©T400 J¥¢jµªV«¥‘‘åy®r¹¬,ËÔjµÔétÔétT.—Õß߯ÉÉIMLL¨··WµZMårYÍfS£££j6›ª×ëjµZ*—ËÊó\“““êt:jµZšœœTOOJ¥Ò´HN¥RQ¹\V«ÕR«Õ 9¦ív;|ÞétT*•”ç¹:޲,S–eêéé)ìá:®m·ÛÊó\¥RI}}}š˜˜P»ÝVoo¯Úív¨ÏãÚv»žÊå²&&&”eY¸§Õj)˲Pg>Ÿ˜˜P½^åò9eäy®jµªf³êʳ¹¶ÓéP§r¹ž+)´Ÿk{zz”e™z{{Ã=“““¡ßé¿f³©¾¾¾Ð_ÞÞV«ê”eYx.r­V+ó¿½(£ÓéÊWµZ úÎõÔýBÖ­V+ôu÷ö#{trÐí¾¾¾Ð¿ÔÓÛßÛÛÚÁs¥õ'ÈLNN†1:>>®,ËT©TB9¡-è m¥ßxÖäädxßQoÆPooo¸ÞÇXžçá^ï—=2q¹ò]¹\Öððp˜kÐ5ÊȺ¹Ž£;ÈÈu=æ{tò1ßét499©¾¾>5›Mõöö†v ?ÆŸÑ6d@ùÈ´^¯«Z­jõêÕ…yÌ Ef|FÙ® ±ÞQòìíí ó‰tY‡ö6 ÕëõÂüé²e.æ9½½½šœœ ϧlæŸé3æ äÆü ¼­®è2ã]¦N^gŸ?è7ÚÆXC.ÈšqïMà9š={¶ò­ËvÛm'i}Ä"ÆêÕ«•e™fÏž®˜˜(Ì×~í¡‡Z(wCeúsž¹HÈVŒí¶Û®k”ãñ ƒz·ÝvÓèè¨FFFÂ"Ñ××§°ØÍš5«@gΜ ’R©¤uëÖiΜ9Z¹r¥jµZX,J¥’f̘¡ÁÁAibbB•JE­VKccc*—Ë*—˪T* C¥R),~¥R)@H¤R699H DÁ Õr¹žÙÆb1ƒØp-?nt![rˆ¤ÈÒnäSZo`Ť›Ï En”±øJëI eMLLbEû0©# ¸/Æ™Ô9õõõ ŒžžêG›èÈ“ßS*•T«ÕB½1Jhr‡lÆò ïi›4E ?ȃz@\ ”ÔcbbB¥RIÕj5ü ñžœœ,×<ÏÃfIžÑÛÛäéC!Î\¡n¸QËçô õ L ÉÉÉ‚ìÝÐv™¡¯”Oóf˜›Ð ŒGÚ„£‡2œ@Sò„¸£Ï̃ýýýáYqŸRW×7TûûûCÛÝÈð9ˆ1ͼÈwè8õëëë+èúN`ŽnµZªÕjr§¿h7cbÅŠ‡ÕÀÀ€šÍ¦úûû5>>ÆããyæÌ™’Ö%###a¾šFœ7'öÙgtÐA[ìùݰçž{ªV«éÎ;ïœöÝ/~ñ =ç9Ï ó{:î¼óNýÑýQ¸îÑGÕªU«´dÉ’ðÙ~ûí·Á2%®Mxщåe IDATf"mBߊ±ÿþûëW¿úÕ´Ó®žÌ,•Jš5k–êõzXXÜëÆ¤ïÞl÷`µZ-MLLhxxX³fÍ*,¾aèïïÞ9HÍÄÄ„šÍ¦²,ÓÀÀ@¨Ië‰ƈ“ 'PÔ!6Nœ´c(¹g¹p/¹{ñY i 2ƒ!¼’‚ÇνïNš]³Ù ÷BÜCJ[ùÜI¿Y0GGGƒ, 7È™hNì5¤ŽF£ SHBüÂ'7dh£Ë€Œ÷Æ»4n×@b܃J$ÈI#Æ_9ðþ—dìäÜÉ ² Bà ²ùÀ°¦OÀ{»<*ùs#×£ NZ‘ }„>1î¤)§{¡= wC#Á#‡<ï‘9òn6›A®nÔ@¤8+  Œˆe<^&''ƒ<éstߣ°<ýA¶È×#J|o·GÿÐ>Gïq| ÃÞï)Œ#Œ®§^g N’Ñ'ŸGÐôv2n³èeÐ/îT¡¬J¥¢ñññ «8¢Íç}}}¡´Ï®a|{tÅ I¼ó½^WÁˆö¾D¶”ëFc›¶¹Á†AâÑêθn4á™8]¸Ïû”õŽöûÜÍ}óçÏW«Õ kšG3›Í¦ÆÇÇÕh4ÂøÄHrcuK‚¾ßØ?Êå²^þò—ëßø†FFFÂç=ôn¼ñF½â¯ŸsÌ1ªV«ºì²Ë e\vÙeʲL'œpBøìÄOÔ=÷Ü£Ÿþô§á³V«¥/ùËzÁ ^ vØáªw¦GŠ€lÅ8ñÄõ¹Ï}N_ÿú×õÊW¾2|~Ùe—i§v*O£T*…… '6 ðððp¸®Ñh„°4ÆG­V ‹€§¸GMR $¾BîYÐ :¾`¹÷ÖÉ5ðô8õÂ#%7¦ DDQâÈ…4EøÜ€ˆ ¸§9AȽ,Èxª–ßË"†W“²<¼OÛˆl°àJSÄω­FÿMú¤@záäädÁ#N;!å7.<šA»=Zäd’ã׺®Œ¼þ莤)s£„ºÆdÒLi3ýC;]‡*•JAF®Kn˜y[<í‰ëã>v@~±‡cÕI§GtÐ-¼Ânô@ÜøÌëã}Œùy”Ýwƒp²·ÉÉ{L¼uŽ£Þw.ó8šà:¿”§ßxä‰2é[>w¢î„Ø. ˜,Ë4>>"Ž´Á#Mn`y$—6x”ÉJäàÆúêò˜˜˜zÁåã ™aðáðgø|ìºËó1°\/=Œ¨ãÍŸáãÍu™ât¢ÏXèGæj7ôÜ anpcÞ#/îðây> GdÕn·Ã›¹W¬X¡±±± £¬SnèydëÙˆÇ3B®½öZŽŽ†ô¬»ï¾[_ÿú×%IǼjµš.¾øbzè¡zÙË^¦÷¼ç=Ó…^¨ùóçë¼óÎ eÍž=[õW¥ .¸@sæÌÑÑG­ÿú¯ÿÒÅ_¬7½éMZ¼xq¸ö´ÓNÓ¥—^ª?û³?ÓG>òÍ›7OŸþô§uï½÷ê{ßûÞ&’DÂÆD2@¶bsÌ1:úè£õ–·¼EëÖ­Óž{î©ý×Õu×]§Ë/¿üq=2FC•JEN'ìIð=’‚÷òAºÏÌ™3õûßÿ>,(Ò”7Љ“6Réäxtt4ÂØÛ”e™êõzø£Å£ xzYŒÄ»@›<ïÏ$ÚËqbçdÑ£C1ys/œ/ø¾x²`÷õõI*îÙT ˆÈ™6C¬Ü{ë „{ý¬rMœ£“XkÈ5õü²ð»7²§§'ä #»8/râH“§ÙÄ$BÓ ¤¡±Ï„¶û=ݼè1Ñòºð›kyƒ¶ºzÔ‚¾„˜¡‡n Q_tœñæD‚D°‚g8aä:"Xñ Æ•·?6B]ܘ… ºŽO›'ŒaŸÓ¼)›þñ(u X×mw:ÅéCè; \žnX0'ÆýéÎw6¸ÁìsQÈÉ@®«±ã}ážÏy|ïž)žI›=äãèp½Ü–pæ™gê·¿ý­¤õúrå•WêÊ+¯T–ezà´ë®»jÑ¢EúÏÿüO½ûÝïÖÉ'Ÿ¬r¹¬£Ž:JûØÇ¦¥ŠŸþùÔ¥—^ª}ìcZ°`þò/ÿRï}ï{ ×U*}ÿûß×»Þõ.}öÙj4:ðÀuíµ×jéÒ¥›­ý OÉÙÊño|Cï}ï{uá…jõêÕÚgŸ}ôÕ¯~µé†F£&|Bèx™œ|C1úúúÂäLd‚<[Bá###a!#Òà Y¬0€ãMÀžîÈýþ|R!MÈ ‡Ïï–öÙB7<‡>{d„{|”ïCqBëŒ~B6ÔÉI#u!’>!bá‘9'èè 2v™{½»E¨hŸ§K¹AA¿P>rï½âs¼p/¤“=ñ3bqç÷‡GÛ˜scƒÈØ@s½£íȿݨu÷½#.+¬Ò®N§ èÏôºÇý寷ƒ{||âlŒçX½L@‰1̳´­Ûøpƒˆ2ˆôù~8Ö žŸe™jµZp"ÐvöŒliÄ:¿1Ë݈=:è ]ýõOêÚ³Ï>[gŸ}ö^7þüiéZ [’²•£¿¿_ŸøÄ'ô‰O|â)Ý©Éó\cccï{Ù0.úúúÂf;&äz½®ÑÑÑBŠ{ÆÇÇÃbæi=, N'„ì ² ”:Žu5Z­–*•І¤âéOîñwÒíÏwìFOWqR b²á†‘ïã  oD¢YrR勺/ž,’´h”×ÉÉäÄIllˆ cï{²x FìyuÂYròèžÍØãGÁ(‡69Á¦~“ï'óx-ýäìĽ¡±ÁIôûbrH›¨¯1— 'jùfhO?ñ¾q£‹2œŒQ¶§°8^'îÝŒ7ì€{ÊŒ ”åãÀ#’ô©¤‚ü¼lÆã½q²{Åéød5×SëõóHÿ{d/–JÔ™{Š“ãxÎqRÎøô´*æHÂø˜p¸·Þ iÔÅåèÑ,æ5dG20@H_òù×Ó–òö„‘®>W¹ãÄS}žÀÀ} ñ2<=66/̃^G A!zëQ=¬¹p”ĺJšoBB“G2@¶Q°p@^ 3ž&€·¯R©#ÄCâ¢öÏkµšFFFÂ"Q266¥ÞÞ^5ðìjµªv»­ñññÂfXÏ v"‹G•ûãŸWŒ…NšŠ‚8a“¦RŸ6DŠ(ÓÛŸ°ãÏw2ç^NêïI>NŠxõbqôø‡kcBâõsæZ­†Ô¡¾¾¾àÕ£}ÝÚ†wŸçð{`ÝL_î‹ÉoOOƒ‘éäù¹7ÖûÊÛädúÍSa(™¹Žºq…î ÓÔÛÓ¢¼o ×ô¹ë‰-Êd,I ‘Ř:™Ä3ídÔljN%ðh‚QÆ1zîdÒË¢~¯÷ë‹[ž ãý͸•Tðx»±åÑ@¼ØN‚»ET\¶q¤…2ÝÚíÏb/ãŽ2œHS†ŸZæF‰Ï'Ô›v8 £©^È0ýY*•‘Íóù™~s§€Þ‡üvg óQ¬?Y–ÇA<¯¸Žù8óç1¾<š!ÖÍP¢½¾Ft:`h0n}žãoæàf³©Z­"% Éóõ'¢¹³Í)êt:Z³fM!tK!v0mÌr66Ò)XÛ(È wB‡¡À"Æ&ð¡¡!ŽŽjttTãããa*,µZM½½½…“&&&ÂÞT¢.¼€œ2"Mmªä^2¢,Ý6 :!óïy6^,ˆÞ7÷d»'ßÛ莓ÅnS©èUv’E™iˆ _¬+•Jð²!?' áv{êÄH§…AÊýYóæÍS­VSØèîõˆI€·!&ÔÓD/G*Fy¾>ž¶!WŒ«xïƒïWôÏÓW d<ÏÓYb#rEªœ?Çû#6ôÜãëä¶aD¹ì(3– e:!Š#N¾Ý¸óô¯eRVœH½œüS¦Žº^;‰vcŽºœ\GÝãì¾â‡{\fžjçÑ('K'ÚÌ+N¬»ÉÃõ‹¾ífìùоQ®§ýy]!Íè|·ˆžT4 ˆª"sö!xZœGWˆ>ÇG)Çåó Ê£^8h§G³½ïÝPC±S„>E¤)cÁ7¯ãòÈõtG:Íß±£Šé\¯›Í¦Ö®][XÓcóæÍÓvÛm§Ù³gO[WÜ8GÇÝàKHHxòHmõz=Oè^JÏ7‡@ñ‚Â5kÖ„(IÁ;Lœ£$‡††Ôh4BTƒÆsÔY8ØC!iÙp)Ïó³Ý ‰{ú‹çðK ‹½2Œ1'ÆNÀœL{n1m Ò”qôy*¤Â–J¥N©T*Áèš“HOû‚ØÄï$ˆ=ÔÓ½ÒÈÅ=²½½½Z³fÚív¨Sžç…}2'Œè‹Li*M&^¼Ý`CÅ$]ð í”Ò 8±Ä£¿¨Ó 'Rô…§ëy´ÃÉ«¿0Íåâúá}ä{nüÈOêäúEý¸ÎûÖ }LÝ|C²{­ùÝf|º¾8éCä3?8y ¯>.ŽÆµÛë7ë3GÌœ938Jp4lI¤hEÂÖ‚d€l£X·n]xqT–ea¯E¿†Ö¬YSx“v»½~êàà FFF¹`áð÷{Œ…4+›õX,H[¦Žëuä¹Ú,F½½½ Ï÷4ŠØ»íéS,X}}}á~ó8uðß<ƒEÝI³“.'å´9ö^Kë‰Z­¢8~ê‘ן:øÿ '#N|âÆž7Îo'O”?44TøBàF ³< RŒXží„ýq¹ù“Uþ§}þLvx_;Nl©—§?99AVñ#'â<§Õj…(•Ë9t#Ržfãºç†muãÄ=Ùè4×ñ<'ÆþÛs'{nhz“ðHÁŒI]qò)©`4¹Ñî2È ‚Ïs½­NDÑ IçˆkÒn|žq϶GÆü7åÑ^™¢šèMqr=sdóè†[îç^dãûqp xz›“oÊÃXð£¶}ŽbNñ¾Åp¢nÌ{n¼ÆïAbü¹1ãQÇôc¥RѺuë400ÚäcÁõ×tžÁ©†¥R)ËÀ™ƒ‘ï«Â0öh‡©ð’ÃjµäÂÚÅ&jïAÚRp}ÙØå&$ll$d :FA©TRX<ð:s*ÆF»ÝV¿V®\¼ºk×®Õàà` àLÜÒÔ^ ¼ÙRˆ’H'ñ¢æyôY–…¹XhÝÃ{3!–RÑËËbåž²<ü<µ(ËÖŸ†B›láU†lr‚Œ{÷ð–±€º ¤lß‹àmAVä~ó½ï5ñÀâè…{\}o ×ydÈÉ9õ÷ôOiãZO9¡/!îY¥¹Ïû(&Q7Vøß ®÷½—EÛÑ1îƒ`ºñ \¦ ˆ‹§Áñ,tÝ£}1aˆvcÊ£ D“œLð=2õvÄ2E1þýE‚Üï/ÆÃ®T*áÞ8âÁ[¼!ÀžvÂó¹ÖÉyÕ!êp"c×¾‡@z ‘Už…ƒ "ÍÞŸXÿº‘{Íã(–[ƽ9  "ªãããªÕja¯Ï¢?¼Íô)× ÿ¾É˜ÃЮóh…§{¡Ãô:âÞ7¢Ýyá²b¬RuŠ/þô¾ð芧áy´ÑûËÇ•ŸFœ˜Óÿ¼ÒÄ>b®`L{”à 7Ñ;OUõ(e­V e‰fœys2ýÝ××t×78Æù¨Ýn‡ùŸvÒŸDDæÎ«z½R†=2Ö-…Ð3­VK‹-Òý÷߯-IØš mÖ—Ö/МRʼnÖÄÄ„êõz``‚fñâéN€= O¨oNuB‰õŽõ²ññq †Åzc ð¬Ø;އ’„xáXœ|o ¿ñ²B’ÜSÛÓÓ£F£Qîw­§äð}µZ äß7ÌÆ)EnXQúÏ7ÈCü~dák'Ö+¯³ O…¡N8œäû{VèGH:åû‚þþþBÚexjš¥.wÈÿ×jµBtÃÛê^zÈÑžV«<ýNªü¨M—zç㊾äs #<ã£nÆ•×~å­ËEp²Á»ízOùžzâ ÷ »¾ø{*Ö­[W àôsÜî¨èíí sõ#m£'&|F[â´5¨ççû˜B†qT±CD0–ムèKßÛD]1J™=Ì÷†0Ю»îØ`¬ú˜¥Ïh#cÛÛëGäÎüÁØEô› GI=ºàŽ 82â ô‘¶P_æ_Úî)®“FC³gÏŸ;/IµZ ÆÏd|?‰“¼€E÷H9YÆãÉéFyž‡ÓWX‘‰o,÷ôÚîž[Ï?†H*´"çJ/o‹;d‚ˆä——@ºç4NÑ B*æ=C$y.„‹J•€z„@R N¹>'}Æ£î öÔ1d‡1èi.ÈÃOsï°§òÐOîu÷Tä‚lœ4Ògž>‚§}w/«GhK©T †…”A_ó,ÚÄßžrGÙ´app°@$Ñ/w —NPK¥R!%Í÷7¹<0ð\GÝ@çÔ<qT¥T*>¢»Iædà/~#e³^¯ï·4iòè[êGo¼“a7ÂEEcü3›GzœÜ»‘Gsâh'eCü½ÎDƈ&{$Wš:FCÃñF¤­¿¿¿`àøÉ€>o¸“€g£ Ìó!§À"QÌ™”Mª­G ½º\C´uöìÙÓÒã0à}^òµƒ1IDÜŠ÷qèŽ*£££ Ï/—Ëš1cFpDøÚãŽ6¨T*ψ(HBÂÖ‚d€l£À[ßl65cÆŒÃDΦs­‡àI•™={vˆ‚ 2Š!À$îXþÈȈ$M;îÔsë z†çäº7¶?׉cµZ $€Å…kÜ(`qóÜu'l’‚±„‡7Þ\wž6ˆÉlüÆlÊ‘¦ö®°ˆzšõ¡ÿ¨'rôÿ˜àá‹÷)8ɧ~,ºr¢¯ý>êÏ‚ ±¢<DšJÙC^g7ÜS A$ê5::ZHqy`Üù‘BI‚冞÷=z®àùჃƒ ‘+ÚæžVI¡Þ.HàÁ÷‘{ß=jG}éÇz½^Ãu'¥Á|ŽñˆÌ0:ÜÃ"‹ñ‡!冄ÌI6õqBGýºe'<,êÞ/|îURDkE IDAT†¼.ÈÌ#-žºãϤoœ|»w™÷ @¸×)€¬`R_ÈDÈëÁ“!'š¤U ?ú©[Ÿzýc#‘kÑ=6“Žƒ<©³ò”ç¹F!²ÁXòü{ˆÍSWœü:éôÓß܃‹<ÈÑ÷}”ázéc@Rx¿cÒ‰>zàû­ºÉÖ‰¤UʧžÞ”ïQWÊá^7 Ü+O_zÔÕçô•)Œ~z¡î‰žGÄÈ }"{‘ô9þ£=Dѱ8/޾ùfx7ÚÜxðûØÇ„3ÇûÜçUt¹º±ÍÜ…!„¡Œ¬cƒ]óµ¾àÙxâG £»F¼žô{©Ñ!þ§.¾ï„ëÜÀÉó<jÚH~ŸÏ>|¡Ÿ0T1Ž$36È‘¥; ¸7ÞKãcÇÿ÷:} éÎO©Ä8à @.~B˜§NR¶²±£‚kÐQ¢ßŒæ`OYĤ?=JàcÄ”ï/zÆ÷è$ÿ»®úœÆxCŽÁ¤¿™§Ñ>#jçÎ'îàõ}H­VKããã'ÑjµZˆðu‹ørÏ–„Ï›ó'!aS ¥`m£ðJ i}Îëàà †‡‡ƒAÁ¢ÓÓÓ£3f„4.'þ±Pš2jÜ3é/ˆ’¦"!î%tZìå¤\ïøNJ|?Àsë$Ï Ïÿ¦m^6×¶Zëß"ïûðêyˆÞÓ|v¢ï) ”ïíˆS¥ ͱç2ïõŒ ˆç¼s †¤çÔCà>ýz'‚®;NòÝ`ñ1ãžë›Æ}løØÂs¹¸ÁíÄyyzÏs9ºHý€G$Ðú:ž \‡Tû¡±è3Ö©ŸQNU¡­´ÏI?ó9$ÏóP¦??ÖOÁ¬Õjʲ¬pjë·Ï“nLº!DTÊO;Ëó\###…4׳,[ŸvÌ|çØ}ñS°HÙu}ñù㙂µ© †d„$l ¤È6 Âü¤.IÒèèhXœšÍ¦Ö­[ö‰à„Ô­]»6DQ 'žwÍBâ7“§}ùQ¤îýd£;‹¼'÷ž;уŒx •¾˜cL±hð¹§:Ä?^>õ¢]¾Ÿ‚º±0ÅÆ€4EÀ»ÔÂßx2TIS¹Îî)tï¿“'bnl:1qcòßç2uÂMßó½•8r#©@:ݰC_º¥m¹ÅérNf1èð\Ç¢8"—çäÃß$í$ª©‹#}ž_î$×Ï÷w½A7ùßÛÁXAvèëà† ÷!OWôè—“?ŸqÀËõšö#ߨñþrâÏwÜ‹GÚɾGÜð¾E.±aë{g¤)wíô9Áû:6ì|Έ @—‹f¾<7>ŸPWOÓsA¼¸{\?=•Ñû86z™ëéW×=wÑ÷»ëi¸èðò‰¢{ú[–M½ñœˆQ7¬74î}n£hÕ‰>Æ3Ïpg–ƒ1Üß߯Z­žÉ\_Ÿðä" Û(Hm ·•ƒÀ½¼Y–i```šwˆ ˜=¼1]š"É,\¾xF*zúynìùõE8N¥òèŠ{s}“¦o|£7xíœÀÄÄ‚¿¹Þ÷³P®“3ÚÈóü{Êe»AÄ¢ëûžë)',’nXÄF ×ÑÈ·[Åð82{ÇP/Ó%dïQ,È'Ï.{'%”‡‡§"‚§Ð>䇠Ÿ´Ã=±ÞNÚâ›S]×ÐÛØq/»§`yÙnøéBô•Gk<¢åél´ß½Ønz4ÂõÝeìi*xŠ]ÿy¦c¯;í‰SÿºÉQZŠÖŒ3´`ÁÕj5Ýu×]Z·n]è³Ø™@ÅÏ#:èŠG©¸—gûxq=‰£Y>iC7]Fv[tÌ÷Ì +è ©›>ßfYq_ÏpÃË F{Ûœ8».z? 7Nò=*ç}nzšÏŘvƒœr|‘6ˆû¸÷¨÷—ø¥‡®èž§^ò|×CŸ3ýä6×37~è3wNli¤HÂÖ„d€l£Èóõ{ xël§ÓÑÀÀ@˜x9IšÊq'¯vll,¤g11ñfd”8ŇŖ4$7D¤©#€ÅÒ ¢/”önø‚Ä"â†HLXTü½ñ÷ÒÔi)þlˆ`¬øiQNœàÅ^L{÷ˆóüس^îys¯£ þ’?'xYêïýì˜3<Ÿ¾b‘ö÷‘¢ÀužÖ{Qi/²'z*ñþêåd"àýã)2îuwýs∬|7röSƒœü¸¡Å÷CH#Q&HiìÁwý¢8Û½ú\Cºg9&Ìþ·ëklSV¬Oô‰ëMú×Ëãúf³Þ¿ÁwìcüÒ¾ùóçëÄOÔܹsµ÷Þ{kîܹ:çœsÂû†ü¨aß#áõuRí€{ÂÝqÀxr£Ë£M®‹ž6ê/2ð÷`Ä K®ë¤%¹!Œ,©'÷ºœý^>øñý1<¥Ñ¬¦o|Ï Q Êò4'7œbã96XrŽÔƈg,øKL]±ÀçIa>âïèe0oqŽ.wøx$Ÿö0§Qž¹ OÉÙFÁyüžû/­_°Ùüì›ú†‡‡5þ|•Ëåàmj·×OÈN'Ux³ðÞÆiMÒöÌ÷"JSyàž"â$н›Ü§!ÅDÏÆøZ<Ì,Ži`Aã¼ÞÓàG”zíƒ0t:ˆ§Ù=…þ7×yž62¤|<—qDÄ ƒQþF܃{ØYœX"?Iasº÷gLhÝpr¬HÏ€˜!7ôâh…“žíQžÛn·Ãùþ.;'‹±Qh+›‘íòwSPO×Cï[dK[Ü@õ:¡ëÈÝõÏ=ðèNLp½>ÞO|§NùØt‚G_û~t‚û‘—EO?d.qð´?¯C»ÝÖ< ‡~X÷ÝwŸz{{õØc…òüåw”á¤Gª\ŒYêȸ‚Pº>»á@ÿ;!÷¹ÇeédÛç×­àYÌnÄ9iöˆƒei¬Oîˆ È¡Z­†ùíûµ<µË£bÈdž;+Ø#áÑ)ôÝqã÷7×##× ®ó9Óq^[­VÃæ~îCžžêH;<2âQKôÛß_ãs1m¦m>þ|^ÞRðñ»±ËMHØØØò#&a‹ Õj…—ï‘ÛÊ›!H,–NòÚívx9ZOÏú÷Vø‚í^#'î~:U³Ù gÇó<ƒxArbé),N@¥©‰7öjÅ„ËÓÜËè ‹vûâåĈM§e¸'Î7‹:a ?úûûéC¾â/rD¦<õÂå!iÚû7ú|N n>ïç½'Þ¯D•|^¼ÿÊ£Aår¹&¸%‘Œ…„­ÉÙFáo’}ì±ÇT¯×Ãdêo]&:R©TÂ[¾!µ{÷úKSÑŽoìt:á »’ œ{¶!Ò Ê‚Ì2Ñ»'bGDX`}…/LNæÛíváqªEìEæw¹\raauRæÄž²<*wÎZH¾G܃ Äß»’¾ËóõÇhúq§~¯÷a___0© !$Œr½¾~-}AÙããã]Ÿí$y?ÌÀI¥{r݈Ó% !¼“TúÆ=ÙRžë„˜ëè7àÏì–ãuïëë †ßùÉEÞ&žA=âhX,'WîáŽ7ûÑÓ>ŽâTI7]眘±_¬^¯‡6Äýq$`4†GÀœÜ3Öùß~ucÔsù!¶Ys§Ë¹V«ixx¸p“rÚé$š1äýh±±LÝâ臧DÆQ—ïA·Ýhv2íÏu½ð2}nɲõûI‰#¢A###g„*8¤Ð +7ÒÇÆÆ F”×Ãû£„ƒF¼ÿècŒdæ|úÑ£W蘿ûÆçHã>ïùi]îìq£Âëà†®Ï¡Œ1ß3™ðäNÁÚFÑét ­Õjitt´p¬.FJ½^W¥RÑÈȈJ¥’V¬X¼º3fÌ%ÒgÜë?>>Ò{êõzˆ¬àUuO»çËãMö= îd!ẞžžð® <÷¤» ÒÇgD!üý(…ð…ÞóÊÝ‹ !¦í±‡‚Èßx—!ýNzc¯¬RÈÆ7£R©x€T|gm$ÂÓ]µZ DÙSw—$ ‚â§ 9qã>÷»Ÿ”¬“('Wþò8¯zB¹qDÃ(ê§§9ùrùñç‘c°»‡–“›œøÑ÷’ :øKíèß›°¡> ¯èK7=ê799©Z­êáÑC?i à Éd¬¯>—0Þcï+/&õè÷ðLÚ§,zÄ‚zû‘Õô›o@†¼£7qć{õ³,S­V+ìu€”»è ÄFž; ⨛ë?õëëë Ä×Ç:+íážžžž`ØaŇkœìù» $…9ôÓ_ü‰þ¹—žö¹L<ƒAá/¹£|÷òó7NI…>u½ñÈ&Ï÷ϳ,+Œµ3fݧ>nt0&H-sCŠz3%a~C¾èºBjíèö>tÏÏ÷9Ò‡È"&Wè$dsllLN§"‡^x´ 6˜Ý{KŸÒN —§Ÿ|”çëO©òˆQ»ÝÖàà`HÑœQžåÆ3‘dP¯×C}‘†—§[¡SÔùctxZéƒ=B”ãÑJ¢­V+ô£©ÄÐáó8ªG1Xb’ÌÿùAw+•Jˆ–!/×)êã]ÂhÄy„^ã¼@þLêÄ{œ˜‹|Žàz7Ö=Ð÷=¡/¤9ºÎ\K„ÃÆ ,fàTb̸ƒ‰ß8[XKÜ`ô”Köð=‘F1>ÝaÂw­V++qg,º‘C„uË_2ûlij¹m [ÉÙF1>>®þþþ@(úûûU©T¦rÈ3/š"u D:‡4µ xJMœZÀbêžR-‹œââ  0žKŽñ„¸³q|0‹cLb*•Jx“*Ÿ9Ù¦¢lŽõ…›6Po6Š:i§®¾ÀC›ÍfXÀðþåùúc’1¸Xüܸ ùŽˆÅØØXHS"’å}$M#žZâ(îa35ÏqrîÑ"'€Ô™¾wrâÿÓ?N eR‘¬R6†G[z{{ÑÒ5÷€Óž<Ï)¢þ. 3¢îÕuò‰yÔÍ7õ¼}O#tÂéé>èeÒîà{~¼ÿ=Äû¬V«ªÕj ²‡Há„à3dHSùõÌî%Fž±¡îQJ'ÍžæÁs™û{„€oæ¦m~Œ+i£î¬Ì Dv'&&400 Vƒè¯Ì܃®Ð·ÈŸg‘žêC7J\'\NcccÁ0Cw /ìGóºb(Ä‘8t¶Z­ªÑhŒÚ͈± gÁ±å9ôµGCˆšŒŒŒަwgí`¼`¨ûQÒ[Ï”z$$<$dE§Ó o2o·ÛR­VÓàà`añÞ­f³©ÑÑQU*•°ˆCB<êái LŒ62úp÷0A ñšB~¤)ÏZ»ÝÖêÕ«Cê ?^|êZ­Vx7 õ¨T*0J*¼ Ä# ´ÍÉ7¤Î7d’žÀBÇ‚„±æÑ—8]/¶{€=bä÷j{¾3ip“<"ëi!´™gB~¼mYòýYà!“È‘û©ëøøxHCòh†¡¦þ7ep"oD†¸ºÎ C'óD:Ð;òúÑ]ß JÉûcÀÓf ýßcà„âÆæ^¢Õj5Dù¸žúØ@î/Ú¾º Ý€w‚NhÛŒ3¹r]@^x³ñúò<ÊÀñQEþô­§K2î=ŠèÎƉÿ-qO²§¸D¹Üçémüæo"Ô‡w¹ñ‰Nqr¥|ú˜çú\çÆ*s ýKªQœî†ñA ¢“}¯‘GC©¿Ï3ÒÔÑÐÌ—ô)ó óƒËÇ# Y@Œ+Æ}ļào2Ç9ã²á3öG1~ÑmRnY_0Ø<}ÌúÇçP¯F ÷ŽŽ#Â77–‰ QwÆãÌ™3C4…ô3?ôÄSÝ9æÆæ–Ħ2@’Q“°) mlçd*i=!å˜KwYÑÇnøWíõÂ8@ž¤U@\Ýk‹¼cÂçÆ Äcdd$ÈÕõ/+s?úÒ…þq½4•ãizÜC[¥õÄÍÓŸœtzäB*¦J*«J?#¢$”ådʽ¹xâù®Z­ùB¨}yyÜï)ŽÈ¸T*ill¬°?2J ±›±ÁøB—™ÜÃï)ô1ïËÁXæ~OIrO=¿½ý<{hh¨ ãþþþ‚ÁÅsÝ óè—Gi™·Ð'úÆ=úÞ.Ƽ§‰ztbêóˆ;H+QWtƒù—ë!ìqÊý⑾¾¾~ä:êNäàÑ#Ÿ·GFFBʬ<ôOi¢<ô±\.Þ-…Ì<ãsr8âè “zoƒ¯-8H‰Gñ|D§âH rªÕjš5k–/^¬ÿùŸÿQ¹\Öïÿû‚ÁžeYxçýçã-!!áÉ# Û(†††4kÖ¬°CRج ñ !~&j&m¼©ÒéÄûÅ$ðE¯.d·\.«¿¿¿àAƒ0ñ³°•Ëå@H!Y–¯ÕøøxH‹®¥\È- –{µTx¤ïôøøxH«ÁHrï׻܀ƒh³`7›M BÉ.©@d$H3Fï7prËu0‚ºóO~½^I7à _\O}AWœ¨ºWÚ£GxÛ©«§¨¹AFßIS›†‘­{‹‘3ŸA¨Æ=ßÔ×ûÝtƒ„~âZÚQV»ÝúL$#/ÖE7òúhè_?´ÃÇs äœù#Û _ú¹ý1^Æ×úo¢Bž"ëŽïs7à#n1çcDcp3û< ˜³Ñ?æ¢Vkê°ŽÑÑQ-\¸P«V­ ijyž‡Ô¼ØyáczK#E@¶&$d ùý,|xü ]³°8aîéé 9û ZØ«’çy˜©·ß³©ˆB³ÉÙFáu=Mɉ9D‚Éß,HRñM³ñ‚éäbÆäODeÖ¬Y!µÊê‚—ßÉf§Ó Ù±áZÚã$Ðɪ{ Éá–¦<ÁîauBMû ,–,Œx iƒT4f<íé^m¯»"d ñ¡oðú~÷ØÓnO©ƒTy´A*žÚÃóðÂú‹Ã<…áxÝpõ” 7^Ü‹N_ oäåä½_ ÔN|‘‹{'÷±‡Ò£IÈÜÓÄ<‰ûcï:íðý)NÞ<š’>ä‘êæããÕŸã{•ݘòñ熖G Ð/7´éSOrýqÈïvݤ wZx_b€û8A]ÜÐ…¸ò òý‘¯ëËÑÏñû:¥ëª§rñläʼÄx ¾®´cÅŠºùæ›õðÃkåÊ•…(¥¿ØñæÑ,‡<àsN 7ŒéOŸë|þð9Ù÷ùÄ©…>/ù|çêMùª8Q|,Äpã€6{ǓϽÈÊõÏ1Fý  ¹pÝF>ÒÔKTi©Wn¨Yñ:»ã‚ýt¤0oI$C(akA2@¶Q0¡ãQ‹=Ix,ñ±hdYöm@<Þ1BéqÄAšÚø ñô#ò†Yü‰”°˜dY¦¡¡¡àMã´"O‡ðÁîA–T0 X< ž/ïé ñ¢N9.O'ôN&ˆftËSgÑÆxÀ°£H“UïH–e…|f ¦ØðpÏ»/¦ßKïÇÀËëi<'ùNxâ”4®î鯤ÎN ÝíFr¬w´Ã̉¥§¹â†Ï@¿Ñ/tÁHdC{ðJ{ŒïÐo×A—eìÁw¯>uwãÂ=ñn„¹ñÙDÏéo7œè3.·¾©ž”÷L{}ƒ¯¿Oƒ¨審uŒwþw¹’æˆ>¢oÌO^o× 7V} ø^ ¸Ñïãš{™¯˜/ãríää¤n¿ýö0¡oî¬ðhrÀ¡.žöD]¼NÌ->&híBÏ=r@nĹáïãà Tô£DŒñnÑÑXGùÞ#\ÈÆ£ÑÌî|ðß|îGn{D£Á O'ç~|7ó¥Ÿòün”bø ·­V+:[)“°5!½ˆp…{V™´<­‡fàùÉü/MyNÝãì^8iŠä1& IDAT³pàYb­×ëj4ÒäädXðÖyøß‰ÿ³x‘ì;êà)RNrÜCÏuNäbbç‹2÷»1<¤"Ñv9Soȉ?ÃÌõòüþØË)_ F½âˆ€§P'ßóã©s./O¹@Fn„ ?'O\ãßq=„ÙI¬îvrCѳ8…ÈOT¢Íå8ÒâÞdâº@”ÂûÝEã(›ëí§K¥Ò´h»2è†oæõãb]öñIU9ʈu•¿¤ÑfîñöºAivrëm£o<:⮓n¬{›\&´½f•Ë=¢>ÿ{gcûUÕÿ5gÎóÜÎ@ XS*ÐP•T_H˃m"´¼Ñ˜˜«BL ± KM±Ô&¼@LŒ„ô…/$hb(0>€Bäm“JDKÛ{{gÎã<œsþ/&Ÿ}>¿u§Ðÿÿ{oËüv2™™s~{¯µöÞßïZkï͘äþiÇC>Ó€šè¬ëJ{øÎ¤' Ïqª)õÊ•ãvuBn¼×:tß`ìµs€µTcPIÛœ^kýcþÇý;¤_ñ¿mß²2‰Í:°œ±]˘(ˆ##vÚäHdÎk°ØD€v@ØpøèÏc‡Ç1kvÔ¡#Ú•mø'­Ô¤¦.OEùÉí1uù‘%G \íÅ%?z>?Ú1 O Ñž<žy(³'‹çraïÅb™jŤò;rÊ ^sÉ,eš½ðöx›pEDy“·'U§8ÐVêå ›‰Ð±Ì-7ACnö óï.ÆóùÉÑ€…óßy~Äц–‘Ï9±Þ ¨ì…§ šÙko‚œí™ÍÇ€ÉÞjG‚©ÁìaŸ×kr¼ @Ó@Ë?ÔÐtÜ=9jfû´ ³]šÌÒ¾œåu[~¦‰e&Â&§Ø¦õ˜wÜ¢ Y~|ŽÝ ° "mãî‹¶ qî̘$›4™àó~ë>"*»&Y¦Ö ëÒ(¶Ú“£XèÏýÍ$ÙmqÌêêw:j`Í®·œ=¾ÝrÔ‹¾LL©câqºGî§ô%;+ò8à]×ì ãy–3dÀý¿{2™Älv´^É=ï$æz;…Ô;ÃYw~7ýÄ©.u©Ë“/u9¡Å&)cváDtï–2 Îó Û+}\¸Þf 'ÝÉ9“D·Û-“K^Ìê“ ¯{a3“qÄù‹™$¼÷¼=à&K¸{¢7xà;ÈDŽ /“0@%Ÿy‚Α¶»ô³™ô1(]]]­œ_’5²Z[[‹Ë.»¬~<ñg°€íd/²¿ dÓàÔyëDeRQ%!躸]YOÍf³r¸úÀû½±±[[[å]ŽT¡û ž­7d• ¹£ÈÏ2ÌÌÞÿìa·6G°vj˶hム#7N_¡¾ô]úV¶kô˜Óh®¤÷9ªf2M½øh"㈈û„Á.}›ñÂmË`›ô¸aûfœ£­Yv^C— 0ú_YYîÀÆ#sÄ&/Øϱ‰n¸_±¶Ï¶æô6§wZV<ßc9ϱg‘Éíõ¢q¶ÿЯ<Øö<þ¡+÷l–ÈcYÞ4À ãÝçq¤aŒ>4¹ÙàHú†¸<ˆmãBÿŒžóîœf iO±S±° lx±XT<ËÈÃvjçzÝ®ÃÖ¹×m79&ºgRkÀnÂcù0.t»ÝJÔÂvdÛònY¼ß);Œ|—£~w&ëÜŸÇßo°fç„Çjì3½<–šHd²IÉã$Íý—ïhÍöÊwÇ9·l<ËõmµZ±¶¶VÎ 2Ñ¢O–Ã)qΰ³šQ&ˆÇ‘Gœ'­|ýë_×¼æ5ñéO:>õ©OÅb±ˆ×½îuñ/ÿò/•kz衸þúëãðð0>ýéOÇ'?ùÉøÖ·¾¯~õ«ã±Ç«\û¡}(n½õÖxë[ß_øÂâ–[n‰øÃñŽw¼ã¢µ­.O}©¡ŸàâÁ¿Ñh”Q™T#¢2ñHúÞˆå@Ïv™LZˆÅbQ(ã<¢/ö43Ñ* –𺭬,2º¾9*½Du|½AßËgN/Lˆ ì¹D&xØ[±ÉÒÛ­Úãmïèþþ~eëKƒi tî¶.‹F•Ün“UOÀÔÛ¦—;z!÷l?¼Ãi&Èr±XT«£0ÑÔ—rq„öÜxM“I÷Ù³g+úeC…Ý@O¶-ƒ–ì±Ë©Hž´Ë`ÞÄv6›¯ëJ´'ƒ]ꎌ#¢²3še“£l@_󯯬dçÕçô@œ €4<èÔ9ƒ]ÞåƒÞíç]&c\‹Ñ —I_³ÙŒÍÍÍJ*.&esØÁ/)Û òõµ&Kóù¼â•_,ª©YôÆ•L0±9êéÅØÈz[Þ±Šg»xüñ˜ÅµŽÊQO¯Ã±3}Òf÷ Ë“gùL!?ê“Søn:–gšÔñcâ¾ý`xi›1isZ^Þ€àéà·î.ôs+øÀâ9ÏyNüíßþm!a×_}¼èE/Šw¿ûÝñOÿôOåÚÛo¿=ÚívÜ{ï½Ñëõ""╯|e\sÍ5q×]wÅG>ò‘ˆˆ8sæLÜyçñö·¿=î¼óΈˆxÍk^qÛm·Å­·Þ/yÉK.xërñK9¡…ÉŽÁ7/¸u^¸|/&XzÖFñ8åôŠÍÍÍ™Ð]ãŸN§±³³óù<.»ì²Îít:%BBÄÄ6“ZNåšN§`OYÄÑ‚Å|–‚Ûãg{²%ÂÀ¤íœi{ó³§’‰Ì9Ë^€{uM¸¼®„´4âìE50ôj™pa9÷šg8*äSà $œƒ ðy$n—wÝáÝ سJ½3²<Žóˆ#wÚc"–sÇ­û½½½F°¯­­Å³žõ¬Ò2 gòEF¿Èzak& \™|;]Ðïô]{cÝ4y—'êgД£¡9ŠÁîWDgXæ3ƒèÓ&ŽÙ.irðá…¶ORµSŽ€yñ1:3ñ`}rd=ýšºnllÄe—]ÛÛÛ%Ò•íËQDžE›|°(×#[˱ÂrÁžMfó';\œúi"› vN`yœwäÂ6eò°½Z¿ØU¶GìÊãKަð?öD$òh ÏçÙ¹c"¾ùÜõe.à@]ÆêÍöïûûû1™Lb<WÆ3§ñ±Õ»£¾QYÈ)‹I×…þ9®üó?ÿs¼öµ¯­D€:N\ýõñ•¯|%~øáˆ8²Ã{ï½7n¾ùæB>""®ºêª¸á†ⳟýlùìóŸÿ|ìííÅéÓ§+ï:}út,‹¸çž{.¤Èêr K9ÁÅéöø¤0¨2ö÷÷£ÛíV&ð•••èõzO§ÌºÝn9`®ÝnÇx<®lïꓵµµF…´àqÍ–[FÚ;jÏ,†½iö3ð¹Ãþ”;jÂ~óȉç´Z­ÊV¼‹ç¹ŽÔÝ;³X#ª ëíyX¦=µÛíR'Àíw*Š#<Õ­<7€Io›j@a ˆ<ì­'š[]=:±Ûiu¥<ŸÂ©ÈDXwd`Ê{3€qÔÈdÇÄŽ:å<Ë/"ÊÙ€ÀѹsçŠM:Õ ÚŽÜ.À?6›süM(œîã5Mô=ä±ÜA(PGvx?ÑÚoÛEwöG,½ÌÈ Â‰-ã͇$:"“Ûn·É Ýc‘ s&ÊDRúý~9ÝžzØ2fq¯×‹ñx[[[Ñjµb:F³ÙŒŸû¹Ÿ‹Ë/¿]ìþ_ÿõ_ãÏÿüÏãÌ™3eü°¼¦Ói9#½å½i‹ )zEf¤9:侅̧Iís„ŠñÑÀ}Ã}a±XD¯×«80 ,,ÎçzGmsT=RêIûóx‡ Ñ—íƒûršÖÚÚZ´ÛíŠÃ%G]²Ó€ÔO×Ó)£üvŸã:dê”ZGÖ ›&wÙQrÒŠ·áwá³x žûÜçÆ·¿ýí˜N§ñŠW¼â¼k_þò—Ç¿øÅr¨å

wyîsŸÏ~ö³ãÁ| ZR—KQjrB‹·›´WÌ&{n¢¶—páçðYDD¿ßù|“ɤ²xϹÐLÌÈÞ*È ‹ªRx#™¤˜Ð ižÀ˜lÊ)ð>ß‚ô“žkï?2t:—#*nkÄÒ3è§}#¼xÈ…ús¯A,“ß3Éó™C^D{ìYD§xï‹Eñz2áÒêij10‘óN{¹™ü½påt€ÚááaYH !3Àâý|ÙcïÏM ˆÖîííUÖ?¡³‡Ûà?b™²Eß°º½>çÁ)&¼Ómçý­V+&“IÙœÁžeÛ¬Û `ÄVT³=:MšŽªÐ.{ÍÙDÂÄÙ‹ïôÚÕjµŠCÂë¶L²L€!D¼Óëyéq@žu7üÍÿ“É$Ξ=«««ñ³?û³ñÈ#TRµ­c¬ó˜Åo1üFŽ€òLÚÊ÷8Þ…Í0S8{b±XÂÌ3ì8rÄ9¨9oЩ¡È'ˆÉ:26¹ôxâ´4¯…2ègîÀnx.ãE£Ñ¨²®-“pÆ&R°¸û¤ï`Ø.¤ÍÑQßK¿agrz‘Á!¸åbÖå¥/}éy Îçóy|õ«_ˆ£t*ÿÞÞÞ>ïÛÛÛ±X,âñÇç<ç9ÅÀ|ï²µµUžU—g~© È -z&䃉@b` ¡h·Û±¹¹ãñ¸€*&ÃV«N'æóyìììTÂæèt:1N 4ˆØÛÛ‹ÉdR¼ZQ"#£Ñ¨lãk/¿O¬%Eo&íŒÙÓÊagö.Ääô*€˜S×ìɳ·Ý©\9j sæ‰Ö%|E0ÐÁÓnäŠ|ì©¶×>Gk &Ž ?ìÅ uuuµ„Ö9>¢z @1b9I|N.žÏçÑëõb4•çº=ÞåÇöI.ýh4ª€Û–½Á蔼yëÎ6¹<ûY€OlÅéS¼Ÿg›¤™øÖ áoî‡Äxí} æ+¢•òDøàà šÍf±Qô„α?HZ&]èÇ Ÿ÷±ð›µ^otIÅ&hËõÞ–;GQXcf›0Ù3ØFñoÿöo±X,âÛßþvlooÇÊÊJ ‡ÃøÞ÷¾Wtíz]!Wô†Ží@pd΄Ž~é±û±íxm…#"¼›B§vXx]}‡ïѯ×ýq]»Ý®8‚žÈ‰ƒ|é'¼»ó=Ž\R jÖq·Û-2s½M°ÜvÆ#"¾‡ˆ#zô=îët:RëqûtŸEwèχºmÏärÏ=÷œ—æ´»»{ìµï|ç;ã·û·ã]ïzW¼ÿýïÙlwÜqGüçþgDTÉs]ê’KM@Nhét:epöD¨ñ€±œ¨˜ÉÓm6›ÑétÊ.L‡‡‡e·€“CáûûûeqfÄÒ£5ËDAD€IàÒh4JÔ b™æ&t&NÀ-í§}{í! çÍf3&“Iñ$®x¾Ó/˜Ìœæô >câ3iñõžü]ïV«Udég5›ÍVê@FNK3˜¶=Pœ"“sð!{&Dö¨›4as^¨î…¨ä`C‚]8•Û û¡­Ôk4Uôcð}8¿ÝkتӋpI a瀿£È›½åØSDu¦~¿_<©Šl§»··W€6!k&¥xp‘-‘ÚÆslóÈ€zâgq.²ŠˆJ{ÉB–< ®­­•ÝólScëÚr„p #Œ9Z™£SÈŠ¤Ùlÿó?ÿSƃ^ëÇ)]gy6z„L­€ð:¥‡±È'ï5Á],åݶKtÊøÓh4bww·BR‰D·8 8l8ÑÝë\ƒA©;vë¶ôz½JZ,`ÿ¸§A(ý‡Áp8Œ^¯Óé4N:Uê4™LÊ8bG}ÏD‘>(s„Ó³h}Òsi}Þ¸c>Ÿ—ñÕ¤‚Ƴ_ƒA\êr!¢1o~ó›ãÍo~så³ûï¿?nºé¦ó®=}út<úè£qçwÆG?úшˆxÕ«^ï~÷»ãÿøãÊ+¯Œˆ(ëçØÜÃåìÙ³±²²[[[åÚ½½½˜N§ÑjµÎ»öºë®ûÿj_]ž>¥¦§'´¬­­E¿ß/ÃÆÆF4^èí~ÆææflooWÖ0©³h‰˜õ€„~¿qêÔ©Ç1  µg}4Å`0¨_"˜2áz„âÇãqI£^€#&X@4»p9ZÀ„ƒ—ræ &d“yÂÈ ÀÅDè´¶€äýÞÁgNá{çK“—>Nc89™X°óXÄ2=`c íkrðJ2A@*!¶¶Zv4Ä$ €.!@iX¢w/ E~lž½ÕhN·"âÆ»ŠŽ‘ÀÕÁ3jÙA¬ÑU¯×«,”v*àjww7ÚívìîîV<²\7™LJJ ÷ùÔôèv»¥nèz:VR­h;$ =B uxƒ‡ÃaiýÉä—k!@DWƒA¹È“wiB'¨çHã ²óbsd·¶vt–žyÀi³ÙŒápX€+ãÏd2)ÛQ£kdh‹þ±Uô °¶Þ‘ ´‹ïÖ××£×ëG˜#ýÛdÏQôA_¡Þô=ê̘3N+QAt°»»[ˆÐt:N§SlÅdûÅî/kã"–[nꩳSÃhW³Ù,óiq;;;•ÈÏc\ΑÕ8Äã¨SÞ<¹ [×2¶BÀqØ!ïÁ`PHÒx<.r:‰å=ïyOœ9s&xàøîw¿ÿøÿgÏž^¯¯|å+#"â…/|a´Ûíøæ7¿yÞý÷ß\sÍ5eÎ`H¾öᇎ3gÎÄË^ö²§¸Eu¹X¥Ž€œÐ²²²»»»edh6›Å#8# bÐjµ¢ßï—t¨üàÑï÷Kž:цÁ`ëëG'ž÷ûý‡1ãñÇÍÍÍh·Û±³³S@ˆsÛ€îˆ%ˆ:{öl™Ì öñª9&"J´f0T FTw™qÚŠ½v¾™ó¢ñ¤9µÅ`ØÞL‡ÿæ£Ñ¨ìôiØ3› @ŠB]J|%µ†œZÖ,‹ ¥ÎÔ“û|f‹×œq±÷¹Qð¢ò Öd®ÐSØE¢R& NU‱É'žeÀ`:º‰Xz£‘PCi»#.Ž6X½^¯’ÈlÈØÑvXjµZåýý~¿x°éƒèË‘J"k†Ãa… æœw÷<é9ˆÈ#d…tL0Ï2÷B~@66 œL&¥Ÿ9†nm£Ð~¿_ È>í§îxˆ2€]ó.Ò8i‡û›£ ؑɅÓ½¦ú9ýÎQìƒÆÎÎNñ´7›ÍØØØˆñx\ÃÐý Ûèõz•]¹Ü6G,§xÒÚívE®¼§ÕjUÒí@°ÝƒbCÈ…g1®SgÈ r“Íœ’êÈ¡=û®ß³IÈp8,dÙq¯ÉÏ¡Ýèq:VRº<>á<À¦°ó§Û.XOÅsTY__—¾ô¥ñýï?>õ©OÅÛÞö¶²Ælmm-Þô¦7Åg>ó™ø“?ù“’®û½ï}/¾üå/Ç»Þõ®ò¬›nº)Z­VÜ}÷Ýñ ¿ð åó»ï¾;VVVâ-oyË…n^].Q© È -F#¶··c¿ìòPtÊ„ÓYúý~œ:uª¤+vPÀ³6b6›E§Ó)»cX®®®Æóž÷¼Ç…Hà!ŸN§1+‹‹í•ŒˆŠ·Š¶ê B!%ËI*¯qñB7¼ÇLl€kÞ µ§ Yà $Íù>,dxabÇÃKz™Á0Ï:88(Þtƒ>{YŒ Úž€Èza"uÔÃ9ßLºN)sú¿n„lyõ¶W—÷ðIûa]ïwÄcÐL½x>uuÎ=íÜ G¼íŽdà5wÄÆ)@žðÑ#mît:•ÝÞ°)G< 2 d‰2­\– <EoN"¢Óív+í…ðR§ù@fÐ…ÓÝL\œjã\{žËuÔ…Ô4€ª ºŸá~Fý -È O5õ…`å´AäEºBF^£ã¯£Y¬W¡Œ^'„,ÑUŽ*Cœ©6ÁÚ §ÈÒ&oèÀú9ˆ˜ÇäÈgô¡N+bŒÁ. j¤’ÑêíñÉ)†K<öØÁ;¸âïw[‡ô §i2¦Ð‘Ád2©DvxDÈdˆÕb±(»4bËlØc©ŒŒ8‹<^Ÿ”òàƒÆ=÷Ü×]w]´Ûí¸ÿþûã#ùH¼øÅ/Ž?ú£?ª\{ÇwÄu×]o|ãã}ï{_L&“¸ýöÛãŠ+®¨­­­¸í¶Ûâø@looÇÞð†øú׿wÜqG¼ímo‹k¯½öb7³.OQ© È -Óé4Ξ=[&¼O‡§NŠˆe(ûÔ©SñØcUSãQ7ˆ&] /%9ìÿû¿ÿ›››Ñl6‹“4¢ÕÕÕ²À©6Lâ€@Àááòtb§DxdƒgÛ#æµ€Œœ{ 0¦ýòŽ ÄŽêDDÐ1Iâa4i‰X‚0{^#¢€v@ªS‘-@~Ùˆï{ßûÎÛÅêÅ/~qüýßÿ}¼÷½ï·¾õ­±¶¶¯{Ýëâ®»î*©à”÷¿ÿýÑï÷ããÿxÜu×]ñ¼ç=/~ÿ÷?þàþà‚·­.—®Ôä„–ìí@M§ÓŠ—4bégñÝx<ŽÝÝÝØÜÜŒ³gÏ–tçÛ29OÀÓï÷K¾/'x“vÀ„èö(ã}ÛÚÚŠv»?þx%ÅyÚ|fÐÀC–=¤ÞöpS/›œÆgòòPO¤ŽØ{è­wý=@Ö)LàÜ;NË‚PÀ“*@€Â33¨Ë„ë8²ä G>¸¹™ Ø‹kpP„ˆuAw8¯›Aö&QÌ{$±EˆD F{Ð;r6A…Þ¨ ²=öØ úÌ}yÐFo5%‚eÝ8eÈë€U&ÉöÊÚ« )ÏQú§IŒ×1@‘èн󮜶±±Q€1ip€D“Ë҄ΑAôèÈ+@šöSW·1!b¹Y âÂ}€Wú¿ŽâzDZ<¦˜ŒÑÅŽòz$“öœÚÅ›O?sZ‚u\Çbk®5!±œ±ëžûX¿GÝ©+}¯ÓéTìЉ8e Û4`Ç– î!Ô¼×)N¯ôæ‹Åц%¶sR°F£Q—=69úH}£âÔ©Se= ßÃnL4°«n·N'†Ãaœ;w.NR¹æškâþážôõ?ÿó?_üâŸÔµï|ç;ãï|çÿkÕêò (õ"ô\˜ˆ""677ckk«äL3(Û;Aa"²§‰™´ Þ³Ù,†ÃaÙÖÉœgp­É2 21Qgžmðçu-" €¨ÓaxWDTÀ²Až2ïsN8žv§„y®ü|&lƒ7G4H3ðÄnðÀ"N¶ˆåú§ñÛ)ULÆ<“”#§5‘‚dà °gØÄÆuä}>ñ.RÌæ,Bu[ NÕÉ^elÊÊäÊ÷Fhpm]8Jb¹|9m2ƒ®;N% D;m£ŽXð\ïÌæÈ€Á²v”Æ©*öbú{“Mo@Aê‹wP‚ÑVl[7éw´É§ÊãÈp:¤=åGÉ\olã8ãž™‰ªmÆ©qؤ‹gºn&;Ø ëy¸žq›a­`ÌæšµµµJ”¢âuBÌ'õxAdζÅ{±±ìðàt%ÚÉ…äíõo¼ÛŽ N*§Óg}žJDÂätåïÿû•ÝëR—ºüøRZö÷÷Ëñµµµ²<ç[€ðFíîîF§Ó‰Gy¤²Ý.“ƒ39å¬Í ±h’:!À[ê<óˆ¨L`xÜñt²C $ÊÀ‰ßà;§c˜0ñSršàÓ%„ƒÉ™½þ#¢²Ø6?{£ûN{y‡"×E,A2rñ¤Ìzoj€bHá{Ž©ï³wÔ)H芺:ïÚ ݘ°ž{d [ ›ˆÚcŒlý.{þM`ðhCL5,¦>xþiò¥^ÎÁGgy]6ç…âèpŽY€(G™¸Þƒ4žƒ®12#ÅÑõ³ƒ€b"š££7Y¦^¿@=øŸ¾Œ|¼ã8â—#´–ýCÂ#â<·£Z´Á¤‰’‰r´çÜ‘c?ßDýäÔNHƒ‰úäo“jä…L¼¦ ùÚ&I°mÒWäY×~¾SÔLÎl£´y6›•®¬sJN9ãyü><<,[æb¿Œè [ÃfMôl‹ŒMüØN2Ñ&ÂmgvâH¶ïùÀ¶c{±þíÔ9ζéÍf³BŒˆ"ìÿÝOy.2ttÇi|<oo¯œQåñè58—²xŒ½Ð?u©Ë….59¡Å;]q²µ×70‘ÌçG‹ÏñðxÛ\¼«¬¿˜L&ÁÇ¢uæq€dD,sÕ;N%¥çÀùt^¢2<‹ÉÐ^KOy·WÚÆ „|-õލžaùrséíAæ^þvªDöèæÔ¾3ˆE?ölÏçóBf2ôõ LJM~œÞãt Ú| ‹e* ö ‰ÌrÊçõ.ä„óltb0jò0u”{æc ”AÓý¸àÈÅÄÎéŒ\kÒl}:Õ1Gq2P‡´š4äñ\/n÷:“AÞé ,Û«eÍwn³?ãÞmÀí_mÛ8 øM¢ìé7©0¡w ¥åbd"ì§u€ý{3Š,·œ:šû©ûm¥ôCÒ^Yö¸av|Øñà ÝGéW;ë-;\÷Ûrv„†>‚­ÕÎ}Ä}ÛÑèN§W^yeôûýr '˜sN“4©±þiKÖu«ÕŠííí’2I{›žÈiU—ºÔåÇ—z È -¾´¿¿_ 3“F ±gq±8Z7ËDPô)ÄL˜€¶Àر@›-_!CaLL§Ð¨ðºC¢x&g^ŸÀs;ñÜ';ÅÈÞЈ%¡A^´‹bÀîоÁºÁ$“šS ()®ƒS™ py/yÌ&BÙSï¶ +Gd ºL¤ æÐ›ïµ Ù{é‰<{ÐÝ^ËŠÈZžèý^^<ŸH¼×òön]> ‘{ó¢R“7lÜ@•÷ÙÎ DŽ2Q¢ „ßäêc¯ÎÅÇF©[öØS·Û Ô} ÝY~–Ó¸ò9&B¾ÇrC/&Îÿ¢~æû:Néó´‹g[6N§8L â½ ²I‡ßS¹žô{Ï-7¯5Êžcœ.&ØŠu† ˜¬PWG®œ )±,¹>×1Éd=ë“ö!›Ùlyz8:$ Õò²c:¢Ã½8p˜CøÎŽ¡ã@««G[9³‹¢ÿ3YÂyåt:žÍöáûûûÑív+¤7G¶"¢l1Œ ï°÷tˆ ‹Ž§÷¸(‘=­YÏèÇ2cû¤aèÄ Ù‘±ÙlVRþ ò œÔM›Ï©³í…ßôeJèv°þýP¯Eå=¤NÚ–#-ööc¿çhmgyù<Ï$#Û*×°®ù: … fdžSëüvÊ»‘òøÅ˜dýX¶Žàz<˜Bów¼Ï ëÕv>ŸG»Ý.ã†#)ŽØ˜Öih·Û¥ý8–ÜG¡}n º€:Åxéó<šÍf´Z­xþóŸ_È=§LÀˆ²X&Žnw»ÝÒnlÝãïÁÁA ƒ’6g¢ÎÚl&;êR—ºüèRZ| l^ÈÍı\oÐl6£×ë•Ã$,ø³G¯Ãðy!>©{4Åp8,Ÿ{ÇO¢kkkåªn·ãñ¸œbï!QŸÍÄèTƒ-ê²±±Qñ˜1‰fÄóœßŽ’a L"ª`‡\i€ĪÙl–èRÄò {«]ö4œñX¯¯¯W6\™`5›ÍJî´É“A4ïËßU ½€ÚMZ‡ºË¹ÚV«UñD|óûik)¡Ø“G}Ñ)‘뎴4lÐ^o€D™x¼}'Å`ÝdÄžWGÕ•&¨<Ï×ОœjäóXIÊ>lÛžwëÂ1ë‚q‚÷Ó‡xm‡~~xx“ɤb¯ÇEè‹ÓŒØÊÛ);89,O4TìÂdƒúÓ÷Ðsûm»Œ~¤›¤ýæG´Á$Ø}Y1Îì‰ñ=`œþ€=ð>ÆL"~ô%Œ[&®Oî¯D™ìøð{ÝFo¶ “^SôN§Sêèt(ÚΜÓív㡇ŠÍÍÍ2ærŸ s•Óé<& cÒ‡½õ<ãéh4ŠÑhT¢WØ6äÇdøR—쀻?u©Ë….u Ö - ÀÛÛÛ±»»[@ %béÑœÏçqêÔ©2û`¦ƒƒƒB,¼[­V<äåyÏ{^ ‡ÃòÓð.AŠØ“É$N:U+€êÅ!‰üxG$€–'R$ì â¼yOhxú Þ¼1$Œ4ä¼X,Êdç°X†ÌnîõÊäìhƒ'~€)Q-ƒ§‘¦áÝ»ò}ü×iH&Kaƒ0ŒF£Š¬? dd/lDu›X·ÙéBrËÔQ¢ù|^¶°%=‚ˆ[»Ý.mrÄ,"ŠÎùŒóe¼~9zý€¢„>ËèÛF|G?h;mD'ÈÛd"G r ä£Ñh”5\)§!gtAh“›=Ìü½··Wdé1rÔétÊv¥ô— ÍôE·ÁúòîzØ/‘Æ-@/)™è’k‘6N]±1Î1ò¸‘wKò"go)K±ÞÞ¤ûdÂʘèºó9º±®°%Ûêt:-k°UÚÄx…3h8V" °ãÚ.øÌgÉpVFŽöò,êeòNel†HF£J°“ {¥ïðÝw¿ûÝbÛDùkp$øl:“mîÃdòny{Î!Jc}36Õ¥.uyò¥& '´ŒÇãÒœ[›Ó[˜ÉæüÉdÝn·4&,¼v³ÙÑîU4N^7ðÔ 7+++1 Ê$Ðh4b{{;.»ì²âI¥þ^h±ÜñÆ`/bé  .i«ÓT|@"ïŒ,Z­ÖyþA8 0©@‚åôOÈ®? Å)E¤®Ý BÁä‹,¨„1byX`Ähä4tËÆÑ§:M&“’Îeðê5x b4°Lû ~â”»Ó‘#õ3ãÙVGMOè1i)¾‡ç;¥Ä€ )ÃNñt³54€Ù²§ï ÚçtÀ¨K;B‡~h·7(Àn]g§¹^Ol2†}p½;õ%B‰nL ¼&Ðô/ú‚Ï_ ’5c2™@rÐ õ´ÜÐ;Ñ Òg°+dhÒ˜*¬ê¾žI¦SSžƒ‚b{\[[+ ÐŽÎXƒ=ÒèÌàzcc£´qÎéAÈÏ<ÖQЩefÓÇí|`GCtDÀƱgôŒÞ‘Q!“&äèÍ2ƒA%“ÝÅp‚t:J» !ò±¹¹YêÆ˜àÈ ïð¸ËøÇøÁÿ—ºÔÑŠºØëõ*)u8l÷¶YGfèP0c§.¢o¹ ÒŽñx\dÃø•Ãõh ¹Ùl–q[‡%ºÁ’eNý¸Ï©8ÔÁúfÌÁnœÂ†½³nÊÍÙlv^ty ›ÃÃÃè÷ûÅN777+ÄÐŒž¹ŽßÙ„Ni'ýÀ<ÿ&]Ìþ&rÈ‹õ(´rÎú$ú) ô€^MHˆbñ\DzGx¨›·ƒGkkk% ‚®÷öö*cGDTÆÈÑtÆÔÅbQæ!È'©Àóù¼’Zœ‰„úR;UêR—§{© È -€tç$b Œðöhøá@‹=¦ù3q1!z‰ó«ñ¢cäN³$ ù=ÖD.M°ÙÓÍoßoO5ív ÞMƒ~äà MþxXö¬¢S{}]Oôë®+¾û0À‚4à=¦Ž>"öär ="Š]cë¾6÷“¼hœ~ãT€$í6€õ{o»Ý.Q1{·¡qˆ6#?8ïÁÛ‹­³×Ú×6›Í %BAŠ“Áµ‹Á°#Ø-m³>Lâh¿é3޲PvP Ú»o½ð>Ú둉5ïGÒ& Ž¦r?){/±IúSšü\žçˆuq_Loll”íŠIuµƒÃOÛ¬û>c¥#ž™Ûñ„ÝRpN8ªA Üúúze-‘£V<Ç¿Óc6J.‘| È™ïˆìÛñåh8}Ééyv0Õ¥.uyr¥& '¸P"Ο4#ŽÀS³ÙŒsçΕ ™Ô-òË#Ž&CÒˆ -Žxí Æ–'"Ò{¼À@ƒGË{Îܪ§>ylGÄyqîqº€Aõ‰¨®Ñpn;×:7.{G­e{‘+“í¬‘rdéh–A©É ƒÿÑ‘ëoѶˆ(irN (¹Üg¡#E¬á;Ú‹ ¼ÓÉ‹S¹"– ]Ú“ 2ÑœâÍöBTÞK½ì6·÷Üùö¤~ñà4SLœ¼pÜ`Õ¹ð|äšôÑ€=ø™œšÐ¡×F£;;;•–±óšëÜ?“$Ÿ™aðfyà¶ÓÀk‚¨CN­Âq∶àT5äe]‡û£m×ï¤`뤙![;# 1¬E ßÓŸL °IH\Är“Û¶E!™(ò.H¤Ç€‰ÿãØq:QVÒ &NËã3÷Kžçô0Þϵ^SâÈf&»³ÙÑF!NMcÎÀI™" HÛò8F»¥ÌÙáļvxx´½1ºæÚl—¢Ôº<“JM@Np`°ó@DT¼x²ñtÌH¿ŠˆJ®<Þa¼j„Æ#ª»C1Xr/û¸\²ˆÒ;ÎNÙ‘Ë$‡÷âÍòZ&§Á`PÀLÞ2Õ^v&:@’£#öœ9mÌõX‚:>sêˆ'Dƒ'ÚM{Ü à¢ÎÈ„405¢S˜ì-ç€Úé­U#ªÛL>Ñ)Ïä>Gh ÒíåHò‰ˆJ;ò=LˆÈÌ@ÃyûØmBGA{}‘«#ŽbAÐrtgù™0ùzlÃà™ï‰ `W´ ]šèÛvLN3BGÖŸÛÉs²¬öB¿rd*·½SoÖu™ÐûÚc"K] F‘£OÔ3Gxσ”#g@©Ç Û¿ÝÏ!o^ƒgƒYúûsÆ>¸‡m2îº/¹ß!7ì;ôN†&Žè:]‰1—(B›ÝfÛö„n!1N C¶Úœ#ª‡ezÌ#*Býs$ݰ;ã·£ÙÈ:aO^ˆŽ\[­V‰ÞO&“r‰#Žvà¸î'ôñºÔ¥.O¾Ôä„0“ ÊYÈh¯SO‚ {c Ô t v½£ küžàýƒ;§T°è›ÉÎ!ýˆåAL¬¼ƒ<ö\?Àò¢äHˆ°Aƒ'Ûyp[”yç*þG^xó»LØœú¨ˆ¨žfmÙð¿Ä2Gh`6»/Ø> £ÔÛ²t ‘ÓeLm?ü챉X¦û-Ëô7À²·5u¿£]î³¶<âØÛJg;pJK~6õv~=º0©tŠ¡#,^kXóbè ìèË&.€ÆœBcï³×/Xì¦Çû­_Þé»ï:¢ÃXD;ü·S]7G)œ~æÈvf#Sêk›wô‡45ägŸ EŽFF,I“Ç]Û…ëfbÁEßñ8ê±%"*¤/ßk[s”‹÷[·‡záLsÊŽ-Ž:3^x½²l6›Ñn·+»“yìôœùt)u¤.Ϥréc†u¹$¢` ÆÂjOÄÒÃC~/“Þ'=—ÙëE”À)üfrÆëë&§‚0É -äpÏçG;@1á”Èžèv»]@éc*&2€ˆ½å|do;rrî¸Á …ƒ ÞmÐhÀ¤±'^wáE—±èb2Á{ ( }Š5džƒMË‚:R7îu½¾ŸÉœ÷¨a_´Ý8 .T{ò-7þög&d t’Ó“ NÑ™£!~Ÿem2J ú ôü™7# ~™ ÚÛlð‘‰)Ày{Vä—mk²ÜOý FY+cû7u_¶Ý¬¬,O®ç]NË¢n^ Bê¡S v½‘„S™Ž[¨n;Í‹ ]7 öŒB<cH'4iðxè{ÐeLi«ÇRúì\ÈŽÞƒ~ÝŸ(NS<ެY–…ëê>ϵÞuŠûlÓ8 LÀé/M“X¢ìÈÊýšÍ<îíí핈!?,?n|Ìú„€`“ɤ8(&Lv’Pç§Cñ\u¡~êR—§¢Ô䄼«˜ÎXz'#¢¬·¸ãµc‰Xrg Ís¸yV¯×«„û™´Y\¾¿¿ãñ¸rx õ'LV<+{§r#"Šç‘úð ØòßÈ‹4ãyûûËÓ̹‰ÅóíY4A0€·—Ò^F_ÃsÜ6@š e™ IDATIY&=¾eƒ2ë×ò°\CN¯É$Ã`&G…y³œ žèÖ6k@ØžÏ畃ۨ—ßi"ŒL¯ö„:ªbbà¨i3´-o›Á=ØÈ$ƒ:GM,CÒMàx¾×yñ{N¡ÝÔÝDÎ×E,Óæ2)EGʶ%dO}28sßáZ§µYNîcù™ô«lC9ÂÁ3"–^oþæ»ìÕ·Žý lÂëË<öxÌ¡NF£¢ú˜mÓý=™¬b/€e§V9Mˆb§!è•:2Ž8Ê¡41aüå1—ϸÆómØ$ÚucG€LöìÐ2Q¢Í“®qæ^GJH¿´#Í6e›tú°m–èZ]êR—'Wê¬\ì5Œ¨z¯#ª‡89W8¯Y0ÊžÉÄáp¼]Þ¶6b¹=l£±<Å™úùà}{{{Ñï÷Ë–œL ö®²ý%€›:Ä›`˜d>×¹"€€Á­×'sÈ%ƒ"d“½çÛ<7×7O¤öÖ» d9ÕÈß[ß9’C[Ø€…ªh‘€)@˜Ó?xŸm鸈Žë›#XÅãtcmPfÀˆÝs-6™ûO¶-¾'’ÀýÊ~/öÎ3Ì@Õ^hŠ#f9 ÇŽƒ:G‘Ll­g÷ ¾÷ó\/¼ÈÞâÛí¶Ç»1Xdç.ìØžuÛ¥Im¦^>ôÏàs>_®qÔu Ø,¶cYÛžxŸ#¤èþ8O¿~®Ÿã>Báyȟ뜎Çu<‹úgû³c„ߨ¹7ãpJ™‰9öÍçî›Þá=»óNï*æ÷»ÝØMîCqžýšØyžA¯ëë˃Q­_O?Áöí¨ñ؈îx?ý3“üºÔ¥.?¾Ôä„<@ì˱Ø=A{¡¢½ÎNáÈ$§¯HŸW²Îf³²%¦A)Ž$xá¼íЋÃ-gËÈõµ¼œb;÷ßã¶ëˆjÚ÷8 E»ÐŸAæ3 ˀʑl{g[PÞkùQ'd†cÁõñayÇ7ŸyƒŒMd#–Ûñ:g³YåHlÀäËý?G'Kls&&xùŒêÉ{©³õB}r$Áùü~Þbq”Ž À´M±¦#G¹Ÿ>Š=:êh›¶ç»¦Ÿ¹Ÿ[D=î W“®|¯ÇGì³Ñh”íné´t\¯QÂþ܇°k“9ÏDLI¨.X7 r„ÂQ!v)3ñ@¿´öÚN]Çf³YvØòú:Ö·äH\&ï?©å$´±.¿ÔZðÒy%Îã@ÃÖÙcH´„ï=éâb2™ÏçeG-`Æàƒ”€ápXñ":ÈÛqRÿãêËĸ¶¶V9ùÙa~/‚4!óHýÄY܇,˜œíÅôä»X,Ê)ó¦¯~îq‹ý3y¢Ž~‡É…ëaï#×FT70¨á}žàçóy™´ÇãqIC–' À ÞdÆ¿Ñg³Ù,mr4ÈàYØ–íõw$ËàÃQ&\žK4ĺvT Û4I0iåùÙ«ë‰m™6ón;È€½¸Ø,ÏÊd…ÃÿлÓé{&W<ÛËm›Î}ÃrsÔï¸h #ÜK·¬ ¸‹£³.Ø .bI ñÞ0Ãc’9ŸåõbÈŸÏè»&Àè‡ À×»ö™åñ&ŸÆîQ;xŽ …eÂæN!2Ið³3é¶ü8WÈ‹é=®d†íµÛíÊBnìÌD>쀅ÿ?òXÃÿ<‹ñÒÆãqÑŸ×`˜te]¢ sÈÜQ&¢ÈßQÆGX/Uñø_—º<ÝKM@Nha e"vž;„ë)hˆ%šÁ'Ï`'2á´'&4§}q¯O,öº‘n·[€©K숵X,ÊvÁÈ©ù|^ö§žžìhsÞ!Pe opÆ"JOfö–" G”2аfžØ21ÈÉi´ËuqzœÓ|&pÙÛ—½¸N‰0CÄ L-'?ƒz™Ó& $uˆëMœ¢æ}Ld)Ž68*cï±'ovrJ:AßÄ&cô1än/o¶_‹,"¢;“F£Qˆm±§û2ô™@˜ˆÑ¼ëÜ|>/[gCø È iýd1¦`ïBˆLìùϤ°ÙlVRŽðHû0=ßït?_ïubn¯ÏÍA.Œ€^/èö-뉅鎸¿ú}¦P¶ŒmÎã´Ó>±QÑîgôÏì”È@›1{gg§Ò~¯“¡}vÖ0W´Ûí²ý-¶#7&ìüø995Ö냰!§¨ù3þG&ŽøBfÝǬg÷7>Ë„”ï‘óŽlŽŽ\ÊòTšÔÔå©(u Ö .¼Ô^·àP7ƒAÞ!žŃвG”Ó” œ ö½ E¤Äàp<G¯×«t{>#–‹#¢²¶À×SO“ã@º=Τep ¯Ïäðäu1)!½ ɳÇ/¡É‚‹#$ÚÏß9-Ì[¡²SöÓ‡=´ÅŸVä`=X§&\ÈËmƒøš<™( Ëgú¹Ç¥²˜8Ì(rÊñ,Û+O›½É²1°ÇËßhm{íè7öʽŽ*ðÃA~7×";ì2×qmm­œôíÙ«ÔÉžyƒXÚŽ‡ÜöŒŒqH@ /L\"¢²Ø/³S9m[Ø‹‰ÆÁÁAI©ô8cOµ*¶<þN'#}û3i¤?Ò?HݲóÛu_!zBÚ×´ÛíʵÈËv„|s íe½ c¹û€ÇWî%ZÃ5N§D`WVVÊ÷ŽvÑ}nzf1¼û¹Ï\b bl°þÑ#ã-c킨ú0LNgà ôJ[qtù9Ã]Gƒ‰`s½®Û&MÚy2©K]êòäK9¡…Öžj‡¾}ò8žKÀ5¯n·[À ž=žm¢BDïøÞÞ^t»ÝØÝÝ­L¨&L¸ BôìhÂäÆÄIýÏ;wž‡ÜùËxݘ9¥ÙÖˆeØÞi3xøˆtØûŒ×Õ^l <§x85´Óé5³ÙÑ"UÀ‘½qö~¹pzŽw¯!Ò䨀}ò\ŸÖ 80\ät:“Úâkºb@éô5êé´ßèvíõ¥XÖóùÑzêdù¨9MÂǾK§¥¹Îö†°M° rd ÛÄ®r¤(§‰Ð^«œ^„\,;À~§Ó‰ÑhTä Ðây8Lœ‰¸dýðì¼V‰¾ëŽ=v`¨Û~ &±€³ßmϸ£¿¨·¶aï F;Ñ!€ÔŽ—ˆ(§e#OúÞÚÚZÙYrÀ+öåuôGlR‡aC&8) ®—·]¦îŒ!^4 y ðìãz›ŒÚábÑŽÕÕÕ"ˆÁºÏ‰²ƒ~á1’3?<ÿ`ç´ ›@FlwÎ8ýìg?;{ì±rÞ„IJ ÎÇ¥`1¾4›Í2/ØYáñÓ*;2.u©# uy&•š€œÐ²ººZ<_&Ù‹e ÷â>&gD5—:bé)HìííÅ™3gŠG¬Ûí–5¤Y9*aиæ\‹ˆˆ‡±¹¹ËT Ò¶œR2Ÿ/O.xŒF£âõzÚF;™€™-'{Ì!bLÀJ€%¯pÈ 3"Š^¸y²÷"MHšSÛøÛÈ@,uà{9·°cÁPàeÏi"€§m¨RÇèŽt <ž@¼"¢ØXÄQ¤m4•z<#ªéV–9uôuìÞÄó‘:ƒq/v¨ÇEg€“5{ȱUÚm¯x&=È–z®¯¯WRÆÐ6ÑÇõõõ •´“rÈÞ|Úê­e766J›M¼ía†04‡Å>ÚýØ26³‘±åÆxäúØîyVÞÕi¿¤r:z€3!M§7u:˜N§e,"•t2™DDD¿ß/möv®ú;ÄŸ)K]7ëÓ䎾‚—ßvÐív ˜ÇƱ“|Úg#ȇí2–/Gi®èºßïWR¼3¡×b‹Ž€@´<^1þôûýÒ§ˆ ñ7sL·Û-ï¾êª«âÑG-uF¦vÞ0öa7QìñÄÒj‰`:Ý ¹@&ëR—º<ùR§`ÐâÞ*!yþf³[[[P᥌Xz™ˆüÃànO¤A ÌÓL†L ÆÑî+Î+ÞÝÝ-t¿ßétý~¿ÉÝÝÝò|îuÔh4*ÕéLNc Ý OÔl6+)MÎK ÄL&“’ž ø¨/“ºd"—ãNWf’^[[‹Ê¢Rƒhˆ’½šö¢:ÚQ“GCˆ¸`;Qv"ë÷ûEž€WHÅ;/ÒHÈžlßçT ÀMÄÒ+‹x!-z {÷lÀäχ“Q7ä³··WÙÙ ðá uf³¾w;"¢€Dž @Âî;N!NNý’&c; }›Ãî÷÷÷Ëba§–Ð>®1Á¤¿c_&Žè(GO²óÁ‹‚×××ãÔ©SÑív˵<Ë}Ƥ0O?><<¬D<Ýw­Ëˆ¥‡~míhƒv»]ˆ,dˆhÏþà~RÞ/ˆè8Õ®×ëxö;u*§3íïï—õý~¿ØPŽDbGn;¶æñ»€›è4›ÍÊBo;M¼nbeåh‘üx<.º¤3f`Ûý~?F±9G7±oˆ&l€~Ò¦ìl€(lllÄ`0ˆù|Ýn·ôë~¿_ÖþôOÿt ‡Ãø¯ÿú¯Ò§ŸeBG¾væŒÇãbŸNÇB&DF™H9D¶ž/.U±såBÿÔ¥.ºÔZH°7/- ¸™4ÇãqìïïÇææf)€Tȵ=ª€[§’p-‰”,&4Öu8ÒÁ¤É™N§â eGƒG¼¤Ž6Ø» ˆ°Gl2™¯-uÀëøµÜ©,€Çˆ%ÈXYY‰n·[&?À ^5{éì%:)rn»½ÔxŒH¿I'0 GÈÁ€q4U¼öö$ò¼ˆ¥÷Ù“çÜw<¸Ž ÙËy ý‹Å¢Ë˜L&ÅÓ ¡Ax­+§p8­.§ó`Ãè¢ëú£Sêe¹› bŸÞîv:ý+“§aˆ{½^!SØ‹¾#E€) À”:¬®®VvZs{°W¥û òÝÙÙ©¤FDÁxÐ]œ^ÁbM ú¦½^B=С#\€Zôã¨}&DÓé´Œqô[ ú$2¸ãö #G)ÜØØˆÑhT‰þ 'tîM9ÙȦ×ë½»=Ø/Î l<$h€˜û!fë(y¢ØvBØÓn· áÄ–ÿ¼ƒ÷8z‹ž½îˆ÷ñ9Š{‰öt: e ö:(ÒÜ&“I´ÛíxüñǢÑív£ÕjÅööv|÷»ß-¶È3°5ú™w~DÖ>–±Äc†‰*óP ÒëR—ÿ»RZ~N§ œ€XçÖœ"Žˆˆóv=03Iô±÷ºÓ©X7Òh4b0Ä`0¨D1ƒA ‡ÃˆXnÍJj ©SLŽLdLþË(‚Á? OÑç ¶Ùð7€uÒØ˜œux™ñ~<â¡‹X¦$०î>Å"`Pa€åˆ €ÕgAøDrKtîh…åÎ3f³Y Ô#ï µ±±Ãá°¤ª0³ÙÀ ûð:•ÃsoRƒý˜Ð½"Õ’v€t´„gð¿×ËŠ£…Ø8vá¨TDTˆŽÓ¿r_C—ë…w9•{Ï‹Š³wÛˆóÀ%õCf&*ôì ÛC‡´×€‘çÚƒN}³cà—vó#"®;€”mbMôsJö“ 6 Y0Q#…o=÷ºÿ[üî÷ûeœbœä"lÛ¦}*€/õõ:ëѶˆ(ÎäÏuŽ”Z—üŸ#Nô뼎 ˆSËíq0`Žüæó:°Æ"/Œ/G"i äéÓh4ªØ;÷M§Ó2'L&“¸êª«âŠ+®(ëB~øáb/N3sÄçɹsçŠN‘—û¨#î“vÌ\êR¡º’H§–‘(§³ sìÌéÔŵ¼SÓÈü,írÛðh;‡ú: ï‚(˜¬íõeÁ­û d G½­OHŽ×y*iƒõkà‰6 ¥ïš4¸ýnßÛ{ï” “)ˆ(„Žg:}Ï$ÁžnÛžê€í#3žå¨rgmŸy;d§Èìíí•TPÆ'Gžˆ.´ÛíRÿˆåz{Ç-+tÚ‚#‡ `¾ÝnÇp8¬pG‘£6^{9‰ˆr0§Çeêb{¥¯BHѳ—Ÿ÷SÒÙ(ŒMÝn·Œ…ضj’™È6åÛëëë%¢ñ˜ÛãÔOú ¤²q´n‰ÿ#¸ŸgÒ_§ÓilnnÆh4Šüàqpp;;;•üǽ3×ÎÎNéOl<€üøœ´1ì¹Á©K]êòäJM@Np±‡Á•‰Å$Â$h¯;÷6›Í²à7{„œ6Ad€I±XÄ©S§*XÄQTï ÑívË»§Óie!àx<.“#ía‚ã­9¿Sœ2À¶gœ‰?b¹ÐÞ Yeo¤É Ï0HÚcmâçgÐ6ˆ“ SœG1È4Øer'½Ýbè&§|H1¨ˆˆÊ3xŽ7,€ìY&&ýtNɉˆ 8GÿÈ~ee¥,¶íI·Ìq¼‡ÜË/o•Ì{Åq4 ¢eÐhä^×›·ÛíÇ ë¨"²°Ûûœu?›ÍŠÇ0lògÂ,èD´xŽSù¼Sž#qöþc«Ã&–%ŸÓG;ˆ:bW9 Äp8¬uÆ8ƒsGŒ°g§sÙ¹ÐívË.€DþHÉ4æЫ¦³ÉéUèÜéhü~¢hŽuc£0vP@¤Ð?ÄÑdÔã?Ù1ãqÐcžS˜°5ì»N§…pѧ WD=èƒDf¼–ùá9¥Ë„Û°ÃÂÞt@f̼o½‰¤Ó¸zp}©—×Q‘BŠý@ˆ ”±ƒ\§±š:z Éé¦;M‘:É»Änܱ+÷U¿õqÈÍcKîgôᲦ¢é¶ë–ÓûHk³,‹EYƒ~xžm›ñYGD9tÒN ÈdþžúYçÃá°B ù²‚<¼þd6›rL[ˆæX‡&îŽx!ÓºÔ¥.O¾\úmNH‡ñž÷¼'~é—~).¿üòh4qÇw{í7¾ñxýë_ý~?¶¶¶âæ›oŽï|ç;Ç^û±},®½öÚhµZñ‚¼ >øÁž†+ž8 À ˆVD,=ÒŽ‚0¨äù 4{|™´ùŽÅäìœÈ`²ewR®œàœ~"ž 1aBÀM[œ—Í÷ö¼óLächÄ2]È€Ðå”5çG,·ÑecRvŠŽ½²9ÅùùÜ> r¿'Zêb¯¿£ÜÇ5N¡ŽÔ¹dl:íÎ9ET<ÄöÈgo«ŸE„Æu§ÞØ6Q(lÄ^]×Ϻ6噬‹Ê€™°g’jbîÅË´Ó:qz r·œ:Õ°ÜY[D=Mx –òbxGxgÞ¹,?ÇíÌ„4/F¶- !õ'Û‰ »ûýòþLŠÑôzˆI¶ëŒ^ý limm­lûÍ},ü¸û™Øã©#¥Ø¢×zAH°[÷G“Ôãì‡6xCfÞyÊöî(jn«=ý&tÞP„]¼h·7œà¹ÈÚ¶æ{íÌY,e‹ÇddÆ÷ãñø¼”NÚn‡ýúñ ÞeG‘Xê϶â­V«¤÷z®á:?ãéPÝSñóDå«_ýjÜxã±µµÍf3^ð‚ÄûÞ÷¾óÒÑ.®©Ë3«Ôä"•Ç{,þò/ÿ2âW~åW"âxÉC=×_}Ƨ?ýéøä'?ßúÖ·âÕ¯~u<öØc•k?ô¡Å­·Þo}ë[ã _øBÜrË-ñá8ÞñŽwüØú0¡—§l¢Á„Èf/‘·X@ȽÎUgò!½©ÝnW¶Äõ¾îxÔ‰úA,˜ ðj椀TêFj“¡xêëœgƒºìí#Âbàdo-u·7Ô^_ê—É@DÕÎ$m’ˆF~|GI×’Q]¬iBe{µgÖQ\{@Wn³=ë^Oá:°²n Ï¢íØïBÞ–¯e h$…uMŽTѰAäh;„ÛÛÝó.“[ȳI³£L Öƒû-ÿgÒ è"= {¢GSìÕöZ"!¾ÃÖ¼;@•÷»ÿ„Úu‰í¢oÛ1ý€ï ˆŽ28ÅÊ$žï\?;øY[[+cOw¤ÀÞ~€´£D—¶mZÇîïŽZԻѷžH^Ô=“X; 2HGo¤C™!WÒ@qÄpŸ×Ø`&õñØYù›±Ad!r›³3‹{2²Ã€1Ï2lÂ2È©V´ÕëR–‹M@î¿ÿþ¸á†âܹsq÷ÝwÇ—¾ô¥øßùøèG?¿ök¿V®»X¸¦.ϬR§`]¤rõÕWÇã?gΜ‰O|âÇ^wûí·G»ÝŽ{ï½7z½^DD¼ò•¯Œk®¹&îºë®øÈG>RžqçwÆÛßþö¸óÎ;#"â5¯yMÄm·Ý·Þzk¼ä%/yÂú0È;…'âüuÐå â^¿‘=‡Õu>°ÍžhÞéÉÞ#Ï%ÝcÙ{ž'rƒ8žG½}½ó³ ‚©+²`!=Ïfe‚szKÄÐÒG²—ÇàÚ xee¥B º"¢Bà˜äÀ~¶ “ðqàì‰ôãô{ü,öè[ÖÔçzw {< ¬,_Ȇ#Öçb±($Ó²>Ä».¼‡Óü½ §m eÝšèð ô áËuð½ô¬ ¾²}#/tb™ð·×ï`óüMz“ë˜n· õ1 Ë¤{ Ô]ÚÎÐ “{Ü>dÆ; vBþÇ@ݜɕ–Ã<ßÄåg~æg¢ÑhÄÃ?gΜ9¯¯¢+G”ÈÅ.ý×ûûûñ™Ï|&®¼òʈˆxÕ«^?üáãcûXìììÄ©S§.®©Ë3«ÔKPžÈ›pxx÷Þ{oÜ|óÍ¥“Fîzà 7Äg?ûÙòÙç?ÿùØÛÛ‹Ó§OWžqúôéX,qÏ=÷üØzä(uˆˆÊ$G±×Ý@È ’P¼S˜œHØK‰l˜˜œjÅîY€d‡ð™|©?“®=yüسé::=*¢š·mÏ%ßñ9`&Gœº–ßÏçöÂCÊ ªkQM÷a"6 0ðÈžqäipÍ©OÜÃsÑkÖu&¾Ÿ682€ìV<Û`§¢¼Ý`‚vÐFï–fàïô+¯‡±Œ2Á48F6îÔÍ`•­œ]È)ˆ¶sG¿ü÷:"AÛ‰L!À’§AlŽj"+“pÒí­GŸÙ¡@î<²4©Éý—k¼˜Ú6çýÞqÈò3£Íî[–…g{ÅLÚi³uCqú“wïrdekk+^ÿú×ÇïýÞïUdBߥØÖˆ>¹~ÒZ& IDATÏؖlj<þØI»í…G†Ç9\°%ˆ.Ñú¶ûR£Ñ(¤ÄDÌýÒã—ÇÄLÄìA?N¶v1/ðØ.)ý~¿lí©Ð-޵n·Ýn·²ñmpt—EìN×2™988¨lL»rÙ¥.ÿ¯Ñ'ós\Áæûý~ås¨„^L\S—gN© ÈÓ¨|ûÛߎét¯xÅ+Îûîå/yüÇüG#<ð@ùÜå¹Ï}n<ûÙÏŽ|ðI½3ƒ8®ž ™0æóy9¯ÃlÏ“J»Ý.Ïøç…Ì<‹BPáÉÞÛÛ+ á‰bÀ‰º9%#bé©'eÀàÔmeRÍÞ_&{ˆÞD¼µÜï»S\xŹßèYó,Û– ¤Ó%AÊ{“O_C›2H¤ 3dH=, žNü9uËу;¾£nØ…£&kF£²f!×›säËzµîœªHý°¥|ÆCN‡1éá¾,cçòg/µ^×€ýÒft  ‡œ;Zá(õ²÷¯:΋ I­òZÆžÓëõâðð0^ýêWÇM7ÝT¼än;²1ÁÃV "èp}}½² vuš#÷˜tñ,§>b¿¶užåûx#(¼‡:[7üï(ÏöÆ ù–…íÌ$öyE¶3Hdi6›•³?LÀþæñÅrôÿ¼ ²ì1Õ»õY¾yÌ6±÷;NJù­ßú­¸üòËã–[n‰ïÿû1™Lâ¾ûî‹¿ø‹¿ˆßýÝß~¿IpM]ž¥NÁzÂùÛÛÛç}·½½‹Å"üñxÎsžgΜ‰f³YÈ€ËÖÖV%5à‰ “‰Á$é– ä ¶xAñ0 ‡Ãó"g³YŒÇãâyc÷ŸNlg°±ôL:º€Œ£N3pä€ÉÂiKLZxx Ì–óƒ=AZh?4÷2qgI¢ÍN¢Ž”8Õ‚çüiræýŽBðYŽö8òAÝÐÛƒ^ 4y®† ©ÉœeA{Mì½7H6HÏdÝ85ËS{Ò­w/ÎõÎV&AN-Ê ×Dýœâ×ív+‡xššpº¿ ·v»]RPˆØ¸Ýîs&È×€œêÄß&NîN=‚´Ó/}°åqÂш•••²0ò!ràˆŠå‰Þ¨?Ù‘”œÚÇs‘…£G&ƒ\oÁ¹<ß/‹¸âŠ+"⸎Çãbc\ÃÃ^›åÔ¡ù|^"&^¨kýSr$O=õd¬f,¥®ô[;xä‹hrŽb0^ÚAa›°N¿Ùj>Ÿ—”&GòÇ©Å\c[ð¼à¾½²²<ƼK]ž(ZñdË}÷Ý÷Ýw_å³Á`pìµW_}u|éK_Š7¾ñqÕUW•Ïo¹å–ø³?û³ˆ¸ø¸¦.ÏœRZ¦Ói9ÌËÞ¿ˆê$æÜq¼³Ù¬œNî]tØ™0X¨IÁ³Ê Ïäb¯ßQ§‰¾@Ô!" ±ñbØœÖA¡L&9µƒ:¸;¯Ÿ=ö2æ ߀Пøä­E©—»þ€7GºÝn‰ yr:‘u˜(àÁ†ˆj:^ž´i‹ßÛÓ ÀÌ“¿mÂÏ„,f;Ê$·ÕjUR# T !NÏ3y°Ñn¶zE><ÏiRÔ‰tC§†x#–§Ñ“b@ƒýÙ[ïT”ÅbQÎ{0q¤¡c§Þxû[“Q@%:>.ÊÀûsªíÈéKÈÓÅýÊ×°5‡ú RtÆoì*{œy.öä¾›Ÿçþ‡ÞòxÌ9Ü61NË!xÔ¾õ…/|!þîïþ®²^€÷ò “H ì©Ñ8:ågÒgçTT¯£³ÃÓvêÝGî|ØgS¬wôÊï<X¾ô{ÿ¿··WȾØ,@£Ñ(g:™ATÑãZú"¤?Úív‘•ÛŸ·ßµb† Béo¶wvi4ùÿI(7ÞxcÜxã•Ïzè¡øßøó®}ðÁã†nˆW¼âññ<žõ¬gÅ×¾öµøÃ?üÃ8wî\üÕ_ýÕŪv]ž¥& O£ò¬g=+""Ξ={ÞwgÏž••£d®% ©Õjwíu×]÷#ßÅVµ^pêÁ}mm-Úív%78b™*ÃÄ1™LÊ$Íý&&%‚Ny‰XMÞ€°b’ä´ ä @Bn&Ùcï …g\žb ñCÆ€ï`…αKÚ‹y®ï nŽÆqN€w‰2À3ÙAöxcíYçoƒ\ÚŠ~Háó$§¤°Þ(§“a |,Æãq‘×ÊÊ2UÐi!î&NÉéŽÆå¾Ä}ö0#[G/2ÁˆˆÒ—©+z$r¡=ýè™è‚×¹=8;¼«ž¯s¿u¤Ïk6ÜGÝ6H[S{ÜÀ¾ˆ ;uÇÞr;Pf³Y|⟈ÿþïÿŽJô…>ï~Ê=N¢Nìçvt`BÁý€môÛn·+ºA猎LЯÑï¡AÌúhe¬B÷Ô~è(¥ Âþþ~9øÔÑ ®·¾i+)*Ž.mŠXn‹‹Ží( O#W/°ö8‡lÛív±sN$§“JKä9ïÌÇûÝþ†h Wú²w Ë‘fRnz a^ÂVi+óó€¤Ó>äKDŠñÝýß}‡H)„‹¾qÒÊ¿ÿû¿ÇË^ö²ÊæG;\ñý‹^ô¢‹†kêòÌ*5y•µµµxÓ›ÞŸùÌgb8–Ï¿÷½ïÅ—¿üåøÕ_ýÕòÙM7Ý­V+î¾ûîÊ3î¾ûîXYY‰·¼å-?ö]xÞ¢xÄœŠáŘlI`²aò°÷…I‡ÂNL:“ɤœIç0@õïI ° °dž»Ýn…<ðð ¾&xº™$sN:ÅijŽÖà9‡erˆc íæÅˆ%ÙbbôóMh Úø{}}=677Ë„xõ.=€&oH¼ŸK@ã:¼ ­Vë<£Çétz0³žžLØN‰X¦y!+GZ° €íòõ§Ø8Z’mÉ:B7x2 " Êüœ¼¥ÛíV®q* „ ù-qÄ ‚M´=®vðnƒ~ú5ö‹ˆüA‘W>w{¡›Ô`£ØÄÐ ŒjÄwØ5ãH·Û-ºàämÆ Ú`BŽ}’ýNêà¶› :k¨'Æì Oìd2)ï½âŠ+âÍo~s\yå•Ñï÷Ký¸ßiQèØã‰×SaÓŽà@V ½Ýn}Y~ެ¬¬”µFvvÐO3AòØŽÜ!î‹ûûû•t]Æ\¯¯AÆìœEÛ=ŽcN;Äûv ñÓív£×ë•­×±úÔOýÔOUvBìõzrŒ¼©õ¡o{^aÛ]Ö–P·ñx;;;1Š-íîîÆt:-N>¿”ÅóÝ…þ9®\}õÕñÍo~ó¼4ë¯~õ«ñüç??VWW/®©Ë3«Ô)X±|îsŸ‹ÑhTt=øàƒñ7ó7ñË¿üËÑn·ãŽ;îˆë®».ÞøÆ7–ÓDo¿ýö¸âŠ+â]ïzWyÖÖÖVÜvÛmñ| ¶··ã oxC|ýë_;î¸#Þö¶·Åµ×^û#ë²··WR˜ 'ÛKh|mm-&“I¬¬¬D·Û-„Á‘ §ð Q§Ó‰XYY‰N§Sí챎X¦æx¡%õd‚eÂæ]9M`uuµ’§ 8!k?:ND,#%ƒÁ âa‹¨î¨´±±Q&dò–!o\kú^ˆÓ#œ:ÀäÌós*`˜É}<—”¡Fã(¯²h`0aäïˆ|ØûŒÞxïq9ÕÔq±X”3QHiƒôØó씌Ùl­V+z½^ìííÅp8Œýýý’ò`YLc—&Æè÷ÿ°wf1–åý~O÷é>{¯3žñØx¼`l ˜`d6 + !‹JP¸ˆðE@IP” „Âf !ß.rAD¤HD" ("‹² a°Æ6¶±={<ûôvÖÞÎù_Œž:ÏWÓþ‰Í÷)©ÕÝç|_}Uo½Uõû½K}/"ÙÕÞúl ;õÐwÆ‚ï –|~FúK±CúøÁë…¾0§ÜÌ)€0cmbƒnÒN‡²Ùº.’mrçDdt,¢+O®‹åü¦Ã­ÇfH¤rˆ]1QeܯÀ\î÷û…{œÆøCB1óùãÐ(Ö2@)ò`ü™çwÞyg|÷»ß‡~8]ïp½Ñh”÷{ía Ås\.—¸ Ý£/ȰR©¤k¸×Þ9æ/äyó,d255õz=úý~š›p¼(¾·ÜȈˆF£‘’¾í]6ÑϽÌÔ‹ÇïF¼8³³³ÉË‚!„>Ôjµ8|øp´Ûí¨T*Ñn· ¡_¬ÕÖˆúÍ›Î#"­;¬G¬{èÌÎÎNа‘§×ë]âØå}ï{_¼õ­oßøßˆ÷½ï}±´´÷ÜsO|üã—½ìeñ[¿õ[?7\3)¿X¥4Ú~ÃËT®»îº8~üxD=¥R)Ž;–b%ï»ï¾øÀ>ßþö·£\.Ç›Þô¦¸ûî»ãºë®»¤ÎÏ~ö³ñ¹Ï}.ž|òɸòÊ+ã]ïzW|øÃ¾$fœrß}÷Å«_ýê7L(ÇI:ÜÉ/«"| ‹›®uot¶BûÈ[6&¬G€9¿­‚Ì<ít,¾É}rÌ.àšþÐúY­Vc0D½^/XÍDz#6%DÂ\7[ÚW©T¢ÛíFÄ4Üm¡Ždž;äk©c¯fæ±°æDÉÃL±Bb|¯-ØlØ< ìp¸^¯—¬ºç±á%³å™Î!uBÆÜ‡>ÊíE¡ípä€<ÑÚ†ŒÐ7ê´w Ùîìì¤677S•ÇÜc Èáoæ×5d‰§¿È“qr¨’=EQÈw€ìØ€Œþ†®›D8ŸÅsÓ!^&rÌÆ)þ7à§ôÃÞ!úçœ)äï„qÆ”5j4E§ÓIVp* 8&–&­Œºpíµ×ƱcÇR»¬«Ì+tžyo úEýÎ_bè;Þ°ÍÍÍ$ˆ,mŸŸOÀyÖëõ¨V«Ñét’± ‡Ã¨×ëI6œ8Åšì<{òXÏè7qú›››±¼¼œôY°îÙ“ib177—< xØ{Ðmˆ\½^/¬£ëëë…5`qq1Í+¿¡Þùtžçß‹(æd ™5$+æ0:AhØÖÖV¬¬¬Ä½÷Þ·ÝvÛžûïsUØ×ÿæoþæ9é?üpüÁüÁž}ûÚ×¾ŸùÌgâÞ{ï~¿W^ye¼å-o‰O|âqàÀBŸ+\3)¿˜eB@öYa¡jµZqèСjìÆ¯×ë±¶¶ý~¿†µÌ‰ˆâ¦ Àfssì2¿qûÛJalR'›°c‰mM7‰Ë-‘<Ç!cã#)y‹ ‹7á¶–z3§ï¶J³áŠb „¥V«â»Æ€}žÇ"íÐ7äAŸ‰&ÈË€™±…¼aEÍëwh2wR+uØjì~FŒ½Zß ÌÏϬèš0AbLuX/±ò¢'°Œl¥-—Ëé ÙŽw',½ä^-¾·nb%5hÉÃCLÀ÷Z’_ÚÂ5ÖK{¢“-ô&¬´v¤2cЉÇyf"F¿òpC÷+1Çî¯79ðÜvXFƒn·[82=œCrù¯ FúŽ×‘vÐÿàih6› ¸Bè!mttÖó5s4¥µ¯Rþ. Ö@ú÷—v²Æšô°nEDÔjµä-që,s—u C aUŒ‰õ#7®ØSgï$ºˆlì‘…d 3Úàùá¼1ö d˜w»ÝÂñÖ&Îèv»Q©T ¹2è*ûò·.sZí§äk;k':¿¶¶ö‚$ ?úÑâï|çeéÛ¤¼pË$kŸ–jµšÎHŸ™™I§H±Ñà™ÀŠÇÂÍ5Þ\±JÞØ Y¨†Å=,ül|¹–U,ò|çp‡o.&2xC†ÃaáØ^À+'o°©bñrxIþœäت‹eÛqÇKÈÓ¡l=¬v)#O!" $ˆÍÐÖxÒ½<*È‘gçD>™0DDŠCìÛºOm7™Œ(& ó™=n´5­ Q—“`6Ä©£ÏöX"{Øb°sXò¦Ý´Ï"d—°5[µ=Þ®ðê³jµšŽõ°„~8¼‰6Yæ$äzÞÀÜÆ 5Ý„ÞDÜk€Ç$ÿÁz=33N'=?ÚÖ7׃,:Iç^ <‚ö 9áeïƒç&Ï´çÂÞtÜ!]Œ¤/'šŒò`îBt#â’9JAÎnÈ0ë,›~FßW²»»›¼îô‘¹Nžk‹zì#gŒ$>¼CºÁš¹íÐ+ÿŒ#âRÅ>t€¶ù„­œàsãƒìr=µç“ùM;v„>™„ú96Ðà¡Ê7^÷Üo}³™ñ0ÙˆÂü´çÒÞÉ~¿ŸByñ#ë½çm(•JÑétR»s¯¸½)´Ók!¤™q´¡+7ö8$mü'eRþÿÊ„€ìÓÂF`0eLb3`—MŸ ŒÅÜ!,Ä,Æ~û9V4Â|HÚƒØÒhðáEŸM7·Œló9ýµ"ß4Õ¶³²ÑGD:%…çÙ{h lx9ñ -ö9”ò`—?íà¹lšyþAÞ¾Ë-›¡ÊCÛö"X içh4> ð p#äÃõ¨ÓàÆ œöš†œÜê‰'¸"#úfkª‹É%u¡år9z½^j ò6Éô øMÝè|îé@΀ø\ööÔð,bí „Ü[ÞmõEŸ ¹A¶è¼ªu9ŸÌÆÌ2à{tû|j“­ ƒ“ÝæÄXÐWô#_sLÎÜ~ NxϽf&€šèØÛ‚®“ÏFøÍøzî»Ýöæòë¬×6'z€ç5O¾§Þgžy¦@¬¿ðŒåFŸŒÅ£Ïx |÷3>è©×D¼?è^"Ÿ°EÌCƈ¹a/múmTcŒmþN L‡áR§×d~ˆº^¯_rÔå."4)¿(åòŸ7)—¥°Àó¶_&ƒ+¼^Ü À $Ùø¹MÆž¿ €b ª˜eSbsp±ÀÖ7‚vEŒc¢y.í¶G…gó7 ÏcCÎÁÅ›2›¯ÿÞ¼Ñ{SËûèzr9°©û7ß# Úí°žéS‹l•Df&bè‹Ã–ì à™Ãÿ&.<#OZf,Üwb¶­oÔŸCË°ÈØÒÆýò ظ@¤ ¼,ÂàL:,K{Ê Šé#ch/ŽÇ‘û‘a]´§Ùl& m™Á3s 0ÊøÍÌ̤Ïéòrû¬ÿ®Ó-ëú5Gß068 ¹!뽟‡nÙóÁ³ic>€HÆuŽÓ³xQµZM2¡ý´Á8lmm¥üHrÍ­ëôÉï+B¶è(÷°&à)°‡—~š¼ +ô/y 3ív»ÖÑNôºãw¼˜°0†´‰z¼F{ Aöè:o½rØ^) íûì=³Ísßóžñg ynî]tâÔTñ€ ÆÕcÇzÊÚä7Ù[/WÉIÓ³ù3)“òl— Ù§Å`+™ß‚ë¸l‡dlÙ»`«!Vøí¾wrcpêÂç››› LÒ.6uˆÏtì0ý³¥ŒMÑ`Ñ€(›€ '“ä‘“ˆ±ùù{zç܃@Ûœ´Oßí0!B¾ôÛ€`’‡å±©û3‡;Øm…-žNt5!¤ŸmàsH,àܲµ'ˆÞæÞ@rµÇžq®¼r­ÃÇœËàû Ôñ™Üó}¢í¡pè ÷r‚ÛŸËÕž<À)Ï$‘škÑ#€CcîÌÒ6ƒnƒ7“Ö{ jùÖwL‘©ÇÙcäºsƒºîÜÆýµˆnòck=2´Ç5" /Û4I䚸2's¯¯´ÓÄß$°mc×)@9ßÛà`‚èõÎ$™pÊ¡ x‚°üÓ~~³&x¾:œÔ!b6hY®nÏ«Õj‚îµÓDÁäÊ>Aô¬Oè* ?½².!'ëÈ~<†wR&åÿR.?eŸ”ËRF£QáäMïüä'Îj7ÀÛÂÆfIqx ˆMÀGW‰U ‚‰:"Š›¿dˆ´iyÃÀ‚JŸ\'ÞÖ°ˆâËæL¼øM¨Ž7u{l9òß´‡~¢B=&Þ$meÍóKfggSŒ´‰›«C™Í1ˆvžˆ­ßüØ’A°%ÔòÊßH\ÑúkÀhð 96x²×Ïœmra‹¬-_žco„ÇÌùlÈ‹zl1vì¹=A&ˆô•úsò…2_r¥½&¶–e“o/eîÌ­ÈÈóòrH‘Á²õÃÞS‡Tñz ¨Í¨{à€ ž9Smõâ6£ßxÖó67ØÀ€\J¥R¬­­ÞcÄ`à uÐŽ½ ÖõLSõÎÄÔzÈøÚ`Ýs}Œ2ôzc²F¿0”ð\NècþÆ÷Ü“è6š°S¿ y›}Ç’ëð²1èù,Õj5*•JÔëõ”óè±e~±VºŒ {ýÀÈðBNBŸx@&å¹(²O Õ^–gcÇôJgff’U5SÔð1¨Ê=.\ëM{¯zlÉ€ó·­Ê¶ÖÛl+¤7Ao°<×Ïá;[½lqžÅ3èuAÊ ”mÌ7_@‚Ã3lí6È·µCn ¦xS¯½(±0((!{ˆ¦A#€ƒºœ_pôØZç ä9þï Ã2 };!×ø{ ,>s]¥Ò8¤/_fƒGîq(Ñú`FlíέöÔGøá!Ö¡ˆbR¸uÑ!!Ôe@÷r+8ãhðj¯Nbg"oÐGì™2Bæ~‰^N`M -÷ü(f_›{] ÖsË9Þ3ÚËXð>ÿ±ŒƒOðó¼Ì‰¶A7:`BçqõOó99)“2)?[™„`íÓÂBîM°ä Ì–]^¬ÆÆdÐç…ßÞŸ21N>äZ»»ÙÄ#Š!HÜçÐ6 wÉ}€(o¤¬l0L6P6x6i›‹-{ÈÈqÅ€2Ì»¯|îr\LÚœCáÏü¬ºþÞÀÖáB–)aEþŽïí™ð=9ÐÚËÚj0Éwù&mP1~qX&°’Óƒy[Ösocî0*“Nê¤Ý&G<“DcD³ue/0ê05“'_ú@;Ñ‹jµZÐë‹ÇýDvèÞ&BgüLë‰,×Û#e¹íEØÝ“ ¼§±Ñht ¹áÇ:cà H…ŒÐ^ƒQ·ƒúr/ž_ šRdÅÆïˆq®ïlAF¬s~r…±fÐ'dd–ëòËÇÉu›Pús[ö­Ã®‡ãÔWäa•¦2ï IDATõ‡p2¿È«ÉÛâ¹hï缬Ãö¢çAË‹±B¾>–™¹ƒáŠœ³gÏ&ï>ÏÍCùÛž^šè0ZËírëñ³ý3)“òl—‰dŸ‡ÍDŒOUr8‚­Œ,ÐlÞ¶rqÁ›@Êen™Ï‹A„s9lM3°ä9ìcðe’å¼·…vGCR(¾À ±$,ä}r`)?‘k°þ9ßÀ`ÜÖºüăq"ÆÜÄÅD K¨²y(‘-ͶÚâì8oîÍßíqBçL ðDÐ7÷ËÖs?pÈŠ½)è¦=kë)À%b|*ÅsÀà 4at¬Jî}´LæGž'a¹Ý‡þÍü3Ù6©Aü““zäÆwX½3aùÌ Öö@Ð[’Òüw{çÌÌL"2È0·@»¿~6Iά)Ög6#ºhK·OÌ2àdœÈ±×b/Ç‚^ ãz½žäKñ1ÑÎc¢]ô O† ´å‡^X^è2¸0ŽÖIë¶×wæ õ’°$úÈ}Œ+u³æ˜Ìº/–ÓG÷‰g2çm°ò>å=ÏkAî³qÀý´|‡Ãa ïr˜æ¤LʤüleâÙÇÅ‹¦vƒ›³-°¶èóïþ°ÅÏ×ÐØmiKoµe‚ä@Í…zùÍ™[þF1g¡¿–ß;¬K|N®,_°<öe•âöÐ~çÙ°GD:+Ÿç¹ÿŽLÌ[ô™vÚZžo°i°%™g˜ RžÔjâgÐiҔϨ›$‘#D€ÖJm@×p8LVNî±°§.ê9Y¶®cQµ…×`Æ!wXV=þ½^¯ðÎ[È}ü1„Ç Œz)ù)Hý¡¹÷Á@Ím6ÁÈe1öX.Î?bxLíaŒ¿øÓ'våÞ.þv²7sËrAæ¼ç¨TºxZú¹—|06 äãü$ŠÛMY¯ÈõÚÝÝMÏœšºxJ×ë_ÿúxÇ;ÞF#…èĆ~8Äo/ï@NþÐOîw¡°ä$Ðcâ5Ù'„q¯ P>]Ìë¸ç1븽Aò<œ™™)„$–JcâôôtÌÍÍHçÎÎN:ú™ññºD=¾<—¹‡Ž;ôÐcË݇S\®²—çâÙú™”Iy¶Ë„€ìÓ‚¥8b¼ø:ñ.¢xì) ›ÍÅV«ÂѦlÒÉ-­c‹/ Ù€=·†šˆñ<úD_LjØt}¿=ô›—¶°aHçÎ`ÂÀšß\G½´Ë& ÒÖáaŠ·Û%ÑàÎr¥Ø›ñØ#K=žå±ô;è§ÁÅ}…Ì@ n}¼'²ÐÕjµ‚^4Ô^·…>4r°IÌuÉäÌž§ápX蟭ëÕ\kƒKtÌ!TX×ÝÆÊIõöBìq1ö¸ÈÜsŸgÐnƒ+{{¬oÔor‚Ž0>ÕÌC'óL{*©‡kúý~:Šy`Ò”ë“eÎ|¦}Xî=–Ì1 ºÄ÷;;;Ñï÷“NÛsgË8‡|ø&d  žžžŽz½Íf3ãU¯zU¼êU¯Šz½^x¶è$y ÌSÚá¿‘© k´½{« /ô™Öëõ‚ÁÄ’qâ„({2™«&ò¹ÉãÀÿx¾è‹½1¬ìAx…+•J´¡ïžkÌ3ÈMnxbn0n<‚›{<'eR&åg/“¬}Z»c0Æ‚Ÿƒ-6#€”ÃB¸Ï!)+¾CŠØÌò75ÛŠËÄFeK àÚÇç^ˆ185°á¾œDØÒmâ‘%,Ô· {78•Ê»©©©ÔæÜÚžŸpäþØrê÷ûQ¯×ckk+ªÕjª{Y“‘/Û[!5x69s²-&ˆ´Ýä”gSx¶‰‡ ÷ì ÈB>ú¢.‡¦4›Í‚?Åqá´þ#NK«T*éÄ&ÆÃ‰ñ&À–‹Ç}³¼| ?ãZ­V Öaz®w¼>÷ÙcDÛú¼8Î/w¤>æ³-ãŽ|LÌrôqÈ®‹5Åd ½Æ¢m‚fÄnzz|JÜööv4KÖ/ç“ÑÆ„zx`“v0ª&¥&Áý~¿Ú8;;›þç~[÷#Æž r¹œôйÀØ\uÕUñæ7¿9Z­V|ýë_/‘{¢üÎ~ Ûãåu]7I›šºøb¿ü¥¡¾?ùÂX•ç[ä§çÙˆB»í‘®Õj)´ã‚ \[©TÒûkjµZØcS©TÒQ½Ì1·Óûõ›TÒnæÇ`0HdÆFËpgg'êõúóŠ€L¼“ò‹R&}\p'³Y¨lvˆáTþ,·0²Q²1GŒßa`²ÉAV3o+: ×^ î!À MÙ^¿ß€¾d³³³ÉzfËžãº}ÒWÄ8É·Ýn§ãs9)ßí`,œÓ@Û 2i?4–AƱßï§6a±4pÍ“TímPÛ«aJÛ/¬¸lÆ´“k æÝ‡?®ò äIö²Hâ q8„A²4 ±•ÕaTÊ ƒ:“SäiÏëâ7o7ñ£&„žCy(›¯£^ÚO„™ó™ÇØ^6ƒ/Ï1­½?̹Ü3‡ŽSGþQŽGõ¼c‹‹‹²oBìSØìI†Tç†$æ²½àùžÀñB-/ä¾MÊå+È>-ÄSв‘°a:,ÇÞ­­­h6›Ñn·S},È,ÄŽÁ`a½Äò‰‡„ Ý›!í1x¢.×Ùëõbzz:åA+ž‡о~¿ŸÀ‡WÀ›“­Ó |æ¸ðˆˆV«ƒÁ yWö´ ¨“*mIív»…°ˆü(b{]ò°°ÍÍÍBã8 ±¢¯XüœNìeSv?‘ Û!Wä“ç.8ÌÂãÇÿl茽­Ö£É½C„dø”5¬¹<—ºùÛ@²dRƒnbéöa¹E}aŒí¡‡‰z^˜hÖaY™DD4ØÜÜŒ™™™Â;whòà»Ü+ÓjµÑÀƒà܈\ß#Æ^*ŒyÒu¥R¹Ä;•ëzެ xëõz‘Ì'×ãƒÛÛÛÑjµ’1>ø3ö¸Ù @xz½^ªw0¤yÑjµ’>1NöD2ÏÊår Ùáô'¯&{Œ=º†î›à°œ8q"®¹æšèõzÑét G3n½^/Íë³×™ˆH'—EDá)Œ;B8ìÖÞ^䘇Ú"W‡Kz~™À°~¸N÷dt8¦wM¡³èßòòr4›Íxê©§ †#{§vvvâàÁƒqæÌ™èt:é½è*û „‡>OM] aíõzƒÎÆÆFº†±ð*Öy{¼.g±—rR&åù^&dŸ⓽°²AÛ p5ˆgÃ=Mñ{ Xè#Š/³õÑ„‚¤p[e ÎI(ä$ ƒ ×Åÿã< ÜóløXOmÅ4 ¶…Ò Œü°2nnn¦Ít4Åüü|ôz½dµ'ý²ùú´&B§ RX±b[6ôÀ& Y¨Ú ¹°5÷z½‚Õ×ù >•¯›¾-êÔmO ‚0ž‹.¡7lîyh„CZ 7‡n s¥ÒÅ®ÕÕÕ(•.†cA8¥¸î  ¨Ë  e1¹°G!<¶`#W{»|Ì3€›6ò¼üt]FvNÂ5Í­ó´ÙÁœ@ÿÚív:’€Fɽsè*×úæ!Ïq¨¤ÃqÏn·µZ-EÖ/€(D›°.ÆÓœ±„\Ú“iô¼±AÅ žžˆHSúÐ&,“~#Á`Ýn7Ž?ëëëi-ñºÝn[ê³€dyƒ;È–`Bý&tÔ!c´­V«E¿ß¿„ £c\ è3¨ „ÍŠñ@ñe¾‡¬8¼Ì'Ïk@nÄ´ûÀÚArïÎÎN4ÞaËpNˆð¬™ÀzÒh¹a¦}¹ÇÊ}ñøhÆÐž,æŽ=È‹yY­V“¬©s8ˆ}e^F£h6›i. [Ï#æ;ú“Ï1æ4ëÏvŽsØùaPæ „4/‘+óÒëaIÛÛÛÑï÷Ó|±ÇŠ·s—J¥èt:I÷ð~1 ¤Ñ½n·F#ÍM çè8¹Uo Ì?úÅ:ĺìlôa=™N§N'mw¨ª×úïõ`ii)ºÝn4›ÍØÙÙ‰[n¹%n½õÖ8pà@ÌÌ̤Z­Íf3z½^’=Ęu Ï47žÉs™CxŽ···£^¯Çêêj´Z­Â\bÞ²Þþ áµ1`R&eR~¶2! û´8¤ÄqÎ6[ɽ ²ñ9ü‡° »ü¢ak¼= Å÷°;ÇKÀ4 °Y¯× VØÜZ Y¼ò?€—´V«,b´‘:ØDóÄZ6/úéP!Ú_«Õ 1Ñî£7sB˜ü|d¨³ÂÞ*@íãsˆàÔÔÅÓk677Ó3ØÐ : ž‡WÅ@3ÿ¾Tºøžjµ ä9\Ë€Üd ½‚4¡c¶š:Ì#'"È‹,íµÕØÄ”çÓƒ;tÒVûÑhT„º.ÂQœÛDܸÁ8àÙ:†5rÄüCä#¡‡:È!²A¸`ȃ”qMž ñq¢­I9ciÂêœNn‚¬˜À9BLq֮ؕÃs‹,øÛá/›››‰3Ÿ,Ƙ±tnãÇÜu^”ÃoÿÜÏ:š“눋 ¼^¯Çh4JóÙ Õét¢R©ÄÊÊJÁDOЛ­­­X\\L991d~àAðÃ\E^È%blüpXóÄ„9ØÑ‡€‡Ãh6›Iì‘@gM#ÆÞÒf³™æc«ÕŠ—½ìe177?þñãôéÓ…¯0r@h!@´Ï^ ¯»xË 'ô{8¼øÂ]{;˜NÔg¿Ìås¹ËÄ2)¿HeB@öi±u`äÓà͚뜬‡§kC–ÅÄU6[@|DŽ7À&'ù84 @™ÝýÜ—‡/`zÙpذè›Ca¨ƒß!6^¬þ´ÉÉ›<7)ÈÖùX+óØâ@àÍù$ÄÛb>ç*oà´…ï$N¶¦Ž|L¶¶¶؃ÐA6Ñ{dÀß&ÃxJ± }t?"Æžÿ!U<=0¦¾Ü !°îãÁ1éEŸíqp.sÉ„k4mqò°qÝ7òW±7Ź&öŽä Ýa—ö„0F ò¼Öú„'„vøà “÷œä³~ÐWæÄž{Lî¹âÄØZ— *Ì >G¿9òÁ\ÞÚÚJÄ™þ1ÿÐÖ ¬î|†qƒ61/fggÓÜBF´Ÿ>3¾Èy‰ŒX‹-WÖs®Û+7Š9dòæõ˜¾q ÞŒ%èÙ~ô£ØÞÞŽw¿ûÝñÐCÅC=”äo0}rˆ¢×2fòSL¶}¬.zHH–CÑl ¡°æby9ËsE@&eRž‹2! û´Î*•J² åïn0¨`“Á¸ dÁ›·ÃX˜mMžššJáã Þ4¼éҬ݀1Ÿ²å„ùˆ±Â@€æ1€¢Cl² >Žj4!¸@ÖØìÜî1Ð:qØ @€UÞâÕˆ±ÇÁa"¼lÞ*Ž»ôõÔc¢å\Hz`«²Ák^¯I„CkÐ3,Å@0ó!¾‡±ƒ”B\ >„Ç@R i€“<œÃ€°(Pflµ¥ Gô Y:7Æ$÷›ùÆIH„úЀ<†‚k®¹&ž~úé$Gúhc÷ {ö¸¸mÌ æ‚ ´“>ÐgêdÝ¡î„6" aYCr@HòGè³ Ô1&älÑgl{W|‚A,úäµÊc›ê3AYZZŠõõõ4W­Göv SƒkHÚÚÚZÒ#¬ö¬¬až‡´“¹ÌóÐ{«LžìÝE677S¸ ë]îA´Ç†¾ÐFdˆìùŸ)CýÃþ0þò/ÿ2¶··ãÇ?þq0àÑcìm$k·Û?17²ñýÇËNnŠ×q÷Çk‹=¢/Ä2!5“ò\” Ù§%ßøÙ€(Î×p.›„GÙ ©3¢øÂ;‡ëØ¢˜[æì¡p+„ƒï/ÄV³8²1;¤‹þ9ă~àcýpå‰ß\ïPÚm²ˆ6¸ÎÃl­DðL,¼„½ ;ÇbÓ~2¡/Co¸Œ‰½) îGFôÉ  kª=*"Ú‘‡Ô°™ïâCûØüsRÂO˜! `À$˜ö C¿p“ÂýxœüŽîŒ<¶ÎÓ1851ðôÜD‘9u W&NÜK›s ²-¼Üãã‘7},•JqúôéKÈ 2¥Ï¿<Ûϵ7OýE§eF#666 Öc,ç?iÝáyÔã9 ·:÷xX‡Ý?dE¸(m‚ Ú#ãñ´G²Š¬Ð‰½ò#}0OOÑííÃãFß핱גz©/b|¨ˆ­ðö°™D¢×è#ÄÂ^4Ö¯¥ôÏó¯Œ †N^¬3ä äzîõvss3Nœ8‘ÚŒ·Ë§ÝÑçD™D¢>ÜãVîa$„±¢Í6´ ·ˆqn¤ ç¤Lʤüô2! û´.c×: 9@>·p²ÑØúJ8‰­[,c¯ ›€l,Ê,Þl:l–ã{ØÌ+ak­Á9›#7à)" àƒÍ29Þd Æ}?›¤O@1!°W`8¦ð {=¸vvv¶ƒaK:Ï5ˆEþöR16€-®q¨‚¯å{“/N䢟«ô›¨r uçrC66\ÁÊÃÁr‹0rA*ÆÚÖ_©ÇÈa*Ô›[ò=ô t.¯Ëùè¹Áçh4Jm0Ù60s1)2€å:‡\1¾Öe­ç§Ãóò(@7ÞGBt°ÚÐ[ë&zÇoHº-Ì‘ŽA¥Ï|n¢h‹:‘µ"¯¬=´ äóÂÄÆa_öÆqoNX³|p„ç!²ñó |™ë½^/*•J’«É¯õÈs”uÏŒ>~¶ßÿa}ÝÙÙI€ŸyBØ—‰4ßó¹-ûGt4?9 ÙãUw¸¯×D>óÐl6 9Rx##"%›#›í1 íœ˜æñ¤­žëžK´‚Ê|A‡ù)•Š/41>”‰·bR~QÊ„€ìÓb—> !b|æ¼ÿÇÊÆ†‚õ˜ ð1§0Øás6Ú1NyXƒ ßã1ðµ?X¸rë7m°åØVhú`p©.6*ž8äìó™­¨n«µÙä \òöY&ü8aÔVa@cÉÿ¾ŸššJ¡~C´ÇÓ-ÿ<:œÃu@ ­ª¶ÒÌýL€ˆÇ¹C^ò~ÙÚQ$ü8dŒ¼Ý6{’¨ßã˜w@¯ „ ÙÒfÂG‰ç‡ ÿ#þPÛÂõ|æð*홚š*uj –Ënii)Ο?år9ºÝná¸_’ˆsæyÄØ£ó6RØ[dc‡Oγå9£´;ë&±6<ØŠëTî¹0@µì9ÜcÎØEDa-3¹Ì×¥r¹œÞU9ðúe²ÇçÈ(·ìv»—„Y†|g«}NZ‘KîË@&Íöôºn‹cNH}*›¾YneœØzŒLíò3<.„gå:J¶|r/ÀÙú¸_çÑ×¼½&Í&}&vÈÑB_ê%g…1ãc@f Ås û' QµgÌ–ht€úŽÈx`¹Å‹bO€ ”¶F£‘,ö܇¼½.àÕp¨LÄøt¥½òv8n—ÏÆgïò§ß;î³…‘[Âm0A¶^7˜ ¹q€¶Z©Ë¤ÚÞº|nÇ•ƒ^{žIÛóƒÜ>ÆÐë ^šR©”N¢¿ðHÛÚï¹Çýè&}Fé änO•uÜ'NMM¥ºlàòeÏ+×£_£Ñ(6ç}ŒSƬOFtêà 355•ÎÈIs>?‚gz^®âuhR&åù^&A‹û´|øSlAçobëËår²ÞçVB61ža /õ±¸¤½éÙ*kK§7Er5lµÚ˺e ëÊíÎA¨­]€?ƒÆ|ƒÎ=l~Žç·56A¤œó“È ¡ þÜà©©©dQå$&-àÈ^ Ë›çà!Ó!C[Ñ}N>cBŠÃv<è­’?@%:éú‘ñ^Îcb™[–Þ´ó¿ V!|žo€ˆA£uÒÖw- ×§ 9܈~ÛK‚ŽÚ’Q|!¨Ã¤ÜËÍãoùmooÇêêjáä&?ßúaÐn+>uñ ¼©&süø´2Ë˄պ˒{ПœX„ÀX&.ôÅõ8|æÞªœd²^ÚrŽ Ð‡RQÏôôtÔ@®7 ¶aÂÏ´.sƒi¿“5Ç„ÌF( -{Í#ž ˆG·LÆí‰ÄðR*• DÐ:’ë¶?ˆÔë$$›1cü=—YK|k æ™èm­V+5Ë!7¼Ê„ÔLÊsU&}Z kD±ÕÊ+·´Q°âñ7 Å·­¸e¶¦EO.ò³lõÑ¿&0lÖyhˆ½)ÜoK'ŸY^9x n€3m5xâšœœ™ ºÝ9±òóvÁÿXE Ypü»½ Üg`]¯×ÓýÈ%"RœºÁqXÜ“#,ß{É  ‘'ncÕ´‡ «+cE}&_*€‡ZÖ—½,Í„H9ÔÀ–{œB§ÛÙÙI¹\“údr7 €×yS&@ô×ã‚üi»ÿñzåáeX‚s"@ºT¿0ÓóØ@ÔÀÏÖb€ê¹’ËØ† ˆ×ç^äH^‹ '{7óc¯Cl˜ØÝÝ-œÈds[L~½^’àŽuœµÁ¡z–É^D‹>:×n0¤—b"w<°&PÒäA™ÈØcÁ¸r”½[yÿÐ Ïd‹®Ó~;Ï­ 4´cww·pF&žÁ±ÁÔ~ÐújbÇ|¤—³LȤü"• Ù§PÍbì 2b Žl5g‘Í-l¶*z“ηë|:îÞVYÚh¢À¦ì€¢úµ‡%bl ·Õ@ëpPÚég/À›ÇSl©t8ˆûÆfÍ—»üÝ[Qé“<ÞBvòøÉ-¡´…6˜ò?ßç9·ÓVE“Æ‹¿M|\'€äêœÄæ}±Õ ›ö9äϺ™·Û šzœdlr±w =u˜èÎbRfíbBÉXR/kžië³ïA¶dì `}ª:nÏ¥ó]Ü?ËÉaŒ)äÙq~éŸIíÏ >ÏÞ+Œ)×YúŸ“·‘9cPúæçøùö¶ ,ì&ÊöØùøn:lƉéÈØ'z¹Ï8 þ¸ÞÞKÏA Ü_dc"bo㔇®¡Ã>ñÉDŠÿ‘ý#\½¶®à) /üö!÷K}·ÛMã걡 {è¾Ç•uk¯yï„ï½¼dÈ93.Œ+}È×=úê9Nè;6yŽ cžÏ& ÜG>‰lþ¡ýÍf³`˜b è'} !Þ^?æ9ëîå,ùülüLʤ»æ€o ìÇλ1)µ‡P-BiÜgÚä6¢×è`N¨Ün®7™Ýk,m à‚5“ÎXÏÎÅó677 ýAnÄÇí£^{BóvšdääÔ:‡WÊ¡…ÎaBïhÛææfôûý4«ÕjáÙè¬Oãyú@X‘_*ˆžòwn¢Í> `zúâ».h£Iï^†Ë‚yh}anx½2qàÌ1Hõ€wnìîŽ_ÄŠ,¼.X_¨—07^ŒhòjlƒsË}-•JÑh4ÒÉbx=|Bs…b‚òB% "2)ÏU™„`íÓò“ÀÛôôøm´,ª(l²,è® –7#À”Ýèù;ØÌ#Ƥ%·RÆÀ†Äfë··{#ÈÁYn­¤m€56¾̘¼xƒ¤Ï—&ËRòç{S$ÆšÓš|/}º1Nêt.„AÓîîn’ rüø}<‡>åa\Œm¾¡ãià´,ô‚‚Gx›c®MDÑ[ÿÑI€‡A$}2hv¸÷Qì¥#¤Ëýöç€Û¡S´…ñ‡è¤ Ú%ï½ÁŒEu4Ÿ2fÇÚ͘YO¶··£V«¬³è”½C´ÛD„ùlë¬õ„ñÈ5‘rŒ¼Á8 1Ï‹±'†ç1VŒƒåHX爭ýÕj5ƒÁ%9M¼¯†qAoý¢9žïöy.PöÒQmâeoJþŽÏ9}²õ>" @{/#ŠÃ™Ð[’¸äáuÒãboG*Ó'uˆ·‰%’ú‘ k/†õ{U\r£úÁºƒ9Øø‚2‡ü†{ú^*•¢V«¥5Ý 1¢Õj¥9; §jµÛí=½è2{¾I™”_¤2! û´x!,EDa³¦ØÚ ´扉¶”:F7b|‰ M^Â=”Üò; `Ý!\@ÅŠð2¡ÀªqéËþr‹rD¤¤b62á(Çn·{IÂ32whõNG£QaÃ4P4aÌ=¹wgÚòÇænë/`ÑïØËÚo0EüµûløEkNÞÎìdl¿WDÓˆñ ö ;<Æò30G mÛ݇¹1‘)ãÒív£Õj%¯žA?:G†Ãy˜l惨×ëi £´Ù íâ%tÌp>fh·Ëà½$ݦŸår¹íuzss3jµZ¬­­žg#†Ç"Mñ=^Ó+•JÊ{°áÂÍü¶ñȆÚI?!ß&NöЇÃh4É{Ûl6Ó¾‚.`¨àzÊÖÖV4‚Ü××× }É[£Ñ(ÞøÆ7Æ©S§âÁLë5ë‡/³³³Ñh4’Ž¢#}æòz¾äL¼“ò‹R&dŸo¶XKÙ@8°7„ûùÛ‰•y¸ÿcQt„×¼QEc¸ñtØÚîÍ‘ð[O 8m±Ž(5Êfè$v{ rË¡7B[æb±× T¶Z¸´Ë¥½1޹´\}±‰ ¤Éa &>}†1F?›ÿôôtát,Æ;¢Hêõzê?o!v/ $÷¦˜,±É;<k½€4AÔ Ó333)ÜË(ÉÏ€8dô¨×ëEµZMz†õ·×ëE«ÕJmCï­ãê6É«ÕjI–èš=íâ{~rRµ—· ˯Ajî´e—yaï—eDÛ¶··£ÓéÄôôtê»=%ö\ÎÎΦu‚¹ÃXAhøÛd•PLŒ³È¢ÓéÞn‚ã¶ð·Á/¤×ÌÜ Áܱgo”ÇÛòG·<ÈñGGÑ%?Æ {W˜¬3¬%‘HþÂÂB _e¾­­­%/oýîõzIGìõ‹úèïÜÜ\¬¯¯ÂÈÐOƒvÖ dÉžššŠN§“H>ĉµÌïë°¡ÄcBþÄÎÎN4›ÍBˆc‚'ÙÐÞêÎ|ìv»i¼ kèU·ÛˆˆV«wÜqGüë¿þkºn0$dαÞV«ÕBò;z‹¿Oiâ™”Iùÿ+²OËÖÖV´Z­D‰/f1çÈM‡jEŒ7ÀJDr$"ÆàÜÇòrßC’¼xΡ ÜÿXË#Æá3œTb¯º½u¶ØÑv ­mlàlÌ6à~¿ý~¿`K:º¸ßmA΀!ÂmØð¾1~$2f …“vBÂFìÍÓ@¹Ú럲=LµZ-é àñ¡NôÈGc:D‰~ºým2 #„…þ@8ÐÅf³™ˆš A.Àƒº™è_­VK€=¼EŒ“–í‚LS'²ƒDa©7xÆÂŽžÐ‡Zü2w(è„5÷Ž!_›=DÏS¬ÐÎÃçDgú eìò0{óÎsÎÕ!¬3<ÃáAx"Æ`–1"vŸ{ô°ßï§z«ÕjÁcä¼1ˆ cè÷ˆt:´v +¯ôƒgx ±°°»»»Ñét †ŽìÍó°ö÷z½t^ÄÙÙÙ6kb-lªl~,ø,Ø,ìår9¹åK¥R,..Æúúzºà…¬T*Å`0(€_ƒªáp˜,^ÄÒ~ ¨øÛ–Soì¿"F9¦½1u¸—CË"ÆÉlžÕj5YWßx ؘ°Úâ Y¡oÔMH1Éõz=…Cì°#Æo’f£äùXCíp8 À àØ¡/€R@ËñÜô°‹'‚-úHÎÛÉC…ò$|M‡y@T!ˆql½­Õ ” ÖPtºT*ÆšvÚ¢ p´ŒœAŸ–´Ä GÓÓÓ„þÛócrJx%ÜwÚŠnlnn&=ͽvô2jmÊIGž$…ä0ßÍ\Ãó/ÂÕÐk>cN²–Æá-@—˜_1{Q!36 ·ö˜!KÆ—yAXúÞn· m¶¡qà8áˆHd„¹çü-'ÿ{üì峇Ík2óßÌ?æ2ú†þ [¤&½´PŽÇ ýŒˆd€4ÛÄ=ž~¹_£ÑHkª?k„ƒ1öC?1” êG7¸YÐ&~/òŒøœy‰q€O{÷òH£×è2ŒˆÂ|€ã©™•••¤ÇÚ¯¿þúè÷ûqìØ±äí¡^ÚW©T’.w™x@&å©\þ3)—¥BÙ”±<Ú ¹»»›b»½Ù²XÉ-§¶R{ãìzo XÏ VóPîÇÃû¾^¯§ ¼¾†M…Šÿ±ÓrhK¿ß/È I¡Þœ`ùùó¶¾q½«O±á"ÆÈ.ÿÁ`É2 ° P`‡û0N€YÀ„‰"Vq[ùÝçÍÍÍ‚%=÷~A˜Hì´×c0$ !€Î‰ÐyXª×ëÑh4¢Ùl&À‚.£3sss)w¡^¯GÄ8×9 SÀu³ÙŒf³™@-·!1‰fÌ:È <@ÊÞDúK{<&€;'\ó¹Ã{œsäùf€)E×ð`0>X®=/!¹´ +<^9îE71VðwÄØCä°4€5±öŒ+z€¦Ã`C…-ð¬)€Oˆ9ý†aÍÎ >ýˆ°*Öæ:×R³ÙLs€ñq.›Éë k:ÌÍ…£ cÜx#¥Ý€Gžç‡`EDÚùÎáll@™Ã[œl„,òv9ì9Ð[`sòæX{ƒ¿ÃãǘÐo÷ÕäÐàòÆ=LØâopî¼{ ~ƒ¼é€`:œR豤/ö\DŒsšh+ž'Àˆ­±;ÆÒ@â6z‡<|L)`“öÛ:Îó¼&SÌç[Ø‚Ê| Ìðfoõš“%mÆ:Ïsyº`¢Â½ÈʼnïX¦¹×}tˆõÒGê‡"c[Ú™³è92Ï –ɳßÏây›ë&írÈ)cÌsÐ1ÚaãºcoîÖÖVÌÍÍ%Oϳ·Ç9è²=:u3W|È„²z½»»»qõÕWÇúúz¬¯¯§ºè×BƉþÖjµ”ïA>‰ål`Ï=è;zŒ^rò!ÓÉðИ|8DÕdÏk ãÏþB½ùç‰áŒãƒl¤Á0333ív»p•$®V«Q¯×㪫®Šf³sssi^ÍÎÎ&¯7²ív»…yµŸÊ]wÝú§Zøl4Å[ßúÖ¨Õjqûí·GDÄÃ?¿üË¿·Ýv[|éK_Š~¿wÝuW¼ñoŒïÿûqàÀtÿ§>õ©¸ë®»âƒü`üú¯ÿzÜsÏ=ñ‘|$žyæ™ø«¿ú«Ÿkÿ&å¹-²O‹˜-ú¶6²È² ‡Ãdu Ìfìp§ÜZbÏ–gâÜ XòXnîeãfCÔÙI\¶ÉDÄøÈVƒ À›0ÀÀÀsØÈy¾7d6C‡ñ·AµåHZÎ5ì±ÑûD°ˆb24¡C L@ Ü‘AD$¹#c*[Õ ¥0`²^ðLŠÃ­ µx:jµZ²ˆ0Ð¥<<±#< ç O„¨ÔÔªÕjÁ+·Wè“É‘I/Àˆ¸ò<´ ‹½CÛÂû€ÇB†5ww7®¸âŠ˜™™‰ÕÕÕP}‚U­V‹F£‘ò€*•Jœ;w.fggcaa!%ÅB`è¿ÉúææfŠqG–nƒç+¤Ê^ÆÎyÌô¶ú{>pDžG½Ê6JØâ¯  ƒ[c{"œÃBx $ž¼ Ïê bäðövzÍdBް–{­´‘oÐmë¿É3ã½±±‘,É„tQ—=Hö<@`]¯½ EÈ–=È´™uµdww·pª}r–ß{bÏŒ P&ãŒëœC>sÃ…×/tC”uŽ5§^¯Çììl,--ÅîînÌÍÍE«ÕJÇ3¦Ýn7y䑸ŸÿùŸxä‘GÒ<¢­¬ÌûRé…ÿñ“< ×_}\ýõ…Ͼõ­oÅùóçã£ýhšOwÝuWÔjµøêW¿Íf3""^ýêWÇ7Þwß}w|úÓŸŽˆˆ .Ä'?ùÉx÷»ßŸüä'#"âŽ;îˆíííøÈG>ï}ï{ã¥/}ésÕÍIù9— ÙÇÅçϳYÙZ HcSu‚(‹½L>òP6Ù¸Û2ç0ˆñ—‡¡àý !wó\e6Y€7Ä…˜ÍÏ€šë\‡­‰´ÑV{4h‹ ²Ôáù Ù è${“ž ‰év»i¼"eaà˜¶lLâ:€ž‰÷p­?­V+‘ò†ìbø¤·Ûíh6›k+Þ djðJ;©ÁJ®&1ôds‡>ñár&a„îÕjµXXXHá=ÅáèW¿ßÛn»-®¼òʸÿþûÓ}N'ùë°Ežyúôé6Ož<õz=VVV +:a"„<1G‡Ãa!ßÏøl²ÌX2üóܲ﹀Œ<§øŒ¹g€mï#s1÷¶áur®™½€>%ÌäÕrdžnmm¥$t‹uÂ^D‡†y.ú1²†úÿùÏÇÔÔTüáþaD\ï¯~õ«ñÎw¾3‘ˆˆk®¹&~åW~%¾üå/'òµ¯}-677ã]ïzW¡Îw½ë]ñá8¾ò•¯LÈ ¨LÈ>-Þ¼iå ÄD`ðˆÐf1&Ä›µã½ÑD­êùoÐ(â¬P€=6$‡Í˜8äG¢Úc‚â0(~C ‹Ã‡li3ð¥¿&ÄŸ¢¶¶¶’W‡>"_c—Š_6è2w=Xg}(@î‘¢?öØêˆ<±~Bb»cLlÍäYÄP ÄxÆlÌ9l…B?°äó¿ [./Æöhƒh6›1baa!ºÝnzQd¹\ŽÅÅÅdE]XXHmåøÎÅÅÅ8wî\:t(*•Jœ:u*Úívt»Ý˜ŸŸOÇ&3ÎP,¯GމÕÕÕ˜šº˜OræÌ™”÷‚|n¹å–8{ölq³³_šV­Vcee%Μ9ý~?½˜ÄÿÍÍÍØØØˆ©©©‚"÷l1Çs½fž{nŠÓÀúë?‘qèŸ+äÄVõœ<Û«fBöǵè)Ä’¾níId^°¶8ô†º˜S¹÷ÈK+÷9‘:'É^'™§x+rïÐp8LDjqq1666 ž((Ôá4,ÿ7“l¯[–£‰#¡lÈŠuÒk¦ëBF9ÙðúËu9 ¡ˆaW&”SSSÉê#ž™'µZ-Ž=år9VWWãðáÃqòäÉ´³FD:¬{[;m÷št9Ëå$ ëëëñ÷ÿ÷ñ¦7½)®¹æšˆˆxüñÇc0Ä­·ÞzÉõ¯xÅ+â›ßüfò>ðÀés—ÇÇâÁ|î;1)?·2! û´Ø2È&…ÍÑ›wní3pp Å–nÀ#_·Û-X9ÙÌ\¸½®Ÿöò`¢Ä†J»¹×ýàÙBlxlâlž9Ysø’­ÂÈÖaga3 vî½#d\ëMÜ¡<0D1A³‡Š¾Ø*ÊX9$™¸/<“:x¶É‚½3„†8Èm4àÂ’nù:”…ð®ÜÒìö¤r08¦í¶v’» 8á×_}ŠóžŸŸåååÞy£6ÉÅ«««ÑëõâäÉ“‰„<ýôÓÐ|ìØ±øÞ÷¾—HÈòòr‹z½Ï<óLÒrPæççãÂ… qà 7ÄÍ7ßN'–——S»˜Oóóó \ÏÏÏÇÜÜ\ÜxãqæÌ™F±´´÷ßlnnÆÊÊJ!±<'–9zíñXC ·½@xîÍðÉ`^ Æy¦>ãÐ4E/m©Ï=IÌ«½rµl¡GÿÐ]H€=ÆÔåyc²•ÏÖ4yrÈ|d7ò0‚X{½¦«««Q.—£Õj<¡ÌÏ/ž ñ¶§8'¡ùº†< wý~?…XÚ«‰ê…÷€uÄF‡Ÿæ/Ža&ñÏ7}¤m>âxjj*^ô¢Åë^÷ºøö·¿Íf3VWWcww7Z­V¼öµ¯ßù߉jµO<ñD ‡Ã¸é¦›âßøFœ8q"é÷îînò>AÔ¬G^kèÿ ¡|ë[ߊÿøÿ(|Æ{‘~Zù⿃Á y?".†UED,--]rýÒÒRŒF£X]]C‡Å… ¢R©¤wü¸,..¦º&å…Q&d'ÛÚ…ÍܱÒ,ÆNÂ4à°EïÙXˆÁf3¨wû"â’ >¢˜HI’cĘ@Ù¢J{ÙhmQƒì`™§ løÈä²ø]¹ üš`+3²¢oþ?'°õ•ïð¦ØÓckjÃÍs úL.Üä9A¾Ö‹||˜ÚNÛ D­'ÎCBîœ dK»­À& [Š¿G€gò ¼©gvv6^üâGµZÕÕÕXXXˆõõõxå+_ÇŽ‹óçϧ˜ñápO?ýtzÖ€$…ÍÕD‚·G—ËåÂKó"ÆÄÝäìîÙJ¥Ç¤¹Q«ÕâE/zQ\{íµ±¹¹÷ÜsO\wÝuqòäÉd¹mµZ155W^yeôûýêØh4’î‡ÃXYYIºà9‡œ{ ¶ƒ¾äÖn{Pýîô Ò¨'?ËÞLæ†Á=ãk’bRe¯&º‡N27íõsh}fl˜´7÷Èx¾0‡xa#'Áym žŸB Û^CèºÁ3ƒA,..¦|!{B½^çžcô9y ='‘Ãh4>ú/š:{…[í¢ç1rù¹ÍóÈ8qÏÄ%" š¹]._ÿnww·pB½(¶ò DüÎd€!›d‚$d,iXN¹ÇáCv‘»ßóm…µuyxcu?M`°¦KîÂ&QŒ¹6‰sX }Ͻ=´…MßÄÁ›šL¹ÞôIø‡{ýbF·—þ#®ø!x'ëÉ=Jެå^9“äØjµ)´N@H£ÁºÏQœKKK1??¯|å+£×ëÅ©S§b}}=Êårœ:u*žzê©èt:Ñn·Ó D„Íñ2?dë÷álll¤6v»ÝØØØH ¬¾Î¡L2OÚív”Ëå8wî\Ôjµ8þ|üèG?ŠÑh”ªjµZ¬¬¬ÄÚÚZœ>}:½\íèÑ£Ñn·ÓóÏ;>ø`4›ÍôbÇáp‹‹‹…܂뮻.Y¸Ÿzê©ô"¸\÷3d½Ià$/{Ö¬N¶'2bœÀNû­„]þ$oƒçˆ):äobŸ{½¦yNz­°—"7ÜØ0áúi³sÔÏÌEŒ#öJÙ0€L!œdU«ÕR˜ßùóç ¤Ìr´cµFédAòl!ýe³wÊóÙk†×a¾§>Ë’çš zå3^¸È>‘£¥R)½Ørkk+Nœ8_ýêWcss3Ž9çÏŸsçÎÅææf|ùË_޵µµX^^N/Ã}òÉ'c}}=N:kkk©þÑh”¼J¬¯&°6jåäd¿•ûï¿?î½÷Þxï{ß[ð-//GDÄÊÊÊ%÷ð–ÅÅÅt-¹tà _Ë©Z“òÂ(²‹-€~IUÄ83b¾¸bÓsÀÁ^[øLJÊårá…u€Y[¿"Æ$€â°,žEþ„ûä:/vûÛBnK<ÖJ‡¢ä ÉŠd_ò¨ÃaNön°±9 —qȯãù&s.‡›ä ³Ô½W˜ mŠˆBŒ4Æy9qÈ×ÄɤÙl‘4)r{Lré¿A©­Åè$ß@·¶¶‘ ß·Õsm¥R‰J¥sss1??år9ÖÖÖ¨áù<òHlll$²ÙÚÚJãúúzÁsÈ»Hž››K2 Q`ÖívèmµZ‰¸qÄ0oµ6Ñ©ÕjÑétb{{;–——£ÓéDµZM/åc.=þøãQ._|OÂââbŠ—>{öl9r$8‡ŠÁ`GމïÿûÑï÷“¥—ùuå•WÆôôt\{íµqøðá8sæL¬­­Å‰'’ç…çÁiî©°gÀ$†Ó–ròµžÙO}èNî)³Ñ„yl²1â“õÜÛ àÌÿöZh¯s¢J{ ëÎO°g o 2É=ÌÚÌx8p ÖÖÖ Æ{Y/èDÌF‡k™\ùÄ3Wôî IDAT{3¼Öäë0²q™u…PD¯C–‡I¡V!Ìó}p ×íììÄO<.\H{ÎÚÚZ\¸p!NŸ>KKKqèСXYY‰óçÏDZcÇ©G/ÑQä°f,½vs0Äå,φä'ÕûÓÊç?ÿùˆˆø£?ú£Âç7ÜpCÔjµ¸ÿþû/¹ç‡?üaÜxã‰ð’'rÿý÷Çk^óštÝéÓ§ãÂ… ñò—¿ü݇Iyþ• Ù§ÅÞ‡Üê…M'bœîxpo„{Y£ Äm‰‹(KýÔK]cË`eK9}¡½<Çmã™¶ÐêÙlìÅ0ù0¢XöäDÂuš¤ñ}D– }3028§ØSbTÌøßž@–‰¨ûŽ%ù™\ä [ÁùÐiÒ ´¼½ Œ¡{>‡ßaa€’éé‹Çõ.//ÇáÇ£ÑhÈI»ÝŽóçÏ'Ë1õÜrZ‘ÃÀð +ǹCŒgffá¹öÌ0§£¶Âû¤^¯F#ÕÇeff&‘ŸVE®Õ‹^ô¢8uêTT«Õ¸ùæ›ÓËßžzꩈˆh6›É+Ójµ¢T*Å™3gbcc#–——cnn.¶¶¶â¦›nŠ—¾ô¥qîܹxæ™g¢×ë%˜{²b‡¾XWìIqîß!7tŸ1­T*é€Näóša=q($$qg§øfuôÜGä²Nø!ùå>3QÊûÆøÑ^ëˆyÆSký±!€9åu}G†„Ííìì¤\ < O&Σ˜ŸŸ;ï¼3¾ño¤¼ÏgÆÇDËúŠœ½F¡ï¹çËÞ<]|æùÇX’;qèС8wî\j?cI8-dcgg'ÖÖÖ""RþÈÎÎNœ:u*ºÝnòð}êSŸŠ÷¿ÿý©]œ(gýB·y/HÄE/ÚÂÂBó™tÖSO=ÿöoÿïÿûÓµ¿ù›¿Õj5¾ð…/Ⱦð…(•Jñ»¿û»?ŸMÊÏ¥LÈ>-Ãá°p¦=››®-Z¶^æ  I€_@D‚Ã3½ù¢ ²Ù`øŒÜ6@“$r“î‡päÉŽß@äá¶äa ä9„K˜`ÙrF8í5y¨ÚºfOà­Z­Â`bi«½~‘Ù^`0¿ °×ØÒV{‚èïôôtzoy È‹% ‰£\úædU€  Ñãk¯ ɰ‘N‡B¯!÷OOO§8|¼ ~›1!„?ñ 䉀„Y¦\k+ûÎÎNlll$²U­VÓ{ Zq qÚÝÝ .¤q[YYI§µ-//Çööv¬­­ÅúúzLOOÇÒÒR°ÛÛÛ)dkww7ž|òÉhµZqòäɘžžŽÕÕÕ8}út¬®®F«ÕŠS§N¥÷ <±8þ|¬­­¥ñj·ÛqóÍ7ÇÁƒ㪫®Š|0Ž;+++IŒynk!FÈÙ‰Þ>$À;æžC1=rOºâ0JÀ?¡£Ýn·°ÞíµfðcRÀºà£q 3c}´Ñ™ø½#¬½ž·ö ynÛPàuÎó’gïì\<­«ßï§0;E®ÙÙÙ‰z½ž®‹ˆD@Nž<O=õTš¯´ÑF%ÆYÒ¯£^»F£ñ©…¹Ç—ù‚Qm…$íîîF§Ó)BÁ3}pu†å=©ÛíF­VKsþÂ… ±¼¼Œ7¼á édB¾gnñ¬ÙÙÙxÉK^W]uUœ8q"ÖÖÖa^YY‰Ó§OÇå.—Ëò•¯|%VWW/ñ~P>þñÇí·ß¿ýÛ¿ñ‘^DxÅWÈââb|ä#‰~ô£±´´o~ó›ã»ßýn|üã?þã?Ž›o¾ùYíפ\Þ2! û´°A°™:^ÙÞ 6áˆHq°1??_ ¹ ž Ê–.6[¾ ʉB¶|Úb ÏƹÉ7&÷ÓÖIÚd`+uÄ8‡”ç]`Õ„8ùøQ®3¡‹‡¤X^i éÀI~€Ça4¥)ÇÆó›gÒ?‡•ð<À=ãác³Lù䃭ŒÜÇóI€×µZ­D088€þCpmy&¼^¯G­V‹^¯Wx}»ÝNà5?ëbÍ!¥R)®¸âŠX^^NGÔFDœ9s&Ö××S«ÕjÔjµX__OõnnnÆüü|!ä£\.§—Q2Žèt»ÝNr4Ð2°Žˆä½ñK±Šû}¼·‚ç9ü O!8„÷lnnÆÙ³gãÌ™3ñº×½.þû¿ÿ;cww7æççãÉ'ŸŒh4Ñjµbss3½ý†X,--ÅùóçãäÉ“qêÔ©¨T*Ñn·ãꫯN’^¯<òHšG¶‚;i½‰“g¼9³Ë=ÑŒ•¯qH1ú„üDŒó”úý~ÁèâµÐÞµÜ[155•¶-c€s>x&ú‚®ÓÖ½ 6¬?Î!²1bǽÆ6`Á‡¬ô¡hµZñ¹Ï}.î¾ûî¸òÊ+ãƒü`|øÃ~Öú3)Ï2! û´8Æ@ÉÞ‡ˆ‹› p”i7ºÃ²X¨ ÞÙ4rÏ=Q0Ý19ذAðìåqX4/ž?55•äÙi?àŸÛqÏùšž.ŠåÝo@Ž(&ýs-uA€ò8lÚE=£Ñø(LƲÛí¦c†¶¶¶ /93épèÛÖÖV k²wÂÞ([¤]è;Gf¢xð<`·E”gå^Nj²K;éÉ«îŸÃDF£Q4ëõzœ={¶ðnŒv»]Hàçÿáp˜žIÐ)Ï•< òŒˆD¶Ð}ƒJ@ºrøðለxúé§ÓÑ—·Þzk?~<^úÒ—Æ}÷Ý—ÇYƒ4ÇjµZ\¸p!¦¦¦baa!J¥‹G/,,¤\•••h6›‰\âbü×××ckk+å”J¥8{ölÌÎÎ&âvìØ±h·ÛÑn·ã–[n‰W¿úÕqÓM7Å}÷Ý=öXŒF£t¼t§ÓIs½È½lßÖ®o4…ñço‡'BÊårÔëõKÖ“óR©T #Üï*‡!(#{ç§@N(<“u‚5“5‡5’PCÈ?F禠#>±ÏÞ:‡íììÄÙ³g“ Ö×× ákÌÖPòŒVVVâ?ÿó?ãío{¼þõ¯}ìc±±±‘æ4sÓë‘ÃÃ00?XcrCóBdã‘5£Ñh¤õ£Ì5×\×_}üÉŸüI<öØcñw÷wñðÃÇúúz:t(8>úhê¯ìÌY{[ÐYæ}¥R‰¥¥¥8pà@úŸPG¿·ÇF<öËYž+ÈO+_ÿú×ê5·Ýv[|ó›ßü™ê{Ï{ÞïyÏ{þ¯Íš”çy™}Zð"ØëÁÆÇæ’‡$ä§§§SLúÎÎN²¼ú<{‡@PmXš±8 >ÊÏeƒx:$ ÕÏÉAr#"æ™™™84¡‰ˆB}€êt,:`–M°h‹ ¡ ‘6BŸJÇâ÷® ‡Ãèt:ÉóÓh4 =a9XæQ€ÆÔ–h€þÌÌLJ~†$âÉÀïpÚøNÙ°©ý¨×ëÉ* Q¢ï•J%%wF£8pà@ºßÄ[^^Ž[o½5:ßûÞ÷âÑGMá%è/2À¬­­ÅÕW_¥R)Ž?ž@DÀBŸ#<1SSSqèС˜™™‰õõõX]]M`¢´µµ•¬ÁXË¢ÕjŹsç¢\.G¯×‹©©©tü- µ^¯G»ÝŽˆ‹ï iµZ±¸¸Õj5–––âá‡NÏ»ù曣R©Äc=–޵†TqÄïË_þò˜ŸŸõõõ¸á†â‰'žˆsçÎÅW\óó󱺺ý~? Üëõbuu5{J8Äq{{;²©©©xúé§£^¯ÇÃ?gΜ‰™™™¸æškâ†nˆn·?üáãäÉ“…ch»ÝnòF¤Ñíˆñ1ÚŒ% –¹É çX˜£üšÍf¬¬¬$ï”=Ýn7šÍfò(öz½xÝë^WxŸ D ÍcÅZng#cO¸ò†8ãÙƒÄ@x ˆÈ~{{;NŸ>N'>õ©OE«ÕŠ—¼ä%Q¯×ãˆ^¯—t‹µÙk‡ÉQ³ÙL^—^¯£ÑÅÃ#F£QÜxã)1žïÖÖÖbzz:æææ¢T*¥Séx)iDÄUW]?þñ¦ýwR&eR&dß–Ü¢ËÿŽÏØcE%T«TºøîÀ–FNÓÇ Â~“,²Ãºçll:ö.°íð©=c"0;;õz=m~NVåemlF€lúJ3ÀBž‡ÂÆ‹¥”p¬¼#,ý~6<!® é½&lðœnyp(9!333 ¸l#úGߨÛÉ÷"êsÖ{Ú›ššJ›tÄÅdÌùùùÔ~<3ÏñÇšyðàÁ˜åååB¨!3„2ŒF£xÍk^+++ñÔSOÅñãÇ£Z­F©TŠ………¸þúë#"âÔ©Sqå•WF¯×‹'Ÿ|²àµˆˆX]]M€pee%<˜ú²½½tîСCIO.«v»Õj5Fß¹¹¹D$Y ±´´”ÀuĘŒmnnÆÂÂBìîî&Àçc¥ûý~T«Õ˜››‹¥¥¥DÆÎŸ?qðàÁ8pà@œ9s&Ž9×^{mÜ|óÍqøðá8wî\ÌÍÍÅáÇã¿þë¿R>Ë÷¿ÿýø³?û³8~üxœ8q"^ùÊWÆ£>ëëëqõÕWÇ¡C‡âÌ™3 \’Ë8___¥¥¥”+›ޭ„¦=óÌ31;;›ŽÕ}:Í÷h6›±¾¾žÖ1ÖgäKÛ¼N=z4n¿ýö¸ï¾û¢R©Ä™3gÒ¼e­êõzqîܹ˜žžŽ#GŽÄÎÎNœ?¾°^?Êåð€LʤüoÊ„€ìÓâ ”Þ!?lÜXáóͰŠu˱Áƒ“¶ölÞˆ"Æ!<ãØðˆñ)MÔáÐ1[ i/ ÀÇ“;Bèbƒç™ô Ÿ]Û†R©”Þ³@{ðîxcÅ*Š•²Óé¤P/dŠY: #¶=>ƒÁ Åk7›ÍÂ)4&I·|ü8®ÓÞ®ˆHž(d1~Ó=ªÙlF¥R)<<2oxÃbjj*>œ¬?þx¼øÅ/Ž~¿×^{m,,,Ä~ðƒX[[‹£GÆÚÚZ¼þõ¯v».\ˆííí8tèP:ý浯}m¬®®ÆÓO?§NJcÆ;/Nœ8ý~?G¨Z´»Ûí¦P«Z­Íf3…cCÙÞÚÚŠ#GŽÄ`0HÖσ&²E®Èüü|Ôjµ(•JqþüùŒçææâèÑ£ñè£Æììl\wÝu)|g}}=É‹§n½õÖ8qâDœ?>é('öìììD»ÝŽ………h·ÛñðÃÇ}÷݈©©©øÁ~õz="":NŒF£øÜç>oxÃâÚk¯v»+++qÅWÄc=×\sMôz½”ÔŽ~bÕ_[[‹ÍÍ͸páB:t(†Ã‹ï  Ñn·£Õj¥0V«•À&uÞ{ï½që­·Æ[Þò–Fñ•¯|%‘æD­V+„!¡ÛÌQÀ«=²öª:wÍy^ä:AÖɯâ7Ï'¼pÁsÁæ¦ßi¿ç© ƒCX7¨O!Gáæ†•ÃTyž ‡µA¬:N´Z­X^^Žz½žòtºÝná­ëοét:±¶¶–—Xw½–™¼3N¼Ðö3®»n·[ðAÂ;N Åë¼ñ~ò?{†CØF£Q?~<šÍf2t±–aâ~ ?èG¹|ñðƒ£GF£ÑˆÁ`.\(¸:§NŠóçÏ'"|ÅWD³ÙŒ'ND³ÙŒC‡ÅââbA¦—³ÔqÝ´n#mŠ6E¿ÄE?Ô ´ŠMòÁEã´@?%Aó¡EP´HP A×5Ú:vT[QlY–byWÚ¥v—Kî.—Çáœ9’3óÿ@ü^óJ©-ÉòÎ,v—œyßçü\×}_÷ý\ mK¥Rº~ýºFGGCÇÀÀ@ð.öšÍf˜occc*•J¡!ÍXé™+xR$…l]êv»ºpá‚>õ©Oi}}]«««!ÛmBêçÉ ØO¸Ã%z™¨¯K>Ëßî©cNp¡àÙIë’½ÐÊþÁ;]väÏÃÀ~Åz¡žî¹`Ýa,€c¬!ž)JDØÏ”áÙ`Ów¬åýý}ŽŽjnnN‡‡‡a8ùb#•ânšF£Ñ#;¥ŽÞŸ´™’§ªæ÷ì…¾ÇJ F÷pA¸C6=éØó†×z¹4o?¬ñ|>¯@4]ÙÒüü¼âñ¸J¥’æçç•L&µ½½­ÑÑQmll¨ÓéhzzZ³³³ºwï^L’yäIÒöö¶T(~(H¿ôË{©ô ÈCZ8L9 Á*¸csÆP`Itë¼oøe·Èc ”N‚|£–x@€)ÀÀå_H¤Ž{x’zÈ €6b‰sB$õÞ~ë±2^ÚÊÏx—×@Ó‰DBõz=%2È ,'‰<“zb-X8!âynAv©ÝØØX Ìå#®-ç’»D"¡Ó§OYÄÄÄDȽŸN§õÝï~WÉdRårY¯½öZ »±X,XKé¯ÝÝ]u»]moo+‘Hï²-ÈL£Ñ¤7‘H $¤ ÙlªÑhk0ó²=88âH«[,U(”J¥T(T«ÕT©TT«ÕT(´¹¹©R©Ô#ScÞµZ- Åb±Ü?‘å'•JéÖ­[AVE¿ ݽ{7ù|>¯ññqU«U•J%•ËåñæáiÔ®¯¯ëþýûzñŵ°° ½½=mmm0899©x<®„½Ùl6š{ ±EÈËår0J0G¹Õ‰i\¹D-?ä…ÔÌzå•Wtþüy=þøãºté’¾ñoÏ{ëpéÿGîÉÚõÖ—è+—L²Žˆ»Êd2xŒsRé±hÄÊH'©Ä%o€ïî½to0d…˜#Œ6¼‰{&R©TÏþäžkêBàÿÐÐΜ9£Ë—/ëïý½¿§Z­¦ßú­ßR,Óîîn!9'{ž1<«S'Bx½êõºâñxÏý*,ø<{s†yΚÑÑÑì€ó1HÞ×} NŒéáá¡677ÃØ³· +›Í*N‡x2êéòå˺yó¦Z­–îß¿¯ééi:uJ¿ú«¿ªßÿýß×½{÷B¬ ë ÃÂO<¡»wïjooOgΜù9’ ¥ïé—÷R釴à–[–|—N‚Ž=Ý#ÖvéĺÅAÍ¡Í!y,PgÀ[2XÓ°Xr røÌ½ð /î.Û’NR¸z.´›ç;… ÑvÚ ˆøÓ~e¨#Éq7Ïu@!kþÇïƒð¾&大åôX¬óø€+.¼Ãª8??ÆàܹsÐØØXHIyõêÕkªË=xm¬×ëÁò˜¢«ÕjS,Õ±X,¤höæNçø~ŒK—.)NëÕW_ ªÃÃÃ"ÖÉ02¼N§‚±Ïœ9£«W¯†[y'wh¸\R¶]:ÖêSŸÒ;wôÆoh||\ÛÛÛ æóùàÝB·çÎ`ÑßÛÛÓÎÎŽÖÖÖ€­×ë {¬ÒžU­V«éÖ­[ KÇÒš7n(“ÉhkkK###J§Óá’9€g,vûT(ÂEŒ###š˜˜ÐÞÞ^™\LYI&“a^âe"îËã õ|@¥RI¯¾újÈÐô¾÷½O?þ¸^|ñEU*• …r£„ƒvA¾¤“ËÝâï@Ÿù !a?`.$O­ïGì ÞßW<Þ £rNÏ(È~M=ìiÈ=&Ì÷&÷øº!€çúžñÉår=ØÙlVO=õ”Μ9£ùùy­¯¯ë‹_ü¢–––Ôn·ƒõÞÓªX,”ï¯xŠXƒ¬±½½½àðØ?0(ù˜@*ðö¶Ûí˜Â=-ÌÖÏd¯ÃÀ€§ÉåÈȈ²Ùl¸8Ã…Ô¡¡!}ç;ßÑÊÊŠÊå²&&&´²²¢ùùyýÞïýžîß¿¯jµ<½xÙ·Iêpýúu•J%õK¿ôË÷_úä!-€R¾{ 88¥^·9  ð+ÜdÎóÜ“æàDæÃáÎÁÆó€<·ŒQWžÃí¶èï=¸gP/¼×³Æ {pù„$êAÔ¨õ‚¸åRRÏÍÛ´éDÈëî–MÚïÁ÷ôK&“Q§s’̽RJ@`_R°¾Çb± HÀ;544¤B¡ ùùù`Y'p{yy9¤l廀²îîî†1tÙ `‡y ¡/±p2‡óIÒ­[·”N§U¯×ƒ÷ÁA{œðXm›Í¦šÍ¦¾ño T·Û Ïg®Hê‘tLU*•”N§5??¯7n/DRÙÀ#㲯¯Ç8yg3Y´Ïû)P©T 1^ÖH<q"‰D¢ÏÎΆ8¥ÉÉI­¬¬2åcÒnßrtt¤f³©Z­v‘ë èë_ÿz³lmméàà@¯¿þºÎ;§~ðƒºwïž666T,ÃzÆbN,¤ Ùä bîZú}Ê­öüÜû±Ùlöx@¾ô­¯ö&Œìc¾×1¶ì¡Ñý‹yé{"?L»1‡ßþ=fÉÛšÉdB–¸¡¡!Õëuݹs'¬åO|âZ]]ÕÊÊŠêõzÈÜE=ÙCÜÄ¥0¾HI™·Ô‡¨¿Ïã·JbÁþ‡” ¯ãE9¹ŒåóyU*•ž8Åt:­T*¥\.Rù²7³wt»ÇÙÔ‰„‰„¶¶¶ÔÖÖ–jµš¾ò•¯(›Íjjjª‡àv»]Ý»w/È*%ibbâ‡ÂKÐ÷€ôË{©ô ÈCZÜZè@͉ÖrÏ€µÂa¹æ÷<Û=ªù>ž·˜zÝ8àÐ99¸ÄÀ!ÅÁå^—3y6+á€pD-yȤ¼?¤9Q ,(¤V·6º—…T«XбTûàZs^^,·nMæ:dnñ'ÛT³ÙÔÚÚZŠmllp‰¤a`àø•R©ä:¤uà…ÜÄ-¼Ò1€ªÕjÁJIö(êâVc@h·Û ±%Œã@l ä ‘Ëå”N§C ÚíímU«ÕžìKÌ7¤=Øÿ,pwwWŸûÜçBß[­–ö÷÷ƒ¶@`“Nœé·úRoæë“uãVbþƪë^B›¤@ä\#ÏÚL§ÓJ§Ózüñǵµµ¥ÝÝ]ÍÎΪ\.÷X˜É¸688¼©TJÃÃÃ=÷;T*•gff4<<¬••ÅbǺÿ^xA333šŸŸ×©S§tpp W^yE[[[¡Nîísà{È[­W—‹²ù~‰Ç;I_òÙ¨‘ÅIï ŽìƒnlañõtÏ2^¼‡Ñý˜µÁœ!ΆqtÒ‰LÑï7Z]]Õõë×5<<¬©©)ýØý˜^xáíîîO¬“}Ö!ã;<<è+ö%ÖžËC½ŸiK"‘Ðøø¸NŸ>­«W¯€êÒ IDATªV«õd˜óùê{?‚Ë}ïÃ3733£z½®ñññ3‚…u/ÿÓ÷˜ß½{7ñ‘‘e2ÍÌÌhssSF#ô}6› óaxx8È5û¥_úåû/}ò?œÝ ÷VÞƒèA, •Ëù€Y>µöû³£^À‡{büç›Í†8æ3›>o·Û!›‹úŒaT:HËf³*—Ë!šû:&&&ÔétT©TT.—€ {˜=, êŽÀïñ÷C\ñn Ùö[† ÆÛ#)d—è†`pæ ä‡ö#íévc&îÝ»§b±€ž[Ç<»WÏQ?Æ”ù—>W€2FüÌç.óß=hvþ>þÏüò æ^7Ö€H¹\Öøøx ãñøñ Ñܨ^.—Ã= Œ/iX¹ç²rppd0Åb1C¼%‰DB•J%Èí*•ŠÖ××5??¯'žxB©TJ÷îÝ Ò:Ÿÿô«Kª N8!ªŒ•'Ópã ë‹âû‘“FÖ³{ÜÄ!´Ûípû6u%ËI&''uêÔ)¥Ói½ñÆaü¢÷œØ3ÿø?sŠ:à‘cŽ2WÜãë’©hŸÑ&ßY³ì‘|±dÝñ7º¸ÄÔ=SÑý•w3VxJüwxn™?Ì;>¿³³Àów¾ó]¿~][[[*—Ë=ž!—¡ú÷ý\ðø9Ú“H$ô©O}J¯¼òJ˜ë¾yûtíÚ5}á _tÃE¿áÁðû;Ø 0fà8::ÒÔÔT n"oç"M<³Ùl6Ä„´Z-]¿~]sssêv»zùå—uéÒ¥àA&6æîÝ»š }€gˆsbttTÙlVzä‘G~(‚Ðß.H¿ôËÛQúä!-Æ~VÔìDÁ­Ê–PNO™è`p…u^ê½yÝ­†n°9ÑMÖ%ýЦ]€2'—'6ܲè–K—H\þDŸ98äó.¡þуÞÛåÀÒÛåÏ + uPp`â9pÐÇuîܹÐ&$ÜM¿x\ŒÏ4ëÜÉAP÷PÆ áä@g Éd²‡ ¢Çã!v`à8VåÌ™3Êår*•JÀ’­‡¹$)¤ö9á€Bé–mÚ•Á1ŸY o57èo÷Tøîñp9— }ô£Õöö¶–——U¯×511¡ÕÕUmnnrÊûá€UÚ!u¹×þþ¾2™LH/ì7É»^ž>3ï?öoµZóþÃÃC½üòË!fâ•¶Ûm•ËeŽŽ*N÷xñÓ(ie|ßÊbͼpòîÚã.ü¾ÆÃ½g¬GÞÏ|…|ÐG.áó÷0Ÿs›ÏWÖ’‡;Ã{ìÌYJ³ÙÔØØX¸“%‹… ƆùˆF¿^¯÷\T×h4BÚßd2ù&V»}œÅ+—ËéÂ… :}ú´–——CÚg72@$…õÀšâ’:€´§îvÒè{!mbÒgÌ7'ÿxwÜXOêè{…¿Û Q™äááaÔ'ÆÂ ^ú¹¤jˆúÒ—¾¤R©$vÒIZ`÷h².ÙÈE;]Zq|þùçCb'ì>÷égÒ.“°ÉT»Ý„$‹¯†Ž\.§|>¯õõõ0¾$KÀðQ¯×ÃÍææÑÑQåóùî:—Ë…;wZ­–uóæM­®®jrrRét:xè0ÐÍÍÍ…ù%Iù|^³³³Aº¾¾úùÝ.}H¿¼WJŸ€<¤ÅA‡trè:øå€ñ Àärˆ(8ççHe8p9ÄyæÑÑQ¸\‹ïðN· èÝSáY¯šî}p‰…ƒG@Ž[,y7 ÌãamÞO¼ í5Vd?ðÝ#°xI 2þíVy·Šó=ž¬$ê |Æø›ŒH?þ¸µ¶¶¦ååemoo«P(èÑGÕÒÒR$ÅJœÉd444ÒïR@´²+!'ó˜—èÉ `íÞ?ï#¤!žÏ ÷x`íf.;a;<<ÔÎÎŽ²Ùl˜·Œ¯“H£ÇMt:žÛ›}l™ëQ`µ¦3†ÌkêåD`åïpýèÿ7íôùNL†ÏiðÑ}osÒchˆ/qR¼r‹”¥Õj)™LðJf4æ¤Ì»kµšÊårè“V«¥¹¹9=ýôÓúoÿí¿iuu5x1¨3ï¿·òPù<õDÞ×Þ7ì…ëþétNä…|ß÷U¾ïkÚ>™;ív[+++ÚÙÙQµZ ë€÷º× ãŠ{QÜÐR,ÃüaO‚4øó¨gô€t°§“¼Ãç§±ü{Qächh(xÒ¤c/ÃÈÈˆæææzb[x& eeEñx<ìI._es¹\Ø3ð¼¥R©ÝmbbB·oßÖ“O>©D"¡‘‘år9u»]ÍÎÎêÊ•+ú©Ÿú)ݹsGÏ=÷œ¶¶¶Â}I±XL_ýêWC,]­VÓÆÆ†ÞíÂX¾Ïí—~ùA—>yHKT¶àÖT—w 83<ý®Š(ðK'²žÇÆïÜJO]=Nø‹«[£ïô€HÚÏ3„‚ø.ŸóßӜހ^'lÔ3JÒÈÂÓéœÜáAÿ<à"Øn·¦ 2—©¸•9R¡Pm¾}û¶âñ¸fggÕl6õ /ÒØn·CúÍýýýFŽô+Aé~O‡¾K˜œ 0'‰DŒƒ~Ì „,<Ôë+þv»­›7oÂÀ|¥®Þç✘BjD€¨¯K›I=2*—Îð;÷>0— ÔÌ› íîE„lRêàDŬ¹ìßq@á}Äx0n,šúýýý`çRBÚ‹Å4662›%“IU«U …¹ÀŽï@pûàyC>Ôjµ4;;«gŸ}V£££ºvíÚ›¼ ¾ÞËîq R,'|>r¯²€ºh\âècMXðs'oÌWÖ9Þ±ž;cÈ>FŒƒ·×ëÏç{>w$õF7‚¸§›gùì25Ö ãÊ{ðP¨û{ƒñ†ðïNç8Æ£Û=–šíïïR­Vµ¸¸¨d2©ÍÍM­¯¯‡õÇÞÄxNLLLŸ.,,hcc#x½êõºR©”2™Œ–——5==­T*¥oûÛ!£Ûµk×ôÄO¨ÓéèæÍ›ºÿ¾†††ÂmçÜ¢Ž1™L*ŸÏâÓ/ýÒ/ß釴pPzúS·ŽºÝ1Àív;X5]RÃa ˆÔ^œÜð·(aÑv™‰tm.}@B€ÌÂA¯ê P€¥“·öò3$Dtx—[y/–QÚàÀÀã=4àap Rˆø>®+W®¨ÙljwwW­VKSSS!ÇýòòrL1.NG“““pbõÄ#å–Zäéééyiàmdd$ŒŸ[FT(T.—HuYF.— cìv3þôÒ$<Ì7ú³\.‡\þîˆÞïÁ³ƒÈ@”SúõÀàÝ€. kÐ))€bæ&õGHF%}>ŸÝ£hì¹lÓëír0óy¿œuÍséæ²ª\.ÀõR>ŸW"‘P±X ã]#N‚¨K§ÓQ©T񮮠vvvtþüy=ùä“j4ºwï^!£Ý¤YoNúØÇÞÊ;äÀØwÔ³T ©!¤žþ¥Ï¼ïø³Ù Æ÷¸´É?ï}â˜XìDb‰Ä4ìCN®¢úÇx°7C’>®³gϪÓéhiiIÓÓÓºvíZX‘Ö8—Ë©Ñhôd¬*‹J§Óêt:!^äþýûaý ݹsGCCCzðàAH×Ýh4”N§µ··$p\öÈžá^øw»ô= ýò^*}ò–hŒ“ku£R¬_nE¬¸, ÎÜë1á`ôÀO¬epÉ÷˜¸e‹º|ÞÁ¡ê2 é$×µó<ßo¿ àA]ép"ñ:<<ì¹ç€ ÈŽz9 †(î-pÕëõ@°HŒŒ„gÒžB¡ §Ÿ~ZFCׯ_×ÐÐPð„¼ôÒKÚßß×ÑÑ‘fff´³³£f³RprÑób½c0W«ÕzH [[;Žöööœ€lþÒ鴒ɤ&&&zÔÞÞ^ˆaÜ N,éGF…¬¹g¢Æ8C”ÝSá1.d^“¡Šyá4cäÞ(æ5sš JžõàÖh—ÆDI2 ÐÁ¢§c(ñyÊ[øŒ{(ñ†¹õ›zA¹#‹x³y|ó}>Ÿ×ÑÑQˆï ŽI=É |Ì ›±Ø±T'—Ëé]±XÔþþ¾¦§§õè£êk_ûZè/¯»ƒrÖëÏÇ) “»¨Š=‚ŸC¶!™î5ôï8˜GÉþ øöK5}ïqcP”P±1ÿœ¸8i¡ÜË„DÒÇ„>GšèÉ,hõp°Ç²/@ ¸”õ†é]6› 2¼<ЩS§Ôjµtþüùàíyþùçutt¤ .„1®V«J&“:{ö¬ªÕª†R©”nݺ¥±±±pÇK­VÓää¤677C=é›J¥"Iš™™Ñ©S§![ÖÊÊŠOî°ÙØØ—V«Õp {I³ÙÔÜÜ\V7ËÛE@ú¥_ÞŽÒ' qáàõà Ðã² –fÿ½Ë¥8ÜVÜ´Ìáî2‚V-Èq8Ð=“‹{,uù•k•¬¸ ¨t¢S¦}®'Ö9„·†ò|éÄ»â–K?ð$…Û°]Î#ÜæËÏ3Äãq¥ÓiU«Õ}<€””CCC!Љ…``@‹‹‹šžžÖk¯½¦µµ55›ÍpÃÚÚZ ív[kkkJ&“J¥Ra¼=e1õ#XRyt Þvuvpp f³¼'•JEgÏžÕÚÚZ¸¥ybbBår9ô; /ú^æßÛâà`J ò1¼K|ß½i\é$ó}C¿à1p ˆ„ / q ÑØ'î´Ñµñ^o'_æ8uué˜g¤óµâsÓcFX\PI›}¾B>ÜCH*^ÖT¡PP&“Q³ÙÔÞÞžªÕª422¢F£ÚT(´··§½½½Z‰DhO«Õ ^Áááammm… àééi=õÔSzî¹çz¼¾0O:ã‹õü–z—Ô¹—€~b]cØ —ï¼ëîub]ð̽½½žD È­h3ãK=! qÞżcÎCÄØ3!Ãìyx/Z­–FGGU©T”J¥‹Å°Æ1¬0¹cƒz¸ç¼Ý>N¯L¢Ÿ“ôS.—ÓÙ³g599©ƒƒÝ»wOÝn7ÜÁqæÌmooëÒ¥Kºÿ¾b±˜òù|}êÚµk!ŽìîÝ»ª×ë* * Á³133£x<®¥¥%MNN†u022¢‰‰ Åb±åoww7xE …‚J¥’ …‚ƒác||\’B M<W©T $›5ÉüûQ,}RÓ/oG釴`ÅAÒáp׿K@Üêꇸëù£÷qðsߤ90±|GžË¶ð v¬Å~^­V{tûná$8¨m4A&Ãp)ß…èaå•NR–¢¯ç¾Z­,ÄxÆ©í4e2moo+“ÉhzzZÃÃú~ýº¤c‰ÖÑÑQД»ôhddDÃÃÃ*‹!&Â144±_ÞHà'ýM0,q!hý‘´Ûí`•Ïd2J$Á ùµ¯}M;;;ÚÛÛ €ýÞ½{=cÅÜs+µƒ-IÁä Œ:ìï²)I¨µÛ'ðÏ»<ɽ‡î=ˆÇÓÎ"YcÎ@„ñ*¹œ‡9L2–túŽ~Œ¹ež9ÄÏ ðŒNç$抹‰äѽ)|ú`xx8\²FLßå^dį®®*ŸÏk||<¬—ííížØ±ãŒHCCCaÝ0?ð´AŽ2™ŒŠÅ¢T¯×•H$Â6ûØÇô­o}+Òz½ȺJ³Ž\z…%“{XëÔí±.§£O’Édøœ{6Ý»†Ü’Œ…± ˜o\2˜ÍfCì‚hˆ«QÏ\Çš¨V«Á“»··§áááÐ/NdØoY_ìCk“L&U¯×Ã|Ä 1882™!u‚¼ (—Ë)™LêÁƒZ[[Ó‡>ô!% =ùä“!9„`llL…BA7nÜs.NkuuUñx\ýèGµ¹¹©ýý}ÍÎÎêÆ!+ã¾±±¡ááaMLL„¾ËçóÔòòr 재¢\.‡3£9Òé´677($XýÒ/ï¥Ò' i‰ÅbA»,éM€ÅQ¥“ìL.[ àÀ<>Çó¤"ôïu@–㞀›ëí]çM=ñ¶pÀàyq‹!Üê ér)ÉÀÀ@OL‹[„¥“Ëö\Ž‚'Æ=6’zHÄÂÓóò{¬ÕxF „€¯¿Ëϰ`û3FFFT,µ»»«ééiÍÎÎjffFßþö·µµµÈ™bjµZøã@(—ËÁ* qÀ⊂ÿL&£ÃÃÓ>èd2™Ð.æL,Ó_ûkM¹\Nßþö·u÷î]Åãñàá`¼ý}Ro&!ˆ_&“ R²xü80䉠QI= ™gº4‡yî·1»T‘9*£™™™ «ÕªJ¥R—ЋeŸô´ÞïnùG¢U.—{Ó=Ž€ôȬUæˆ{d|I' —ö@Êc±˜Òétø댺zêUIa.°œ|ô©+ñ³³³!&P<88¨|>¯µµµ°Gø|cž!ãÚÛÛ itÏœ9£ Õj59sFÙlV‹‹‹Z^^îIDàÒ<êÇÜK&“!xÁ³¹¤ ÐÞn·Ã½ìwC†ÁÀÁ(c€ÇÔ×Ïõ5Ϻöÿ;ùŒ>Ç {¡§æ…°@Ä™—ŒßaÍ2Žd÷ê0Omá¥tÏäyzzZçÎ AÚ+++z饗422¢Ç{,x"æ/AãŒW©TÒW¾ò=úè£Êçó* Z[[S>ŸW©TÒÈȈfffT«ÕtïÞ=-..†ô»âÊöööT«Õ‚1`hhHårY•J%¬=ÆÐå©TJÅbñMñ6“““!™‚Çã½[åí’`õ= ýòv”>yˆ <ƒÇî<·¹[þ£ Ÿ,N®]–N¤ ¼KŸÇ=Š8¨ÑL;Pt "ž± ¾¾»æÞcSx6€Æc8;ní\xýÜkõ”x» s|޶ÓF‚ð‰%á;¼Ó­÷ à™ÈÐFÏÎÎ*‘HhjjJÏ<óŒ^yå•pñ}@?aõGf(Ëd2ÊçóÁê7!‘Hôh¼9l!_µZ-XM˜oÁØà…V¥RÑïÿþïknnN›››HaõfléŸWô1` PÄ\Pñ.'µŒVLoßsÙ{@ø`ŒËGGG%gÎÂc”  * òêcNûf´ŸgPg—Øàµq/—.’0íß§žÌ?:¤±‚»÷’µÎþàsÕc’677U.—µ··§ÑÑÑðy.Æäò6ú£V«i?ÈyV꣣#­®®†ßÎ{ì1ÍÏÏëæÍ›zðàAX×>÷|ü» Ö3íuR‚'ˆßñ ŒÎ<–ˆ}9j·{’"ØåRx7P0‡}ßÄKÁ¿ ˜F®É2Ö ó‰q«×ë={ýÃ8ù3ñŒ1+•Šƒg`ppPþð‡Ãó‹Å¢nÞ¼©µµµ`|˜ÕéÓ§õ /¨^¯kqqQ«««šžžÖêêª~üÇĉ0Ÿ¸{£G¿ôK¿|ÿ¥O@ÒÂaâ™Ã3‹[9X¯.àbwK–G@3žÿ>@PDáГÔósˆCôsdnáÙ€m×¼»D `Ãw!'ô à  ár5'/´‰ïüp—Ô”=Ó‘þô9ïtðŠ\B ÐåË—µ··§o~ó›ªT*šžžV©TÒööv°¼~¹X—Éœs¹\qdœÜÖé¥;aô¸5Ûív \OróæÍž$Xa‘ÁD‘Hy¬õb~:PóåR#ÚàÄØ­ÞÞ—þ{H?ƒ” Cö“ÏçÕjµ”ÏçU,0÷ñÅÛäëÉ=\ô1À‡¾dNy@»·Rëq èòù? bæDŽBýh·|ú O¡“Eæ½$¥Óé 1BNÅÅ„Xü¹²Õj;88¨l6<Œ´ggg'è÷gff‚ŒËôÄÄ„~â'~B?þ¸>ÿùÏëþýû¡.Ä|ÐV÷Ò:9ƒx0Yh§ÇˆðÙh|™)x4M-낹³¿¿â+|yl‰K.©+Þ½vûøòF¼KŒ õaŽyLÜààq5%$˜ó8g]rnàmæüÈf³ZXXÐÙ³gU«ÕT(´ººªëׯkgg'Ìãn·«T*ÐGFFÂíâÈìÖ××µ¹¹©ùùy]ºtI[[[ªÕjAr–ÍfÃ^J\Çööv¸Û¨T*)•J…‹oݺâ9ÜÛ$I<ÐÀÀ€fff466¦Z­‚̹2¿½½-Ianº¨Ùl†ûC~ÊK=ú¥_¾WéËn‹× IDAT‡¸D‡]^ä(‡Ÿt| aÝ”NÀ–3wïS<ÀšøOêÒ@ïN²³P7€ ÝA>uŠÊ\6µJC*\òC6êë-@ °´ºFÍ÷ ;€ºD"‚sc±“L;NZ›ÄX mH§ÓJ$ZXXЙ3gtãÆ ---rdLæè±¸»÷«)­Ç ` u/žéär1¡R¯®ž9´³³ÆŽ6{JåF£´íî…ü1ŸHëÚn·pK2àÓõàN<Üb줒¹ì^®(™`.¶ÛÇ·wãðñÞX,ÆÄ=Ñ9ዹ×ö0Çœ@»ôàÈx{ÿ1ŽþoÖ±Çh¸ç‰yL¼ñN– •’z< ¤gå¢È|>æ^«Õ w²¸ç•`o'%ÌïËr¹ˆÿÊÊŠ>ðèòåËÚÜÜ ëŽ~b_ÁÀ¼p‚G»‡“ŸûÿÓé´Fð˜Ñ‡ô¹Ç«ù»W=4¯QÙ)…yç^bÊ<ˆÝÓQGç–K\ñz+•Jigg'x|Ïe~¸Ç¹NÛ§ÉÉIé7ÞЭ[·´¾¾dÔ‡~}ñÅuõêU jttTçÎ îììèùçŸ:N‡€q<óóó=’´d2©µµµÐwÈ­ˆ3ÙßßïÙS§ÕÕU9s&?!Ú©T*ô s›ùŒŒ‹¹ð£Xú¤¦_ÞŽ2ð½?Ò/?Š…Õ%Ò‰¼ˆ˜ÃŽÿ#ÇápŠ^Àäò)—!9™¬ùegüνøø–Z?´A꽕Ý&‡¯ƒ 0u@sÂaL8˜¢/öz¸· @É;9h±PJ'Ù¹\ö ÈWHã‹<‹Í—^zIÕjUårYõz]ÕjµG‚B‰Çã=)9‡‡‡ƒ¦œyàcEö~)L2_¼ Òq0uÀ­ËØ\j‹Å‚|†¿9ø½üg€rêÁÀº•¾•TÐßYt©Œg€ƒ€9yf>5›MÕëõàéqPÇÜvk²¯Aæ²Q=ÅûçùÚcíÒ'‡‡‡!3ó„¶;¦ÔicNýIËZ¤ÿ©k:î‰7Ùßßd9?NPP,ð&éÏ`>â@úÇœ«×ë*‹Êd2a]e2ŽŽjjjJ·nÝÒw¾óž¸êâÞéÄ[Ægè[ϘÆ{k_»<‹Ä~¦ï[ô{_ø¹Ë/ÝÃÅÞáûcL= üÔßÇŸ˜ž9¤}…BAW®\Ñ¥K—ùð@sþæyþ{ÖG³ÙT£ÑÐÁÁÖ××õ¿ÿ÷ÿÖÍ›7µµµöæug?ñ5²³³£üãÜâñ¨Õjá¬Á@×4—Ë©^¯ T½^1‰rö÷÷{R83ü~ n·.Ê$&.ŸÏéÞá¡¡¡°ß‘ȃùS(ÂÝ6ïvñuüƒüÓ/ýòv”¾ä!-nÝ÷C‚ÃZRXÁØÄð;@ÝKàúbD¬rþ=êà‘ÿ»u’ºøEwn¥“ƒ”÷`9vË'` :Э˜néæ÷.ãâY/üÛ=+x3\‘@G‰à¤Û톻> `–Ëe½þúëêtŽƒ²©KÔ£åoooO©TJFC¥RI™L&®hÚL.Þ¼aXùI)ŒwkooOsssÊårZZZ ßI$!àž4Àx1œd8hÄ[/N"ºÝc©L±X óÏŸçs‹yB9p(ºœÅ‰Ï3þÊ\Æçò$Æ—uÀ é—·£ô ÈC\8¸8Ü€Iê±rÈbAâû²ÜbâêüŒÿ»”ŠƒßAÐ[4e®•‚)pÔ«Ãaå½<È‚h§ƒ= wãàžïEÁƒ{x†[:=F&ÚŸÔ›ƒ Î!ÊœH$ôì³ÏêÅ_ÔÍ›7%õJ‹< ¢)»ÜŠöB°¤7[ê]š°EßívCà&Þ,ãÄ!K!e-R·ÖzûéG_.wñïp`¹Ï'¡>2‘…+jýskzt¬ùãêä^:¾Ï{¨»g@äk“yIà9Ô Ká3îyñÌU´ÇcŽœ˜² êáÁú™LFÉdRÏ<óŒþÊ_ù+!íw¿û]ݼy3ommõÜš¾¶¶æÒÖm„ÈQ?>ßn§ÃÍçó! yooOëëëáþÖ˜{r}.G×Gœ´³žèˆ‰“VÀ¸ïæõ§ù›µŠ1Àç ãÊ÷¢æ!ÿçó¿ÝsðL^ùöíÛáBSmóX%'H¾ÿþe^öfŸïüŒ¹æŸ___×éÓ§U«Õ411¡õõõo‘H$T¯×éÄðAæ;ö8˜úÓ.æS2™T6› Þ7 fGG'éÁ!-R8³ÈòU©T´¶¶<?,ž‚–zôK¿|?¥O@â288Ž£›‡*‡žÿÜõÒnõ“N¼nµ•Ôs¨cá÷ÃÛ­Òo“±ÅAŸ¡¤WŒZ즮½æÐwÙuÄ"J]£‡¾¤°G»jQ‘ƒC+ ~~(´ùn”„D-XB³Ù¬fgguûöm½úꫪ×ë!¨™ˆK©häÂëﱌ‹Å±pàƒÕÙB, ¤css3\J788¨T*¤'ª|Ü<‰À)ê½pñvz`µƒXî‘ Ý“pw çÞŠ(ÐrRI}œ0¹W‡ïú;!^æ.ëÑïžp%¼þ]ŒÌuâtÜã‚· Ù }λoW»Ý’À\.§gŸ}V§NÒêêª^}õUmllè?ý§ÿ¤ååee2u:ÇÛ¼—ŸŒQ.— $™6LLLèüùóZXXÐÍ›7µ²²¢jµÚ³¦}^Qw~æÄ‘yõ¾1Þ.½¢¸§‹~p# u` Ü™GüŒùàûdt>zß»͉…ÇÞð\÷⹌sppPÅbQ•J%Ô™5F ܨ×0º¯3N'äï¥}Hð˜ûä±XL<¤ ɪV«ÊårÐöövX‡¨T~xx¨T*¥©©©pžÐ÷ÈòHžÏ絺ºæ|©T †Ö2ïå"Væ5I?†‡‡ƒç$Nk{{[;;;Áâí{·ÊÛE@ú¤¦_ÞŽÒ' iq Ððƒ;jíò Ó¢D—Ryà¬Ðn©ØF-Nn<­ª[¯)Jñbx¯[7£R—›8)zÉï‰z†Üøï£² ˆ“÷«$^ôE¯#€eppðM·2ïïïëÚµk=ñ,€ÖK‚¿éWú Y é‡!7X7] N"•ñ ¬ä€ Ò|v»ÇÁœ…BAív;Ä0>\÷ïàÌûÇIf»ÝÀ¿Çó8°tBêãÍÏ\våcìëå­Ö’ƒ]ú›g»%ü­æ¥[í©l—ø¸¼ÊûÆÉ{þ_÷\º'*«q’ï .AŒÅb=—Öëu}ýë_×ÊÊŠ®]»¦……% }ò“ŸÔÔÔ”>ÿùχàq'×@Ÿ (›Í*•J…9 @ÇâÝét4==­ééiµZ-ݸq#¤ƒeŽð\Ö0ÏŽö™{Á uÌy7®°®ÝÛáóÈI½Ï—húš÷¹õ49‰ñù‹$§ ®NŠè·æû% ²’J¥ÂmäNäùœ§ÛÎ ÃhÛ¢s>“Ä{},y§Ï5úÅÇ:ªÏw/ }D_8 wÀJ_»×Åçhú€¾ayÝü{nÑwóƒÏâcÑÏhó;Žîܹ£Z­êûÆohdd$€\¤*>§½>åÁÁÁpQ_, –j¼6/^Ô¹sç´¶¶¦«W¯ªX,ö*÷¨°¸uÚ ®Ë’ØœxEûÈ /Ì Úâcè@Ý×1sÕSDó·×ÑɯßãÞ3êCÿa¥wïuó}”ùîÒ-Æ &uö9æ%÷ÄÁ°§S_žKý¢gŒï¿Äq{<ë~ÚÙÙÑ£>ªT*¥J¥¼a<¢‚œmffF»»»AZÖl65::ª………à&^Rx7Ï?uê”uïÞ½§Öí{€s¹œÒé´411¡ÍÍMU*¥Ói•J%½Û¥ïé—÷R釴pà¸Àµî¹UâÀD:¹TMêµÒrpcA¸¨“¤7VN ¢Ö:|üßš[y6R ¬xÔÙ¥a.ÓB^A[).Ÿñ~q0íVf/º\Ræ±)€Ù¨wéÁèè¨.^¼tõx,¸ÏõÀ*ê}ìRœbtï râãË¿‡‡‡U,Õh4‚…–g0·ð®Ü¿?üß½4HîˆSñ÷¼ uÂæàÏŽ-×ïK½ÙÒ˜{nŒz]|,£Ïe(Ô‘:{ sÔÅ=;ŒßÃƒá€ø­HªXæsÀÎÏ|-9Èô5ëñ\.eò{#è¿F£î\ø£?ú£0?!È__¾GÄb±žËÝÐôãýxòÉ'uáÂݼyS7nÜÐÎÎN¨¯§t’fÜ=? À}ôß´%Jf¼~¼+ öü9>†îea `ôƒˆ™K:aÉd2%nÞØØ€=‹…œü\HÆý ú‘~B¦@_˜ |ž:aEÇbLÕF£tý´•Ï»÷‰9AV#Æ„ñët:oºó#j©g<˜x}(ô-wpH'^¼h&Æ‹9ë–eêUÕÓÙÒŽ¨•[R\uˆ{qü³6/Ì=A^z‚T©T444bb±˜FGG•H$ôòË/kii©ÇCåÞ bg½ëÂ… jµZzõÕWßäé ýÑxߨ?Œ»±ƒ¾ãw<“ö:A滾2ß|¼Ý{9an:éôýˆŸ91uÃO»ÝÖüü¼©W_}U###×ÎÎNßÛÛS¥RQ­V ¤€µAªm÷Æ...ªÕj©Ùljgg'Ä—ìïï+™LjrrRÛÛÛİŸ!ùºuë–FFF4;;«¹¹9•ËåÎ<™L*“ɨÑhèèè(Ü Óh4ôÃPúÞŠ~y¯”>yH @¹Ž[h|D=!šnÝv«®[·\wÕûMãDü?J„\JâÞ¿'y•K¹ž_:_ñx<ncat ëAŸ¼S:!?.áps0LßQîE‚Pü°w9ù懇‡õÝï~7¤°œ™™Ñ½{÷BÛ>Î’ä¢<U¤íííÆÉÅ!ßn·ƒÖùèèH»»»=wb¸…Ô-åî© .îÍ oœÀâ]ðìkê,Äb±àM‚,9q’íÞ4ú‹H‹§ ¥-4ˆ£{ˆÜCÂsð$y6"êëž“(ñTû2uKˆ8÷ö±†<ÅjÔâïóÌeV´ "ø“²ù¥”Ô²´»»«ÍÍÍžË}í»ÜÒ÷,ê±ØÉ2‡‡‡j6›ÓÅ‹ÕétôàÁ½ñÆa.Óÿ´Ó÷€êùóçuþüùáhjjJ_þò—C;Ýæž{ h·'yp/Ïr²éföDî¬pï­ËÝ(")ìmÒÉ…®nð [ó†±õ}µÝn+N+™Ljzzº§¥“D šh/cÏ»»ÝnÏ…~ÄFàíb<ðl¸'Ð M2™ ™¿šÍ¦ž{î9ݺuKñx\SSSª×ë*•JŠÇ/$­×ëȰÒétêƒü žxâ ½ôÒKºpá‚þâ/þBçÏŸ×þþ~BÏåršœœÔÜÜ\ˆý¨T*!QF¹\snxxXù|^ÙlV÷îÝÓì쬴¹¹îÁ{½Cª_ú¥_þï¥O@Òâ}X—+q¸E½ ÑC;š•…C×¥,Xä]^ã;‡­[w£Ò/XÞÜÏ;GFFBV'ψ$¥z¼G2™ @ K­ËÜ£ár·rbEsÀJßFÓ p¨3@7må÷!íÀÀ€ÎŸ?¯­­­ ·ït:Z]] 9õ9 IEI*K¤X¹È«\.‡€ßZ­¦l6ƶR©ô!Ú’Ífupp R©Ô3wsÚɽ Œ{°Ü ùŠz„û¬2™Œþëý¯=— I½©¨)È4}?X3?y–ï‰ì'eÖ s’â{œÇp¸‡¨Ûíë?çØ³œã=Å ÅØ% ­­­õHÓ|MÒF Q b*• Ä…q«×ëa¾à±eŽúE®¬¿Ì²Ñhh``@þç®N§ˆ"·‹«\.‡ËP¹¦V«…ËXs¹\h×ììlˆ¹wï^È¢E°'²îïïkjjJÝnWù|>Ôíµ×^S2™Ô©S§Âž‰á&—Ë©Z­êÎ;ºxñ¢µ¾¾þ'í;[¢²Àäsû¥_~Ð¥O@ÒâÙ‚8´ÝjíÞ.ûâ ßÛÛ ÀÒ­uºÒ èçÙÒI`0÷Eˆ<•d§sr?ÏäÀvë¹Ë- r({†'d¹œÀª×Cê•|ñ9.ðã].£rÐæÏq™‘Ë+$…ô·³Ë—/«P(è•W^ÑÞÞž†²ÙlL¡®×ëÊd2Ar!©Gvu©\&“é‰{À*è}`àøÒ-…]§Ó d (òÏð3—­8ˆ÷9CŸ#סß ëÁ³€H'‰¶| õH昻0ˆ‹ ÷ òh‡_0I}y/ÿg~:1Å‚ÏûŽx^ˆïqOÏ+@¼g$cÍŠÔ½Qî‰`:i`løœG4cJˆýpÏ„ßùƒõÜ=QÌGΕËåtúôiÕëu½þúëºsçŽ*•JXÄsàYp£sõôéÓÑââ¢VWWµ´´¤íím}ò“ŸÔ—¾ô¥Ð—ì5œèaÁÇ\bŽ8‘c¯ð1ô½¹Æœåd·rbE¼‚ï5îC†´¿¿ö¤œ~Œ,ôÉÈȈž}öYmnn†ä.ssÖ×»Ýq<ÑtÂ|†¶îíí…yä}ËšsƒûŸÓ©©©p©àììl¸ÈR’J¥’‰„†N:¥½½==òÈ#š˜˜Ðêêªö÷÷U,{$™N+•Š677•N§•H$T,588¨Ë—/ëÒ¥KZ^^ÖƒT(Bv-2ú>}ZÝnWÛÛÛÊårÚÝÝÕÌÌŒfggµººúæÃö,}Ò/ï¥2ð½?Ò/ÿ¯åOþäOô÷ÿþß×¹sç4<<¬B¡ O~ò“zá…ÞôÙW^yEŸøÄ'”ÍfU(ôs?÷sºsçÎ[>÷·û·uéÒ%% ;wNÿê_ý«pà}¯R¯×ÃḠ¢g¯r‹*ÖK¿+0 ¹[G9`‰´Õj5L€ßEÁu#á ô»%ø¼Ç48ð‰zvÈêâ^LR¯÷Ë"m¤ºEräÆÁµZ€.€˜L&577§Z­¦o}ë[áf`²J¡›ÇšGª[@]:V6› –tùáö_¿À¯Óé¨R©ÐK_áõÑää¤ …BÏÍçÍf3è±%¯ýîDR:‰­I$¡ÍÜÊŽ¤ù˜ÒoÉd²‡Ð2¿laf|i»9óÈ/ׄTó$N,˜_|×<ó qGn÷ M>>‡~žvð'QÞ.,ÃÌ7» wп—LrÇó3‹oØÐЉDø[RHÙìkÉ%\´‡:aéFÆçi¶Ð +›Í†àóÕÕU½ð ºqãFH ÍûéÇááápN§§§uîÜ9U*­¯¯kiiI+++*‹Z^^ÖW¿úUÍÏχ¬Hžù‹zñÇe˜Œ1ÆŸ—ôă›Èìîíí…ùBßt:нÏ Ý É©T*am¸W–ÏB¤è÷\.§\.§Û·oëÖ­[À!ñcÏGRE}¢™y®Çظä–vsw{ k9*ÕÂÛ211¡L&£Ë—/ëÊ•+ªÕj:{ölðbI „0NBS,5==­ëׯëÿøµ²²öÈcÇCv¾|>¯±±±@À’ɤòù¼–––tïÞ½ðlÖ*ÞÆ„Xííí@bÖògögú›óojllLÃÃúpá‚>ûÙÏö|æÂ6ýòÞ)}ò”ÿðþƒ666ôÏÿù?×W¾òýçÿüŸÕl6õ“?ù“zî¹çÂçnܸ¡}ìc:::Òþáê÷~ï÷ôÆoè#ùHÈöBùßø ý“òOôwþÎßÑ—¿üeýâ/þ¢>÷¹Ïé—~é—¾¯:qˆPPyÀ Àh4ˆÛŸã!àÍ¥G5\Ú|+ ™ƒpÉ÷)€ˆ`ÄëM;‘¯ qv¢Åa988¨|>êÂ!“NÈšÇW8©}S¶,¼šx–ƒ6›Õââ¢fff”Éd$G·P8´Ûmíììôü´3‘H¨P(„>tHL U€ª,²m é§~ê§4>>®n·ÛCVb±ã‹ºhcé1~Lj'4ØßßñÃÃÃaì°˜ÜêK*?gƒáÉ ˜ÏxvR©Tøã’*Æ”ÏK'©Q™ó¾>hÛÈÈH xš\7ðn·Û=ÄŠqDº—L&{8óÐ˘P/¾ÇYpÀ ÀôËÔi$‹uÄÜç-€ëÂ÷˜"Èó miµZ!xrrRÓÓÓšÕ•+W455¥û÷ï‡ùÃ>„—Ç=¯¡t:­GyD.\^½ÝÝ]moo‡[´µ´´¤öÏþ™>þñ+¸“A—UQo‚Œ™'‰DB©T*ô!}îÄÑ=2움ó¨W„±ã6»g²Î¿™çrÈõðK-ñHh}}=Ü©â±BmŸ îá£@ö]788æãáõ…$²Ùggg533£V«¥ÙÙY}úÓŸÖ¿ûwÿNúЇ´²²¢ååe]½z5„ýýý°æñNÜ¿_###ú[ëo©\.«T*)ŸÏ‡ñ7 s{y£Ñ2Ó]¾|Y ŠÇã* Ö£>ª»wïêõ×_ixÃÅ—x?ÆÆÆz$t?jåÿæùƒ?ø}ìcS¡PÐù/ÿEÏ=÷œ~ý×=(¤wÛôË{§Äº}ßÚÛ^¶¶¶455Õó³V«¥ .èÒ¥Kú“?ùIÒßý»W_ûÚ×tûöí8ïÞ½«‹/êŸþÓªóoþ$©X,jaaA¿ð ¿ ßýÝß ÏüÍßüMýÚ¯ýš®]»¦Ç{ì-ëòÊ+¯è©§ž ’ À8Å]÷H_Фóóv»Ý“ÇeLlæX_˜saµÇêÅ–Ñ€L Ó•¿7€]'ä<“àk·*ÆbÇz÷h :RWúpÉû". ⥞|ÖûË5ýXv°œòûT*¥vû8cÍ… T«Õtûöí -8<A†jžM‡çDÛÂÜŒGÚÇÜà9ľœ¬x!¤ÌÚÅX·ã„ë.ÀÔS[sƒ3ÖkÚ‹—*š1‰6¸œÒc·˜Ûìx 4sÁº£/ÜbNŸBBƒx<’+¤ÓéÐþZ­¦r¹¬v»æëPRˆõX§Ói-,,èâÅ‹ŠÅbzä‘Gô /huuU‰DBsss*‹Á“÷Ó?ýÓš››Óÿïÿ]wïÞ }ËøA™‡<ÚÇ>æŸçDúØb,ð¸87Øøøxì$ÙßA’Ãû1 jjj*x—–——{RÕ2¾YܨÃÏ|ÿf ùŽ{÷ÜãÈÜpù“'–ØßßAçž_þå_Ö?ü‡ÿP_þò—õoÿí¿UµZU2™T¹\ÖÈÈH0 ¬¬¬¨P(¨Ûíê©§žR·ÛÕúúzx—ž={VªT*¡þѽ½=¥Ói}âŸÐûÞ÷>}ñ‹_T£ÑÐáá¡ …‚ªÕªZ­–2™Œ®]»¤a­VKO<ñD Ó\¨øÇüÇzùå—õþ÷¿ÿ͇ïÛX8×í×~M‹‹‹?ð篮®ê_ÿëý¦¶­­­éÑGÕ/üÂ/èw~çwþÒï¿ئ_Þ{¥ïyJ”|HÇ€éÑGÕýû÷%ƒÿñ?þ‡~îç~.,PI:}ú´~ò'RŸÿüçÃÏþ×ÿú_jµZúô§?ÝóÌOúÓaü^ÅEò¦ß®TE:¹Ü-žx%8 9dÝ2 8âàfãôÈ |–zù3¸m°ŠìŠv`}Ãè ça—.ÁâG.ïL§ÓÁúNÀ#–l€‚òf=1ýç}±sÍ:ýxEbËå´°°.ÐZYY )#ñ2 cð›!0£££äq?ý–ÍfØ8%©V«…vaA¤]Xq ðt¯™K©¨{£¢ut©™Ë£SÒÉ.…¢¿ñÔ1¶‡‡‡a|ù?à‰±ŠŽ}Oû¢óOÖcƹ ß½ îíaî{v6À,Àõt°‰õ™öPÜÃó=î€Ø—NY·±Øq02k–ŸÓ÷.‰¤O±¸g†ù•dñÏ ïaaí—J¥×44tœ6·P(httT“““=†„T*âb¸l.NëôéÓzôÑGU­VÃ%…ÄŒ0†¤ZM$ZYYуtùòå¼"º¯¹qƉžcÀùܧߨ¿|üÒétðX²1|ïp°î æéžñ"ùތԉÏw:8κf¾ùØxv-<^´•¹Gv2æ{"‘P"‘òÇÃÃÃ@>ܸB; ÞìëNG[[[a~ñ‹_Ôýû÷õØcé}ï{Ÿòù¼Òé´ÆÆÆ400 ­­-­­­…9”ÉdtãÆ Ý¼ySûûûzì±Ç”Ïç577§ÉÉI}øÃÖ'>ñ u»]kjjJù|^ÉdRããã:88ÐØØ˜.\¸ F£¡™™½ÿýïW©T Áí:s挵»»«X,¦çŸ^/¿ü²ŽŽŽ´³³óC!Áò5÷ƒþóVå?þÇÿ¨½½=ý‹ñ/þÒ:½Óئ_Þ;¥O@Þ¥R©Tôío[O<ñ„$éöíÛÚßß×ýؽé³W®\Ñ­[·ÂáíÚµðs/333š˜˜Ðk¯½ö=ßž•CnppPõz]µZ-ÄzÒ*ý r2ð8] ïÏ'…ªK:øŒ“}€8oSêÇ!êÁ<“L-î¦ç,¿T¿±œ~=@™Ãž¶»W%*Ùrðæ€ÎA)D¤ÑhhttTù|>xŸÈf!5Íf3¤®8¾-‹|»ÝÖøø¸ÆÇÇÃå^x¢Ü;°â;´³V«õ7êão—Ëxh›1œL÷‚Ñ—Œ)äoꀈEßÅžÏ÷Hg<>Æï6áâ1—ÓIê!þ3ÆÆ»!¯î sY@ Ë6D~£ðÑvÚêä™ë‹ú9è”zïüðØ÷‚2/y.í¢ÿ¸ãIò8(b¦¨ƒ¯3¤;x×ÜËÅ\`2/cÞ8¤ÏŽƒïãñ¸4::ª 5Ðþ›7oêÏþìÏtûömMMMõ$¥ð˜’ÁÁÁ¨É.‡AçÞ2¯7ýJ >ž‚½Ïå…žÑ ó9æö ÆÍçÔÐЦ§§¨vé{£ØÏ™îÁs™Ÿ{äšÍfèH°“húˆv¸±ˆ”½ÝnWËËËú­ßú-MNNê3ŸùŒžyæMOO‡ÏS×ùùyŽŽêèè(\¬xúôi=õÔSúùŸÿy]¼x1d@ãÎé8ÁÆÆ†Ö××CÿûÿïõÛ¿ýÛêt:ºyó¦¾öµ¯ieeE/¿ü²nÞ¼©;wîhiiIËË˨C’·¶¶´··§jµú—¸?¢åë_ÿºÆÇÇõúë¯ë}ï{_˜cŸùÌgB²‚wÛôË{§ô³`½Kå—~é—Ôl6õ«¿ú«’¬'cccoúìØØ˜ºÝ®J¥’¦§§U,ƒ~;Z …Â÷e‰ñƒ€Ãϳ¹DK x/ðÍwýóîùà°r°J=x·t’•gó.ïÈ$‹ŸK (¼‹g¹¼ù?däò?¬ýÿ®—Ôóî¨$Ëɇº[¤i mœŸŸã‹Åtùòå`ÙÅÙh4B ˆ§Y„‹¥ÛßR  ›œœ äk3ýÍaÁ¿é Ú•=ñ,™Çè&Èà„¤8ú”˜—y0Ï\®Ù09Ùõ3W ´.·ñµáqîIq™WT¾ä²(²~9ñ>¡˜SÜÿpåÊ•J%•J¥Ð¿&ÆŠvC}Îùg.9)ñ¾æwÝn·Ç؃7ÚçªÇ‰¸g ”{[ð&ûÞçrÇF£¡­­-*ŸÏ÷Ì HëÁ½xŒ©Ë-½?^úœòýÖ×¢fÈš6::$yÙlV•JEׯ_×7¿ùM]ºtI—.]ÒÚÚZðÎã±'ÙÀêêª …‚yä ëÿã,IúÙŸýY}õ«_Õÿù?ÿ'Œÿ¥K—”Ïç5::ªÕÕÕp—R½^×óÏ?¯‹/*NëöíÛ¤+“ɼÉ[úáX º}û¶FGGÕétôꫯêÝ.™·âí(kkkj4úùŸÿy}ö³ŸÕ>ð½üòËú•_ù]»vMÏ?ÿü;Žmúå½Súä](¿þë¿®?øƒ?ÐïüÎïèÇüÇß•:D3ó°i!ép(!ÒdD€,éDO.õÞ¤Ë!ˆÄ⣣£:E|ê‹Ì¤Õj…¬>x88Ü<•$`ÇePòÔËÁœËCø·ÚFýx¢ž }ÄïyžKp°lNLL39ö±´E³•„Ô»ny§FOÌG,ÓÖÖV ÀêY¯×Õl6U(‚çƒzcáô¶EI‡[}!5þ ïÔwÉÀž z'9Þ÷€&÷ºAN™wÌÆžùÁx3Ï ïæ¾[á!u<›ù‚t‰9çó?JŽ¢QræÀï2÷ébyß2·y–{¦ x$ø?kyïRÚŽµÛמ{0!ÛîaâÿZ¼tÄ;êÞ½{Êf³á’9—AÛív(Ži}}]wîÜÑÀÀ@ˆUÚßß±åV«¥±±±°fâñ¸ö÷÷µ¿¿¯÷¿ÿýzñÅÃÅ‹ÄZ0ž¼ß÷-')ÌiŸï¬A'ìÒ±g ríÙûÖ÷7ß›Yû.±c~ŸÁš£ï·¶¶4>>®ÅÅE5›M‹Åø=Ãת¯õaOvÒÁžÄ3Ø[êÏÞ@Òú&—ËéÃþ°&''U.—õÚk¯é‘GQ«ÕÒ¥K—B†5ä`Èë®\¹¢V«¥­­-mll’7>>®•J%íïïëþè‚§Øå‰ïõò­o}K/½ôRÏÏHb-Îq²ßüÍßÔ/ÿò/K’>øÁ*ë3ŸùŒþôOÿ4à†~é—héw¸|ö³ŸÕoüÆoèsŸûœ~ñ1üœ4ƒ»»»oúšS‚ïÆÇǃÆ7º¸wwwõôÓOÏz¨ ò˜¨DJ:ÉÐã;—“H½:e?,9´ü÷JB~Àãq+žt’ —úùAéÖZ·®:tðŠ¥—ø¨e8*m =]îÖÝ(Ðäy¼›ŸµÛí`ñ‰ÇãÊf³êt:TÄãq•Ëe5 ‹E•Ëåp»ö@Ä¡¿··Á÷îÜ@â 9‡‡‡ÚÙÙéé#¯/óÅ­óNÖ $üq‹®Kd¼¯\®çÏö¬D.ArYœ¤òP`¬¥BâÞ:æŒ{5|mPg¤}xƒû3Ýk†\JRˆÁq"à ï¢|Þ`åvÒàžD÷è¸4ЃÔlûÚ§˜KþŽááá`±vÃR+éÄs]ÃÔ ÐÍ\òõtxx¨J¥Ò¸!ÞFöŠd2©……ÍÏÏkii)\ÆÉ¥tét:XÉé‡vû8Ö¤V«);–·MOO‡ÅÅEmllèÆ=@ß½’nœð¾äùN>Ù·ø?kò…„OrI—-²¯2OñޱoúÜe_cýøþÅœÚÝÝU2™T¥RÑôôt¸ÌwDI©{W\B‰ÄŠ;aÜ»ë†bzéºÝc‰)óSRðâ& íìì¨T*é™gžÑ‚nܸ¡/}éKZ[[ ž°J¥¢Ó§O+™LêÒ¥KúÙŸýÙÐgGGG!¶cssS³³³ºuë––––ôÓ?ýÓŠÇãzä‘Gô…/|A‹‹‹º~ýºÆÇÇõøãëêÕ«a¾U«U u:ÍÍÍ)“ÉhffF•JE ŠÅbúæ7¿HλY|Mýÿ-O?ýô›0ÄÝ»wõ¹Ï}îMŸ×­[·ô×ÿú_ïùùßøC’ôñú™ŸùIï¶é—÷NéÇ€¼ƒå³Ÿýløó+¿ò+=¿;þ¼’ɤ¾ûÝï¾é{W¯^ÕÅ‹ƒ$-eô³*‹º|ùò÷¬‹[¡Ý: ¸ÄxP5é¥]°ƒéÄ2ê Ç-`þy€!sˆjüä÷@w€|ÀÔ»;™Š‚…h,ψJü`…fŸçÓ>¼~AÖMêá—½83™Œæææ‚…øððP¥R)x%ÚívÈh„ÕŸ Z— Ñ¿ƒz8ØoµZÚÜÜ|S?:€uï[vXªù¿“CIÀ¸ç¾r í (jæ;NîgüŽ9L?¸È`l¼>Nx>ÏuK§6~Ô‹àfÖôg´M.'Ðo夢 (±tÏï`MÐÿ¬ÉN§b~Ü{Dÿ3Où>cÂgQBÀóô³<˽p·¾3g¬C_ïÌýó=%º]<ùPPy^½zUo¼ñF›|`çÿCCC¡+Õ›–——U©T4??¯ååeëøñãaîÜ£Äß„,!Kc…8 óÈçñ*òAðx†{‘˜'dÇœÑ'ëóýÈÌ{S¥RÑÆÆ†yä‡Ð;_ëîµâo'¯¬WÈÄ>š#ísðt¸WÆïΩV«ŠÇãº|ù²®\¹¢×_]Ï=÷œž}öYý×ÿú_õGôGj6›jµZZYYQ­VS¹\ÖÜÜœ¾ñoè¿ý·ÿ¦ï}ï{º|ù²†¾úÕ¯êûßÿ¾vww577§gžyFßúÖ·ôüóÏkmmMò'¢›7ojnnNŸùÌg‚þq¯ûÞä[·nikkK7oÞÔüü¼®^½ª‹/êôéÓwL²þI7ßã~ÜîÔ>õ©OI’¾öµ¯õüüOþäO$Iïÿû500ðÅ6ýöîiý¬Ÿ@û7ÿæßè·û·õÑ~TÿøÇõ½ï}¯ç÷øÀ$íyH{ì1ýÂ/ü‚þé?ý§j6›úüç?¯©©)ý£ôÂç …B 2cccúÈG>¢—_~Y_øÂô÷þÞßÓéÓ§ÿÒ>9(¸“å6 "¥ýÃ7;‡$W' <×%!HùœÇQûÌßâÒþa¸½½­t:ÝØE-üËßã›+ ±òo['D¸ñ|'GQQÔÂ%]~¡Y¹\ù1^%ðè7Q×jµp{1ý%ƹb±Ø^¨ "h‚Ü8pOóñx˜s… ?ÿöªHè‘Ëó½(Èåß>ŸÜ‡ÂXÜ›á–jïu°ïUœÜ›Àûœ`ÓOôÆÇB΃÷ÑCÊüî tàk½–r \ÑõŒnúºá÷^î×cs ;ë–üæßÃnx.óèäÉeľáÄ‘ïº÷À÷÷@0nùâ9ÈщóÐÐjµZÏsÉ+Â*ŸÉd´µµˆÈèè¨ …B¸3HR(ŒÀs Ce}»1ÅIŸ{]‘/k›)@¸Ïcr£K”ó=žC?Ý#Ý»!dô»Õjéܹsúà?¨o~ó›ÚØØèÙ‡°âãîäÍX£Fß+Ðw÷ú¸g£ FšjµªF£¡v»­×_=$ ‹E-//‡âvÚéìåË}ç;ßQ±XÔ=÷Ü£\.§×^{Mív[™LF•J%xÅâñ¸fffô§ú§J§ÓšŸŸ×#<¢|>¯ÕÕU-,,hhhH³³³j·ÛZ^^ëÂuÿý÷ëĉ:qâ„nܸ¡W_}U?­í‡¿þ×ÿº~á~AŸûÜçÔívCúç>÷9}âŸÐÏüÌÏHúÉb›~{÷´>ù ´gžyF±XLÏ>û¬ž}öÙžß98uꔾùÍo곟ý¬>ýéO+‘HèÃþ°~ï÷~/äˆÐ~ë·~KÙlV_üâõ{¿÷{šÕ?ûgÿ,TÕúË©“?¼Ý¢ïà 0ñP&·î¹uÔ¿[רHû`3 Bi¼×˜ƒI?¤ýûQë.¤ÈÉB4TÈãr0ë °Ë³\žÞw©71?†200Às©TÒðð°òù¼nÞ¼žáó$iûø!'Œ`µJò;·|òs·¦;cþœ`:Pô‹î€9 qâøpà#íWsÙ;Ip¹ú³ø½[£ïs€F ²&¸@2Bþ“Çöûúˆê¨GþÞúçœÄ¢_>>^áwÞÑ/¼8Ýn·'¼ïN„Û ~TçÉ·@ž^¿¸rêï—ÔC4iΨ'Ñ ZÔh€ ÑIŸžÁ:ÁCP(Âg«Õj ôZà‘¡¡!­­­éܹsšœœT*• Ià^9ÏûV´JÕdÌ<»—}§2˜s—UÔS|Xú;1”D ¡ï}ü¼ÑhèæÍ›zàôÈ#è›ßüfϺ÷µ%Ÿì3¾ßEsOø>‰þÌ]§Ó ‘‘‘P.™û]vwwCQ’z½®f³©l6î@*•JAÿ¸0‘HhmmM÷ß¿VWWCN_³ÙÔÚÚšjµšfffÂþúøãkffF‹‹‹ºzõªôâ‹/jaaAƒƒƒš™™‘$ýʯüŠâñ¸Þxã ýÙŸý™¤½{½‰„Μ9£©©)}øÃÖ¿þ×ÿZ·nÝÒ;Ýþ"oÅÛÕ¾üå/ë _ø‚þÃøZ^^ÖÁƒõ›¿ù›úíßþíð™Ÿ$¶é·wOëŸ@{á…~äÏž={6ÜŒþ—µßøßÐoüÆoüÿê“2¬i€&s$ƒÃ—’½L¯[úynDùÒ>wðïÎ-ÖI=9%XÛ¼†¿Ç@Öà%wyV,¶çÆææfO…Æ‚…‘ƒÓkÛ{ˆ’“4ißKáábQÉ;<d``@‡ÒÀÀ€ªÕj[„_Aš¼oXuo‰D"”ç%\ÆÁ$r‰Çã! ÕC©ºÝnO©`÷èxˆƒ·úT}þ°V:Ùtrë•7|ÆAºƒ-îNÀ°¤2nÂv49!uË?Ï¥O€iBÜãý`.«CÞçºPã’7梃¾bqöµä¤% *ÝSà†H•'—Ô£€òèÒG¾ãù5¾î™7Jð¼ ¼õçž½()t#CÔÓÂó!ƒÌ­ëk³ÙÔêêªFGGÇCe¬F£Š>ПÑÑQ•ËåG¡²õû6¾FPD‰¿{O!ì>åž4ˆä< tÐI‚¤RÈD /¬iôlssSsss:tè2™L(Ál(£ëdŒµê9rþy¼~î…dñÀ@Òét 1[[[Êf³j4Êd2A6\܈l¦§§Õjíݧ’H$T.—500 J¥¼%±Ø^žÉòò²ÖÖÖ´ººªR©¤ÉÉI}ò“ŸÔÙ³guàÀ:tH§OŸÖöö¶ž{î¹ãñÄOhqqQ­VK·oßÖ‘#GôwþÎßÑõë×uñâE =ðÀ:räˆVWW500 ÑÑQý´¶¿ˆÔ$“Iýîïþ®~÷w÷/|ÆO ÛôÛ»§õ È]Ú<ñÚ¿óPÀa ^ÅCܺGÌ5±ÔüŽÍ-Çž‡á €¡N¢b€ ÀBM*vK-±¾XwÀ-êòP/ÀU‚ìÝ „ðÝhüx½^·ÄrK¯$U*•+îmÞïÞ†n·«‘‘U*•ž>3,½ív[ù|^õz½GÖx¤$õÜ® Àw/–[Ö™gŽÏqÔ" ÁsàíØÃ­¢yN<œtñÜN§³“i‚„—¸…ØÉ«WïA†üŽgº¥ÙA7äÂuß š[±u®—诃FƈlÑkÖ1äÙ ò%.ß ¶“1æ P!¡T“Â’M¥¥ýË=1 Ìåv€hdåy*>—%$Ò$¬)Š8¸ÞIÏ'±Z­â´½½­ÑÑQݺuKSSSÚÚÚÒÚÚšFFF422¢x<®©©)Õj5ÕëõžD{ä922 ôË=Äìo¶ ™p¢È¼ð\tÀ“ÒÑ{¿ƒ|_ò°IåCW½J™¤PÕìòåËJ¥R:|ø°®^½äÏ3œìxžJt †ÿ<2büCCC!_y) !„ç …PBÝÛÝÝÕÇ?þq }ík_Ó¹sç¾™J¥´´´¤B¡ ƒ†µrèÐ!åóùž *I ‰íÿóþOý«õ¯ôÝï~W‡Ö¯üʯhiiIÿãü?~\333šššÒíÛ·uóæM]¿~]õz]>øà_™û)Þ H¿õÛÿßÖ' wil²é{¼¼‡OD­~ ÂQ¢•\¢ Í-š~prp0Kû¹Üê )¸q8z˜‡]]·<ûxýæptë+Ïó0Æpó¼ÞE®FÔ3À³ÎTïdð ¶³³’«Õj¸ÜÞööv¨$“L&ø§”'`DÚ¿­›¹ àÊ-®ž0Í\¸ÇÀ­ªnÕdŒ\$ˆ§€P —‰æˆ¸gÀC”|®x§“M(2ÜÞÞ–¼m’‚ÜœL9q² <Ü…$Ydä2æ˜pFqÿÿBþ W‡þ8€öß»~:ñâ÷4äå9-¼ ‚ãžæÅ×0@Ôóèƒ1i¿4-àÔïqïk…5ë„Å=kì#teV IDAT è¥ËÐó ø{M=ô¯T*…2ÔƒƒƒáÒ8Œ*~‰g©TÒÔÔ”ÆÆÆ”Ëåtþüy­­­õx¾Îž=«Û·oëá‡Öùóç{<Á_÷¡Û¯áááp‘¨Ï=óÉøÜƒÇÃúgþð A^œx¾ dÌ @¾oookqqQ?üp¨õšø\1|Æ9e=B܃ÃXñî±¾F¸_‡=0“É(›ÍêÖ­[j·ÛšžžÖîî®^{í5=õÔS:~ü¸nÞ¼©J¥ˆ²Îd2ÚÜÜÔSO=¥Ng?¯äcû˜ž|òIår9mookbb"¬ï«W¯êÉ'ŸÔ}÷ݧV«¥ÙÙÙПÅÅEݼyS÷Þ{¯FGG•ËåT,õ¾÷½O333:s挪ժ^{í5½Ó­O@úíÝÒúä.m€bÝbnÕu0D嬢’zîZ¬¸U€$Hû7hshº¥Ð‰ƒ<uh·Û!žØûÍÿ£(Å-”nB?¤ÞKó<\ ²m÷˜8°p ±‡Kx²;@(ëàÁƒ=ßñÒXs^­V«§äe.—ëñƸ·fssó-`pá$/ Òa’åàØç0 :îJÃÏÑ#€2vK®{jÜ’.í_çòM&“=zÅïöQ«5ÏAV„¸—!z‡—†õüô÷xspÇZ!Å=}|Ï×d°ê yÕëõ ''`Ì­Ï# ïólæ6’É ÚþãdÝçý1Èßó¢9 ̵'4GÃÔüè„“FžÁxÛív¸O šH$B™×x|ïbIÃ8;;«L&£ ›T@’¤ùùùP¥ F£àý‹ç0ljD"äMy‰hža`í wè1 t'™Löäа.]o½BëheeE?øÁtÿý÷‡Ð5æŒþ;‰…àt»ÝÚ†G̵é/djww7„_±&''U¯×Õíî…Â5›ÍP•oÉÎÎN¸ òßø†Î;§£G†ŸÕÕUiqqQù|^/½ô’FFFT,599©r¹¬'žxBïyÏ{týúu]¸pA :~ü¸¾ýío«ÙljyyYÿäŸüýìÏþ¬.^¼¨b±¨±±1}ðƒ ^´+W®’úÔSOéôéÓa¼ùÈGôå/YýÖoýö£µ>¹‹á8„L°Žq˜†¸oÀPãpôPªN§’,±’qzÅáŠzN8¨£ù#F¿-˜iMÁ‚ XñÖétB¹a¬£Xý¾ iÿVtòDog,ÖRo¥'Nšà±ëþ ¬—’b±€ÀÎÎŽvvv”ËåByHæÄ-ìñx<„”A&Z­–>¬X,B0œð8b.ÝòɸÏd=pƒÜAä=Avƒƒƒª×ë!×ÇçÛIœË®¤*£!e^å ëmÔ’Äó€UÛÃóƒ÷0êáa.ŸWP"wÊIЇ«ðlúõ07Æ ñsþ4›ÍcOkÆCêЗsY`n¨ż9ào'wÈÇïP:ÑrK=DËÉ+r#rá}÷¯¾/1VÞÙh44::ô¡V«õ„Çq÷¹/¾ø¢®]»dMâz±X %²£!¢ÑŒV«¥L&H!;'ôèÙtýfãqöp 9Ôëõ°ŸÐ_i¿B–Ï „ºÝn‡dî¡¡!åóymll„¹¤x33ý†ÄÒ÷’PvÕ=åè9åt™3I*‹U,S¹\di{{[›››¬”Ëe]»vMÃÃÃ:pà@¸§ãäÉ“Z__–ÍÍMe³ÙPzùÈ‘#ºzõª²Ù¬~õWUÕjU_þò—5<<¬§Ÿ~ZßùÎw´ººªv»­Ã‡ëüƒ’òÏ;§z½®£GªV«éùçŸW6›ÕÜÜœÞ|óM-..¾åŒýI··+«ïUé··£õ È]ܼr“3@.©[Ù;;;ÁeP¤j99ô¤·ÞÀ¡ )qB ƒâ@uðßn·{@ –~8Hä¸'…1ó.¾ pqht°°sý;€pÏq¢õÌ`Ýh‹EÕjµ†ЊÅbÊf³áFh <ÔÇNØ\< š±Ø^ ÞF£€+àPêÍ·€”ñoNT˜3n¡FÈOÚZ.ßx<’};Nȇñ|¾ãrŽz²|.ÑgÆÏœútÉsð`‘•ö€5„ˆ>bÒívÃejÑ\÷Êd2™lÌ}¼Fûî2:àF¿=œNÒ[¼ív;È•ç9ð†¸ã=àY„ì@h¾NYÛ¬yòNðÒ8FNÈÙ¹ç€u!pO€‡ã16Â`¹¾v»]e2ªwýÎïüŽ>ðèÚµkZXX¸Ó1ÛoýÖo?¤õ È]Ú8̬€OÜìøA èôê'@Ýøƒ…JÚ¯䇰[¯9L±‚’,Jr,ã¤Ð# Î>eH§Ój4á@‡è!C›`>ñN8YC2™ŒªÕj¨^ã¡qèrò,’—™ïd2æéÚ-Ú€U߹×ÒMîæ¹öjµZOÅ4tp6'Ñ€«J¥rq·ë“{ûÞ„Ïñ=_{ô…þAžÝkD_¼*•¤ ûžSER<ëO ä ÂÈÚq‹7Ö}.‰s™ºÇò𤊑{JÜ;ÊØéö <ßïïàç²!ONFc¤ìêÁƒõõ¯=Œ›ÄéMMM…p¢J¥¢F£¡jµª©©)mll¨T*õx70@¸÷Ã÷ˆ ë ™‘CðưÃxwwwÃ-í;;;=gö,r"J¥R¼ÐU×W¾Ãk6›aÍ£¯‘ÕÕU:uJO>ù¤þøÿX7oÞì)íËúBΜ® étZÙlVÕj5„S1÷è|&“Q¹\Öôô´ºÝ®nß¾@>7–/--ijjJCCCÁ+ÇÆÆB777uàÀ%“IŽŽê}ï{Ÿ.]º¤¥¥%µZ­@*GGGõè£jyyY­VK/½ôR¨ºE‘…§Ÿ~:œOFCÿøÇõÚk¯i}}=§'Nè¯ýµ¿ÖËÙ³gõú믂ùN¶¾¤ßÞM­O@îÒÆìa¢7I±€F-Ò<‡ «Üòïù’Xé½²[f9 J<Ó½ÑØf';Ѱ0Þ…ë?“Éô„xð¿ë¸q ( ÚØØ¿'äÊï¨xò:„¥P(èñÇ×3Ï<ÂLGx&xä¢R©hww7xA 1©TJccc!”«Ýn«\.KÚ³À …žp·*»å0$©'\"ß«z$Œ ðî$LR¸ô\!·Ê,ÝÓÙã÷/7CwA2R©T¨¤Ä%€:BÑ#Âw˜sícœ¬ä‡Ì±A%Ý•ö¼“m¬Ð^9Ë«1á½Aùœ÷ÅïQÀ;Idïˆæ]±Ö¢áy<,è.ãÞÝÝ DÀ?knnNGÕ+¯¼¢ááaMLLh{{[¥RIÓÓÓªT*º~ýºòù| ñ9ž|òÉP´¡ÑhOÀÚKu£îéñ„pßÝ+м+º,í{_™[¬K¥R%!Œ¬Qi¿Ôµ{Q$…õÜét#”3ß»ó"›Íj||\ëëëA\¿âñ½Ü™­­­P/íß4îñàü`&)ä>xR¦E?€ÝÒö›Ø£Túè•cäú÷é#¥w*¼Wê½$Ž÷@ÚÜ* ‰ÊçóÊårÏ#$¢V«pî¡—Ä onn Èpë,!(w²Ð“¸L¨ã@3N÷>¸~H½­°Æ;AöñÜb ð$d àÄx‘-Ï@žè°WÑ"TË+ˆ9Ñrò^À%ÏtÏàà`ðV@=Ƚ3èó€þ&“ÉØøÅ¸¬ „{±Œ. ¸ôÜ*£DÖ~ƚ♬žå÷‡"Ä;ÚívûC=DÓI7ô±Ýn‡€d>xý§46@œµÄ¿™3ȰïNbªÕªNŸ>ˆùÀÀ€æçç•Éd4::HûÔÔT ¢CiﮌC‡iyy9Xñ‘c&| ï°ƒ~7`8i‚¤£gcößS<¼ rƒ¼`¨ðP6¿¤Â ëóŠdíöÞ…7nÜ·ÂS̽nÜO9#ÉdRµZ-{¼½[ù´`©öÜx|ï¢FÆki?ÂC]>žï’L&Ã:a>ñŒÐvo >‹…ùB÷ÝÚíak®‹$Ã{Èa4<5Æú¥ÏQÂé ùôýáCCCÁ»#íySñ`zY_/×Ës°¶{è¦{Ð öÞƒÜ}-b xä‘GtãÆ ‹Å@zÇÆÆ´¶¶æzkkKŠÅbJ§ÓÐK/½¤“'O†y#o„¾ºGÉ÷M÷ð°ÿa@A'ÜÃ3<<Ü“Cã{ û˜Gk‘ hxÊ|ÿsrH(k­Vë‘+ýšŸŸ×=÷Ü£ÙÙY•Ëå@€Y{x[F˜#t%* H2w/%{M"±W™ŒÓB¡¼w¹\.„ßAÆ!V‡ y"\PX(tèÐ!ÍÎÎêßø†nݺÊ–Ÿ:uJçÎÓw¿û]ŒŒhrrR>ú¨}ôQ­­­cÌg?ûYéСC:xð Þÿþ÷krrRßþö·uôèQ>}ZÓÓÓšœœT"‘еk×zΰŸ¶Ö' ýöv´>¹K›'ˆâVÇz†•Ÿ†å Kº´S2—Ù¹µØ=+Âä¡"Xí$ -Ïö¸ioOŸð `e÷Ð!2¡`>F·îóL·nºGHzk2-¨“ i?l`Èϱî!{äø©T*=•dðêÎ@õ° /„>œªÕj4Á*Iœ~4 ÀäÖ|¬Ð þ¦ño'–ŽBà î!:Ò~•0žapÇ{¢dÑóJÐ#¿[€|@£{üÀÇuPëmbÈñ¡³QâáqþèÖfž;0°wÃ=s500 l6BM½‡D"'ˆ^¼<¸‡]ÜÞÞÎÐ9öúŠ~ûøŸ×Õ«Wƒñ2;88¨™™ÅãqMNNöÜèîáWÞw—£{bIh²Ç@nÙÖÖ–ÆÇÇ{*Âu:-//‡œÀÙÙYýò/ÿ²þý¿ÿ÷j·Ûš›› å¡¡!]¹rEsssªÕj ¹¿ök¿¦¯~õ«:þ¼î¹ç­®®JÚ3l\¹rEÅbQ¹\NgΜÑïüÎïèÂ… ÚØØÐ÷¿ÿ}% MNNêë_ÿº®_¿®wº½]~ë··£ÅÿòôÛOcÌxK´2Š´¾ÄÁÅæw·n¹Å—çqxIê9HTlxà‹"ï€aµç°åçnEôD ’ž”õ1F·vE´[È4î9q˦´çy) !뇥R)Åãñ‡L&588¨l6«ááa%“I¥R) …Ð×D"Ñ+•Jè¿w°éÄ‹¾¸l d‚x†[3=œ.žÕ>þ]­QrãÖz'¹<“ þïã€Ðx艴_™‹w jbbBÓÓÓšžžÖÌÌŒR©TMÞ7¼aüÎäCì•èŸÖµµ5•Ëåoa.xgÐ1ÞÁx!¨ÞƘƒd:™„<IŽ–d¹wížRÖ‚ÿßA°_„É{Y'Œ¹Hý^äÅüó'[N†ÜûãaHív[ËËËZ[[ÓÊÊŠŽ;ˆÔÖÖ–ŠÅ¢–——{.·ô½áÖ­[*—Ë:räH'”J_Œ×½nàðæk ýgœ.*úOÎ2óRÍQo­jÜ+Œ|Ù×ðÄBvÜØBXÕÂÂB ’‚Wνd¾¦1Ê`üp/Ï+ž9H~·Û ÷¯@˜†Ö×׃ç¨X,ãç{L*•Ò}÷ݧ#GŽè£ý¨î¹çžPåŒ[ïËårгT*¥{î¹GûØÇtùòe½ùæ›J$* :räHÈ“ÙÝÝÕúúzÈÙzíµ×´³³£S§Né½ï}¯ŠÅ¢þàþ ~ë·~ûÑ[ßr7'’z슂âåC£ÖiÀ{8Ø!Hnwò í‡sñVnÙõ<‚¨EÚãô}¬†ãqîn<ÎÞ'CÚ·Îrx3€®{蟃]úË{ëÖ-mllhkkK±ÕTs¡¬e»Ý¯V«…|ú[«ÕzˆFÔ ËÿÝzëÖgía=Yàur™@”˜#·êBx¢‰Ô|×õˆÿ߉˜8óùeÎÐ1æ…?^J”ï1šššÒÈȈR©”†‡‡uýúuÍÍÍ…¹ÂÊë`Ï^÷zÐ_<ŒÒÀ„h6¯£{Š o>? Çóœh' «Ûí† â\çœ@ú³òsã¹/ŒÅuˆ~9s¯`TßøŽ{}Äû¥‘ív;”v/‹ï¾î}Þ766B>N¹\Öððpcóà•Úí¶Ö××5>>®L&£L&£±±1MLLhyyYÒ~H Ö÷'ÕÑ~áUƒtDuÔÉ¥¯?y1ìÇxL32u‚Êúqc‚÷ï„“øz½®……;vLGŽѵk×z<|ndd¤'ç(º§’ÓæóBÁŠF£ònØ[HˆÅb¡²{,ë "‚žŽŽêÙgŸU½^×Ù³gõä“OêÕW_ {žÑr¹¬­­-ŽŽêèÑ£¡zÖ£>ªr¹¬ÿûÿ¯žxâ ÍÍÍ©Ûí*ŸÏëüùój·ÛZ\\ÔÜÜœ‰„>õ©OirrRsssªT*ÁðW¡õ= ýöni}r—6׎‚>õÑXy€}!ðp P€Œ‡ò`Ár 9Ètµ–ƒˆƒÖ=(~È2V€ïò2¢|„<¸å°Æg¢hIoI@ÊÈ{Ò~÷yܾ}[’”Ëå‹Å´¸¸¨ýËíèò¡Ÿõz=Ü¿Q,{¿Lr;ãÈ€ñ0V',÷¹7Ä­ÅôËÖf/Ëœ|FC·œœúg<Ü Ù:½Á@O Á¶ùÝñãÇC²5÷"T«Õ K“Qøv¹CÂ$…þÐHm£Ñ¤ÈC£!H^‘ÊÁº¯ÁT*¥ÑÑQ% =öØcêv»ZYYÑ‹/¾Øh=AŸgÝiÞé'dÎßç²õïD3ŸÇâkù÷p ÆÊá{ëŒ5C½ßüÞûÇó.]º¤‡zHsssÊårÊçó!OÌóF îYªT*zßûÞ§‡zH«««A.î•`ù¿ïÈŸÐPèÈȽGN|L¼ÃÞ3<<r¢Ð÷úùþN~…¤ÓÜCZ¶··µ¶¶¦3gΨÓéèÊ•+=e² ±C>òLÜ+Ì»‡‡‡•ËåÔl6CùnÆ…/â ív[Á[²¾¾®f³©T*¥ .èúõë=„‡ ggg5==Êó.,,èÊ•+ú¥_ú%% =÷ÜsÁÛrøða=üðÃ!OæÔ©Sº|ù²êõz(¼²²¢íímåóy­­­ý•ð€ø:úq?·ßúíÇÝúä.mŠò8°°9 q¯†[òÜ  ùØ="Ò>˜"䇃`ä·øúw¥ýƒˆCÀéDƒwN£VIþvRä%Ïáãv÷Í ˜[±=ÄÁAÞ€ÝÝ]MNNêõ×_×ÐÐP¸‰Ù/3âƒïdÞçÒÁrT|ˆ÷' vqqQÉdRo¾ùf :ô݈$×7Ö}lúåƒõz=è¢Ù=î1cî%…P%ïûƒ>¨©©©0Ÿù|^§OŸÖK/½Ôã}ìb޼n·Û“›(óÛàï´>Ýãáž*þö< ¿HïNÆÀô¼Ÿ4ôùðbNÒƒªÕj*•JU»ÝÖ< IšŸŸ×úúz˜'ö$ï½÷ªT*ibb"Ìã¹sçT,{’¦Ýcèºëqó;—m·Û 9=P_&ÅÏ|Œ<—N§uÿý÷‡¸÷õõu­¯¯k`` '7ÈCž¤}O D)J&é_4”ïó\æÇI+Ÿ’KôØ?Œø»þy^zï ÙCï¢û”ëËöövð.’ÓQ*•ÂEs€ÔíîîjuuU±XLÅbQ÷ß¿òù|(Í3£ÍuÎ 0ýbyµ+æÆ½e|@¿X ~çIÔèäÇ Ø;œìºá¶°° \.§l6Î ö~©E'‘¹ç´¹×zggG•JE333á’T**§¥Óéà9CxPF+UýÆÆÆÔh4A^__dh||\’´±±¡—_~Y¥RIù|^ÝnW/½ô’âñ¸511¡Ÿû¹ŸÓC=¤HÚ3Ø\¼xQúÌg>£r¹¬ÍÍM]¸pAsssú­ßú-ýìÏþ¬æææBA–w²õ= ýönj}r—6·:å Äêëa²ÄÁõ*f£–Ðh¬<‡ÜóvppK½y S>.~½âQ«2àÎã˜ý`—ö=RïíÂÑp ?¤£D„ï§/zÛz·»wùÖêêªÎœ9£X,¦?ÿó?a Ñ9AîÉdRÕj5TµòÃ' ºC´Š¿÷O¬õdXdˆˆUôÀ½BȈÿ{X²A–žpíŸs½ 9˜G¶€"H›ƒVŽç¤t»Ý@ö¶¶¶T¯×uÿý÷kgg'ÜÑí¿“¨~p :ýã¦zÆäÄ Àìž ÞAɧqp‹Å”ËåtøðaMNNJ’fffÂÍöÝnWSSS.BZ IDATª×ëúÊW¾ÒóN֧߯ÁX<¼ Ù:©và•µíÄÝA®Ï#ºÍß`¬Zúâ{’ï4€p´*—ëµ·ÓéhiiI‡V2™ –ýr¹¬d2©C‡©Ùl†u‹î‹Åà¡\^^Ö{ßû^---:c½x¸ªï视q!ÆÅ:qô04Ï;‹V´ó¼=_w<‹5Ýéì•W¦ü0}i4ÚÝÝÕåË—5;;«\.§jµöŸvw÷îï¡8ž¯ž(í_n qÉårªT*ÚÚÚÒúúz¸I<¶ÁÁÁN¾J2™T&“Q"‘ÐÆÆ†nݺÈ`½^{{µZ ^âb±J펌ŒhssSÏ>ûlØ‹oܸ¡\.§Ç\sssúÏÿù?kiiI«««Ö/ÿò/ëûßÿ~HÐñÅõÇüÇÚÜÜÔÕ«WõØcénoé·~{;ZŸ€Ü¥+u”€¸ÕÒãíÝk")^žàµV¤99`yN,Ö{c¸[y~”PD½+V$õzN8˜|p€S]Pµ<ó…`Þw' |×åé9ÖTÑÙÝÝU>ŸW½^W2™T£Ñåv.üí‰ü„“Í\ ¢Iãî¹pË3òÄ0WQK¿ËÄA³‘›¢!©ÈÖ½,BõZ0FwÀ*íTÞÁ÷=œ…²ËÑ’£èˆ½Õji~~^ƒƒƒáVûz½Àh<¾ŸìÎßž|Ï;˜è¤Î­ÿ›››Ag|<&ïú‰ÎR€`rrRÙlVgΜQ"‘Лo¾©«W¯êÈ‘#Êd2ZYYÑÅ‹µ²²¢•••ÐÏ#¹S ·‚{8”Ðy×m'ýÒ>@v½poGT'ÝKÁs¢$ÏÁ6ŸE—=™ÞÇäD—>Ôëuݺu+\°7;;ª”17QëðàÁƒºqã†Þóž÷„9ó0;ú cs²|'ï²åQo:Î{Ð÷¡{þ=EO™ô9úå†N˜w<Ÿ9pà€šÍf¤/xÄ › ¥†}-r&LOOO^.—ÓÐÐPȱÀ{ËD;;;“´çÉÀÀ“N§ƒÇƒÏ!P”)O¥Rêv»Á³rèÐ!•J%%“I9r$—³gÏêÅ_T·ÛU£ÑЉ'Ôívõó?ÿóJ&“úêW¿ª_|QµZ-ì\`X­VuáÂ…;µ?­Ojúííh}r—6ÂPܺí{À†'Ö9àPâpp+¿?“ÃÏã—ù¿´Ÿ¬ØíîÇj;1òþúa‡eØ-ì~Øs03œ€€2÷48pp„ 9pt+gôæíhL»{E:¤}ë[ß €ÃœÇ¥'“É`±wÒ“ž«á“ð$iÿr:©îmâ™î!ŠEn=w‚!õ†Î8Xõâ€=ú®ð~÷X91ñzGÐ1tœ>zœýõë×1Œ‚DŸ3'„ÓÑçx<*Pq© }EIˆ¤ž|©÷ºÁÁAåóy8p@‰D"x¾ }ív[W®\Ñõë×{B¼øÒoÏÇp‚áä›wú}*ôÑç9Büܺ¼£¹-wò€¸îÐ?ö'v%x.3šÿ;‹éÚµk:}ú´î¿ÿ~-..*ŸÏkddDkkkJ$J§ÓÚÙÙ w~Äb1U«UU*MLL(“ÉèØ±cšŸŸï’&ÆâeoÝpãúí^@× ôÔ +ü ÀwCBÔûˆƒª[[vvvB’6ÏéÙóÜ ‡ ···5??¯ƒ*ŸÏr q RZ6›U&“ žòD†‡‡U*•‚‘!•J©Z­*+›ÍJ’*•JȰx®ù[[[ëY›››PµÛí@zJ¥’FFFÂþQ©TÔh4”ÉdôÊ+¯(ŸÏ«ÑhèìÙ³’ö£U}<äŠÏøûÄ2È‘ç¸'Ǧ“W'1’ÂeYôÐVþìì¬.^¼>¹ŒÐorHt»{%v=ÇÅÏ-—Œ•9qO¤0§$Šòóh!—%@‹T###=`Àʘ<ÜÄA.ñøZ'AòE_<Ô Ðì^'âÉÝRÌßx(‡ (~Ë-÷>Ç4×Ñnwïæg¼'”…,8pqr _ÌÓððp¸ƒ@±XÔèèhHÈ=zô¨æççõÊ+¯„¤\¬ßV'êNº˜;š{€sOw¡Ÿ!ÐÂÖЕ_`褃糞øû^@ø @šïº¥?jµ÷}ͽ²###:~ü¸U©TT¯×599©………B€ êüùó:pà@(“}åÊ•rGîýðVô†~“»áå„Ñ[ÿ¾oyé^÷îµÛû%fÝSl¼O>Çì³è¬Ï2ç{ž‡ÆÝB'Ož –ÿZ­ÆEe7¼?Íf3\øÇÞ_(´¹¹æ½Z­öäÜPÖ6‡ûGü†zî/¡¬îææfÐ7Št:{áÜ'‚|'&&”Ïçµ¼¼¬±±±@\î¹ç}èCÒÖÖ–ÖÖÖ488¨gžyFFCßùÎwtùòå SöÉ¡¡!ŒŒ„|+7ì¼S-J¾œÏí·~ûq·>¹K›'÷:XÁ²‰Õ’àf?t8`¥çÐìœy¡)C.©çð¥_žOQ|sxci¥ Š,³Êä8©ÙÝÝ À“C°ç¥‚“‡È¸ÙA‡{Epþœf³©‰‰ 롇R»ÝÖ÷¾÷½XÿÈȈ’Éd\;•Îé© åd ù#O¥pc¥wðáá-î]qB€…¯ï0ÌV`>‡ü¤ý$åhèU´Ê´W ÀÀÆ;츷Ê="Ä‘XrœI½åœy¾' cñ†Ð`öè¤Ì=8¥½C?Nkq<׿æfv›››Z[[ ¥R!54t—1“àëºìžÆÀ:çsî¥rï”Ï¿“)¼l¯ØEÕ(æ 〒³ÆÝë„®26úë{‡>¹…¼^¯‡uU.—õòË/‡qSbeeEÍf3xZ«Õj#ÑB¸Î«¯¾Æà—ú‰zÚ ƒÈ=Ó÷öUdá2­×ë¡- ×%Â;Ýë^æ:‹¢Úét´±±îã '‚u†!ýC§Ÿxâ =÷ÜsaŒôyŠÇãÊår=ÕÓ Mx<‰„¦§§µ¹¹©z½ 4 år¹àÉcžGFF499ô1NkjjJ7nÜ„|ggGÉdRÉd2ŒáàÁƒšU£ÑЂâñ¸æççÃ~?55¥ÉÉIýŸÿó´¼¼J6_»vMKKKj4šœœÔîî®&&&Bž û^,Ó¡C‡ôꫯþ·ßú­ß¢­O@îÒÆ燔´ïj„°Ñ{%“v»¬Z~‡?ÇApÔ Ñpk4/5´xø‡¡Ct$žÂx‡‡BpÐsð{Ì;ÿކînx>@ÒƒeÒÁ:À°Ì8²ÙlO˜ÓÜÜ\(¡;22¢z½Þî•Íf•N§µµµnôhA¯f³©]¿~=Tb¢oÈÝ•ßææfÐYÖŸq/ˆ‡±ÝKÈ>à±þ7†¯;,ô¬H.ž·Ä3v¼xüaÏqo÷3@Ò+¢«'ÞK wcÐXkJ¥RÊd2:wîÜ[<¯ñx\õz=TÐtìØ1 •J¥¹wÉ6èÐææfáÀ‹Bø¾©pãÞVÏ{bÔ¡C‡T­VC˜^IúEˆd=²Þ=§¯Ûí*›ÍªÓé(N«ÛíêÖ­[zê©§4??îÇ`¬’Â>ˆŽ²¯e2™à!Á3Q­VU(Ôl6‹íXX\\Ôúúº¦§§5==­F£¡ÍÍÍ@ÀÑ;ÊY+›ÍÏÊøøx( |àÀ}ò“ŸÔ‡?üa½ð úú׿®ÅÅEŒŒèöíÛ:xð žþyý¿ñ7´´´¤R©$Iúà?¨ßÿýß!bxø~í×~M¿ø‹¿dó_þËÑùóçuõêUýUh}oE¿½[ZŸ€ÜÅ Ð0 ÒHÀ¬Çä9Ȇ††BWÔêÇçi‚$š–„–±*rØòLȃÇF|ø<ãs PºÀψnÙv &äŒçq «Ùl+!SÀ\fffôÄOè™gžÑ¯ÿú¯ëßþÛúÒívƒ|’ɤVVV´»»Û—Ž,kµZÏÈÑÐ5÷@øL"'ÈR<SÚ'ƒŒ  AŒ¹¤`yDSš øÐÐP¸{Ës£X.»Ý½$P÷$‰`™E_˜äácÀêîap›››áù‰DB333:xð Ö×׃£÷x-Ü£áVu‘³U*• ŸðžKyQ D(êÍjµZ* !V}uuUÕj5€mÂ^¢÷V¸Ñ­éè†{—‡çñ='÷’Yð;fx/^"HL:î)• AãyNرÔo:ˆÇ2›ÍªZ­]a̬Éz½ž‡û±¸çým·ÛªV«ÊårÊår£kkkáý¹\.ëÍÍM•J%ÕëõñÃ×=ž^'4nÈÀ#E_ùŽƒG>0ÇóìŸeÝŒŽŽjhhHccc¤â¹CænÌáÝþ‡ùJ&“a¿J¥R!Œr``@étZÕjU[[[úö·¿­OúÓúÃ?üCݾ};È N«Ùlíèè¨ÆÇÇ ÃÐjµB(a§ÓÑèè¨ÆÆÆ´´´¤B¡ÖÄ•+W466<0Íf3ÜñH¥RªT*!dbb"ì‹‹‹jµZ¡ìr§ÓÑÑ£Gq^ZZÒ‘#G4==­õõõpéäüÿQ™LF…BAêtö œ:u*$ÄKÒ?þÇÿXNGÿðþC½üòË?úü.j}RÓooG‹ÿåé·ŸÖÆÁXƒHxâ'‡±ðÔßÙÙÑÖÖV°,rˆyŽG4~[R <î†çç€\çî9|8Æê(©'lÀ=€Äb{hH´:'!ûϹ±whhH™L&?žI¸”ËŠð.¬Èå¾ûîÓ믿®]»vMíöÞÍÄôÕs lŒò…%ÛC`¢„ I“ö-æJÂÐ;Xü˜SËbL1áy€9€ßÃRíÞˆÔÈÈHЫX,€ƒWißbˆÆ[€g„÷9¡ÝÞÞ„ }\=üðÃzÏ{Þ£Ï|æ3Êår=³‘iÀjM",@2«\.‡JUÆ288nW÷œ t‹²¿od˜ÏçcÌ#ÏŸÂh@‰R'й\.è –oi¿¤-2’è ‰&¡BNȸÑh„ù¤¿ÛÛÛJ§ÓaMÓîm`ý!w÷Ôañ÷ý%‘H‚ƒÇÃ÷'t€ÐL&Ósag¥RÑüü¼666T( ÝÙÙÑÍ›7ÚCÇ766$)x766tòäÉ s¾`ÈanÑwdí2@_ysïÞž É£ü¬´n¸»»«7n¨X,†yɬx.D›wÜÍ>‘Ïçƒì0Ö?:!½ô|5ö2Ö.r@÷ÙwX'NPÙœššÒðð°ÆÇÇÕl6õæ›o¯"$"ÁúÎårZ__ïÑ!/x€Nd25›Í£AHß+¯¼¢3gÎhss37?c»Bæè(çÂÒÒR¸°^¯ëðáÃÕ‚êõzðAhCèe±X ¥ußxã ¥Ói]»vMÙl6jR©”jµšþ×ÿú_úÃ?üC5›ÍÎÚn·µ²² ¬®®êÁÔ‡>ô!mnnêÖ­[*•Jj6›Z]]U»ÝÖ~ðÍÍÍé‘GÑC=¤'Nè7ó7uðàA½öÚkúim}ÒooGë»´(F_Ñ\ ³­­-u»û·m\<=Ž$©‡ì¨«|ßøÐó{€’[\UFðTpð¾.€)\“¢¡_ŒGÚÍ=ù €@i?ü2jÖCޏwÂ}’7ëõz8ðâŒ×åyp²¨A DžOÇU«Õø`Œÿà¹Ì+Ï$œ ÏAª{ÞøžWTò2¯XL@º§Íÿ%¯óâãsÒ–N§U.—C¹UÂB42.twùñYæ?“É„ûYÜ3hÎårŒð]?óÁ³ÑØØ˜Þ|óÍ&ÈÚã{Ì“¤ž0t"J4Ý€\|^¸[Á÷À2aX.ÖŽ¯>ëÄÂÃ4y6kšç"æÁÏS©T¨zäcbma¼ˆz;ý™årY###êt:º}ûv ‚###ÊçóZ[[ {ޤеµµ¥J¥¢ééi-,,èßø††‡‡CÕ&æâà¡XôB-eÌž~1^ú` »Bþb±˜ÖÖÖzô}e=qÙ ž.ÏEŠÇã!ÔÃA&“é ó k¹R©h||\gÏžU±X ¹5è„ëć½e||\ÉdRãããZ__W6› ó1==­íííÒ(í• §bz:55r6:¤b±¨ååe­¯¯kjjJ³³³!ÜŽó†Ü‘éééPœ «T*)“Éhii)T÷‚?~\ÇŽÓíÛ·uþüy]¸pA7oÞÔÊÊŠ~îç~NëëëZYYÑ;Ýú‹~{7µ~Ö]Ú<î×Ɇ´o¡ôC‰P ƒ”Xf `xøž“L&B2ì:xlcaçY^=kxx8ä^ð˜xŽˆ[9X!U–Bȉ{Y„0H ·S{hއcy)cIÁ™J¥tàÀ¥Ói-..j{{[þçÞ“øÌ|‚”Éd‚•PÚOR%,Ž>z<ï0'&ž°Ì÷ñˆ —›“@H²D®€ òb¢÷ñÌÁÁÁàYœHû÷¹8Q‚pŒŒ„Ð.@žë&ºâ!zŒBáÀ¨Õj©X,àðÆo„$á(Ñâ¹ô‹¾S^˲“HÈÏÈȈ†††4;;€¤[îù<7?ÓÖ××Õjµ´¼¼,ëõz=è~4‡Äs€|ž|â͂ؑÐìÞÍÍÍPm9úˆì+!•è•—e.ý3ì ^5 ™ð<æÎ÷n¸†¤àes¯¤ë(ï„üB„=d ýÊçó* :|ø°òù|Hf®Õjá©TJÃÃê×ë!d)ë±ÇëñÚ2·N^ÜCË>æ{'{òBß=_ YÅãñà™a /< óêyuì„D²çÕÉX[x¾ŠÅbaôjh“““Ö‹/¾¨r¹¬Ó§O‡=‚ËåB¾¹ÉdR“““ÕÌÌL ‡ÖÆÆ†&&&zªiu:{¶ð*¢»ÈûÀÊf³!_ŠòºN„ð Ažõó?ÿó’¤b±ö¤?ú£?Ò /¼ 7ÞxCù|^±XL“““š™™Ñ§>õ)}ö³ŸÕO<÷Â,--õä;¾Síÿ5´êÿåO¿õÛ»õ= wióð-ißbîù|žƒ°ëáFž, ðñVž_«ÕBâ2Ïá÷€}Ï-p)í'˜ó¬Ü|Ž~:øâ=üŽM•ƒžþ:€ôwþMè§´_&âIá@ä°¬×ë*•JpØóïÑÑQu»]---Ý1'«5a^׫ä06æÌCt+qúîi¢yXcñyu0.)„?ñnaî™' €$1ïžKB¨•“cæk·¤·šôŸ9év»!‘›~@>“—ŠÆÃw‚޾’$[©TT­V%íy#¯ñx¼'`Îzáÿ¬‰d2©z½¬Úî-p2ízçÄ ½ôùbýú¸œX¸Žaw‚ç®0w¾–ÜÛás^ûúƒ´ynF ¼¤¼Æ’ÉdÂ\ìîîöܶQ=bî Ä4~Þn·566¦K—.9&“I5·Ì7ò»qã†ÆÆÆ´¶¶¦\.Ö }p½`ïð}`Œ.ºY3ö67a±Gv¬KžÅÚñ{„³‡¢Cž?GB?D/ß»‹ïa"±wQc­VëÉ÷¹zõªN:îØT.— ž2ÅtR\*•4>>®Z­¦­­-åóy-,,„1d³Ùð^6·c”¹yó¦fggµ´´ö¢±±1¥ÓiµZ-MMMõ¬Kr¸Z­–:¤7n¨ÙlêØ±cÚÚÚR¡PÐì쬒ɤ6664;;«¿ù7ÿ¦>ô¡I’{ì1]¸pA_üâµ¾¾®‘‘‘`$ë·~ë·½õ È]Ú›²ä`Ý5žLí@ßC1lQî½ÀÒçr(󜖤ýr¹¼Ï¿çÆJ؃ƒ!óü À pOL:}âÙ~ñ[¿±,JAe#Â2(kÉÅ{€`B¯<´K0`ˆqºµ“¹Ä‚érò|÷NyÈ …yõ„q÷f8qeìÈ+8síúä!mQk·ëL·»WJ³P(2S.—µ»»«r¹ò£ßõw“TìóŠž¶ÛmÕëõåcºÞò=BVTc1ÞÜÜ ÉÊÒ~ØŸ‡%±†§Ï:244bÏ!ŽQ ˜öð)š0ªÏ‡{ÐmÖ4ëÚ=‘„¬áíaüþY÷º8x&,gyÿÀž#ákÙ N'„ñ{Â$=G%ú dÄóœ¸ ·¾¾®ááaéܹs!§‹gxŽT±XÔØØ˜fggð¥yå7Hc…ä»2Â~ãFÖ&úásÌz`ÿâxÛ˜;Bö Ù¾†{ŠI¸Nmoo‡\%öIÁ@8V»ÝV¡PÐÐЪժnܸ¡Ç{LßûÞ÷400 ÑÑQmll„»ŒÆÆÆ422¢ùùù@˜wvv´´´Ô³.jµšòù¼2™Œr¹œ´ººnYç9F#xE!Ìì‹\È™Éd …àeŒÇãzá…B.W>Ÿ2/‹š™™ÑîîÞ]>§OŸÖ™3g‚·(‹©P(èàÁƒÒÉ“'U.—uûöm½ÓííòVô= ýöv´>¹K› ÍPyØB¨8´Øœw" ìIé~ ¹ò°°;‘,¡Q/"ÈÏs/Œ?À6;úŒ\;¿w`ÅaÈ¡ïDÇeqäÈ¥R)]½zU×®] 㧆¥R "‘ÐÚÚZŽQ€õ0yȃRÆÂÿ8óÏù`|Œ™xt'†®cþ €"ÏuÌ-ñ.âÄÓÉl,¶/?;;«ÕÕUe2™pÁÀ…øwôŽþžá$Ì+CE?ï`Ñó¡Üšïc¡¿W>Ÿ/šÏçCqI=!5¾ÅÍfSÅb1„&QvÖמW>s N¸¯7¼9^–ØC}|Ý: àoH4}K ä×=Kö™gï;kÔCÚ<<ì‡ydÜ“FAúgž¼\³‡]2×è~"‘P¥RQ±XÔ‰'‹Å4==­R©¤X,¦©©©‡H$øl·ÛºuëV¨GŸÙ{ ½N®‘¹{”}Þc±ýK £†óìû™‡«º7…u†]_½l:êwx;½Ê;N¡ÚÜÜ ¢T*¥z½ÊAw»]U«Umnnê±ÇÓK/½¤jµÖb«µwky©T !`õz]­V+xM$…0UŒ/~¹*¤1•J©ÕjiggGÕjUCCCZYY “R©î)—ËÁÈÀÚØ«$W¯×ÃþòàƒªX,ªÑhèêÕ«!dkuuU—.]ÒÚÚš>ö±izzZNGÏ?ÿ¼þôOÿ4ËX__·¶÷[¿”  IDATõÛÖúä.mXSˆxØ’¤žC= ªÝ²ìß•z;ÿwÐKþB”ÜH½á=Q°ìyž§…˜qy¨”“$¬´Þžã|™g~Ë Ï¿ á‰ÅöâÎqÓsyï„PMNNªT*izz:ÖÜÒŒ<ìÆ^Â)…“>0öᲈ¸ÈçŒæòôÄ×+æŒÏz_<ÄljèÚÚš¶¶¶B)ù%äd³Ù`Åvâå`=v¸'=tbêÄírCÿãñ½ün·pÑÛXl¯”±ç,áÍpÞð\Æpg F½rîÕó0ÆhøŽ¯qä`wB.º¬}¢<2d€ïIèQ£ï€òlæ†i'T¾vœÜòLÀ>ct/•ë-ÞIA¿ùîîî^1 /û<33n¾öœ Öa€òVk¯äl¹\U¾X+¾ú¾äd¾Ûí†Ü Š-ÐÖ}vBå¿'4ÉÃÎ|ÿtýõ{\‡¢Â¹zN’Ü+âž×L&£½’¶ÎÞ=8ÅbQ¥RI§NÒÔÔT•ŠÇã!§¹“·ããA.„Ìù|Q|À=>£££A/|oêv»ÊçóZ]]Õîî®nß¾­l6«d2’ܧ¦¦Âœ¶Z-}þóŸ×Õ«WõùÏ>̺:<<¬ååe}å+_ oyyYkkkaoÊçó!þn}oE¿½[ZŸ€Üå ½ØRoY·ªy¸ƒÇ;»…^zk>  )`2 Šy¾[x£a'¼@ààßÍC¼<&Ïr«¨ƒuoþ9ðÑxo'oƒƒƒ:xð ÆÇǵ¶¶IO¦M§ÓÁÚ·²²¢F£Ñúá!1¼ÇÃS¢s‡E“ÿ;™ã¹¢â Øˆ‡“¸—$*W.õ(yhŸÙ8˜v+:ýív÷.ÜÚÚÒÎÎŽ¦¦¦ÔétÂMȃƒƒ* !‘¢ÿ„ÝãÂg¢ž()bîôyH–~cc£Çƒæ¹xÆ#`ÊÁ ™¤oÀ $ïàO€ë}ág>Wô Š|È8a`N!}Ì%·Uó.¡xî)âè—ßù!)„`²/x"yÔøàsç!_Þß(!¡¹±H E¶··U«ÕÔjµ”ÍfC¾Õ–Ø7âñxéÁRO8ùD.þíúçY;‰d-²˜KÆç  õé2ð¾DõERÏþ‰\èësgg'TðÁ{gggµ¶¶¦ÍÍÍPáêÆÊår:qâ„^y啞œ8À¾—)fȃ„3^<„"7![BÇÐ}³¢!dÌ#¹4¿ø‹¿¨T*¥Ç\G 0Bewwwµ±±¡­­-­®®7å­s¹\ÏÚoýÖo?ZëWÁºK›»þiêP|†Ï±ÑÀ<”JR8±lš9lø·[ùøó3iß燮&.ýs+®[ï£VA'?Xo¹SÀã2á»îu‰þ;Jœ° îÝOµ—N§n4çPåмté’8 [·nõTõqù;pö031Á:ïD™ø˜˜'OÞw¢ã:àó°¡_ü L˜?çý̽W~òðæÐÍÜ'{—έ¬¬ÒêÚà;i`ÌN¬¢ºØòd_ï2ðd{,묀9s ’ÔC8ªÕjðrH c‰&=#{tbàô6Ÿ'H#c¤ît ¼{ü|NŒüœ{\Î4'ü,¢Þ˜hµ*72xú‚õ²B'¯Äçä–5îc"\ÇuÑ Ñ­¯¯o„‡í![ô V«ivvVzßûÞ×C’Üëkà oú ØnµZÁÃä:Ë¾Éøœ@²Ï ÷–zeB÷H²W{…A×i¼ÛȽãBÉíím-//+ŸÏ+—Ë©V«)‹©T*éêÕ«j4Êçój6›!œ‹2]O]¿éŸÎÞ­æpÜÛV«icc#ÈäÄÄ„ÆÇÇÕívuûöíà=¡÷ÄÄ„>ðèâÅ‹ªT*úÕ_ýÕPýªÛí*›Í†‚†ªÕª*•Š$)ŸÏ«V«©\.‡ uïdscÊûO¿õÛ»õ= wiã`ˆûÁì–r÷\89!œÄ¿ðs‹ª‡ p7„´_5 + «–_hEÝÛÀ‰Ï-ÖÀœÜH }æYüPÀ¸ÝÒ Ù@n]wàÁaÈgø?`+k§Ó ƒ¾\¹rEA6~»g æ„ÃÇ@°RÒú‹•Ž1rKµ±{¨Š[¶ùs‚pïaÌ£EÚs^9†~nmm`Îc±½øt?¯\¹êùiccã-àË=iÞOãôÍA¿-ÿ]Ô£C\9„ˉÀokk+ä ð\gq")‡è(Y3Ro¡_c袓 jµZÁ+—[–£Þ9bñ»Ýn‘dé‡ßÛÁßn‘ÇK‰$ê}òõâúáóæ¹j<Óeq'rö„íd2ÙC~777Cø#Õù<Ã×ú955¥©©)u»Ýž›ã}¥žòœ(ÆÉ\AÜ à®/ÖÄ»Eœ@Fs™x2$—c ”8ĺÓé(“É„yÇ+‰>R’–gW«Õp¯G¥RÑÒÒR˜Ö;²§âX:ÏDn¬™ãÇ+‡LôÐ8΋ÑÑÑP=ŽñC$×××{ŠHÛ”J¥”Íf•ÍfõòË/«X,†þAdœÄ èĉJ¥R¡Œ:žÏ·ûik}ÒooG뻸¹[>Þä$$Z³ë9–]ZI½—ƒ¹…¹ÓéôòôÇ«E£ƒ,x.ÄAê—Ö¹wDÚ¿ƒƒ`ãÏGQ0î–UOÒ‡ÄùÝ'­V+T4J§ÓªV«*‹áÂ=äI;Ž–——ƒl‘™[íÝ;äVcä9ñ)¾ï —ƒ 95þ±.#+æËCšµ?®œ@E¡Ô[°Khòô¼ €[¥RQ6›Õää¤ÆÆÆ´¹¹©‘‘år¹ GFF”J¥´²²¬»ôÑ­ºîuqK³Ë)º>X !H¥RÁ*õØI1ùÙl¶‡  Å8EõnwÏ“ådν® +Ÿ#Ÿ{¿ëƒ5Ãzñü¨·Ê=!Þgô͉šÏ-zåkÒŒáÁ=N@迯AþÍ:s°ëëÔ=VÈŸçr¹ðOŸÐùb±¨ûî»Occcj4ÓÍ›7µ¾¾H5ûÕîîn´ZXXè)ÕwôÜ+ôÅ sãžfI¡ºë0ûÈ{'Æö+'Jô‹¨ÝÝÝpaª$ ¥Ói­¬¬„ÐGî‰ÅbáÒÍF£¡\.¼€CCCZ[[S&“ÑÄÄ„FH`Ç4::ªÙÙYýí¿ý·õïþÝ¿ aªäRÑÏf³©«W¯jww7!Ä!]xÔH‘«Ä¥‹œU{ww@XŸ~úi=ðÀ!ùþüùó=|ý …`t@>¢|>Ñ;ÙúÞŠ~{7µ~Ö]Ú¼B8è=´ÃÃYÃÃÃ=!+Qk¦Ô[»ÞŸCxï€C*ZÔÛà 6jíu‹¥7H‚“úÍáLõ‘ö/XÀ=nÛ-·TI’,p•J%ĉŠº÷Þ{Øyn4·Æ²÷ ‹…Ùxîý‹’ú 8àg4Žnå÷ð:““EªÍDI§{Fr¹\¸˜ «3ÅQñʽUFC·oßÖòòr°þ6 ÉT-r¸ÎãI¡?ÔP³> Gè;þPT€ð3€úuæÌŽŽ T­V‹ÅBE%g³Ù  Ô²“qúi¢¸A::ËZ"!™“3“Íf{ Ì1z‰~S9aåã¨'ÑÉcsï%²ô0%Ÿ#¢o|ùdòp4sÝö} =eŒQòÔôôtOÂ77ÑnY—kkkzóÍ7C?)E¢^dÅD†ì…ZÆŒ ¶¶¶zB±þ£ îUõ5æ—t²Ÿ–Äe«îÉclìmxB(Ÿ›H$T­VC¨ çÏär¹ƒ!“¥RI…BA÷Þ{oð„&“I¥Ói}ò“ŸÔûßÿ~ýÌÏüŒ …‚666B~{x[­–nß¾ýÿ±÷æ1rŸ÷}ÿ{föšcçÚ‹äòEQ$-SŠ)’i¶%ÙnkÄnœÄMÔ))"©‘:JlimÔh†á´ ÐTFÜIÙhYl‹²,W‡II¤.ry-%wwÎÙÙcfç÷Çâõì{Fò¯nkY±9@pçú~Ÿïs¾ßŸÏûóyBª^Rúrp©¤à…Èf³aÍñu—ôÑÌa’sô÷÷ëoÿöoU*•$Iÿí¿ý·0žFFFô–·¼%¬­VKårYÅbQçÏŸW©T ä‹™s?‹å‡‘šÇ{,ÌÙîO?ýtÇw>¬;î¸CÃÃÃÊårú…_ø>}úu¯û¥/}I{÷îÕÐЮ¾újýÛûo;ð@¯ül”žä -,ðîÖ—6šn‹ðÒÒR¨Ïd2A;ÍÆç×å:S¾788¼X˜¥Îƒ%… ±Ûâ B8AOìb÷Pt; áZÜÛ%!€'—mp1ד6À},S"‘P>Ÿ×ÕW_­X,¦ééé”Ý#Iû÷ï×… ÂI¿Ü =ýà}Bq9šK€Å|×ÿÌðy·÷ă¨=È=Aô§ßÓAˆlèÖV²WaM¬Õjj4êïïW±XT&“ 2€2ú¦X,*Ném–H$T*•4<<ú#‘Hýî-r@GÛâ…@&D_»ì 4ãÌ3,!g@ iffFÃÃÃZXXèhÓjµúš1Þ-õã3÷Š07Ý{A“<äiNð±{à7¤×31Î<Ëãé §À÷õõu( у‚…)¦“c¼ ÔŸµi4 ÄÑS&;)bvƒ37=Å0ó†úÕj5;v,€ôl6«íÛ·‡qÌéèKKKJ¥RêïïW"‘Б#GT¯×µiÓ¦bÖ Ü›yǵ¸¸ÚÐe¨žÍŠvaݡݹ>ÏQ¯×Ã÷ôe· ŽyÉk¼*’B67€;㢯oýàÁþþ~•J¥ÍŠ{Çãqõ÷÷‚@&¯ÕÕU•ËeMOOkß¾}ºá†túôi]{íµzÏ{Þ£hÇŽš˜˜còüùóZ^^îˆñb 8PoÆc¸cccšŸŸc®ÝÞHf±¼¼¬L&~,--馛nR¥RÑ¿øE={VÕj5x`‰„b±˜²ÙlY‘vï'$"ûf—7Ëòïÿý¿×{ßûÞŽ÷®»îºð÷+¯¼¢Ûo¿]ÐßüÍߨÑh賟ý¬n¹å=÷ÜsA~,IŸÿüçõÙÏ~V÷Üsîºë.=ýôÓúô§?­ .è?ÿçÿü{¦^yãK€\¡…ÅÙ½ nÅt°ƒÕ8®}·j:0u Øx»OèÆ²çò áX—X`]ÊÐ]t†ØP\31üp< Ý M]yÝý@N—EÞ§µZM­VK×\s&''õì³Ïv€@¯' PÅó˜¼v[—‘ð[6sžÉA}Z[[ àÎ5\þæR<Ò†wˆ†ºidd$H4 ×]wž}öYI ±Ä Mºêª«466¦W_}5Ä€lÚ´Iíöº.7„¶q0êºû×#~Ãx€øá°>HmËá„H;ÞsÛ­}Ü‹3Ö_úÒ¹:Á—ÖÉÀ¬{¢¨ã×¥Bn=gnPÕÕÕà uÏ@OR'$pM3/Üsᤠ>ãÜc)¯Ìa_k˜/>ö¨ƒ{å”Z\\Ôì쬶mÛ"Þ7dsx 8ïöÛoדO>©µµ5?^G ÷b ˆ¿¡¾ž}¿™Gî…v#D·üŒ6T­V k*m‹aÇ{¢Üû:88dgn̼ÇbëgŽŽ†3j2™Œ …‚²Ù¬VVV”J¥Ôh4Âóâ+‹ZXXÐÄÄ„~åW~E[·nÕw¾óE"=úè£úÚ×¾¦™™™`\r£õ”¤‰‰‰@&b±˜¶oß®z½®“'O†6‡¤ éòåË!i‚mµZ¡^‡ÒÉ“'uèÐ!õ÷÷ëšk® ÞÊááaý›óoôðÃëþûïçšD£Ñp ¤»R©tÄj½Yå" ÿ»kîÞ½[ï|ç;èçŸýìgÇõÀ²xã7j÷îݺ÷Þ{õ…/|A’T(ô¹Ï}Nwß}·>÷¹ÏI’n½õV­®®êÓŸþ´~çw~Gûöíû1=U¯¼Ù¥G@®Ð@rë¡/2H¤uBzÐT*´¶x5Ü{ un¢ÒÆApžYGZõz½CÖå² ·Ô³a"AÈîà.B–ã@›ZêÈn%ØsMß©À<™LªÑhtdcŠFס“ÌËd2áoê·¸¸¨#Gމ‹ß²@é¤ݱ CΚ Ðn™ ÑÁ¤}¼{x¨ý`M&“¤ÓR癌Z­¦jµªD"¡H$¢‹/ X>yòdë¹\N/^ ×# t~~^¹\N‘H$ÉÆãqÍÍÍÀ×h4”ÍfU(BC‚ç¿ÇÃ\Ôøø¸æææÂ8‚`âa` CfnHrfgg•Ë嘈D"š›› mË3Ñ–0Æ0ue 3qRŠŒÇ œgÂCàr·T¹˜ƒwžÅÁº_—¾vBÌØw(mî^6¼6Uæ5÷fœ@ ™'´À²Ý^?ïÁÓ«ÒÝcÖecÔ…±ÊúP©T”Ëå422¢x<®Ó§Okll,ôû™3gÂX^ZZÒÉ“'uýõ׫\.ëðáÃaîЬi’B5duqqQ}}}Á“ìI~7&@z½ß˜‹ÌWÚË催©Œy¼t.£¢ e‚@p~dŠ1AÜH½^W£ÑP2™ nâÇ“òꫯjëÖ­úæ7¿©?~\<òˆæçç;¼Ë’ÁÆ«œjppP»víR¥R ózbbBóóóÊd2*‹:sæŒÖÖÖ‚·jxx8ô=©¼©óÊÊŠòù¼ŠÅ¢>úÑj``@ßýîwU­Vµ}ûv­®®ê?ü‡ÿ Z­¦›o¾YÔ7¾ñ =ôÐC! X,Ó®]»ôâ‹/*“É/Õ•Xº=·^šÍ¦xà}âŸè8¬qûöízï{ß«¯ýë€<ôÐCZ^^Ö¯ÿú¯w\ã×ý×õ‡ø‡úÆ7¾Ñ# ?C¥G@®ÐâðEѵÄL¾'ml’€À- ‰ß Œ Ð.¢×h4Âw]å–;ôöÄð9àÐá'¯¬¬k:€KÚlšÜ° pi€ŒMÒ­“ñx\ccc!…c½^‡k±I...†<ú€Zâ $n¤uùà S€rÃs#«s‰²I¡®n~CARƒ<Ç-˜ÈÌ7H¤$¢Bß7›ÍØ €“Ôa…aÅn6›x +‰„ƒ/^¼¨d2©ÑÑQ]ºtIét:»—>öøڱŸcìG£Qåóù /ñ8ÆÉØØ˜HI&“ô0.]*å²:îA›1®x^ÆR%æ"‘H(•Jïd¯ Ñ-ÔÔ‡öÇšÍ=<>€±Òß߯ÅÅÅO©'àÙø Þ—IAŠÜûÂøròÀ5»Çgu8Â`ážžv»­D"Ñ‘­‹ñHÜ 2›ÙÙY;wN—/_ÖÎ;C D"¡jµª¯|å+Ú½{·–––BªWºÇ a|ñØD"¡z½®jµÚadq#†÷ãíè&(x2Ü+í5÷pÓV~˜¦¤‚xqq1xƒ Þ÷õ›yB~ˆ7Ä¥tîk6›ÓwÞ©r¹¬|P³³³¬0.é#$WÔOF¥RÑøø¸NŸ>­X,¦z½®J¥¢f³©ÉÉI-//kbb"´-cñüùóa® k÷îÝŠÇã* ZYYÑm·Ý¦r¹¬ƒê[ßú–òù¼Êå²üq½ë]ïÒÇ>ö1-..꥗^ çû\¸p!¬i—òf–7C‚õ[¿õ[úå_þe%“IÝ|óÍúÌg>£ƒJ’Nž<©¥¥%]ýõ¯ùÝþýûõ裆ÄÇŽ ï{Ù´i“FGGõâ‹/¾ñÓ+?±Ò# WhAZtï  AÊlb€ —´°ù¹õ›â–Q@ÇââbwljÝDƒ‚Ԅﺤuë®K›ØlÙô©?›:ºtd]õz½#å$¿sk*Þ È›;Ï y !‹éúë¯W4Õ… ‚e¢T(‚Ešv2Úp%P$´\Ǹt˲¤NÙÏàà`°öÈôòzúÐ%bÓn·¸CÒ9Z[[Óâ⢖––”ÉdPC›Íwn¿ývÅãq8qBïz×»BV"ú²\.ëäÉ“ žÓ§OkyyY“““á™h+ÆxéG—“AÈF°¸JëqO¹\NSSS”°ð ’”1ƒ~|iiI Tº…Ø¥7îí@à|f³YE£Q•Ëeõõõ…þª×뚟Ÿa`uu5œÕÀ؇|¸g†×.kbœ¶Ûm-..2÷Êc\ºÆ\wbÊ}ÖÖÖ‚%Ô½Š€\ú‡ñå±î¹ƒ¸CŠïx¹ãš6¬V«aܳÒß߯M›6)›Íª\.krrR£££*‹šžžkN,S±XÔÎ;•Ífµ´´¤;ï¼Sý׿¯{=–Ò9ÂÂïÏÈü‹F£u~áò,cÝ^'À¾Ô™¾<™Lvi€/..*+Nw_–––têÔ©p­ñâ­tÏÉ$‹r¹¬}ûö©¿¿_ÓÓÓú×ÿú_ëàÁƒúÌg>£z½®¡¡!U*•0þ8itt4Ü“Û#‘ˆJ¥R0 -//kddD©T*´åÊÊŠöîÝ«B¡ Z­¦B¡ \.§mÛ¶)‰èܹs:räˆÞóž÷ÏG³ÙÔÛßþv=ðÀÚºu«>þñ듟ü¤~÷wW'NœÐ³Ï>«X,ÎY[[S:V6›U©T )|¯¤’Ëåô©O}J·Ýv›òù¼¦¦¦tï½÷êöÛo×ßýÝßé®»î Þç|>ÿšßçóyµÛëç²LLL¨P(éìëÝ‹kõÊÏFé+´¸§Á­„€W6-IÁ²îšÜî˜6<6J~çË,^0fñZp?î°q°í„†ëx,…{n\2ãq€%¬â´g‰bsåô^®W­VƒÞúÂ… !ãP­V“´qB¹oʵZ­#>{I ÁÅ€+'r€?+†ÿ‡††T­V;úœ~õ¾˜ @!©#ë‘Ë@ÜÊJ›¹|Ç-¶^Úiaa!rþiÏb±¨ÕÕUÕëõ@.&''599©«®ºJÛ¶mÓ±cÇtñâEmÞ¼Y+++:þ|ПsàY,Óã?®l62j„ ê–ùHò6ê èŽÅbÚ±c‡"‘ˆNœ8ÆŸÆ"^ ¾±æ"¿<2–»Ç4`ÿÓ¦€fIJ¥RaLù¡‡Ü‹2^ '7¤ f-€Ø3G¤Ãùó‚1üf.1?X/˜»€r' ÝR"H"Æ÷°­¬¬„çaLAT Û¨Ÿ{°¦·Z­ŽyÙßß”+•JÊårj·ÛaL¥Ói¥R©È‰D´ÿ~]ýõJ¥RÚ²e‹^~ùåŽu¯‡¯…x1‰êïïR-¤™xn˜Cív;ô¯ÇË>²Ç™<;} !c Ú‹\‡g£ ¨;©Ëñ`e³YÕjµ`ôÁëA»Ò'žnxeeEGŽѶmÛ466¦V«¥}èCúÒ—¾¤cÇŽ…õ•5„5ù‡'yË–-Êd2*—ËZYY ñcxgggõö·¿]Ï?ÿ¼¦¦¦4>>®­[·*NëâÅ‹zë[ßâÐÖÖÖÂA‚årYwÞy§:¤d2©|àúà?¨'žxB?øÁôàƒjçÎÚ¾}»þÅ¿øzöÙgµwï^íß¿_/¿ü²zè!år9:tHofùqÄ€=z4x"(.Óórà 7è†n¯ßùÎwêçþçµÿ~}êSŸÒ]wÝõÿT—^ùÙ.=r…^e“xH)_Ýòè©jÝÂΆæÞ¼®¿v]6Öcˆ¤pŽ‚o²ÝdÀ7W¼Ô‹¶tÀ²[ž]gîÚh?5ÚÏp"æ pæ`.k||\ñx<¤ÞEr±¶¶,ØêF›z±îlémA}g/vô-VI'žñËÛ”gÆ‚ëU@1}Çsºü¦[Îå`I_ñ|\GRUÑ'õµµµ?óâ‹/ Ó5×\£={ö„6~ë[ߪ¹¹9;v,œ299dnårùuc´zqà†´‰Cǰ̹7¾ã9±´sð]8ÉÝ }Bÿ8)a¾Z˜C,8ßÀÊx!&ÉûÀ mµZHât—ºÁÇä/ŠÇQñŒxñœ$@xœxWÀ¸äo,â´5@X7NtzÉßÜ—u$ý…”“ŒOÒz6¥³gφ¸@:I ÈÖô裆ßÀ}]cÝ¡ ™ô?2IÈ·»Fð2Bñ^ã5v‚êi¾y^7ž0¶YçR©”J¥’’ÉdïA¨ s/‹£I__Ÿ”N§;ŒT¤é­×ëA900 ™™U*íÚµKÿé?ý']uÕU¡o‰?cn²ö—¾ŸžžV6› ã¾X,†Öçææ´}ûv½òÊ+Ê)°¯ IDATårŠF£Úºu«~ÿ÷_…BA÷Þ{¯î¿ÿ~kbbBÍf3¤ôîïï×ã?Œ O=õ”þãüúÀ> [n¹EÚ¼y³žzê)ýÉŸüI0¦¤R)=öØcºãŽ;ôÌ3Ïèg¡ìß¿ÿ5¨™™ýÙŸýÙô{Ò,ñ‹_ Þ)I*‹¯ùn±XT$Q.—“$ŒŒ„ñÓÖ¸X,êïxÇÿÍ#õÊßÓÒ# Wh8b£p®°ª@TØ$•X8 ÒÆÆàá=6c>w°âš}À7ÄÁôø ×E³Y’º­Ü´Ï‹÷Á¯yϳ×ÂÙð±ÞÖj5ÍÍÍ)YSX[[? K+…6•6¤Tôr0êA_ð܃ÇPˆ•yã:´A$épyÛÑ¿îñX@mï’<×Jºµç@)`i\,S¥R –jÆÁ‹/¾¨cÇŽ…s-‰„Ž=ªd2©\.€ÐÅ‹•N§ƒõzaa!ÄCpO—íPÚP‰‰¾¢]Ø0·mÛ¦ùùùL=ã•óÒ‡HÔjµ@î3™L¡?÷çpoÀ/ž9­§ÅõlQ>¿¹®'€t8is‚ÌgÔͽŠÈløœö¥Ý;A¦­}¼z »ËF]>Äï©Ûàà`ð¼1ÎèO—f]ºtI©TJÓÓÓzõÕW;2¨ÑvHÓ¾öµ¯iÇŽS:~MlŒ“ Ú–vÄðÁ{´¿Çvðy4º§Nž6§=;ˆ„Ä­áx`x~Þ…ááá2‡„’ÌiîiưÑjµÂa«¬xܘWôs„ùèС°nó¿{}XcX‡(¬u<+™¨°årYñx<ÈK¥’ŠÅ¢n¾ùfýæoþ¦¾üå/‡qP(´´´¤;v„C`³Ù¬òù| w§NÒôô´šÍ¦{ì1?~\[¶lÑ»ßýníÙ³G<òˆÎ;×az3ËÃòîûS"‘ˆvíÚ¥x<®^xá5Ÿ=z´ãœâD^xá…Ž¬Z—.]R¡PÐ[ßúÖÿ«zôÊßÏÒ;ˆð -€€¥×nÜ2Ü3A–À¿s ÂgüÞ-¬€,]Ü ÐÍý±Ö9‰6¤!:švý5¿q ÀótŸNœøŽ×Ÿzñ¬lÎþÜ|>11¡\.2®¤Óik||<œØ½¶¶¼O€_'ÔÁ¥pNüx>Úǽnm`PhÊwy«ÕêÈ”„õ“àSž•6Ôh¹§ƒUȤ¯;mïÖaGX7Æk€7ç <òÈ#j4š™™ ’¥‰‰‰Kzr?°‰›N´æ,:úso¯µµõóG +zi]"Eÿ¹JÚ ±´©Eˆ0}Àœq’éžþwrD;b5÷¤ N6â<—<Ž€þá9ˆéñ~§N\ ‹uÛ³B1W©«Èzä$Ê=fŒiÆ>uåÞŒ)ŸOÌ·X,¬òdåBJǵ}ûvmÛ¶M£££á3ˆ%ž;Hi"‘P­VÓììl8Ûbçcqåž#ƂˬÜ8âRI, ðX‘ÍÉ=x}}}øZç$o‘“3êDÝF þ¬¤y¦ÿXÇÉìGÀ=}GâO Àa†ÃÃÚ˜˜Ð´oß¾àué6 apamðÕ™Küöšk®Q6›í0z-,,è{ßûž*•Šîºë.ÝrË-*‹zõÕWuéÒ%5›Mý«õ¯ô‘|D7Þx£R©”*•Š:¤µµ5‹E}ík_ ç™HëécGGGǵmÛ6½ð úüç?Úëg±üŸZ­¦¯ýëzÛÛÞTþð‡uÿý÷w´Ñôô´¾óïèÿãÞûà?¨¡¡!Ýwß}×¼ï¾û‰Dô‘|äÿùYzåïOéy@®ÐÂæÈ&q0âò ²¿¸,+ß ; wàɦˆuŒï¿^:O•ƒm^ceão—zøÆÏõød†ìAÔ í–X¿ î‘ñà^, €¸n0ë7ï—nÅ=’B?{Êb÷yŒ–^úBF»3¦Ü“Fˆ:±a³s@I»DÃA7VÐD"¡-[¶èÒ¥Kš›› ‡6›M-,,„Äñx<Ú¢Ñ×׬ ЩS§455²òÐÆÜ»Ùljxx8¡—Ëe% ]¾|9Š{ß¹ŸçâméÌȃ{›°l3‡°ãÁ@®Ôíáô6gÞ¸49…ôÌ%›Üy餓ïPþ™{KÜêN}Ì2Ö!ÌŒmOÒÀý|»€yïR,¤EÌáh4$=¤å4ø¥¥¥7Q˜ŸŸÖv’'0œR—S¹G–öfL3>xß“0øß×Z÷²øœvBÆÜI&“ß½®’:ˆgs²Çï+üÖ埞T€þœÕØØ˜yä}üã×ââ¢Îž=ûo¤ËmY[;x=Kc~uuU¹\Nõz]µZMgÏžÕã?®÷¿ÿýÚ½{·>ðèÈ‘#:uê”ÖÖÖ4==­úOÿ©~øa=zTÃÃÃúÈG>¢³gÏѱcÇ455ˆ²³;wê†nÐì쬎9¢7»¼QV>ñ‰OèꫯÖÛßþv¥Ói:uJ÷Þ{¯fffôçþçá{ôG¤w¼ãúGÿèé÷ÿ÷ÃA„ãããúä'?¾—ËåôéOZŸùÌg”Ïçuçwê™gžÑýÑé7~ã7´wïޟسõÊ_zä -X»±ÄR|ñr`ÈÂOúK?tÎÁe·¥Í‘ÈÓ~²!±ÙH–a`SvË ´qx›àÊ-»<¼ü–¹wóî6ñûsn$²~äm+rv{ãÐGOkëd€&u£¸¥ÏA:Új'fXÏioïG's€À.íFÐ'€ÑŸY `ÀîÖ]êçíGq ä€ÙAã@G >ž~(âºdJ$!ÛO»Ý‡£¥R©™²ä^G$&ýýýÚ¿¿¾ô¥/顇ÒO<¡‡zHFC BŠ’Édpn6›ºxñb¸–?›ÿO¿ãMXYYéˆçpB@z`¬§xe;áÀZïóòäóÔ >æÛívxçûÔÏɼ“§}o' <“*Ú§[®Àt2Êw»½¦ y½ººªF£d‘ÑèF ZµZÕìì¬FGGÃÜe|âsÂD+ú4¿.GD6Ò%cé^£Ü³ÉúÓ='xFæ3ýÂç+<ŽÄ1'i_Æ ž#<>¦]þæ¿õûº¡HRƒùýi¯þþþ@`ûúú‚$0“ÉèÈ‘#zá…”ÉdBÿàMBƉD æÅb1x՘닋‹ZXXFœM›6©R©¨¯¯/œpŸËåtÍ5ׄé/|á :~ü¸VWWõgögj·Ûúú׿®·¿ýíºæškôþÁ?Ðÿøÿ#¤†M¥Rš˜˜P<×ÌÌL žçÏŸW»ÝÖŽ;ôÜsÏégµü0R³gÏýÕ_ý•þøÿXFC###ºå–[ô_ÿëÕ7ÞØñ½Ç{LŸúÔ§ô±}L}}}zÿû߯{ï½7ĈPþàþ@ÃÃÃúò—¿¬{ï½W›7oÖ=÷Ü£?üÃ?|CŸ±W~ò¥G@®Ðâ ›“­|Æ„έø’:6&éµÖP,ýl4X±¸Ž¯‡[5ÙÈøÌIˆ î…ͳªx pÏàÎÛƒçô ùÆ«¯¾ˆ”[ÉÈäÁ6xÏ=/ü뎉q0ï}ÔmµtÂá²€ $tuu5œàdÏvÄ{ÝÞÆ“×Ñ­×ÝuÀbÐ&ˆŸï KÚÑ‘H$Äþ¸•ûrïååeU*•Ž`ít:­r¹Æ^&“ÑÐÐ …BhHŸCP*•1ùð‡?¬={öè©§ž Ðn©ÑÂÂB|­V+&2®j.u—œÈúé&ì€\® Ù`,Soæ×'V«V«ux!bì{¬äĽbæ>@œûøØ§O»“(оæPü¹ù®ÏWÌd=óqJýÇÆÆ´}ûvU*•àÅ♉áâ$OhµZU2™ÔÜÜ\Çàù¸âI;0?ˆË¢žîôñßýìŒ;îá14È+¹3nù>÷H±ð´0f©—{ä ‡”Ú$áðõ×½E'OžÔüü|ð &“I]ºtIËËËJ$á9Þýîw+›Íê`Œ;ÔaaaAÉdR¥R)Ì«L&£x<®©©)=ÿüóš››Óý÷߯ÇwHGÿçÿüŸºñÆu÷ÝwëðáÃ!s&“Ñ£>ªZ­¦M›6éꫯV«ÕÒÉ“'uéÒ%Õj5]{íµšššÒÁƒõõ¯]ofùI{@î¹çÝsÏ=?Òw8 G}ôGúîoÿöoë·û·ÿ_ªÖ+?¥G@®Ðâr'éõå8.aTôõõ«´[úâ·Þ¾ž¥Òe"¬Ë[^/ÀÖÉõôVÂþL^6}ip½ ÀIÁC___8Ó`Ó¦MÚ¶m›ž{@s¯».󞿦]x>·~vƒ~ÚÝÛŸ÷»ï»Ä©Û“p÷÷œðx¹çÃ¥îÑ¢OÜšïVxRub…쎇CÄhc@ «›ù¡hü¶Ýn+ŸÏw8Îb!K :o6›ª×ëª×ë:tè<¨‘‘}øÃÖW¿úÕ}ìãê}>GºÁ#ýW’ Éq‰ Ÿ¶–62hù8ç5õ Í]CÆ"'¿îeàú),ûTɸd~pö¤Ä=—Ý.¼vô'uòïÒ6´mÐí] {™ÿïë‡aêîÆv»â ¸¦¼…! Ï‘L&Cúj'ìî%ô@jȨ{®ðŠú³Ó¾>ï×ÔÙ½»ÌGbVè È;'I_'ž¯ç%v¯ cQR<mÎ+Þo´W©T ’Þ¾¾>MNNêüùóÔµ×^«………ƒ3S0*pN ë—“¾¾¾ph£ÑP&“Ñàà *•Šž|òI•Ëe½òÊ+ªT*ágÏžÕøø¸FGGuúôi=ýôÓúèG?ªH$¢¿üË¿ ûÓüü¼NŸ>­]»voËæÍ›CÖBSz³ÊE@~’¤¦W®œÒ# Whü¼ž<K]7Àé¶Ä±!¹ÎŸï9Øõkº¬‹MÏ-œRgf6(©3‹€Óc?Ü"Ú-¿’Ö–EHL7p÷Øîϵ©'|6Þ³gÏjaa!Ä,¸l„$B'$ ž~“ëKÄÇÛ@ÉuœÐNþ Þ,·ª½Íˆº\Î¥`€oêIû¼ à@{Àw,S.—Óüü¼FGG5??¯D"¡ÑÑQI ®¾¾>ŒŒ„t¨~ˆíÆóÔjµp ±9È=Nœ8¡F£¡¡¡¡pº5 Ñ¥=ÔóùçŸ×—¿üe8qB¿ú«¿ª_ûµ_ÓÒÒ’þê¯þªclcu¦h#2XÑæŒ-‚ÙÝ#E»àÄy¼†Ï»îövÏœ¿Gà4˜0äºÌ÷šø¹)Ü›ï2—¨7YÎøm·‹1·¶¶‚Ò}®»´ÏÉs”þ $ÈÿÑÊ!¾Ô¹ì!Ÿ#xUOž<ÙÑ_œtuŸC4ñÊŽŽ*ŸÏ‡ñæqM´{$ ¤Õ=ªôs‰±‰D‚‡Å½ÃŒ3¼uܯ[ÆE»¸€z9¡gŒqoþf-!.Ä CÞÆ<³{\˜cH}]uO&[NNNêWõWõØcé…^о}ûtã7ê{ßû^HêA–®Í›7+•JihhH¥R)x2éûz½®F£¡\.§X,¦jµªh4ª|>¯³gϪZ­†Ly•J%x.———õ•¯|E—/_ÖÄÄ„¾ùÍoꡇR$Ñ]wÝÎ:pà€ÆÆÆFµeËŽŽêÁ i}{¥WzåG/=r…Î3è–>u[P\îHa#÷Í ðbcÓôM]º[%±Ä¹SÚÈ”Å=ÝAÝb¾AºÌEÚðê¸L Öí réP·ÀÉ…4–sssA£ì` ]?©:ýäyÚÞuï&øž{Ü ì€ÐêZ|ÚÂ=]ݲI¯±¨r_€!õC²HÇÒì¤5›Í†Ï———•Íf•ÉdT©TB€6ŸÕjµH‘{ …™ÍÊÊŠ …Bè Kê %™™µÛípú7DÃû¨»Gƒ1P©Tôâ‹/ªR©(•Jéñõž÷¼G=ôP:Núè#ÚÏ ¤Œ¬0.³¢Ÿ8ÐÍûÈǫ˧œì;8…\{lóÙÓ-CD°ÆC\‚ˆgÃɤ›s0$…>t¢á¤€qÖí-åÞ¯çÝh·7ηpž{6|ŽúÜðÏ=@Ÿk {òuc``@Ùl6œ¦=22¢ñññiŠñèßdesBàÏÑmÜñyÞ½naÁ÷µÏ=Ô۽Ѭ=܃vur‹ÅÂx:I2ÄÀ Üq*mȹ|}‚øx@;€V«ÒhÓNôQ½^}:00 ÅÅÅ ]ûçÿüŸë“Ÿü¤úûûuñâE¥R©ðûh~~^»víÒŽ;488¨'Ÿ|2dÖrâ.)ô ûv»2é¹ùØ«¯¾ªÕÕU}ÿûß×ä䤿ææT­V599©µµ5ÝtÓMJ¥RšŸŸ×·¾õ-MOOëÂ… êï_?Ùýñõýï_JÏ[Ñ+?-¥G@®Ðâ–v©3ƒ•#¤¸éÙœ\êÔmMõ`E¬s.áþþ»îø·ÎIàÃïé÷„¸µNR!BÛL0=nsI€XžÝAõ VÒ¡¡!íß¿_FC.\W·òü¤xÅeï@’¶áà8ožÏ •-·»–:»ÄÂ Š´!ǃÐxŒ†{§è—hIêg[·n À¾T*©\.«Ñh„k@ }¹¶¶¦ÑÑQ5 åóùYhÏž=J&“gp0æççƒ,)†ªSX¨!Äîò!‚õØMNN†C‡‡‡µcÇ?~\÷ÝwŸ¾ÿýïkffFgΜéH ê¾{9Ò†·‚ jx#\E?1{Jè³n‚êã Ýn‡T³îq!‹•“]€1äÏ­áÌùÅÅEµÛí mó¸+ÝN'½'O>‡!—N„Ô¤ÝKåk“›×ó´òž¢Æ8jµZ!K1 W]u• …‚*•Jøœ³œi sÍ ¾¾yÌ ã’“Ë}}aîÓHüÀNæ-Ï<ŒµÛ=“´5kóØÇ‘KÕ˜n ¡?Ýp±I$al±V0Ž!Ö‰DB¹\.ðâV*­¬¬èoþæotñâEE£QÍÎΪÝnkrrRýýý:zô¨n½õV½÷½ïÕÄÄ„ŠÅ¢šÍ¦nºé&µZ-=óÌ3a,ñ|¬ûôE¹\ÖÀÀ€òù|X{ûûû566¦……ÝvÛmzøá‡uîÜ9]¸pAÉdRccc*•J:~ü¸¾ûÝïêmo{›^~ùåpZúÅ‹•Ïç5==­={öè;ßùŽz¥WzåG/=r…Rk²Ñx@ž 69×÷³²ÙS\á–Lÿ\Úä@ÒãL |æ@àåȽ\ˉH·¼‹M[ÚØ0Ù\=õ,íàõå=ýØØXˆèá9è8¨ùÖd_Nþ\&åmë–M~´€UÇ.Éâo·0G£Ñkee%5X†0Ð~Ò†¬MZׂ“Š–€€ÍîÝ»õÖ·¾Uõz].\ÐÜÜœ¤,OétZù|>x’8uË4u6tï‘‘  ªT*irr2€µL&#iÝZ_¯×•Ë催b||<˜‘‘ÍÍÍ}üøq•J%=zTSSSjµZ!5«“ÏlÖ-Åà\ ¬ÃŒQ¤=¤hæšôu÷vXòKDîäÃcI†‡‡U.—;,ñô% ˜ùï^i㼞ïq_€¤{!kî p/“(Æ3?ýZ}}}Ü"CŠåY6?aÝA?VqÀøÊÊŠ’Édˆ×â°Gbü•f³εXYYQ.— E¶Z-=ÿüóDÌçuçœ žÍïáR7—>ùšåíÇÕjµ‚·bhh(d}c`¾J±vô5ó„{†ƒÜƒy&©£ ûúúBÌV¡Pcï`¼Äš››ëð~bx饗´oß>Ý}÷ݺ|ù²Ž?®[o½U×^{­VVV”Édtçwê‰'žÐéÓ§õ¡}HÑhT/^T£ÑP¡Pè±1N1ôH€vf=ß¶m›~ë·~K—/_Ö±cÇ´¶¶¦\.§þþ~U*ÍÌÌè«_ýªþ×ÿú_ºãŽ;ô»¿û»êïïב#G´sçNÍÏÏëÁÔ‰'ôf7þ¸¯Û+½òã.=r~6K÷°8w{8¯À%7îºgÃõ¸·Ú±aºæØ­klºXJý”n™‡Ô™õ†×% ’^ó|¯ö±Fv[Ÿy'r‰DT(´{÷îBi@ k:€³HP?I¯{ÿn ŸE"% -..†v¥ž.«ƒ,xðƒ,Ì=1Np>.\šá€§ÙlêÒ¥K!ÍØØ˜VWWU«Õ´¸¸¨Ã‡«T*+h»Ý'eÇbëç,,,„û{Ûà AÎáR©2Nõ÷÷`¿yóæ_²eËÍÌÌ€fLÔëuŒŒèÌ™3’ÔÈ9/bìãSRo. æ±d#y!PçrHîáçæxP³Ë‘˜3ÌGÇXÑ©r5?‚×ô#uðö‡D´Ûí +ì&#Œú€ú¢ÿï–üñ}ˆ%ÞÓûò\N¬ãñx¨+€Ú ÌOæ õ ·{(›6mÒŽ;‚w“Õj5g,öÑhT!YÁåË—CÌ’“ÌîàsoC—.BþèG¾ïÖžf³æ;Ï7·Û뉱9õ\ú†×€ïÐÖn”b½äÚ1Ÿóî©*‹á}ú£qÑèF>â9>üáëç~îçtùòeÍÏÏëäÉ“ŠD"úö·¿­|>¯}èCºõÖ[CœÆÔÔ”‰„ …BGì”Ï;÷ ñ̜ωDT­Võå/Y.\е×^«ãLJõˆ4¿x†‡‡U­V5==­©©)Åb1ÝsÏ=J&“úË¿üKõJ¯ôÊ^zä -tþvPê€GRØ´°À±Éqˆs³±ø{Ò†“ϸ¼È-}€©3H=ÿÐÐPØ|.ñðt´l¤lØ~¹{¼.ÔÕ%0l¬H#¶nݪH$¢3gÎhiiIµZ­C–´ºº¤»|ùrG~~ÚÒ‹K\ø@ü,Xìµ§™Ó6®}Ì9Àô,K!~çò'¢MŸÁrZ©T”N§500 d2)Iáü™™™Ð?äcÅf|T«U% E£Ñ w¡~ H$²ѯ迩±¥RIñxs9-6C¬ù€È…˜—¯Ðw\°ÂçBžåz÷l@œØðÌ~øaî Xò€zI*•JÚ¾}{HKZ¯×Cð9–HÚƒ<þü[]]í°È3>±#×ÀºÉ³¸Ö|ll,hë‹Åb­œzNû!ïJ§Ó!uÛ¶mA«¾²²bX¸àár/dÚK4¿¡ˆE!¶¢Éxû8äÑ’‚ÄŠ9ˆbì;¨D6‚€!"x†|޹G2ãr/iÝxHgÌÄãqÕëõPŸn ¤hãñx}²®ïàć±qð×wú¹ÌäþxH|Ý ½¨^2æÈêêª.]º¤¡¡!íØ±C’tÕUW©V«…lKcccªV«ŠÇãÁêžÏçuã7êСC* a½pÏž¿!•H»0”´Z­àÙc¤¢Ñh?îÃÛÄóò[Úº[.Ëó²î2ß<£mŠäŒþ‡ø%“I---8$œ8šD"Îñ nÌSÖfÖÇùùùàm¨T*zç;ß©L&£3gÎhddD/½ô’Μ9£þþõ³w~îç~NwÜq‡†^xá…p¢:Fß tÒº!N=ìÌL IDATw :00 K—.éöÛo2»‹/*›ÍjË–-ºýöÛõÝï~WCCCú½ßû==üðúå–[táÂ]wÝuzê©§~ô ø§¬ôH¯¼¥G@®ÐâÈ`Ì÷¤uK¶ol².¥ðͤÛjǵ<0›Í ƒÍÉ% òçÔë=–pêC]܃ÁuÐc­uà'md™, Ù&ÍëþýûU«Õ4<<¬Í›7)@Ë {™ØÝK‚… mœ#àä«4¯±vÓ&d•qÙ–i€¼ëº½MÝšï\@±¬íô#mW.—ˆ¢/},hº½c÷ÆãqÕjµž>ŽÜsäd`å§:»Œr h*•J¡±î—Ëee³Ùî¹ÅI»[± ó6äP7‚_!’:Æ™}ž‰³ ÖÖÖ”J¥‚•@ÏxvpMl Ðïå’GÚѽ(.ëò!Æ\£Ñèáð¹ÄIðnP€¨2^©7÷wÃE÷¸{@×É,ã˼ÏzBÛ´ñŽ0‚±ŽügÓ¦M* Z\\T©T óïR³¹ž*•Ji`` È éOÄ)ÑÎ9Hï{Ì•ŸÏÁÚN§Ã8‚|a`íæ>x@h<„>!ô놬;ÔkÇŽªT*ŠÇãJ&“Á³ÉX`Ž`4ð´Æ<+D£Âüü¼ªÕªvíÚ¥‘‘¥Ói«Ñhè™gžQ«ÕR>Ÿ×¾ðý÷ÿþ߃àOþäOôîw¿[ZXXP*•Ò¶mÛ”L&uöìY ‡ñHV;¼ªŒ§¥¥%Ý}÷ÝúèG?ª?øƒ?P­VÓÌÌŒ$éðáÃúÄ'>!iPó›ßT,Óƒ>¨¾¾õÌ}äúf–7ÊÒ+½òF”¹‚KwÀžKܺ°w @aCÜžÖÖ6‚*¹.ÄÅ-ul¬þ›¦“ îúf³©l6«jµ¬|’:4álš’H}ZG  8™Lvl»C¢àò$´“[$]jˆ–ÈÒëK<-´Ÿvî’'25s¸5\RðŽ¸µœ÷Çkkk!-m¥R À¢ê#ÏÝ××ÎFi4Ù¨x©ýDÝ’:44ÔáÍB–Gb©­×ë ÂC–®T*¥Ë—/kyyY»w﯀.÷f_@ÿaQv™MÍôàbGÿô÷÷p„t… ]€ëv{]‹¿¼¼Òž:Qðög>B¬Ûôµ=8±âó=¼ ŒYæó”1ä’;<µZ-@??¤M'dG~Þ›>m(mdÂên,Ô.«sÙ €D¿;ÙrâØ„@h<»tŠvï¶bûy( —ÇmP\*ãçexð=aqïÍèè¨r¹œÔl6511Èc£Ñd†q`#„3LΜ9$‡®™²||z,‚{éãT*Õ‘R¸Û³ƒÇÃI„{!ÛÚÔ3;¹×Á3,9€ôàcÆœKu¼Ÿ©£ÇuI s—fB¸(H¦X3:Æ1àœçãÞ̾¾>Åãñ 9ŠÅÖ•cnCb/H³†5¦¯¯¯#m/ã‚ÌSdîK;Óÿnp`ι—2̺<88¨D"¡H$¢R©¤z½®D"¡‘‘]ºt©ãIÖCæu ×ã¹ýž¹¹9µZ-år9=þøã:tèÊ岢Ѩžyæ}àÐòò²^|ñE%“I}ûÛßÖÊÊŠÞ÷¾÷éæ›oÖ}÷ݧJ¥¢b±ŒA¥RIkkkJ§ÓÚ¶m›¡„œŠÞl65==­ƒjvvV…BASSS!ƒ^¿J¥R =çÎS6›U>Ÿ×G>òMLLüÐýö'Uz^ùi*=r…fEº’6R]º¬É@ÝÃP—6\ûl^®¹F£AJâR#—B¹µ– `çÖæt:•¥ G"‘è°Üaý$;HÁ2îºéîLRüÖ%@’Â}Z­õŒC$ýà?´á±Éf³>N`Š"Fù×}6²€ @è ÂI…Çïàùà¹\ ƒU`ì`؉ÖfÚ Y ÄË-½ÝR8®ÔÁcRHP`¥¯y.¤OCCCAª±ººªB¡ -[¶hyyY³³³Aª722¢¥¥¥`¥ˆÕ€ûÁf™LFJ¥R!Í'mL]ÜÒííÈØ—¤J¥À{°ÜK(õ `?<O 〾,>ß1ÇœàSÏnBÞmiGŠÇ|q9ÞåNc—iz½™“.¡„àaÌ ^|æ2#ê™fìñ'3ŒG“|Ÿq¡u¯ ãbqqQ/¿ü²&''C°q¥RQ>Ÿ×ÐЦ¦¦Â¼©Ÿ]ÎHß³Vâ­ŠD"ÁààòJ'¢´)íQÁ°ÀéãŒ_—©—Ÿ@ÎÜu)"míëõ³†ãmŠÅbá¼Æ,I¸_6› ‰=bºô‚Éóùá)–3™L‡,²P(¨P(£ÓW¿úUmÚ´IÏ>û¬VVV411¡ïÿû*•JúÜç>§‰‰ ýÅ_ü…^~ùå@ä1$ óI{@¬šÍ¦^~ùe%“IÝtÓMú‹¿ø …ܤþÊW¾¢ûï¿_[¶lÑ?øA½ÿýï׫¯¾ª¿¥G@zå§¥ôÈZCl‚[ÖÝÚìy7¸jØdÙTï@¬g5bCtÌ糖f€£9ò{· »Õöõ@/Z—ƒ@@ØØ]‚C¦¤³gÏj``@•J%À’†ž´5iWð¨·KÅx.l¨ô‹ dzâ3€ˆ“AÀ﹌Àê„ë+}ã§’:tØxðÄ`™„ ¡Óç>Xa¬hÑ3™LðTÑ-Á¡Ÿœ˜’‡‡‡U©T‚,fll,€øùùùî±GÒ™Fêæó°˜†|Ñÿô1Äàq ßeŽðww›yÊV{^¯î8 ÷>@âñx¸¦¼olSîë>¼#N]rØn·_“Á+†$<“{:.óµ Ùlvx/ÉHFö¦þþ~e2‹E=ÿüóªV«ÐFÄ¡ÿ IÕj5x0ÝëÄœuïqp'ŠÄ‚WärLH>÷pã$ÏûÖÛÕc÷¸Vw{»¼œ5’EàÉ!¦”º¬YÉd2ÈYOœÀ& hllì5ñ[¬û¬‘H$$Ú`lW«U ‡SÑ ŸŸŸ×C=¤»îºKŸøÄ'ôÔSOéÁ dŽõŠLfôí4<<¬F£¡£GêÏÿüÏu×]wéĉzòÉ'µeËíÙ³Gõz]³³³a›žžÖÊÊJ/ o¯ôÊÿaé+´8ñÍ¥[:âA’Xyý¬ÏåR@<Ž5Ñå%€“/üžÂ=~yN¯;DÇuâN\þ᛹˺ÃÃÚU³¹~ :€‡½[‚ƒfÏuv)õ’6d\R'€´8ÁG]y~@E·´PàšsÚ­Ø\÷Ü›áïV=~Ç%_g¾ã1!€^§ÓéD¶nݪZ­À/ž¼È2ÈT$IÅb1´cµ¿¿_ù|>ÅúøpËh«Õ Ù¦lz———ƒÖ¾!Ã’“hÚ˜vaÜð¸7ó—à@ÖÖÖT«Õ:@¬“UúÁ­íŒe@-$’àóÛ%MüžñËA°0žÛ½g.±s¯‹O—ãa1vÏ‘·…“Õ¥¥%¥ÓéÐÿxA4V¹óemm=QÆ¥[~(!ýÁ¼ •3¿a­[ZZê¡ h÷îÝ’¤X<—KáXgS©”¢Ñhˆac,Ræ"ýÏ5xFÚ²íÏíýÇZí}˜ ÏÝ+íŸ#Yrï†brÈ~µ¸¸¨r¹íE=¤Dñ4`<‚áÍYÓU*•ÂZÁžÁØÄó8;;ö€™™ èðáÃúå_þe­®®êïþîï´°° V«’N€ÀDÄÐÎÙlV·Þz«8 ‹/jttTÿðþCíÛ·OÏ>ûl0 ;vLÅbQµZMovy#ˆ­^é•gé+´ø¦Hu/‚÷h 3pyƒ9®Í5%uÄøµ]囥Î÷½ž.9rù€—ï8ø–@Q$é¤åýîk¸õߥM’”N§ƒ\ƒ4¼kkk*‹!6`àÅÅE-//w€'N:‹Þöú)€'(¼ïÀ´[÷Í5é³niZ÷³BpLv[Þ8J ^ŠîCp2ã*‘HhbbB‘Èzpë®]»tâĉ4Ý*ËõI‘KdKdÔ*•JAò†¦M;ž~399RåB&*•JxŽx<®D"äudúéžGN Óív»##׃d0LP1òBtïîeÄšïÈn¯ïñ»n`îYï >çÜÔrÄçmÆíëÞL'`Ȧºã«üYèqãzž2Pïó Û«ã„H$Òqð©{x Vf­âÀP—ŽI ó8‰R“N§õÔSOÏÏ™nC÷è–EÑæ.…(ð{H¤Ÿpä‘9¡bäsÕ=Žô½§êæÚî…€¨«ãÆ:DÒ圬Y%ŒÑhTÉdRétZÙlV ÑÌÌLGìäò•H$BŒÉüü¼õ ¿ð êëëÓ7¿ùMMOOëÚk¯ÕæÍ›µwï^µÛm=úè£zúé§Cü^*°·[¥R ^'²¶ÍÏÏëÌ™3ºêª«tÛm·)‘H„`ö;î¸#~855¥Ó§Oëßø†~ËåUé•^é+´^4¸¤ÛÒÎæÀbí±ÒF¾yu/D·¤É7h9(êì„…ët߇×üóÔ³Òhœñ;È€[H%)ËÎ;C æÄÄ„ªÕª"‘HÐA»Åe8Ýi#Õ­÷‹$o3úÏA)ý€µí k:ùqk%¯6îùñ¾d 8P0ëVLaÐð:+‹)—Ëéꫯօ Ôh4tîÜ9e2ÍÏÏøÃú‰öšºáÝ …*2=ÆVk,•H³"‘ˆŠÅbH{˸À+288¨b±¨h4ª\.âyjµZGâ‚ÆVgÈí˜Ã+Àáxž€áõˆs×þ»¤…Àï'èx+±8¥XÆ,Þ ® ¡q©$’¶¦MxŽî{ûõ9Ç?Oë‹·ÂçcŠùìdÐc3ºÇ©´.ëéëëÓsÏ=‚­éú”6ázÄ …ŽÇÔ‡¶óuÖ½K\Û3wñ}æ©gyó¹çÞC—oB!).a¥m} ò±Äx¢\Šçu‰Åbš $Á³"ŸâÙ‰³à™GFFBvE¤KŒÿùùùŽd"Œñ¾¾>e2™7rýõ×K’Î;§M›6é}ï{ŸZ­õsBžþye2™`pX]]ÕÒÒRðºC¼ùœñA¦µr¹¬¾¾>ý—ÿò_ô–·¼EÙlVÿäŸü=ñÄúÖ·¾¥«®ºJ‡×}þùçU.—Õ+½Ò+?zé+´&4ÒFö…gEasrA·µ½ÛJØt …îõ¤G|ÎÿÝ œëz6ôÝäílˆN\ظ¥,X¾ûf͆½cǵZ-={6®Z­ |s·w{l\–³ù½Ý âVïî¶”¹ÇÇìë}9‹ÔyîŠË«Üjí@ÊɤέþÆ × hzóæÍAò200 ÙÙY‹EŽŽêüùó!øuuuU³³³a¬¬®®ªZ­°…%é<›Í*‰„4Âî p©–âjµªht=S[½^²:`qçÎ:wî\¨›G@®ôZ/}ÌD¢ã°>€¢¤ÀXØq-¼‘ÄpE£ÑÕ B¥`@u0Š›gTF"‘FØç,Æ9çkP?ßRç™!Ýü‡Í{o;´úžíõÖÆu·Âc) +ܯÙ\ÏÞ666,ódÉcŽÓ”ªÑhh||\CCCš›› „g¥oüožƒkجúoÜ«ÆçÝ^7ožÓÝc±ÛÔh4B¼äOˆü»lŽóJ³Þþx)}íÖ 7Éd2ôé¹sçBüÆÄÄ„U.—ƒ¹Ýn+N‡vÂ#…§ð¯ÿú¯µmÛ6---éSŸú”fggõÀ)I>ô¡ijjJ‡îˆ3d ãcŽwÖjµtøðaÍÌÌèî»ïcîÙgŸÕ‘#GIZ\\ÔÌÌLˆz3Ëå­èy@zå(=r… Æ­“Rç‰Ïll|Ç'ÀÎ>Ýâ'm,^lün™÷˜×.ëªéßAFâÙp¸.Ö@$ØÀ;`æ¤ ë4äyD4ºž­eçÎúÁ~ ©©©K©ëê±Øcm|w{ŸØ© ÷ÐÑn!†¸ ‰£¿<§>íáÄ‹ö¡-<ÕcWÜx]½½Ý’í2+<1~Îu €°Òß߯sçÎ)™L†þáIâÀ.5r¹õ‹Çã$EÚªÉdRù|>\…Þßï—"¾¼¼¬J¥¢d2©-[¶(—ËéÌ™3ž$&€qƒîI¢ýWWWC\{€ÒgÈ`ÓNZ™{€$®)"¾ËåH\ÏqÆœÇõÐúϲ4—jñŒ>ÿDy»ø=xFï¯çusÂYb³vàa`,0ö<.ëa6›íu:é¢-ñXA|Ûí¶êõzð¶ùÚíòµŒõ/uf^økÆ—üÄs 2saãڼdzAÂ|­dž°Fø``` ê#/u²ïk%íÖmì!ûÚÚÚZ¸V, Aÿ;vìÐùóç5>>æ×ã\ê†'äæ›oÖåË—•Ïçõ§ú§:þ¼Òé´†N:¥½{÷jïÞ½Ú±c‡NŸ>’0–È>çãŸúCÂÚí¶Îœ9£ãÇ+‘Hèšk®Ñ–-[”Ïç533£b±¨t:Ýó÷³Vz¤WÞˆÒ# Whq׸K<Üò훋2› gòáüŽMÒÁ³K›Xø‘š8˜p77ÐuÀë–k,y0¼æ:<'õv™†Ÿu@°¸y!€ÁÌÌŒZ­–¶nݪcÇŽ)[?´ƒÝä9péŽp­½[}ÝzÚ ¸'¼Ï†í„‘{¹eÔIïu·!ýϽ}¢_GQ?\ŽçêïïA夵¥þõz=HY|L¶Z­P pi@‚`\îGš\O½ïÜc‚‡ƒ1Øæ»~J,¶~²w±XT¹\Öððp¸×ðð°ªÕjè{,µgÀ³;—¿`M÷ùá„ÓŸ`ˆåÚ3Ma±¦<ý5÷s¢Êõ܃@[38Óeqq1x†|î$‰Šâ¤òÁ|ubM[P÷\º%—ör²ÁeÍðïq=À5sÐIÒÖôãæÍ›Cì ãÙO±X 0ŸsÒ .×J$ÓÒÒ’òù¼R©T +++Á "I™L&d¼J¥RzË[Þ¢w½ë]šššR¡PP4º~èààà ¶lÙ¢ééiE£QíÙ³GwÜq‡>²VCÉ„H3~˜cKKKúö·¿­r¹¬÷½ï}ºóÎ;566¦B¡ oûÛÁCˆœïÍ,o”¤Wzå(=r…–nIŽôÚ¸‹î?=»^¯€†kòÈà^ÚÐz³©€°Ìùfêzi¥¤°‰®‹žKbØ8»=/ÔgÐ6‡††:2„ †@ÈH$¢S§Nu€P6Ìn+=àÁf×- ðs4ºådÝ8—yy,‹ƒ~À£“·SGÀ í@ôúP÷Ðn©EfØâ:©TJív[…B!ôÙÜÜœ¢Ñh?’:¬ðÊ©#òÆ@¹\V©T àÌ»‹F×Ó¸âu`lG£ëz÷t:ÝA˜ûûû•L&U*•Bßôõõ…ì<‰DB›6mÒåË—uþüùàÄC>ý=÷}ìÓ½UxÏ0zzR®KŸ’É"†š~‡¸¹Åšv¥Íòù¼J¥’r¹œ‰DHSZ­VC{ÍótK $»¡Á= .Ë’6ÎÂ`üùXöþïN¹Íÿ~]Oƒë‘Ø •JIRÌ{’8qc-”Öƒ×ILÀÚåÏIf:æs›ñE½ºÉàuÎçó’âd’IÛ¹ÇÌÉðÚÚšR©TG¹{{ <çPN${|—çôƒ[%…çeo`ÍÄ0'1ö0¶ÇÇÇU.—566¦ÕÕÕâ—³”•ÍfƒWtyyYgÏžÕùóçõ¶·½MßûÞ÷T©TB,NµZÕèè¨BßìÙ³'ôÑÙ³g;$x}}çúô÷÷k~~>x¸VWWõä“OêÒ¥Kºá†ôó?ÿóÚ¼y³vìØ¡GyDñx\étúÿgÇí•^é•îÒ# Whq€êšbßÈ%uO,ˆkkgq8x€0>Ü×-ëa#â=À%Åå>|sw·{ ÜòÈaÃD’àž'!üíÖkÎïH§ÓA20;;«B¡ÀD*•R©TR&“Q2™TµZ h÷Àоœ»áV}·ÀwK9ÜJÜM.\BÆû!©àøk·ÖB¸†*@÷ñjêêÙ‰‰„$¯ ãîýj6›j4Á9sk1}—xQ|œ¶Zë)6!SXiñ„xÊgb–9ŒÇã¡®KKK!3Ä/utïÖp·fSWÏ¶Ó ™CŒQ@§ËÙ°|¿¸¸ÈVyæLIgÄ®¸—{2‡††:N,§Îõz]kkë:wæUˆžÇ ¹—‘5 »8‘î–aúf|{À0ÀÖ38ÑVFÏtåqVžœ:2ö¸&Í.ä.]O[¯×C€:qÑhT[¶léX¯œyÀóÀÀ@ða8q¯—×…:¨=“œÏ7Ʊ=x…ñ¼²¾³2'èƒht#é@__Ÿ*•JðJ.--)•J…àlæP÷£úчxgHf™Éd2â´b±XH­K—.…¸NsÇãÓüü¼ÂØàyFFFÂzȸZYY kB¥Rщ'táÂ}ìcÓwÜ¡ññq½ð šššzݱþ“.=H¯ü´”¹B‹ƒb66À›ª/ÐlÙ4©€,TÝR‹nk›*› €Ñå €·d¬´; æZÝò@…K¸°†býu ˆ/¬š IDATI{”J%mÞ¼9¯f³©M›6éÔ©SÁZê€ -àJÚØLÉåmq"¨¥¸–÷Ïáñ–)ÝÒÚ¿Û (m¤ääw2@¤àý‘6ÎYZZR.—Óøø¸¤upLf0?©J«ÕÒââ¢:$&ív;ô%?©‰‰ }üã×Ö­[uþüy•ËåŽTÅÍf3¬u>ž ù‘H$ÄÄ<ÿüój6›úgÿìŸixxXGŽÑ[Þòý¬–©é•7¢ôÈ\´°a¹¥ÌÁ-àÅß.³rý/Öq@„{G|AÇîwÀ‡F©ó<îM}º-ÿî-¹4Á½!HY<Î Xt@tà 7èØ±c!#D 1 âàžîK=ÐÏÓ>|×A¶?¿KŨ›Ët TN.8¸Ek2dé©q©2* õ§_¹ÎØØ˜’ɤvîÜ©éé鎸ÎL¨×ëá·d¶ê&h¯ó,ŒOÀ¨{©°nV«UÍÏÏ«=` I^*• äqff&x¨ðš ÁYZZ ÖmbQ'•JE™LF·Ýv›&''õ裪\.+‹ill,ÈV¢Ñhx^êëã °Öý¬ËBc…|âY É¥n ŠçIÚ ~H¥ ïu 3?£Ñh8+%‘HÆó@r£´›§ý…D{ž‘×îéôkÓÌ—t:²SAVÉøå‡þ¹L‘×xRˆb¼³Ö?^+++š˜˜P>ŸW6› ÆÎiI§ÓÖåË—µsçN9rD{öìéX«¸¯¯¡ô7Ü=±Ìa—ø![’6%ìöz²Öu/˜—Ý$ƒõ 0ÏøS±X ×xCÞFX#Xï<>ÌP<“{3‰ýboU£ÑP6›Õêêj uÅbQÒzœG,S¹\V&“ Dž«¾¾¾MëâÅ‹j4Ú·o_¸^BÖ“l6«L&úi~~^íöz2 æk*{ ‚ÕjµT©T$IcccŠÇã*—Ëzøá‡õÊ+¯èÂ… á Ô7³°ÇôJ¯ü4”¹B –lÏ`Óí`ÆÚˆ,½4–w·dºCR =d lˆ’:‚À¹‹?¿qi$„ ‘ݸ&×ê–™uÇ`x]½¬ÖËËËÊf³’¤ééiÕj5mÛ¶M›6mÒ÷¾÷=:uJñx<PϰÄóSÝSÀ§{…ÜZŒÄ¿»ußnel!!pPIÿxà31 n]n·7²¹ç…âVûd2¼@Ï=÷œ–——ƒìÁ½ÍfS ZOP€ÅÕ ×q¯\.§f³âqòù¼–––‘ÑèzƲ}ûöéòåËZZZR¡P€àmqq1ÇM›6©V«©Ýøø¸²Ù¬Òé´fff455çu×]§|P.\Ðòò²6oÞ¬sçÎ…yÄXàù}lF»=¹\.¤vò‹Fž3HU---ÂÇw‘iI ž‚È»ç*€Ü ŒSæš“B~ï±-<cÜc‹VVV‚WÈ ¤K¢\^äÖgÚë·K:™Û¼ÆûÊ5Ü#éë}Ou&“ѶmÛtöìYµZ-íÚµKO?ý´êõºÚí¶&&&T.—µ²²¢¹¹9õõõ©\.ëæ›oÖ©S§:,åÜ×ɲºd2©••ÅãñÉk³Ù q¬³îÆó±°°bqhgæ)^9ÖJúÕÀ¹7Ä¡\.kppP£££¡OHrZ;k4íÍœÄsñLeÿv{=‹•¤ð:N«\.+™L†ñ41ñÿ±÷æÁ‘^ÕÙøÓ‹¤Vï›ZËH³ožñx™a¼P`Œ±YL9‚ ’8–"a©¸B „‚ÄI¥*ÎTÂfcâ"N‘Š1vYLðÛcãm<žÍ³i$vu«7u·º%u÷÷‡~ÏÑÓ¯ á÷}0ÆLߪ©™‘ºß÷.çÞûœsžsN/J¥r¹œ䜂ŵäÙµnÝ:LLLØ^dÌ–Ûí¶Ä‰D›7oÆ…^ˆ……¼éMoÂüü<î½÷^£Õ-/¯dÀ+•Jv뙟Éd윥gªR©`bbáp.— Ä«Ý~S H[©i·ßDk+ çh£¥TyÔ¼I Që=¾Ó%]¯×ÍÚ«e‚+ &à ÂÃÚ´¦ª§ƒà‚@‹ö¢ÒF”Ê£VHZ¼Õê˱¿RŠO (õûýfÉíèè@*•Âää$>Œ¡¡!ÌÎÎ}‚A¿JRº-™|³*……ªRªÈÉç8ù<ÒPø3UœÔ%§¥˜€Á˜ÎØ`5Á€z–˜éªÑhXQ1*¤TèÍPL€NpHK?RR©˜ò2—ËaiiÉê…°ˆÓìnß¾‰D/¼ð‚y<B¡êõ:"‘¦¦¦ŒJâ÷ûžÁÌ:µZ­Å:Úl6í™Ç·T¿ß@ ``, ™B¥ÔÆp.IG …B¦„²òz­VƒÏçCoooKP,=\õ¼œR ` Z~©0Sö¸Ïh‰×ø TAQ°Ë=D°O™ã¾¦‘ƒ û¤ è ¢Â£ µ×ëµ¾éóÕó ž;RvxV©G–Š˜ÛíÆúõëqÉ%—X°ýÆÑl6¶ær¹N§[” ŸÏ‡h4ŠP(„©©)ÛwÜ+4Ž8ë¸ðŒ¬Õj(•JF¥ã{8GT5½\.Å’ÆÆPÑ{¦™ õ<`¶'—k¥‚;ÓêR ªÕj6—ËÕBÿâ¹MY¡¬2¦B,mI&“…Bh4Vj$E£Q‹ã —¬££ëÖ­C±X4Ïk¯PææççÑÛÛ‹F£aA“É$®¼òJK«ýŽw¼ßþö·qäÈS`z{{r722‚‰‰ £w---¡¯¯ÏÖˆ²§´ÒîînË‹ÅÌSÏóÑív›§ezzúÿé>n·v;[[9G/c^8À*}B­Ñá´ ‘þ ÅŠÈ‹ßQ Ê¿ >ÕjÏ ‹ÏÒ8 å¸3è—*Á®Zù•®ÞÒOXŠEÆ p<´“Ú¢`ëÖ­èèèÀ³Ï>kô#GŽXîùŽŽ n$8Rn½RËØ¨|þ@k(ÐZÖLRÎt>4n…1´ôs.¹¦ÌÊy£bG‹&ßK€©tZV‰„Ñ fffLYÇã…BÈår6·§“rÅyQJW£±R'€_Eò³yÙSf˜Ê“z¢NŸ>#GŽX†ºîîn«÷P(LÙà3)ëTVi±&à¦e•VeZ§»»»‘N§Q,188ˆt:m´ R¸Ï8NŽAçJlÙ²§OŸ6°377÷2ú [UØh9¦ÁV©T tz<«O¹áÞ¥’  3 J{R¥ƒ{‘^UîGÃâù·38ß©+½@K¼Ÿ¡s§ç¿CÙSo$-øœ£ÑÑQ bii¥2÷™3g055eJ½cÅbÁ`Ð<¸ÄÉ“'þ¦1)Ç 8ªB@À®ð¨üilÇÀý̳•ûgaaÁhm4qN™X@ º~Œ×â|¥R),..š×²Å3ƒF®-?CƒŒÊ8”;¿ß®®.ÌÌÌØYÌ8š¥¥%T*lذÃÃÃ&sssèëëC6›E4E,C³Ù4¤^¯ãÀXZZÂØØöíÛgÞ¯w¥ž‹×ë5šU½^G2™ÄÔÔž}öYlÙ²çŸ>&''Í És÷˜Þ¤ò¡ÎãñàäÉ“¦Ø½Ú­íi·×Rk+ çhã%F°¯ÞõX(·™Ö“žZywìØÃ‡›å—ÙÈ;gÆR©d4™îînlÛ¶ °±¨u^)Y´„ÓRÍçÌÎΚ’LZD*4\Kʇ¦<%8U9`Ê•|öÀ“óL%ƒñT>Ù**ªhpÏR–øy®Ï¯×k /×ÖyþpM€ÕB‹Tî)“ôæÑxAy¡÷ˆJ;û@%ŸžEfo[ZZºuëð /`||ܼDšÝ-¢Z­bíڵزe >ð`ß¾}æ `_)ŸêÑ Ìóüã8UÙи-õ>j" þNišªÌ*½”ë@™¦2Íào{¤¢Z­"ŸÏ[êf>“çÏ[Ê׃rçñx‡‹Åì<àûé9j4Èçó&ã•JCCC¶ç6mÚ„ÉÉI\Òóù<Ö­[gIªÕ*º»»Q*•Ïçáõz±}ûv”Ëe;Î?ÿ|ìÞ½ßýîwÑßßo†˜œ¢^¯Û3¨T‘úHÃc´b±&''ÿ_¯åvk·sªµs´ÑZEÏ<þÆêÉ õƒ—Á»G~ž4*!ü™>“)ya;A¶5üœR68 ´T¸ÆwÐjÉç)à€5g´D.//c``“““V÷C5­TÔÄ÷2Ž€¬ó»´lêx ð€Öìe|/­ ü A-ãjÉTeG‹:êgÔ2N°I Tgg'òù<–—WR€2õ%£%輨2É÷*Ðåzq½ ШÄÕj5£x& „Ì‚Ãqhí¤üQæ ˜éi!ØŽF£ðù|H$&ó³³xä‘GlnHøìB¡`<õH$bU±#‘ˆ)9šžÔ T9~‚U(#”S ´VÚ#9-áj©eÌ ©#ªp*õDלkD¹Ð*Ûü×–^õЩç ),+•‚Xg¸_ø^Ö¡‡ˆ^)~‡òãô0ªW†F *EŒŠÇ㘛›C6›ÅÔԔф†Ígww7ŠÅ"Ö¯_ÉÉIlܸ?þx‹'Rã-¨èë9À5"LçƒsàÜwzÆò]Ü[ÝÝÝf§}Öy¥§‹ãÖ>rI•ä¹§K=Ã(+|åŠà? ··×Þér¹ÌƒÄ}V,‡‘ÉdlŒµZ Ùl^x!öïßoF…B¡`ã`–ÏçÃúõë155…t:mÅ#{zzììöxV DNMM™’îñxðàƒbÿþýèééÁ>ð|ë[ßÂääd‹G†òµ¸¸ˆH$‚……$“I$“IÌÌÌ R©˜Eå–çÏ«ÙÚv{-µ¶rŽ6Z’´ä`'ÒàåAÔÊsVÊ•^ļ¸x¹ñ;z¹ò²¥Å(ûCàÁ¦Š/C^~¼ÐÕÚ¬söã¡×ƒ ˜ßQ¯ŸÉÔ£LÍÉL`%«Ëää¤*,|/Ç©T׆Ÿ¡b¢*µ:ߣãTpÖl6[²”ñ öÖ¢†œ#ñûýH¥Rh6›H§ÓÖÿååe«M¡µœ´9‚«ÓÚKpÃlGŒõᜑZâ÷ûÑÙÙ‰±±1£Ò‘RBY •’sÁzn·»%€XQ~’É$ü~?vî܉r¹ŒãÇ#N·<ƒh {<«UÉiI`“ÙÙY³ SQVï°šŽZ³Êùýþ–x)*Î}Å=¤2FšóÅ5a?¼óº5ñç†rÃ"¤œOõÊ©á€r®û\+˻ݫ‰HSReä•5*ÁšfXUt©ŒkŸ(Ç|=@\;ŸÏ‡xlk¯1^Ã=餶©ô&•5=y–©¸*€º·i¨ˆÅbX³f Ž;f󝯆R©Ô¢À•J¥ƒ ŸÅ¹äZ¨X­VMvynÒKÏ)×rrrÒ 9& +Húä“ObóæÍvÞ²(©žÍËËË8räæçç-МñZ^¯}}}–q/NcÇŽh6›8r䈥öz½èééÁºuë0;;kó]©TÌp°°°€J¥‚`0hg3îKŽ‘Évk·vûÕZ[9G¹¿çza«ET-^üŒfóaSëº>Ci¤KèåL‹¯ÓzÈwª'Ei,´¬*-G-©T4 ±Ñ"® ÙÉ9Wë%ƒ>µ~I½^Çøø8B¡Y÷xùò»ÏL¹Z3øh ö @‹ÅšóH`­´6¥Zñ÷œ_UfTbŸT!"Źö”‰`0h5zzzP(,SûÆ÷:½_ "5îD-ˆ¡PÈËPD:QWW—¥&(ÖøÊ>ÓvÄ2­j*•‚˵’MI•[έΕR¤hýfŒ=•Ê¿‹Å}}}&·ÌÊ566fY¶¨|±p£'kì…zø5ð›kK¥†}R£G„@Z ÜÏœ?þMÓ£Iã.åS>ßKYâÙâTFÖ¬Yƒ\.‡f³‰3gÎ`bbÂÖ—2B«8é¥TÞæçç‘N§ÍÁ¾ÓÀ¾ñüÑýF9"ÔëõšÂÀxõܲï<yv3[˜RguÓàv»ñè£â±ÇÉ'°¸¸ˆ¹¹9„B!ttt`jjÊú§1qêqPϦ®טi·™¬„é¤&2®Œû7[jîT*efz?]®•ï@ `Ô¸J¥b´Êr¹lô«J¥‚p8Œ¹¹9 #‹¡§§Ç¡!4 ìܹÇǾ}ûpõÕW›W“cRš£Æ^ñœUf³Ù4O“Nü®µ¶RÓn¿‰ÖV@ÎѦVq^²¼sÌJkÑgÜ3×>ç‘Þ,Î=•7fÛá¨Â¤–EÆ„Ãatuu!›Í¶Ô? 2ű“s ‰DŒâÅ´šüû@j ¿O E?»´´R¡¹Z­"¢P(´d%S¹T¥‘¯«« •JÅÆ“ÍfÑÑÑh4ŠééiKçºvíÚ ­ZÍÙ7¡j9WUï׉ž"Ž»§§ñx…B©T ‰DÂbOS*•ŒzCe„±¥RÉÀ“D  Å˜@y¤lªl(UJ-ì”§¢M…\½‡šaK½iêäï¹ÿø* ëõ:²Ù,"‘–——MqÔ½Ûh4¬~ÿßÛÛk •k¡ï¦¢ 8÷ Ò©ô,àžfÿTù`_8µÈs-œ1U|_<dž päÈLMMµœù”G®_gg'R©jµšÅgУ¡”\Î'ûÍŒq}}}p¹\(—Ë(‹ìNj*Ïq*çœÃ‰‰ øý~ÛïºÆµZ •J¥RÉ<å]]](‹¦¬4 3¢QA"½kãÆ( ˜ššB$Áââ"žþySp¾õ­oaÆ èîîÆðð°­Æ©‡¹îînøý~ÌÍÍÙ}ôj75Ôµ[»ý¶·¶rŽ6^djaTë¤Ó¦@H-õt¼˜x‰ò"uÒ;ÔS¢4  5Û6UDô÷´Ž©åÏéyÑ>)•‰žRgÔb¯V?‚eR½W*ŽŽõ‡a¿ßo€O³iéeªÊ‘³o¿hTAP«£*‡Œ–£Á£F:~¥\qø õÈ(ÈÕ ™rCû©”~FÐÅF°DK«R"8ïô&,--Y\‡Û½Z¼rff±XÌæ²Äùh4V«R¯×2¥16|'ÁŸ£Y‡T! '‚2AÐFÏÊØØ˜mfJcÐ-½8JYSÏ"׎€Ÿ`ïvzTÞ)Wù|Û·oG6›5ú û088ˆR©—Ëe²ÊØÝahh@ÍæJ¬ÏÉ“'Q©T¬‚4Çǽ¨uF^‰¶©ûZz+ÕcEÅg ×€†Ê=*{êMRoŠîiß”ùx<ޱ±1S>”×OC=NÇ臺gt¬ì*J·¢âEEE6Òè´Få’{IãG¨¨ÑˆóGÚ c(˜ž›Ÿ¥ŒvuuY}ÞÞ^Sš¹ç¥Óù.fW#¸'°'…Íí^ Ôf½Ör¡Â{úôi ÀçóXM|ÀZ@L<±°°`4<*ÿ‹‹‹èëë³s·\.c||Üd+chhCCC¦Dö÷÷ãé§ŸÆöíÛñì³ÏšGdÏž=øêW¿jg”¸.ª<òìl4ˆÅbÈd2¯x†ÿ.´¶RÓn¿‰æþß?Òn¿ŽvàÀ\{íµ²tˆ¯{Ýëpûí·¿ì³û÷ïÇÕW_P(„X,†w¿ûÝ–aÈÙþå_þÛ·o‡ÏçÃÆñ·û·-¼õ_Ô¨8Ð’íü“BCÊ/sf´Ñ? ú•&À Qã0ø;¥tð2Vn9/öA-ƹJíøEë Bx¨e‹—>•ö“óT­VMñ¨ÕjF "£\.[ý *j¹%`åxؽ°yij솎AçBƒAÕLI dÓuS ,×Dã ´©BÀùW~=é_ª ªu›¯³³~¿n·ÛRÙ,+Õ™©È¨Ç*N[Æ-6r³Ýn·~ò¶ ê}>Ÿ¥%eŽÊ”I³Ï¬´4“²´´R‘œUž)ß@õzccc¨V«FÑËåB(2Ï ©a”?Ε*|¯3¶‚r¡^»Z­†ÙÙY«ÍjîãããF&“±ì>ÌøÓh¬¤÷÷÷%-•J¡¿¿}}}2Ë2e„ïdÆ2Ê4×òGªR´8f‚\•U=ø®׈gåšÞ*®ƒÓKÈçÓƒ´¸¸ˆX,†D"d³ÙÏTµZµ®5ã€Eõ™gž1¹×=Ç=Å9â>fßH7ä~áHNÏÿVú¿ãr¹Ìø‹öxgg'"‘•B|sssö}ŸÏ‡d2‰­[·bûöíVä²P(àÈ‘#8uêJ¥ŠÅ"šÍ•¢‡[·nE*•²¹çYä÷û‘H$ÌÀ¹ŽD"æ±bQÍF£ažŽ|>‰‰ ëãÌÌŒ:4 Yww·ý¡Ÿoñz¨’Çñ°€–T¢ªxr=œ €1KKK8sæŒ_V´æ<‹E,.."‘HX:Xe ‡Ã¸à‚ °¸¸ˆÉÉI„Ãaär9Ôëu àøñã&ÃJSo…*ïêQ¥|ªüëïõÿêa£bDE…óåôŽpù~ʶze”ÊÖÝÝmõ#X¯FIÝŒ½àÞ¦’499iç‘Ò6U!еb€5×Ï¥²¢{žûF•ož¹ª´:©™œ¯× ¿ßx<ŽÅÅEKÐ@e‚EûXÉ}aaÁêã8Ï ÆCE"ìÝ»Ï>û¬ÕÇðz½¨Õj‡ÃV4ޯ׋P(dóÝh4lÿ¹\.Ë<ÅÄh4jK·Ûm^Qzãêõºyð°víZüñÿ1|>~ö³Ÿaaa{÷îÅ–-[Éd0== ¿ßuëÖ¡³³ñx^¯ÓÓÓ– "™L¢··¡PG5ÐLï–SfÕS¥çÖüüüo8þ¿Q~Õçþ*mbb7Ýt^”¶°M»½vZ[9KíMozÞô¦7µüìšk®Áðð0n»í6S@¾ð…/ »»÷ß¿¹Œ÷ìÙƒ-[¶àÖ[oÅ?þã?X r½å–[ðá·Ür €kÐÒÒ>ÿùÏãSŸúÎ;ï¼_Ú'^Æl¼ð•îÄ«uXµ@­GÏJ¡ÕSS’<òÝ|§f4R°z;ã$œý 0áø˜õŠÏ `VË2)LÎç&“IópÐ[«Õ¬H!ß§Áñ¯@ðKP©qÁÏèz¨âÂÿsŽ5å* ׇïvRTø RqhÍãsU™àœñŸA ¤sÈs,T˜º»» tnS«ÕŒÂFK¢&й¤E’€€´è)W B©„øÐËEJ‚;õvÐr˺,‰Œ™àÜ‘îv¯¤n6Wâ=^|ñE›*º¦¿×£2D™SêžÎ©3Á‚þÞår_ž}µ9ôz½µßÍÍÍXQ¢è-‰F£èêêB¡P0Z•uUB¹×{Qå‡ë§ñ ”9vg|e‹k£¼ô”5l¨ò¬ÞB5&ЗÏç-E3kjPV´˜c³ÙÄÀÀ@ uTÏ66ŽÕi¼Ñ3”¯×Û’Ú•ò©465èyÍ}ª{YÏ«h4ŠÞÞ^ŒYlÙÒÒ’QïX„^}½=üc´Ö®]‹þþ~SÖ‚Á Ö¬Yc1ŒrÈú Èf³Ö¿¹¹9T*tww#·Ô¶Ñø0ž­Åb~¿ßöâââ¢y¡Oœ8arÃxÂ={öàg?ûªÕ*æççmÎr¹r¹ÆÇÇ-“V6›5O ³Þpà øÿøÌÍÍ™!ƒkì<û¸Ÿh,8×ÛG?úQ¼ùÍoF4Åw¿ûÝ–ßMlÓn¯Ö¦`½ÊYk€•KùþûïÇ»ßýnÛ °víZ¼ùÍoƽ÷Þk?ûÉO~‚Z­†o¼±åy7Þx#šÍ&î»ï¾_ú^µÈóÝÊ£×Ï­‡/€À¡t¥…(8 »š€Lp·ÛÝReœ±êî&`Ñx>‹€H­©ªéx4pRÁ»*/ê5 ˜¡Å; ¶ÔËH&“ˆÅbJÖPµ$:­HœõÌ0)Å‚óÆ9Ô¹æûøg ½zB¨(ò]N—S‰PÀ¤sªÿçZQ±âZÑÄÏ’¶¤6ZŸG©TB À¦M›‹ÅìÙT`YS¤\.c~~Þ(ªTº¹×ŠÅ".¸àóp4 «.^(ì, U°X,bff¹\ÎΩééiÌÎÎ"bçÎðz½Ø¼y3þèþ\púúúÐÝÝ—^z ‡FWWúûû±k×.ôõõ!ŸÏ#›Í" bÇŽ&kÄûÞ÷>3˜¨[½ä\'Þç²dffŸúÔ§ðÿøxÙïÏ&¶i·×NkS°ÎrûØÇ>†Ûn» ÀÊeþÿðø‹¿ø 0*D<Ù÷X­7—Ë¡··sssfyq¶X,fÏúE—"Á/K^òÀêÞ×àj~^`j¹ä¿'/2µªógJÉVi läKó"U«¡Ò9HÅP«'û ÞÎ-÷êMaµl^8´àõôôسhù#ßyyy¥R ‰D¢%†…sCÐ×l®Ö`†µ>ªå]¹ôê±¢YƒS•7ÏgêúpþT‘äºÓêª$ZcTªt8wT¨Tz&p;2é hw^ô¬÷¹ÏáÃþ0 …¾ÿýïãæ›oF¹\Æ¿øÅ³Ú\«%[û+p7¦ÀT‹&/{µÚó@&P$ÀR«¬r¡«‘/a>K-¨ú<`•j¢ô å°+ÀååÏ÷1¿>[³¹ˆ911¡¡!ËAßÑÑééi,..bË–-¬FKJFf¸¢BFë+TsZ4àR=<7JQág”b¤VaUhøåå;“‚^~^sõä2P˜àˆã«ÕjH&“Èåræèèè°»årÙjn°ï”3Ö÷Ðß)Ðä¹n ª N‹7ëøý~£Š°Ó}R>é¨ÕjŽðSâ÷¹g´X Áôg>ó|ö³Ÿm‘Í@ `i^׬YƒJ¥‚éééCÀòò²yÞ 9ï£C`¤´åÔêzs ¸oU™Ð’È Ñh˜Ç†ÿ%E^ÏÊ) ü5ãxÄ©X±?”YÆdhß©$Q"tzMÕS«žAÖA 8zô(²Ù,.½ôR¬_¿ÞTîY®×ââ¢<þøã(•J-FÝ_*lº?¸F”;*ÓJãržÁ:¯4&PN4N†òÙÕÕ…T*eÙ¼8 ¢9Z Vãg¸—ÔèA¥zzzáp™LÆŠÿq1ö" Ý‹šp8Œr¹l…2¹/¨…ÃaÌÌÌXm ùùy£>¾á oÀ7Þ·Û}ûöá?øJ¥ …>ùÉO"‹áÉ'ŸÄE]„G}^¯çwfggMQózWëôx<‹ES˜víÚ…“'O¢··úЇ099‰O}êS-E)ô†r} …B‹GøµÜN:…ááá–Ÿ‘ÊùJí»ßý.î¿ÿ~¼ð ¿é®µÛïXk+ g¹1'9¼ùÍo†ÛíÆ-·Ü‚|ä#H$`{Ú²Ù¬þÀJšÁZ­†jµÚB#âg÷îÝûKû¡õ ”WLW¹Óò\©TZRÌpéÁ¤–uµˆ–ËåªßÀ.y¾‹ÏVKº˜«ÁäÇ.§•W) a"|>ƒ®ÕÃKX èmݺ[·nµ,Cä‘3Ó­qO<ñD‹XãXd œ˜B´¤è©h­2ïr¹ ÐЫt:õl¨€ßÕ5£w‚}!`Q«k®@‰ã$]¨»»™LƌdzàœÉdZb=8®-ç# ¶(?š¸@)+TîB¡Uk‡ÃXXX°‚|œfâ{XŒ^­¡¡!D£QŒŒŒ X,¢³³Ód— ŠJV¥RA¹\F86êŸÛÛÛ‹+¯¼Ò@m,k  ŸŸ7Z ÇÒh4L‰]^^F"‘@>ŸG½¾RWD“¨‚óÈÌ`—ê•Ô}ÍùV!×ÓIóZXX0€êv»Maàd_(Kôt°ìŸzéèETï‹zVT¹TÊ÷,÷¯}ž-ü>å…2O…—õ`€Ê\±XÄöíÛ199ÙBä~ H$( ¸æškðÃþДrõ@ê>åKe{„ ½¬FÏýAùVŠ"½Ô¤n+†|>o2«žhÇ¿ßoUÅ)#Ü#”§¡…gŸRŒèá¡‘‡´¯îînô÷÷ã¹çžÃää$"‘ˆõ“JC£Ñ@45…¨ÑX©SãóùÇ …°iÓ&>|ØÎ®-ë—pï¸\.:tßûÞ÷000€_|¡P]]]Èårøò—¿Œ½{÷Z|GG>ô¡aß¾}Ø·oŸ¥R®×ëØ´išÍ&&&&àõz-]÷Þ½{-@Þë]Éx7>>ÞâUfÂz0¹¸^íZ Êbø¿m›6m¦M›Z~–ÉdZâ4ØJ¥þüÏÿŸøÄ'ÐÛÛ‹|>v. x½Þ³ŠmÚíµÓÚ È«ÜöìÙƒF£3gÎ`Ïž=èîîÆÁƒ_ö¹C‡aË–-v1KyðàA\rÉ%ö¹ééiÌÍÍáüóÏÿ¥ï¥uZÓBÒ­À™ºZÁ;::^–ÑGA-/,µ®*g*UM+©@„Mþ_½H äeÿÈ•×K“ÀE³ù,¿R%vZ r\.¢Ñ¨Q5|íò"ÀÍår-YŠ<±ˆçƒ}áçƒÁ`Kæ"'OŸs­|r¥P©Ušn¥1Ñ“À‹XyËôÆÐÃEPÇϨ–ÏWë,ǵ¼¼lAù¬hÏg´T*är¹þ{gg§¥ûäç5ãטqTúÒ‚Á ’É$fggQ­V … ¹Ýn«[CÀÁ˜‚M¾+ !“É ŸÏ¿ì2¥ŒóY䈨 tuuO~Û¶mF!€œŸŸ·ìRn·Û,©~¿ßä\•f ªT*¨ÕjæA`ŸèM ¼SÕlNJwRj–zÊ86Ê ÿÖX)RaÔ£AÏ"e–5z†è‰¢ÂFy%=ˆ*Öiá¾Wº˜zó–––LAsz3UNøÿ`0ˆw¾ó8tèU~?~ü¸­}8F:ÆÀÀººº¬J¥R±‚‘|æÚµkñßÿýß8qâ„!œ[îuõÄQf¸×56Šg½;¤_±)Õ”òƽOãÇø8¥ä15ב ׬R©ÀçóY¡@§±ƒç†3[a­VÃÜÜŠÅ"Ö¯_f³‰T*eÔ/zÖƒÁ ¶mÛf‰%òù<*• B¡zzz°iÓ&?~‡Æàà ÉX__öìÙƒ¯ýëx衇pÇwõmhhõzßÿþ÷Q­VÑÛÛkÞè+®¸ËËËxæ™g°°°€LMM᪫®B£ÑÀ—¿üe4›MLOOãÌ™3æuŒD"¨ÕjÇ]wÝ…þþ~¤R)ÜsÏ=¨×ëv&“*Ƶ¤Râóù,öE=%¿kí)5™L³³³¸õÖ[që­·¾ì÷±X 7Üpî¾ûmÚíµÓÚAè¯r{ôÑGáñx°yófx½^\ýõøÞ÷¾‡R©dŸ9sæ ~øaüþïÿ¾ýìºë®ƒÏçÃwÞÙò¼;ï¼.— 7ÜpÃ/}¯fcQ ¬Ô** ªTÐ’Jz•>ƒ«Ûžd€``£fÃÑX µÞÒ¢O>6 ßÁ`uÍ̤ô.þ\© &àcLA:1ç‚Á‹,f5??x¶zJøŽMßM%†`ƒ€¬Z­š•U=TŒÃãñàÅ_´2•A¿ßŸÏgÊŸÞG¿ Æ…_÷Ÿ_ÔúûûñðÃã‘G±??ü0ÞúÖ·Âçóá‘GÁ-·ÜÇsÖ°M»½vZÛr–ÚÇ?þqD£Q\vÙeˆÇ㘛›Ã÷¾÷=|ûÛ߯_ýÕ_™‹òK_úöîÝ‹w¾óøë¿þk+Ö“J¥ð—ù—ö¼X,†Ïþóø›¿ùÄãq\sÍ5xæ™gð¥/} ög†íÛ·ÿÒþÀóbSj€òÄÕºN‹¿Ç`\þŽ¥ZDüið#­ŸZ‘Yi¼Ü©0-,,˜Õ“Ï¢EÊ™ ˆßá!JË,©3JIVk茘U¦X,Zýˆ@ €±±1S|šÍ&†‡‡M™,•JèììDwwwKLz› þ+¿&¥XÐ;CÓÙÙi”Z,®°šÁˆÿVÀGÀʹæZ°èps]•wÏÌ,--µdçRŠŽfibŠØ'N`Íš5˜ŸŸG.—³X*üJƒk6›&3¤Øp=†\ŽÃù]``p hñ qîÙ”û†û–ÏÖ ìN¥Z=–<HQ¢œð<á{5‰ßøIçr98p›7oF<ÇÞ½{ ’–Å}Ę=c]”o|ã–ÝKÏî®.“WîMª¡œF£`0ˆR©dòNÅšŠÏ%ö‰2Á8/ãZ­†H$bŠ=¶‰D{öìA:6™Ñ„ ü?;O9*Û4‹Yy饗ŒÖèv»Q,qÞyç™ñƒ‰:¨•Ëe‹åÚ¸q#®»î:<ÿüóÈd2H§Óðûý( VÉœIéÚ±cž~úiÜwß}V<1 "•JaÇŽH¥RÇñãÇqÁàŸø¼^/Ž;†Ûn» ³³³¸ôÒKñú׿ÄØØ˜)k~¿####355…ÁÁAKQ­Vñ–·¼›6m“O>‰ƒš¢T«ÕÌ£Öl®$)àùý»Ø~‘ÒÕÕõ²úfðoÿöoðx<¸âŠ+ìgg Û´Ûk§µ³ÔöìÙƒ;î¸_ûÚ׌rÑEá®»îÂûßÿ~ûܶmÛðÈ#à3Ÿù Þóž÷Àëõâ-oy n½õVSRØ>ûÙÏ" á+_ù n½õVô÷÷ãæ›o¶¢†¿¬©Â ¥Z"˜ðw‹‹‹v8›~ .$ÈÑ€b>ýCŠ­òJo¡ÒCK$ûOÏ /h~‡cãÅO€Ãx^´ü7/v >%È…BæŠD"ˆÅbf%¯T*èïïG.—³ ÑHÄæOã;ä‘:CïRž8·ähðTàØxá;n•›Nª…*šüç—ë­qT>´:މ?Ó³´Ð2ã ©G´úrLT9.ÆFp¬”õlq鉃H§Ó¦±¨çSyï” ‚7Î)$¹\΂i©ØRv¨dÓ;àñxLa9´NóÌÀŹ(—ËÆÖØ(GŠF£H¥Rh6›F/©×ë8uêfggí”Ê1çL©=œ_¦iU ¢z¸Ælz6°J'$pÓ{*º»Àñs^¹·©ê>¡’¥žRD¹/©ÈR Ó w}QoБ#G022‚„ÃalÛ¶Íþr¹lÖpÊF¹\†ËåÂîÝ»Q­Vñì³Ï5‡-`Õ Îye_è©a, •gM«¬qÆ9¤"Å9¤âEÙ¦ò¡”ÒJ¥‚ÑÑQ+ȳsâ¤ÎjbM†ár­d®óù|¸ôÒK‘ÏçqüøqlݺëׯÇc=fEýXÉzûö혘˜Àüü<¦§§­Èãôô4î¼óNôõõÙYNE¨££ÇŽ3ì¿øE¼÷½ïÅ{ßû^T«Uœ8q~¿¡Pk×®Åå—_Žõë×cii 6lÀ™3gP*•ðÏÿüÏFAìëëC¡PÀC=„-[¶`ëÖ­6¯ËË+©ðCØÓÓƒ……Äb1=z6l@2™D<Ç?øA¼á oÀí·ßŽ#GŽ`jjÊö+ïžµ¯vûß<g«é=Ìv¶°M»½vš«ùÛ ­ívÖÚþýû±gÏ– €f}#ÀP`¬Zð4(“—?˦®ü-î @¨¸Ô(æ!oœ–?í›ÒRô=J— `d»*e†´Çb1ìÞ½årsss( èëëC©T2+7çtpp¹\Çoñj0ë,Ç«V_Í.DOçL=P¼ìÔƒÁï¨%ÚIASŽÒfBœÊ#ß«Áì•ì»®ó&’cMê=J7#Õ8®k³ÙD8ny·Ûí¶@bÆÜ$“I,,,XAH¿ßo€«T*Y¶+& PÇ„´l{½^Ê>Ÿ±X̨ˆ”z8.DƆöDª›ßï7Š ½1 òØ×îîn„B!ôööbÓ¦MسgñàƒbjjÊ3µ€œ“Âǵâ³ÏTPum{Ž ®*æô<)ÍD×Îé}S™¥‡‰”,Î)ç‹sæl*Ÿ\'UŒ•žÆX2U®tÏq® þ)Oœ‹7šâ ÀžU«ÕP©T088ˆ7¼á xê©§ðøã#ŸÏ·x)»\ §çƒcUðÏóˆõNp_é˜8¯?« Ô£HúS04E„gA$AGGr¹\Kr5NÌÉ<Å IDATtuuYÚÛFc%)ŠL©»k×.LOO›IEÑçóáäÉ“æåu»Ý˜ŸŸ7Å: bzz˜µdÓÓÓØ¼y³…—]vÞúÖ·âþç°ÿ~“•ÞÞ^Äb1lݺSSSp¹\Èd2xç;߉ûî»kÖ¬Á¿ÿû¿[JìuëÖáÆoDµZÅ=÷܃뮻~¿ßøÆ7lOîܹGŽÁÂÂÖ®]‹·½ím˜ššÂž={°fÍ\vÙexòÉ'qûí·ãðáØ™™i1Ò‘‚zæÌ<÷Üsؽ{÷Ëdú7Ùx¯¿ë]ï2Eð×Ù2™ ¾ÿýï¿*ck·ßÝöê«ìíöª4^T¼@ déî×ËžTå#Äð»ê} Øå¥F+-¢¼À©Ù?Ž7‘H```;wîıcÇpÏ=÷à’K.ÁúõëFqâÄ ‹í`†,MÏʾðߺ©`©…]å 3A ט{k¯Aåªx¨Ä}¯ (_ÃZK¥äQ¦ià 1X´ÞósºÏ4•*ˤձßGŽ1…zÍš5Dww7úúú099‰B¡€¯}íkH§ÓÖî_Màœ5´pü<¿HkÒ}ªJ•dTÑÓ¿™!ˆg* F<7Òé4’É$6oÞŒãÇ£V«¡§§_|1šÍ&žzê)T*•Å9•J!£V«YV£l6k13ÄæÍ›qÉ%—àÞ{ïE¹\FµZE:¶ýX©TŒÖV¯×Mùׂ¤óóóèëëC6›E©TB2™´5ñz½xüñÇ1::Šd2‰;wbÿþý¨ÕjxÏ{Þƒb±ˆ /¼ÐæèÓŸþ4Ün7îºë.üèG?²X.z­GFFP©TL&í|ëêêÂÄÄJ¥^xá;_FGGñØcappO<ñ®¿þzÛo—_~9<zè¡–sŒïj·vk·_½µs¸ñ𦢡 µÒQÉP…Ac4xñ©W AŽÆbÐÒ¯`XQoû¤™XÔ3 ^ŽI]áNÅŠÊŠ*PNpMš ÁûΠÄ@ €X,†©©©–,?‘HÄ(6ô(ÐRÊ9Ô±êx±Ôª^#g–-`Õý®O=-\[þÍùPK¸VMfß”ŠÀÉÉI$“I3.°Ö÷‘*ºŸ8NÊ„f§s;H‰ä¹Àgk½Séà™Á=­gŸ¡ž«\.‡¹¹9lÞ¼Ù²Ñ8pìØ1tvv¢§§Ç<ÍfÛ·oÇE]„£GšŒD£Q,,,`ii CCC¸úê«ñÕ¯~³³³°ó‘ 8ã?âñ8\®•À{ÖÝ Bîñ¬¤ ¦§trr7n„ËåÂÖ­[±{÷n„B! ¢^¯cll ÇŽ³š#W]u•56lÀÌÌ FFFÐßß믿ýýýFkËf³xà°yófSŽèñÔB§ããã( èïïÇää$&&&°k×.„Ãaìß¿¿EÆI³ýeµ2Îfk“ZÚíµÒÚ È9ÚxyØ‘ŸÌßñ¢csR¥”Σ …Í z5'À½h–SP^º´Þ°8+ kßÔù ZIYb#èW€B…&“ÉXÀçðð°]VõúJºT¿ß`0ˆ“'O"“É´•f³ÙRìð•<K Ä^ œq\|&³è.ÇùV«,Çàô,ñ™êc?) º–ì7-¿\?R‚Á €•¬V ¸.êaâü+=Œ¿£•]½!^¯½½½-”¥æˆÑ#Ðh4¬?/zÝønMLÇÏ‘bìIŒýQ嘴Êäââ"Âá°)”-õtñÝÁ`^¯===(—ËH§Ó8zô(¶oߎ-[¶àùçŸGOO099‰ÎÎN”Ëe„B!lذW^y¥Ñ$¦§§[öóÐò÷ƒã´à:½nl*?¯²¤JfˆR‹¾ÎzNœT?*\öŸ)‰Ê ×E•#M«Ï枢ò·¸¸ˆÉÉILOO·œ…jp¹\- ØoM­#§ pq1Ž€ŠŸî=Wñ;ŒQY=k”Óõë×›Çe||ù|ƒƒƒFg]»v-Ž?Žl6‹^x¡%›VWW’É$Òé4Êå2æççñƒüÑhóóóðù|˜ŸŸG&“A<‡Ï糸9WbÿY]œ^JÍpçr­ÄéwÞy¸êª«ðº×½Îö ?ÿùÏÑßß»ï¾^x!&''­Ðigg'âñ8ÆÆÆÐßßÍ›7]÷’K.AµZÅæÍ›ñâ‹/âôéÓSȹgÑTÖX)•JØ·ofgg±}ûv<ñÄxàÌû¥Õæ•6ØníÖnÿ{k+ çhÓ‹M-êÀ*p‚^^x ,É‹çÏ4ó»Àju`ͼâÌž£Öq¥Mi¼Z7ùG©´j&&-ãÑ1ñßJ‡Òyá÷kµâñ8<Yöèé °ééé˵’&unnΔ;w:/JqÓ‚‚o‚µ¾ÒŠG «frŽIÇ©ïvzœÔ ã¤Ô°”å·3!=ªlhüzzœÖsZS©r¹\ ¥ˆã*‹f‰ç‘ÃN`®2žÒ+¤AéôPPñ¤Ç‡ý¤rÎ:´ðr¼êI`-*‚Œ7aãïÕóE% ™LbhhÙlÖåH$‚x<Ž`yyæéX\\D,C<G2™Äàà Ö­[‡'Ÿ|SSS/£Cq_){CÁ5÷?Ïß9ã”´½’Ñ?c`0F}žÊûKâ»58›ãT*¦*¼Nãeƒ}¢ÌR^xvq®(ûê=¤|s¾Ô3Á³JûÚÝÝmVs5ª0¡Î·“Rªt7§1AT¦ … …b±‰„e¡ëëë³LoZ’sT.—:Y«ÕpæÌ[ÿîîn¤Ói|å+_± årÙè”ô42öŠ{Gëç¨Á«££™LÍæJ†©©)£Mõõõ!“Éॗ^ÂÁƒ[b¸àĉxþùçñ†7¼Õj<òÖ¬YƒŽŽäóy<òÈ#èééA<Çôô4ž{î9lÛ¶ÍdŒuyB¡fff,]°Ïç³ÚN333·ì_;wîD¹\¶sˆÊËoƒçAÏÒ_÷sÛ­Ý~Ý­­€œ£—¹f·qReÔÀŸ±x•ÆXðo>×™ÖÖ ¶TQàûøy¥0ë'¿ËŸkIO¼|Þ½”ÅJŽr^ò ôó´ /.."‘H “É ‹Y¾úÙÙY«Ù¨8§R@ L+¡*" ´t>TÉâúi*]]Cý¿sM€VO”ÓÛÁ~k_éAP¯î÷û­& =” ƒsŒæ¬MA"`~~Þ<˜™™±ßsÞøù\®K,3k+×—OþœŸ¥Lу wµžÓ’JÐÊyðz½F‡ h6›…BXXX0ªRjH¹RºJ$ÇãA<7ùF±XD6›Å¶mÛLFâñ8*• 6oÞŒ¾¾>ÌÎÎâ©§ž²~軨Ìrüª0ê9àÜ'ô:ò;48ð{N  *Tò¨T(½‹2˸M­žTÝ—ªd:C¦ IûD™ "DÀ¨ °ŽM ü™RæøsÍj¥ÞVÎÒA¹oÕZÎqjú^•9=ƒÙÔcù¡×E3lqÜ‘HÉdÒâ»Üî•Ô¹ìs<G±XD>ŸG©TB8F Àìì¬-ÜË”÷p8ŒL&ƒR©„|>µk×¢P(ÀårY ³ÞÅb13TðyÕjÕâ˜Xñš‰#蜚šÂ3Ï>ŽááaÛ“Ì\ÇìqšD¢§§sss…Bزe êõ:zzz0<<ŒD"‰‰ ¬_¿—_~9pÕUWáÎ;ïÄüü<\.WKRŒW«µ= íöZj¿å;Ûí¬7µx« Ô =¤ Ry)8çßzÑ*—Y­›Àj ¨Z.ÕâǦàC-”juUúR5˜‰@€Y­ëõºYY—‚àQëv°±X ÉdÒ‚•yy3cŒÒBèÐyUå€`„ýÒ9PGÐå¬8;ó3ÎX c*ü=ÇÊï©EµÑhØz+à$p¥’¥q+ì' €–ÂNOåGe‡àX­§à,ÜÈ9×t¡”3¥Ðâ¯Ù­ØÿP(dccº`®™®‘Ƹh!<*-|僒ɤ%)`l‚‚J‚FbÎQ¥RÁÄÄ^zé% äóy«žJ¥pÞyçYÀ=ÇÐÕÕ…“'Oš§mhhÛ·oG4Eww7Ö­[g±Qšâ•ž50psß+¥’ò¡žS*|êãóÔêíTÄõLQùr»Ýغu+®½öZ µ$“à>VEGÏÝGz~ñóêyP¹çUƒ‹z˨0sþôLàYƾé8©4«¢@H 'TèC¥g•=(óü›Aô<è©bÀ>ÓSg2«u¢I èÅ`%ðr¹Œ“'O"›Í"—Ë@Ë÷˜Ha~~ނ׫Õ*B¡Ý¤d©‚Fäþ`!×h4jÕÈ{{{­Oœo~-‹æ}Ç;ÞË/¿ÜöB,3ƒØÐÐxàœ9s©T ~¿ápñx»wïF4E¥RÁìì,J¥.¾øbë{8†Çã1¯öùçŸ?üÃ?ÄÎ;ÍËX(0;;‹D"׿þõøÓ?ýS¤R)£–ý®¶¶Òn¿‰Öö€œÃ—ŸÒÔÊIo+ §Y‡¨•ú¤@X-ÒF CA…R…¨Lð³úh X%ˆÔÌX@«‡Ciz’&Aî²~FßIkw&“ÁÀÀ€YªXö˜Z­†b±ˆX,-©o º5þ€c%hg㸕¢^$9ÂõTEMÁ"ç„ïUúš‚;‚$zcø\~–ŠÁ8ã.èc1AUdª×GJ*TT¿TlÖ Þt1+\Cæûý~SLèåQë'çŒ ¸ÑX©{Àô¢áp===˜œœ4`å¤Ðp>Y¨“™¨fu¼\wEaö-zóšÍn~"‘° X333H$³ŠÎn·½½½ôs¹±mÛ6$“IƒAÜ~ûíÈf³¶·@)[ú>Ý?šÎãñ´äsTî4±×ò¤Ô<=_”ºD¥ùÚk¯E½¾’ùK÷þÑ9UÅQ­ÿ/ÁŸi60õTptŸØ {/¸(ÿœ ¾›^5ÖA`±/<ÿø ¤×½§ãå+]“û„™ÅH ä~©€þÈ€ôfs¥¨$…X,f±¬Â®J—Û½“S­VBvõÕWc×®]æÉf³èé鱺#FÖ 6`||.— SSSFódì )ž ÄgÌK2™Äë_ÿzœ§òDoI.—³XŽññq³ªk`1÷ ÇOo &î±`0ˆp8Œl6‹`0ˆ+¯¼û÷ïÇáÇ199‰@ €p8l Î?ÿ|¸\.8pÀ#\wÝuøÉO~bÔ§|pþt©AB­÷ª r¯¨ñA©lºšýŠ{ŽèÔ;IÅÜÜœ‚ä^ç\ª¢¡J ûË÷R!ãZkÂ];5’p}¨ÐjºXõžj=÷ ½œößÑ„ì—z4)ÿj``1ËF£a^=OT¢òªTIzÁô½F6lÀ¦M›pá…â‡?ü!<exËårV³ƒãL“Ë¢…L4AÁÀÀ&&&ì|à™Ãyã™Â¹ðù|èîî6J©Kù|ÉdÒÎ'­ð¤¼qí0©¥_çà†ï£,h欮®.SPH[೩T¨œ(UE)TT¸ü~¿yB¡–——‘H$P(LiP ³)qŽ•ùõù|èêê¦M›Ëå022b1jM%‹µZ“½^/ŠÅ¢ZÊK½^G86yÒø(¥¼1HžÙ†ªÕ*‚Á õ¯Z­(¢Ü7 byy—^z)Nœ8™™ŒŽŽbÍš5V˜±Ñh \.ãØ±c–m¨\.cjj •JýýýfùVE[PM¡^$[Ê1åD ÜJcrÊ-Ý ” `•¦™Ïçñï|étºÅSã Ħ§@•iõjp¨Pò{”Î7\Ý”íƒR›ÔóÇõtŽQhÿ©0Y\¸gzzzJ¥pôèQd2™€OÅX-òÚÑÑ……D£QœwÞy¨×ë8sæLË;Óé4xà<öØcؼy3Ž;—Ë…M›6! áäÉ“-†ƒf³iÙ¢h,à~¡·%dÁÖ¹¹9LMMÙ¾¥7†I+`rr©TÊ”þͽ³°°Ð"ó?ýéO1==#GŽ´¤Þ°a~ô£açÎÀ‰'°nÝ: àÑGµlw*ÅQiM ™X@)WTÔ¹÷(ªèRn¹çœç¦^^^)§{–ï 1ïø<õ†*…I4 ,¬Gº 3&Šçƒz•^§±?ôp¾¸·©„ë¸ø*ì^–Š–ã×=FÒH¥ƒsIƒ¦€®T*VѼÙl"›ÍšÒ½þÿ«‰D°¸¸ˆééi¼ôÒKؽ{·¥Á}ñÅmÝÊå2¢Ñ¨)ç.—Ë*£3mm:6e:ŸÏXQºz{{áõz-v¬Z­bnn¹\>ŸÏè¯[·nµ”½<ÿ˜ê7—Ë! bttÔ·††°aÜ}.×JÕôjµju XÉ›q þÕ‚‹œOÊç†à™óÞh4Ì;CjžVe§@•Ž_©v”E¥Àówœ#sröéŨV«ön¦TV¹×~èÞ ±¥³³Ó@2׆û‰Jž=<é‘Pj¤Ö@¢lPÒ8õ¸ú|>S˜ÈÍsF3‚uww[±±1‹E['zL´ÿœ÷@ €þþ~twwãôéÓH§ÓH$èïï7ªÑîÝ»-Nˆå^¯333öŽF£T*…5kÖ ‘H˜R,Ñ×ׇf³‰+®¸Â*­kö5îS§N!“ÉXÜ)˜===H$…BVe1(,h833csS*•ì<9räÒé4&''±{÷n‹E3ˆ8pÀâKb±>ò‘ ‰ ··×*ŸSc&¯|>H$Ò2ÿ¸à‚ ðð(‹Å'?ùI\uÕUرc®ºê*Äãqüüç?ÇæÍ›ÑÛÛkFŸvk·vûÕ[ÛrŽ6* £JñÑàMZ=y9Ó²KÐAk Ò5”AàFpC‹´f3Z³i´*š V­Ð´Àòý "TË"°Zšc׬4¨J`¾´´„ùùy³bwuu!‰`vvõz³³³XXXÀ† 022bºNpK‰€Tk˜(¥J?ǹc97j)®×ë8L:†‚'ŽT9Òä4•(9ÖÊ×lINk¿¯€•Tö[=F¤41׿zC”ÚB`¿°°`Ô˜b±hë§²¨}ä vù9¦öt¹\FŸ Å˜V媳ïñxÜhu…Bñxår¹Å¢Í¬W§…®‰DP, þöÞ4Hγ:¾zŸÞ÷îéY%4’l-¶$,ì`;6ØÄT(L…¤€"Àqe¡HA!¦Š".~@’ ¤’~*Ä&¸!,laƒ)K¶µŽöÑŒfŸžÞ÷žéžîïG×™Óý~Éû1 ¾«jY¡Ï IDATT’fºŸç^Î}ß×9ç:ç1”KMÅ£w¡V«¡V« (L$8{ö¬¬åÈȉb±n¿ýv\¹rù|±X 333]TžF£‹/е?—Ë ÍP{‘ø‡ýç¾¥LR Ö4JRÒtÌ9 T°˜eN#4-kH…›²¦)F&“I¨2컎]Ñû…cá¹Åﯮ®v¥_Õ^ £GÏ¢§ƒç ½y\;î -4èpr¬:Ñë' *Tº´ÇÅd2!‘H ¿¿ÇŽï£N¶À$Zgæ§……Ó‹‹‹F»ÝÆÕ«W111û³³Ø½{7êõ:†††ÉdÐßß……äóy©¥³´´„R©Ô•ÙËívãå—_F«ÕB©TB<G4E¹\ÆÀÀZ­fggÑ×ׇ`0({: ЇÕãñ T*aii ±X §OŸÆðð°(‰TtN'J¥ªÕ*jµ’É$fffðgögøáˆÑÑQ©ØžL&ñ­o} ú§Š\.‡ . •JáðáÃÈd2ˆÇãh4XZZ‚Õj…×ëCƒÝnÇîÝ»‘L&qôèQø|>˜Lôz½Žïÿû°Ûí¸tévîÜ —Ë…ýû÷£¯¯‡F¡PøE\Í?W{£(X=¯J¯½­§€\Ç—4/FÍeå¥È‹]ó  „ ‚<¸4 €XÙøKË3•M ¡·€ •t &kêi:>€`Øàk˼¦i ½(Q•J‘H~¿_¨G,œçñx €JÎ 7¿V~tV‚O­Àè´º\?z“4§ŸãäÜ`ñ;œg‚Kz£ó¢­Êš–Ã1FBÄ1èQ ¡¢EoŒævs]_Á÷±†Æää¤È&ןë¦é?´ð3€—óY*•$‡¿žwʬ¦ ŽÅÉa˜ŸŸŸCå+%‘sŸÉdº)ÃÚ8A¯Ýwî¸Îv»]2q´×V'ÉÐô+=ÌFÅD+j4¬ðÙôR¾õÙêóùIJo2™¤†F³Ù©ˆ>11!Áçš²Ê=EŠg3ç=—ˉrGšh©TÂúú:Ün7"‘¦¦¦0<<Œ©©)) º´´„õõõ. !½‚N§S²²ù|>$“I¸Ýnär9¬¬¬H:X,lÛ¶ Õjµë ]__—8 îUžÙ>Ÿ¹\Nä—žžB¡€F£¾¾>ÌÏÏ#™LâÀO<»îº Ï<ó Þóž÷à©§žÂîÝ»Ñ×ׇ¯|å+ôèQñ ‘¶H Ï‘d2 —Ë…‰‰ ©ÿ½ï}OöþÖ­[aµZ±¸¸ˆ……‹EØívD£Q˜L&8p·Ýv>ùÉO¢×z­×þw­§€\§MÇJðbäÅ­­|ôðß :A×Ð4. ~tÑ ôó-D[íµ’C†¦kÑšNzÁ¦Žð=/´v3>‚ cbŒ‡®OBÊ ÒívK1,^ÂZ1²X:i#iY%á˜hç<‘&ÄþJ玔76R²t@·Î¥iS ö$€#ØÔ*ŒT™]Ëh¥&XÐÔ=«ÕŠjµ*ë¢é[ˆü½U”/¯×+Þfâr8XYY°ª=UZNh5×´‚^zR©€ e‹rH¹$hnµZsR«Õ‹Åä™ôøX,¬H 6ݱc6oÞ, ç½Ùl ݇û£Z­vÅp¬¯¯£\.ÃårÁd2ajj ###€k×® ÿýž{îA.—ƒÏçÃÜ܉Êå2víÚ…¥¥%äóy Š˜”“H$‚“'OŠGÏçó h}}]ÖMËŠ´§Â¥­ûZiÕtLm Ð@‚¤òB™âÙãr¹º²Jé jm 1A+ÕjU~Ïý¥éW‡¦ÿpMt Ž}ÓŠ)_Œ£ì0S•hŽ›r¥cVèݰÙlèëëC¡P:½;:µîêê*"‘¶mÛ«ÕŠ™™1¶3üµZ-x½^„B!,//cii ^¯Wö|£Ñ@¥RůV«Áï÷cii ÓÓÓBéóù|X[[“b~\÷V«…ÁÁA9‡Úí¶µW«U ¢ÙìÔýà¹Q©T‡ÅkB%†±r¤ ê³R{¾†dÔ^Fž™^¯‰DãããxöÙg±wï^lÙ²7ß|3~ò“ŸˆwÓM7áÃþ0Òé4Ο?/Žt:ééi´Z…étN§^¯>Ÿ;vì@*•’ŸÑS’L&áñxàr¹H$Få,ú›¿ù d3[ÏÒk¿N­§€\§À›–H ì¬-Á²¾Xy(ѺŦ7-Æ|'ŸIP¨ÿhË#ŸA`¢-íšWN‹,•£Ç—(Ÿi´þjŠ  ßI@t€‹aíܹ³+^Àn·Ë…OÀŸN§‘N§»4miåxIAÒ^&´ÏÏs® Àøo@¯ãH4=ƒý'ðåÜðY´Ðò3ôüPø7-לC ºt †~רðÊ00uddÉdR”žd³YT*áøs 9!:À™YÔÌæN–\.§Ó)Yƒ(?Úƒ¤­Ô6[§ÀŸã­V'ž‡DNJF»ÝÆÂ‚Èùã¤r~Ø?mÁמ-‚õ|>/1·Þz+æçç%M©ÝnÇÞ½{qùòe„Ãaô÷÷ÃápˆòA°Ï X•JEÒ“Ri3›Í%/àìÙ³’>™sIë5ã”´§“2¥ã«ØÊžöªrrurž#4.h€¯e‘ߣÂÁ}Fª9çWˬöÞÑS¥éqTjôÞÓ±`ÜKôêqž8ß”*Êšv¨×›ïá3X;HAìv;€öc 8S¼Röi(ѩǩdø|>ÙoFCÀ2û Q¯×‘L&Q.—Åë×n·‘Éd‡E1 ƒp»ÝXYYA"‘™&}jff~¿&“ óóóÆÂñrìLÙÍçsžéùaÍzì8‡ÚSKCM£ÑÀC=„ÁÁA¼ë]ï’X”3gÎHlÚ>ð¼ãïÀÊÊ †‡‡‘Ïç±uëV|àÀOúSÉÇÔ»6› £££Ø¿?Þ÷¾÷¡\.㥗^kðìÚµ •J©T õzÇŽƒÏçÃOR‹¸Td˜¸ŠŸ¦þ±2t:Æ«¯¾Št:h4Šf³‰d2‰H$‚T*%´—I leŽçäÉ“èëëC n:­Í›7oÆ{ßû^|õ«_Å¥K—d.µ’ªUʹö¸qîy&p?iÃVôõüP5ÅŠsHyÒʺŽ+€X,&±6ÚÛGãÿÏ!ŽÑlÞH´À~±:FEÇpðYÚ À>2ö„}ç9¦­Æ<¹_M&|>ŸÌëÐÐöìهË/bqq…BV«UdJ!©‡‡^¯WŒ<ŒcE~Æãñ P( •JIàµî—ÉdÂøø¸(èµZ n·µZ ¡PHî“É$ž z&&&àõza±X¤6F±X”±µZ-QÊ+•Š$‰ÐëV¯×‹ÅÄ‹B/×€g=y¤::<ûì³xòÉ'±wï^˜Íf<øàƒøïÿþoI½{êÔ)Ɉçóù°°° UÌ_xá”Ëe8„Ãa¼ímoÃŽ;ð±} ëëëèïïÇââ"<FGG188ˆF£L&# 8?uéÒ%‘7³õ< ½öëÔz ÈuÚh € @¬lX@7™J…æ²kN/Ÿ­é&tðÒÔÖt ^è~×û©•'µó]šâ¤)CZ!ás5åLGë1iš -ÄóóóÂï&"Âf³ajj @©TJÞi¤]ñ™?/w6íÑá8õ8W¼ÜîbqüÎë)ü?וÖW½~TȨäûo\W‚+‚N+SŽ´¢J ÈØVKfACÒ~H«£Â£×žëH«3ײÙlJ0*Ƕ¶¶§ÓÙE¢rÃy¡ÂŬJ €¥å™Yµ8Ö?1›Í‡ÃâébF,*ʤpÄò½ìg»Ýá œ^ºt õz›T¡µ'NÀçóaddsssâ9¢7Ájµ ç~eeE(ƒ[¶l‘ô¢N§KKKXXXÀ¹sçD¾´7NÇìpˆs©8SÙÕûŠû‡Šçšç×E'HІm  <ñÌá¼ÝqÇ(‹øÑ~ÔØnôÈò¬Ñg‰6VplZÙ§¼Ò2OyÖž`zAô“É`xx>ŸO’vpo‘fç÷ûEÖµººŠB¡€R©$ïgÖ;Ѭ\.‹@™õõuär9ñˆpN¹v.— ±X H§ÓA¥RÅb‘¤Ú{ÁÀo&Yp¹\…B˜ŸŸ‡ßïïRÜu,³_ÑûN°ßïÇïþîï"‹áé§ŸÆ¡C‡P*•`2™°²²"gqµZÅÌÌ ¾óïÀn·cß¾}¢Xabbõz—/_ÆoýÖoáÆoijÏ>+gÓôô4¬V«œ»víÂÌÌ áv»Q.— …ðf·7ÊÒk½öF´žr7#˜%ÑÆaèÌ0´k/t^ldkσ‘‹ t§ æ…ÈK è®âÎq°¼Ä JØg ª4‚TZ, š´…´Ñè›+•J’v•ã\ZZ’ˈAÕºqœœ íÑà˜µ@—¥˜MÎøoW{E´‚óÀù'à' Ò AfM±a?tæ-=÷ÚÓ¤é¬B¯77Zu0²|ÖÖfRšX[¡X," ¢P(ty÷(ŸÆŒMÚÊMª S-///KÜ A½~¿Gæž + ÷¹Ž:u0-3| `Ïž=¢˜1¹­ÈVk§ZóSO=…x<.…ÚšÍ&6mÚ„v»SDŽt*JÍf§°R*@'h¿\.K¿ù{íÍÐû—´A­$k¹à3ôžÒJ'ç@ˆZý<Ê׊JÍÔÔΞ=‹­[·âäÉ“]{‰ûIôØ8ïÚÛÁhFåÅ(ÿ”SíÝÓ ŽAgqã™ÆtÓ6› ¡Pf³¹\N,þúY¤N®­­!•JIqBÒIÍf3|>ŸŒ¥T*!ŸÏ£T*ÉœÒcByçœñÝôvR)a¢ žñ:ã ÏçƒßïÇüü¼ÈéÚÚš$Ž !€ëÇ`tz¸—æ™ØÃx¦óLâC剉f³‰«W¯â»ßý.šÍ&^|ñE¬­­azz###p¹\XYY‘ òþþ~„Ãa,//ãÌ™3ؼy3®]»&õXZ­‰–——eþ²Ù,ü~¿Ð8Žqçg?ûVVV`2™ …Ëå~%^ëµ_§ÖS@®Ó¦  ›n¡­¾¼ "ª´%”ßÓÖ{M×Ñ—›¶¨jz…€ëk/­Ž¡š¾Ep@ !Ǫ›¶Fkž:bù}ò¿ù =Ö`0(6ò•'''$à’œf ʵ²AK(=¤ i«²¶è?°‘QLÿ­­ñêñkë¼^ÚsÂÏiÊ›VTùc<ßGê•þ.ëd³Ù×#×G¯?ÇMy2›ÍX]]E /å“óòûšÆõ§<‘zÁ»ÚêJ !S¨ê¬P¥$éy$×VvƶlÙ"t«={ö`bbÛ¶mƒÃáÀØØ~øÃâÒ¥KÃÖ­[‘N§‘H$P©TP(¤ÿn·N§ËËËX]]E,ƒÝnG<G.—ŽÍfC&“éR´)C\®%Á •,ΟŽeášio•¦4jZ'•B½&ü·Î–§³RÙl‚Š[·nE»ÝÆùóçE‘á;ô÷ù~íãÏ4uK+”Ý'*¤²ÑðB/®–SŽMï%žsFº'ïr¹P*•D¡Ð™õõu¤Ói¸\. ¢Çã]µ,‚Á J¥’xéx~ù|>‹ET«Õ®x2­és”Š-åÔëõJ…sîgR¬(Ï.\€Ýn¢ÅÒÉ„¥=Ý|¿^×p8ŒJ¥‚t: ·ÛL&ƒH$"sOe¥Ùì¤p¦,pͨ4½üòË(‹p8˜››Ãèè(n¹å¤R)¬®®"ŸÏcçÎB±XD<G(Âêê*víÚ…«W¯Š—Äçó ÝÌdêTLgÐ<½!LÁÌs…¿'ÅìÍn=H¯ýº´žr6 *´uRƒJ µ¥ÐHÁÐ<|Má 8ÓJAˆ®Õ¡«><©ü?-£¦ÀÒ U{Dô»´"¢A‚Ãü› +™LbëÖ­ðz½Èçó¨Õj¨T*p»Ýh4ˆÅbBåÑÖUMõ0fó"8×^! ª4XÑ”'­Ø=@ÚZË>hK,ßMÅB§»ÔÊ-À|6çO‰O[¸µ5™4;½¤±1’1†€OË×@ajkàFyÕó¡ã´gÍd2Iª]»Ý.™ˆ¸^ô,pœÌðÄLd—Ž/Ð1Qºñ}ü;—ËáĉÄÒÒ2™ œN'€Ôغu+ž|òIT«U‹E,,,Õâñ¸[oÙ²EÀ\>ŸG8F$ÁÈÈ^yåµ:i‚V²uŸõ9aôŠhÙâzçÖ¨¼ko›¦#j𮽯”‡¾¾>˜Í`æ‹/âÒ¥K6‚þu¿µ¬•ý{ÒŒÆÊ›¦RÑËÅó €¤WÖg„ö¬Ï*ž-ZcbÆyhÿ—J¥¤æ‹Ãá@6›•ÊÛN§Ñh;vì@¥RA>Ÿ‡ÅÒI]KÏ V|¹6Ü?÷\‡µµ5ɦŠéù|.—K”7ÆoQé‡Ã°ÛíH§ÓÛÇÉël€:É…Ýn—ˆ¬„N£Œ.J¹öù|’àƒÉxv:NÜ{ï½Ø»w/&&&àr¹0<< ›Í†¥¥%8 ‰wñz½¸ýöÛ‘Ïç%0ii Ñh¥R >ŸV«±XL<…”ÉV«% a>ŸG4•yûMl=¥¦×ÞˆÖS@®ã¦é F°®­‘À†ÅY[; ü€ú™š;­A€¶ZÓŠª9/IíÑ B[5è&xÖ^}p²¿:–À›}Ö–S#ˆ___—м¤â°x@hE…BÃÃñÖóοõEL0¤yãZÙãX9·ü~»Ý–ËX+FO’ž“i£ !ÿ&ðd_4ˆSSh¨pdhªߥeŠ2Dúƒ¦Ù7MâX X¹®Ú’Îx ‹£e[ÄkZeSÇšÐú™Íf%×è€çJ¥“É$µph¦ÅWモVgL~NÏ_¡P@¡PÀÅ‹Ea£wÃjµbûöí8yò¤Œ'›ÍJ…kÖ‚ÉdÂÕ«WqíÚ5Øív "—ËI5kÈv»Ã«§õ–1ŽŒ3à~5*ÃÚsÈ}¨ã´Ìèj¥P˹QQdã|E£Q¼óïÄÜÜž{î9”ËeüÝßýÝkŒ ¢šªI™ÓrÊ1èlUZÉÒAâü®î·®c¢½4ú|ÒžKwËÄxÆU«UÄãq,..Âd2Éü‹EÙ«¤n1¦ˆÉ–––dÎXïÈd2¡P(ÈçN§€}¿ß/ÁáL±Ëd,dÈâ“Ífn·[maÓSKoSY3ùA @¹\–5¦Ç]J¥’œ?=2šzÉTðõz]êÇÔj5¸\.D"´Ûm aqqÏ<ó ÌæN­(f{»á†ÏçáõzqÇw ™LŠQ! ¡^¯ciiI [¤’16K\ô=T.—»Ø7«ie¿×zíW½õë´ÑrgŒ @aÓb^¾G¬Ö:®æHë‹X§ZåeJ€Fë¥úükz–îÿÖÔ"í1›ÍÂwÖu2´2AÅFSEtz„ô;Èü~ý¢\.wÍÕðð0úûû`• mÝÕÀèÎrŹÐ5¼ùz nù9#ƒß5z„XyXÿN[´IS2ÆÑ=mí'í‚T(½®¤/0P”@Uÿ­ÁÊ„¬6¯)b:†ËårIK* ¬b6›që­·âòåË8þ¼x(X­é¿=Š'NˆÒO¥«V«É¿{÷nÌÏÏ#—Ë!£Ýn˹À¬wT~®\¹‚7»½Q HO©éµ7¢õë¸-v´ŒêØ^¢Ú‚®©Z¼œu†í9ÐW൞‚Zîø>M‡â¡Êþòo Tnzi2ü¼æ&XÒ–pÝZât‹Ïêê*fff000 —©Ëå‚Ãáî½ÙlÆÂ‚ä¾'¨Õt Ü5UD+Tü;A3× ”wbôZpÜFêŸÅf6›%(\+ ¯V ù\>›€PÇKHèÀeò¨I%Ñ©9ך¤£YÜŽõ;H]Îù皥ÇÉ9q»ÝR©¹R©½Š¿g :+ Æ1 '-´Z '0eV.>O{¥h5f6-­„Sf N£Õê¤m·Û’øÀåravv‹ƒƒƒÈçóû–·¼—.] 0ƒü}>.]º„v»›o¾?úÑ`2ui‹Å¢ŒS4 7R&9ŸZaÖqSÚ Ê½Õl6%siy:#1Õòò2>Œ¿ú«¿Âðð0.\¸ }ä~¦…ž{™^EŸÏ‡r¹üº~_+öš:Ê~E—)bõ¹§÷Œ>Wùoí±t¹\p»ÝRfttÓÓÓÇ·Û-óiµZqóÍ7ÃçóáöÛoÇáÇEùÉçóÙaÍ zR)_Ü7ív'œEÿ<’ɤ(¬×ë¢hëº<Ìææóù$=q4¸´Z-QbÖ××%˜žÆƆp~ÐM#X4íR¼ù>z§)7TŒ¨œ18ž{saa###ÈårxûÛߎH$‚—^zIâVïtõêUT«Uœ;wNöãÈà–[nÁìì,†ÐÏÜn7 …Z­†††píÚ5©ÕÂ3¬×z­×þ÷Íü?¤×~›ÎT£/OÒ0x±Ñº ¼¶–ˆÃáè *Õw#øæ¥A+²~¿¶8òÙô ð½|>ÿÏïð#GÚHáçiäs´aJ æ IDAT§A÷Ý8ÎF£r¹Œ©©)¼øâ‹Bòù|ƒˆD"Ë4/p>S®/W£¢e¤ 1«‘öÔóbÖÁóì·VÀT @,¿)š3OJ”q-ø^ͧü Í1²`™ö0k£ÑK.­¥øò3œ®³in{½^Ë%sÄõ%à¥"5x¸6<¸—t!N®1÷×…ã!pæ¸(ã<xQ~¨Ø"ÅqëóÃhäÐJ/A*-í¬ÑBE>ŸG<G__*•ŠÌ…ÙlƉ'`6w²V…ÃaX­V¡F}á _À_üÅ_H€z6›•‚™ì+÷"Ç–N§Q©T$øà›F &( ‚  Éd$ [³Ù”‚~&“©«ªy­V´VÌh”à÷Ûí¶Úôz½ðz½h4ø)³ú.`Æ-þŸÏ¾rå n½õV  R©`ll f³ÅbQj¸\.¼õ­oE"‘3Ñf³¡\.# b||=ôvïÞF£¡¡!ŒchhCCCØ¿?þøÿÛ¶m“8HÖXy3›¾C~Ñz­×~Ñ­ç¹NrzxAÓŠÍKY_¢:@™QgõÑÖx£å”ÀŠ—¶VF´U^?ƒÖ4~Î¤Í ŸÙW¨ìÌØèÌ3ãäë|þÀk³ßkE Õj! !‰`qqQú¹¸¸ŸÏ‡ÑÑQ¸Ýn\¾|Yrâk>:ÇHE`Ì‹˜àDZεDŽV_~ŽôXË5c¿­V«D#ÖÜuí]! ØÈDÅy5*Iœ3zp,–N ¾;™Lvñæiý%¸/•J’J{H½àz1€X>ÉÍ&åD{`4 ¤Å”ñ"K\k*Á”7RˆVu_b±Ün7–––$€»Z­vÅIhožž3΃„9Úó¡•Ì`0ˆd2‰@ ÅtQšŠÅ"r¹FFF®¯¯ã]ïzŽ;†K—.¡V«aÇŽ˜™™ÃáÀàà ³·ÛÞü-·Ü‚cÇŽayyÄóÏ?·ÛR©„¾¾>ÙG¬ÊMЮ•­hpœü½×ë•`bîuþÑɸF<7øóçž{DÖ©,QÁÑ ©ÝnÇûßÿ~üþïÿ>¾ò•¯àùçŸïRµ±Cï}­ê˜&zhø®)çDÓV©´håkM%dóæÍ€ÉÉIlß¾]²5ñóŒGÊçóˆÅb2_LñÝßßz½ŽÇãããXXX@(B4E*•’¾¬®®¢T*¡¿¿_öimô$Ð @Ï­Ïçeèdh«V«¢ ‹EôõõIº_*)T¤˜I«T*‰ÂG ½/&S'n‚ÊÆòò2‡œÌÆsœsGye¿½^¯ìŸÏ‡jµŠt:¿ÿû¿ÊØÊÊ ,–N¥öp8,AçSSSÄòò2jµšìë;wbeeÇÇÌÌ Êå2ÆÇÇqÓM7aii gΜÁ¥K—píÚ5‰±¡¥×z­×þ÷­ç¹NÝÎt=ó2Òñ˜Òú@}A¹úT4eGƒam)ש öt 3/pöP]G* ÍfSRQêñ,àj/ö†Àrl¼X<Ø÷¹pÎE½¼¼Œ“'OâìÙ³ò3­”ñ/Z>“ã5λTf¨°püZyp:5H:Þò–YÀM+D.—K@-¼@w%u~^ål’F…‘@ŒVÒˆõ1 ÉZjJ °ȭלÖ]f#£ÒÀ1óùFC¼싎· uWËž1[­óÕj¡PûöíC(’Z/¥RIž¡Až¦ìéZ‹Å"2™Œ¬!´¶ê“NÇàßB¡€F£P($2D€šËå„F“H$0;;‹B¡€@ €={ö  aÛ¶mh·Û’rÔn·cûöíh4x饗d¯?û쳸té’Ìö\RYæ9Ÿs͘$€FÒ£pl,hH°¯ÏÊÏ®/ßKå’ÁÉ6[§B½ÏçƒÏçC$Áøø8ÆÇÇqÛm·ahh@@Ò¹2[ãÓ8—z|ÕjUÞK ·Ùl†Çãå”ÊÚ Ï>Óòϳˆû)‹ÁëõJÆ%*n·~¿‘H;vì êk×®a}}]â1¸fggqåÊQÜûúú$í2åÕãñ ‘H ™LŠw(˘Xô²V¯×%6„rıF£Qd³YÙ·”q¿ß›Í&çÇòò²xg¨@¤R©®"‡ôÔ2ÅÐÐÄup_Qn¬V+"‘ˆdÔj·Ûðù|ðz½²̘Åçÿà?ÀéÓ§qåÊØl6lß¾¥R ç΃ÙÜI±¸¸ˆÉÉIØl6Ü}÷Ýp8XYYÁ¹sç$V£ÑÀÀÀ:„Ï}îsðûý8xð ŠÅ"NŸ>õõuI#žH$^ç¦ýå¶ž¤×~šåóŸÿüçßìNôÚ/¯---áßø†XúÚhqÔž£u›ŸÑ`N{C€ / ¬öh«!36éø^.èj… ˜bØw‚M!ºÓÓZÏgÓú©«0ó÷:ÈšÖMZAÙgîÚµ 'Nœ@£Ñ´§Û¶mC¡P”Ëå®laºŸÚ¢=D¼¸!λ¶   ž;Î1ŽØÈÒ´ºº* Š€€ ÉóAÐ2£Ý ].—€:~Çl6# õÆdꤻm6›R9™Áèäÿ=o|ÍfƒÏçƒÛí T2™D¥Ré¢z˜L&Qþ´è(…´X­Vô÷÷wqÊëõº(–|•¹ÙÙYLNN"›ÍŠ2ÄZ œ n*½|Õj•`\ÝW-_+Ðñ0R™ÓòN9¤Ür\«««ðù|XYYÁŽ;P¯×133ƒh4*Š + g2ìÚµ »wï†ÙlÆÉ“'qòäI4›MI1M…\+ƒTÊõ9ÀsC{Ô8* ”G£·D{C^/¦ÂH÷Ó±cì•jSªÕ*Nž<‰©©)9r‹‹‹°Ì9åÞ¦¼©F<ÿ´RL/•§÷ ÷¸ÅbÛí9áŸjµ*i‘Ýn7R©¬V+8›Í&•ɹgR©Âá0®]»&^ƒÁÁA¼øâ‹xë[ߊjµŠÛn» ÇGµZ^8F³ÙD?¢Ñ(¬V+Êå²g¦bÞ¹s§d¼jµ:)fÎzF¤%6 ñ ð¤¶Ûm„Ãa,,,ˆ—“Ê¡Íf“àtÒ­V«ŒÇb±H60*Av»]ÎfãýÁ¹Ïår0™LƒðûýH§Ó°Z­D(ÂÔÔŽ?›Í†¡¡!9¿Ëå2 …¢Ñ(L&þàþ…BýýýhµZøÉO~‚v»“(`rróóóB¥guuUÒ—Ëe,--áŸøÄ/]á½¾yóæ7$…Õàߌ±õÚonëQ°®Óf6›»`õE tÓ ø‡ŽæD“>A‹Á–RÔÕ…¼4Ň™ÎˆÄT’ \¶X,ÂÝ'Ö €`š— A©6ì?)@wM‚ ~ßbédŽI&“ØÉ|ùóóóÂíöz½hµZB¯ Ej•¦i‹žwr­X°ÀF°/ŸGë.©iÀ†Ò¡äëÑgtøMÅÒ´+~¿Ýn‹õšÙÀø Ò†2™Œ(mŒýˆF£B¡`)¤ÊðùL9Jëh¥RÍÖ)¢G@EY ìP®t zÇðk³Ùd¾©™LìT´J³Ñ’ëp8àñx¤ÐS…rnº)«Œõ ½@—‡ˆûQ[Éù,`#S+.›Ífd2$“Ix½^8N¬­­á§?ý)dü{÷îÅK/½?88“É„¥¥%©;b·Û±wï^\¹rE(-ÜOô¬P3zé%"h¤ŒÐC¢)…çZî(34Lp_ò=\'6zMiÜ ¼ñ\¢‚pøða”ËeñB1ÁãÕ8F#•&mÅ'¥“†íelµZú©ÀPà:²¨ßÎ;‡ñ™Ï|úЇÐh4ðÕ¯~ÓÓÓ˜œœÄÞ½{ñì³ÏâĉØôÿV¹7™L8wîFGG±ÿ~œ8q«««˜››Ã‘#Gp÷Ýw#‹‰g‚>©ˆ;N‹E©ð}ã7Š,qnÝn7Òé´(g¤5Òû @ª~çr9)ü™J¥D‰¸téÖÖÖD)aÐ}¡P@»Ý†ßïON¡PZ;>ŸN§W®\‘ØVŠ'Å”{^+¬ÃtÄG2Šñ9°yófØl6øý~ÔëuÌÏÏKáÃx.\À÷¿ÿ}8NÌÍÍann###’’—óÉdpÇw H*cÒ!YKäÍlo”·¢çéµ7¢õ< ×Y£¥„Üvmu5zÔ Œ/A°OÊi;´ò{:£íeàÏ ]§Á¥µ`A[JùNM2fá6Òk-Ò ÀF€0:Áºö†¦lÐwöíÛ‡©©) à¬T*x4µ‡Üw=×Ú:¯kÐ*Ì~°¿zþ =@¼´9^öÓhu6 £i* åA{g¸¦‹Íì3A³¥´pêøÖ>p¹\ðx<( ˜šš’Ú”+v*}:[–ÝnGµZ•1jŠ“%0•)(Ê­ö^¯WRÒ‹A¹ rªyè›7oF<—w:N”Ëe”ËeÖ:Í«qq¾4-–bíMÔHÎ+­øíöFŠVÎK8–ìF¥R ­V “““BaZ[[ƒÇãA__FFF$Øyvv‘HårY*ÒÓ’M §Ó³R ÔICä>ÖFÊeVÇé1hê?\ΟMo•k½?µGI{æhA§lQIÔžYž]<¯Èþ¢‚hôÚê,k<§¨(òLóx<‡Ã¸é¦›„rõè£Jeú矕JóóóøáˆóçÏãüùó2ÆB¡ ÔI³Ù,™›˜Â7ŸÏã¶ÛnömÛpóÍ7K†'¦¾ÅÈÈÌæšKKK²Ïûûûár¹$Ž(Ëïh˜!xo4ÈçóÈf³p»ÝˆD"¨×ëÈårp8’E‹mXa²î1—Ë…X,†íÛ·#“É N‹GƒŠªÉd’"€‰DëëëXZZÊ‹ºÝn ‹BD/'Sé:\¾|‹EðÛí6<^|ñEœ;wù|^Ÿ…B¡+¶DÓE9wZÑçw)ÇT~x¦P™14Ýý§’Ì´²T†µœð}Œmâàr¹066†|>çž{û·‹÷¿ÿý˜žž†ßïlj'¤ª8)˜J¥$ g §ŒýÃ?üî¼óN,..âìÙ³R_†ñ¤ù|>,--¡Ùlʤ’ÝjµpöìYx<ƒAQf¹ŸR©ªÕªÐ´(Sô.--‰§:Ⱦºº ¿ß/^I¦æåº,..¢\.£^¯Ãív‹’̾1=öÔÔHü3©‘úZ*•àõz%À¿^¯ãÊ•+"ÓGÒýÒsÂñPiþ×ýWäóy<óÌ3X__G<Çúz§Háþýû%äÇ?þ1’É$œN'î¾ûn˜L&?~üºr)­ç­èµ_—ÖS@®ÓFà ld„¡â ©l´€/z‚+z4…K[Ç \´Å·X,x-ˆ¨®¡ ­Œì»¶Pê£'ƒ}¢¥X›Í¦X]uÜŠ¶vÌ,NOOã;ßùÞýîwãâÅ‹(‹b±Õ—:û¢½N: ŸýÐÊFŃàW{$HŒñ,¤Ãhoþ›ã泀΅íñx¤Ïü¬V@¹6Ú[¦c48·šOYcö$¯×+´=ŸœA/¡©0 Ì<Ã2¤žiN¾ÎpÄ>Ø´Z-x<Ôëu”ËeIéIÂH1Ó2B*kP>9®´¶¨sN”KK{ãtÊW‚sƽ˜Íf z Óé´üÌétŠgÇãñ Ýn# Õjaaa©T FCÀ^¥R‰©'žx###(‹ÅbÁåË—»”Æv»¥¥%™*ï:PÙˆ¿Eú$÷¸N÷JåÊ™öxPéàxg¦c£´ÒÀuäB M‚ç˜Þ{TÖ™¤ëÃu£÷‡2ÅóK§öz½Rÿ¥ÕjÁï÷Ãd2áäÉ“°Ùløßù,.."NK½ P($iz)+ôºÝn4 \½zÁ`ív¹\ýýýÈf³°X,H&“8r䈜7Íf@ÉdµZ ™L¥R Ùl6[§Hg¿PH›Í¦(¬ÍfSÎI-•JˆÇã°Z­‡ÃÅ í)äžä¥ÓiØl6ÉÆE–sÊ Ò*I, ¢”P®èñä^®V«D»ÝÆÂ‚xå號ŸG±XD<G¹\Æòò2J¥Ün7ÆÇÇÑh4Ëå066†§Ÿ~GŽËåÀùóç ±°°€ù—ÁÙ³g‰DP«ÕðÞ÷¾&“ §OŸ~ÍÝù›ÐzJM¯½­§€\§´v±ù4Él6Kð%=@w} M¡ •žÏѱäJëÚ |–æO¤ñò'uCWÃe4e‰l^âFË(­«LáIK³¦Çùéš^ÂÏú‹ÅÄŠ®•/“@K4-Öô¼ð¹NF*‹¶kï1u/yÜç•cÒ–y®½ö󽬬®½"|·¶t3ÖDÏo»ÝÞT+.ù|¾KÁ¡F+‘ÚKÃt«ì³ÅÒÉØåóùÄr¯åPƒwÊ3×Ϧžà”|w®c|H1ä¿©HêŠÍ¤ÛQÖ8׺ˆVŒ¹>ì#?å˜ëBå1ŸÏÃf³Iª_-+y@'®Äï÷˺  –¥ì1΂”;Æn1¾#‹¡Z­âìÙ³8sæ 6oÞŒµµ5|êSŸB$Á¿øE?~\ú®él<ôšë=HPGEž^¾D"}ûöáòåË8wîœÈ›Î*E¯Ï.zJ´¹çûµXÅ›rÔn·±iÓ&\ºt N§‡ÂîÝ»Åûép8$ËÙèè¨xÉ¢Ñ(2™ úûûtâ0 …‚ÔxI&“°ÙlxòÉ'F%þ(ŸÏKr¦¢u¹\¢lÄãqYw¹dœŠÇãê•nƧÑëÓ×ׇ­[·baaGè{ú ¥" …dïÔëuø|>ñ"ŽK‘D›Í&AÝÑhTÒê¶Z-„Ãay&‰a×ÖÖÇÅCÙh4$&ÔX‹Å‚R©„`0(éé ±Z­8tèZ­†‡‡1>>ŽÅÅET«UƒA9#B¡öîÝ‹L&ƒh4ŠÓ§Ocvvãããx³›6õZ¯ýª·^Þë´ h+¶æ¤Õ؉̄@,kFÀK°«òÐuV)MQá¥Ï~”j?á…Â4žZaÐñ lšJ¡5­¦œ¦«ÕÀDƒ`£æÅôô4žþy‰ ý§ÒŬ+&S'(”Öb*bŒu ²Åw0¨W¿—^~ž`MSãJ9'‰üA˜#•7®ÿÍyãZèdš6Fj eÉØglPô´Qî8? du8p:Úü~?¼^o—×H+Ö: Z+.—K6¾—2E å…}Ôca%rö’N%ž ÉdêÄ—håKËŽjT¶IÉ"PÖsCÀ®ûd6›ÅËáóùÏç%©Z­byykkkÅøø8¶oß.Š&+Në4·³³³óa³Ù°¼¼ “É„³gÏâÀxðÁÑßß/ëÁ>êx Ê<åŽûSS“ø¯×‹{î¹ßøÆ7ðÁ~~¿_~§kûètÔZžô:éóH¯©ŽC£\iª •Z­ðk©¦ò³:vç[ @<‡Çã‘t¿ì³ÕjÅž={àñxpï½÷âüùóxê©§ðÔSOI!IÆoe2 ɲÄÚ&“ ápµZ áp¸+‰ã¿êõ:âñ8\.—È'kv¬­­auuU¼jÙlÅbQÀ==9 2¯årY”(R?éU[^^F»ÝIà 3Ø™ÍfIó¬éoŒMÉçóR¤pjj ñx¼Ëkëv»Q,Å(¤ç”Æ£l6+þår¹\©TJÖ‰JÊc<6mÚ„x<Žw¾ó¸óÎ;±{÷n´EX¯'3¿G… ØHŸ«½P|‡žc=\+Î?ÃÔ¥:¶deeétZž¡i]ÚƒÀÿsÞÚµ'HËßËÅ:FC_ÈšâÆ>pÞ¹4HÖ@W÷AîKcjb6fsâºñcbH/£'&àÌ™3‡ÃB¹Ñž9KÎK±X”}]«ÕpèÐ!Üpà 8pà€s#¸×ãÔ^&íÝ4z:ÙX­çö|i3ñ|âÙÄ9О}>ètÕ” fÁ¢Œjc„þ·öðêµÒ'îîa*µf³Á`PK(³Z&¨¨èõ!íR^ŸFZ–Q©ÕôP]˜ÀÛçó‰QB‰œššB¡P3€J4=T ÃÀ}Jê’ÝnÇää¤dǺí¶ÛpæÌÉ4g·Û‘Ëå$ 3•z ÖÖÖÍf ‡Å[¦i¬<Ün·P/Eya¬‡Vê8—”i¯×‹t:-1\µZ ñxívCCCh·Û]énõ9i2™‰D`³ÙDfi áú­­­ Š{)ËwxÆ„B!lÞ¼…B[¶lA»ÝÆÅ‹1;;‹-[¶àÎ;ïÄää$\.n¼ñFLNNÂlîdëzûÛߎ»îº ÿñÿS§Na~~…B###¢&“I¼ÙíÿË[ñó>÷õÚwÞ‰;S뽋e IDATg÷Üs®^½Šo|㢀<úè£p:xúé§áñxû÷ïǶmÛðøããK_ú “Éà±ÇÃÇ?þq<öØc€;î¸F<òþüÏÿ;wîü…¯×ޜ֣`]§Mƒ`ãÒåegäOó²×VAMé!áA¥•m%$µBg!6€'¦A­úTh™ÖèN[ª¿£A‹ÑC@Å@[¶5Í‹ÀH9" hµ:ÙWÈafõ\Rô˜h5·Ûp8, Š‚‘æ  éyáóøy*FF/• ]W륭Ì…Ƶåûõç8z®õZ=%ü·önh%“^"Žƒ¼~Æ.PÑÒÔ*'ZÎ4%FSt¨Øé,S¤4‘NE Ì1ñ¹š:¥e[+<úƹÕñ Z‰ÔÞ<ýo*×”9…ˆkÊ¿ù\­¨2³Á$éVäì‡B!ìk­VëŠAÑ M­VC6›Jâ·¿ýmØív$‰×T4׊ûϽÆ>jë<«»¿ð øò—¿Œ#GŽH< ÇK:c»Ý–sð}L§  ëüâÜhåý Þ%­Ò«Å¿éa2™LRïçwûúú$ÛšÞ7¥RIâ%X¿ÆjµJÛ©©)‰Á¡‚à÷û…¢ÉZì9/KKKX_ïdjK$°X,¢Œ³¯”Vçøu€v¡P@¹\–,R”ÃL&#Aø¤†QÁ"ÕUï)‡ÃBi£‡ƒóÅ=M/ =Äô¼•J%˜Lz^ »ÆëõŠãt:»â8t€?×ŸŠ ©l|ŽÛí†Óé”"…™L7Þx#^~ùeœ>}Fø‡ˆ3gÎàСC¸xñ"VWWñGôGؽ{7 ….^¼ˆ^xKKKXXXB³W¯^ÅÌÌ 2™L—!ézoÁ`PþÝl6ñôÓOãþûï—³FFFp×]wá{ßûžüìðáÃX]]ÅG?úÑ®ç}ô£E»ÝÆý×½ñïµ_Zëy@®Ó¦Á!/\]Iš@Ug'âï´…SÓ‚.4ÈÒ›Vt°±þØ lðû:U¦Q16ª¯kk¿V„4õ‡c¡—Á¨lñyÚ’Ë?zLFŽy2™ÄöíÛ±¾¾ŽL&#Ê€6fã<é t#IƒMΞ# L{N¨øY£‚ ¢¶6\±z­Ø¾“ó¨-üôÈPŽ8&£²¨-ZÒV6®1A§Çã%¡ÑبĬ.Ý/ŽI{´¬‘‡ÎÚ$œ·NK^8­N²‡aµZ‘Íf… È9ÔïÖ ´‚Hy× »Vb€ 뽇önјtÖ­V«XÛ³Ù,ìv»}4›;Áܬߠ3 q¬@GAf;-àN§S*v‡B!D£Q Q`ôþÕ1ôieL{Ëå²T³×ò ½|z¬Œ 0z†Œ ŠÞTîølz9õY¡ÏEMäwø{~†±>ŸOÞÉùd¼’ÙlÆâ⢌;NcÓ¦M´¬Âó–Ê!SƒS`ü˜ÓéDµZÅ•+W„ŽV.—Ñßß`0(u‰(w$/3¥q\ 4g¢z6†RØ ˜ð‚J ÎFÇT½‹>Ÿ¯« =•çt:-{ |>ŸT@çþ[__zXôâ˜Ífy6ã ¹×˜è„ ÷d>ŸÇàà ÖÖÖ033ƒ©©)¼ï}ïÃÉ“'a6›±sçNìܹ×®]ÃwÜZ­†Ë—/ãüùó¸|ù²Pâ8¿Úö«Ð~Ùý{zñžxâ üà?Àã? £¤ÕëuìÙ³ç5ßÛ½{7Ž9"r=11!?×­¿¿‘HçÎû¨×~ZÏr6£G€`Ž BÓQtÆ*‚^öuúY|¿§ƒÐµWØa´$èêÿæÏ1hm½çï9mÝ&ØÔÀ^eý>6mYÕòJ¥‚b±ˆR©„@  “†’i9ùL““î@2iФm TµÂÅ5c08/\ `à Àù×ë©­éü¾®¯ÀgѬ-ÿzÞµE^+§ú÷\]ß„fM©áºð]=¤´5›Mx½^X,KzÍÞ’¨Q.M&"‘<,‹Ð^ô:kÏç†`–@ªZ­¢Z­vüÿ“Âçr®ôÞ1ZÕõáœé@º&°Vµ!ò6;;+tµB¡ t+í¹ä:jî>i…¿”ëV«cÇ»ö¢Þ›z¿r_j Ãõ§·€Š8e…ò§=Oô2é}@ï•pî kC%™Ê´Vú´‘óÊwPn¸: ­ô,°Ç5dÌ©ŒOˆF£BÕ«V«Ø¾}»V³nF¹\1›Íb1®T*ðxßE•ã™Ä³‚^2¦ŸfJÞ;vˆ÷euuËËË’ò™™£¨ húm¥R颺R‰ÈårH&“[ÂyaÝR¹Z­ …æçç¥ï¬ B¥Ÿ^ ‹¥SÜ‘1Oœg¦õ¥rÆxLdÒ…;wââÅ‹H¥Røà?ˆ}èCxþùçñž÷¼;vìÀ¾}û000€ .`ffV«Uht¬U³¶¶†ýû÷ãàÁƒŸt={@xàØív„B!|ò“ŸÄc=†?ù“?Ðñ¨ìaÆ …ÐnwRJó³TÞ- ʳzí7£õ< ×qÓqLûH°¥¹Õ:îØàíkO‰Žÿ6^ôN§S A‹V^´¡=dh Æß“ÇNÐÅ?¼ø›¢ëzhï‚Î&¥- F ÁM­VC.—C¹\î¢i¨Þ¾“—¢Ž¹0zØ#ðÔ ˜Ž'àü•ã%©)xŒg0R¸¶šº¥çž}0zm´gI{’4×1(zìä›ów´:²Òt«ÕIå[*•Dõ›ÍfIËÉ>Tø|>)„ÉÂv›QÕò«>÷?ã÷û‘Ïçe>u°¹1»˜^G#=‹k§çŒ2˔“þ.%ÿfðn"‘@6›…ÕjE¡PZ TFtͳÙ,©<÷õõ¡T* Í…± \#‚?Ý‚rîw§Ó){”²Á±R™Ôë©=ž”WzDôœPÉÖ (”!­„èsÅh<áÞå¾áe—)‘H`eeEê~¬r=h=<<Œ[o½§OŸÆ™3gpðàAd2Üwß}xæ™gd¾©tûý~ñl¶ÛmI•\,‘J¥¤*y&“A³ÙÄž={pôèQQ¦©,S¡ä¼ºÝnäóy¡²R&Y÷ƒóÍìR+++RïFÇ 1ƒZ»Ý†Óé”`÷P($Ïâ<ñœãúk£iw HgZxum4H$â±£BJ¥ºÎ6*ßzõ÷÷ãÀR/¤¿¿'NœÀ¦M›à÷ûñÏÿüÏ8xð ¾ùÍo¢ÑhàÕW_ÅÚÚ>,ψÅb˜žžšÓU¯­­Áãñte {³ÛÏëYXXÀââb×ÏŒñtÆöðÃããÿ8 …žzê)<ôÐC¨T*øüç?ÿsõ¥×~³[O¹Ni¼Pu<€úÚê§9çšê Ý¾Zñ6.3MË0›Í¯©¹¡'?«geZQ6rókë<Ç ³Õðò£ÂlXhÙöƒ—óëQ¿ØGå%“É  ¡Ñhˆg£V«uomm >Ÿ$£ Çɾëjæº?Úʯé:Úc ƒÀ9/d•1·ÀŸk0nÌœë¹×ÖiZ&iõd´£×”k­i@ŸVV2™ŒðÙK¥’X]õtöEØV«%#É™§˜ý%ŒEò¸œÇR©ŸÏ'VçL&ƒt:-VeîU#ÕsÂçqÍ´Œë¹g¸v´@ë5ÓI¾Ããñ`eeEäœYĘҕïu8“¯×ë]©ˆ¹¯Ú9¶b±(Ï% † ûÏÏR¨4齤)ß©÷i7Ú#ñzÔ=£·‰ž>R‡hÀà³8Gúü¢üéù׊’öЉ]hµZÈårðûýðù|Šív;8€ééi¤R)œ:u —/_†ÏçC6›ÅØØ˜ÔªÕj'µ¡ÌØl6„B!ŒŒŒàÕW_EµZÅÀÀR©”(V«ƒƒƒ’½Ìï÷Ãlî¬d†!ÒÓé4188ˆ«W¯âÁD Àg?ûYx<T*QôN'‚Á ‚Á ¢Ñ(‡T½w»Ýÿ`±XÄJMz’ÇãÍfC6›E èòZRѵÛíh4ˆÇã2§¬ÑB/ßÙn·Ñßß|>J¥‚‘‘)ŽÉï²Úy$Áèè(|ðAœ9sÑh[¶lÁùóçqíÚ59¿ÇÆÆpêÔ)ô÷÷ã¶ÛnÃ׿þuŒŒŒàäɓعs'b±Ž;&žÃÍ›7cÇŽ˜™™Áòò²È넼™MßÅÿÛÀÀº~V(ðÓŸþôÿøááa îºë.˜Íf<öØcøÄ'>p8 ¢”êÆb–ŒaRfk3~ö-oyËÏ5¶^ûÕj= ÖuÚH)1ò¨µu_[° ŒIeb–^Ø | sM§ pgUd õ{µÃ~¬®®vU§À¨8-ÛÄbKWº¦I©Cäh ¯v LwíÚ…¡¡!Äb1øý~)¢ÇÌB~¿CCCRÅ——±W0´ìŒ“ëì;­Úš^Åçñÿd¼èõúq=øNíñÐÿ7¾_{CÈã6fÒ^$=ïZ¹Ô—(×¼V«¡X,JÜQ9¤§ƒß7fLcA6¦ÕcÐÀ•ˆò©ã‡Ø/ÒnheN&“Èf³] 4÷Τã)Óì/é$ZîtR³t¶!—S©ç˜˜ÂUSǼ^/J¥úúúpðàAyÄ‹GÀK`Ë4×Z©äÞäç<FGG‡_£$“ºE¹ÔtNÊå‡cã~Ò^JεqŽø]“„kÅ9âÊ&ß¡.°¯š>Ås€ëNO+ ~¿_23% <ðÀ¸ÿþûålÌçó8wîJ¥œN'’É$ …‚Ð×*• Ž?.^'*‹Lql±XDÎu| =:¦‚ëk2™$=¬¦²Pi'o}}ùÈGðÿø8zô(Ž9"J5—r¹Œv»-ý›•¹N§ÓB£‘:"LXà÷û%œŠR:¯ÚÈÈ, 6mÚ$ëµZMâZx?°žÇì쬬«ÇãÁÀÀ€(Ê•JEj±0(÷K0ÄÔÔΜ9ƒ@ €«W¯âé§ŸF__>ô¡aaagΜA©TÂÕ«WñíowÞy'æççáõz1<<Œééi”Ëe¡×f2LOO£X,ÂëõÂï÷#Ëï{­“áªÕjavvcccp:8sæÌk>wöìYlÛ¶Mh¦Œ1~–Å%wíÚõÆw¾×~i­ç¹N›¶³iE‚—µV"xÓ:lôˆhp«)'-JüŸi¤;Èê~Ñ’ª-¥´j˦¦±Ñªé4ì# ÇÛl6»j~DêŒ?†¤è _…BápkkkrA(x<‹Eär9ìÞ½ 0™LRäJ+8ÝZ)ÔÁßì­öT¬.µÒ§ç\Es~×Z{·8÷Ú³@`¦•PBæé§•ÏÑÞŒLÉ5 Ô ö>hJ¹áÚó]\_tRl4P§RF*€.¤WÀ›ý­V«˜™™Á‚¼[+|´êrßp^©c&L¦8íÉÐ Xϯö@RÑ3™LTÌq–Ëeø|>´Z-$ LMM fii ‘H¤+³P ˜È®|yfÐ+S¯×‘L&ÅúL0¬÷®î»–a®—‘ÞÄýMùe 1דÏÒñMz¿ò½ Þ§|“jÕl6eÿRލ`Q>©Àjå”Y›Úí6%†&—Ë!ŸÏã‰'ž€Åb/A¡PÀœN'"‘ˆ(±X çÏŸG"‘@«Õ‚×ëÅââ¢d( ƒ¨Õjò‡‰*.\¸ uSÚí6ÆÆÆðÊ+¯ÀjµbrrG‹‰‰ ¬®®âÀÄÄ&&&P.—ñéOxøá‡ñðÃ#—Ëa×®]8~ü8æççÅËÕh4ËåD‘Ûºu«(׿©íÿÖ«ò /Àb±`ëÖ­°Z­xÏ{Þƒ'Ÿ|_þò—%®ivvGŧ?ýiùÞ;ßùNôõõá›ßü&n¹åùù7¿ùM˜L&¼÷½ïýÅ ¨×~%ZO¹Né%èñcÓVtOÀC×Ó¡¦d,Ñ¢l±tÒSòß:x]¿Ÿ*?G C° iVºþ…>× R`\.—X+Ýn·€]>›A¸#½Ùl–ÀC³Ù,ô‰t: ‡Ã‘‘™S^Æä9;NäóyÌÌÌ`ß¾}8qâB¡PWà0ÿhªÙëy`ŒÙ*1Ú‹ çJ{6hù×ëÎwèe9Ø…šóÏßó½ÌRCE‡Ö~“Âßs,ÒJ…ÃK c¨L°vûJ…H+Lœ·p8Œ\.'ÖeÊ5éXz,ôPa"8ÓJ×›)GkÁy7RË8ÚÄõ¶Z­ðx<¢ÈéCäÉÓ‹@9×rãñx$ŽàìÙ³Rc‚15‹E¸ýFC”žTpËårך2Û3iq|6› @étZd¸V«Éþ5›;ü~]Á›û›Ÿ#­KË,½QlºP&÷9°Aä3¸§\.WWü•ý-ÓÚÀÁóÁd2Áï÷# Ãétbqqf³YbЦ§§áóù$c-Êå2nºé&ÌÌÌHªîh4*Éççç%Ýïâ⢜3Tž´1†±…BAh\ŒñÙ½{7J¥Òé4ìv;Âá0 …‚$½H§Óp»Ý¨T*2¾••|ík_ÃÏ~ö3üçþ'<2™Œ]ا@ gÙìì,âñ8²Ù¬Ä@x!Î)cVè¡ünݺ¹\&“ 8uê†àŒŒH­õ‹Ïev¯ÕÕU¬®®"‹!ŸÏÃëõJlË}÷݇»ï¾§NÂsÏ=‡F£! ïºë.˜L&¼ûÝïÆÔÔFFF0??O}êSH&“…B2g|®ÓéD ÀÜÜúûûa·ÛÑßßjµŠÉÉI¤R)|øÃƱcÇþÇ»÷l¿ ÖÿM#}ï­o}+B¡2™ ž|òI|ë[ßÂg>ó¡_ýõ_ÿ5Þò–·à¾ûîÃ_þå_J!ÂX,Ö¥€ƒA<òÈ#øÜç>‡P(„{î¹çÿaïÍc+½«óñç.¾¾û¾Ø¾Ûcg<[Æ“„@Ò@@E¨Z±Šª¢M¡RUU*âD[µªªnÐ ŠÚBQÕ´ K!‰$aš ™ÌdÈ,öÄ_o×¾û¾ú.¿?¬çøÜ—i‹~_Ò4ÌýH£™±ï}ßÏú¾ÏsÎsÎÁ‹/¾ˆ?ù“?Á'>ñ ,,,ü¯mØ^û6$ ·i#˜  ÕU•ùb×Uþ­Aµ¤Iƒ-! ^ZÌèyÐDÁh}äÞ`A“£µ˜f´tƒ„Š@˜$‡‘£¥Ri (€ô™sÄ1kBf·Û@X¥RÁÎÎæææä…¯e>À~èõëבJ¥D6À2½”œèÀX-Ñbu^J°Éù¥5N{hEÖY¶89œ-çÒ„F{;ø5Ù¡äIÇSèõÒUÇ5ØÕQgâ"‘Óž6î!’Nî3^®ç…{‹ó·¶¶&÷ÓD‚׃¾×ßè=äz`4 X,Ù$ÚüŽŽ=àÜqÏq?sμ^ï@L@¯×¯<Ï5Ç­³LõzûÁò´Š›L&ÌÌ̈G‡r*~J_‚Á dp£G®ÛíJ-ÎÍfñcÇàr¹°¾¾.”ǃ‘‘ìîîŠWªT*!•JIÖ6“¤¤®ÙlbccCÆÅ¸$‡Ãßþí߯ÌÌ ¾ð…/`eeFÝnW´‹Å¢¬ *cccžcÎ +–ÓcÑív111­­-É<åt:qüøqIcër¹J¥`6›¥h`±Xĵk×099‰`0(R*Vy§‡Šq5ÜK©TJRLKµz½.™Â¾ÿýï£Õj!•JIjâW_}/¼ð¦§§±´´„»ï¾­V +++xþùçñè£â#ùæççñ[¿õ[’fùmo{&''ñ•¯|E Sáp/^D»ÝF$Á¥K—þÛwîÿF{­ÈuÍ»îº _þò—ñÅ/~år^¯‹‹‹xä‘GðÑ~T>wìØ1<óÌ3øô§?|à°Z­xÇ;ÞÏ~ö³BRØ~ÿ÷_øÂðÙÏ~ãããøÌg>#E ‡íç§ ÈmÚ´×`Të§ù¢%9Ñ@–/$cJL Ü©¿g|­Õ´ü i°KK¶1(W뽵̆‘ßÓõŒEù´ŽžBg-1_­åçµhé¦ur꺯^½Š LMM¡Ùl"NË5‚Á d¹¡L†AÁ###©Hu,-Èœ @€Ò,z€Á)œSZ† ¤ `«ÕªIÊ# cA´ÌMpGpI+*c]¨içܳ?Ô–ó{ôZè1ñ~šàj z«øz¸ DÙø=rzöèâÏiE' &)Õ„˜ë¦%XÜÿ&Ú3Âëq Ï«cSÖG IEâÅsZ¯×áñx„dðSB²³³#˜:ŽÄÇÐÎ bZ7çææpùòe˜ÍûÈ¡|ŽPÂåóùP©Tä ó<Ñsèp8Ä»BbÍ=A#É.cX8×|¶èXOνPü.÷ס^¯ !`f#îM®¿@ª–Ÿ8qׯ_G4•X¤@ §Ó‰ÍÍM¸\.¤ÓiIHÑét0==-–ûR©„ÇãâÅ‹Böè-ñù|BŒè‘åù`ì¤GFF …$‡{•½³³³øä'?‰|™L“““XYYA¿%mee÷ÝwŸì]ŽÉétŠ·fww~¿»»»ˆF£èt:¸~ý:ÆÇLJ±¶¶&^ÑÑQ \¾|Yöm&“‘gp¿´Z-É€ÕëdJd…v¾kNï‡ÏçC­V“X&Y˜››Ãîî.ž|òI¼÷½ïÅÿñcuuUbNŽ;†Ó§OãÊ•+…Bðx<ø•_ù¬¬¬àcûΞ=‹?ÿó?G§ÓÁG?úQüÆoü.^¼ˆ¯|å+˜™™Á»ßýn<óÌ3xôÑGqøðaÄãq™ßÛ­=üðÃxøá‡ªÏÞyçxòÉ'ªÏþîïþ®¤ñ¶Ÿß6$ ·i3fN2Z¶u6%0K«.I3«Aÿ­b4&HÒžàÀâH}1·NÿÇ—2Á&-×Zƒ®³öPZA‹2­$À嚀 ɘΕó ѵ&š¹ÎY8ikkKÀ(­ëÌD£5ÛcccH§Ó2wÆ¢]œ'ÎçY×nЖw-‹ÓZxÎçL>n#£½ì“Óé”ÀO·Û=Á„ßãwõþ µžëÄýìyÓJ®ã´lŒsO‚½Òï÷E.¢=˜“Tqß‘¸ðlhÏecÚë¦Ç ÷0ûÃ=͹Ô$Ÿë¥ç˜dˆÒ£f³)¤T§=e?yø{žíÍ£'€=—Ë…@ 0ÐßB¡€n·+Êf³¡\.K÷ööpíÚ5‹E”J%”Ëå3@O^,C§Ó^žk®7÷7Ÿ$ZÚǽĽJo&Ä$_$šZÖFpÌó+Y§&“ü»ßï#£Óé  "‘H X,"¢\.Ãét""‹Œ­Óé`llL@4ÉE©T’g¸- Êå2ü~?nÞ¼)ý£•ww½^Oâ5è-d¥p·ÛóçÏ‹Åív£P( Nã±ÇÃsÏ=‡çž{ÛÛÛðûýðêÔ)$ ˜Íf”Ëeyv4 $“IŒ‰!Åår!‰ ^¯ÃårajjJ‚ÎIø˜nrr­VKÐééÕDäðáìŸÏ籸¸($Íf³É^êv÷3Zñ½DÒÌ☋ÛÛÛëq×]w¡ßïã=ïyæææP«Õ0;;‹'žxËË˸té¾ûÝïâãÿ8æææðµ¯} ög†ééi|üãÇÅ‹±ººŠ`0“É„^x‹‹‹øä'?‰7n`bb‹¸óÎ;‘Ëåðæ7¿_øÂþ‡·îkßþ·= Ã6lÿ/mH@nã¦kdh ¦É€ÖqkÐÈïÐúh”Jñÿ:C6­oÿ¯¬Ó:Ó4ïa±XÄRI€@@2,‹ÎhDðÕétÄãCy ›Ž3Ðyô5ˆ·X,(•J0™LØÝÝm´ÉdyǪI |‘ëø‚Tà Ž ÕjIŸyZ͹~:Æ€—óÇ9Õ~¹'x-½nÖŽsÆõÕÞ1‚xSÄ=¥É%ïAip iÒd‚D€÷a삎…á|ir£÷ –>qÞ¸ü7A.«¤“h×ܳÄÊû´çPÿ­‰ ÏçF§ÁæuIôOÄ¿5qÖ{œ FFFD†Ä}  …`·ÛQ.—‘Íf%51‰:É-Ë<—HMÅB IDAT\»F£!¤Ÿ´d±T*! Âjµ (ï÷÷õûv»]b>¸—:Ž…{]ˆó|;NT*•Ÿžã`ø’MžYMz8/üžNüÀÌPår©TJ¤k¹\N<-ététårãããÅÎÎìv; …†m xê©§¤®G6›ÅÈÈvvvà÷û‰DH$„L‘İàÑ£G‘Ífe¯ÚíväóyɘÏça±X066XZZÂââ"€Äbt»]¬¬¬ÀëõâÚµk8|ø°Ä_Ð3ÂýS.—EâIÂét:%[«—Ûív)8Hoj>Ÿ‡Ãá ^4˜Ôëuø|>D£Q$ ,//£ÕjáMoz’É$b±˜HÐ*• r¹œx©IÐC¡666`µZåZ7oÞ„ßïÇÚÚnܸ@ €Ï|æ3¸ë®»P*•°²²‚;ï¼F™LïxÇ;`·Û±±±oûÛøæ7¿‰Ã‡ãŸø¬V+¾öµ¯á{ßûÚí6&''ñƒü—.]’ÚBôG§Ó‰üǼõ‹v؆mØnÙ†ä6mtu³@ðgP|4ìjY•d¬ 38ñšÚJ VJÖ_>4k‰_BÚbª-ÖÀØãut= j6ZÒµç†ÀG{†| Êø{>7£Ñh V«É¸ à&&&$¥f$]¿^ Þ‹ÀÛn·|ÓJNo ­ä¼Ž–%qþIêšÍ¦È±¸8×:`—¿×ñ!z „:22"’+‚n‚>®.å7ü[§EÖñôÔéki×–ëÄ{òš–šü°:¦G¯/ÁŸÖ¾óÚÂ9å:“ôñ,h™$狟3ÆHéä:iï_(`·Ûq÷Ýw‹¥¾^¯K¬ ‹V«U©îÞívQ.— …°·wPçÀ€W‘ž´z½§Ó‰³gÏâÒ¥KâIáú8NyöhÃçG¯1=@:Ó%_š@’`èõÑEM.øìâèsl2™ÐÇãq˜ÍItÐLOF·ÛÅüü©Å²³³#1(4t0½.+Õj¹\.— “““(—ËâA bÜÉ´ûÄX’Z­¿ß/â&“I$M|ÞÒÐÁûûõ"‘N:…½½=¬¬¬ˆ'†2N]G'Êz¸\.ñø1IÂõë×át:%æƒÙ¥*•Šò‘àÉ'Ÿ„ÝnG4Å«¯¾Š¯ýë¸÷Þ{áv»Ñh4ðo|Ï=÷œ¤^[[C ÀåË—Q«Õ°°°€/ùËRãÕW_E¡PÀ3Ï<ƒ¹¹9=zúЇL&ñØc‰ÑäõnCoŰ½QڀܦMK£˜R“zc"WÑâš$`¨Q¿Ýh4Ûø‰Ïk 0ïI°¥¥Yü. ¼Ÿ–TЪ®­ÞÚK¡õôü®öP¯ÏùÑ–níEaµçˆ–~öµT*áÆ˜œœ„×ë…ÇãÁîî®ôtt©TJª{3€Òd2Áï÷cccc@æÄ\ùáp™LårY%ËåòñÒ$A{‡øy‚`Î?¯=YZ–¤SÕòú$[Zö¢=;œÆXÇkðsH Á2×U{0ôg8Vö‘¤„ýàšd°ßÜW:h]dž ÊÉ`µœO{•`µ×Hï[Êœhé×1Eü>÷­î¯EÒϘ îy=v^€‘ýáyáÿív;êõ:666dîY½ZËIˆ×ãp8 g³Yx½^™GÃBOV£ÑÀÚÚ"‘úýýÚ$”Õ ¸ïHRuì ý~_2×PŸo^Ç8z xæéÝáÞÑÏB‚o—Ë…ññq™+z ølŠÅbØÞÞÆøø¸xP½^¯J•ß‘Ëå@¼N§ñxÛÛÛ€r¹,7ŸÏ‡r¹,FÊAYž±Y$D@``ý].—Ä ±öM£Ñ5¦çkrrµZMÖX?+¸¯Yœ’µLHˆÊå2`uuý~Ñhív.—KÖžñD\o“J¥·ÛD"›m¿0æúú:Nœ81›^z:uQC"¸^gΜA¡PÀÌÌ FFFP©Tàóùðàƒâ¾ûîƒÏçÃc=†­­-ƒA<üðÃxâ‰'påÊôz=¤R)˜L&É‚U*•055…ÍÍMôû}‘9rDæ1 aii O<ñ677öÙ° Û°ýÏmH@nÓF @PǺÖãk2 –ìhù pàek=hk.FÀH G EPc”QðºŒCà5€A)¿«¥6ü,É_¸Ú£¢½·º -ÖšHiˆî#ÁH©TOÅÈȈTñ¦>šUiíd£E7b~~f³Y2ÄÐkcµZÅúH€æp8$X—@‚óéñx$ˆ–ãá˜5ãKþVq§ÀTk²gœ; ¼¹ßø·‘p‘ÑëÃëqÞ¸ Rµ÷†ãÒ‰pµìÉ("¡bŸ¸tP»î;p I£lFŸ’½ÏµGPÏI-ì”âqŒ$†´âÓb¼žÑûe2™ôq è­¢4‡^ Ž‹^EÆh0OòKožÎXFÀIRm2™pôèQØl6¬­­Éý£W‹Æí±£DK,εŽÿÑ„Uq‚Y&Ààzpýù›Í†h4Š©©)¸\.,//ËYÞÛÛC8Kz.—òÁϸÝn$“IT*D£Qøý~y†ùý~$“It:œ>}Z¼œËR©„‘‘Ií˘1Ž‹•ćTºŸŸŸ‡ÛíF¥R‘8—|>/dscc;;;âÝ5›Í˜žž–g(I¡–ªµÛm©œÎg¥Ãá!¹\NÖß'qáϸ¹O™¡ŠžIzj¸vŒ#c¿Õj•¤6› ÅbQˆ0Ï"+µÿæoþ&‰Ž?ŽÿøÇ¨Õjò¼ì÷ûØØØÀîî.®\¹‚ééix½^Øl6Äb1ñ qŒ ògºJ¥‚z½Ž¹¹9LOOÃçóáÂ… ¸zõ*2™ Î;'±P¯wÓ?õu‡mØ~ÖmH@nÓFàM ¨I€&|YЪI`¢ƒ–Aƒu€AK¤ :¨Ù(—ÒàKƒ_‚PJŽ´|…/= pƒ˜‚ (5@Öñ'A¸ÔÚú¬ÇÊ¿ëõºXʘGži+™ž—ÀxbbÙlÅb¹\NÙl†Çã‘T•—/_F¹\(òGI–hë7ûÏy`|ƒžc6]m[K}ØgM´äM{§8oÚ#¡ªN½¬×@Ï=IÁ¤–’@òZì³è0˜šs¬÷?«A¨î¿&ÊÚë§Ï Þg¼6®ŽíàøµçM{úø}_Dª3ƒ÷6I­Óýþ~õlÞ[“%Z™¯_¿¯×‹H$‚`0ˆl6‹R©$÷×$؈$+\΋–¶ñ¬ÑcQ*•àr¹pôèQ¼úê«h6›B´Þ JŸÚí¶RŽŸ{@{é¸^ZnÅ>èloÚ»¦ -:‹çÑår‰ô§R© Ýn¤›-‹H$ðù|úl6‹ÍÍM‰ýñx<CÛ͆ññqñJ;v W®\ÅrÐårÉs–q?Ú O‚ïõzÇåù±´´4PãÅf³‰, a{{ÍfSÀ2=—<ôÆrn)§ã¼”ËeñЋEñäšL&‰! ±Ûíò|n·Û(‹U.—…œR6::ŠÝÝݯëϰâ¼ÎˆEÏÏçC$ÕjÅÕ«WÑl6Q«ÕJ¥Ðh4pøðaD£Q<ýôÓ8{ö,Ž9‚J¥")s?ðàå—_F6›E"‘@«Õ’XVnïõzˆÅb˜žž–q½óïÄ… páÂI¡ßu?omH@†íµh?¿'fØþÛF€§A _vÚz¨e|‰óóÄñgZ’¤k@ðghÞêúZÚeÔíó»¼6_RÜr<ŸÐlZF¥3 imÅü7Ç£e#üðZår»»»èv»ðûýp¹\r}¦eJf΢ÔÀb±`vv'Nœ@·ÛÅåË—‘H$„DГÓn·Q(,Á­VKR\öû}©ªLy\"‘@­V¡%ZÔiy³géõ4Ž™ÿ×ÁðË­>Ëuçh c8&ã:j‰€ ûH‹®zÌÚs@¢¢?÷”&£zýÙÿ~ÿ ³q€âÃýÂ9!a×Yéøgj®‹öÊñ^šhbª¯Íõ×}ÉçóØÜÜ”z̦Æûùý~ñŒ=|^Èòg´(“hmnn"•JIªj^›ëÀ>F£Qœ8q ’¦Z?8.½·4ùàóAÏ-çˆýÒß5ư±xßøø8Ìf³œ!~‹Å"Y—€}2çõzqüøqøý~ ”&Àï÷÷ƒñ¼Íš-©T õzËËËÈf³2Üon·[2ä9Nx½^x½^Äb1Y#žÉ‡zÅbËËËBFGGÇEúÖh4‡%ÆÌd2¡P(ÀårI\ÓLÓÛêp8P­Ve^´‡¬R©`~~étZ$b”‚9NIEìõze¯1CS[,ƒAñÊÐCEï ×Ûl6K®A¹\¯Ì‘#Gàp8ðøã$¥ˆÅbx÷»ß¹¹9‹E,,,ÀjµâÌ™3p»ÝøÎw¾#)ÐÓé4ŠÅ" …¬Öýt¿$c?þñ±´´„D"çŸ^‚üÏœ9¿ß\.'$Ž„÷õlú¹ð³ü3lÃöZ´!¹M›œ:Û p²”/s-‹Ò/u>£&ŸQK"X@K¸Œ×&ÀÓd‰V5^/.í}ѤÁ¨ïæà¼°„l°pŒzüzÞt1>Z† „i‘£—‚€÷ …B¸ï¾û„@°Øää$&''1==~¿+W®`ccNG®OIsãëLZì#eš°Ôëu‘~p>5±àÜqÎ8O¯z]ŒdD“1^_ÇÞ轡¥yÿì7­°´Â¿±¯Z¦)ûÌÏi`£‰’–é cð«1ö„€N{–ôÞÐAzê´‰¿ãüêóÄyÖqGÜŸz=8vcl çÀ’/~†×h4ØÚÚißèè¨X¾ív»ì«~¿/AÎúÌ·Ûm‰} ’Vû~¿/à“VsÆxó9søða=z½^ObÈ´·‘RMV¹:ˆs¨­÷Fï%ÏŸ~.¹ÝnîNGb­<Âá0Âá°xôzÇb1ñ<’Àq_‹EY¿«W¯âêÕ«r¿J¥‚B¡€P(ŸÏ‹Å"¯˜F™à–)¾µ,ñd¬_âr¹`2™¤ˆÞÝwß ‡Ã!Þ«Õ*ôl6J¥’Ô÷`M‰Ûl6Øív©HÎùdúî~ðƒ8}ú´¼'˜FXǧ1ÉÇÈÈ|><xŒ€CŸã”¦Úív‘]jÏ*ûA£”ÝnÇØØŠÅ"î¸ãär9œ?¹\ñx'OžÄòò²ó§R)¬¬¬ ‘H`ttcccxöÙgñòË/#—ËÉs  aqq¿ôK¿ǃv»d2‰ÕÕUlnnâÈ‘#X]]ÅÅ‹Q«ÕŒc?¯mHB†íµhC ÖmÚ4ˆdÓ²í `#!€ÖãËeŽ• …z}íQÑq­÷× Š/*‚'m%ç Ö(‡=0š8ñåÉÆÏÓ*Çëêþñ¸–u¯Åÿ‹E‹EÄb1„Ãa! {~¿^¯Wä{{{8tèFFFP(póæÍ¸ñ¼³iÏ‚þ=×F{ôÜë< š&œ?Î3çQ×Ûб¼>F LÒ¡c èÍ➣åœ}Ñ^½w¹?5)0Y <µ|…s ÷––=éý¤0û¡A¼öxêuâ9à^Õ{I_[KË8o¼6cY̵÷PÇh/‘>“œo¾™ßaÆ«~¿/ž‡N§#Ö{J©˜!IËù(CÓ÷&(Ö™ªxæéÙÛÛÈÀÛÛÛ¨T*ØØØ@¹\–ïpŸPd”]i’¨çF?_´·‹ šóÃB•Æ|Ö|³Š}(OÎÈȈXá{½vwwåyb·Û¤ƒ.—Kâ˜0¢X,J-Vï&!dHZéI3f¨úá(ÁæÍf§OŸÆ{ßû^Ôëu<õÔSRéž^„n·‹H$"F JÜ(}K§ÓB®(§"‘£Ç„Ec±VVVD†Ôjµ$nK?›™‹žXÆqЛS©T066&EGGGár¹ä£££ðx<¨T*2Wsssèõz¨T*¸çž{ðøã# âÃþ0VVVÍf±½½l6‹cÇŽÁáp`yy'NœÀìì,}ôQ¬­­¡T*ɺ¸\.¸Ýn|øÃÆÉ“'ñüóÏKÃt:jµŠjµŠo|ã¸|ù²x€ôY}=ÛÐc1lo¤6$ ·iÓÒ&-W0‹¡åFÚ2©9޶ÓK‹«–ÊhI‰¶´“lðgÆ G¿)xië™¶6sœü µÌº°¢íúg¾®~à¸Áãææ&œN'Ž= `?}$­ŒKKKR buucccØÞÞF.—HCɾk¢HºÕœgö[ƒrÝg]CEg"I»•ä‡÷Öq\?]WÅdÚw`ßµÅÚ¸ì;­¬Ú{ÅÏ2˜UÿLÇjp_kÂÂ=¡­æFb`ì›–Qé}íýÒ#Ù൸7u†"ö‹àœÿgÿ¸_ôyÓD['@àúk‚EàÇy"¨¤çO“=îgî—J¥‚r¹Œ±±1ØívÄb1$ ÔëõÏ–ÓéD­V“ý£ûB‡ž;cΉÕj…ÏçËj¢c>´×J§Ö^<1‹1%$AúwÛÛÛ0›÷³$Åãq4 rôÒq´|D“ÞžÎ3ÇÈŸ9NÉôÅ m-YÓ^L½75 圱ÿºi„žo³Ù,i…ëÐl6áp8$ø¼Z­8HÑ @ê€pðív/^D¹\†Ûí é:;Sëòš‘H¯¼ò ŠÅâ9¡üˆ^Rv<•Jaoo>ŸµZM,óÜC¥R •J/½ôvvv²Á±æ½¥•JE¼°Ä’ÏÄ.— ‹‹‹‡ÃX__ÏÃØØ˜xR¸þãããØÙÙ°ïa£ôªP(ÀétJeuf°r»ÝÈçó±@G¼p$zL‹ît:ár¹à÷û±°°€äóy¬¯¯cvvV«O?ý4&''¥îÒ³Ï>‹¹¹9œ>}6› —.]B£ÑÀË/¿Œ¥¥%ܼySRýrP÷µ¯} áp.— õzx×»Þ%†±@ ž4z¬þ/x@†mØÞHmH@nÓ¦åF|Yk` Z…5%°e'Mø’&P 06‚uZMµõ’ …À’/c¾(´ÅIWƒf_uà±¶<àèÔ½º°Ÿ–óèþho Aå0?­Ýz~ªœ+• vww199)©&×××Fáv»±½½ÑÑÑÔœºOÚãÂ¹æ˜øÒ'@ÓÞ®ŸQvGàF8ÉA_°Ú¦÷‚–GHr]›Í&¬V+‚Á Nœ8ÉÉIÄãq|ñ‹_Фë*h‹( A½öÆiï÷‰çBKµÔŒóCψ¶Ú³iö–ðw¼?É…âºÈ¥qïñŒp­¸¶$e‹«–>±é}ª?Ï>ÑûÁ@_-cä5÷^__—1Ž’É$†ÄvpÿðyÁ~PfCÙ×1ŸÏ#KÁC³Ù,© ™U‰À]¯'­Ú›QjÉy6®‰ÑCÅóÃ=C© Ó¸6›MT«U >& e:kÆqÅãq$ ÌÎ΢P( ›Í¼^¯¦fÖµ:(#c’Z­&Y«˜Pcoo333ØÛÛÃêêªô€µS6È”¾Ü§ù|^p˜L&ÙÜ_•JEöªËåB<G<Çøø8&''ñøãc}}µZ ?þñ±¸¸ˆGyo{ÛÛpæÌ|õ«_E*•ÂÈÈJ¥Òé4`ggNçÎC±XD§Ó‘ôåf³Y Cl›››r.Ün7fgg1;;‹ï}ï{X]]…Ïç“ý© ¯wz+†íÒ†ä6nFk¢&Ú²ª-¨DÊ¡­òÀ¤(ô’ðEÄ#‘–òhÐÅþ°šPÐò¨­è¼7¿«p±Šc#X2ÊÊ4‰ÐÀ•–ncF"Ž×•_æÁN[[["C9|ø°¸þÖ××Ñl6%hœ/t-—#IÐ^#³ÙŒ;î¸C2i5ç…À¼Ûí q"HÓ…çtzUcŒ =A\g®]³Ù„Ëå’½E2™H$Ðl6±µµ%sl¬ÛÀësq8ÿœwîC‚J-á"¸ìt:âÁ Hæ÷t ;çP{ ´'¬×;¨¾®ã^n%ÉcÀ=Ï}Å=ÃâpÚ CO•öòlñû¼¾Ùl ‰Æ>h«½Œ_0z)aâZiY$=p zn6›ðûýh·Ûðù|Èd2’Ž”÷çÖy%ÈšÍfx½^D£Q™[ìlôzh¢Éõ%¨ÖS’#ΧÎ.EyÓéD(B³ÙÄôô4–——ár¹011ÍÍM‘˜±¶G&“‘˜·Ûl6‹f³)×u:hµZ(‹2§ý~ðz½H&“"S¢tÍáp •JIîL&#D  Š\Š)‰i”—1e2ø|>¤R)9‡µZMÈ¿Çãè‹ w“É„t: Ç`ßräÈÜqÇ0™ök¸<òÈ#RcˆÁø©T ¹\ãããðù|ðù|(•JX\\ÄÍ›7E>V«Õ$®–äiÃN¯·_0 dõcaF¯× «ÕŠL&ƒ‘ŽŽŽbee£££2î“'Oâ+_ùФŒgEyJÂÆÇÇ‘J¥äm6›%Ío(Âüü<666„6 ŒãÞ{ïE±XÄõë×Q­V133#5`z½²Ùìé¶a¶ÿ¹ ÈmÚø"×¾ø+ _æt×5ÿúo‚m; å ôÕ«5`ÑÙ¸pž ]Y›÷â¿i‰ç V2  ù9e#˜åý´÷¬T*buÔ@Q“ö“§Ýn£\.cmmM,j9?úÑÉddÜFIœ~¹iÒ477‡p8 ¿ß/Õ…µwI7];ä¬Óé X, `ÑR:- ÒÞÎ×’ —ä“…Ð4‰Õ’*JÕò5)Ж\-ÒëNK8´ƒ"„$Qºÿ\[ö¹ÓéÈÞã<±iB`ô:i™žŽEÐ<Ê–hYÕÞ’LíA0z8v¹¿ ²9oz]9&-¿ÓŽsÉuåZpÝ} 8ÏÉ•+W0;;‹L&ƒh4 »Ý.Ó°, Éyaì÷;ç1\'’Ênhhà¹4Æ¿$óyCÂĽÌ=¥ãD8—ôäi‡±¶¶&ñ½Þ~æ-ŠT*%éív[¼7$ËË˰Z­8tèVVVÐét$˜Ïžt:-}=þŒb±¯×‹r¹ŒJ¥‚X,ø_.—ñÔSOáÈ‘#’j~~F>Ÿ&“ o~ó›qõêUloocwwN>Ÿù|ÝnWH‚60ãB»BòDrÊñÒàr¹033ƒjµŠË—/£V«!¢\.£X,bccÇÇ/þâ/" â}ï{¾ño V«auuUj£ðܰ(¬ÓéÂGRÈ 4˜¥Ói¼ï}ïƒÉdÂßüÍßàêÕ«èv÷ë0°=N£P(àÂ… x½›öŽÿ¬¯;lÃö³nCr›6 Êé×é[r,‚D‹Å"`J$€/—üÞÞžÈhŽ÷ A§Ö\³ñl±X$û¯KÐe,ÎÆ—-¯£Šö€,Þª¶º&"-æ¨ê˜Dê¼IÀôïkµÆÆbwÀ IDATÆÄ²úÒK/‰t…ã&ã\°ßº ô=÷܃ûï¿ù|ßùÎwD&¢ãm¸FFOçÞb±Haf!€Óò £‚׿ß:î8¨£‰‰–Cé@}öƒÖQ-¥âßPj¹¥2šXp-éñáÔ{•} HÖ2>·Û-ÒÆ´˜ÒÆëi°Ë¹Ô¤¯P(È|Œ‘\Ñ“¥¥¼å~´ô¥N:™ƒ–Uql<š´iB¢É6ïÁ~SFD‹ú‰'°µµ%u#xmJÌ´!‚÷ÐäÏn·‹ÔdrooÛÛÛ"qbÑ<îK}†uáL^_?+´á„Ͻ§¸n­V ccc( 2Nf£J§Ó¨Õj¸qãl6›1³y?Ív"‘:>¬·133§Ó9çÔn·%ž+—ËI*[‡Ã­­-‰‰`erÆ]ƒAŒ£^¯£ÑhHÆ%z¹;î»ï><öØcˆF£ØÙÙ‘ìW[[[rî›ÀlRôB¯¬¬ÀétJÅ\.')¼éª×ë(•JH¥R²g¤Î¬hv»™LFÎb§ÓA*•B6›…ÅbÛí–yâ³’ÒH®Õj…ÓéD©T‚×ëE§³Ÿy^ªF£H$‚S§NᡇÂ¥K—P(°³³ƒZ­6ò¹¹‰¿ÿû¿Ç‘#GpìØ1x<D£Q¤ÓiIiL2É„¤ŽËK/½„`0“ɯ׋¥¥%8,..byyÿöoÿ†l6‹v» —Ë…ññq|ìcÃÂÂ>÷¹Ï!NãþûïÇüÁü´¯àa¶Û¾ ÈmÚdø²çËPË—hEåË¢ßßÏ€âp8hpª­ãZÒD«-AH­V“ß@Y,–9 ïÇïk EP Áû¢¿O -ÿô`4›M‰  WË|8_¼å_´F2€’qZÒ¦ž&9ù|.\,7´þñ…ªc8WÀ>ôûý˜šš‚ÅbÁW¿úUqÿì’€ð;º@Á"Á»öñ…ι1ÆNh™œ–Í„,RnÒét$ÐÀ æ}€ƒZÊÃqè˜í]ÑwZÎ .ø=J1týzh©'ãZ踽¦\/½ßN§Î¯Ï@k‚p’^s_êø%ãb½sνÎðD ÷É ÇmôŠh‰ž®¾M«üÊÊ ¼^/Þüæ7#‘HHð-c´¼MŸ¾b±ˆ±±1är¹g2™¤ò7ÂY q4$ì7×sIO£®æÍ½ÌŒV”©¹ÝnLNN" bddDbH*\Æ||³èÜøø¸ì;éû|>„B!¤ÓiƒA;v ét‹E²*ñyâñx099‰ÍÍMD"‘·qQª™Ífát:%xÛëõ 蟜œ”8‘'Ÿ|‘H½^‡B:y°ŸìkZ©TäÇ}çñxP,Œ“œÑcS©TÄ;CœÏç…˜ŽŽŽ"›ÍÊ3öèÑ£p8’9Ìívc}}N§n·[äzOëgÚÔÔ”™ìv»xkXI>›ÍâK_úNœ8ééi„B!‘Ž]¼xÉdÝnW2sÍÍÍá¯ÿú¯qãÆ ¬®®âÊ•+ˆD"A*•cR³ÙD>ŸÇ©S§033ƒååe;v ‰DóóóØÝÝÅåË—‘L&å¹â÷û‹ÅL&ñ©O}JŠ2þÎïüþáþáÿ÷ûøgÕ†a{#µ!¹M›¶h³¬Ž¡Ð×ÀA „Þt2A‰ _æôŽLé] ºÄø²Òžm-æ}ØW ” Ò4È"˜aœB©T ûE`ÂkrN42™LÄ^¯×…ÄhÁ&wÏ$aì3çžóJGMP511ŸÏ‡B¡€W^y™LV«u@š£åIœ7ŽI{-èEªT*Rÿ¡^¯# ¢\.yc¥káȃ£c'èÕ!YäjyËÞÞü~¿0ëÏk ¶¶ëX ®1†NçñcP,³5éx ¢õÞÕ1ÏܧÚêÍ5Ðñ<Ì„hêš:ö‚`­Ûí€Cî‘Ls^€Y#­àô¶è=©2÷†.øH€ær¹píÚ5‹EIIªi§Ó‘µÖ$ž÷‹F£X__‡ÃáÀØØ2™ŒÌ1‹ƒAø|>¬¯¯ËÞÐE9ú¬ówÌÞÄ=Æš4:ÁÛíF£Ñ@(1¢T*‘1¾E{ËÆÆÆàõz±¾¾Ž\.‹Å‚B¡ ñ,§OŸFµZÅÖÖ–H,ât:‘Ïç…˜›Ífììì T*‰G-Ãçó¡ßßOý:66†X,†R©„@ €~¿jµŠÝÝ]Äãqt:èLÙ=>>“é ¸+ƒ¸ÏÂTÁ, ÉxÊ·H|(±â¼V*Ùß|þt»]øý~X­V¤Ói˜L&y–&“IƒA ʯÕjBæÆÆÆàr¹Ïç‹Å°»»‹J¥"ŠV«…|>¿ßééiœ<óÌ3¨×ëˆF£ˆD"hµZ’þøÅ_ÄÍ›7qæÌÀÖÖü~?L&“<_Àïr¹dïNLLH,Ì¿ÿû¿cssóÿáü» Ȱ½mH@nÓF€EÖÓë`Vx~†ÖDæu'8%ÑÐ^mmåK̸hEÓÁ’ÜÚ²MЯåH|Éjýý­¯@´÷ôtpðºÀA†0ÞG3J}ør§å‘Ÿš4caœ58&èÔâÒÀšÙ¤nÞ¼)@.¢^¯Kf³Ù< Ég_4€Õ’,³Ù< ½"¸ÕI8Ú£CùÁ'×MǬôé=Å53Ž•„ž~ß(¡#!á=9oõz]®MRd6›ENÅýÂ=ʱÈÓóA«I&½;ÚS¡ãUC¢É2É É•–…iRÊ1h‹°3÷σ¿IÀ´§û„ëÇŸ³/º` &èšsMI8Þd2 «ÕгgÏb{{N…B^¯FCRÂrÞ(«á:°ö¨Ëå’‚¦ôÑkÁ1±Ð $‰ôÀÐkÊç‰N4 ŸWôX:t¹\Nê_ØívlmmIzh®O<G¹\F(‚ßïGµZE.—£ Úív<÷Üsâ-â~cº^-Ë‹ÅbØÜÜ”˜³ÙŒÉÉI¬®®¢×ëIV¦\.‡X,&µ7Xƒ1 ŒaàÞà^õûýH§Ó²®&“ >ŸOžyP*•dþIø …"‘ …FGGemŒÏ[Þ' ʾ¢Á€Ut›Lû‰˜Y*ÀjµŠ´1•J¡×ÛÏÆõ4›÷3Q9N!ʼnD«««R#¦ÑhàêÕ«XYYÁÉ“'ñþ÷¿øÀð§ú§(•JØÞÞÆÕ«WqýúuuŽ´¬•A飣£H§Óèõzðù|xàðüóÏcjj ›››°Ùl(‹"µZ­¨T*¨ÕjˆÇãˆF£¸yó&âñ8.\¸ ã^ÏöZy@†mØ^‹6$ ·q#àÐús¾t´€ÌËN@g (6ÊøãÏxôçéEÐçÆ(AÁ%€J3¿O‰_bÆl¼?ÇCï û©%_š0i0Ôf0™Lb9åÜ j‰¿Çc ¾Åb묖py<œ8q£££xùå—a6›±°° ²ÓÒò‚8Møoà ý¦ÑKÄŸi •¶ÄS"£c+€ƒ‚q½vÜ'\ý=N}MþžûVÇ}ho›öú°¸$çZËã8.Î3°/_aÖ&^W°jýE ”&x¼—Þ§šØë¸ }FŒóÍkQBÃkôh ©ŽáÒ^ -·Ô™} I☠‡ÃÙÙYìîî"›Í É£L…}-‹¨×ëçÁ¾ƒA!eôÒk¨I=Gì %r<3$š·:‡\¿X,Ç#dÈívK î}“É„P($ϤT*…n·‹|>l6+R)®CµZ…ßïG§Ó‘˜ ŸÏ¯×‹R©„F£!23ZˈÕooO²ŠMOO£P( ÛíŠ76ŸÏ#Èž×$“Ä„rMÇ#Òµx<.àŸÏV³ÙŒl6+‰2™Ì€t-ŸÏÃn·‹¤UÇ8ñ¬èl~,þÚëíG¤£X,JÖ$¢¡ŠàÁà$/úý‡å3ñx‡F8ÆÍ›7ÑívÇñÜsÏá™gžÁƒ>ˆ{ï½<ðÚí6üq¼ûÝïÆ[Þòüê¯þª<[»Ý®dìõzkHÏe6› ^¯.\€ÓéD<ǹsçJ¥dÌf3ÊåòÀÜÒãF …ðË¿üËøÖ·¾…ŸÇ6$5ÃöZ´!¹›®±@Ë©®`N @]7_BÔõk²B@â¡=(š”X­Öï,¯¥IA# Ùlm;¥aŸ`óº—´" ëq3`“Öf£ŒL[—µõ™c$RÓòåª-çô2üÑÂNੵë###ƒ˜ššB0D>ŸÇÜܚͦ‰û©;96§Ó‰jµ*M œµ×H÷“ZT ´‡‰}Ö²&Î%½Ü/$A”üp)/b£¥^)J6Î5½l\3®/?kÜ“ôPŒj’ʱqßh )½ ”ÖqO°Ôó»\k}HT´'‰EM†´×O…ç“ëĹ%y¡gŸ×ëÂþÐbO«ƒîª&¨ôŠðoz9×ÖÖ°¸¸ˆT*%† Ê Yëz~zø3 ™ B\Hút¬çœDJËóØ'> èáÚz<¸\.,,, V« Aw:BŒIˆY—„ œkÇ=ʽ ì{‚§@¼‹E$K$¤Zz¸½½-^¥`08îv»ár¹$»X·ÛE¡Pñ2нZ­ ah4Èd2¨V«ƒžÏç…0h)ç–óÆ{‡B!ììì R© ȳØ/¾HG¿¿_,0›Í ¡$áâ¼±ª×ëx&1Å/ç2Iž¿^¯‡D"“'O" á=ïy®]»&1v‘HSSS(—ËH&“ˆÇã8sæ þõ_ÿ+++€¿ú«¿B:–â’¬áÁ ZzÈX"’Ø~¿õõu@(‚ÝnÇää$ÖÖÖä¹CÊý•ÍfEV–J¥püøñÿ }è¶7RÛ´ÌÌiK*`ü9pð`ÓFàÀ:§Á¡&|‘óÀ–_H h  4¡á}x^Ãd2‰58ÆèXöCKR4ÑâuØ µ$Œs¢ X²?¼–άĹÓ×#À¢ôH×vp:bÝœœœD­Võk×àv»ÑívQ.—±³³ƒf³ ¯× “É$Eݼ^¯d5ã “@Öhý&`ç<@Ð+¥eYz ´gG{N´ôG¯9½1är½¹N·Ú[ ºf´µEŸëH0ª 3²:^…ýÔäUƒx®¥&jÆóAB::::°Ï(éá<I„Ñ£¦ 3?«AšöÞpéÏAìܯú^Æ4×ì£^Cm4 Ìâhñ'¸‹F£E2™D&“A»Ýɉ×Äår!—Ë¡ßï£X,Š4‰dŠD\)Ý}–õ|è¸0ŽÙï÷KÍ ’W«u¿(&3(1a‰ INf`³ÙpäȬ¯¯KºXè3e-3x™L&©eÂ>Ð{L¬=sº:ƒÎN§S¦næúp½†œÓR©„………oïôô´d#¡&¡ L„“Ò¯~¿/ÏÊŽè $a$Iìt:G§ÓA2™”þ1[—ßïG¿ß©÷›É´_ı^¯ËzkãQ$‘¬_?üá1??b±ˆX,†\.‡õõuôû}ìììàsŸûæææpèÐ!‹ED£Q|ó›ßÄ‹/¾ˆS§NImžÃd2)ïÊ=il#Y¤<³^¯ãûßÿ¾Ì©®ÞÎÀ{jhœ`<¶a¶Ÿ® ÈmÚ´$FKZ€ƒJâZ®å”eh"aü_ÈÚjM@¤_üzZ‚¤Ék(×c&/Æ}ñÀB“LÑFåÄb‡333·<“ÿÛmè¶7JÛ¸ñʿѪèÁùâ×äB¢I'°ÓdB{/´† …¿'pb?x­[y3øBa†&-…¡U84Zï®ebtj¹—­z ú:œ7-á8µe™ýcEο®UBpÚn·‹ÅP­V¥ð_æ©T >ŸO2ˆU*‘Ò°‚2ÁÁ¸ÇãЬ¥azí´L 8Ëi0­ çƒÀ\“?L£N¯1¯ÁëÒZl$ŸÀA0¯¨œW~– ‚9‚vxÊ¿¸ÞšTé} =[z^ø‡ÄŽãÔAö?çI{N4I1ÆKé9Ñ‚s3¢3iˆö¾ñ»ô°qÎõyÐN6½¼––L¶Z- ,//cjjJ9Ï­Ë$™”±”cïo$‹úçÆ½?­V+|>Ün·È±¸î&“I2T9N„Ãa©7ÁýDpÎlXFCÒðêX0«ÕŠH$¯×‹@ F’Uí9¤e25ZþGGGQ(Ä[G9“×ë•óÎg*I­îü¾&ëÝnWR w:ÉVÈ:$À›ßãó@{>9ï<û<;|¾íîîÂétÂãñH \ž¡F£z½·Û-²Fž£jµŠv»-i~HüÉ©S§à÷ûáõz¥°a±XÄÛßþv8$“IÙó~¿‘Høú×¿Žµµ5|úÓŸÆÓO?l6+)t­V+¦§§¥V =p$y|Gñ\---ÁëõÊûÅår‰üM{µ!Íétbll ‹‹‹RDòõlúùñ³¾î° ÛϺÝ:mаýÜ7#XáÃZ[µt‡–Jm%æm]&8$Ñ$‡€MKÓ ˆÀ8xj/A-Ô:3_„F¯~ÙðºÀA ÿo§üÿðE®É­eŒ%á [Ë]´UÓØöØCL#I€i2™Ä’ér¹P¯×Ðñ…ÈÀmzNÜn7B¡úý><Ï(àÒ¬Ƀçš@ê}­ûÈ}ʾó^´ò³/Z®ÅÏj½h$Üý~  Ïšîcôžå9â\kÏ…qïpÜz=Ù "y=Zž-‹’dM¼´ˆ‘‘üçþ'Úí6d¹\‰Dét###˜œœÄ‘#G`2™077'øGŽA"‘@µZX+Î9½ZŒiL¥RH§Ósº··‡V«§Ó)ãé¥õûýxÓ›Þ„S§Nazzzà|Û° Ûÿ܆Û´Q¯Ï¿óÚòJ Gª=#:‚×âËHVk¾€´‡@“ Æ4pâw€ƒjçì›&F+*Ç­½Süœq Ƙ ̵%Üèý0JG8&ý$ÈÓ ”VöN§ƒh4 ›Í†l6+Ò‚|j¨=òùÐ^0Ê‚ôuùoîÃD"!`6Hv'¦Šõz½b)¶ÛíâýÐë;::*Þ;öSïýla_GGG‰Dàóù011»ï¾?þ¸È‰²Ù¬Ü‹sÅT²»»»¢ýçx™ŠÄŒ²5í¥±Z­E'™í‹€—Þ¡X,&†]ØFÊ¿(ªT*“TÀìϽüÏW(Âöö¶x0xHòH°FGGQ*•Ðív%€œg¡ÝnÔôaÂVx-½?ªÕ*2™Œ¼;Œµ”è}ÔAzqùÞaæ3—˛͟χ~ðƒø—ùôû}ÌÏÏ£\.ãÙgŸ•[­V<ôÐCxî¹ç°¼¼Œ••x<¬®®¢Ýnã#ùþò/ÿ333xà°¹¹‰ . V«!™LÔ«âžc?èéêt:"ÛÛÛÃôô4fff$Á@<G©T’,^óóóxÇ;ÞX,†Gy¯wz@†íÔ†ä6nøƒzþßhñÖ±´Ì k ¨¯CÀBÀÅ—³öF²£½pj2Áûh‚b”Cql¼I A.5Í|qÒ=šp±éÔ½šh?¯­çG×àØHªÐC‡áСCX__+6-‹&“I$X ìít:ØÚÚðÍÂxÚ“Bk7ƒf¹:vCÇÐçœý§ÄIƒl l„…À¿×Þ--÷Ò’íù0J¯´üK¯¿×$‘?Óc0ö—}1«ó3ä p}µ„O¯/÷“öDpÜ“&iFªׂYßøÞ[ïoÆDiéÏÏ­®Áó­I <#Õš0ÎA{.Y0 !‰ÈçL¦ýúãããBz¹†ü>/Ѓ§ÇÏ>òg­V @@^¯ýþ~bŒd2)²)î z&0 @êm0…,Ic$(Ò$€€•$–¤©Ùl¢Õj¡R©ÀãñaÓ±1¬D’R,OLL Ýn#LžË½½=»$:Åb‘HDâV¸µZMúD)÷ ÷=¨F¥RI<%úLo.å_̰EâÚív%T¥R‘$Ì$ÈB‰|Þ=ÐôžQ:—N§át:qþüyŒã‰'ž@¹\Ƶk×Ä«ÇÑëíW~_\\D·ÛE"‘„/¿ü2òù<666p×]w¡Ýnãå—_Æìì,^xá…¢¨|®p|.—Kö I-ì÷û …pÿý÷cyyYê-µZ-LOO£Z­âÅ_D>ŸÇ‡>ô!<ðÀøÒ—¾„a¶aûéÚ€ÜÆMËj´5–/" ðhíæœd8Œ´Ìi² úš`P~ ³HcØ'-" a`¦¶î²iÉ ûßóÅ­%[ºÆïÈië¼0óþü,ÇOÌùÖÖG‚:J®x­z½ŽíímX,LOOcaaA1iIÔ\8'­VK<&Ô–;NÌNÄt ¬)@СIǪ½S:Þƒ ]{9´å–äR§ÖåZTjšüÜëñiï“^Oí±ãŽ=ŠT*… ɪ¥½$6ý~_¼"áp{{{T8>Mè4éã8µE“{ˆäJíUášñFyŸqÎŒ#Ø&ð#x2Î+½&F ®÷3e#Œó°±î-«¬éÂkè¸&íaÒ{“ëeôJ2@Ÿ¿¿•„JÏèÍ!Ø×gEA}þ´|PŸ]ÞƒÞ¯=ÛÛÛ’™`¹T* ìb©g¦1Ö·Ð^/®3Æñ^­V ­V GE(Âêê*ªÕªL®™Ïç“TºôPýQ(àñx¤O$Y¼2=½,@È=¯¥;|>0.‚À»ÕjÁç󉇢×Û¯¼ÝjµËådõû} à&1Èårr~¸W™=Šg“I}>Ÿ4î}z$jµÚ€‡©ÓéH=îw78ÎωÏçC¹\pÕ‹Ÿçs›Ï! èYH’_' `F­ååed³Y=zÇŽÃÔÔŽ9‚d2LOOcii @‹‹‹8~ü8b±J¥‰Þò–· N#“É #‘HÀétâøñã( ÈçóBìYŸ„Ï\ŸÏ'+J͸þfó~•û÷¿ÿýxë[ߊüàX]]…ÉdÂÑ£Gem†m؆í§oCr›6à ›Ï¿u,-‡À`æmÅÖÙµ´ÄˆàŸ–6§Ó)`Ø@¬uçÚ‚ÇÏèšÚ3¢û Öj 9àX5Yb¿5AÐÞÀž^jäùÂ×àG{^ô-Éaßuð2ÿÍþæóyìííáĉ˜œœ”ÌXår6›MôÝÔÜ3u*% œ_¾Liáä¿ív»§ëLZ\7Î?'É ÷ O@@¦5àÆ9ᵤSï7-ÏÓDN{º´‡‚ÀIcð©žsö™zy~ž–PM¸õ^1î5îiŽDÔápˆ–\ƒ~®7›Þóœ'þœg’„Îf³ Ì¿–h^KË—t…{½vúLp©í×ãÒ-–ëøJéàœƒAd³YÁוJE¾o”_iï*É‚Ïç“Z•JÓÓÓxðÁa±XpéÒ%‘CéjÝì3BÑkÁsäóù055…7n œ‹Å¯×+™¦HÒ™J9cuuu Yç³Z­þ„g™žƒ‰‰ T*»Ûí–˜.‡ÃL&#kBÌ>ñ\ƒAÉÄÅõq¹\¤u:]®Çc2í×Mb _zT(9âqýx»ÝŽH$"éÀIÐI†"‘R©*•Š;(óbIM™v—… «Õ*Ün7¾ýío£Z­JªÛh4ŠÕÕU‰‰cjÞsçΡÓéàCú¤ÿõ_ÿu|êSŸÏ˽÷Þ‹sçÎáÚµkrµ$Ól6KÊ^¯‡{î¹çÎé7×SkÞµ$‚VcîKh4?!‡â÷Ç@¡?þM‰ Áœöf”r^9`“İHöj@®%y>i´þŽŽ"‹‰öž{—çE¯½Þ»$‰ìŸŽ£âÚðwž´VóÚ~+¿G«³öfÒŠË~Ы¥¥•FbÍŸó ê5à:²@¦ßï—"q¬»Áû2΄Þ5ʧøÒuGäGGGñ /àСCBü¸Çù¬©×ë¸~ý:ŠÅ"‡oÛl68Nx½^är9T*é ‰?½!ñx;;;BB¸£££(—˲Gm6›dÄÊçó’=‹à×ápÀápˆ´‡Y²H,)OÓä€Ô'ét:ˆÇãˆD"X]]ï’ßïG©T’Ú%ô3Øš‰FFF055…B¡ ßcú\¦Göx<’&€œ§z½.ñ,ôšpÏósn·µZM¼Ùl– ïLslµZ%×Ný¨½À+[àiï­ap|ñè¼÷¼&¯CÐOO¯E+œ&3ZZ@0hae™?ŸÄƒ€Ï8V’Ž÷ ^ ’£d‰à…­´ޛßa ÐL&ƒíímÉgÏ Ò^¯'‡†ó[.—ÑjµÄú­=!´ê6›Mx<t»ûtpâÄ ƒA‘F/…^7~Ù|8_:ö‚Á±Ú»B°ÍkóZô¶˜Ò*©ÉûÆ€Ö[Éã4qeZMMØWí0z¹\h­æ\rÏÅãq¼óïÄwÞ ¿ß^¯'@pdd^¯‘HDæ‘÷Õ¤À(Õ#¢u›÷×çKÿÑdÖn·‹åZ Zëé… Þ Ž›{TŸ%®c¿ß—y&)£„×áϘœÂf³!‘HH…rÎû£3²ñÙâñx‹ÅF°3n©^¯ 0ž˜˜€ÙlÆÃ?Œ……ƒAD"éO§³_O‚`Üï÷K$J jµ¼^¯Qzz …ööö Q,‘ÏçQ¯×xû|>ŒŒŒ ›ÍŠÅŸ…@)'#àguJ£xþ›Í&²Ù¬üN{¢¸ “É ¤»N$ØÛÛ/J²Î˜—`0N’‹™™ù\½^ÇÎÎz½¦§§1:: ·Ûp8 ¿ßx<.ħP(üÄ3’ä…’&ö™òºp8 ·Û-ò7·Û-‹µDH,¦¦¦$¾ææÍ›øÿøììì`wwO=õ¾ûÝïb}}ÅbQâe~ô£ÁétâË_þ2Êå2VVVH$`2™páÂ8ÌÏÏcqqQŒ^¯¡P&“Iïôô4~ô£Éù¢ž‹Å‚k×®assSÎâöö6–––pæÌ¼ë]ï’çÂë݌υŸÅŸa¶×¢ = ·i#¨Ó€ÙL(¡ h×Öe--°X,"A2êøµD…Öd3cŽÖïSã®=ÚÂN IH0dÌÐþò®­ÖF¹É ‚¶æjë?pRiùcÿp ’£œD[u d î8_½&­V Î~®úZ­†ãÇK“ɤXŒûý¾~z½^𠸧7U£i!¥W$Šæ€¥P(HŸI¬t€.û ·äš¼2•ăÖn’z±˜™L“1=7”0(±X›ĬwAÆõÖ…×ø;îï›ÍfLLLÀjµ hD"dÀãñàÿðqÿý÷£×ëáóŸÿ<¾õ­oaeeEÖ0•J x§¥™Rz}xtü‰Çã‘=ÆLQFÇD°k±Xä\0--I—ŽïФO:-Ôë«Ï3¥•$8ô@òÜÓÁ mV«Éd&“ ù|^²mooÃív',‹Ôn ±û1NK y @"‘êÙì;co˜Š„‹ñLÔ@OëAÐce6劉ÍårhµZR;¤X,JÀx£Ñ€ÏçC.—ƒÝn‡ÏçƒÉd’¤ÑhT@2­†¤¬¥Ü)‹WÁï÷#—ËÁív‹‡ÙçóÉ1ÐÐëÀÀ{’O£¤‘æ.— ÛÛÛèõzR‘ÿN&“(•JˆÅb…BXYYA©TB£ÑO ÷êää$²Ù,r¹Úí6R©b±˜Ü“}m4B8èQòx<’½QXZZÂìì¬îÍÍMüÅ_üî¹çãöö6àío;Ο?xç;߉íím|þóŸÇì쬇óÚZÞÇ}V«Õäù^,åùóÖ·¾ÝnW¯^ÅÙ³g‘ËåD¦V­V‘Íf1>>Ž_|©T NW®\ÓéÄÜÜÜOýþýÿØ;÷9Ïë¼?³;³»s¿ì\öF.ïæEREÒR“²£¦.ÜÆRÇ)P @c m;.ÔEíÄqáÄŽÝVý§iÐMê ZVcVUv¥¨LKŠdQ¢.$—Krï;;;—Ë^g¦,~‡gFŠë6–[ûÉÝ™ï{¿÷ö=Ï9Ï9ç­ƒöV´ò.mmgÀ=néŽÖÞg5ò…Ro!÷ºt*¼å™O¤¼€IòO0<\î-7^ÆàõöÞæå9>Æ@ê­ác3¸'rˆ1aôdÎË;<ˆûkx¯ÔÖÖ–®\¹¢T*¥óçÏk``@¥RÉä ¾€VV^Àxi²###µàLOìΜ9cë`ffF·oß¶ñD΀Vœ1!‡>së‹ÚùHôq€<"Ö÷ ¡*6RЧ!9£Ćhy.ÖÃîî®éôSg4 ‹MQ:6ïÚ'?ùIÍÌÌ(k~~Þ,ÀTÊ–dà`ÅýÄÖ d—~{¹Ÿ'ÍÌ€Ñ?kòåç9ŠF£&9a_}€<û_’Iá7îã=&¤^ Ï›Éd´²²bÆOˆð„ÃaµÛm­­­i{{[ãããÚÜÜÔÆÆ†’ɤÂá°~û·[ êv»U04^:V¥RQµZ•t§âÖÖ–Òé´0æææŒèDÇ{$uȸªÕªˆJ¥¢¡¡!¥R)ÕëuµZ-ÍÍÍ)‰YÂC—H$T*•´¸¸¨d2iY¹ªÕªYÜ1ì°Xk­VKÑhÔÆvccC™LFëëëj·ÛÊçóV ùKYKËËËJ¥RÒ¹sçôúë¯k}}]CCCZ[[S<W­VÓw¾óÛSœáÙlÖÈÛòò²$)«ÛíjrrRKKKÚÛÛ/¤Š°Ýn+•Jõxs0LàÉ‚ÀݼyS333ºçž{ÇU©T´¾¾®ÙÙYÝ}÷ݺté’ÞûÞ÷êÃþ°òù¼VVVôÑ~Ôâ{>ýéOë_þË©ÝÝ];wNW®\±µ¶µµeû“õ;55¥¥¥%óØàyùÑýQózk²³³£—_~Yßþö·õ÷ÿþß·Êç‡Öää¤þðÿÐì;Ù<í©wióšüí-öžxøúý1xBì~ ¼x«&ò† Žöë§÷ºt:5›Mv>x[ºSãÃg­â¥í5ï¼ éwÆ&^š\Ë[ž9ä±è#áòýÆâ콞Ôh¥ý9dŽër/ž¿!"©NNN*™LêöíÛšššR«Õ²ÚÈdA€$U•Ïç%É…Ú®^½ªP(¤ÉÉI«V¼ººju +£ë€tÒ_žbÅX±Þ¸?c ö©Š™äX^B844¤'Nè‘GQ6›ÕsÏ=§ŸÿùŸ·5ƒ NŸ‘¼ GbN<¨z饗Œ\ûŒN¡O}êSúìg?«ééiMNNê·û·%I/^´ªÛxñHìXOH›(z)á!â™ñÔ@Ú@>ØáåW>~„çg~s^BÉ=ñ"áÍbv»Ý)"gŠ·Ö„)œ788h†d2)IÚØØ0Ù‹p8l ©d™¬o =AÙÕjUµZMÉdR‰DBÅbQÁ`P>ø ®\¹¢f³i0Xììì¨P(¨X,öÄ¥D£Q“NE"5 U*µÛm9rD+++vU*ó0z‰™¯Xoxβ´ÅþíeŠcccºyó¦’ɤ677MÖuóæMÛëkkkvND£QƒA“‚ )‘HX}‘7nH’e°Â+ éeN9ψeÁ ÄÚóŸÍçóVGo¡$#ß‘HDõzݾçe`œO³³³šžž¶XŒ_|Q7oÞÔ©S§4??¯Ç\ÙlÖæ*‘HhhhHO<ñ„~ögVð T*e™µb±˜î»ï>E£QݼySkkkJ$Z[[³=ƒ1áСCFL_yåݸqCÊår* úßÿû«R©èÞ{ïU Ð… 4::ªÏþóš™™é;íí­" ¤æ ½í ä]Ú €@ŸŠàÜðböd`ï³¢x p÷q’ìßX}¡+@ª@Æ@"g?v/ß¡Ï ÿ<"ôºô)˜'G~ŒŸ<2ä©/H—AQ@ž oãúfñ4Þºßl6õÄOèÙgŸµŒ6>æ¥Ñh¨^¯[q²mllص‚£budìlÍÎÎZ%á'NèÌ™3Êçó6.>î… Sæp˸ú~±þ3/HpðjõKóB¡Éf†††tèÐ!MOOÛ³¾÷½ïÕüȹê_¿Þ«Å½É ‰D, © kpF¼?¿}û¶¾øÅ/ê _ø‚Å'HÒ_ü‹Ñ‚ûñtð]ï©ÛÚÚê)”à÷)Ro;û’=F¬  Œ¨Ýn›wª?††}Æúö=Ÿ7©Õ‰?) :uê”e"òÈÈø<™Ã"ï3ª¶[²¶æÿ2OlìxÖÖÖtéÒ%ýÚ¯ýšþÛûoZ[[Ó¿þ×ÿZùÈGzêxðG’·'–Ò¤ž4 û9ä r:99iÁâý× ã {C&ô—ÿò_îñ6 ‹Ã€ D£Q‹}˜››S³ÙT½^·scrrÒa6›U>Ÿ·5IÑõë×µ´´dRp8¬H$¢Z­¦V«¥b±hRCÀöàà ‘¾­­-«ÖÍsƒAË^G-$æ /p P"‘ÐÄÄ„&'' U©TT©T¬/œ)ÕjÕ<HšØÿÑÇãq‹…ªÕj’dUыŢ:¤|>oëjccÊ2x6ðæb8*•JF´H–Áþ`Ÿ†Ãaóúîíí)™LZœâçðFlookyyY¡PHãããfxXZZR$ÑOþäOêk_ûš.]º¤ååe}ë[ßÒÖÖ–Êå²IÅÂá°666T,5;;«t:­÷¼ç=j6› ‡Ã:zô¨ÇëÌ™3zöÙgõµ¯}M…BA÷ß¿>ò‘hjjJ÷Þ{¯~é—~I?ñ?aÕè‘ÉOôN7oÔø~ÿy³öþÃÐÊÊŠþÉ?ù'úæ7¿©ßýÝßÕææ¦|ðA=ùä“ö¹×_]?þã?®½½=}å+_ÑüÿQ×®]Ó<`é¹i_øÂôÐCé£ý¨üq}üãׯÿú¯ëŸøÄ[:vííoîoímo‹‹‹:wîœb±˜666¬¨“´¿Qï¿ÿ~]¸pAŸúÔ§´¹¹©Ï~ö³ªT*zñÅ•Ífí³_øÂôÙÏ~VŸþô§õWÿê_Õ³Ï>«Ï|æ3ú;çïèßÿûÿ¦÷~á…tñâE³¢I½¿x^ª M2€ÚÞ[Qy¡v°öcÙßÝݯŒEɂϦò9ú †öÀÞ§èô2úçc üÏIq/°·ûÿO c<2ž,y2ˆÄ òæå >à1¤æÊ›½ü3Æb15 E"Ý}÷Ýêv»*‹FшÓ'ưÙlš%)L§ÓQ©Têü¥c¹äYˆ«À³Óh4ì™ûÁ,óèõk…Øî¹µµe–h_a™kðÈàÔÔ”ÕF9þ¼~õWUsssúÄ'>aàÉ÷˯™P(d}c>âñ¸xà½þúëZ\\´±`,}`k,³ûŸ;wNÅbQ@@ËËË6þÞ#À>HzbÊç#?.ÌcÃØúàu:ô³—f¼Ù÷~OB2è'û”ÇÌd˜±ðÆ €j4U»ÝÖè訊Ţ$)›ÍZ=…ÑÑQ•J%SÈic}:éB¡ ëׯk``@çÎÓíÛ·íÚ¡PH÷Þ{¯vvvô­o}Ë2¦!ùYYYÑáÇuóæMmmmYlŠôù½‡D rù|@Ï?ÿ¼ªÕªyøóC¬„¯²NIÓââ¢w$4èv÷¥wÙlֻݮjµšÆÆÆT.—m½Öh4¬žÉøø¸b±˜y$&&&´½½­¥¥%ݾ}ÛäX¯¼òŠE$Ù™Å:©V«/Ç:tH»»»ºÿþûU,ÕívõꫯªP(è#ùˆÆÇÇÍ#B5{Èìòò²ªÕªNŸ>­[·néå—_ÖóÏ?¯ .¼éû÷­j¼×Ïž=k†¦ïgk6›zõÕWßðlÅbÑ ´íím8qB§OŸÖ7¾ñ IÒßü›ÓŠ7Æb1IÒÜÜœNž<©øÿ¡¾ô¥/IÚO¿<55¥Ÿû¹ŸÓ¿ý·ÿÖ®ùÅ/~QŸùÌgtåÊ‹MÃCDF/À;cÅ\z¹ò;æ‹jòìÖP£Ñèɾ†)‘‰©â9HmŒ¡‹t✠Ï?ÿ¼¢Ñ¨ž{î9ÕëuÍÏÏëÁÔsÏ=gä‘ù$AhH]¾¾¾nR7²áÕj5­¯¯Ûœž:uJ§OŸV³ÙÔW¾ò•ž²©©)ód% ÍÍÍÙ™úN¶ïæ­ø³^÷ÍZ?ùö÷ì{Þó-,,HÚ?}ôQýÜÏýœaI:|ø°|ðA}õ«_5\óØci{{[ûØÇz®ù±}L¿üË¿¬¯}ík䇨H°Þæö{¿÷{úã?þcýæoþæ65õg~ægþÔJûnµÛíêk_ûÚÿµ/€,åô—¤K>ÒDû—-’ Ojø?/\ëXzûµÛÞCÁïHžo;bkð1étÚê_©G290°_$RÞl6-Y^ž^xÁÆáúõë=Þ\¤©ìgæˆðH$¢t:mÄžÄ ;<¬A2†Åb1Û+ÄÃ@Bg’¯#48¸ŸA O ¼‰OI$Êf³¶6)òçæ}í<#€m¼Xž…9 &¡cñýjµªÛ·o«ÓÙOP·OÎÈÆ”ÍÍM­®®êêÕ«úÝßý]ÍÌÌhbbBgΜÑÊÊŠUa÷Æ%äo6ž‹Ú(ô9‘HXÁJ<¾NG<òˆyä­¯¯[ à±±1µÛmÕëu}èCÒßþÛ[öÌïöV«Õô'ò':wîœ$éÆÚÚÚÒ=÷Üó†ÏÞ}÷Ýš™™1Oá•+Wìç¾)›Íê•W^y‹{ÐÞÎv@@ÞÆ¶ººª‡zH_úÒ—411ñ†ß¿ xõBó9F,°bz+ ‰IØü=¼Ë¿lÈ}à®'A’ìeãûɽ½tÇK è#'¾Ï˜6½ —'þwÜS’Iuüu‡@•€žÑëü7þ¥îãVüX¬¯¯ë…^Ðöö¶&''555¥‰‰ K‡J°«v€G½^W±XÔÊÊŠýp 2†ÑhTããã¦é&åè±cÇ4::ªh4ªT*¥l6«h4jó/ÉV?óÞ_ů_ÆŒÔÃÍfÓæ§T*Y4€±'.žü0ñ‰OhssS¿üË¿,i_­!ÉŠcú–ÉdÔív-q^8ÎßÒé´]ë ýp´ ÖÛØ>ñ‰OèìÙ³ú…_ø…7ýý÷ºQ …Ÿy£âªæ%.ɬÚ^ê#©ÀxÓ˜ø’¢ú¯ƒEä­`zî%Ý)ŠæÁy?¨I2°Ä¿½æûc ˜câ­Ñý²4>ã=B¼<ûãúIß÷céåUޒϵ½Ç x¥1ÿŒß¼yS‡V4µÌaè°y,‡Ô˨x©›'bô~G£Qó¢Õj5#D¯¼òŠÂá°Òé´Òøîíí©V«™¥»ßº¬ÍƒuÀóB#^K.1Nß’~Èœúuë×, „ù$cF19tƒV  ÷»>.Péɨ—ñx×ìÿØCxÀ¼×ƒ9ôd‚ë—Ú1V~}ùŒnžàô¯!¼kÞ[ç ë˜ù£oìO¼:ÞC¬ÉŸ#Ä.JÛí¶­*g# $³\,³x…Ãa+8 E>FmŒ±âC ‘ñqN1Ÿrˆc è!ÃýóÍZàx¸ \\2BIwd{ü¼ÙlÚ M2k‰ó†4¶Á`P£££êv»V˜°^¯IK§Ó …BV‡„yÁ+GJYdGH‘O1/ô“3ƒÏâ™$½2ç8÷âQ«Õlm³w!=Œñ}Ä]>|XÝn×br666ìÞÞ WŠ´¶þìåŒÙÛÛ³3o~~^¡PHÑhÔ7´Z-E"E" [[[[[7éd(Ò‘#G´¸¸¨'NèÒ¥KæÂc„g5—Ëé¯ÿõ¿®ùùy•Ëeíììhiié Àý±e2™7A[­–^ýõïú½Ï}îsú¾ _ÿõ_×Ç?þqûùè訤}bÓßH>N§í³ì“þ´ÆårY÷Ýwßÿ×3´?Ÿí€€¼ ­ÑhèñõþÁ?P¡P°Š¼X kµš½|¤·g£êO€oýäÅïõÀ蟛¼Ø¹†—váVçeîƒÅùL?¹á…ç-ü`\Ñoé/ßó$¦_ÂÕoåå~ýÒú¸à:~«¶G€ýì'_&ÆÓ”~‹½—uì½µœk¼Ð{7 % ¥R)MNNö€ÅÑÑQ-..š—b``À· æÈ0.€If‘d\ƒÁ Z­–¥Ú`°Ö Põ5.¼$‚‚kd·Á³€ge ‘ÌÍf³©\.§\.§û±Óù/ÿÅ›ÿß§ &¸Ú“½n·k…ñ¦§§­ptGVØX3>PÛ[¤Y[x]¶¶¶zö‰÷Êx‚á=$ÞhàÇ„yBþȸõŸuè=!ÞKIV"<1|—ó˃õ~ïb8ÖÄÄ„‘¯­­­Yœ눹'¬÷p!9¤/ŒÏ388hëIU·Û5éÝÆÆ†ÍÉÞÞ~ÚæÑÑQ+ŽH 2½AJˆ¯(K2²|ƒ„„uF¶(ïb­3gÃÃÃ&%ëtö³¯qOOÆ×ÖÖloSh±^¯›ì «¾÷PÖj5Åb1[x[0u»]‹M|ø3˓ν½=“Øá‚|âáâ³ÛÛÛŠÇãJ$:qâ„Î;§7nXíÎîp8Ü“ Œ½ˆrÉZâ™è[.—Óöö¶ÖÖÖt×]wÙø’ ’¹¡¡!e³Y‹uãݹ¹¹©\.§©©)mnnêå—_V©TÒðð°þÂ_ø êt:zæ™g‹Åô¿þ×ÿÒÒÒ’¦¦¦Ç555e©ÀXÛÿÍ«ò¹Ï}Îþ|êSŸêùÝñãLJõÒK/½á{/¿ü²NžŸïÉE­¼eüŒ”¿dâbm’¸€g‡8:uJÏ=÷œfgguòäI­¬¬hnnN¥RÉâÓ8§ÖÖÖ µ¸¸¨ÍÍÍ™|Ï.胃ûõ‘®^½j©‘÷öö´ººjD@ù………Ïê;Õ¾¬ÿ×ök¿ökúÜç>§Ï|æ3ú•_ù•7ü> êÃþ°~ÿ÷_ÿâ_ü‹ž4¼O>ù¤þñ?þÇöÙ~ðƒÑïüÎïôàšßùßQ ÐOÿôO¿õtÐÞ¶v@@Þ†6>>®'Ÿ|²ÇŠßívõ¥/}IO=õ”{ì1e³Y ¾­Õ[J}œýd{‹-–Ý~K®—Kñ²åß”~Ïà›ëq/™ÀD‚ŸØË ˜xÿ÷{¼nÝyOü!î­‰žæ ÊöÈ~ŒèG¿Ü ¢âI‰—«ñ‰Ÿïàe`ügО3v¼Ì‹Å¢jµšÎœ9£±±1ÕëuÝ{ï½*—Ë+AD§í=UÒ ÊT¸ÞÙÙQ,S©T²ñe}`a%6áv:w‚‰¹lssÓRµr_dsGµàYú:55¥r¹¬H$¢#GލZ­jccC—.]2 ¸Ÿšš2 ˜¡’8÷ÇÞív-øüìÙ³J$Z__ï‰Íð€±òž®ÃÜû}è÷ ã†äÃTŸ€{ —ñûÖ¯EÈ‹76xL¿'Ò{€¥tõýðR$ï±”d’;¼skkk:uê”ÆÆÆ´¼¼lžj Að‘æÐ/4úNÇÀ7{¦Z­šg„`eŸÆvwwWõzÝ0ø!ÓÄš$‰ž}GlDˆ~Æ…±ñÞ„`0hÁÑÝnW‰D€o04ù²%jqÐWoüˆD"VÍ}}}][[[&_"²töìY5 [¿^"FuèСžÀþÉÉI­¬¬ØBp>^Lþí FÌQ.—S$Ñ7lŽºÝýÚ)¡PHápØ<$xH¯^½ª«W¯ȇd5›M#®µZÍ*×{Ï3_È8{ðÆÆ†òù¼ffftòäIÕëuu:óVú÷ÁÿÈæˆ¥üÑýQ½öÚkú“?ù‹…S£ÑЋ/¾hç°—Q¦R)ŽŽêÒ¥KfPy§Û[E@þ´kþ«õ¯ôÏþÙ?Ó?øAýäOþ¤¾ýío÷üþG~äG$í{Hî»ï>}èCê©o–Ïç{pM:6"“Édô|@Ï=÷œ>÷¹ÏéïþÝ¿«Ó§OßŸí ½s퀀¼ mxxXïÿûßðó/ùËÔûÞ÷>ûÙÛµQ=`÷R!€ €°ï´—ûþ8^àò÷Èø—Z>ë­»y¹'&Ò”¼>`ç³×æ{îŸ[RÆÛ§ÚD&Pà¾_^rƸ!³âùúã8¼¬Ïøxªúà«¢ó]Æ’xO¨(xP.—S¡PP¡P°Àíf³©F£arˆþgõ’¬îÕjU™LÆ"/j@"ò‚'™LJÚ'Ûhô³Ù¬¥ ƒæÝ èàCV%@£Z­Z¬Æ×¿þu•Ëe‹@¢…0ƒÝËÚâœ;wN…BAÒ¾§±R©XŠSt󌃗0y/kݯmÆðï=ý2+@¿t‡P³_¼^ž=ËöõôýK¿ñœà%ÐúŒ[€ü7Ë|7<<¬ÑÑQ{æV«¥§žzJÑhT•JÅ*cãÁb ÄϾ!mµZ5O±>NÇRÝJ²˜ï ‡Ã*‹–cbb¼^‘HÄ(k‡=Ê<"ÜÛÛS½^7ÎÚÚší+ïEö5;ˆÇðµBâñ¸m_‘–xggÇê"܀Ź cžýÙÒl6D¤R)•ËeëËÑ£Guß}÷©ÝnëÚµkºuë–}–ŠèU7ò5Ÿ„ûŽ«ÙlªÝnÛš8tèíÛ ó2‹E#ñxÜ<ŽœÝ»»»ªV«&£k·ÛJ$6œíœ5Ƙ”`0¨»îºK³³³V`.ÞEÎ/ëÊf³:þ¼¶¶¶tøðaݺuËH{­V³õ†!†1ao¿öÚk* T6›ÕË/¿¬wS{ôÑGôØcé±Çëùç$½ç=ïÑýÑéŸþÓª~ô£ ƒú‰Ÿø =üðÃ&=§ýÒ/ý’âñ¸~ó7S?ü°ÆÇÇõéOÚ²j´žv@@ÞÁÖo±—Þ¾Ê!*©‡ xÛ¯íæ¸á¥A*^džX@L°Øb¥÷dY0â¼7…ŸK2©‡tÇ"ì«ëò|\ǧ“ôV^ˆ Š{z€ïcBü¼û€4¬áܾx‰K?@„Ôx¢‡F’Lú€·Ë út€7/v¤^zP¢¼¼iÕjU‡ÒÅ‹-k´WT«ÕìÅ]©Tlî|.ÿN§cÖe4Ö€'ž @€1^&ÀÄ‚¸'$3’ Î8Öß¾Ò9×e½ìíí™×#‘H˜§‰ | 6@À’ ûÚÝÝí‘/¶ÛmÅãqÅb1---YÃjµªn·kcËy´µµeR²ééi% ËÒw×]wiffF¿õ[¿¥÷ïþ^{í5Û?Ì{kppPKKKj·Û:wî\OÖ;ÙÞnÈ“O>ù=_ãÂ… VýÿÖ>ùÉOꓟüä÷|íƒöƒÙÈ;ؾüå/ëË_þò~þvlT,¬X5yᢼ5Õ×c@B@z^>.Dêõ à,{¯€Qð¬tFFFìÅÓéì~þÞ,  ð¢ÿ-éN®z@Zjïé÷:.ð†ð;@½OKê½Ò—×43nÈ}|Ÿ¼çÁ?#sã=OŒ„оñògL=àe>¶··uûömmmm©Ñh˜:™L*ŸÏ÷èݱ"C¾¶¶¶L¢à=4Rƒ¼¬‰õFæd…[gÍf³Œ±z@D°8ïííW Îç󚜜´àgŸi “H$466¦S§NéÒ¥Kð2™Œ¬f2MMMéé§ŸÖÞÞž¦¦¦Ôn·-ËëK-ëÕïžõƒÈ\#±Á+æ×¦ŸSœ³>˜Oͬæ cÁ›%O`½øLrýqV>£^8V&“Q,³€ðf³©h4j2<Ö‹$KûJ`±ŸJ$–ÞK?^b 00`àk4=‹±±1 kqqÑÈo§ÓQ>ŸW­VÓæææž #D«ÕÒáǵ´´d™²hF2æe’l_‘©ÓéØú$ûÀšñÜOå Qk4ÊçóVc$™LZª]»·ö3Ÿœ‡Ô­ØØØÐ™3g´¹¹©Ë—/«P(h{{[ÍfÓREÜU.—S«Õ²8 æwvvÖ ñMLLèüùóºyó¦æççuêÔ)ÍÍÍÙ> …BÊår’dAáxV^ýuó‚ÈÏ»ˆ˜Î_æYY·ÛÕèè¨Å»ø´r¹¬\.§¡¡!-,,¨X,öÄð1gœ§årY±XL¹\N[[[ºÿþûuÏ=÷èñõó?ÿó Êd2J&“ÓíÛ·U­V U*•‹ÅôÔSOiww÷ÏE%ôƒvÐ~Úy—6@²·vv»Ýž*¿þÞ ‚UBáɉ—Vùï{â0 Ékä½U؃s=+` Àç¥+Xk©\×ôò<¼°=ƒtøïzrÅw’ɤÉx %?{‹²ÏÅï-ÑÈ,ÐO÷Çšx÷."‰û€0by'ë—Ç0!,>`Þ“,·ô©Óé(‘H(—ËéСC*—ËzõÕWÕét‰DÌ àûÉ8u:{Y‡B!³6Ò(ö¶±±a^¼Y^ò‚õk´$«€„µÛn· ü€>22bÒˆT6›5É òºV«¥Z­f%<2ù|^ï}ï{µ±±¡'žxÂjlmm)›5ë~(Ò… ôÌ3Ϙõ”µŽÕ ^/w¤ÿžt»ÝË6ý“îQ/óò1"Ì{rˆá=Ëþ`ŸK²j÷þû~?3†Ýn×$@ì$;•JEKKKÀYSxf¸w¥RQ"‘P:V0´,Oô•`bâ=ˆ¢/ÍfS•Jň^>Ÿ·¢…Xljëh·÷Súâ½­T*V&“Q<·êàÔ²@º”H$,í+kBGzZ~G\ÑÚÚšjRêìÙ³æé£ÆÒ1ú7::ªjµj$žbH&&&T©TzöO4ÕÔÔ”y Ož<©ÉÉI•Ëe¥R)MLLèÊ•+–böÂ… zýõ×5::ªññq­¬¬XÚZ<$o M0^ªX,¦Ÿú©ŸÒææ¦žyæmoo+›ÍjeeE­VËYD£Q;ë‹Å¢fâǘ³Ó§O›¤siiÉ ÁàtÞdôÿ¶¶fu?666F•Éd”Íf%Éç/dwjjJ=ôôôÓOë•W^ÑÖÖ–þàþ@ív[_ÿú×õÔSOé?ý§ÿdk.ŸÏ›w…8-R ÷+Þ©öçÁsÐÚ÷ÒÈ»´a‰Tà÷,NÒrÀÁË¿!žHð2|c5üz¾··g "€4ŒëHwR¾z+ÞéÙØû{Ä%õx |M€„ï3}ãß>“‘$ vÄrOÆ`韗Ôx+~§s§Ò8À’uÝ{Œ¼’Õ¡ð€ÒkÇy&2_MMMivvV’L"sãÆ ---illL•JEºë®»4>>®r¹¬ï|ç;Êd2Z[[S ÐÄÄ„²Ù¬2™Œnݺ¥¹¹9‹¡àEMºÍz½nž_³³³£‰‰ ûÁÆ@@ããã6ÏÝÝ]ŒŒÂ;ÃZY__70‹Å477g"¬Ê©TJ±XL‡ÒÕ«W̓”kzzZgΜQ£ÑЕ+WtôèQ ›Ôäå—_ÖÆÆ†ÝŸ}P*•zÖx04°ŒÌ"ཞH²ÎW¬Q®Ëúf¯0~x }Zgö {¶_þÉZñi³Y¿È›<1cOA r¹œb±˜J½¶¶¦ÕÕUË^444¤‰‰ “0–J%[ï…BÁÖA(ÒÍ›7%É,//Ûü¦Ói‹€ì°ŽÈ¼uâÄ ­¬¬‰¼u떒ɤÒááa#º§OŸV±X´@u<¾%™¸B¡êõº¿$n¹Q§Ó1Y΂âñ¸Âá°‘ˆJ¥¢“'OêôéÓZ]]U«ÕR³ÙT$ÑÒÒ’N:¥{ï½W7oÞÔË/¿¬X,fs°»»kɆ††tûömår9ŒŒ¨^¯›Ìj||\?öc?¦Ë—/+ëöíÛ ƒŠÇãšžžÖââ¢àûã?þc}øÃÖ‚ …‚#ï2yAhX/‰DBÏ>û¬žyæmnnZò‡ÁÁA#3dæBF‰g‹5Œ$ŠõðÒK/ihhHétZ§NÒ‚í¤™Ò¾Š}—Éd´´´¤ééi;Ë岆¦¦¦L†ÆùžÏç•N§Õétôû¿ÿûjµZºuë–"‘ˆ>ö±ihhH“““j4úïÿý¿ëâÅ‹šžžÖ7¾ñ K^qûöíïåñãÇuýúõÿ7ñA;hïÞv@@Þ¥îiȇ~ì`%÷Ö>ÈIÀ>ñx¼Gꄇ…;š_€ À÷‘ï# _ÄZx)’Øáj IDAT×ÒZb^dý’Ÿj˱/ÄÅï |ú8Œv»mׄxò@_¹§îD~À,òÞzއÂ{išXÑ©P시ùÀ\é‘l·ÛöÌ­VË^â^CŒçfssS·nÝÒ‚®]»¦ÉÉI›3R•–ËeÓ³cõÝÚÚ걈#õ"ø@ …´¾¾nu^bN…°z2 …tøðaíîîêÖ­[=ž´¥¥%ÅãqóVžxb±¨ÕÕUåóyE"•J%³r?~\±XLÁ`Pºvíšb±˜Ž?®­­-8qB§NÒ׿þuÛGƒƒƒžÌhÿý<òlÞKæ½>Óóå=%Ò>8÷¤œû±nYSÈ“ˆg€Àz©¤—C²‡½”П d¹Q>Ÿ×ÄÄ„Eä^’L¾†<[f,H6˜¸0OÞ<ÙÏårÚÜÜT<·ß…B!“Ù°766 U¯×µ²²bk9X·ÛµÄ!ªÕªÅPP¯Ýn[ T­VÓ‘#G”H$ôÚk¯Ic²‡ð‚Q_"X€9µj8'üq XQÄp8¬'NèØ±c:qâ„Úí¶^zé%-..Úù855eûnvvV±XLkkkæÈçó¶×ðœlnnjllL—/_ÖÎÎŽ®]»¦½½=‹E#˜—.]Òûßÿ~-//k``¿®±1™LFCCCš™™Q6›Õôô´‘ÈÇ{Ì’;@ 777•ÉdìŒ&¡¤ayyÙ2Ÿ·™H$¢“'O9ÜÝÝ5©V±XT>Ÿ×ã?n^6pFe2+œë‹™â5dݱnYox·¼¤uhhHccc=ÒØãÉdRÛÛÛŠÅb6ö¤*ç]çen‰DÂÎâr¹¬ééi‹Ù‘¤B¡ @  [·nijjÊ 5’´¼¼lç ±çŸ^Ï?ÿ¼.\¸ð§¼ßšÆ{ýĉ=2×ïWkµZºqãÆ;òl퇷x@Þ¥ ùüÓ[ëÒlXÞ£à3TIzƒõ0ãeQž(p¸#IBC õû³ð²|@¹Ô[uïG¿JR¨æ{Èxx>§ÁóùŸÃŠMÿH-J(`ŸgñÖzHžú‰ÅK6ÖCOâw›âëNðæˆg–Ôü˘@\ÈHå%8¬€$³ “þòþè t`W$ѵk×4::j`:==ÝSÙ)Rt÷¬çd³¡ŸXMS©”,ª"{ \*•,°OsLV-²€½öÚkW‚äfggG§OŸV8ÖÊÊŠ^}õU=zTNG J§Óššš²à]bƒÊ岎9¢h4ª~ðƒ¦UŸŸŸ×+¯¼Ò¿‚bðò{̯~‡çÄ' ëÃ{4Y»HÙ+|¹žT,3Ò¸¾¾®‘‘MNN*“ÉH’Å­°.}CCCÊårj·ÛZ\\´ tˆ0ý7€Nf3I6&XÁ±`—Ëe[û¡PÈŠH9rÄ<%>FjppPÕjUï}ï{533£X,fë›dŒÄ­P(h~~Þæ$ÜOÍœPócuuUÛÛÛ*‹Q:îñ±¼ñ Ny8~ü¸ööö´¼¼lûb XçP*•,n$›ÍêðáÃVð6 ZÖ¯[·nYþè訢ѨÕyþùçís@S§Yåàà *•Šnܸ¡R©¤©©);vÌRn }ç;ßÑáÇ•Ífuýúu#bå˜s`NœëpssSù|ÞžÙJÞOË£GªV«©R©(“ɘw›Êï蓨Ä{¿›Í¦%”X]]U0Ô_úKI###úêW¿ªééi?^cccúÖ·¾e2Ð#Gލ^¯kqqQúЇT(téÒ%3åóy½Óí­ò€´ƒöV´ò.mÜæ¯ýF_ï¥^®å=’Lû ¸“d†“eÅ÷Á±{)–Ù”~@Å5¼tŠæ=(’z¼€$\K3V8ÿ ^æåƒ|é÷ôÀ~yé ž˜þ˜ˆ„ƒqóãÓïqâÞÈ’Þ Dú¾A&ex¼©d‡XúÅxb­&ÓÏ­[·Lòƒ”¹5 $YöÒ§–J%›æ~zzZ šžžÖòò²É¨/p¤Fdžööö”ÏçMW_.— ¸ùêÊÁ`P¹\N©TÊ‘[­– …‚µk×®Y\ …;Ž®_¿®ûî»Oï{ßûôä“OªÓÙ¯˜ y¢àÞÌÌŒU\&˜ùž{î1 -Õ¼ ÷:w/]”diQY¬‚Î bö1"€/ÖtÇ‹é“xï'ÿ'+R8H-Á½ƒƒƒšŸŸ7ã÷ç:È› …‚^y啞ëRÕòê ãE£Q% -..Ú9 m¼Í:î³ãÅb1Óÿ¯¬¬X¬ L ûMNNêÆêv»šœœT(2¯… GGGmŒú{{{V¡b÷ÐK®Ø“ÞËŹÒéì'o`ŒkllLKKKާiccÃÖç Éh4ªd2©J¥bkxšH$bÙžªÕªZ­–¥$¾çž{z2¥ÕëuÍÏÏ«V«)+kllL“““¶ÎÚí¶y;¼ ©a§Ó±tÇËËË:|ø°Òé´fgg˜a´èv»–9Œx/§ÛØØP,S§ÓQ*•22¸»»«õõu•J%›Œa;;;³z*œËgÎ1dÃxJ†vvv´¾¾®ÙÙYÍÎΪT*)‰èòåËZ^^6òD é¤ÿçÿüŸZ[[S­VÓØØ˜e‡üam¤æ ½퀀¼‹›qÒ—'úVDMlÖ+dxBý^Z¿%——€4Ö]I’|V‰KAà È÷Vc——yøx’âK$Xö…×­¼0p\—@KŠ_íììô¤Ùœy©ýÀ@|¿!/ŒäƒëôK´xùÌèo¿ä…1Âr΋«:€oßçg^R†s``@Ï=÷œÂá°I#¢Ñ¨e²j6›Þ†‡‡-R§Ó±Ú€dH¿b±˜­ ¼)dáær9hNÈq >®b±¨›7o '“Þ¢S§N™‡¦ÝnëæÍ›zðÁmÜ=™R,S¹\¶ M¬O@"Ü¿N¼á ß(@ ˆ_ìöÞ Æ†5ì ÍáÇͣ´»»«……u:ŽŽ*‘H˜€û¡µùå—•Ïçm?°w“ɤõäXÉIy»µµ¥B¡`u2¼—Žçä¯A|ÉÈȈ¢Ñ¨eL ºzõªOx&'' è§R)+h ™Ežè«‹çr9Ke‹ìÀuäW€wˆ¸ÍÉår*—Ë*—Ëúæ7¿©z½nõÌ;Þ‚n·kÏOzéíímU«UKðF-Õíææ¦Ž9¢H$bUȉg …BJ§Ó×àà nܸ¡ÍÍM•J%[£SSS* ÚÜÜÔüü¼”™™ŽŽêüùój4š™™±z€>ýÆ£º½½Ý÷R©T Í IQQÆ‘BxœvvvÌ@€0!ˆðñ‚8w»ûµŽ¼‚GÍ”ݸqCÛÛÛŠF£Z]]ÕÎÎŽJ¥’ÅŽmoo›ù Ãõõu -..~—·íÛÓ< í©wi´xPâ½"’z¬­ÞóÀK‚õ¿t§d ?à2KG@ÃáŠ5 Æõ½l‹ÿûLPþ÷4¬£>ø×¤_¼ û‹ògddÄ,®>›ãÄxzBÀ=8ÇÊé=þóŒ©`æ çœý|pÝþŸ!C4ø˜æ¾ùuøñä8da&ËÁÈ<7)X»Ý®®]»¦B¡ ¹¹9‹7";d­Óé˜Ô©k"‘HhiiI¹\Îæ€Û±±1uS¬¦Ò~µlÖûÈȈ²Ù¬jµšeêYZZR,S4µLBápت9ãå[ZZ2 Ùx¾úÕ¯*™L*•J)ŸÏkppÐêR`‰ÅûáÉ>Ä’ý ±òÞ)ö ¸/±ò–u AÆ[B•j† jN&“ÔÜÜœw*SC 8'Æ )ÙÆÆ†A2Æ­¬¬A` $™‡¤Ýn[ì@*•R«Õ2ƒ)Yñ´á[YY±€òýBxP¬Ôƒƒw áQ 2‹illÌÖ7c¶¹¹ikpggG±XÌ+d³Y«“l if£Ñ°> ÍëAÝæp}}Ýˆèææ¦%=ðR;ö§¯›“Éd”Ëå40°ŸR6•JieeEÝnWÙlV±XÌÈC(ÒÙ³g•ËåÔh4¬žÅä䤯ÇÇ•J¥´´´¤™™•ËeMNNšA…lYù|^¡Ð~‘?¼QT8ÇÃBÚf$OxÇxôNXæ ÉY·ÛÕìì¬Äñj·Û&Yƒ”q{O2ãÆ<òÝP(dk+«ÕjÙ5 zGú122¢ååe“pB<½Qàjo9 5í­hä]Úx¹f¼´†8áó’Þ`9õ5<|ó™«<&´_wîûåÉ‚¯<‹”ûy ¸ç%æÉ†¿¿ó>ÞÅ{,xIùøOJ¸&Ï î¤òå™úã@ M|×+‚góÏÍ=!ŒOüϰöƒPÿ{ž€À¸x Õ9ýÇ2ì3ñ9gZ©TR4U*•êÉr“L&‰D¬8Y4µùÃSÙÀcÇM"3<<¬J¥b¹ÿÓé´âñ¸‰„­'ž“~ûµ‰G±(“““ªV«ŠF£Ö···U.—-ÙwJ¥’#jœ@ÂÒ鴊ŢΜ9£l6«­­-™Wy†zù"ûÓËû<9ôóãç oóÆ÷iƒƒƒ&‰±ïú€ÆÆÆ477gVyïÉCä;@üR1¼-œ€7P׌d¬Õf³i™¦ð år9ˤV©T,5x °ÄBþÄšôõPÂá°N:¥jµª™™³ÒãU@®ÇºÜÚÚ²ôÂd0 ’HH™š†††´²²b©•û÷¢Oª@õwpFàAÖÝwß­ññq­¯¯ëöíÛŠÇã8ýüóÏ+êâÅ‹P6›Õ‚fggÔh4477§£G*›ÍêÙgŸÕì쬚ͦ€—h4ªÃ‡+ÑZYY±ì_ÉdRóóó6f<„ãç–')dR£¦넌WÞ;ÆúT£Ñ°,XœÉËËË–B›ñÁ³Œw†óïĈtë©TJÝnײŠÅb1…Ãamll˜á§V«ÙþšœœT¡PP¹\¶ë´ƒvо·v@@Þ¥ÍÇ_àUðÞ‡>R!ï™ðÀ.©aÅ•î¼&4^ÖÞÒÏ5è|øx@íã<£?!®ã+Ucyì{ždô÷ÍKš|öªdÇ{$$Áð¿ç9úï `ô²H½”¹„LùdÞò¸¤Ÿ¾€¤ï¿¤BÖ?~Lé3ãஓáÿÈŠ¸k![ݪg¼Ç522b Æg˜"k:ÖÞÞžÉR°®g©!S):BNDzE"år9…Ãa-//Û˜Öj5óX0‰| Yýïòò²J¥’…Õææ¦nÞ¼iÚxƒä +óèÇÜש`@ø<™eŸ2g^¶7y¶“ɤVVVtñâE]½zU###μqyˆ¯â“>©½Á™Â9‚|‹¾1ÝnWÅbQÓÓÓFFx€8ñ Pá%LRo1C®ë%akûl9¾¿^åû×ká Ç¿ ¼g‚Ø•~ï }‡Ðyê×é—AÑ·Ã3ãÙé'7žx*ýXaÁeøý€1æ^ã°dÍøµÂ¸ø”«ÈkÀ\p†|L¦$$|ÆZÀ~!C_EºÕjÈÛÞÞ¶Ô†"¼~ý27¾·—Æ1xñ³½½=ù|^ÃÃÃ*—˶f=Ù|’ë~ÿ>æÞ>`‰Ï{2˺ðÆãqåóy…ÃaËØÅÛ U*•zö‚÷"†B!‹I€ÔÒoªØË€ô’ÆÿY·Ì•'ºG"“f‘½ ЬŽG‹uÀó j4ÚÞÞ¶¢›x1X¬?ˆ 1iGµx,÷¤æÌS§²›Éd´»»«jµªt:m¤K¬ééi œ¦hb$ÑÑ£Gµ¹¹©Ã‡kqqQ F2Ž;¦ëׯ«Z­ÚÏFGG•J¥T.—-5p2™T4Õ‰'Ôl6-Oç`o9Þ3Ö5ñ0ccc6þxÐ8?¼üà É-ûÝÝ]+2988h˜9ŒD"ŠÇã¶^IbÀÙÇú(—Ë ‡ÃÓØØ˜eÕCê×h4lž!G·oß¶·ƒvÐÚ÷ÞvÌ»´y’€ô@ÐhÈV>…'×ë'Þ ëå!|®ÿšX/ßÌâXdy ¿' ä@÷R*îãŸÝ±÷{ü÷ýsðsúÍuü˜yAáåÕOrúÇÊ{|Þ*ÒùBxÞþ Jžèxìçkzï”»Xå=ô^'¬ÁÜ !D‘ûô{Ù°ÎûuçÇ‚w,–€V‚Ä©@ Àd,--)“ÉX-d%¥RÉä#¼Ĩvi‰DBÁ`Ðb4¼÷‹5L>×òž*O¤YçH=H{Š\ÊÏ= TROÝ‹Å:bl}š[ùýXCà‡††”J¥L×l6µ±±añÃÃúyó¦öööôì³ÏjmmMÍfS£££j6›=±Z¤Ð=vì˜"‘ˆsï¢ … ý˜G"KkKV3ˆŸiµZ¶Úí¶Å%PTù`{/‰t'Ή¬I»»»æÍ –q O qJJ×ëu-//[ÿùñ'Ò~ ]2z={Öú í_ ‡ÃšŸŸï LÇ[æ3eƒA#л»»F:xnê쬭­©ÛíZR†cÇŽY¡?úMªd¤dÙlÖÖìÈȈæççu÷Ýwëòå˺çž{Ôh4´´´dñ@¹ÏÍÍirrRׯ_·:ív[kkkª×ëF9Ûüüú5O&DŒ(SSS×ÖÖ–Õl6•H$ÌÈåkqÎp–Ëe%“IóšnooëöíÛªÕj=ëÓ{hÒuw:SˆïÞÞž*•ŠT¯×MÖ†”¯ÑhX68¤rÅbQÚ·â ý ´ò.m{Ð0åw’z@>/.²ðy¸ÿ^ÿ 2ÂÏù?–ì~/ €Ý{bøy}%ÀÙëêy zéQ?1¢ÿþ™=¨ `­å¾hÕ¹G=7Ý^ófZ~¬†Œ…úŽ¥¾ #‘Ôã™ñø»I¦ºÝnO<$ÞÒÍw=ñ1+úè?‰ñVtˆƒŸ'úî»—!Áãy’dR ßÏJ¥b@ÍË›úã{Óááa‹ßðÿ]?Ÿô’ |²F}ŒÏw„}á=xx)qžÌÂ=àøq/5‚ü!MŠÅb·Šõx8FFF´¾¾®Z­fk‚{ù„^B¸µµ¥J¥bƒ¼WÓëý™7Ö+^H¤‘^jÉø iuuÕ²îÕj5 ëØ±c–‚O¤‡ym·Ûæ™ ÷‹!&“IËv$É2)Q‹‚ôÌkkkæ©Â#655e„€àzƯ õ%êõºvwwMÞä ™à¨oCM dH¤*fͳžè/ÓÝn×ÒÏÏÏkhhHÕjÕèÙ³g `KûD6™LjvvVù|^§OŸ¶ø«d2©ééiíîîšW‚Ùnïg}* ŠÅbºyó¦e‚Ã+á=4Ô‚a}@¸ò‘HDÃÃÃZ^^V»½Ÿ@€sožOîp.Ìrº´´ÔcD󯤒¬q®Cý¡`p?ý3†¼E±XL'NœPµZµ³#“É(èøñãj4ÚÜÜ4ÏÒ3Ï<£ƒvÐÚ÷ÖÈ»´yÀâ¢?Hi€÷´ù9ð„OÆîî®e%Õ‘#G¬"|»Ý6-<µ]¼±#€dä-^ÏÏ^CºF ÷ðð°Ž?®¹¹9³ÒóÌÄn°Ž©dÕðJŒØôô´Êå²pãaa"ÿñ1eô7™LöX¼»Ýý¸€11[kµšŠÅ¢€Iƒ:Ž¥^žŸŸ7ÁzˆF£f‰—d–|ö5Ÿ…X@ ù ¤Ú§äŰÀœ®¬¬˜Ç‡tÏŒµe8ÃýŇ6£F«ÕÒèè¨Z­–r¹œªÕªUO$:|ø°^}õU‹‹ ÀâsÏ=§‘‘ öçÞôû5 …”ÉdŒ rvv:¥Ói›Lj›±ÁPÃ~%ž%‘H¨ÓéèäÉ“Z]]µ¬T¬CŸä˹ßjµl½³OHÍþçööö”L&Çí¬šÕÀÀ€ŠÅ¢¥RÉÎÃw²õŸõßÏë´ƒöýnä]Üxô{:8€,cÉô–{^ 0ÿ¾×étìz¯‰G7ŽEpè­Í^2ä½Þóâ½ý²2š÷`po‘öÏ@ê¸Ò"å-ù€ïÍðå’ìù%™Å³Ÿx0˽<÷÷ƒäÅãq2û¸ïÅòÄÛ{8üša®!:Üà ¿¦°òœ=ù`\©‹Âg*•ŠFGG5==­b±hE 9ƤßŃ„ü„q"ˆ˜ñ$à¿Ýn«Õj)N›e9ÜÆÆ†y:|¶3R©RŒ²_ |bbÂjmøØ ŠÆµÛm¥ÓiI²‚sœ3“““VsxxX‘HÄ*f§Ói“cIw¤„ÄšÄãqµÛm-,,ØC$c±˜šÍfOñGIz1 , Z^^¶€¬?¾Pj‘´Ûm«áC‚HF£Q¹\6ÙaµZU*•Ò< 'žxB/¾ø¢¥®V«Êf³ÑõëוÉd´¾¾®‰‰ ÍÏÏknnNÍfSãããæ ™™™Q<·::œ×l{£™Â“ùìr###ÚØØP&“Ñèè¨*•ŠFFF¸¡K IDATtôèQ‹E[;œSƒƒƒÊf³¶ö—––´»»«‰‰ ­¯¯+(‘H¨\.ÛxBä8 BívÛ‚Ó‹Å¢%$ .ˆ}ËÜáÙév÷«©ß¼yÓÖH«Õ2‚ýÃØÈA{+Úy—6/ãØzÙ“·nœ:Ž¥LÅì¹'-,¯J¬¸ }°2–´þ>aMæ¼ðæA›—Ê@NlÞ&Ý©¯áe9~¼Ðøl.€ >ï©tÇR ðãÞ~ÌxÑaqçþŒ Í*@?×ñ¸n·Û3N|Ùò5üµ}lÀÛ…—AÖ¸Ÿó^O±æ{EýÀº$“ž°Fñp]¬Â>Ól6F%Iù|^[[[F XSH<¼<„ù±øžßg,ƒxI2}:ßeþ ¶…Œp-æ˜þãåñò/¯w@ÞÇ>bLé óå½!ôƒTĤOÇãV5>ŸÏkuuÕäG#U"þayyÙb?J¥’r¹œr¹œIf¨ËÂóµÛm¥R)“'a…§à\8¶ìbƒƒûµPH™ŠŒq{{Ûj Ђ:dÒ¥R©¤³gÏêµ×^³ë’’™ëkmmÍÖëÈȈ%#˜››³kÓwúµµµey²®±o°¦—J%5›MÅãq³â#Wƒ(y²/I™LÆ‚ùY¯©TJ•JÅÖž»ý¬KCCCV¬“k¯¯¯›á‚>‘n˜BŠÑÉd¬Àߣ>ª••#iápXµZM###Z]]ÕîŢſ´Ûm­®®š7€&ãããZXXÐÀÀ€r¹œ$™‚µÏYP©TlO ÷…Pv:›÷jµjû$ x€ÙûétÚä‚›››ºvíš­µv{¿((µy|v, IâÍ€H„Ãa:tHÁ`P7nÜÐää¤ý8‘mnnª\.+‰Ø¹K ;dŒŸqæ¿“í­ò€´ƒöV´ò.m¸Ä½¤Ãƒ2/ VÁ‰ƒ÷2ø v¾µ4|¬ß^YðÀÝ@>Ÿås>+·æ½E™—`—,À‹€—ŒÏ¬ÔO¶ðŒ@.¼†>xÍ Y'~<³÷Ìøïósôà€øqc~x&,’^ÇóüöÞ5FÒüªïÿVUßê~骾MwÏL÷ôÌÎîì‚×ö’Ø@L ,R)‹"åE"^$B ¤DHÇ’"!d‰ˆDQ,ñGqÄ%ÜbáMdìÍÊïîܧﷺ߫»ëöÑÿÏéSå%XàÍÚžþI£î©~êy~·çy¾ßs¾çOD}¼/}¯¥PxyÞ QbqÜ4›MÕÞ+0Nh¤‹ªó^ê„7€è½CÌ—'O€ÆA݈v»="b¶Y3€ ÞƒHìï #Ön@Î¸× _ÄOx/ǸdŠù÷Ò.úÈzñ]OH¸F¿ß7à:uýúu#UXý»Ý®îß¿oû 9™¯¨—xDßO€9u: þ^šH}¨ZMÁ¸jµªX,¦ÙÙY«×˜ÆšFGRÃâÍÉf³zã7l½Ø÷Ô}!s{¤ÝnkqqQ[[[j6›ZYY±z/ív[óóóV£ƒçN(²ŒZívÛ ÖQÛ„ìZhÖ€qá‘ãþ:::²Ï(`HÁȳ³3% óÖj2Çí—ËåŒ$Pè¯ û‘´ÄápXšžžÖ½{÷´³³cÄÆ{IªÕªUþ…BÚÞÞ6Ï"¼ È ˆ‘šÕÁÁVVVLÊÕn·-ó27Ö{‰çÃúúºž>V¹\V¥R±gN*•2"W¯×U©T èÖëu³ÊOOO+‹©^¯k{{{$cÒ öB$±q/,,˜oÐÕ«WuåÊÅb1“7¸ ‡çÖ¥ä_«Õ2¹kÀº³×0ð@PŸšš² ò^æ™â™133cE<³Ù¬5??¯ óÖ¬¬¬è~àtûöm#Šo¿ý¶îß¿o^ÀõÊÊŠõ“´ÅÄ;±.H÷ ‚ìÕP(¤ùùy{îRÇI¤Ÿ#/Cë÷û–9ëÁƒ#sì 7’Käb½^O¶GÖ±ï*•Š2™ŒŽ-Àôô´’ɤUއTU«U“´‘4àÉ“':99±Z/W¯^5X«ÕR¥RQ¡P°7H"IÞïÆ3úýï²]¶÷¢}ûRöËömX»‰{€x¹/ +¼‡_’ޤ‹X¾ ãáíƒ!Þʤ‚ ¡^ª‰D …Ì‚å­î¼Dè›4*á‚|œœœH•ð’)úŠ%»ß¿¨Ñ¸$¸‚Ã\ÇÔù« ¯A?ù‰u;˜¶Y’½ü†Ã¡½‰¹!uì¸$ /rŠûq-úä½^®q‡‹—‹ùtøþsM?X åÜ^Fà?kÀÜBz½ó4½…z/ ™s!ùA:Q*•F¼]D¬Ó^6†÷dZüÇr‰‰ »¯ñÐñ.ˆF£*—˶/ÖÖÖlŒ333–‚û›ûžØ–|àzðàÁˆ‡£Ûíjwww$Í31Un‚Áó˜¼b߮풄\¶÷¢]g´!ƒò~éìzÉ ð5n Œò‚áÜ’ìå샽×¹DæÝbèÀš—¥·äó9À`æ-”\ÏËcNOO&€uaÞ½g€åãðÆð7¾ 1ô$ €Ô"Ä÷èó¸œ o×ò »r÷Þ'Ÿ„€9àãAbþùÇ ðìLLLX\ÖÔ{à|?™¯³³35 U«Õyݬ?в>œ“=€Tàrï•—_±Ü[>ÈÙ§ÝeÍý\zÂæäY/2„}ô£ÕÞÞžêõºZ­–‚Á Òé´ŠÅ¢‘ ¤T¤B¥¿årY“““šŸŸW¹\V*•R>Ÿ·ó ¬Kçµ)|Ð=çÇÓI`7û©^¯ù`>ñîôz=•J%ÍÏÏk~~^Ož<‘bNMMi~~^ý~ßb1ÇH{¸'-.ÏœR3c_“““#ž¿o½4tzzÚæ9—ËÙž;>>¶eéÜËF= 0“““jµZZ[[S©TÒÊʊņº¹/‹Å¢$Yá<äPH¡Þzë-]¹rE¡PHKKKj6›³rvv¦»wïŽ*°ó¬X„Ãaår9ó"³b-1 ±ŸÉ*Ç=Gb¾œK:O%í½ŽÝn×¼MVÏÄgÏâx$\¬#†! -%¼#ÜOKKKjµZ'rzzjk“Édì¾™››S Ðîî®$™çfyyYÅbÑžÇÄÂd2Åb1Åb1mmmYl,Öòýn—ä²}«´KòŒ6ï=€X|x¸óÂùÀ\Àà‹½—Pp<€Âƒ2>8y`æ­ü<é"5//&bP$¤ràú´&û¸Œ ù×¢/€¾åô‡ëy¹'FÞCä%]­VkD–ã¥[~N¼uÕÇ`pn~÷Ž5žÆz#çb̬D‹;s@_˜^‡G¬äHª”,ÖÇKW[[«Õ2BÔiaaAÕjU“““ZZZÒƒ455e©y!;½^O¹\N‘HD‡‡‡#ñˆvl6›&ÉeO$‰ï0÷["‘P&“±ç72/ïùŠÅbj6›zóÍ7µ¾¾®©©)Ë^†1ÂÇq]¶ËvÙ¾¾vI@žÑH÷j¬O^ 3®ù—4RñÙËt<ÀæÌ ßÇà)4{k?„ å—©p>¤S>°°ëeH>®pî¥ ¸ö l÷©^=iL`!ãEÇù½°ÎXüxX€4À—*s≈t!ñb|^ÎM_8p/]xzø/–é!3â×˃r?žZ­6"Sò„ÌÇRаîC$™×€ù|2/ÍCú„UéàÞ{>¼×È“‰?¿ß³žyÒí½X—Ç ²ŸCž<Ò'ïeó²,ö1¸\Ç“¬ñ¡PH±X̪V´M*\€S,SµZ5bïïG¯m÷I (âw||l÷Ùž’ɤb±˜Y»ÙCÔáh·ÛêvÏ+k“k~~^•JÅbGÄ+A%©X,š4çÊ•+#Öó©©)‹¥ ÖK2™ÔõëוL&µ¿¿¯jµjsF-îyS·Û5I„™¤ù¤&™Lšç‚sø$ Ü/3£6Ù˜ðúy’Ùjµ‹Å,‹SµZµš%Ì×|ã7433£7nèáÇæ=J$6ßétÚb!&&&LÞÔëõôÎ;ïhzzZ·oßV­V3r†Ï€ã8â¥sO ±/^¢èc6xζÛ푤dÏŠÅbÚßßW,³÷±/X»H$¢³³3---éììÌâúý¾fggÐøôÀÜûx-HA ñêt:ŠF£V¨är(vÉ{‚=ñ}¿Û{%Áºôª\¶÷¢]g´yÉ  +¹~¥y™ß÷ò x}|ŸyÏ ÑÇZxPéeWÞº*i$¸Ðíõù¾^æéðVP@¨¦Ä¾<•.bc$¤x«»>ö–BÆ&]d»ò^,­z=¹âûÈm ÀØ[Ûý¼ø>y‚Äç^nÅçô‹ýÀA„˜bb ô‹æI)×ó–a/K¢ù¢nÞÚïÁ ëæ=6ž¬z Ûïñý‚Õ™ñúX®ë½2ŒŸx!_˜o|¼?N> îü É‹÷Zú"XÉ©þàÁ+écÙ#µZÍH’CÒO÷û}U*#ãüÁ` b±¨T*5"¹$ÓÊ\ƒ9ô±+€uÀ3äØî!éÜ*_©T”Íf­‚}6›U86FâVRŸœœÔóÏ?o’#/mâ—H$´³³cñ$$%Àðà‹ ²&±XLù|^™LFGGGêt:Z]]µ"tx“ˆáécÖˆ¥À’ô":Ï(ÅzPT”zÔ´˜››3ÏÚÍ›7õäÉ}ô£Õ£G,ÝìÙÙ™–——Í3srr2’”‚|Ô aí …‚Òé´lOÄ‘ÉQèq0XjbÈ›÷°'‘Dz?Æ= ’ŒHD"ó¨‘ÑlmmMù|ÞÒ-‡B!K•Œ·—ýL¿É¢‡w" *•JY€¯wž¹Í{Þ *±"‘ˆÅÓàñ& óp8´8¡p8¬]¶ËvÙ¾þvI@žÑæA`Â{+Æ-ÃÒEA»ñøIæ•àX,Ãþ'çds¼ÿ×÷1š/ô…÷Óú P÷"ŒƒÎqÏçôóÁ¸½…œ@\@7Ÿ.½Ô‰yð`›¾yï @Užã=Ùá:¾OüþKÏ|_¼¼Í×Aæâ=,~@üؼ|Œ¾x ˜—£±¦Ò×Y¿×|ö)O>¼…ùào^ãïI¯÷¦øþ°WýOÈ4{Žýå÷µò}£_Ⱦ ô‰>{Ïœ'^Ü~x²ˆ·crrÒ¤;ƒÁ@ÙlV“““ÚÞÞ–$-,,XzfÎÛGÅûÁg->¨C4ŠÅ¢Éèãó B¡Õû`ý‰]…΃™±h‡CÛìaö÷ì@>Òé´yt TXã½§ˆT²ÛÛÛ*‹VØ{£R©XóP(¤Z­¦x`7êêÕ«vŸà!Nƒ9'@ åe>Á`p¤ØžXœ©F-6€±‘¾0IÜÉK/½dAÀÉdÒ@9c„  ‰DT¯×ŒDA‘P7FÕl6µ··§J¥b5JF ÚÙÙ±õ£Æ…'–’¬:<^ZÈ({|iiI’ÌC ß—ÉdÒæ?+Ú3%›ÍjnnNýþyMúˆŒ.[ðs&“±µdžs¹œÉÁ²Ù¬­ÅJggg•H$œ J§ÓÊårGU(l¾ñJLMMÙº0fŒFÖ©×;¯4Î51šàcþð¤øù ˆýììLûûû–äììLÕjU{{{ S‡-AqMþ™ !!QñFœ“Ì\ãÅ3!¯‰DBÉdR'''ºwµµµeFT*eÏ­~¿¯D"aDÞ§1¿l—í²ýÅí’€<à  ëA¹—Éð‡´Þs‚eÌ{/üïã^oÕ÷ÇJ²`>òè# +­Ïêä¥C^I¢‘ñð¹'HÆÇ=&ÀûÀ}ß/þîç×Kuü¸½Å«"Vr^Ü^²ååSþ:>#“?¯ÿÿ8©bn½—€ï(|0ÿøqã{…9ë⃾™¯‘übðÂZü\2~®íådŒ6¾eŒhŽEÂC_ £~í¸çäxÏ` -DRÀ<ïu?xàËr}¿n¡PH©TÊâ4ØÇFCõzÝ‚¯I‹JjRÆX, Ͳç‹q§Ói¥R)³æðÇÍzÏÜÒç`0hóŒE€Ø¸£1??o} æe`w:]¿~]KKK‡æµ)—ËzøðáH8Õ±%Y1¼@  z½®n·«B¡ |>o÷5\s *ÇA€!÷Äîxm¿O¢•^’y›Ø7œŸÌTx—HLœE³ÙÔ½{÷T.—mHó‹ .•J)‘H¨V«¨×ëzå•WtõêUKã+ǦP§ejjJ™LF«««ÚØØ0ï5+Òé´àÇãq•J%Ðæþð’HoHšžžV"‘ñ–cév»ªÕj–)Šøœ`0h)JÅ’0L,Óüü¼‘,}!ÉA"‘ÐpxCCæ*jÄà cÌÃáP{{{öÝf³©H$b{•µæ™GŠç3±"$3À ñ~6ÿ¼þFÿ»l—íÝ.%XÏhóÖðñ4¨|îA¹·ˆ{½¸'¼PÞ K2·;—X½ñºpmÚççÅäåkã?Çô¢ ]ĨàíðÇa‰¤ÿ¾Ì•táùð^ ây<9ôÀ€Ã¹Þm¹çõDÔ“K®ã -Ò¼,‡¾úX]¶YËw“²ÞÈ:ø Ïõ}ªZï‰#¨™}äûæ ýó’2ˆ«ßƒ”±v€*/©£?ãû„ϰ ƒA+DÇþ¤‚6ú~O†½ƒâ‚_úÒ—lÝÑÚONNZ¼Àéé©ZÃKã“.D}vvfÁÀèóIwÌ}ëõÎ3!qÈ"ë[YYÑ“'OT*•,s$œ l©ñšx¹%–ðp8¬T*eŸ3—årÙ<"ÈÎjQ/É “,K¡PHõz]ÃáÐ<xYÇäƒô‘ùÚýôr~^ ~®øÜK¬è3 Ë0ãô7À”tñ`÷Åô°èy`ê²'C~xùûy¥yO}ó/,<îõñr'@——TùõàZãçò²5ßO½—Â%ÖÊǬø¹Å+ÁÜÓ?äBXfÙžd¾›·‹{âÝú4.é'BüîI ÷óƒ¬Åω'%ì3ïq|@¤*…Bî''Ï땤Óiu:X%hRá†Ãa«ε|ÊmÀ7ž,öX¹\6àÍ\#áâ^ö 3•J©T*Y€p8¶xˆv»­½½½‘º6¬ µ]ƒžŸ70Ë^À ?==­v»msCõíV«ež<¤f]·—…qO±×‘pV«U Xfís¹œeÑ“dufð<Ñ_®Ë½ßjµ”N§•Éd,–¢ÛíªÓé襗^Òôô´vwwuvv¦G™ž‡É÷G IDATŒõzÝRʃA år9iqqQgggJ$ö,, ZXXÐôô´ôøñcë÷ÔԔɣ˜ ïEæÞäùé÷0`OD2K 8±Á`PW®\±B€x}HQ¾¿¿o„4ë#ùˆ¶··uxxhìƒó¿!Âp8T:V(²lZÈÀð¶t»ç+VlŽõ×ò™º¼Wɯ7|zPæÉ oÜD¿|Í ßßñµ”.R®B49Î{C<`®¼—EÒñð2/äEï&'÷>x/…'l¬=ûÊ×|ñ{‹ã}qL~²Ž>%0cÁZïÉLÍÌÌXzÒ……ݺuK@`DVBÍC055e€¸Ñh˜ÕÞÌP(džˆÓÓS“5ÛÑívMfÒï÷-Eìüü¼VVV¬v÷éƒÁ –——õüóÏ«\.+‘HhwwWNÇ,Û€J@$1YžÐ_,æý~_{{{VD’ùdzL&•Éd”Éd,ëÛét”ÏçÍ«Ã>fî±zs}<.ÄzQhÏs7•J¥tõêUÅãqK{Kl„—â™ ÚÛÛÓÓ§O-.Ïâôô´æææl ãñ¸mž¾úÕ¯*ëí·ßÖƒÔh4´¿¿oÁ¨Ñjµ”Ífáéè÷ûšŸŸW¯×S­VÓÝ»w%I#{—=ÈúâmcO¤Ó鑘AÒ=³fpóL"¾^¯«\.K’®^½jïâ ’tåʃAµZ-óNñ,ˆÇã–¾Õjivvvä^M&“ŠF£#’3äì÷h4ª³³3U*ÕëuÛ<3‘”AvñÈPc…Ú8—í²]¶¯¿]g´yÐè)àÊ i4^€­÷†öÇ­þ^:Ä9ø¿=.R^rN>ãE ¥{ àÁ±$³¶y2ä=/€ÿèÃ@?xéB ºÞÛAßù¿£€øq ð—S¡Ù÷ßåº^JÆ:z÷²/%âZ½^Ï*{3¯^jä‹úqnOngl333‡µ²²¢ëׯ+—Ë1b+r¹œ‚ÁóT»™LƈÒ¾žÃää¤F2„…Bçµ°ÌŸœœ¨T*ùYZZ²èÁ``Þ“™™¥Ói5 •J%‹EKµzûömKwÚh4¬± H˜ˆ‘(—ËV)ÒÙÙ™²Ù¬:Ž²Ù¬§ ÏÓã²öÔë`¿BlÚí¶ÛV«eãâ§€ àR’Í»ß[Üó¾ð&?£Ñ¨µ¾¾®ÅÅE­¬¬h~~^F6÷Á`Põzݼ;@À¤vœÒ´b±¨ ½ôÒK*•JÚÜÜÔýû÷U*•”Éd”Íf  ãU…B*‹ÚÝÝU45/Ô;wÔï÷uóæM+2™N§Õëõ4??¯L&£jµjÏ _§'*™LÚ¼•J%{4¿¶¶f)œ§§§-°o Ϙùùy#²<“Á‘ßä䤩/|á ÚÜÜ4R€GŽë¤Ói-//ëöíÛ¼Ï}Y«Õ´¿¿¯V«eDY0qI<Ó‰»ˆW'“É(™LÚž…Böÿ÷»yCË7êße»lïE{ÿ}†—í}kã’/…áï^c¹(ãæ÷ pøòßó2,/ÇâZÌóÒ÷ä€~p @ãð1OJa>ð1 ZEcdþAë­Ð^߉AŒÕÐBüÃÛbä‰×E&#]ÔÝà?I#àÚk“J> ÚK ¼tˆïÇÐgŸùK¾OÙ;.‰‹Åb„ƒ?¾ôµ±5dîa^}œ sáÓ>3o¡Xc¥ǾóÅ!¢’F>#ª÷„0FOnüáë{¿÷{õ;¿ó;*•JšžžÖ+¯¼bžÖT*¥(‘Hh{{Û¼ ô÷èèȲZƒA{¦pÿPõ`z 6çõ32™Œy}†Ã¡Uµ'=3q8ìõb±¨×_Ýöiu,‰UΑÖA.}Lˆ$---)èùçŸW(2’!IGGG¶x!ÉúÕï÷­ e¿ß×7Œ¤P7…½†äÖ¿€vww¿æûÿº½W„á’„\¶÷¢]g´A<|J]¯ñç…ãÁ Ÿ`Vˆ€'€//p_ŸabbbD·ÍËòãÏ-]xk<ô{i˜td½t€ïz‰—'Ix°¾Ñƒݼl}úS{⹫ÀJîõå’̺ÈñHAø›÷‚0¯Ì Ù{&|f0ï¡ò$RÃü¿›g „ì‚óm¬÷šñúŒ¥Úmærðã|¬­'ÞëâÉó0ã:˾õÚv/¹b¤Ú|B&ùÉ|Øýw½7Nð1·œ‡ë3OÒEl–$ ú&x÷øøXÕjÕ²9% «qttd–èÙÙYE£QjzzÚR¶‘O+ G QOþ çËËË6wxð€ì‰òpx^Û¢X,jggG<°sssÊçóæiÉd2¶v±XL'''F‡áyKR©”>|¨‰‰ ­­­)+Nk8š4jooÏ‚˜OOOU(´ººªL&cïá C1­¢;ÿ‡xÔëuÅb1Åãq«ª>99iðÄt»]Ûxˆ@â”N§•N§U(Ì€§ªÓéhccCù|^=Ò•+WtëÖ-U«U ¼D"úÊW¾¢d2©Á``ã¼yó¦ºÝ®ŠÅ¢þá?ü‡úGÿè©T*éoü¿¡7ÞxC?¶gaµZU§ÓQ"‘yvnooëþýû–YŠ9‚¸1oÈ©ÈúEƬB¡`€~ooϪ¨sÿS(³ßïëÎ;’¤B¡ f³iû½\.›Ç!‹¡ƒX…B!#7ÕjÕž•m$½«««öÎaK²ÊíãñR©¤l6«Z­f±)dMóI pÁ`Њa­®®j{{{$¥úe»l—í/n—¬g´õz={‰ŒkαÎî¼Õ–l2€wI_“†×r/g‘dÖ+ïM˜žž¶——çx়À9‡™ã–jüôaúŘè\Ë{(¼> óXñÐȆøÜƒÏqšO?Ë<„ÉÀâ-nÌ  P’½„}V32 S€IòÙŒ¹õÙ»ü~ð¶Ì ß c5–.¤P/Ÿ¢ÿxt<?Á^ ÿÞ+Ãw'''MÓíÉ*{Ç<<,>΀XŽ÷±9ö,´½dƒób•eJ2Cß_ýöÇx?ÖÖÖ4==­ããc @o·ÛVøþ“ª–j+âc X§Á``ñ!|§Ñh(N[½…8—ËéääD“““šµ@tÖ;™LªÝnÛÜÏÌ̘åZ’nß¾­ïú®ïÒÉɉ*•Šö÷÷­^À¹d¯Z­Úþ/ Êf³–½)•J™¬'*kyyYñx\*—˪V«j6›ÈÎ>åĸÀ|QÿƒW¯^5y`:V¹\¶˜›…… jæÞët:ºw®^½ª çi»Ý®J¥’ŽÕëWxï÷û*—Ë Z__×ÚÚšÖÖÖ´²²bò7ÝñBxooOGGGº}û¶VWW577§+W®(hggGzôè‘Þ|óMýéŸþ©>|h¤¨X,ªT*饗^Ò /¼ T*¥Z­fÁêÈÂx ‡C“Dñ¹t£Aje¼¨xÙHþvvv´¹¹©r¹l{©ÜÍ›7uëÖ-½ôÒK_“²˜¤įP>55¥v»­d2iÏÞV«¥§OŸªZ­*ëìì̼Ad¿ZYYÑÚښşxôÑÑ‘=ƒHCí‹ b`ñÆ.Ÿ®ùýjï…üêÿæUi6›úéŸþiýàþ É??ùÉO¾ë±o¾ù¦~à~@ñx\étZ?üÃ?¬ÍÍÍw=ö—~é—ôÜsÏiffFkkkú7ÿæß¼kB—Ëö­Ý.= Ïhã xi nesÇJ³X¥È^ã/]X÷½[ßB/ýâo>Ž„†Ô+3ÖG~ÇÒ Ðó²'Î ñ$…—-à°Ž”’ /ÊÍ˲Á|âA¢ïXچËخϜ{BæãH«Êç~ŒY¬³ȳFÞÓ@@&߇¨xO‚§ñd AÆŸÆÉ cÀr.@ã-x²W3û‰yît:¶ÏüÚ{¯çàs¿èkƒœ Pe¾Õjxà T€0â5¸{yiaÙ'>séd%ÄDœžžZÚÔr¹lr¤p8lª@à<íl»ÝÖääyåmÒ¼BONN´ººjÉ©±)Àà ]Hÿ°î/,,˜$ç…^ÐÉɉeÄbñ‰Oè{¾ç{ôå/YÙlÖŽýwÿîßéŸø„~ögV?øƒ?¨/~ñ‹úøÇ?®ýý}ýÇÿøÿ_ï²½Çí’€<£ )ZÀ«'h¤ÉØ‚ÔÇÇ?Øç­ö¼ ¥ ¢AÅe8$§ÑhØ€Ì`Ù†¸xí5àB„GÆ{0“ôÇ/ÕÁÚë³l=¡á'ã‚ ±Îû4ŒfHžÿ kí¸ÜËÇyxÙ[/+óD‰©¤‘ùðñ@`D‹îç„y–d í7^ ˆsÅù˜/W¢¾ßüß—½ÈÚ!ñã2@ÆÌ?O }LÀ8añÔ¸¦__@i86O2DÖbâ=1Á`ÐtódLšœœ´ \â5ˆ`¿PÑܧ:­Õj–*2ÔjµÔh4´¸¸¨r¹Úí¶UÇB _ˆ²³ééi…ÃaÕëu½ð šššÒ;wôøñcmnnêääD©TÊd†Ú¹¹9•J%•Ëe¥ÓiÅãqómmmÙs ¢ùÝßýÝj·Ûúüç?¯ÉÉI-//ksssÄØþíßþmݼyÓ¼CXù···U©T”Éd´¼¼¬z½®OúÓzî¹çôÇüÇzõÕWuõêU•ËeÝ»wO™LƂ㷶¶T­V-ò8âwÎÎÎtrr¢×^{MŸùÌglŽ†Ã¡æççíyR*•49y^‰"÷D³ß?O”‘ÉdÌ£‡’3­#„†–b±¨T*¥¹¹9•ËeóNöz==yòDgggZYYQ¯×ÓÑÑ‘Òé´*•ж¶¶ôÁ~P‹‹‹ŠD"* *—˺yó¦Òé´Z­– …‚b±˜yS¸§1&Qóýlÿ7oÅ_õ¼ïÖ®]»¦J¥"I*•Júô§?ý®Ç}âŸP8ÖïþîïZÜÍ?øAmllèSŸú”~þçÞÎñs?÷sú§ÿôŸêç~îç$Ißû½ß«n·«üãúgÿìŸéöíÛßèá]¶÷©]J°žÑ†et8Zñ2”ù`˱ÄgxÉÒ ŸÖ×ÿÄb•Äã`ò^é¢`!VH€˜ï€’*»ÞKÀ9yYùXÆîÓFb¦0„¡è2vÆ‹Nð–~¤ô¯ ùæ½ÆËؼÄÇˤúXð}ré"nÀŽÌk³OOì½3^ªå¥_ãýÆ2ì=e€ ÒS|Nÿù BË¿³³3Ód*C.˜#O¸X2¢yÙóϵüžDÆÚxiP!ã²8ˆ {šù†lÐØ'~®é3Ò¤p8¬ëׯëÚµk&{ ƒÊåræ¹víš666T*•Fµ²²b5z½žB‡C“iu»]­®®ªT*iggG½^Ï‚¢ÇÓ¤†B!KQJ¶Z­f@ Ë/÷ÁÁÁ’ɤ?,óFCù|^ûûûúÃ?üC%“I]¿~ݬËÁ`P÷ïßW.—S:!¬¹\N7oÞÔµk×”N§MRD02mqqQ™LFÝn×ܣѨÕÎ`}ØŸWè€677Í› •Ífµ´´¤l6kóèèhDD52³H$b øéÓ§j4ÚÜÜ4/ÀÜÜœôv»­Û·o«Ûíš§CD©T²¬OÙlVóóóêv»V =‹©Ýn+N›¬Z­*ŸÏknnμp­VKƒÁ@µZMµZÍRľñÆÚÝݵg.q9ÑhÔ2}˜_,µººªùùyMNNjssSõz]¹\N‰DB’lݸ?†Ãóx¤G™äÔËU1@ݼyÓ4(žÞàDŠ\ÿ¼©T*&+•JÚÛÛS½^W"‘Ðôô´r¹œÂJ¥¢ÃÃÃOf4Õúúº=«%YüO(Òìì¬õçððÐ,òÇÇÇzüøñˆ—¼ÕjÙ»‚÷Y¯×3Éâ³Úþ<’Òëõô»¿û»úáþa#’´ººªïû¾ïÓg?ûYûìþàtzzªýÑ9Çþèj8ê¿þ×ÿúÞtþ²½/í’€<£Í[¢˜TÆçåTÈ|x¡óRõÁÙf%{ðǹ|åáqë>¤ß!èt½ÄÅK~Hx ð>`möÛ€v/ÁñÀxJøçLq,²!,–>µ,ß#« óM±NxBè‡)¢½[¬´sö$`Û“A'ƒ'Œ~A¦w>®O†—/AÞXúG_>þ:ß¾ï]ûzã9þ2ÿþ²íÉ“':99ÑK/½ô5{ñÅõøñc»OÞzë-ûÜ·……e³Y½ýöÛé~\¶o¾v)ÁzF[·Û5+“ýÀj”Š¢Þ+HEîCÆ /gÁâ `ãsâ&©x0‹%ÝËc¹^§Xõ™†ÐYCDô\“FÅrÔÇpð°õÅô ò™‘d’$Ÿ^b511a€ÿ{éK³Ù4Ëw²4ïÍà3óÉɉÍ9×ókÇ÷‰ñq-Èðž0~î=xP¯ñkG¹6Þ2¾{zzjÄBè‰!^æÆÖÔÇ„°ÖìeŸ²˜=Î9}=?·Ëzú˜À>×Fšèûwvv¦X,fä{ÏP&“Q>Ÿ·½AÂá°ã5™™™ÑÜÜœZ­–Ip˜#ˆõ"‘ˆiãƒÁ fggU*• ÌÇãq%“Iõû}KF1 LŽI,R®­­éÎ;zçw”ÏçG,×2¨:=55¥çŸ^ø‡hDŒÌMÕjU¡PHËËË#AØ““絪ժZ­–:ŽÜX,¦ÇkqqQ¡PHÕjÕ¼0F#yšœœ4Ù«|¡¿;wîhwwWµZÍÈd{gzzZµZMW¯^ÕÜÜœ^zé%mmmi0aÃÀpíÿOq< ”N§uëÖ-µÛmÕj5ÍÏÏ[œ^”f³©••™„ˆóx<®çž{ÎÆØjµtóæM5 ºsssú‰Ÿø ýÞïýžz½ž>ÿùÏëÚµkš™™Q2™T*•Òp8Ô?øÿ@ÉdÒb1~ë·~K{{{úЇ>¤jµªB¡ W_}U­VK+++ú•_ù{Ž.,,q;<Üdžb¥sÀ‘˜3÷x‘Í@Ê Xž˜˜P¥RÑp84oÈÁÁIJG¡PȤ@ÝnW­VËäHxɼ%zvvV¡PÈæŠß=@CJ877g߃8-,,¨R©èþè -N…øÖ¸T*innN¹\Ϊ•3FHÓpxžööääDOŸ>µ€òáp¨R©d'Ÿ±m_ƒÁ@ÛÛÛš››S"‘°‹Ü@À2€A–É|@|î¹çìþ£*7ž(Ÿ¥Œ{Œì_¤>99Q"‘P¿ž‘«V«)—Ë)“É(—Ë)‹©ÓéXÀy °â„GGGÊçó–­jbbÂjµ4›M-//ëå—_V,Ó[o½¥³³3mmméÿã¬ÝÝ]X]Š_üÅ_T>ŸW,ÓÆÆ†y`¿ð…/Xö1}ùË_Öêêª?~¬7ß|So½õ–>ô¡)‘HQzô葚ͦ²Ù¬âñ¸nܸ¡H$bq)š››Ó½{÷¬H$13@@ñx\óóóºÿ¾Ir™—½½=KÒÐëõL^ɾ‡4Û³i8<—vMNNªZ­Ú³) ™Ä­ÙlQçþo4J$V˜#ž?RS#ûK§Ó:::Òá᡺ݮ†e5óÉ(ÎÎÎÔjµ”N§íë÷ûJ&“êt:#q{ïgû«<©ßÈs^¶Ëöní’€<£Íëk¥  °|r}à¢Á±8´ñP=Q Ðš÷Rø@réÀó9À¯‹·Ø4yaøsxùP4ýšñú9ð$0Ìÿ9\×ÇÐW€=ýõßñäÄËr$ÙËÉ@1yðï½$€bÀ·÷&y0M£/^öäÇÊï~MÆ÷ yà;ž2ŸãsÀ÷9'¤ÏÖ|ß×q„w IDATâëׄýà £—yï ×÷4^OÊ=ñ“‹'´Èñ~øô¿€ €<×px^o%ŸÏÛºS³ ÑÎÎŽYt>|h€+!Ï·¶¶ÌâìÉh$Q2™ÔîÁ ’ɤIL»D£QËœåïûz½®t:­ÕÕU¥Ói=|øÐжZ-‹‰ñ)~€†¥•íõzf•î÷ûZXXP¡PI‡»³³3¢û‡TE£Q5 «ÓÐï÷577gÄ$X"è/Äø3ïe«ÕR45’CÐù`0P¡P0â399©ëׯ[ß)¢Hl¾?žW¤'ð> êÑ£G&+;==ÕÑÑ‘‰„VWWÕn·µ¼¼¬f³©óD"}ä#Ñÿøë7ÞÐÎÎŽÚí¶Å( Œ—€4 ø¹®ùÈjaï“árNŽ|úœî^ÚÄ1kÈÿÝ%úè­à>ˆúÝäMh2*yð ¨òY|¼×d<Â{軪füãór%I#±=\‡ßY¿Þü#>Á{t|_<¡':Þ%]ÔJHÞ†q¢Iód‘ëzO’'SÌóïûïÉßø~ô„Á!ÖÆï+H ?—'dþœ~¿Ñ—ÉÉI zFnƒ ó÷s?33£Z­f@ ÐMÁ½Áà<ö‰: d*b ‡Cmnnêúõëv>Réz/¾ý¸«Õªâñ¸¤s è[o½¥©©)]¿~]'''ªV«#EE!NFÃäM’”H$”J¥¬ ){±x³~Õ@  J¥¢ããã‘L[̱*€X,åÜ<³|ý IæI!ûT2™ÔÄĄըÀÉ>„¤yƒÅÖÖ–Î|>¯™™¥Ói¬»»»–òIÔìì¬úý¾ …tåÊmmmYÆ«½½=õû}ëììL¯¿þºŽŽŽ …Lêó¹Ï}ÎR<ß¾}[¯¿þºr¹œþÚ_ûk‡ú¾ïû>% }ùË_V4ÕÒÒ’¾úÕ¯ªZ­êÑ£GªV«ÚÜÜÔÌÌŒ*•Іe€ÚØØP*•2bC¥ôH$¢Z­¦ÉÉIU*K•ì“”@ IŒ,ëÎ;úßÿû+‘HØýŠLŠäž¼/--Ùår9Kõ\(Ôï÷Í#311¡ùùyëgµZµ¸Ÿ`0¨jµª……ó¬øúRÍfÓ€.)¶K¥’666l/' U«U ‡CË×ëõFŒ?>®Ñ¿ý»ôýjïù«œsbbB÷ïþ]ý—ÿò_ô ¿ð – kggGò'¢Ÿú©Ÿ²cè‡~H333úÕ_ýÕò«¿ú« ú{ïïýåqÙ¾éÚ%yF/e,ã àð% Wº¨á˜/ GÎ<˜õÔÿôVe®áåHHtŸôgÜÊïÁ '/H Æ=+Xº˜ çÇ‚ìû/i¤…Ÿ|Çè{+?ÀiˆŸð©€ ccNÆ m\†åÇɸ}|îã%ùÉOêÃþ°þÎßù;úÿâ_X!¹¹¹’N§õñ\ÿú_ÿke2ý­¿õ·ô¥/}IŸüä'õOþÉ?ÑsÏ=÷¾Œñ²½7í’€<à 4.³y«<`ÄDo¹Ä:äƒ{ù.™™‡’ t2= ö’ Žñ€0À±Xû}ñ@HŸn`Ì÷‘€A Þ ,{IѸÔ†5ÐǦŒ?ïX y!²{Bã-÷^"ç ¤ýà\Þ2OÿñÚŒƒ¾ËÖ¸¦'©~=üøü¾áºgOR¼4Ëë=W7>XybKƒ $VÉ÷Çó;² ¿6*ä=/OfÇe~~~ék0´€«\.§jµjYØ+Äx ÁKR«ÕFGÒVøƒó” ©TJý~ßRùrmÒÌrÿ¤b±˜fggmžÉ3_0+NÛ=þÚk¯©Ûíêõ×_W(2¹};;;S2™”¤™K P6›U½^W¿ß· wÀ(@Ô“J/w£nL¯×³ /,,XjTŽ£P±fìddÕjUÛÛÛj·Û¶^^ÖFFè¹_!FÜßTËî÷ûHc±˜*•ŠR©”e¶ŠF£Úßß×ññ±–––trrb„lrrR'''–j—4¼½Þy}‰ïÿþï׫¯¾ª““=xð@ápX{{{úò—¿¬Û·o«R©hiiI§§§zóÍ7ÍË4 T©TŒp+ êÅ_´Ú ý~ß<xHž>}jÞ¤ª‘HDGGGêv»ZYYQµZIúA:õøÐ‡>¤ÿóþÊå²r¹œÅà¤ÓiµÛmõû}Ëþwzzj’'ž7‘HDKKKÚÝÝÕÌÌŒ€ÄÛ‹Å,Ãû‰ñ"\;‰¨R©ØóŸñ‹EÛ‹d­#û²x‘°ç3 Z­Ö3ëùñÿqmooK:þæ3ŸÑg>óçõvVWWuëÖ-}þóŸ×ÏüÌÏèµ×^ÓÄÄ„¾ÿû¿_ŸúÔ§,F„ö/ÿå¿T<×/ÿò/ëSŸú”õ³?û³úWÿê_}ÃÇuÙÞßvI@žÑÐ"ÀÒK?°øñò î°Œ褋ªÖ>ÿ»4šåWº—¶@ øŽ—Ñwé"€Ù>éB¢ÄqŸ…Ë[ö½îŸ9ðýàšèˆøqs^ªäó7æ‚ßñˆŒƒxæÍƒvæ‡1xŸCD¼ÅŸ×zâ× â0.™òPO|߯›'P|õò¿KE0}¼É8yñò5¼GÌí8qóˆæI4{ˆ½‡¥—s³‡¼7‚sA¬ à$ˆr8Zš[29MLœ’¤Ò;cI&“ªV«&«¢*¸ßÞkpzz:â ôÁ£ôòAªP€u p1žPÇb1Õëõ‘ vT‡\—Ëe=zôÈÀl¯×³wâ=B¡U!'¨|uuUù|^OŸ>U»Ý6iððÌ`é&÷6²+IŠÅb:99Q¹\6òCF&jH sc ›¤Ü}ôè‘yl š>rÕh4F¼”SSS&á/bH—˼g³YÍÌÌXŒÎé驦§§µ··§J¥¢ÙÙY5›MKG ˜¯T*êv»V‹éÏ믿®D"¡¹¹9}å+_Ñææ¦Âá°ŽŽŽôÚk¯©P(è7ÞÐöö¶þçÿüŸºqãÆHF­V3ùA÷³³³ÚÙÙÑ;ï¼£ÅÅEíìì(™Lšg( š|jõˆÓÓSÅãqÕj5mmmÙzòœh4V‘œÔ¼ÙlV+++&=ÄÀÇuëÖ-óF½óÎ; ¶Æ8}<&‚ßùœ/_Ušï˜<ØäÚ€PoaæEC_ÞMîåå.\ÛƒRé"C`ÏmŽõ`ÞKtÐ{9•?Ö[g/Èfƒ´€kæ Âã¥÷x‰rÈ)h9޹òëÌg~îñÀøüw#CKžÆ½2ôÉ2öøýÃÏqu]Æ=1òR'ö ÷šl/a®Ë~m½Pð”d²$oéäû~χ¬$x)Òé´wƒAËøãI2räI€ùv»mÖz®I@;ÕÍñ® ãb|j`²n±ÿfff,ƒP¹\V,3 W¯×ÕëWQÿìg?kû-8Ïv…<…½Éúçr9ÍĮ̀Ýn ´b¼h4FV¼ÌqvvVGGGê÷/ªË{y dË'kÀ꤇kW«UÅb1«ñ¡ŒD"–îÚB¡Z­–­7E#W¹\IS|zzjEêÈvÿþ}ÛKx4–––Ôn·U,-9Ϥndl‚–Ëe‹EýÉŸü‰+ªÚ÷z=èþýûúýßÿ}…B!år9ÍÍÍivvV»»»–ºxqqQ+++Êf³zò䉖––ŒdþÙŸý™–C$X㉉ ---Y½š|>oò©\.§f³©+W®X¬ žZ­f$x7nÜP,3éÞ/b{ŽŽŽÔl6•J¥ÌcîßKsžµZÍjC ‡°ÛíªZ­*ÚýEMïµÁhÓívM^FÑG0 ÀCܧôååÎ9°Ø{àIŸ<@Æò„õ‹¬Š——Œyë9׿;ãd€æ-÷Ì ÀØ×I¡¯œƒñJ@Ø{Q°‚ódlÞ‚ï§ÿx¯ððõu7è“—2“IÎÉù˜€«'0ž|yÏиŒ5ñd‰¿ù¤)a>»Ýó™œß{²¤Ñìcì'æv\ æÏ륞 ùûÁK¶°šz² ô÷ƒa¡º6ÞSSS–öøøXñxÜŠ=6 ë+—}R€Á``$!—ËYUmÑôô´¥…äî³x---YÊ^€5^ 0È}ÐË#ÃßívÕl6ÍÚ̃üABB¡I£ØsÇÇÇV%‘H¨Ñh˜T !d °G&«h4ªl6«ÍÍMµZ- TFâÕh4tíÚ5½òÊ+ªT*¶o ¬ öV§ÓÑÌÌŒy€0RxWÁ<ÎÏÏ›|Žy'ö¢Ùó{râ½ Ä9Äãq‹E“§½üòËZ[[Ó›o¾©E£QmmméêÕ«4žp»~ýº’ɤ=z¤½½=MMMY0T6›µ0©TJ7nܰÊèOž<ÑêꪊŢòù¼‘8ž'ý~_ÅbQÝn× Yv:óŽ5›MÍÍÍÙ}šËåìžkµZ Z[[³9‡`G£Q "Åb*‹V×…Ô½^O­VK©TJ™LFÇÇÇ_cl¨T* J&“VɼÑh(N[–7î7 ‡CË0†b2™ÔÁÁyÇØ»ÿ¾cO ç©®IØpÙ.ÛeûúÚ%yFAz€+o!h_ ÏÇL2¤‹è>NpPñ²^Xã’Ol‰ãd‰x^ >«×ä'R™q‚ÀµÆÏ`Gw`õý FzüµÆñ½×A:Ï^ââ³vyÙsE_½L<@™¾xàê³ù9ãxß⟚š2‰ ’}âãNøþª‘¨ð»—Lyb)Ðón·kViæ 2@ 1^ ïñäyÜËáÁ¸÷æ°'ø»6\Oˆ/‚è÷ÅápXøÀ´¹¹iin¥s€†ŒXŒÙ!Ùxø2 ŽF£ŠF£:<<´T:@û=A–«H$¢ããc]¿~]ÛÛÛfž˜˜P2™´`s‚k›Í¦†­D7 Z¶)ÖŒô«x_ˆ‘¨T*#ߣþÂÄÄ„âP(d1•#¯ …BV?£ÛíZutHS*•Òââ¢âñ¸¶¶¶Ôï÷u÷î]œœhvvVÝnW[[[êõzZZZR.—ÓÑÑ‘nÞ¼©Á` ÃÃCU«U«4O, i}}]…BÁ,ðNǬû@`$fazzÚÆežzÔH!(ŸÏk{{ÛRÍòÉçóV©ÜïgŠ6®¬¬X:ÝV«eE)Ö¸¾¾®­­-}çw~§Þxã ‡C öfoþñ–ÕëuÝ¿_ÿüŸÿs}üã7Ð~åÊ#™Lf$ûáññ±vvvì]ZZR0x^¤vmmM‡‡‡‡*—Ë& –ú6Úžk·ÛJ$–ɬP(h}}]OŸ>59Ï-R1—J%KH€ç¡ÓéX;{žWz`äñb³ÔAy¦w:óîá⹂T’çòÅo†vé­¸lß*í’€<£- YVêqðÂ$òŽGå¥3ÿЛ™™±—ºÏÕø–.€Øgtò±Ò¸"#áeáåb€nŽás^øþ;Ò…ŒŒ—¾¯Iâë'Œ3÷à=ÞcäÁ*`KÒÉáÚ6r Þ7æpx ‰çììÌæ”ñzRÄ:x 22¼3¬‘÷ôÒù |8cßì+ïÙóɔܽ^ϲ¢ÑGÆ411¡ ›ÝnWÛÛÛj4„œÉdLÃO½<"ÛÛÛ€ËøX›d2i©N Ø}úô©r¹œYmÑ¢ûš™LÆ,¶HÀÖ××Õl6õäÉ5›M‹ÿ ˆz~~Þ®•ÏçÕjµl->|¨¥¥¥‘X©h4ªÅÅE[»ÇÛ¾!Pž˜Š™™‹sh4&ùY[[3¹O0Ô;ï¼£v»­ÙÙYår9+ìFuòh4ª©©)% Û…BA…BAÝnWZ^^Öúúº>|¨ƒƒ«b],-Å*…ååe=~üXýèGµ··§‘àfæ Z­*Ni'ƒqàúõëêv»ŠÅb¶7Xÿl6kD×ÉɉÒéôHaCdHý~ßöK2™Ôññ±Þyç]½zUëëë#Ðóù¼~è‡~Hÿí¿ý75 ýÞïýžêõºÝGƒÁÀb˜» mooëõ×_W¿žêí·ßÖK/½¤Ï}îsšÕÚÚš>÷¹Ïéƒü Úí¶¶··5 ”L&•N§µ²²¢­­-5›M¨×ëiaaa$ > i~~^½Þyý—Û·o[Šç‡* innΤa V_ X2™´ ñÃÃC›ž <ãgggíºx”؃i ÄZQåôôTµZÍŒápX½^ϼoxæŠÅ¢yüñ ù÷K§Ó1Ë·c»$5—í½h—äoií¡| €Ì¸€‡¶—Þº,É@=2¬OIÊ9é}€èr9Ÿtá’ zê½ãÁçÞ`†Ð§"ià"]òc‡$x‹5ž ¾ññ"Ot xÙ–}ÆÂ¹ð"Py÷5N œÇÇ6`É#¾€c! >æ†ù`Oà!ðD…㤠rÆ\1#ã³ !ýÂóÁzú˜O8X{b$$™~›¾1nˆ™ß[¬ ßc(~æ÷U·ÛU6›Õúúºnܸ¡ýý}½ýöÛæ‘¡:²t^îôôTÕju¤F£ÑÐ`0°Jä€Rî2\Õj5³3ÈzТC>'''U(F5;;«r¹¬Á` ­­-C¿^è0•J©Z­Zvªééi ÕëuE"  ¼ÇòŽä)›w¥Z­šÃß^ytt¤@  k×®©^¯+‘HhssÓ¼¤†œSOB"‘ÐÑÑ‘jµš¦§§uíÚ55›MÕëuƒA“GšdëÆ:9ùÿØ{“YÓì¬ÿ‰ˆc3r¸9Ü©îuWUwW·¡š nØ0ˆ ÔbdL‚E³2,ˆÅ ·l$¶, ŒÔ€dªÝí*U·ªòŽ9gÌsddÆø_¤~'ODÂþËåëê¯Tª{óFÆ÷}ï÷~ï÷<ç<Ï9—º¸¸06™\è÷ûªÕjúÉŸüIimmMËËËÖáœ,Àšk^\\T¡P°gbooOµZM‘HÄ*4Aº666T¯×­™ˆååe{ƺ·oßÖÑÑ‘5fL&“ ²R0Ô;w´¾¾®B¡`óF áððP'''¶?K2 >µ³³£……ëÒ»µZM?ñ?¡¿òWþŠ~ñQÿú_ÿkýÌÏüŒÖÖÖT­VõìÙ3}éK_Òo¼¡Gi}}ÝzgàÑ`mAéIóî»ïê/ÿå¿lU¢~ï÷~Ï´tèABÇÚ‡â÷öö¬·J¡PP©TR0T¥R1‰"¦oÿã¯Êçó:>>Öâ⢭éZ²Ñ+•JFVü{ƒÏÑ­›=a}}]ív[¥RÉ´LÓóçÏU*•t~~nå\}3:~†Ù˜RÂFCÍfS@ÀæwiiÉšúJMÜ#ª4ÑÛƒµ …”Íf­ì-2H|?ñ?asƒÇäµ×^Ó‡~hr,äž‘HD_üâµ¾¾nFìjµj^œB¡ ¿ðþ‚šÍ¦Êå²~÷wWý~_o¾ù¦U2k6›zã7‰D”Ëåì~Åb1íììèââB»»»6/KKKúè£T¯×uqqa 'ý~FÕëõ”Ëå¬+úÞÞž?~¬Û·o›—éîÝ»:??7ùÏ ™;öC²Æ»»»VLãG£QÅãqƒAmllX3Kö²jÞlO•·ÍÍM­¬¬(ëòòÒLñ«««FrWWWÕh4”Ëå ]7«Ç*—Ëj4úæ7¿©ÿ׫øuð^§zå÷ ëú2®m>~tÇ<òŠ"?d$Ý^žâÍÏDä|U@‘A4½€@Òl6…Ú´'ó IDAT‚éo=ið™ 2%8ú>ÕŠø~/±"B ø!õ4øf‹|¿'%H›¼ÄÊÉɺ÷€žï!ÁùH7•¥˜ Ÿñ> ,醘ñýhÕ!t˜’9__ÑË{7¸Ü+®Õge¼ŸâäûWL&3&óÒ(#—àÞx8ö22ßüŽ,Õmd0™ó{dÑVWW•ÉdLÒÕétôñÇëêêJÅbÑ rŸ©†FM‡÷A’Âá°>þøcõz=={öL{{{ªT*V– E^’øàÁ«´‰D x_]]éý÷ß·s;??7 Hx,ÓÚÚš¶¶¶ôâÅ ÆçççS½*¨ð…ç¦ßïëììÌÓABÈ:Õj5 0 ¯¢»z¹\V(t]𕉬wÌ뇇‡Z]]Õh4ÒÚÚšâñ¸®®®T©T´²²2Æ …‚™É¿þõ¯«Óéè7~ã7T«Õôÿá?Ôoÿöo«ÛíêÇüÇmß¾ÿ¾÷[·n)ë“O>Ñw¿û]ç¿þë¿®'Ož(N¡Úßß׃,ãñÉ'ŸX–`aaÁš8R!m8ªR©(“ÉèÛßþ¶²Ù¬–——Õh4”ÏçmŽÉt„B!}á _P¯×S±XÔŸù3ÆÌå|f2™¨P(hccCOž<±Àž'ž%ÖJ¯×³ûAP‚}˜,$šg•=‹€•ߨ¿Êå²âñ¸"‘ˆJ¥’îß¿oÁ§H$bŒF£¡££#ÛW¾ò•¯ü©ð€Ì3 óñysòŠöfèÙȪ$‹V†Ãᩬ ›/à@ºt¼‰òÀi ½<°‡PøÌÜWéâóÎÀñëAZ¨Å`ê¥Y^zD悹à˜lð¾ŠÇôÀ0ï%h>k©¢ ¹ò^þļø¹T£ë†,1ŸÌ;ÄÏguòdaì³~€8ž4Ñ^Ê„yB#iÊÄêÏPá#úÜ«X,fµö¹fîÍlQÈk†ï…ÐAþüÜò} 7Í1ýyq¯‰„•ÚüéŸþiíïïà ó‘H$4-2+]ËK¶¶¶Ôl6õèÑ#Åãqår9ËdœžžÚ\0ßtJO§ÓªÕjVIjeeÅ¢·¹\ÎîG©T2D¿†@ຟò®ããc{F£‘R©”‰„™ÎƒÁ ’ɤu0ç~"mAnÃÏ–––”L&‹ÅÔn·-0@æ£T*Ùg¯;SW*žžA¥2Ñx<ž’ÒàÁK²¿¿oÑì iuuÕúBàéV«ªV« …BV Šg¼×ëÙ=€,¼þúë:;;›“<¿ãñX‡‡‡æ=a­p ¬‹­­- % µZ-“Le³Y[kDлݮòƒ’ɤɷ˜·áp¨§OŸZPˆ Ëoþæo*™Lê÷ÿ÷Õn·5õ+¿ò+ŠÇãèßxã žžª^¯›”ÊVûûû ‡ÃÊf³–aÿFzûí·õo|C¿ñ¿¡/|á êëõºÊå²XFõðáCœœhooO™LF¯¿þºí'ív[ºwïž"‘ˆù(ªÕªT.—õÆo˜§£ÑhhwwWÕjUûûûÊd2F;Ž666ŒÔ“¡!8€Oˆ}‡,Z»ÝV³ÙÔÎÎŽ†Ã¡ì(¸P©Ttqqa²Cü!kkkZYYÑÙÙ™¶··-H@fŽÌùææ¦I’ɤ§ä\/k|VdNjæã³sòŠÀ7?“Qðx6¥›ªÞsÁwzŸ Û÷ #òUŒAм—Ó²TÑ™õ°`šõ™áà ž59sLRüψŒcâåúkñÒØðûÌÄ2àÁùZ!^Ò4›àBy¿dÄgL|E2/õâ~#É!{ …,Âè3 €4މÀËž¼ÿÄM?ßÌÙ.¤3^èåq¬YoŠ'xZ Pœó¬÷Æ“~NŒp8¬ÃÃC E"+ËIÇo¢²TGº¼¼4 ÆsÇõñÇ›çÂû—0Œ·Z-+ošJ¥ (¹xûí·õþûï[¥Ÿx<®ÝÝ]öÈÈøP¡*•JÁ#2ÜjµT.—MZ‚¬D’eÈX¯×³2£¤t:m€"<]w¯–®Ë£r.xrºÝ®5 dSùŠŒ Ù½ÕÕU›€&ßd‰ãÆãqÛ|! ²:øîܹcD¡ÛíjkkË'''ê÷ûJ¥R” …Bøoß¾­l6«R©dd§P(X×uü?øt$©Óéh8ˆ‡d^^^ª^¯+ŸÏÛÏ_¼xae•———uqqaÏG»ÝÖ¿ý·ÿÖö¶D"¡ÿïÿ½²Ù¬I›(Õ‹Tн¯Ùl*ŸÏ[ á\.§ÍÍMýÂ/ü‚~é—~IwïÞÕ_ý«U¿ök¿¦t:­««+=þÜúµœœœØ}cýc„'Û„÷l0hggÇî÷þþ¾í?Ýn×À«ÕÒ‹/l¯€Hçóyë©dævöö|ö²¬‹££#ëDï^v˜Ïç5Ì Dq2#4˜„„P½Œg—Œ'R·“““)Ié|ÌÇ|ü¿Çœ€¼¢à©@Ž$ÉôóDæ$8C Í ðÇæNÜ’Ñ5K2y QJÿb }xö™f¼”I_RÕÿŸŸû¨:DÀW"òàp ðºfÀ1 ÿ’äw}„žl‚/Éü¡Ãàé³Q¾²Ó¬¾×ˈx{`ï‰ ÷BäKÔB*|v¤×ë™ïEÒT¥2Þ³>ï‘n*ÌxRÂ9Pè )õDÉ“C_`É}„TzÉ:–¦ .x2©‰F£J&“‡ºÿ¾Þ{ï=-,,èôôÔ Â„««++oŠWƒcäùþ/^ØóÂ\¬­­YV‰5ÂzLcœ&ºûÑGÙ\á“©V«Ö™ÈcX‡½^Ï*Ýùì$‡~¿¯z½n^$"ÊÝn×$2>OcN@^ÑX$‹ Ý4úó‘H馫8ŸÍʶÍ6|Õ(/Õñ ÐWcò^ ß1 ¨=À÷‘p@œZü™ëƒS]·gÍÉ>£ÀyH7 ÛGä!\È}ð+x߉7‹s ^Ó,ÝTÛ’4%•"êé¯Ïƒn@5R8î-À…R¼>ûÀà8:Op¸NŽÏÜøBü牜÷ðxò8K\¼'pE“8î7™¤YÉ󿉢4ÝBÙ°øóç;˜Ç ë™qxx¨L&£T*¥r¹lÇB2³³³£ÕÕU ;6^$?4™€ÇcË*r:ŽeX§=23u2™´Ê=årÙ¼ 4è…Ãa#HÁ`P±X̤AFÃÀu¹\V4Õx<6©¥K‰„iëYNG’Ì$F홣ñ¥Ï@qm˜«ãñ¸UK:??7éL<7@αvøì¾2¢á’,›ÃÚEf‰DLRò>¤N§£p8¬D"¡R©¤h4ªv»­|>o²ÂP(¤h4j2 ~·Z­Zð%‹@]\\Ô×¾ö5[ ü&Dþóù¼ÛóçÏuqq¡T*eÒKJÎ’ª×ëSYYö3Œøì¡­VKgggºÿ¾Eù‘²œœ¨Õjé+_ùŠõl9??W:V»ÝÖ| íímÅãq={öLãñuI\ ôñx\+++*—Ëæ³züø±ŽM>É´¿ÿþûÚÞÞÖ;w̼Ï{„lEGƒÒé´R©”Úí¶"‘ˆU®¢,1D-[u* žœâó 2LßÌÉù  Vð~"¬@  ÇÁ_]]5âN&söêêª...þoÝù˜ùðcN@^ÑáeI€1€›/׿pòôÀ…týäíâß9çPõR™ÙŸyŸ(øÈ&€Ýn®ƒóäÀ˸ø~€;‘X/ßäz…t½•.ù¼÷¶xÓ7¢xö@@YÁÂ|qmþ3œ—¿÷\ƒ'Ò YäsÜËYòyõ^îçíï$ãendÎíH3¤ú,1"£Æµrïýœû̇Ï~øõiñÍÆ¸‰DB‘HD'''¶V1`ŸŸŸ9‚|Eâ>…ÃaÓ¢Hñò7Îä#Þ<ô¢  %\ŠPõo¼(ð 0izÓ¨ú¨³>Šå#Ò^jã¿Çd¢Ä€ï§EúùNOvx 1|(³@žczB0­K²ë"ˆÇ#¢ê½3>SÁÏ!nÌ{2åçšóæ<}õ.ŸQñÙÈš@F@æßK•8/©ú4™“'¶€TŽ9ë·áó\? Ýg <\÷,±ƒ|øÏð_ü½¬ƒ×•Ñ𞾣ѨId|Å&$ÌÑUº\‡Ãa 3\®YO€Êûž¨¼äAþ¬4rÀâ>†É]("É"Û –®½)…BÁš'^^^šÔ‹s‘d šïáÿð=/X#\óx<6ï=C<‡³=uüïD)i£è†d˜/ëë³x‚Á R©”*•Šùax†}©gLä<û;;;æcét:zòä‰ùdR©”"‘ˆR©”òù¼¢Ñ¨ž?®~¿oÍoݺeAz½®N§c|2Ǭ]äl€a‚úè#Åb1­®®*‘HXGu2&ÃáPï¿ÿ¾úý¾¶¶¶¬L0Ô£GŒX¿óÎ;ZYYQ8¶¬>(H8’*Èz0Ôáá¡Ý+ö®áphÅh I†“wË‚2™ŒU6ãXd ý~εw:¥R)5 õz=žž*àÚÉÊÅb1óаoPPaqqѺ­#ǃ`°wóìŽÇcår9---©X,ªßï[Íù˜ùøÃ9yE‡ö ¯Ï'‚ì×l¾lâT9òä—Ŭ‰]º‰®Cnø<@{ö˜|FšöwQô™ŠYIЧ‘#…çš½@ì¥L€U°ù.¤#ëÓÎÝK€fÏÍ̉”z9š—îxp9›9""ìÁÇôY#þš‘RøócmøŒïÌßç#à|7€ùÓHȧ}óÊu{òã¯{–DPg‡—¿ùÌZ °q0;Qõl6kRÃõõuF‘HD»»»‡:99±>€â……ë~tã&£â+Oá¡j6›vž½^OãñØÈMØ€¶··U¯×­ì©—æ!W!+ q¡asþ¢ƒiÞÞáp¨z½®h4jÙ›X,fRªN§cÇG‡A!ãÉù×Þ¢þ±XÌLÛü …”L&%ÝdDF£‘™žñø3¬­ËËK­­­™Lr<¾)ð@Ä> )“É Çó¡X’¶¶¶¬ $œç=f<k{{Ûæ" issS/^¼Ðåå¥éÿ‘¶!ýÃÌOÏ_µZU½^×Ý»wmŸèt:F¼ðäñÌ—Ëe«(i*+S.—Íó9F.ÖétT­V•H$t||¬X,fþP(¤ÿóþÖÖÖ”Éd,Ë4-3‡M®Ê3 ¹#Às…—ɯ³Ñhd™Ÿ=[YY±óeÏÃÅÏ'“‰šÍ¦ÎÎÎ,€ÊËÐxæ...T,Ç•ÏçT¯×Üx"LÖ‰…¬V«e}e¨òF‘Ö”™fF"‘)™¦?Gžù~¿¯d2©N§cÇ FÊù;/‚qì«?ªcN@æã³sòŠ‚%MX¥÷l€/ @¡t£ýöÑìY+ÝTmxPî3³’!¾¢˜ž%^ªõ Ü{ f³@>›ãɘÿþ— Roâö¤Ê_³'>CäÓÏ÷?çÚ=É`Þˆb{ó7Çœ½ïœƒ~ÏJ”˜oO4<@45ï|ŽãûûÏñçâ ¢'+ äB~­ú{Éñ½”Œß÷^Àm*•2)W<7Ý=€šïY[[3pyN»ÝV±X´Þ"È[|6P’UÖAiÇÈ èñD`ˆ!¹R©(™Lª\.«ÙlšÞW€Cb@ô•’JÀb~ýû¬’7Sæ‰ ÿvyyi„ƒ{ÍP1Íߟ۷o›ÌˆŒ>l6«““órñPYËûŠðñYÊ“õa^È!‚@@©TJKKKÖ4pqqQ…BÁŽ °‡\E£QåóyµZ--,,èã?Ö—¿üe}å+_Ñþþ¾5]L&“ð‰„U=Ã$I©TJ±XLÅbÑ2ÿI ¯ ä«««J&“V”` {.},¨8Å@6ù ÷x8Z…7²=>Ó1 ÃC冸n·kÛü}‡Øø`7ªqAÌ!ûHÑB¡=gÀuµ7wò΀”‘J§Ó¶ö®®®¬ðÏšo¦é hsÞn·•Ífmdò-ŽiæÚÈ6Åb1ÛSÎÎÎô²Çg•™ùø,Æœ€¼¢0džëæ?€™¨€™ @×G½}f…—&Yj·cêóÅfdI^jÄ¿ù+/__ª0.iê<üuy ÍÏμd=¨öžþ,iÊÏwxÏ‹—KI7R%æÊ“î—yÍf™<ñY™Ùù‡¼øk÷÷€çIŸå{ˆ„Îf2¼tί^ð\/÷`ï³þønæ`9€xŽÏqdÖ|õ"äTápØªÝ ÛH&“ªÕjF0tëÖ-#cÝnWwïÞÕo¼¡ßû½ß³ˆ7‘Yº]ó| £á:?€˜`0hýAÈtÐÐgKWg_yˆrÙLF½^O•JÅ¢Þ¬¢åtófí! 3D‰Ó««+õû}#4¾,÷ÅÅ….Er]”ž…‘‰ÁLIT¢ÖT$‚hø©Ü{zŽxÙ¡³r/@0•çxN©¸1Ëf³* 6÷¬ö2*q…Ãamoo+™LZ$}2™èÅ‹Ö/òÃuP²•{He¨ñx¬d2©H$båˆíü3™Œƒnß¾m~<‹‹‹Öü’{ä½6O¸Éd2&s¢¯D¥V«issÓ@üþþ¾677•H$Ôn·õðáC›sæÔ¯ÑhdFx²dmjµš™æY?< ô»¡Ü.ë‡,C0x]>Bç×džðr^”¼%+Ç~¹¹¹©­­-‘‡ø,..Z¥2È’ÇD"¡X,¦gÏžYߎɚ$ E‰÷ 'd?ªcNjæã³sòŠ"öÀ?è‚Á "d¼\<¸ñßãÉŒ÷Pùe¸zòà}ü‡l‚hèlÖBº1Ž{c9àUº‘@ùL‰èÏFág¯o–\y —÷,xÉØ¬§Ãg8î¬wÃmŸà8G挌‹ïi Òû4f³Þô(÷4ïx¹Jý}â8™‚¿~Ž=‘c.üœAÒÈ`@^ þÿÌhä?£ÑH>Ôx|]!ªÑhhaaAétÚæäùóçÖ?€Þ­VK©TÊÖH³Ù´h9Y ž$O€|ȤìÕ,Áô  )Üg¶A`ø;»1ÍÇ×åZc±˜ùoNgªÊ¿—Ëå´²²¢óós ,..*‰¨Ýn[¦ó=×R*•¦2ŽÈ™˜äY7î=„ ’Æs²±±¡ããcžžš7Æ÷ÂãÁþ@„™u<ÿø&“‰™Úù@'s¬ž‚H$bU³f×=@¼ÛíNIµÈ0\]]éììÌJC–}–Š&†“ÉÄ<ø… afÏd2ŠD"F¨ëõº™»}‡û`08ÕÇ?ÒãÇÇ깿ƒÁ@­VK£ÑHÛÛÛj·Ûºuë–r¹œºÝ®jµšÉ B¡nß¾m=NÎÎÎT¯×ÍóÁ3 ±éõzÊf³&_ƒ|àsÂ[A¦™%Š+•Š‘EªQ‘1£ƒ=d.[³BæqccÃÈÕÃB¡IâX·<7T•ó¾“Z­fYÄT*eY¢\.g+D†5MSNÊ¿Ì1Ï€ÌÇçiÌ È+:xéû(ô¬ô†€è2õóyYú¥PÈw~ZUïðÀ N„É7ýó2#ISÚhŽ3 €¹|?Ñ9Ò賑®€ ÈöFkofäÌ?7?ÈefåL€?ÿH ˜sŸ¬½FzŸÍ p\À‘Ï„xÙ'pD?‘ñ¢f. Ÿ&­c^¼—†È4kJ’eÁ•™bˆ-¯V«šL&S’hVG# YwfÌÚd)- ˜ÇŸÁ39òk  YtâxT’%L{9!÷ÇWø‡¦ñçZèQ±²²bDƒ +kó:Ç&K1ûlBÚXwH´ <[DðÙ3:ŽU9‚Èr///uyy©££#;/öî9^Œ`0h$–9C¦Fqî/Ñ!ìq_úÒ—$IÍfS‘HDgggæËðR;I½ççÝnW…BÁ²<¨É6,,,XãG$aÏž=Ó`0P.—S¥R±NãçççV¤ *êääDÇÇÇ º¸¸°" *JRÍ-ŸÏ+“ÉèììÌö»««+jooÏädÂá°ŽŽŽÌR«Õ¬GÒ4ŸQ‚Ô…B!E"Õëu¥Ói»ŸTÅâ:(¯Ì>‚w„lE#X·»»»J§Ó¶ÆX{gH&“Fæc/óÙÇÅ1'5óñYŒ9yE€{ˆ8f#öDyáLy¡ó]>j.ÉÒñ ógª®z?/0^8D¡½æ˜È)ÀÅWƒòàÀ ð2)o²æû.>[á#ùèÐy‰‘ia>|Öòõs>âJ–‰šòÞÇÁùz]<ö¾Èóí«P}Zdl¶J$Žó×Ìïúì2–Y™Ƭ PôÞ/Eãz|¦ÀKÆü}ã<}TóêêÊ¢íÑhTÍfSï¼óޤk“ìââ¢Âá°ŠÅ¢éî}¶¹àºÙlš„ s9¹O€#|Þƒâ¥kkkÖ[°ÍzAÜ=?‡Éä¦zY²€€¿R©dæwp^Þèí¿ÛË] LdB¤YÌÏfH Q³²*Žã³Dæ}fà̹%äe‘Â7Ã9ðôÎ æšs€hð}ð{oçïåoÜGÈ‘lî>æ—h1Çù´ì‡¤šæµ)åO6 @€nÚ>²lD×¥›¾ >û4™\7ô½ƒjµšòù¼òù¼>ùä“yÙçˆÙúêêJétZÒu„ûìì̾¿\.›üÒéµÞ¾\.'Ij4zë­·tvv¦ÅÅE=yòDívÛÀ.׆þââÂú‰¤Óé) ‰D”Ëå ô×} üš0#yˆr‰º{ý| °ã{Ù’ÏlùÌ‘iJ”kggG÷îÝS½^W¯×39 Ï=$B¡¾ÿýï+¸6?þü‡äkd(… i%úLF®Ñh¨^¯[ÄýCº6ý///kaaÁ$KdMô0o™X,¦f³i¤…s§s;kV’êõº”Ïç­ZسgÏ´¾¾nÏI@ ~  WWWúÚ×¾¦h4ª>ø@FCµZMï½÷že¸¸g81]W¹b¯ÅË™"ƒ‚fiiIÇÇÇ’dþ(®?„—‚U*[‹H¬¸7t?/ V ²Â|çêêªö÷÷íÙ&F_ö¾“})›)bLiâxÀ°a Ì‹Ü{fðÃPÈË•8G鯰íÿ ¨À(ê%µ±±¡P(¤t:­Çk<«V«i4Yf #,@ð˜Édtrr¢O>ùDJ¥Rü02#•¢+5ç(£¤‚c§Ói½ùæ›z÷ÝwM¾‚„ƒ¦iétÚ®Ó‰X,fr%2Ì!s°¼¼lÙ*Öh«Õ2©×åå¥677-ƒòüùs#TwWVVt÷î]]]]éôôÔ|.hëyVŽ-Šï×A$KdÃø óH&ƒ9¢z`•g*‘HXùY®5—Ë©ÙlZ¤mµZU,³Œ™6ŽwëÖ-+¯û÷ïëôôT‰Dˆ–üsýþû†Jc>3J Ègý¸gívÛ2 ºíímèí·ß¶>%­VKétÚ"ø“ÉÄÅÙÙ™Ý/¼™LFÝn×`âs`æ9§À÷êôôTƒÁÀ2Pì×ø%8Äruûömó{ŒF#“OùLy<·w ÅضÛm»_ãñX_øÂtpp0•eôÑh¤l6«Á` ÓÓSóƒp~ý~_<ÐóçÏU©T4 ôñÇëáÇ–¢S<]ÐÉäóù©,üËŸ•kžU™ÏbÌ È+:Øä=8ä…ðd“õ‘':(òÙ6z"NSÀ“$«Lƒ6PC´ËK|øN?#«Â ˆïa aB;îÎDԼ̌ìÇ(s \÷Ä#*ê â¼h½·ÂGÑ%M•Š%:‡dÉ_/„‡¬ÇñÑY¾‹þ €f~€0Çœ'/+++VQÆK줂éw¶i„bvqqa>/LJzþü¹éÌ`†EvqzzjD’Ƚ^YYÑ—¾ô%ççç:::šZ;<°’¹¾¹ÜêêªÂá°jµš*•Š­ ˆôd2©½½=½÷Þ{ZYY1X,­4+$ó±«D¼kµš‘ ºR'â[¯×-ÂÊgñtà¯`®1ÐCØxnÈD½F'‡uïÞ=š¬…îÙápXõz}  ²©üD7oH“N§£p8¬T*¥Z­f÷­ÙlªT*‰B‹O¡æ¿r8ÊËÒ›)×x<¶¬Ð“'O”L&íú!~ñxÜö«Ñh¤ÝÝ]“çáÈårzòä‰€ŽŽŽlïaOà¹&ûº»»k™ü0áoݺe@o•Ä–Qz¢~çÎë;YDþGt~eeE{{{Öвßï«ÓéØs<”Ïç-Æ~:õá‡Úž€‚¼}r0(›ÍªZ­ ƒº{÷®*•ŠR©”y.hI¦2Àœ‹EµZ-år9åóyœœX…7_ÑêòòÒ|§§§&müñÿq½÷Þ{æa/¦Ï-„—= ÔîŢvwwÕívuûömu»]órƒÁ©Æ˜¼F£‘b±˜U›{úô©eG†‘ÌÃÃC“ò‘A%ó)ÉŠpÏæc>æã7æä>:MÄ’,`0DôÆË“H,οÀµ^Äßg= ®¬¬xç@€ yRIöÒâ…ϵù}¢ã€G"åþû½I›yð:k"·¾’’¿ÞÙÌßåØ €ãó\3sëM·œ¥Z½§„ùödË“N®‰Ï‘äEä|‘=p‰8#ûñÖ‚'f¬ 2hétÚ< Èá666ôüùs+“‹ÅL³¸¸¨T*eÒ½`0¨ƒƒµZ- ‡C“Áq,ÀRÀ%6)¯J¿îY P6›U¿ß×ÞÞžêõº™ƒñnäóymllXéRÈZ P"‘P¿ßW­VS§ÓѳgÏ”J¥,ëU©TÇõÚk¯i8êààÀHX(²¾‹‹‹F„õH²ª[@Àzƒxò»¹¹iÙ,ªM&•Ëee2{ …‚­@Ñúµµ5{nÈT´Ûm3Ûò,âÁ¡’”õõuu:õz=5 µZ-k¬‡¯¦V«Y'ΕL"~<k}}ÝÖâþþ¾Ég8‡õõuËp]\\†Œœ|çw”Ïçm¾¶¶¶,ˆá ƒygßÁÜí}o¾ù¦†Ã¡b±˜.//U­V-ËCu/®°¾¿¿¯Z­¦×_]ƒÁ@FÌ!fx<|õ1À{¯×ÓÅÅ…ŠÅ¢y …‚ÖÖÖŒl‘™ôÙ#I:99ÑÊÊŠnݺeäöòòRñxÜ<KKKªÕjVªiEÌkÑn·U.—¸Rv3y·ÛU«Õ2‰j42Å7›M{&ÿàþ@<ÐãÇ­:}n¨æå%O’´±±¡|>¯b±¨jµªh4jœ|>¯l6«çÏŸÛs U*•,˜ ŽÅbª×ëvϒɤí3ÕjUggg&C¢ˆ×%™L*‘HÑñ~Ê—5æùø<—ÿÄÌÇKDþÙXÚÌZˆÇãÊf³‡*—ËǺ{÷®^¼xaÙl6«f³i$*›Íš1{0(ŸÏ«×ëÙçÉl"£Bµ¶¶¦b±¨ÿõ¿þ—õ†à9FFÅÒívµ¶¶fD„`I»Ý¶¾_üâõÎ;ïLÉ: øb ‹=2—Ë©P(hqqQçççFîZ­–eø(M éÅb:99±æ‹ÈÜ$éÖ­[*‹æ-éõzj·ÛÖ êô’ð²?F#ݾ}Û²_NÇîÙææ¦¹íím ›H$¢R©¤\.§L&3Õ¨¶X,š7°Õjiww×ÖÝÒÒ’>þøcmoo[ðƒ~"ÈÇð@±–ð{¬®®Z_ü1µZÍ êÙlÖž'‚\Ex¯ ŒÅb:88ø£¼‚?WcN@æã³¡o}ë[ßzÙ'1rãüü\¿üË¿lÀÂWÔÐB(|%/Y"b ð™5Ûöû}ÓÞòršõF‘÷ݳ}Õiº) çÈÿ1v®R Ý€u²<=æ|³=i:“ÁïúëàxZ®Í_'?G:Æïú!l\£Ï$¼!“h­ÿÎR0++›ý^²üòáÏÏGؽ¡ŸëóÒä,@À|DDÉ}M¿{÷®¾ò•¯è»ßý®y’ƒÎÎÎ$Ý4Öƒü‹EI2ÂÌÜ"ï{O ™A"Öëõ,’Ûjµ cf¥ïþJ̧’U*•2@‡'„2¹˜o™¯Éd¢F£¡••mnn*ŸÏëââB­VËæ&‹iaaA¯¿þºeÔø²‹‹‹êt:¦e' E V$L¬ëíím…B!OEóóù¼®®®Ì IÌf³ö í_ZZR¡PP Ðùù¹É«þ q¤OÂÊÊŠZ­–í dG‘f¥Óie2“n±ÿ@fÉBî‡Ã›Fq’ÌpM°¹ IÞÒÒ’Ú?úè#ë¥Â:¥È†4›M½ív[KKK¶v=©ÇÊd2Ö%ÈRgŸ?H'Ù(žÍúúº‘Õ»wïªT*i<¾éšŽ·Œ†{I*—Ëúæ7¿©ÿûKø3¼×½÷ðsðŽ~×6?ºcžyE/~oR†$"‘àH7åg‰šc´lgA; ÀŸïóÒé†yÒ‚— ‚Áñx™20„ÎÊ€ü rÅKÀâ}+À(pž”§”dDÁ+^€2'\oìæïƒ—AbøwÀóF†h–,x@ÄË£|–Åg~øO#ƒÜS¾[ºößd2Ë‚qMœY(̼ÉßþíßÖ‚U£ºw­aà _’“X,f2ñâ⢺ݮöööttt¤‹‹ Åãq‹X"”dĆH(~ €|¹\6ç;UÕ&ƒ…îÞÏ;0ÖÃùù¹Ò€ëpuuUGGGSÐÉw¤É A$ÑÌ·ÛmU«Ue³Yïœk»Ý6Y²0¤ˆR¡hqqQívÛ¤Oì<[ô›@6Ç|P•h2™X¶‹5€QÜÝt:m×é÷‚ HϺݮîܹcz{¢ä‹h4j„§R©!%ÓÃóP÷ûD”g›¬{˸’¬*„ |“D$GöÏþY…B!U«U={ö̤¨Dè} ‡€@§Ó1©%ÒÄÁ``Y6Ï2•Óè·‘N§­ÀçGÓÎÛ·ok2™X¥V«©Ûíšðêêʲ]§§§–E„ü!;>>¶½™-Y!üiÌ7UË(~šõ~»F£¡D"¡P(dÏ9æg2™(›ÍêààÀ¾[¥R±kŽD"J§Ó‘dEhª9 ´¾¾®@ `Þúð†iV™ÉdT©T4Ôh4Ì+ó£:æùø,Æœ€¼¢à è$~=ˆŸL&¦É–4\ÉTðs¦ÏˆøÍ MÓK xÑt½‡ÄK5¼ÉÿòO^8O^:œ§'DÖ‘+ðo%¾ƒãŒxÑâ›ðçè#àÌìÄiÙ/i›õ¡xÏDÂû=<Ù˜½¯Þ õdŒcò}>+å׉¿^@,`’J5ôÖð®w{{Ûä(˜XS©”ÉþÖßú[úoÿí¿é?ø}7eZÃá°i¸9"±Ü«r¹l’*kݺuKápXggg¶†ÉE"mooëøøXWWWŠF£ªT*êõzÚÚÚ2àØaθOív[ÍfS‰DBÉdÒÈ0‹ð`\^^j4@# Ûï÷Õh4¬ü*×)ÉtóT‡’d¥G‘úÕ£ÑH§§§º}û¶€jµšUâ¡j€¯Ï~…B×=@"‘ˆ0"ÿ_Œû^rç;sú©ê5|±–¤›²×¬[H&ë~4Y%*äLÌ%`:N[IÕ`ðºë‹gìµ×^Ó`0P©T2£4òKŽ·¼¼¬\.gçDtˆð`0Ð;wlƒ–…"Ëا[øææ¦”Ïçõøñc“[~ôÑGæÿY^^V·Ûµè¿¶C”![½^OÅbQ[[[:::²9J$v\î ž†~Y²Ù¬][&“Ñéé©ÉÐØó9.¾:H ë9›Íš¿‚ç’*U¼ ȶð¬Hפ‰"ÙÕÕU{Î¥kï Y)JÿF"#È"ßKùb¼T쟤›HFuvv¦T*¥L&cÏ8×Ôl6ÕëõF­2.Šg¨x™Ã†æc>þ´9yE‡Þà-ÝÈ—Ð>jïå@TÄš•?!³‘n:^ór$úîýŸ˜=WŸZ øïà‘ñÒ OªxùJ]ÛKšÞÇÇÇJ&“ö»H˜8'È$çZ]]U.—³ªqÅbѪÒQl‰_ 0{k/Ï•ô0¤³†ñ·I²?C¾!{”SÆ Oà¹{˜••+áÌ}Ák5ó1¸1' ¯è`ƒ÷ŒYy ° órpîó¬t@èÉŸƒøxÀî3€t"é€eŽˆ& à>çíIˆtÓ+Ã,戟þ}ߢ֜3ÃgZ|Ä—sô×í%[Þ[±ù]/gã3^æÅ|øjW|§Ïùùã:š^:0|$üœD"»Ê®’YXX°Šao¼ñ†R©”~ÿ÷ß@3ÀPÜh4ôýï߈$&hO˜i†T0›l MæÈÐÐ!0DŸ„­­-ëˆ)ÍڢѨLú±b-x(­ë{»ðœáÀ„0ǪV«ŠD"v|@!ë˜cãà™ã˜<‡€zªLaXG‡,‡çx8ªZ­ZGi¤$þ8+++ŠÇãª×ë–ñóY8¤M¾šW»Ý6y~¿o¦þN§cU° ÆBæ•c“Ä”^­Vµµµeò›u:Ú:ÇãŠF£j6›ÚØØ0cq8ÖÁÁÆã±ÎÎÎ ¸ŸžžN5ôÄ'Ñív­#øÂ‚5ºFzúô©I±ypº¾¾®[·ni<[Ij²ÚÜÜÔÓ§O­ºûD3‰¨^¯Ûò„S=ë€rÕ”ìåwè™Òï÷Í´Ž¡œl+{ž‘f³iž @áþM&%“IU«UI×fm$¿CsC[’5&sC±ßL– E: ”ûö2í¬•^¯g쑎I²lï3æ¹û+Õ°*•ŠeÀ|N’p(—˺¼¼´L ëÍïû/sÌ3 óñysò /ƒò‘_~–ÿ¼ì @;+ò€Ú“/eòÒ,^VD÷~øÍÌKÑGèš\/6º‰Ìù,ÿ÷þï»ð™ ÿ;|Æ‚7n3_d-ü\3Ç\;ßïIÇñQN/˜0œßÁ½äü9¶ÏŠpx€4å~>¼< H$BŠ~>˜A2tçέ®®êþÏÿi #‹Ùçy±0Ñy{c½/ÓLŸ‰­­-žžjggGÇÇÇ:;;³Ïܾ}Û¢“ÞëÐï÷Í‹A)ëÿÑxzœìììh4ºîÀBF…ÁÉä‹R´KKKeõ=bÿ¾ ¦j4ô¾9(2°ååeÅãqÕj5“.ñLõz=%“IÅb1µZ-Õj5 ˆPÅŠè<Ò%ú€]€ðCRÈ2aÀ¦t* H üA2–¡PȲN?ÈŠÅ¢F£ëBÕjUOž<™ŠìrŽŽtvvf¿ë«AZ‰ì¯¬¬èììÌH“$›k€q4U"‘Ðêêªá‘"ÛK$zöì™ŽŽŽlߥjÔh429ëƒ{E'úl6kë¸Ýn›‡ éQ¯×³L’9®ž.^BésAV’L†ƒ$ãñuíX,f îY8V<7Ù>žeÈ ä!ŸÏ›\Š=ŽuÉT É–Ù>Óá³’¦=çì#þ>Óá³d.¾Ç—Úõ`Ÿï#›@”—ùð™?Ë“¹Ù ŸgOÒ>møM á%\~žip¿f Ÿá¼ýµ{/Çâ|}&Äg¢˜3"ß4¾CÞ3,B ¨XZZÒ“'OL¶(Cê3 trr¢­­-3òóf³©\.g™®ŠC“ÉÄHÑrÊóŽF#ó=p΀XšÁùjEôs€,--Y3[·ÛÕÕÕ•v¼———Êårf¦Äïòò²B´ï¾ìu0´,^ v»]+ K¥®R©dçvuue¥M1­ØÀ(IDATG£Qmoo«R©X•ªq˦HšÊJP͈ŒÏ Ä‚5á& ‚L޲»d-ØÖ××U*•ÌH½²²b%qý~PˆcšÇHœÏçÕét,‹Ä3JŸö2 µZMçççVy ý>žæ¿ •Çh4 …¬Ò¤žÆ‹d”أѨîܹc@” €H»¨ØDCE|,<|‹‹‹*—Ë– "ñ¾¸¸ÐáááTæpíåƒìÉ=šÒ·‚LX 0¯Ž/ñLЯÅÕÕ•âñ¸’ɤêõº‘Ê~¿¯7ÞxCÅbÑ"+ãþã£aî‘yõû}#´Ìó0™\—Xîõz–-ä¹äß«%“IIR*•š ñŒBz!˜ìs+++ÚÙÙ™’uær9•Ëe¥Ói“ú˜¢M1Ö þ¬ù˜ùøÃ9yEÑq^î³™Y_—lx©`Чê=àeÅšÀÓY™è¶÷fyáðg¢Ã¾Äï,à&Kã=\¤"]’¦þ¨àÅèMݳ™?7Ô­÷^ ?þ̹pÝ^ÒÃËÒKѸ>OÀÈìx2é#È€ÿw²>þš©žåçÏûE¸næ2NUòZ^^¶HâÑÑ‘EׇáÚí¶R©”6yá{ Ž$’€Zä;“ÉD;;;ŠÅb–9;::Ò`0° :WWW:::2C. Žì¤IĘŒƒ_×ÈÁ0­’ý¬—J¥©ç­þ`0P¹\Ö—¿üekvHÿ žƒF£1%çc-@äÀÉdÒ@£–(  -ÊΚ ‡ÃÖᚮ۔3f½q‡Ã¡Uàòr5ºys˜7²W@*ë¢ßï›Æžr¿DÞ°€Io§šœ¯,&ÉüeD˜œñx\ëëëªT*:991 𽸸0_Âh4R¡P˜êB‰VLØÜŠx@4U&“Q.—S<—t F}ñ ²f’LzØjµìúJ¥’oÖÞ!ò]±XlŠH°/„B!e³Y»Wæ} {€âÞjµ @ì9Oª[õû}mmmYˆ${$”σAe³YË8!ë♆Br‘o’¹à݋ʼnD¬ Y_]‘Œ1òK*§µÛí)90Ï8k€r¹ì!>äMéÒuigî5•Ì(èà=dìAQ¤œ·_·/sÌ3 óñysòŠŽá𦠞—I7À(Úh6c@ÀSº©Úä£äÞX@æEé Ñ^J%ÝTZòY~È—nAI7ÙŸ%àü=áñ„Šï#*ÍÏ^Ì a¾Çsÿ²óò'ˆÇ“d ÏÎÝËɼéÜ@‘`~×{B|Æg{ü}âß¼?„u9ô2.I¦ñfÍP&5‹éÑ£Gö{———Së ð À¸N„òáÇzúô©ùX§Édr x£Ñ–d±)Z*•L²¼¼¬ËËK‹øJúý¾...”N§M«> LGF•L&õèÑ£©¨¹/ÙIE$ÖX:V±XT Э[·T©TT­Vm]Ðqšg* Ù=$3á+Ñ"‹immÍHc½^7ÐÞl6-; ^÷!9==µ{²¹¹)IÈ}DÝ8À2Ï&ý6<`E!#pPäû|%.ž²8^"å³¥Þã¨ãy@8]WöŠÇãÙç~ ™b/..ì;R©””! x&È| ‚¨G"Ûƒ `T:{ë­·tzzjÕ«*•Š666T­VõüùsŸŸ[Á€8¤RLe4M5ƤÙ%Y4 øÙÀ0€@Ê=Èör€+¿(å%ëI äÄG…9OI&»!B7÷Ò#ŸÁ êeK³ÑgŽ˜•ñw€ èò‘"O ˜'¢|ÌÇðĈ—·'|·Ï”ù.>ϼB,8¾¿ ²,ÞtéÍÞ¼Ì=±[]]U:¶2–ÒMå3Íy“*ç„G!OE¼!WWW:??·(<4܉DBñx\ûûû­,—Ëj6›SÄ.ªÛíjkkK­VËÀ •w€²Ù¬!Gܯ……ëF…*úCÐÐ{˜¿X,¦·ÞzK=R8Ö;ï¼£ƒƒ½ùæ›j4Vn´Ûí*•Jpaîýúã¾-,\÷E¹ººÒúúº?~l†\~ŸëÁôÎ3hj6›vOg³”õèñüñL&óqPö”õæÛ4¼%xX×ìmDþ}i奥%­­­Iºö¡ $™dǤ‡D:‹Ùy‘…ð2Qî{$Q.—S¯×3 Ï…@ÙEÌûápX‰DÂÖ8²._ög’ý½ßï+N›¬ŠêqìÕÈ6ÉIJ0//{¼Œ ÈßøC?øÁôoþÍ¿Ñk¯½¦oûÛú¹Ÿû9ÇcýÜÏýÜgr>óñ£1æä³ª/_ àÜ@½NÛ^ÈD?ù3Q9þLäSßìyÌúØüˆâôÚi2¸{oË_¿ú/Ÿ ’~X¶â_ŽD½¤Š,Ñ`&™ŽçIQMÀ߉?w¾ß“ "·^–æï—¿¢Õ̽7¢‡çÜüZ`Þ(íÙívõæ›oêáǺ¼¼Ô‡~¨ïÿû©žT­V-êÉËÞ›Á×ÖÖ …,Ê”‹ûŠßÍ=º|tåFC’T(´¾¾®µµ5“nµÛmÓtc ä`ø^\\T:Öh4R>Ÿ×éé©‘Ün·kMÜïx4¸˜Ï?üðC‹äv»]ÅãqµÛmÕëu‹Nª|`†ˆ>køöíÛSþ2ñxܪZy@ I\XXPµZ5’J¤D"¡t:m=@| kÖY+žÀÄ ÀMó5À¶×ÃCúý¾’ɤÚí¶IxR©” …‚5ò$ãµI$VIˉ rNT> š)šsäØØØ°†ÉdR·oß6ßÅéé©ÎÎÎLŠÅ~À¼­¬¬èþýûº¸¸Ð|`àúéÓ§SÈ)‘rÈ+Y.žŒË’tÿþ}µZ-U*ƒ×å†ÉH2ÀTheež—µ½´´¤f³©õõuÛG‘žÄ yä“yã™÷Ò6IV ‚{Jö‚õÁ½‡ŒZ@‰Ázœ•·‘¡âyá;È,A@y/ÐÅœû ñ¦[}.—3Ð?K1‘³²¯û,óÚÚšÖÖÖT«Õ¬ %xÙŸù}4™LêôôTGGGJ&“¶~Éê¾jã·~ë·ô;¿ó;úÎw¾c¿øÿ¢õÿñ?ÖÏþì϶˜ù˜sòŠOû m÷U–üïxø;Úo/Ãò2$éÚØØjµ,â³&žðÂ}Å#Ή49/4ˆú|¢zÞÛà%RÓ›=áàœýùƉ¶úò¶¼œügùl×Àçg †÷‡pn^Ò剀hòòãÅ áòR7é¦ö=?ã8\;À‰F[tJ&‹å^¦ˆÎ¾ÿþûª×ëzóÍ7õî»ïJÒ”ñ“߉F£ÖÄm2™ø+‹ºÿ¾îÝ»§b±¨§OŸZÕ¡?ÿçÿ¼>úè#---iggGûûûB‰„¶P(¤ …B!“=Q6–ëØ$ ‹B©. ÊårÖˆíòòR‘HD_ýêWõÉ'Ÿ( *•JY§qHÆøZ­¦³³3%“IµZ-‹>-¥RûЧD’y#|u¸f³©F£aàx4º®¦EÄzssSÃáuÀ'QeîÂöööìü0QãÁ !ÃÐK&¢^¯ ör2À†y1x¶½ÍfSKKKÚÚÚR±XÔ‹/¬li$±òÉ /­è“UØØØ°õH¶éš—âÅãq---)“ÉØœÜ¾}[FCççç*—ËSdŸâ¹\N©TJ———Úßß7I¾ª¢‘Y¡È@¥RQ&“Q³Ù4i©h4:忪×ë¶^16g2[½^Ïš²>777•Íf­7À½V«Y¿ŠT*¥ÃÃCk$è»{BKÏžN§c„†ŠUOŸ>5¢„ôF}dÅZ­–âñøy¥ÿM»ÝV:6)ûh³Ù´àÙ&$bd~د"‘ˆöööôìÙ3+àÀÚcß÷Á Š7xV4Õx<¶²Ùjªw±†s¹œI%—––Ôjµ´½½mɺݮ헃ÁÀÊ[F×ý`ާü/{üIg@þËù/ŠÅbú™Ÿù™©Ÿÿ½¿÷÷ôó?ÿóúÞ÷¾§?÷çþÜgrNóñùsòŠßëÄ‹€è¥L€\6"^H¾‚'’¦$ND”½ÌÊK^¼ ï%JTY¤á¸“‘@†¨ñ¾L´ÞT øçX>²æ Þ|'/ÂD"aõ÷gɃt#¯ò¤Ï›â}D™c~ Ì-÷„cy påß™²+^{aò÷‚¨#ÕžˆÙ†¨Ò=ÙÀùñãÇS§jµªr¹lµû¥)VWWõÖ[oéöíÛzï½÷´µµ¥ •J%Õëu¥Óimllè£>R<W:¶ï:==5sq½^W«Õ²J7ø= ­x5€J¥’<———ªÕjÖ€, šÁ™ˆ3ÄÄGÊÆÔšCòôðáC-..êôôTý~_ÕjU½^O;;;SÚx*Yq߸GÍfSÙlÖ½:$YDù >€ÑhdfâL&£F£¡d2©««+‹E»'ÅbÑ¢æDž»ÅÅEËš0×ÛÛÛjµZ&ÂCryy©µµ5«hÆ3D6ó°7¸‡Cår9Çcåóy#‚>³È51O˜ÁiÖ·¶¶fÙ#ßPp›H$l ôû}œœ¨Ñh¨\.k<«X,* AÀÇc“õ@ÆÊ岒ɤU#ãa—®Áíƒtttd{$ Ï UÝÈð}üñÇŠÅbJ§ÓVŒg`Ï zö왢Ѩ‘,:Ó³/ŸŸ[T8¶ì ç‰D”N§U«ÕL¶yÀ‚9÷ÂÆ3ÅzD"V}Šì{û™/éÍš<;;³ìË`0ÐW¿úU}ðÁÖ ˆ}+“ɨ×ë)•JÙ¦›9ÙMöÖèÅÅ…ùÆ‚Á ªÕªõoÙØØ0 (Ïøîî®^ýu}÷»ßÕh4²y£¯ÏñññT±Šp8¬““…B×=@&“‰õly•Ƈ~¨û±û¡ å›o¾)IzôèÑœ€ÌÇÿuÌ È+6x±Qµ„¨:$ƒá¥Dc‘;ýßä>Þèè3^¾å½¤ã}µ$¾Ûƒ}ÀÀGÄ "uuu5eGVÂð:^ošõßÁŸ½œŠˆç1™L,Š„Âg|fÅ“ÿ»þ|c'猙-5×Äß9&שÀøì–÷œðýôüð÷Ù4ßÌ#žÈž={6Ef˘“á°Þ|¶&ëääD?V.—ÓÿïÿÝšÈ-//ëw~çwìXOŸ>5‚‹êüüÜôÝD'É@*;•J%3¢B¡ëê:T :;;S±XT<W¿ß׋/¬±ÞJ#}°|uu¥T*¥¥¥%½öÚkúÞ÷¾§ýý}Ë. ‡C™Ü I Ï ÏÄÊÊŠÝ—@ `%vŸ={fä˜Ì>@P P«Õ2·´´dæø““‹ û,ÀÊ“ñ@ `fö 5›MËøÑÃk€¬ Cº©~—Ífµ´´d>/Bêíù@Á ï]XX¸.éÚl6Ͱ ˜k]ZZR£Ñ°‚DúÉ$‘ÙÞÞÖêꪶ··U¯×­“=‘ñ‹‹ U*“\áYÚØØÐ“'O‹ÅÌOR(ì\‘B !$»»»ªT*:>>Ö½{÷t~~n}@ÈÌÑw„kN&“*•J‡v½ÑhT•Jeª— Aü/WWW*•J¶_}I$:<<´µCu6ŸõU¥üû ^¯Û±ÄF°‚9 ‡ÃÖƒãy½^7£;×ÁÑl6õÉ'Ÿ¬×ëFÒ …‚.|¶}ggÇž®õþýû:88P0T©TR:6É&{þ§ããcÛûèÄþ@ÆÂB‚uǵ³³£Z­fþ(Þ/£¯÷Ÿ|VYOÕjU÷îÝû¡ŸÓ„Öûçc>fG`ò'¹Zçã¥oûÛú»÷ï¾ìÓ˜ù˜ù˜ùø‘¿ú«¿ª¿ówþΟè1ÿÃøúûÿïæÇyüø±îß¿oíµ×tïÞ=ýÖoýÖÔçÎÏϵµµ¥_üÅ_Ô?ý§ÿô3?¯ùø|Žyä?õS?¥_ýÕ_ÕÞÞži¯çc>æc>æc>æãÿÿ¸¼¼Ô‹/ôS?õSâÇþkí¯I’>|hRÍ?î‹Å¦È‡$e2™OÍrп(“É|&ç2?cž™ù˜ù˜ù˜ù˜?Òøæ7¿©ï|ç;Ö\•ñÿãÔÏÿüÏëw÷wõµ¯}í%žá|üióúhó1ó1ó1ó1óñGý¯ÿuu:ýçÿüŸ§~þ+¿ò+ÚÚÚÒÛo¿ý’Îl>>c.Ášù˜ù˜ù˜ù˜?ÒøéŸþiýäOþ¤þÁ?øjµZº{÷®¾óïè¿þ×ÿªoûÛSMoçc>fÇ\‚5ó1ó1ó1ó1äÑívõ/þſЯýÚ¯©V«éÇ~ìÇôÏÿù?×ßþÛûeŸÚ|ü)s Ö+2:Ž~á~A[[[Ö{á?ý§ÿô²Oës9:ŽþÉ?ù'úÆ7¾¡\.§`0¨õ¯þÕ§~öÝwßÕ_úKI±XL©TJóoþM½xñâS?ûïþÝ¿Óǵ²²¢;wîüíÝ[HTÝÆñßmfB¥w,ì0R†TEEÐE*˜”aÐE¤•Ùñ"è`BS£vQ]d††ÑA*£@ÇTPt>\t È2K²²0ïÅŸ6Í;öò‡×YÓä÷l­ÕfÍ3<±ÝK¶mÛôºÔ¾îÂ… ²hÑ"1b„ýJ×Ù³gË•+WBÖ’{ï¹}û¶äææJJJŠ8N‰‹‹“É“'KeeeÈZr¯Ùó3²G$ÄÅÅÉ®]»ì×ߺu‹òÿ¢O˜1c†z<Ý¿¿]ºt©Z–¥GމôÖ¢ÎóçÏõ¯¿þÒ¬¬,;GŸÏ²îÑ£Gš ™™™Z__¯Ç׌Œ õz½úöíÛ µ~¿_‡–””hSS“VTT¨ËåÒeË–™úX¿½üü|ÍÊÊÒ}ûöiSS“ÖÕÕiff¦öë×OìuäÞ»€®]»VkjjôÊ•+zþüy-,,T˲Ôï÷ÛëÈ=¼š››uÀ€êõz5!!!hŽìD HpæÌµ,Kkjj‚ÆsssÕëõê÷ïß#´³è×ÚÚúË’ŸŸ¯IIIúñãG{ìÅ‹êt:uÆ A÷p»ÝZTTô÷ËËËÕápèÇÃ÷¢HKKKÈXgg§&''kNNŽ=FîfLŸ>]‡nÿ™ÜÃkΜ9:oÞ<-((Ðøøø 9²mx«8qâ„$$$H~~~Ðxaa¡¼zõJ®_¿¡E?ýůPuuuÉéÓ§eÁ‚o>\²³³åĉöعsçäëׯRXXtÂÂBQU9yòdx6e’’’BÆ\.—¤§§Kss³ˆ»IÇþ™ÜÃëСCréÒ%Ù»woÈ¿9d Q@ú€û÷ïËèÑ£ƒÞÓ-"2nÜ8yðàA$¶õG{úô©tvvÊøñãCæÆ'Ož<‘oß¾‰Èÿ¾Ÿã?2dˆ 4ˆïç_´··Ë7dìØ±"BîᤪÒÕÕ%>|ªª*©¯¯—õë׋¹‡SKK‹¬[·NvìØ!Æ ™'{шÒ¼{÷NCÆŒõt’)þ›™þ*wU•÷ïßÛk].W'Ó{<¾Ÿ±råJùòå‹”””ˆ¹‡ÓŠ+ÄétJbb¢‰ßï—Õ«W‹¹‡ÓÊ•+e̘1RTTÔã<ÙˆFœ *•––Ê‘#GdÏž=2qâÄHoçWRR"Ë–-“ööv©««“M›6ɧOŸdëÖ­‘ÞÚëØ±crúôi¹sçN¤·½ŠÒ 8°ÇÿÙjkk³çÑ»~dú#㟵µµ‰eYö3ô”¯_¿Jgg§¸ÝîµS¦L ÿ†£ŒÏ瓲²2)//—ââb{œÜÃ'%%ERRRDD$;;[‡øý~Y¾|9¹‡AGG‡¬ZµJÖ¬Y#ƒ–>ˆˆØSµ··Kll,ÙˆJ<‚ÕŒ?^=z$ÝÝÝAã÷îÝ‘ŒŒŒHlë6räHéß¿¿Ü½{7dîÞ½{2jÔ(q:""ö³Ûÿ\ûúõky÷îßÏ?ø|>ûÚ¸qcй›3iÒ$éîî–—/_’{´¶¶Ê›7odçÎ’˜˜h_555òéÓ'ñx<²xñbIKK#{Q‡ÒÌŸ?_:::䨱cAãÕÕÕâõzeêÔ©ÚÙŸ+66VæÎ+Ç—ŽŽ{üåË—ÒØØ(yyyöجY³ÄívKuuuÐ=ª««Å²,™7ož©mÿö¶oß.>ŸO¶lÙ"¥¥¥!óänÎÅ‹%&&FÒÒÒÈ= †*쫱±QfΜ)n·[€øý~‰‰‰!{Ñ'B¯ÿ…a¹¹¹š˜˜¨•••ÚÐÐÀA„ÿÑÙ³gµ¶¶V<¨–eéÂ… µ¶¶VkkkõóçϪªúøñãKNNÖÖÖÖ û•••Ù‡ƒ­¨¨P·Û­Ë—/ÄÇû-íܹS-ËÒÙ³gëµk×ôêÕ«A×äÞ»Š‹‹uóæÍZWW§—/_ÖS§Né’%KÔ²¬ 3&ÈÝŒ%K–„œBö¢ ¤èèèеk×êСCÕåré„ ôèÑ£‘ÞVÔJMMU˲Բ,u8A?¿xñÂ^wóæMÍÉÉѸ¸80`€æååé³gÏz¼çîÝ»5==]].—¦¦¦ªÏçÓ®®.Sé·—••”õÏ—ÃáZKî½§ªªJ§M›¦GcbbÔãñhvv¶>|8d-¹‡_AAAÈIèªd ºXª¿8I z¿À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0†À c( Œ¡€0æo™=m½õªìIEND®B`‚pyepr-0.8.1/doc/index.txt000066400000000000000000000050031221261026300152650ustar00rootroot00000000000000================================= ENVISAT Product Reader Python API ================================= .. raw:: latex \listoffigures % \listoftables \clearpage :HomePage: http://avalentino.github.com/pyepr :Author: Antonio Valentino :Contact: antonio.valentino@tiscali.it :Copyright: 2011-2013, Antonio Valentino :Version: |release| .. only:: not latex Overview ======== PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int Documentation ============= .. toctree:: :maxdepth: 2 usermanual tutorials reference NEWS .. only:: not latex Other versions ============== Online documentation for other PyEpr_ versions: * `latest `_ development * `0.8.1 `_ (latest stable) * `0.8 `_ * `0.7.1 `_ * `0.7 `_ * `0.6.1 `_ * `0.6 `_ License ======= Copyright (C) 2011-2013 Antonio Valentino PyEPR 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. PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . .. _`GNU General Public License`: http://www.gnu.org/licenses/gpl-3.0.html pyepr-0.8.1/doc/interactive_use.txt000066400000000000000000000264631221261026300173640ustar00rootroot00000000000000Interactive use of PyEPR_ ------------------------- .. highlight:: ipython In this tutorial it is showed an example of how to use PyEPR_ interactively to open, browse and display data of an ENVISAT_ ASAR_ product. For the interactive session it is used the IPython_ interactive shell an started with the :option:`ipython -pylab` option to enable interactive plotting provided by the matplotlib_ package. The ASAR_ product used in this example is a `free sample`_ available at the ESA_ web site. .. _PyEPR: https://github.com/avalentino/pyepr .. _ENVISAT: http://envisat.esa.int .. _ASAR: http://envisat.esa.int/handbooks/asar .. _IPython: http://ipython.scipy.org/moin .. _matplotlib: http://matplotlib.sourceforge.net .. _`free sample`: http://earth.esa.int/services/sample_products/asar/IMP/ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1.gz .. _ESA: http://earth.esa.int :mod:`epr` module and classes ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ After starting the ipython shell with the following command: .. code-block:: sh $ ipython -pylab one can import the :mod:`epr` module and start start taking confidence with available classes and functions:: Python 2.6.6 (r266:84292, Sep 15 2010, 16:22:56) Type "copyright", "credits" or "license" for more information. IPython 0.10 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object'. ?object also works, ?? prints more. Welcome to pylab, a matplotlib-based Python environment. For more information, type 'help(pylab)'. In [1]: import epr In [2]: epr? Base Class: String Form: Namespace: Interactive File: /home/antonio/projects/pyepr/epr.so Docstring: Python bindings for ENVISAT Product Reader C API PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_ is fully object oriented and, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: http://avalentino.github.com/pyepr .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int In [3]: epr.__version__, epr.EPR_C_API_VERSION Out[3]: ('0.8.1', '2.3dev') Docstrings are available for almost all classes, methods and functions in the :mod:`epr` and they can be displayed using the :func:`help` python_ command or the ``?`` IPython_ shortcut as showed above. .. _python: http://www.python.org Also IPython_ provides a handy tab completion mechanism to automatically complete commands or to display available functions and classes:: In [4]: product = epr. [TAB] epr.Band epr.E_TID_STRING epr.DSD epr.E_TID_TIME epr.Dataset epr.E_TID_UCHAR epr.EPRError epr.E_TID_UINT epr.EPRTime epr.E_TID_UNKNOWN epr.EPRValueError epr.E_TID_USHORT epr.EPR_C_API_VERSION epr.EprObject epr.E_SMID_LIN epr.Field epr.E_SMID_LOG epr.Product epr.E_SMID_NON epr.Raster epr.E_SMOD_1OF1 epr.Record epr.E_SMOD_1OF2 epr.create_bitmask_raster epr.E_SMOD_2OF2 epr.create_raster epr.E_SMOD_2TOF epr.data_type_id_to_str epr.E_SMOD_3TOI epr.get_data_type_size epr.E_TID_CHAR epr.get_sample_model_name epr.E_TID_DOUBLE epr.get_scaling_method_name epr.E_TID_FLOAT epr.np epr.E_TID_INT epr.open epr.E_TID_SHORT epr.so epr.E_TID_SPARE epr.sys :class:`epr.Product` navigation ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ The first thing to do is to use the :func:`epr.open` function to get an instance of the desired ENVISAT_ :class:`epr.Product`:: In [4]: product = epr.open(\ 'ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1') In [4]: product. product.bands product.get_mph product.close product.get_num_bands product.closed product.get_num_datasets product.datasets product.get_num_dsds product.file_path product.get_scene_height product.get_band product.get_scene_width product.get_band_at product.get_sph product.get_band_names product.id_string product.get_dataset product.meris_iodd_version product.get_dataset_at product.read_bitmask_raster product.get_dataset_names product.tot_size product.get_dsd_at In [5]: product.tot_size / 1024.**2 Out[5]: 132.01041889190674 In [6]: print(product) epr.Product(ASA_IMP_1PNUPA20060202_ ...) 7 datasets, 5 bands epr.Dataset(MDS1_SQ_ADS) 1 records epr.Dataset(MAIN_PROCESSING_PARAMS_ADS) 1 records epr.Dataset(DOP_CENTROID_COEFFS_ADS) 1 records epr.Dataset(SR_GR_ADS) 1 records epr.Dataset(CHIRP_PARAMS_ADS) 1 records epr.Dataset(GEOLOCATION_GRID_ADS) 11 records epr.Dataset(MDS1) 8192 records epr.Band(slant_range_time) of epr.Product(ASA_IMP_1PNUPA20060202_ ...) epr.Band(incident_angle) of epr.Product(ASA_IMP_1PNUPA20060202_ ...) epr.Band(latitude) of epr.Product(ASA_IMP_1PNUPA20060202 ...) epr.Band(longitude) of epr.Product(ASA_IMP_1PNUPA20060202 ...) epr.Band(proc_data) of epr.Product(ASA_IMP_1PNUPA20060202 ...) A short summary of product contents can be displayed simply printing the :class:`epr.Product` object as showed above. Being able to display contents of each object it is easy to keep browsing and get all desired information from the product:: In [7]: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') In [8]: dataset Out[8]: epr.Dataset(MAIN_PROCESSING_PARAMS_ADS) 1 records In [9]: record = dataset.[TAB] dataset.create_record dataset.get_dsd_name dataset.product dataset.description dataset.get_name dataset.read_record dataset.get_dsd dataset.get_num_records dataset.records In [9]: record = dataset.read_record(0) In [10]: record Out[10]: 220 fields In [11]: record.get_field_names()[:20] Out[11]: ['first_zero_doppler_time', 'attach_flag', 'last_zero_doppler_time', 'work_order_id', 'time_diff', 'swath_id', 'range_spacing', 'azimuth_spacing', 'line_time_interval', 'num_output_lines', 'num_samples_per_line', 'data_type', 'spare_1', 'data_analysis_flag', 'ant_elev_corr_flag', 'chirp_extract_flag', 'srgr_flag', 'dop_cen_flag', 'dop_amb_flag', 'range_spread_comp_flag'] In [12]: field = record.get_field('range_spacing') In [13]: field.get [TAB] field.get_description field.get_name field.get_unit field.get_elem field.get_num_elems field.get_elems field.get_type In [13]: field.get_description() Out[13]: 'Range sample spacing' In [14]: epr.data_type_id_to_str(field.get_type()) Out[14]: 'float' In [15]: field.get_num_elems() Out[15]: 1 In [16]: field.get_unit() Out[16]: 'm' In [17]: print(field) range_spacing = 12.500000 Iterating over :mod:`epr` objects ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :class:`epr.Record` objects are also iterable_ so one can write code like the following:: In [18]: for field in record: if field.get_num_elems() == 4: print('%s: %d elements' % (field.get_name(), len(field))) ....: nominal_chirp.1.nom_chirp_amp: 4 elements nominal_chirp.1.nom_chirp_phs: 4 elements nominal_chirp.2.nom_chirp_amp: 4 elements nominal_chirp.2.nom_chirp_phs: 4 elements nominal_chirp.3.nom_chirp_amp: 4 elements nominal_chirp.3.nom_chirp_phs: 4 elements nominal_chirp.4.nom_chirp_amp: 4 elements nominal_chirp.4.nom_chirp_phs: 4 elements nominal_chirp.5.nom_chirp_amp: 4 elements nominal_chirp.5.nom_chirp_phs: 4 elements beam_merge_sl_range: 4 elements beam_merge_alg_param: 4 elements Image data ~~~~~~~~~~ Dealing with image data is simple as well:: In [19]: product.get_band_names() Out[19]: ['slant_range_time', 'incident_angle', 'latitude', 'longitude', 'proc_data'] In [19]: band = product.get_band('proc_data') In [20]: data = band. [TAB] band.bm_expr band.read_raster band.create_compatible_raster band.sample_model band.data_type band.scaling_factor band.description band.scaling_method band.get_name band.scaling_offset band.lines_mirrored band.spectr_band_index band.product band.unit band.read_as_array In [20]: data = band.read_as_array(1000, 1000, xoffset=100, \ yoffset=6500, xstep=2, ystep=2) In [21]: data Out[21]: array([[ 146., 153., 134., ..., 51., 55., 72.], [ 198., 163., 146., ..., 26., 54., 57.], [ 127., 205., 105., ..., 64., 76., 61.], ..., [ 64., 78., 52., ..., 96., 176., 159.], [ 66., 41., 45., ..., 200., 153., 203.], [ 64., 71., 88., ..., 289., 182., 123.]], dtype=float32) In [22]: data.shape Out[22]: (500, 500) In [23]: imshow(data, cmap=cm.gray, vmin=0, vmax=1000) Out[23]: In [24]: title(band.description) Out[24]: In [25]: colorbar() Out[25]: .. figure:: images/ASA_IMP_crop.* :width: 100% Image data read from the "proc_data" band .. _iterable: http://docs.python.org/glossary.html#term-iterable Closing the epr.Product ~~~~~~~~~~~~~~~~~~~~~~~ Finally the :class:`epr.Product` can be closed using the :meth:`epr.Product.close` method:: In [26]: product.close() After a product is closed no more I/O operations can be performed on it. Any attempt to do it will raise a :exc:`ValueError`:: In [27]: product.tot_size / 1024.**2 ------------------------------------------------------------------------- ValueError Traceback (most recent call last) in () ----> 1 product.tot_size / 1024.**2 epr.so in epr.Product.tot_size.__get__ (src/epr.c:16534)() epr.so in epr.Product.check_closed_product (src/epr.c:16230)() ValueError: I/O operation on closed file At any time the user can check whenever a :class:`epr.Product` is closed or not using the :attr:`epr.Product.closed` property:: In [28]: product.closed Out[28]: True .. raw:: latex \clearpage pyepr-0.8.1/doc/make.bat000066400000000000000000000117201221261026300150250ustar00rootroot00000000000000@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . set I18NSPHINXOPTS=%SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. texinfo to make Texinfo files echo. gettext to make PO message catalogs echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PyEPR.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PyEPR.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "texinfo" ( %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo if errorlevel 1 exit /b 1 echo. echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. goto end ) if "%1" == "gettext" ( %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale if errorlevel 1 exit /b 1 echo. echo.Build finished. The message catalogs are in %BUILDDIR%/locale. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end pyepr-0.8.1/doc/ndvi_example.txt000066400000000000000000000120571221261026300166400ustar00rootroot00000000000000NDVI computation ---------------- This tutorial shows how to use PyEPR_ to open a MERIS_ L1B product, compute the *Normalized Difference Vegetation Index* (NDVI) and store it into a flat binary file. The example code (:download:`examples/write_ndvi.py`) is a direct translation of the C sample program `write_ndvi.c`_ bundled with the EPR API distribution. The program is invoked as follows: .. code-block:: sh $ python write_ndvi.py .. _PyEPR: https://github.com/avalentino/pyepr .. _MERIS: http://envisat.esa.int/handbooks/meris .. _`write_ndvi.c`: https://github.com/bcdev/epr-api/blob/master/src/examples/write_ndvi.c The code have been kept very simple and it consists in a single function (:func:`main`) that also performs a minimal command line arguments handling. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :linenos: The ENVISAT_ :class:`epr.Product` is opened using the :func:`epr.open` function. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 49 The name of the product is in the first argument of the program call. In order to keep the code simple no check is performed to ensure that the product is a valid L1B product. The NDVI is calculated using bands 6 and 8 (the names of these bands are "radiance_6" and "radiance_10"). :class:`epr.Band` objects are retrieved using the :meth:`epr.Product.get_band` method: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 51-56 *band1* and *band2* are used to read the calibrated radiances into the :class:`epr.Raster` objects that allow to access data matrices with the radiance values. Before reading data into the :class:`epr.Raster` objects they have to be instantiated specifying their size and data type in order to allow the library to allocate the correct amount of memory. For sake of simplicity :class:`epr.Raster` object are created with the same size of the whole product (with no sub-sampling) using the :meth:`epr.Band.create_compatible_raster` method of the :class:`epr.Band` class: .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 58-66 Then data are actually loaded into memory using the :meth:`epr.Band.read_raster` method. Since :class:`epr.Raster` objects have been defined to match the whole product, offset parameters are set to zero (data are read starting from specified offset): .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 68-76 .. note:: in this simplified example it is assumed that there is enough system memory to hold the two :class:`epr.Raster` objects. After opening (in binary mode) the stream for the output .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 78-80 the program simply loops over all pixel and calculate the NDVI with the following formula: .. math:: NDVI = \frac{radiance_{10} - radiance_8}{radiance_{10} + radiance_8} .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 82-95 This part of the code tries to mimic closely the original C code (`write_ndvi.c`_) .. code-block:: c out_stream = fopen(argv[2], "wb"); for (j = 0; j < height; ++j) { for (i = 0; i < width; ++i) { rad1 = epr_get_pixel_as_float(raster1, i, j); rad2 = epr_get_pixel_as_float(raster2, i, j); if ((rad1 + rad2) != 0.0) { ndvi = (rad2 - rad1) / (rad2 + rad1); } else { ndvi = -1.0; } status = fwrite( & ndvi, sizeof(float), 1, out_stream); } } epr_log_message(e_log_info, "ndvi was written success"); and uses the :meth:`epr.Raster.get_pixel` method to access pixel values and perform computation. The Python_ :func:`struct.pack` function together with :meth:`file.write` is used to write the NDVI of the pixel n the file in binary format. .. raw:: latex \fvset{fontsize=\footnotesize} .. literalinclude:: examples/write_ndvi.py :lines: 94 .. note:: the entire solution is quite not pythonic_. As an alternative implementation it could be used the :class:`numpy.ndarray` interface of :class:`epr.Raster` objects available via the :data:`epr.Raster.data` property. The NDVI index is computed on all pixels altogether using vectorized expressions:: # Initialize the entire matrix to -1 ndvi = numpy.zeros((height, width), 'float32') - 1 aux = raster2.data + raster1.data # indexes of pixel with non null denominator idx = numpy.where(aux != 0) # actual NDVI computation ndvi[idx] = (raster2.data[idx] - raster1.data[idx]) / aux[idx] Finally data can be saved to file simply using the :meth:`numpy.ndarray.tofile` method:: ndvi.tofile(out_stream) .. _ENVISAT: http://envisat.esa.int .. _Python: http://www.python.org .. _pythonic: http://www.cafepy.com/article/be_pythonic pyepr-0.8.1/doc/pydoctheme/000077500000000000000000000000001221261026300155605ustar00rootroot00000000000000pyepr-0.8.1/doc/pydoctheme/LICENSE000066400000000000000000000350671221261026300166000ustar00rootroot00000000000000A. HISTORY OF THE SOFTWARE ========================== Python was created in the early 1990s by Guido van Rossum at Stichting Mathematisch Centrum (CWI, see http://www.cwi.nl) in the Netherlands as a successor of a language called ABC. Guido remains Python's principal author, although it includes many contributions from others. In 1995, Guido continued his work on Python at the Corporation for National Research Initiatives (CNRI, see http://www.cnri.reston.va.us) in Reston, Virginia where he released several versions of the software. In May 2000, Guido and the Python core development team moved to BeOpen.com to form the BeOpen PythonLabs team. In October of the same year, the PythonLabs team moved to Digital Creations (now Zope Corporation, see http://www.zope.com). In 2001, the Python Software Foundation (PSF, see http://www.python.org/psf/) was formed, a non-profit organization created specifically to own Python-related Intellectual Property. Zope Corporation is a sponsoring member of the PSF. All Python releases are Open Source (see http://www.opensource.org for the Open Source Definition). Historically, most, but not all, Python releases have also been GPL-compatible; the table below summarizes the various releases. Release Derived Year Owner GPL- from compatible? (1) 0.9.0 thru 1.2 1991-1995 CWI yes 1.3 thru 1.5.2 1.2 1995-1999 CNRI yes 1.6 1.5.2 2000 CNRI no 2.0 1.6 2000 BeOpen.com no 1.6.1 1.6 2001 CNRI yes (2) 2.1 2.0+1.6.1 2001 PSF no 2.0.1 2.0+1.6.1 2001 PSF yes 2.1.1 2.1+2.0.1 2001 PSF yes 2.2 2.1.1 2001 PSF yes 2.1.2 2.1.1 2002 PSF yes 2.1.3 2.1.2 2002 PSF yes 2.2.1 2.2 2002 PSF yes 2.2.2 2.2.1 2002 PSF yes 2.2.3 2.2.2 2003 PSF yes 2.3 2.2.2 2002-2003 PSF yes 2.3.1 2.3 2002-2003 PSF yes 2.3.2 2.3.1 2002-2003 PSF yes 2.3.3 2.3.2 2002-2003 PSF yes 2.3.4 2.3.3 2004 PSF yes 2.3.5 2.3.4 2005 PSF yes 2.4 2.3 2004 PSF yes 2.4.1 2.4 2005 PSF yes 2.4.2 2.4.1 2005 PSF yes 2.4.3 2.4.2 2006 PSF yes 2.4.4 2.4.3 2006 PSF yes 2.5 2.4 2006 PSF yes 2.5.1 2.5 2007 PSF yes 2.5.2 2.5.1 2008 PSF yes 2.5.3 2.5.2 2008 PSF yes 2.6 2.5 2008 PSF yes 2.6.1 2.6 2008 PSF yes 2.6.2 2.6.1 2009 PSF yes 2.6.3 2.6.2 2009 PSF yes 2.6.4 2.6.3 2009 PSF yes 2.6.5 2.6.4 2010 PSF yes 3.0 2.6 2008 PSF yes 3.0.1 3.0 2009 PSF yes 3.1 3.0.1 2009 PSF yes 3.1.1 3.1 2009 PSF yes 3.1.2 3.1.1 2010 PSF yes 3.1.3 3.1.2 2010 PSF yes 3.1.4 3.1.3 2011 PSF yes 3.2 3.1 2011 PSF yes 3.2.1 3.2 2011 PSF yes 3.2.2 3.2.1 2011 PSF yes 3.2.3 3.2.2 2012 PSF yes 3.3.0 3.2 2012 PSF yes Footnotes: (1) GPL-compatible doesn't mean that we're distributing Python under the GPL. All Python licenses, unlike the GPL, let you distribute a modified version without making your changes open source. The GPL-compatible licenses make it possible to combine Python with other software that is released under the GPL; the others don't. (2) According to Richard Stallman, 1.6.1 is not GPL-compatible, because its license has a choice of law clause. According to CNRI, however, Stallman's lawyer has told CNRI's lawyer that 1.6.1 is "not incompatible" with the GPL. Thanks to the many outside volunteers who have worked under Guido's direction to make these releases possible. B. TERMS AND CONDITIONS FOR ACCESSING OR OTHERWISE USING PYTHON =============================================================== PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2 -------------------------------------------- 1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and the Individual or Organization ("Licensee") accessing and otherwise using this software ("Python") in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, PSF hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python alone or in any derivative version, provided, however, that PSF's License Agreement and PSF's notice of copyright, i.e., "Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Python Software Foundation; All Rights Reserved" are retained in Python alone or in any derivative version prepared by Licensee. 3. In the event Licensee prepares a derivative work that is based on or incorporates Python or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python. 4. PSF is making Python available to Licensee on an "AS IS" basis. PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between PSF and Licensee. This License Agreement does not grant permission to use PSF trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By copying, installing or otherwise using Python, Licensee agrees to be bound by the terms and conditions of this License Agreement. BEOPEN.COM LICENSE AGREEMENT FOR PYTHON 2.0 ------------------------------------------- BEOPEN PYTHON OPEN SOURCE LICENSE AGREEMENT VERSION 1 1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at 160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization ("Licensee") accessing and otherwise using this software in source or binary form and its associated documentation ("the Software"). 2. Subject to the terms and conditions of this BeOpen Python License Agreement, BeOpen hereby grants Licensee a non-exclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use the Software alone or in any derivative version, provided, however, that the BeOpen Python License is retained in the Software, alone or in any derivative version prepared by Licensee. 3. BeOpen is making the Software available to Licensee on an "AS IS" basis. BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 4. BEOPEN SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF THE SOFTWARE FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THE SOFTWARE, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 5. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 6. This License Agreement shall be governed by and interpreted in all respects by the law of the State of California, excluding conflict of law provisions. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between BeOpen and Licensee. This License Agreement does not grant permission to use BeOpen trademarks or trade names in a trademark sense to endorse or promote products or services of Licensee, or any third party. As an exception, the "BeOpen Python" logos available at http://www.pythonlabs.com/logos.html may be used according to the permissions granted on that web page. 7. By copying, installing or otherwise using the software, Licensee agrees to be bound by the terms and conditions of this License Agreement. CNRI LICENSE AGREEMENT FOR PYTHON 1.6.1 --------------------------------------- 1. This LICENSE AGREEMENT is between the Corporation for National Research Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191 ("CNRI"), and the Individual or Organization ("Licensee") accessing and otherwise using Python 1.6.1 software in source or binary form and its associated documentation. 2. Subject to the terms and conditions of this License Agreement, CNRI hereby grants Licensee a nonexclusive, royalty-free, world-wide license to reproduce, analyze, test, perform and/or display publicly, prepare derivative works, distribute, and otherwise use Python 1.6.1 alone or in any derivative version, provided, however, that CNRI's License Agreement and CNRI's notice of copyright, i.e., "Copyright (c) 1995-2001 Corporation for National Research Initiatives; All Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version prepared by Licensee. Alternately, in lieu of CNRI's License Agreement, Licensee may substitute the following text (omitting the quotes): "Python 1.6.1 is made available subject to the terms and conditions in CNRI's License Agreement. This Agreement together with Python 1.6.1 may be located on the Internet using the following unique, persistent identifier (known as a handle): 1895.22/1013. This Agreement may also be obtained from a proxy server on the Internet using the following URL: http://hdl.handle.net/1895.22/1013". 3. In the event Licensee prepares a derivative work that is based on or incorporates Python 1.6.1 or any part thereof, and wants to make the derivative work available to others as provided herein, then Licensee hereby agrees to include in any such work a brief summary of the changes made to Python 1.6.1. 4. CNRI is making Python 1.6.1 available to Licensee on an "AS IS" basis. CNRI MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, CNRI MAKES NO AND DISCLAIMS ANY REPRESENTATION OR WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF PYTHON 1.6.1 WILL NOT INFRINGE ANY THIRD PARTY RIGHTS. 5. CNRI SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON 1.6.1 FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON 1.6.1, OR ANY DERIVATIVE THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF. 6. This License Agreement will automatically terminate upon a material breach of its terms and conditions. 7. This License Agreement shall be governed by the federal intellectual property law of the United States, including without limitation the federal copyright law, and, to the extent such U.S. federal law does not apply, by the law of the Commonwealth of Virginia, excluding Virginia's conflict of law provisions. Notwithstanding the foregoing, with regard to derivative works based on Python 1.6.1 that incorporate non-separable material that was previously distributed under the GNU General Public License (GPL), the law of the Commonwealth of Virginia shall govern this License Agreement only as to issues arising under or with respect to Paragraphs 4, 5, and 7 of this License Agreement. Nothing in this License Agreement shall be deemed to create any relationship of agency, partnership, or joint venture between CNRI and Licensee. This License Agreement does not grant permission to use CNRI trademarks or trade name in a trademark sense to endorse or promote products or services of Licensee, or any third party. 8. By clicking on the "ACCEPT" button where indicated, or by copying, installing or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and conditions of this License Agreement. ACCEPT CWI LICENSE AGREEMENT FOR PYTHON 0.9.0 THROUGH 1.2 -------------------------------------------------- Copyright (c) 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The Netherlands. All rights reserved. Permission to use, copy, modify, and distribute this software and its documentation for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation, and that the name of Stichting Mathematisch Centrum or CWI not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL STICHTING MATHEMATISCH CENTRUM BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. pyepr-0.8.1/doc/pydoctheme/static/000077500000000000000000000000001221261026300170475ustar00rootroot00000000000000pyepr-0.8.1/doc/pydoctheme/static/pydoctheme.css000066400000000000000000000050451221261026300217260ustar00rootroot00000000000000@import url("default.css"); body { background-color: white; margin-left: 1em; margin-right: 1em; } div.related { margin-bottom: 1.2em; padding: 0.5em 0; border-top: 1px solid #ccc; margin-top: 0.5em; } div.related a:hover { color: #0095C4; } div.related:first-child { border-top: 0; border-bottom: 1px solid #ccc; } div.sphinxsidebar { background-color: #eeeeee; border-radius: 5px; line-height: 130%; font-size: smaller; } div.sphinxsidebar h3, div.sphinxsidebar h4 { margin-top: 1.5em; } div.sphinxsidebarwrapper > h3:first-child { margin-top: 0.2em; } div.sphinxsidebarwrapper > ul > li > ul > li { margin-bottom: 0.4em; } div.sphinxsidebar a:hover { color: #0095C4; } div.sphinxsidebar input { font-family: 'Lucida Grande',Arial,sans-serif; border: 1px solid #999999; font-size: smaller; border-radius: 3px; } div.sphinxsidebar input[type=text] { max-width: 150px; } div.body { padding: 0 0 0 1.2em; } div.body p { line-height: 140%; } div.body h1, div.body h2, div.body h3, div.body h4, div.body h5, div.body h6 { margin: 0; border: 0; padding: 0.3em 0; } div.body hr { border: 0; background-color: #ccc; height: 1px; } div.body pre { border-radius: 3px; border: 1px solid #ac9; } div.body div.admonition, div.body div.impl-detail { border-radius: 3px; } div.body div.impl-detail > p { margin: 0; } div.body div.seealso { border: 1px solid #dddd66; } div.body a { color: #00608f; } div.body a:visited { color: #30306f; } div.body a:hover { color: #00B0E4; } tt, pre { font-family: monospace, sans-serif; font-size: 96.5%; } div.body tt { border-radius: 3px; } div.body tt.descname { font-size: 120%; } div.body tt.xref, div.body a tt { font-weight: normal; } p.deprecated { border-radius: 3px; } table.docutils { border: 1px solid #ddd; min-width: 20%; border-radius: 3px; margin-top: 10px; margin-bottom: 10px; } table.docutils td, table.docutils th { border: 1px solid #ddd !important; border-radius: 3px; } table p, table li { text-align: left !important; } table.docutils th { background-color: #eee; padding: 0.3em 0.5em; } table.docutils td { background-color: white; padding: 0.3em 0.5em; } table.footnote, table.footnote td { border: 0 !important; } div.footer { line-height: 150%; margin-top: -2em; text-align: right; width: auto; margin-right: 10px; } div.footer a:hover { color: #0095C4; } pyepr-0.8.1/doc/pydoctheme/static/sidebar.js000066400000000000000000000114661221261026300210260ustar00rootroot00000000000000/* * sidebar.js * ~~~~~~~~~~ * * This script makes the Sphinx sidebar collapsible. * * .sphinxsidebar contains .sphinxsidebarwrapper. This script adds in * .sphixsidebar, after .sphinxsidebarwrapper, the #sidebarbutton used to * collapse and expand the sidebar. * * When the sidebar is collapsed the .sphinxsidebarwrapper is hidden and the * width of the sidebar and the margin-left of the document are decreased. * When the sidebar is expanded the opposite happens. This script saves a * per-browser/per-session cookie used to remember the position of the sidebar * among the pages. Once the browser is closed the cookie is deleted and the * position reset to the default (expanded). * * :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. * :license: BSD, see LICENSE for details. * */ $(function() { // global elements used by the functions. // the 'sidebarbutton' element is defined as global after its // creation, in the add_sidebar_button function var bodywrapper = $('.bodywrapper'); var sidebar = $('.sphinxsidebar'); var sidebarwrapper = $('.sphinxsidebarwrapper'); // original margin-left of the bodywrapper and width of the sidebar // with the sidebar expanded var bw_margin_expanded = bodywrapper.css('margin-left'); var ssb_width_expanded = sidebar.width(); // margin-left of the bodywrapper and width of the sidebar // with the sidebar collapsed var bw_margin_collapsed = '.8em'; var ssb_width_collapsed = '.8em'; // colors used by the current theme var dark_color = '#AAAAAA'; var light_color = '#CCCCCC'; function sidebar_is_collapsed() { return sidebarwrapper.is(':not(:visible)'); } function toggle_sidebar() { if (sidebar_is_collapsed()) expand_sidebar(); else collapse_sidebar(); } function collapse_sidebar() { sidebarwrapper.hide(); sidebar.css('width', ssb_width_collapsed); bodywrapper.css('margin-left', bw_margin_collapsed); sidebarbutton.css({ 'margin-left': '0', 'height': bodywrapper.height(), 'border-radius': '5px' }); sidebarbutton.find('span').text('»'); sidebarbutton.attr('title', _('Expand sidebar')); document.cookie = 'sidebar=collapsed'; } function expand_sidebar() { bodywrapper.css('margin-left', bw_margin_expanded); sidebar.css('width', ssb_width_expanded); sidebarwrapper.show(); sidebarbutton.css({ 'margin-left': ssb_width_expanded-12, 'height': bodywrapper.height(), 'border-radius': '0 5px 5px 0' }); sidebarbutton.find('span').text('«'); sidebarbutton.attr('title', _('Collapse sidebar')); //sidebarwrapper.css({'padding-top': // Math.max(window.pageYOffset - sidebarwrapper.offset().top, 10)}); document.cookie = 'sidebar=expanded'; } function add_sidebar_button() { sidebarwrapper.css({ 'float': 'left', 'margin-right': '0', 'width': ssb_width_expanded - 28 }); // create the button sidebar.append( '

«
' ); var sidebarbutton = $('#sidebarbutton'); // find the height of the viewport to center the '<<' in the page var viewport_height; if (window.innerHeight) viewport_height = window.innerHeight; else viewport_height = $(window).height(); var sidebar_offset = sidebar.offset().top; var sidebar_height = Math.max(bodywrapper.height(), sidebar.height()); sidebarbutton.find('span').css({ 'display': 'block', 'position': 'fixed', 'top': Math.min(viewport_height/2, sidebar_height/2 + sidebar_offset) - 10 }); sidebarbutton.click(toggle_sidebar); sidebarbutton.attr('title', _('Collapse sidebar')); sidebarbutton.css({ 'border-radius': '0 5px 5px 0', 'color': '#444444', 'background-color': '#CCCCCC', 'font-size': '1.2em', 'cursor': 'pointer', 'height': sidebar_height, 'padding-top': '1px', 'padding-left': '1px', 'margin-left': ssb_width_expanded - 12 }); sidebarbutton.hover( function () { $(this).css('background-color', dark_color); }, function () { $(this).css('background-color', light_color); } ); } function set_position_from_cookie() { if (!document.cookie) return; var items = document.cookie.split(';'); for(var k=0; k the datatype remains unchanged. * ``uint8_t`` --> 8-bit unsigned integer * ``uint32_t`` --> 32-bit unsigned integer * ``Float`` --> 32-bit IEEE floating point .. attribute:: description A short description of the band's contents .. attribute:: lines_mirrored Mirrored lines flag If true (=1) lines will be mirrored (flipped) after read into a raster in order to ensure a pixel ordering in raster X direction from WEST to EAST. .. attribute:: product The :class:`Product` instance to which this band belongs to .. attribute:: sample_model The sample model operation The sample model operation applied to the source dataset for getting the correct samples from the MDS (for example MERIS L2). Possible values are: * ``*`` --> no operation (direct copy) * ``1OF2`` --> first byte of 2-byte interleaved MDS * ``2OF2`` --> second byte of 2-byte interleaved MDS * ``0123`` --> combine 3-bytes interleaved to 4-byte integer .. attribute:: scaling_factor The scaling factor Possible values are: * ``*`` --> no factor provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]`` --> value is provided in global annotation dataset with name `GADS` in field `field``. Optionally a second element index for multiple-element fields can be given too .. attribute:: scaling_method The scaling method which must be applied to the raw source data in order to get the 'real' pixel values in geo-physical units. Possible values are: * ``*`` --> no scaling applied * ``Linear_Scale`` --> linear scaling applied:: y = offset + scale * x * ``Log_Scale`` --> logarithmic scaling applied:: y = log10(offset + scale * x) .. attribute:: scaling_offset Possible values are: * ``*`` --> no offset provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]` --> value is provided in global annotation dataset with name ``GADS`` in field ``field``. Optionally a second element index for multiple-element fields can be given too .. attribute:: spectr_band_index The (zero-based) spectral band index -1 if this is not a spectral band .. attribute:: unit The geophysical unit for the band's pixel values .. rubric:: Methods .. method:: get_name Gets the name of the band .. method:: create_compatible_raster(src_width, src_height[, xstep, ystep]) Creates a raster which is compatible with the data type of the band The created raster is used to read the data in it (see :meth:`Band.read_raster`). The raster is defined on the grid of the product, from which the data are read. Spatial subsets and under-sampling are possible) through the parameter of the method. A raster is an object that allows direct access to data of a certain portion of the ENVISAT product that are read into the it. Such a portion is called the source. The complete ENVISAT product can be much greater than the source. One can move the raster over the complete ENVISAT product and read in turn different parts (always of the size of the source) of it into the raster. The source is specified by the parameters *height* and *width*. A typical example is a processing in blocks. Lets say, a block has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another example is a processing of complete image lines. Then, my source has a widths of the complete product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks read into the raster and process it. In addition, it is possible to defined a sub-sampling step for a raster. This means, that the source is not read 1:1 into the raster, but that only every 2nd or 3rd pixel is read. This step can be set differently for the across track (source_step_x) and along track (source_step_y) directions. :param src_width: the width (across track dimension) of the source to be read into the raster :param src_height: the height (along track dimension) of the source to be read into the raster :param xstep: the sub-sampling step across track of the source when reading into the raster. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the raster. Default: 1. :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. method:: read_raster([xoffset, yoffset, raster]) Reads (geo-)physical values of the band of the specified source-region The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param raster: :class:`Raster` instance set with appropriate parameters to read into. If not provided a new :class:`Raster` is instantiated :returns: the :class:`Raster` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster` and :func:`create_raster` .. rubric:: High level interface methods .. note:: the following methods are part of the *high level* Python API and do not have any correspondent function in the C API. .. method:: read_as_array([width, height, xoffset, yoffset, xstep, ystep]) Reads the specified source region as an :class:`numpy.ndarray` The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param src_width: the width (across track dimension) of the source to be read into the raster. If not provided reads as much as possible :param src_height: the height (along track dimension) of the source to be read into the raster, If not provided reads as much as possible :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region. Default 0. :param xstep: the sub-sampling step across track of the source when reading into the raster. Default: 1 :param ystep: the sub-sampling step along track of the source when reading into the raster. Default: 1 :returns: the :class:`numpy.ndarray` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster`, :func:`create_raster` and :meth:`Band.read_raster` .. rubric:: Special methods The :class:`Band` class provides a custom implementation of the following *special methods*: * __repr__ Raster ~~~~~~ .. class:: Raster Represents a raster in which data will be stored All 'size' parameter are in PIXEL. .. rubric:: Attributes .. attribute:: data_type The data type of the band's pixels All ``E_TID_*`` types are possible .. attribute:: source_height The height of the source .. attribute:: source_width The width of the source .. attribute:: source_step_x The sub-sampling for the across-track direction in pixel .. attribute:: source_step_y The sub-sampling for the along-track direction in pixel .. rubric:: High level interface attributes .. note:: the following attributess are part of the *high level* Python API and do not have a counterpart in the C API. .. attribute:: data Raster data exposed as :class:`numpy.ndarray` object .. note:: this property shares the data buffer with the :class:`Raster` object so any change in its contents is also reflected to the :class:`Raster` object .. note:: the :class:`Raster` objects do not have a field named *data* in the corresponding C structure. The *EPR_SRaster* C structure have a field named *buffer* that is a raw pointer to the data buffer and it is not exposed as such in the Python API. .. rubric:: Methods .. method:: get_pixel(x, y) Single pixel access This function is for getting the values of the elements of a raster (i.e. pixel) :param x: the (zero-based) X coordinate of the pixel :param y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given co-ordinate .. method:: get_elem_size The size in byte of a single element (sample) of this raster's buffer .. method:: get_height Gets the raster's height in pixels .. method:: get_width Gets the raster's width in pixels .. rubric:: Special methods The :class:`Raster` class provides a custom implementation of the following *special methods*: * __repr__ EPRTime ~~~~~~~ .. class:: EPRTime Convenience class for time data exchange. EPRTime is a :class:`collections.namedtuple` with the following fields: .. attribute:: days .. attribute:: seconds .. attribute:: microseconds Functions --------- .. function:: open(filename) Opens the ENVISAT product Opens the ENVISAT product file with the given file path, reads MPH, SPH and all DSDs, organized the table with parameter of line length and tie points number. :param product_file_path: the path to the ENVISAT product file :returns: the :class:`Product` instance representing the specified product. An exception (:exc:`exceptions.ValueError`) is raised if the file could not be opened. The :class:`Product` class supports context management so the recommended way to ensure that a product is actually closed as soon as a task is completed is to use the ``with`` statement:: with open('ASA_IMP_1PNUPA20060202_ ... _3110.N1') as product: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') record = dataset.read_record(0) print(record) .. seealso :class:`Product` .. function:: data_type_id_to_str Gets the 'C' data type string for the given data type .. function:: get_data_type_size Gets the size in bytes for an element of the given data type .. function:: get_sample_model_name Return the name of the specified sample model .. function:: get_scaling_method_name Return the name of the specified scaling method .. function:: create_raster(data_type, src_width, src_height[, xstep, ystep]) Creates a raster of the specified data type This function can be used to create any type of raster, e.g. for later use as a bit-mask. :param data_type: the type of the data to stored in the raster, must be one of E_TID_*. .. seealso:: `Data type Identifiers`_ :param src_width: the width (across track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param src_height: the height (along track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param xstep: the sub-sampling step across track of the source when reading into the raster. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the raster. Default: 1. :returns: the new :class:`Raster` instance .. seealso:: description of :meth:`Band.create_compatible_raster` .. function:: create_bitmask_raster(src_width, src_height[, xstep, ystep]) Creates a raster to be used for reading bitmasks The raster returned always is of type ``byte``. :param src_width: the width (across track dimension) of the source to be read into the raster :param src_height: the height (along track dimension) of the source to be read into the raster :param xstep: the sub-sampling step across track of the source when reading into the raster. Default: 1. :param ystep: the sub-sampling step along track of the source when reading into the raster. Default: 1. :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. seealso:: the description of :meth:`Band.create_compatible_raster` Exceptions ---------- EPRError ~~~~~~~~ .. exception:: EPRError EPR API error .. attribute:: code EPR API error code .. method:: __init__([message[, code, *args, **kwargs]]) Initializer :param message: error message :pram code: EPR error code EPRValueError ~~~~~~~~~~~~~ .. exception:: EPRValueError Inherits both :exc:`EPRError` and standard :exc:`exceptions.ValueError` Data ---- .. data:: __version__ Version string of PyEPR .. data:: __revision__ PyEPR revision (currently it is the same as :data:`__version__`) .. deprecated:: 7.2 .. data:: EPR_C_API_VERSION Version string of the wrapped `EPR API`_ C library Data type identifiers ~~~~~~~~~~~~~~~~~~~~~ .. data:: E_TID_UNKNOWN .. data:: E_TID_UCHAR .. data:: E_TID_CHAR .. data:: E_TID_USHORT .. data:: E_TID_SHORT .. data:: E_TID_UINT .. data:: E_TID_INT .. data:: E_TID_FLOAT .. data:: E_TID_DOUBLE .. data:: E_TID_STRING .. data:: E_TID_SPARE .. data:: E_TID_TIME Sample Models ~~~~~~~~~~~~~ .. data:: E_SMOD_1OF1 .. data:: E_SMOD_1OF2 .. data:: E_SMOD_2OF2 .. data:: E_SMOD_3TOI .. data:: E_SMOD_2TOF Scaling Methods ~~~~~~~~~~~~~~~ .. data:: E_SMID_NON No scaling .. data:: E_SMID_LIN Linear pixel scaling .. data:: E_SMID_LOG Logarithmic pixel scaling pyepr-0.8.1/doc/sphinxext/000077500000000000000000000000001221261026300154515ustar00rootroot00000000000000pyepr-0.8.1/doc/sphinxext/LICENSE.txt000066400000000000000000000072671221261026300173100ustar00rootroot00000000000000============================= The IPython licensing terms ============================= IPython is licensed under the terms of the Modified BSD License (also known as New or Revised BSD), as follows: Copyright (c) 2008-2010, IPython Development Team Copyright (c) 2001-2007, Fernando Perez. Copyright (c) 2001, Janko Hauser Copyright (c) 2001, Nathaniel Gray All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the IPython Development Team nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. About the IPython Development Team ---------------------------------- Fernando Perez began IPython in 2001 based on code from Janko Hauser and Nathaniel Gray . Fernando is still the project lead. The IPython Development Team is the set of all contributors to the IPython project. This includes all of the IPython subprojects. A full list with details is kept in the documentation directory, in the file ``about/credits.txt``. The core team that coordinates development on GitHub can be found here: http://github.com/ipython. As of late 2010, it consists of: * Brian E. Granger * Jonathan March * Evan Patterson * Fernando Perez * Min Ragan-Kelley * Robert Kern Our Copyright Policy -------------------- IPython uses a shared copyright model. Each contributor maintains copyright over their contributions to IPython. But, it is important to note that these contributions are typically only changes to the repositories. Thus, the IPython source code, in its entirety is not the copyright of any single person or institution. Instead, it is the collective copyright of the entire IPython Development Team. If individual contributors want to maintain a record of what changes/contributions they have specific copyright on, they should indicate their copyright in the commit message of the change, when they commit the change to one of the IPython repositories. With this in mind, the following banner should be used in any source code file to indicate the copyright and license terms: #----------------------------------------------------------------------------- # Copyright (c) 2010, IPython Development Team. # # Distributed under the terms of the Modified BSD License. # # The full license is in the file COPYING.txt, distributed with this software. #----------------------------------------------------------------------------- pyepr-0.8.1/doc/sphinxext/ipython_console_highlighting.py000066400000000000000000000101271221261026300237650ustar00rootroot00000000000000"""reST directive for syntax-highlighting ipython interactive sessions. XXX - See what improvements can be made based on the new (as of Sept 2009) 'pycon' lexer for the python console. At the very least it will give better highlighted tracebacks. """ #----------------------------------------------------------------------------- # Needed modules # Standard library import re # Third party from pygments.lexer import Lexer, do_insertions from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, PythonTracebackLexer) from pygments.token import Comment, Generic from sphinx import highlighting #----------------------------------------------------------------------------- # Global constants line_re = re.compile('.*?\n') #----------------------------------------------------------------------------- # Code begins - classes and functions class IPythonConsoleLexer(Lexer): """ For IPython console output or doctests, such as: .. sourcecode:: ipython In [1]: a = 'foo' In [2]: a Out[2]: 'foo' In [3]: print a foo In [4]: 1 / 0 Notes: - Tracebacks are not currently supported. - It assumes the default IPython prompts, not customized ones. """ name = 'IPython console session' aliases = ['ipython'] mimetypes = ['text/x-ipython-console'] input_prompt = re.compile("(In \[[0-9]+\]: )|( \.\.\.+:)") output_prompt = re.compile("(Out\[[0-9]+\]: )|( \.\.\.+:)") continue_prompt = re.compile(" \.\.\.+:") tb_start = re.compile("\-+") def get_tokens_unprocessed(self, text): pylexer = PythonLexer(**self.options) tblexer = PythonTracebackLexer(**self.options) curcode = '' insertions = [] for match in line_re.finditer(text): line = match.group() input_prompt = self.input_prompt.match(line) continue_prompt = self.continue_prompt.match(line.rstrip()) output_prompt = self.output_prompt.match(line) if line.startswith("#"): insertions.append((len(curcode), [(0, Comment, line)])) elif input_prompt is not None: insertions.append((len(curcode), [(0, Generic.Prompt, input_prompt.group())])) curcode += line[input_prompt.end():] elif continue_prompt is not None: insertions.append((len(curcode), [(0, Generic.Prompt, continue_prompt.group())])) curcode += line[continue_prompt.end():] elif output_prompt is not None: # Use the 'error' token for output. We should probably make # our own token, but error is typicaly in a bright color like # red, so it works fine for our output prompts. insertions.append((len(curcode), [(0, Generic.Error, output_prompt.group())])) curcode += line[output_prompt.end():] else: if curcode: for item in do_insertions(insertions, pylexer.get_tokens_unprocessed(curcode)): yield item curcode = '' insertions = [] yield match.start(), Generic.Output, line if curcode: for item in do_insertions(insertions, pylexer.get_tokens_unprocessed(curcode)): yield item def setup(app): """Setup as a sphinx extension.""" # This is only a lexer, so adding it below to pygments appears sufficient. # But if somebody knows that the right API usage should be to do that via # sphinx, by all means fix it here. At least having this setup.py # suppresses the sphinx warning we'd get without it. pass #----------------------------------------------------------------------------- # Register the extension as a valid pygments lexer highlighting.lexers['ipython'] = IPythonConsoleLexer() pyepr-0.8.1/doc/tutorials.txt000066400000000000000000000001731221261026300162070ustar00rootroot00000000000000Tutorials ========= .. toctree:: :maxdepth: 2 interactive_use bands_example bitmask_example ndvi_example pyepr-0.8.1/doc/usermanual.txt000066400000000000000000000324411221261026300163400ustar00rootroot00000000000000User Manual =========== Quick start ----------- PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. Full access to the Python EPR API is provided by the :mod:`epr` module that have to be imported by the client program e-g- as follows:: import epr The following snippet open an ASAR product and dumps the "Main Processing Parameters" record to the standard output:: import epr product = epr.Product( 'ASA_IMP_1PNUPA20060202_062233_000000152044_00435_20529_3110.N1') dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') record = dataset.read_record(0) print(record) product.close() .. _PyEPR: https://github.com/avalentino/pyepr .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int Requirements ------------ In order to use PyEPR it is needed that the following software are correctly installed and configured: * Python2_ >= 2.6 or Python3_ >= 3.1 * numpy_ >= 1.3.0 * `EPR API`_ >= 2.2 (optional, since PyEPR 0.7 the source tar-ball comes with a copy of the PER C API sources) * a reasonably updated C compiler [#]_ (build only) * Cython_ >= 0.13 [#]_ (optional and build only) .. note:: in order to build PyEPR_ for Python3_ it is required Cython_ >= 0.15 .. [#] PyEPR_ has been developed and tested with gcc_ 4. .. [#] The source tarball of official releases also includes the C extension code generated by cython_ so users don's strictly need cython_ to install PyEPR_. It is only needed to re-generate the C extension code (e.g. if one wants to build a development version of PyEPR_). .. _Python2: Python_ .. _Python3: Python_ .. _numpy: http://www.numpy.org .. _gcc: http://gcc.gnu.org .. _Cython: http://cython.org Download -------- .. highlight:: sh Official source tar-balls can be downloaded form PyPi_: http://pypi.python.org/pypi/pyepr The source code of the development versions is available on the GitHub_ project page https://github.com/avalentino/pyepr To clone the git_ repository the following command can be used:: $ git clone https://github.com/avalentino/pyepr.git .. _PyPi: http://pypi.python.org .. _GitHub: https://github.com .. _git: http://git-scm.com Installation ------------ The easier way to install PyEPR_ is using tools like pip_ or easy_install_:: $ pip install numpy pyepr .. note:: the :file:`setup.py` script does not use easy_install_ specific functions so it is unable to handle dependencies automatically. In the above example the required numpy_ package is explicitly included in the list of packages to be installed. .. seealso:: Requirements_ PyEPR_ uses the standard Python_ distutils_ so it can be installed from sources using the following command:: $ python setup.py install For a user specific installation use:: $ python setup.py install --user To install PyEPR_ in a non-standard path:: $ python setup.py install --prefix= just make sure that :file:`/lib/pythonX.Y/site-packages` is in the :envvar:`PYTHONPATH`. The :file:`setup.py` script by default checks for the availability of the EPR C API source code in the :file:`/epr-api-src` directory and tries to build PyEPR in *standalone mode*, i.e. without linking an external dynamic library of EPR-API. If no EPR C API sources are found then the :file:`setup.py` of PyEPR automatically tries to link the EPR-API dynamic library. This can happen, for example, if the user is using a copy of the PyEPR sources cloned from a git_ repository. In this case it is assumed that the `EPR API`_ C library is properly installed in the system (see the Requirements_ section). It is possible to control which `EPR API`_ C sources to use by means of the :option:`--epr-api-src` option of the :file:`setup.py` script:: $ python setup.py install --epr-api-src=../epr-api/src Also it is possible to switch off the *standalone mode* and force the link with the system `EPR API`_ C library:: $ python setup.py install --epr-api-src=None .. _pip: http://pypi.python.org/pypi/pip .. _easy_install: http://pypi.python.org/pypi/setuptools#using-setuptools-and-easyinstall .. _distutils: http://docs.python.org/distutils Testing ------- PyEPR_ package comes with a complete test suite but in order to run it the ENVISAT sample product used for testing MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1__ have to be downloaded from the ESA_ website, saved in the :file:`test` directory and decompressed. __ http://earth.esa.int/services/sample_products/meris/LRC/L2/MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1.gz On GNU Linux platforms the following shell commands can be used:: $ cd pyepr-0.X/test $ wget http://earth.esa.int/services/sample_products/meris/LRC/L2/\ MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1.gz $ gunzip MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1.gz After installation the test suite can be run using the following command in the :file:`test` directory:: $ python test_all.py Python vs C API --------------- The Python_ EPR API is fully object oriented. The main structures of the `C API`_ have been implemented as objects while C function have been logically grouped and mapped onto object methods. The entire process of defining an object oriented API for Python_ has been quite easy and straightforward thanks to the good design of the C API, Of course there are also some differences that are illustrated in the following sections. .. _`C API`: https://rawgithub.com/bcdev/epr-api/master/docs/epr_c_api/index.html Memory management ----------------- .. highlight:: python Being Python_ a very high level language uses have never to worry about memory allocation/deallocation. They simply have to instantiate objects:: product = epr.Product('filename.N1') and use them freely. Objects are automatically destroyed when there are no more references to them and memory is deallocated automatically. Even better, each object holds a reference to other objects it depends on so the user never have to worry about identifiers validity or about the correct order structures have to be freed. For example: the C `EPR_DatasetId` structure has a field (`product_id`) that points to the *product* descriptor `EPR_productId` to which it belongs to. The reference to the parent product is used, for example, when one wants to read a record using the `epr_read_record` function: .. code-block:: c EPR_SRecord* epr_read_record(EPR_SDatasetId* dataset_id, ...); The function takes a `EPR_SDatasetId` as a parameter and assumes all fields (including ``dataset->product_id``) are valid. It is responsibility of the programmer to keep all structures valid and free them at the right moment and in the correct order. This is the standard way to go in C but not in Python_. In Python_ all is by far simpler, and the user can get a *dateset* object instance:: dataset = product.get_dataset('MAIN_PROCESSING_PARAMS_ADS') and then forget about the *product* instance it depends on. Even if the *product* variable goes out of scope and it is no more directly accessible in the program the *dataset* object keeps staying valid since it holds an internal reference to the *product* instance it depends on. When *record* is destroyed automatically also the parent :class:`epr.Product` object is destroyed (assumed there is no other reference to it). The entire machinery is completely automatic and transparent to the user. .. note:: of course when a *product* object is explicitly closed using the :meth:`epr.Product.close` any I/O operation on it and on other objects (bands, datasets, etc) associated to it is no more possible. Arrays ------ PyEPR_ uses numpy_ in order to manage efficiently the potentially large amount of data contained in ENVISAT_ products. * :meth:`epr.Field.get_elems` return an 1D array containing elements of the field * the `Raster.data` property is a 2D array exposes data contained in the :class:`epr.Raster` object in form of :class:`numpy.ndarray` .. note:: :attr:`epr.Raster.data` directly exposes :class:`epr.Raster` i.e. shares the same memory buffer with :class:`epr.Raster`:: >>> raster.get_pixel(i, j) 5 >>> raster.data[i, j] 5 >>> raster.data[i, j] = 3 >>> raster.get_pixel(i, j) 3 * :meth:`epr.Band.read_as_array` is an additional method provided by the Python_ EPR API (does not exist any correspondent function in the C API). It is mainly a facility method that allows users to get access to band data without creating an intermediate :class:`epr.Raster` object. It read a slice of data from the :class:`epr.Band` and returns it as a 2D :class:`numpy.ndarray`. Enumerators ----------- Python_ does not have *enumerators* at language level (at least this is true for Python_ < 3.4). Enumerations are simply mapped as module constants that have the same name of the C enumerate but are spelled all in capital letters. For example: ============ ============ C Pythn ============ ============ e_tid_double E_TID_DOUBLE e_smod_1OF1 E_SMOD_1OF1 e_smid_log E_SMID_LOG ============ ============ Error handling and logging -------------------------- Currently error handling and logging functions of the EPR C API are not exposed to python. Internal library logging is completely silenced and errors are converted to Python_ exceptions. Where appropriate standard Python_ exception types are use in other cases custom exception types (e.g. :exc:`epr.EPRError`, :exc:`epr.EPRValueError`) are used. Library initialization ---------------------- Differently from the C API library initialization is not needed: it is performed internally the first time the :mod:`epr` module is imported in Python_. High level API -------------- PyEPR_ provides some utility method that has no correspondent in the C API: * :meth:`epr.Record.fields` * :meth:`epr.Record.get_field_names` * :meth:`epr.Dataset.records` * :meth:`epr.Product.get_dataset_names` * :meth:`epr.Product.get_band_names` * :meth:`epr.Product.datasets` * :meth:`epr.Product.bands` Example:: for dataset in product.datasets(): for record in dataset.records(): print(record) print() Another example:: if 'proc_data' in product.band_names(): band = product.get_band('proc_data') print(band) Special methods --------------- The Python_ EPR API also implements some `special method`_ in order to make EPR programming even handy and, in short, pythonic_. The ``__repr__`` methods have been overridden to provide a little more information with respect to the standard implementation. In some cases ``__str__`` method have been overridden to output a verbose string representation of the objects and their contents. If the EPR object has a ``print_`` method (like e.g. :meth:`epr.Record.print_` and :meth:`epr.Field.print_`) then the string representation of the object will have the same format used by the ``print_`` method. So writing:: fd.write(str(record)) giver the same result of:: record.print_(fd) Of course the :meth:`epr.Record.print_` method is more efficient for writing to file. Also :class:`epr.Dataset` and :class:`epr.Record` classes implement the ``__iter__`` `special method`_ for iterating over records and fields respectively. So it is possible to write code like the following:: for record in dataset: for index, field in enumerate(record): print(index, field) :class:`epr.DSD` and :class:`epr.Field` classes implement the ``__eq__`` and ``__ne__`` methods for objects comparison:: if filed1 == field2: print('field 1 and field2 are equal') print(field1) else: print('field1:', field1) print('field2:', field2) :class:`epr.Field` object also implement the ``__len__`` special method that returns the number of elements in the field:: if field.get_type() != epr.E_TID_STRING: assert field.get_num_elems() == len(field) else: assert len(field) == len(field.get_elem()) .. note:: differently from the :meth:`epr.Field.get_num_elems` method ``len(field)`` return the number of elements if the field type is not :data:`epr.E_TID_STRING`. If the field contains a string then the string length is returned. Finally the :class:`epr.Product` class acts as a `context manager`_ (i.e. it implements the ``__enter__`` and ``__exit__`` methods). This allows the user to write code like the following:: with epr.open('ASA_IMS_ ... _4650.N1') as product: print(product) that ensure that the product is closed as soon as the program exits the ``with`` block. .. _`special method`: http://docs.python.org/reference/datamodel.html .. _pythonic: http://www.cafepy.com/article/be_pythonic .. _`context manager`: http://docs.python.org/3/library/stdtypes.html#context-manager-types pyepr-0.8.1/requirements.txt000066400000000000000000000000221221261026300161300ustar00rootroot00000000000000numpy>=1.3 cython pyepr-0.8.1/setup.py000066400000000000000000000104721221261026300143700ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2011-2013, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . from __future__ import print_function import os import re import sys import glob from distutils.core import setup from distutils.extension import Extension source = [] libraries = [] include_dirs = [] eprsrcdir = None try: from Cython.Distutils import build_ext sources = [os.path.join('src', 'epr.pyx')] except ImportError: from distutils.command.build_ext import build_ext sources = [os.path.join('src', 'epr.c')] from numpy.distutils.misc_util import get_numpy_include_dirs include_dirs.extend(get_numpy_include_dirs()) # command line arguments management for arg in list(sys.argv): if arg.startswith('--epr-api-src='): eprsrcdir = os.path.expanduser(arg.split('=')[1]) if eprsrcdir.lower() == 'none': eprsrcdir = False sys.argv.remove(arg) # check for local epr-api sources if eprsrcdir is None: if os.path.isdir('epr-api-src'): eprsrcdir = 'epr-api-src' if eprsrcdir: include_dirs.append(eprsrcdir) sources.extend(glob.glob(os.path.join(eprsrcdir, 'epr_*.c'))) #libraries.append('m') print('using EPR C API sources at "{}"'.format(eprsrcdir)) else: libraries.append('epr_api') print('using pre-built dynamic libraray for EPR C API') def get_version(): filename = os.path.join('src', 'epr.pyx') data = open(filename).read() mobj = re.search( r"^__version__\s*=\s*\'(?P\d+(\.\d+)*(\+|(\-)?dev)?)\'", data, re.MULTILINE) return mobj.group('version') setup( name='pyepr', version=get_version(), author='Antonio Valentino', author_email='antonio.valentino@tiscali.it', url='http://avalentino.github.com/pyepr', description='Python ENVISAT Product Reader API', long_description='''PyEPR provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int ''', download_url='http://pypi.python.org/pypi/pyepr', classifiers=[ 'Development Status :: 5 - Production/Stable', 'Environment :: Other Environment', 'Intended Audience :: Developers', 'Intended Audience :: Science/Research', 'License :: OSI Approved :: GNU General Public License (GPL)', 'Operating System :: MacOS :: MacOS X', 'Operating System :: Microsoft :: Windows', 'Operating System :: POSIX', 'Programming Language :: Python', 'Programming Language :: Python :: 2', 'Programming Language :: Python :: 3', 'Programming Language :: Cython', 'Topic :: Software Development :: Libraries', 'Topic :: Scientific/Engineering', 'Topic :: Scientific/Engineering :: GIS', ], platforms=['any'], license='GPL3', cmdclass={'build_ext': build_ext}, ext_modules=[ Extension( 'epr', sources=sources, include_dirs=include_dirs, libraries=libraries, #define_macros=[('NPY_NO_DEPRECATED_API', 'NPY_1_7_API_VERSION'),], #extra_compile_args=['-Wno-strict-prototypes', '-ansi'], ), ], requires=['numpy'], ) pyepr-0.8.1/src/000077500000000000000000000000001221261026300134415ustar00rootroot00000000000000pyepr-0.8.1/src/epr.pyx000066400000000000000000002364641221261026300150100ustar00rootroot00000000000000# -*- coding: utf-8 -*- # PyEPR - Python bindings for ENVISAT Product Reader API # # Copyright (C) 2011-2013, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . '''Python bindings for ENVISAT Product Reader C API PyEPR_ provides Python_ bindings for the ENVISAT Product Reader C API (`EPR API`_) for reading satellite data from ENVISAT_ ESA_ (European Space Agency) mission. PyEPR_ is fully object oriented and, as well as the `EPR API`_ for C, supports ENVISAT_ MERIS, AATSR Level 1B and Level 2 and also ASAR data products. It provides access to the data either on a geophysical (decoded, ready-to-use pixel samples) or on a raw data layer. The raw data access makes it possible to read any data field contained in a product file. .. _PyEPR: http://avalentino.github.com/pyepr .. _Python: http://www.python.org .. _`EPR API`: https://github.com/bcdev/epr-api .. _ENVISAT: http://envisat.esa.int .. _ESA: http://earth.esa.int ''' __version__ = '0.8.1' __revision__ = __version__ # deprecated cdef extern from *: ctypedef char const_char 'const char' ctypedef void const_void 'const void' from libc cimport string as cstring from libc cimport stdio from libc.stdio cimport FILE cdef extern from 'stdio.h' nogil: FILE* fdopen(int, char *mode) cdef extern from 'epr_api.h' nogil: char* EPR_PRODUCT_API_VERSION_STR ctypedef int epr_boolean ctypedef unsigned char uchar ctypedef unsigned short ushort ctypedef unsigned int uint ctypedef unsigned long ulong enum EPR_ErrCode: e_err_none = 0 e_err_null_pointer = 1 e_err_illegal_arg = 2 e_err_illegal_state = 3 e_err_out_of_memory = 4 e_err_index_out_of_range = 5 e_err_illegal_conversion = 6 e_err_illegal_data_type = 7 e_err_file_not_found = 101 e_err_file_access_denied = 102 e_err_file_read_error = 103 e_err_file_write_error = 104 e_err_file_open_failed = 105 e_err_file_close_failed = 106 e_err_api_not_initialized = 201 e_err_invalid_product_id = 203 e_err_invalid_record = 204 e_err_invalid_band = 205 e_err_invalid_raster = 206 e_err_invalid_dataset_name = 207 e_err_invalid_field_name = 208 e_err_invalid_record_name = 209 e_err_invalid_product_name = 210 e_err_invalid_band_name = 211 e_err_invalid_data_format = 212 e_err_invalid_value = 213 e_err_invalid_keyword_name = 214 e_err_unknown_endian_order = 216 e_err_flag_not_found = 301 e_err_invalid_ddbb_format = 402 enum EPR_DataTypeId: e_tid_unknown = 0 e_tid_uchar = 1 e_tid_char = 2 e_tid_ushort = 3 e_tid_short = 4 e_tid_uint = 5 e_tid_int = 6 e_tid_float = 7 e_tid_double = 8 e_tid_string = 11 e_tid_spare = 13 e_tid_time = 21 enum EPR_LogLevel: e_log_debug = -1 e_log_info = 0 e_log_warning = 1 e_log_error = 2 enum EPR_SampleModel: e_smod_1OF1 = 0 e_smod_1OF2 = 1 e_smod_2OF2 = 2 e_smod_3TOI = 3 e_smod_2TOF = 4 enum EPR_ScalingMethod: e_smid_non = 0 e_smid_lin = 1 e_smid_log = 2 struct EPR_Time: int days uint seconds uint microseconds struct EPR_FlagDef: #EPR_Magic magic char* name uint bit_mask char* description struct EPR_Field: #EPR_Magic magic #EPR_FieldInfo* info void* elems struct EPR_Record: #EPR_Magic magic #EPR_RecordInfo* info uint num_fields EPR_Field** fields struct EPR_DSD: #EPR_Magic magic int index char* ds_name char* ds_type char* filename uint ds_offset uint ds_size uint num_dsr uint dsr_size struct EPR_Raster: #EPR_Magic magic EPR_DataTypeId data_type uint elem_size uint source_width uint source_height uint source_step_x uint source_step_y uint raster_width uint raster_height void* buffer struct EPR_ProductId: #EPR_Magic magic char* file_path FILE* istream uint tot_size uint scene_width uint scene_height char* id_string EPR_Record* mph_record EPR_Record* sph_record #EPR_PtrArray* dsd_array #EPR_PtrArray* record_info_cache #EPR_PtrArray* param_table #EPR_PtrArray* dataset_ids #EPR_PtrArray* band_ids int meris_iodd_version struct EPR_DatasetId: #EPR_Magic magic EPR_ProductId* product_id char* dsd_name EPR_DSD* dsd char* dataset_name #struct RecordDescriptor* record_descriptor #EPR_SRecordInfo* record_info char* description struct EPR_DatasetRef: EPR_DatasetId* dataset_id int field_index # -1 if not used int elem_index # -1 if not used struct EPR_BandId: #EPR_Magic magic EPR_ProductId* product_id char* band_name int spectr_band_index EPR_DatasetRef dataset_ref EPR_SampleModel sample_model EPR_DataTypeId data_type EPR_ScalingMethod scaling_method float scaling_offset float scaling_factor char* bm_expr #EPR_SPtrArray* flag_coding char* unit char* description epr_boolean lines_mirrored ctypedef EPR_ErrCode EPR_EErrCode ctypedef EPR_LogLevel EPR_ELogLevel ctypedef EPR_SampleModel EPR_ESampleModel ctypedef EPR_ScalingMethod EPR_EScalingMethod ctypedef EPR_DataTypeId EPR_EDataTypeId ctypedef EPR_ProductId EPR_SProductId ctypedef EPR_DatasetId EPR_SDatasetId ctypedef EPR_BandId EPR_SBandId ctypedef EPR_Raster EPR_SRaster ctypedef EPR_Record EPR_SRecord ctypedef EPR_Field EPR_SField ctypedef EPR_DSD EPR_SDSD ctypedef EPR_Time EPR_STime # @TODO: improve logging and error management (--> custom handlers) # logging and error handling function pointers ctypedef void (*EPR_FLogHandler)(EPR_ELogLevel, char*) ctypedef void (*EPR_FErrHandler)(EPR_EErrCode, char*) # logging int epr_set_log_level(EPR_ELogLevel) void epr_set_log_handler(EPR_FLogHandler) void epr_log_message(EPR_ELogLevel, char*) # error handling void epr_set_err_handler(EPR_FErrHandler) EPR_EErrCode epr_get_last_err_code() const_char* epr_get_last_err_message() void epr_clear_err() # API initialization/finalization int epr_init_api(EPR_ELogLevel, EPR_FLogHandler, EPR_FErrHandler) void epr_close_api() # DATATYPE uint epr_get_data_type_size(EPR_EDataTypeId) const_char* epr_data_type_id_to_str(EPR_EDataTypeId) # open products EPR_SProductId* epr_open_product(char*) # PRODUCT int epr_close_product(EPR_SProductId*) uint epr_get_scene_width(EPR_SProductId*) uint epr_get_scene_height(EPR_SProductId*) uint epr_get_num_datasets(EPR_SProductId*) EPR_SDatasetId* epr_get_dataset_id_at(EPR_SProductId*, uint) EPR_SDatasetId* epr_get_dataset_id(EPR_SProductId*, char*) uint epr_get_num_dsds(EPR_SProductId*) EPR_SDSD* epr_get_dsd_at(EPR_SProductId*, uint) EPR_SRecord* epr_get_mph(EPR_SProductId*) EPR_SRecord* epr_get_sph(EPR_SProductId*) uint epr_get_num_bands(EPR_SProductId*) EPR_SBandId* epr_get_band_id_at(EPR_SProductId*, uint) EPR_SBandId* epr_get_band_id(EPR_SProductId*, char*) int epr_read_bitmask_raster(EPR_SProductId*, char*, int, int, EPR_SRaster*) # DATASET const_char* epr_get_dataset_name(EPR_SDatasetId*) const_char* epr_get_dsd_name(EPR_SDatasetId*) uint epr_get_num_records(EPR_SDatasetId*) EPR_SDSD* epr_get_dsd(EPR_SDatasetId*) EPR_SRecord* epr_create_record(EPR_SDatasetId*) EPR_SRecord* epr_read_record(EPR_SDatasetId*, uint, EPR_SRecord*) # RECORD void epr_free_record(EPR_SRecord*) uint epr_get_num_fields(EPR_SRecord*) void epr_print_record(EPR_SRecord*, FILE*) void epr_print_element(EPR_SRecord*, uint, uint, FILE*) void epr_dump_record(EPR_SRecord*) void epr_dump_element(EPR_SRecord*, uint, uint) EPR_SField* epr_get_field(EPR_SRecord*, char*) EPR_SField* epr_get_field_at(EPR_SRecord*, uint) # FIELD void epr_print_field(EPR_SField*, FILE*) void epr_dump_field(EPR_SField*) const_char* epr_get_field_unit(EPR_SField*) const_char* epr_get_field_description(EPR_SField*) uint epr_get_field_num_elems(EPR_SField*) const_char* epr_get_field_name(EPR_SField*) EPR_EDataTypeId epr_get_field_type(EPR_SField*) char epr_get_field_elem_as_char(EPR_SField*, uint) uchar epr_get_field_elem_as_uchar(EPR_SField*, uint) short epr_get_field_elem_as_short(EPR_SField*, uint) ushort epr_get_field_elem_as_ushort(EPR_SField*, uint) int epr_get_field_elem_as_int(EPR_SField*, uint) uint epr_get_field_elem_as_uint(EPR_SField*, uint) float epr_get_field_elem_as_float(EPR_SField*, uint) double epr_get_field_elem_as_double(EPR_SField*, uint) const_char* epr_get_field_elem_as_str(EPR_SField*) EPR_STime* epr_get_field_elem_as_mjd(EPR_SField*) const_char* epr_get_field_elems_char(EPR_SField*) uchar* epr_get_field_elems_uchar(EPR_SField*) short* epr_get_field_elems_short(EPR_SField*) ushort* epr_get_field_elems_ushort(EPR_SField*) int* epr_get_field_elems_int(EPR_SField*) uint* epr_get_field_elems_uint(EPR_SField*) float* epr_get_field_elems_float(EPR_SField*) double* epr_get_field_elems_double(EPR_SField*) uint epr_copy_field_elems_as_ints(EPR_SField*, int*, uint) uint epr_copy_field_elems_as_uints(EPR_SField*, uint*, uint) uint epr_copy_field_elems_as_floats(EPR_SField*, float*, uint) uint epr_copy_field_elems_as_doubles(EPR_SField*, double*, uint) # BAND const_char* epr_get_band_name(EPR_SBandId*) EPR_SRaster* epr_create_compatible_raster(EPR_SBandId*, uint, uint, uint, uint) int epr_read_band_raster(EPR_SBandId*, int, int, EPR_SRaster*) # RASTER void epr_free_raster(EPR_SRaster*) uint epr_get_raster_width(EPR_SRaster*) uint epr_get_raster_height(EPR_SRaster*) uint epr_get_raster_elem_size(EPR_SRaster*) uint epr_get_pixel_as_uint(EPR_SRaster*, int, int) int epr_get_pixel_as_int(EPR_SRaster*, int, int) float epr_get_pixel_as_float(EPR_SRaster*, int, int) double epr_get_pixel_as_double(EPR_SRaster*, int, int) void* epr_get_raster_elem_addr(EPR_SRaster*, uint) void* epr_get_raster_pixel_addr(EPR_SRaster*, uint, uint) void* epr_get_raster_line_addr(EPR_SRaster*, uint) EPR_SRaster* epr_create_raster(EPR_EDataTypeId, uint, uint, uint, uint) EPR_SRaster* epr_create_bitmask_raster(uint, uint, uint, uint) from cpython.version cimport PY_MAJOR_VERSION from cpython.object cimport PyObject_AsFileDescriptor cimport numpy as np np.import_array() import sys from collections import namedtuple import numpy as np cdef int PY3 = (PY_MAJOR_VERSION >= 3) # internal utils _DEFAULT_FS_ENCODING = sys.getfilesystemencoding() cdef inline bytes _to_bytes(s, encoding='UTF-8'): if hasattr(s, 'encode'): return s.encode(encoding) else: return s cdef inline str _to_str(b, encoding='UTF-8'): if PY3: return b.decode(encoding) else: return b # utils EPRTime = namedtuple('EPRTime', ('days', 'seconds', 'microseconds')) EPR_C_API_VERSION = _to_str(EPR_PRODUCT_API_VERSION_STR, 'ascii') # EPR_DataTypeId E_TID_UNKNOWN = e_tid_unknown E_TID_UCHAR = e_tid_uchar E_TID_CHAR = e_tid_char E_TID_USHORT = e_tid_ushort E_TID_SHORT = e_tid_short E_TID_UINT = e_tid_uint E_TID_INT = e_tid_int E_TID_FLOAT = e_tid_float E_TID_DOUBLE = e_tid_double E_TID_STRING = e_tid_string E_TID_SPARE = e_tid_spare E_TID_TIME = e_tid_time # EPR_SampleModel E_SMOD_1OF1 = e_smod_1OF1 E_SMOD_1OF2 = e_smod_1OF2 E_SMOD_2OF2 = e_smod_2OF2 E_SMOD_3TOI = e_smod_3TOI E_SMOD_2TOF = e_smod_2TOF # EPR_ScalingMethod E_SMID_NON = e_smid_non E_SMID_LIN = e_smid_lin E_SMID_LOG = e_smid_log cdef np.NPY_TYPES _epr_to_numpy_type_id(EPR_DataTypeId epr_type): if epr_type == E_TID_UCHAR: return np.NPY_UBYTE if epr_type == E_TID_CHAR: return np.NPY_BYTE if epr_type == E_TID_USHORT: return np.NPY_USHORT if epr_type == E_TID_SHORT: return np.NPY_SHORT if epr_type == E_TID_UINT: return np.NPY_UINT if epr_type == E_TID_INT: return np.NPY_INT if epr_type == E_TID_FLOAT: return np.NPY_FLOAT if epr_type == E_TID_DOUBLE: return np.NPY_DOUBLE if epr_type == E_TID_STRING: return np.NPY_STRING return np.NPY_NOTYPE class EPRError(Exception): '''EPR API error''' def __init__(self, message='', code=None, *args, **kargs): '''__init__(self, message='', code=None, *args, **kargs)''' super(EPRError, self).__init__(message, code, *args, **kargs) #: EPR API error code self.code = code class EPRValueError(EPRError, ValueError): pass cdef pyepr_check_errors(): cdef int code cdef str msg code = epr_get_last_err_code() if code != e_err_none: msg = _to_str(epr_get_last_err_message(), 'ascii') epr_clear_err() # @TODO: if not msg: msg = EPR_ERR_MSG[code] if (e_err_invalid_product_id <= code <= e_err_invalid_keyword_name or code in (e_err_null_pointer, e_err_illegal_arg, e_err_index_out_of_range)): raise EPRValueError(msg, code) else: raise EPRError(msg, code) cdef pyepr_null_ptr_error(msg='null pointer'): cdef int code cdef str eprmsg = _to_str(epr_get_last_err_message(), 'ascii') code = epr_get_last_err_code() if not code: code = None epr_clear_err() raise EPRValueError('%s: %s' % (msg, eprmsg), code=code) cdef FILE* pyepr_get_file_stream(object ostream) except NULL: cdef FILE* fstream = NULL cdef int fileno if ostream is None: ostream = sys.stdout try: ostream.flush() except AttributeError, e: raise TypeError(str(e)) else: fileno = PyObject_AsFileDescriptor(ostream) if fileno == -1: raise TypeError('bad output stream') else: fstream = fdopen(fileno, 'w') if fstream is NULL: raise TypeError('invalid ostream') return fstream cdef class _CLib: '''Library object to handle C API initialization/finalization .. warning:: this is meant for internal use only. **Do not use it**. ''' def __cinit__(self, *args, **kwargs): cdef bytes msg # @TODO:check #if EPR_C_API_VERSION != '2.2': # raise ImportError('C library version not supported: "%s"' % # EPR_C_API_VERSION) #if epr_init_api(e_log_warning, epr_log_message, NULL): if epr_init_api(e_log_warning, NULL, NULL): msg = epr_get_last_err_message() epr_clear_err() raise ImportError('unable to inizialize EPR API library: ' '%s' % _to_str(msg, 'ascii')) def __dealloc__(self): epr_close_api() def __init__(self): raise TypeError('"%s" class cannot be instantiated from Python' % self.__class__.__name__) # global _CLib instance cdef _CLib _EPR_C_LIB = None cdef class EprObject: cdef object epr_c_lib def __cinit__(self, *ars, **kargs): self.epr_c_lib = _EPR_C_LIB def __dealloc__(self): self.epr_c_lib = None def __init__(self): raise TypeError('"%s" class cannot be instantiated from Python' % self.__class__.__name__) def get_data_type_size(EPR_EDataTypeId type_id): '''get_data_type_size(type_id) Gets the size in bytes for an element of the given data type ''' return epr_get_data_type_size(type_id) def data_type_id_to_str(EPR_EDataTypeId type_id): '''data_type_id_to_str(type_id) Gets the 'C' data type string for the given data type ''' cdef char* type_id_str = epr_data_type_id_to_str(type_id) return _to_str(type_id_str, 'ascii') def get_scaling_method_name(method): '''get_scaling_method_name(method) Return the name of the specified scaling method ''' mmap = { E_SMID_NON: 'NONE', E_SMID_LIN: 'LIN', E_SMID_LOG: 'LOG', } try: return mmap[method] except KeyError: raise ValueError('invalid scaling method: "%s"' % method) def get_sample_model_name(model): '''get_sample_model_name(model) Return the name of the specified sample model ''' mmap = { E_SMOD_1OF1: '1OF1', E_SMOD_1OF2: '1OF2', E_SMOD_2OF2: '2OF2', E_SMOD_3TOI: '3TOI', E_SMOD_2TOF: '2TOF', } try: return mmap[model] except KeyError: raise ValueError('invalid sample model: "%s"' % model) cdef class DSD(EprObject): '''Dataset descriptor The DSD class contains information about the properties of a dataset and its location within an ENVISAT product file ''' cdef EPR_SDSD* _ptr cdef object _parent # Dataset or Product cdef inline check_closed_product(self): if isinstance(self, Dataset): (self._parent).check_closed_product() else: #elif isinstance(self, Product): (self._parent).check_closed_product() property index: '''The index of this DSD (zero-based)''' def __get__(self): self.check_closed_product() return self._ptr.index property ds_name: '''The dataset name''' def __get__(self): self.check_closed_product() return _to_str(self._ptr.ds_name, 'ascii') property ds_type: '''The dataset type descriptor''' def __get__(self): self.check_closed_product() return _to_str(self._ptr.ds_type, 'ascii') property filename: '''The filename in the DDDB with the description of this dataset''' def __get__(self): self.check_closed_product() return _to_str(self._ptr.filename, 'ascii') property ds_offset: '''The offset of dataset-information the product file''' def __get__(self): self.check_closed_product() return self._ptr.ds_offset property ds_size: '''The size of dataset-information in dataset product file''' def __get__(self): self.check_closed_product() return self._ptr.ds_size property num_dsr: '''The number of dataset records for the given dataset name''' def __get__(self): self.check_closed_product() return self._ptr.num_dsr property dsr_size: '''The size of dataset record for the given dataset name''' def __get__(self): self.check_closed_product() return self._ptr.dsr_size # --- high level interface ------------------------------------------------ def __repr__(self): return 'epr.DSD("%s")' % self.ds_name def __richcmp__(self, other, int op): cdef EPR_SDSD* p1 = (self)._ptr cdef EPR_SDSD* p2 = (other)._ptr if isinstance(self, DSD) and isinstance(other, DSD): if op == 2: # eq if p1 == p2: return True (self).check_closed_product() return ((p1.index == p2.index) and (p1.ds_offset == p2.ds_offset) and (p1.ds_size == p2.ds_size) and (p1.num_dsr == p2.num_dsr) and (p1.dsr_size == p2.dsr_size)and (cstring.strcmp(p1.ds_name, p2.ds_name) == 0) and (cstring.strcmp(p1.ds_type, p2.ds_type) == 0) and (cstring.strcmp(p1.filename, p2.filename) == 0)) elif op == 3: # ne if p1 == p2: return False (self).check_closed_product() return ((p1.index != p2.index) or (p1.ds_offset != p2.ds_offset) or (p1.ds_size != p2.ds_size) or (p1.num_dsr != p2.num_dsr) or (p1.dsr_size != p2.dsr_size) or (cstring.strcmp(p1.ds_name, p2.ds_name) != 0) or (cstring.strcmp(p1.ds_type, p2.ds_type) != 0) or (cstring.strcmp(p1.filename, p2.filename) != 0)) else: raise TypeError('DSD only implements "==" and "!=" operators') else: return NotImplemented cdef new_dsd(EPR_SDSD* ptr, object parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef DSD instance = DSD.__new__(DSD) instance._ptr = ptr instance._parent = parent # Dataset or Product return instance cdef class Field(EprObject): '''Represents a field within a record A field is composed of one or more data elements of one of the types defined in the internal ``field_info`` structure. .. seealso:: :class:`Record` ''' cdef EPR_SField* _ptr cdef Record _parent cdef inline check_closed_product(self): self._parent.check_closed_product() def print_(self, ostream=None): '''print_(self, ostream=None) Write the field to specified file (default: :data:`sys.stdout`) This method writes formatted contents of the field to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`) :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances ''' cdef FILE* fstream = pyepr_get_file_stream(ostream) self.check_closed_product() with nogil: epr_print_field(self._ptr, fstream) stdio.fflush(fstream) pyepr_check_errors() #def dump_field(self): # epr_dump_field(self._ptr) # pyepr_check_errors() def get_unit(self): '''get_unit(self) Gets the unit of the field ''' cdef const_char* unit = NULL self.check_closed_product() unit = epr_get_field_unit(self._ptr) if unit is NULL: return '' else: return _to_str(unit, 'ascii') def get_description(self): '''get_description(self) Gets the description of the field ''' cdef char* description = NULL self.check_closed_product() description = epr_get_field_description(self._ptr) return _to_str(description, 'ascii') def get_num_elems(self): '''get_num_elems(self) Gets the number of elements of the field ''' self.check_closed_product() return epr_get_field_num_elems(self._ptr) def get_name(self): '''get_name(self) Gets the name of the field ''' cdef char* name = NULL self.check_closed_product() name = epr_get_field_name(self._ptr) return _to_str(name, 'ascii') def get_type(self): '''get_type(self) Gets the type of the field ''' self.check_closed_product() return epr_get_field_type(self._ptr) def get_elem(self, uint index=0): '''get_elem(self, index=0) Field single element access This function is for getting the elements of a field. :param index: the zero-based index of element to be returned, must not be negative :returns: the typed value from given field ''' cdef EPR_STime* eprtime self.check_closed_product() etype = epr_get_field_type(self._ptr) if etype == e_tid_uchar: val = epr_get_field_elem_as_uchar(self._ptr, index) elif etype == e_tid_char: val = epr_get_field_elem_as_char(self._ptr, index) elif etype == e_tid_ushort: val = epr_get_field_elem_as_ushort(self._ptr, index) elif etype == e_tid_short: val = epr_get_field_elem_as_short(self._ptr, index) elif etype == e_tid_uint: val = epr_get_field_elem_as_uint(self._ptr, index) elif etype == e_tid_int: val = epr_get_field_elem_as_int(self._ptr, index) elif etype == e_tid_float: val = epr_get_field_elem_as_float(self._ptr, index) elif etype == e_tid_double: val = epr_get_field_elem_as_double(self._ptr, index) elif etype == e_tid_string: if index != 0: raise ValueError('invalid index: %d' % index) val = epr_get_field_elem_as_str(self._ptr) #elif etype == e_tid_spare: # val = epr_get_field_elem_as_str(self._ptr) elif etype == e_tid_time: if index != 0: raise ValueError('invalid index: %d' % index) # use casting to silence warnings eprtime = epr_get_field_elem_as_mjd(self._ptr) val = EPRTime(eprtime.days, eprtime.seconds, eprtime.microseconds) else: raise ValueError('invalid field type') pyepr_check_errors() return val def get_elems(self): '''get_elems(self) Field array element access This function is for getting an array of field elements of the field. :returns: the data array (:class:`numpy.ndarray`) having the type of the field ''' # @NOTE: internal C const pointer is not shared with numpy cdef const_void* buf cdef size_t num_elems cdef size_t i cdef np.ndarray out self.check_closed_product() num_elems = epr_get_field_num_elems(self._ptr) etype = epr_get_field_type(self._ptr) msg = 'Filed("%s") elems pointer is null' % self.get_name() if etype == e_tid_uchar: buf = epr_get_field_elems_uchar(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.byte) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_char: buf = epr_get_field_elems_char(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.byte) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_ushort: buf = epr_get_field_elems_ushort(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.ushort) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_short: buf = epr_get_field_elems_short(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.short) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_uint: buf = epr_get_field_elems_uint(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.uint) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_int: buf = epr_get_field_elems_int(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.int) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_float: buf = epr_get_field_elems_float(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.float32) for i in range(num_elems): out[i] = (buf)[i] elif etype == e_tid_double: buf = epr_get_field_elems_double(self._ptr) if buf is NULL: pyepr_null_ptr_error(msg) out = np.ndarray(num_elems, np.double) for i in range(num_elems): out[i] = (buf)[i] else: raise ValueError('invalid field type') return out # --- high level interface ------------------------------------------------ def __repr__(self): return 'epr.Field("%s") %d %s elements' % (self.get_name(), self.get_num_elems(), data_type_id_to_str(self.get_type())) def __str__(self): cdef EPR_DataTypeId type_ = self.get_type() if type_ == e_tid_string: return '%s = "%s"' % (self.get_name(), self.get_elem()) elif type_ == e_tid_time: days, seconds, microseconds = self.get_elem() return '%s = {d=%d, j=%d, m=%d}' % (self.get_name(), days, seconds, microseconds) else: if type_ == e_tid_uchar: fmt = '%u' elif type_ == e_tid_char: fmt = '%d' elif type_ == e_tid_ushort: fmt = '%u' elif type_ == e_tid_short: fmt = '%d' elif type_ == e_tid_uint: fmt = '%u' elif type_ == e_tid_int: fmt = '%d' elif type_ == e_tid_float: fmt = '%f' elif type_ == e_tid_double: fmt = '%f' else: if self.get_num_elems() > 1: data = ['<>'] * self.get_elems() data = ', '.join(data) return '%s = {%s}' % (self.get_name(), data) else: return '%s = <>' % (self.get_name()) if self.get_num_elems() > 1: data = ', '.join([fmt % item for item in self.get_elems()]) return '%s = {%s}' % (self.get_name(), data) else: return '%s = %s' % (self.get_name(), fmt % self.get_elem()) def __richcmp__(self, other, int op): cdef int ret cdef size_t n cdef EPR_SField* p1 = (self)._ptr cdef EPR_SField* p2 = (other)._ptr if isinstance(self, Field) and isinstance(other, Field): if op == 2: # eq if p1 == p2: return True (self).check_closed_product() if ((epr_get_field_num_elems(p1) != epr_get_field_num_elems(p2)) or (epr_get_field_type(p1) != epr_get_field_type(p2)) or (cstring.strcmp(epr_get_field_unit(p1), epr_get_field_unit(p2)) != 0) or (cstring.strcmp(epr_get_field_description(p1), epr_get_field_description(p2)) != 0) or (cstring.strcmp(epr_get_field_name(p1), epr_get_field_name(p2)) != 0)): return False n = epr_get_data_type_size(epr_get_field_type(p1)) if n != 0: n *= epr_get_field_num_elems(p1) #pyepr_check_errors() if n <= 0: # @TODO: check return True return (cstring.memcmp(p1.elems, p2.elems, n) == 0) elif op == 3: # ne if p1 == p2: return False (self).check_closed_product() if ((epr_get_field_num_elems(p1) != epr_get_field_num_elems(p2)) or (epr_get_field_type(p1) != epr_get_field_type(p2)) or (cstring.strcmp(epr_get_field_unit(p1), epr_get_field_unit(p2)) != 0) or (cstring.strcmp(epr_get_field_description(p1), epr_get_field_description(p2)) != 0) or (cstring.strcmp(epr_get_field_name(p1), epr_get_field_name(p2)) != 0)): return True n = epr_get_data_type_size(epr_get_field_type(p1)) if n != 0: n *= epr_get_field_num_elems(p1) #pyepr_check_errors() if n <= 0: # @TODO: check return False return (cstring.memcmp(p1.elems, p2.elems, n) != 0) else: raise TypeError('Field only implements "==" and ' '"!=" operators') else: return NotImplemented def __len__(self): self.check_closed_product() if epr_get_field_type(self._ptr) == e_tid_string: return cstring.strlen(epr_get_field_elem_as_str(self._ptr)) else: return epr_get_field_num_elems(self._ptr) cdef new_field(EPR_SField* ptr, Record parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Field instance = Field.__new__(Field) instance._ptr = ptr instance._parent = parent return instance cdef class Record(EprObject): '''Represents a record read from an ENVISAT dataset A record is composed of multiple fields. .. seealso:: :class:`Field` ''' cdef EPR_SRecord* _ptr cdef object _parent # Dataset or Product cdef bint _dealloc def __dealloc__(self): if not self._dealloc: return if self._ptr is not NULL: epr_free_record(self._ptr) pyepr_check_errors() cdef inline check_closed_product(self): if isinstance(self._parent, Dataset): (self._parent).check_closed_product() else: #elif isinstance(self._parent, Product): (self._parent).check_closed_product() def get_num_fields(self): '''get_num_fields(self) Gets the number of fields contained in the record ''' return epr_get_num_fields(self._ptr) def print_(self, ostream=None): '''print_(self, ostream=None) Write the record to specified file This method writes formatted contents of the record to specified *ostream* text file or (default) the ASCII output is be printed to standard output (:data:`sys.stdout`) :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances ''' cdef FILE* fstream = pyepr_get_file_stream(ostream) self.check_closed_product() with nogil: epr_print_record(self._ptr, fstream) stdio.fflush(fstream) pyepr_check_errors() def print_element(self, uint field_index, uint element_index, ostream=None): '''print_element(self, field_index, element_index, ostream=None) Write the specified field element to file This method writes formatted contents of the specified field element to the *ostream* text file or (default) the ASCII output will be printed to standard output (:data:`sys.stdout`) :param field_index: the index of field in the record :param element_index: the index of element in the specified field :param ostream: the (opened) output file object .. note:: the *ostream* parameter have to be a *real* file not a generic stream object like :class:`StringIO.StringIO` instances ''' cdef FILE* fstream = pyepr_get_file_stream(ostream) self.check_closed_product() with nogil: epr_print_element(self._ptr, field_index, element_index, fstream) stdio.fflush(fstream) pyepr_check_errors() def get_field(self, name): '''get_field(self, name) Gets a field specified by name The field is here identified through the given name. It contains the field info and all corresponding values. :param name: the the name of required field :returns: the specified :class:`Field` or raises an exception (:exc:`EPRValueError`) if an error occurred ''' cdef EPR_SField* field_ptr cdef bytes cname = _to_bytes(name) self.check_closed_product() field_ptr = epr_get_field(self._ptr, cname) if field_ptr is NULL: pyepr_null_ptr_error('unable to get field "%s"' % name) return new_field(field_ptr, self) def get_field_at(self, uint index): '''get_field_at(self, index) Gets a field at the specified position within the record :param index: the zero-based index (position within record) of the field :returns: the field or raises and exception (:exc:`EPRValueError`) if an error occurred ''' cdef EPR_SField* field_ptr self.check_closed_product() field_ptr = epr_get_field_at(self._ptr, index) if field_ptr is NULL: pyepr_null_ptr_error('unable to get field at index %d' % index) return new_field(field_ptr, self) # --- high level interface ------------------------------------------------ def get_field_names(self): '''get_field_names(self) Return the list of names of the fields in the product .. note:: this method has no correspondent in the C API ''' cdef EPR_SField* field_ptr cdef int idx cdef char* name self.check_closed_product() names = [] for idx in range(self.get_num_fields()): field_ptr = epr_get_field_at(self._ptr, idx) name = epr_get_field_name(field_ptr) names.append(_to_str(name, 'ascii')) return names # @NOTE: generator and generator expressions are not yet implemented in # cython. As a workaround a list is used def fields(self): '''fields(self) Return the list of fields contained in the record ''' # @TODO: use __iter__ when generator expressions will be available #return list(self) cdef int idx self.check_closed_product() return [self.get_field_at(idx) for idx in range(epr_get_num_fields(self._ptr))] def __iter__(self): # @TODO: use generator expression when it will be available #return (self.get_field_at(idx) # for idx in range(epr_get_num_elems(self._ptr))) return iter(self.fields()) def __str__(self): self.check_closed_product() return '\n'.join(map(str, self)) def __repr__(self): self.check_closed_product() return '%s %d fields' % (super(Record, self).__repr__(), self.get_num_fields()) cdef new_record(EPR_SRecord* ptr, object parent=None, bint dealloc=False): if ptr is NULL: pyepr_null_ptr_error() cdef Record instance = Record.__new__(Record) instance._ptr = ptr instance._parent = parent # Dataset or Product instance._dealloc = dealloc return instance cdef class Raster(EprObject): '''Represents a raster in which data will be stored All 'size' parameter are in PIXEL. ''' cdef EPR_SRaster* _ptr cdef Band _parent cdef np.ndarray _data def __dealloc__(self): if self._ptr is not NULL: epr_free_raster(self._ptr) property data_type: '''The data type of the band's pixels All ``E_TID_*`` types are possible ''' def __get__(self): return self._ptr.data_type property source_width: '''The width of the source''' def __get__(self): return self._ptr.source_width property source_height: '''The height of the source''' def __get__(self): return self._ptr.source_height property source_step_x: '''The sub-sampling for the across-track direction in pixel''' def __get__(self): return self._ptr.source_step_x property source_step_y: '''The sub-sampling for the along-track direction in pixel''' def __get__(self): return self._ptr.source_step_y def get_width(self): '''get_width(self) Gets the raster's width in pixels ''' return epr_get_raster_width(self._ptr) def get_height(self): '''get_height(self) Gets the raster's height in pixels ''' return epr_get_raster_height(self._ptr) def get_elem_size(self): '''get_elem_size(self) The size in byte of a single element (sample) of this raster's buffer ''' return epr_get_raster_elem_size(self._ptr) def get_pixel(self, int x, int y): '''get_pixel(x, y) Single pixel access This function is for getting the values of the elements of a raster (i.e. pixel) :param x: the (zero-based) X coordinate of the pixel :param y: the (zero-based) Y coordinate of the pixel :returns: the typed value at the given co-ordinate ''' if (x < 0 or x >= self._ptr.raster_width or y < 0 or y >= self._ptr.raster_height): raise ValueError('index out of range: x=%d, y=%d' % (x, y)) cdef EPR_EDataTypeId dtype = self._ptr.data_type if dtype == e_tid_uint: val = epr_get_pixel_as_uint(self._ptr, x, y) elif dtype == e_tid_int: val = epr_get_pixel_as_int(self._ptr, x, y) elif dtype == e_tid_float: val = epr_get_pixel_as_float(self._ptr, x, y) elif dtype == e_tid_double: val = epr_get_pixel_as_double(self._ptr, x, y) else: raise ValueError('invalid data type: "%s"' % epr_data_type_id_to_str(dtype)) pyepr_check_errors() # @TODO: check return val # --- high level interface ------------------------------------------------ cdef np.ndarray toarray(self): cdef np.NPY_TYPES dtype = _epr_to_numpy_type_id(self._ptr.data_type) cdef np.npy_intp shape[2] cdef np.ndarray result if dtype == np.NPY_NOTYPE: raise TypeError('invalid data type') else: shape[0] = self._ptr.raster_height shape[1] = self._ptr.raster_width result = np.PyArray_SimpleNewFromData(2, shape, dtype, self._ptr.buffer) # Make the ndarray keep a reference to this object np.set_array_base(result, self) return result property data: '''Raster data exposed as :class:`numpy.ndarray` object .. note:: this property shares the data buffer with the :class:`Raster` object so any change in its contents is also reflected to the :class:`Raster` object ''' def __get__(self): if self._data is not None: return self._data if self._ptr.buffer is NULL: return np.ndarray(()) self._data = self.toarray() return self._data def __repr__(self): return '%s %s (%dL x %dP)' % (super(Raster, self).__repr__(), data_type_id_to_str(self.data_type), self.get_height(), self.get_width()) cdef new_raster(EPR_SRaster* ptr, Band parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Raster instance = Raster.__new__(Raster) instance._ptr = ptr instance._parent = parent # Band or None instance._data = None return instance def create_raster(EPR_EDataTypeId data_type, uint src_width, uint src_height, uint xstep=1, uint ystep=1): '''create_raster(data_type, src_width, src_height, xstep=1, ystep=1) Creates a raster of the specified data type This function can be used to create any type of raster, e.g. for later use as a bit-mask. :param data_type: the type of the data to stored in the raster, must be one of E_TID_* :param src_width: the width (across track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param src_height: the height (along track dimension) of the source to be read into the raster. See description of :meth:`Band.create_compatible_raster` :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the new :class:`Raster` instance .. seealso:: description of :meth:`Band.create_compatible_raster` ''' if xstep == 0 or ystep == 0: raise ValueError('invalid step: xspet=%d, ystep=%d' % (xstep, ystep)) cdef EPR_SRaster* raster_ptr raster_ptr = epr_create_raster(data_type, src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create a new raster') return new_raster(raster_ptr) def create_bitmask_raster(uint src_width, uint src_height, uint xstep=1, uint ystep=1): '''create_bitmask_raster(src_width, src_height, xstep=1, ystep=1) Creates a raster to be used for reading bitmasks The raster returned always is of type ``byte``. :param src_width: the width (across track dimension) of the source to be read into the raster :param src_height: the height (along track dimension) of the source to be read into the raster :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred .. seealso:: the description of :meth:`Band.create_compatible_raster` ''' if xstep == 0 or ystep == 0: raise ValueError('invalid step: xspet=%d, ystep=%d' % (xstep, ystep)) cdef EPR_SRaster* raster_ptr raster_ptr = epr_create_bitmask_raster(src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create a new raster') return new_raster(raster_ptr) cdef class Band(EprObject): '''The band of an ENVISAT product The Band class contains information about a band within an ENVISAT product file which has been opened with the :func:`open` function. A new Band instance can be obtained with the :meth:`Product.get_band` method. ''' cdef EPR_SBandId* _ptr cdef Product _parent cdef inline check_closed_product(self): self._parent.check_closed_product() property product: '''The :class:`Product` instance to which this band belongs to''' def __get__(self): return self._parent property spectr_band_index: '''The (zero-based) spectral band index -1 if this is not a spectral band ''' def __get__(self): self.check_closed_product() return self._ptr.spectr_band_index property sample_model: '''The sample model operation The sample model operation applied to the source dataset for getting the correct samples from the MDS (for example MERIS L2). Possible values are: * ``*`` --> no operation (direct copy) * ``1OF2`` --> first byte of 2-byte interleaved MDS * ``2OF2`` --> second byte of 2-byte interleaved MDS * ``0123`` --> combine 3-bytes interleaved to 4-byte integer ''' def __get__(self): return self._ptr.sample_model property data_type: '''The data type of the band's pixels Possible values are: * ``*`` --> the datatype remains unchanged. * ``uint8_t`` --> 8-bit unsigned integer * ``uint32_t`` --> 32-bit unsigned integer * ``Float`` --> 32-bit IEEE floating point ''' def __get__(self): return self._ptr.data_type property scaling_method: '''Scaling method The scaling method which must be applied to the raw source data in order to get the 'real' pixel values in geo-physical units. Possible values are: * ``*`` --> no scaling applied * ``Linear_Scale`` --> linear scaling applied:: y = offset + scale * x * ``Log_Scale`` --> logarithmic scaling applied:: y = log10(offset + scale * x) ''' def __get__(self): return self._ptr.scaling_method property scaling_offset: '''The scaling offset Possible values are: * ``*`` --> no offset provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]` --> value is provided in global annotation dataset with name ``GADS`` in field ``field``. Optionally a second element index for multiple-element fields can be given too ''' def __get__(self): return self._ptr.scaling_offset property scaling_factor: '''The scaling factor Possible values are: * ``*`` --> no factor provided (implies scaling_method=*) * ``const`` --> a floating point constant * ``GADS.field[.field2]`` --> value is provided in global annotation dataset with name `GADS` in field `field``. Optionally a second element index for multiple-element fields can be given too ''' def __get__(self): return self._ptr.scaling_factor property bm_expr: '''A bit-mask expression used to filter valid pixels All others are set to zero ''' def __get__(self): if self._ptr.bm_expr is NULL: return None else: return _to_str(self._ptr.bm_expr, 'ascii') property unit: '''The geophysical unit for the band's pixel values''' def __get__(self): if self._ptr.unit is NULL: return None else: return _to_str(self._ptr.unit, 'ascii') property description: '''A short description of the band's contents''' def __get__(self): if self._ptr.description is NULL: return None else: return _to_str(self._ptr.description, 'ascii') property lines_mirrored: '''Mirrored lines flag If true (=1) lines will be mirrored (flipped) after read into a raster in order to ensure a pixel ordering in raster X direction from WEST to EAST. ''' def __get__(self): return self._ptr.lines_mirrored def get_name(self): '''get_name(self) Gets the name of the band ''' cdef char* name = NULL self.check_closed_product() name = epr_get_band_name(self._ptr) return _to_str(name, 'ascii') # @TODO: default values for src_width and src_height def create_compatible_raster(self, uint src_width, uint src_height, uint xstep=1, uint ystep=1): '''create_compatible_raster(self, src_width, src_height, xstep=1, ystep=1) Creates a raster which is compatible with the data type of the band The created raster is used to read the data in it (see :meth:`Band.read_raster`). The raster is defined on the grid of the product, from which the data are read. Spatial subsets and under-sampling are possible) through the parameter of the method. A raster is an object that allows direct access to data of a certain portion of the ENVISAT product that are read into the it. Such a portion is called the source. The complete ENVISAT product can be much greater than the source. One can move the raster over the complete ENVISAT product and read in turn different parts (always of the size of the source) of it into the raster. The source is specified by the parameters *height* and *width*. A typical example is a processing in blocks. Lets say, a block has 64x32 pixel. Then, my source has a width of 64 pixel and a height of 32 pixel. Another example is a processing of complete image lines. Then, my source has a widths of the complete product (for example 1121 for a MERIS RR product), and a height of 1). One can loop over all blocks read into the raster and process it. In addition, it is possible to defined a sub-sampling step for a raster. This means, that the source is not read 1:1 into the raster, but that only every 2nd or 3rd pixel is read. This step can be set differently for the across track (source_step_x) and along track (source_step_y) directions. :param src_width: the width (across track dimension) of the source to be read into the raster :param src_height: the height (along track dimension) of the source to be read into the raster :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the new raster instance or raises an exception (:exc:`EPRValueError`) if an error occurred ''' # @TODO: improve #if width is None: # width = self._parent.get_scene_width() # #if height is None: # height = self._parent.get_scene_height() cdef EPR_SRaster* raster_ptr self.check_closed_product() raster_ptr = epr_create_compatible_raster(self._ptr, src_width, src_height, xstep, ystep) if raster_ptr is NULL: pyepr_null_ptr_error('unable to create compatible raster with ' 'width=%d, height=%d xstep=%d, ystep=%d' % (src_width, src_height, xstep, ystep)) return new_raster(raster_ptr, self) cpdef read_raster(self, int xoffset=0, int yoffset=0, Raster raster=None): '''read_raster(self, xoffset=0, yoffset=0, Raster raster=None) Reads (geo-)physical values of the band of the specified source-region The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param raster: :class:`Raster` instance set with appropriate parameters to read into. If not provided a new :class:`Raster` is instantiated :returns: the :class:`Raster` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster` and :func:`create_raster` ''' cdef int ret self.check_closed_product() if raster is None: raster = self.create_compatible_raster() with nogil: ret = epr_read_band_raster(self._ptr, xoffset, yoffset, raster._ptr) if ret != 0: pyepr_check_errors() raster._data = None return raster # --- high level interface ------------------------------------------------ def read_as_array(self, width=None, height=None, uint xoffset=0, uint yoffset=0, uint xstep=1, uint ystep=1): '''read_as_array(self, width=None, height=None, xoffset=0, yoffset=0, xstep=1, ystep=1): Reads the specified source region as an :class:`numpy.ndarray` The source-region is a defined part of the whole ENVISAT product image, which shall be read into a raster. In this routine the co-ordinates are specified, where the source-region to be read starts. The dimension of the region and the sub-sampling are attributes of the raster into which the data are read. :param src_width: the width (across track dimension) of the source to be read into the raster. If not provided reads as much as possible :param src_height: the height (along track dimension) of the source to be read into the raster. If not provided reads as much as possible :param xoffset: across-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track source co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param xstep: the sub-sampling step across track of the source when reading into the raster :param ystep: the sub-sampling step along track of the source when reading into the raster :returns: the :class:`numpy.ndarray` instance in which data are read This method raises an instance of the appropriate :exc:`EPRError` sub-class if case of errors .. seealso:: :meth:`Band.create_compatible_raster`, :func:`create_raster` and :meth:`Band.read_raster` ''' if width is None: w = self.product.get_scene_width() if w > xoffset: width = w - xoffset else: raise ValueError('xoffset os larger that he scene width') if height is None: h = self.product.get_scene_height() if h > yoffset: height = h - yoffset else: raise ValueError('yoffset os larger that he scene height') raster = self.create_compatible_raster(width, height, xstep, ystep) self.read_raster(xoffset, yoffset, raster) return raster.data def __repr__(self): return 'epr.Band(%s) of epr.Product(%s)' % (self.get_name(), self.product.id_string) cdef new_band(EPR_SBandId* ptr, Product parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Band instance = Band.__new__(Band) instance._ptr = ptr instance._parent = parent return instance cdef class Dataset(EprObject): '''ENVISAT dataset The Dataset class contains information about a dataset within an ENVISAT product file which has been opened with the :func:`open` function. A new Dataset instance can be obtained with the :meth:`Product.get_dataset` or :meth:`Product.get_dataset_at` methods. ''' cdef EPR_SDatasetId* _ptr cdef Product _parent cdef inline check_closed_product(self): self._parent.check_closed_product() property product: '''The :class:`Product` instance to which this dataset belongs to''' def __get__(self): return self._parent property description: '''A short description of the band's contents''' def __get__(self): if self._ptr.description is NULL: return '' else: return _to_str(self._ptr.description, 'ascii') def get_name(self): '''get_name(self) Gets the name of the dataset ''' cdef char* name if self._ptr is not NULL: self.check_closed_product() name = epr_get_dataset_name(self._ptr) return _to_str(name, 'ascii') return '' def get_dsd_name(self): '''get_dsd_name(self) Gets the name of the DSD (dataset descriptor) ''' cdef char* name if self._ptr is not NULL: self.check_closed_product() name = epr_get_dsd_name(self._ptr) return _to_str(name, 'ascii') return '' def get_num_records(self): '''get_num_records(self) Gets the number of records of the dataset ''' if self._ptr is not NULL: self.check_closed_product() return epr_get_num_records(self._ptr) return 0 def get_dsd(self): '''get_dsd(self) Gets the dataset descriptor (DSD) ''' self.check_closed_product() return new_dsd(epr_get_dsd(self._ptr), self) def create_record(self): '''create_record(self) Creates a new record Creates a new, empty record with a structure compatible with the dataset. Such a record is typically used in subsequent calls to :meth:`Dataset.read_record`. :returns: the new record instance ''' self.check_closed_product() return new_record(epr_create_record(self._ptr), self, True) # @TODO: default: index=0 def read_record(self, uint index, Record record=None): '''read_record(self, index, record=None) Reads specified record of the dataset The record is identified through the given zero-based record index. In order to reduce memory reallocation, a record (pre-)created by the method :meth:`Dataset.create_record` can be passed to this method. Data is then read into this given record. If no record (``None``) is given, the method initiates a new one. In both cases, the record in which the data is read into will be returned. :param index: the zero-based record index :param record: a pre-created record to reduce memory reallocation, can be ``None`` (default) to let the function allocate a new record :returns: the record in which the data has been read into or raises an exception (:exc:`EPRValueError`) if an error occurred ''' cdef EPR_SRecord* record_ptr = NULL self.check_closed_product() if record: record_ptr = (record)._ptr with nogil: record_ptr = epr_read_record(self._ptr, index, record_ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to read record at index %d' % index) if not record: record = new_record(record_ptr, self, True) return record # --- high level interface ------------------------------------------------ # @NOTE: generator and generator expressions are not yet implemented in # cython. As a workaround a list is used def records(self): '''records(self) Return the list of records contained in the dataset ''' # @TODO: use __iter__ when generator expressions will be available #return list(self) cdef int idx self.check_closed_product() return [self.read_record(idx) for idx in range(epr_get_num_records(self._ptr))] def __iter__(self): # @TODO: use generator expression when it will be available #return (self.get_field_at(idx) # for idx in range(epr_get_num_elems(self._ptr))) return iter(self.records()) def __str__(self): lines = [repr(self), ''] lines.extend(map(str, self)) return '\n'.join(lines) def __repr__(self): return 'epr.Dataset(%s) %d records' % (self.get_name(), self.get_num_records()) cdef new_dataset(EPR_SDatasetId* ptr, Product parent=None): if ptr is NULL: pyepr_null_ptr_error() cdef Dataset instance = Dataset.__new__(Dataset) instance._ptr = ptr instance._parent = parent return instance cdef class Product(EprObject): '''ENVISAT product The Product class provides methods and properties to get information about an ENVISAT product file. .. seealso:: :func:`open` ''' cdef EPR_SProductId* _ptr def __cinit__(self, filename, *args, **kargs): cdef bytes bfilename = _to_bytes(filename, _DEFAULT_FS_ENCODING) cdef char* cfilename = bfilename with nogil: self._ptr = epr_open_product(cfilename) if self._ptr is NULL: # try to get error info from the lib pyepr_check_errors() raise ValueError('unable to open "%s"' % filename) def __dealloc__(self): if self._ptr is not NULL: epr_close_product(self._ptr) pyepr_check_errors() self._ptr = NULL cdef inline check_closed_product(self): if self._ptr is NULL: raise ValueError('I/O operation on closed file') def __init__(self, filename): # @NOTE: this method suppresses the default behavior of EprObject # that is raising an exception when it is instantiated by # the user. pass def close(self): '''close(self) Closes the ENVISAT :class:`epr.Product` product Closes the :class:`epr.Product` product and free the underlying file descriptor. This method has no effect if the :class:`Product` is already closed. Once the :class:`Product` is closed, any operation on it will raise a ValueError. As a convenience, it is allowed to call this method more than once; only the first call, however, will have an effect. ''' if self._ptr is not NULL: epr_close_product(self._ptr) pyepr_check_errors() self._ptr = NULL property file_path: '''The file's path including the file name''' def __get__(self): self.check_closed_product() if self._ptr.file_path is NULL: return None else: return _to_str(self._ptr.file_path, 'ascii') # @TODO: check #property istream: # '''The input stream as returned by the ANSI C :c:func:`fopen` # function for the given file path # # ''' # # def __get__(self): # if self._ptr.istream is NULL: # return None # else: # return os.fdopen(self._ptr.istream) property tot_size: '''The total size in bytes of the product file''' def __get__(self): self.check_closed_product() return self._ptr.tot_size property id_string: '''The product identifier string obtained from the MPH parameter 'PRODUCT' The first 10 characters of this string identify the product type, e.g. "MER_1P__FR" for a MERIS Level 1b full resolution product. The rest of the string decodes product instance properties. ''' def __get__(self): self.check_closed_product() if self._ptr.id_string is NULL: return None else: return _to_str(self._ptr.id_string, 'ascii') property meris_iodd_version: '''For MERIS L1b and RR and FR to provide backward compatibility''' def __get__(self): self.check_closed_product() return self._ptr.meris_iodd_version def get_scene_width(self): '''get_scene_width(self) Gets the product's scene width in pixels ''' self.check_closed_product() return epr_get_scene_width(self._ptr) def get_scene_height(self): '''get_scene_height(self) Gets the product's scene height in pixels ''' self.check_closed_product() return epr_get_scene_height(self._ptr) def get_num_datasets(self): '''get_num_datasets(self) Gets the number of all datasets contained in a product ''' self.check_closed_product() return epr_get_num_datasets(self._ptr) def get_num_dsds(self): '''get_num_dsds(self) Gets the number of all :class:`DSD`\ s Gets the number of all :class:`DSD`\ s (dataset descriptors) contained in the product ''' self.check_closed_product() return epr_get_num_dsds(self._ptr) def get_num_bands(self): '''get_num_bands(self) Gets the number of all bands contained in a product ''' self.check_closed_product() return epr_get_num_bands(self._ptr) def get_dataset_at(self, uint index): '''get_dataset_at(self, index) Gets the dataset at the specified position within the product :param index: the index identifying the position of the dataset, starting with 0, must not be negative :returns: the requested :class:`Dataset` ''' cdef EPR_SDatasetId* dataset_id dataset_id = epr_get_dataset_id_at(self._ptr, index) if dataset_id is NULL: pyepr_null_ptr_error('unable to get dataset at index %d' % index) return new_dataset(dataset_id, self) def get_dataset(self, name): '''get_dataset(self, name) Gets the dataset corresponding to the specified dataset name :param name: the dataset name :returns: the requested :class:`Dataset` instance ''' cdef EPR_SDatasetId* dataset_id cdef bytes cname = _to_bytes(name) dataset_id = epr_get_dataset_id(self._ptr, cname) if dataset_id is NULL: pyepr_null_ptr_error(r'unable to get dataset "%s"' % name) return new_dataset(dataset_id, self) def get_dsd_at(self, uint index): '''get_dsd_at(self, index) Gets the :class:`DSD` at the specified position Gets the :class:`DSD` (dataset descriptor) at the specified position within the product. :param index: the index identifying the position of the :class:`DSD`, starting with 0, must not be negative :returns: the requested :class:`DSD` instance ''' cdef EPR_SDSD* dsd_ptr self.check_closed_product() dsd_ptr = epr_get_dsd_at(self._ptr, index) if dsd_ptr is NULL: pyepr_null_ptr_error('unable to get DSD at index "%d"' % index) return new_dsd(dsd_ptr, self) def get_mph(self): '''get_mph(self) The main product header (MPH) :class:`Record` ''' cdef EPR_SRecord* record_ptr record_ptr = epr_get_mph(self._ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to get MPH record') return new_record(record_ptr, self, False) def get_sph(self): '''get_sph(self) The specific product header (SPH) :class:`Record` ''' cdef EPR_SRecord* record_ptr record_ptr = epr_get_sph(self._ptr) if record_ptr is NULL: pyepr_null_ptr_error('unable to get SPH record') return new_record(record_ptr, self, False) def get_band(self, name): '''get_band(self, name) Gets the band corresponding to the specified name. :param name: the name of the band :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found ''' cdef EPR_SBandId* band_id cdef bytes cname = _to_bytes(name) band_id = epr_get_band_id(self._ptr, cname) if band_id is NULL: pyepr_null_ptr_error('unable to get band "%s"' % name) return new_band(band_id, self) def get_band_at(self, uint index): '''get_band_at(self, index) Gets the band at the specified position within the product :param index: the index identifying the position of the band, starting with 0, must not be negative :returns: the requested :class:`Band` instance, or raises a :exc:`EPRValueError` if not found ''' cdef EPR_SBandId* band_id band_id = epr_get_band_id_at(self._ptr, index) if band_id is NULL: pyepr_null_ptr_error('unable to get band at index "%d"' % index) return new_band(band_id, self) def read_bitmask_raster(self, bm_expr, int xoffset, int yoffset, Raster raster not None): '''read_bitmask_raster(self, bm_expr, xoffset, yoffset, raster) Calculates a bit-mask raster Calculates a bit-mask, composed of flags of the given product and combined as described in the given bit-mask expression, for the a certain dimension and sub-sampling as defined in the given raster. :param bm_expr: a string holding the logical expression for the definition of the bit-mask. In a bit-mask expression, any number of the flag-names (found in the DDDB) can be composed with "(", ")", "NOT", "AND", "OR". Valid bit-mask expression are for example ``flags.LAND OR flags.CLOUD`` or ``NOT flags.WATER AND flags.TURBID_S`` :param xoffset: across-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param yoffset: along-track co-ordinate in pixel co-ordinates (zero-based) of the upper right corner of the source-region :param raster: the raster for the bit-mask. The data type of the raster must be either e_tid_uchar or e_tid_char :returns: zero for success, an error code otherwise .. seealso: :func:`create_bitmask_raster` ''' cdef bytes c_bm_expr = _to_bytes(bm_expr) cdef int ret = 0 self.check_closed_product() ret = epr_read_bitmask_raster(self._ptr, c_bm_expr, xoffset, yoffset, (raster)._ptr) if ret != 0: pyepr_check_errors() return raster # --- high level interface ------------------------------------------------ property closed: '''True if the :class:`epr.Product` is closed.''' def __get__(self): return self._ptr is NULL def get_dataset_names(self): '''get_dataset_names(self) Return the list of names of the datasets in the product .. note:: this method has no correspondent in the C API ''' cdef EPR_SDatasetId* dataset_ptr cdef int idx cdef char* name names = [] for idx in range(self.get_num_datasets()): dataset_ptr = epr_get_dataset_id_at(self._ptr, idx) name = epr_get_dataset_name(dataset_ptr) names.append(_to_str(name, 'ascii')) return names def get_band_names(self): '''get_band_names(self) Return the list of names of the bands in the product .. note:: this method has no correspondent in the C API ''' cdef EPR_SBandId* band_ptr cdef int idx cdef char* name names = [] for idx in range(self.get_num_bands()): band_ptr = epr_get_band_id_at(self._ptr, idx) name = epr_get_band_name(band_ptr) names.append(_to_str(name, 'ascii')) return names # @NOTE: generator and generator expressions are not yet implemented in # cython. As a workaround a list is used def datasets(self): '''datasets(self) Return the list of dataset in the product ''' cdef int idx return [self.get_dataset_at(idx) for idx in range(epr_get_num_datasets(self._ptr))] def bands(self): '''bands(self) Return the list of bands in the product ''' return [self.get_band_at(idx) for idx in range(epr_get_num_bands(self._ptr))] # @TODO: iter on both datasets and bands (??) #def __iter__(self): # return itertools.chain((self.datasets(), self.bands())) def __repr__(self): return 'epr.Product(%s) %d datasets, %d bands' % (self.id_string, self.get_num_datasets(), self.get_num_bands()) def __str__(self): lines = [repr(self), ''] lines.extend(map(repr, self.datasets())) lines.append('') lines.extend(map(repr, self.bands())) return '\n'.join(lines) def __enter__(self): return self def __exit__(self, *exc_info): self.close() def open(filename): '''open(filename) Opens the ENVISAT product Opens the ENVISAT product file with the given file path, reads MPH, SPH and all DSDs, organized the table with parameter of line length and tie points number. :param product_file_path: the path to the ENVISAT product file :returns: the :class:`Product` instance representing the specified product. An exception (:exc:`exceptions.ValueError`) is raised if the file could not be opened. .. seealso :class:`Product` ''' return Product(filename) # library initialization/finalization _EPR_C_LIB = _CLib.__new__(_CLib) import atexit @atexit.register def _close_api(): # ensure that all EprObject(s) are collected before removing the last # reference to _EPR_C_LIB import gc gc.collect() global _EPR_C_LIB _EPR_C_LIB = None # clean namespace del atexit, namedtuple pyepr-0.8.1/test/000077500000000000000000000000001221261026300136315ustar00rootroot00000000000000pyepr-0.8.1/test/test_all.py000066400000000000000000002112701221261026300160150ustar00rootroot00000000000000#!/usr/bin/env python # -*- coding: utf-8 -*- # Copyright (C) 2011-2013, Antonio Valentino # # This file is part of PyEPR. # # PyEPR 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. # # PyEPR is distributed in the hope that it will 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 PyEPR. If not, see . import os import re import sys import numbers import operator import unittest import tempfile import functools import numpy as np TESTDIR = os.path.abspath(os.path.dirname(__file__)) sys.path.insert(0, os.path.join(TESTDIR, os.pardir)) import epr EPR_TO_NUMPY_TYPE = { #epr.E_TID_UNKNOWN: np.NPY_NOTYPE, epr.E_TID_UCHAR: np.ubyte, epr.E_TID_CHAR: np.byte, epr.E_TID_USHORT: np.ushort, epr.E_TID_SHORT: np.short, epr.E_TID_UINT: np.uint, epr.E_TID_INT: np.int, epr.E_TID_FLOAT: np.float32, epr.E_TID_DOUBLE: np.double, epr.E_TID_STRING: np.str, #epr.E_TID_SPARE = e_tid_spare, #epr.E_TID_TIME = e_tid_time, } TEST_PRODUCT = 'MER_LRC_2PTGMV20000620_104318_00000104X000_00000_00000_0001.N1' def quiet(func): @functools.wraps(func) def wrapper(*args, **kwds): sysout = sys.stdout syserr = sys.stderr try: # using '/dev/null' doesn't work in python 3 because the file # object coannot be converted into a C FILE* #with file(os.devnull) as fd: with tempfile.TemporaryFile('w+') as fd: sys.stdout = fd sys.stderr = fd ret = func(*args, **kwds) finally: sys.stdout = sysout sys.stderr = syserr return ret return wrapper def equal_products(product1, product2): if type(product1) != type(product2): return False for name in ('file_path', 'tot_size', 'id_string', 'meris_iodd_version'): if getattr(product1, name) != getattr(product2, name): return False for name in ('get_scene_width', 'get_scene_height', 'get_num_datasets', 'get_num_dsds', 'get_num_bands', ): if getattr(product1, name)() != getattr(product2, name)(): return False return True class TestOpenProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def test_open(self): product = epr.open(self.PRODUCT_FILE) self.assertTrue(isinstance(product, epr.Product)) if 'unicode' in dir(__builtins__): def test_open_unicode(self): filename = unicode(self.PRODUCT_FILE) product = epr.open(filename) self.assertTrue(isinstance(product, epr.Product)) else: def test_open_bytes(self): filename = self.PRODUCT_FILE.encode('UTF-8') product = epr.open(filename) self.assertTrue(isinstance(filename, bytes)) self.assertTrue(isinstance(product, epr.Product)) def test_product_constructor(self): product = epr.Product(self.PRODUCT_FILE) self.assertTrue(isinstance(product, epr.Product)) def test_open_failure(self): self.assertRaises(epr.EPRError, epr.open, '') def test_filename_type(self): self.assertRaises(TypeError, epr.open, 3) def test_open_failure_invalid_product(self): self.assertRaises(ValueError, epr.open, __file__) def test_product_constructor_failure(self): self.assertRaises(epr.EPRError, epr.Product, '') def test_product_constructor_failure_invalid_product(self): self.assertRaises(ValueError, epr.Product, __file__) class TestProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) ID_STRING = 'MER_LRC_2PTGMV20000620_104318_00000104X000_00000' TOT_SIZE = 407461 DATASET_NAMES = [ 'Quality_ADS', 'Scaling_Factor_GADS', 'Tie_points_ADS', 'Cloud_Type_OT', 'Cloud_Top_Pressure', 'Vapour_Content', 'Flags', ] DATASET_NAME = 'Vapour_Content' DATASET_WIDTH = 281 DATASET_HEIGHT = 149 DATASET_NDSDS = 18 DATASET_NBANDS = 19 BAND_NAME = 'water_vapour' SPH_DESCRIPTOR = 'MER_LRC_2P SPECIFIC HEADER' MERIS_IODD_VERSION = 7 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def test_close(self): self.product.close() def test_double_close(self): self.product.close() self.product.close() def test_file_path_property(self): self.assertEqual(self.product.file_path, self.PRODUCT_FILE) def test_tot_size_property(self): self.assertEqual(self.product.tot_size, self.TOT_SIZE) def test_id_string_property(self): self.assertEqual(self.product.id_string, self.ID_STRING) def test_meris_iodd_version_property(self): self.assertEqual(self.product.meris_iodd_version, self.MERIS_IODD_VERSION) def test_get_scene_width(self): self.assertEqual(self.product.get_scene_width(), self.DATASET_WIDTH) def test_get_scene_height(self): self.assertEqual(self.product.get_scene_height(), self.DATASET_HEIGHT) def test_get_num_datasets(self): self.assertEqual(self.product.get_num_datasets(), len(self.DATASET_NAMES)) def test_get_num_dsds(self): self.assertEqual(self.product.get_num_dsds(), self.DATASET_NDSDS) def test_get_num_bands(self): self.assertEqual(self.product.get_num_bands(), self.DATASET_NBANDS) def test_get_dataset_at(self): dataset = self.product.get_dataset_at(0) self.assertTrue(dataset) def test_get_dataset(self): dataset = self.product.get_dataset(self.DATASET_NAME) self.assertTrue(dataset) if 'unicode' in dir(__builtins__): def test_get_dataset_unicode(self): dataset = self.product.get_dataset(unicode(self.DATASET_NAME)) self.assertTrue(dataset) else: def test_get_dataset_bytes(self): filename = self.DATASET_NAME.encode('UTF-8') dataset = self.product.get_dataset(filename) self.assertTrue(isinstance(filename, bytes)) self.assertTrue(dataset) def test_datasets(self): datasets = [self.product.get_dataset_at(idx) for idx in range(self.product.get_num_datasets())] dataset_names = [ds.get_name() for ds in datasets] self.assertEqual(dataset_names, self.DATASET_NAMES) def test_get_dsd_at(self): self.assertTrue(isinstance(self.product.get_dsd_at(0), epr.DSD)) def test_get_mph(self): record = self.product.get_mph() self.assertTrue(isinstance(record, epr.Record)) product = record.get_field('PRODUCT').get_elem() self.assertEqual(product.decode('ascii'), os.path.basename(self.PRODUCT_FILE)) def test_get_sph(self): record = self.product.get_sph() self.assertTrue(isinstance(record, epr.Record)) sph_desct = record.get_field('SPH_DESCRIPTOR').get_elem() self.assertEqual(sph_desct.decode('ascii'), self.SPH_DESCRIPTOR) def test_get_band_id(self): self.assertTrue(isinstance(self.product.get_band(self.BAND_NAME), epr.Band)) if 'unicode' in dir(__builtins__): def test_get_band_id_unicode(self): band_name = unicode(self.BAND_NAME) self.assertTrue(isinstance(self.product.get_band(band_name), epr.Band)) else: def test_get_band_id_bytes(self): band_name = self.BAND_NAME.encode('UTF-8') self.assertTrue(isinstance(band_name, bytes)) self.assertTrue(isinstance(self.product.get_band(self.BAND_NAME), epr.Band)) def test_get_band_id_invalid_name(self): self.assertRaises(ValueError, self.product.get_band, '') def test_get_band_id_at(self): self.assertTrue(isinstance(self.product.get_band_at(0), epr.Band)) def test_get_band_id_at_invalid_index(self): self.assertRaises(ValueError, self.product.get_band_at, self.product.get_num_bands()) def test_read_bitmask_raster(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD' xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) raster = self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) if 'unicode' in dir(__builtins__): def test_read_bitmask_raster_unicode(self): bm_expr = unicode('l2_flags.LAND AND !l2_flags.CLOUD') xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) raster = self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) else: def test_read_bitmask_raster_bytes(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD'.encode('UTF-8') self.assertTrue(isinstance(bm_expr, bytes)) xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) raster = self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) def test_read_bitmask_raster_with_invalid_bm_expr(self): bm_expr = 'l5_flags.LAND AND !l2_flags.CLOUD' xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_bitmask_raster(width, height) self.assertRaises(epr.EPRError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) try: self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) except epr.EPRError as e: self.assertEqual(e.code, 301) def test_read_bitmask_raster_with_wrong_data_type(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD' xoffset = self.DATASET_WIDTH // 2 yoffset = self.DATASET_HEIGHT // 2 width = self.DATASET_WIDTH // 2 height = self.DATASET_HEIGHT // 2 raster = epr.create_raster(epr.E_TID_DOUBLE, width, height) self.assertRaises(epr.EPRError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) try: self.product.read_bitmask_raster(bm_expr, xoffset, yoffset, raster) except epr.EPRError as e: self.assertEqual(e.code, 7) class TestProductHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAMES = TestProduct.DATASET_NAMES BAND_NAMES = [ 'latitude', 'longitude', 'dem_alt', 'dem_rough', 'lat_corr', 'lon_corr', 'sun_zenith', 'sun_azimuth', 'view_zenith', 'view_azimuth', 'zonal_wind', 'merid_wind', 'atm_press', 'ozone', 'rel_hum', 'water_vapour', 'cloud_opt_thick', 'cloud_top_press', 'l2_flags', ] def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def test_closed(self): self.assertFalse(self.product.closed) self.product.close() self.assertTrue(self.product.closed) def test_readonly_closed(self): self.assertFalse(self.product.closed) self.assertRaises(AttributeError, setattr, self.product, 'closed', True) def test_get_dataset_names(self): self.assertEqual(self.product.get_dataset_names(), self.DATASET_NAMES) def test_get_band_names(self): self.assertEqual(self.product.get_band_names(), self.BAND_NAMES) def test_datasets(self): datasets = self.product.datasets() self.assertTrue(datasets) self.assertEqual(len(datasets), self.product.get_num_datasets()) for index, dataset in enumerate(datasets): ref_dataset = self.product.get_dataset_at(index) self.assertEqual(dataset.get_name(), ref_dataset.get_name()) def test_bands(self): bands = self.product.bands() self.assertTrue(bands) self.assertEqual(len(bands), self.product.get_num_bands()) for index, band in enumerate(bands): ref_band = self.product.get_band_at(index) self.assertEqual(band.get_name(), ref_band.get_name()) # @TODO: complete #def test_iter(self): # pass def test_repr(self): pattern = ('epr\.Product\((?P\w+)\) ' '(?P\d+) datasets, ' '(?P\d+) bands') mobj = re.match(pattern, repr(self.product)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.product.id_string) self.assertEqual(mobj.group('n_datasets'), str(self.product.get_num_datasets())) self.assertEqual(mobj.group('n_bands'), str(self.product.get_num_bands())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.product), str)) def test_str(self): lines = [repr(self.product), ''] lines.extend(map(repr, self.product.datasets())) lines.append('') lines.extend(map(str, self.product.bands())) data = '\n'.join(lines) self.assertEqual(data, str(self.product)) def test_str_type(self): self.assertTrue(isinstance(str(self.product), str)) def test_contect_manager(self): with epr.open(self.PRODUCT_FILE) as product: self.assertTrue(isinstance(product, epr.Product)) self.assertFalse(product.closed) self.assertTrue(str(product)) self.assertTrue(product.closed) class TestClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Vapour_Content' BAND_NAME = 'water_vapour' def setUp(self): self.product = epr.open(self.PRODUCT_FILE) self.product.close() def test_properties(self): for name in ('file_path', 'tot_size', 'id_string', 'meris_iodd_version'): self.assertRaises(ValueError, getattr, self.product, name) def test_get_get_scene_width(self): self.assertRaises(ValueError, self.product.get_scene_width) def test_get_get_scene_height(self): self.assertRaises(ValueError, self.product.get_scene_height) def test_get_num_datasets(self): self.assertRaises(ValueError, self.product.get_num_datasets) def test_get_num_dsds(self): self.assertRaises(ValueError, self.product.get_num_dsds) def test_get_num_bands(self): self.assertRaises(ValueError, self.product.get_num_bands) def test_get_mph(self): self.assertRaises(ValueError, self.product.get_mph) def test_get_sph(self): self.assertRaises(ValueError, self.product.get_sph) def test_get_dataset_at(self): self.assertRaises(ValueError, self.product.get_dataset_at, 0) def test_get_dataset(self): self.assertRaises(ValueError, self.product.get_dataset, self.DATASET_NAME) def test_get_dsd_at(self): self.assertRaises(ValueError, self.product.get_dsd_at, 0) def test_get_band_id(self): self.assertRaises(ValueError, self.product.get_band, self.BAND_NAME) def test_get_band_id_at(self): self.assertRaises(ValueError, self.product.get_band_at, 0) def test_read_bitmask_raster(self): bm_expr = 'l2_flags.LAND AND !l2_flags.CLOUD' raster = epr.create_bitmask_raster(12, 10) xoffset = 0 yoffset = 0 self.assertRaises(ValueError, self.product.read_bitmask_raster, bm_expr, xoffset, yoffset, raster) def test_get_dataset_names(self): self.assertRaises(ValueError, self.product.get_dataset_names) def test_get_band_names(self): self.assertRaises(ValueError, self.product.get_band_names) def test_datasets(self): self.assertRaises(ValueError, self.product.datasets) def test_bands(self): self.assertRaises(ValueError, self.product.bands) def test_repr(self): self.assertRaises(ValueError, repr, self.product) def test_str(self): self.assertRaises(ValueError, str, self.product) class TestDataset(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Vapour_Content' DATASET_DESCRIPTION = 'Level 2 MDS Total Water vapour' NUM_RECORDS = 149 DSD_NAME = 'MDS Vapour Content' def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) def test_product_property(self): self.assertTrue(equal_products(self.dataset.product, self.product)) def test_description_property(self): self.assertEqual(self.dataset.description, self.DATASET_DESCRIPTION) def test_get_name(self): self.assertEqual(self.dataset.get_name(), self.DATASET_NAME) def test_get_dsd_name(self): self.assertEqual(self.dataset.get_dsd_name(), self.DSD_NAME) def test_get_num_records(self): self.assertEqual(self.dataset.get_num_records(), self.NUM_RECORDS) def test_get_dsd(self): self.assertTrue(isinstance(self.dataset.get_dsd(), epr.DSD)) def test_create_record(self): record = self.dataset.create_record() self.assertTrue(isinstance(record, epr.Record)) def test_read_record(self): record = self.dataset.read_record(0) self.assertTrue(isinstance(record, epr.Record)) def test_read_record_passed(self): created_record = self.dataset.create_record() read_record = self.dataset.read_record(0, created_record) self.assertTrue(created_record is read_record) # @TODO: check contents def test_read_record_passed_invalid(self): self.assertRaises(TypeError, self.dataset.read_record, 0, 0) class TestDatasetHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestDataset.DATASET_NAME def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) def test_records(self): records = self.dataset.records() self.assertTrue(records) self.assertEqual(len(records), self.dataset.get_num_records()) for index, record in enumerate(records): ref_record = self.dataset.read_record(index) self.assertEqual(record.get_field_names(), ref_record.get_field_names()) def test_iter(self): index = 0 for record in self.dataset: ref_record = self.dataset.read_record(index) self.assertEqual(record.get_field_names(), ref_record.get_field_names()) index += 1 self.assertEqual(index, self.dataset.get_num_records()) def test_repr(self): pattern = 'epr\.Dataset\((?P\w+)\) (?P\d+) records' mobj = re.match(pattern, repr(self.dataset)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.dataset.get_name()) self.assertEqual(mobj.group('num'), str(self.dataset.get_num_records())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.dataset), str)) def test_str(self): lines = [repr(self.dataset), ''] lines.extend(map(str, self.dataset)) data = '\n'.join(lines) self.assertEqual(data, str(self.dataset)) def test_str_type(self): self.assertTrue(isinstance(str(self.dataset), str)) class TestDatasetOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Vapour_Content' def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dataset = self.product.get_dataset(self.DATASET_NAME) self.record = self.dataset.create_record() self.product.close() def test_product_property(self): self.assertTrue(isinstance(self.dataset.product, epr.Product)) def test_description_property(self): # @TODO: check self.assertEqual(self.dataset.description, '') def test_get_name(self): self.assertRaises(ValueError, self.dataset.get_name) def test_get_dsd_name(self): self.assertRaises(ValueError, self.dataset.get_dsd_name) def test_get_num_records(self): self.assertRaises(ValueError, self.dataset.get_num_records) def test_get_dsd(self): self.assertRaises(ValueError, self.dataset.get_dsd) def test_create_record(self): self.assertRaises(ValueError, self.dataset.create_record) def test_read_record(self): self.assertRaises(ValueError, self.dataset.read_record, 0) def test_read_record_passed(self): self.assertRaises(ValueError, self.dataset.read_record, 0, self.record) def test_records(self): self.assertRaises(ValueError, self.dataset.records) def test_iter(self): self.assertRaises(ValueError, iter, self.dataset) def test_repr(self): self.assertRaises(ValueError, repr, self.dataset) def test_str(self): self.assertRaises(ValueError, str, self.dataset) class TestBand(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) BAND_NAMES = ( 'latitude', 'longitude', 'dem_alt', 'dem_rough', 'lat_corr', 'lon_corr', 'sun_zenith', 'sun_azimuth', 'view_zenith', 'view_azimuth', 'zonal_wind', 'merid_wind', 'atm_press', 'ozone', 'rel_hum', 'water_vapour', 'cloud_opt_thick', 'cloud_top_press', 'l2_flags', ) BAND_NAME = 'water_vapour' BAND_DESCTIPTION = 'Water vapour content' XOFFSET = 30 YOFFSET = 20 WIDTH = 200 HEIGHT = 100 SCALING_FACTOR = 0.10000000149011612 SCALING_OFFSET = -0.10000000149011612 UNIT = 'g/cm^2' DATA_TYPE = np.float32 TEST_DATA = np.asarray([ [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000], [0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.20000002, 0.10000000], ]) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band(self.BAND_NAME) def test_product_property(self): self.assertTrue(equal_products(self.band.product, self.product)) # @TODO: check #def test_dataset_ref_property(self): # self.assertEqual(self.band.dataset_ref, ???) def test_spectr_band_index_property(self): self.assertEqual(self.band.spectr_band_index, -1) def test_sample_model_property(self): self.assertEqual(self.band.sample_model, 0) def test_data_type_property(self): self.assertEqual(self.band.data_type, epr.E_TID_FLOAT) def test_scaling_method_property(self): self.assertEqual(self.band.scaling_method, epr.E_SMID_LIN) def test_scaling_offset_property(self): self.assertEqual(self.band.scaling_offset, self.SCALING_OFFSET) def test_scaling_factor_property(self): self.assertEqual(self.band.scaling_factor, self.SCALING_FACTOR) self.assertTrue(isinstance(self.band.scaling_factor, float)) def test_bm_expr_property(self): self.assertEqual(self.band.bm_expr, None) def test_unit_property(self): self.assertEqual(self.band.unit, self.UNIT) def test_description_property(self): self.assertEqual(self.band.description, self.BAND_DESCTIPTION) def test_lines_mirrored_property(self): self.assertTrue(isinstance(self.band.lines_mirrored, bool)) self.assertEqual(self.band.lines_mirrored, True) def test_get_name(self): for index in range(len(self.BAND_NAMES)): b = self.product.get_band_at(index) self.assertEqual(b.get_name(), self.BAND_NAMES[index]) def test_create_compatible_raster(self): width = self.product.get_scene_width() height = self.product.get_scene_height() raster = self.band.create_compatible_raster(width, height) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_create_compatible_raster_with_invalid_size(self): width = self.product.get_scene_width() height = self.product.get_scene_height() self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, -1, height) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, -1) # @TODO: check #self.assertRaises(ValueError, self.band.create_compatible_raster, # self.product.get_scene_width() + 10, height) #self.assertRaises(ValueError, self.band.create_compatible_raster, # width, self.product.get_scene_height() + 10) def test_create_compatible_raster_with_step(self): src_width = self.product.get_scene_width() src_height = self.product.get_scene_height() xstep = 2 ystep = 3 width = (src_width - 1) // xstep + 1 height = (src_height - 1) // ystep + 1 raster = self.band.create_compatible_raster(src_width, src_height, xstep, ystep) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), width) self.assertEqual(raster.get_height(), height) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_create_compatible_raster_with_invalid_step(self): width = self.product.get_scene_width() height = self.product.get_scene_height() self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, -1, 2) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, 2, -1) self.assertRaises((ValueError, OverflowError), self.band.create_compatible_raster, width, height, -2, -1) # @TODO: check #self.assertRaises((ValueError, OverflowError), # self.band.create_compatible_raster, # width, height, width + 10, 2) #self.assertRaises((ValueError, OverflowError), # self.band.create_compatible_raster, # width, height, 2, height + 10) #self.assertRaises((ValueError, OverflowError), # self.band.create_compatible_raster, # width, height, width + 10, height + 10) def test_read_raster(self): raster = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) self.band.read_raster(self.XOFFSET, self.YOFFSET, raster) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.get_width(), self.WIDTH) self.assertEqual(raster.get_height(), self.HEIGHT) # @NOTE: data type on disk is epr.E_TID_USHORT self.assertEqual(raster.data_type, epr.E_TID_FLOAT) def test_read_raster_default_offset(self): height, width = self.TEST_DATA.shape raster1 = self.band.create_compatible_raster(width, height) raster2 = self.band.create_compatible_raster(width, height) self.band.read_raster(0, 0, raster1) self.band.read_raster(raster=raster2) self.assertEqual(raster1.get_pixel(0, 0), raster2.get_pixel(0, 0)) self.assertEqual(raster1.get_pixel(width - 1, height - 1), raster2.get_pixel(width - 1, height - 1)) def test_read_raster_with_invalid_raster(self): self.assertRaises(TypeError, self.band.read_raster, 0, 0, 0) def test_read_raster_with_invalid_offset(self): raster = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) # @TODO: check self.assertRaises(ValueError, self.band.read_raster, -1, 0, raster) self.assertRaises(ValueError, self.band.read_raster, 0, -1, raster) self.assertRaises(ValueError, self.band.read_raster, -1, -1, raster) # @TODO: check #self.assertRaises(ValueError, self.band.read_raster, # width + 10, 0, raster) #self.assertRaises(ValueError, self.band.read_raster, # 0, height + 10, raster) #self.assertRaises(ValueError, self.band.read_raster, # width + 10, height + 10, raster) def test_read_as_array(self): data = self.band.read_as_array(self.WIDTH, self.HEIGHT, self.XOFFSET, self.YOFFSET) self.assertTrue(isinstance(data, np.ndarray)) self.assertEqual(data.shape, (self.HEIGHT, self.WIDTH)) self.assertEqual(data.dtype, self.DATA_TYPE) h, w = self.TEST_DATA.shape self.assertTrue(np.allclose(data[:h, :w], self.TEST_DATA)) # @TODO: check, it seems to be an upstream bug or a metter of data # mirroring # @SEEALSO: https://www.brockmann-consult.de/beam-jira/browse/EPR-2 #def test_read_as_array_with_step(self): # width = 400 # height = 300 # # data = self.band.read_as_array(width, height, # self.XOFFSET, self.YOFFSET, 2, 2) # # self.assertTrue(isinstance(data, np.ndarray)) # self.assertEqual(data.shape, (height/2, width/2)) # self.assertEqual(data.dtype, self.DATA_TYPE) # # h, w = self.TEST_DATA.shape # self.assertTrue( # np.all(data[:h / 2, :w / 2] == self.TEST_DATA[::2, ::2])) # #self.assertTrue( # # np.all(data[:h / 2, :w / 2] == self.TEST_DATA[::2, 1::2])) # @TODO: more read_as_array testing class TestBandHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def test_repr(self): pattern = ('epr.Band\((?P\w+)\) of ' 'epr.Product\((?P\w+)\)') for band in self.product.bands(): mobj = re.match(pattern, repr(band)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), band.get_name()) self.assertEqual(mobj.group('product_id'), self.product.id_string) def test_repr_type(self): band = self.product.get_band_at(0) self.assertTrue(isinstance(repr(band), str)) def test_str_type(self): band = self.product.get_band_at(0) self.assertTrue(isinstance(str(band), str)) class TestBandOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) WIDTH = 12 HEIGHT = 10 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band_at(0) self.raster = self.band.create_compatible_raster(self.WIDTH, self.HEIGHT) self.product.close() def test_product_property(self): self.assertTrue(isinstance(self.band.product, epr.Product)) # @TODO: check #def test_properties(self): # for name in ('spectr_band_index', 'sample_model', 'data_type', # 'scaling_method', 'scaling_offset', 'scaling_factor', # 'bm_expr', 'unit', 'description', 'lines_mirrored'): # self.assertRaises(ValueError, getattr, self.band, name) def test_sample_model_property(self): self.assertEqual(self.band.sample_model, 0) def test_data_type_property(self): self.assertEqual(self.band.data_type, 0) def test_scaling_method_property(self): self.assertEqual(self.band.scaling_method, epr.E_SMID_LIN) def test_scaling_offset_property(self): self.assertEqual(self.band.scaling_offset, 0) def test_scaling_factor_property(self): self.assertEqual(self.band.scaling_factor, 0) self.assertTrue(isinstance(self.band.scaling_factor, float)) def test_bm_expr_property(self): self.assertEqual(self.band.bm_expr, None) def test_unit_property(self): self.assertEqual(self.band.unit, None) def test_description_property(self): self.assertEqual(self.band.description, None) def test_lines_mirrored_property(self): self.assertTrue(isinstance(self.band.lines_mirrored, bool)) self.assertEqual(self.band.lines_mirrored, False) # END: check def test_get_name(self): self.assertRaises(ValueError, self.product.get_band_at, 0) def test_create_compatible_raster(self): self.assertRaises(ValueError, self.band.create_compatible_raster, self.WIDTH, self.HEIGHT) def test_read_raster(self): self.assertRaises(ValueError, self.band.read_raster) def test_read_as_array(self): self.assertRaises(ValueError, self.band.read_as_array, self.WIDTH, self.HEIGHT) def test_str(self): self.assertRaises(ValueError, str, self.band) def test_repr(self): self.assertRaises(ValueError, repr, self.band) class TestCreateRaster(unittest.TestCase): RASTER_WIDTH = 400 RASTER_HEIGHT = 300 RASTER_DATA_TYPE = epr.E_TID_FLOAT def test_create_raster(self): raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, self.RASTER_DATA_TYPE) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_raster_with_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT raster = epr.create_raster(self.RASTER_DATA_TYPE, src_width, src_height, 3, 2) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, self.RASTER_DATA_TYPE) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_raster_with_invalid_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT self.assertRaises(ValueError, epr.create_raster, self.RASTER_DATA_TYPE, src_width, src_height, 0, 2) def test_create_raster_with_invalid_size(self): self.assertRaises((ValueError, OverflowError), epr.create_raster, self.RASTER_DATA_TYPE, -1, self.RASTER_HEIGHT) def test_create_bitmask_raster(self): raster = epr.create_bitmask_raster(self.RASTER_WIDTH, self.RASTER_HEIGHT) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, epr.E_TID_UCHAR) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_bitmask_raster_with_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT raster = epr.create_bitmask_raster(src_width, src_height, 3, 2) self.assertTrue(isinstance(raster, epr.Raster)) self.assertEqual(raster.data_type, epr.E_TID_UCHAR) self.assertEqual(raster.get_width(), self.RASTER_WIDTH) self.assertEqual(raster.get_height(), self.RASTER_HEIGHT) def test_create_bitmask_raster_with_invalid_step(self): src_width = 3 * self.RASTER_WIDTH src_height = 2 * self.RASTER_HEIGHT self.assertRaises(ValueError, epr.create_bitmask_raster, src_width, src_height, 0, 2) def test_create_bitmask_raster_with_invalid_size(self): self.assertRaises((ValueError, OverflowError), epr.create_bitmask_raster, -1, self.RASTER_HEIGHT) class TestRaster(unittest.TestCase): RASTER_WIDTH = TestBand.WIDTH RASTER_HEIGHT = TestBand.HEIGHT RASTER_DATA_TYPE = epr.E_TID_FLOAT RASTER_ELEM_SIZE = 4 TEST_DATA = np.zeros((10, 10)) def setUp(self): self.raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) def test_get_width(self): self.assertEqual(self.raster.get_width(), self.RASTER_WIDTH) def test_get_height(self): self.assertEqual(self.raster.get_height(), self.RASTER_HEIGHT) def test_get_elem_size(self): self.assertEqual(self.raster.get_elem_size(), self.RASTER_ELEM_SIZE) def test_get_pixel(self): self.assertAlmostEqual(self.raster.get_pixel(0, 0), self.TEST_DATA[0, 0]) def test_get_pixel_invalid_x(self): self.assertRaises(ValueError, self.raster.get_pixel, -1, 0) self.assertRaises(ValueError, self.raster.get_pixel, self.RASTER_WIDTH + 1, 0) def test_get_pixel_invalid_y(self): self.assertRaises(ValueError, self.raster.get_pixel, 0, -1) self.assertRaises(ValueError, self.raster.get_pixel, 0, self.RASTER_HEIGHT + 1) def test_get_pixel_invalid_coor(self): self.assertRaises(ValueError, self.raster.get_pixel, -1, -1) self.assertRaises(ValueError, self.raster.get_pixel, self.RASTER_WIDTH + 1, self.RASTER_HEIGHT + 1) def test_get_pixel_type(self): self.assertEqual(type(self.raster.get_pixel(0, 0)), float) def test_data_type_property(self): self.assertEqual(self.raster.data_type, self.RASTER_DATA_TYPE) def test_source_width_property(self): self.assertEqual(self.raster.source_width, self.RASTER_WIDTH) self.assertTrue(isinstance(self.raster.source_width, numbers.Integral)) def test_source_height_property(self): self.assertEqual(self.raster.source_height, self.RASTER_HEIGHT) self.assertTrue(isinstance(self.raster.source_height, numbers.Integral)) def test_source_step_x_property(self): self.assertEqual(self.raster.source_step_x, 1) self.assertTrue(isinstance(self.raster.source_step_x, numbers.Integral)) def test_source_step_y_property(self): self.assertEqual(self.raster.source_step_y, 1) self.assertTrue(isinstance(self.raster.source_step_y, numbers.Integral)) def test_data_property(self): height = self.raster.get_height() width = self.raster.get_width() data = self.raster.data self.assertTrue(isinstance(data, np.ndarray)) self.assertEqual(data.ndim, 2) self.assertEqual(data.shape, (height, width)) self.assertEqual(data.dtype, EPR_TO_NUMPY_TYPE[self.raster.data_type]) ny, nx = self.TEST_DATA.shape self.assertTrue(np.allclose(data[:ny, :nx], self.TEST_DATA)) def test_data_property_two_times(self): data1 = self.raster.data data2 = self.raster.data self.assertTrue(data1 is data2) self.assertTrue(np.all(data1 == data2)) def test_data_property_shared_data_semantic(self): data1 = self.raster.data data1[0, 0] *= 2 data2 = self.raster.data self.assertTrue(np.all(data1 == data2)) def test_data_property_data_scope(self): data1 = self.raster.data self.assertTrue(isinstance(data1, np.ndarray)) data1 = None data2 = self.raster.data self.assertTrue(isinstance(data2, np.ndarray)) def test_data_property_raster_scope(self): data = self.raster.data self.assertTrue(isinstance(data, np.ndarray)) self.raster = None self.assertTrue(isinstance(data, np.ndarray)) ny, nx = self.TEST_DATA.shape self.assertTrue(np.allclose(data[:ny, :nx], self.TEST_DATA)) class TestRasterRead(TestRaster): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) BAND_NAME = TestBand.BAND_NAME RASTER_XOFFSET = TestBand.XOFFSET RASTER_YOFFSET = TestBand.YOFFSET TEST_DATA = TestBand.TEST_DATA def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.band = self.product.get_band(self.BAND_NAME) self.raster = self.band.create_compatible_raster(self.RASTER_WIDTH, self.RASTER_HEIGHT) self.band.read_raster(self.RASTER_XOFFSET, self.RASTER_YOFFSET, self.raster) def test_data_property_shared_semantics_readload(self): data1 = self.raster.data data1[0, 0] *= 2 self.band.read_raster(self.RASTER_XOFFSET, self.RASTER_YOFFSET, self.raster) data2 = self.raster.data self.assertEqual(data1[0, 0], data2[0, 0]) self.assertTrue(np.all(data1 == data2)) class TestRasterHighLevelAPI(unittest.TestCase): RASTER_WIDTH = 400 RASTER_HEIGHT = 300 RASTER_DATA_TYPE = epr.E_TID_FLOAT def setUp(self): self.raster = epr.create_raster(self.RASTER_DATA_TYPE, self.RASTER_WIDTH, self.RASTER_HEIGHT) def test_repr(self): pattern = (' (?P\w+) ' '\((?P\d+)L x (?P\d+)P\)') mobj = re.match(pattern, repr(self.raster)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('data_type'), epr.data_type_id_to_str(self.raster.data_type)) self.assertEqual(mobj.group('lines'), str(self.raster.get_height())) self.assertEqual(mobj.group('pixels'), str(self.raster.get_width())) def test_repr_type(self): self.assertTrue(isinstance(repr(self.raster), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.raster), str)) class TestRecord(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Quality_ADS' NUM_FIELD = 21 FIELD_NAME = 'perc_water_abs_aero' def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) def test_get_num_fields(self): self.assertEqual(self.record.get_num_fields(), self.NUM_FIELD) @quiet def test_print_(self): self.record.print_() @quiet def test_print_ostream(self): self.record.print_(sys.stderr) def test_print_invalid_ostream(self): self.assertRaises(TypeError, self.record.print_, 'invalid') @quiet def test_print_element(self): self.record.print_element(3, 0) @quiet def test_print_element_ostream(self): self.record.print_element(0, 0, sys.stderr) def test_print_element_invalid_ostream(self): self.assertRaises(TypeError, self.record.print_element, 0, 0, 'invalid') def test_print_element_field_out_of_range(self): index = self.record.get_num_fields() + 10 self.assertRaises(ValueError, self.record.print_element, index, 0) def test_print_element_element_out_of_range(self): self.assertRaises(ValueError, self.record.print_element, 0, 150) def test_get_field(self): field = self.record.get_field(self.FIELD_NAME) self.assertTrue(isinstance(field, epr.Field)) if 'unicode' in dir(__builtins__): def test_get_field_unicode(self): field = self.record.get_field(unicode(self.FIELD_NAME)) self.assertTrue(isinstance(field, epr.Field)) else: def test_get_field_bytes(self): field_name = self.FIELD_NAME.encode('UTF-8') field = self.record.get_field(self.FIELD_NAME) self.assertTrue(isinstance(field_name, bytes)) self.assertTrue(isinstance(field, epr.Field)) def test_get_field_invlid_name(self): self.assertRaises(ValueError, self.record.get_field, '') def test_get_field_at(self): self.assertTrue(isinstance(self.record.get_field_at(0), epr.Field)) def test_get_field_at_invalid_index(self): index = self.record.get_num_fields() + 10 self.assertRaises(ValueError, self.record.get_field_at, index) class TestRecordHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestRecord.DATASET_NAME FIELD_NAMES = [ 'dsr_time', 'attach_flag', 'perc_water_abs_aero', 'perc_water', 'perc_ddv_land', 'perc_land', 'perc_cloud', 'perc_low_poly_press', 'perc_low_neural_press', 'perc_out_ran_inp_wvapour', 'per_out_ran_outp_wvapour', 'perc_out_range_inp_cl', 'perc_out_ran_outp_cl', 'perc_in_ran_inp_land', 'perc_out_ran_outp_land', 'perc_out_ran_inp_ocean', 'perc_out_ran_outp_ocean', 'perc_out_ran_inp_case1', 'perc_out_ran_outp_case1', 'perc_out_ran_inp_case2', 'perc_out_ran_outp_case2', ] def setUp(self): product = epr.Product(self.PRODUCT_FILE) self.dataset = product.get_dataset(self.DATASET_NAME) self.record = self.dataset.read_record(0) def test_get_field_names_number(self): self.assertEqual(len(self.record.get_field_names()), self.record.get_num_fields()) def test_get_field_names(self): self.assertEqual(self.record.get_field_names()[:len(self.FIELD_NAMES)], self.FIELD_NAMES) def test_fields(self): fields = self.record.fields() self.assertTrue(fields) self.assertEqual(len(fields), self.record.get_num_fields()) names = [field.get_name() for field in fields] self.assertEqual(self.record.get_field_names(), names) def test_iter(self): index = 0 for field in self.record: ref_field = self.record.get_field_at(index) self.assertEqual(field.get_name(), ref_field.get_name()) index += 1 self.assertEqual(index, self.record.get_num_fields()) def test_repr_type(self): self.assertTrue(isinstance(repr(self.record), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.record), str)) class TestMultipleRecordsHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): product = epr.Product(self.PRODUCT_FILE) self.dataset = product.get_dataset(self.DATASET_NAME) def test_repr(self): pattern = ' (?P\d+) fields' for record in self.dataset: mobj = re.match(pattern, repr(record)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('num'), str(record.get_num_fields())) def test_str_vs_print(self): for record in self.dataset: with tempfile.TemporaryFile('w+') as fd: record.print_(fd) fd.flush() fd.seek(0) data = fd.read() if data.endswith('\n'): data = data[:-1] self.assertEqual(data, str(record)) class TestMphRecordHighLevelAPI(TestRecordHighLevelAPI): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'MPH' FIELD_NAMES = [ 'PRODUCT', 'PROC_STAGE', 'REF_DOC', 'ACQUISITION_STATION', 'PROC_CENTER', 'PROC_TIME', 'SOFTWARE_VER', 'SENSING_START', 'SENSING_STOP', 'PHASE', 'CYCLE', 'REL_ORBIT', ] def setUp(self): product = epr.Product(self.PRODUCT_FILE) self.record = product.get_mph() class TestRecordOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Quality_ADS' NUM_FIELD = 21 FIELD_NAME = 'perc_water_abs_aero' FIELD_NAMES = TestRecordHighLevelAPI.FIELD_NAMES def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) product.close() # @TODO: check #def test_get_num_fields(self): # self.assertEqual(self.record.get_num_fields(), self.NUM_FIELD) def test_print_(self): self.assertRaises(ValueError, self.record.print_) def test_print_element(self): self.assertRaises(ValueError, self.record.print_element, 3, 0) def test_get_field(self): self.assertRaises(ValueError, self.record.get_field, self.FIELD_NAME) def test_get_field_at(self): self.assertRaises(ValueError, self.record.get_field_at, 0) def test_get_field_names(self): self.assertRaises(ValueError, self.record.get_field_names) def test_fields(self): self.assertRaises(ValueError, self.record.fields) def test_iter(self): self.assertRaises(ValueError, iter, self.record) def test_repr(self): self.assertRaises(ValueError, repr, self.record) def test_str(self): self.assertRaises(ValueError, str, self.record) class TestField(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Quality_ADS' FIELD_NAME = 'perc_water_abs_aero' FIELD_DESCRIPTION = '% of water pixels having absorbing aerosols' FIELD_TYPE = epr.E_TID_UCHAR FIELD_TYPE_NAME = 'byte' FIELD_NUM_ELEMS = 1 FIELD_VALUES = (81,) FIELD_UNIT = '%' def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) record = dataset.read_record(0) self.field = record.get_field(self.FIELD_NAME) @quiet def test_print_field(self): self.field.print_() @quiet def test_print_field_ostream(self): self.field.print_(sys.stderr) def test_print_fied_invalid_ostream(self): self.assertRaises(TypeError, self.field.print_, 'invalid') def test_get_unit(self): self.assertEqual(self.field.get_unit(), self.FIELD_UNIT) def test_get_description(self): self.assertEqual(self.field.get_description(), self.FIELD_DESCRIPTION) def test_get_num_elems(self): self.assertEqual(self.field.get_num_elems(), self.FIELD_NUM_ELEMS) def test_get_name(self): self.assertEqual(self.field.get_name(), self.FIELD_NAME) def test_get_type(self): self.assertEqual(self.field.get_type(), self.FIELD_TYPE) def test_get_elem(self): self.assertEqual(self.field.get_elem(), self.FIELD_VALUES[0]) def test_get_elem_index(self): self.assertEqual(self.field.get_elem(0), self.FIELD_VALUES[0]) def test_get_elem_invalid_index(self): self.assertRaises(ValueError, self.field.get_elem, self.FIELD_NUM_ELEMS + 10) def test_get_elems(self): vect = self.field.get_elems() self.assertTrue(isinstance(vect, np.ndarray)) self.assertEqual(vect.shape, (self.field.get_num_elems(),)) self.assertEqual(vect.dtype, np.int8) self.assertTrue(np.allclose(vect[:len(self.FIELD_VALUES)], self.FIELD_VALUES)) class TestFieldWithMiltipleElems(TestField): DATASET_NAME = TestProduct.DATASET_NAME FIELD_NAME = 'wvapour_cont_pix' FIELD_DESCRIPTION = 'Water Vapour Content pixel #1- #281' FIELD_TYPE = epr.E_TID_UCHAR FIELD_TYPE_NAME = 'float' FIELD_NUM_ELEMS = 281 FIELD_VALUES = (1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2) FIELD_UNIT = '' class TestFieldHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = TestProduct.DATASET_NAME def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) def test_repr(self): pattern = ('epr\.Field\("(?P.+)"\) (?P\d+) ' '(?P\w+) elements') for field in self.record: mobj = re.match(pattern, repr(field)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), field.get_name()) self.assertEqual(mobj.group('num'), str(field.get_num_elems())) self.assertEqual(mobj.group('type'), epr.data_type_id_to_str(field.get_type())) def test_repr_type(self): field = self.record.get_field_at(0) self.assertTrue(isinstance(repr(field), str)) def test_str_type(self): field = self.record.get_field_at(0) self.assertTrue(isinstance(str(field), str)) def test_str_vs_print(self): for field in self.record: with tempfile.TemporaryFile('w+') as fd: field.print_(fd) fd.flush() fd.seek(0) data = fd.read() if data.endswith('\n'): data = data[:-1] self.assertEqual(data, str(field)) def test_eq_field1_field1(self): field = self.record.get_field_at(0) self.assertEqual(field, field) def test_eq_field1_field2(self): field1 = self.record.get_field_at(1) field2 = self.record.get_field_at(2) self.assertFalse(field1 == field2) def test_eq_field_record(self): field = self.record.get_field_at(0) self.assertFalse(field == self.record) def test_ne_field1_field1(self): field = self.record.get_field_at(0) self.assertFalse(field != field) def test_ne_field1_field2(self): field1 = self.record.get_field_at(1) field2 = self.record.get_field_at(2) self.assertNotEqual(field1, field2) def test_ne_field_record(self): field = self.record.get_field_at(0) self.assertNotEqual(field, self.record) class TestFieldHighLevelAPI2(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) def test_len_1(self): dataset = self.product.get_dataset_at(0) record = dataset.read_record(0) field = record.get_field('perc_water_abs_aero') self.assertEqual(len(field), field.get_num_elems()) def test_len_x(self): dataset = self.product.get_dataset_at(5) record = dataset.read_record(0) field = record.get_field('wvapour_cont_pix') self.assertEqual(len(field), field.get_num_elems()) def test_len_e_tid_unknown(self): dataset = self.product.get_dataset_at(1) record = dataset.read_record(0) field = record.get_field('spare_1') self.assertEqual(len(field), field.get_num_elems()) #def test_len_e_tid_string(self): # dataset = self.product.get_dataset_at(0) # record = dataset.read_record(0) # field = record.get_field('filter_window') # self.assertEqual(len(field), len(field.get_elem())) class TestFieldOnClosedProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DATASET_NAME = 'Quality_ADS' FIELD_NAME = 'perc_water_abs_aero' def setUp(self): product = epr.Product(self.PRODUCT_FILE) dataset = product.get_dataset(self.DATASET_NAME) self.record = dataset.read_record(0) self.field = self.record.get_field(self.FIELD_NAME) self.field2 = self.record.get_field_at(4) product.close() def test_print_field(self): self.assertRaises(ValueError, self.field.print_) def test_get_unit(self): self.assertRaises(ValueError, self.field.get_unit) def test_get_description(self): self.assertRaises(ValueError, self.field.get_description) def test_get_num_elems(self): self.assertRaises(ValueError, self.field.get_num_elems) def test_get_name(self): self.assertRaises(ValueError, self.field.get_name) def test_get_type(self): self.assertRaises(ValueError, self.field.get_type) def test_get_elem(self): self.assertRaises(ValueError, self.field.get_elem) def test_get_elems(self): self.assertRaises(ValueError, self.field.get_elems) def test_repr(self): self.assertRaises(ValueError, repr, self.field) def test_str(self): self.assertRaises(ValueError, str, self.field) def test_eq(self): self.assertRaises(ValueError, operator.eq, self.field, self.field2) def test_ne(self): self.assertRaises(ValueError, operator.ne, self.field, self.field2) def test_len(self): self.assertRaises(ValueError, len, self.field) class TestDSD(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DSD_INDEX = 0 DS_NAME = 'Quality ADS' DS_OFFSET = 12869 DS_TYPE = 'A' DS_SIZE = 160 DSR_SIZE = 32 NUM_DSR = 5 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dsd = self.product.get_dsd_at(self.DSD_INDEX) def test_index(self): self.assertEqual(self.dsd.index, self.DSD_INDEX) self.assertTrue(isinstance(self.dsd.index, int)) def test_ds_name(self): self.assertEqual(self.dsd.ds_name, self.DS_NAME) self.assertTrue(isinstance(self.dsd.ds_name, str)) def test_ds_type(self): self.assertEqual(self.dsd.ds_type, self.DS_TYPE) self.assertTrue(isinstance(self.dsd.ds_type, str)) def test_filename(self): self.assertEqual(self.dsd.filename, '') self.assertTrue(isinstance(self.dsd.filename, str)) def test_ds_offset(self): self.assertEqual(self.dsd.ds_offset, self.DS_OFFSET) self.assertTrue(isinstance(self.dsd.ds_offset, numbers.Integral)) def test_ds_size(self): self.assertEqual(self.dsd.ds_size, self.DS_SIZE) self.assertTrue(isinstance(self.dsd.ds_size, numbers.Integral)) def test_num_dsr(self): self.assertEqual(self.dsd.num_dsr, self.NUM_DSR) self.assertTrue(isinstance(self.dsd.num_dsr, numbers.Integral)) def test_dsr_size(self): self.assertEqual(self.dsd.dsr_size, self.DSR_SIZE) self.assertTrue(isinstance(self.dsd.dsr_size, numbers.Integral)) def test_eq_dsd1_dsd1(self): self.assertEqual(self.dsd, self.dsd) def test_eq_dsd1_dsd2(self): dsd1 = self.product.get_dsd_at(1) dsd2 = self.product.get_dsd_at(2) self.assertFalse(dsd1 == dsd2) def test_eq_dsd_product(self): self.assertFalse(self.dsd == self.product) def test_ne_dsd1_dsd1(self): self.assertFalse(self.dsd != self.dsd) def test_ne_dsd1_dsd2(self): dsd1 = self.product.get_dsd_at(1) dsd2 = self.product.get_dsd_at(2) self.assertNotEqual(dsd1, dsd2) def test_ne_dsd_record(self): self.assertTrue(self.dsd != self.product) class TestDsdHighLevelAPI(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) def setUp(self): product = epr.Product(self.PRODUCT_FILE) self.dsd = product.get_dsd_at(0) def test_repr(self): pattern = 'epr\.DSD\("(?P.+)"\)' mobj = re.match(pattern, repr(self.dsd)) self.assertNotEqual(mobj, None) self.assertEqual(mobj.group('name'), self.dsd.ds_name) def test_repr_type(self): self.assertTrue(isinstance(repr(self.dsd), str)) def test_str_type(self): self.assertTrue(isinstance(str(self.dsd), str)) class TestDSDOnCloserProduct(unittest.TestCase): PRODUCT_FILE = os.path.join(TESTDIR, TEST_PRODUCT) DSD_INDEX = 0 def setUp(self): self.product = epr.Product(self.PRODUCT_FILE) self.dsd = self.product.get_dsd_at(self.DSD_INDEX) self.dsd2 = self.product.get_dsd_at(self.DSD_INDEX + 1) self.product.close() def test_index(self): self.assertRaises(ValueError, getattr, self.dsd, 'index') def test_ds_name(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_name') def test_ds_type(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_type') def test_filename(self): self.assertRaises(ValueError, getattr, self.dsd, 'filename') def test_ds_offset(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_offset') def test_ds_size(self): self.assertRaises(ValueError, getattr, self.dsd, 'ds_size') def test_num_dsr(self): self.assertRaises(ValueError, getattr, self.dsd, 'num_dsr') def test_dsr_size(self): self.assertRaises(ValueError, getattr, self.dsd, 'dsr_size') def test_eq(self): self.assertRaises(ValueError, operator.eq, self.dsd, self.dsd2) def test_ne(self): self.assertRaises(ValueError, operator.ne, self.dsd, self.dsd2) def test_repr(self): self.assertRaises(ValueError, repr, self.dsd) def test_str(self): self.assertRaises(ValueError, str, self.dsd) class TestDataypeFunctions(unittest.TestCase): TYPE_NAMES = { epr.E_TID_UNKNOWN: '', epr.E_TID_UCHAR: 'uchar', epr.E_TID_CHAR: 'char', epr.E_TID_USHORT: 'ushort', epr.E_TID_SHORT: 'short', epr.E_TID_UINT: 'uint', epr.E_TID_INT: 'int', epr.E_TID_FLOAT: 'float', epr.E_TID_DOUBLE: 'double', epr.E_TID_STRING: 'string', epr.E_TID_SPARE: 'spare', epr.E_TID_TIME: 'time', } TYPE_SIZES = { epr.E_TID_UNKNOWN: 0, epr.E_TID_UCHAR: 1, epr.E_TID_CHAR: 1, epr.E_TID_USHORT: 2, epr.E_TID_SHORT: 2, epr.E_TID_UINT: 4, epr.E_TID_INT: 4, epr.E_TID_FLOAT: 4, epr.E_TID_DOUBLE: 8, epr.E_TID_STRING: 1, epr.E_TID_SPARE: 1, epr.E_TID_TIME: 12, } def test_data_type_id_to_str(self): for type_id, type_name in self.TYPE_NAMES.items(): self.assertEqual(epr.data_type_id_to_str(type_id), type_name) def test_data_type_id_to_str_invalid(self): self.assertEqual(epr.data_type_id_to_str(500), '') def test_get_data_type_size(self): for type_id, type_size in self.TYPE_SIZES.items(): self.assertEqual(epr.get_data_type_size(type_id), type_size) def test_get_data_type_size_invalid(self): self.assertEqual(epr.get_data_type_size(500), 0) class TestScalingMethodFunctions(unittest.TestCase): METHOD_NAMES = { epr.E_SMID_NON: 'NONE', epr.E_SMID_LIN: 'LIN', epr.E_SMID_LOG: 'LOG', } def test_get_scaling_method_name(self): for id_, name in self.METHOD_NAMES.items(): self.assertEqual(epr.get_scaling_method_name(id_), name) def test_get_scaling_method_name_invalid(self): self.assertRaises(ValueError, epr.get_scaling_method_name, 500) class TestSampleModelFunctions(unittest.TestCase): MODEL_NAMES = { epr.E_SMOD_1OF1: '1OF1', epr.E_SMOD_1OF2: '1OF2', epr.E_SMOD_2OF2: '2OF2', epr.E_SMOD_3TOI: '3TOI', epr.E_SMOD_2TOF: '2TOF', } def test_get_scaling_method_name(self): for id_, name in self.MODEL_NAMES.items(): self.assertEqual(epr.get_sample_model_name(id_), name) def test_get_scaling_method_name_invalid(self): self.assertRaises(ValueError, epr.get_sample_model_name, 500) class TestDirectInstantiation(unittest.TestCase): MSG_PATTERN = '"%s" class cannot be instantiated from Python' if sys.version_info[:2] >= (3, 2): # @COMPATIBILITY: python >= 3.2 pass elif sys.version_info[:2] in ((2, 7), (3, 1)): # @COMPATIBILITY: unittest2, python2.7, python3.1 assertRaisesRegex = unittest.TestCase.assertRaisesRegexp else: # @COMPATIBILITY: python < 2.7 def assertRaisesRegex(self, expected_exception, expected_regexp, callable_obj=None, *args, **kwargs): try: callable_obj(*args, **kwargs) except expected_exception as exc_value: import types if isinstance(expected_regexp, types.StringTypes): expected_regexp = re.compile(expected_regexp) if not expected_regexp.search(str(exc_value)): raise self.failureException( '"%s" does not match "%s"' % (expected_regexp.pattern, str(exc_value))) else: if hasattr(expected_exception, '__name__'): excName = expected_exception.__name__ else: excName = str(expected_exception) raise self.failureException("%s not raised" % excName) def test_direct_dsd_instantiation(self): pattern = self.MSG_PATTERN % epr.DSD.__name__ self.assertRaisesRegex(TypeError, pattern, epr.DSD) def test_direct_field_instantiation(self): pattern = self.MSG_PATTERN % epr.Field.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Field) def test_direct_record_instantiation(self): pattern = self.MSG_PATTERN % epr.Record.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Record) def test_direct_raster_instantiation(self): pattern = self.MSG_PATTERN % epr.Raster.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Raster) def test_direct_band_instantiation(self): pattern = self.MSG_PATTERN % epr.Band.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Band) def test_direct_dataset_instantiation(self): pattern = self.MSG_PATTERN % epr.Dataset.__name__ self.assertRaisesRegex(TypeError, pattern, epr.Dataset) def test_direct_Product_instantiation(self): self.assertRaises(epr.EPRError, epr.Product, 'filename') class TestLibVersion(unittest.TestCase): def test_c_api_version(self): self.assertTrue(isinstance(epr.EPR_C_API_VERSION, str)) if __name__ == '__main__': print('PyEPR: %s' % epr.__version__) print('EPR API: %s' % epr.EPR_C_API_VERSION) print('Python: %s' % sys.version) unittest.main()